@acorex/platform 21.0.0-next.70 → 21.0.0-next.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +10 -2
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-Ytey9uhY.mjs} +15 -1
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +3798 -1674
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1362 -97
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-builder.mjs +446 -44
  10. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-components.mjs +149 -109
  12. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-designer.mjs +199 -126
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs → acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs} +6 -1
  16. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-layout-entity.mjs +823 -594
  18. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-views.mjs +845 -218
  20. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-widget-core.mjs +122 -33
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  23. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map} +1 -1
  27. package/fesm2022/acorex-platform-layout-widgets.mjs +312 -676
  28. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs +48 -0
  30. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs +42 -0
  32. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-themes-default.mjs +89 -46
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/fesm2022/acorex-platform-themes-shared.mjs +50 -30
  36. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  37. package/package.json +1 -1
  38. package/types/acorex-platform-auth.d.ts +2 -0
  39. package/types/acorex-platform-common.d.ts +899 -256
  40. package/types/acorex-platform-core.d.ts +394 -60
  41. package/types/acorex-platform-layout-builder.d.ts +78 -13
  42. package/types/acorex-platform-layout-components.d.ts +30 -24
  43. package/types/acorex-platform-layout-entity.d.ts +93 -44
  44. package/types/acorex-platform-layout-views.d.ts +162 -42
  45. package/types/acorex-platform-layout-widget-core.d.ts +60 -33
  46. package/types/acorex-platform-layout-widgets.d.ts +48 -20
  47. package/types/acorex-platform-themes-default.d.ts +38 -8
  48. package/types/acorex-platform-themes-shared.d.ts +6 -0
  49. package/types/acorex-platform-workflow.d.ts +1 -1
  50. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
  51. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +0 -1
  52. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +0 -31
  53. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
  54. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +0 -25
  55. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.types.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.provider.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.service.ts","../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/application.types.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/app/date-filter-presets.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/settings/regional-settings.keys.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings-coercion.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.types.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition.types.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/status-definition/statuses.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/debug.service.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["//#region ---- Output kind & segment ----\n\n/** JSON data primitive for the specialist final deliverable. */\nexport type AXPAgentOutputKind = 'string' | 'object' | 'array';\n\n/** When `kind` is `object`, controls how the parsed value maps into chat transcript segments. */\nexport type AXPOutputTranscriptSegmentId = 'text' | 'node' | 'followUp' | 'file';\n\n//#endregion\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n */\nexport interface AXPJsonSchemaLike {\n type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n properties?: Record<string, AXPJsonSchemaLike>;\n items?: AXPJsonSchemaLike | AXPJsonSchemaLike[];\n required?: string[];\n enum?: unknown[];\n additionalProperties?: boolean | AXPJsonSchemaLike;\n description?: string;\n [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Provider response format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAgentResponseFormat =\n | { type: 'text' }\n | { type: 'json_object' }\n | {\n type: 'json_schema';\n schema: AXPJsonSchemaLike;\n name?: string;\n strict?: boolean;\n };\n\n//#endregion\n\n//#region ---- Output contract ----\n\n/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAgentOutputContract {\n kind: AXPAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPOutputTranscriptSegmentId;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAgentResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Transcript segment definition ----\n\n/**\n * Registered preset for an output-contract transcript segment.\n * Modules register via {@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}.\n */\nexport interface AXPOutputContractTranscriptSegmentDefinition {\n /** Segment id (`text`, `node`, `followUp`). */\n name: AXPOutputTranscriptSegmentId;\n /** i18n key or display title for admin UI selects. */\n title: string;\n description?: string;\n /** Contract kinds this segment applies to (defaults to `object` only). */\n applicableKinds?: AXPAgentOutputKind[];\n /** Default `outputContract` field values when this segment is chosen. */\n contract: AXPAgentOutputContract;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPOutputContractTranscriptSegmentDefinition } from './output-contract-transcript-segment.types';\n\n//#region ---- Provider token ----\n\nexport type AXPOutputContractTranscriptSegmentProviderToken =\n | AXPOutputContractTranscriptSegmentProvider\n | Promise<AXPOutputContractTranscriptSegmentProvider>;\n\n/**\n * Registers one or more transcript-segment presets for agent/assist `outputContract`.\n * Use with `multi: true` in module providers.\n */\nexport interface AXPOutputContractTranscriptSegmentProvider {\n provide():\n | AXPOutputContractTranscriptSegmentDefinition[]\n | Promise<AXPOutputContractTranscriptSegmentDefinition[]>;\n}\n\nexport const AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER = new InjectionToken<\n AXPOutputContractTranscriptSegmentProviderToken[]\n>('AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER', {\n factory: () => [],\n});\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from './output-contract-transcript-segment.provider';\nimport type {\n AXPAgentOutputContract,\n AXPOutputContractTranscriptSegmentDefinition,\n AXPOutputTranscriptSegmentId,\n} from './output-contract-transcript-segment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPOutputContractTranscriptSegmentService {\n //#region ---- Dependencies & cache ----\n\n private readonly segmentProviders =\n inject(AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, { optional: true }) ?? [];\n\n private definitionsByName = new Map<string, AXPOutputContractTranscriptSegmentDefinition>();\n private loadPromise: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** All registered transcript segment definitions (deduped by `name`). */\n async getAll(): Promise<AXPOutputContractTranscriptSegmentDefinition[]> {\n await this.ensureLoaded();\n return [...this.definitionsByName.values()];\n }\n\n /** Lookup by segment id (`text`, `node`, `followUp`). */\n async get(\n name: AXPOutputTranscriptSegmentId,\n ): Promise<AXPOutputContractTranscriptSegmentDefinition | undefined> {\n await this.ensureLoaded();\n return this.definitionsByName.get(name);\n }\n\n /** Default `outputContract` for a segment, or `undefined` when not registered. */\n async getContractPreset(name: AXPOutputTranscriptSegmentId): Promise<AXPAgentOutputContract | undefined> {\n const definition = await this.get(name);\n return definition?.contract;\n }\n\n /** Clears the in-memory registry (e.g. after hot reload in dev). */\n clearCache(): void {\n this.definitionsByName.clear();\n this.loadPromise = null;\n }\n\n //#endregion\n\n //#region ---- Load ----\n\n private async ensureLoaded(): Promise<void> {\n if (this.loadPromise) {\n return this.loadPromise;\n }\n this.loadPromise = this.loadDefinitions();\n return this.loadPromise;\n }\n\n private async loadDefinitions(): Promise<void> {\n const resolvedProviders = await Promise.all(this.segmentProviders);\n\n for (const provider of resolvedProviders) {\n if (!provider) {\n continue;\n }\n const definitions = await Promise.resolve(provider.provide());\n for (const definition of definitions) {\n if (!definition?.name) {\n continue;\n }\n if (this.definitionsByName.has(definition.name)) {\n console.warn(\n `[AXPOutputContractTranscriptSegmentService] Segment \"${definition.name}\" already registered; overwriting.`,\n );\n }\n this.definitionsByName.set(definition.name, definition);\n }\n }\n }\n\n //#endregion\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","import { AXDataSourceOperator, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport {\n AXPExpression,\n AXPFilterDefinition,\n AXPGridLayoutOptions,\n AXPMetaData,\n AXPOptionsData,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { kebabCase } from 'lodash-es';\n\nexport interface AXEntityPropertyWidget {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n path?: string;\n id?: string;\n children?: AXEntityPropertyWidget[];\n mode: 'view' | 'edit';\n options?: Record<string, any>;\n triggers?: { event: string; action: string; disabled?: boolean }[];\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport enum AXPRelationshipKind {\n Association,\n Composition,\n Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n OneToOne,\n OneToMany,\n ManyToMany,\n}\n\nexport interface AXPRelationship {\n id: string;\n from: string;\n to: string;\n kind: AXPRelationshipKind;\n cardinality: AXPRelationshipCardinality;\n}\n\nexport enum AXPEntityCommandScope {\n TypeLevel = 'typeLevel',\n Selected = 'selected',\n Individual = 'individual',\n Section = 'section',\n}\n\nexport enum AXPEntityQueryType {\n Single = 'single',\n List = 'list',\n}\n\nexport interface AXPEntityPropertyLayoutConfig extends AXPGridLayoutOptions {\n label?: {\n visible?: boolean;\n };\n order?: number;\n visible?: boolean | AXPExpression;\n}\n\nexport interface AXPEntityPropertyGroup {\n id: string;\n title: string;\n description?: string;\n permissions?: string[];\n icon?: string;\n}\n\nexport interface AXPEntityPropertyView {\n name: string;\n dataPath?: string;\n permissions?: string[];\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityPropertyUpdateView extends AXPEntityPropertyView {}\n\nexport interface AXPEntityPropertyCreateView extends AXPEntityPropertyView {\n defaultValue?: any;\n}\n\nexport interface AXPEntitySectionView {\n id: string;\n order?: number;\n collapsed?: boolean;\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityProperty {\n name: string;\n title: string;\n description?: string;\n groupId?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean | string;\n visible?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n unique?: {\n enabled: boolean;\n };\n interface?: Partial<AXEntityPropertyWidget>;\n };\n options?: {\n filter?: {\n advance?: {\n enabled?: boolean;\n widgetType?: AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n };\n inline?: {\n enabled?: boolean;\n };\n preload?: {\n enabled?: boolean;\n required?: boolean;\n };\n };\n sort?: {\n enabled?: boolean;\n };\n };\n validations?: AXPValidationRules;\n}\n\n/** Logical alignment for table column header/cell (respects RTL). */\nexport type AXPColumnContentAlign = 'start' | 'center' | 'end';\n\n/**\n * Column alignment: shorthand applies to both header and cell;\n * object form sets each side independently (omitted keys default to start).\n */\nexport type AXPColumnAlign =\n | AXPColumnContentAlign\n | {\n header?: AXPColumnContentAlign;\n cell?: AXPColumnContentAlign;\n };\n\n/** Shared field definition for list layouts (table columns, card fields, etc.). */\nexport interface AXPEntityDisplayField {\n name: string;\n title?: string;\n showAs?: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: Record<string, any>;\n };\n options?: {\n /** When string, evaluate against parent detail context (e.g. related list). */\n visible?: boolean | string;\n /** Optional dataPath override for field binding. */\n dataPath?: string;\n [name: string]: any;\n };\n}\n\n/** Card layout field presentation in master list card view. */\nexport type AXPCardFieldDisplay = 'simple' | 'badge';\n\n/** Badge color: semantic token or per-row expression (`{{ context.eval(...) }}`). */\nexport type AXPCardBadgeColor = AXStyleColorType | AXPExpression;\n\nexport interface AXPCardBadgeDisplayOptions {\n /** Semantic color or expression evaluated against row context. */\n color?: AXPCardBadgeColor;\n}\n\nexport interface AXPCardBadgeDisplay {\n type: 'badge';\n options?: AXPCardBadgeDisplayOptions;\n}\n\n/** Shorthand (`badge` / `simple`) or structured badge config with optional per-row color. */\nexport type AXPCardFieldDisplayConfig = AXPCardFieldDisplay | AXPCardBadgeDisplay;\n\n/** Card layout field in master list view. */\nexport type AXPCardField = AXPEntityDisplayField & {\n layout?: AXPEntityPropertyLayoutConfig;\n /**\n * Field presentation. Default: `simple` (card body).\n * Use `badge` or `{ type: 'badge', options: { color } }` for header chips beside title.\n */\n display?: AXPCardFieldDisplayConfig;\n /**\n * Badge color when presentation is badge-shaped.\n * Prefer `display: { type: 'badge', options: { color } }` for new definitions.\n * Omit for status fields — color is resolved from the status definition per row.\n */\n badgeColor?: AXPCardBadgeColor;\n};\n\n/** Whether the card field is shown as a header badge (not in the card body). */\nexport function isCardFieldBadgeDisplay(\n display: AXPCardFieldDisplayConfig | undefined,\n): display is 'badge' | AXPCardBadgeDisplay {\n if (display === 'badge') {\n return true;\n }\n return typeof display === 'object' && display !== null && display.type === 'badge';\n}\n\n/** Resolves static badge color config from {@link AXPCardField.display} and legacy {@link AXPCardField.badgeColor}. */\nexport function resolveCardFieldBadgeColor(\n field: Pick<AXPCardField, 'display' | 'badgeColor'>,\n): AXPCardBadgeColor | undefined {\n if (typeof field.display === 'object' && field.display.type === 'badge') {\n return field.display.options?.color ?? field.badgeColor;\n }\n if (field.display === 'badge') {\n return field.badgeColor;\n }\n return undefined;\n}\n\nexport interface AXPEntityTableColumn extends AXPEntityDisplayField {\n options?: AXPEntityDisplayField['options'] & {\n /** Initial column width (overrides widget column width when set). */\n width?: string;\n /** Header/cell alignment (shorthand or per-side). */\n align?: AXPColumnAlign;\n };\n}\n\nexport interface AXPEntityCommand {\n execute: string | Function; // As runnable expression\n permissions?: string[];\n}\n\nexport interface AXPEntityQuery {\n execute: string | Function; // As runnable expression\n type: AXPEntityQueryType;\n}\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport type AXPCommandActionType = AXPSystemActionType;\n\nexport interface AXPCommandActionLook {\n color: AXStyleColorType;\n icon: string;\n}\n\nexport type AXPCommandActionPriority = 'primary' | 'secondary';\n\n//TODO: remove extra props\nexport type AXPCommandActionCallback =\n | string\n | {\n name: string;\n options?: {\n decoration?: {\n header?: {\n title?: string;\n };\n };\n process?: {\n data?: any;\n [name: string]: any;\n };\n layout?: {\n size?: AXPopupSizeType;\n };\n [name: string]: any;\n };\n metadata?: AXPMetaData;\n };\n\nexport interface AXPCommandActionDisplay extends Partial<AXPCommandActionLook> {\n name?: string;\n command: AXPCommandActionCallback;\n title: string;\n type: AXPSystemActionType | string;\n priority: 'primary' | 'secondary' | 'none';\n separated?: boolean;\n permissions?: string[];\n hidden?: boolean | string;\n disabled?: boolean | string;\n default?: boolean;\n order?: number;\n}\n\nexport interface AXPEntityAction extends AXPCommandActionDisplay {\n scope: AXPEntityCommandScope;\n /** Child actions for dropdown submenu */\n items?: AXPEntityAction[];\n}\n\nexport interface AXPEntity {\n plugins?: { name: string; options?: AXPOptionsData }[];\n /**\n * High-level rules: when expression evaluates true, apply actions to the given targets\n * (property/section/action). Reduces repetition of the same condition across many properties.\n * Evaluation context: form data, user, entity; precedence vs property-level visible/readonly\n * must be defined where rules are applied.\n */\n rules?: Array<{\n name: string;\n expression: AXPExpression;\n actions: Array<{\n target: {\n type: 'property' | 'section' | 'action';\n name: string;\n };\n values: AXPOptionsData;\n }>;\n }>;\n module: string;\n name: string;\n icon?: string;\n parentKey?: string;\n category?: AXPCategoryEntity;\n title: string;\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n relatedEntities?: AXPRelatedEntity[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n properties: AXPEntityProperty[];\n columns?: AXPEntityTableColumn[];\n commands?: {\n create?: AXPEntityCommand | undefined;\n update?: AXPEntityCommand | undefined;\n delete?: AXPEntityCommand | undefined;\n [name: string]: AXPEntityCommand | undefined;\n };\n queries?: {\n byKey?: AXPEntityQuery;\n list?: AXPEntityQuery;\n lookup?: AXPEntityQuery;\n history?: AXPEntityQuery;\n comments?: AXPEntityQuery;\n [name: string]: AXPEntityQuery | undefined;\n };\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n\nexport function getEntityInfo(entity: AXPEntity) {\n return {\n source: `${entity.module}.${entity.name}`,\n module: {\n route: kebabCase(entity.module),\n },\n entity: {\n route: kebabCase(entity.name),\n },\n };\n}\n\nexport function createQueryView(\n name: string,\n title: string,\n fixed: boolean,\n params: { columns?: string[]; conditions?: any[]; sorts?: AXPQuerySort[] } = {\n columns: [],\n conditions: [],\n sorts: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return {\n name,\n title,\n fixed,\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n };\n}\n\nexport function createAllQueryView(\n params: { columns?: string[]; conditions?: AXPQueryFilter[]; sorts?: AXPQuerySort[] } | undefined = {\n columns: [],\n sorts: [],\n conditions: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return createQueryView('all', '@general:terms.interface.selection.all-items', true, {\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n });\n}\n\nexport interface AXPRelatedEntity {\n entity: string;\n title?: string;\n icon?: string;\n columns?: string[] | AXPEntityTableColumn[];\n properties?: string[];\n excludeProperties?: string[];\n layout?: {\n type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';\n order?: number;\n position?: 'before' | 'after' | 'middle';\n };\n conditions?: AXPQueryFilter[];\n customFilterDefinitions?: Partial<AXPFilterDefinition>[];\n hidden?: boolean | AXPExpression;\n actions?: AXPEntityAction[];\n /**\n * Controls inclusion on the host entity master **create** / **update** form.\n * Defaults depend on layout:\n * - **merge-detail**: omitted flags behave as **true** (opt-out with `false`).\n * - **tab-list** / **page-list**: omitted flags behave as **false** (opt-in with `true`).\n */\n appearOn?: {\n /** Include on host create form (see defaults above per layout type). */\n create?: boolean;\n /** Include on host update form (see defaults above per layout type). */\n update?: boolean;\n };\n /**\n * Relationship-level persistence strategy for merge-detail data.\n * Defaults:\n * - strategy: 'embedded'\n * - idField: last segment of dataPath + 'Id' (or 'relatedId' when dataPath is missing)\n * - map: undefined (pass-through)\n * - hydrate: 'eager' (applies to getOne only in mock)\n * - cascade.delete: 'none'\n */\n persistence?: {\n strategy?: 'embedded' | 'referenced';\n idField?: string;\n dataPath?: string;\n map?: Record<string, string>;\n hydrate?: 'eager' | 'lazy';\n cascade?: { delete?: 'none' | 'orphans' | 'all' };\n foreignKeyField?: string;\n };\n}\n\nexport interface AXPEntityPage {\n /**\n * Key to identify the component in the page component registry\n */\n componentKey: string;\n /**\n * Property name to render when the page component displays an entity field (e.g. 'questions', 'attachments').\n * Passed to the page component as pageConfig.field.\n */\n field?: string;\n /**\n * Title of the page (displayed in navigation)\n */\n title?: AXPMultiLanguageString;\n /**\n * Icon for the page (displayed in navigation)\n */\n icon?: string;\n /**\n * Description of the page\n */\n description?: AXPMultiLanguageString;\n /**\n * Layout configuration for page positioning\n */\n layout?: {\n /**\n * Order of the page (lower numbers appear first)\n */\n order?: number;\n /**\n * Position relative to the main page\n */\n position?: 'before' | 'after' | 'middle';\n };\n /**\n * Visibility condition (boolean or expression string)\n */\n hidden?: boolean | string;\n /**\n * Permissions required to view this page\n */\n permissions?: string[];\n /**\n * Controls inclusion on the host entity master **create** / **update** form wizard.\n * Omitted flags behave as **false** (opt-in with `true`), same as `tab-list` / `page-list` related entities.\n */\n appearOn?: {\n /** Include as a wizard step on host create form. */\n create?: boolean;\n /** Include as a wizard step on host update form. */\n update?: boolean;\n };\n\n options?: Record<string, any>;\n}\n\nexport interface AXPCategoryEntity {\n entity: string;\n title?: string;\n textField?: string;\n valueField?: string;\n conditions?: AXPQueryFilter[];\n applyConditions?: AXPQueryFilter[];\n}\n\nexport interface AXPEntityVersionHistory {\n enabled?: boolean;\n showInList?: boolean;\n showInDetail?: boolean;\n}\n\nexport interface AXPAggregate {\n id: string;\n name: string;\n title: AXPMultiLanguageString;\n entities: AXPEntity[];\n}\n\nexport interface AXPModule {\n name: string;\n title: AXPMultiLanguageString;\n aggregates: AXPAggregate[];\n relationships?: AXPRelationship[];\n}\n\nexport interface AXPApplication {\n name: string;\n title: AXPMultiLanguageString;\n modules: AXPModule[];\n}\n\nexport interface AXPEntityMasterLayoutView {\n title?: string;\n sections: AXPEntitySectionView[];\n properties?: AXPEntityPropertyView[];\n}\n\n/** Quick create config for lookup widgets (+ button) - uses subset of create form */\nexport interface AXPEntityQuickCreate {\n enabled?: boolean;\n properties?: string[];\n layout?: {\n size?: AXPopupSizeType;\n };\n excludeProperties?: string[];\n}\n\nexport interface AXPEntityMasterCreateLayoutView extends AXPEntityMasterLayoutView {\n steps?: {\n id: string;\n title: string;\n description?: string;\n };\n /** Quick create config for lookup widgets - uses subset of create form */\n quickCreate?: AXPEntityQuickCreate;\n}\n\nexport interface AXPEntityMasterUpdateLayoutView extends AXPEntityMasterLayoutView {}\n\nexport interface AXPEntityMasterSingleLayoutView extends AXPEntityMasterLayoutView {\n title: string;\n description?: string;\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPEntityMasterListView {\n title?: string;\n description?: string;\n actions?: AXPEntityAction[];\n views: AXPQueryView[];\n layouts?: {\n table?: {\n enabled?: boolean;\n columns: AXPEntityTableColumn[];\n };\n card?: {\n enabled?: boolean;\n header: {\n /** Property path, expression (`{{ ... }}`), or literal — evaluated per row. */\n title?: string;\n description?: string;\n icon?: string;\n };\n fields: AXPCardField[];\n };\n };\n}\n\nexport type AXPEntityMasterListLayoutType = 'table' | 'card';\n\n/** Master list presentation: table or card with compact (collapsed) / expanded bodies. */\nexport type AXPEntityMasterListDisplayMode = 'table' | 'card-compact' | 'card-expanded';\n\nexport interface AXPEntityMasterListLayoutOption {\n id: AXPEntityMasterListLayoutType;\n title: string;\n icon?: string;\n}\n\n/** Resolves master list layouts that are currently enabled. */\nexport function resolveEnabledMasterListLayouts(\n layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType[] {\n if (!layouts) {\n return ['table'];\n }\n\n const enabled: AXPEntityMasterListLayoutType[] = [];\n\n if (layouts.table?.enabled !== false) {\n enabled.push('table');\n }\n\n if (layouts.card && layouts.card.enabled !== false) {\n enabled.push('card');\n }\n\n return enabled.length > 0 ? enabled : ['table'];\n}\n\n/** First enabled layout; used as the default when no user preference is stored. */\nexport function resolveDefaultMasterListLayout(\n layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType {\n return resolveEnabledMasterListLayouts(layouts)[0];\n}\n\nexport interface AXPEntityDetailListView {\n title?: string;\n description?: string;\n columns: AXPEntityTableColumn[];\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPQueryView {\n name: string;\n fixed: boolean;\n title: string;\n columns: string[];\n conditions: AXPQueryFilter[];\n sorts: AXPQuerySort[];\n indexCol?: boolean;\n pageSize?: number;\n visible?: boolean;\n}\n\nexport interface AXPQueryFilter {\n name: string; // entity property name\n operator: AXDataSourceOperator;\n value: any;\n}\n\nexport interface AXPQuerySort {\n name: string; // entity property name\n dir: 'asc' | 'desc';\n}\n\n// new version\nexport enum AXPEntityType {\n Entity,\n AggregateRoot,\n ValueObject,\n}\n\nexport interface AXPEntityV2 {\n version: 2;\n\n module: string;\n aggregate: string;\n name: string;\n\n type: AXPEntityType;\n\n icon?: string;\n title: string;\n description?: string;\n\n plugins?: { name: string; options?: AXPOptionsData }[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n //TODO : change to fields\n properties: AXPEntityProperty[];\n\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n columns?: AXPEntityTableColumn[];\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import type { AXCalendarService } from '@acorex/core/date-time';\n\nimport { BETWEEN_OPER } from './operators';\n\nexport type AXPDateTimeFilterPresetKind = 'computed' | 'manual';\n\nexport interface AXPDateTimeFilterPreset {\n id: string;\n title: string;\n kind: AXPDateTimeFilterPresetKind;\n operationType?: string;\n}\n\nexport const DEFAULT_DATE_FILTER_PRESETS: AXPDateTimeFilterPreset[] = [\n { id: 'today', title: '@general:terms.date-presets.today', kind: 'computed' },\n { id: 'this-week', title: '@general:terms.date-presets.this-week', kind: 'computed' },\n { id: 'this-month', title: '@general:terms.date-presets.this-month', kind: 'computed' },\n { id: 'yesterday', title: '@general:terms.date-presets.yesterday', kind: 'computed' },\n { id: 'last-week', title: '@general:terms.date-presets.last-week', kind: 'computed' },\n { id: 'last-month', title: '@general:terms.date-presets.last-month', kind: 'computed' },\n { id: 'tomorrow', title: '@general:terms.date-presets.tomorrow', kind: 'computed' },\n { id: 'next-week', title: '@general:terms.date-presets.next-week', kind: 'computed' },\n { id: 'next-month', title: '@general:terms.date-presets.next-month', kind: 'computed' },\n { id: 'between', title: BETWEEN_OPER.title, kind: 'manual', operationType: 'between' },\n { id: 'greater-than', title: '@general:terms.operators.greater-than', kind: 'manual', operationType: 'greaterThan' },\n { id: 'less-than', title: '@general:terms.operators.less-than', kind: 'manual', operationType: 'lessThan' },\n];\n\nexport interface AXPDateTimeFilterValue {\n operation?: { type: string };\n value?: string | { from?: string; to?: string };\n}\n\nexport function resolveDateFilterPresets(\n customPresets?: AXPDateTimeFilterPreset[],\n presetIds?: string[],\n): AXPDateTimeFilterPreset[] {\n let presets = customPresets?.length ? customPresets : DEFAULT_DATE_FILTER_PRESETS;\n if (presetIds?.length) {\n presets = presets.filter((p) => presetIds.includes(p.id));\n }\n return presets;\n}\n\nexport function applyDateFilterPreset(\n presetId: string,\n calendarService: AXCalendarService,\n): AXPDateTimeFilterValue | undefined {\n const currentDate = calendarService.now().date;\n const calendar = calendarService.calendar;\n\n switch (presetId) {\n case 'today':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'day').date.toISOString(),\n to: calendar.endOf(currentDate, 'day').date.toISOString(),\n },\n };\n case 'this-week':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'week').date.toISOString(),\n to: calendar.endOf(currentDate, 'week').date.toISOString(),\n },\n };\n case 'this-month':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'month').date.toISOString(),\n to: calendar.endOf(currentDate, 'month').date.toISOString(),\n },\n };\n case 'yesterday': {\n const yesterday = calendar.add(currentDate, 'day', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: yesterday.startOf('day').date.toISOString(),\n to: yesterday.endOf('day').date.toISOString(),\n },\n };\n }\n case 'last-week': {\n const lastWeek = calendar.add(currentDate, 'week', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastWeek.startOf('week').date.toISOString(),\n to: lastWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'last-month': {\n const lastMonth = calendar.add(currentDate, 'month', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastMonth.startOf('month').date.toISOString(),\n to: lastMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'tomorrow': {\n const tomorrow = calendar.add(currentDate, 'day', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: tomorrow.startOf('day').date.toISOString(),\n to: tomorrow.endOf('day').date.toISOString(),\n },\n };\n }\n case 'next-week': {\n const nextWeek = calendar.add(currentDate, 'week', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextWeek.startOf('week').date.toISOString(),\n to: nextWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'next-month': {\n const nextMonth = calendar.add(currentDate, 'month', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextMonth.startOf('month').date.toISOString(),\n to: nextMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'between':\n return undefined;\n case 'greater-than':\n return { operation: { type: 'greaterThan' } };\n case 'less-than':\n return { operation: { type: 'lessThan' } };\n default:\n return {\n operation: { type: 'between' },\n value: { from: '', to: '' },\n };\n }\n}\n\nexport function findManualPresetIdByOperation(\n operationType: string | undefined,\n presets: AXPDateTimeFilterPreset[],\n): string | undefined {\n if (!operationType) {\n return undefined;\n }\n return presets.find((p) => p.kind === 'manual' && p.operationType === operationType)?.id;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","/**\n * Regional and locale-related setting keys used by platform widgets and components.\n * Most values use the `LocaleManagement:Setting:Regional.*` prefix; definitions live in the locale-management module where applicable.\n */\nexport enum AXPRegionalSetting {\n LocaleProfile = 'LocaleManagement:Setting:Regional.LocaleProfile',\n TimeZone = 'LocaleManagement:Setting:Regional.TimeZone',\n Language = 'LocaleManagement:Setting:Regional.Language',\n Country = 'LocaleManagement:Setting:Regional.Country',\n Calendar = 'LocaleManagement:Setting:Regional.Calendar',\n FirstDayOfWeek = 'LocaleManagement:Setting:Regional.FirstDayOfWeek',\n WeekendDays = 'LocaleManagement:Setting:Regional.WeekendDays',\n ShortDate = 'LocaleManagement:Setting:Regional.ShortDate',\n MediumDate = 'LocaleManagement:Setting:Regional.MediumDate',\n LongDate = 'LocaleManagement:Setting:Regional.LongDate',\n ShortTime = 'LocaleManagement:Setting:Regional.ShortTime',\n MediumTime = 'LocaleManagement:Setting:Regional.MediumTime',\n LongTime = 'LocaleManagement:Setting:Regional.LongTime',\n MeasurementUnits = 'LocaleManagement:Setting:Regional.MeasurementUnits',\n TemperatureUnits = 'LocaleManagement:Setting:Regional.TemperatureUnits',\n DistanceUnits = 'LocaleManagement:Setting:Regional.DistanceUnits',\n WeightUnits = 'LocaleManagement:Setting:Regional.WeightUnits',\n VolumeUnits = 'LocaleManagement:Setting:Regional.VolumeUnits',\n SpeedUnits = 'LocaleManagement:Setting:Regional.SpeedUnits',\n AreaUnits = 'LocaleManagement:Setting:Regional.AreaUnits',\n /** Default multi-language behavior for standard text field names; defined in locale-management `AXMRegionalSettingProvider`. */\n MultiLanguageSupport = 'LocaleManagement:Setting:Regional.MultiLanguageSupport',\n}\n","import { AXPOptionsData, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection, AXPSettingLayoutOptions } from './index';\nimport { AXPPlatformScopeKey } from '@acorex/platform/core';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description: description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPSettingLayoutOptions;\n };\n description?: string;\n searchTagKeys?: string[];\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n searchTagKeys: setting.searchTagKeys,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/core';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPGroupSearchResult, AXPSettingDefaultValuesProvider, AXPSettingDefinitionGroup } from './settings.types';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>(\n 'AXP_SETTING_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSettingDefinitionProviderContext();\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey,\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n }))\n .filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), [(group) => group.priority ?? 1000, 'title']);\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n async settingScopeByKey(): Promise<Record<string, AXPPlatformScope>> {\n const scopes: Record<string, AXPPlatformScope> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n scopes[setting.name] = setting.scope as AXPPlatformScope;\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return scopes;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[],\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [\n ...breadcrumb,\n { name: group.name, title: group.title, description: group.description },\n ];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: [],\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>(\n 'AXP_SETTING_DEFAULT_VALUES_PROVIDERS',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\nexport interface AXPSettingMergedDefaults {\n defaults: Record<string, unknown>;\n /** Per-key scope override for seeding (from providers that set `scope`). */\n seedScopeByKey: Record<string, AXPPlatformScope>;\n}\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getMerged(): Promise<AXPSettingMergedDefaults> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n const seedScopeByKey: Record<string, AXPPlatformScope> = {};\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n if (provider.scope) {\n for (const key of Object.keys(overrideMap)) {\n seedScopeByKey[key] = provider.scope;\n }\n }\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return { defaults: merged, seedScopeByKey };\n }\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const { defaults } = await this.getMerged();\n return defaults;\n }\n}\n","//#region ---- Imports ----\n\nimport {\n coerceUnknownToBoolean,\n coerceUnknownToDate,\n coerceUnknownToFiniteNumber,\n coerceUnknownToTrimmedString,\n unwrapValueProperty,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Supported primitive coercions for persisted setting values (including `{ value: ... }` wrappers).\n */\nexport type AXPSettingCoercionKind = 'string' | 'boolean' | 'number' | 'date';\n\n//#endregion\n\n//#region ---- Kind inference ----\n\n/**\n * If the payload uses the common `{ value: T }` shape from setting widgets, returns the inner value; otherwise returns `raw`.\n */\nexport function peelSettingValueKey(raw: unknown): unknown {\n return unwrapValueProperty(raw);\n}\n\nfunction coercionKindFromScalarSample(v: unknown): AXPSettingCoercionKind | null {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return 'boolean';\n }\n if (typeof v === 'number' && Number.isFinite(v)) {\n return 'number';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (typeof v === 'string') {\n if (v === 'true' || v === 'false') {\n return 'boolean';\n }\n return 'string';\n }\n return null;\n}\n\n/**\n * Picks a primitive coercion kind from the setting definition default and/or the effective stored value.\n * Type argument `T` on the settings service `get` method is compile-time only; runtime behavior follows this inference.\n */\nexport function inferSettingCoercionKind(defaultSample: unknown, effective: unknown): AXPSettingCoercionKind | null {\n const fromDefault = coercionKindFromScalarSample(defaultSample);\n if (fromDefault) {\n return fromDefault;\n }\n return coercionKindFromScalarSample(unwrapValueProperty(effective));\n}\n\n//#endregion\n\n//#region ---- Value coercion ----\n\nexport function coerceAXPSettingRawValueByKind(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n switch (kind) {\n case 'string':\n return coerceUnknownToTrimmedString(raw);\n case 'boolean':\n return coerceUnknownToBoolean(raw);\n case 'number':\n return coerceUnknownToFiniteNumber(raw);\n case 'date':\n return coerceUnknownToDate(raw);\n default: {\n const _exhaustive: never = kind;\n return _exhaustive;\n }\n }\n}\n\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'string'): string;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'boolean'): boolean;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'number'): number;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'date'): Date;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n return coerceAXPSettingRawValueByKind(raw, kind);\n}\n\n//#endregion\n","import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, InjectionToken, Injector } from '@angular/core';\nimport { AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector),\n ];\n },\n});\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService);\n\n constructor(\n private _scope: AXPPlatformScope,\n private injector: Injector,\n ) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map((c) => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPBroadcastEventService, AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport {\n AXPSettingDefaultValuesAggregatorService,\n AXPSettingDefinitionProviderService,\n} from './setting-definition.service';\nimport { coerceAXPSettingRawValueByKind, inferSettingCoercionKind } from './settings-coercion';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n await this.seedMissingDefaults();\n this.onLoaded.next();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n /**\n * Returns the effective setting value. Primitive coercion (string, boolean, number, date) is inferred from the\n * definition default and/or the stored shape (including `{ value: ... }`). Type argument `T` is compile-time only;\n * it is not read at runtime—use it to document the expected result (e.g. `get<boolean>(key)`).\n */\n async get<T = any>(key: string): Promise<T> {\n const { effective, defaultSample } = await this.resolveEffectiveAndDefault(key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n /**\n * Effective value (user → tenant → platform) when set; otherwise the definition default. Used for reads and coercion hints.\n */\n private async resolveEffectiveAndDefault(key: string): Promise<{ effective: unknown; defaultSample: unknown }> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n const defaultSample = get(defaults, key);\n const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return { effective: value, defaultSample };\n }\n }\n }\n return { effective: defaultSample, defaultSample };\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n\n private async seedMissingDefaults(): Promise<void> {\n const definitionService = this.injector.get(AXPSettingDefinitionProviderService);\n const aggregator = this.injector.get(AXPSettingDefaultValuesAggregatorService);\n const [{ defaults, seedScopeByKey }, scopeByKey] = await Promise.all([\n aggregator.getMerged(),\n definitionService.settingScopeByKey(),\n ]);\n const persistedKeysByScope = new Map(\n await Promise.all(\n this.providers.map(async (provider) => {\n const stored = await provider.load();\n return [provider.scope, new Set(stored.map((s) => s.key))] as const;\n }),\n ),\n );\n const toPersist: Partial<Record<AXPPlatformScope, Record<string, unknown>>> = {};\n\n for (const [key, value] of Object.entries(defaults)) {\n const scope = seedScopeByKey[key] ?? scopeByKey[key];\n if (!scope || value === undefined || persistedKeysByScope.get(scope)?.has(key)) {\n continue;\n }\n toPersist[scope] ??= {};\n toPersist[scope]![key] = value;\n }\n\n for (const [scope, values] of Object.entries(toPersist) as [AXPPlatformScope, Record<string, unknown>][]) {\n if (Object.keys(values).length > 0) {\n await this.scope(scope).set(values);\n }\n }\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) {}\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n const effective = setting?.value;\n const defaults = await this.parent.defaultValues(this.provider.scope);\n const defaultSample = get(defaults, key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single key-value pair\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value); // Sync the cache\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n // Multiple key-value pairs\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val)); // Sync the cache\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from './regional-settings.keys';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\nimport type { AXPEntityProperty } from '../app/application.types';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, ...{ data: { key: home?.key, title: home?.title, path: fullPath } } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n async navigateTo() {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n router.navigate([current.path], { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","import { AXPPlatformScope, objectKeyValueTransforms } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const list = this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup(\n 'general',\n `${I18N}.general.nav-title`,\n `${I18N}.general.description`,\n 'fa-light fa-palette',\n `${I18N}.general.title`,\n 1,\n )\n\n // Add the 'Startup' section\n .addSection('startup', `${I18N}.general.startup.title`, `${I18N}.general.startup.description`)\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: `${I18N}.general.startup.home-page.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: `${I18N}.general.startup.home-page.description`,\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[axpSticky]',\n exportAs: 'axpSticky',\n standalone: true,\n})\nexport class AXPStickyDirective {\n @Input('axpSticky') stickyClass!: string;\n @Input('stickyOffset') stickyOffset: number = 100;\n\n @Output() isStickyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _isSticky: boolean = false;\n public get isSticky(): boolean {\n return this._isSticky;\n }\n public set isSticky(value: boolean) {\n if (this._isSticky !== value) {\n this._isSticky = value;\n this.isStickyChange.emit(value);\n }\n }\n\n private parentElement!: HTMLElement | Window;\n private targetElement!: HTMLElement;\n private mutationObserver!: MutationObserver;\n\n private readonly onWindowResize = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n @Input() stickyParent!: string | HTMLElement;\n @Input() stickyTarget!: string;\n\n constructor(\n private element: ElementRef<HTMLDivElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit() {\n this.initSticky();\n\n // Add mutation observer for dynamic content\n this.mutationObserver = new MutationObserver(() => {\n this.applyStickyStateFromScrollPosition();\n });\n\n this.mutationObserver.observe(this.element.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n window.addEventListener('resize', this.onWindowResize);\n }\n\n private initSticky() {\n if (this.stickyParent instanceof HTMLElement) {\n this.parentElement = this.stickyParent;\n } else {\n this.parentElement = (document.querySelector(this.stickyParent) as HTMLElement) || window;\n }\n\n this.targetElement = (document.querySelector(this.stickyTarget) as HTMLElement) || this.element.nativeElement;\n\n this.parentElement.addEventListener('scroll', this.onParentScroll);\n this.applyStickyStateFromScrollPosition();\n }\n\n private getScrollTop(): number {\n return this.parentElement === window ? window.scrollY : (this.parentElement as HTMLElement).scrollTop;\n }\n\n /**\n * Toggle stuck styling only while this element is visually pinned (matches `position: sticky; top: 0`).\n * Scroll-offset thresholds would stay true for every section already passed, so multiple stacked stickies\n * would all keep `--stuck`; geometry fixes that.\n */\n private computeShouldStick(): boolean {\n if (this.getScrollTop() <= 0) {\n return false;\n }\n const tRect = this.targetElement.getBoundingClientRect();\n const epsilon = 3;\n let limitY: number;\n if (this.parentElement === window) {\n limitY = this.stickyOffset;\n } else {\n limitY = (this.parentElement as HTMLElement).getBoundingClientRect().top;\n }\n return tRect.top <= limitY + epsilon && tRect.top >= limitY - epsilon;\n }\n\n private applyStickyStateFromScrollPosition(): void {\n this.zone.runOutsideAngular(() => {\n const shouldStick = this.computeShouldStick();\n\n if (shouldStick !== this.isSticky) {\n this.zone.run(() => {\n this.isSticky = shouldStick;\n this.toggleStickyClasses(shouldStick);\n this.cdr.markForCheck();\n });\n }\n });\n }\n\n private onParentScroll = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n private toggleStickyClasses(isSticky: boolean): void {\n const classes = this.stickyClass.split(' ').filter(Boolean);\n classes.forEach((className) => {\n if (isSticky) {\n this.renderer.addClass(this.targetElement, className);\n } else {\n this.renderer.removeClass(this.targetElement, className);\n }\n });\n }\n\n ngOnDestroy() {\n this.parentElement.removeEventListener('scroll', this.onParentScroll);\n window.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Registered menu items (raw tree flattened) for select widgets via dataSource name {@link MENU_ITEMS_DATASOURCE_NAME}.\n */\nexport const MENU_ITEMS_DATASOURCE_NAME = 'platform-menu-items';\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: MENU_ITEMS_DATASOURCE_NAME,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPExecuteCommand, AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const currentRawPath = path;\n\n const findItem = (items: AXPMenuItem[]): { item: AXPMenuItem | null; isPartialMatch: boolean } => {\n for (const item of items) {\n // Recursively search children first\n if (item.children) {\n const foundChild = findItem(item.children);\n if (foundChild.item) {\n return foundChild;\n }\n }\n if (item.path) {\n // Check if the item path matches the current path (including query param subset if provided on item)\n const matchResult = pathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);\n if (matchResult.isMatch) {\n return { item, isPartialMatch: matchResult.isPartial };\n }\n }\n }\n return { item: null, isPartialMatch: false };\n };\n\n const pathsMatch = (\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = [],\n ): { isMatch: boolean; isPartial: boolean } => {\n // Split base and query/hash\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase, currentQueryString = ''] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n // Identify the effective base length for the menuPath\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--; // Exclude trailing non-hierarchical segments\n }\n\n // Check if the menuPath (base segments) is a prefix of browserPath\n let isPrefix = true;\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n // Partial match: menuPath base is a strict prefix of browserPath\n const isPartialMatch = effectiveMenuLength < pathLength;\n\n // Exact match: all segments match completely\n const isExactMatch = effectiveMenuLength === pathLength;\n\n // Query params subset match: if item defines any query params, require them to match\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentQueryString);\n let queryMatches = true;\n const itemParamPairs: Array<[string, string]> = [];\n itemParams.forEach((value, key) => {\n itemParamPairs.push([key, value]);\n });\n if (itemParamPairs.length > 0) {\n for (const [k, v] of itemParamPairs) {\n if (currentParams.get(k) !== v) {\n queryMatches = false;\n break;\n }\n }\n }\n\n return {\n isMatch: (isExactMatch || isPartialMatch) && queryMatches,\n isPartial: isPartialMatch && !isExactMatch,\n };\n };\n\n const items = store.items();\n const { item, isPartialMatch } = findItem(items);\n patchState(store, { selectedMenuItem: { item, isFullMatch: !isPartialMatch } });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem();\n if (!selectedItem.item) {\n return false;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (currentItem.children?.includes(targetItem)) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return item === selectedItem.item || findParent(item, selectedItem.item);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService)) => {\n let reloadSubscription: any;\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n const items = await menuProviderService.items();\n patchState(store, { items: items });\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '../../search';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = await this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path\n ? ({\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n },\n } as AXPExecuteCommand)\n : (item.command as AXPExecuteCommand),\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(String(o.title ?? ''))],\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private async searchMenuItems(menuItems: AXPMenuItem[], searchText: string): Promise<AXPMenuItemWithParent[]> {\n const result: AXPMenuItemWithParent[] = [];\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n (await this.translateService.translateAsync(item.text)).toLowerCase().includes(searchText.toLowerCase())\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = await this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item }) as AXPMenuItemWithParent));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","import { searchInMultiLanguageString } from '@acorex/platform/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n private readonly translationService = inject(AXTranslationService);\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n return this.commands.filter((command) =>\n searchInMultiLanguageString(command.title, text, locale),\n );\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { searchInMultiLanguageString } from '@acorex/platform/core';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { AXPSearchProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider => provider != null && typeof provider.search === 'function',\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = this.definitionService.findDefinition(result.group);\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result)}`,\n title:\n result.title ??\n (definition.format.title\n ? this.formatService.format(definition.format.title, 'string', result.data)\n : 'Unknown'),\n description:\n result.description ??\n (definition.format.description\n ? this.formatService.format(definition.format.description, 'string', result.data)\n : undefined),\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n const normalizedQuery = text.trim();\n const visibleData =\n normalizedQuery.length === 0\n ? mergeData\n : mergeData.filter(\n (item) =>\n searchInMultiLanguageString(item.title, normalizedQuery, locale) ||\n searchInMultiLanguageString(item.description, normalizedQuery, locale),\n );\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of visibleData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n ShowRowIndexColumn = 'Common:Setting:Entity.ShowRowIndexColumn',\n EntityListPersistenceMode = 'Common:Setting:Entity.ListPersistenceMode',\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n this.router.navigate(payload.commands, payload.extras);\n } else {\n if (payload.commands.toLowerCase().startsWith('http') || payload.target == 'blank') {\n window.open(payload.commands, '_blank');\n } else this.router.navigate([payload.commands], payload.extras);\n }\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n if (!path) {\n console.error('Path is required for navigate workflow');\n return;\n }\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n const [basePathAndFragment, queryString] = path.split('?');\n const [basePath, fragment] = basePathAndFragment.split('#'); // Extract fragment if present\n const queryParams = this.parseQueryParams(queryString);\n\n this.router.navigate([basePath], {\n ...command.options.extras,\n queryParams, // Pass query parameters separately\n fragment, // Pass fragment explicitly\n });\n }\n }\n\n /**\n * Parses query parameters from a query string into an object.\n */\n private parseQueryParams(queryString: string | undefined): Record<string, string> | undefined {\n if (!queryString) return undefined;\n\n return queryString\n .split('&')\n .map((pair) => pair.split('='))\n .reduce((params, [key, value]) => {\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n return params;\n }, {} as Record<string, string>);\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { Injectable } from \"@angular/core\";\nimport { AXPFileStorageCreateRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileStorageFindRequest, AXPFileManyStorageInfo } from \"./file-storage.types\";\n\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","import { AXPMetaData } from '@acorex/platform/core';\n\nexport enum AXPFileStorageStatus {\n Temporary = 'temporary', // File is not yet associated with a parent entity\n Committed = 'committed', // File is fully associated and in use\n PendingDeletion = 'pendingDeletion', // File is marked for deletion but not yet removed\n Archived = 'archived', // File is archived and no longer actively used\n Error = 'error', // File encountered an error during processing\n}\n\n/**\n * Interface representing a file storage request in the Acorex platform.\n */\nexport interface AXPFileStorageCreateRequest {\n /**\n * The file to be stored.\n */\n file: File;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * Metadata associated with the file.\n */\n metadata?: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n /**\n * Indicates the status of the file.\n */\n status?: AXPFileStorageStatus;\n}\n\nexport interface AXPFileStorageUpdateRequest {\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * The name of the file.\n */\n name?: string;\n /**\n * Metadata associated with the file.\n */\n metadata: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\nexport interface AXPFileManyStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * Optional title (e.g. for display in file list).\n */\n title?: string;\n\n /**\n * Optional description (e.g. for display in file list).\n */\n description?: string;\n}\n\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageFindRequest {\n /**\n * The unique identifier of referenced entity.\n */\n refId?: string;\n /**\n * The type of the referenced entity.\n */\n refType?: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category?: string;\n /**\n * The MIME type of the file.\n */\n mimeType?: string;\n /**\n * Indicates whether the file is public or private.\n */\n isPublic?: boolean;\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n /**\n * The date and time range when the file was uploaded.\n */\n uploadedAtRange?: { from: Date; to: Date };\n}\n","import { AXPFileStorageService } from './file-storage.service';\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n} from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\n\nexport class AXPFileStorageEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n fileStorageService = inject(AXPFileStorageService);\n\n async provide(\n context: AXPExpressionEvaluatorScopeProviderContext,\n ): Promise<void> {\n\n console.log('fileStorageEvaluatorScopeProvider', context);\n\n //\n context.addScope('fileStorage', {\n getFiles: async (entityType: string, entityId: string) => {\n console.log('getFiles', entityType, entityId);\n const filesFromService = await this.fileStorageService.find({\n category: '',\n refId: entityId,\n refType: entityType,\n });\n const mappedFiles = filesFromService?.map((file) => ({\n id: file.id ?? '',\n name: file.name,\n size: file.size,\n status: 'remote',\n source: {\n kind: 'fileId',\n value: file.fileId,\n },\n }));\n\n return mappedFiles;\n },\n });\n }\n}\n","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport {\n AXPDialogConfirmAction,\n AXPNavigateWorkflow,\n AXPReloadAction,\n AXPToastAction,\n AXPWorkflowRouterNavigateAction,\n} from './workflows';\nimport { AXPFileStorageEvaluatorScopeProvider } from './file-storage';\n\nexport interface AXPCommonModuleConfigs {\n errorHandlers: (new () => AXPErrorHandler)[];\n}\n\n@NgModule({\n imports: [\n AXPWorkflowModule.forChild({\n actions: {\n 'navigate-router': AXPWorkflowRouterNavigateAction,\n 'show-prompt-dialog': AXPDialogConfirmAction,\n 'show-toast': AXPToastAction,\n reload: AXPReloadAction,\n },\n workflows: {\n navigate: AXPNavigateWorkflow,\n },\n }),\n AXPopupModule,\n AXDateTimeModule,\n AXToastModule,\n AXPModuleManifestModule,\n ],\n exports: [RouterModule],\n providers: [\n AXPAppStartUpProvider,\n {\n provide: ErrorHandler,\n useClass: AXPGlobalErrorHandler,\n },\n {\n provide: AXPCustomOperatorService,\n useClass: AXPCustomOperatorServiceImpl,\n },\n {\n provide: AXPFilterOperatorMiddlewareService,\n useClass: AXPFilterOperatorMiddlewareServiceImpl,\n },\n\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPMenuSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPMenuSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPTokenEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPSettingsEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPFileStorageEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useFactory: async () => {\n const injector = inject(Injector);\n const provider = (await import('./configs/common-settings.provider')).AXPCommonSettingProvider;\n return new provider(injector);\n },\n multi: true,\n },\n ],\n})\nexport class AXPCommonModule {\n static forRoot(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(\n @Inject('AXPCommonModuleFactory') instances: any[],\n ) {\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/core';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","/**\n * Status Definition Types\n * Defines the structure for status definitions and their transitions\n */\n\n//#region ---- Status Definition Contracts ----\n\n/**\n * Status definition with metadata\n */\nexport interface AXPStatusDefinition {\n /**\n * Unique identifier for the status\n */\n name: string;\n\n /**\n * Display title for the status\n */\n title: string;\n\n /**\n * Color code or semantic color name for the status\n */\n color: string;\n\n /**\n * Optional icon class (e.g., 'fa-light fa-check')\n */\n icon?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional order for sorting\n */\n order?: number;\n\n /**\n * Whether this is a final status (end state)\n */\n isFinal?: boolean;\n\n /**\n * Whether this is an initial status (starting state)\n */\n isInitial?: boolean;\n\n /**\n * Whether list views should be automatically generated for this status\n */\n generateView?: boolean;\n}\n\n/**\n * Status transition definition\n */\nexport interface AXPStatusTransition {\n /**\n * Source status name\n */\n from: string;\n\n /**\n * Target status name\n */\n to: string;\n\n /**\n * Optional condition expression to evaluate before allowing transition\n * Uses expression evaluator syntax (e.g., \"{{user.isAdmin}}\", \"{{item.priority > 5}}\")\n */\n condition?: string;\n\n /**\n * Optional display title for the transition\n */\n title?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional command descriptor to execute for this transition\n * If not provided, defaults to Entity:UpdateStatus with entity, id, and status\n */\n command?: {\n name: string;\n options?: Record<string, unknown>;\n };\n\n /**\n * Whether this transition is automatic (no user action required)\n */\n isAutomatic?: boolean;\n\n /**\n * Whether this transition requires approval\n */\n requiresApproval?: boolean;\n}\n\n/**\n * Abstract class for status providers\n * Similar to AXPTaskBadgeProvider pattern\n */\nexport abstract class AXPStatusProvider {\n /**\n * Unique key for the status (e.g., 'task-management.status')\n */\n abstract readonly key: string;\n\n /**\n * List of available status definitions\n */\n abstract readonly statuses: AXPStatusDefinition[];\n\n /**\n * List of allowed transitions between statuses\n */\n abstract readonly transitions: AXPStatusTransition[];\n\n /**\n * Optional default status name\n */\n abstract readonly defaultStatus?: string;\n}\n\n//#endregion\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPStatusProvider, AXPStatusTransition } from './status-definition.types';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity =\n context['entity'] ?? context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? context['fieldName'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n const text = this.commandMessageTextForError(result?.message?.text);\n throw new Error(text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n /**\n * Best-effort plain string for {@link Error} messages (no i18n lookup).\n */\n private commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n const values = Object.values(value as Record<string, string>);\n const first = values.find((v) => typeof v === 'string' && v.length > 0);\n return first ?? '';\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPStatusDefinition } from './status-definition.types';\n\n/**\n * Standard system status types\n * These are the predefined status values used across the platform\n */\nexport enum AXPSystemStatusType {\n Todo = 'todo',\n InProgress = 'in-progress',\n InReview = 'in-review',\n Open = 'open',\n Closed = 'closed',\n Blocked = 'blocked',\n Done = 'done',\n Cancelled = 'cancelled',\n Draft = 'draft',\n PendingReview = 'pending-review',\n WaitingSignOff = 'waiting-sign-off',\n Approved = 'approved',\n Published = 'published',\n Archived = 'archived',\n Rejected = 'rejected',\n Active = 'active',\n Inactive = 'inactive',\n Pending = 'pending',\n Completed = 'completed',\n Suspended = 'suspended',\n Failed = 'failed',\n Review = 'review',\n Expired = 'expired',\n}\n\nconst i18n = (key: string) => `@general:statuses.${key}`;\n\n/**\n * Standard system status definitions\n * Provides consistent status definitions across the platform\n * Uses AXPStatusDefinition interface from status-definition.types.ts\n */\nexport const AXPSystemStatuses = Object.freeze({\n Open: {\n name: AXPSystemStatusType.Open,\n title: i18n('open.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('open.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Closed: {\n name: AXPSystemStatusType.Closed,\n title: i18n('closed.title'),\n icon: 'fa-light fa-circle',\n color: 'danger',\n description: i18n('closed.description'),\n order: 2,\n isInitial: false,\n isFinal: true,\n },\n Todo: {\n name: AXPSystemStatusType.Todo,\n title: i18n('todo.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('todo.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n InProgress: {\n name: AXPSystemStatusType.InProgress,\n title: i18n('in-progress.title'),\n icon: 'fa-light fa-play',\n color: 'info',\n description: i18n('in-progress.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n InReview: {\n name: AXPSystemStatusType.InReview,\n title: i18n('in-review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('in-review.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Blocked: {\n name: AXPSystemStatusType.Blocked,\n title: i18n('blocked.title'),\n icon: 'fa-light fa-ban',\n color: 'danger',\n description: i18n('blocked.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Done: {\n name: AXPSystemStatusType.Done,\n title: i18n('done.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('done.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Cancelled: {\n name: AXPSystemStatusType.Cancelled,\n title: i18n('cancelled.title'),\n icon: 'fa-light fa-times-circle',\n color: 'neutral',\n description: i18n('cancelled.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Draft: {\n name: AXPSystemStatusType.Draft,\n title: i18n('draft.title'),\n icon: 'fa-light fa-file-pen',\n color: 'neutral',\n description: i18n('draft.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n PendingReview: {\n name: AXPSystemStatusType.PendingReview,\n title: i18n('pending-review.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending-review.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n WaitingSignOff: {\n name: AXPSystemStatusType.WaitingSignOff,\n title: i18n('waiting-sign-off.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('waiting-sign-off.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Approved: {\n name: AXPSystemStatusType.Approved,\n title: i18n('approved.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('approved.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Published: {\n name: AXPSystemStatusType.Published,\n title: i18n('published.title'),\n icon: 'fa-light fa-globe',\n color: 'primary',\n description: i18n('published.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Archived: {\n name: AXPSystemStatusType.Archived,\n title: i18n('archived.title'),\n icon: 'fa-light fa-archive',\n color: 'danger',\n description: i18n('archived.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Rejected: {\n name: AXPSystemStatusType.Rejected,\n title: i18n('rejected.title'),\n icon: 'fa-light fa-times-circle',\n color: 'danger',\n description: i18n('rejected.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Active: {\n name: AXPSystemStatusType.Active,\n title: i18n('active.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('active.description'),\n order: 1,\n isInitial: false,\n isFinal: false,\n },\n Inactive: {\n name: AXPSystemStatusType.Inactive,\n title: i18n('inactive.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('inactive.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Pending: {\n name: AXPSystemStatusType.Pending,\n title: i18n('pending.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Completed: {\n name: AXPSystemStatusType.Completed,\n title: i18n('completed.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('completed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n Suspended: {\n name: AXPSystemStatusType.Suspended,\n title: i18n('suspended.title'),\n icon: 'fa-light fa-pause-circle',\n color: 'neutral',\n description: i18n('suspended.description'),\n order: 5,\n isInitial: false,\n isFinal: false,\n },\n Failed: {\n name: AXPSystemStatusType.Failed,\n title: i18n('failed.title'),\n icon: 'fa-light fa-xmark-circle',\n color: 'danger',\n description: i18n('failed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n\n Review: {\n name: AXPSystemStatusType.Review,\n title: i18n('review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('review.description'),\n order: 3,\n },\n Expired: {\n name: AXPSystemStatusType.Expired,\n title: i18n('expired.title'),\n icon: 'fa-light fa-clock',\n color: 'danger',\n description: i18n('expired.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n} as const satisfies Record<string, AXPStatusDefinition>);\n\n/**\n * Get system status definition by type\n * @param type - Status type\n * @returns System status definition or undefined\n */\nexport function getSystemStatus(type: AXPSystemStatusType): AXPStatusDefinition {\n return Object.values(AXPSystemStatuses).find(status => status.name === type) as AXPStatusDefinition;\n}\n\n/**\n * Resolves the visual appearance (color and icon) for status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Color and icon for the status\n */\nexport function resolveStatusLook(statusType: string): { color: AXStyleColorType; icon: string } {\n // Try to get system status first\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n // Convert hex color to semantic color type if needed\n // For now, return as-is and let the UI handle it\n return {\n color: systemStatus.color as AXStyleColorType,\n icon: systemStatus.icon || ''\n };\n }\n }\n\n // Fallback for unknown statuses\n return {\n color: 'secondary' as AXStyleColorType,\n icon: ''\n };\n}\n\n/**\n * Resolves the complete status information (title, description, icon, color) for a status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Complete status information as AXPStatusDefinition\n */\nexport function getStatusInfo(statusType: string): AXPStatusDefinition {\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n return systemStatus;\n }\n }\n\n // Fallback for unknown statuses\n return {\n name: statusType,\n title: statusType,\n description: `Status: ${statusType}`,\n icon: '',\n color: 'secondary'\n };\n}\n\n/**\n * Get system status definition directly (no conversion needed since it's already AXPStatusDefinition)\n * @param statusType - Status type\n * @param overrides - Optional overrides for the status definition\n * @returns AXPStatusDefinition\n */\nexport function systemStatusToDefinition(\n statusType: AXPSystemStatusType,\n overrides?: Partial<AXPStatusDefinition>\n): AXPStatusDefinition {\n const systemStatus = getSystemStatus(statusType);\n if (!systemStatus) {\n throw new Error(`System status ${statusType} not found`);\n }\n\n return {\n ...systemStatus,\n ...overrides,\n };\n}\n","import { AXToastService } from '@acorex/components/toast';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n private toast = inject(AXToastService);\n\n public copy(title: string, value: string) {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n navigator.clipboard.writeText(value);\n this.toast.success(`${title} copied!`);\n }\n\n}","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Debug Service ----\n\n/**\n * Service for debugging user access information.\n * Displays loaded modules, features, and permissions for the current user.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPDebugService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Display all loaded modules, features, and permissions for the current user.\n */\n async displayUserAccessInfo(): Promise<void> {\n try {\n // Ensure registry is initialized\n await this.manifestRegistry.initialize();\n\n // Get all registered modules\n const allManifests = this.manifestRegistry.getAll();\n\n // Get all feature definitions\n const allFeatures = this.manifestRegistry.getAllFeatureDefinitions();\n\n // Get current user permissions\n const userPermissions = this.sessionService.permissions;\n const user = this.sessionService.user;\n\n console.group('🔐 User Access Information');\n console.log(`User: ${user?.name || user?.title || 'Unknown'} (${user?.id || 'N/A'})`);\n console.log('');\n\n if (allManifests.length === 0) {\n console.log('No modules loaded');\n console.groupEnd();\n return;\n }\n\n // Group features by module\n const featuresByModule = new Map<string, typeof allFeatures>();\n allFeatures.forEach((feature) => {\n const moduleName = feature.module;\n if (!featuresByModule.has(moduleName)) {\n featuresByModule.set(moduleName, []);\n }\n featuresByModule.get(moduleName)!.push(feature);\n });\n\n // Group permissions by module (if they follow ModuleName:PermissionKey pattern)\n const permissionsByModule = new Map<string, typeof userPermissions>();\n const ungroupedPermissions: typeof userPermissions = [];\n\n userPermissions.forEach((permission) => {\n const parts = permission.split(':');\n if (parts.length >= 2) {\n const moduleName = parts[0];\n if (!permissionsByModule.has(moduleName)) {\n permissionsByModule.set(moduleName, []);\n }\n permissionsByModule.get(moduleName)!.push(permission);\n } else {\n ungroupedPermissions.push(permission);\n }\n });\n\n // Display modules in tree format\n allManifests.forEach((manifest) => {\n const moduleName = manifest.name;\n const moduleFeatures = featuresByModule.get(moduleName) || [];\n const modulePermissions = permissionsByModule.get(moduleName) || [];\n\n console.group(`📦 ${moduleName}`);\n\n // Display Features\n if (moduleFeatures.length > 0) {\n console.log(' --- Features:');\n moduleFeatures.forEach((feature) => {\n console.log(` • ${feature.name}`);\n });\n } else {\n console.log(' --- Features: (none)');\n }\n\n // Display Permissions\n if (modulePermissions.length > 0) {\n console.log(' --- Permissions:');\n modulePermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n } else {\n console.log(' --- Permissions: (none)');\n }\n\n console.groupEnd();\n });\n\n // Display ungrouped permissions if any\n if (ungroupedPermissions.length > 0) {\n console.group('📁 Other Permissions');\n ungroupedPermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n console.groupEnd();\n }\n\n // Summary\n console.log('');\n console.log(\n `Summary: ${allManifests.length} modules, ${allFeatures.length} features, ${userPermissions.length} permissions`\n );\n\n console.groupEnd();\n } catch (error) {\n console.error('[AXPDebugService] Failed to display user access info:', error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(link.href);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i1.AXPErrorHandlerRegistryService","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAkEA;AACO,MAAM,oDAAoD,GAAG;AAsBpE;;MCtEa,+CAA+C,GAAG,IAAI,cAAc,CAE/E,iDAAiD,EAAE;AACnD,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;AAED;;ACzBA;AAUA;MAKa,yCAAyC,CAAA;AAHtD,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,gBAAgB,GAC/B,MAAM,CAAC,+CAA+C,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAE3E,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAwD;QACnF,IAAA,CAAA,WAAW,GAAyB,IAAI;AAmEjD,IAAA;;;;AA5DC,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,YAAY,EAAE;QACzB,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAC7C;;IAGA,MAAM,GAAG,CACP,IAAkC,EAAA;AAElC,QAAA,MAAM,IAAI,CAAC,YAAY,EAAE;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;IACzC;;IAGA,MAAM,iBAAiB,CAAC,IAAkC,EAAA;QACxD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACvC,OAAO,UAAU,EAAE,QAAQ;IAC7B;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;;;AAMQ,IAAA,MAAM,YAAY,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,IAAI,CAAC,WAAW;QACzB;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE;QACzC,OAAO,IAAI,CAAC,WAAW;IACzB;AAEQ,IAAA,MAAM,eAAe,GAAA;QAC3B,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAElE,QAAA,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;YACxC,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AACA,YAAA,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC7D,YAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;oBACrB;gBACF;gBACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBAC/C,OAAO,CAAC,IAAI,CACV,CAAA,qDAAA,EAAwD,UAAU,CAAC,IAAI,CAAA,kCAAA,CAAoC,CAC5G;gBACH;gBACA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;YACzD;QACF;IACF;8GAvEW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAFxC,MAAM,EAAA,CAAA,CAAA;;2FAEP,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAHrD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCFY,wBAAwB,GAAG,IAAI,cAAc,CAAwB,0BAA0B,EAAE;AAC5G,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;QACZ,OAAO,IAAI,4BAA4B,EAAE;IAC3C,CAAC;AACF,CAAA;AAED,MAAM,4BAA4B,CAAA;AAChC,IAAA,MAAM,QAAQ,GAAA;QACZ,OAAO;AACL,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,IAAI,IAAI,EAAE;SACjB;IACH;AACD;MAMY,oBAAoB,CAAA;AAHjC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAKpD,IAAA;AAHC,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IACjC;8GALW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ICNW;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,mBAAA,CAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACX,IAAA,mBAAA,CAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACb,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;IAMnB;AAAZ,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,0BAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,0BAAA,CAAA,0BAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,0BAAA,CAAA,0BAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACZ,CAAC,EAJW,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;IAc1B;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,qBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,qBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EALW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;IAOrB;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;AAgJ9B;AACM,SAAU,uBAAuB,CACrC,OAA8C,EAAA;AAE9C,IAAA,IAAI,OAAO,KAAK,OAAO,EAAE;AACvB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;AACpF;AAEA;AACM,SAAU,0BAA0B,CACxC,KAAmD,EAAA;AAEnD,IAAA,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;QACvE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU;IACzD;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;QAC7B,OAAO,KAAK,CAAC,UAAU;IACzB;AACA,IAAA,OAAO,SAAS;AAClB;AA+IM,SAAU,aAAa,CAAC,MAAiB,EAAA;IAC7C,OAAO;QACL,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,CAAE;AACzC,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,SAAA;KACF;AACH;AAEM,SAAU,eAAe,CAC7B,IAAY,EACZ,KAAa,EACb,KAAc,EACd,MAAA,GAA6E;AAC3E,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,EAAE;AACV,CAAA,EAAA;IAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;IAC1E,OAAO;QACL,IAAI;QACJ,KAAK;QACL,KAAK;AACL,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AAC7B,QAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;AACnC,QAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAC1B;AACH;AAEM,SAAU,kBAAkB,CAChC,MAAA,GAAoG;AAClG,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,UAAU,EAAE,EAAE;AACf,CAAA,EAAA;IAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;AAC1E,IAAA,OAAO,eAAe,CAAC,KAAK,EAAE,8CAA8C,EAAE,IAAI,EAAE;AAClF,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AAC7B,QAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;AACnC,QAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;AAC1B,KAAA,CAAC;AACJ;AAkNA;AACM,SAAU,+BAA+B,CAC7C,OAA4C,EAAA;IAE5C,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,OAAO,CAAC;IAClB;IAEA,MAAM,OAAO,GAAoC,EAAE;IAEnD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,EAAE;AACpC,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACvB;AAEA,IAAA,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AAClD,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IACtB;AAEA,IAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC;AACjD;AAEA;AACM,SAAU,8BAA8B,CAC5C,OAA4C,EAAA;AAE5C,IAAA,OAAO,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpD;AAgCA;IACY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAa;AACb,IAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW;AACb,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;;AC9pBlB,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,QAAQ,EAAE,IAAI;AAC3G,MAAM,WAAW,GAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,oCAAoC,EAAE,QAAQ,EAAE,IAAI;AACtH,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,uCAAuC,EAAE,QAAQ,EAAE,IAAI;AACxH,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,oCAAoC,EAAE,QAAQ,EAAE,IAAI;AAClH,MAAM,QAAQ,GAAsB;AACzC,IAAA,IAAI,EAAE,oBAAoB;AAC1B,IAAA,KAAK,EAAE,gDAAgD;AACvD,IAAA,QAAQ,EAAE,IAAI;;AAET,MAAM,QAAQ,GAAsB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,6CAA6C,EAAE,QAAQ,EAAE,IAAI;AACnI,MAAM,aAAa,GAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,mCAAmC,EAAE,QAAQ,EAAE,IAAI;AACvH,MAAM,iBAAiB,GAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,uCAAuC,EAAE,QAAQ,EAAE,IAAI;AAClI,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI;AACrG,MAAM,gBAAgB,GAAsB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,sCAAsC,EAAE,QAAQ,EAAE,IAAI;AAC/H,MAAM,cAAc,GAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,oCAAoC,EAAE,QAAQ,EAAE,IAAI;AACzH,MAAM,aAAa,GAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,mCAAmC,EAAE,QAAQ,EAAE,KAAK;AACvH,MAAM,iBAAiB,GAAsB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,uCAAuC,EAAE,QAAQ,EAAE,KAAK;AAClI,MAAM,YAAY,GAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE,QAAQ,EAAE,IAAI;AAEpH,MAAM,gBAAgB,GAAG;IAC9B,OAAO;IACP,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB;;AAGK,MAAM,gBAAgB,GAAG;IAC9B,OAAO;IACP,WAAW;IACX,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,aAAa;IACb,iBAAiB;;AAGZ,MAAM,iBAAiB,GAAG,CAAC,OAAO;AAElC,MAAM,cAAc,GAAG;IAC5B,OAAO;IACP,WAAW;IACX,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,aAAa;IACb,iBAAiB;;AAGZ,MAAM,qBAAqB,GAAG;IACnC,OAAO;IACP,WAAW;IACX,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,OAAO;IACP,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,YAAY;;;AChEP,MAAM,2BAA2B,GAA8B;IACpE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7E,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,uCAAuC,EAAE,IAAI,EAAE,UAAU,EAAE;IACrF,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,wCAAwC,EAAE,IAAI,EAAE,UAAU,EAAE;IACvF,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,uCAAuC,EAAE,IAAI,EAAE,UAAU,EAAE;IACrF,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,uCAAuC,EAAE,IAAI,EAAE,UAAU,EAAE;IACrF,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,wCAAwC,EAAE,IAAI,EAAE,UAAU,EAAE;IACvF,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,sCAAsC,EAAE,IAAI,EAAE,UAAU,EAAE;IACnF,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,uCAAuC,EAAE,IAAI,EAAE,UAAU,EAAE;IACrF,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,wCAAwC,EAAE,IAAI,EAAE,UAAU,EAAE;AACvF,IAAA,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE;AACtF,IAAA,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,uCAAuC,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE;AACpH,IAAA,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oCAAoC,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE;;AAQvG,SAAU,wBAAwB,CACtC,aAAyC,EACzC,SAAoB,EAAA;AAEpB,IAAA,IAAI,OAAO,GAAG,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,2BAA2B;AACjF,IAAA,IAAI,SAAS,EAAE,MAAM,EAAE;AACrB,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D;AACA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,qBAAqB,CACnC,QAAgB,EAChB,eAAkC,EAAA;IAElC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI;AAC9C,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ;IAEzC,QAAQ,QAAQ;AACd,QAAA,KAAK,OAAO;YACV,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7D,oBAAA,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1D,iBAAA;aACF;AACH,QAAA,KAAK,WAAW;YACd,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9D,oBAAA,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC3D,iBAAA;aACF;AACH,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/D,oBAAA,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5D,iBAAA;aACF;QACH,KAAK,WAAW,EAAE;AAChB,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACjD,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9C,iBAAA;aACF;QACH;QACA,KAAK,WAAW,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACjD,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9C,iBAAA;aACF;QACH;QACA,KAAK,YAAY,EAAE;AACjB,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnD,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAChD,iBAAA;aACF;QACH;QACA,KAAK,UAAU,EAAE;AACf,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBAChD,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7C,iBAAA;aACF;QACH;QACA,KAAK,WAAW,EAAE;AAChB,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACjD,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAC9C,iBAAA;aACF;QACH;QACA,KAAK,YAAY,EAAE;AACjB,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YACvD,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9B,gBAAA,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnD,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AAChD,iBAAA;aACF;QACH;AACA,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,cAAc;YACjB,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;AAC/C,QAAA,KAAK,WAAW;YACd,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;AAC5C,QAAA;YACE,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;aAC5B;;AAEP;AAEM,SAAU,6BAA6B,CAC3C,aAAiC,EACjC,OAAkC,EAAA;IAElC,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,SAAS;IAClB;IACA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,EAAE;AAC1F;;MCpJa,cAAc,GAAG,IAAI,cAAc,CAA0B,gBAAgB;MAC7E,yBAAyB,GAAG,IAAI,cAAc,CAAS,2BAA2B,EAAE;AAC7F,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;;ACbD;;;AAGG;IACS;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,eAAA,CAAA,GAAA,iDAAiE;AACjE,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,4CAAuD;AACvD,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,4CAAuD;AACvD,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,2CAAqD;AACrD,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,4CAAuD;AACvD,IAAA,kBAAA,CAAA,gBAAA,CAAA,GAAA,kDAAmE;AACnE,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,+CAA6D;AAC7D,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,6CAAyD;AACzD,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,8CAA2D;AAC3D,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,4CAAuD;AACvD,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,6CAAyD;AACzD,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,8CAA2D;AAC3D,IAAA,kBAAA,CAAA,UAAA,CAAA,GAAA,4CAAuD;AACvD,IAAA,kBAAA,CAAA,kBAAA,CAAA,GAAA,oDAAuE;AACvE,IAAA,kBAAA,CAAA,kBAAA,CAAA,GAAA,oDAAuE;AACvE,IAAA,kBAAA,CAAA,eAAA,CAAA,GAAA,iDAAiE;AACjE,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,+CAA6D;AAC7D,IAAA,kBAAA,CAAA,aAAA,CAAA,GAAA,+CAA6D;AAC7D,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,8CAA2D;AAC3D,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,6CAAyD;;AAEzD,IAAA,kBAAA,CAAA,sBAAA,CAAA,GAAA,wDAA+E;AACjF,CAAC,EAvBW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;MCEjB,mCAAmC,CAAA;AAAhD,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,UAAU,GAAgC,EAAE;AAC5C,QAAA,IAAA,CAAA,QAAQ,GAA2C,IAAI,GAAG,EAAE;IA+CtE;IA7CE,QAAQ,CACN,IAAY,EACZ,KAAa,EACb,WAAoB,EACpB,IAAa,EACb,SAAkB,EAClB,QAAiB,EAAA;AAEjB,QAAA,MAAM,QAAQ,GAA8B;YAC1C,IAAI;YACJ,KAAK;YACL,SAAS;YACT,WAAW;YACX,IAAI;YACJ,QAAQ;AACR,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;SACb;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClC,QAAA,OAAO,IAAI,gCAAgC,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC7D;AAEA,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAA,YAAA,CAAc,CAAC;AACrD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC;IAC/D;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,UAAU;IACxB;;AAGA,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC;AACD;MAEY,gCAAgC,CAAA;IAI3C,WAAA,CAAY,OAA4C,EAAE,KAAgC,EAAA;AACxF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;AAEA,IAAA,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,WAAoB,EAAA;AAC1D,QAAA,MAAM,UAAU,GAAgC;YAC9C,IAAI;YACJ,KAAK;AACL,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,QAAQ,EAAE,EAAE;SACb;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,OAAO,IAAI,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC;IACjE;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QACjF,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAA,sBAAA,EAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;QACzF;AACA,QAAA,OAAO,IAAI,kCAAkC,CAAC,IAAI,EAAE,YAAY,CAAC;IACnE;IAEA,QAAQ,CACN,IAAY,EACZ,KAAa,EACb,WAAoB,EACpB,IAAa,EACb,SAAkB,EAClB,QAAiB,EAAA;AAEjB,QAAA,MAAM,QAAQ,GAA8B;YAC1C,IAAI;YACJ,KAAK;YACL,SAAS;AACT,YAAA,WAAW,EAAE,WAAW;YACxB,IAAI;YACJ,QAAQ;AACR,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;SACb;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAA,iBAAA,CAAmB,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5C,OAAO,IAAI,gCAAgC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;IACrB;AACD;MAEY,kCAAkC,CAAA;IAI7C,WAAA,CAAY,YAA8C,EAAE,OAAoC,EAAA;AAC9F,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AAEA,IAAA,UAAU,CAAC,OAkBV,EAAA;AACC,QAAA,MAAM,UAAU,GAAyB;YACvC,IAAI,EAAE,OAAO,CAAC,GAAG;YACjB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;AACpC,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;AACvC,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;AACzC,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;YACzC,YAAY,EAAE,OAAO,CAAC,YAAY;AAClC,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;AAC3B,YAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;AAC7B,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;gBACzB,IAAI,EAAE,OAAO,CAAC,GAAG;gBACjB,IAAI,EAAE,OAAO,CAAC,GAAG;gBACjB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EACzC;AACE,oBAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK;AACtH,oBAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;iBAC/C,CAAC;gBACJ,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;AAClC,aAAA;SACsB;QACzB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACtC,QAAA,OAAO,IAAI;IACb;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,YAAY;IAC1B;AACD;;ACtKD;MACa,+BAA+B,GAAG,IAAI,cAAc,CAC/D,iCAAiC;MAItB,mCAAmC,CAAA;AADhD,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvE,IAAA,CAAA,KAAK,GAAuC,IAAI;AAsKzD,IAAA;AApKS,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,mCAAmC,EAAE;;QAGzD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACjC,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;;AAE/B,oBAAA,MAAM,gBAAgB,GAAG,MAAM,QAAQ;AACvC,oBAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;gBACzC;qBAAO;;AAEL,oBAAA,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBACjC;YACF;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE;IAClC;AAEO,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;IACnB;IAEO,MAAM,YAAY,CAAC,KAA0B,EAAA;AAClD,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B;AAEO,IAAA,OAAO,CAAC,KAA0B,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnC,QAAA,MAAM,aAAa,GAAG,CACpB,MAAmC,EACnC,YAAiC,KACF;YAC/B,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;AAE1D,YAAA,OAAO;AACJ,iBAAA,GAAG,CAAC,CAAC,KAAK,MAAM;AACf,gBAAA,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK,CAAC;AACb,qBAAA,GAAG,CAAC,CAAC,OAAO,MAAM;AACjB,oBAAA,GAAG,OAAO;oBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;wBAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAI3D,wBAAA,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY;AAAE,4BAAA,OAAO,IAAI;;wBAG/C,IACE,OAAO,CAAC,WAAW;4BACnB,iBAAiB,GAAG,iBAAiB;0BACrC;AACA,4BAAA,OAAO,IAAI;wBACb;;AAGA,wBAAA,OAAO,KAAK;AACd,oBAAA,CAAC,CAAC;AACH,iBAAA,CAAC;AACD,qBAAA,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnD,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC;AAClD,aAAA,CAAC;iBACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7E,QAAA,CAAC;QAED,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/F;AAEA,IAAA,MAAM,aAAa,GAAA;QACjB,MAAM,QAAQ,GAA4B,EAAE;AAE5C,QAAA,MAAM,eAAe,GAAG,CAAC,MAAmC,KAAI;AAC9D,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACnC,wBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;4BACtC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY;wBAC/C;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AACA,QAAA,eAAe,CAAC,IAAI,CAAC,KAAM,CAAC;AAE5B,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,MAAM,iBAAiB,GAAA;QACrB,MAAM,MAAM,GAAqC,EAAE;AAEnD,QAAA,MAAM,OAAO,GAAG,CAAC,MAAmC,KAAI;AACtD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;wBACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAyB;AAC1D,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;AACvB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC;AAEpB,QAAA,OAAO,MAAM;IACf;IAEO,SAAS,CAAC,KAA0B,EAAE,SAAiB,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAClE;AAEQ,IAAA,eAAe,CACrB,MAAmC,EACnC,SAAiB,EACjB,UAA6C,EAAA;AAE7C,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,iBAAiB,GAAG;AACxB,gBAAA,GAAG,UAAU;AACb,gBAAA,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;aACzE;;AAGD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC5B,OAAO;AACL,oBAAA,UAAU,EAAE,iBAAiB;AAC7B,oBAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI;AAC3D,oBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;iBACtD;YACH;;AAGA,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC;YACrF,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAA,OAAO,YAAY;YACrB;QACF;;QAGA,OAAO;AACL,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;SACb;IACH;8GAvKW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cADtB,MAAM,EAAA,CAAA,CAAA;;2FACnB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA2KlC;MACa,oCAAoC,GAAG,IAAI,cAAc,CACpE,sCAAsC,EACtC;AACE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;AASH;MAEa,wCAAwC,CAAA;AADrD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,oCAAoC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AA2BpG,IAAA;AAzBC,IAAA,MAAM,SAAS,GAAA;QACb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACjE,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACzF,QAAA,MAAM,MAAM,GAA4B,EAAE,GAAG,YAAY,EAAE;QAC3D,MAAM,cAAc,GAAqC,EAAE;AAC3D,QAAA,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE;AAC9B,YAAA,IAAI;AACF,gBAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE;AAC5C,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAClC,gBAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;oBAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1C,wBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK;oBACtC;gBACF;YACF;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC;YAC/D;QACF;AACA,QAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE;IAC7C;AAEA,IAAA,MAAM,WAAW,GAAA;QACf,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAC3C,QAAA,OAAO,QAAQ;IACjB;8GA5BW,wCAAwC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wCAAwC,cAD3B,MAAM,EAAA,CAAA,CAAA;;2FACnB,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBADpD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC1MlC;AAmBA;AAEA;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,GAAY,EAAA;AAC9C,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC;AACjC;AAEA,SAAS,4BAA4B,CAAC,CAAU,EAAA;IAC9C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE;AACjC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;AAC1B,QAAA,OAAO,SAAS;IAClB;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC/C,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,IAAI,CAAC,YAAY,IAAI,EAAE;AACrB,QAAA,OAAO,MAAM;IACf;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,EAAE;AACjC,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;AAGG;AACG,SAAU,wBAAwB,CAAC,aAAsB,EAAE,SAAkB,EAAA;AACjF,IAAA,MAAM,WAAW,GAAG,4BAA4B,CAAC,aAAa,CAAC;IAC/D,IAAI,WAAW,EAAE;AACf,QAAA,OAAO,WAAW;IACpB;AACA,IAAA,OAAO,4BAA4B,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACrE;AAEA;AAEA;AAEM,SAAU,8BAA8B,CAAC,GAAY,EAAE,IAA4B,EAAA;IACvF,QAAQ,IAAI;AACV,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,4BAA4B,CAAC,GAAG,CAAC;AAC1C,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,sBAAsB,CAAC,GAAG,CAAC;AACpC,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,2BAA2B,CAAC,GAAG,CAAC;AACzC,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC;QACjC,SAAS;YACP,MAAM,WAAW,GAAU,IAAI;AAC/B,YAAA,OAAO,WAAW;QACpB;;AAEJ;AAMM,SAAU,wBAAwB,CAAC,GAAY,EAAE,IAA4B,EAAA;AACjF,IAAA,OAAO,8BAA8B,CAAC,GAAG,EAAE,IAAI,CAAC;AAClD;AAEA;;MCxFa,0BAA0B,GAAG,IAAI,cAAc,CAA4B,4BAA4B,EAAE;AACpH,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO;AACL,YAAA,IAAI,8BAA8B,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACvE,YAAA,IAAI,8BAA8B,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC;AACrE,YAAA,IAAI,8BAA8B,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;SACpE;IACH,CAAC;AACF,CAAA;AAED,MAAM,8BAA8B,CAAA;IAKlC,WAAA,CACU,MAAwB,EACxB,QAAkB,EAAA;QADlB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAND,QAAA,IAAA,CAAA,KAAK,GAAqB,IAAI,GAAG,EAAE;QAC5C,IAAA,CAAA,eAAe,GAAkB,IAAI;QACrC,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;;QAO3D,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,QAAQ,EAAE;AAC5C,YAAA,IAAI,CAAC,eAAe,GAAG,CAAA,qBAAA,CAAuB;QAChD;aAAO;YACL,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC/C,gBAAA,IAAI,MAAM,KAAK,gBAAgB,CAAC,UAAU,IAAI,MAAM,KAAK,gBAAgB,CAAC,aAAa,EAAE;oBACvF,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,IAAI,EAAE;AACxC,wBAAA,IAAI,CAAC,eAAe,GAAG,CAAA,mBAAA,EAAsB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG;oBACrF;yBAAO,IAAI,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACjD,wBAAA,IAAI,CAAC,eAAe,GAAG,CAAA,mBAAA,EAAsB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,GAAG;oBACvF;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B;;QAEA,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;QACjE,IAAI,cAAc,EAAE;YAClB,MAAM,cAAc,GAAwB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;AACtE,YAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC5B,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnG;AACA,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B;AAIA,IAAA,MAAM,GAAG,CAAC,WAAyC,EAAE,KAAW,EAAA;AAC9D,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;;YAEnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;QACpC;aAAO;;AAEL,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBACpD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;YAC1B;QACF;AACA,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;IACjC;AAEQ,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;QACA,MAAM,cAAc,GAAwB,EAAE;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAChC,YAAA,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5E;AAEQ,IAAA,MAAM,KAAK,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AACA,QAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;IAC/C;AACD;;MCvEY,kBAAkB,CAAA;AAS7B,IAAA,WAAA,GAAA;AARiB,QAAA,IAAA,CAAA,SAAS,GAA8B,MAAM,CAA4B,0BAA0B,CAAC;AACpG,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAkC,IAAI,GAAG,EAAE;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAA0B;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;AAI5C,QAAA,MAAM,YAAY,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;AAChG,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC7B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACxC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAyB,wBAAwB,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC7F,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACxB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtE,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,eAAe,KAAI;YACpG,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,IAAI,CAAC,MAAM,EAAE;YACrB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;IACnB;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI;YACF,MAAM,YAAY,GAAsB,EAAE;AAC1C,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE;AAC5E,gBAAA,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAC9C,gBAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACnC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;AAC5C,gBAAA,CAAC,CAAC;AACF,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;YACxC;AACA,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,YAAA,OAAO,YAAY;QACrB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;;;AAIG;IACH,MAAM,GAAG,CAAU,GAAW,EAAA;AAC5B,QAAA,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC;QAC/E,MAAM,IAAI,GAAG,wBAAwB,CAAC,aAAa,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAM;QAC7D;AACA,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,OAAO,SAAc;QACvB;AACA,QAAA,OAAO,SAAS,CAAC,SAAS,CAAM;IAClC;AAEA;;AAEG;IACK,MAAM,0BAA0B,CAAC,GAAW,EAAA;QAClD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE;AACvC,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACnB;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,WAAW,EAAE;QAChG,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACxC,QAAA,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC;AAC9F,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtD,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,oBAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC5C;YACF;QACF;AACA,QAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE;IACpD;IAEA,MAAM,aAAa,CAAC,KAAuB,EAAA;AACzC,QAAA,IAAI,UAAU,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;QACtG,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;AAE5C,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAA,CAAE,CAAC;QAC5C;QACA,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;;QAE7C,MAAM,mBAAmB,GAA4B,EAAE;AACvD,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,YAAA,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;YAE7D,IAAI,UAAU,EAAE;gBACd,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAChC,oBAAA,IAAI,EAAE,GAAG,IAAI,mBAAmB,CAAC,EAAE;AACjC,wBAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,KAAK;oBAClC;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;;AAGA,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,WAAW,EAAE;AACtG,QAAA,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,mBAAmB,EAAE;IACtD;AAEA,IAAA,KAAK,CAAC,KAAuB,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAC9D,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAA,CAAE,CAAC;QAC1D;AACA,QAAA,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IACvF;AAEA,IAAA,iBAAiB,CAAC,KAA6B,EAAA;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAyB,wBAAwB,EAAE,KAAK,CAAC;IACpF;AAEQ,IAAA,MAAM,mBAAmB,GAAA;QAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mCAAmC,CAAC;QAChF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wCAAwC,CAAC;AAC9E,QAAA,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnE,UAAU,CAAC,SAAS,EAAE;YACtB,iBAAiB,CAAC,iBAAiB,EAAE;AACtC,SAAA,CAAC;QACF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,QAAQ,KAAI;AACpC,YAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAU;QACrE,CAAC,CAAC,CACH,CACF;QACD,MAAM,SAAS,GAA+D,EAAE;AAEhF,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACnD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;AACpD,YAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC9E;YACF;AACA,YAAA,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE;YACvB,SAAS,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,GAAG,KAAK;QAChC;AAEA,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAkD,EAAE;YACxG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YACrC;QACF;IACF;8GAzKW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;AA6KD,MAAM,oBAAoB,CAAA;AACxB,IAAA,WAAA,CACU,MAA0B,EAC1B,QAAiC,EACjC,UAA4B,EAAA;QAF5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,UAAU,GAAV,UAAU;IACjB;IAEH,MAAM,GAAG,CAAU,GAAW,EAAA;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,OAAO,EAAE,KAAK;AAChC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrE,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;QACxC,MAAM,IAAI,GAAG,wBAAwB,CAAC,aAAa,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAM;QAC7D;AACA,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,OAAO,SAAc;QACvB;AACA,QAAA,OAAO,SAAS,CAAC,SAAS,CAAM;IAClC;AAEA,IAAA,MAAM,GAAG,GAAA;QACP,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3C,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7E;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvD;AAIA,IAAA,MAAM,GAAG,CAAU,WAAuC,EAAE,KAAS,EAAA;AACnE,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;;YAEnC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,IAAI,EAAE,CAAC,WAAW,CAAC;AACnB,gBAAA,MAAM,EAAE,EAAE,CAAC,WAAW,GAAG,KAAK,EAAE;gBAChC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACvC,aAAA,CAAC;QACJ;aAAO;;YAEL,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AACpC,YAAA,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACtF,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC1B,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9B,gBAAA,MAAM,EAAE,WAAW;gBACnB,OAAO;AACR,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,MAAM,MAAM,CAAU,GAAW,EAAE,QAAgC,EAAA;QACjE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC;QACvC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC/B;AACD;;AC9PD,MAAM,mCAAmC,GAAG,IAAI;AAEhD;;;;AAIG;MAEU,oCAAoC,CAAA;AAM/C,IAAA,WAAA,GAAA;AALiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE5C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,mCAAmC,oFAAC;QAC7E,IAAA,CAAA,aAAa,GAAG,KAAK;AAG3B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACtE,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzE;IAEA,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC;AACF,iBAAA,GAAG,CAAU,kBAAkB,CAAC,oBAAoB;AACpD,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,mCAAmC,CAAC;AACpF,iBAAA,KAAK,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC7E;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;AAEQ,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAU,kBAAkB,CAAC,oBAAoB,CAAC;YAC9F,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,mCAAmC,CAAC;QACtE;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mCAAmC,CAAC;QAC7D;IACF;8GA7BW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,cADvB,MAAM,EAAA,CAAA,CAAA;;2FACnB,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACDlC;AAEA;;AAEG;AACI,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAS;IAChE,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,yBAAyB;AAC1B,CAAA;AAED;;;AAGG;AACI,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAS;IAC/D,OAAO;IACP,aAAa;IACb,MAAM;IACN,SAAS;;IAET,gBAAgB;IAChB,UAAU;IACV,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,UAAU;IACR,OAAO;IACP,aAAa;IACf,SAAS;IACT,SAAS;AACV,CAAA;AAED;AAEA;AAEA,SAAS,wBAAwB,CAAC,IAAwB,EAAA;AACxD,IAAA,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC5D,QAAA,OAAO,IAAI;IACb;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;AAC7D,IAAA,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI;AACvC;AAEM,SAAU,+CAA+C,CAAC,IAAuB,EAAA;IACrF,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;IACA,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrD,QAAA,OAAO,KAAK;IACd;IACA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI;AAC9C,IAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACzF,QAAA,OAAO,KAAK;IACd;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAA8C;AAClF,IAAA,IAAI,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,+CAA+C,CAAC,IAAuB,EAAA;IACrF,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvD,QAAA,OAAO,KAAK;IACd;IACA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI;AAC7C,IAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACzF,QAAA,OAAO,KAAK;IACd;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAA8C;AACjF,IAAA,IAAI,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;AAIG;AACG,SAAU,2CAA2C,CAAC,IAAmB,EAAA;AAC7E,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI;AAC5B,IAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACzF,QAAA,OAAO,KAAK;IACd;IACA,MAAM,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/C,IAAI,CAAC,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvD,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAA8C;AAChE,IAAA,IAAI,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE;AACnC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;AACG,SAAU,wCAAwC,CACtD,IAAsC,EACtC,YAAqB,EAAA;AAErB,IAAA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;QACjC,OAAO,IAAI,IAAI,SAAS;IAC1B;AACA,IAAA,OAAO,sCAAsC,CAAC,IAAI,CAAC;AACrD;AAEA,SAAS,sCAAsC,CAAC,IAAmB,EAAA;IACjE,IAAI,IAAI,GAAG,IAAI;AACf,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,sCAAsC,CAAC,KAAK,CAAC,CAAC;QAC/F,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,EAAE;YACvD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;QAC3C;IACF;AACA,IAAA,IAAI,2CAA2C,CAAC,IAAI,CAAC,EAAE;QACrD,OAAO;AACL,YAAA,GAAG,IAAI;AACP,YAAA,OAAO,EAAE;AACP,gBAAA,IAAK,IAAI,CAAC,OAAO,IAAI,EAAE,CAA6B;AACpD,gBAAA,aAAa,EAAE,IAAI;AACpB,aAAA;SACF;IACH;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;AAIG;AACG,SAAU,wCAAwC,CACtD,IAAuB,EACvB,YAAqB,EAAA;IAErB,IAAI,CAAC,YAAY,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,EAAE;AAC3E,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;IACnC,MAAM,YAAY,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAA4B;IACrE,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,MAAM,EAAE;YACN,GAAG,IAAI,CAAC,MAAM;AACd,YAAA,SAAS,EAAE;AACT,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,YAAY;AACf,oBAAA,aAAa,EAAE,IAAI;AACpB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACH;AAEA;;AChLA;AAEA;;;AAGG;MACU,iCAAiC,CAAA;AAA9C,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAS/D;IAPE,MAAM,OAAO,CAAC,OAAmD,EAAA;AAC/D,QAAA,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC3B,YAAA,GAAG,EAAE,OAAO,GAAW,KAAI;gBACzB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAC5C,CAAC;AACF,SAAA,CAAC;IACJ;AACD;AAED;;ACvBA,IAAY,mBAEX;AAFD,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,iCAAgD;AACpD,CAAC,EAFW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;;MCWlB,kBAAkB,CAAA;AAU7B,IAAA,IAAY,cAAc,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C;AAEA,IAAA,WAAA,GAAA;AAbQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAS,yBAAyB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM;QAC5F,IAAA,CAAA,eAAe,GAAkB,IAAI;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACtF,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,SAAS,GAAG,YAAY;;QAQ9B,UAAU,CAAC,YAAW;AACpB,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;;AAEjB,QAAA,MAAM,IAAI,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,KAAI;AACnD,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;AACxC,gBAAA,MAAM,IAAI,CAAC,IAAI,EAAE;gBACjB,IAAI,CAAC,aAAa,EAAE;YACtB;AACF,QAAA,CAAC,CAAC;;QAEFA,OAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,CACzG,OAAO,IAAI,KAAI;AACb,YAAA,MAAM,IAAI,CAAC,IAAI,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC,CACF;IACH;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC;IACzF;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACnD;IAEA,mBAAmB,GAAA;QACjB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC;QAE1F,MAAM,IAAI,GACR,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,eAAe;AAC5G,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1C,OAAO;gBACL,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;gBACrD,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;gBACzD,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;aACxF;QACH;AACA,QAAA,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACtE;IAEA,UAAU,GAAA;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAE;QACjF,IAAI,QAAQ,EAAE;YACZ,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;AAC7B,gBAAA,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;aAChC;QACH;QACA,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,SAAS;AACpB,YAAA,KAAK,EAAE,EAAE;SACV;IACH;AAEQ,IAAA,QAAQ,CAAC,MAAa,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QACrD,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;QACzC;AACA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,cAAc,CAAC,KAAY,EAAE,UAAA,GAAuB,EAAE,EAAA;AAC5D,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B;;AAGA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;QACzD;AAEA,QAAA,OAAO,QAAQ;IACjB;IAEQ,aAAa,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGxC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM;QACrC;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChC;AAEQ,IAAA,iBAAiB,CAAC,MAAc,EAAA;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;QAKjD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,MAAM,CACpD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAC5F;;QAGD,MAAM,MAAM,GAAW,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC;;AAEzD,QAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5B;AAEA,IAAA,MAAM,UAAU,GAAA;;QAEd,UAAU,CAAC,MAAK;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC;QACpE,CAAC,EAAE,GAAG,CAAC;IACT;8GAxIW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACND,SAAS,oBAAoB,GAAA;AACzB,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1C,IAAA,OAAO,OAAO,CAAC,mBAAmB,EAAE;AACxC;SAEgB,sBAAsB,GAAA;AAClC,IAAA,OAAO,wBAAwB,CAAC;AAC5B,QAAA;AACI,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,KAAK,EAAE;AACV;AACJ,KAAA,CAAC;AACN;;ACTA,MAAM,IAAI,GAAG,mBAAmB;MAGnB,0BAA0B,CAAA;AAIrC,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAHX,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAChE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAS,yBAAyB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM;IAE3D;IAEzC,MAAM,OAAO,CAAC,OAA4C,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACjG,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB;QACF;;QAGA;AACG,aAAA,QAAQ,CACP,SAAS,EACT,GAAG,IAAI,CAAA,kBAAA,CAAoB,EAC3B,CAAA,EAAG,IAAI,CAAA,oBAAA,CAAsB,EAC7B,qBAAqB,EACrB,CAAA,EAAG,IAAI,CAAA,cAAA,CAAgB,EACvB,CAAC;;aAIF,UAAU,CAAC,SAAS,EAAE,CAAA,EAAG,IAAI,wBAAwB,EAAE,CAAA,EAAG,IAAI,CAAA,4BAAA,CAA8B;;AAE5F,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,mBAAmB,CAAC,YAAY;YACrC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,gCAAA,CAAkC;YAChD,KAAK,EAAE,gBAAgB,CAAC,IAAI;AAC5B,YAAA,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACnD,YAAA,eAAe,EAAE,wBAAwB,CAAC,IAAI,CAAC;AAC/C,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;AACF,aAAA;YACD,WAAW,EAAE,CAAA,EAAG,IAAI,CAAA,sCAAA,CAAwC;SAC7D;;AAGA,aAAA,UAAU;;AAGV,aAAA,QAAQ,EAAE;IACf;8GAjDW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCIY,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAjB,iBAAiB,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;MCbqB,eAAe,CAAA;AAapC;;MCVqB,wBAAwB,CAAA;AAE7C;AAGK,MAAO,4BAA6B,SAAQ,wBAAwB,CAAA;IACxE,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE;IACX;8GAHW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;MCFqB,kCAAkC,CAAA;AAiBvD;AAGK,MAAO,sCAAuC,SAAQ,kCAAkC,CAAA;AAD9F,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAExD,QAAA,IAAA,CAAA,SAAS,GAA4C;YAC3D,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE;SACnD;AAyCF,IAAA;AAvCC,IAAA,gBAAgB,CAAC,OAAmC,EAAA;AAClD,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9D;AAEA,IAAA,eAAe,CAAC,MAAgC,EAAA;QAC9C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM;;AAElD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI;;AAGnE,QAAA,MAAM,iBAAiB,GAA6B;YAClD,GAAG,MAAM;YACT,QAAQ,EAAE,cAAc,GAAG,cAAc,GAAG,QAAQ;SACrD;;QAGD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7D;AAEA,QAAA,OAAO,iBAAiB;IAC1B;AAEA,IAAA,WAAW,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC5B;;IAGQ,mBAAmB,GAAA;QACzB,OAAO,qBAAqB,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,QAAQ,KAAI;AAChB,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAW;aAC3B;AACD,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAA6C,CAC9C;IACH;8GA9CW,sCAAsC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtC,sCAAsC,EAAA,CAAA,CAAA;;2FAAtC,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBADlD;;;MClBY,8BAA8B,CAAA;AAGvC,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAFpB,IAAA,CAAA,aAAa,GAAsB,EAAE;IAG7C;IAEA,QAAQ,CAAC,GAAG,OAAsC,EAAA;AAC9C,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpH,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC;AACJ,QAAA,CAAC,CAAC;IACN;AAGA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,aAAa;IAC7B;8GAnBS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF3B,MAAM,EAAA,CAAA,CAAA;;2FAET,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACDK,MAAO,qBAAsB,SAAQ,YAAY,CAAA;IAInD,WAAA,CAAoB,QAAkB,EAAU,QAAwC,EAAA;AACpF,QAAA,KAAK,EAAE;QADS,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAoB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAExD;AAES,IAAA,WAAW,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,KAAU,KAAI;AACzD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAC5C,YAAA,IAAI,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE;gBAC9B,aAAa,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,KAAI;AAC5C,oBAAA,sBAAsB,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;AAC1C,gBAAA,CAAC,CAAC;YACN;iBAAO;AACH,gBAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7B;AACJ,QAAA,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;;YAErC;QACJ;AACA,QAAA,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC;IACpC;8GAxBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,8BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,6BAA6B,GAAG,IAAI,cAAc,CAC7D,+BAA+B,EAC/B;AACE,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;;ACVH;AAMA;MAKa,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;AAG9F,QAAA,IAAA,CAAA,iBAAiB,GAAoC,IAAI,GAAG,EAAE;AAkEvE,IAAA;;;AA1DC;;;;;AAKG;IACH,MAAM,aAAa,CAAC,IAAY,EAAA;;QAE9B,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;QACzC;;;QAGA,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;;QAGrE,MAAM,kBAAkB,GAAyB,EAAE;AACnD,QAAA,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;AACxC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;;AAE3B,gBAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YACtC;iBAAO,IAAI,QAAQ,EAAE;;AAEnB,gBAAA,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI,CAAC;QAChE,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;AAIG;IACH,MAAM,QAAQ,CAAC,IAAY,EAAA;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACjD,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE;QACnC;AACA,QAAA,OAAO,SAAS;IAClB;;;;IAOA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;8GArEW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;2FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,8BAA8B,CAAA;AAA3C,IAAA,WAAA,GAAA;AAEc,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAS9D;IAPI,MAAM,OAAO,CAAC,OAAmD,EAAA;AAC7D,QAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACvB,YAAA,GAAG,EAAE,OAAO,IAAY,KAAI;gBACxB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjD;AACH,SAAA,CAAC;IACN;AACH;;MCAY,kBAAkB,CAAA;AAO7B,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAW,QAAQ,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;IACF;AAaA,IAAA,WAAA,CACU,OAAmC,EACnC,QAAmB,EACnB,IAAY,EACZ,GAAsB,EAAA;QAHtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,GAAG,GAAH,GAAG;QA9BU,IAAA,CAAA,YAAY,GAAW,GAAG;AAEvC,QAAA,IAAA,CAAA,cAAc,GAA0B,IAAI,YAAY,EAAW;QAErE,IAAA,CAAA,SAAS,GAAY,KAAK;QAejB,IAAA,CAAA,cAAc,GAAG,MAAW;YAC3C,IAAI,CAAC,kCAAkC,EAAE;AAC3C,QAAA,CAAC;QA+EO,IAAA,CAAA,cAAc,GAAG,MAAW;YAClC,IAAI,CAAC,kCAAkC,EAAE;AAC3C,QAAA,CAAC;IAvEE;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,UAAU,EAAE;;AAGjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAK;YAChD,IAAI,CAAC,kCAAkC,EAAE;AAC3C,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AACxD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;IACxD;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY,WAAW,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAiB,IAAI,MAAM;QAC3F;AAEA,QAAA,IAAI,CAAC,aAAa,GAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa;QAE7G,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QAClE,IAAI,CAAC,kCAAkC,EAAE;IAC3C;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,GAAI,IAAI,CAAC,aAA6B,CAAC,SAAS;IACvG;AAEA;;;;AAIG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE;AAC5B,YAAA,OAAO,KAAK;QACd;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACxD,MAAM,OAAO,GAAG,CAAC;AACjB,QAAA,IAAI,MAAc;AAClB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,MAAM,GAAG,IAAI,CAAC,YAAY;QAC5B;aAAO;YACL,MAAM,GAAI,IAAI,CAAC,aAA6B,CAAC,qBAAqB,EAAE,CAAC,GAAG;QAC1E;AACA,QAAA,OAAO,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,OAAO;IACvE;IAEQ,kCAAkC,GAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAE7C,YAAA,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;AACrC,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;AAMQ,IAAA,mBAAmB,CAAC,QAAiB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3D,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC5B,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;YACvD;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;YAC1D;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QACrE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;QACpC;IACF;8GA5HW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,WAAA,EAAA,aAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE,KAAK;uBAAC,WAAW;;sBACjB,KAAK;uBAAC,cAAc;;sBAEpB;;sBAqBA;;sBACA;;;ACvCH;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAAC,KAAoB,EAAA;AAClD,IAAA,MAAM,OAAO,GAA6B;AACtC,QAAA,IAAI,KAAK,GAAA;AACL,YAAA,OAAO,KAAK;QAChB,CAAC;AAED,QAAA,IAAI,CAAC,aAA8B,EAAA;AAC/B,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACnC,gBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;YAC5C;YACA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE;QAC5D,CAAC;AAED,QAAA,UAAU,CAAC,IAAY,EAAA;AACnB,YAAA,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C,CAAC;AAED,QAAA,aAAa,CAAC,OAAwB,EAAA;AAClC,YAAA,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO;YAC9E,MAAM,OAAO,GAAwB,EAAE;AAEvC,YAAA,MAAM,eAAe,GAAG,CAAC,QAAuB,KAAI;AAChD,gBAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACzB,oBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpC,wBAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD;AACA,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,wBAAA,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAClC;gBACJ;AACJ,YAAA,CAAC;YAED,eAAe,CAAC,KAAK,CAAC;AACtB,YAAA,OAAO,OAAO;QAClB,CAAC;QAED,GAAG,CAAC,GAAG,QAAuB,EAAA;AAC1B,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AACvB,YAAA,OAAO,OAAO;QAClB,CAAC;AAED,QAAA,MAAM,CAAC,SAAyC,EAAA;AAC5C,YAAA,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC;AACjC,YAAA,OAAO,OAAO;QAClB,CAAC;QAED,IAAI,GAAA;YACA,oBAAoB,CAAC,KAAK,CAAC;AAC3B,YAAA,OAAO,OAAO;QAClB,CAAC;QAED,OAAO,GAAA;AACH,YAAA,OAAO,KAAK;QAChB,CAAC;KACJ;AAED,IAAA,OAAO,OAAO;AAClB;AAEA;AAEA;AAEA;;AAEG;AACH,SAAS,oBAAoB,CAAC,SAAwB,EAAE,UAAkB,EAAA;AACtE,IAAA,MAAM,kBAAkB,GAAG,CACvB,KAAoB,EACpB,IAAY,EACZ,MAAA,GAAmC,EAAE,KAAK,EAAE,SAAS,EAAE,KACc;AACrE,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACpB,gBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3B;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChF,gBAAA,IAAI,MAAM,CAAC,IAAI,EAAE;AACb,oBAAA,OAAO,MAAM;gBACjB;YACJ;QACJ;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;AACtC,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAsB;QAC9B,GAAG,GAAA;YACC,OAAO,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI;QACzD,CAAC;QAED,MAAM,GAAA;AACF,YAAA,OAAO,MAAM,CAAC,GAAG,EAAE,KAAK,SAAS;QACrC,CAAC;AAED,QAAA,MAAM,CAAC,OAA6E,EAAA;YAChF,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAC1D,IAAI,IAAI,EAAE;AACN,gBAAA,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO;AACvE,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YAChC;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;QAED,MAAM,GAAA;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAClE,IAAI,IAAI,EAAE;gBACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjC;YACJ;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;QAED,IAAI,GAAA;;AAEA,YAAA,OAAO,MAAM,CAAC,MAAM,EAAE;QAC1B,CAAC;QAED,IAAI,GAAA;;;AAGA,YAAA,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC;AAC9E,YAAA,OAAO,MAAM;QACjB,CAAC;AAED,QAAA,WAAW,CAAC,QAAgB,EAAA;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QACtC,CAAC;QAED,WAAW,CAAC,GAAG,QAAuB,EAAA;YAClC,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAC1D,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YACnC;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;AAED,QAAA,cAAc,CAAC,SAA0C,EAAA;YACrD,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;AAC1D,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9D;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;AAED,QAAA,MAAM,CAAC,UAAqC,EAAA;AACxC,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAC7E,IAAI,CAAC,IAAI,EAAE;AACP,gBAAA,OAAO,MAAM;YACjB;;YAGA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9C,YAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBACjB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvC;;AAGA,YAAA,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,EAAE,EAAE;;AAElC,gBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB;iBAAO;AACH,gBAAA,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;gBACzE,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE;AACrD,oBAAA,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrC;YACJ;AAEA,YAAA,OAAO,MAAM;QACjB,CAAC;QAED,YAAY,CAAC,GAAG,KAAoB,EAAA;AAChC,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAClE,IAAI,IAAI,EAAE;gBACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACd,oBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;gBAC3C;YACJ;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;QAED,WAAW,CAAC,GAAG,KAAoB,EAAA;AAC/B,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC;YAClE,IAAI,IAAI,EAAE;gBACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACd,oBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;gBAC/C;YACJ;AACA,YAAA,OAAO,MAAM;QACjB,CAAC;KACJ;AAED,IAAA,OAAO,MAAM;AACjB;AAEA;;AAEG;AACH,SAAS,iBAAiB,GAAA;IACtB,OAAO;AACH,QAAA,GAAG,EAAE,MAAM,SAAS;AACpB,QAAA,MAAM,EAAE,MAAM,KAAK;AACnB,QAAA,MAAM,EAAE,MAAM,iBAAiB,EAAE;AACjC,QAAA,MAAM,EAAE,MAAM,iBAAiB,EAAE;AACjC,QAAA,IAAI,EAAE,MAAM,iBAAiB,EAAE;AAC/B,QAAA,IAAI,EAAE,MAAM,iBAAiB,EAAE;AAC/B,QAAA,WAAW,EAAE,MAAM,iBAAiB,EAAE;AACtC,QAAA,WAAW,EAAE,MAAM,iBAAiB,EAAE;AACtC,QAAA,cAAc,EAAE,MAAM,iBAAiB,EAAE;AACzC,QAAA,MAAM,EAAE,MAAM,iBAAiB,EAAE;AACjC,QAAA,YAAY,EAAE,MAAM,iBAAiB,EAAE;AACvC,QAAA,WAAW,EAAE,MAAM,iBAAiB,EAAE;KACzC;AACL;AAEA;AAEA;AAEA;;AAEG;AACH,SAAS,eAAe,CAAC,OAAe,EAAA;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAC9D,IAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG;AACpD,IAAA,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;AAC/B;AAEA;;AAEG;AACH,SAAS,eAAe,CAAC,KAAoB,EAAE,SAAyC,EAAA;AACpF,IAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,YAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB;AAAO,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC7C;IACJ;AACJ;AAEA;;AAEG;AACH,SAAS,oBAAoB,CAAC,KAAoB,EAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAC3D,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,YAAA,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvC;AACJ,IAAA,CAAC,CAAC;AACN;AAEA;;AC9GA;;AAEG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAAsB,qBAAqB;AAEhG;;AClKA;AAEA;;;AAGG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAKI;;AAEG;AACc,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAA6B;AAEzE;;AAEG;AACc,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAuF/F,IAAA;;;AAjFG;;;AAGG;AACH,IAAA,QAAQ,CAAC,UAA6B,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAA,WAAA,EAAc,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,EAAE;QAE3E,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;YACpE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;QAChD;IACJ;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC;AAEA;;;AAGG;AACH,IAAA,GAAG,CAAC,IAAY,EAAA;;AAEZ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;aACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI;aAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,YAAY,EAAE;AACd,YAAA,OAAO,YAAY;QACvB;QAEA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3C;AAEA;;;AAGG;IACH,IAAI,GAAA;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B;;AAGhD,QAAA,MAAM,aAAa,GAAG,CAAC,CAAoB,KAAI;AAC3C,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAA,UAAA,EAAa,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;YAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;AAC3D,gBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACpB;AACJ,QAAA,CAAC;;AAGD,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC;;AAG/C,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;;AAGlE,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACzF;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,IAAY,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;IACvC;AAEA;;;AAGG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAClC;8GAhGS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,iBAAiB,GAAG,IAAI,cAAc,CAAoB,mBAAmB;AAE1F;MAEa,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;;QAKY,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC;;;QAMtD,IAAA,CAAA,KAAK,GAAyB,IAAI;QAClC,IAAA,CAAA,cAAc,GAAmF,EAAE;QACnG,IAAA,CAAA,eAAe,GAAa,EAAE;QAC9B,IAAA,CAAA,cAAc,GAAiE,EAAE;QACjF,IAAA,CAAA,gBAAgB,GAAuD,EAAE;QACzE,IAAA,CAAA,YAAY,GAA+E,EAAE;AAErG;;;AAGG;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAobtE,IAAA;;;AA9aG;;AAEG;AACH,IAAA,MAAM,KAAK,GAAA;;AAEP,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,IAAI,CAAC,KAAK;QACrB;QAEA,MAAM,KAAK,GAAkB,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;;QAGrD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACnC,gBAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;;AAE7B,oBAAA,MAAM,gBAAgB,GAAG,MAAM,QAAQ;AACvC,oBAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC3C;qBAAO;;AAEH,oBAAA,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBACnC;;;AAGA,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;YACtC;QACJ;;QAGA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;;AAG3D,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;QAGlC,eAAe,CAAC,KAAK,CAAC;;AAGtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,OAAO,KAAK;IAChB;AAEA;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;QACV,MAAM,KAAK,GAAkB,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;;QAGrD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACnC,gBAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;;AAE7B,oBAAA,MAAM,gBAAgB,GAAG,MAAM,QAAQ;AACvC,oBAAA,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC3C;qBAAO;;AAEH,oBAAA,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBACnC;;AAEA,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;YACtC;QACJ;;QAGA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;;QAG3D,eAAe,CAAC,KAAK,CAAC;AAEtB,QAAA,OAAO,KAAK;IAChB;AAEA;;;AAGG;IACH,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;IACjC;;;AAMA;;AAEG;IACK,MAAM,gBAAgB,CAAC,KAAoB,EAAA;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAElD,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAClC,YAAA,IAAI;AACA,gBAAA,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC;AACxC,gBAAA,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;;YAGrC;YAAE,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CACT,CAAA,yBAAA,EAA4B,UAAU,CAAC,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG,EAC7D,KAAK,CACR;YACL;QACJ;IACJ;AAEA;;AAEG;AACK,IAAA,yBAAyB,CAAC,KAAoB,EAAA;QAClD,OAAO;AACH,YAAA,QAAQ,EAAE,CAAC,QAAuB,KAAI;AAClC,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC5B,oBAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,wBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;wBAC7D,IAAI,YAAY,EAAE;;AAEd,4BAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC;wBAC7C;6BAAO;;AAEH,4BAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;wBACvB;oBACJ;yBAAO;;AAEH,wBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;oBACvB;gBACJ;YACJ,CAAC;AACD,YAAA,IAAI,EAAE,CAAC,MAAc,KAAyB;gBAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5D,gBAAA,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,KAAK,IAAI;gBAE/C,OAAO;oBACH,MAAM;AACN,oBAAA,MAAM,EAAE,CAAC,QAAuB,EAAE,QAA0B,KAAI;AAC5D,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;oBAC5D,CAAC;oBACD,MAAM,EAAE,MAAK;AACT,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;oBACrC,CAAC;AACD,oBAAA,MAAM,EAAE,CAAC,WAAiC,KAAI;wBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;oBACrD,CAAC;AACD,oBAAA,QAAQ,EAAE,CAAC,QAAuB,KAAI;wBAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBACpD,CAAC;AACD,oBAAA,MAAM,EAAE,CAAC,WAAmB,EAAE,QAAA,GAA6B,QAAQ,KAAI;AACnE,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACnB,4BAAA,MAAM,EAAE,MAAM;4BACd,WAAW;4BACX,QAAQ,EAAE,QAAQ,IAAI,QAAQ;AACjC,yBAAA,CAAC;oBACN,CAAC;iBACJ;YACL;SACH;IACL;AAEQ,IAAA,sBAAsB,CAAC,KAAoB,EAAA;AAC/C,QAAA,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5D,YAAA,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,aAAa;YAChD,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAA,6BAAA,CAA+B,CAAC;AAC9D,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC3B;iBAAO;AACH,gBAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,wBAAA,SAAS,CAAC,QAAQ,GAAG,EAAE;oBAC3B;;AAGA,oBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC5B,wBAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,4BAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;4BAC3E,IAAI,aAAa,EAAE;AACf,gCAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC;4BAC9C;iCAAO;AACH,gCAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;4BACpC;wBACJ;6BAAO;AACH,4BAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;wBACpC;oBACJ;gBACJ;qBAAO;;oBAEH,MAAM,aAAa,GAAkB,EAAE;AACvC,oBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC5B,wBAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,4BAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC;4BACnE,IAAI,YAAY,EAAE;AACd,gCAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC;4BAC7C;iCAAO;AACH,gCAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;4BAC/B;wBACJ;6BAAO;AACH,4BAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;wBAC/B;oBACJ;AAEA,oBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5C,wBAAA,MAAM,cAAc,GAAG,QAAQ,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC;wBAChE,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC;oBAC3D;gBACJ;YACJ;QACJ;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5D,YAAA,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,aAAa;YAChD,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAA,+BAAA,CAAiC,CAAC;YACpE;iBAAO;gBACH,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5C,gBAAA,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAChC;QACJ;QAEA,KAAK,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YACvD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5D,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa;YACnC,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAA,+BAAA,CAAiC,CAAC;YACpE;iBAAO;AACH,gBAAA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;YACzC;QACJ;QAEA,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;AAC5D,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa;YACnC,IAAI,CAAC,SAAS,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAA,qCAAA,CAAuC,CAAC;YAC1E;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrB,oBAAA,SAAS,CAAC,QAAQ,GAAG,EAAE;gBAC3B;;AAGA,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC5B,oBAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AACd,wBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;wBAC3E,IAAI,aAAa,EAAE;AACf,4BAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC;wBAC9C;6BAAO;AACH,4BAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;wBACpC;oBACJ;yBAAO;AACH,wBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;oBACpC;gBACJ;YACJ;QACJ;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC9E;;AAGA,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IAC1B;AAEQ,IAAA,kBAAkB,CAAC,KAAoB,EAAE,MAAc,EAAE,cAA6B,KAAK,EAAA;AAC/F,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACtB,gBAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YAC3C;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC5E,gBAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,MAAM;gBACjB;YACJ;QACJ;QACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;IAClD;AAEA;;AAEG;IACK,cAAc,CAAC,KAAoB,EAAE,IAAY,EAAA;AACrD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACpB,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACtD,IAAI,KAAK,EAAE;AACP,oBAAA,OAAO,KAAK;gBAChB;YACJ;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,gBAAgB,CACpB,KAAoB,EACpB,UAAkB,EAClB,QAAgB,EAChB,QAA0B,EAAA;AAE1B,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,iDAAiD,UAAU,CAAA,YAAA,CAAc,CAAC;YACvF;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;QAC7D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,UAAU;QACvE,IAAI,CAAC,UAAU,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAA,YAAA,CAAc,CAAC;YACzD;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;QACzD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,QAAQ;QACjE,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAA,YAAA,CAAc,CAAC;YAC5D;QACJ;QAEA,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;YAC9C,OAAO,CAAC,IAAI,CACR,CAAA,qBAAA,EAAwB,UAAU,CAAA,WAAA,EAAc,QAAQ,CAAA,+BAAA,CAAiC,CAC5F;YACD;QACJ;QAEA,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;AACpD,QAAA,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAA,oCAAA,CAAsC,CAAC;YACjF;QACJ;AACA,QAAA,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAEnC,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACpB,gBAAA,QAAQ,CAAC,QAAQ,GAAG,EAAE;YAC1B;AACA,YAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAClC;QACJ;QAEA,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,CACR,wBAAwB,QAAQ,CAAA,+CAAA,CAAiD,CACpF;YACD,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC;YAC/C;QACJ;AACA,QAAA,MAAM,WAAW,GAAG,QAAQ,KAAK,QAAQ,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,CAAC;QACrF,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC;IACjD;IAEQ,iBAAiB,CAAC,IAAiB,EAAE,SAAsB,EAAA;AAC/D,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,gBAAA,OAAO,IAAI;YACf;YACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC1C,gBAAA,OAAO,IAAI;YACf;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;IACK,aAAa,CAAC,YAAyB,EAAE,OAAoB,EAAA;;AAEjE,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAChE,QAAA,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;AACrF,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAChE,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAChE,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAC5E,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAChE,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;AACzE,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAC5E,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAChE,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,YAAY,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;;AAGtE,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AACxB,gBAAA,YAAY,CAAC,QAAQ,GAAG,EAAE;YAC9B;;AAGA,YAAA,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;AACrC,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACf,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAC/E,IAAI,aAAa,EAAE;AACf,wBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC;oBAC/C;yBAAO;AACH,wBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACxC;gBACJ;qBAAO;AACH,oBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC;YACJ;QACJ;IACJ;8GAxcS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA8clC,SAAS,eAAe,CAAC,KAAY,EAAE,cAAsB,EAAE,EAAE,QAAgB,CAAC,EAAA;IAC9E,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC1B,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,KAAK,EAAE,GAAG,CAAA,EAAG,KAAK,EAAE;QACzE,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAEjG,IAAI,CAAC,IAAI,GAAG;AACR,YAAA,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,KAAK,KAAK,CAAC;YACnB,WAAW;YACX;SACH;QAED,IAAI,WAAW,EAAE;YACb,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,GAAG,CAAC,CAAC;QAC3D;AACJ,IAAA,CAAC,CAAC;AACN;;AC3eA;AAaA;AAEA;AAEA,SAAS,gBAAgB,CAAC,KAAoB,EAAE,KAAa,EAAA;IAC3D,MAAM,IAAI,GAAyC,EAAE;IACrD,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;AACtB,QAAA,MAAM,QAAQ,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA,EAAI,KAAK,EAAE;QACzC,KAAK,IAAI,CAAC;QACV,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,QAAQ;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACxD;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AAEA;AAEA;;AAEG;AACI,MAAM,0BAA0B,GAAG;AAE1C;;AAEG;MACU,gCAAgC,CAAA;AAA7C,IAAA,WAAA,GAAA;;AAGmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;;IAwDvE;;;AAlDE,IAAA,MAAM,KAAK,GAAA;QACT,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,MAAM,EAAE,MACN,IAAI,YAAY,CAAC;AACf,oBAAA,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,YAAW;wBACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;wBACrD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;wBACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;oBAC5C,CAAC;AACD,oBAAA,KAAK,EAAE,OAAO,GAAY,KAAI;wBAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;wBACrD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;AACrC,wBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC;oBAC7C,CAAC;AACD,oBAAA,QAAQ,EAAE,IAAI;iBACf,CAAC;AACJ,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,wBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE;wBACxC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACrB,qBAAA;AACzB,iBAAA;gBACD,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBAC5C,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AACxC,aAAA;SACF;IACH;AAGD;AAED;;ACtGA;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,qBAAqB,CACjC,WAAgC,EAAA;AAEhC,IAAA,OAAO,wBAAwB,CAAC;QAC5B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAChC,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;AACN,KAAA,CAAC;AACN;AAEA;;;;;;;;;;;;;AAaG;AACG,SAAU,oBAAoB,CAAC,MAIpC,EAAA;IACG,OAAO;QACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;KAC1B;AACL;AAEA;;ACpDO,MAAM,cAAc,GAAG,WAAW,CACvC,EAAE,UAAU,EAAE,MAAM,EAAE;AAEtB;AACA,SAAS,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAI;IACpC,OAAO;AACL,QAAA,KAAK,EAAE,EAAmB;AAC1B,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,IAA0B;AAChC,YAAA,WAAW,EAAE,KAAK;AACnB,SAAA;KACF;AACH,CAAC,CAAC;AAEF;AACA,WAAW,CACT,CACE,KAAK,EACL,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EACvB,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,EACrC,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC,KAC1C;IACF,OAAO;AACL,QAAA,YAAY,CAAC,KAAoB,EAAA;YAC/B,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACrC,CAAC;AAED,QAAA,qBAAqB,CAAC,IAAY,EAAA;YAChC,MAAM,cAAc,GAAG,IAAI;AAE3B,YAAA,MAAM,QAAQ,GAAG,CAAC,KAAoB,KAA2D;AAC/F,gBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;;AAExB,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,wBAAA,IAAI,UAAU,CAAC,IAAI,EAAE;AACnB,4BAAA,OAAO,UAAU;wBACnB;oBACF;AACA,oBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;;wBAEb,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7F,wBAAA,IAAI,WAAW,CAAC,OAAO,EAAE;4BACvB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,SAAS,EAAE;wBACxD;oBACF;gBACF;gBACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;AAC9C,YAAA,CAAC;YAED,MAAM,UAAU,GAAG,CACjB,QAAgB,EAChB,WAAmB,EACnB,wBAAA,GAAqC,EAAE,KACK;;gBAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/C,gBAAA,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9D,gBAAA,MAAM,CAAC,WAAW,EAAE,kBAAkB,GAAG,EAAE,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;gBAEvE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChF,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAEnF,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM;AACtC,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM;;gBAGtC,IAAI,mBAAmB,GAAG,UAAU;AACpC,gBAAA,IAAI,UAAU,GAAG,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;oBACrF,mBAAmB,EAAE,CAAC;gBACxB;;gBAGA,IAAI,QAAQ,GAAG,IAAI;AACnB,gBAAA,IAAI,UAAU,GAAG,mBAAmB,EAAE;oBACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC7C;AAEA,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE;wBACvC,QAAQ,GAAG,KAAK;wBAChB;oBACF;gBACF;gBAEA,IAAI,CAAC,QAAQ,EAAE;oBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC7C;;AAGA,gBAAA,MAAM,cAAc,GAAG,mBAAmB,GAAG,UAAU;;AAGvD,gBAAA,MAAM,YAAY,GAAG,mBAAmB,KAAK,UAAU;;AAGvD,gBAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC;AACvD,gBAAA,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,kBAAkB,CAAC;gBAC7D,IAAI,YAAY,GAAG,IAAI;gBACvB,MAAM,cAAc,GAA4B,EAAE;gBAClD,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;oBAChC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,cAAc,EAAE;wBACnC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;4BAC9B,YAAY,GAAG,KAAK;4BACpB;wBACF;oBACF;gBACF;gBAEA,OAAO;AACL,oBAAA,OAAO,EAAE,CAAC,YAAY,IAAI,cAAc,KAAK,YAAY;AACzD,oBAAA,SAAS,EAAE,cAAc,IAAI,CAAC,YAAY;iBAC3C;AACH,YAAA,CAAC;AAED,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;YAC3B,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;AAChD,YAAA,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;QACjF,CAAC;AAED,QAAA,cAAc,CAAC,IAAiB,EAAA;AAC9B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3B,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACS,iBAAA,CAAC;AACxC,gBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;YACtE;AACA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAA4B;gBACjD,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;oBAClC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;gBACjD;qBAAO;oBACL,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;gBACxD;YACF;QACF,CAAC;AAED,QAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,EAAE;AAC7C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACtB,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,MAAM,UAAU,GAAG,CAAC,WAAwB,EAAE,UAAuB,KAAa;gBAChF,IAAI,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC9C,oBAAA,OAAO,IAAI;gBACb;gBACA,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,KAAK;AACtF,YAAA,CAAC;AAED,YAAA,OAAO,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;QAC1E,CAAC;KACF;AACH,CAAC,CACF,EACD,SAAS,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC,KAAI;AACxE,IAAA,IAAI,kBAAuB;IAE3B,OAAO;QACL,MAAM,GAAA;;YAEJ,CAAC,YAAW;AACV,gBAAA,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE;gBAC/C,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACrC,CAAC,GAAG;;YAGJ,kBAAkB,GAAG,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,YAAW;AACxE,gBAAA,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE;gBAC/C,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrC,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,SAAS,GAAA;;YAEP,IAAI,kBAAkB,EAAE;gBACtB,kBAAkB,CAAC,WAAW,EAAE;YAClC;QACF,CAAC;KACF;AACH,CAAC,CAAC;;AC9LJ;;;AAGG;MAEU,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAmGrD,IAAA;AAjGG;;AAEG;AACH,IAAA,aAAa,CAAC,IAAiB,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC;QAChB;;AAGA,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACxF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,EAAE;AACvD,gBAAA,OAAO,KAAK;YAChB;QACJ;;AAGA,QAAA,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACrD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;YACpG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,EAAE;AACnD,gBAAA,OAAO,KAAK;YAChB;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACH,kBAAkB,CAAC,IAAiB,EAAE,aAA8C,EAAA;AAChF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,OAAO,KAAK;QAChB;QAEA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;;YAEhC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AAC5B,gBAAA,OAAO,KAAK;YAChB;;AAGA,YAAA,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACvC,gBAAA,OAAO,IAAI;YACf;;YAGA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC/C,gBAAA,OAAO,IAAI;YACf;;AAGA,YAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACf,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;AAEA;;;;;;;;;AASG;IACH,oBAAoB,CAAC,IAAiB,EAAE,aAA8C,EAAA;;QAElF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC3B,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI;QACf;;QAGA,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;AAC9C,YAAA,OAAO,IAAI;QACf;;AAGA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,OAAO,IAAI;QACf;;AAGA,QAAA,OAAO,KAAK;IAChB;8GAnGS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,+BAA+B,CAAA;IAC1C,MAAM,OAAO,CAAC,OAA2C,EAAA;AACvD,QAAA,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAAE;AAClE,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,eAAe;AACpB,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC9B,oBAAA,QAAQ,EAAE,SAAS;AACpB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;MCNY,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;AACE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IA4DjD;IA1DE,MAAM,MAAM,CAAC,IAAY,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;QAClF,OAAO,MAAM,CACX,SAAS,CAAC,GAAG,CAAkB,CAAC,IAAI,MAAM;YACxC,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,CAAC;AACZ,kBAAG;AACC,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,yBAAA;AACF,qBAAA;AACoB;kBACtB,IAAI,CAAC,OAA6B;YACvC,MAAM,EAAE,IAAI,CAAC;AACX,kBAAE;AACE,oBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AACxB;AACH,kBAAE,SAAS;SACd,CAAC,CAAC,EACH,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CACpE;IACH;AAEA;;;;;;AAMG;AACK,IAAA,MAAM,eAAe,CAAC,SAAwB,EAAE,UAAkB,EAAA;QACxE,MAAM,MAAM,GAA4B,EAAE;AAE1C,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;;AAE5B,YAAA,IACE,IAAI,CAAC,IAAI,IAAI,OAAO;gBACpB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;gBACjC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EACxG;AACA,gBAAA,MAAM,CAAC,IAAI,CAAC,IAA6B,CAAC;YAC5C;;AAGA,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAA0B,CAAC,CAAC;YAC5F;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;MCjEY,0BAA0B,CAAA;8GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAN3B;;AAEP,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;AAEP,IAAA,CAAA;AACH,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;sBAEE;;;MCKU,sBAAsB,CAAA;AAKrB,IAAA,aAAa,CAAC,MAA2B,EAAA;;;IAGnD;8GARS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVrB;;;;;;AAMT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIQ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAXlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;;;;;;AAMT,IAAA,CAAA;AACD,oBAAA,OAAO,EAAE,EAAE;oBACX,aAAa,EAAE,iBAAiB,CAAC;AACpC,iBAAA;;sBAEI;;;MCbQ,kCAAkC,CAAA;AAA/C,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,WAAW,GAA0B,EAAE;AACvC,QAAA,IAAA,CAAA,aAAa,GAAqC,IAAI,GAAG,EAAE;IA8CrE;IA5CE,aAAa,CACX,IAAY,EACZ,KAAa,EACb,KAAa,EACb,IAAY,EACZ,KAAa,EACb,OAGC,EAAA;AAED,QAAA,MAAM,gBAAgB,GAAwB;YAC5C,IAAI;YACJ,KAAK;YACL,KAAK;YACL,IAAI;YACJ,KAAK;AACL,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,aAAa;AAC9C,gBAAA,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,IAAI,SAAS;AACtD,gBAAA,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;AACxC,gBAAA,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,UAAU;AACtC,aAAA;AACD,YAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;SAChC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC/C,QAAA,OAAO,IAAI,0BAA0B,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAC/D;IAGA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;;AAGA,IAAA,SAAS,CAAC,IAAY,EAAA;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IACrC;AAEA,IAAA,aAAa,CAAC,IAAY,EAAA;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IACrC;AACD;MAEY,0BAA0B,CAAA;IAIrC,WAAA,CAAY,OAA2C,EAAE,UAA+B,EAAA;AACtF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAC9B;AAEA,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,MAAM,SAAS,GAAoB;YACjC,IAAI;YACJ,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC9B,YAAA,QAAQ,EAAE,SAAS;SACpB;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,QAAA,OAAO,IAAI,gCAAgC,CAAC,IAAI,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,IAAY,EAAA;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;QAClF,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;QAC9F;AACA,QAAA,OAAO,IAAI,gCAAgC,CAAC,IAAI,CAAC;IACnD;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO;IACrB;AACD;MAEY,gCAAgC,CAAA;AAG3C,IAAA,WAAA,CAAY,aAAyC,EAAA;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;IACpC;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,aAAa;IAC3B;AACD;;ACtFD;MACa,8BAA8B,GAAG,IAAI,cAAc,CAC9D,gCAAgC;MAIrB,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtE,IAAA,CAAA,KAAK,GAAiC,IAAI;AAiDnD,IAAA;AA/CS,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,kCAAkC,EAAE;;QAGxD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACjC,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YACjC;QACF;;;AAKA,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,EAAE;IACvC;AAEO,IAAA,MAAM,YAAY,GAAA;AACvB,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACvB;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,OAAO,EAAE;QACX;aAAO;YACL,OAAO,IAAI,CAAC,KAAK;QACnB;IACF;AAEO,IAAA,cAAc,CAAC,cAAsB,EAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC;QAC1F,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,CAAA,UAAA,CAAY,CAAC;QACrE;AACA,QAAA,OAAO,UAAU;IACnB;AAEO,IAAA,qBAAqB,CAAC,eAAuB,EAAA;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,KAAK,eAAe,CAAC;QAC5F,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,eAAe,CAAA,UAAA,CAAY,CAAC;QACvE;AACA,QAAA,OAAO,UAAU;IACnB;8GAlDW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCJZ,wBAAwB,CAAA;AAA9C,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IASpE;IANE,MAAM,MAAM,CAAC,IAAY,EAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,OAAO;QACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAClC,2BAA2B,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CACzD;IACH;AACD;;ACXD;MACa,mBAAmB,GAAG,IAAI,cAAc,CAAsB,qBAAqB;MAGnF,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC9D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAqG1D,IAAA;IAnGC,MAAM,MAAM,CAAC,IAAY,EAAA;;QAEvB,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;AAChD,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QAC7C;;QAGA,MAAM,YAAY,GAAwB,EAAE;;QAG5C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACjC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACnC;AAEA,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;QAClD;QAEA,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAC7C,CAAC,QAAQ,KAAoC,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,CACvG;AAED,QAAA,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;QAC7E;QAEA,MAAM,SAAS,GAA6B,EAAE;AAC9C,QAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C,QAAA,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE;AACjC,YAAA,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;AAChC,gBAAA,IAAI;AACF,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;oBAEtE,SAAS,CAAC,IAAI,CAAC;wBACb,cAAc,EAAE,UAAU,CAAC,KAAK;wBAChC,eAAe,EAAE,UAAU,CAAC,KAAK;wBACjC,IAAI,EAAE,MAAM,CAAC,KAAK;wBAClB,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA,CAAE;wBAC7F,KAAK,EACH,MAAM,CAAC,KAAK;AACZ,6BAAC,UAAU,CAAC,MAAM,CAAC;AACjB,kCAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI;kCACxE,SAAS,CAAC;wBAChB,WAAW,EACT,MAAM,CAAC,WAAW;AAClB,6BAAC,UAAU,CAAC,MAAM,CAAC;AACjB,kCAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI;kCAC9E,SAAS,CAAC;AAChB,wBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI;wBACpC,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,KAAK,EAAE,UAAU,CAAC,KAAK;AACxB,qBAAA,CAAC;gBACJ;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClB;YACF;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,OAAO;AACjE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,QAAA,MAAM,WAAW,GACf,eAAe,CAAC,MAAM,KAAK;AACzB,cAAE;AACF,cAAE,SAAS,CAAC,MAAM,CACd,CAAC,IAAI,KACH,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC;gBAChE,2BAA2B,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,MAAM,CAAC,CACzE;;QAGP,MAAM,WAAW,GAAkC,EAAE;QACrD,MAAM,QAAQ,GAAmD,EAAE;;AAGnE,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC9B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAe,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBACxB,QAAQ,CAAC,SAAS,CAAC,GAAG;AACpB,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,KAAK,EAAE,IAAI,CAAC,eAAgB;AAC5B,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,QAAQ,EAAE,EAAE;iBACb;gBACD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvC;YACA,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/F;;AAGA,QAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAE7C,QAAA,OAAO,WAAW;IACpB;8GAxGW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACVlC;;;AAGG;AACG,SAAU,0BAA0B,CACxC,SAAiB,EACjB,UAA2D,EAAA;IAE3D,OAAO;AACL,QAAA,WAAW,EAAE;AACX,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,KAAK,EAAE,UAAU,CAAC,KAAK;AACvB,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA;AACD,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,EAAE;AACZ,SAAA;KACF;AACH;AAEA;;;;AAIG;AACG,SAAU,yBAAyB,CAAC,MAOzC,EAAA;IACC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;AACb,QAAA,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM,CAAC,QAAQ;AACtB,QAAA,WAAW,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ;QACrD,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;AACzE,SAAA;KACF;AACH;;IClDY;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,uBAAA,CAAA,GAAA,oDAA4E;AAC5E,IAAA,iBAAA,CAAA,uBAAA,CAAA,GAAA,uCAA+D;AAC/D,IAAA,iBAAA,CAAA,8BAAA,CAAA,GAAA,oDAAmF;AACnF,IAAA,iBAAA,CAAA,qBAAA,CAAA,GAAA,2CAAiE;AACjE,IAAA,iBAAA,CAAA,8BAAA,CAAA,GAAA,oDAAmF;AACnF,IAAA,iBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD;AACrD,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,8CAA0D;AAC1D,IAAA,iBAAA,CAAA,oBAAA,CAAA,GAAA,0CAA+D;AAC/D,IAAA,iBAAA,CAAA,2BAAA,CAAA,GAAA,2CAAuE;AACzE,CAAC,EAVW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;;ACU7B;MAEa,gBAAgB,GAAG,mBAAmB,CAAkB,sBAAsB;MAC9E,eAAe,GAAG,mBAAmB,CAAiC,qBAAqB;MAC3F,cAAc,GAAG,mBAAmB,CAAiC,oBAAoB;AAGhG,MAAO,yBAA0B,SAAQ,iBAAiB,CAAA;AADhE,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAWhC,IAAA;IAVC,MAAM,OAAO,CAAC,OAA2B,EAAA;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;QACxD;aAAO;AACL,YAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE;gBAClF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACzC;;AAAO,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;QACjE;IACF;8GAXW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzB,yBAAyB,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;AAgBK,MAAO,sBAAuB,SAAQ,iBAAiB,CAAA;AAD7D,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAMzD,IAAA,CAAA,aAAa,GAAG,QAAQ;AAezB,IAAA;IAbC,MAAM,OAAO,CAAC,OAA2B,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1E,QAAA,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CACnD,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EACxD,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GACzD,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GACxD,YAAY,EACZ,KAAK,EACL,QAAQ,CACT;QACD,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;IAClD;8GAtBW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;AA2BK,MAAO,cAAe,SAAQ,iBAAiB,CAAA;AADrD,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAoBrD,IAAA;IAdC,MAAM,OAAO,CAAC,OAA2B,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;QAE1F,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/D,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACnE,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA,CAAC;QACJ;IACF;8GAtBW,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;AA2BK,MAAO,eAAgB,SAAQ,iBAAiB,CAAA;IACpD,MAAM,OAAO,CAAC,OAA2B,EAAA;QACvC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAM,MAAM,CAAC,EAAE,CAAC,CAAC;IAClH;8GAHW,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;AC7EK,MAAO,+BAAgC,SAAQ,iBAAiB,CAAA;AADtE,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAuChC,IAAA;IArCC,MAAM,OAAO,CAAC,OAA2B,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAsC;AACzE,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI;QACjC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC;YACvD;QACF;QAEA,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE;AAC1F,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC7B;aAAO;AACL,YAAA,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1D,YAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;YAEtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE;AAC/B,gBAAA,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM;AACzB,gBAAA,WAAW;AACX,gBAAA,QAAQ;AACT,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;AACK,IAAA,gBAAgB,CAAC,WAA+B,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS;AAElC,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;aAC7B,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC/B,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC3D,YAAA,OAAO,MAAM;QACf,CAAC,EAAE,EAA4B,CAAC;IACpC;8GAvCW,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA/B,+BAA+B,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;AA2CM,MAAM,mBAAmB,GAAgB;AAC9C,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE;AACL,YAAA,MAAM,EAAE,iBAAiB;AAC1B,SAAA;AACF,KAAA;;;MChDU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAW3C,IAAA;IARG,WAAW,CAAC,KAAU,EAAE,IAA0B,EAAA;AAC9C,QAAA,IAAI,KAAK,YAAY,gBAAgB,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;YACpG,IAAI,CAAC,KAAK,CAAC;QACf;aAAO;YACH,IAAI,CAAC,KAAK,CAAC;QACf;IACJ;8GAXS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;MCAqB,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C;;;ICFW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,oBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;MCMnB,oCAAoC,CAAA;AAAjD,IAAA,WAAA,GAAA;AACE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAgCpD;IA9BE,MAAM,OAAO,CACX,OAAmD,EAAA;AAGnD,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC;;AAGzD,QAAA,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC9B,YAAA,QAAQ,EAAE,OAAO,UAAkB,EAAE,QAAgB,KAAI;gBACvD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC;gBAC7C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC1D,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,UAAU;AACpB,iBAAA,CAAC;gBACF,MAAM,WAAW,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM;AACnD,oBAAA,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,qBAAA;AACF,iBAAA,CAAC,CAAC;AAEH,gBAAA,OAAO,WAAW;YACpB,CAAC;AACF,SAAA,CAAC;IACJ;AACD;;MCmEY,eAAe,CAAA;IAC1B,OAAO,OAAO,CAAC,OAAgC,EAAA;QAC7C,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC;AACjC,gBAAA;AACE,oBAAA,OAAO,EAAE,wBAAwB;AACjC,oBAAA,UAAU,EAAE,CAAC,QAAwC,KAAK,MAAK;AAC7D,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;oBACtD,CAAC;oBACD,IAAI,EAAE,CAAC,8BAA8B,CAAC;AACtC,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACF,aAAA;SACF;IACH;IAEA,OAAO,QAAQ,CAAC,OAAgC,EAAA;QAC9C,OAAO;AACL,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC;AACjC,gBAAA;AACE,oBAAA,OAAO,EAAE,wBAAwB;AACjC,oBAAA,UAAU,EAAE,CAAC,QAAwC,KAAK,MAAK;AAC7D,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;oBACtD,CAAC;oBACD,IAAI,EAAE,CAAC,8BAA8B,CAAC;AACtC,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACF,aAAA;SACF;IACH;AAEA;;AAEG;AACH,IAAA,WAAA,CACoC,SAAgB,EAAA;AAElD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACtB,YAAA,CAAC,EAAE;AACL,QAAA,CAAC,CAAC;IACJ;AA5CW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kBAuChB,wBAAwB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAvCvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,kCAzDxB,aAAa;YACb,gBAAgB;YAChB,aAAa;AACb,YAAA,uBAAuB,aAEf,YAAY,CAAA,EAAA,CAAA,CAAA;AAoDX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,SAAA,EAnDf;YACT,qBAAqB;AACrB,YAAA;AACE,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,QAAQ,EAAE,qBAAqB;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,4BAA4B;AACvC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,sCAAsC;AACjD,aAAA;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,qBAAqB;AAC/B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,8BAA8B;AACvC,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,8BAA8B;AACxC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,iCAAiC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,oCAAoC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;gBACxC,UAAU,EAAE,YAAW;AACrB,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACjC,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,gEAAoC,CAAC,EAAE,wBAAwB;AAC9F,oBAAA,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC;gBAC/B,CAAC;AACD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,OAAA,EAAA,CAlEC,iBAAiB,CAAC,QAAQ,CAAC;AACzB,gBAAA,OAAO,EAAE;AACP,oBAAA,iBAAiB,EAAE,+BAA+B;AAClD,oBAAA,oBAAoB,EAAE,sBAAsB;AAC5C,oBAAA,YAAY,EAAE,cAAc;AAC5B,oBAAA,MAAM,EAAE,eAAe;AACxB,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;aACF,CAAC;YACF,aAAa;YACb,gBAAgB;YAChB,aAAa;AACb,YAAA,uBAAuB,EAEf,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAoDX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAtE3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,iBAAiB,CAAC,QAAQ,CAAC;AACzB,4BAAA,OAAO,EAAE;AACP,gCAAA,iBAAiB,EAAE,+BAA+B;AAClD,gCAAA,oBAAoB,EAAE,sBAAsB;AAC5C,gCAAA,YAAY,EAAE,cAAc;AAC5B,gCAAA,MAAM,EAAE,eAAe;AACxB,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,QAAQ,EAAE,mBAAmB;AAC9B,6BAAA;yBACF,CAAC;wBACF,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,uBAAuB;AACxB,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,SAAS,EAAE;wBACT,qBAAqB;AACrB,wBAAA;AACE,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE,qBAAqB;AAChC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,4BAA4B;AACvC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,sCAAsC;AACjD,yBAAA;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,qBAAqB;AAC/B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,8BAA8B;AACvC,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,8BAA8B;AACxC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,iCAAiC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,oCAAoC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;4BACxC,UAAU,EAAE,YAAW;AACrB,gCAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gCACjC,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,gEAAoC,CAAC,EAAE,wBAAwB;AAC9F,gCAAA,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC;4BAC/B,CAAC;AACD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;0BAwCI,MAAM;2BAAC,wBAAwB;;;MC/IvB,WAAW,GAAG,IAAI,cAAc,CAAM,aAAa;MAEnD,yBAAyB,GAAG,IAAI,cAAc,CAAqB,2BAA2B,EAAE;AAC3G,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,OAAO,yBAAyB;IAClC,CAAC;AACF,CAAA;AAwBM,MAAM,yBAAyB,GAAuB;AAC3D,IAAA,SAAS,EAAE,eAAe;AAC1B,IAAA,KAAK,EAAE,iBAAiB;AAExB,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;;AAGG,SAAU,cAAc,CAAC,MAAA,GAAsC,yBAAyB,EAAA;AAC5F,IAAA,OAAO,KAAK,CAAC,yBAAyB,EAAE,MAAM,CAAC;AACjD;;MC5Ca,qBAAqB,GAAG,IAAI,cAAc,CAAiB,uBAAuB;;ACmC/F;AAEA;AAEA;;;AAGG;MACU,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B;AAG5B;;AC5CA;AAEA;;;;AAIG;MAIU,qBAAqB,CAAA;AAHlC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAC5E,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AA4G7C,IAAA;;;AAtGC;;;;;AAKG;IACH,MAAM,UAAU,CAAC,OAAsC,EAAA;;;;AAIrD,QAAA,IAAI,WAAgB;AACpB,QAAA,IAAI;YACF,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,uBAAuB,EAAE;AACrE,gBAAA,GAAG,OAAO;;;AAGX,aAAA,CAAC;QACJ;QAAE,OAAO,GAAG,EAAE;;AAEZ,YAAA,OAAO,CAAC,IAAI,CAAC,4EAA4E,EAAE,GAAG,CAAC;QACjG;;AAGA,QAAA,MAAM,aAAa,GAAkC;AACnD,YAAA,GAAG,OAAO;YACV,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;SACvD;;AAGD,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;;QAG/C,MAAM,iBAAiB,GAAG;aACvB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,uBAAuB;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;;AAGxD,QAAA,IAAI,cAAc,GAAG,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE;AAC9E,QAAA,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;AACxC,YAAA,IAAI;gBACF,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAC7E;YACH;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,QAAQ,CAAC,GAAG,CAAA,QAAA,CAAU,EAAE,GAAG,CAAC;YACjF;QACF;;AAGA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC;IAC5F;;;AAMA;;AAEG;AACK,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,OAAO,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CACjF;IACH;AAEA;;AAEG;AACK,IAAA,aAAa,CACnB,OAAgC,EAChC,cAAqD,EACrD,cAAwB,EAAA;AAExB,QAAA,MAAM,kBAAkB,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACnE,QAAA,MAAM,mBAAmB,GAAG,cAAc,IAAI,EAAE;AAEhD,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;;YAE/B,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC/C,gBAAA,OAAO,KAAK;YACd;;AAGA,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;AAC1B,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC/E,gBAAA,OAAO,IAAI;YACb;;AAGA,YAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,gBAAA,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM;YACxB;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;8GA9GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AC4HD;;ACpIO,MAAM,gCAAgC,GAA0B;AACrE,IAAA,GAAG,EAAE,uBAAuB;IAC5B,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,CAAC,OAAsC,KAAmC;AACjF,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;;AAGzC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO;QAErC,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;AAClB,YAAA;AACE,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,iDAAiD;AAC1D,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,GAAG,EAAE,OAAO,YAAyC,KAAI;;AAEvD,oBAAA,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;AACrC,wBAAA,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,IAAI;wBACzC,MAAM,EAAE,aAAa,EAAE,MAAM;AAC9B,qBAAA,CAAC;;AAGF,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;wBACtB;oBACF;;oBAGA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CACzB,CAAC,IAAI,MACF;AACC,wBAAA,EAAE,EAAE,gBAAgB,CAAC,IAAI,EAAE;wBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,MAAM,EAAE;AACN,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,CAAoB,CACxB;;AAGD,oBAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClC,CAAC;AACF,aAAA;SACF;AAED,QAAA,OAAO,OAAO;IAChB,CAAC;;;MCjDU,2BAA2B,GAAG,IAAI,cAAc,CAA4B,6BAA6B;MAGzG,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAgB5E,IAAA;AAdC,IAAA,MAAM,KAAK,GAAA;QACT,MAAM,KAAK,GAAkB,EAAE;QAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACjC,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACzC;QACF;AACA,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,GAAG,CAAC,IAAY,EAAA;QACpB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;IACzD;8GAhBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLZ,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACHD;;;AAGG;AAwGH;;;AAGG;MACmB,iBAAiB,CAAA;AAoBtC;AAED;;AChIA;AAEA;;;AAGG;MACU,oBAAoB,GAAG,IAAI,cAAc,CAAsB,sBAAsB;AAElG;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MAEU,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;;AAIU,QAAA,IAAA,CAAA,SAAS,GAAwB,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACvF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;;;AAM1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAA6B;QAChD,IAAA,CAAA,qBAAqB,GAAyB,IAAI;QAClD,IAAA,CAAA,aAAa,GAAG,KAAK;AAwL9B,IAAA;;;AAlLC;;;AAGG;AACK,IAAA,MAAM,UAAU,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,OAAO,IAAI,CAAC,qBAAqB;QACnC;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE;QACjD,MAAM,IAAI,CAAC,qBAAqB;IAClC;AAEQ,IAAA,MAAM,aAAa,GAAA;;AAEzB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,gBAAmC;AAEvC,YAAA,IAAI,QAAQ,YAAY,OAAO,EAAE;;gBAE/B,gBAAgB,GAAG,MAAM,QAAQ;YACnC;iBAAO;;gBAEL,gBAAgB,GAAG,QAAQ;YAC7B;YAEA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBAC5C,OAAO,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,gBAAgB,CAAC,GAAG,CAAA,8CAAA,CAAgD,CAAC;YACxG;YAEA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;;;AAMA;;;;;;;;;;;;;;;AAeG;IACI,MAAM,SAAS,CAAC,GAAW,EAAA;AAChC,QAAA,MAAM,IAAI,CAAC,UAAU,EAAE;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACI,IAAA,MAAM,iBAAiB,CAC5B,aAAqB,EACrB,UAA+B,EAC/B,OAA4B,EAAA;AAE5B,QAAA,MAAM,IAAI,CAAC,UAAU,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,aAAa,CAAA,YAAA,CAAc,CAAC;QAC3E;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;AACrE,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yBAAA,EAA4B,UAAU,CAAC,IAAI,CAAA,MAAA,EAAS,UAAU,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC;QACvF;;AAGA,QAAA,IAAI,WAAmB;AACvB,QAAA,IAAI,cAAuC;AAE3C,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE;;AAEtB,YAAA,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI;AACrC,YAAA,cAAc,GAAG;gBACf,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;AACrC,gBAAA,GAAG,OAAO;aACX;QACH;aAAO;;YAEL,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI;YACjF,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;YAChG;AAEA,YAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AACxB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;AAE1B,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,gBAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;YACjE;YAEA,WAAW,GAAG,qBAAqB;AACnC,YAAA,cAAc,GAAG;gBACf,MAAM;gBACN,MAAM,EAAE,UAAU,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,UAAU;AACzE,gBAAA,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACrB,gBAAA,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;aACxB;QACH;;AAGA,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC;AAE7E,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACnE,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,6CAA6C,CAAC;QACxE;IACF;AAEA;;;AAGG;AACK,IAAA,iBAAiB,CACvB,QAA2B,EAC3B,IAAY,EACZ,EAAU,EAAA;QAEV,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAC9B,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,CACjE;IACH;AAEA;;AAEG;AACK,IAAA,0BAA0B,CAAC,KAAgD,EAAA;AACjF,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAA+B,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACvE,OAAO,KAAK,IAAI,EAAE;QACpB;AACA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;8GAjMW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AClDlC;;;AAGG;IACS;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC1B,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC;AAChC,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,kBAAmC;AACnC,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAxBW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;AA0B/B,MAAM,IAAI,GAAG,CAAC,GAAW,KAAK,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE;AAExD;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7C,IAAA,IAAI,EAAE;QACJ,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC9B,QAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,mBAAmB,CAAC,MAAM;AAChC,QAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;AAC3B,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACvC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC9B,QAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,UAAU,EAAE;QACV,IAAI,EAAE,mBAAmB,CAAC,UAAU;AACpC,QAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC;AAChC,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC;AAC5C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,QAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,OAAO,EAAE;QACP,IAAI,EAAE,mBAAmB,CAAC,OAAO;AACjC,QAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC9B,QAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB,CAAC,SAAS;AACnC,QAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,mBAAmB,CAAC,KAAK;AAC/B,QAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;AAC1B,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACtC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,aAAa,EAAE;QACb,IAAI,EAAE,mBAAmB,CAAC,aAAa;AACvC,QAAA,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACnC,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,4BAA4B,CAAC;AAC/C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,cAAc,EAAE;QACd,IAAI,EAAE,mBAAmB,CAAC,cAAc;AACxC,QAAA,KAAK,EAAE,IAAI,CAAC,wBAAwB,CAAC;AACrC,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,8BAA8B,CAAC;AACjD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,QAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC7B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB,CAAC,SAAS;AACnC,QAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,QAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC7B,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,QAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC7B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,mBAAmB,CAAC,MAAM;AAChC,QAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;AAC3B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACvC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,QAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC7B,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC;AACzC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,OAAO,EAAE;QACP,IAAI,EAAE,mBAAmB,CAAC,OAAO;AACjC,QAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5B,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB,CAAC,SAAS;AACnC,QAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACD,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB,CAAC,SAAS;AACnC,QAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,mBAAmB,CAAC,MAAM;AAChC,QAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;AAC3B,QAAA,IAAI,EAAE,0BAA0B;AAChC,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACvC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AAED,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,mBAAmB,CAAC,MAAM;AAChC,QAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;AAC3B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACvC,QAAA,KAAK,EAAE,CAAC;AACT,KAAA;AACD,IAAA,OAAO,EAAE;QACP,IAAI,EAAE,mBAAmB,CAAC,OAAO;AACjC,QAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5B,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,WAAW,EAAE,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;AACqD,CAAA;AAExD;;;;AAIG;AACG,SAAU,eAAe,CAAC,IAAyB,EAAA;AACvD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAwB;AACrG;AAEA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,UAAkB,EAAA;;IAElD,MAAM,gBAAgB,GAAG,UAAiC;IAC1D,IAAI,gBAAgB,EAAE;AACpB,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC;QACtD,IAAI,YAAY,EAAE;;;YAGhB,OAAO;gBACL,KAAK,EAAE,YAAY,CAAC,KAAyB;AAC7C,gBAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI;aAC5B;QACH;IACF;;IAGA,OAAO;AACL,QAAA,KAAK,EAAE,WAA+B;AACtC,QAAA,IAAI,EAAE;KACP;AACH;AAEA;;;;;AAKG;AACG,SAAU,aAAa,CAAC,UAAkB,EAAA;IAC9C,MAAM,gBAAgB,GAAG,UAAiC;IAC1D,IAAI,gBAAgB,EAAE;AACpB,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC;QACtD,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,YAAY;QACrB;IACF;;IAGA,OAAO;AACL,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,CAAA,QAAA,EAAW,UAAU,CAAA,CAAE;AACpC,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE;KACR;AACH;AAEA;;;;;AAKG;AACG,SAAU,wBAAwB,CACtC,UAA+B,EAC/B,SAAwC,EAAA;AAExC,IAAA,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC;IAChD,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,CAAA,UAAA,CAAY,CAAC;IAC1D;IAEA,OAAO;AACL,QAAA,GAAG,YAAY;AACf,QAAA,GAAG,SAAS;KACb;AACH;;MC3Va,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAYzC,IAAA;IAVU,IAAI,CAAC,KAAa,EAAE,KAAa,EAAA;QACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,QAAA,QAAQ,CAAC,IAAI,GAAG,MAAM;QACtB,QAAQ,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,MAAM,EAAE;AACjB,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU,CAAC;IAC1C;8GAXS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA;;2FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACLD;AAMA;AAEA;AAEA;;;AAGG;MAIU,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAkHtE,IAAA;;;AA5GC;;AAEG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,IAAI;;AAEF,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;;YAGxC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;;YAGnD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE;;AAGpE,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW;AACvD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AAErC,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,CAAA,MAAA,EAAS,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,SAAS,KAAK,IAAI,EAAE,EAAE,IAAI,KAAK,CAAA,CAAA,CAAG,CAAC;AACrF,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAEf,YAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBAChC,OAAO,CAAC,QAAQ,EAAE;gBAClB;YACF;;AAGA,YAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B;AAC9D,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC9B,gBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;gBACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACrC,oBAAA,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtC;gBACA,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC;AACjD,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkC;YACrE,MAAM,oBAAoB,GAA2B,EAAE;AAEvD,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;gBACrC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,gBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACrB,oBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,wBAAA,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;oBACzC;oBACA,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvD;qBAAO;AACL,oBAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC;;AAGF,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI;gBAChC,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;gBAC7D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;AAEnE,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,UAAU,CAAA,CAAE,CAAC;;AAGjC,gBAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,oBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC/B,oBAAA,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;wBACjC,OAAO,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,OAAO,CAAC,IAAI,CAAA,CAAE,CAAC;AACxC,oBAAA,CAAC,CAAC;gBACJ;qBAAO;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;gBACxC;;AAGA,gBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,oBAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAClC,oBAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACvC,wBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,CAAA,CAAE,CAAC;AACtC,oBAAA,CAAC,CAAC;gBACJ;qBAAO;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;gBAC3C;gBAEA,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACrC,gBAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC1C,oBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,CAAA,CAAE,CAAC;AAClC,gBAAA,CAAC,CAAC;gBACF,OAAO,CAAC,QAAQ,EAAE;YACpB;;AAGA,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACf,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,SAAA,EAAY,YAAY,CAAC,MAAM,CAAA,UAAA,EAAa,WAAW,CAAC,MAAM,CAAA,WAAA,EAAc,eAAe,CAAC,MAAM,CAAA,YAAA,CAAc,CACjH;YAED,OAAO,CAAC,QAAQ,EAAE;QACpB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;QAC/E;IACF;8GAnHW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AC2DK,MAAO,oBAAqB,SAAQ,mBAAmB,CAAA;AA9D7D,IAAA,WAAA,GAAA;;AAiEY,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,4EAAC;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAqB,SAAS,gFAAC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAqB,SAAS,iFAAC;QAElD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;QACzB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;QACvB,IAAA,CAAA,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACzB,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,sFAAC;QACpE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAEjC,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,MAAK;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAEnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAEnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC,CAAC;AA0BH,IAAA;AArCC,IAAA,KAAK;IAaK,cAAc,CAAC,KAA0B,EAAE,IAAwB,EAAA;QAC3E,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;YAAE;AAC/C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AACzB,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,IAAI,CAAC,UAAU,EAAG,GAAG,GAAG,CAAC,GAAG,GAAG;AAC1F,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB;aAAO;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAG,IAAI,IAAI,CAAC,SAAS,EAAG,GAAG,GAAG,CAAC,GAAG,GAAG;AACzF,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;AAEU,IAAA,MAAM,WAAW,CAAC,UAAU,GAAG,KAAK,EAAA;QAC5C,IAAI,CAAC,KAAK,CAAC;AACT,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,GAAG;AACrC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACnB,UAAU;AACX,SAAA,CAAC;IACJ;8GAlDW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7DrB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDK,gBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,6XACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA9DhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDK,gBAAA,CAAA;AACf,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,gBAAgB;wBAChB,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,cAAc;wBACd,gBAAgB;AACjB,qBAAA;AACF,iBAAA;;;AC1ED;MAQa,gBAAgB,CAAA;AAH7B,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAmDtC,IAAA;AAlDC,IAAA,MAAM,uBAAuB,CAAC,OAAoB,EAAE,WAAkC,EAAA;QACpF,MAAM,UAAU,GAAG,CAAC,MAAM,OAAO,cAAc,CAAC,EAAE,OAAO;AAEzD,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW;AACzC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY;QAE3C,IAAI,KAA0B,EAC5B,OAAO,GAAyB,EAAE,EAClC,UAAU,GAAyB,EAAE;QAEvC,IAAI,WAAW,EAAE;YACf,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW;QACtC;QAEA,IAAI,KAAK,EAAE;YACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAChE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AACxB,aAAA,CAAC;AACF,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;AAC1B,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;YACjD;iBAAO;gBACL,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE;YAC7C;QACF;AAEA,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;AAChC,YAAA,GAAG,UAAU;AACb,YAAA,KAAK,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,aAAa,KAAK,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACrE,YAAA,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,IAAI,cAAc,KAAK,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACxE,YAAA,KAAK,EAAE;AACL,gBAAA,SAAS,EAAE,CAAA,MAAA,EAAS,UAAU,EAAE,KAAK,IAAI,CAAC,CAAA,CAAA,CAAG;AAC7C,gBAAA,eAAe,EAAE,UAAU;AAC5B,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,QAAQ,CAAC,IAAU,EAAE,QAAgB,EAAA;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;8GAnDW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLK,SAAU,qBAAqB,CAAC,OAAmC,EAAA;AACvE,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,MAAM,KAAI;AACd,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;AAC7B,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE;YAC1B,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC;AAClE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1E,gBAAA,OAAO,SAAS;YAClB;YACA,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC;aAC9C;QACH;AACA,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;AAC1E,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC;SACA,MAAM,CAAC,OAAO,CAA+B;AAClD;;MCVa,0BAA0B,GAAG,IAAI,cAAc,CAA0B,4BAA4B;;ACZlH;IASY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAJW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAgDzB;AAEA;MAEsB,oBAAoB,CAAA;AAIzC;AAED;;ACnEA;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.types.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.provider.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.service.ts","../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/application.types.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/app/date-filter-presets.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/settings/regional-settings.keys.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings-coercion.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/settings/regional-calendar.service.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-confirm.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-popstate.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-can-deactivate.guard.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.notification.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-notification.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.util.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-completion.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.const.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.storage.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.mapper.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.store.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity-store.service.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.entity.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.handler.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.provider.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.service.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.html","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/errors/not-found.error.ts","../../../../libs/platform/common/src/lib/errors/not-found.routes.ts","../../../../libs/platform/common/src/lib/errors/unauthorized.routes.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.types.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.component.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.service.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-keyboard-shortcuts.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-matcher.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-access.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route.guard.ts","../../../../libs/platform/common/src/lib/layout/menu/protected-route.guards.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/entity-search-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search-display-string.util.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/utils/app-path-navigation.util.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition.types.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/status-definition/statuses.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/debug.service.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["//#region ---- Output kind & segment ----\n\n/** JSON data primitive for the specialist final deliverable. */\nexport type AXPAgentOutputKind = 'string' | 'object' | 'array';\n\n/** When `kind` is `object`, controls how the parsed value maps into chat transcript segments. */\nexport type AXPOutputTranscriptSegmentId = 'text' | 'node' | 'followUp' | 'file';\n\n//#endregion\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n */\nexport interface AXPJsonSchemaLike {\n type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n properties?: Record<string, AXPJsonSchemaLike>;\n items?: AXPJsonSchemaLike | AXPJsonSchemaLike[];\n required?: string[];\n enum?: unknown[];\n additionalProperties?: boolean | AXPJsonSchemaLike;\n description?: string;\n [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Provider response format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAgentResponseFormat =\n | { type: 'text' }\n | { type: 'json_object' }\n | {\n type: 'json_schema';\n schema: AXPJsonSchemaLike;\n name?: string;\n strict?: boolean;\n };\n\n//#endregion\n\n//#region ---- Output contract ----\n\n/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAgentOutputContract {\n kind: AXPAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPOutputTranscriptSegmentId;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAgentResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Transcript segment definition ----\n\n/**\n * Registered preset for an output-contract transcript segment.\n * Modules register via {@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}.\n */\nexport interface AXPOutputContractTranscriptSegmentDefinition {\n /** Segment id (`text`, `node`, `followUp`). */\n name: AXPOutputTranscriptSegmentId;\n /** i18n key or display title for admin UI selects. */\n title: string;\n description?: string;\n /** Contract kinds this segment applies to (defaults to `object` only). */\n applicableKinds?: AXPAgentOutputKind[];\n /** Default `outputContract` field values when this segment is chosen. */\n contract: AXPAgentOutputContract;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPOutputContractTranscriptSegmentDefinition } from './output-contract-transcript-segment.types';\n\n//#region ---- Provider token ----\n\nexport type AXPOutputContractTranscriptSegmentProviderToken =\n | AXPOutputContractTranscriptSegmentProvider\n | Promise<AXPOutputContractTranscriptSegmentProvider>;\n\n/**\n * Registers one or more transcript-segment presets for agent/assist `outputContract`.\n * Use with `multi: true` in module providers.\n */\nexport interface AXPOutputContractTranscriptSegmentProvider {\n provide():\n | AXPOutputContractTranscriptSegmentDefinition[]\n | Promise<AXPOutputContractTranscriptSegmentDefinition[]>;\n}\n\nexport const AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER = new InjectionToken<\n AXPOutputContractTranscriptSegmentProviderToken[]\n>('AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER', {\n factory: () => [],\n});\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from './output-contract-transcript-segment.provider';\nimport type {\n AXPAgentOutputContract,\n AXPOutputContractTranscriptSegmentDefinition,\n AXPOutputTranscriptSegmentId,\n} from './output-contract-transcript-segment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPOutputContractTranscriptSegmentService {\n //#region ---- Dependencies & cache ----\n\n private readonly segmentProviders =\n inject(AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, { optional: true }) ?? [];\n\n private definitionsByName = new Map<string, AXPOutputContractTranscriptSegmentDefinition>();\n private loadPromise: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** All registered transcript segment definitions (deduped by `name`). */\n async getAll(): Promise<AXPOutputContractTranscriptSegmentDefinition[]> {\n await this.ensureLoaded();\n return [...this.definitionsByName.values()];\n }\n\n /** Lookup by segment id (`text`, `node`, `followUp`). */\n async get(\n name: AXPOutputTranscriptSegmentId,\n ): Promise<AXPOutputContractTranscriptSegmentDefinition | undefined> {\n await this.ensureLoaded();\n return this.definitionsByName.get(name);\n }\n\n /** Default `outputContract` for a segment, or `undefined` when not registered. */\n async getContractPreset(name: AXPOutputTranscriptSegmentId): Promise<AXPAgentOutputContract | undefined> {\n const definition = await this.get(name);\n return definition?.contract;\n }\n\n /** Clears the in-memory registry (e.g. after hot reload in dev). */\n clearCache(): void {\n this.definitionsByName.clear();\n this.loadPromise = null;\n }\n\n //#endregion\n\n //#region ---- Load ----\n\n private async ensureLoaded(): Promise<void> {\n if (this.loadPromise) {\n return this.loadPromise;\n }\n this.loadPromise = this.loadDefinitions();\n return this.loadPromise;\n }\n\n private async loadDefinitions(): Promise<void> {\n const resolvedProviders = await Promise.all(this.segmentProviders);\n\n for (const provider of resolvedProviders) {\n if (!provider) {\n continue;\n }\n const definitions = await Promise.resolve(provider.provide());\n for (const definition of definitions) {\n if (!definition?.name) {\n continue;\n }\n if (this.definitionsByName.has(definition.name)) {\n console.warn(\n `[AXPOutputContractTranscriptSegmentService] Segment \"${definition.name}\" already registered; overwriting.`,\n );\n }\n this.definitionsByName.set(definition.name, definition);\n }\n }\n }\n\n //#endregion\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","import { AXDataSourceOperator, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPopupSizeType } from '@acorex/components/popup';\nimport {\n AXPExpression,\n AXPFilterDefinition,\n AXPGridLayoutOptions,\n AXPMetaData,\n AXPOptionsData,\n AXPValidationRules,\n AXPValueTransformerFunctions,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { kebabCase } from 'lodash-es';\n\nexport interface AXEntityPropertyWidget {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n path?: string;\n id?: string;\n children?: AXEntityPropertyWidget[];\n mode: 'view' | 'edit';\n options?: Record<string, any>;\n triggers?: { event: string; action: string; disabled?: boolean }[];\n valueTransforms?: AXPValueTransformerFunctions;\n}\n\nexport enum AXPRelationshipKind {\n Association,\n Composition,\n Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n OneToOne,\n OneToMany,\n ManyToMany,\n}\n\nexport interface AXPRelationship {\n id: string;\n from: string;\n to: string;\n kind: AXPRelationshipKind;\n cardinality: AXPRelationshipCardinality;\n}\n\nexport enum AXPEntityCommandScope {\n TypeLevel = 'typeLevel',\n Selected = 'selected',\n Individual = 'individual',\n Section = 'section',\n}\n\nexport enum AXPEntityQueryType {\n Single = 'single',\n List = 'list',\n}\n\nexport interface AXPEntityPropertyLayoutConfig extends AXPGridLayoutOptions {\n label?: {\n visible?: boolean;\n };\n order?: number;\n visible?: boolean | AXPExpression;\n}\n\nexport interface AXPEntityPropertyGroup {\n id: string;\n title: string;\n description?: string;\n permissions?: string[];\n icon?: string;\n}\n\nexport interface AXPEntityPropertyView {\n name: string;\n dataPath?: string;\n permissions?: string[];\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityPropertyUpdateView extends AXPEntityPropertyView {}\n\nexport interface AXPEntityPropertyCreateView extends AXPEntityPropertyView {\n defaultValue?: any;\n}\n\nexport interface AXPEntitySectionView {\n id: string;\n order?: number;\n collapsed?: boolean;\n layout?: AXPEntityPropertyLayoutConfig;\n}\n\nexport interface AXPEntityProperty {\n name: string;\n title: string;\n description?: string;\n groupId?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean | string;\n visible?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n unique?: {\n enabled: boolean;\n };\n interface?: Partial<AXEntityPropertyWidget>;\n };\n options?: {\n filter?: {\n advance?: {\n enabled?: boolean;\n widgetType?: AXPWidgetTypesMap[keyof AXPWidgetTypesMap];\n };\n inline?: {\n enabled?: boolean;\n };\n preload?: {\n enabled?: boolean;\n required?: boolean;\n };\n };\n sort?: {\n enabled?: boolean;\n };\n };\n validations?: AXPValidationRules;\n}\n\n/** Logical alignment for table column header/cell (respects RTL). */\nexport type AXPColumnContentAlign = 'start' | 'center' | 'end';\n\n/**\n * Column alignment: shorthand applies to both header and cell;\n * object form sets each side independently (omitted keys default to start).\n */\nexport type AXPColumnAlign =\n | AXPColumnContentAlign\n | {\n header?: AXPColumnContentAlign;\n cell?: AXPColumnContentAlign;\n };\n\n/** Shared field definition for list layouts (table columns, card fields, etc.). */\nexport interface AXPEntityDisplayField {\n name: string;\n title?: string;\n showAs?: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: Record<string, any>;\n };\n options?: {\n /** When string, evaluate against parent detail context (e.g. related list). */\n visible?: boolean | string;\n /** Optional dataPath override for field binding. */\n dataPath?: string;\n [name: string]: any;\n };\n}\n\n/** Card layout field presentation in master list card view. */\nexport type AXPCardFieldDisplay = 'simple' | 'badge';\n\n/** Badge color: semantic token or per-row expression (`{{ context.eval(...) }}`). */\nexport type AXPCardBadgeColor = AXStyleColorType | AXPExpression;\n\nexport interface AXPCardBadgeDisplayOptions {\n /** Semantic color or expression evaluated against row context. */\n color?: AXPCardBadgeColor;\n}\n\nexport interface AXPCardBadgeDisplay {\n type: 'badge';\n options?: AXPCardBadgeDisplayOptions;\n}\n\n/** Shorthand (`badge` / `simple`) or structured badge config with optional per-row color. */\nexport type AXPCardFieldDisplayConfig = AXPCardFieldDisplay | AXPCardBadgeDisplay;\n\n/** Card layout field in master list view. */\nexport type AXPCardField = AXPEntityDisplayField & {\n layout?: AXPEntityPropertyLayoutConfig;\n /**\n * Field presentation. Default: `simple` (card body).\n * Use `badge` or `{ type: 'badge', options: { color } }` for header chips beside title.\n */\n display?: AXPCardFieldDisplayConfig;\n /**\n * Badge color when presentation is badge-shaped.\n * Prefer `display: { type: 'badge', options: { color } }` for new definitions.\n * Omit for status fields — color is resolved from the status definition per row.\n */\n badgeColor?: AXPCardBadgeColor;\n};\n\n/** Whether the card field is shown as a header badge (not in the card body). */\nexport function isCardFieldBadgeDisplay(\n display: AXPCardFieldDisplayConfig | undefined,\n): display is 'badge' | AXPCardBadgeDisplay {\n if (display === 'badge') {\n return true;\n }\n return typeof display === 'object' && display !== null && display.type === 'badge';\n}\n\n/** Resolves static badge color config from {@link AXPCardField.display} and legacy {@link AXPCardField.badgeColor}. */\nexport function resolveCardFieldBadgeColor(\n field: Pick<AXPCardField, 'display' | 'badgeColor'>,\n): AXPCardBadgeColor | undefined {\n if (typeof field.display === 'object' && field.display.type === 'badge') {\n return field.display.options?.color ?? field.badgeColor;\n }\n if (field.display === 'badge') {\n return field.badgeColor;\n }\n return undefined;\n}\n\nexport interface AXPEntityTableColumn extends AXPEntityDisplayField {\n options?: AXPEntityDisplayField['options'] & {\n /** Initial column width (overrides widget column width when set). */\n width?: string;\n /** Header/cell alignment (shorthand or per-side). */\n align?: AXPColumnAlign;\n };\n}\n\nexport interface AXPEntityCommand {\n execute: string | Function; // As runnable expression\n permissions?: string[];\n}\n\nexport interface AXPEntityQuery {\n execute: string | Function; // As runnable expression\n type: AXPEntityQueryType;\n}\n\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport type AXPCommandActionType = AXPSystemActionType;\n\nexport interface AXPCommandActionLook {\n color: AXStyleColorType;\n icon: string;\n}\n\nexport type AXPCommandActionPriority = 'primary' | 'secondary';\n\n//TODO: remove extra props\nexport type AXPCommandActionCallback =\n | string\n | {\n name: string;\n options?: {\n decoration?: {\n header?: {\n title?: string;\n };\n };\n process?: {\n data?: any;\n [name: string]: any;\n };\n layout?: {\n size?: AXPopupSizeType;\n };\n [name: string]: any;\n };\n metadata?: AXPMetaData;\n };\n\nexport interface AXPCommandActionDisplay extends Partial<AXPCommandActionLook> {\n name?: string;\n command: AXPCommandActionCallback;\n title: string;\n type: AXPSystemActionType | string;\n priority: 'primary' | 'secondary' | 'none';\n separated?: boolean;\n permissions?: string[];\n hidden?: boolean | string;\n disabled?: boolean | string;\n default?: boolean;\n order?: number;\n /**\n * Keyboard chords for this action (e.g. `'ctrl+shift+a'`).\n * Pass `[]` to disable shortcuts. When omitted, platform defaults may apply for known commands.\n */\n shortcuts?: string[];\n}\n\nexport interface AXPEntityAction extends AXPCommandActionDisplay {\n scope: AXPEntityCommandScope;\n /** Child actions for dropdown submenu */\n items?: AXPEntityAction[];\n}\n\nexport interface AXPEntity {\n plugins?: { name: string; options?: AXPOptionsData }[];\n /**\n * High-level rules: when expression evaluates true, apply actions to the given targets\n * (property/section/action). Reduces repetition of the same condition across many properties.\n * Evaluation context: form data, user, entity; precedence vs property-level visible/readonly\n * must be defined where rules are applied.\n */\n rules?: Array<{\n name: string;\n expression: AXPExpression;\n actions: Array<{\n target: {\n type: 'property' | 'section' | 'action';\n name: string;\n };\n values: AXPOptionsData;\n }>;\n }>;\n module: string;\n name: string;\n icon?: string;\n parentKey?: string;\n category?: AXPCategoryEntity;\n title: string;\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n relatedEntities?: AXPRelatedEntity[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n properties: AXPEntityProperty[];\n columns?: AXPEntityTableColumn[];\n commands?: {\n create?: AXPEntityCommand | undefined;\n update?: AXPEntityCommand | undefined;\n delete?: AXPEntityCommand | undefined;\n [name: string]: AXPEntityCommand | undefined;\n };\n queries?: {\n byKey?: AXPEntityQuery;\n list?: AXPEntityQuery;\n lookup?: AXPEntityQuery;\n history?: AXPEntityQuery;\n comments?: AXPEntityQuery;\n [name: string]: AXPEntityQuery | undefined;\n };\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n\nexport function getEntityInfo(entity: AXPEntity) {\n return {\n source: `${entity.module}.${entity.name}`,\n module: {\n route: kebabCase(entity.module),\n },\n entity: {\n route: kebabCase(entity.name),\n },\n };\n}\n\nexport function createQueryView(\n name: string,\n title: string,\n fixed: boolean,\n params: { columns?: string[]; conditions?: any[]; sorts?: AXPQuerySort[] } = {\n columns: [],\n conditions: [],\n sorts: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return {\n name,\n title,\n fixed,\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n };\n}\n\nexport function createAllQueryView(\n params: { columns?: string[]; conditions?: AXPQueryFilter[]; sorts?: AXPQuerySort[] } | undefined = {\n columns: [],\n sorts: [],\n conditions: [],\n },\n): AXPQueryView {\n params = Object.assign({ columns: [], sorts: [], conditions: [] }, params);\n return createQueryView('all', '@general:terms.interface.selection.all-items', true, {\n columns: params.columns ?? [],\n conditions: params.conditions ?? [],\n sorts: params.sorts ?? [],\n });\n}\n\nexport interface AXPRelatedEntity {\n entity: string;\n title?: string;\n icon?: string;\n columns?: string[] | AXPEntityTableColumn[];\n properties?: string[];\n excludeProperties?: string[];\n layout?: {\n type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';\n order?: number;\n position?: 'before' | 'after' | 'middle';\n };\n conditions?: AXPQueryFilter[];\n customFilterDefinitions?: Partial<AXPFilterDefinition>[];\n hidden?: boolean | AXPExpression;\n actions?: AXPEntityAction[];\n /**\n * Controls inclusion on the host entity master **create** / **update** form.\n * Defaults depend on layout:\n * - **merge-detail**: omitted flags behave as **true** (opt-out with `false`).\n * - **tab-list** / **page-list**: omitted flags behave as **false** (opt-in with `true`).\n */\n appearOn?: {\n /** Include on host create form (see defaults above per layout type). */\n create?: boolean;\n /** Include on host update form (see defaults above per layout type). */\n update?: boolean;\n };\n /**\n * Relationship-level persistence strategy for merge-detail data.\n * Defaults:\n * - strategy: 'embedded'\n * - idField: last segment of dataPath + 'Id' (or 'relatedId' when dataPath is missing)\n * - map: undefined (pass-through)\n * - hydrate: 'eager' (applies to getOne only in mock)\n * - cascade.delete: 'none'\n */\n persistence?: {\n strategy?: 'embedded' | 'referenced';\n idField?: string;\n dataPath?: string;\n map?: Record<string, string>;\n hydrate?: 'eager' | 'lazy';\n cascade?: { delete?: 'none' | 'orphans' | 'all' };\n foreignKeyField?: string;\n };\n}\n\nexport interface AXPEntityPage {\n /**\n * Key to identify the component in the page component registry\n */\n componentKey: string;\n /**\n * Property name to render when the page component displays an entity field (e.g. 'questions', 'attachments').\n * Passed to the page component as pageConfig.field.\n */\n field?: string;\n /**\n * Title of the page (displayed in navigation)\n */\n title?: AXPMultiLanguageString;\n /**\n * Icon for the page (displayed in navigation)\n */\n icon?: string;\n /**\n * Description of the page\n */\n description?: AXPMultiLanguageString;\n /**\n * Layout configuration for page positioning\n */\n layout?: {\n /**\n * Order of the page (lower numbers appear first)\n */\n order?: number;\n /**\n * Position relative to the main page\n */\n position?: 'before' | 'after' | 'middle';\n };\n /**\n * Visibility condition (boolean or expression string)\n */\n hidden?: boolean | string;\n /**\n * Permissions required to view this page\n */\n permissions?: string[];\n /**\n * Controls inclusion on the host entity master **create** / **update** form wizard.\n * Omitted flags behave as **false** (opt-in with `true`), same as `tab-list` / `page-list` related entities.\n */\n appearOn?: {\n /** Include as a wizard step on host create form. */\n create?: boolean;\n /** Include as a wizard step on host update form. */\n update?: boolean;\n };\n\n options?: Record<string, any>;\n}\n\nexport interface AXPCategoryEntity {\n entity: string;\n title?: string;\n textField?: string;\n valueField?: string;\n conditions?: AXPQueryFilter[];\n applyConditions?: AXPQueryFilter[];\n}\n\nexport interface AXPEntityVersionHistory {\n enabled?: boolean;\n showInList?: boolean;\n showInDetail?: boolean;\n}\n\nexport interface AXPAggregate {\n id: string;\n name: string;\n title: AXPMultiLanguageString;\n entities: AXPEntity[];\n}\n\nexport interface AXPModule {\n name: string;\n title: AXPMultiLanguageString;\n aggregates: AXPAggregate[];\n relationships?: AXPRelationship[];\n}\n\nexport interface AXPApplication {\n name: string;\n title: AXPMultiLanguageString;\n modules: AXPModule[];\n}\n\nexport interface AXPEntityMasterLayoutView {\n title?: string;\n sections: AXPEntitySectionView[];\n properties?: AXPEntityPropertyView[];\n}\n\n/** Quick create config for lookup widgets (+ button) - uses subset of create form */\nexport interface AXPEntityQuickCreate {\n enabled?: boolean;\n properties?: string[];\n layout?: {\n size?: AXPopupSizeType;\n };\n excludeProperties?: string[];\n}\n\nexport interface AXPEntityMasterCreateLayoutView extends AXPEntityMasterLayoutView {\n steps?: {\n id: string;\n title: string;\n description?: string;\n };\n /** Quick create config for lookup widgets - uses subset of create form */\n quickCreate?: AXPEntityQuickCreate;\n}\n\nexport interface AXPEntityMasterUpdateLayoutView extends AXPEntityMasterLayoutView {}\n\nexport interface AXPEntityMasterSingleLayoutView extends AXPEntityMasterLayoutView {\n title: string;\n description?: string;\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPEntityMasterListView {\n title?: string;\n description?: string;\n actions?: AXPEntityAction[];\n views: AXPQueryView[];\n layouts?: {\n table?: {\n enabled?: boolean;\n columns: AXPEntityTableColumn[];\n };\n card?: {\n enabled?: boolean;\n header: {\n /** Property path, expression (`{{ ... }}`), or literal — evaluated per row. */\n title?: string;\n description?: string;\n icon?: string;\n };\n fields: AXPCardField[];\n };\n };\n}\n\nexport type AXPEntityMasterListLayoutType = 'table' | 'card';\n\n/** Master list presentation: table or card with compact (collapsed) / expanded bodies. */\nexport type AXPEntityMasterListDisplayMode = 'table' | 'card-compact' | 'card-expanded';\n\nexport interface AXPEntityMasterListLayoutOption {\n id: AXPEntityMasterListLayoutType;\n title: string;\n icon?: string;\n}\n\n/** Resolves master list layouts that are currently enabled. */\nexport function resolveEnabledMasterListLayouts(\n layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType[] {\n if (!layouts) {\n return ['table'];\n }\n\n const enabled: AXPEntityMasterListLayoutType[] = [];\n\n if (layouts.table?.enabled !== false) {\n enabled.push('table');\n }\n\n if (layouts.card && layouts.card.enabled !== false) {\n enabled.push('card');\n }\n\n return enabled.length > 0 ? enabled : ['table'];\n}\n\n/** First enabled layout; used as the default when no user preference is stored. */\nexport function resolveDefaultMasterListLayout(\n layouts?: AXPEntityMasterListView['layouts'],\n): AXPEntityMasterListLayoutType {\n return resolveEnabledMasterListLayouts(layouts)[0];\n}\n\nexport interface AXPEntityDetailListView {\n title?: string;\n description?: string;\n columns: AXPEntityTableColumn[];\n actions?: AXPEntityAction[];\n}\n\nexport interface AXPQueryView {\n name: string;\n fixed: boolean;\n title: string;\n columns: string[];\n conditions: AXPQueryFilter[];\n sorts: AXPQuerySort[];\n indexCol?: boolean;\n pageSize?: number;\n visible?: boolean;\n}\n\nexport interface AXPQueryFilter {\n name: string; // entity property name\n operator: AXDataSourceOperator;\n value: any;\n}\n\nexport interface AXPQuerySort {\n name: string; // entity property name\n dir: 'asc' | 'desc';\n}\n\n// new version\nexport enum AXPEntityType {\n Entity,\n AggregateRoot,\n ValueObject,\n}\n\nexport interface AXPEntityV2 {\n version: 2;\n\n module: string;\n aggregate: string;\n name: string;\n\n type: AXPEntityType;\n\n icon?: string;\n title: string;\n description?: string;\n\n plugins?: { name: string; options?: AXPOptionsData }[];\n pages?: AXPEntityPage[];\n groups?: AXPEntityPropertyGroup[];\n //TODO : change to fields\n properties: AXPEntityProperty[];\n\n formats: {\n individual: string;\n plural: string;\n lookup?: string;\n displayName?: string;\n searchResult?: {\n title: string;\n description?: string;\n };\n };\n columns?: AXPEntityTableColumn[];\n validations?: AXPValidationRules;\n interfaces?: {\n master?: {\n single?: AXPEntityMasterSingleLayoutView;\n list?: AXPEntityMasterListView;\n create?: AXPEntityMasterCreateLayoutView;\n update?: AXPEntityMasterUpdateLayoutView;\n };\n detail?: {\n list?: AXPEntityDetailListView;\n };\n };\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import type { AXCalendarService } from '@acorex/core/date-time';\n\nimport { BETWEEN_OPER } from './operators';\n\nexport type AXPDateTimeFilterPresetKind = 'computed' | 'manual';\n\nexport interface AXPDateTimeFilterPreset {\n id: string;\n title: string;\n kind: AXPDateTimeFilterPresetKind;\n operationType?: string;\n}\n\nexport const DEFAULT_DATE_FILTER_PRESETS: AXPDateTimeFilterPreset[] = [\n { id: 'today', title: '@general:terms.date-presets.today', kind: 'computed' },\n { id: 'this-week', title: '@general:terms.date-presets.this-week', kind: 'computed' },\n { id: 'this-month', title: '@general:terms.date-presets.this-month', kind: 'computed' },\n { id: 'yesterday', title: '@general:terms.date-presets.yesterday', kind: 'computed' },\n { id: 'last-week', title: '@general:terms.date-presets.last-week', kind: 'computed' },\n { id: 'last-month', title: '@general:terms.date-presets.last-month', kind: 'computed' },\n { id: 'tomorrow', title: '@general:terms.date-presets.tomorrow', kind: 'computed' },\n { id: 'next-week', title: '@general:terms.date-presets.next-week', kind: 'computed' },\n { id: 'next-month', title: '@general:terms.date-presets.next-month', kind: 'computed' },\n { id: 'between', title: BETWEEN_OPER.title, kind: 'manual', operationType: 'between' },\n { id: 'greater-than', title: '@general:terms.operators.greater-than', kind: 'manual', operationType: 'greaterThan' },\n { id: 'less-than', title: '@general:terms.operators.less-than', kind: 'manual', operationType: 'lessThan' },\n];\n\nexport interface AXPDateTimeFilterValue {\n operation?: { type: string };\n value?: string | { from?: string; to?: string };\n}\n\nexport function resolveDateFilterPresets(\n customPresets?: AXPDateTimeFilterPreset[],\n presetIds?: string[],\n): AXPDateTimeFilterPreset[] {\n let presets = customPresets?.length ? customPresets : DEFAULT_DATE_FILTER_PRESETS;\n if (presetIds?.length) {\n presets = presets.filter((p) => presetIds.includes(p.id));\n }\n return presets;\n}\n\nexport function applyDateFilterPreset(\n presetId: string,\n calendarService: AXCalendarService,\n): AXPDateTimeFilterValue | undefined {\n const currentDate = calendarService.now().date;\n const calendar = calendarService.calendar;\n\n switch (presetId) {\n case 'today':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'day').date.toISOString(),\n to: calendar.endOf(currentDate, 'day').date.toISOString(),\n },\n };\n case 'this-week':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'week').date.toISOString(),\n to: calendar.endOf(currentDate, 'week').date.toISOString(),\n },\n };\n case 'this-month':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'month').date.toISOString(),\n to: calendar.endOf(currentDate, 'month').date.toISOString(),\n },\n };\n case 'yesterday': {\n const yesterday = calendar.add(currentDate, 'day', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: yesterday.startOf('day').date.toISOString(),\n to: yesterday.endOf('day').date.toISOString(),\n },\n };\n }\n case 'last-week': {\n const lastWeek = calendar.add(currentDate, 'week', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastWeek.startOf('week').date.toISOString(),\n to: lastWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'last-month': {\n const lastMonth = calendar.add(currentDate, 'month', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastMonth.startOf('month').date.toISOString(),\n to: lastMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'tomorrow': {\n const tomorrow = calendar.add(currentDate, 'day', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: tomorrow.startOf('day').date.toISOString(),\n to: tomorrow.endOf('day').date.toISOString(),\n },\n };\n }\n case 'next-week': {\n const nextWeek = calendar.add(currentDate, 'week', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextWeek.startOf('week').date.toISOString(),\n to: nextWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'next-month': {\n const nextMonth = calendar.add(currentDate, 'month', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextMonth.startOf('month').date.toISOString(),\n to: nextMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'between':\n return undefined;\n case 'greater-than':\n return { operation: { type: 'greaterThan' } };\n case 'less-than':\n return { operation: { type: 'lessThan' } };\n default:\n return {\n operation: { type: 'between' },\n value: { from: '', to: '' },\n };\n }\n}\n\nexport function findManualPresetIdByOperation(\n operationType: string | undefined,\n presets: AXPDateTimeFilterPreset[],\n): string | undefined {\n if (!operationType) {\n return undefined;\n }\n return presets.find((p) => p.kind === 'manual' && p.operationType === operationType)?.id;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","/**\n * Regional and locale-related setting keys used by platform widgets and components.\n * Most values use the `LocaleManagement:Setting:Regional.*` prefix; definitions live in the locale-management module where applicable.\n */\nexport enum AXPRegionalSetting {\n LocaleProfile = 'LocaleManagement:Setting:Regional.LocaleProfile',\n TimeZone = 'LocaleManagement:Setting:Regional.TimeZone',\n Language = 'LocaleManagement:Setting:Regional.Language',\n Country = 'LocaleManagement:Setting:Regional.Country',\n Calendar = 'LocaleManagement:Setting:Regional.Calendar',\n /** User-selected holiday calendars shown on the task board and other calendar views. */\n CalendarEvents = 'LocaleManagement:Setting:Regional.CalendarEvents',\n FirstDayOfWeek = 'LocaleManagement:Setting:Regional.FirstDayOfWeek',\n WeekendDays = 'LocaleManagement:Setting:Regional.WeekendDays',\n ShortDate = 'LocaleManagement:Setting:Regional.ShortDate',\n MediumDate = 'LocaleManagement:Setting:Regional.MediumDate',\n LongDate = 'LocaleManagement:Setting:Regional.LongDate',\n ShortTime = 'LocaleManagement:Setting:Regional.ShortTime',\n MediumTime = 'LocaleManagement:Setting:Regional.MediumTime',\n LongTime = 'LocaleManagement:Setting:Regional.LongTime',\n MeasurementUnits = 'LocaleManagement:Setting:Regional.MeasurementUnits',\n TemperatureUnits = 'LocaleManagement:Setting:Regional.TemperatureUnits',\n DistanceUnits = 'LocaleManagement:Setting:Regional.DistanceUnits',\n WeightUnits = 'LocaleManagement:Setting:Regional.WeightUnits',\n VolumeUnits = 'LocaleManagement:Setting:Regional.VolumeUnits',\n SpeedUnits = 'LocaleManagement:Setting:Regional.SpeedUnits',\n AreaUnits = 'LocaleManagement:Setting:Regional.AreaUnits',\n /** Default multi-language behavior for standard text field names; defined in locale-management `AXMRegionalSettingProvider`. */\n MultiLanguageSupport = 'LocaleManagement:Setting:Regional.MultiLanguageSupport',\n}\n","import { AXPOptionsData, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/core';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection, AXPSettingLayoutOptions } from './index';\nimport { AXPPlatformScopeKey } from '@acorex/platform/core';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description: description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPSettingLayoutOptions;\n };\n description?: string;\n searchTagKeys?: string[];\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n searchTagKeys: setting.searchTagKeys,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/core';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPGroupSearchResult, AXPSettingDefaultValuesProvider, AXPSettingDefinitionGroup } from './settings.types';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>(\n 'AXP_SETTING_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSettingDefinitionProviderContext();\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey,\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n }))\n .filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), [(group) => group.priority ?? 1000, 'title']);\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n async settingScopeByKey(): Promise<Record<string, AXPPlatformScope>> {\n const scopes: Record<string, AXPPlatformScope> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n scopes[setting.name] = setting.scope as AXPPlatformScope;\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return scopes;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[],\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [\n ...breadcrumb,\n { name: group.name, title: group.title, description: group.description },\n ];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: [],\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>(\n 'AXP_SETTING_DEFAULT_VALUES_PROVIDERS',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\nexport interface AXPSettingMergedDefaults {\n defaults: Record<string, unknown>;\n /** Per-key scope override for seeding (from providers that set `scope`). */\n seedScopeByKey: Record<string, AXPPlatformScope>;\n}\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getMerged(): Promise<AXPSettingMergedDefaults> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n const seedScopeByKey: Record<string, AXPPlatformScope> = {};\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n if (provider.scope) {\n for (const key of Object.keys(overrideMap)) {\n seedScopeByKey[key] = provider.scope;\n }\n }\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return { defaults: merged, seedScopeByKey };\n }\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const { defaults } = await this.getMerged();\n return defaults;\n }\n}\n","//#region ---- Imports ----\n\nimport {\n coerceUnknownToBoolean,\n coerceUnknownToDate,\n coerceUnknownToFiniteNumber,\n coerceUnknownToTrimmedString,\n unwrapValueProperty,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Supported primitive coercions for persisted setting values (including `{ value: ... }` wrappers).\n */\nexport type AXPSettingCoercionKind = 'string' | 'boolean' | 'number' | 'date';\n\n//#endregion\n\n//#region ---- Kind inference ----\n\n/**\n * If the payload uses the common `{ value: T }` shape from setting widgets, returns the inner value; otherwise returns `raw`.\n */\nexport function peelSettingValueKey(raw: unknown): unknown {\n return unwrapValueProperty(raw);\n}\n\nfunction coercionKindFromScalarSample(v: unknown): AXPSettingCoercionKind | null {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return 'boolean';\n }\n if (typeof v === 'number' && Number.isFinite(v)) {\n return 'number';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (typeof v === 'string') {\n if (v === 'true' || v === 'false') {\n return 'boolean';\n }\n return 'string';\n }\n return null;\n}\n\n/**\n * Picks a primitive coercion kind from the setting definition default and/or the effective stored value.\n * Type argument `T` on the settings service `get` method is compile-time only; runtime behavior follows this inference.\n */\nexport function inferSettingCoercionKind(defaultSample: unknown, effective: unknown): AXPSettingCoercionKind | null {\n const fromDefault = coercionKindFromScalarSample(defaultSample);\n if (fromDefault) {\n return fromDefault;\n }\n return coercionKindFromScalarSample(unwrapValueProperty(effective));\n}\n\n//#endregion\n\n//#region ---- Value coercion ----\n\nexport function coerceAXPSettingRawValueByKind(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n switch (kind) {\n case 'string':\n return coerceUnknownToTrimmedString(raw);\n case 'boolean':\n return coerceUnknownToBoolean(raw);\n case 'number':\n return coerceUnknownToFiniteNumber(raw);\n case 'date':\n return coerceUnknownToDate(raw);\n default: {\n const _exhaustive: never = kind;\n return _exhaustive;\n }\n }\n}\n\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'string'): string;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'boolean'): boolean;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'number'): number;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'date'): Date;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n return coerceAXPSettingRawValueByKind(raw, kind);\n}\n\n//#endregion\n","import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, InjectionToken, Injector } from '@angular/core';\nimport { AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector),\n ];\n },\n});\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService);\n\n constructor(\n private _scope: AXPPlatformScope,\n private injector: Injector,\n ) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map((c) => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPBroadcastEventService, AXPPlatformScope } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport {\n AXPSettingDefaultValuesAggregatorService,\n AXPSettingDefinitionProviderService,\n} from './setting-definition.service';\nimport { coerceAXPSettingRawValueByKind, inferSettingCoercionKind } from './settings-coercion';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n await this.seedMissingDefaults();\n this.onLoaded.next();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n /**\n * Returns the effective setting value. Primitive coercion (string, boolean, number, date) is inferred from the\n * definition default and/or the stored shape (including `{ value: ... }`). Type argument `T` is compile-time only;\n * it is not read at runtime—use it to document the expected result (e.g. `get<boolean>(key)`).\n */\n async get<T = any>(key: string): Promise<T> {\n const { effective, defaultSample } = await this.resolveEffectiveAndDefault(key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n /**\n * Effective value (user → tenant → platform) when set; otherwise the definition default. Used for reads and coercion hints.\n */\n private async resolveEffectiveAndDefault(key: string): Promise<{ effective: unknown; defaultSample: unknown }> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n const defaultSample = get(defaults, key);\n const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return { effective: value, defaultSample };\n }\n }\n }\n return { effective: defaultSample, defaultSample };\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n\n private async seedMissingDefaults(): Promise<void> {\n const definitionService = this.injector.get(AXPSettingDefinitionProviderService);\n const aggregator = this.injector.get(AXPSettingDefaultValuesAggregatorService);\n const [{ defaults, seedScopeByKey }, scopeByKey] = await Promise.all([\n aggregator.getMerged(),\n definitionService.settingScopeByKey(),\n ]);\n const persistedKeysByScope = new Map(\n await Promise.all(\n this.providers.map(async (provider) => {\n const stored = await provider.load();\n return [provider.scope, new Set(stored.map((s) => s.key))] as const;\n }),\n ),\n );\n const toPersist: Partial<Record<AXPPlatformScope, Record<string, unknown>>> = {};\n\n for (const [key, value] of Object.entries(defaults)) {\n const scope = seedScopeByKey[key] ?? scopeByKey[key];\n if (!scope || value === undefined || persistedKeysByScope.get(scope)?.has(key)) {\n continue;\n }\n toPersist[scope] ??= {};\n toPersist[scope]![key] = value;\n }\n\n for (const [scope, values] of Object.entries(toPersist) as [AXPPlatformScope, Record<string, unknown>][]) {\n if (Object.keys(values).length > 0) {\n await this.scope(scope).set(values);\n }\n }\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) {}\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n const effective = setting?.value;\n const defaults = await this.parent.defaultValues(this.provider.scope);\n const defaultSample = get(defaults, key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single key-value pair\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value); // Sync the cache\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n // Multiple key-value pairs\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val)); // Sync the cache\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from './regional-settings.keys';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\nimport type { AXPEntityProperty } from '../app/application.types';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","import { AXCalendarService } from '@acorex/core/date-time';\nimport { Injectable } from '@angular/core';\n\n/**\n * Platform-provided {@link AXCalendarService} that applies locale profile week layout\n * (first day of week, weekends) through the core calendar service lifecycle.\n *\n * Temporary bridge until @acorex/components reads week layout from AXLocaleService.\n */\n@Injectable()\nexport class AXPRegionalCalendarService extends AXCalendarService {}\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n ConfirmUnsavedChanges = 'Common:Setting:Entity.ConfirmUnsavedChanges',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n ShowRowIndexColumn = 'Common:Setting:Entity.ShowRowIndexColumn',\n EntityListPersistenceMode = 'Common:Setting:Entity.ListPersistenceMode',\n}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Types ----\n\nexport interface AXPUnsavedChangesConfirmOptions {\n /** When false, skips confirm even if the global setting is enabled (e.g. dialog `confirmCloseWhenDirty`). */\n enabled?: boolean;\n title?: AXPMultiLanguageString;\n message?: AXPMultiLanguageString;\n /**\n * When true (default), confirming sets leave approval for the next route deactivation.\n * Set false for in-place actions such as discarding edits without navigating away.\n */\n approveLeaveOnConfirm?: boolean;\n}\n\nexport interface AXPUnsavedChangesCanDeactivate {\n canDeactivate(): boolean | Promise<boolean>;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUnsavedChangesConfirmService {\n //#region ---- Services & Dependencies ----\n\n private readonly settingsService = inject(AXPSettingsService);\n private readonly dialogService = inject(AXDialogService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Ensures concurrent leave paths share a single unsaved-changes confirm dialog. */\n private confirmPromise?: Promise<boolean>;\n\n /** Set after the user confirms leaving; cleared on {@link NavigationEnd} by popstate handler. */\n private leaveConfirmed = false;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Whether the global \"confirm unsaved changes\" setting is enabled.\n */\n async isGloballyEnabled(): Promise<boolean> {\n const value = await this.settingsService.get<boolean>(AXPCommonSettings.ConfirmUnsavedChanges);\n return value !== false;\n }\n\n /**\n * Marks the next route deactivation as already approved (avoids a second prompt after in-app navigation).\n */\n markLeaveConfirmed(): void {\n this.leaveConfirmed = true;\n }\n\n /** True while an unsaved-changes confirm dialog is open or being resolved. */\n isConfirmPending(): boolean {\n return this.confirmPromise != null;\n }\n\n /** Whether the user already approved leaving during the current navigation. */\n hasLeaveConfirmed(): boolean {\n return this.leaveConfirmed;\n }\n\n /** Clears leave approval after navigation settles. */\n clearLeaveConfirmed(): void {\n this.leaveConfirmed = false;\n }\n\n consumeLeaveConfirmed(): boolean {\n if (!this.leaveConfirmed) {\n return false;\n }\n this.leaveConfirmed = false;\n return true;\n }\n\n /**\n * Prompts when `isDirty` and the global setting (and optional per-instance `enabled`) allow it.\n * Returns true when navigation/dismiss may proceed.\n */\n async confirmIfDirty(isDirty: boolean, options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (this.confirmPromise) {\n return this.confirmPromise;\n }\n\n if (options?.enabled === false || !isDirty) {\n return true;\n }\n\n // Reserve before any await so concurrent close/navigation paths share one dialog.\n this.confirmPromise = this.resolveConfirmIfDirty(options);\n try {\n return await this.confirmPromise;\n } finally {\n this.confirmPromise = undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async resolveConfirmIfDirty(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (!(await this.isGloballyEnabled())) {\n return true;\n }\n\n const confirmed = await this.prompt(options);\n if (confirmed && options?.approveLeaveOnConfirm !== false) {\n this.leaveConfirmed = true;\n }\n return confirmed;\n }\n\n private async prompt(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n const title = await this.translateService.translateAsync(\n options?.title ?? '@general:messages.unsaved-changes.title',\n );\n const message = await this.translateService.translateAsync(\n options?.message ?? '@general:messages.unsaved-changes.message',\n );\n const dialogResult = await this.dialogService.confirm(\n title,\n message,\n 'warning',\n 'horizontal',\n false,\n 'cancel',\n );\n return dialogResult.result === true;\n }\n\n //#endregion\n}\n","import { Location } from '@angular/common';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { AXPUnsavedChangesConfirmService } from './unsaved-changes-confirm.service';\n\n//#region ---- Types ----\n\nexport interface AXPUnsavedChangesPopstateSource {\n id: string;\n isDirty: () => boolean;\n}\n\n//#endregion\n\n/**\n * Intercepts browser back/forward (`popstate`) when a registered page is dirty.\n * Captures dirty state synchronously on {@link NavigationStart}, restores the current URL\n * before route activation, prompts once, then re-triggers `history.back()` only if confirmed.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUnsavedChangesPopstateService {\n //#region ---- Services & Dependencies ----\n\n private readonly router = inject(Router);\n private readonly location = inject(Location);\n private readonly confirm = inject(AXPUnsavedChangesConfirmService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private sources: AXPUnsavedChangesPopstateSource[] = [];\n private committedUrl = '';\n private handling = false;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.committedUrl = this.router.url;\n\n this.router.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.committedUrl = event.urlAfterRedirects;\n this.confirm.clearLeaveConfirmed();\n return;\n }\n\n if (event instanceof NavigationStart && event.navigationTrigger === 'popstate') {\n void this.handlePopstateNavigation(event);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Registry ----\n\n registerSource(source: AXPUnsavedChangesPopstateSource): void {\n this.sources = this.sources.filter((entry) => entry.id !== source.id);\n this.sources.push(source);\n }\n\n unregisterSource(id: string): void {\n this.sources = this.sources.filter((entry) => entry.id !== id);\n }\n\n //#endregion\n\n //#region ---- Popstate Handler ----\n\n /** True while a popstate back/forward is being intercepted or confirmed. */\n isHandlingPopstate(): boolean {\n return this.handling;\n }\n\n private async handlePopstateNavigation(start: NavigationStart): Promise<void> {\n if (this.handling) {\n return;\n }\n\n if (this.confirm.hasLeaveConfirmed()) {\n return;\n }\n\n const dirty = this.isDirty();\n if (!dirty) {\n return;\n }\n\n const stayUrl = this.committedUrl;\n const targetUrl = start.url;\n if (!stayUrl || stayUrl === targetUrl) {\n return;\n }\n\n this.handling = true;\n try {\n this.location.go(stayUrl);\n\n const allowed = await this.confirm.confirmIfDirty(true);\n if (!allowed) {\n await this.router.navigateByUrl(stayUrl, { replaceUrl: true });\n return;\n }\n\n window.history.back();\n } finally {\n this.handling = false;\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private isDirty(): boolean {\n return this.sources.some((source) => source.isDirty());\n }\n\n //#endregion\n}\n","import { CanDeactivateFn } from '@angular/router';\nimport { AXPUnsavedChangesCanDeactivate } from './unsaved-changes-confirm.service';\n\n//#region ---- Unsaved Changes Can Deactivate Guard Factory ----\n\nexport function createUnsavedChangesCanDeactivateGuard<T extends AXPUnsavedChangesCanDeactivate>(): CanDeactivateFn<T> {\n return (component) => component.canDeactivate();\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes, UrlTree } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, ...{ data: { key: home?.key, title: home?.title, path: fullPath } } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n /**\n * Resolves the current user's home page as a router URL tree.\n */\n resolveHomeUrlTree(): UrlTree {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n const path = current.path.startsWith('/') ? current.path : `/${current.path}`;\n return router.parseUrl(path);\n }\n\n async navigateTo(): Promise<void> {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n router.navigateByUrl(this.resolveHomeUrlTree(), { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","import { AXPPlatformScope, objectKeyValueTransforms } from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const list = this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup(\n 'general',\n `${I18N}.general.nav-title`,\n `${I18N}.general.description`,\n 'fa-light fa-palette',\n `${I18N}.general.title`,\n 1,\n )\n\n // Add the 'Startup' section\n .addSection('startup', `${I18N}.general.startup.title`, `${I18N}.general.startup.description`)\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: `${I18N}.general.startup.home-page.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: `${I18N}.general.startup.home-page.description`,\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPUserReference } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- In-app notification port ----\n\nexport type AXPInAppNotificationPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport interface AXPInAppNotificationCreateRequest {\n id: string;\n name: string;\n title: string;\n body: string;\n icon: string;\n priority: AXPInAppNotificationPriority;\n receiver: AXPUserReference;\n data?: Record<string, unknown>;\n}\n\n/**\n * Persists in-app notifications. Notification-management registers an implementation\n * backed by {@link AXMNotificationEntityService}.\n */\nexport interface AXPInAppNotificationService {\n create(request: AXPInAppNotificationCreateRequest): Promise<void>;\n}\n\nexport const AXP_IN_APP_NOTIFICATION_SERVICE = new InjectionToken<AXPInAppNotificationService>(\n 'AXP_IN_APP_NOTIFICATION_SERVICE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationPriority,\n} from './background-operation.notification';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends in-app notifications when a background operation finishes or fails.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationNotificationService {\n private readonly inAppNotificationService = inject(AXP_IN_APP_NOTIFICATION_SERVICE, { optional: true });\n\n private readonly sessionService = inject(AXPSessionService);\n\n async notify(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.inAppNotificationService || !this.shouldNotify(operation)) {\n return;\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return;\n }\n\n const body = this.resolveBody(operation);\n const { icon, priority } = this.resolveTemplate(operation);\n\n const request: AXPInAppNotificationCreateRequest = {\n id: `notif-bg-op-${operation.id}-${operation.status}`,\n name: operation.title,\n title: operation.title,\n body,\n icon,\n priority,\n receiver: {\n id: userId,\n type: 'user',\n fullName: get(this.sessionService.user, 'title') as string | undefined,\n username: get(this.sessionService.user, 'name') as string | undefined,\n },\n data: {\n backgroundOperationId: operation.id,\n providerKey: operation.providerKey,\n status: operation.status,\n ...(operation.data ?? {}),\n },\n };\n\n await this.inAppNotificationService.create(request);\n }\n\n //#region ---- Helpers ----\n\n private shouldNotify(operation: AXPBackgroundOperation): boolean {\n const { capabilities } = operation;\n\n if (operation.status === 'failed') {\n return capabilities.notifyOnFailed !== false;\n }\n\n if (operation.status === 'completed' || operation.status === 'cancelled') {\n return capabilities.notifyOnComplete !== false;\n }\n\n return false;\n }\n\n private resolveBody(operation: AXPBackgroundOperation): string {\n if (operation.status === 'failed') {\n return operation.error?.message ?? operation.statusText ?? 'Background task failed';\n }\n\n const statusText = operation.statusText?.trim();\n return statusText || operation.title;\n }\n\n private resolveTemplate(operation: AXPBackgroundOperation): {\n icon: string;\n priority: AXPInAppNotificationPriority;\n } {\n switch (operation.status) {\n case 'completed':\n return { icon: 'fa-light fa-circle-check', priority: 'Notice' };\n case 'failed':\n return { icon: 'fa-light fa-circle-exclamation', priority: 'Danger' };\n case 'cancelled':\n return { icon: 'fa-light fa-ban', priority: 'Warning' };\n default:\n return { icon: 'fa-light fa-list-check', priority: 'Notice' };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { isNumber } from 'lodash-es';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationCreateRequest,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Factories ----\n\nexport function axpCreateBackgroundOperationId(): string {\n return `bg-op-${AXPDataGenerator.uuid()}`;\n}\n\nexport function axpBuildBackgroundOperation(\n providerKey: string,\n request: AXPBackgroundOperationCreateRequest,\n overrides?: Partial<AXPBackgroundOperation>,\n): AXPBackgroundOperation {\n const now = new Date();\n const operation: AXPBackgroundOperation = {\n id: axpCreateBackgroundOperationId(),\n providerKey,\n title: request.title,\n status: 'queued',\n progress: request.progress,\n estimatedDurationMs: request.estimatedDurationMs,\n statusText: request.statusText,\n currentStep: request.currentStep,\n createdAt: now,\n capabilities: request.capabilities,\n failurePolicy: request.failurePolicy,\n ...overrides,\n };\n const hasStarted = operation.status === 'running' || operation.status === 'paused';\n\n return {\n ...operation,\n createdAt: operation.createdAt ?? now,\n startedAt: operation.startedAt ?? (hasStarted ? now : undefined),\n };\n}\n\nexport function axpCoerceBackgroundOperationDate(value: Date | string | undefined): Date | null {\n if (!value) {\n return null;\n }\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function axpBackgroundOperationDisplayTime(operation: AXPBackgroundOperation): Date | null {\n return (\n axpCoerceBackgroundOperationDate(operation.startedAt) ??\n axpCoerceBackgroundOperationDate(operation.createdAt)\n );\n}\n\n/**\n * Remaining duration in milliseconds for ETA display.\n */\nexport function axpBackgroundOperationRemainingMs(operation: AXPBackgroundOperation): number | null {\n if (!operation.capabilities.supportsEstimate || !isNumber(operation.estimatedDurationMs)) {\n return null;\n }\n\n const { estimatedDurationMs, progress, startedAt, status } = operation;\n if (status !== 'running' && status !== 'paused' && status !== 'queued') {\n return null;\n }\n\n if (isNumber(progress) && progress >= 100) {\n return 0;\n }\n\n if (isNumber(progress) && progress > 0) {\n return Math.max(0, Math.round((estimatedDurationMs * (100 - progress)) / 100));\n }\n\n const started = axpCoerceBackgroundOperationDate(startedAt);\n if (started) {\n const elapsed = Date.now() - started.getTime();\n return Math.max(0, estimatedDurationMs - elapsed);\n }\n\n return estimatedDurationMs;\n}\n\n/**\n * Estimated completion instant for relative-time formatting (e.g. timeleft pipe).\n */\nexport function axpBackgroundOperationEstimateEndDate(operation: AXPBackgroundOperation): Date | null {\n const remainingMs = axpBackgroundOperationRemainingMs(operation);\n if (remainingMs === null) {\n return null;\n }\n return new Date(Date.now() + remainingMs);\n}\n\nexport function axpBackgroundOperationCapabilities(\n partial: Partial<AXPBackgroundOperationCapabilities> = {},\n): AXPBackgroundOperationCapabilities {\n return {\n cancellable: partial.cancellable ?? false,\n pausable: partial.pausable ?? false,\n resumable: partial.resumable ?? false,\n retryable: partial.retryable ?? false,\n supportsProgress: partial.supportsProgress ?? false,\n supportsEstimate: partial.supportsEstimate ?? false,\n clickable: partial.clickable ?? false,\n notifyOnComplete: partial.notifyOnComplete ?? true,\n notifyOnFailed: partial.notifyOnFailed ?? true,\n };\n}\n\nexport function axpBackgroundOperationFailurePolicy(\n partial: Partial<AXPBackgroundOperationFailurePolicy> = {},\n): AXPBackgroundOperationFailurePolicy {\n return {\n mode: partial.mode ?? 'abort',\n currentStepId: partial.currentStepId,\n maxRetries: partial.maxRetries,\n retryCount: partial.retryCount ?? 0,\n };\n}\n\nexport function axpIsActiveBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'queued' || status === 'running' || status === 'paused';\n}\n\nexport function axpIsCompletedBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'completed' || status === 'cancelled';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBackgroundOperationNotificationService } from './background-operation-notification.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends notifications and removes tray rows when a background operation reaches a terminal state.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationCompletionService {\n private readonly notificationService = inject(AXPBackgroundOperationNotificationService);\n\n /** Whether the operation just reached a finished state (completed or cancelled). */\n shouldAutoFinish(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return (\n previousStatus !== operation.status && axpIsCompletedBackgroundOperationStatus(operation.status)\n );\n }\n\n /** Whether the operation just transitioned to failed. */\n shouldNotifyFailure(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return previousStatus !== operation.status && operation.status === 'failed';\n }\n\n /** Notifies the user and invokes {@link remove} to drop the operation from the tray. */\n async notifyAndRemove(operation: AXPBackgroundOperation, remove: () => void): Promise<void> {\n await this.notify(operation);\n remove();\n }\n\n /** Notifies the user while keeping the failed operation in the tray for retry. */\n async notifyFailure(operation: AXPBackgroundOperation): Promise<void> {\n await this.notify(operation);\n }\n\n //#region ---- Notification ----\n\n private async notify(operation: AXPBackgroundOperation): Promise<void> {\n try {\n await this.notificationService.notify(operation);\n } catch (error: unknown) {\n console.warn('Failed to send background-operation notification', operation.id, error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Status & capabilities ----\n\nexport type AXPBackgroundOperationStatus =\n | 'queued'\n | 'running'\n | 'paused'\n | 'completed'\n | 'failed'\n | 'cancelled';\n\nexport interface AXPBackgroundOperationCapabilities {\n cancellable: boolean;\n pausable: boolean;\n resumable: boolean;\n retryable: boolean;\n /** When true, UI shows a progress bar only while {@link AXPBackgroundOperation.progress} is set. */\n supportsProgress: boolean;\n /** When true, UI may show ETA while {@link AXPBackgroundOperation.estimatedDurationMs} is set. */\n supportsEstimate: boolean;\n /** When true, the tray item is clickable and delegates to a registered handler. */\n clickable: boolean;\n /** When false, skip in-app notification on completed/cancelled. Default: true. */\n notifyOnComplete?: boolean;\n /** When false, skip in-app notification on failed. Default: true. */\n notifyOnFailed?: boolean;\n}\n\nexport type AXPBackgroundOperationFailureMode = 'retry' | 'continue' | 'abort';\n\nexport interface AXPBackgroundOperationFailurePolicy {\n mode: AXPBackgroundOperationFailureMode;\n currentStepId?: string;\n maxRetries?: number;\n retryCount?: number;\n}\n\nexport interface AXPBackgroundOperationError {\n code?: string;\n message: string;\n detail?: string;\n}\n\n//#endregion\n\n//#region ---- Operation model ----\n\nexport interface AXPBackgroundOperation {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: Date;\n startedAt?: Date;\n completedAt?: Date;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n /** Handler-specific payload (e.g. conversationId for chat navigation). */\n data?: Record<string, unknown>;\n}\n\nexport interface AXPBackgroundOperationCreateRequest {\n title: string;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n}\n\nexport type AXPBackgroundOperationActionKey = 'cancel' | 'pause' | 'resume' | 'retry' | 'dismiss';\n\n//#endregion\n","//#region ---- Root config ----\n\nexport const AXPBackgroundOperationRootConfig = {\n module: {\n name: 'Common',\n title: '@general:module.common.title',\n icon: 'fa-light fa-layer-group',\n },\n entities: {\n backgroundOperation: {\n name: 'BackgroundOperations',\n title: '@general:background-operation.entity.title',\n titlePlural: '@general:background-operation.entity.plural',\n icon: 'fa-light fa-spinner',\n },\n },\n} as const;\n\n/** Full entity key used with {@link AXPEntityStorageService} (e.g. `Common.BackgroundOperations`). */\nexport function axpBackgroundOperationEntityName(): string {\n return `${AXPBackgroundOperationRootConfig.module.name}.${AXPBackgroundOperationRootConfig.entities.backgroundOperation.name}`;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\n\n//#endregion\n\n//#region ---- Storage adapter ----\n\n/**\n * Optional persistence adapter for background-operation entity rows.\n * Mock connectivity registers an implementation backed by {@link AXPEntityStorageService}.\n */\nexport interface AXPBackgroundOperationEntityStorageAdapter {\n getAll(entityName: string): Promise<AXPBackgroundOperationEntityModel[]>;\n upsertOne(entityName: string, row: AXPBackgroundOperationEntityModel): Promise<void>;\n deleteOne(entityName: string, id: string): Promise<void>;\n}\n\nexport const AXP_BACKGROUND_OPERATION_ENTITY_STORAGE = new InjectionToken<AXPBackgroundOperationEntityStorageAdapter>(\n 'AXP_BACKGROUND_OPERATION_ENTITY_STORAGE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\nimport { axpCoerceBackgroundOperationDate } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Mappers ----\n\nexport function axpBackgroundOperationToEntityModel(\n operation: AXPBackgroundOperation,\n): AXPBackgroundOperationEntityModel {\n return {\n id: operation.id,\n providerKey: operation.providerKey,\n title: operation.title,\n status: operation.status,\n progress: operation.progress,\n estimatedDurationMs: operation.estimatedDurationMs,\n statusText: operation.statusText,\n currentStep: operation.currentStep,\n createdAt: operation.createdAt.toISOString(),\n startedAt: operation.startedAt?.toISOString(),\n completedAt: operation.completedAt?.toISOString(),\n capabilities: operation.capabilities,\n failurePolicy: operation.failurePolicy,\n error: operation.error,\n data: operation.data,\n };\n}\n\nexport function axpBackgroundOperationFromEntityModel(\n model: AXPBackgroundOperationEntityModel,\n): AXPBackgroundOperation {\n const createdAt = axpCoerceBackgroundOperationDate(model.createdAt) ?? new Date();\n\n return {\n id: model.id,\n providerKey: model.providerKey,\n title: model.title,\n status: model.status,\n progress: model.progress,\n estimatedDurationMs: model.estimatedDurationMs,\n statusText: model.statusText,\n currentStep: model.currentStep,\n createdAt,\n startedAt: axpCoerceBackgroundOperationDate(model.startedAt) ?? undefined,\n completedAt: axpCoerceBackgroundOperationDate(model.completedAt) ?? undefined,\n capabilities: model.capabilities,\n failurePolicy: model.failurePolicy,\n error: model.error,\n data: model.data,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { signal, type Signal } from '@angular/core';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Store factory ----\n\n/**\n * Lightweight in-memory store for a single background-operation provider.\n */\nexport function createBackgroundOperationStore(): {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void;\n find(id: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n} {\n const operationsState = signal<AXPBackgroundOperation[]>([]);\n\n return {\n operations: operationsState.asReadonly(),\n\n upsert(operation: AXPBackgroundOperation): void {\n operationsState.update((list) => {\n const index = list.findIndex((item) => item.id === operation.id);\n if (index < 0) {\n return [operation, ...list];\n }\n const next = [...list];\n next[index] = operation;\n return next;\n });\n },\n\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void {\n operationsState.update((list) =>\n list.map((item) => (item.id === id ? { ...item, ...patch } : item)),\n );\n },\n\n find(id: string): AXPBackgroundOperation | undefined {\n return operationsState().find((item) => item.id === id);\n },\n\n remove(id: string): void {\n operationsState.update((list) => list.filter((item) => item.id !== id));\n },\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, type Signal } from '@angular/core';\nimport { axpBackgroundOperationEntityName } from './background-operation.const';\nimport {\n axpBackgroundOperationFromEntityModel,\n axpBackgroundOperationToEntityModel,\n} from './background-operation.entity.mapper';\nimport { AXP_BACKGROUND_OPERATION_ENTITY_STORAGE } from './background-operation.entity.storage';\nimport { AXPBackgroundOperationCompletionService } from './background-operation-completion.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\nimport { createBackgroundOperationStore } from './background-operation.store';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBackgroundOperationProviderStore {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(operationId: string, patch: Partial<AXPBackgroundOperation>): void;\n find(operationId: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed store for background operations (`Common.BackgroundOperations`).\n * Uses in-memory signals for UI reactivity and optionally persists via {@link AXP_BACKGROUND_OPERATION_ENTITY_STORAGE}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationEntityStoreService {\n private readonly entityStorage = inject(AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, { optional: true });\n\n private readonly completionService = inject(AXPBackgroundOperationCompletionService);\n\n private readonly entityName = axpBackgroundOperationEntityName();\n\n private hydrated = false;\n\n private hydratePromise?: Promise<void>;\n\n private readonly innerStores = new Map<string, ReturnType<typeof createBackgroundOperationStore>>();\n\n //#region ---- Hydration ----\n\n async ensureHydrated(): Promise<void> {\n if (this.hydrated || !this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n if (!this.hydratePromise) {\n this.hydratePromise = this.hydrateFromEntityStorage();\n }\n\n await this.hydratePromise;\n }\n\n async hasAnyOperationForProviders(providerKeys: readonly string[]): Promise<boolean> {\n await this.ensureHydrated();\n\n if (providerKeys.length === 0) {\n return false;\n }\n\n if (this.entityStorage) {\n const rows = await this.entityStorage.getAll(this.entityName);\n return rows.some((row) => providerKeys.includes(row.providerKey));\n }\n\n return [...this.innerStores.values()].some((store) =>\n store.operations().some((operation) => providerKeys.includes(operation.providerKey)),\n );\n }\n\n //#endregion\n\n //#region ---- Provider stores ----\n\n createProviderStore(providerKey: string): AXPBackgroundOperationProviderStore {\n const inner = this.getOrCreateInnerStore(providerKey);\n\n return {\n operations: computed(() => inner.operations().filter((operation) => operation.providerKey === providerKey)),\n\n upsert: (operation: AXPBackgroundOperation): void => {\n inner.upsert(operation);\n void this.persistOperation(operation);\n },\n\n patch: (operationId: string, patch: Partial<AXPBackgroundOperation>): void => {\n const previous = inner.find(operationId);\n inner.patch(operationId, patch);\n const operation = inner.find(operationId);\n if (!operation) {\n return;\n }\n\n if (this.completionService.shouldAutoFinish(previous?.status, operation)) {\n void this.completionService.notifyAndRemove(operation, () => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n });\n return;\n }\n\n if (this.completionService.shouldNotifyFailure(previous?.status, operation)) {\n void this.completionService.notifyFailure(operation);\n }\n\n void this.persistOperation(operation);\n },\n\n find: (operationId: string): AXPBackgroundOperation | undefined => inner.find(operationId),\n\n remove: (operationId: string): void => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n },\n };\n }\n\n /** All operations across providers (post-hydration). */\n readonly allOperations = computed(() =>\n [...this.innerStores.values()].flatMap((store) => store.operations()),\n );\n\n //#endregion\n\n //#region ---- Entity persistence ----\n\n private async hydrateFromEntityStorage(): Promise<void> {\n if (!this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n const rows = await this.entityStorage.getAll(this.entityName);\n\n for (const row of rows) {\n const operation = axpBackgroundOperationFromEntityModel(row);\n\n if (axpIsCompletedBackgroundOperationStatus(operation.status)) {\n void this.deleteOperation(operation.id);\n continue;\n }\n\n this.getOrCreateInnerStore(operation.providerKey).upsert(operation);\n }\n\n this.hydrated = true;\n }\n\n private async persistOperation(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.upsertOne(this.entityName, axpBackgroundOperationToEntityModel(operation));\n } catch (error: unknown) {\n console.warn('Failed to persist background operation entity', operation.id, error);\n }\n }\n\n private async deleteOperation(operationId: string): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.deleteOne(this.entityName, operationId);\n } catch (error: unknown) {\n console.warn('Failed to delete background operation entity', operationId, error);\n }\n }\n\n private getOrCreateInnerStore(providerKey: string): ReturnType<typeof createBackgroundOperationStore> {\n let store = this.innerStores.get(providerKey);\n if (!store) {\n store = createBackgroundOperationStore();\n this.innerStores.set(providerKey, store);\n }\n return store;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationError,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from '../../background-operation.types';\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/** Persisted row shape for {@link axpBackgroundOperationEntityName}. */\nexport interface AXPBackgroundOperationEntityModel {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: string;\n startedAt?: string;\n completedAt?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n data?: Record<string, unknown>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '../../../app/application.types';\nimport { AXPBackgroundOperationRootConfig } from '../../background-operation.const';\n\n//#endregion\n\n//#region ---- Entity factory ----\n\n/**\n * Storage-only entity for background-operation tray rows (`Common.BackgroundOperations`).\n * No master UI — persisted through {@link AXPEntityStorageService}.\n */\nexport async function backgroundOperationEntityFactory(): Promise<AXPEntity | null> {\n const { module, entities } = AXPBackgroundOperationRootConfig;\n\n return {\n module: module.name,\n name: entities.backgroundOperation.name,\n title: entities.backgroundOperation.title,\n icon: entities.backgroundOperation.icon,\n formats: {\n individual: entities.backgroundOperation.title,\n plural: entities.backgroundOperation.titlePlural,\n },\n properties: [\n {\n name: 'id',\n title: 'ID',\n schema: { dataType: 'string' },\n },\n {\n name: 'providerKey',\n title: 'Provider key',\n schema: { dataType: 'string' },\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n schema: { dataType: 'string' },\n },\n {\n name: 'status',\n title: '@general:terms.common.status',\n schema: { dataType: 'string' },\n },\n {\n name: 'progress',\n title: 'Progress',\n schema: { dataType: 'number' },\n },\n {\n name: 'estimatedDurationMs',\n title: 'Estimated duration (ms)',\n schema: { dataType: 'number' },\n },\n {\n name: 'statusText',\n title: 'Status text',\n schema: { dataType: 'string' },\n },\n {\n name: 'currentStep',\n title: 'Current step',\n schema: { dataType: 'string' },\n },\n {\n name: 'createdAt',\n title: '@general:terms.common.created-at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'startedAt',\n title: 'Started at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'completedAt',\n title: 'Completed at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'capabilities',\n title: 'Capabilities',\n schema: { dataType: 'object' },\n },\n {\n name: 'failurePolicy',\n title: 'Failure policy',\n schema: { dataType: 'object' },\n },\n {\n name: 'error',\n title: 'Error',\n schema: { dataType: 'object' },\n },\n {\n name: 'data',\n title: 'Payload',\n schema: { dataType: 'object' },\n },\n ],\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPExecuteCommand } from '@acorex/platform/core';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_HANDLERS = new InjectionToken<AXPBackgroundOperationHandler[]>(\n 'AXP_BACKGROUND_OPERATION_HANDLERS',\n);\n\n//#endregion\n\n//#region ---- Handler contract ----\n\n/**\n * Handles user interactions for background operations (e.g. navigate on click).\n * Register one handler per {@link AXPBackgroundOperation.providerKey}.\n */\nexport abstract class AXPBackgroundOperationHandler {\n abstract readonly providerKey: string;\n\n abstract execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken, Signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_PROVIDERS = new InjectionToken<AXPBackgroundOperationProvider[]>(\n 'AXP_BACKGROUND_OPERATION_PROVIDERS',\n);\n\n//#endregion\n\n//#region ---- Provider contract ----\n\n/**\n * Registers a source of background operations (multi-provider).\n * Each feature module or mock can contribute one provider per domain key.\n */\nexport abstract class AXPBackgroundOperationProvider {\n abstract readonly key: string;\n abstract readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n\n abstract create(request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation>;\n abstract cancel(operationId: string): Promise<void>;\n\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.pausable} is true. */\n pause?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.resumable} is true. */\n resume?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.retryable} is true. */\n retry?(operationId: string): Promise<void>;\n /** Optional — removes completed/failed operations from the tray. */\n dismiss?(operationId: string): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n} from './background-operation.handler';\nimport {\n AXP_BACKGROUND_OPERATION_PROVIDERS,\n AXPBackgroundOperationProvider,\n} from './background-operation.provider';\nimport type { AXPExecuteCommand } from '@acorex/platform/core';\nimport {\n axpIsActiveBackgroundOperationStatus,\n} from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationService {\n //#region ---- Dependencies ----\n\n private readonly providers = inject(AXP_BACKGROUND_OPERATION_PROVIDERS, { optional: true }) ?? [];\n\n private readonly handlers = inject(AXP_BACKGROUND_OPERATION_HANDLERS, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly busy = signal(false);\n\n readonly loading = this.busy.asReadonly();\n\n readonly operations = computed<readonly AXPBackgroundOperation[]>(() =>\n this.providers.flatMap((provider) => provider.operations()),\n );\n\n readonly activeCount = computed(\n () => this.operations().filter((operation) => axpIsActiveBackgroundOperationStatus(operation.status)).length,\n );\n\n readonly failedCount = computed(\n () => this.operations().filter((operation) => operation.status === 'failed').length,\n );\n\n //#endregion\n\n //#region ---- Queries ----\n\n getAvailableActions(operation: AXPBackgroundOperation): AXPBackgroundOperationActionKey[] {\n const actions: AXPBackgroundOperationActionKey[] = [];\n const { capabilities, status } = operation;\n\n if (capabilities.cancellable && (status === 'queued' || status === 'running' || status === 'paused')) {\n actions.push('cancel');\n }\n if (capabilities.pausable && status === 'running') {\n actions.push('pause');\n }\n if (capabilities.resumable && status === 'paused') {\n actions.push('resume');\n }\n if (capabilities.retryable && status === 'failed') {\n actions.push('retry');\n }\n\n return actions;\n }\n\n //#endregion\n\n //#region ---- Commands ----\n\n async create(providerKey: string, request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation> {\n const provider = this.resolveProvider(providerKey);\n return this.run(() => provider.create(request));\n }\n\n async cancel(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.cancellable) {\n throw new Error(`Operation ${operationId} cannot be cancelled`);\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n async pause(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.pausable || !provider.pause) {\n throw new Error(`Operation ${operationId} cannot be paused`);\n }\n await this.run(() => provider.pause!(operationId));\n }\n\n async resume(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.resumable || !provider.resume) {\n throw new Error(`Operation ${operationId} cannot be resumed`);\n }\n await this.run(() => provider.resume!(operationId));\n }\n\n async retry(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.retryable || !provider.retry) {\n throw new Error(`Operation ${operationId} cannot be retried`);\n }\n await this.run(() => provider.retry!(operationId));\n }\n\n async dismiss(operationId: string): Promise<void> {\n const { provider } = this.resolveOperation(operationId);\n if (provider.dismiss) {\n await this.run(() => provider.dismiss!(operationId));\n return;\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n hasClickHandler(operation: AXPBackgroundOperation): boolean {\n return (\n operation.capabilities.clickable &&\n this.handlers.some((handler) => handler.providerKey === operation.providerKey)\n );\n }\n\n async executeCommand(operationId: string, command: AXPExecuteCommand): Promise<void> {\n const { operation } = this.resolveOperation(operationId);\n const handler = this.resolveHandler(operation.providerKey);\n if (!handler) {\n return;\n }\n await this.run(() => handler.execute(command, operation));\n }\n\n async executeClick(operationId: string): Promise<void> {\n await this.executeCommand(operationId, { name: 'click' });\n }\n\n async runAction(operationId: string, action: AXPBackgroundOperationActionKey): Promise<void> {\n switch (action) {\n case 'cancel':\n await this.cancel(operationId);\n break;\n case 'pause':\n await this.pause(operationId);\n break;\n case 'resume':\n await this.resume(operationId);\n break;\n case 'retry':\n await this.retry(operationId);\n break;\n case 'dismiss':\n await this.dismiss(operationId);\n break;\n default:\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Resolution ----\n\n private resolveHandler(providerKey: string): AXPBackgroundOperationHandler | undefined {\n return this.handlers.find((handler) => handler.providerKey === providerKey);\n }\n\n private resolveProvider(providerKey: string): AXPBackgroundOperationProvider {\n const provider = this.providers.find((item) => item.key === providerKey);\n if (!provider) {\n throw new Error(`Background operation provider \"${providerKey}\" is not registered`);\n }\n return provider;\n }\n\n private resolveOperation(operationId: string): {\n provider: AXPBackgroundOperationProvider;\n operation: AXPBackgroundOperation;\n } {\n for (const provider of this.providers) {\n const operation = provider.operations().find((item) => item.id === operationId);\n if (operation) {\n return { provider, operation };\n }\n }\n throw new Error(`Background operation \"${operationId}\" was not found`);\n }\n\n private async run<T>(fn: () => Promise<T>): Promise<T> {\n this.busy.set(true);\n try {\n return await fn();\n } finally {\n this.busy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isNumber } from 'lodash-es';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n} from '../background-operation.types';\nimport { AXStyleLookType } from '@acorex/cdk/common';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-item',\n templateUrl: './background-operation-item.component.html',\n styleUrls: ['./background-operation-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXProgressBarModule, AXTranslationModule],\n})\nexport class AXPBackgroundOperationItemComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n data = input.required<AXPBackgroundOperation>();\n\n actionCompleted = output<void>();\n\n itemClicked = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pendingAction = signal<AXPBackgroundOperationActionKey | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly statusClass = computed(() => `--${this.data().status}`);\n\n protected readonly statusIcon = computed(() => {\n switch (this.data().status) {\n case 'queued':\n return 'fa-light fa-clock';\n case 'running':\n return 'fa-light fa-spinner fa-spin';\n case 'paused':\n return 'fa-light fa-pause';\n case 'completed':\n return 'fa-light fa-circle-check';\n case 'failed':\n return 'fa-light fa-circle-exclamation';\n case 'cancelled':\n return 'fa-light fa-ban';\n default:\n return 'fa-light fa-list-check';\n }\n });\n\n protected readonly progressColor = computed(() => {\n switch (this.data().status) {\n case 'failed':\n return 'danger';\n case 'paused':\n return 'warning';\n case 'completed':\n return 'success';\n default:\n return 'primary';\n }\n });\n\n protected readonly showProgressBar = computed(() => {\n const operation = this.data();\n return axpIsActiveBackgroundOperationStatus(operation.status);\n });\n\n protected readonly isIndeterminateProgress = computed(() => {\n const operation = this.data();\n return !isNumber(operation.progress) && !operation.currentStep;\n });\n\n protected readonly progressMode = computed(() =>\n this.isIndeterminateProgress() ? 'indeterminate' : 'determinate',\n );\n\n protected readonly progressValue = computed(() => {\n const progress = this.data().progress;\n if (isNumber(progress)) {\n return Math.min(Math.max(progress, 0), 100);\n }\n return 0;\n });\n\n protected readonly isClickable = computed(() => this.operationService.hasClickHandler(this.data()));\n\n protected readonly showError = computed(() => this.data().status === 'failed' && !!this.data().error?.message);\n\n protected readonly actions = computed(() => this.operationService.getAvailableActions(this.data()));\n\n protected readonly showMetaRow = computed(() => {\n const operation = this.data();\n return (\n !!operation.statusText ||\n !!operation.currentStep ||\n this.actions().length > 0\n );\n });\n\n //#endregion\n\n //#region ---- Action presentation ----\n\n protected actionLabelKey(action: AXPBackgroundOperationActionKey): string {\n return `@general:background-operation.actions.${action}`;\n }\n\n protected actionButtonLook(action: AXPBackgroundOperationActionKey): AXStyleLookType {\n if (action === 'dismiss') {\n return 'blank';\n }\n return 'twotone';\n }\n\n protected actionButtonColor(action: AXPBackgroundOperationActionKey): string {\n switch (action) {\n case 'cancel':\n return 'danger';\n case 'resume':\n case 'retry':\n return 'primary';\n default:\n return 'default';\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected async onItemClick(): Promise<void> {\n if (!this.isClickable()) {\n return;\n }\n try {\n await this.operationService.executeClick(this.data().id);\n this.itemClicked.emit();\n } catch (error) {\n console.error('Background operation click failed:', error);\n }\n }\n\n protected async onAction(action: AXPBackgroundOperationActionKey): Promise<void> {\n if (this.pendingAction()) {\n return;\n }\n this.pendingAction.set(action);\n try {\n await this.operationService.runAction(this.data().id, action);\n this.actionCompleted.emit();\n } catch (error) {\n console.error('Background operation action failed:', error);\n } finally {\n this.pendingAction.set(null);\n }\n }\n\n protected isActionDisabled(action: AXPBackgroundOperationActionKey): boolean {\n const pending = this.pendingAction();\n return pending !== null && pending !== action;\n }\n\n protected isActionLoading(action: AXPBackgroundOperationActionKey): boolean {\n return this.pendingAction() === action;\n }\n\n //#endregion\n}\n\n//#endregion\n","<article\n class=\"operation-item\"\n [class]=\"statusClass()\"\n [class.--clickable]=\"isClickable()\"\n (click)=\"onItemClick()\"\n>\n <div class=\"operation-item__body\">\n <div class=\"operation-item__header\">\n <ax-icon class=\"operation-item__status-icon\" [class]=\"statusClass()\">\n <i [class]=\"statusIcon()\"></i>\n </ax-icon>\n\n <div class=\"operation-item__summary\">\n <h3 class=\"operation-item__title\">{{ data().title }}</h3>\n\n @if (showMetaRow()) {\n <div class=\"operation-item__meta\">\n <div class=\"operation-item__meta-content\">\n @if (data().statusText) {\n <p class=\"operation-item__status-text\">{{ data().statusText }}</p>\n }\n\n @if (data().currentStep) {\n <span class=\"operation-item__step\">\n {{ '@general:background-operation.step' | translate | async }} {{ data().currentStep }}\n </span>\n }\n </div>\n\n @if (actions().length > 0) {\n <footer class=\"operation-item__actions\" (click)=\"$event.stopPropagation()\">\n @for (action of actions(); track action) {\n <ax-button\n class=\"ax-xs\"\n [look]=\"actionButtonLook(action)\"\n [color]=\"actionButtonColor(action)\"\n [text]=\"(actionLabelKey(action) | translate | async) ?? ''\"\n [disabled]=\"isActionDisabled(action) || isActionLoading(action)\"\n (onClick)=\"onAction(action)\"\n ></ax-button>\n }\n </footer>\n }\n </div>\n }\n\n @if (showProgressBar()) {\n <ax-progress-bar\n [progress]=\"progressValue()\"\n [mode]=\"progressMode()\"\n [color]=\"progressColor()\"\n [style.height.px]=\"4\"\n ></ax-progress-bar>\n }\n\n @if (showError()) {\n <p class=\"operation-item__error\" role=\"alert\">{{ data().error!.message }}</p>\n }\n </div>\n </div>\n </div>\n</article>\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport type { AXPBackgroundOperationStatus } from '../background-operation.types';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport { AXPBackgroundOperationItemComponent } from './background-operation-item.component';\n\n//#endregion\n\n//#region ---- Sort priority ----\n\nconst STATUS_SORT_PRIORITY: Record<AXPBackgroundOperationStatus, number> = {\n running: 0,\n queued: 1,\n paused: 2,\n failed: 3,\n completed: 4,\n cancelled: 5,\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-panel',\n templateUrl: './background-operation-panel.component.html',\n styleUrls: ['./background-operation-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXTranslationModule, AXPBackgroundOperationItemComponent],\n})\nexport class AXPBackgroundOperationPanelComponent {\n //#region ---- Outputs ----\n\n onActiveCountChange = output<number>();\n\n onClosePopover = output<void>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly visibleOperations = computed(() =>\n [...this.operationService.operations()]\n .filter(\n (operation) =>\n axpIsActiveBackgroundOperationStatus(operation.status) || operation.status === 'failed',\n )\n .sort((left, right) => {\n const priorityDiff = STATUS_SORT_PRIORITY[left.status] - STATUS_SORT_PRIORITY[right.status];\n if (priorityDiff !== 0) {\n return priorityDiff;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n }),\n );\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"operation-panel\">\n <header class=\"operation-panel__header\">\n <h2 class=\"operation-panel__title\">{{ '@general:background-operation.panel.title' | translate | async }}</h2>\n </header>\n\n <div class=\"operation-panel__list\">\n @if (visibleOperations().length === 0) {\n <div class=\"operation-panel__empty\">\n <i class=\"fa-regular fa-list-check\"></i>\n <span class=\"ax-text-sm\">{{ '@general:background-operation.empty.all' | translate | async }}</span>\n </div>\n } @else {\n @for (operation of visibleOperations(); track operation.id) {\n <axp-background-operation-item\n [data]=\"operation\"\n (actionCompleted)=\"onActiveCountChange.emit(operationService.activeCount())\"\n (itemClicked)=\"onClosePopover.emit()\"\n ></axp-background-operation-item>\n }\n }\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { AXPBackgroundOperationPanelComponent } from './background-operation-panel.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-slot',\n templateUrl: './background-operation-slot.component.html',\n styleUrls: ['./background-operation-slot.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXDecoratorModule, AXTranslationModule, AXPopoverModule, AXPBackgroundOperationPanelComponent],\n})\nexport class AXPBackgroundOperationSlotComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- View Queries ----\n\n private readonly popover = viewChild(AXPopoverComponent);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly activeCount = this.operationService.activeCount;\n\n protected readonly failedCount = this.operationService.failedCount;\n\n protected readonly showSlot = computed(\n () => this.activeCount() > 0 || this.failedCount() > 0,\n );\n\n protected readonly slotShowsFailureOnly = computed(\n () => this.activeCount() === 0 && this.failedCount() > 0,\n );\n\n protected readonly slotLabelKey = computed(() => {\n if (this.slotShowsFailureOnly()) {\n return this.failedCount() === 1\n ? '@general:background-operation.slot.failed-single'\n : '@general:background-operation.slot.failed-multiple';\n }\n\n return this.activeCount() === 1\n ? '@general:background-operation.slot.single'\n : '@general:background-operation.slot.multiple';\n });\n\n protected readonly slotLabelParams = computed(() => ({\n count: this.slotShowsFailureOnly() ? this.failedCount() : this.activeCount(),\n }));\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (showSlot()) {\n <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger>\n <ax-icon class=\"operation-slot__icon\">\n @if (slotShowsFailureOnly()) {\n <i class=\"fa-light fa-circle-exclamation\"></i>\n } @else {\n <i class=\"fa-light fa-spinner fa-spin\"></i>\n }\n </ax-icon>\n <span class=\"operation-slot__text\">\n {{ slotLabelKey() | translate: { params: slotLabelParams() } | async }}\n </span>\n </button>\n\n <ax-popover [target]=\"operationTrigger\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-rounded-md ax-w-full\">\n <axp-background-operation-panel (onClosePopover)=\"closePopover()\"></axp-background-operation-panel>\n </div>\n </ax-popover>\n}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","/** Thrown when a requested platform resource cannot be resolved. */\nexport class AXPNotFoundError extends Error {\n constructor(message = 'Resource not found') {\n super(message);\n this.name = 'AXPNotFoundError';\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { RedirectCommand, Route, Router, ROUTES } from '@angular/router';\n\n/** Canonical route path for the platform 404 page. */\nexport const AXP_NOT_FOUND_ROUTE = '/error/404';\n\n/**\n * Catch-all route that redirects unknown URLs to the platform 404 page.\n * Register this as the **last** route source in the application (after all app and module routes).\n */\nexport const AXP_NOT_FOUND_CATCH_ALL_ROUTE: Route = {\n path: '**',\n redirectTo: AXP_NOT_FOUND_ROUTE,\n};\n\n/**\n * Registers the platform catch-all 404 route.\n * Must be the last `ROUTES` provider in `app.config` so custom app routes are matched first.\n */\nexport function AXPNotFoundCatchAllRoute(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n multi: true,\n useValue: [AXP_NOT_FOUND_CATCH_ALL_ROUTE],\n },\n ]);\n}\n\n/**\n * Returns true when an entity byKey query did not resolve a record.\n */\nexport function axpIsEntityRecordNotFound(data: unknown): boolean {\n return data == null;\n}\n\n/**\n * Creates an Angular redirect command to the platform 404 page.\n */\nexport function axpRedirectToNotFound(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_NOT_FOUND_ROUTE));\n}\n","import { inject } from '@angular/core';\nimport { RedirectCommand, Router } from '@angular/router';\n\n/** Canonical route path for the platform 401 page. */\nexport const AXP_UNAUTHORIZED_ROUTE = '/error/401';\n\n/**\n * Creates an Angular redirect command to the platform 401 page.\n */\nexport function axpRedirectToUnauthorized(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_UNAUTHORIZED_ROUTE));\n}\n","import { Injectable } from \"@angular/core\";\nimport { AXPFileStorageCreateRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest, AXPFileStorageFindRequest, AXPFileManyStorageInfo } from \"./file-storage.types\";\n\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","import { AXPMetaData } from '@acorex/platform/core';\n\nexport enum AXPFileStorageStatus {\n Temporary = 'temporary', // File is not yet associated with a parent entity\n Committed = 'committed', // File is fully associated and in use\n PendingDeletion = 'pendingDeletion', // File is marked for deletion but not yet removed\n Archived = 'archived', // File is archived and no longer actively used\n Error = 'error', // File encountered an error during processing\n}\n\n/**\n * Interface representing a file storage request in the Acorex platform.\n */\nexport interface AXPFileStorageCreateRequest {\n /**\n * The file to be stored.\n */\n file: File;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * Metadata associated with the file.\n */\n metadata?: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n /**\n * Indicates the status of the file.\n */\n status?: AXPFileStorageStatus;\n}\n\nexport interface AXPFileStorageUpdateRequest {\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The folder path where the file should be stored.\n * If null, the service will resolve the path based on metadata, user, tenant, or default rules.\n */\n path?: string;\n /**\n * The name of the file.\n */\n name?: string;\n /**\n * Metadata associated with the file.\n */\n metadata: AXPMetaData;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\nexport interface AXPFileManyStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * Optional title (e.g. for display in file list).\n */\n title?: string;\n\n /**\n * Optional description (e.g. for display in file list).\n */\n description?: string;\n}\n\nexport interface AXPFileStorageInfo {\n /**\n * The unique identifier for the stored file.\n */\n id?: string;\n /**\n * The unique identifier for the stored file.\n */\n fileId: string;\n\n /**\n * The unique identifier of referenced entity.\n */\n refId: string;\n /**\n * The type of the referenced entity.\n */\n refType: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category: string;\n\n /**\n * The URL where the file can be accessed.\n */\n url?: string;\n\n /**\n * The size of the file in bytes.\n */\n size: number;\n\n /**\n * The name of the file.\n */\n name?: string;\n\n /**\n * The MIME type of the file.\n */\n mimeType: string;\n\n /**\n * The date and time when the file was uploaded.\n */\n uploadedAt: Date;\n\n /**\n * Indicates whether the file is public or private.\n */\n isPublic: boolean;\n\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n\n status: AXPFileStorageStatus; // Updated to use enum\n\n binary: File;\n}\n\n/**\n * Represents information about a file stored in the AXP file storage system.\n */\nexport interface AXPFileStorageFindRequest {\n /**\n * The unique identifier of referenced entity.\n */\n refId?: string;\n /**\n * The type of the referenced entity.\n */\n refType?: string;\n /**\n * The category of the file. profile-picture, company-logo, policy, document, etc.\n */\n category?: string;\n /**\n * The MIME type of the file.\n */\n mimeType?: string;\n /**\n * Indicates whether the file is public or private.\n */\n isPublic?: boolean;\n /**\n * Indicates whether the file is primary or not.\n */\n isPrimary?: boolean;\n /**\n * The date and time range when the file was uploaded.\n */\n uploadedAtRange?: { from: Date; to: Date };\n}\n","import { AXPFileStorageService } from './file-storage.service';\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n} from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\n\nexport class AXPFileStorageEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n fileStorageService = inject(AXPFileStorageService);\n\n async provide(\n context: AXPExpressionEvaluatorScopeProviderContext,\n ): Promise<void> {\n\n console.log('fileStorageEvaluatorScopeProvider', context);\n\n //\n context.addScope('fileStorage', {\n getFiles: async (entityType: string, entityId: string) => {\n console.log('getFiles', entityType, entityId);\n const filesFromService = await this.fileStorageService.find({\n category: '',\n refId: entityId,\n refType: entityType,\n });\n const mappedFiles = filesFromService?.map((file) => ({\n id: file.id ?? '',\n name: file.name,\n size: file.size,\n status: 'remote',\n source: {\n kind: 'fileId',\n value: file.fileId,\n },\n }));\n\n return mappedFiles;\n },\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPKeyboardShortcutHelpEntry,\n AXPKeyboardShortcutRegistry,\n chordToKbdItemKeys,\n} from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, ViewEncapsulation } from '@angular/core';\n\n//#endregion\n\ninterface AXPKeyboardShortcutHelpGroup {\n label: string;\n items: AXPKeyboardShortcutHelpEntry[];\n}\n\n@Component({\n selector: 'axp-keyboard-shortcuts-help',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AsyncPipe, AXKBDComponent, AXKBDItemComponent, AXTranslationModule],\n styleUrls: ['./keyboard-shortcuts-help.component.scss'],\n template: `\n <div class=\"axp-keyboard-shortcuts-help\">\n <div class=\"__body\">\n @if (groups().length === 0) {\n <p class=\"__empty\">\n {{ '@general:keyboard-shortcuts.no-shortcuts' | translate | async }}\n </p>\n } @else {\n @for (group of groups(); track group.label) {\n <section class=\"__section\">\n <h3 class=\"__heading\">\n {{ group.label | translate | async }}\n </h3>\n <div class=\"__list\">\n @for (item of group.items; track item.registrationId + item.bindingTitle) {\n <div class=\"__row\">\n <span class=\"__action\">\n {{ item.bindingTitle | translate | async }}\n </span>\n <div class=\"__keys\">\n @for (chord of item.displayChords; track chord; let last = $last) {\n <ax-kbd look=\"solid\">\n <ax-kbd-item [keys]=\"chordToKbdKeys(chord)\" join=\"split\" look=\"solid\"></ax-kbd-item>\n </ax-kbd>\n @if (!last) {\n <span class=\"__or\">\n {{ '@general:keyboard-shortcuts.or' | translate | async }}\n </span>\n }\n }\n </div>\n </div>\n }\n </div>\n </section>\n }\n }\n </div>\n </div>\n `,\n})\nexport class AXPKeyboardShortcutsHelpComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly groups = computed((): AXPKeyboardShortcutHelpGroup[] => {\n const grouped = new Map<string, AXPKeyboardShortcutHelpEntry[]>();\n\n for (const entry of this.shortcutRegistry.helpEntries()) {\n const label = entry.group ?? entry.scope ?? '@general:keyboard-shortcuts.groups.general';\n const bucket = grouped.get(label) ?? [];\n bucket.push(entry);\n grouped.set(label, bucket);\n }\n\n return [...grouped.entries()].map(([label, items]) => ({ label, items }));\n });\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n protected chordToKbdKeys(chord: string): string[] {\n return chordToKbdItemKeys(chord, { skipDirectionResolve: true });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { DOCUMENT } from '@angular/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPKeyboardShortcutRegistry, hasForegroundOverlayLayer } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPKeyboardShortcutsHelpService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly document = inject(DOCUMENT);\n\n //#endregion\n\n //#region ---- State ----\n\n /** In-flight help popup session (open until the popup closes). */\n private activeShow: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.shortcutRegistry.setHelpDialogHandler(() => this.show());\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Opens the keyboard shortcuts help popup, or no-ops when it is already open.\n */\n show(): Promise<void> {\n if (this.activeShow) {\n return this.activeShow;\n }\n\n if (typeof this.document !== 'undefined' && hasForegroundOverlayLayer(this.document)) {\n return Promise.resolve();\n }\n\n this.activeShow = this.openHelpPopup().finally(() => {\n this.activeShow = null;\n });\n\n return this.activeShow;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async openHelpPopup(): Promise<void> {\n const title = await this.translationService.translateAsync('@general:keyboard-shortcuts.help-title');\n const component = await import('./keyboard-shortcuts-help.component').then(\n (module) => module.AXPKeyboardShortcutsHelpComponent,\n );\n\n await this.popupService.open(component, {\n title,\n size: 'sm',\n closeButton: true,\n closeOnBackdropClick: true,\n draggable: false,\n });\n }\n\n //#endregion\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[axpSticky]',\n exportAs: 'axpSticky',\n standalone: true,\n})\nexport class AXPStickyDirective {\n @Input('axpSticky') stickyClass!: string;\n @Input('stickyOffset') stickyOffset: number = 100;\n\n @Output() isStickyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _isSticky: boolean = false;\n public get isSticky(): boolean {\n return this._isSticky;\n }\n public set isSticky(value: boolean) {\n if (this._isSticky !== value) {\n this._isSticky = value;\n this.isStickyChange.emit(value);\n }\n }\n\n private parentElement!: HTMLElement | Window;\n private targetElement!: HTMLElement;\n private mutationObserver!: MutationObserver;\n\n private readonly onWindowResize = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n @Input() stickyParent!: string | HTMLElement;\n @Input() stickyTarget!: string;\n\n constructor(\n private element: ElementRef<HTMLDivElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit() {\n this.initSticky();\n\n // Add mutation observer for dynamic content\n this.mutationObserver = new MutationObserver(() => {\n this.applyStickyStateFromScrollPosition();\n });\n\n this.mutationObserver.observe(this.element.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n window.addEventListener('resize', this.onWindowResize);\n }\n\n private initSticky() {\n if (this.stickyParent instanceof HTMLElement) {\n this.parentElement = this.stickyParent;\n } else {\n this.parentElement = (document.querySelector(this.stickyParent) as HTMLElement) || window;\n }\n\n this.targetElement = (document.querySelector(this.stickyTarget) as HTMLElement) || this.element.nativeElement;\n\n this.parentElement.addEventListener('scroll', this.onParentScroll);\n this.applyStickyStateFromScrollPosition();\n }\n\n private getScrollTop(): number {\n return this.parentElement === window ? window.scrollY : (this.parentElement as HTMLElement).scrollTop;\n }\n\n /**\n * Toggle stuck styling only while this element is visually pinned (matches `position: sticky; top: 0`).\n * Scroll-offset thresholds would stay true for every section already passed, so multiple stacked stickies\n * would all keep `--stuck`; geometry fixes that.\n */\n private computeShouldStick(): boolean {\n if (this.getScrollTop() <= 0) {\n return false;\n }\n const tRect = this.targetElement.getBoundingClientRect();\n const epsilon = 3;\n let limitY: number;\n if (this.parentElement === window) {\n limitY = this.stickyOffset;\n } else {\n limitY = (this.parentElement as HTMLElement).getBoundingClientRect().top;\n }\n return tRect.top <= limitY + epsilon && tRect.top >= limitY - epsilon;\n }\n\n private applyStickyStateFromScrollPosition(): void {\n this.zone.runOutsideAngular(() => {\n const shouldStick = this.computeShouldStick();\n\n if (shouldStick !== this.isSticky) {\n this.zone.run(() => {\n this.isSticky = shouldStick;\n this.toggleStickyClasses(shouldStick);\n this.cdr.markForCheck();\n });\n }\n });\n }\n\n private onParentScroll = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n private toggleStickyClasses(isSticky: boolean): void {\n const classes = this.stickyClass.split(' ').filter(Boolean);\n classes.forEach((className) => {\n if (isSticky) {\n this.renderer.addClass(this.targetElement, className);\n } else {\n this.renderer.removeClass(this.targetElement, className);\n }\n });\n }\n\n ngOnDestroy() {\n this.parentElement.removeEventListener('scroll', this.onParentScroll);\n window.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","import { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Registered menu items (raw tree flattened) for select widgets via dataSource name {@link MENU_ITEMS_DATASOURCE_NAME}.\n */\nexport const MENU_ITEMS_DATASOURCE_NAME = 'platform-menu-items';\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: MENU_ITEMS_DATASOURCE_NAME,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks visibility for a menu branch, including ancestor policies.\n * Parent module features and permissions must pass before child routes are accessible.\n */\n isMenuBranchVisible(item: AXPMenuItem, ancestors: AXPMenuItem[] = []): boolean {\n for (const menuItem of [...ancestors, item]) {\n if (!this.isItemVisible(menuItem)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPKeyboardShortcutBinding,\n AXPKeyboardShortcutPriority,\n AXPKeyboardShortcutRegistry,\n normalizeKeyboardShortcuts,\n} from '@acorex/platform/core';\nimport { DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AXPMenuService } from './menu.service';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\nimport { AXPMenuItem } from './menu.types';\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface AXPMenuShortcutEntry {\n item: AXPMenuItem;\n ancestors: AXPMenuItem[];\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPMenuKeyboardShortcutService {\n //#region ---- Services & Dependencies ----\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly visibilityService = inject(AXPMenuVisibilityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly isAuthenticated = toSignal(this.sessionService.isAuthenticated$, { initialValue: false });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Registers global keyboard shortcuts declared on menu items (`shortcuts` property).\n * Replaces the previous registration when the menu tree is reloaded.\n */\n sync(items: AXPMenuItem[]): void {\n const shortcuts = this.buildShortcutBindings(items);\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'menu-items-shortcuts',\n priority: AXPKeyboardShortcutPriority.Global,\n group: '@general:keyboard-shortcuts.groups.global',\n when: () => this.isAuthenticated() === true,\n shortcuts,\n });\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private buildShortcutBindings(items: AXPMenuItem[]): AXPKeyboardShortcutBinding[] {\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n for (const entry of this.collectShortcutEntries(items)) {\n if (!entry.item.path && !entry.item.command) {\n continue;\n }\n\n for (const shortcut of normalizeKeyboardShortcuts(entry.item.shortcuts)) {\n for (const chord of shortcut.keys) {\n shortcuts.push({\n keys: [chord],\n title: entry.item.text,\n group: '@general:keyboard-shortcuts.groups.global',\n allowInEditableFields: shortcut.allowInEditableFields,\n directionBehavior: shortcut.directionBehavior,\n when: () => this.isShortcutActive(entry) && (shortcut.when?.() ?? true),\n handler: () => {\n this.injector.get(AXPMenuService).executeCommand(entry.item);\n },\n });\n }\n }\n }\n\n return shortcuts;\n }\n\n private collectShortcutEntries(\n items: AXPMenuItem[],\n ancestors: AXPMenuItem[] = [],\n ): AXPMenuShortcutEntry[] {\n const result: AXPMenuShortcutEntry[] = [];\n\n for (const item of items) {\n const parents = ancestors;\n if (item.shortcuts?.length) {\n result.push({ item, ancestors: parents });\n }\n\n if (item.children?.length) {\n result.push(...this.collectShortcutEntries(item.children, [...parents, item]));\n }\n }\n\n return result;\n }\n\n private isShortcutActive(entry: AXPMenuShortcutEntry): boolean {\n if (this.isAuthenticated() !== true) {\n return false;\n }\n\n return this.visibilityService.isMenuBranchVisible(entry.item, entry.ancestors);\n }\n\n //#endregion\n}\n","import { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuRouteMatchResult {\n item: AXPMenuItem;\n /** Parent menu items from root down to the direct parent of the matched item. */\n ancestors: AXPMenuItem[];\n isPartialMatch: boolean;\n}\n\nconst DEFAULT_TRAILING_SEGMENTS = ['list', 'view', 'edit', 'create'];\n\n/**\n * Compares a menu item path with the current browser path.\n * Mirrors the matching rules used when selecting the active menu item.\n */\nexport function axpMenuPathsMatch(\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): { isMatch: boolean; isPartial: boolean } {\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase, currentQueryString = ''] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--;\n }\n\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n let isPrefix = true;\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n const isPartialMatch = effectiveMenuLength < pathLength;\n const isExactMatch = effectiveMenuLength === pathLength;\n\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentQueryString);\n let queryMatches = true;\n\n const itemParamPairs: Array<[string, string]> = [];\n itemParams.forEach((value, key) => {\n itemParamPairs.push([key, value]);\n });\n\n if (itemParamPairs.length > 0) {\n for (const [key, value] of itemParamPairs) {\n if (currentParams.get(key) !== value) {\n queryMatches = false;\n break;\n }\n }\n }\n\n return {\n isMatch: (isExactMatch || isPartialMatch) && queryMatches,\n isPartial: isPartialMatch && !isExactMatch,\n };\n}\n\n/**\n * Finds the most specific menu item that matches the given route path.\n */\nexport function axpFindMenuItemByRoute(\n items: AXPMenuItem[],\n currentPath: string,\n trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): AXPMenuRouteMatchResult | null {\n let bestMatch: AXPMenuRouteMatchResult | null = null;\n let bestEffectiveLength = -1;\n\n const visit = (menuItems: AXPMenuItem[], ancestors: AXPMenuItem[]): void => {\n for (const item of menuItems) {\n if (item.children?.length) {\n visit(item.children, [...ancestors, item]);\n }\n\n if (!item.path) {\n continue;\n }\n\n const matchResult = axpMenuPathsMatch(item.path, currentPath, trailingSegmentsToIgnore);\n if (!matchResult.isMatch) {\n continue;\n }\n\n const itemNoHash = item.path.split('#')[0];\n const [itemBase] = itemNoHash.split('?');\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n\n let effectiveMenuLength = itemSegments.length;\n if (\n itemSegments.length > 0 &&\n trailingSegmentsToIgnore.includes(itemSegments[itemSegments.length - 1])\n ) {\n effectiveMenuLength--;\n }\n\n if (effectiveMenuLength > bestEffectiveLength) {\n bestEffectiveLength = effectiveMenuLength;\n bestMatch = { item, ancestors, isPartialMatch: matchResult.isPartial };\n }\n }\n };\n\n visit(items, []);\n return bestMatch;\n}\n","import { AXPExecuteCommand, AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuKeyboardShortcutService } from './menu-keyboard-shortcuts.service';\nimport { axpMenuPathsMatch } from './menu-route-matcher';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const currentRawPath = path;\n\n const findItem = (items: AXPMenuItem[]): { item: AXPMenuItem | null; isPartialMatch: boolean } => {\n for (const item of items) {\n // Recursively search children first\n if (item.children) {\n const foundChild = findItem(item.children);\n if (foundChild.item) {\n return foundChild;\n }\n }\n if (item.path) {\n // Check if the item path matches the current path (including query param subset if provided on item)\n const matchResult = axpMenuPathsMatch(item.path, currentRawPath, ['list', 'view', 'edit', 'create']);\n if (matchResult.isMatch) {\n return { item, isPartialMatch: matchResult.isPartial };\n }\n }\n }\n return { item: null, isPartialMatch: false };\n };\n\n const items = store.items();\n const { item, isPartialMatch } = findItem(items);\n patchState(store, { selectedMenuItem: { item, isFullMatch: !isPartialMatch } });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem();\n if (!selectedItem.item) {\n return false;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (currentItem.children?.includes(targetItem)) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return item === selectedItem.item || findParent(item, selectedItem.item);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService), menuKeyboardShortcuts = inject(AXPMenuKeyboardShortcutService)) => {\n let reloadSubscription: any;\n\n const applyMenuItems = (items: AXPMenuItem[]): void => {\n patchState(store, { items });\n menuKeyboardShortcuts.sync(items);\n };\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n applyMenuItems(await menuProviderService.items());\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n applyMenuItems(await menuProviderService.items());\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\n\nconst SKIP_ROUTE_PREFIXES = ['/auth', '/error'];\nconst SKIP_ROUTE_PATHS = new Set(['/404', '/401', '/error/404', '/error/401']);\n\n//#region ---- Menu Route Access Service ----\n\n/**\n * Resolves route access using menu policy, route metadata, permissions, and features.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuRouteAccessService {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProvider = inject(AXPMenuProviderService);\n private readonly menuVisibility = inject(AXPMenuVisibilityService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Checks whether navigation to the target URL is allowed for the current user.\n */\n async canAccess(route: ActivatedRouteSnapshot, url: string): Promise<boolean> {\n if (this.shouldSkip(route, url)) {\n return true;\n }\n\n if (!this.hasExplicitRouteAccess(route)) {\n return false;\n }\n\n const menuItems = await this.menuProvider.items();\n const menuMatch = axpFindMenuItemByRoute(menuItems, url);\n\n if (!menuMatch) {\n return true;\n }\n\n if (this.menuVisibility.isMenuBranchVisible(menuMatch.item, menuMatch.ancestors)) {\n return true;\n }\n\n return false;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private shouldSkip(route: ActivatedRouteSnapshot, url: string): boolean {\n if (this.hasRouteFlag(route, 'skipMenuRouteGuard')) {\n return true;\n }\n\n const normalizedUrl = this.normalizeUrl(url);\n\n if (SKIP_ROUTE_PATHS.has(normalizedUrl)) {\n return true;\n }\n\n return SKIP_ROUTE_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix));\n }\n\n private hasRouteFlag(route: ActivatedRouteSnapshot, key: string): boolean {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n if (current.data?.[key] === true) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n private hasExplicitRouteAccess(route: ActivatedRouteSnapshot): boolean {\n const requiredPermission = this.getInheritedRouteData<string | string[] | null>(route, 'requiredPermission');\n const requiredFeature = this.getInheritedRouteData<string | string[] | null>(route, 'requiredFeature');\n\n const permissionKeys = this.normalizeKeys(requiredPermission);\n if (permissionKeys.length > 0 && !this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n\n const featureKeys = this.normalizeKeys(requiredFeature);\n if (featureKeys.length > 0 && !this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n\n return true;\n }\n\n private getInheritedRouteData<T>(route: ActivatedRouteSnapshot, key: string): T | null {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n const value = current.data?.[key] as T | undefined;\n if (value != null) {\n return value;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private normalizeKeys(keys: string | string[] | null | undefined): string[] {\n if (!keys) {\n return [];\n }\n\n return Array.isArray(keys) ? keys : [keys];\n }\n\n private normalizeUrl(url: string): string {\n const path = url.split('?')[0]?.split('#')[0] ?? url;\n return path.startsWith('/') ? path : `/${path}`;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXP_UNAUTHORIZED_ROUTE } from '../../errors/unauthorized.routes';\r\r\nimport { AXPSessionService } from '@acorex/platform/auth';\r\r\nimport { inject } from '@angular/core';\r\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\r\nimport { first, from, map, switchMap } from 'rxjs';\r\r\nimport { AXPMenuRouteAccessService } from './menu-route-access.service';\r\r\n\r\r\n/**\r\r\n * Blocks navigation when the target route is not accessible for the current user.\r\r\n * Evaluates menu policy, permissions, and features.\r\r\n */\r\r\nexport const AXPMenuRouteGuard: CanActivateFn = (\r\r\n route: ActivatedRouteSnapshot,\r\r\n state: RouterStateSnapshot,\r\r\n) => {\r\r\n const sessionService = inject(AXPSessionService);\r\r\n const menuRouteAccessService = inject(AXPMenuRouteAccessService);\r\r\n const router = inject(Router);\r\r\n\r\r\n return sessionService.isAuthorizedWithLoading$.pipe(\r\r\n first(),\r\r\n switchMap(() => from(menuRouteAccessService.canAccess(route, state.url))),\r\r\n map((isAllowed): boolean | UrlTree => {\r\r\n if (isAllowed) {\r\r\n return true;\r\r\n }\r\r\n\r\r\n return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\r\r\n }),\r\r\n );\r\r\n};\r\r\n\r","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXPMenuRouteGuard } from './menu-route.guard';\n\n/** Standard guards for authenticated routes with menu-based access enforcement. */\nexport const AXP_PROTECTED_ROUTE_GUARDS = [AXPAuthGuard, AXPMenuRouteGuard] as const;\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '../../search';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/core';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPEntity } from '../app/application.types';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\nimport { resolveSearchDisplayTemplate, resolveSearchableText } from './search-display-string.util';\nimport { AXPSearchDefinitionDisplayFormat } from './search.types';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPEntitySearchTitleContext {\n /** Templates tried after the primary `searchResult.title` fails (`single.title`, lookup, individual). */\n fallbackTemplates: string[];\n /** Entity property paths tried when templates do not resolve (`lookup`, identifier, common fields). */\n fallbackFields: string[];\n}\n\n//#endregion\n\n//#region ---- Template normalization ----\n\n/**\n * Normalizes entity display templates for {@link AXPExpressionEvaluatorService}.\n * Converts `context.eval('path')`, single braces, and simple dot paths to `context.eval` segments.\n */\nexport function normalizeEntityDisplayTemplate(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/** True when formatted text still contains unresolved template markers. */\nexport function isUnresolvedEntityDisplayTemplate(value: string): boolean {\n return /\\{\\{/.test(value) || /context\\.eval\\s*\\(/.test(value) || value === '[object Object]';\n}\n\n/**\n * Strips literal `undefined` / `null` tokens produced when expression segments are missing.\n */\nexport function sanitizeResolvedEntityDisplayTitle(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n\n const withoutLiterals = trimmed\n .replace(/\\bundefined\\b/gi, ' ')\n .replace(/\\bnull\\b/gi, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return withoutLiterals\n .replace(/^[\\s\\-–—·|/,()+]+|[\\s\\-–—·|/,()+]+$/g, '')\n .trim();\n}\n\n/** True when a resolved title is non-empty and safe to show in search or entity chrome. */\nexport function isMeaningfulEntityDisplayTitle(value: string): boolean {\n const sanitized = sanitizeResolvedEntityDisplayTitle(value);\n return sanitized.length > 0 && !isUnresolvedEntityDisplayTemplate(sanitized);\n}\n\nfunction isRowBoundTemplate(template: string): boolean {\n const trimmed = template.trim();\n if (!trimmed || trimmed.startsWith('@')) {\n return false;\n }\n return trimmed.includes('{{') || trimmed.includes('{');\n}\n\n//#endregion\n\n//#region ---- Entity metadata ----\n\nconst DEFAULT_DISPLAY_FIELD_CANDIDATES = [\n 'title',\n 'name',\n 'code',\n 'fullName',\n 'displayName',\n 'subject',\n 'description',\n] as const;\n\nfunction entityHasProperty(entity: AXPEntity, path: string): boolean {\n const root = path.split('.')[0];\n return entity.properties?.some((property) => property.name === root) ?? false;\n}\n\nfunction resolveEntityDisplayPropertyPaths(entity: AXPEntity): string[] {\n const paths: string[] = [];\n const add = (path?: string) => {\n const trimmed = path?.trim();\n if (!trimmed || trimmed.includes('{') || paths.includes(trimmed)) {\n return;\n }\n if (entityHasProperty(entity, trimmed)) {\n paths.push(trimmed);\n }\n };\n\n const lookupFormat = entity.formats?.lookup?.trim();\n if (lookupFormat && !lookupFormat.includes('{')) {\n add(lookupFormat);\n }\n\n for (const candidate of DEFAULT_DISPLAY_FIELD_CANDIDATES) {\n add(candidate);\n }\n\n const identifierPlugin = entity.plugins?.find((plugin) => plugin.name === 'identifier');\n const identifierField = identifierPlugin?.options?.['field'];\n if (typeof identifierField === 'string') {\n add(identifierField);\n }\n\n if (paths.length === 0) {\n const firstStringProperty = entity.properties?.find(\n (property) => property.schema?.dataType === 'string' && property.name !== 'id',\n );\n add(firstStringProperty?.name);\n }\n\n return paths;\n}\n\n/**\n * Builds entity-scoped fallback metadata for global search (registered on each entity search definition).\n */\nexport function buildEntitySearchTitleContext(\n entity: AXPEntity,\n primaryTemplate?: string,\n): AXPEntitySearchTitleContext {\n const fallbackTemplates: string[] = [];\n const normalizedPrimary = primaryTemplate?.trim()\n ? normalizeEntityDisplayTemplate(primaryTemplate.trim())\n : undefined;\n\n const addTemplate = (raw?: string) => {\n const trimmed = raw?.trim();\n if (!trimmed || !isRowBoundTemplate(trimmed)) {\n return;\n }\n const normalized = normalizeEntityDisplayTemplate(trimmed);\n if (!normalized || normalized === normalizedPrimary || fallbackTemplates.includes(normalized)) {\n return;\n }\n fallbackTemplates.push(normalized);\n };\n\n addTemplate(entity.interfaces?.master?.single?.title);\n addTemplate(entity.formats?.lookup);\n addTemplate(entity.formats?.individual);\n\n return {\n fallbackTemplates,\n fallbackFields: resolveEntityDisplayPropertyPaths(entity),\n };\n}\n\n/**\n * Row title template chain aligned with entity layouts.\n * Priority: `interfaces.master.single.title` → `formats.searchResult.title` → `formats.individual`.\n */\nexport function resolveEntityRowTitleTemplate(entity: AXPEntity | null | undefined): string | undefined {\n if (!entity) {\n return undefined;\n }\n\n const singleTitle = entity.interfaces?.master?.single?.title?.trim();\n if (singleTitle && isRowBoundTemplate(singleTitle)) {\n return normalizeEntityDisplayTemplate(singleTitle);\n }\n\n const searchTitle = entity.formats?.searchResult?.title?.trim();\n if (searchTitle && isRowBoundTemplate(searchTitle)) {\n return normalizeEntityDisplayTemplate(searchTitle);\n }\n\n const lookupFormat = entity.formats?.lookup?.trim();\n if (lookupFormat && isRowBoundTemplate(lookupFormat)) {\n return normalizeEntityDisplayTemplate(lookupFormat);\n }\n\n const individual = entity.formats?.individual?.trim();\n if (individual && isRowBoundTemplate(individual)) {\n return normalizeEntityDisplayTemplate(individual);\n }\n\n return undefined;\n}\n\n//#endregion\n\n//#region ---- Runtime resolution ----\n\n/**\n * Resolves an entity row title using entity-driven fallback templates and property paths.\n */\nexport async function resolveEntitySearchTitleFallback(\n format: Pick<AXPSearchDefinitionDisplayFormat, 'titleFallbackTemplates' | 'titleFallbackFields'>,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<string> {\n if (data == null) {\n return '';\n }\n\n for (const template of format.titleFallbackTemplates ?? []) {\n const resolved = await resolveSearchDisplayTemplate(\n template,\n data,\n locale,\n translationService,\n formatService,\n expressionEvaluator,\n );\n const text = sanitizeResolvedEntityDisplayTitle(\n typeof resolved === 'string'\n ? resolved\n : resolveSearchableText(resolved, locale, translationService),\n );\n if (isMeaningfulEntityDisplayTitle(text)) {\n return text;\n }\n }\n\n for (const path of format.titleFallbackFields ?? []) {\n const text = resolveSearchableText(get(data, path), locale, translationService).trim();\n if (text) {\n return text;\n }\n }\n\n return '';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport {\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPMultiLanguageString,\n isLocaleStringMap,\n} from '@acorex/platform/core';\nimport { get, isPlainObject } from 'lodash-es';\nimport {\n normalizeEntityDisplayTemplate,\n sanitizeResolvedEntityDisplayTitle,\n} from './entity-search-display-title.util';\n\n//#endregion\n\n//#region ---- Searchable text resolution ----\n\n/**\n * Resolves a value to plain text for global-search matching (i18n keys, locale maps, scalars).\n */\nexport function resolveSearchableText(\n value: unknown,\n locale: string,\n translationService: AXTranslationService,\n): string {\n if (value == null || value === false) {\n return '';\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n if (trimmed.startsWith('@')) {\n return translationService.translateSync(trimmed) || trimmed;\n }\n return trimmed;\n }\n\n if (isLocaleStringMap(value)) {\n return Object.values(value)\n .filter((entry) => (entry ?? '').trim() !== '')\n .join(' ');\n }\n\n if (translationService.isValidMultiLanguageObject(value)) {\n return resolveMultiLanguageString(value as AXPMultiLanguageString, locale);\n }\n\n return '';\n}\n\n/**\n * Case-insensitive match against i18n keys, locale maps, and plain strings.\n */\nexport function searchInSearchableValue(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n): boolean {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q) {\n return true;\n }\n\n const text = resolveSearchableText(value, locale, translationService).toLocaleLowerCase(locale);\n return text.includes(q);\n}\n\n/**\n * Shallow + nested search over entity/command payloads (skips id / entityName keys).\n */\nexport function searchInRecordValues(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): boolean {\n const maxDepth = 4;\n if (depth > maxDepth || value == null) {\n return false;\n }\n\n if (searchInSearchableValue(value, query, locale, translationService)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => searchInRecordValues(item, query, locale, translationService, depth + 1));\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n return Object.entries(value as Record<string, unknown>).some(([key, entry]) => {\n if (key === 'id' || key === 'entityName') {\n return false;\n }\n return searchInRecordValues(entry, query, locale, translationService, depth + 1);\n });\n }\n\n return false;\n}\n\n//#endregion\n\n//#region ---- Display template resolution ----\n\nfunction countMustacheExpressions(template: string): number {\n return (template.match(/\\{\\{/g) ?? []).length;\n}\n\n/** Standard row scope for entity title/search templates. */\nexport function createEntityRowExpressionScope(data: unknown): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => get(data as Record<string, unknown>, path),\n },\n };\n}\n\n/**\n * Evaluates a normalized entity display template via {@link AXPExpressionEvaluatorService}.\n */\nexport async function evaluateEntityDisplayTemplate(\n template: string,\n data: unknown,\n expressionEvaluator: AXPExpressionEvaluatorService,\n locale: string,\n translationService: AXTranslationService,\n): Promise<unknown> {\n const normalized = normalizeEntityDisplayTemplate(template);\n const scope = createEntityRowExpressionScope(data);\n\n const formatSegment = (segment: unknown): string => {\n if (segment === false || segment == null) {\n return '';\n }\n return resolveSearchableText(segment, locale, translationService);\n };\n\n if (!normalized.includes('{{')) {\n return normalized;\n }\n\n if (\n countMustacheExpressions(normalized) === 1 &&\n expressionEvaluator.isExpression(normalized)\n ) {\n return expressionEvaluator.evaluate(normalized, scope);\n }\n\n const regex = /\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g;\n let result = '';\n let lastIndex = 0;\n\n for (const match of normalized.matchAll(regex)) {\n result += normalized.slice(lastIndex, match.index);\n const segment = await expressionEvaluator.evaluate(`{{ ${match[1].trim()} }}`, scope);\n result += formatSegment(segment);\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n\n result += normalized.slice(lastIndex);\n return result;\n}\n\n/**\n * Best display string from row values that contain the active search query (deep-match fallback).\n */\nexport function resolveQueryMatchingDisplayText(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): string {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q || depth > 4 || value == null) {\n return '';\n }\n\n let best = '';\n const consider = (candidate: unknown) => {\n const text = resolveSearchableText(candidate, locale, translationService).trim();\n if (text && text.toLocaleLowerCase(locale).includes(q) && text.length > best.length) {\n best = text;\n }\n };\n\n consider(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = resolveQueryMatchingDisplayText(item, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n return best;\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n if (key === 'id' || key === 'entityName') {\n continue;\n }\n const nested = resolveQueryMatchingDisplayText(entry, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n }\n\n return best;\n}\n\n/**\n * Resolves entity search display templates; coerces multi-language field values to readable text.\n */\nexport async function resolveSearchDisplayTemplate(\n template: string | undefined,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<AXPMultiLanguageString> {\n if (!template) {\n return '';\n }\n\n if (!template.includes('{{') && !template.includes('{')) {\n if (template.trim().startsWith('@')) {\n return resolveSearchableText(template, locale, translationService);\n }\n\n const formatted = formatService.format(template, 'string', data);\n return sanitizeResolvedEntityDisplayTitle(\n typeof formatted === 'string' ? formatted : String(formatted ?? ''),\n );\n }\n\n const evaluated = await evaluateEntityDisplayTemplate(\n template,\n data,\n expressionEvaluator,\n locale,\n translationService,\n );\n return sanitizeResolvedEntityDisplayTitle(\n resolveSearchableText(evaluated, locale, translationService),\n );\n}\n\n//#endregion\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { searchInSearchableValue } from './search-display-string.util';\nimport { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n private readonly translationService = inject(AXTranslationService);\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n return this.commands.filter(\n (command) =>\n searchInSearchableValue(command.title, text, locale, this.translationService) ||\n searchInSearchableValue(command.description, text, locale, this.translationService),\n );\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport {\n isMeaningfulEntityDisplayTitle,\n resolveEntitySearchTitleFallback,\n sanitizeResolvedEntityDisplayTitle,\n} from './entity-search-display-title.util';\nimport {\n resolveSearchDisplayTemplate,\n resolveSearchableText,\n searchInRecordValues,\n searchInSearchableValue,\n} from './search-display-string.util';\nimport { AXPSearchProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider => provider != null && typeof provider.search === 'function',\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = this.definitionService.findDefinition(result.group);\n\n const resolvedTitle =\n result.title ??\n (definition.format.title\n ? await resolveSearchDisplayTemplate(\n definition.format.title,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n )\n : '');\n const resolvedDescription =\n result.description ??\n (definition.format.description\n ? await resolveSearchDisplayTemplate(\n definition.format.description,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n )\n : undefined);\n\n let titleText = sanitizeResolvedEntityDisplayTitle(\n typeof resolvedTitle === 'string'\n ? resolvedTitle\n : resolveSearchableText(resolvedTitle, locale, this.translationService),\n );\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n titleText = await resolveEntitySearchTitleFallback(\n definition.format,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n );\n }\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n continue;\n }\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result.data ?? result)}`,\n title: titleText,\n description: resolvedDescription,\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n const normalizedQuery = text.trim();\n const visibleData =\n normalizedQuery.length === 0\n ? mergeData\n : mergeData.filter(\n (item) =>\n searchInSearchableValue(item.title, normalizedQuery, locale, this.translationService) ||\n searchInSearchableValue(item.description, normalizedQuery, locale, this.translationService) ||\n searchInRecordValues(item.data, normalizedQuery, locale, this.translationService),\n );\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of visibleData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult, searchInSearchableValue } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path\n ? ({\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n },\n } as AXPExecuteCommand)\n : (item.command as AXPExecuteCommand),\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(String(o.title ?? ''))],\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private searchMenuItems(menuItems: AXPMenuItem[], searchText: string): AXPMenuItemWithParent[] {\n const result: AXPMenuItemWithParent[] = [];\n const locale = this.translateService.getActiveLang() ?? 'en-US';\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n searchInSearchableValue(item.text, searchText, locale, this.translateService)\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item }) as AXPMenuItemWithParent));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import { NavigationExtras, Router } from '@angular/router';\n\n//#region ---- Types ----\n\nexport interface AXPAppPathParts {\n segments: string[];\n queryParams?: Record<string, string>;\n fragment?: string;\n}\n\n//#endregion\n\n//#region ---- App Path Navigation ----\n\n/**\n * Splits an absolute app path (`/app/m/module/e/Entity/id/view`) into router command segments.\n * Prefer this over `navigate([fullPath])` or ambiguous single-segment navigation so browser history stays correct.\n */\nexport function axpParseAppPath(path: string): AXPAppPathParts {\n const trimmed = path.trim();\n const withoutLeadingSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;\n const [pathAndFragment, queryString] = withoutLeadingSlash.split('?');\n const [pathPart, fragment] = pathAndFragment.split('#');\n const segments = pathPart.split('/').filter(Boolean);\n\n const queryParams = queryString\n ? queryString.split('&').reduce<Record<string, string>>((params, pair) => {\n const [key, value = ''] = pair.split('=');\n if (key) {\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n }, {})\n : undefined;\n\n return {\n segments,\n queryParams,\n fragment: fragment || undefined,\n };\n}\n\n/** Navigates using explicit path segments (same pattern as entity preload filters). */\nexport function axpNavigateAppPath(router: Router, path: string, extras?: NavigationExtras): Promise<boolean> {\n const { segments, queryParams, fragment } = axpParseAppPath(path);\n return router.navigate(segments, {\n ...extras,\n queryParams,\n fragment,\n });\n}\n\n/** True when a URL path is an entity master list route (`.../e/{Entity}/list`). */\nexport function axpIsEntityListPath(url: string): boolean {\n const path = url.split('?')[0].split('#')[0];\n return /\\/e\\/[^/]+\\/list$/.test(path);\n}\n\n/** True when the current browser URL is an entity master list route (`.../e/{Entity}/list`). */\nexport function axpIsEntityListRoute(router: Router): boolean {\n return axpIsEntityListPath(router.url);\n}\n\n/** True when a URL path is an entity details view route (`.../e/{Entity}/{id}/view`). */\nexport function axpIsEntityDetailsPath(url: string): boolean {\n const path = url.split('?')[0].split('#')[0];\n return /\\/e\\/[^/]+\\/[^/]+\\/view$/.test(path);\n}\n\n/** True when the current browser URL is an entity details view route (`.../e/{Entity}/{id}/view`). */\nexport function axpIsEntityDetailsViewRoute(router: Router): boolean {\n return axpIsEntityDetailsPath(router.url);\n}\n\n/**\n * Merges query params on the current entity list route without pushing history.\n * Uses absolute path segments so a stale `relativeTo` cannot rewrite the active URL after navigating away.\n */\nexport function axpReplaceEntityListRouteQueryParams(\n router: Router,\n queryParams: Record<string, string | null | undefined>,\n): void {\n const url = router.url;\n if (!axpIsEntityListPath(url)) {\n return;\n }\n\n const pathOnly = url.split('?')[0].split('#')[0];\n const { segments } = axpParseAppPath(pathOnly);\n void router.navigate(segments, {\n queryParams,\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\nimport { axpNavigateAppPath } from '../utils/app-path-navigation.util';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n await this.router.navigate(payload.commands, payload.extras);\n return;\n }\n\n const path = payload.commands as string;\n if (!path) {\n return;\n }\n\n if (path.toLowerCase().startsWith('http') || payload.target === 'blank') {\n window.open(path, '_blank');\n return;\n }\n\n await axpNavigateAppPath(this.router, path, payload.extras);\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { axpNavigateAppPath } from '../utils/app-path-navigation.util';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n if (!path) {\n console.error('Path is required for navigate workflow');\n return;\n }\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n await axpNavigateAppPath(this.router, path, command.options.extras);\n }\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPComponentSlotModule,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { AXPBackgroundOperationSlotComponent } from './background-operation';\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPFileStorageEvaluatorScopeProvider } from './file-storage';\nimport { AXPKeyboardShortcutsHelpService } from './keyboard-shortcuts';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport {\n AXPDialogConfirmAction,\n AXPNavigateWorkflow,\n AXPReloadAction,\n AXPToastAction,\n AXPWorkflowRouterNavigateAction,\n} from './workflows';\n\nexport interface AXPCommonModuleConfigs {\n errorHandlers: (new () => AXPErrorHandler)[];\n}\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'root-footer-end': [\n {\n name: 'background-operation',\n component: AXPBackgroundOperationSlotComponent,\n },\n ],\n }),\n AXPWorkflowModule.forChild({\n actions: {\n 'navigate-router': AXPWorkflowRouterNavigateAction,\n 'show-prompt-dialog': AXPDialogConfirmAction,\n 'show-toast': AXPToastAction,\n reload: AXPReloadAction,\n },\n workflows: {\n navigate: AXPNavigateWorkflow,\n },\n }),\n AXPopupModule,\n AXDateTimeModule,\n AXToastModule,\n AXPModuleManifestModule,\n ],\n exports: [RouterModule],\n providers: [\n AXPAppStartUpProvider,\n {\n provide: ErrorHandler,\n useClass: AXPGlobalErrorHandler,\n },\n {\n provide: AXPCustomOperatorService,\n useClass: AXPCustomOperatorServiceImpl,\n },\n {\n provide: AXPFilterOperatorMiddlewareService,\n useClass: AXPFilterOperatorMiddlewareServiceImpl,\n },\n\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPMenuSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPMenuSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPTokenEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPSettingsEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXPFileStorageEvaluatorScopeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useFactory: async () => {\n const injector = inject(Injector);\n const provider = (await import('./configs/common-settings.provider')).AXPCommonSettingProvider;\n return new provider(injector);\n },\n multi: true,\n },\n ],\n})\nexport class AXPCommonModule {\n static forRoot(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPCommonModuleConfigs): ModuleWithProviders<AXPCommonModule> {\n return {\n ngModule: AXPCommonModule,\n providers: [\n ...(configs?.errorHandlers || []),\n {\n provide: 'AXPCommonModuleFactory',\n useFactory: (registry: AXPErrorHandlerRegistryService) => () => {\n registry.register(...(configs?.errorHandlers || []));\n },\n deps: [AXPErrorHandlerRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(\n @Inject('AXPCommonModuleFactory') instances: any[],\n _keyboardShortcutsHelp: AXPKeyboardShortcutsHelpService,\n ) {\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/core';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","/**\n * Status Definition Types\n * Defines the structure for status definitions and their transitions\n */\n\n//#region ---- Status Definition Contracts ----\n\n/**\n * Status definition with metadata\n */\nexport interface AXPStatusDefinition {\n /**\n * Unique identifier for the status\n */\n name: string;\n\n /**\n * Display title for the status\n */\n title: string;\n\n /**\n * Color code or semantic color name for the status\n */\n color: string;\n\n /**\n * Optional icon class (e.g., 'fa-light fa-check')\n */\n icon?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional order for sorting\n */\n order?: number;\n\n /**\n * Whether this is a final status (end state)\n */\n isFinal?: boolean;\n\n /**\n * Whether this is an initial status (starting state)\n */\n isInitial?: boolean;\n\n /**\n * Whether list views should be automatically generated for this status\n */\n generateView?: boolean;\n}\n\n/**\n * Status transition definition\n */\nexport interface AXPStatusTransition {\n /**\n * Source status name\n */\n from: string;\n\n /**\n * Target status name\n */\n to: string;\n\n /**\n * Optional condition expression to evaluate before allowing transition\n * Uses expression evaluator syntax (e.g., \"{{user.isAdmin}}\", \"{{item.priority > 5}}\")\n */\n condition?: string;\n\n /**\n * Optional display title for the transition\n */\n title?: string;\n\n /**\n * Optional description\n */\n description?: string;\n\n /**\n * Optional command descriptor to execute for this transition\n * If not provided, defaults to Entity:UpdateStatus with entity, id, and status\n */\n command?: {\n name: string;\n options?: Record<string, unknown>;\n };\n\n /**\n * Whether this transition is automatic (no user action required)\n */\n isAutomatic?: boolean;\n\n /**\n * Whether this transition requires approval\n */\n requiresApproval?: boolean;\n}\n\n/**\n * Abstract class for status providers\n * Similar to AXPTaskBadgeProvider pattern\n */\nexport abstract class AXPStatusProvider {\n /**\n * Unique key for the status (e.g., 'task-management.status')\n */\n abstract readonly key: string;\n\n /**\n * List of available status definitions\n */\n abstract readonly statuses: AXPStatusDefinition[];\n\n /**\n * List of allowed transitions between statuses\n */\n abstract readonly transitions: AXPStatusTransition[];\n\n /**\n * Optional default status name\n */\n abstract readonly defaultStatus?: string;\n}\n\n//#endregion\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPStatusProvider, AXPStatusTransition } from './status-definition.types';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity =\n context['entity'] ?? context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? context['fieldName'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n const text = this.commandMessageTextForError(result?.message?.text);\n throw new Error(text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n /**\n * Best-effort plain string for {@link Error} messages (no i18n lookup).\n */\n private commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n const values = Object.values(value as Record<string, string>);\n const first = values.find((v) => typeof v === 'string' && v.length > 0);\n return first ?? '';\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXPStatusDefinition } from './status-definition.types';\n\n/**\n * Standard system status types\n * These are the predefined status values used across the platform\n */\nexport enum AXPSystemStatusType {\n Todo = 'todo',\n InProgress = 'in-progress',\n InReview = 'in-review',\n Open = 'open',\n Closed = 'closed',\n Blocked = 'blocked',\n Done = 'done',\n Cancelled = 'cancelled',\n Draft = 'draft',\n PendingReview = 'pending-review',\n WaitingSignOff = 'waiting-sign-off',\n WaitingApproval = 'waiting-approval',\n Approved = 'approved',\n Published = 'published',\n Archived = 'archived',\n Rejected = 'rejected',\n Active = 'active',\n Inactive = 'inactive',\n Pending = 'pending',\n Completed = 'completed',\n Suspended = 'suspended',\n Failed = 'failed',\n Review = 'review',\n Expired = 'expired',\n}\n\nconst i18n = (key: string) => `@general:statuses.${key}`;\n\n/**\n * Standard system status definitions\n * Provides consistent status definitions across the platform\n * Uses AXPStatusDefinition interface from status-definition.types.ts\n */\nexport const AXPSystemStatuses = Object.freeze({\n Open: {\n name: AXPSystemStatusType.Open,\n title: i18n('open.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('open.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Closed: {\n name: AXPSystemStatusType.Closed,\n title: i18n('closed.title'),\n icon: 'fa-light fa-circle',\n color: 'danger',\n description: i18n('closed.description'),\n order: 2,\n isInitial: false,\n isFinal: true,\n },\n Todo: {\n name: AXPSystemStatusType.Todo,\n title: i18n('todo.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('todo.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n InProgress: {\n name: AXPSystemStatusType.InProgress,\n title: i18n('in-progress.title'),\n icon: 'fa-light fa-play',\n color: 'info',\n description: i18n('in-progress.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n InReview: {\n name: AXPSystemStatusType.InReview,\n title: i18n('in-review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('in-review.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Blocked: {\n name: AXPSystemStatusType.Blocked,\n title: i18n('blocked.title'),\n icon: 'fa-light fa-ban',\n color: 'danger',\n description: i18n('blocked.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Done: {\n name: AXPSystemStatusType.Done,\n title: i18n('done.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('done.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Cancelled: {\n name: AXPSystemStatusType.Cancelled,\n title: i18n('cancelled.title'),\n icon: 'fa-light fa-times-circle',\n color: 'neutral',\n description: i18n('cancelled.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Draft: {\n name: AXPSystemStatusType.Draft,\n title: i18n('draft.title'),\n icon: 'fa-light fa-file-pen',\n color: 'neutral',\n description: i18n('draft.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n PendingReview: {\n name: AXPSystemStatusType.PendingReview,\n title: i18n('pending-review.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending-review.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n WaitingSignOff: {\n name: AXPSystemStatusType.WaitingSignOff,\n title: i18n('waiting-sign-off.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('waiting-sign-off.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n WaitingApproval: {\n name: AXPSystemStatusType.WaitingApproval,\n title: i18n('waiting-approval.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('waiting-approval.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Approved: {\n name: AXPSystemStatusType.Approved,\n title: i18n('approved.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('approved.description'),\n order: 3,\n isInitial: false,\n isFinal: false,\n },\n Published: {\n name: AXPSystemStatusType.Published,\n title: i18n('published.title'),\n icon: 'fa-light fa-globe',\n color: 'primary',\n description: i18n('published.description'),\n order: 4,\n isInitial: false,\n isFinal: false,\n },\n Archived: {\n name: AXPSystemStatusType.Archived,\n title: i18n('archived.title'),\n icon: 'fa-light fa-archive',\n color: 'danger',\n description: i18n('archived.description'),\n order: 5,\n isInitial: false,\n isFinal: true,\n },\n Rejected: {\n name: AXPSystemStatusType.Rejected,\n title: i18n('rejected.title'),\n icon: 'fa-light fa-times-circle',\n color: 'danger',\n description: i18n('rejected.description'),\n order: 6,\n isInitial: false,\n isFinal: true,\n },\n Active: {\n name: AXPSystemStatusType.Active,\n title: i18n('active.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('active.description'),\n order: 1,\n isInitial: false,\n isFinal: false,\n },\n Inactive: {\n name: AXPSystemStatusType.Inactive,\n title: i18n('inactive.title'),\n icon: 'fa-light fa-circle',\n color: 'secondary',\n description: i18n('inactive.description'),\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n Pending: {\n name: AXPSystemStatusType.Pending,\n title: i18n('pending.title'),\n icon: 'fa-light fa-clock',\n color: 'warning',\n description: i18n('pending.description'),\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n Completed: {\n name: AXPSystemStatusType.Completed,\n title: i18n('completed.title'),\n icon: 'fa-light fa-check-circle',\n color: 'success',\n description: i18n('completed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n Suspended: {\n name: AXPSystemStatusType.Suspended,\n title: i18n('suspended.title'),\n icon: 'fa-light fa-pause-circle',\n color: 'neutral',\n description: i18n('suspended.description'),\n order: 5,\n isInitial: false,\n isFinal: false,\n },\n Failed: {\n name: AXPSystemStatusType.Failed,\n title: i18n('failed.title'),\n icon: 'fa-light fa-xmark-circle',\n color: 'danger',\n description: i18n('failed.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n\n Review: {\n name: AXPSystemStatusType.Review,\n title: i18n('review.title'),\n icon: 'fa-light fa-eye',\n color: 'info',\n description: i18n('review.description'),\n order: 3,\n },\n Expired: {\n name: AXPSystemStatusType.Expired,\n title: i18n('expired.title'),\n icon: 'fa-light fa-clock',\n color: 'danger',\n description: i18n('expired.description'),\n order: 10,\n isInitial: false,\n isFinal: true,\n },\n} as const satisfies Record<string, AXPStatusDefinition>);\n\n/**\n * Get system status definition by type\n * @param type - Status type\n * @returns System status definition or undefined\n */\nexport function getSystemStatus(type: AXPSystemStatusType): AXPStatusDefinition {\n return Object.values(AXPSystemStatuses).find(status => status.name === type) as AXPStatusDefinition;\n}\n\n/**\n * Resolves the visual appearance (color and icon) for status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Color and icon for the status\n */\nexport function resolveStatusLook(statusType: string): { color: AXStyleColorType; icon: string } {\n // Try to get system status first\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n // Convert hex color to semantic color type if needed\n // For now, return as-is and let the UI handle it\n return {\n color: systemStatus.color as AXStyleColorType,\n icon: systemStatus.icon || ''\n };\n }\n }\n\n // Fallback for unknown statuses\n return {\n color: 'secondary' as AXStyleColorType,\n icon: ''\n };\n}\n\n/**\n * Resolves the complete status information (title, description, icon, color) for a status\n * using the system statuses from the core module.\n * @param statusType - Status type string\n * @returns Complete status information as AXPStatusDefinition\n */\nexport function getStatusInfo(statusType: string): AXPStatusDefinition {\n const systemStatusType = statusType as AXPSystemStatusType;\n if (systemStatusType) {\n const systemStatus = getSystemStatus(systemStatusType);\n if (systemStatus) {\n return systemStatus;\n }\n }\n\n // Fallback for unknown statuses\n return {\n name: statusType,\n title: statusType,\n description: `Status: ${statusType}`,\n icon: '',\n color: 'secondary'\n };\n}\n\n/**\n * Get system status definition directly (no conversion needed since it's already AXPStatusDefinition)\n * @param statusType - Status type\n * @param overrides - Optional overrides for the status definition\n * @returns AXPStatusDefinition\n */\nexport function systemStatusToDefinition(\n statusType: AXPSystemStatusType,\n overrides?: Partial<AXPStatusDefinition>\n): AXPStatusDefinition {\n const systemStatus = getSystemStatus(statusType);\n if (!systemStatus) {\n throw new Error(`System status ${statusType} not found`);\n }\n\n return {\n ...systemStatus,\n ...overrides,\n };\n}\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n //#region ---- Services & Dependencies ----\n\n private readonly toast = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n public async copy(title: string, value: string): Promise<void> {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n await navigator.clipboard.writeText(value);\n\n const message = await this.translationService.translateAsync('@general:messages.clipboard.copied', {\n params: { title },\n });\n this.toast.success(message);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPModuleManifestRegistry } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Debug Service ----\n\n/**\n * Service for debugging user access information.\n * Displays loaded modules, features, and permissions for the current user.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPDebugService {\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Display all loaded modules, features, and permissions for the current user.\n */\n async displayUserAccessInfo(): Promise<void> {\n try {\n // Ensure registry is initialized\n await this.manifestRegistry.initialize();\n\n // Get all registered modules\n const allManifests = this.manifestRegistry.getAll();\n\n // Get all feature definitions\n const allFeatures = this.manifestRegistry.getAllFeatureDefinitions();\n\n // Get current user permissions\n const userPermissions = this.sessionService.permissions;\n const user = this.sessionService.user;\n\n console.group('🔐 User Access Information');\n console.log(`User: ${user?.name || user?.title || 'Unknown'} (${user?.id || 'N/A'})`);\n console.log('');\n\n if (allManifests.length === 0) {\n console.log('No modules loaded');\n console.groupEnd();\n return;\n }\n\n // Group features by module\n const featuresByModule = new Map<string, typeof allFeatures>();\n allFeatures.forEach((feature) => {\n const moduleName = feature.module;\n if (!featuresByModule.has(moduleName)) {\n featuresByModule.set(moduleName, []);\n }\n featuresByModule.get(moduleName)!.push(feature);\n });\n\n // Group permissions by module (if they follow ModuleName:PermissionKey pattern)\n const permissionsByModule = new Map<string, typeof userPermissions>();\n const ungroupedPermissions: typeof userPermissions = [];\n\n userPermissions.forEach((permission) => {\n const parts = permission.split(':');\n if (parts.length >= 2) {\n const moduleName = parts[0];\n if (!permissionsByModule.has(moduleName)) {\n permissionsByModule.set(moduleName, []);\n }\n permissionsByModule.get(moduleName)!.push(permission);\n } else {\n ungroupedPermissions.push(permission);\n }\n });\n\n // Display modules in tree format\n allManifests.forEach((manifest) => {\n const moduleName = manifest.name;\n const moduleFeatures = featuresByModule.get(moduleName) || [];\n const modulePermissions = permissionsByModule.get(moduleName) || [];\n\n console.group(`📦 ${moduleName}`);\n\n // Display Features\n if (moduleFeatures.length > 0) {\n console.log(' --- Features:');\n moduleFeatures.forEach((feature) => {\n console.log(` • ${feature.name}`);\n });\n } else {\n console.log(' --- Features: (none)');\n }\n\n // Display Permissions\n if (modulePermissions.length > 0) {\n console.log(' --- Permissions:');\n modulePermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n } else {\n console.log(' --- Permissions: (none)');\n }\n\n console.groupEnd();\n });\n\n // Display ungrouped permissions if any\n if (ungroupedPermissions.length > 0) {\n console.group('📁 Other Permissions');\n ungroupedPermissions.forEach((permission) => {\n console.log(` • ${permission}`);\n });\n console.groupEnd();\n }\n\n // Summary\n console.log('');\n console.log(\n `Summary: ${allManifests.length} modules, ${allFeatures.length} features, ${userPermissions.length} permissions`\n );\n\n console.groupEnd();\n } catch (error) {\n console.error('[AXPDebugService] Failed to display user access info:', error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(link.href);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i2","i4","i1","i3","i1.AXPErrorHandlerRegistryService","i1.AXPKeyboardShortcutsHelpService"],"mappings":"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"}