@acorex/platform 21.0.0-next.91 → 21.0.0-next.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +0 -1
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common.mjs +9 -4
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-contracts.mjs +12 -1
  6. package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +2 -16
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain-contracts.mjs +0 -1
  10. package/fesm2022/acorex-platform-domain-contracts.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-builder.mjs +4 -4
  13. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-components.mjs +4 -3
  15. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-designer.mjs +4 -3
  17. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-CwG6n_Yb.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component--IeMZLIr.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-entity.mjs +24 -4
  22. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-views.mjs +5 -4
  24. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-widget-core-contracts.mjs +141 -0
  26. package/fesm2022/acorex-platform-layout-widget-core-contracts.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +5 -132
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DIDziLAT.mjs} +2 -2
  30. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DIDziLAT.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-layout-widgets.mjs +13 -440
  32. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-runtime-contracts.mjs +166 -0
  34. package/fesm2022/acorex-platform-runtime-contracts.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-runtime.mjs +1 -163
  36. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  37. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BP2dVnBQ.mjs} +3 -2
  38. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BP2dVnBQ.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs.map +1 -1
  40. package/fesm2022/acorex-platform-themes-default.mjs +4 -3
  41. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  42. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  43. package/package.json +14 -6
  44. package/types/acorex-platform-common.d.ts +15 -5
  45. package/types/acorex-platform-contracts.d.ts +106 -4
  46. package/types/acorex-platform-core.d.ts +4 -101
  47. package/types/acorex-platform-layout-builder.d.ts +3 -3
  48. package/types/acorex-platform-layout-components.d.ts +4 -3
  49. package/types/acorex-platform-layout-designer.d.ts +2 -1
  50. package/types/acorex-platform-layout-entity-contracts.d.ts +2 -3
  51. package/types/acorex-platform-layout-entity.d.ts +12 -10
  52. package/types/acorex-platform-layout-views.d.ts +10 -9
  53. package/types/acorex-platform-layout-widget-core-contracts.d.ts +299 -0
  54. package/types/acorex-platform-layout-widget-core.d.ts +9 -301
  55. package/types/acorex-platform-layout-widgets.d.ts +55 -80
  56. package/types/acorex-platform-runtime-contracts.d.ts +275 -0
  57. package/types/acorex-platform-runtime.d.ts +4 -274
  58. package/types/acorex-platform-themes-default.d.ts +3 -3
  59. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map +0 -1
  60. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/contracts/datasource.keys.ts","../../../../libs/platform/common/src/lib/contracts/index.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.types.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.provider.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.service.ts","../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/app/date-filter-presets.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings-coercion.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/settings/regional-calendar.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-confirm.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-popstate.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-cache.registry.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-can-deactivate.guard.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.notification.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-notification.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.util.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-completion.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.const.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.storage.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.mapper.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.store.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity-store.service.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.entity.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.handler.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.provider.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.service.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.html","../../../../libs/platform/common/src/lib/utils/app-path-navigation.util.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-matcher.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-keyboard-shortcuts.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-key.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.types.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-resolver.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-title.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-policy.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.service.ts","../../../../libs/platform/common/src/lib/browser-title/browser-title.service.ts","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/errors/not-found.error.ts","../../../../libs/platform/common/src/lib/errors/not-found.routes.ts","../../../../libs/platform/common/src/lib/errors/unauthorized.routes.ts","../../../../libs/platform/common/src/lib/formatters/translate.formatter.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-trace.constants.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.component.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.service.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-access.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route.guard.ts","../../../../libs/platform/common/src/lib/layout/menu/protected-route.guards.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-definition-lazy-resolver.token.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-display-string.util.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/entity-search-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/entity-row-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/entity-workflow.events.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/entity-create-list-behavior.util.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/integration/integration.provider.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.context.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.registry.service.ts","../../../../libs/platform/common/src/lib/integration/integration-secret-store.token.ts","../../../../libs/platform/common/src/lib/integration/index.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/dom-graphic.util.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["//#region ---- Datasource keys ----\n\n/** Platform common datasource registry names. */\nexport const AXPPlatformCommonDataSourceKeys = {\n MenuItems: 'platform-menu-items',\n} as const;\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './datasource.keys';\n\n//#endregion\n","//#region ---- Output kind & segment ----\n\nimport type { AXPAgentOutputKind, AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n */\nexport interface AXPJsonSchemaLike {\n type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n properties?: Record<string, AXPJsonSchemaLike>;\n items?: AXPJsonSchemaLike | AXPJsonSchemaLike[];\n required?: string[];\n enum?: unknown[];\n additionalProperties?: boolean | AXPJsonSchemaLike;\n description?: string;\n [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Provider response format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAgentResponseFormat =\n | { type: 'text' }\n | { type: 'json_object' }\n | {\n type: 'json_schema';\n schema: AXPJsonSchemaLike;\n name?: string;\n strict?: boolean;\n };\n\n//#endregion\n\n//#region ---- Output contract ----\n\n/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAgentOutputContract {\n kind: AXPAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPOutputTranscriptSegmentId;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAgentResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Transcript segment definition ----\n\n/**\n * Registered preset for an output-contract transcript segment.\n * Modules register via {@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}.\n */\nexport interface AXPOutputContractTranscriptSegmentDefinition {\n /** Segment id (`text`, `node`, `followUp`). */\n name: AXPOutputTranscriptSegmentId;\n /** i18n key or display title for admin UI selects. */\n title: string;\n description?: string;\n /** Contract kinds this segment applies to (defaults to `object` only). */\n applicableKinds?: AXPAgentOutputKind[];\n /** Default `outputContract` field values when this segment is chosen. */\n contract: AXPAgentOutputContract;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPOutputContractTranscriptSegmentDefinition } from './output-contract-transcript-segment.types';\n\n//#region ---- Provider token ----\n\nexport type AXPOutputContractTranscriptSegmentProviderToken =\n | AXPOutputContractTranscriptSegmentProvider\n | Promise<AXPOutputContractTranscriptSegmentProvider>;\n\n/**\n * Registers one or more transcript-segment presets for agent/assist `outputContract`.\n * Use with `multi: true` in module providers.\n */\nexport interface AXPOutputContractTranscriptSegmentProvider {\n provide():\n | AXPOutputContractTranscriptSegmentDefinition[]\n | Promise<AXPOutputContractTranscriptSegmentDefinition[]>;\n}\n\nexport const AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER = new InjectionToken<\n AXPOutputContractTranscriptSegmentProviderToken[]\n>('AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER', {\n factory: () => [],\n});\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from './output-contract-transcript-segment.provider';\nimport type {\n AXPAgentOutputContract,\n AXPOutputContractTranscriptSegmentDefinition,\n} from './output-contract-transcript-segment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPOutputContractTranscriptSegmentService {\n //#region ---- Dependencies & cache ----\n\n private readonly segmentProviders =\n inject(AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, { optional: true }) ?? [];\n\n private definitionsByName = new Map<string, AXPOutputContractTranscriptSegmentDefinition>();\n private loadPromise: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** All registered transcript segment definitions (deduped by `name`). */\n async getAll(): Promise<AXPOutputContractTranscriptSegmentDefinition[]> {\n await this.ensureLoaded();\n return [...this.definitionsByName.values()];\n }\n\n /** Lookup by segment id (`text`, `node`, `followUp`). */\n async get(\n name: AXPOutputTranscriptSegmentId,\n ): Promise<AXPOutputContractTranscriptSegmentDefinition | undefined> {\n await this.ensureLoaded();\n return this.definitionsByName.get(name);\n }\n\n /** Default `outputContract` for a segment, or `undefined` when not registered. */\n async getContractPreset(name: AXPOutputTranscriptSegmentId): Promise<AXPAgentOutputContract | undefined> {\n const definition = await this.get(name);\n return definition?.contract;\n }\n\n /** Clears the in-memory registry (e.g. after hot reload in dev). */\n clearCache(): void {\n this.definitionsByName.clear();\n this.loadPromise = null;\n }\n\n //#endregion\n\n //#region ---- Load ----\n\n private async ensureLoaded(): Promise<void> {\n if (this.loadPromise) {\n return this.loadPromise;\n }\n this.loadPromise = this.loadDefinitions();\n return this.loadPromise;\n }\n\n private async loadDefinitions(): Promise<void> {\n const resolvedProviders = await Promise.all(this.segmentProviders);\n\n for (const provider of resolvedProviders) {\n if (!provider) {\n continue;\n }\n const definitions = await Promise.resolve(provider.provide());\n for (const definition of definitions) {\n if (!definition?.name) {\n continue;\n }\n if (this.definitionsByName.has(definition.name)) {\n console.warn(\n `[AXPOutputContractTranscriptSegmentService] Segment \"${definition.name}\" already registered; overwriting.`,\n );\n }\n this.definitionsByName.set(definition.name, definition);\n }\n }\n }\n\n //#endregion\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import type { AXCalendarService } from '@acorex/core/date-time';\n\nimport { BETWEEN_OPER } from './operators';\n\nexport type AXPDateTimeFilterPresetKind = 'computed' | 'manual';\n\nexport interface AXPDateTimeFilterPreset {\n id: string;\n title: string;\n kind: AXPDateTimeFilterPresetKind;\n operationType?: string;\n}\n\nexport const DEFAULT_DATE_FILTER_PRESETS: AXPDateTimeFilterPreset[] = [\n { id: 'today', title: '@general:terms.date-presets.today', kind: 'computed' },\n { id: 'this-week', title: '@general:terms.date-presets.this-week', kind: 'computed' },\n { id: 'this-month', title: '@general:terms.date-presets.this-month', kind: 'computed' },\n { id: 'yesterday', title: '@general:terms.date-presets.yesterday', kind: 'computed' },\n { id: 'last-week', title: '@general:terms.date-presets.last-week', kind: 'computed' },\n { id: 'last-month', title: '@general:terms.date-presets.last-month', kind: 'computed' },\n { id: 'tomorrow', title: '@general:terms.date-presets.tomorrow', kind: 'computed' },\n { id: 'next-week', title: '@general:terms.date-presets.next-week', kind: 'computed' },\n { id: 'next-month', title: '@general:terms.date-presets.next-month', kind: 'computed' },\n { id: 'between', title: BETWEEN_OPER.title, kind: 'manual', operationType: 'between' },\n { id: 'greater-than', title: '@general:terms.operators.greater-than', kind: 'manual', operationType: 'greaterThan' },\n { id: 'less-than', title: '@general:terms.operators.less-than', kind: 'manual', operationType: 'lessThan' },\n];\n\nexport interface AXPDateTimeFilterValue {\n operation?: { type: string };\n value?: string | { from?: string; to?: string };\n}\n\nexport function resolveDateFilterPresets(\n customPresets?: AXPDateTimeFilterPreset[],\n presetIds?: string[],\n): AXPDateTimeFilterPreset[] {\n let presets = customPresets?.length ? customPresets : DEFAULT_DATE_FILTER_PRESETS;\n if (presetIds?.length) {\n presets = presets.filter((p) => presetIds.includes(p.id));\n }\n return presets;\n}\n\nexport function applyDateFilterPreset(\n presetId: string,\n calendarService: AXCalendarService,\n): AXPDateTimeFilterValue | undefined {\n const currentDate = calendarService.now().date;\n const calendar = calendarService.calendar;\n\n switch (presetId) {\n case 'today':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'day').date.toISOString(),\n to: calendar.endOf(currentDate, 'day').date.toISOString(),\n },\n };\n case 'this-week':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'week').date.toISOString(),\n to: calendar.endOf(currentDate, 'week').date.toISOString(),\n },\n };\n case 'this-month':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'month').date.toISOString(),\n to: calendar.endOf(currentDate, 'month').date.toISOString(),\n },\n };\n case 'yesterday': {\n const yesterday = calendar.add(currentDate, 'day', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: yesterday.startOf('day').date.toISOString(),\n to: yesterday.endOf('day').date.toISOString(),\n },\n };\n }\n case 'last-week': {\n const lastWeek = calendar.add(currentDate, 'week', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastWeek.startOf('week').date.toISOString(),\n to: lastWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'last-month': {\n const lastMonth = calendar.add(currentDate, 'month', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastMonth.startOf('month').date.toISOString(),\n to: lastMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'tomorrow': {\n const tomorrow = calendar.add(currentDate, 'day', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: tomorrow.startOf('day').date.toISOString(),\n to: tomorrow.endOf('day').date.toISOString(),\n },\n };\n }\n case 'next-week': {\n const nextWeek = calendar.add(currentDate, 'week', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextWeek.startOf('week').date.toISOString(),\n to: nextWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'next-month': {\n const nextMonth = calendar.add(currentDate, 'month', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextMonth.startOf('month').date.toISOString(),\n to: nextMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'between':\n return undefined;\n case 'greater-than':\n return { operation: { type: 'greaterThan' } };\n case 'less-than':\n return { operation: { type: 'lessThan' } };\n default:\n return {\n operation: { type: 'between' },\n value: { from: '', to: '' },\n };\n }\n}\n\nexport function findManualPresetIdByOperation(\n operationType: string | undefined,\n presets: AXPDateTimeFilterPreset[],\n): string | undefined {\n if (!operationType) {\n return undefined;\n }\n return presets.find((p) => p.kind === 'manual' && p.operationType === operationType)?.id;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n HighlightAfterCreateInList = 'Common:Setting:Entity.HighlightAfterCreateInList',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n ConfirmUnsavedChanges = 'Common:Setting:Entity.ConfirmUnsavedChanges',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n ShowRowIndexColumn = 'Common:Setting:Entity.ShowRowIndexColumn',\n EntityListPersistenceMode = 'Common:Setting:Entity.ListPersistenceMode',\n NavigationMode = 'Common:Setting:Navigation.Mode',\n MaxOpenTabs = 'Common:Setting:Navigation.MaxOpenTabs',\n}\n","\nimport { AXPOptionsData, AXPPlatformScopeKey, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/contracts';\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core';\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection, AXPSettingLayoutOptions } from './index';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description: description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPSettingLayoutOptions;\n };\n description?: string;\n searchTagKeys?: string[];\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n requiresPageRefresh?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n searchTagKeys: setting.searchTagKeys,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n requiresPageRefresh: setting.requiresPageRefresh ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPGroupSearchResult, AXPSettingDefaultValuesProvider, AXPSettingDefinitionGroup } from './settings.types';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>(\n 'AXP_SETTING_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSettingDefinitionProviderContext();\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey,\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n }))\n .filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), [(group) => group.priority ?? 1000, 'title']);\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n async settingScopeByKey(): Promise<Record<string, AXPPlatformScope>> {\n const scopes: Record<string, AXPPlatformScope> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n scopes[setting.name] = setting.scope as AXPPlatformScope;\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return scopes;\n }\n\n async requiresPageRefreshByKey(): Promise<Record<string, boolean>> {\n const refreshByKey: Record<string, boolean> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.requiresPageRefresh) {\n refreshByKey[setting.name] = true;\n }\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return refreshByKey;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[],\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [\n ...breadcrumb,\n { name: group.name, title: group.title, description: group.description },\n ];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: [],\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>(\n 'AXP_SETTING_DEFAULT_VALUES_PROVIDERS',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\nexport interface AXPSettingMergedDefaults {\n defaults: Record<string, unknown>;\n /** Per-key scope override for seeding (from providers that set `scope`). */\n seedScopeByKey: Record<string, AXPPlatformScope>;\n}\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getMerged(): Promise<AXPSettingMergedDefaults> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n const seedScopeByKey: Record<string, AXPPlatformScope> = {};\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n if (provider.scope) {\n for (const key of Object.keys(overrideMap)) {\n seedScopeByKey[key] = provider.scope;\n }\n }\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return { defaults: merged, seedScopeByKey };\n }\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const { defaults } = await this.getMerged();\n return defaults;\n }\n}\n","//#region ---- Imports ----\n\nimport { coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, unwrapValueProperty } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Supported primitive coercions for persisted setting values (including `{ value: ... }` wrappers).\n */\nexport type AXPSettingCoercionKind = 'string' | 'boolean' | 'number' | 'date';\n\n//#endregion\n\n//#region ---- Kind inference ----\n\n/**\n * If the payload uses the common `{ value: T }` shape from setting widgets, returns the inner value; otherwise returns `raw`.\n */\nexport function peelSettingValueKey(raw: unknown): unknown {\n return unwrapValueProperty(raw);\n}\n\nfunction coercionKindFromScalarSample(v: unknown): AXPSettingCoercionKind | null {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return 'boolean';\n }\n if (typeof v === 'number' && Number.isFinite(v)) {\n return 'number';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (typeof v === 'string') {\n if (v === 'true' || v === 'false') {\n return 'boolean';\n }\n return 'string';\n }\n return null;\n}\n\n/**\n * Picks a primitive coercion kind from the setting definition default and/or the effective stored value.\n * Type argument `T` on the settings service `get` method is compile-time only; runtime behavior follows this inference.\n */\nexport function inferSettingCoercionKind(defaultSample: unknown, effective: unknown): AXPSettingCoercionKind | null {\n const fromDefault = coercionKindFromScalarSample(defaultSample);\n if (fromDefault) {\n return fromDefault;\n }\n return coercionKindFromScalarSample(unwrapValueProperty(effective));\n}\n\n//#endregion\n\n//#region ---- Value coercion ----\n\nexport function coerceAXPSettingRawValueByKind(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n switch (kind) {\n case 'string':\n return coerceUnknownToTrimmedString(raw);\n case 'boolean':\n return coerceUnknownToBoolean(raw);\n case 'number':\n return coerceUnknownToFiniteNumber(raw);\n case 'date':\n return coerceUnknownToDate(raw);\n default: {\n const _exhaustive: never = kind;\n return _exhaustive;\n }\n }\n}\n\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'string'): string;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'boolean'): boolean;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'number'): number;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'date'): Date;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n return coerceAXPSettingRawValueByKind(raw, kind);\n}\n\n//#endregion\n","import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { inject, InjectionToken, Injector } from '@angular/core';\nimport { AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector),\n ];\n },\n});\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService);\n\n constructor(\n private _scope: AXPPlatformScope,\n private injector: Injector,\n ) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map((c) => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { AXPBroadcastEventService, AXPDebugService } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport {\n AXPSettingDefaultValuesAggregatorService,\n AXPSettingDefinitionProviderService,\n} from './setting-definition.service';\nimport { coerceAXPSettingRawValueByKind, inferSettingCoercionKind } from './settings-coercion';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly debugService = inject(AXPDebugService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n void this.applyDebugModeFromEvent(data);\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n await this.seedMissingDefaults();\n this.onLoaded.next();\n await this.applyDebugModeFromSettings();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n /**\n * Returns the effective setting value. Primitive coercion (string, boolean, number, date) is inferred from the\n * definition default and/or the stored shape (including `{ value: ... }`). Type argument `T` is compile-time only;\n * it is not read at runtime—use it to document the expected result (e.g. `get<boolean>(key)`).\n */\n async get<T = any>(key: string): Promise<T> {\n const { effective, defaultSample } = await this.resolveEffectiveAndDefault(key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n /**\n * Effective value (user → tenant → platform) when set; otherwise the definition default. Used for reads and coercion hints.\n */\n private async resolveEffectiveAndDefault(key: string): Promise<{ effective: unknown; defaultSample: unknown }> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n const defaultSample = get(defaults, key);\n const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return { effective: value, defaultSample };\n }\n }\n }\n return { effective: defaultSample, defaultSample };\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.applyDebugModeFromEvent(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n\n private async applyDebugModeFromSettings(): Promise<void> {\n try {\n const debugMode = await this.get<boolean>(AXPCommonSettings.DebugMode);\n this.debugService.setDebugMode(!!debugMode);\n } catch {\n this.debugService.setDebugMode(false);\n }\n }\n\n private applyDebugModeFromEvent(event: AXPSettingChangedEvent): void {\n if (!event.keys.includes(AXPCommonSettings.DebugMode)) {\n return;\n }\n\n this.debugService.setDebugMode(!!event.values[AXPCommonSettings.DebugMode]);\n }\n\n private async seedMissingDefaults(): Promise<void> {\n const definitionService = this.injector.get(AXPSettingDefinitionProviderService);\n const aggregator = this.injector.get(AXPSettingDefaultValuesAggregatorService);\n const [{ defaults, seedScopeByKey }, scopeByKey] = await Promise.all([\n aggregator.getMerged(),\n definitionService.settingScopeByKey(),\n ]);\n const persistedKeysByScope = new Map(\n await Promise.all(\n this.providers.map(async (provider) => {\n const stored = await provider.load();\n return [provider.scope, new Set(stored.map((s) => s.key))] as const;\n }),\n ),\n );\n const toPersist: Partial<Record<AXPPlatformScope, Record<string, unknown>>> = {};\n\n for (const [key, value] of Object.entries(defaults)) {\n const scope = seedScopeByKey[key] ?? scopeByKey[key];\n if (!scope || value === undefined || persistedKeysByScope.get(scope)?.has(key)) {\n continue;\n }\n toPersist[scope] ??= {};\n toPersist[scope]![key] = value;\n }\n\n for (const [scope, values] of Object.entries(toPersist) as [AXPPlatformScope, Record<string, unknown>][]) {\n if (Object.keys(values).length > 0) {\n await this.scope(scope).set(values);\n }\n }\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) {}\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n const effective = setting?.value;\n const defaults = await this.parent.defaultValues(this.provider.scope);\n const defaultSample = get(defaults, key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value);\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val));\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from '@acorex/platform/contracts';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\nimport type { AXPEntityProperty } from '@acorex/platform/layout/entity-contracts';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","import { AXCalendarService } from '@acorex/core/date-time';\nimport { Injectable } from '@angular/core';\n\n/**\n * Platform-provided {@link AXCalendarService} that applies locale profile week layout\n * (first day of week, weekends) through the core calendar service lifecycle.\n *\n * Temporary bridge until @acorex/components reads week layout from AXLocaleService.\n */\n@Injectable()\nexport class AXPRegionalCalendarService extends AXCalendarService {}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Types ----\n\nexport interface AXPUnsavedChangesConfirmOptions {\n /** When false, skips confirm even if the global setting is enabled (e.g. dialog `confirmCloseWhenDirty`). */\n enabled?: boolean;\n title?: AXPMultiLanguageString;\n message?: AXPMultiLanguageString;\n /**\n * When true (default), confirming sets leave approval for the next route deactivation.\n * Set false for in-place actions such as discarding edits without navigating away.\n */\n approveLeaveOnConfirm?: boolean;\n}\n\nexport interface AXPUnsavedChangesCanDeactivate {\n canDeactivate(): boolean | Promise<boolean>;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUnsavedChangesConfirmService {\n //#region ---- Services & Dependencies ----\n\n private readonly settingsService = inject(AXPSettingsService);\n private readonly dialogService = inject(AXDialogService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Ensures concurrent leave paths share a single unsaved-changes confirm dialog. */\n private confirmPromise?: Promise<boolean>;\n\n /** Set after the user confirms leaving; cleared on {@link NavigationEnd} by popstate handler. */\n private leaveConfirmed = false;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Whether the global \"confirm unsaved changes\" setting is enabled.\n */\n async isGloballyEnabled(): Promise<boolean> {\n const value = await this.settingsService.get<boolean>(AXPCommonSettings.ConfirmUnsavedChanges);\n return value !== false;\n }\n\n /**\n * Marks the next route deactivation as already approved (avoids a second prompt after in-app navigation).\n */\n markLeaveConfirmed(): void {\n this.leaveConfirmed = true;\n }\n\n /** True while an unsaved-changes confirm dialog is open or being resolved. */\n isConfirmPending(): boolean {\n return this.confirmPromise != null;\n }\n\n /** Whether the user already approved leaving during the current navigation. */\n hasLeaveConfirmed(): boolean {\n return this.leaveConfirmed;\n }\n\n /** Clears leave approval after navigation settles. */\n clearLeaveConfirmed(): void {\n this.leaveConfirmed = false;\n }\n\n consumeLeaveConfirmed(): boolean {\n if (!this.leaveConfirmed) {\n return false;\n }\n this.leaveConfirmed = false;\n return true;\n }\n\n /**\n * Prompts when `isDirty` and the global setting (and optional per-instance `enabled`) allow it.\n * Returns true when navigation/dismiss may proceed.\n */\n async confirmIfDirty(isDirty: boolean, options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (this.confirmPromise) {\n return this.confirmPromise;\n }\n\n if (options?.enabled === false || !isDirty) {\n return true;\n }\n\n // Reserve before any await so concurrent close/navigation paths share one dialog.\n this.confirmPromise = this.resolveConfirmIfDirty(options);\n try {\n return await this.confirmPromise;\n } finally {\n this.confirmPromise = undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async resolveConfirmIfDirty(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (!(await this.isGloballyEnabled())) {\n return true;\n }\n\n const confirmed = await this.prompt(options);\n if (confirmed && options?.approveLeaveOnConfirm !== false) {\n this.leaveConfirmed = true;\n }\n return confirmed;\n }\n\n private async prompt(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n const title = 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 { Injectable } from '@angular/core';\nimport type { DetachedRouteHandle } from '@angular/router';\n\n//#region ---- Types ----\n\ninterface DestroyableRouteHandle {\n componentRef?: { destroy: () => void; instance?: unknown };\n}\n\n//#endregion\n\n/**\n * Holds detached Angular route component instances keyed by tab key so tabular navigation can\n * preserve a page's full state (data-table selection, scroll, unsaved form values, etc.) while it\n * is in the background, then reattach it without re-rendering.\n *\n * The registry has no `Router` dependency on purpose: it is consumed by the {@link RouteReuseStrategy}\n * implementation, so depending on `Router` here would create a construction-time cycle.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabRouteCacheRegistry {\n //#region ---- State ----\n\n private readonly handles = new Map<string, DetachedRouteHandle>();\n private openKeys = new Set<string>();\n private enabled = false;\n private deactivateGuardSuspended = false;\n\n //#endregion\n\n //#region ---- Deactivate Guard Suspension ----\n\n /**\n * Runs `action` while unsaved-changes `canDeactivate` guards are suspended, so switching between\n * tabs preserves a dirty page without prompting. Closing a tab does not use this path, so the\n * prompt still appears there.\n */\n async runWithSuspendedDeactivateGuards<T>(action: () => Promise<T>): Promise<T> {\n const previous = this.deactivateGuardSuspended;\n this.deactivateGuardSuspended = true;\n try {\n return await action();\n } finally {\n this.deactivateGuardSuspended = previous;\n }\n }\n\n isDeactivateGuardSuspended(): boolean {\n return this.deactivateGuardSuspended;\n }\n\n //#endregion\n\n //#region ---- Mode ----\n\n /** Enables caching (tabular mode). Disabling clears and destroys every cached component. */\n setEnabled(enabled: boolean): void {\n if (this.enabled === enabled) {\n return;\n }\n this.enabled = enabled;\n if (!enabled) {\n this.clear();\n }\n }\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n //#endregion\n\n //#region ---- Open Keys Sync ----\n\n /**\n * Reconciles open scoped tab keys and active tab URLs. Cached handles whose key is not an open\n * scoped tab key, an active tab URL, or a child path under an open scoped tab are destroyed.\n */\n syncOpenKeys(scopedKeys: string[], activeTabUrls: string[] = []): void {\n const scopedSet = new Set(scopedKeys);\n const activePathSet = new Set(\n activeTabUrls.map((url) => url.split('?')[0].split('#')[0].replace(/\\/+$/, '') || '/'),\n );\n\n for (const cacheKey of [...this.handles.keys()]) {\n const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n const keepsScopedKey = scopedSet.has(normalizedCacheKey);\n const keepsActiveUrl = activePathSet.has(normalizedCacheKey);\n const keepsUnderScopedTab = [...scopedSet].some(\n (scopedKey) =>\n normalizedCacheKey === scopedKey || normalizedCacheKey.startsWith(`${scopedKey}/`),\n );\n\n if (!keepsScopedKey && !keepsActiveUrl && !keepsUnderScopedTab) {\n this.destroyHandle(this.handles.get(cacheKey));\n this.handles.delete(cacheKey);\n }\n }\n\n this.openKeys = scopedSet;\n }\n\n isOpen(key: string): boolean {\n return this.openKeys.has(key);\n }\n\n /**\n * Returns the live component instance for a cached background tab, when available.\n * Matches the tab key directly or any cached handle under a scoped tab prefix.\n */\n getComponentInstance<T>(key: string): T | null {\n const normalizedKey = key.replace(/\\/+$/, '') || '/';\n const direct = this.handles.get(normalizedKey) ?? this.handles.get(key);\n if (direct) {\n return this.readComponentInstance<T>(direct);\n }\n\n for (const [cacheKey, handle] of this.handles) {\n const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n if (normalizedCacheKey === normalizedKey || normalizedCacheKey.startsWith(`${normalizedKey}/`)) {\n return this.readComponentInstance<T>(handle);\n }\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---- Handle Store ----\n\n /**\n * Caches a detached background handle. Overwrites without destroying the previous handle: on a\n * repeat visit Angular hands back a new handle object wrapping the same live `componentRef`, so\n * destroying the old one would destroy the live component and corrupt the view (NG0922).\n */\n store(key: string, handle: DetachedRouteHandle): void {\n this.handles.set(key, handle);\n }\n\n /**\n * Returns the cached handle without mutating the map. Angular reads a handle twice per\n * navigation (once while building the future state, once while attaching), so `retrieve` must be\n * idempotent; the handle is released afterwards via {@link release} when Angular calls\n * `store(snapshot, null)`.\n */\n retrieve(key: string): DetachedRouteHandle | null {\n return this.handles.get(key) ?? null;\n }\n\n /**\n * Drops a handle that the router has just reattached (it is now a live foreground view, so it\n * must not be destroyed). The map keeps only truly backgrounded handles.\n */\n release(key: string): void {\n this.handles.delete(key);\n }\n\n has(key: string): boolean {\n return this.handles.has(key);\n }\n\n /** Destroys and removes a single cached handle (used when a tab closes). */\n evict(key: string): void {\n this.destroyHandle(this.handles.get(key));\n this.handles.delete(key);\n }\n\n /** Destroys and removes every cached handle. */\n clear(): void {\n for (const handle of this.handles.values()) {\n this.destroyHandle(handle);\n }\n this.handles.clear();\n this.openKeys.clear();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private readComponentInstance<T>(handle: DetachedRouteHandle): T | null {\n const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n return (componentRef?.instance as T) ?? null;\n }\n\n private destroyHandle(handle: DetachedRouteHandle | undefined): void {\n if (!handle) {\n return;\n }\n const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n componentRef?.destroy?.();\n }\n\n //#endregion\n}\n","import { inject } from '@angular/core';\nimport { CanDeactivateFn } from '@angular/router';\nimport { AXPTabRouteCacheRegistry } from '../tab-navigation/tab-route-cache.registry';\nimport { AXPUnsavedChangesCanDeactivate } from './unsaved-changes-confirm.service';\n\n//#region ---- Unsaved Changes Can Deactivate Guard Factory ----\n\nexport function createUnsavedChangesCanDeactivateGuard<T extends AXPUnsavedChangesCanDeactivate>(): CanDeactivateFn<T> {\n return (component) => {\n // Tab switches keep the page alive in the background, so skip the prompt; closing a tab does not\n // suspend guards and still prompts.\n const tabCache = inject(AXPTabRouteCacheRegistry, { optional: true });\n if (tabCache?.isDeactivateGuardSuspended()) {\n return true;\n }\n return component.canDeactivate();\n };\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes, UrlTree } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, data: { ...home?.route?.data, key: home?.key, title: home?.title, path: fullPath } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n /**\n * Resolves the current user's home page as a router URL tree.\n */\n resolveHomeUrlTree(): UrlTree {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n const path = current.path.startsWith('/') ? current.path : `/${current.path}`;\n return router.parseUrl(path);\n }\n\n async navigateTo(): Promise<void> {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n router.navigateByUrl(this.resolveHomeUrlTree(), { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","\nimport { AXPPlatformScope, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const list = this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup(\n 'general',\n `${I18N}.general.nav-title`,\n `${I18N}.general.description`,\n 'fa-light fa-palette',\n `${I18N}.general.title`,\n 1,\n )\n\n // Add the 'Startup' section\n .addSection('startup', `${I18N}.general.startup.title`, `${I18N}.general.startup.description`)\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: `${I18N}.general.startup.home-page.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: `${I18N}.general.startup.home-page.description`,\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPUserReference } from '@acorex/platform/contracts';\n//#endregion\n\n//#region ---- In-app notification port ----\n\nexport type AXPInAppNotificationPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport interface AXPInAppNotificationCreateRequest {\n id: string;\n name: string;\n title: string;\n body: string;\n icon: string;\n priority: AXPInAppNotificationPriority;\n receiver: AXPUserReference;\n data?: Record<string, unknown>;\n}\n\n/**\n * Persists in-app notifications. Notification-management registers an implementation\n * backed by {@link AXMNotificationService}.\n */\nexport interface AXPInAppNotificationService {\n create(request: AXPInAppNotificationCreateRequest): Promise<void>;\n}\n\nexport const AXP_IN_APP_NOTIFICATION_SERVICE = new InjectionToken<AXPInAppNotificationService>(\n 'AXP_IN_APP_NOTIFICATION_SERVICE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationPriority,\n} from './background-operation.notification';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends in-app notifications when a background operation finishes or fails.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationNotificationService {\n private readonly inAppNotificationService = inject(AXP_IN_APP_NOTIFICATION_SERVICE, { optional: true });\n\n private readonly sessionService = inject(AXPSessionService);\n\n async notify(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.inAppNotificationService || !this.shouldNotify(operation)) {\n return;\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return;\n }\n\n const body = this.resolveBody(operation);\n const { icon, priority } = this.resolveTemplate(operation);\n\n const request: AXPInAppNotificationCreateRequest = {\n id: `notif-bg-op-${operation.id}-${operation.status}`,\n name: operation.title,\n title: operation.title,\n body,\n icon,\n priority,\n receiver: {\n id: userId,\n type: 'user',\n fullName: get(this.sessionService.user, 'title') as string | undefined,\n username: get(this.sessionService.user, 'name') as string | undefined,\n },\n data: {\n backgroundOperationId: operation.id,\n providerKey: operation.providerKey,\n status: operation.status,\n ...(operation.data ?? {}),\n },\n };\n\n await this.inAppNotificationService.create(request);\n }\n\n //#region ---- Helpers ----\n\n private shouldNotify(operation: AXPBackgroundOperation): boolean {\n const { capabilities } = operation;\n\n if (operation.status === 'failed') {\n return capabilities.notifyOnFailed !== false;\n }\n\n if (operation.status === 'completed' || operation.status === 'cancelled') {\n return capabilities.notifyOnComplete !== false;\n }\n\n return false;\n }\n\n private resolveBody(operation: AXPBackgroundOperation): string {\n if (operation.status === 'failed') {\n return operation.error?.message ?? operation.statusText ?? 'Background task failed';\n }\n\n const statusText = operation.statusText?.trim();\n return statusText || operation.title;\n }\n\n private resolveTemplate(operation: AXPBackgroundOperation): {\n icon: string;\n priority: AXPInAppNotificationPriority;\n } {\n switch (operation.status) {\n case 'completed':\n return { icon: 'fa-light fa-circle-check', priority: 'Notice' };\n case 'failed':\n return { icon: 'fa-light fa-circle-exclamation', priority: 'Danger' };\n case 'cancelled':\n return { icon: 'fa-light fa-ban', priority: 'Warning' };\n default:\n return { icon: 'fa-light fa-list-check', priority: 'Notice' };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPDataGenerator } from '@acorex/platform/contracts';\nimport { isNumber } from 'lodash-es';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationCreateRequest,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Factories ----\n\nexport function axpCreateBackgroundOperationId(): string {\n return `bg-op-${AXPDataGenerator.uuid()}`;\n}\n\nexport function axpBuildBackgroundOperation(\n providerKey: string,\n request: AXPBackgroundOperationCreateRequest,\n overrides?: Partial<AXPBackgroundOperation>,\n): AXPBackgroundOperation {\n const now = new Date();\n const operation: AXPBackgroundOperation = {\n id: axpCreateBackgroundOperationId(),\n providerKey,\n title: request.title,\n status: 'queued',\n progress: request.progress,\n estimatedDurationMs: request.estimatedDurationMs,\n statusText: request.statusText,\n currentStep: request.currentStep,\n createdAt: now,\n capabilities: request.capabilities,\n failurePolicy: request.failurePolicy,\n ...overrides,\n };\n const hasStarted = operation.status === 'running' || operation.status === 'paused';\n\n return {\n ...operation,\n createdAt: operation.createdAt ?? now,\n startedAt: operation.startedAt ?? (hasStarted ? now : undefined),\n };\n}\n\nexport function axpCoerceBackgroundOperationDate(value: Date | string | undefined): Date | null {\n if (!value) {\n return null;\n }\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function axpBackgroundOperationDisplayTime(operation: AXPBackgroundOperation): Date | null {\n return (\n axpCoerceBackgroundOperationDate(operation.startedAt) ??\n axpCoerceBackgroundOperationDate(operation.createdAt)\n );\n}\n\n/**\n * Remaining duration in milliseconds for ETA display.\n */\nexport function axpBackgroundOperationRemainingMs(operation: AXPBackgroundOperation): number | null {\n if (!operation.capabilities.supportsEstimate || !isNumber(operation.estimatedDurationMs)) {\n return null;\n }\n\n const { estimatedDurationMs, progress, startedAt, status } = operation;\n if (status !== 'running' && status !== 'paused' && status !== 'queued') {\n return null;\n }\n\n if (isNumber(progress) && progress >= 100) {\n return 0;\n }\n\n if (isNumber(progress) && progress > 0) {\n return Math.max(0, Math.round((estimatedDurationMs * (100 - progress)) / 100));\n }\n\n const started = axpCoerceBackgroundOperationDate(startedAt);\n if (started) {\n const elapsed = Date.now() - started.getTime();\n return Math.max(0, estimatedDurationMs - elapsed);\n }\n\n return estimatedDurationMs;\n}\n\n/**\n * Estimated completion instant for relative-time formatting (e.g. timeleft pipe).\n */\nexport function axpBackgroundOperationEstimateEndDate(operation: AXPBackgroundOperation): Date | null {\n const remainingMs = axpBackgroundOperationRemainingMs(operation);\n if (remainingMs === null) {\n return null;\n }\n return new Date(Date.now() + remainingMs);\n}\n\nexport function axpBackgroundOperationCapabilities(\n partial: Partial<AXPBackgroundOperationCapabilities> = {},\n): AXPBackgroundOperationCapabilities {\n return {\n cancellable: partial.cancellable ?? false,\n pausable: partial.pausable ?? false,\n resumable: partial.resumable ?? false,\n retryable: partial.retryable ?? false,\n supportsProgress: partial.supportsProgress ?? false,\n supportsEstimate: partial.supportsEstimate ?? false,\n clickable: partial.clickable ?? false,\n notifyOnComplete: partial.notifyOnComplete ?? true,\n notifyOnFailed: partial.notifyOnFailed ?? true,\n };\n}\n\nexport function axpBackgroundOperationFailurePolicy(\n partial: Partial<AXPBackgroundOperationFailurePolicy> = {},\n): AXPBackgroundOperationFailurePolicy {\n return {\n mode: partial.mode ?? 'abort',\n currentStepId: partial.currentStepId,\n maxRetries: partial.maxRetries,\n retryCount: partial.retryCount ?? 0,\n };\n}\n\nexport function axpIsActiveBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'queued' || status === 'running' || status === 'paused';\n}\n\nexport function axpIsCompletedBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'completed' || status === 'cancelled';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBackgroundOperationNotificationService } from './background-operation-notification.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends notifications and removes tray rows when a background operation reaches a terminal state.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationCompletionService {\n private readonly notificationService = inject(AXPBackgroundOperationNotificationService);\n\n /** Whether the operation just reached a finished state (completed or cancelled). */\n shouldAutoFinish(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return (\n previousStatus !== operation.status && axpIsCompletedBackgroundOperationStatus(operation.status)\n );\n }\n\n /** Whether the operation just transitioned to failed. */\n shouldNotifyFailure(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return previousStatus !== operation.status && operation.status === 'failed';\n }\n\n /** Notifies the user and invokes {@link remove} to drop the operation from the tray. */\n async notifyAndRemove(operation: AXPBackgroundOperation, remove: () => void): Promise<void> {\n await this.notify(operation);\n remove();\n }\n\n /** Notifies the user while keeping the failed operation in the tray for retry. */\n async notifyFailure(operation: AXPBackgroundOperation): Promise<void> {\n await this.notify(operation);\n }\n\n //#region ---- Notification ----\n\n private async notify(operation: AXPBackgroundOperation): Promise<void> {\n try {\n await this.notificationService.notify(operation);\n } catch (error: unknown) {\n console.warn('Failed to send background-operation notification', operation.id, error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Status & capabilities ----\n\nexport type AXPBackgroundOperationStatus =\n | 'queued'\n | 'running'\n | 'paused'\n | 'completed'\n | 'failed'\n | 'cancelled';\n\nexport interface AXPBackgroundOperationCapabilities {\n cancellable: boolean;\n pausable: boolean;\n resumable: boolean;\n retryable: boolean;\n /** When true, UI shows a progress bar only while {@link AXPBackgroundOperation.progress} is set. */\n supportsProgress: boolean;\n /** When true, UI may show ETA while {@link AXPBackgroundOperation.estimatedDurationMs} is set. */\n supportsEstimate: boolean;\n /** When true, the tray item is clickable and delegates to a registered handler. */\n clickable: boolean;\n /** When false, skip in-app notification on completed/cancelled. Default: true. */\n notifyOnComplete?: boolean;\n /** When false, skip in-app notification on failed. Default: true. */\n notifyOnFailed?: boolean;\n}\n\nexport type AXPBackgroundOperationFailureMode = 'retry' | 'continue' | 'abort';\n\nexport interface AXPBackgroundOperationFailurePolicy {\n mode: AXPBackgroundOperationFailureMode;\n currentStepId?: string;\n maxRetries?: number;\n retryCount?: number;\n}\n\nexport interface AXPBackgroundOperationError {\n code?: string;\n message: string;\n detail?: string;\n}\n\n//#endregion\n\n//#region ---- Operation model ----\n\nexport interface AXPBackgroundOperation {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: Date;\n startedAt?: Date;\n completedAt?: Date;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n /** Handler-specific payload (e.g. conversationId for chat navigation). */\n data?: Record<string, unknown>;\n}\n\nexport interface AXPBackgroundOperationCreateRequest {\n title: string;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n}\n\nexport type AXPBackgroundOperationActionKey = 'cancel' | 'pause' | 'resume' | 'retry' | 'dismiss';\n\n//#endregion\n","//#region ---- Root config ----\n\nexport const AXPBackgroundOperationRootConfig = {\n module: {\n name: 'Common',\n title: '@general:module.common.title',\n icon: 'fa-light fa-layer-group',\n },\n entities: {\n backgroundOperation: {\n name: 'BackgroundOperations',\n title: '@general:background-operation.entity.title',\n titlePlural: '@general:background-operation.entity.plural',\n icon: 'fa-light fa-spinner',\n },\n },\n} as const;\n\n/** Full entity key used with {@link AXPEntityStorageService} (e.g. `Common.BackgroundOperations`). */\nexport function axpBackgroundOperationEntityName(): string {\n return `${AXPBackgroundOperationRootConfig.module.name}.${AXPBackgroundOperationRootConfig.entities.backgroundOperation.name}`;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\n\n//#endregion\n\n//#region ---- Storage adapter ----\n\n/**\n * Optional persistence adapter for background-operation entity rows.\n * Mock connectivity registers an implementation backed by {@link AXPEntityStorageService}.\n */\nexport interface AXPBackgroundOperationEntityStorageAdapter {\n getAll(entityName: string): Promise<AXPBackgroundOperationEntityModel[]>;\n upsertOne(entityName: string, row: AXPBackgroundOperationEntityModel): Promise<void>;\n deleteOne(entityName: string, id: string): Promise<void>;\n}\n\nexport const AXP_BACKGROUND_OPERATION_ENTITY_STORAGE = new InjectionToken<AXPBackgroundOperationEntityStorageAdapter>(\n 'AXP_BACKGROUND_OPERATION_ENTITY_STORAGE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\nimport { axpCoerceBackgroundOperationDate } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Mappers ----\n\nexport function axpBackgroundOperationToEntityModel(\n operation: AXPBackgroundOperation,\n): AXPBackgroundOperationEntityModel {\n return {\n id: operation.id,\n providerKey: operation.providerKey,\n title: operation.title,\n status: operation.status,\n progress: operation.progress,\n estimatedDurationMs: operation.estimatedDurationMs,\n statusText: operation.statusText,\n currentStep: operation.currentStep,\n createdAt: operation.createdAt.toISOString(),\n startedAt: operation.startedAt?.toISOString(),\n completedAt: operation.completedAt?.toISOString(),\n capabilities: operation.capabilities,\n failurePolicy: operation.failurePolicy,\n error: operation.error,\n data: operation.data,\n };\n}\n\nexport function axpBackgroundOperationFromEntityModel(\n model: AXPBackgroundOperationEntityModel,\n): AXPBackgroundOperation {\n const createdAt = axpCoerceBackgroundOperationDate(model.createdAt) ?? new Date();\n\n return {\n id: model.id,\n providerKey: model.providerKey,\n title: model.title,\n status: model.status,\n progress: model.progress,\n estimatedDurationMs: model.estimatedDurationMs,\n statusText: model.statusText,\n currentStep: model.currentStep,\n createdAt,\n startedAt: axpCoerceBackgroundOperationDate(model.startedAt) ?? undefined,\n completedAt: axpCoerceBackgroundOperationDate(model.completedAt) ?? undefined,\n capabilities: model.capabilities,\n failurePolicy: model.failurePolicy,\n error: model.error,\n data: model.data,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { signal, type Signal } from '@angular/core';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Store factory ----\n\n/**\n * Lightweight in-memory store for a single background-operation provider.\n */\nexport function createBackgroundOperationStore(): {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void;\n find(id: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n} {\n const operationsState = signal<AXPBackgroundOperation[]>([]);\n\n return {\n operations: operationsState.asReadonly(),\n\n upsert(operation: AXPBackgroundOperation): void {\n operationsState.update((list) => {\n const index = list.findIndex((item) => item.id === operation.id);\n if (index < 0) {\n return [operation, ...list];\n }\n const next = [...list];\n next[index] = operation;\n return next;\n });\n },\n\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void {\n operationsState.update((list) =>\n list.map((item) => (item.id === id ? { ...item, ...patch } : item)),\n );\n },\n\n find(id: string): AXPBackgroundOperation | undefined {\n return operationsState().find((item) => item.id === id);\n },\n\n remove(id: string): void {\n operationsState.update((list) => list.filter((item) => item.id !== id));\n },\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, type Signal } from '@angular/core';\nimport { axpBackgroundOperationEntityName } from './background-operation.const';\nimport {\n axpBackgroundOperationFromEntityModel,\n axpBackgroundOperationToEntityModel,\n} from './background-operation.entity.mapper';\nimport { AXP_BACKGROUND_OPERATION_ENTITY_STORAGE } from './background-operation.entity.storage';\nimport { AXPBackgroundOperationCompletionService } from './background-operation-completion.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\nimport { createBackgroundOperationStore } from './background-operation.store';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBackgroundOperationProviderStore {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(operationId: string, patch: Partial<AXPBackgroundOperation>): void;\n find(operationId: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed store for background operations (`Common.BackgroundOperations`).\n * Uses in-memory signals for UI reactivity and optionally persists via {@link AXP_BACKGROUND_OPERATION_ENTITY_STORAGE}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationEntityStoreService {\n private readonly entityStorage = inject(AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, { optional: true });\n\n private readonly completionService = inject(AXPBackgroundOperationCompletionService);\n\n private readonly entityName = axpBackgroundOperationEntityName();\n\n private hydrated = false;\n\n private hydratePromise?: Promise<void>;\n\n private readonly innerStores = new Map<string, ReturnType<typeof createBackgroundOperationStore>>();\n\n //#region ---- Hydration ----\n\n async ensureHydrated(): Promise<void> {\n if (this.hydrated || !this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n if (!this.hydratePromise) {\n this.hydratePromise = this.hydrateFromEntityStorage();\n }\n\n await this.hydratePromise;\n }\n\n async hasAnyOperationForProviders(providerKeys: readonly string[]): Promise<boolean> {\n await this.ensureHydrated();\n\n if (providerKeys.length === 0) {\n return false;\n }\n\n if (this.entityStorage) {\n const rows = await this.entityStorage.getAll(this.entityName);\n return rows.some((row) => providerKeys.includes(row.providerKey));\n }\n\n return [...this.innerStores.values()].some((store) =>\n store.operations().some((operation) => providerKeys.includes(operation.providerKey)),\n );\n }\n\n //#endregion\n\n //#region ---- Provider stores ----\n\n createProviderStore(providerKey: string): AXPBackgroundOperationProviderStore {\n const inner = this.getOrCreateInnerStore(providerKey);\n\n return {\n operations: computed(() => inner.operations().filter((operation) => operation.providerKey === providerKey)),\n\n upsert: (operation: AXPBackgroundOperation): void => {\n inner.upsert(operation);\n void this.persistOperation(operation);\n },\n\n patch: (operationId: string, patch: Partial<AXPBackgroundOperation>): void => {\n const previous = inner.find(operationId);\n inner.patch(operationId, patch);\n const operation = inner.find(operationId);\n if (!operation) {\n return;\n }\n\n if (this.completionService.shouldAutoFinish(previous?.status, operation)) {\n void this.completionService.notifyAndRemove(operation, () => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n });\n return;\n }\n\n if (this.completionService.shouldNotifyFailure(previous?.status, operation)) {\n void this.completionService.notifyFailure(operation);\n }\n\n void this.persistOperation(operation);\n },\n\n find: (operationId: string): AXPBackgroundOperation | undefined => inner.find(operationId),\n\n remove: (operationId: string): void => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n },\n };\n }\n\n /** All operations across providers (post-hydration). */\n readonly allOperations = computed(() =>\n [...this.innerStores.values()].flatMap((store) => store.operations()),\n );\n\n //#endregion\n\n //#region ---- Entity persistence ----\n\n private async hydrateFromEntityStorage(): Promise<void> {\n if (!this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n const rows = await this.entityStorage.getAll(this.entityName);\n\n for (const row of rows) {\n const operation = axpBackgroundOperationFromEntityModel(row);\n\n if (axpIsCompletedBackgroundOperationStatus(operation.status)) {\n void this.deleteOperation(operation.id);\n continue;\n }\n\n this.getOrCreateInnerStore(operation.providerKey).upsert(operation);\n }\n\n this.hydrated = true;\n }\n\n private async persistOperation(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.upsertOne(this.entityName, axpBackgroundOperationToEntityModel(operation));\n } catch (error: unknown) {\n console.warn('Failed to persist background operation entity', operation.id, error);\n }\n }\n\n private async deleteOperation(operationId: string): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.deleteOne(this.entityName, operationId);\n } catch (error: unknown) {\n console.warn('Failed to delete background operation entity', operationId, error);\n }\n }\n\n private getOrCreateInnerStore(providerKey: string): ReturnType<typeof createBackgroundOperationStore> {\n let store = this.innerStores.get(providerKey);\n if (!store) {\n store = createBackgroundOperationStore();\n this.innerStores.set(providerKey, store);\n }\n return store;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationError,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from '../../background-operation.types';\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/** Persisted row shape for {@link axpBackgroundOperationEntityName}. */\nexport interface AXPBackgroundOperationEntityModel {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: string;\n startedAt?: string;\n completedAt?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n data?: Record<string, unknown>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPBackgroundOperationRootConfig } from '../../background-operation.const';\n\n//#endregion\n\n//#region ---- Entity factory ----\n\n/**\n * Storage-only entity for background-operation tray rows (`Common.BackgroundOperations`).\n * No master UI — persisted through {@link AXPEntityStorageService}.\n */\nexport async function backgroundOperationEntityFactory(): Promise<AXPEntity | null> {\n const { module, entities } = AXPBackgroundOperationRootConfig;\n\n return {\n module: module.name,\n name: entities.backgroundOperation.name,\n title: entities.backgroundOperation.title,\n icon: entities.backgroundOperation.icon,\n formats: {\n individual: entities.backgroundOperation.title,\n plural: entities.backgroundOperation.titlePlural,\n },\n properties: [\n {\n name: 'id',\n title: 'ID',\n schema: { dataType: 'string' },\n },\n {\n name: 'providerKey',\n title: 'Provider key',\n schema: { dataType: 'string' },\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n schema: { dataType: 'string' },\n },\n {\n name: 'status',\n title: '@general:terms.common.status',\n schema: { dataType: 'string' },\n },\n {\n name: 'progress',\n title: 'Progress',\n schema: { dataType: 'number' },\n },\n {\n name: 'estimatedDurationMs',\n title: 'Estimated duration (ms)',\n schema: { dataType: 'number' },\n },\n {\n name: 'statusText',\n title: 'Status text',\n schema: { dataType: 'string' },\n },\n {\n name: 'currentStep',\n title: 'Current step',\n schema: { dataType: 'string' },\n },\n {\n name: 'createdAt',\n title: '@general:terms.common.created-at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'startedAt',\n title: 'Started at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'completedAt',\n title: 'Completed at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'capabilities',\n title: 'Capabilities',\n schema: { dataType: 'object' },\n },\n {\n name: 'failurePolicy',\n title: 'Failure policy',\n schema: { dataType: 'object' },\n },\n {\n name: 'error',\n title: 'Error',\n schema: { dataType: 'object' },\n },\n {\n name: 'data',\n title: 'Payload',\n schema: { dataType: 'object' },\n },\n ],\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_HANDLERS = new InjectionToken<AXPBackgroundOperationHandler[]>(\n 'AXP_BACKGROUND_OPERATION_HANDLERS',\n);\n\n//#endregion\n\n//#region ---- Handler contract ----\n\n/**\n * Handles user interactions for background operations (e.g. navigate on click).\n * Register one handler per {@link AXPBackgroundOperation.providerKey}.\n */\nexport abstract class AXPBackgroundOperationHandler {\n abstract readonly providerKey: string;\n\n abstract execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken, Signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_PROVIDERS = new InjectionToken<AXPBackgroundOperationProvider[]>(\n 'AXP_BACKGROUND_OPERATION_PROVIDERS',\n);\n\n//#endregion\n\n//#region ---- Provider contract ----\n\n/**\n * Registers a source of background operations (multi-provider).\n * Each feature module or mock can contribute one provider per domain key.\n */\nexport abstract class AXPBackgroundOperationProvider {\n abstract readonly key: string;\n abstract readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n\n abstract create(request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation>;\n abstract cancel(operationId: string): Promise<void>;\n\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.pausable} is true. */\n pause?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.resumable} is true. */\n resume?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.retryable} is true. */\n retry?(operationId: string): Promise<void>;\n /** Optional — removes completed/failed operations from the tray. */\n dismiss?(operationId: string): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n} from './background-operation.handler';\nimport {\n AXP_BACKGROUND_OPERATION_PROVIDERS,\n AXPBackgroundOperationProvider,\n} from './background-operation.provider';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport {\n axpIsActiveBackgroundOperationStatus,\n} from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationService {\n //#region ---- Dependencies ----\n\n private readonly providers = inject(AXP_BACKGROUND_OPERATION_PROVIDERS, { optional: true }) ?? [];\n\n private readonly handlers = inject(AXP_BACKGROUND_OPERATION_HANDLERS, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly busy = signal(false);\n\n readonly loading = this.busy.asReadonly();\n\n readonly operations = computed<readonly AXPBackgroundOperation[]>(() =>\n this.providers.flatMap((provider) => provider.operations()),\n );\n\n readonly activeCount = computed(\n () => this.operations().filter((operation) => axpIsActiveBackgroundOperationStatus(operation.status)).length,\n );\n\n readonly failedCount = computed(\n () => this.operations().filter((operation) => operation.status === 'failed').length,\n );\n\n //#endregion\n\n //#region ---- Queries ----\n\n getAvailableActions(operation: AXPBackgroundOperation): AXPBackgroundOperationActionKey[] {\n const actions: AXPBackgroundOperationActionKey[] = [];\n const { capabilities, status } = operation;\n\n if (capabilities.cancellable && (status === 'queued' || status === 'running' || status === 'paused')) {\n actions.push('cancel');\n }\n if (capabilities.pausable && status === 'running') {\n actions.push('pause');\n }\n if (capabilities.resumable && status === 'paused') {\n actions.push('resume');\n }\n if (capabilities.retryable && status === 'failed') {\n actions.push('retry');\n }\n\n return actions;\n }\n\n //#endregion\n\n //#region ---- Commands ----\n\n async create(providerKey: string, request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation> {\n const provider = this.resolveProvider(providerKey);\n return this.run(() => provider.create(request));\n }\n\n async cancel(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.cancellable) {\n throw new Error(`Operation ${operationId} cannot be cancelled`);\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n async pause(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.pausable || !provider.pause) {\n throw new Error(`Operation ${operationId} cannot be paused`);\n }\n await this.run(() => provider.pause!(operationId));\n }\n\n async resume(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.resumable || !provider.resume) {\n throw new Error(`Operation ${operationId} cannot be resumed`);\n }\n await this.run(() => provider.resume!(operationId));\n }\n\n async retry(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.retryable || !provider.retry) {\n throw new Error(`Operation ${operationId} cannot be retried`);\n }\n await this.run(() => provider.retry!(operationId));\n }\n\n async dismiss(operationId: string): Promise<void> {\n const { provider } = this.resolveOperation(operationId);\n if (provider.dismiss) {\n await this.run(() => provider.dismiss!(operationId));\n return;\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n hasClickHandler(operation: AXPBackgroundOperation): boolean {\n return (\n operation.capabilities.clickable &&\n this.handlers.some((handler) => handler.providerKey === operation.providerKey)\n );\n }\n\n async executeCommand(operationId: string, command: AXPExecuteCommand): Promise<void> {\n const { operation } = this.resolveOperation(operationId);\n const handler = this.resolveHandler(operation.providerKey);\n if (!handler) {\n return;\n }\n await this.run(() => handler.execute(command, operation));\n }\n\n async executeClick(operationId: string): Promise<void> {\n await this.executeCommand(operationId, { name: 'click' });\n }\n\n async runAction(operationId: string, action: AXPBackgroundOperationActionKey): Promise<void> {\n switch (action) {\n case 'cancel':\n await this.cancel(operationId);\n break;\n case 'pause':\n await this.pause(operationId);\n break;\n case 'resume':\n await this.resume(operationId);\n break;\n case 'retry':\n await this.retry(operationId);\n break;\n case 'dismiss':\n await this.dismiss(operationId);\n break;\n default:\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Resolution ----\n\n private resolveHandler(providerKey: string): AXPBackgroundOperationHandler | undefined {\n return this.handlers.find((handler) => handler.providerKey === providerKey);\n }\n\n private resolveProvider(providerKey: string): AXPBackgroundOperationProvider {\n const provider = this.providers.find((item) => item.key === providerKey);\n if (!provider) {\n throw new Error(`Background operation provider \"${providerKey}\" is not registered`);\n }\n return provider;\n }\n\n private resolveOperation(operationId: string): {\n provider: AXPBackgroundOperationProvider;\n operation: AXPBackgroundOperation;\n } {\n for (const provider of this.providers) {\n const operation = provider.operations().find((item) => item.id === operationId);\n if (operation) {\n return { provider, operation };\n }\n }\n throw new Error(`Background operation \"${operationId}\" was not found`);\n }\n\n private async run<T>(fn: () => Promise<T>): Promise<T> {\n this.busy.set(true);\n try {\n return await fn();\n } finally {\n this.busy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isNumber } from 'lodash-es';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n} from '../background-operation.types';\nimport { AXStyleLookType } from '@acorex/cdk/common';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-item',\n templateUrl: './background-operation-item.component.html',\n styleUrls: ['./background-operation-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXProgressBarModule, AXTranslationModule],\n})\nexport class AXPBackgroundOperationItemComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n data = input.required<AXPBackgroundOperation>();\n\n actionCompleted = output<void>();\n\n itemClicked = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pendingAction = signal<AXPBackgroundOperationActionKey | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly statusClass = computed(() => `--${this.data().status}`);\n\n protected readonly statusIcon = computed(() => {\n switch (this.data().status) {\n case 'queued':\n return 'fa-light fa-clock';\n case 'running':\n return 'fa-light fa-spinner fa-spin';\n case 'paused':\n return 'fa-light fa-pause';\n case 'completed':\n return 'fa-light fa-circle-check';\n case 'failed':\n return 'fa-light fa-circle-exclamation';\n case 'cancelled':\n return 'fa-light fa-ban';\n default:\n return 'fa-light fa-list-check';\n }\n });\n\n protected readonly progressColor = computed(() => {\n switch (this.data().status) {\n case 'failed':\n return 'danger';\n case 'paused':\n return 'warning';\n case 'completed':\n return 'success';\n default:\n return 'primary';\n }\n });\n\n protected readonly showProgressBar = computed(() => {\n const operation = this.data();\n return axpIsActiveBackgroundOperationStatus(operation.status);\n });\n\n protected readonly isIndeterminateProgress = computed(() => {\n const operation = this.data();\n return !isNumber(operation.progress) && !operation.currentStep;\n });\n\n protected readonly progressMode = computed(() =>\n this.isIndeterminateProgress() ? 'indeterminate' : 'determinate',\n );\n\n protected readonly progressValue = computed(() => {\n const progress = this.data().progress;\n if (isNumber(progress)) {\n return Math.min(Math.max(progress, 0), 100);\n }\n return 0;\n });\n\n protected readonly isClickable = computed(() => this.operationService.hasClickHandler(this.data()));\n\n protected readonly showError = computed(() => this.data().status === 'failed' && !!this.data().error?.message);\n\n protected readonly actions = computed(() => this.operationService.getAvailableActions(this.data()));\n\n protected readonly showMetaRow = computed(() => {\n const operation = this.data();\n return (\n !!operation.statusText ||\n !!operation.currentStep ||\n this.actions().length > 0\n );\n });\n\n //#endregion\n\n //#region ---- Action presentation ----\n\n protected actionLabelKey(action: AXPBackgroundOperationActionKey): string {\n return `@general:background-operation.actions.${action}`;\n }\n\n protected actionButtonLook(action: AXPBackgroundOperationActionKey): AXStyleLookType {\n if (action === 'dismiss') {\n return 'blank';\n }\n return 'twotone';\n }\n\n protected actionButtonColor(action: AXPBackgroundOperationActionKey): string {\n switch (action) {\n case 'cancel':\n return 'danger';\n case 'resume':\n case 'retry':\n return 'primary';\n default:\n return 'default';\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected async onItemClick(): Promise<void> {\n if (!this.isClickable()) {\n return;\n }\n try {\n await this.operationService.executeClick(this.data().id);\n this.itemClicked.emit();\n } catch (error) {\n console.error('Background operation click failed:', error);\n }\n }\n\n protected async onAction(action: AXPBackgroundOperationActionKey): Promise<void> {\n if (this.pendingAction()) {\n return;\n }\n this.pendingAction.set(action);\n try {\n await this.operationService.runAction(this.data().id, action);\n this.actionCompleted.emit();\n } catch (error) {\n console.error('Background operation action failed:', error);\n } finally {\n this.pendingAction.set(null);\n }\n }\n\n protected isActionDisabled(action: AXPBackgroundOperationActionKey): boolean {\n const pending = this.pendingAction();\n return pending !== null && pending !== action;\n }\n\n protected isActionLoading(action: AXPBackgroundOperationActionKey): boolean {\n return this.pendingAction() === action;\n }\n\n //#endregion\n}\n\n//#endregion\n","<article\n class=\"operation-item\"\n [class]=\"statusClass()\"\n [class.--clickable]=\"isClickable()\"\n (click)=\"onItemClick()\"\n>\n <div class=\"operation-item__body\">\n <div class=\"operation-item__header\">\n <ax-icon class=\"operation-item__status-icon\" [class]=\"statusClass()\">\n <i [class]=\"statusIcon()\"></i>\n </ax-icon>\n\n <div class=\"operation-item__summary\">\n <h3 class=\"operation-item__title\">{{ data().title }}</h3>\n\n @if (showMetaRow()) {\n <div class=\"operation-item__meta\">\n <div class=\"operation-item__meta-content\">\n @if (data().statusText) {\n <p class=\"operation-item__status-text\">{{ data().statusText }}</p>\n }\n\n @if (data().currentStep) {\n <span class=\"operation-item__step\">\n {{ '@general:background-operation.step' | translate | async }} {{ data().currentStep }}\n </span>\n }\n </div>\n\n @if (actions().length > 0) {\n <footer class=\"operation-item__actions\" (click)=\"$event.stopPropagation()\">\n @for (action of actions(); track action) {\n <ax-button\n class=\"ax-xs\"\n [look]=\"actionButtonLook(action)\"\n [color]=\"actionButtonColor(action)\"\n [text]=\"(actionLabelKey(action) | translate | async) ?? ''\"\n [disabled]=\"isActionDisabled(action) || isActionLoading(action)\"\n (onClick)=\"onAction(action)\"\n ></ax-button>\n }\n </footer>\n }\n </div>\n }\n\n @if (showProgressBar()) {\n <ax-progress-bar\n [progress]=\"progressValue()\"\n [mode]=\"progressMode()\"\n [color]=\"progressColor()\"\n [style.height.px]=\"4\"\n ></ax-progress-bar>\n }\n\n @if (showError()) {\n <p class=\"operation-item__error\" role=\"alert\">{{ data().error!.message }}</p>\n }\n </div>\n </div>\n </div>\n</article>\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport type { AXPBackgroundOperationStatus } from '../background-operation.types';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport { AXPBackgroundOperationItemComponent } from './background-operation-item.component';\n\n//#endregion\n\n//#region ---- Sort priority ----\n\nconst STATUS_SORT_PRIORITY: Record<AXPBackgroundOperationStatus, number> = {\n running: 0,\n queued: 1,\n paused: 2,\n failed: 3,\n completed: 4,\n cancelled: 5,\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-panel',\n templateUrl: './background-operation-panel.component.html',\n styleUrls: ['./background-operation-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXTranslationModule, AXPBackgroundOperationItemComponent],\n})\nexport class AXPBackgroundOperationPanelComponent {\n //#region ---- Outputs ----\n\n onActiveCountChange = output<number>();\n\n onClosePopover = output<void>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly visibleOperations = computed(() =>\n [...this.operationService.operations()]\n .filter(\n (operation) =>\n axpIsActiveBackgroundOperationStatus(operation.status) || operation.status === 'failed',\n )\n .sort((left, right) => {\n const priorityDiff = STATUS_SORT_PRIORITY[left.status] - STATUS_SORT_PRIORITY[right.status];\n if (priorityDiff !== 0) {\n return priorityDiff;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n }),\n );\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"operation-panel\">\n <header class=\"operation-panel__header\">\n <h2 class=\"operation-panel__title\">{{ '@general:background-operation.panel.title' | translate | async }}</h2>\n </header>\n\n <div class=\"operation-panel__list\">\n @if (visibleOperations().length === 0) {\n <div class=\"operation-panel__empty\">\n <i class=\"fa-regular fa-list-check\"></i>\n <span class=\"ax-text-sm\">{{ '@general:background-operation.empty.all' | translate | async }}</span>\n </div>\n } @else {\n @for (operation of visibleOperations(); track operation.id) {\n <axp-background-operation-item\n [data]=\"operation\"\n (actionCompleted)=\"onActiveCountChange.emit(operationService.activeCount())\"\n (itemClicked)=\"onClosePopover.emit()\"\n ></axp-background-operation-item>\n }\n }\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { AXPBackgroundOperationPanelComponent } from './background-operation-panel.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-slot',\n templateUrl: './background-operation-slot.component.html',\n styleUrls: ['./background-operation-slot.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXDecoratorModule, AXTranslationModule, AXPopoverModule, AXPBackgroundOperationPanelComponent],\n})\nexport class AXPBackgroundOperationSlotComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- View Queries ----\n\n private readonly popover = viewChild(AXPopoverComponent);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly activeCount = this.operationService.activeCount;\n\n protected readonly failedCount = this.operationService.failedCount;\n\n protected readonly showSlot = computed(\n () => this.activeCount() > 0 || this.failedCount() > 0,\n );\n\n protected readonly slotShowsFailureOnly = computed(\n () => this.activeCount() === 0 && this.failedCount() > 0,\n );\n\n protected readonly slotLabelKey = computed(() => {\n if (this.slotShowsFailureOnly()) {\n return this.failedCount() === 1\n ? '@general:background-operation.slot.failed-single'\n : '@general:background-operation.slot.failed-multiple';\n }\n\n return this.activeCount() === 1\n ? '@general:background-operation.slot.single'\n : '@general:background-operation.slot.multiple';\n });\n\n protected readonly slotLabelParams = computed(() => ({\n count: this.slotShowsFailureOnly() ? this.failedCount() : this.activeCount(),\n }));\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (showSlot()) {\n <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger>\n <ax-icon class=\"operation-slot__icon\">\n @if (slotShowsFailureOnly()) {\n <i class=\"fa-light fa-circle-exclamation\"></i>\n } @else {\n <i class=\"fa-light fa-spinner fa-spin\"></i>\n }\n </ax-icon>\n <span class=\"operation-slot__text\">\n {{ slotLabelKey() | translate: { params: slotLabelParams() } | async }}\n </span>\n </button>\n\n <ax-popover [target]=\"operationTrigger\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-rounded-md ax-w-full\">\n <axp-background-operation-panel (onClosePopover)=\"closePopover()\"></axp-background-operation-panel>\n </div>\n </ax-popover>\n}\n","import { 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 { axpIsEntityDetailsPath, axpIsEntityListPath } from '../../utils/app-path-navigation.util';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuRouteMatchResult {\n item: AXPMenuItem;\n /** Parent menu items from root down to the direct parent of the matched item. */\n ancestors: AXPMenuItem[];\n isPartialMatch: boolean;\n}\n\nconst DEFAULT_TRAILING_SEGMENTS = ['list', 'view', 'edit', 'create'];\n\ninterface EntityRouteKey {\n app: string;\n module: string;\n entity: string;\n /** Segment index after the entity name (first segment that is not part of the entity key). */\n entityEndIndex: number;\n}\n\n//#region ---- Entity Route Helpers ----\n\n/**\n * Parses `/{app}/m/{module}/e/{entity}/...` routes into a stable entity key.\n */\nfunction axpParseEntityRouteKey(segments: string[]): EntityRouteKey | null {\n const mIndex = segments.indexOf('m');\n const eIndex = segments.indexOf('e');\n\n if (mIndex < 1 || eIndex <= mIndex + 1 || eIndex + 1 >= segments.length) {\n return null;\n }\n\n return {\n app: segments[mIndex - 1],\n module: segments[mIndex + 1],\n entity: segments[eIndex + 1],\n entityEndIndex: eIndex + 2,\n };\n}\n\nfunction axpEntityRouteKeysEqual(left: EntityRouteKey, right: EntityRouteKey): boolean {\n return left.app === right.app && left.module === right.module && left.entity === right.entity;\n}\n\n/**\n * Matches entity list menu entries against list/detail/create/edit routes for the same entity.\n */\nfunction axpTryMatchEntityMenuRoute(\n itemSegments: string[],\n pathSegments: string[],\n currentBase: string,\n): { isMatch: boolean; isPartial: boolean } | null {\n const menuEntity = axpParseEntityRouteKey(itemSegments);\n const currentEntity = axpParseEntityRouteKey(pathSegments);\n\n if (!menuEntity || !currentEntity || !axpEntityRouteKeysEqual(menuEntity, currentEntity)) {\n return null;\n }\n\n const isPartial =\n pathSegments.length > menuEntity.entityEndIndex ||\n axpIsEntityDetailsPath(currentBase) ||\n !axpIsEntityListPath(currentBase);\n\n return { isMatch: true, isPartial };\n}\n\n//#endregion\n\n/**\n * Compares a menu item path with the current browser path.\n * Mirrors the matching rules used when selecting the active menu item.\n */\nexport function axpMenuPathsMatch(\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): { isMatch: boolean; isPartial: boolean } {\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const entityMatch = axpTryMatchEntityMenuRoute(itemSegments, pathSegments, `/${currentBase}`);\n if (entityMatch) {\n return entityMatch;\n }\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--;\n }\n\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n let isPrefix = true;\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n const isPartialMatch = effectiveMenuLength < pathLength;\n const isExactMatch = effectiveMenuLength === pathLength;\n\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentNoHash.split('?')[1] ?? '');\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 const menuEntity = axpParseEntityRouteKey(itemSegments);\n if (menuEntity) {\n effectiveMenuLength = menuEntity.entityEndIndex;\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 { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks visibility for a menu branch, including ancestor policies.\n * Parent module features and permissions must pass before child routes are accessible.\n */\n isMenuBranchVisible(item: AXPMenuItem, ancestors: AXPMenuItem[] = []): boolean {\n for (const menuItem of [...ancestors, item]) {\n if (!this.isItemVisible(menuItem)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","//#region ---- Imports ----\n\nimport { 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 { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuKeyboardShortcutService } from './menu-keyboard-shortcuts.service';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const match = axpFindMenuItemByRoute(store.items(), path, ['list', 'view', 'edit', 'create']);\n patchState(store, {\n selectedMenuItem: {\n item: match?.item ?? null,\n isFullMatch: match ? !match.isPartialMatch : false,\n },\n });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem().item;\n if (!selectedItem) {\n return false;\n }\n\n if (item === selectedItem || (item.name && item.name === selectedItem.name)) {\n return true;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (\n currentItem.children?.some(\n (child) => child === targetItem || (child.name && child.name === targetItem.name),\n )\n ) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return findParent(item, selectedItem);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService), menuKeyboardShortcuts = inject(AXPMenuKeyboardShortcutService), router = inject(Router)) => {\n let reloadSubscription: any;\n\n const applyMenuItems = (items: AXPMenuItem[]): void => {\n patchState(store, { items });\n menuKeyboardShortcuts.sync(items);\n store.selectMenuItemByRoute(router.url);\n };\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n applyMenuItems(await menuProviderService.items());\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n applyMenuItems(await menuProviderService.items());\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { defaultTo } from 'lodash-es';\n\n//#region ---- Tab Key ----\n\n/** Query params ignored when building a tab dedupe key. */\nconst IGNORED_QUERY_KEYS = new Set(['_ts']);\n\n/**\n * Builds a stable tab key from a router URL.\n * Path segments define identity; query params are excluded so the same entity record\n * or list reuses one tab even when filters or refresh tokens change.\n */\nexport function axpBuildTabKey(url: string): string {\n const normalized = normalizeRouterUrl(url);\n const pathOnly = normalized.split('?')[0].split('#')[0];\n return pathOnly;\n}\n\n/** Normalizes a router URL for storage and navigation. */\nexport function normalizeRouterUrl(url: string): string {\n const trimmed = url.trim();\n if (!trimmed.length) {\n return '/';\n }\n\n const withLeadingSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n const [pathAndFragment, queryString = ''] = withLeadingSlash.split('?');\n const [pathPart, fragment = ''] = pathAndFragment.split('#');\n\n const normalizedPath = pathPart.replace(/\\/+$/, '') || '/';\n const filteredQuery = filterQueryString(queryString);\n\n let result = normalizedPath;\n if (filteredQuery) {\n result += `?${filteredQuery}`;\n }\n if (fragment) {\n result += `#${fragment}`;\n }\n return result;\n}\n\nfunction filterQueryString(queryString: string): string {\n if (!queryString) {\n return '';\n }\n\n const params = new URLSearchParams(queryString);\n const kept: string[] = [];\n params.forEach((value, key) => {\n if (!IGNORED_QUERY_KEYS.has(key)) {\n kept.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n });\n kept.sort();\n return kept.join('&');\n}\n\n/** Human-readable fallback title from the URL path. */\nexport function axpFallbackTabTitle(url: string): string {\n const pathOnly = url.split('?')[0].split('#')[0];\n const segments = pathOnly.split('/').filter(Boolean);\n const last = defaultTo(segments[segments.length - 1], 'Page');\n return decodeURIComponent(last);\n}\n\n//#endregion\n","//#region ---- Types ----\n\nexport type AXPNavigationMode = 'simple' | 'tabular';\n\nexport const AXP_HOME_TAB_KEY = 'axp:home';\n\n/** Route `data` key for tab-navigation behavior (`data.tab`). */\nexport const AXP_TAB_ROUTE_DATA_KEY = 'tab';\n\n/**\n * Set `data.tab = true` on the route that should act as the tab boundary.\n * Child navigations under this route update the same tab rather than opening a new one.\n */\nexport type AXPTabRouteData = true;\n\nexport interface AXPTabDescriptor {\n /** Stable dedupe key derived from the route (path-based, query excluded). */\n key: string;\n /** Full router URL including query string and fragment. */\n url: string;\n title: string;\n /** Resolved breadcrumb segments used for tab chrome (leaf/prefix); avoids parsing joined titles. */\n titleSegments?: string[];\n icon?: string;\n pinned: boolean;\n closable: boolean;\n /** Timestamp used for LRU eviction when max tabs is reached. */\n openedAt: number;\n /** Updated whenever the tab becomes active. */\n lastActivatedAt: number;\n}\n\nexport interface AXPTabSessionState {\n tabs: AXPTabDescriptor[];\n activeTabKey: string | null;\n}\n\n/** Optional hook for confirming closure of a cached background tab (no router navigation). */\nexport interface AXPTabCloseConfirm {\n onBeforeTabClose(): boolean | Promise<boolean>;\n}\n\n//#endregion\n","import { ActivatedRouteSnapshot, Router, Routes } from '@angular/router';\nimport { normalizeRouterUrl } from './tab-key.util';\nimport { AXP_TAB_ROUTE_DATA_KEY } from './tab-navigation.types';\n\n//#region ---- Route Data ----\n\n/** True when the route declares itself as a scoped tab root (`data.tab = true`). */\nexport function axpHasTabScope(data: Record<string, unknown> | undefined): boolean {\n return data?.[AXP_TAB_ROUTE_DATA_KEY] === true;\n}\n\n//#endregion\n\n//#region ---- Snapshot Resolution ----\n\n/** Resolved URL path for a snapshot (no query or fragment). */\nexport function axpPathFromSnapshot(snapshot: ActivatedRouteSnapshot): string {\n const segments = snapshot.pathFromRoot\n .flatMap((entry) => entry.url.map((segment) => segment.path))\n .filter(Boolean);\n return segments.length ? `/${segments.join('/')}` : '/';\n}\n\n/** Returns the leaf snapshot under the router state root. */\nexport function axpGetLeafRouteSnapshot(root: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n let route = root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n}\n\n/**\n * Resolves the tab dedupe key from an activated route tree.\n * Uses the nearest ancestor with `data.tab = true`; otherwise the leaf path.\n */\nexport function axpResolveTabKeyFromSnapshot(leaf: ActivatedRouteSnapshot): string {\n const chain = leaf.pathFromRoot;\n\n for (let index = chain.length - 1; index >= 0; index--) {\n const snapshot = chain[index];\n if (axpHasTabScope(snapshot.data)) {\n return axpPathFromSnapshot(snapshot);\n }\n }\n\n return axpPathFromSnapshot(leaf);\n}\n\n//#endregion\n\n//#region ---- Router / URL Resolution ----\n\n/**\n * Resolves a tab key for the given URL (or the current router URL).\n * Prefers the live route snapshot when it matches the target URL; otherwise matches route config.\n */\nexport function axpResolveTabKey(router: Router, url?: string): string {\n const normalized = normalizeRouterUrl(url ?? router.url);\n const pathOnly = normalized.split('?')[0].split('#')[0];\n\n const currentPath = normalizeRouterUrl(router.url).split('?')[0].split('#')[0];\n if (!url || pathOnly === currentPath) {\n const leaf = axpGetLeafRouteSnapshot(router.routerState.snapshot.root);\n return axpResolveTabKeyFromSnapshot(leaf);\n }\n\n const fromConfig = axpResolveTabKeyFromRouteConfig(router.config, pathOnly);\n if (fromConfig) {\n return fromConfig;\n }\n\n return pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n}\n\n//#endregion\n\n//#region ---- Route Config Matching ----\n\ninterface MatchedRouteLevel {\n mergedData: Record<string, unknown>;\n path: string;\n}\n\n/**\n * Matches a URL path against registered routes and resolves the tab key from `data.tab`.\n */\nexport function axpResolveTabKeyFromRouteConfig(routes: Routes, pathOnly: string): string | null {\n const normalized = pathOnly.startsWith('/') ? pathOnly.replace(/\\/+$/, '') || '/' : `/${pathOnly}`.replace(/\\/+$/, '') || '/';\n const segments = normalized === '/' ? [] : normalized.split('/').filter(Boolean);\n const chain = matchRouteConfigChain(routes, segments, 0, {}, []);\n\n if (!chain?.length) {\n return null;\n }\n\n for (let index = chain.length - 1; index >= 0; index--) {\n const level = chain[index];\n if (axpHasTabScope(level.mergedData)) {\n return level.path;\n }\n }\n\n return chain[chain.length - 1]?.path ?? null;\n}\n\nfunction matchRouteConfigChain(\n routes: Routes,\n segments: string[],\n startIndex: number,\n inheritedData: Record<string, unknown>,\n chain: MatchedRouteLevel[],\n): MatchedRouteLevel[] | null {\n let bestMatch: MatchedRouteLevel[] | null = null;\n\n for (const route of routes) {\n if (route.redirectTo) {\n continue;\n }\n\n const segmentMatch = matchRoutePath(route.path ?? '', segments, startIndex);\n if (!segmentMatch) {\n continue;\n }\n\n const pathSegments = [...segments.slice(0, startIndex), ...segments.slice(startIndex, startIndex + segmentMatch.consumed)];\n const path = pathSegments.length ? `/${pathSegments.join('/')}` : '/';\n const mergedData: Record<string, unknown> = { ...inheritedData, ...(route.data ?? {}) };\n const level: MatchedRouteLevel = { mergedData, path };\n const nextChain = [...chain, level];\n const nextIndex = startIndex + segmentMatch.consumed;\n\n if (route.children?.length) {\n const childMatch = matchRouteConfigChain(route.children, segments, nextIndex, mergedData, nextChain);\n if (childMatch && (!bestMatch || childMatch.length > bestMatch.length)) {\n bestMatch = childMatch;\n }\n }\n\n if (nextIndex === segments.length) {\n if (!bestMatch || nextChain.length > bestMatch.length) {\n bestMatch = nextChain;\n }\n }\n }\n\n return bestMatch;\n}\n\nfunction matchRoutePath(\n routePath: string,\n segments: string[],\n startIndex: number,\n): { consumed: number } | null {\n if (routePath === '**') {\n return { consumed: Math.max(0, segments.length - startIndex) };\n }\n\n const parts = routePath.split('/').filter(Boolean);\n if (!parts.length) {\n return { consumed: 0 };\n }\n\n let consumed = 0;\n for (const part of parts) {\n const segment = segments[startIndex + consumed];\n if (segment === undefined) {\n return null;\n }\n\n if (part.startsWith(':') || part === segment) {\n consumed++;\n continue;\n }\n\n return null;\n }\n\n return { consumed };\n}\n\n//#endregion\n","//#region ---- Tab Title ----\n\nexport const AXP_TAB_BREADCRUMB_JOIN_SEPARATOR = ' - ';\n\nexport interface AXPTabTitleParts {\n prefix: string | null;\n leaf: string;\n}\n\n/** Joins breadcrumb segments for the stored tab title and tooltip full label. */\nexport function axpJoinTabTitleSegments(segments: string[]): string {\n return segments.join(AXP_TAB_BREADCRUMB_JOIN_SEPARATOR);\n}\n\n/** Derives compact tab label parts from structured breadcrumb segments. */\nexport function axpResolveTabTitleParts(\n tab: { titleSegments?: string[] },\n fallbackTitle: string,\n): AXPTabTitleParts {\n const segments = tab.titleSegments;\n if (!segments?.length) {\n return { prefix: null, leaf: fallbackTitle };\n }\n\n if (segments.length === 1) {\n return { prefix: null, leaf: segments[0] };\n }\n\n return {\n prefix: axpJoinTabTitleSegments(segments.slice(0, -1)),\n leaf: segments[segments.length - 1],\n };\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPTabStructuredPreview } from './tab-preview.types';\n\n//#region ---- Tab Preview Service ----\n\n/**\n * In-memory structured previews for tab hover cards and dirty indicators.\n * Populated by active/cached pages via {@link AXPPageLayoutBaseComponent}.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabPreviewService {\n //#region ---- State ----\n\n private readonly previewMap = signal<Readonly<Record<string, AXPTabStructuredPreview>>>({});\n\n readonly previews = this.previewMap.asReadonly();\n\n //#endregion\n\n //#region ---- Public API ----\n\n setPreview(key: string, preview: AXPTabStructuredPreview): void {\n this.previewMap.update((current) => ({\n ...current,\n [key]: preview,\n }));\n }\n\n patchPreview(key: string, patch: Partial<AXPTabStructuredPreview>): void {\n this.previewMap.update((current) => {\n const existing = current[key];\n if (!existing) {\n if (!patch.url) {\n return current;\n }\n\n return {\n ...current,\n [key]: {\n title: patch.title ?? '',\n url: patch.url,\n icon: patch.icon,\n subtitle: patch.subtitle,\n isDirty: patch.isDirty ?? false,\n breadcrumbTrail: patch.breadcrumbTrail ?? [],\n },\n };\n }\n\n return {\n ...current,\n [key]: {\n ...existing,\n ...patch,\n },\n };\n });\n }\n\n getPreview(key: string): AXPTabStructuredPreview | undefined {\n return this.previewMap()[key];\n }\n\n isTabDirty(key: string): boolean {\n return !!this.previewMap()[key]?.isDirty;\n }\n\n clearPreview(key: string): void {\n this.previewMap.update((current) => {\n if (!(key in current)) {\n return current;\n }\n\n const next = { ...current };\n delete next[key];\n return next;\n });\n }\n\n clearPreviews(keys: Iterable<string>): void {\n const keySet = new Set(keys);\n if (!keySet.size) {\n return;\n }\n\n this.previewMap.update((current) => {\n const next: Record<string, AXPTabStructuredPreview> = { ...current };\n let changed = false;\n\n for (const key of keySet) {\n if (key in next) {\n delete next[key];\n changed = true;\n }\n }\n\n return changed ? next : current;\n });\n }\n\n clearAll(): void {\n this.previewMap.set({});\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Tab Route Policy ----\n\nconst EXCLUDED_PATH_PREFIXES = ['/auth', '/error'] as const;\n\nconst EXCLUDED_PATH_PATTERNS: RegExp[] = [\n /^\\/assessment\\/fill\\//i,\n /^\\/forms\\//i,\n];\n\n/**\n * Returns true when the URL represents an in-app page that may appear in the tab bar.\n */\nexport function axpIsTabEligibleUrl(url: string): boolean {\n const pathOnly = url.split('?')[0].split('#')[0].trim();\n if (!pathOnly || pathOnly === '/') {\n return false;\n }\n\n const normalized = pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n\n if (EXCLUDED_PATH_PREFIXES.some((prefix) => normalized.startsWith(prefix))) {\n return false;\n }\n\n if (EXCLUDED_PATH_PATTERNS.some((pattern) => pattern.test(normalized))) {\n return false;\n }\n\n return true;\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { computed, DestroyRef, effect, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationExtras, Router } from '@angular/router';\nimport { cloneDeep, defaultTo } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPHomePageService } from '../home-page/home-page.service';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { AXPSettingsService } from '../settings/settings.service';\nimport { AXPUnsavedChangesConfirmService } from '../settings/unsaved-changes-confirm.service';\nimport { axpNavigateAppPath } from '../utils/app-path-navigation.util';\nimport { axpFallbackTabTitle, normalizeRouterUrl } from './tab-key.util';\nimport { axpJoinTabTitleSegments } from './tab-title.util';\nimport {\n AXP_HOME_TAB_KEY,\n type AXPNavigationMode,\n type AXPTabCloseConfirm,\n type AXPTabDescriptor,\n type AXPTabSessionState,\n} from './tab-navigation.types';\nimport { AXPTabPreviewService } from './tab-preview.service';\nimport { AXPTabRouteCacheRegistry } from './tab-route-cache.registry';\nimport { axpIsTabEligibleUrl } from './tab-route-policy';\nimport { axpResolveTabKey } from './tab-route-resolver';\n\n//#region ---- Constants ----\n\nconst SESSION_STORAGE_PREFIX = 'AXP_TAB_NAV';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabNavigationService {\n //#region ---- Services & Dependencies ----\n\n private readonly router = inject(Router);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly deviceService = inject(AXPDeviceService);\n private readonly menuService = inject(AXPMenuService);\n private readonly homePageService = inject(AXPHomePageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly routeCacheRegistry = inject(AXPTabRouteCacheRegistry);\n private readonly tabPreviewService = inject(AXPTabPreviewService);\n private readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly navigationMode = signal<AXPNavigationMode>('simple');\n private readonly maxOpenTabs = signal(5);\n private readonly tabs = signal<AXPTabDescriptor[]>([]);\n private readonly activeTabKey = signal<string | null>(null);\n private suppressNavigationSync = false;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Effective mode: mobile always uses simple navigation. */\n readonly effectiveMode = computed<AXPNavigationMode>(() => {\n if (this.deviceService.isSmall()) {\n return 'simple';\n }\n return this.navigationMode();\n });\n\n readonly isTabBarVisible = computed(() => this.effectiveMode() === 'tabular' && this.tabs().length > 0);\n\n readonly tabList = this.tabs.asReadonly();\n readonly activeKey = this.activeTabKey.asReadonly();\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n void this.loadSettings();\n this.bindRouterEvents();\n this.bindSettingsChanges();\n this.bindSessionChanges();\n this.bindRouteCacheSync();\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Navigates to a path, opening or activating a tab when tabular mode is active. */\n async navigate(path: string, extras?: NavigationExtras): Promise<boolean> {\n const normalizedPath = normalizeRouterUrl(path);\n\n if (this.effectiveMode() === 'simple' || !axpIsTabEligibleUrl(normalizedPath)) {\n return axpNavigateAppPath(this.router, normalizedPath, extras);\n }\n\n await this.openOrActivateTab(normalizedPath);\n return true;\n }\n\n /** Opens a tab or activates an existing tab with the same key. */\n async openOrActivateTab(url: string, title?: string): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n await axpNavigateAppPath(this.router, url);\n return;\n }\n\n const normalizedUrl = normalizeRouterUrl(url);\n if (!axpIsTabEligibleUrl(normalizedUrl)) {\n await axpNavigateAppPath(this.router, normalizedUrl);\n return;\n }\n\n await this.ensureHomeTab();\n\n if (this.isHomePageUrl(normalizedUrl)) {\n await this.activateTabKey(AXP_HOME_TAB_KEY, normalizedUrl);\n return;\n }\n\n const resolvedKey = axpResolveTabKey(this.router, normalizedUrl);\n const existing = this.findTabForUrl(normalizedUrl);\n\n if (existing) {\n if (existing.key !== resolvedKey) {\n this.migrateTabKey(existing.key, resolvedKey);\n }\n this.updateTabUrl(resolvedKey, normalizedUrl);\n await this.activateTabKey(resolvedKey, normalizedUrl);\n return;\n }\n\n // Navigate first so scoped tab keys (`data.tab`) resolve from the live route snapshot.\n this.suppressNavigationSync = true;\n try {\n await axpNavigateAppPath(this.router, normalizedUrl);\n const key = axpResolveTabKey(this.router);\n const postNavExisting = this.findTabForUrl(normalizedUrl);\n\n if (postNavExisting) {\n if (postNavExisting.key !== key) {\n this.migrateTabKey(postNavExisting.key, key);\n }\n this.updateTabUrl(key, normalizedUrl);\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n return;\n }\n\n this.insertTab(this.createTabDescriptor(normalizedUrl, title, key));\n this.activeTabKey.set(key);\n this.persistSession();\n } finally {\n this.suppressNavigationSync = false;\n }\n }\n\n /**\n * Activates a tab and navigates to its URL. The previously active page is detached and cached by\n * the reuse strategy, so its state is preserved; this tab's cached instance is reattached when\n * available instead of being re-rendered.\n *\n * @param suspendDeactivateGuard When true (default for tab switches), unsaved-changes prompts are\n * skipped so switching tabs keeps a dirty page alive. Closing a tab passes false to keep the prompt.\n */\n async activateTabKey(key: string, urlOverride?: string, suspendDeactivateGuard = true): Promise<void> {\n const tab = this.tabs().find((item) => item.key === key);\n if (!tab) {\n return;\n }\n\n const targetUrl = urlOverride ?? tab.url;\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n\n const navigate = async (): Promise<void> => {\n this.suppressNavigationSync = true;\n try {\n await this.router.navigateByUrl(targetUrl);\n } finally {\n this.suppressNavigationSync = false;\n }\n };\n\n if (suspendDeactivateGuard) {\n await this.routeCacheRegistry.runWithSuspendedDeactivateGuards(navigate);\n return;\n }\n\n await navigate();\n }\n\n /** Closes a tab and navigates to a neighbor when the active tab is closed. */\n async closeTab(key: string): Promise<void> {\n await this.closeTabs([key]);\n }\n\n /** Closes every closable tab except the given key (pinned tabs are kept). */\n async closeOtherTabs(keepKey: string): Promise<void> {\n const keys = this.tabs()\n .filter((tab) => tab.closable && !tab.pinned && tab.key !== keepKey)\n .map((tab) => tab.key);\n await this.closeTabs(keys);\n }\n\n /** Closes all closable tabs (pinned tabs are kept). */\n async closeAllTabs(): Promise<void> {\n const keys = this.tabs()\n .filter((tab) => tab.closable && !tab.pinned)\n .map((tab) => tab.key);\n await this.closeTabs(keys);\n }\n\n /** Toggles whether a tab stays pinned in the strip (home tab is always pinned). */\n toggleTabPinned(key: string): void {\n if (key === AXP_HOME_TAB_KEY) {\n return;\n }\n\n this.tabs.update((items) => {\n const updated = items.map((tab) => {\n if (tab.key !== key) {\n return tab;\n }\n\n const pinned = !tab.pinned;\n return {\n ...tab,\n pinned,\n closable: !pinned,\n };\n });\n\n return this.normalizeTabOrder(updated);\n });\n this.persistSession();\n }\n\n /**\n * Reorders tabs after drag-and-drop. Home stays first; pinned and unpinned tabs cannot cross groups.\n */\n reorderTabs(previousIndex: number, currentIndex: number): void {\n if (previousIndex === currentIndex) {\n return;\n }\n\n const items = this.tabs();\n if (previousIndex < 0 || currentIndex < 0 || previousIndex >= items.length || currentIndex >= items.length) {\n return;\n }\n\n const moving = items[previousIndex];\n if (moving.key === AXP_HOME_TAB_KEY) {\n return;\n }\n\n const lastPinnedIndex = this.getLastPinnedTabIndex(items);\n let targetIndex = currentIndex;\n\n if (moving.pinned) {\n if (targetIndex === 0) {\n return;\n }\n targetIndex = Math.max(1, Math.min(targetIndex, lastPinnedIndex));\n } else {\n const firstUnpinnedIndex = lastPinnedIndex + 1;\n if (firstUnpinnedIndex >= items.length) {\n return;\n }\n targetIndex = Math.max(firstUnpinnedIndex, Math.min(targetIndex, items.length - 1));\n }\n\n if (previousIndex === targetIndex) {\n return;\n }\n\n const next = [...items];\n const [removed] = next.splice(previousIndex, 1);\n next.splice(targetIndex, 0, removed);\n this.tabs.set(next);\n this.persistSession();\n }\n\n /** Updates a tab title from the current page chrome (e.g. breadcrumb trail). */\n syncTabTitle(key: string, titleOrSegments: string | string[]): void {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n if (!this.tabs().some((tab) => tab.key === key)) {\n return;\n }\n\n const segments = Array.isArray(titleOrSegments) ? titleOrSegments : undefined;\n const title = (Array.isArray(titleOrSegments) ? axpJoinTabTitleSegments(titleOrSegments) : titleOrSegments).trim();\n if (!title || this.isGenericHomeTitle(title)) {\n return;\n }\n\n this.updateTabTitle(key, title, segments);\n }\n\n /** Updates a tab icon from the current page chrome or menu metadata. */\n syncTabIcon(key: string, icon: string): void {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n if (!this.tabs().some((tab) => tab.key === key)) {\n return;\n }\n\n const normalized = icon.trim();\n if (!normalized) {\n return;\n }\n\n this.updateTabIcon(key, normalized);\n }\n\n //#endregion\n\n //#region ---- Bulk Tab Close ----\n\n /** Closes multiple tabs in one update; navigates once when the active tab is closed. */\n private async closeTabs(keys: string[]): Promise<void> {\n const uniqueKeys = [...new Set(keys)];\n if (!uniqueKeys.length) {\n return;\n }\n\n const closableKeySet = new Set(\n uniqueKeys.filter((key) => {\n const tab = this.tabs().find((item) => item.key === key);\n return !!tab?.closable && !tab.pinned;\n }),\n );\n\n if (!closableKeySet.size) {\n return;\n }\n\n const activeKey = this.activeTabKey();\n const backgroundKeys = [...closableKeySet].filter((key) => key !== activeKey);\n\n for (const key of backgroundKeys) {\n if (!(await this.confirmBackgroundTabClose(key))) {\n closableKeySet.delete(key);\n }\n }\n\n if (!closableKeySet.size) {\n return;\n }\n\n const currentTabs = this.tabs();\n const wasActiveClosed = !!activeKey && closableKeySet.has(activeKey);\n const closedActiveIndex = wasActiveClosed ? currentTabs.findIndex((item) => item.key === activeKey) : -1;\n const nextTabs = currentTabs.filter((item) => !closableKeySet.has(item.key));\n\n if (wasActiveClosed) {\n const navigated = await this.navigateAwayBeforeClosingActiveTab(closedActiveIndex, nextTabs);\n if (!navigated) {\n return;\n }\n }\n\n this.tabs.set(nextTabs);\n this.tabPreviewService.clearPreviews(closableKeySet);\n this.persistSession();\n }\n\n //#endregion\n\n //#region ---- Tab Close Helpers ----\n\n /**\n * Prompts before closing a cached background tab. Uses the page's {@link AXPTabCloseConfirm}\n * hook when available, otherwise falls back to the tab preview dirty flag.\n */\n private async confirmBackgroundTabClose(key: string): Promise<boolean> {\n const instance = this.routeCacheRegistry.getComponentInstance<AXPTabCloseConfirm>(key);\n if (instance && typeof instance.onBeforeTabClose === 'function') {\n return instance.onBeforeTabClose();\n }\n\n return this.unsavedChangesConfirm.confirmIfDirty(this.tabPreviewService.isTabDirty(key), {\n approveLeaveOnConfirm: false,\n });\n }\n\n //#endregion\n\n //#region ---- Tab Close Navigation ----\n\n /**\n * Navigates away from the active tab before it is removed so canDeactivate runs while the tab is still visible.\n * Returns false when navigation was cancelled (e.g. unsaved-changes confirmation declined).\n */\n private async navigateAwayBeforeClosingActiveTab(\n closedActiveIndex: number,\n remainingTabs: AXPTabDescriptor[],\n ): Promise<boolean> {\n const fallbackIndex = this.resolveFallbackTabIndex(closedActiveIndex, remainingTabs);\n const fallback = fallbackIndex >= 0 ? remainingTabs[fallbackIndex] : undefined;\n\n let targetKey: string;\n let targetUrl: string;\n\n if (fallback) {\n targetKey = fallback.key;\n targetUrl = fallback.url;\n } else {\n await this.ensureHomeTab();\n const home = this.tabs().find((item) => item.key === AXP_HOME_TAB_KEY);\n if (!home) {\n return false;\n }\n targetKey = home.key;\n targetUrl = home.url;\n }\n\n this.suppressNavigationSync = true;\n try {\n const navigated = await this.router.navigateByUrl(targetUrl);\n if (!navigated) {\n return false;\n }\n } finally {\n this.suppressNavigationSync = false;\n }\n\n this.activeTabKey.set(targetKey);\n this.touchTab(targetKey);\n return true;\n }\n\n /** Prefers the tab to the right after removal, then the tab to the left (browser-like). */\n private resolveFallbackTabIndex(closedIndex: number, remainingTabs: AXPTabDescriptor[]): number {\n if (!remainingTabs.length) {\n return -1;\n }\n\n if (closedIndex < remainingTabs.length) {\n return closedIndex;\n }\n\n return closedIndex - 1;\n }\n\n //#endregion\n\n //#region ---- Route Cache Sync ----\n\n /**\n * Keeps the route cache registry aligned with the current navigation mode and the set of open\n * tabs. Cached page instances for closed/evicted tabs are destroyed by the registry.\n */\n private bindRouteCacheSync(): void {\n effect(() => {\n this.routeCacheRegistry.setEnabled(this.effectiveMode() === 'tabular');\n this.routeCacheRegistry.syncOpenKeys(\n this.tabs().map((tab) => tab.key),\n this.tabs().map((tab) => tab.url),\n );\n });\n }\n\n //#endregion\n\n //#region ---- Router Sync ----\n\n private bindRouterEvents(): void {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((event: NavigationEnd) => {\n void this.handleNavigationEnd(event.urlAfterRedirects);\n });\n }\n\n private async handleNavigationEnd(url: string): Promise<void> {\n if (this.suppressNavigationSync) {\n return;\n }\n\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n const normalizedUrl = normalizeRouterUrl(url);\n if (!axpIsTabEligibleUrl(normalizedUrl)) {\n return;\n }\n\n await this.ensureHomeTab();\n\n if (this.isHomePageUrl(normalizedUrl)) {\n this.activateHomeTabForUrl(normalizedUrl);\n return;\n }\n\n const key = axpResolveTabKey(this.router, normalizedUrl);\n const existing = this.findTabForUrl(normalizedUrl);\n\n if (existing) {\n if (existing.key !== key) {\n this.migrateTabKey(existing.key, key);\n }\n this.updateTabUrl(key, normalizedUrl);\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n return;\n }\n\n this.insertTab(this.createTabDescriptor(normalizedUrl, undefined, key));\n this.activeTabKey.set(key);\n this.persistSession();\n }\n\n //#endregion\n\n //#region ---- Settings ----\n\n private async loadSettings(): Promise<void> {\n const [mode, maxTabs] = await Promise.all([\n this.settingsService.get<AXPNavigationMode>(AXPCommonSettings.NavigationMode),\n this.settingsService.get<number>(AXPCommonSettings.MaxOpenTabs),\n ]);\n\n this.navigationMode.set(mode === 'tabular' ? 'tabular' : 'simple');\n this.maxOpenTabs.set(this.normalizeMaxTabs(maxTabs));\n await this.restoreSessionIfNeeded();\n }\n\n private bindSettingsChanges(): void {\n this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.includes(AXPCommonSettings.NavigationMode)) {\n const raw = event.values[AXPCommonSettings.NavigationMode] as AXPNavigationMode;\n const newMode: AXPNavigationMode = raw === 'tabular' ? 'tabular' : 'simple';\n if (newMode !== this.navigationMode()) {\n this.navigationMode.set(newMode);\n if (this.effectiveMode() === 'simple') {\n this.clearSession();\n } else {\n void this.ensureHomeTab().then(() => this.syncCurrentRouteAsTab());\n }\n }\n }\n\n if (event.keys.includes(AXPCommonSettings.MaxOpenTabs)) {\n this.maxOpenTabs.set(this.normalizeMaxTabs(event.values[AXPCommonSettings.MaxOpenTabs] as number));\n this.enforceMaxTabs();\n this.persistSession();\n }\n });\n }\n\n private bindSessionChanges(): void {\n this.sessionService.user$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.restoreSessionIfNeeded();\n });\n }\n\n //#endregion\n\n //#region ---- Tab Management ----\n\n private async ensureHomeTab(): Promise<void> {\n const homePath = this.resolveHomePath();\n if (!homePath) {\n return;\n }\n\n const homeUrl = normalizeRouterUrl(homePath);\n const homeKey = AXP_HOME_TAB_KEY;\n const existing = this.tabs().find((tab) => tab.key === homeKey);\n\n if (existing) {\n this.tabs.update((items) =>\n items.map((tab) =>\n tab.key === homeKey\n ? {\n ...tab,\n url: homeUrl,\n title: this.isGenericHomeTitle(tab.title) ? this.resolveHomeTitle() : tab.title,\n icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n }\n : tab,\n ),\n );\n return;\n }\n\n const now = Date.now();\n const homeTab: AXPTabDescriptor = {\n key: homeKey,\n url: homeUrl,\n title: this.resolveHomeTitle(),\n icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n pinned: true,\n closable: false,\n openedAt: now,\n lastActivatedAt: now,\n };\n\n this.tabs.update((items) => this.normalizeTabOrder([homeTab, ...items.filter((tab) => tab.key !== homeKey)]));\n }\n\n private insertTab(tab: AXPTabDescriptor): void {\n if (this.isHomePageUrl(tab.url)) {\n this.activateHomeTabForUrl(tab.url);\n return;\n }\n\n this.tabs.update((items) => {\n const withoutDuplicate = items.filter((item) => {\n if (item.key === tab.key) {\n return false;\n }\n\n return axpResolveTabKey(this.router, item.url) !== tab.key;\n });\n return this.normalizeTabOrder([...withoutDuplicate, tab]);\n });\n this.enforceMaxTabs();\n }\n\n /** Home first; preserves session order for the remaining tabs. */\n private ensureHomeTabFirst(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n const others = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY);\n return home ? [home, ...others] : items;\n }\n\n private getLastPinnedTabIndex(items: ReadonlyArray<AXPTabDescriptor>): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index]?.pinned) {\n return index;\n }\n }\n\n return 0;\n }\n\n /** Home first, then other pinned tabs, then unpinned tabs (stable by openedAt within each group). */\n private normalizeTabOrder(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n const pinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && tab.pinned);\n const unpinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && !tab.pinned);\n const byOpenedAt = (a: AXPTabDescriptor, b: AXPTabDescriptor) => a.openedAt - b.openedAt;\n\n return [...(home ? [home] : []), ...pinned.sort(byOpenedAt), ...unpinned.sort(byOpenedAt)];\n }\n\n private enforceMaxTabs(): void {\n const limit = this.maxOpenTabs();\n let current = this.tabs();\n\n while (current.length > limit) {\n const evictionCandidate = [...current]\n .filter((tab) => tab.closable && !tab.pinned && tab.key !== this.activeTabKey())\n .filter((tab) => !this.tabPreviewService.isTabDirty(tab.key))\n .sort((a, b) => a.lastActivatedAt - b.lastActivatedAt)[0];\n\n if (!evictionCandidate) {\n break;\n }\n\n current = current.filter((tab) => tab.key !== evictionCandidate.key);\n }\n\n this.tabs.set(current);\n }\n\n private createTabDescriptor(url: string, title?: string, keyOverride?: string): AXPTabDescriptor {\n const now = Date.now();\n const key = keyOverride ?? axpResolveTabKey(this.router, url);\n return {\n key,\n url,\n title: title ?? this.resolveTabTitle(url),\n icon: this.resolveTabIcon(url),\n pinned: false,\n closable: true,\n openedAt: now,\n lastActivatedAt: now,\n };\n }\n\n /** Finds a tab by scoped key or legacy full-path key for the same URL. */\n private findTabForUrl(url: string): AXPTabDescriptor | undefined {\n if (this.isHomePageUrl(url)) {\n return this.tabs().find((tab) => tab.key === AXP_HOME_TAB_KEY);\n }\n\n const resolvedKey = axpResolveTabKey(this.router, url);\n return this.tabs().find(\n (tab) =>\n tab.key !== AXP_HOME_TAB_KEY &&\n (tab.key === resolvedKey || axpResolveTabKey(this.router, tab.url) === resolvedKey),\n );\n }\n\n /** True when the URL is the configured application home page (e.g. dashboard). */\n private isHomePageUrl(url: string): boolean {\n const homeUrl = this.resolveHomeUrl();\n if (!homeUrl) {\n return false;\n }\n\n return normalizeRouterUrl(url) === homeUrl;\n }\n\n private resolveHomeUrl(): string | null {\n const homePath = this.resolveHomePath();\n if (!homePath) {\n return null;\n }\n\n return normalizeRouterUrl(homePath);\n }\n\n /** Activates the pinned home tab for a home-page URL instead of opening a duplicate tab. */\n private activateHomeTabForUrl(url: string): void {\n this.updateTabUrl(AXP_HOME_TAB_KEY, normalizeRouterUrl(url));\n this.touchTab(AXP_HOME_TAB_KEY);\n this.activeTabKey.set(AXP_HOME_TAB_KEY);\n this.persistSession();\n }\n\n /** Drops non-home tabs that duplicate the home page URL after session restore. */\n private removeDuplicateHomeUrlTabs(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const homeUrl = this.resolveHomeUrl();\n if (!homeUrl) {\n return tabs;\n }\n\n return tabs.filter((tab) => tab.key === AXP_HOME_TAB_KEY || normalizeRouterUrl(tab.url) !== homeUrl);\n }\n\n /** Rewrites a tab key when route-scope resolution changes (e.g. profile sub-routes). */\n private migrateTabKey(fromKey: string, toKey: string): void {\n if (fromKey === toKey) {\n return;\n }\n\n if (this.activeTabKey() === fromKey) {\n this.activeTabKey.set(toKey);\n }\n\n this.tabs.update((items) => {\n const tab = items.find((item) => item.key === fromKey);\n if (!tab) {\n return items;\n }\n\n const without = items.filter((item) => item.key !== fromKey && item.key !== toKey);\n return this.normalizeTabOrder([...without, { ...tab, key: toKey }]);\n });\n }\n\n /** Collapses restored tabs that share the same scoped route key. */\n private normalizeRestoredTabKeys(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const byResolvedKey = new Map<string, AXPTabDescriptor>();\n\n for (const tab of tabs) {\n if (tab.key === AXP_HOME_TAB_KEY) {\n byResolvedKey.set(AXP_HOME_TAB_KEY, tab);\n continue;\n }\n\n const resolvedKey = axpResolveTabKey(this.router, tab.url);\n const normalized = { ...tab, key: resolvedKey };\n const existing = byResolvedKey.get(resolvedKey);\n\n if (!existing || normalized.lastActivatedAt > existing.lastActivatedAt) {\n byResolvedKey.set(resolvedKey, normalized);\n }\n }\n\n return [...byResolvedKey.values()];\n }\n\n private updateTabUrl(key: string, url: string): void {\n this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, url } : tab)));\n }\n\n private updateTabTitle(key: string, title: string, titleSegments?: string[]): void {\n this.tabs.update((items) =>\n items.map((tab) => {\n if (tab.key !== key) {\n return tab;\n }\n\n const segmentsUnchanged =\n tab.titleSegments === titleSegments ||\n (tab.titleSegments?.length === titleSegments?.length &&\n tab.titleSegments?.every((segment, index) => segment === titleSegments?.[index]));\n\n if (tab.title === title && segmentsUnchanged) {\n return tab;\n }\n\n return { ...tab, title, titleSegments };\n }),\n );\n this.persistSession();\n }\n\n private updateTabIcon(key: string, icon: string): void {\n this.tabs.update((items) => items.map((tab) => (tab.key === key && tab.icon !== icon ? { ...tab, icon } : tab)));\n this.persistSession();\n }\n\n private touchTab(key: string): void {\n const now = Date.now();\n this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, lastActivatedAt: now } : tab)));\n }\n\n private resolveTabTitle(url: string, fallback?: string): string {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (match?.item.text) {\n return match.item.text;\n }\n return fallback ?? axpFallbackTabTitle(url);\n }\n\n private resolveTabIcon(url: string, fallback = 'fa-light fa-window'): string {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (match?.item.icon?.trim()) {\n return match.item.icon.trim();\n }\n return fallback;\n }\n\n private resolveHomePath(): string {\n const current = this.homePageService.getCurrent();\n return current.path ? normalizeRouterUrl(current.path) : '';\n }\n\n private resolveHomeTitle(): string {\n const current = this.homePageService.getCurrent();\n return current.title || 'Home';\n }\n\n private isGenericHomeTitle(title: string): boolean {\n if (title === '@general:terms.interface.navigation.home') {\n return true;\n }\n\n const homeTitle = this.resolveHomeTitle().trim();\n return title === homeTitle;\n }\n\n private async syncCurrentRouteAsTab(): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n await this.ensureHomeTab();\n await this.handleNavigationEnd(this.router.url);\n }\n\n private normalizeMaxTabs(value: unknown): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n return 5;\n }\n return Math.min(20, Math.max(2, Math.round(parsed)));\n }\n\n //#endregion\n\n //#region ---- Session Persistence ----\n\n private sessionStorageKey(): string | null {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return null;\n }\n return `${SESSION_STORAGE_PREFIX}(${userId})`;\n }\n\n private persistSession(): void {\n const key = this.sessionStorageKey();\n if (!key || this.effectiveMode() === 'simple') {\n return;\n }\n\n const payload: AXPTabSessionState = {\n tabs: cloneDeep(this.tabs()),\n activeTabKey: this.activeTabKey(),\n };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n\n private clearSession(): void {\n const key = this.sessionStorageKey();\n if (key) {\n sessionStorage.removeItem(key);\n }\n this.tabs.set([]);\n this.activeTabKey.set(null);\n this.tabPreviewService.clearAll();\n }\n\n private async restoreSessionIfNeeded(): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n const storageKey = this.sessionStorageKey();\n if (!storageKey) {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n return;\n }\n\n const raw = sessionStorage.getItem(storageKey);\n if (!raw) {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n return;\n }\n\n try {\n const parsed = JSON.parse(raw) as AXPTabSessionState;\n const restoredTabs = this.removeDuplicateHomeUrlTabs(\n this.normalizeRestoredTabKeys(defaultTo(parsed.tabs, []).filter((tab) => tab?.key && tab?.url)),\n );\n this.tabs.set(this.ensureHomeTabFirst(restoredTabs));\n await this.ensureHomeTab();\n\n const activeKey = parsed.activeTabKey ?? this.tabs()[this.tabs().length - 1]?.key ?? AXP_HOME_TAB_KEY;\n this.activeTabKey.set(activeKey);\n\n const activeTab = this.tabs().find((tab) => tab.key === activeKey);\n if (activeTab && normalizeRouterUrl(this.router.url) !== normalizeRouterUrl(activeTab.url)) {\n this.suppressNavigationSync = true;\n try {\n await this.router.navigateByUrl(activeTab.url);\n } finally {\n this.suppressNavigationSync = false;\n }\n }\n } catch {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n }\n }\n\n //#endregion\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { DestroyRef, Injectable, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { axpResolveTabKey } from '../tab-navigation/tab-route-resolver';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\nimport type { AXPNavigationMode } from '../tab-navigation/tab-navigation.types';\n\ninterface AXPSimpleModePageTitleState {\n routeKey: string;\n title: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPBrowserTitleService {\n //#region ---- Services & Dependencies ----\n\n private readonly document = inject(DOCUMENT);\n private readonly translateService = inject(AXTranslationService);\n private readonly tabNavigation = inject(AXPTabNavigationService);\n private readonly menuService = inject(AXPMenuService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly simpleModePageTitle = signal<AXPSimpleModePageTitleState | null>(null);\n private readonly localeRevision = signal(0);\n private readonly sessionRevision = signal(0);\n private readonly routeRevision = signal(0);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.translateService.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.localeRevision.update((value) => value + 1);\n });\n\n this.sessionService.application$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.sessionRevision.update((value) => value + 1);\n });\n\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.routeRevision.update((value) => value + 1);\n });\n\n effect(() => {\n this.localeRevision();\n this.sessionRevision();\n this.routeRevision();\n const mode = this.tabNavigation.effectiveMode();\n const simpleModePageTitle = this.simpleModePageTitle();\n\n if (mode === 'tabular') {\n const activeKey = this.tabNavigation.activeKey();\n const tabs = this.tabNavigation.tabList();\n untracked(() => {\n void this.syncDocumentTitle(mode, activeKey, tabs, simpleModePageTitle);\n });\n return;\n }\n\n untracked(() => {\n void this.syncDocumentTitle(mode, null, [], simpleModePageTitle);\n });\n });\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Publishes the resolved page title for the given route key (ignored in tabular mode). */\n setSimpleModePageTitle(title: string | null, routeKey: string): void {\n if (!routeKey.trim()) {\n return;\n }\n\n if (!title?.trim()) {\n const current = this.simpleModePageTitle();\n if (current?.routeKey === routeKey) {\n this.simpleModePageTitle.set(null);\n }\n return;\n }\n\n this.simpleModePageTitle.set({\n routeKey: routeKey.trim(),\n title: title.trim(),\n });\n }\n\n //#endregion\n\n //#region ---- Title Sync ----\n\n private async syncDocumentTitle(\n mode: AXPNavigationMode,\n activeTabKey: string | null,\n tabs: ReturnType<AXPTabNavigationService['tabList']>,\n simpleModePageTitle: AXPSimpleModePageTitleState | null,\n ): Promise<void> {\n const routeTitle =\n mode === 'tabular'\n ? await this.resolveTabularRouteTitle(activeTabKey, tabs)\n : await this.resolveSimpleRouteTitle(simpleModePageTitle);\n\n const appTitle = await this.resolveApplicationTitle();\n const nextTitle = this.buildDocumentTitle(routeTitle, appTitle);\n\n if (this.document?.title !== nextTitle) {\n this.document.title = nextTitle;\n }\n }\n\n private async resolveTabularRouteTitle(\n activeTabKey: string | null,\n tabs: ReturnType<AXPTabNavigationService['tabList']>,\n ): Promise<string | null> {\n if (!activeTabKey) {\n return null;\n }\n\n const tab = tabs.find((item) => item.key === activeTabKey);\n if (!tab?.title?.trim()) {\n return null;\n }\n\n return this.resolveLocalizedText(tab.title);\n }\n\n private async resolveSimpleRouteTitle(\n simpleModePageTitle: AXPSimpleModePageTitleState | null,\n ): Promise<string | null> {\n const currentRouteKey = axpResolveTabKey(this.router);\n if (simpleModePageTitle?.routeKey === currentRouteKey && simpleModePageTitle.title) {\n return simpleModePageTitle.title;\n }\n\n return this.resolveMenuRouteTitle(this.router.url);\n }\n\n private async resolveMenuRouteTitle(url: string): Promise<string | null> {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (!match?.item.text?.trim()) {\n return null;\n }\n\n return this.resolveLocalizedText(match.item.text);\n }\n\n private async resolveApplicationTitle(): Promise<string> {\n const application = this.sessionService.application;\n const raw = application?.title?.trim() || application?.name?.trim() || '';\n if (!raw) {\n return '';\n }\n\n return (await this.resolveLocalizedText(raw)) ?? raw;\n }\n\n private async resolveLocalizedText(value: string): Promise<string | null> {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n private buildDocumentTitle(routeTitle: string | null, appTitle: string): string {\n const route = routeTitle?.trim();\n const app = appTitle.trim();\n\n if (route && app) {\n return `${route} | ${app}`;\n }\n\n return route || app || 'ACoreX';\n }\n\n //#endregion\n}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","/** Thrown when a requested platform resource cannot be resolved. */\nexport class AXPNotFoundError extends Error {\n constructor(message = 'Resource not found') {\n super(message);\n this.name = 'AXPNotFoundError';\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { RedirectCommand, Route, Router, ROUTES } from '@angular/router';\n\n/** Canonical route path for the platform 404 page. */\nexport const AXP_NOT_FOUND_ROUTE = '/error/404';\n\n/**\n * Catch-all route that redirects unknown URLs to the platform 404 page.\n * Register this as the **last** route source in the application (after all app and module routes).\n */\nexport const AXP_NOT_FOUND_CATCH_ALL_ROUTE: Route = {\n path: '**',\n redirectTo: AXP_NOT_FOUND_ROUTE,\n};\n\n/**\n * Registers the platform catch-all 404 route.\n * Must be the last `ROUTES` provider in `app.config` so custom app routes are matched first.\n */\nexport function AXPNotFoundCatchAllRoute(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n multi: true,\n useValue: [AXP_NOT_FOUND_CATCH_ALL_ROUTE],\n },\n ]);\n}\n\n/**\n * Returns true when an entity byKey query did not resolve a record.\n */\nexport function axpIsEntityRecordNotFound(data: unknown): boolean {\n return data == null;\n}\n\n/**\n * Creates an Angular redirect command to the platform 404 page.\n */\nexport function axpRedirectToNotFound(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_NOT_FOUND_ROUTE));\n}\n","import { inject } from '@angular/core';\nimport { RedirectCommand, Router } from '@angular/router';\n\n/** Canonical route path for the platform 401 page. */\nexport const AXP_UNAUTHORIZED_ROUTE = '/error/401';\n\n/**\n * Creates an Angular redirect command to the platform 401 page.\n */\nexport function axpRedirectToUnauthorized(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_UNAUTHORIZED_ROUTE));\n}\n","//#region ---- Imports ----\n\nimport { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXTranslationService, translateSync } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil, isObject, isString } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPTranslateFormatterOptions extends AXFormatOptions {\n scope?: string;\n lang?: string;\n params?: Record<string, unknown>;\n}\n\n//#endregion\n\n/**\n * Platform formatter for display text: resolves ML objects, i18n keys (`@scope:key`), and primitives.\n * Register via {@link AXPCommonModule} (auto) or `AXFormatModule.forRoot({ formatters: [AXPTranslateFormatter] })`.\n */\n@Injectable()\nexport class AXPTranslateFormatter implements AXFormatter {\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXFormatter ----\n\n get name(): string {\n return 'translate';\n }\n\n format(value: unknown, options?: AXPTranslateFormatterOptions | string): string {\n if (isNil(value) || value === '') {\n return '';\n }\n\n if (isObject(value) && !Array.isArray(value) && !(value instanceof Date)) {\n const resolved = this.translationService.resolve(value as never);\n return resolved?.trim() ?? '';\n }\n\n if (isString(value)) {\n const text = value.trim();\n if (!text) {\n return '';\n }\n if (text.startsWith('@')) {\n const translateOptions = typeof options === 'object' ? options : undefined;\n const translated = translateSync(text, translateOptions);\n return translated?.trim() ?? text;\n }\n return text;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n return String(value).trim();\n }\n\n //#endregion\n}\n","import { Injectable } from \"@angular/core\";\nimport { AXPFileManyStorageInfo, AXPFileStorageCreateRequest, AXPFileStorageFindRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest } from '@acorex/platform/contracts';\n\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","/** Trace namespace for file-storage expression evaluator scope diagnostics. */\nexport const FILE_STORAGE_TRACE_NS = 'file-storage';\n","import {\n AXPDebugService,\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n} from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { FILE_STORAGE_TRACE_NS } from './file-storage-trace.constants';\nimport { AXPFileStorageService } from './file-storage.service';\n\nexport class AXPFileStorageEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly fileStorageService = inject(AXPFileStorageService);\n private readonly debug = inject(AXPDebugService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n this.debug.trace(FILE_STORAGE_TRACE_NS, 'expression-evaluator-scope', 'Scope provider registered');\n\n context.addScope('fileStorage', {\n getFiles: async (entityType: string, entityId: string) => {\n this.debug.trace(FILE_STORAGE_TRACE_NS, 'getFiles', 'Loading files for entity', () => ({\n entityType,\n entityId,\n }));\n\n const filesFromService = await this.fileStorageService.find({\n category: '',\n refId: entityId,\n refType: entityType,\n });\n const mappedFiles = filesFromService?.map((file) => ({\n id: file.id ?? '',\n name: file.name,\n size: file.size,\n status: 'remote',\n source: {\n kind: 'fileId',\n value: file.fileId,\n },\n }));\n\n return mappedFiles;\n },\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { 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","//#region ---- Imports ----\n\nimport { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\n\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPPlatformCommonDataSourceKeys } from '../../contracts/datasource.keys';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: AXPPlatformCommonDataSourceKeys.MenuItems,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\n\nconst SKIP_ROUTE_PREFIXES = ['/auth', '/error'];\nconst SKIP_ROUTE_PATHS = new Set(['/404', '/401', '/error/404', '/error/401']);\n\n//#region ---- Menu Route Access Service ----\n\n/**\n * Resolves route access using menu policy, route metadata, permissions, and features.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuRouteAccessService {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProvider = inject(AXPMenuProviderService);\n private readonly menuVisibility = inject(AXPMenuVisibilityService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Checks whether navigation to the target URL is allowed for the current user.\n */\n async canAccess(route: ActivatedRouteSnapshot, url: string): Promise<boolean> {\n if (this.shouldSkip(route, url)) {\n return true;\n }\n\n if (!this.hasExplicitRouteAccess(route)) {\n return false;\n }\n\n const menuItems = await this.menuProvider.items();\n const menuMatch = axpFindMenuItemByRoute(menuItems, url);\n\n if (!menuMatch) {\n return true;\n }\n\n if (this.menuVisibility.isMenuBranchVisible(menuMatch.item, menuMatch.ancestors)) {\n return true;\n }\n\n return false;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private shouldSkip(route: ActivatedRouteSnapshot, url: string): boolean {\n if (this.hasRouteFlag(route, 'skipMenuRouteGuard')) {\n return true;\n }\n\n const normalizedUrl = this.normalizeUrl(url);\n\n if (SKIP_ROUTE_PATHS.has(normalizedUrl)) {\n return true;\n }\n\n return SKIP_ROUTE_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix));\n }\n\n private hasRouteFlag(route: ActivatedRouteSnapshot, key: string): boolean {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n if (current.data?.[key] === true) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n private hasExplicitRouteAccess(route: ActivatedRouteSnapshot): boolean {\n const requiredPermission = this.getInheritedRouteData<string | string[] | null>(route, 'requiredPermission');\n const requiredFeature = this.getInheritedRouteData<string | string[] | null>(route, 'requiredFeature');\n\n const permissionKeys = this.normalizeKeys(requiredPermission);\n if (permissionKeys.length > 0 && !this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n\n const featureKeys = this.normalizeKeys(requiredFeature);\n if (featureKeys.length > 0 && !this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n\n return true;\n }\n\n private getInheritedRouteData<T>(route: ActivatedRouteSnapshot, key: string): T | null {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n const value = current.data?.[key] as T | undefined;\n if (value != null) {\n return value;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private normalizeKeys(keys: string | string[] | null | undefined): string[] {\n if (!keys) {\n return [];\n }\n\n return Array.isArray(keys) ? keys : [keys];\n }\n\n private normalizeUrl(url: string): string {\n const path = url.split('?')[0]?.split('#')[0] ?? url;\n return path.startsWith('/') ? path : `/${path}`;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXP_UNAUTHORIZED_ROUTE } from '../../errors/unauthorized.routes';\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/contracts';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPSearchDefinition } from './search.types';\n\n/**\n * Optional hook to resolve entity search definitions on demand (e.g. Module.X.Entity).\n */\nexport interface AXPSearchDefinitionLazyResolver {\n resolve(definitionName: string): Promise<AXPSearchDefinition | null>;\n}\n\nexport const AXP_SEARCH_DEFINITION_LAZY_RESOLVER = new InjectionToken<AXPSearchDefinitionLazyResolver>(\n 'AXP_SEARCH_DEFINITION_LAZY_RESOLVER',\n);\n","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport {\n AXP_SEARCH_DEFINITION_LAZY_RESOLVER,\n type AXPSearchDefinitionLazyResolver,\n} from './search-definition-lazy-resolver.token';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private lazyResolver = inject(AXP_SEARCH_DEFINITION_LAZY_RESOLVER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((item) => item.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public async findDefinitionAsync(definitionName: string): Promise<AXPSearchDefinition | null> {\n await this.load();\n\n const existing = this.getList().find((item) => item.name === definitionName);\n if (existing) {\n return existing;\n }\n\n const lazy = this.lazyResolver as AXPSearchDefinitionLazyResolver | null;\n if (!lazy) {\n return null;\n }\n\n const resolved = await lazy.resolve(definitionName);\n if (!resolved) {\n return null;\n }\n\n this.cache = [...(this.cache ?? []), resolved];\n return resolved;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { isLocaleStringMap } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { isPlainObject, isString } from 'lodash-es';\nimport { normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\n\n//#endregion\n\n//#region ---- Searchable text resolution ----\n\n/**\n * Resolves a value to plain text for global-search matching (i18n keys, locale maps, scalars).\n */\nexport function resolveSearchableText(\n value: unknown,\n locale: string,\n translationService: AXTranslationService,\n): string {\n if (value == null || value === false) {\n return '';\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n if (trimmed.startsWith('@')) {\n return translationService.translateSync(trimmed) || trimmed;\n }\n return trimmed;\n }\n\n if (isLocaleStringMap(value) || translationService.isValidMultiLanguageObject(value)) {\n return resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n }\n\n return '';\n}\n\n/**\n * Case-insensitive match against i18n keys, locale maps, and plain strings.\n */\nexport function searchInSearchableValue(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n): boolean {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q) {\n return true;\n }\n\n if (isLocaleStringMap(value)) {\n return Object.values(value)\n .filter((entry): entry is string => typeof entry === 'string' && entry.trim() !== '')\n .some((entry) => entry.toLocaleLowerCase(locale).includes(q));\n }\n\n const text = resolveSearchableText(value, locale, translationService).toLocaleLowerCase(locale);\n return text.includes(q);\n}\n\n/**\n * Shallow + nested search over entity/command payloads (skips id / entityName keys).\n */\nexport function searchInRecordValues(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): boolean {\n const maxDepth = 4;\n if (depth > maxDepth || value == null) {\n return false;\n }\n\n if (searchInSearchableValue(value, query, locale, translationService)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => searchInRecordValues(item, query, locale, translationService, depth + 1));\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n return Object.entries(value as Record<string, unknown>).some(([key, entry]) => {\n if (key === 'id' || key === 'entityName') {\n return false;\n }\n return searchInRecordValues(entry, query, locale, translationService, depth + 1);\n });\n }\n\n return false;\n}\n\n//#endregion\n\n//#region ---- Display template resolution ----\n\nfunction countMustacheExpressions(template: string): number {\n return (template.match(/\\{\\{/g) ?? []).length;\n}\n\n/** Standard display-tier row scope for entity title/search templates. */\nexport function createEntityRowExpressionScope(\n data: unknown,\n contextEvalFactory: AXPContextEvalFactory,\n): AXPExpressionEvaluatorScope {\n return {\n context: contextEvalFactory.createScope((data ?? {}) as Record<string, unknown>),\n };\n}\n\n/**\n * Coerces an evaluated display segment to plain text.\n * Piped eval returns strings; unpiped MLS still resolves via compat fallback.\n */\nfunction formatDisplaySegment(\n segment: unknown,\n locale: string,\n translationService: AXTranslationService,\n): string {\n if (segment === false || segment == null) {\n return '';\n }\n if (isString(segment)) {\n return segment.trim();\n }\n return resolveSearchableText(segment, locale, translationService);\n}\n\n/**\n * Evaluates a normalized entity display template via {@link AXPExpressionEvaluatorService}.\n */\nexport async function evaluateEntityDisplayTemplate(\n template: string,\n data: unknown,\n expressionEvaluator: AXPExpressionEvaluatorService,\n locale: string,\n translationService: AXTranslationService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<unknown> {\n const normalized = normalizeEntityDisplayTemplate(template);\n const scope = createEntityRowExpressionScope(data, contextEvalFactory);\n\n if (!normalized.includes('{{')) {\n return normalized;\n }\n\n if (\n countMustacheExpressions(normalized) === 1 &&\n expressionEvaluator.isExpression(normalized)\n ) {\n return expressionEvaluator.evaluate(normalized, scope);\n }\n\n const regex = /\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g;\n let result = '';\n let lastIndex = 0;\n\n for (const match of normalized.matchAll(regex)) {\n result += normalized.slice(lastIndex, match.index);\n const segment = await expressionEvaluator.evaluate(`{{ ${match[1].trim()} }}`, scope);\n result += formatDisplaySegment(segment, locale, translationService);\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n\n result += normalized.slice(lastIndex);\n return result;\n}\n\n/**\n * Best display string from row values that contain the active search query (deep-match fallback).\n */\nexport function resolveQueryMatchingDisplayText(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): string {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q || depth > 4 || value == null) {\n return '';\n }\n\n let best = '';\n const consider = (candidate: unknown) => {\n const text = resolveSearchableText(candidate, locale, translationService).trim();\n if (text && text.toLocaleLowerCase(locale).includes(q) && text.length > best.length) {\n best = text;\n }\n };\n\n consider(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = resolveQueryMatchingDisplayText(item, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n return best;\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n if (key === 'id' || key === 'entityName') {\n continue;\n }\n const nested = resolveQueryMatchingDisplayText(entry, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n }\n\n return best;\n}\n\n/**\n * Resolves entity search display templates; coerces multi-language field values to readable text.\n */\nexport async function resolveSearchDisplayTemplate(\n template: string | undefined,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<AXPMultiLanguageString> {\n if (!template) {\n return '';\n }\n\n if (!template.includes('{{') && !template.includes('{')) {\n if (template.trim().startsWith('@')) {\n return resolveSearchableText(template, locale, translationService);\n }\n\n const formatted = formatService.format(template, 'string', data);\n return sanitizeResolvedEntityDisplayTitle(\n typeof formatted === 'string' ? formatted : String(formatted ?? ''),\n );\n }\n\n const evaluated = await evaluateEntityDisplayTemplate(\n template,\n data,\n expressionEvaluator,\n locale,\n translationService,\n contextEvalFactory,\n );\n return sanitizeResolvedEntityDisplayTitle(\n resolveSearchableText(evaluated, locale, translationService),\n );\n}\n\n//#endregion\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { searchInSearchableValue } from './search-display-string.util';\nimport { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n private readonly translationService = inject(AXTranslationService);\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n return this.commands.filter(\n (command) =>\n searchInSearchableValue(command.title, text, locale, this.translationService) ||\n searchInSearchableValue(command.description, text, locale, this.translationService),\n );\n }\n}\n","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, isMeaningfulEntityDisplayTitle, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityModifyRecordTitleTemplate, resolveEntityRowTitleTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\n\nimport { resolveSearchDisplayTemplate, resolveSearchableText } from './search-display-string.util';\nimport { AXPSearchDefinitionDisplayFormat } from './search.types';\n\n//#endregion\n\n//#region ---- Runtime resolution ----\n\n/**\n * Modify/edit popup chrome: `{action} {individual} ({update.title ?? single.title})` when a record template exists.\n */\nexport async function resolveEntityModifyPopupTitle(\n entity: AXPEntity,\n recordData: unknown,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n actionTitleKey = '@general:actions.modify.title',\n): Promise<string> {\n const actionPrefix = translationService.translateSync(actionTitleKey);\n const entityLabel = translationService.translateSync(entity.formats.individual);\n const baseTitle = `${actionPrefix} ${entityLabel}`.trim();\n\n const recordTemplate = resolveEntityModifyRecordTitleTemplate(entity);\n if (!recordTemplate) {\n return baseTitle;\n }\n\n const locale = translationService.getActiveLang();\n const resolved = await resolveSearchDisplayTemplate(\n recordTemplate,\n recordData,\n locale,\n translationService,\n formatService,\n expressionEvaluator,\n contextEvalFactory,\n );\n const recordTitle = sanitizeResolvedEntityDisplayTitle(\n typeof resolved === 'string'\n ? resolved\n : resolveSearchableText(resolved, locale, translationService),\n );\n\n if (!isMeaningfulEntityDisplayTitle(recordTitle)) {\n return baseTitle;\n }\n\n return `${baseTitle} (${recordTitle})`;\n}\n\n/**\n * Resolves an entity row title using entity-driven fallback templates and property paths.\n */\nexport async function resolveEntitySearchTitleFallback(\n format: Pick<AXPSearchDefinitionDisplayFormat, 'titleFallbackTemplates' | 'titleFallbackFields'>,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<string> {\n if (data == null) {\n return '';\n }\n\n for (const template of format.titleFallbackTemplates ?? []) {\n const resolved = await resolveSearchDisplayTemplate(\n template,\n data,\n locale,\n translationService,\n formatService,\n expressionEvaluator,\n contextEvalFactory,\n );\n const text = sanitizeResolvedEntityDisplayTitle(\n typeof resolved === 'string'\n ? resolved\n : resolveSearchableText(resolved, locale, translationService),\n );\n if (isMeaningfulEntityDisplayTitle(text)) {\n return text;\n }\n }\n\n for (const path of format.titleFallbackFields ?? []) {\n const text = resolveSearchableText(get(data, path), locale, translationService).trim();\n if (text) {\n return text;\n }\n }\n\n return '';\n}\n\n//#endregion\n","import { isMeaningfulEntityDisplayTitle, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { resolveEntitySearchTitleFallback } from './entity-search-display-title.util';\nimport {\n resolveSearchDisplayTemplate,\n resolveSearchableText,\n searchInRecordValues,\n searchInSearchableValue,\n} from './search-display-string.util';\nimport { AXPSearchProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private contextEvalFactory = inject(AXPContextEvalFactory);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider => provider != null && typeof provider.search === 'function',\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = await this.definitionService.findDefinitionAsync(result.group);\n if (!definition) {\n continue;\n }\n\n const resolvedTitle =\n result.title ??\n (definition.format.title\n ? await resolveSearchDisplayTemplate(\n definition.format.title,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n )\n : '');\n const resolvedDescription =\n result.description ??\n (definition.format.description\n ? await resolveSearchDisplayTemplate(\n definition.format.description,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n )\n : undefined);\n\n let titleText = sanitizeResolvedEntityDisplayTitle(\n typeof resolvedTitle === 'string'\n ? resolvedTitle\n : resolveSearchableText(resolvedTitle, locale, this.translationService),\n );\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n titleText = await resolveEntitySearchTitleFallback(\n definition.format,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n );\n }\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n continue;\n }\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result.data ?? result)}`,\n title: titleText,\n description: resolvedDescription,\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n const normalizedQuery = text.trim();\n const visibleData =\n normalizedQuery.length === 0\n ? mergeData\n : mergeData.filter(\n (item) =>\n searchInSearchableValue(item.title, normalizedQuery, locale, this.translationService) ||\n searchInSearchableValue(item.description, normalizedQuery, locale, this.translationService) ||\n searchInRecordValues(item.data, normalizedQuery, locale, this.translationService),\n );\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of visibleData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, ENTITY_LAYOUT_SINGLE_TITLE_PATH, ENTITY_ROW_POPUP_TITLE_OPTION, ENTITY_ROW_TITLE_TEMPLATE_OPTION, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityRowTitleTemplate } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\nimport { get } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPResolveEntityRowDisplayTitleOptions {\n /** Row or form context data used to evaluate title templates. */\n data: Record<string, unknown> | undefined;\n activeLang: string;\n formatService: AXFormatService;\n /** Entity definition when available (forms, columns with entity resolver). */\n entity?: AXPEntity | null;\n /** Widget/interface options — may contain `popupTitle` or `titleTemplate`. */\n widgetOptions?: Record<string, unknown> | undefined;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst INVALID_DISPLAY_TEXT = '[object Object]';\n\nconst DEFAULT_ROW_TITLE_FALLBACK_PATHS = ['title', 'name', 'code'] as const;\n\n//#endregion\n\n//#region ---- Value normalization ----\n\n/** Resolves a row field or format result to a plain display string for the active locale. */\nexport function resolveEntityRowDisplayText(value: unknown, activeLang: string): string {\n if (value == null || value === '') {\n return '';\n }\n\n if (typeof value === 'string') {\n const text = value.trim();\n if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n return '';\n }\n return text;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const text = resolveMultiLanguageString(value as AXPMultiLanguageString, activeLang).trim();\n if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n return '';\n }\n return text;\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Row title resolution ----\n\nfunction readTitleTemplateFromWidgetOptions(\n widgetOptions: Record<string, unknown> | undefined,\n): unknown {\n if (!widgetOptions) {\n return undefined;\n }\n\n return widgetOptions[ENTITY_ROW_POPUP_TITLE_OPTION] ?? widgetOptions[ENTITY_ROW_TITLE_TEMPLATE_OPTION];\n}\n\nfunction resolveEntityRowDisplayTitleFromContext(\n data: Record<string, unknown>,\n widgetOptions: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n const titleTemplate = readTitleTemplateFromWidgetOptions(widgetOptions);\n const fromTemplateValue = resolveEntityRowDisplayText(titleTemplate, activeLang);\n if (fromTemplateValue) {\n return fromTemplateValue;\n }\n\n const fromEntityLayout = resolveEntityRowDisplayText(get(data, ENTITY_LAYOUT_SINGLE_TITLE_PATH), activeLang);\n if (fromEntityLayout) {\n return fromEntityLayout;\n }\n\n if (typeof titleTemplate === 'string' && titleTemplate.trim()) {\n const formatted = formatService.format(normalizeEntityDisplayTemplate(titleTemplate), 'string', data);\n const fromFormattedTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n if (fromFormattedTemplate) {\n return fromFormattedTemplate;\n }\n }\n\n for (const path of DEFAULT_ROW_TITLE_FALLBACK_PATHS) {\n const fromField = resolveEntityRowDisplayText(get(data, path), activeLang);\n if (fromField) {\n return fromField;\n }\n }\n\n return '';\n}\n\n/**\n * Resolves an entity row title for list columns, view widgets, and edit widgets.\n * Uses entity metadata when provided, otherwise widget title templates and common field paths.\n */\nexport function resolveEntityRowDisplayTitle(options: AXPResolveEntityRowDisplayTitleOptions): string {\n const { data, activeLang, formatService, entity, widgetOptions } = options;\n if (!data) {\n return '';\n }\n\n if (entity) {\n const fromEntity = formatEntityRowDisplayTitle(entity, data, formatService, activeLang);\n if (fromEntity) {\n return fromEntity;\n }\n }\n\n return resolveEntityRowDisplayTitleFromContext(data, widgetOptions, formatService, activeLang);\n}\n\n/**\n * @deprecated Use {@link resolveEntityRowDisplayTitle} instead.\n */\nexport function resolveEntityRowDisplayTitleFromColumnContext(\n rowData: Record<string, unknown> | undefined,\n columnOptions: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n return resolveEntityRowDisplayTitle({\n data: rowData,\n widgetOptions: columnOptions,\n formatService,\n activeLang,\n });\n}\n\n/**\n * Formats the entity row title for display using entity-driven templates and property paths.\n */\nexport function formatEntityRowDisplayTitle(\n entity: AXPEntity | null | undefined,\n rowData: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n if (!rowData) {\n return '';\n }\n\n const titleContext = buildEntitySearchTitleContext(entity ?? ({} as AXPEntity));\n\n for (const path of titleContext.fallbackFields) {\n const fromField = resolveEntityRowDisplayText(get(rowData, path), activeLang);\n if (fromField) {\n return fromField;\n }\n }\n\n const templates = [\n resolveEntityRowTitleTemplate(entity),\n ...titleContext.fallbackTemplates,\n ].filter((template): template is string => !!template?.trim());\n\n for (const template of templates) {\n const formatted = formatService.format(normalizeEntityDisplayTemplate(template), 'string', rowData);\n const fromTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n if (fromTemplate) {\n return fromTemplate;\n }\n }\n\n return '';\n}\n\n//#endregion\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult, searchInSearchableValue } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path\n ? ({\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n },\n } as AXPExecuteCommand)\n : (item.command as AXPExecuteCommand),\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(String(o.title ?? ''))],\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private searchMenuItems(menuItems: AXPMenuItem[], searchText: string): AXPMenuItemWithParent[] {\n const result: AXPMenuItemWithParent[] = [];\n const locale = this.translateService.getActiveLang() ?? 'en-US';\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n searchInSearchableValue(item.text, searchText, locale, this.translateService)\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item }) as AXPMenuItemWithParent));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n private tabNavigation = inject(AXPTabNavigationService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n await this.router.navigate(payload.commands, payload.extras);\n return;\n }\n\n const path = payload.commands as string;\n if (!path) {\n return;\n }\n\n if (path.toLowerCase().startsWith('http') || payload.target === 'blank') {\n window.open(path, '_blank');\n return;\n }\n\n await this.tabNavigation.navigate(path, payload.extras);\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","//#region ---- Entity Workflow Events ----\n\n/** Workflow event type dispatched after a successful entity delete. */\nexport const AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE = '[Entity] Deleted';\n\nexport interface AXPEntityDeletedEventPayload {\n entity: string;\n ids: string[];\n meta?: unknown;\n}\n\n//#endregion\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private readonly tabNavigation = inject(AXPTabNavigationService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n if (!path) {\n console.error('Path is required for navigate workflow');\n return;\n }\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n await this.tabNavigation.navigate(path, command.options.extras);\n }\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXFormatterRegistryService } from '@acorex/core/format';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPComponentSlotModule,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { AXPBackgroundOperationSlotComponent } from './background-operation';\nimport { AXPBrowserTitleService } from './browser-title';\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTranslateFormatter } from './formatters';\nimport { AXPFileStorageEvaluatorScopeProvider } from './file-storage';\nimport { AXPKeyboardShortcutsHelpService } from './keyboard-shortcuts';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport {\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 formatterRegistry: AXFormatterRegistryService,\n ) {\n formatterRegistry.register(AXPTranslateFormatter);\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/contracts';\n\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { AXPCommonSettings } from './common-settings.key';\nimport type { AXPSettingsService } from '../settings/settings.service';\n\nexport interface AXPEntityCreateListBehaviorOptions {\n redirect?: boolean;\n}\n\nexport interface AXPEntityCreateListBehavior {\n shouldRedirect: boolean;\n shouldHighlight: boolean;\n}\n\n/**\n * Resolves post-create list behavior from user settings and optional action overrides.\n */\nexport async function resolveEntityCreateListBehavior(\n settingsService: AXPSettingsService,\n options?: AXPEntityCreateListBehaviorOptions,\n): Promise<AXPEntityCreateListBehavior> {\n const [redirectSetting, highlightSetting] = await Promise.all([\n settingsService.get<boolean>(AXPCommonSettings.RedirectToDetailsAfterCreate),\n settingsService.get<boolean>(AXPCommonSettings.HighlightAfterCreateInList),\n ]);\n\n const shouldRedirect =\n options?.redirect !== undefined ? options.redirect : redirectSetting !== false;\n const shouldHighlight = highlightSetting === true;\n\n return { shouldRedirect, shouldHighlight };\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/contracts';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/contracts';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AXPIntegrationProviderContext } from './integration-provider.context';\n\n//#region ---- Integration provider interface ----\n\nexport interface AXPIntegrationProvider {\n provide(context: AXPIntegrationProviderContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_PROVIDER = new InjectionToken<AXPIntegrationProvider[]>(\n 'AXP_INTEGRATION_PROVIDER',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\n//#endregion\n\n//#region ---- Integration runtime provider (lazy hooks) ----\n\nexport interface AXPIntegrationRuntimeProvider {\n readonly providerId: string;\n getHooks(): Promise<import('@acorex/platform/contracts').AXPIntegrationProviderRuntimeHooks>;\n}\n\nexport const AXP_INTEGRATION_RUNTIME_PROVIDER = new InjectionToken<AXPIntegrationRuntimeProvider[]>(\n 'AXP_INTEGRATION_RUNTIME_PROVIDER',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\n\n//#region ---- Integration provider context ----\n\nexport class AXPIntegrationProviderContext {\n //#region ---- State ----\n\n private readonly definitions = new Map<string, AXPIntegrationProviderDefinition>();\n\n //#endregion\n\n //#region ---- Builder API ----\n\n /**\n * Registers a provider definition. Throws when duplicate ids are registered.\n */\n register(definition: AXPIntegrationProviderDefinition): void {\n if (this.definitions.has(definition.id)) {\n throw new Error(\n `[AXPIntegrationProviderContext] Duplicate integration provider id '${definition.id}'.`,\n );\n }\n this.definitions.set(definition.id, definition);\n }\n\n //#endregion\n\n //#region ---- Accessors ----\n\n getDefinitions(): ReadonlyMap<string, AXPIntegrationProviderDefinition> {\n return this.definitions;\n }\n\n //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPIntegrationProviderContext } from './integration-provider.context';\nimport { AXP_INTEGRATION_PROVIDER, type AXPIntegrationProvider } from './integration.provider';\n\n//#region ---- Integration provider registry ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPIntegrationProviderRegistryService {\n //#region ---- Dependencies ----\n\n private readonly providers = inject(AXP_INTEGRATION_PROVIDER, { optional: true });\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: Map<string, AXPIntegrationProviderDefinition> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n async list(): Promise<AXPIntegrationProviderDefinition[]> {\n const map = await this.load();\n return Array.from(map.values());\n }\n\n async get(id: string): Promise<AXPIntegrationProviderDefinition | null> {\n const map = await this.load();\n return map.get(id) ?? null;\n }\n\n async getOrThrow(id: string): Promise<AXPIntegrationProviderDefinition> {\n const definition = await this.get(id);\n if (!definition) {\n throw new Error(`[AXPIntegrationProviderRegistry] Unknown integration provider '${id}'.`);\n }\n return definition;\n }\n\n clearCache(): void {\n this.cache = null;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async load(): Promise<Map<string, AXPIntegrationProviderDefinition>> {\n if (this.cache) {\n return this.cache;\n }\n\n const context = new AXPIntegrationProviderContext();\n const providerList = this.providers ?? [];\n\n for (const provider of providerList) {\n const resolved: AXPIntegrationProvider =\n provider instanceof Promise ? await provider : provider;\n await resolved.provide(context);\n }\n\n this.cache = new Map(context.getDefinitions());\n return this.cache;\n }\n\n //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationAuthContext, AXPIntegrationProviderDefinition, AXPIntegrationResolvedCredentials, AXPIntegrationRuntimeContext, AXPIntegrationSecretPayload } from '@acorex/platform/contracts';\nimport { InjectionToken } from '@angular/core';\n\n//#region ---- Secret store token ----\n\nexport interface AXPIntegrationSecretRefInput {\n providerId: string;\n connectionId: string;\n tenantId: string;\n userId: string;\n authMethodType: string;\n}\n\nexport interface AXPIntegrationSecretStore {\n store(ref: AXPIntegrationSecretRefInput, payload: AXPIntegrationSecretPayload): Promise<string>;\n rotate(\n secretRef: string,\n context: AXPIntegrationAuthContext,\n payload: Partial<AXPIntegrationSecretPayload>,\n ): Promise<void>;\n resolve(secretRef: string, context: AXPIntegrationAuthContext): Promise<AXPIntegrationResolvedCredentials>;\n revoke(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n delete(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_SECRET_STORE = new InjectionToken<AXPIntegrationSecretStore>(\n 'AXP_INTEGRATION_SECRET_STORE',\n);\n\n//#endregion\n\n//#region ---- Runtime service token ----\n\nexport interface AXPIntegrationWithClientOptions {\n providerId: string;\n connectionScope?: 'user' | 'tenant';\n connectionKey?: string;\n requiredCapabilities?: string[];\n requiredScopes?: string[];\n}\n\nexport abstract class AXPIntegrationRuntimeService {\n abstract getProvider(id: string): Promise<AXPIntegrationProviderDefinition>;\n abstract listProviders(): Promise<AXPIntegrationProviderDefinition[]>;\n abstract getConnection(\n options: AXPIntegrationWithClientOptions,\n ): Promise<import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto>;\n abstract withClient<T>(\n options: AXPIntegrationWithClientOptions,\n fn: (client: unknown, ctx: AXPIntegrationRuntimeContext) => Promise<T>,\n ): Promise<T>;\n abstract buildRuntimeContext(\n connection: import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto & { secretRef: string },\n ): Promise<AXPIntegrationRuntimeContext>;\n}\n\nexport interface AXPIntegrationOAuthStartInput {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n displayName: string;\n redirectUri: string;\n tenantId: string;\n userId: string;\n scopes?: string[];\n}\n\nexport interface AXPIntegrationOAuthCompleteInput {\n providerId: string;\n state: string;\n code: string;\n}\n\nexport abstract class AXPIntegrationOAuthService {\n abstract startAuthorization(\n input: AXPIntegrationOAuthStartInput,\n ): Promise<{ redirectUrl: string; state: string }>;\n abstract completeCallback(input: AXPIntegrationOAuthCompleteInput): Promise<{ connectionId: string }>;\n}\n\nexport const AXP_INTEGRATION_OAUTH_SERVICE = new InjectionToken<AXPIntegrationOAuthService>(\n 'AXP_INTEGRATION_OAUTH_SERVICE',\n);\n\n//#endregion\n","//#region ---- Integration barrel ----\n\nexport * from './integration.provider';\nexport * from './integration-provider.context';\nexport * from './integration-provider.registry.service';\nexport * from './integration-secret-store.token';\n\n//#endregion\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","import { AXPMultiLanguageString, AXPStatusProvider, AXPStatusTransition } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\n\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity =\n context['entity'] ?? context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? context['fieldName'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n const text = this.commandMessageTextForError(result?.message?.text);\n throw new Error(text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n /**\n * Best-effort plain string for {@link Error} messages (no i18n lookup).\n */\n private commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n const values = Object.values(value as Record<string, string>);\n const first = values.find((v) => typeof v === 'string' && v.length > 0);\n return first ?? '';\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Types ----\n\n/** Structured hover-card payload for a tab (kept in memory; not session-persisted). */\nexport interface AXPTabStructuredPreview {\n /** Primary label (usually page title or breadcrumb trail). */\n title: string;\n /** Optional page description or secondary line. */\n subtitle?: string;\n /** Full router URL for the tab. */\n url: string;\n icon?: string;\n /** Whether the cached page reports unsaved user edits. */\n isDirty: boolean;\n /** Breadcrumb segments excluding home (for the hover card). */\n breadcrumbTrail: string[];\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n //#region ---- Services & Dependencies ----\n\n private readonly toast = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n public async copy(title: string, value: string): Promise<void> {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n await navigator.clipboard.writeText(value);\n\n const message = await this.translationService.translateAsync('@general:messages.clipboard.copied', {\n params: { title },\n });\n this.toast.success(message);\n }\n\n //#endregion\n}\n","//#region ---- Types ----\n\nexport type AXPGraphicDownloadFormat = 'svg' | 'png' | 'jpeg';\n\nexport interface AXPGraphicPrintContent {\n bodyMarkup: string;\n styleRule: string;\n}\n\nexport interface AXPPrintGraphicOptions {\n /** Used when the rendered element has no measurable size. */\n fallbackSize?: number;\n title?: string;\n imageAlt?: string;\n}\n\nexport interface AXPGraphicDownloadOptions {\n format: AXPGraphicDownloadFormat;\n filename: string;\n /** Used when rasterizing SVG or sizing canvas output. */\n fallbackSize?: number;\n}\n\n//#endregion\n\n//#region ---- Option normalization ----\n\n/**\n * Normalizes widget option values to a positive finite number\n * (plain number, numeric string, or editor object with `value` / `id`).\n */\nexport function normalizePositiveNumberOption(value: unknown, fallback: number): number {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n\n if (value != null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n if ('value' in record) {\n return normalizePositiveNumberOption(record['value'], fallback);\n }\n if ('id' in record) {\n return normalizePositiveNumberOption(record['id'], fallback);\n }\n }\n\n return fallback;\n}\n\n//#endregion\n\n//#region ---- DOM measurement ----\n\n/**\n * Resolves the rendered graphic size from a container (canvas or SVG).\n */\nexport function resolveGraphicElementSize(container: HTMLElement, fallback: number): number {\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement && canvas.width > 0) {\n return canvas.width;\n }\n\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n const svgWidth = svg.width?.baseVal?.value;\n if (svgWidth > 0) {\n return svgWidth;\n }\n\n const widthAttr = svg.getAttribute('width');\n if (widthAttr) {\n const parsed = Number.parseFloat(widthAttr);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n }\n\n return normalizePositiveNumberOption(fallback, fallback);\n}\n\n//#endregion\n\n//#region ---- SVG helpers ----\n\n/**\n * Serializes an SVG element to a string, optionally prefixing the XML declaration.\n */\nexport function serializeSvgElement(svg: SVGSVGElement, includeXmlDeclaration = true): string {\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(svg);\n\n if (includeXmlDeclaration && !source.match(/^<\\?xml/)) {\n source = `<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n${source}`;\n }\n\n return source;\n}\n\n//#endregion\n\n//#region ---- Graphic content resolution ----\n\n/**\n * Builds printable HTML body markup and CSS for an SVG or canvas inside a container.\n */\nexport function resolveGraphicPrintContent(\n container: HTMLElement,\n size: number,\n imageAlt = 'Graphic',\n): AXPGraphicPrintContent | undefined {\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n return {\n bodyMarkup: svg.outerHTML,\n styleRule: `svg { width: ${size}px !important; height: ${size}px !important; }`,\n };\n }\n\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement) {\n try {\n const dataUrl = canvas.toDataURL('image/png');\n if (!dataUrl.startsWith('data:image/png')) {\n return undefined;\n }\n\n return {\n bodyMarkup: `<img src=\"${dataUrl}\" width=\"${size}\" height=\"${size}\" alt=\"${imageAlt}\" />`,\n styleRule: `img { width: ${size}px !important; height: ${size}px !important; }`,\n };\n } catch {\n return undefined;\n }\n }\n\n return undefined;\n}\n\n//#endregion\n\n//#region ---- Browser download ----\n\n/**\n * Triggers a file download for the given blob via a temporary anchor element.\n */\nexport function triggerBrowserDownload(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n const url = URL.createObjectURL(blob);\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n//#endregion\n\n//#region ---- Print ----\n\n/**\n * Opens the system print dialog for an SVG or canvas graphic inside the given container.\n */\nexport function printGraphicFromElement(container: HTMLElement, options: AXPPrintGraphicOptions = {}): void {\n const fallbackSize = options.fallbackSize ?? 200;\n const size = resolveGraphicElementSize(container, fallbackSize);\n const printContent = resolveGraphicPrintContent(container, size, options.imageAlt ?? 'Graphic');\n if (!printContent) {\n return;\n }\n\n const iframe = document.createElement('iframe');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.style.cssText = `position:fixed;left:0;top:0;width:${size}px;height:${size}px;border:0;visibility:hidden;`;\n document.body.appendChild(iframe);\n\n const printWindow = iframe.contentWindow;\n const doc = printWindow?.document;\n if (!printWindow || !doc) {\n iframe.remove();\n return;\n }\n\n const title = options.title ?? 'Print';\n\n doc.open();\n doc.write(`<!DOCTYPE html>\n<html>\n <head>\n <title>${title}</title>\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n margin: 0;\n }\n @media print {\n body {\n min-height: auto;\n }\n }\n ${printContent.styleRule}\n </style>\n </head>\n <body>${printContent.bodyMarkup}</body>\n</html>`);\n doc.close();\n\n const cleanup = (): void => {\n iframe.remove();\n };\n\n const triggerPrint = (): void => {\n printWindow.focus();\n printWindow.print();\n\n printWindow.addEventListener('afterprint', cleanup, { once: true });\n window.setTimeout(cleanup, 1000);\n };\n\n const image = doc.querySelector('img');\n if (image && !image.complete) {\n image.addEventListener('load', triggerPrint, { once: true });\n image.addEventListener('error', cleanup, { once: true });\n return;\n }\n\n requestAnimationFrame(triggerPrint);\n}\n\n//#endregion\n\n//#region ---- Download ----\n\n/**\n * Downloads an SVG or canvas graphic from a container as SVG, PNG, or JPEG.\n */\nexport function downloadGraphicFromElement(container: HTMLElement, options: AXPGraphicDownloadOptions): void {\n const size = resolveGraphicElementSize(container, options.fallbackSize ?? 200);\n\n if (options.format === 'svg') {\n downloadSvgGraphic(container, options.filename);\n return;\n }\n\n const mime = options.format === 'png' ? 'image/png' : 'image/jpeg';\n downloadRasterGraphic(container, mime, options.filename, size);\n}\n\nfunction downloadSvgGraphic(container: HTMLElement, filename: string): void {\n const svg = container.querySelector('svg');\n if (!(svg instanceof SVGSVGElement)) {\n return;\n }\n\n const source = serializeSvgElement(svg);\n triggerBrowserDownload(new Blob([source], { type: 'image/svg+xml;charset=utf-8' }), filename);\n}\n\nfunction downloadRasterGraphic(\n container: HTMLElement,\n mime: 'image/png' | 'image/jpeg',\n filename: string,\n size: number,\n): void {\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement) {\n const dataUrl = rasterizeCanvasToDataUrl(canvas, mime, size);\n if (dataUrl) {\n triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n }\n return;\n }\n\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n rasterizeSvgToDataUrl(svg, mime, size, (dataUrl) => {\n triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n });\n }\n}\n\nfunction rasterizeCanvasToDataUrl(\n canvas: HTMLCanvasElement,\n mime: 'image/png' | 'image/jpeg',\n size: number,\n): string | undefined {\n if (mime === 'image/png') {\n try {\n return canvas.toDataURL('image/png');\n } catch {\n return undefined;\n }\n }\n\n const outputCanvas = document.createElement('canvas');\n outputCanvas.width = size;\n outputCanvas.height = size;\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return undefined;\n }\n\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, size, size);\n ctx.drawImage(canvas, 0, 0, size, size);\n\n try {\n return outputCanvas.toDataURL('image/jpeg');\n } catch {\n return undefined;\n }\n}\n\nfunction rasterizeSvgToDataUrl(\n svg: SVGSVGElement,\n mime: 'image/png' | 'image/jpeg',\n size: number,\n onReady: (dataUrl: string) => void,\n): void {\n const source = serializeSvgElement(svg);\n const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(source)}`;\n const img = new Image();\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n if (mime === 'image/jpeg') {\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, size, size);\n }\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, size, size);\n onReady(canvas.toDataURL(mime));\n };\n img.src = svgUrl;\n}\n\nfunction dataUrlToBlob(dataUrl: string): Blob {\n const [header, data] = dataUrl.split(',');\n const mime = header.match(/:(.*?);/)?.[1] ?? 'application/octet-stream';\n const binary = atob(data);\n const bytes = new Uint8Array(binary.length);\n\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n\n return new Blob([bytes], { type: mime });\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\nimport { triggerBrowserDownload } from './dom-graphic.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n triggerBrowserDownload(blob, filename);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i2","i4","i1","i3","i1.AXPErrorHandlerRegistryService","i1.AXPKeyboardShortcutsHelpService"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-common.mjs","sources":["../../../../libs/platform/common/src/lib/contracts/datasource.keys.ts","../../../../libs/platform/common/src/lib/contracts/index.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.types.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.provider.ts","../../../../libs/platform/common/src/lib/ai/output-contract-transcript-segment.service.ts","../../../../libs/platform/common/src/lib/app/app-version.provider.ts","../../../../libs/platform/common/src/lib/app/operators.ts","../../../../libs/platform/common/src/lib/app/date-filter-presets.ts","../../../../libs/platform/common/src/lib/home-page/home-page.types.ts","../../../../libs/platform/common/src/lib/configs/common-settings.key.ts","../../../../libs/platform/common/src/lib/settings/setting.builder.ts","../../../../libs/platform/common/src/lib/settings/setting-definition.service.ts","../../../../libs/platform/common/src/lib/settings/settings-coercion.ts","../../../../libs/platform/common/src/lib/settings/settings.provider.ts","../../../../libs/platform/common/src/lib/settings/settings.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language-config.service.ts","../../../../libs/platform/common/src/lib/settings/default-multi-language.helpers.ts","../../../../libs/platform/common/src/lib/settings/settings-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/settings/regional-calendar.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-confirm.service.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-popstate.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-cache.registry.ts","../../../../libs/platform/common/src/lib/settings/unsaved-changes-can-deactivate.guard.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.key.ts","../../../../libs/platform/common/src/lib/home-page/home-page.service.ts","../../../../libs/platform/common/src/lib/home-page/home-page.routes.ts","../../../../libs/platform/common/src/lib/home-page/home-page-settings.provider.ts","../../../../libs/platform/common/src/lib/home-page/home-page.module.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.notification.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-notification.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.util.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation-completion.service.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.const.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.storage.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity.mapper.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.store.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.entity-store.service.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.types.ts","../../../../libs/platform/common/src/lib/background-operation/entities/background-operation/background-operation.entity.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.handler.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.provider.ts","../../../../libs/platform/common/src/lib/background-operation/background-operation.service.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-item.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-panel.component.html","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.ts","../../../../libs/platform/common/src/lib/background-operation/components/background-operation-slot.component.html","../../../../libs/platform/common/src/lib/utils/app-path-navigation.util.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-matcher.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.context.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-middleware.registry.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.provider.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-visibility.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-keyboard-shortcuts.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-key.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.types.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-resolver.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-title.util.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-route-policy.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-navigation.service.ts","../../../../libs/platform/common/src/lib/browser-title/browser-title.service.ts","../../../../libs/platform/common/src/lib/data/data-provider.types.ts","../../../../libs/platform/common/src/lib/data/operators.service.ts","../../../../libs/platform/common/src/lib/data/filter-middleware.service.ts","../../../../libs/platform/common/src/lib/errors/error-handler-registry.service.ts","../../../../libs/platform/common/src/lib/errors/global-error-handler.ts","../../../../libs/platform/common/src/lib/errors/not-found.error.ts","../../../../libs/platform/common/src/lib/errors/not-found.routes.ts","../../../../libs/platform/common/src/lib/errors/unauthorized.routes.ts","../../../../libs/platform/common/src/lib/formatters/translate.formatter.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage.service.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-trace.constants.ts","../../../../libs/platform/common/src/lib/file-storage/file-storage-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.component.ts","../../../../libs/platform/common/src/lib/keyboard-shortcuts/keyboard-shortcuts-help.service.ts","../../../../libs/platform/common/src/lib/layout/sticky.directive.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-items.datasource.ts","../../../../libs/platform/common/src/lib/layout/menu/provide-menu-middleware.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route-access.service.ts","../../../../libs/platform/common/src/lib/layout/menu/menu-route.guard.ts","../../../../libs/platform/common/src/lib/layout/menu/protected-route.guards.ts","../../../../libs/platform/common/src/lib/layout/menu/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-definition-lazy-resolver.token.ts","../../../../libs/platform/common/src/lib/search/search-definition.builder.ts","../../../../libs/platform/common/src/lib/search/search-definition.provider.ts","../../../../libs/platform/common/src/lib/search/search-display-string.util.ts","../../../../libs/platform/common/src/lib/search/search.provider.ts","../../../../libs/platform/common/src/lib/search/entity-search-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search.service.ts","../../../../libs/platform/common/src/lib/search/entity-row-display-title.util.ts","../../../../libs/platform/common/src/lib/search/search-entity-command.util.ts","../../../../libs/platform/common/src/lib/layout/menu/search.provider.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/footer-text-slot.component.ts","../../../../libs/platform/common/src/lib/layout/theme/components/slots/navbar-slot.component.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.provider.ts","../../../../libs/platform/common/src/lib/tokens/token-definition.service.ts","../../../../libs/platform/common/src/lib/tokens/token-evaluator-scope.provider.ts","../../../../libs/platform/common/src/lib/workflows/common.workflow.ts","../../../../libs/platform/common/src/lib/workflows/entity-workflow.events.ts","../../../../libs/platform/common/src/lib/workflows/navigate.workflow.ts","../../../../libs/platform/common/src/lib/workflows/error-handler.ts","../../../../libs/platform/common/src/lib/common.module.ts","../../../../libs/platform/common/src/lib/configs/app.config.ts","../../../../libs/platform/common/src/lib/configs/entity-create-list-behavior.util.ts","../../../../libs/platform/common/src/lib/configs/config.types.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.provider.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.service.ts","../../../../libs/platform/common/src/lib/file-actions/file-actions.types.ts","../../../../libs/platform/common/src/lib/file-actions/upload-from-computer.action-provider.ts","../../../../libs/platform/common/src/lib/file-type/file-type.provider.ts","../../../../libs/platform/common/src/lib/integration/integration.provider.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.context.ts","../../../../libs/platform/common/src/lib/integration/integration-provider.registry.service.ts","../../../../libs/platform/common/src/lib/integration/integration-secret-store.token.ts","../../../../libs/platform/common/src/lib/integration/integration-connection-established.token.ts","../../../../libs/platform/common/src/lib/integration/index.ts","../../../../libs/platform/common/src/lib/lock-system/lock.service.ts","../../../../libs/platform/common/src/lib/status-definition/status-definition-provider.service.ts","../../../../libs/platform/common/src/lib/tab-navigation/tab-preview.types.ts","../../../../libs/platform/common/src/lib/utils/clipboard-service.ts","../../../../libs/platform/common/src/lib/utils/dom-graphic.util.ts","../../../../libs/platform/common/src/lib/utils/export-popup.ts","../../../../libs/platform/common/src/lib/utils/export.service.ts","../../../../libs/platform/common/src/lib/utils/filter-cleaner.ts","../../../../libs/platform/common/src/lib/utils/locale-management-port.ts","../../../../libs/platform/common/src/lib/versioning/types.ts","../../../../libs/platform/common/src/acorex-platform-common.ts"],"sourcesContent":["//#region ---- Datasource keys ----\n\n/** Platform common datasource registry names. */\nexport const AXPPlatformCommonDataSourceKeys = {\n MenuItems: 'platform-menu-items',\n} as const;\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './datasource.keys';\n\n//#endregion\n","//#region ---- Output kind & segment ----\n\nimport type { AXPAgentOutputKind, AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- JSON Schema (minimal subset) ----\n\n/**\n * Minimal JSON-Schema-like object for native provider hints and local validation.\n */\nexport interface AXPJsonSchemaLike {\n type?: 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\n properties?: Record<string, AXPJsonSchemaLike>;\n items?: AXPJsonSchemaLike | AXPJsonSchemaLike[];\n required?: string[];\n enum?: unknown[];\n additionalProperties?: boolean | AXPJsonSchemaLike;\n description?: string;\n [key: string]: unknown;\n}\n\n//#endregion\n\n//#region ---- Provider response format ----\n\n/** Provider-native structured output hint (OpenAI `response_format`, Gemini `responseMimeType`). */\nexport type AXPAgentResponseFormat =\n | { type: 'text' }\n | { type: 'json_object' }\n | {\n type: 'json_schema';\n schema: AXPJsonSchemaLike;\n name?: string;\n strict?: boolean;\n };\n\n//#endregion\n\n//#region ---- Output contract ----\n\n/**\n * Catalog row contract for specialist final output (separate from domain `systemPrompt`).\n * Field paths align with agent/assist entity `outputContract` JSON.\n */\nexport interface AXPAgentOutputContract {\n kind: AXPAgentOutputKind;\n /**\n * When `kind` is `object`: `text` = generic JSON object as text; `node` = inner widget node in chat;\n * `followUp` = `{\"type\":\"followUp\",\"content\":[...]}` envelope.\n */\n transcriptSegment?: AXPOutputTranscriptSegmentId;\n instruction?: string;\n schemaSummary?: string;\n schema?: AXPJsonSchemaLike;\n schemaName?: string;\n schemaStrict?: boolean;\n validationCommandName?: string;\n structuredRetries?: number;\n providerResponseFormat?: AXPAgentResponseFormat;\n}\n\n/** Default structured retry count when `structuredRetries` is omitted on structured kinds. */\nexport const AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES = 2;\n\n//#endregion\n\n//#region ---- Transcript segment definition ----\n\n/**\n * Registered preset for an output-contract transcript segment.\n * Modules register via {@link AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER}.\n */\nexport interface AXPOutputContractTranscriptSegmentDefinition {\n /** Segment id (`text`, `node`, `followUp`). */\n name: AXPOutputTranscriptSegmentId;\n /** i18n key or display title for admin UI selects. */\n title: string;\n description?: string;\n /** Contract kinds this segment applies to (defaults to `object` only). */\n applicableKinds?: AXPAgentOutputKind[];\n /** Default `outputContract` field values when this segment is chosen. */\n contract: AXPAgentOutputContract;\n}\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport type { AXPOutputContractTranscriptSegmentDefinition } from './output-contract-transcript-segment.types';\n\n//#region ---- Provider token ----\n\nexport type AXPOutputContractTranscriptSegmentProviderToken =\n | AXPOutputContractTranscriptSegmentProvider\n | Promise<AXPOutputContractTranscriptSegmentProvider>;\n\n/**\n * Registers one or more transcript-segment presets for agent/assist `outputContract`.\n * Use with `multi: true` in module providers.\n */\nexport interface AXPOutputContractTranscriptSegmentProvider {\n provide():\n | AXPOutputContractTranscriptSegmentDefinition[]\n | Promise<AXPOutputContractTranscriptSegmentDefinition[]>;\n}\n\nexport const AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER = new InjectionToken<\n AXPOutputContractTranscriptSegmentProviderToken[]\n>('AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER', {\n factory: () => [],\n});\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPOutputTranscriptSegmentId } from '@acorex/platform/contracts';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from './output-contract-transcript-segment.provider';\nimport type {\n AXPAgentOutputContract,\n AXPOutputContractTranscriptSegmentDefinition,\n} from './output-contract-transcript-segment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPOutputContractTranscriptSegmentService {\n //#region ---- Dependencies & cache ----\n\n private readonly segmentProviders =\n inject(AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, { optional: true }) ?? [];\n\n private definitionsByName = new Map<string, AXPOutputContractTranscriptSegmentDefinition>();\n private loadPromise: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** All registered transcript segment definitions (deduped by `name`). */\n async getAll(): Promise<AXPOutputContractTranscriptSegmentDefinition[]> {\n await this.ensureLoaded();\n return [...this.definitionsByName.values()];\n }\n\n /** Lookup by segment id (`text`, `node`, `followUp`). */\n async get(\n name: AXPOutputTranscriptSegmentId,\n ): Promise<AXPOutputContractTranscriptSegmentDefinition | undefined> {\n await this.ensureLoaded();\n return this.definitionsByName.get(name);\n }\n\n /** Default `outputContract` for a segment, or `undefined` when not registered. */\n async getContractPreset(name: AXPOutputTranscriptSegmentId): Promise<AXPAgentOutputContract | undefined> {\n const definition = await this.get(name);\n return definition?.contract;\n }\n\n /** Clears the in-memory registry (e.g. after hot reload in dev). */\n clearCache(): void {\n this.definitionsByName.clear();\n this.loadPromise = null;\n }\n\n //#endregion\n\n //#region ---- Load ----\n\n private async ensureLoaded(): Promise<void> {\n if (this.loadPromise) {\n return this.loadPromise;\n }\n this.loadPromise = this.loadDefinitions();\n return this.loadPromise;\n }\n\n private async loadDefinitions(): Promise<void> {\n const resolvedProviders = await Promise.all(this.segmentProviders);\n\n for (const provider of resolvedProviders) {\n if (!provider) {\n continue;\n }\n const definitions = await Promise.resolve(provider.provide());\n for (const definition of definitions) {\n if (!definition?.name) {\n continue;\n }\n if (this.definitionsByName.has(definition.name)) {\n console.warn(\n `[AXPOutputContractTranscriptSegmentService] Segment \"${definition.name}\" already registered; overwriting.`,\n );\n }\n this.definitionsByName.set(definition.name, definition);\n }\n }\n }\n\n //#endregion\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface AXPAppVersion {\n version: string;\n build: number;\n date: Date;\n}\n\nexport interface AXPAppVersionProvider {\n provider(): Promise<AXPAppVersion>;\n}\n\nexport const AXP_APP_VERSION_PROVIDER = new InjectionToken<AXPAppVersionProvider>('AXP_APP_VERSION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return new AXPAppVersionDefaultProvider();\n },\n});\n\nclass AXPAppVersionDefaultProvider implements AXPAppVersionProvider {\n async provider(): Promise<AXPAppVersion> {\n return {\n version: '1.0.0',\n build: 1,\n date: new Date(),\n };\n }\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPAppVersionService {\n private provider = inject(AXP_APP_VERSION_PROVIDER);\n\n async getAppVersion(): Promise<AXPAppVersion> {\n return this.provider.provider();\n }\n}\n","export interface AXPFilterOperator {\n name: string;\n title: string;\n hasValue: boolean;\n}\n\nexport const EQ_OPER: AXPFilterOperator = { name: 'equal', title: '@general:terms.operators.equal', hasValue: true };\nexport const NOT_EQ_OPER: AXPFilterOperator = { name: 'notEqual', title: '@general:terms.operators.not-equal', hasValue: true };\nexport const GT_OPER: AXPFilterOperator = { name: 'greaterThan', title: '@general:terms.operators.greater-than', hasValue: true };\nexport const LT_OPER: AXPFilterOperator = { name: 'lessThan', title: '@general:terms.operators.less-than', hasValue: true };\nexport const GTE_OPER: AXPFilterOperator = {\n name: 'greaterThanOrEqual',\n title: '@general:terms.operators.greater-than-or-equal',\n hasValue: true,\n};\nexport const LTE_OPER: AXPFilterOperator = { name: 'lessThanOrEqual', title: '@general:terms.operators.less-than-or-equal', hasValue: true };\nexport const CONTAINS_OPER: AXPFilterOperator = { name: 'contains', title: '@general:terms.operators.contains', hasValue: true };\nexport const NOT_CONTAINS_OPER: AXPFilterOperator = { name: 'notContains', title: '@general:terms.operators.not-contains', hasValue: true };\nexport const IN_OPER: AXPFilterOperator = { name: 'in', title: '@general:terms.operators.in', hasValue: true };\nexport const STARTS_WITH_OPER: AXPFilterOperator = { name: 'startsWith', title: '@general:terms.operators.starts-with', hasValue: true };\nexport const ENDS_WITH_OPER: AXPFilterOperator = { name: 'endsWith', title: '@general:terms.operators.ends-with', hasValue: true };\nexport const IS_EMPTY_OPER: AXPFilterOperator = { name: 'isEmpty', title: '@general:terms.operators.is-empty', hasValue: false };\nexport const IS_NOT_EMPTY_OPER: AXPFilterOperator = { name: 'isNotEmpty', title: '@general:terms.operators.is-not-empty', hasValue: false };\nexport const BETWEEN_OPER: AXPFilterOperator = { name: 'between', title: '@general:terms.operators.between', hasValue: true };\n\nexport const STRING_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n CONTAINS_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n IN_OPER\n];\n\nexport const NUMBER_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const BOOLEAN_OPERATORS = [EQ_OPER];\n\nexport const DATE_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n BETWEEN_OPER,\n GT_OPER,\n GTE_OPER,\n LT_OPER,\n LTE_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n];\n\nexport const ALL_DEFAULT_OPERATORS = [\n EQ_OPER,\n NOT_EQ_OPER,\n GT_OPER,\n LT_OPER,\n GTE_OPER,\n LTE_OPER,\n CONTAINS_OPER,\n IN_OPER,\n NOT_CONTAINS_OPER,\n STARTS_WITH_OPER,\n ENDS_WITH_OPER,\n IS_EMPTY_OPER,\n IS_NOT_EMPTY_OPER,\n BETWEEN_OPER,\n];\n","import type { AXCalendarService } from '@acorex/core/date-time';\n\nimport { BETWEEN_OPER } from './operators';\n\nexport type AXPDateTimeFilterPresetKind = 'computed' | 'manual';\n\nexport interface AXPDateTimeFilterPreset {\n id: string;\n title: string;\n kind: AXPDateTimeFilterPresetKind;\n operationType?: string;\n}\n\nexport const DEFAULT_DATE_FILTER_PRESETS: AXPDateTimeFilterPreset[] = [\n { id: 'today', title: '@general:terms.date-presets.today', kind: 'computed' },\n { id: 'this-week', title: '@general:terms.date-presets.this-week', kind: 'computed' },\n { id: 'this-month', title: '@general:terms.date-presets.this-month', kind: 'computed' },\n { id: 'yesterday', title: '@general:terms.date-presets.yesterday', kind: 'computed' },\n { id: 'last-week', title: '@general:terms.date-presets.last-week', kind: 'computed' },\n { id: 'last-month', title: '@general:terms.date-presets.last-month', kind: 'computed' },\n { id: 'tomorrow', title: '@general:terms.date-presets.tomorrow', kind: 'computed' },\n { id: 'next-week', title: '@general:terms.date-presets.next-week', kind: 'computed' },\n { id: 'next-month', title: '@general:terms.date-presets.next-month', kind: 'computed' },\n { id: 'between', title: BETWEEN_OPER.title, kind: 'manual', operationType: 'between' },\n { id: 'greater-than', title: '@general:terms.operators.greater-than', kind: 'manual', operationType: 'greaterThan' },\n { id: 'less-than', title: '@general:terms.operators.less-than', kind: 'manual', operationType: 'lessThan' },\n];\n\nexport interface AXPDateTimeFilterValue {\n operation?: { type: string };\n value?: string | { from?: string; to?: string };\n}\n\nexport function resolveDateFilterPresets(\n customPresets?: AXPDateTimeFilterPreset[],\n presetIds?: string[],\n): AXPDateTimeFilterPreset[] {\n let presets = customPresets?.length ? customPresets : DEFAULT_DATE_FILTER_PRESETS;\n if (presetIds?.length) {\n presets = presets.filter((p) => presetIds.includes(p.id));\n }\n return presets;\n}\n\nexport function applyDateFilterPreset(\n presetId: string,\n calendarService: AXCalendarService,\n): AXPDateTimeFilterValue | undefined {\n const currentDate = calendarService.now().date;\n const calendar = calendarService.calendar;\n\n switch (presetId) {\n case 'today':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'day').date.toISOString(),\n to: calendar.endOf(currentDate, 'day').date.toISOString(),\n },\n };\n case 'this-week':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'week').date.toISOString(),\n to: calendar.endOf(currentDate, 'week').date.toISOString(),\n },\n };\n case 'this-month':\n return {\n operation: { type: 'between' },\n value: {\n from: calendar.startOf(currentDate, 'month').date.toISOString(),\n to: calendar.endOf(currentDate, 'month').date.toISOString(),\n },\n };\n case 'yesterday': {\n const yesterday = calendar.add(currentDate, 'day', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: yesterday.startOf('day').date.toISOString(),\n to: yesterday.endOf('day').date.toISOString(),\n },\n };\n }\n case 'last-week': {\n const lastWeek = calendar.add(currentDate, 'week', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastWeek.startOf('week').date.toISOString(),\n to: lastWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'last-month': {\n const lastMonth = calendar.add(currentDate, 'month', -1);\n return {\n operation: { type: 'between' },\n value: {\n from: lastMonth.startOf('month').date.toISOString(),\n to: lastMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'tomorrow': {\n const tomorrow = calendar.add(currentDate, 'day', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: tomorrow.startOf('day').date.toISOString(),\n to: tomorrow.endOf('day').date.toISOString(),\n },\n };\n }\n case 'next-week': {\n const nextWeek = calendar.add(currentDate, 'week', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextWeek.startOf('week').date.toISOString(),\n to: nextWeek.endOf('week').date.toISOString(),\n },\n };\n }\n case 'next-month': {\n const nextMonth = calendar.add(currentDate, 'month', 1);\n return {\n operation: { type: 'between' },\n value: {\n from: nextMonth.startOf('month').date.toISOString(),\n to: nextMonth.endOf('month').date.toISOString(),\n },\n };\n }\n case 'between':\n return undefined;\n case 'greater-than':\n return { operation: { type: 'greaterThan' } };\n case 'less-than':\n return { operation: { type: 'lessThan' } };\n default:\n return {\n operation: { type: 'between' },\n value: { from: '', to: '' },\n };\n }\n}\n\nexport function findManualPresetIdByOperation(\n operationType: string | undefined,\n presets: AXPDateTimeFilterPreset[],\n): string | undefined {\n if (!operationType) {\n return undefined;\n }\n return presets.find((p) => p.kind === 'manual' && p.operationType === operationType)?.id;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Route } from '@angular/router';\n\nexport interface AXPHomePageDefinition {\n key: string,\n title: string,\n route: Route\n}\n\n\nexport const AXP_HOME_PAGES = new InjectionToken<AXPHomePageDefinition[]>('AXP_HOME_PAGES');\nexport const AXP_HOME_PAGE_DEFAULT_KEY = new InjectionToken<string>('AXP_HOME_PAGE_DEFAULT_KEY', {\n factory: () => 'home'\n});\n\n","export enum AXPCommonSettings {\n EnableOperationToasts = 'Common:Setting:Notifications.EnableOperationToasts',\n EntityFilterApplyMode = 'Common:Setting:Entity.FilterApplyMode',\n ShowCategoryColumnsByDefault = 'Common:Setting:Entity.ShowCategoryColumnsByDefault',\n ApplyLayoutOrdering = 'Common:Setting:Entity.ApplyLayoutOrdering',\n RedirectToDetailsAfterCreate = 'Common:Setting:Entity.RedirectToDetailsAfterCreate',\n HighlightAfterCreateInList = 'Common:Setting:Entity.HighlightAfterCreateInList',\n ShowPageBadge = 'Common:Setting:Entity.ShowPageBadge',\n ConfirmUnsavedChanges = 'Common:Setting:Entity.ConfirmUnsavedChanges',\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n ShowRowIndexColumn = 'Common:Setting:Entity.ShowRowIndexColumn',\n EntityListPersistenceMode = 'Common:Setting:Entity.ListPersistenceMode',\n NavigationMode = 'Common:Setting:Navigation.Mode',\n MaxOpenTabs = 'Common:Setting:Navigation.MaxOpenTabs',\n}\n","\nimport { AXPWidgetTypesMap } from '@acorex/platform/layout/widget-core-contracts';\nimport { AXPOptionsData, AXPPlatformScopeKey, AXPValidationRules, AXPValueTransformerFunctions, AXPWidgetTriggers } from '@acorex/platform/contracts';\n\nimport { merge } from 'lodash-es';\nimport { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection, AXPSettingLayoutOptions } from './index';\n\nexport class AXPSettingDefinitionProviderContext {\n private rootGroups: AXPSettingDefinitionGroup[] = [];\n private groupMap: Map<string, AXPSettingDefinitionGroup> = new Map();\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n\n this.rootGroups.push(newGroup);\n this.groupMap.set(name, newGroup); // Index by name\n return new AXPSettingDefinitionGroupBuilder(this, newGroup);\n }\n\n group(name: string): AXPSettingDefinitionGroupBuilder | null {\n const foundGroup = this.groupMap.get(name);\n if (!foundGroup) {\n console.error(`Group with name \"${name}\" not found.`);\n return null;\n }\n return new AXPSettingDefinitionGroupBuilder(this, foundGroup);\n }\n\n getGroups(): AXPSettingDefinitionGroup[] {\n return this.rootGroups;\n }\n\n // Expose groupMap for controlled access\n hasGroup(name: string): boolean {\n return this.groupMap.has(name);\n }\n\n getGroup(name: string): AXPSettingDefinitionGroup | undefined {\n return this.groupMap.get(name);\n }\n}\n\nexport class AXPSettingDefinitionGroupBuilder {\n private context: AXPSettingDefinitionProviderContext;\n private group: AXPSettingDefinitionGroup;\n\n constructor(context: AXPSettingDefinitionProviderContext, group: AXPSettingDefinitionGroup) {\n this.context = context;\n this.group = group;\n }\n\n addSection(name: string, title: string, description?: string): AXPSettingDefinitionSectionBuilder {\n const newSection: AXPSettingDefinitionSection = {\n name,\n title,\n description: description,\n settings: [],\n };\n this.group.sections.push(newSection);\n return new AXPSettingDefinitionSectionBuilder(this, newSection);\n }\n\n section(name: string): AXPSettingDefinitionSectionBuilder | null {\n const foundSection = this.group.sections.find((section) => section.name === name);\n if (!foundSection) {\n throw new Error(`Section with name \"${name}\" not found in group \"${this.group.name}\".`);\n }\n return new AXPSettingDefinitionSectionBuilder(this, foundSection);\n }\n\n addGroup(\n name: string,\n title: string,\n description?: string,\n icon?: string,\n pageTitle?: string,\n priority?: number,\n ): AXPSettingDefinitionGroupBuilder {\n const newGroup: AXPSettingDefinitionGroup = {\n name,\n title,\n pageTitle,\n description: description,\n icon,\n priority,\n groups: [],\n sections: [],\n };\n this.group.groups.push(newGroup);\n if (this.context.hasGroup(name)) {\n throw new Error(`Group with name \"${name}\" already exists.`);\n }\n this.context['groupMap'].set(name, newGroup);\n return new AXPSettingDefinitionGroupBuilder(this.context, newGroup);\n }\n\n endGroup(): AXPSettingDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSettingDefinitionSectionBuilder {\n private groupBuilder: AXPSettingDefinitionGroupBuilder;\n private section: AXPSettingDefinitionSection;\n\n constructor(groupBuilder: AXPSettingDefinitionGroupBuilder, section: AXPSettingDefinitionSection) {\n this.groupBuilder = groupBuilder;\n this.section = section;\n }\n\n addSetting(setting: {\n key: string;\n title: string;\n scope: AXPPlatformScopeKey;\n widget: {\n type: AXPWidgetTypesMap[keyof AXPWidgetTypesMap] | string;\n options?: AXPOptionsData;\n triggers?: AXPWidgetTriggers;\n layout?: AXPSettingLayoutOptions;\n };\n description?: string;\n searchTagKeys?: string[];\n isRequired?: boolean;\n isInherited?: boolean;\n isEncrypted?: boolean;\n requiresPageRefresh?: boolean;\n defaultValue?: unknown;\n valueTransforms?: AXPValueTransformerFunctions;\n validationRules?: AXPValidationRules;\n }): this {\n const newSetting: AXPSettingDefinition = {\n name: setting.key,\n title: setting.title,\n description: setting.description,\n searchTagKeys: setting.searchTagKeys,\n isRequired: setting.isRequired ?? false,\n isInherited: setting.isInherited ?? false,\n isEncrypted: setting.isEncrypted ?? false,\n requiresPageRefresh: setting.requiresPageRefresh ?? false,\n defaultValue: setting.defaultValue,\n scope: setting.scope ?? 'P',\n layout: setting.widget.layout,\n widget: {\n type: setting.widget.type,\n name: setting.key,\n path: setting.key,\n defaultValue: setting.defaultValue,\n options: merge(setting.widget.options ?? {},\n {\n label: Object.keys(setting.widget.options ?? {}).includes('label') ? setting.widget.options?.['label'] : setting.title,\n validationRules: setting.validationRules ?? [],\n }),\n valueTransforms: setting.valueTransforms,\n triggers: setting.widget.triggers,\n },\n } as AXPSettingDefinition;\n this.section.settings.push(newSetting);\n return this;\n }\n\n endSection(): AXPSettingDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}\n","import { AXPPlatformScope, AXPPlatformScopeKey } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { AXPSettingDefinitionProviderContext } from './setting.builder';\nimport { AXPGroupSearchResult, AXPSettingDefaultValuesProvider, AXPSettingDefinitionGroup } from './settings.types';\n// Interface for setting providers\nexport interface AXPSettingDefinitionProvider {\n provide(context: AXPSettingDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken<AXPSettingDefinitionProvider[]>(\n 'AXP_SETTING_DEFINITION_PROVIDER',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefinitionProviderService {\n private providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPSettingDefinitionGroup[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSettingDefinitionProviderContext();\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n }\n }\n\n this.cache = context.getGroups();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getListAsync(scope: AXPPlatformScopeKey): Promise<AXPSettingDefinitionGroup[]> {\n await this.load();\n return this.getList(scope);\n }\n\n public getList(scope: AXPPlatformScopeKey): AXPSettingDefinitionGroup[] {\n if (!this.cache) {\n return [];\n }\n\n const scopeOrder = ['P', 'T', 'U']; // Scopes hierarchy in ascending order\n\n const filterByScope = (\n groups: AXPSettingDefinitionGroup[],\n currentScope: AXPPlatformScopeKey,\n ): AXPSettingDefinitionGroup[] => {\n const currentScopeIndex = scopeOrder.indexOf(currentScope);\n\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: section.settings.filter((setting) => {\n const settingScopeIndex = scopeOrder.indexOf(setting.scope);\n\n // Include settings where:\n // 1. The scope matches the requested scope.\n if (setting.scope === currentScope) return true;\n\n // 2. The setting scope is higher (closer to 'U') and is inherited.\n if (\n setting.isInherited &&\n settingScopeIndex > currentScopeIndex // Higher scope\n ) {\n return true;\n }\n\n // 3. Exclude settings with a lower or irrelevant scope.\n return false;\n }),\n }))\n .filter((section) => section.settings.length > 0), // Keep only sections with settings\n groups: filterByScope(group.groups, currentScope), // Recursively filter nested groups\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0); // Keep groups with valid sections or nested groups\n };\n\n return sortBy(filterByScope(this.cache, scope), [(group) => group.priority ?? 1000, 'title']);\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n const defaults: Record<string, unknown> = {};\n\n const collectDefaults = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.defaultValue !== undefined) {\n defaults[setting.name] = setting.defaultValue;\n }\n });\n });\n collectDefaults(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collectDefaults(this.cache!);\n\n return defaults;\n }\n\n async settingScopeByKey(): Promise<Record<string, AXPPlatformScope>> {\n const scopes: Record<string, AXPPlatformScope> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n scopes[setting.name] = setting.scope as AXPPlatformScope;\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return scopes;\n }\n\n async requiresPageRefreshByKey(): Promise<Record<string, boolean>> {\n const refreshByKey: Record<string, boolean> = {};\n\n const collect = (groups: AXPSettingDefinitionGroup[]) => {\n groups.forEach((group) => {\n group.sections.forEach((section) => {\n section.settings.forEach((setting) => {\n if (setting.requiresPageRefresh) {\n refreshByKey[setting.name] = true;\n }\n });\n });\n collect(group.groups);\n });\n };\n\n if (!this.cache) {\n await this.load();\n }\n collect(this.cache!);\n\n return refreshByKey;\n }\n\n public findGroup(scope: AXPPlatformScopeKey, groupName: string): AXPGroupSearchResult {\n return this.searchRecursive(this.getList(scope), groupName, []); // Initialize with an empty breadcrumb\n }\n\n private searchRecursive(\n groups: AXPSettingDefinitionGroup[],\n groupName: string,\n breadcrumb: { name: string; title: string }[],\n ): AXPGroupSearchResult {\n for (const group of groups) {\n const currentBreadcrumb = [\n ...breadcrumb,\n { name: group.name, title: group.title, description: group.description },\n ];\n\n // If the group name matches, return its details\n if (group.name === groupName) {\n return {\n breadcrumb: currentBreadcrumb,\n sections: group.sections.length > 0 ? group.sections : null,\n groups: group.groups.length > 0 ? group.groups : null,\n };\n }\n\n // Recursively search in nested groups\n const nestedResult = this.searchRecursive(group.groups, groupName, currentBreadcrumb);\n if (nestedResult.breadcrumb.length > 0) {\n return nestedResult;\n }\n }\n\n // If no matching group is found\n return {\n breadcrumb: [],\n groups: [],\n sections: [],\n };\n }\n}\n\n// Multi-provider token for higher-layer default values\nexport const AXP_SETTING_DEFAULT_VALUES_PROVIDERS = new InjectionToken<AXPSettingDefaultValuesProvider[]>(\n 'AXP_SETTING_DEFAULT_VALUES_PROVIDERS',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\nexport interface AXPSettingMergedDefaults {\n defaults: Record<string, unknown>;\n /** Per-key scope override for seeding (from providers that set `scope`). */\n seedScopeByKey: Record<string, AXPPlatformScope>;\n}\n\n// Aggregator service that merges definition defaults with higher-layer providers (by priority)\n@Injectable({ providedIn: 'root' })\nexport class AXPSettingDefaultValuesAggregatorService {\n private readonly definitionService = inject(AXPSettingDefinitionProviderService);\n private readonly providers = inject(AXP_SETTING_DEFAULT_VALUES_PROVIDERS, { optional: true }) ?? [];\n\n async getMerged(): Promise<AXPSettingMergedDefaults> {\n const baseDefaults = await this.definitionService.defaultValues();\n const ordered = [...this.providers].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n const merged: Record<string, unknown> = { ...baseDefaults };\n const seedScopeByKey: Record<string, AXPPlatformScope> = {};\n for (const provider of ordered) {\n try {\n const overrideMap = await provider.provide();\n Object.assign(merged, overrideMap);\n if (provider.scope) {\n for (const key of Object.keys(overrideMap)) {\n seedScopeByKey[key] = provider.scope;\n }\n }\n } catch (err) {\n console.error('AXPSettingDefaultValuesProvider failed:', err);\n }\n }\n return { defaults: merged, seedScopeByKey };\n }\n\n async getDefaults(): Promise<Record<string, unknown>> {\n const { defaults } = await this.getMerged();\n return defaults;\n }\n}\n","//#region ---- Imports ----\n\nimport { coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, unwrapValueProperty } from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Supported primitive coercions for persisted setting values (including `{ value: ... }` wrappers).\n */\nexport type AXPSettingCoercionKind = 'string' | 'boolean' | 'number' | 'date';\n\n//#endregion\n\n//#region ---- Kind inference ----\n\n/**\n * If the payload uses the common `{ value: T }` shape from setting widgets, returns the inner value; otherwise returns `raw`.\n */\nexport function peelSettingValueKey(raw: unknown): unknown {\n return unwrapValueProperty(raw);\n}\n\nfunction coercionKindFromScalarSample(v: unknown): AXPSettingCoercionKind | null {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return 'boolean';\n }\n if (typeof v === 'number' && Number.isFinite(v)) {\n return 'number';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (typeof v === 'string') {\n if (v === 'true' || v === 'false') {\n return 'boolean';\n }\n return 'string';\n }\n return null;\n}\n\n/**\n * Picks a primitive coercion kind from the setting definition default and/or the effective stored value.\n * Type argument `T` on the settings service `get` method is compile-time only; runtime behavior follows this inference.\n */\nexport function inferSettingCoercionKind(defaultSample: unknown, effective: unknown): AXPSettingCoercionKind | null {\n const fromDefault = coercionKindFromScalarSample(defaultSample);\n if (fromDefault) {\n return fromDefault;\n }\n return coercionKindFromScalarSample(unwrapValueProperty(effective));\n}\n\n//#endregion\n\n//#region ---- Value coercion ----\n\nexport function coerceAXPSettingRawValueByKind(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n switch (kind) {\n case 'string':\n return coerceUnknownToTrimmedString(raw);\n case 'boolean':\n return coerceUnknownToBoolean(raw);\n case 'number':\n return coerceUnknownToFiniteNumber(raw);\n case 'date':\n return coerceUnknownToDate(raw);\n default: {\n const _exhaustive: never = kind;\n return _exhaustive;\n }\n }\n}\n\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'string'): string;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'boolean'): boolean;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'number'): number;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: 'date'): Date;\nexport function coerceAXPSettingRawValue(raw: unknown, kind: AXPSettingCoercionKind): string | boolean | number | Date {\n return coerceAXPSettingRawValueByKind(raw, kind);\n}\n\n//#endregion\n","import { AXPSessionService, AXPSessionStatus } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { inject, InjectionToken, Injector } from '@angular/core';\nimport { AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport const AXP_SETTING_VALUE_PROVIDER = new InjectionToken<AXPSettingValueProvider[]>('AXP_SETTING_VALUE_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return [\n new AXPSettingValueProviderDefault(AXPPlatformScope.Platform, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.Tenant, injector),\n new AXPSettingValueProviderDefault(AXPPlatformScope.User, injector),\n ];\n },\n});\n\nclass AXPSettingValueProviderDefault implements AXPSettingValueProvider {\n private readonly cache: Map<string, any> = new Map();\n private localStorageKey: string | null = null;\n private sessionService = this.injector.get(AXPSessionService);\n\n constructor(\n private _scope: AXPPlatformScope,\n private injector: Injector,\n ) {\n // Platform scope doesn't depend on session, initialize immediately\n if (this.scope === AXPPlatformScope.Platform) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(P)`;\n } else {\n this.sessionService.status$.subscribe((status) => {\n if (status === AXPSessionStatus.Authorized || status === AXPSessionStatus.Authenticated) {\n if (this.scope === AXPPlatformScope.User) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.user?.id ?? 'U'})`;\n } else if (this.scope === AXPPlatformScope.Tenant) {\n this.localStorageKey = `AXP_SETTINGS_SCOPE(${this.sessionService.tenant?.id ?? 'T'})`;\n }\n }\n });\n }\n }\n\n public get scope(): AXPPlatformScope {\n return this._scope;\n }\n\n async load(): Promise<AXPSettingValue[]> {\n if (!this.localStorageKey) {\n return Promise.resolve([]);\n }\n // Load settings from localStorage as a single key\n const storedSettings = localStorage.getItem(this.localStorageKey);\n if (storedSettings) {\n const parsedSettings: Record<string, any> = JSON.parse(storedSettings);\n Object.entries(parsedSettings).forEach(([key, value]) => {\n this.cache.set(key, value);\n });\n return Promise.resolve(Array.from(this.cache.entries()).map((c) => ({ key: c[0], value: c[1] })));\n }\n return Promise.resolve([]);\n }\n\n async set(key: string, value: any): Promise<void>;\n async set(values: Record<string, any>): Promise<void>;\n async set(keyOrValues: string | Record<string, any>, value?: any): Promise<void> {\n if (typeof keyOrValues === 'string') {\n // Single value update\n this.cache.set(keyOrValues, value);\n } else {\n // Bulk update\n for (const [key, val] of Object.entries(keyOrValues)) {\n this.cache.set(key, val);\n }\n }\n await this.saveToLocalStorage();\n }\n\n private async saveToLocalStorage(): Promise<void> {\n if (!this.localStorageKey) {\n return;\n }\n const settingsObject: Record<string, any> = {};\n this.cache.forEach((value, key) => {\n settingsObject[key] = value;\n });\n localStorage.setItem(this.localStorageKey, JSON.stringify(settingsObject));\n }\n\n private async clear() {\n if (!this.localStorageKey) {\n return;\n }\n localStorage.removeItem(this.localStorageKey);\n }\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPPlatformScope } from '@acorex/platform/contracts';\nimport { AXPBroadcastEventService, AXPDebugService } from '@acorex/platform/core';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { cloneDeep, get } from 'lodash-es';\nimport { distinctUntilChanged, Subject } from 'rxjs';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport {\n AXPSettingDefaultValuesAggregatorService,\n AXPSettingDefinitionProviderService,\n} from './setting-definition.service';\nimport { coerceAXPSettingRawValueByKind, inferSettingCoercionKind } from './settings-coercion';\nimport { AXP_SETTING_VALUE_PROVIDER } from './settings.provider';\nimport { AXPSettingChangedEvent, AXPSettingValue, AXPSettingValueProvider } from './settings.types';\n\nexport interface AXPSettingsServiceInterface {\n load(): Promise<AXPSettingValue[]>;\n get<T = any>(key: string): Promise<T>;\n defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;\n scope(scope: AXPPlatformScope): ScopedSettingService;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSettingsService implements AXPSettingsServiceInterface {\n private readonly providers: AXPSettingValueProvider[] = inject<AXPSettingValueProvider[]>(AXP_SETTING_VALUE_PROVIDER);\n private readonly injector = inject(Injector);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly debugService = inject(AXPDebugService);\n private readonly scopedSettingsCache: Map<string, Map<string, any>> = new Map();\n public readonly onChanged = new Subject<AXPSettingChangedEvent>();\n public readonly onLoaded = new Subject<void>();\n\n constructor() {\n // Initialize scoped caches for dynamic scopes\n const staticScopes = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User];\n staticScopes.forEach((scope) => {\n if (!this.scopedSettingsCache.has(scope)) {\n this.scopedSettingsCache.set(scope, new Map());\n }\n });\n\n // Listen for setting changes from other tabs\n this.eventService.listen<AXPSettingChangedEvent>('AXPSettingChangedEvent').subscribe((event) => {\n const data = event.data;\n data.keys.forEach((key) => {\n this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);\n });\n this.onChanged.next(data); // Notify subscribers in the current tab\n void this.applyDebugModeFromEvent(data);\n });\n // reload settings when user is authenticated\n this.sessionService.isAuthenticated$.pipe(distinctUntilChanged()).subscribe(async (isAuthenticated) => {\n if (isAuthenticated) {\n await this.reload();\n }\n });\n }\n\n async reload(): Promise<void> {\n await this.load();\n }\n\n async load(): Promise<AXPSettingValue[]> {\n try {\n const settingsList: AXPSettingValue[] = [];\n for (const provider of this.providers) {\n const scopeCache = this.scopedSettingsCache.get(provider.scope) ?? new Map();\n const providerSettings = await provider.load();\n providerSettings.forEach((setting) => {\n scopeCache.set(setting.key, setting.value);\n });\n settingsList.push(...providerSettings);\n }\n await this.seedMissingDefaults();\n this.onLoaded.next();\n await this.applyDebugModeFromSettings();\n return settingsList;\n } catch (error) {\n console.error('Error loading settings', error);\n throw error;\n }\n }\n\n /**\n * Returns the effective setting value. Primitive coercion (string, boolean, number, date) is inferred from the\n * definition default and/or the stored shape (including `{ value: ... }`). Type argument `T` is compile-time only;\n * it is not read at runtime—use it to document the expected result (e.g. `get<boolean>(key)`).\n */\n async get<T = any>(key: string): Promise<T> {\n const { effective, defaultSample } = await this.resolveEffectiveAndDefault(key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n /**\n * Effective value (user → tenant → platform) when set; otherwise the definition default. Used for reads and coercion hints.\n */\n private async resolveEffectiveAndDefault(key: string): Promise<{ effective: unknown; defaultSample: unknown }> {\n if (this.scopedSettingsCache.size === 0) {\n await this.load();\n }\n const defaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n const defaultSample = get(defaults, key);\n const scopeOrder = [AXPPlatformScope.User, AXPPlatformScope.Tenant, AXPPlatformScope.Platform];\n for (const scope of scopeOrder) {\n const scopeCache = this.scopedSettingsCache.get(scope);\n if (scopeCache && scopeCache.has(key)) {\n const value = scopeCache.get(key);\n if (value !== undefined && value !== null) {\n return { effective: value, defaultSample };\n }\n }\n }\n return { effective: defaultSample, defaultSample };\n }\n\n async defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>> {\n let scopeOrder = [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].reverse();\n const scopeIndex = scopeOrder.indexOf(scope);\n\n if (scopeIndex === -1) {\n throw new Error(`Invalid scope: ${scope}`);\n }\n scopeOrder = scopeOrder.slice(scopeIndex + 1);\n // Accumulate defaults from the current scope and higher scopes\n const accumulatedDefaults: Record<string, unknown> = {};\n for (let i = scopeIndex; i < scopeOrder.length; i++) {\n const currentScope = scopeOrder[i];\n const scopeCache = this.scopedSettingsCache.get(currentScope);\n\n if (scopeCache) {\n scopeCache.forEach((value, key) => {\n if (!(key in accumulatedDefaults)) {\n accumulatedDefaults[key] = value;\n }\n });\n }\n }\n\n // Merge with aggregated default values (definition + higher-layer providers)\n const globalDefaults = await this.injector.get(AXPSettingDefaultValuesAggregatorService).getDefaults();\n return { ...globalDefaults, ...accumulatedDefaults };\n }\n\n scope(scope: AXPPlatformScope): ScopedSettingService {\n const provider = this.providers.find((p) => p.scope === scope);\n if (!provider) {\n throw new Error(`No provider found for scope: ${scope}`);\n }\n return new ScopedSettingService(this, provider, this.scopedSettingsCache.get(scope)!);\n }\n\n invokeChangeEvent(event: AXPSettingChangedEvent) {\n this.onChanged.next(event);\n this.applyDebugModeFromEvent(event);\n this.eventService.publish<AXPSettingChangedEvent>('AXPSettingChangedEvent', event);\n }\n\n private async applyDebugModeFromSettings(): Promise<void> {\n try {\n const debugMode = await this.get<boolean>(AXPCommonSettings.DebugMode);\n this.debugService.setDebugMode(!!debugMode);\n } catch {\n this.debugService.setDebugMode(false);\n }\n }\n\n private applyDebugModeFromEvent(event: AXPSettingChangedEvent): void {\n if (!event.keys.includes(AXPCommonSettings.DebugMode)) {\n return;\n }\n\n this.debugService.setDebugMode(!!event.values[AXPCommonSettings.DebugMode]);\n }\n\n private async seedMissingDefaults(): Promise<void> {\n const definitionService = this.injector.get(AXPSettingDefinitionProviderService);\n const aggregator = this.injector.get(AXPSettingDefaultValuesAggregatorService);\n const [{ defaults, seedScopeByKey }, scopeByKey] = await Promise.all([\n aggregator.getMerged(),\n definitionService.settingScopeByKey(),\n ]);\n const persistedKeysByScope = new Map(\n await Promise.all(\n this.providers.map(async (provider) => {\n const stored = await provider.load();\n return [provider.scope, new Set(stored.map((s) => s.key))] as const;\n }),\n ),\n );\n const toPersist: Partial<Record<AXPPlatformScope, Record<string, unknown>>> = {};\n\n for (const [key, value] of Object.entries(defaults)) {\n const scope = seedScopeByKey[key] ?? scopeByKey[key];\n if (!scope || value === undefined || persistedKeysByScope.get(scope)?.has(key)) {\n continue;\n }\n toPersist[scope] ??= {};\n toPersist[scope]![key] = value;\n }\n\n for (const [scope, values] of Object.entries(toPersist) as [AXPPlatformScope, Record<string, unknown>][]) {\n if (Object.keys(values).length > 0) {\n await this.scope(scope).set(values);\n }\n }\n }\n}\n\nclass ScopedSettingService {\n constructor(\n private parent: AXPSettingsService,\n private provider: AXPSettingValueProvider,\n private scopeCache: Map<string, any>,\n ) {}\n\n async get<T = any>(key: string): Promise<T> {\n const settings = await this.provider.load();\n const setting = settings.find((s) => s.key === key);\n const effective = setting?.value;\n const defaults = await this.parent.defaultValues(this.provider.scope);\n const defaultSample = get(defaults, key);\n const kind = inferSettingCoercionKind(defaultSample, effective);\n if (kind !== null) {\n return coerceAXPSettingRawValueByKind(effective, kind) as T;\n }\n if (effective === undefined) {\n return effective as T;\n }\n return cloneDeep(effective) as T;\n }\n\n async all(): Promise<any> {\n const settings = await this.provider.load();\n return Object.fromEntries(settings.map((s) => [s.key, cloneDeep(s.value)]));\n }\n\n async defaultValues(): Promise<Record<string, unknown>> {\n return this.parent.defaultValues(this.provider.scope);\n }\n\n async set<T = any>(key: string, value: T): Promise<void>;\n async set<T = any>(values: Record<string, T>): Promise<void>;\n async set<T = any>(keyOrValues: string | Record<string, T>, value?: T): Promise<void> {\n if (typeof keyOrValues === 'string') {\n await this.provider.set(keyOrValues, value);\n this.scopeCache.set(keyOrValues, value);\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: [keyOrValues],\n values: { [keyOrValues]: value },\n entries: [{ key: keyOrValues, value }],\n });\n } else {\n await this.provider.set(keyOrValues);\n Object.entries(keyOrValues).forEach(([key, val]) => this.scopeCache.set(key, val));\n const entries = Object.entries(keyOrValues).map(([key, val]) => ({ key, value: val }));\n this.parent.invokeChangeEvent({\n scope: this.provider.scope,\n keys: Object.keys(keyOrValues),\n values: keyOrValues,\n entries,\n });\n }\n }\n\n async update<T = any>(key: string, updateFn: (currentValue: T) => T): Promise<void> {\n const currentValue = await this.get<T>(key);\n const newValue = updateFn(currentValue);\n await this.set(key, newValue);\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\n\nimport { AXPRegionalSetting } from '@acorex/platform/contracts';\nimport { AXPSettingsService } from './settings.service';\n\nconst DEFAULT_APPLY_DEFAULT_MULTILANGUAGE = true;\n\n/**\n * Synchronous access to default multi-language behavior for named entity fields and widget\n * property bindings. Mirrors {@link AXPLayoutOrderingConfigService}: avoids async in entity\n * modifiers and startup deadlocks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDefaultMultiLanguageConfigService {\n private readonly settingsService = inject(AXPSettingsService);\n\n private readonly _applyDefault = signal<boolean>(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n private syncScheduled = false;\n\n constructor() {\n this.settingsService.onLoaded.subscribe(() => this.syncFromSettings());\n this.settingsService.onChanged.subscribe(() => this.syncFromSettings());\n }\n\n getApplyDefaultMultiLanguage(): boolean {\n if (!this.syncScheduled) {\n this.syncScheduled = true;\n this.settingsService\n .get<boolean>(AXPRegionalSetting.MultiLanguageSupport)\n .then((value) => this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE))\n .catch(() => this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE));\n }\n return this._applyDefault();\n }\n\n private async syncFromSettings(): Promise<void> {\n try {\n const value = await this.settingsService.get<boolean>(AXPRegionalSetting.MultiLanguageSupport);\n this._applyDefault.set(value ?? DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n } catch {\n this._applyDefault.set(DEFAULT_APPLY_DEFAULT_MULTILANGUAGE);\n }\n }\n}\n","/**\n * Shared multi-language defaults for entity properties and widget property bindings.\n *\n * **Circular dependencies:** use only `import type` for `AXPWidgetProperty` and\n * `AXPEntityProperty` so this module has no runtime imports from widget-core or application\n * types — `@acorex/platform/layout/widget-core` does not import `@acorex/platform/common`.\n */\nimport type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\n\nimport type { AXPEntityProperty } from '@acorex/platform/layout/entity-contracts';\n\n//#region ---- Constants ----\n\n/**\n * Widget types that support the multiLanguage option (text / rich text editors).\n */\nexport const MULTILANGUAGE_CAPABLE_WIDGET_TYPES = new Set<string>([\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'template-content-editor',\n]);\n\n/**\n * Common property names / binding path segments that are usually translatable when the feature is\n * enabled in settings. Explicit `multiLanguage` on the property still wins.\n */\nexport const DEFAULT_MULTILANGUAGE_FIELD_NAMES = new Set<string>([\n 'title',\n 'description',\n 'note',\n 'content',\n /** e.g. `post.summaryContent` — last path segment */\n 'summaryContent',\n 'question',\n 'summary',\n 'body',\n 'caption',\n 'remarks',\n 'subtitle',\n 'label',\n 'placeholder',\n 'message',\n 'subject',\n]);\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction interfacePathLastSegment(path: string | undefined): string | null {\n if (path == null || typeof path !== 'string' || !path.length) {\n return null;\n }\n const seg = path.includes('.') ? path.split('.').pop() : path;\n return seg && seg.length ? seg : null;\n}\n\nexport function shouldApplyDefaultMultiLanguageToEntityProperty(prop: AXPEntityProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n if (!DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(prop.name)) {\n return false;\n }\n const widgetType = prop.schema.interface?.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface?.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\nexport function shouldApplyDefaultMultiLanguageToWidgetProperty(prop: AXPWidgetProperty): boolean {\n if (prop.schema.dataType !== 'string') {\n return false;\n }\n const key = interfacePathLastSegment(prop.schema.interface.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const widgetType = prop.schema.interface.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const opts = prop.schema.interface.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * Leaf widget nodes in entity `schema.interface` trees (e.g. GridLayout → RichText under `pre` /\n * `post`) — same path/type rules as {@link shouldApplyDefaultMultiLanguageToWidgetProperty}, without\n * `schema.dataType` (nodes do not carry entity schema).\n */\nexport function shouldApplyDefaultMultiLanguageToWidgetNode(node: AXPWidgetNode): boolean {\n const widgetType = node.type;\n if (typeof widgetType !== 'string' || !MULTILANGUAGE_CAPABLE_WIDGET_TYPES.has(widgetType)) {\n return false;\n }\n const key = interfacePathLastSegment(node.path);\n if (!key || !DEFAULT_MULTILANGUAGE_FIELD_NAMES.has(key)) {\n return false;\n }\n const opts = node.options as Record<string, unknown> | undefined;\n if (opts && 'multiLanguage' in opts) {\n return false;\n }\n return true;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `options.multiLanguage` on eligible editor leaves inside an entity property's widget tree\n * (including nested layouts). Used by entity middleware so object fields (e.g. `pre`, `post`) are\n * covered, not only top-level string properties.\n */\nexport function withDefaultMultiLanguageOnWidgetNodeTree(\n root: AXPWidgetNode | undefined | null,\n applyDefault: boolean,\n): AXPWidgetNode | undefined | null {\n if (root == null || !applyDefault) {\n return root ?? undefined;\n }\n return visitWidgetNodeForDefaultMultiLanguage(root);\n}\n\nfunction visitWidgetNodeForDefaultMultiLanguage(node: AXPWidgetNode): AXPWidgetNode {\n let next = node;\n if (node.children?.length) {\n const newChildren = node.children.map((child) => visitWidgetNodeForDefaultMultiLanguage(child));\n if (newChildren.some((c, i) => c !== node.children![i])) {\n next = { ...node, children: newChildren };\n }\n }\n if (shouldApplyDefaultMultiLanguageToWidgetNode(next)) {\n return {\n ...next,\n options: {\n ...((next.options ?? {}) as Record<string, unknown>),\n multiLanguage: true,\n },\n };\n }\n return next;\n}\n\n/**\n * When {@link AXPDefaultMultiLanguageConfigService#getApplyDefaultMultiLanguage} is true, sets\n * `schema.interface.options.multiLanguage` for eligible string widget properties (same rules as\n * entity middleware), unless the property already specifies `multiLanguage`.\n */\nexport function withDefaultMultiLanguageOnWidgetProperty(\n prop: AXPWidgetProperty,\n applyDefault: boolean,\n): AXPWidgetProperty {\n if (!applyDefault || !shouldApplyDefaultMultiLanguageToWidgetProperty(prop)) {\n return prop;\n }\n const iface = prop.schema.interface;\n const existingOpts = (iface.options ?? {}) as Record<string, unknown>;\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: {\n ...iface,\n options: {\n ...existingOpts,\n multiLanguage: true,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex/platform/core';\nimport { inject } from '@angular/core';\n\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Settings expression scope ----\n\n/**\n * Exposes platform settings in expression strings, e.g.\n * `{{ settings.get('Common:Setting:Entity.ShowPageBadge') }}`.\n */\nexport class AXPSettingsEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('settings', {\n get: async (key: string) => {\n return await this.settingsService.get(key);\n },\n });\n }\n}\n\n//#endregion\n","import { AXCalendarService } from '@acorex/core/date-time';\nimport { Injectable } from '@angular/core';\n\n/**\n * Platform-provided {@link AXCalendarService} that applies locale profile week layout\n * (first day of week, weekends) through the core calendar service lifecycle.\n *\n * Temporary bridge until @acorex/components reads week layout from AXLocaleService.\n */\n@Injectable()\nexport class AXPRegionalCalendarService extends AXCalendarService {}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from './settings.service';\n\n//#region ---- Types ----\n\nexport interface AXPUnsavedChangesConfirmOptions {\n /** When false, skips confirm even if the global setting is enabled (e.g. dialog `confirmCloseWhenDirty`). */\n enabled?: boolean;\n title?: AXPMultiLanguageString;\n message?: AXPMultiLanguageString;\n /**\n * When true (default), confirming sets leave approval for the next route deactivation.\n * Set false for in-place actions such as discarding edits without navigating away.\n */\n approveLeaveOnConfirm?: boolean;\n}\n\nexport interface AXPUnsavedChangesCanDeactivate {\n canDeactivate(): boolean | Promise<boolean>;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUnsavedChangesConfirmService {\n //#region ---- Services & Dependencies ----\n\n private readonly settingsService = inject(AXPSettingsService);\n private readonly dialogService = inject(AXDialogService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Ensures concurrent leave paths share a single unsaved-changes confirm dialog. */\n private confirmPromise?: Promise<boolean>;\n\n /** Set after the user confirms leaving; cleared on {@link NavigationEnd} by popstate handler. */\n private leaveConfirmed = false;\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Whether the global \"confirm unsaved changes\" setting is enabled.\n */\n async isGloballyEnabled(): Promise<boolean> {\n const value = await this.settingsService.get<boolean>(AXPCommonSettings.ConfirmUnsavedChanges);\n return value !== false;\n }\n\n /**\n * Marks the next route deactivation as already approved (avoids a second prompt after in-app navigation).\n */\n markLeaveConfirmed(): void {\n this.leaveConfirmed = true;\n }\n\n /** True while an unsaved-changes confirm dialog is open or being resolved. */\n isConfirmPending(): boolean {\n return this.confirmPromise != null;\n }\n\n /** Whether the user already approved leaving during the current navigation. */\n hasLeaveConfirmed(): boolean {\n return this.leaveConfirmed;\n }\n\n /** Clears leave approval after navigation settles. */\n clearLeaveConfirmed(): void {\n this.leaveConfirmed = false;\n }\n\n consumeLeaveConfirmed(): boolean {\n if (!this.leaveConfirmed) {\n return false;\n }\n this.leaveConfirmed = false;\n return true;\n }\n\n /**\n * Prompts when `isDirty` and the global setting (and optional per-instance `enabled`) allow it.\n * Returns true when navigation/dismiss may proceed.\n */\n async confirmIfDirty(isDirty: boolean, options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (this.confirmPromise) {\n return this.confirmPromise;\n }\n\n if (options?.enabled === false || !isDirty) {\n return true;\n }\n\n // Reserve before any await so concurrent close/navigation paths share one dialog.\n this.confirmPromise = this.resolveConfirmIfDirty(options);\n try {\n return await this.confirmPromise;\n } finally {\n this.confirmPromise = undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async resolveConfirmIfDirty(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n if (!(await this.isGloballyEnabled())) {\n return true;\n }\n\n const confirmed = await this.prompt(options);\n if (confirmed && options?.approveLeaveOnConfirm !== false) {\n this.leaveConfirmed = true;\n }\n return confirmed;\n }\n\n private async prompt(options?: AXPUnsavedChangesConfirmOptions): Promise<boolean> {\n const title = 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 { Injectable } from '@angular/core';\nimport type { DetachedRouteHandle } from '@angular/router';\n\n//#region ---- Types ----\n\ninterface DestroyableRouteHandle {\n componentRef?: { destroy: () => void; instance?: unknown };\n}\n\n//#endregion\n\n/**\n * Holds detached Angular route component instances keyed by tab key so tabular navigation can\n * preserve a page's full state (data-table selection, scroll, unsaved form values, etc.) while it\n * is in the background, then reattach it without re-rendering.\n *\n * The registry has no `Router` dependency on purpose: it is consumed by the {@link RouteReuseStrategy}\n * implementation, so depending on `Router` here would create a construction-time cycle.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabRouteCacheRegistry {\n //#region ---- State ----\n\n private readonly handles = new Map<string, DetachedRouteHandle>();\n private openKeys = new Set<string>();\n private enabled = false;\n private deactivateGuardSuspended = false;\n\n //#endregion\n\n //#region ---- Deactivate Guard Suspension ----\n\n /**\n * Runs `action` while unsaved-changes `canDeactivate` guards are suspended, so switching between\n * tabs preserves a dirty page without prompting. Closing a tab does not use this path, so the\n * prompt still appears there.\n */\n async runWithSuspendedDeactivateGuards<T>(action: () => Promise<T>): Promise<T> {\n const previous = this.deactivateGuardSuspended;\n this.deactivateGuardSuspended = true;\n try {\n return await action();\n } finally {\n this.deactivateGuardSuspended = previous;\n }\n }\n\n isDeactivateGuardSuspended(): boolean {\n return this.deactivateGuardSuspended;\n }\n\n //#endregion\n\n //#region ---- Mode ----\n\n /** Enables caching (tabular mode). Disabling clears and destroys every cached component. */\n setEnabled(enabled: boolean): void {\n if (this.enabled === enabled) {\n return;\n }\n this.enabled = enabled;\n if (!enabled) {\n this.clear();\n }\n }\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n //#endregion\n\n //#region ---- Open Keys Sync ----\n\n /**\n * Reconciles open scoped tab keys and active tab URLs. Cached handles whose key is not an open\n * scoped tab key, an active tab URL, or a child path under an open scoped tab are destroyed.\n */\n syncOpenKeys(scopedKeys: string[], activeTabUrls: string[] = []): void {\n const scopedSet = new Set(scopedKeys);\n const activePathSet = new Set(\n activeTabUrls.map((url) => url.split('?')[0].split('#')[0].replace(/\\/+$/, '') || '/'),\n );\n\n for (const cacheKey of [...this.handles.keys()]) {\n const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n const keepsScopedKey = scopedSet.has(normalizedCacheKey);\n const keepsActiveUrl = activePathSet.has(normalizedCacheKey);\n const keepsUnderScopedTab = [...scopedSet].some(\n (scopedKey) =>\n normalizedCacheKey === scopedKey || normalizedCacheKey.startsWith(`${scopedKey}/`),\n );\n\n if (!keepsScopedKey && !keepsActiveUrl && !keepsUnderScopedTab) {\n this.destroyHandle(this.handles.get(cacheKey));\n this.handles.delete(cacheKey);\n }\n }\n\n this.openKeys = scopedSet;\n }\n\n isOpen(key: string): boolean {\n return this.openKeys.has(key);\n }\n\n /**\n * Returns the live component instance for a cached background tab, when available.\n * Matches the tab key directly or any cached handle under a scoped tab prefix.\n */\n getComponentInstance<T>(key: string): T | null {\n const normalizedKey = key.replace(/\\/+$/, '') || '/';\n const direct = this.handles.get(normalizedKey) ?? this.handles.get(key);\n if (direct) {\n return this.readComponentInstance<T>(direct);\n }\n\n for (const [cacheKey, handle] of this.handles) {\n const normalizedCacheKey = cacheKey.replace(/\\/+$/, '') || '/';\n if (normalizedCacheKey === normalizedKey || normalizedCacheKey.startsWith(`${normalizedKey}/`)) {\n return this.readComponentInstance<T>(handle);\n }\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---- Handle Store ----\n\n /**\n * Caches a detached background handle. Overwrites without destroying the previous handle: on a\n * repeat visit Angular hands back a new handle object wrapping the same live `componentRef`, so\n * destroying the old one would destroy the live component and corrupt the view (NG0922).\n */\n store(key: string, handle: DetachedRouteHandle): void {\n this.handles.set(key, handle);\n }\n\n /**\n * Returns the cached handle without mutating the map. Angular reads a handle twice per\n * navigation (once while building the future state, once while attaching), so `retrieve` must be\n * idempotent; the handle is released afterwards via {@link release} when Angular calls\n * `store(snapshot, null)`.\n */\n retrieve(key: string): DetachedRouteHandle | null {\n return this.handles.get(key) ?? null;\n }\n\n /**\n * Drops a handle that the router has just reattached (it is now a live foreground view, so it\n * must not be destroyed). The map keeps only truly backgrounded handles.\n */\n release(key: string): void {\n this.handles.delete(key);\n }\n\n has(key: string): boolean {\n return this.handles.has(key);\n }\n\n /** Destroys and removes a single cached handle (used when a tab closes). */\n evict(key: string): void {\n this.destroyHandle(this.handles.get(key));\n this.handles.delete(key);\n }\n\n /** Destroys and removes every cached handle. */\n clear(): void {\n for (const handle of this.handles.values()) {\n this.destroyHandle(handle);\n }\n this.handles.clear();\n this.openKeys.clear();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private readComponentInstance<T>(handle: DetachedRouteHandle): T | null {\n const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n return (componentRef?.instance as T) ?? null;\n }\n\n private destroyHandle(handle: DetachedRouteHandle | undefined): void {\n if (!handle) {\n return;\n }\n const componentRef = (handle as unknown as DestroyableRouteHandle).componentRef;\n componentRef?.destroy?.();\n }\n\n //#endregion\n}\n","import { inject } from '@angular/core';\nimport { CanDeactivateFn } from '@angular/router';\nimport { AXPTabRouteCacheRegistry } from '../tab-navigation/tab-route-cache.registry';\nimport { AXPUnsavedChangesCanDeactivate } from './unsaved-changes-confirm.service';\n\n//#region ---- Unsaved Changes Can Deactivate Guard Factory ----\n\nexport function createUnsavedChangesCanDeactivateGuard<T extends AXPUnsavedChangesCanDeactivate>(): CanDeactivateFn<T> {\n return (component) => {\n // Tab switches keep the page alive in the background, so skip the prompt; closing a tab does not\n // suspend guards and still prompts.\n const tabCache = inject(AXPTabRouteCacheRegistry, { optional: true });\n if (tabCache?.isDeactivateGuardSuspended()) {\n return true;\n }\n return component.canDeactivate();\n };\n}\n\n//#endregion\n","export enum AXPHomePageSettings {\n UserHomePath = 'Common:Setting:Startup.HomePage',\n}","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable, Injector } from '@angular/core';\nimport { Route, Router, Routes, UrlTree } from '@angular/router';\nimport { merge } from 'rxjs';\nimport { AXPSettingsService } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_PAGES, AXPHomePageDefinition } from './home-page.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPHomePageService {\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n private userHomePageKey: string | null = null;\n private candidates = inject<AXPHomePageDefinition[]>(AXP_HOME_PAGES, { optional: true }) ?? [];\n private settingsService = inject(AXPSettingsService);\n private sessionService = inject(AXPSessionService);\n private injector = inject(Injector);\n private originalConfig: Routes | null = null;\n private loginPath = 'auth/login';\n\n private get flatCandidates() {\n return this.candidates.flatMap((c) => c);\n }\n\n constructor() {\n // remove circular dependency\n setTimeout(async () => {\n await this.init();\n });\n }\n\n private async init() {\n await this.load();\n //\n const keys = [AXPHomePageSettings.UserHomePath];\n this.settingsService.onChanged.subscribe(async (c) => {\n if (keys.some((k) => c.keys.includes(k))) {\n await this.load();\n this.refreshRoutes();\n }\n });\n //\n merge(this.sessionService.status$, this.sessionService.application$, this.sessionService.tenant$).subscribe(\n async (data) => {\n await this.load();\n this.refreshRoutes();\n },\n );\n }\n\n async load() {\n this.userHomePageKey = await this.settingsService.get(AXPHomePageSettings.UserHomePath);\n }\n\n getRegisteredList(): AXPHomePageDefinition[] {\n return this.flatCandidates.filter((c) => c.route);\n }\n\n getRegisteredRoutes(): Routes {\n const defaultHomePage = this.flatCandidates.find((c) => c.key === this.defaultHomePageKey);\n\n const home =\n this.flatCandidates.find((c) => this.userHomePageKey && c.key === this.userHomePageKey) ?? defaultHomePage;\n if (home && home.route && this.sessionService.application?.name) {\n const fullPath = this.findPath(home.route);\n return [\n { path: '', redirectTo: fullPath, pathMatch: 'full' },\n { path: ':app', redirectTo: fullPath, pathMatch: 'full' },\n { ...home?.route, data: { ...home?.route?.data, key: home?.key, title: home?.title, path: fullPath } },\n ];\n }\n return [{ path: '', redirectTo: this.loginPath, pathMatch: 'full' }];\n }\n\n getCurrent(): { path: string; title: string } {\n const key = this.userHomePageKey ?? this.defaultHomePageKey;\n const homePage = this.getRegisteredRoutes().find((c) => c.data?.['key'] === key)!;\n if (homePage) {\n return {\n path: homePage.data?.['path'],\n title: homePage.data?.['title'],\n };\n }\n return {\n path: this.loginPath,\n title: '',\n };\n }\n\n private findPath(target: Route): string {\n const rawPath = this.buildFullPaths(target).join('/');\n const appName = this.sessionService.application?.name;\n if (appName) {\n return rawPath.replace(':app', appName);\n }\n return rawPath;\n }\n\n private buildFullPaths(route: Route, parentPath: string[] = []): string[] {\n const segments = [...parentPath];\n if (route.path) {\n segments.push(route.path);\n }\n\n // Recursively search the first matched child (deepest first match)\n if (route.children?.length) {\n return this.buildFullPaths(route.children[0], segments);\n }\n\n return segments;\n }\n\n private refreshRoutes() {\n const router = this.injector.get(Router);\n\n // 👇 On first call, remember what was there before:\n if (!this.originalConfig) {\n this.originalConfig = router.config;\n }\n\n this.applyMergedConfig(router);\n }\n\n private applyMergedConfig(router: Router) {\n const newHomeRoutes = this.getRegisteredRoutes(); // your 3 home entries\n\n // Filter the original routes to drop the old home placeholders.\n // We know your dynamic routes always have path === '' or ':app'\n // or carry a `data.key` matching one of your home-page keys.\n const otherRoutes = (this.originalConfig ?? []).filter(\n (r) => r.path !== '' && r.path !== ':app' && !(r.data && typeof r.data['key'] === 'string'),\n );\n\n // Build the new merged tree\n const merged: Routes = [...newHomeRoutes, ...otherRoutes];\n // TODO: check this for custom menu like :app/terms\n router.resetConfig(merged);\n }\n\n /**\n * Resolves the current user's home page as a router URL tree.\n */\n resolveHomeUrlTree(): UrlTree {\n const router = this.injector.get(Router);\n const current = this.getCurrent();\n const path = current.path.startsWith('/') ? current.path : `/${current.path}`;\n return router.parseUrl(path);\n }\n\n async navigateTo(): Promise<void> {\n // wait for the router to be initialized\n setTimeout(() => {\n const router = this.injector.get(Router);\n router.navigateByUrl(this.resolveHomeUrlTree(), { onSameUrlNavigation: 'reload' });\n }, 100);\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from \"@angular/core\";\nimport { Routes, ROUTES } from \"@angular/router\";\nimport { AXPHomePageService } from \"./home-page.service\";\n\nfunction dynamicRoutesFactory(): Routes {\n const service = inject(AXPHomePageService);\n return service.getRegisteredRoutes();\n}\n\nexport function provideDynamicHomePage(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n useFactory: dynamicRoutesFactory,\n multi: true\n }\n ]);\n}","\nimport { AXPPlatformScope, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPHomePageSettings } from './home-page-settings.key';\nimport { AXPHomePageService } from './home-page.service';\nimport { AXP_HOME_PAGE_DEFAULT_KEY } from './home-page.types';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPHomePageSettingProvider implements AXPSettingDefinitionProvider {\n private readonly homePageService = this.injector.get(AXPHomePageService);\n private defaultHomePageKey = inject<string>(AXP_HOME_PAGE_DEFAULT_KEY, { optional: true }) ?? 'home';\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const list = this.homePageService.getRegisteredList().map((c) => ({ id: c.key, title: c.title }));\n if (list.length === 0) {\n return;\n }\n\n // Define the 'General Settings' group\n context\n .addGroup(\n 'general',\n `${I18N}.general.nav-title`,\n `${I18N}.general.description`,\n 'fa-light fa-palette',\n `${I18N}.general.title`,\n 1,\n )\n\n // Add the 'Startup' section\n .addSection('startup', `${I18N}.general.startup.title`, `${I18N}.general.startup.description`)\n // Add the 'Home Page' setting\n .addSetting({\n key: AXPHomePageSettings.UserHomePath,\n title: `${I18N}.general.startup.home-page.title`,\n scope: AXPPlatformScope.User,\n isInherited: true,\n defaultValue: this.defaultHomePageKey || list[0].id,\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: list,\n },\n },\n description: `${I18N}.general.startup.home-page.description`,\n })\n\n // End the 'Startup' section\n .endSection()\n\n // End the 'General Settings' group\n .endGroup();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXP_SETTING_DEFINITION_PROVIDER } from '../settings';\nimport { AXPHomePageSettingProvider } from './home-page-settings.provider';\n\n@NgModule({\n imports: [],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPHomePageSettingProvider,\n multi: true,\n },\n ],\n})\nexport class AXPHomePageModule {}\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPUserReference } from '@acorex/platform/contracts';\n//#endregion\n\n//#region ---- In-app notification port ----\n\nexport type AXPInAppNotificationPriority = 'Notice' | 'Danger' | 'Warning';\n\nexport interface AXPInAppNotificationCreateRequest {\n id: string;\n name: string;\n title: string;\n body: string;\n icon: string;\n priority: AXPInAppNotificationPriority;\n receiver: AXPUserReference;\n data?: Record<string, unknown>;\n}\n\n/**\n * Persists in-app notifications. Notification-management registers an implementation\n * backed by {@link AXMNotificationService}.\n */\nexport interface AXPInAppNotificationService {\n create(request: AXPInAppNotificationCreateRequest): Promise<void>;\n}\n\nexport const AXP_IN_APP_NOTIFICATION_SERVICE = new InjectionToken<AXPInAppNotificationService>(\n 'AXP_IN_APP_NOTIFICATION_SERVICE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { get } from 'lodash-es';\nimport {\n AXP_IN_APP_NOTIFICATION_SERVICE,\n type AXPInAppNotificationCreateRequest,\n type AXPInAppNotificationPriority,\n} from './background-operation.notification';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends in-app notifications when a background operation finishes or fails.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationNotificationService {\n private readonly inAppNotificationService = inject(AXP_IN_APP_NOTIFICATION_SERVICE, { optional: true });\n\n private readonly sessionService = inject(AXPSessionService);\n\n async notify(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.inAppNotificationService || !this.shouldNotify(operation)) {\n return;\n }\n\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return;\n }\n\n const body = this.resolveBody(operation);\n const { icon, priority } = this.resolveTemplate(operation);\n\n const request: AXPInAppNotificationCreateRequest = {\n id: `notif-bg-op-${operation.id}-${operation.status}`,\n name: operation.title,\n title: operation.title,\n body,\n icon,\n priority,\n receiver: {\n id: userId,\n type: 'user',\n fullName: get(this.sessionService.user, 'title') as string | undefined,\n username: get(this.sessionService.user, 'name') as string | undefined,\n },\n data: {\n backgroundOperationId: operation.id,\n providerKey: operation.providerKey,\n status: operation.status,\n ...(operation.data ?? {}),\n },\n };\n\n await this.inAppNotificationService.create(request);\n }\n\n //#region ---- Helpers ----\n\n private shouldNotify(operation: AXPBackgroundOperation): boolean {\n const { capabilities } = operation;\n\n if (operation.status === 'failed') {\n return capabilities.notifyOnFailed !== false;\n }\n\n if (operation.status === 'completed' || operation.status === 'cancelled') {\n return capabilities.notifyOnComplete !== false;\n }\n\n return false;\n }\n\n private resolveBody(operation: AXPBackgroundOperation): string {\n if (operation.status === 'failed') {\n return operation.error?.message ?? operation.statusText ?? 'Background task failed';\n }\n\n const statusText = operation.statusText?.trim();\n return statusText || operation.title;\n }\n\n private resolveTemplate(operation: AXPBackgroundOperation): {\n icon: string;\n priority: AXPInAppNotificationPriority;\n } {\n switch (operation.status) {\n case 'completed':\n return { icon: 'fa-light fa-circle-check', priority: 'Notice' };\n case 'failed':\n return { icon: 'fa-light fa-circle-exclamation', priority: 'Danger' };\n case 'cancelled':\n return { icon: 'fa-light fa-ban', priority: 'Warning' };\n default:\n return { icon: 'fa-light fa-list-check', priority: 'Notice' };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPDataGenerator } from '@acorex/platform/contracts';\nimport { isNumber } from 'lodash-es';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationCreateRequest,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Factories ----\n\nexport function axpCreateBackgroundOperationId(): string {\n return `bg-op-${AXPDataGenerator.uuid()}`;\n}\n\nexport function axpBuildBackgroundOperation(\n providerKey: string,\n request: AXPBackgroundOperationCreateRequest,\n overrides?: Partial<AXPBackgroundOperation>,\n): AXPBackgroundOperation {\n const now = new Date();\n const operation: AXPBackgroundOperation = {\n id: axpCreateBackgroundOperationId(),\n providerKey,\n title: request.title,\n status: 'queued',\n progress: request.progress,\n estimatedDurationMs: request.estimatedDurationMs,\n statusText: request.statusText,\n currentStep: request.currentStep,\n createdAt: now,\n capabilities: request.capabilities,\n failurePolicy: request.failurePolicy,\n ...overrides,\n };\n const hasStarted = operation.status === 'running' || operation.status === 'paused';\n\n return {\n ...operation,\n createdAt: operation.createdAt ?? now,\n startedAt: operation.startedAt ?? (hasStarted ? now : undefined),\n };\n}\n\nexport function axpCoerceBackgroundOperationDate(value: Date | string | undefined): Date | null {\n if (!value) {\n return null;\n }\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function axpBackgroundOperationDisplayTime(operation: AXPBackgroundOperation): Date | null {\n return (\n axpCoerceBackgroundOperationDate(operation.startedAt) ??\n axpCoerceBackgroundOperationDate(operation.createdAt)\n );\n}\n\n/**\n * Remaining duration in milliseconds for ETA display.\n */\nexport function axpBackgroundOperationRemainingMs(operation: AXPBackgroundOperation): number | null {\n if (!operation.capabilities.supportsEstimate || !isNumber(operation.estimatedDurationMs)) {\n return null;\n }\n\n const { estimatedDurationMs, progress, startedAt, status } = operation;\n if (status !== 'running' && status !== 'paused' && status !== 'queued') {\n return null;\n }\n\n if (isNumber(progress) && progress >= 100) {\n return 0;\n }\n\n if (isNumber(progress) && progress > 0) {\n return Math.max(0, Math.round((estimatedDurationMs * (100 - progress)) / 100));\n }\n\n const started = axpCoerceBackgroundOperationDate(startedAt);\n if (started) {\n const elapsed = Date.now() - started.getTime();\n return Math.max(0, estimatedDurationMs - elapsed);\n }\n\n return estimatedDurationMs;\n}\n\n/**\n * Estimated completion instant for relative-time formatting (e.g. timeleft pipe).\n */\nexport function axpBackgroundOperationEstimateEndDate(operation: AXPBackgroundOperation): Date | null {\n const remainingMs = axpBackgroundOperationRemainingMs(operation);\n if (remainingMs === null) {\n return null;\n }\n return new Date(Date.now() + remainingMs);\n}\n\nexport function axpBackgroundOperationCapabilities(\n partial: Partial<AXPBackgroundOperationCapabilities> = {},\n): AXPBackgroundOperationCapabilities {\n return {\n cancellable: partial.cancellable ?? false,\n pausable: partial.pausable ?? false,\n resumable: partial.resumable ?? false,\n retryable: partial.retryable ?? false,\n supportsProgress: partial.supportsProgress ?? false,\n supportsEstimate: partial.supportsEstimate ?? false,\n clickable: partial.clickable ?? false,\n notifyOnComplete: partial.notifyOnComplete ?? true,\n notifyOnFailed: partial.notifyOnFailed ?? true,\n };\n}\n\nexport function axpBackgroundOperationFailurePolicy(\n partial: Partial<AXPBackgroundOperationFailurePolicy> = {},\n): AXPBackgroundOperationFailurePolicy {\n return {\n mode: partial.mode ?? 'abort',\n currentStepId: partial.currentStepId,\n maxRetries: partial.maxRetries,\n retryCount: partial.retryCount ?? 0,\n };\n}\n\nexport function axpIsActiveBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'queued' || status === 'running' || status === 'paused';\n}\n\nexport function axpIsCompletedBackgroundOperationStatus(status: AXPBackgroundOperationStatus): boolean {\n return status === 'completed' || status === 'cancelled';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBackgroundOperationNotificationService } from './background-operation-notification.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Sends notifications and removes tray rows when a background operation reaches a terminal state.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationCompletionService {\n private readonly notificationService = inject(AXPBackgroundOperationNotificationService);\n\n /** Whether the operation just reached a finished state (completed or cancelled). */\n shouldAutoFinish(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return (\n previousStatus !== operation.status && axpIsCompletedBackgroundOperationStatus(operation.status)\n );\n }\n\n /** Whether the operation just transitioned to failed. */\n shouldNotifyFailure(previousStatus: string | undefined, operation: AXPBackgroundOperation): boolean {\n return previousStatus !== operation.status && operation.status === 'failed';\n }\n\n /** Notifies the user and invokes {@link remove} to drop the operation from the tray. */\n async notifyAndRemove(operation: AXPBackgroundOperation, remove: () => void): Promise<void> {\n await this.notify(operation);\n remove();\n }\n\n /** Notifies the user while keeping the failed operation in the tray for retry. */\n async notifyFailure(operation: AXPBackgroundOperation): Promise<void> {\n await this.notify(operation);\n }\n\n //#region ---- Notification ----\n\n private async notify(operation: AXPBackgroundOperation): Promise<void> {\n try {\n await this.notificationService.notify(operation);\n } catch (error: unknown) {\n console.warn('Failed to send background-operation notification', operation.id, error);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Status & capabilities ----\n\nexport type AXPBackgroundOperationStatus =\n | 'queued'\n | 'running'\n | 'paused'\n | 'completed'\n | 'failed'\n | 'cancelled';\n\nexport interface AXPBackgroundOperationCapabilities {\n cancellable: boolean;\n pausable: boolean;\n resumable: boolean;\n retryable: boolean;\n /** When true, UI shows a progress bar only while {@link AXPBackgroundOperation.progress} is set. */\n supportsProgress: boolean;\n /** When true, UI may show ETA while {@link AXPBackgroundOperation.estimatedDurationMs} is set. */\n supportsEstimate: boolean;\n /** When true, the tray item is clickable and delegates to a registered handler. */\n clickable: boolean;\n /** When false, skip in-app notification on completed/cancelled. Default: true. */\n notifyOnComplete?: boolean;\n /** When false, skip in-app notification on failed. Default: true. */\n notifyOnFailed?: boolean;\n}\n\nexport type AXPBackgroundOperationFailureMode = 'retry' | 'continue' | 'abort';\n\nexport interface AXPBackgroundOperationFailurePolicy {\n mode: AXPBackgroundOperationFailureMode;\n currentStepId?: string;\n maxRetries?: number;\n retryCount?: number;\n}\n\nexport interface AXPBackgroundOperationError {\n code?: string;\n message: string;\n detail?: string;\n}\n\n//#endregion\n\n//#region ---- Operation model ----\n\nexport interface AXPBackgroundOperation {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: Date;\n startedAt?: Date;\n completedAt?: Date;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n /** Handler-specific payload (e.g. conversationId for chat navigation). */\n data?: Record<string, unknown>;\n}\n\nexport interface AXPBackgroundOperationCreateRequest {\n title: string;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n}\n\nexport type AXPBackgroundOperationActionKey = 'cancel' | 'pause' | 'resume' | 'retry' | 'dismiss';\n\n//#endregion\n","//#region ---- Root config ----\n\nexport const AXPBackgroundOperationRootConfig = {\n module: {\n name: 'Common',\n title: '@general:module.common.title',\n icon: 'fa-light fa-layer-group',\n },\n entities: {\n backgroundOperation: {\n name: 'BackgroundOperations',\n title: '@general:background-operation.entity.title',\n titlePlural: '@general:background-operation.entity.plural',\n icon: 'fa-light fa-spinner',\n },\n },\n} as const;\n\n/** Full entity key used with {@link AXPEntityStorageService} (e.g. `Common.BackgroundOperations`). */\nexport function axpBackgroundOperationEntityName(): string {\n return `${AXPBackgroundOperationRootConfig.module.name}.${AXPBackgroundOperationRootConfig.entities.backgroundOperation.name}`;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\n\n//#endregion\n\n//#region ---- Storage adapter ----\n\n/**\n * Optional persistence adapter for background-operation entity rows.\n * Mock connectivity registers an implementation backed by {@link AXPEntityStorageService}.\n */\nexport interface AXPBackgroundOperationEntityStorageAdapter {\n getAll(entityName: string): Promise<AXPBackgroundOperationEntityModel[]>;\n upsertOne(entityName: string, row: AXPBackgroundOperationEntityModel): Promise<void>;\n deleteOne(entityName: string, id: string): Promise<void>;\n}\n\nexport const AXP_BACKGROUND_OPERATION_ENTITY_STORAGE = new InjectionToken<AXPBackgroundOperationEntityStorageAdapter>(\n 'AXP_BACKGROUND_OPERATION_ENTITY_STORAGE',\n);\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport type { AXPBackgroundOperationEntityModel } from './entities/background-operation/background-operation.types';\nimport { axpCoerceBackgroundOperationDate } from './background-operation.util';\n\n//#endregion\n\n//#region ---- Mappers ----\n\nexport function axpBackgroundOperationToEntityModel(\n operation: AXPBackgroundOperation,\n): AXPBackgroundOperationEntityModel {\n return {\n id: operation.id,\n providerKey: operation.providerKey,\n title: operation.title,\n status: operation.status,\n progress: operation.progress,\n estimatedDurationMs: operation.estimatedDurationMs,\n statusText: operation.statusText,\n currentStep: operation.currentStep,\n createdAt: operation.createdAt.toISOString(),\n startedAt: operation.startedAt?.toISOString(),\n completedAt: operation.completedAt?.toISOString(),\n capabilities: operation.capabilities,\n failurePolicy: operation.failurePolicy,\n error: operation.error,\n data: operation.data,\n };\n}\n\nexport function axpBackgroundOperationFromEntityModel(\n model: AXPBackgroundOperationEntityModel,\n): AXPBackgroundOperation {\n const createdAt = axpCoerceBackgroundOperationDate(model.createdAt) ?? new Date();\n\n return {\n id: model.id,\n providerKey: model.providerKey,\n title: model.title,\n status: model.status,\n progress: model.progress,\n estimatedDurationMs: model.estimatedDurationMs,\n statusText: model.statusText,\n currentStep: model.currentStep,\n createdAt,\n startedAt: axpCoerceBackgroundOperationDate(model.startedAt) ?? undefined,\n completedAt: axpCoerceBackgroundOperationDate(model.completedAt) ?? undefined,\n capabilities: model.capabilities,\n failurePolicy: model.failurePolicy,\n error: model.error,\n data: model.data,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { signal, type Signal } from '@angular/core';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Store factory ----\n\n/**\n * Lightweight in-memory store for a single background-operation provider.\n */\nexport function createBackgroundOperationStore(): {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void;\n find(id: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n} {\n const operationsState = signal<AXPBackgroundOperation[]>([]);\n\n return {\n operations: operationsState.asReadonly(),\n\n upsert(operation: AXPBackgroundOperation): void {\n operationsState.update((list) => {\n const index = list.findIndex((item) => item.id === operation.id);\n if (index < 0) {\n return [operation, ...list];\n }\n const next = [...list];\n next[index] = operation;\n return next;\n });\n },\n\n patch(id: string, patch: Partial<AXPBackgroundOperation>): void {\n operationsState.update((list) =>\n list.map((item) => (item.id === id ? { ...item, ...patch } : item)),\n );\n },\n\n find(id: string): AXPBackgroundOperation | undefined {\n return operationsState().find((item) => item.id === id);\n },\n\n remove(id: string): void {\n operationsState.update((list) => list.filter((item) => item.id !== id));\n },\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, type Signal } from '@angular/core';\nimport { axpBackgroundOperationEntityName } from './background-operation.const';\nimport {\n axpBackgroundOperationFromEntityModel,\n axpBackgroundOperationToEntityModel,\n} from './background-operation.entity.mapper';\nimport { AXP_BACKGROUND_OPERATION_ENTITY_STORAGE } from './background-operation.entity.storage';\nimport { AXPBackgroundOperationCompletionService } from './background-operation-completion.service';\nimport type { AXPBackgroundOperation } from './background-operation.types';\nimport { axpIsCompletedBackgroundOperationStatus } from './background-operation.util';\nimport { createBackgroundOperationStore } from './background-operation.store';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBackgroundOperationProviderStore {\n readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n upsert(operation: AXPBackgroundOperation): void;\n patch(operationId: string, patch: Partial<AXPBackgroundOperation>): void;\n find(operationId: string): AXPBackgroundOperation | undefined;\n remove(id: string): void;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Entity-backed store for background operations (`Common.BackgroundOperations`).\n * Uses in-memory signals for UI reactivity and optionally persists via {@link AXP_BACKGROUND_OPERATION_ENTITY_STORAGE}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationEntityStoreService {\n private readonly entityStorage = inject(AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, { optional: true });\n\n private readonly completionService = inject(AXPBackgroundOperationCompletionService);\n\n private readonly entityName = axpBackgroundOperationEntityName();\n\n private hydrated = false;\n\n private hydratePromise?: Promise<void>;\n\n private readonly innerStores = new Map<string, ReturnType<typeof createBackgroundOperationStore>>();\n\n //#region ---- Hydration ----\n\n async ensureHydrated(): Promise<void> {\n if (this.hydrated || !this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n if (!this.hydratePromise) {\n this.hydratePromise = this.hydrateFromEntityStorage();\n }\n\n await this.hydratePromise;\n }\n\n async hasAnyOperationForProviders(providerKeys: readonly string[]): Promise<boolean> {\n await this.ensureHydrated();\n\n if (providerKeys.length === 0) {\n return false;\n }\n\n if (this.entityStorage) {\n const rows = await this.entityStorage.getAll(this.entityName);\n return rows.some((row) => providerKeys.includes(row.providerKey));\n }\n\n return [...this.innerStores.values()].some((store) =>\n store.operations().some((operation) => providerKeys.includes(operation.providerKey)),\n );\n }\n\n //#endregion\n\n //#region ---- Provider stores ----\n\n createProviderStore(providerKey: string): AXPBackgroundOperationProviderStore {\n const inner = this.getOrCreateInnerStore(providerKey);\n\n return {\n operations: computed(() => inner.operations().filter((operation) => operation.providerKey === providerKey)),\n\n upsert: (operation: AXPBackgroundOperation): void => {\n inner.upsert(operation);\n void this.persistOperation(operation);\n },\n\n patch: (operationId: string, patch: Partial<AXPBackgroundOperation>): void => {\n const previous = inner.find(operationId);\n inner.patch(operationId, patch);\n const operation = inner.find(operationId);\n if (!operation) {\n return;\n }\n\n if (this.completionService.shouldAutoFinish(previous?.status, operation)) {\n void this.completionService.notifyAndRemove(operation, () => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n });\n return;\n }\n\n if (this.completionService.shouldNotifyFailure(previous?.status, operation)) {\n void this.completionService.notifyFailure(operation);\n }\n\n void this.persistOperation(operation);\n },\n\n find: (operationId: string): AXPBackgroundOperation | undefined => inner.find(operationId),\n\n remove: (operationId: string): void => {\n inner.remove(operationId);\n void this.deleteOperation(operationId);\n },\n };\n }\n\n /** All operations across providers (post-hydration). */\n readonly allOperations = computed(() =>\n [...this.innerStores.values()].flatMap((store) => store.operations()),\n );\n\n //#endregion\n\n //#region ---- Entity persistence ----\n\n private async hydrateFromEntityStorage(): Promise<void> {\n if (!this.entityStorage) {\n this.hydrated = true;\n return;\n }\n\n const rows = await this.entityStorage.getAll(this.entityName);\n\n for (const row of rows) {\n const operation = axpBackgroundOperationFromEntityModel(row);\n\n if (axpIsCompletedBackgroundOperationStatus(operation.status)) {\n void this.deleteOperation(operation.id);\n continue;\n }\n\n this.getOrCreateInnerStore(operation.providerKey).upsert(operation);\n }\n\n this.hydrated = true;\n }\n\n private async persistOperation(operation: AXPBackgroundOperation): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.upsertOne(this.entityName, axpBackgroundOperationToEntityModel(operation));\n } catch (error: unknown) {\n console.warn('Failed to persist background operation entity', operation.id, error);\n }\n }\n\n private async deleteOperation(operationId: string): Promise<void> {\n if (!this.entityStorage) {\n return;\n }\n\n try {\n await this.entityStorage.deleteOne(this.entityName, operationId);\n } catch (error: unknown) {\n console.warn('Failed to delete background operation entity', operationId, error);\n }\n }\n\n private getOrCreateInnerStore(providerKey: string): ReturnType<typeof createBackgroundOperationStore> {\n let store = this.innerStores.get(providerKey);\n if (!store) {\n store = createBackgroundOperationStore();\n this.innerStores.set(providerKey, store);\n }\n return store;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPBackgroundOperationCapabilities,\n AXPBackgroundOperationError,\n AXPBackgroundOperationFailurePolicy,\n AXPBackgroundOperationStatus,\n} from '../../background-operation.types';\n\n//#endregion\n\n//#region ---- Entity model ----\n\n/** Persisted row shape for {@link axpBackgroundOperationEntityName}. */\nexport interface AXPBackgroundOperationEntityModel {\n id: string;\n providerKey: string;\n title: string;\n status: AXPBackgroundOperationStatus;\n progress?: number;\n estimatedDurationMs?: number;\n statusText?: string;\n currentStep?: string;\n createdAt: string;\n startedAt?: string;\n completedAt?: string;\n capabilities: AXPBackgroundOperationCapabilities;\n failurePolicy: AXPBackgroundOperationFailurePolicy;\n error?: AXPBackgroundOperationError;\n data?: Record<string, unknown>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '@acorex/platform/layout/entity-contracts';\nimport { AXPBackgroundOperationRootConfig } from '../../background-operation.const';\n\n//#endregion\n\n//#region ---- Entity factory ----\n\n/**\n * Storage-only entity for background-operation tray rows (`Common.BackgroundOperations`).\n * No master UI — persisted through {@link AXPEntityStorageService}.\n */\nexport async function backgroundOperationEntityFactory(): Promise<AXPEntity | null> {\n const { module, entities } = AXPBackgroundOperationRootConfig;\n\n return {\n module: module.name,\n name: entities.backgroundOperation.name,\n title: entities.backgroundOperation.title,\n icon: entities.backgroundOperation.icon,\n formats: {\n individual: entities.backgroundOperation.title,\n plural: entities.backgroundOperation.titlePlural,\n },\n properties: [\n {\n name: 'id',\n title: 'ID',\n schema: { dataType: 'string' },\n },\n {\n name: 'providerKey',\n title: 'Provider key',\n schema: { dataType: 'string' },\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n schema: { dataType: 'string' },\n },\n {\n name: 'status',\n title: '@general:terms.common.status',\n schema: { dataType: 'string' },\n },\n {\n name: 'progress',\n title: 'Progress',\n schema: { dataType: 'number' },\n },\n {\n name: 'estimatedDurationMs',\n title: 'Estimated duration (ms)',\n schema: { dataType: 'number' },\n },\n {\n name: 'statusText',\n title: 'Status text',\n schema: { dataType: 'string' },\n },\n {\n name: 'currentStep',\n title: 'Current step',\n schema: { dataType: 'string' },\n },\n {\n name: 'createdAt',\n title: '@general:terms.common.created-at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'startedAt',\n title: 'Started at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'completedAt',\n title: 'Completed at',\n schema: { dataType: 'dateTime' },\n },\n {\n name: 'capabilities',\n title: 'Capabilities',\n schema: { dataType: 'object' },\n },\n {\n name: 'failurePolicy',\n title: 'Failure policy',\n schema: { dataType: 'object' },\n },\n {\n name: 'error',\n title: 'Error',\n schema: { dataType: 'object' },\n },\n {\n name: 'data',\n title: 'Payload',\n schema: { dataType: 'object' },\n },\n ],\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken } from '@angular/core';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport type { AXPBackgroundOperation } from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_HANDLERS = new InjectionToken<AXPBackgroundOperationHandler[]>(\n 'AXP_BACKGROUND_OPERATION_HANDLERS',\n);\n\n//#endregion\n\n//#region ---- Handler contract ----\n\n/**\n * Handles user interactions for background operations (e.g. navigate on click).\n * Register one handler per {@link AXPBackgroundOperation.providerKey}.\n */\nexport abstract class AXPBackgroundOperationHandler {\n abstract readonly providerKey: string;\n\n abstract execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { InjectionToken, Signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\n\n//#endregion\n\n//#region ---- Token ----\n\nexport const AXP_BACKGROUND_OPERATION_PROVIDERS = new InjectionToken<AXPBackgroundOperationProvider[]>(\n 'AXP_BACKGROUND_OPERATION_PROVIDERS',\n);\n\n//#endregion\n\n//#region ---- Provider contract ----\n\n/**\n * Registers a source of background operations (multi-provider).\n * Each feature module or mock can contribute one provider per domain key.\n */\nexport abstract class AXPBackgroundOperationProvider {\n abstract readonly key: string;\n abstract readonly operations: Signal<readonly AXPBackgroundOperation[]>;\n\n abstract create(request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation>;\n abstract cancel(operationId: string): Promise<void>;\n\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.pausable} is true. */\n pause?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.resumable} is true. */\n resume?(operationId: string): Promise<void>;\n /** Optional — only when {@link AXPBackgroundOperationCapabilities.retryable} is true. */\n retry?(operationId: string): Promise<void>;\n /** Optional — removes completed/failed operations from the tray. */\n dismiss?(operationId: string): Promise<void>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n AXPBackgroundOperationCreateRequest,\n} from './background-operation.types';\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n} from './background-operation.handler';\nimport {\n AXP_BACKGROUND_OPERATION_PROVIDERS,\n AXPBackgroundOperationProvider,\n} from './background-operation.provider';\nimport type { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport {\n axpIsActiveBackgroundOperationStatus,\n} from './background-operation.util';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPBackgroundOperationService {\n //#region ---- Dependencies ----\n\n private readonly providers = inject(AXP_BACKGROUND_OPERATION_PROVIDERS, { optional: true }) ?? [];\n\n private readonly handlers = inject(AXP_BACKGROUND_OPERATION_HANDLERS, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly busy = signal(false);\n\n readonly loading = this.busy.asReadonly();\n\n readonly operations = computed<readonly AXPBackgroundOperation[]>(() =>\n this.providers.flatMap((provider) => provider.operations()),\n );\n\n readonly activeCount = computed(\n () => this.operations().filter((operation) => axpIsActiveBackgroundOperationStatus(operation.status)).length,\n );\n\n readonly failedCount = computed(\n () => this.operations().filter((operation) => operation.status === 'failed').length,\n );\n\n //#endregion\n\n //#region ---- Queries ----\n\n getAvailableActions(operation: AXPBackgroundOperation): AXPBackgroundOperationActionKey[] {\n const actions: AXPBackgroundOperationActionKey[] = [];\n const { capabilities, status } = operation;\n\n if (capabilities.cancellable && (status === 'queued' || status === 'running' || status === 'paused')) {\n actions.push('cancel');\n }\n if (capabilities.pausable && status === 'running') {\n actions.push('pause');\n }\n if (capabilities.resumable && status === 'paused') {\n actions.push('resume');\n }\n if (capabilities.retryable && status === 'failed') {\n actions.push('retry');\n }\n\n return actions;\n }\n\n //#endregion\n\n //#region ---- Commands ----\n\n async create(providerKey: string, request: AXPBackgroundOperationCreateRequest): Promise<AXPBackgroundOperation> {\n const provider = this.resolveProvider(providerKey);\n return this.run(() => provider.create(request));\n }\n\n async cancel(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.cancellable) {\n throw new Error(`Operation ${operationId} cannot be cancelled`);\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n async pause(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.pausable || !provider.pause) {\n throw new Error(`Operation ${operationId} cannot be paused`);\n }\n await this.run(() => provider.pause!(operationId));\n }\n\n async resume(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.resumable || !provider.resume) {\n throw new Error(`Operation ${operationId} cannot be resumed`);\n }\n await this.run(() => provider.resume!(operationId));\n }\n\n async retry(operationId: string): Promise<void> {\n const { provider, operation } = this.resolveOperation(operationId);\n if (!operation.capabilities.retryable || !provider.retry) {\n throw new Error(`Operation ${operationId} cannot be retried`);\n }\n await this.run(() => provider.retry!(operationId));\n }\n\n async dismiss(operationId: string): Promise<void> {\n const { provider } = this.resolveOperation(operationId);\n if (provider.dismiss) {\n await this.run(() => provider.dismiss!(operationId));\n return;\n }\n await this.run(() => provider.cancel(operationId));\n }\n\n hasClickHandler(operation: AXPBackgroundOperation): boolean {\n return (\n operation.capabilities.clickable &&\n this.handlers.some((handler) => handler.providerKey === operation.providerKey)\n );\n }\n\n async executeCommand(operationId: string, command: AXPExecuteCommand): Promise<void> {\n const { operation } = this.resolveOperation(operationId);\n const handler = this.resolveHandler(operation.providerKey);\n if (!handler) {\n return;\n }\n await this.run(() => handler.execute(command, operation));\n }\n\n async executeClick(operationId: string): Promise<void> {\n await this.executeCommand(operationId, { name: 'click' });\n }\n\n async runAction(operationId: string, action: AXPBackgroundOperationActionKey): Promise<void> {\n switch (action) {\n case 'cancel':\n await this.cancel(operationId);\n break;\n case 'pause':\n await this.pause(operationId);\n break;\n case 'resume':\n await this.resume(operationId);\n break;\n case 'retry':\n await this.retry(operationId);\n break;\n case 'dismiss':\n await this.dismiss(operationId);\n break;\n default:\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Resolution ----\n\n private resolveHandler(providerKey: string): AXPBackgroundOperationHandler | undefined {\n return this.handlers.find((handler) => handler.providerKey === providerKey);\n }\n\n private resolveProvider(providerKey: string): AXPBackgroundOperationProvider {\n const provider = this.providers.find((item) => item.key === providerKey);\n if (!provider) {\n throw new Error(`Background operation provider \"${providerKey}\" is not registered`);\n }\n return provider;\n }\n\n private resolveOperation(operationId: string): {\n provider: AXPBackgroundOperationProvider;\n operation: AXPBackgroundOperation;\n } {\n for (const provider of this.providers) {\n const operation = provider.operations().find((item) => item.id === operationId);\n if (operation) {\n return { provider, operation };\n }\n }\n throw new Error(`Background operation \"${operationId}\" was not found`);\n }\n\n private async run<T>(fn: () => Promise<T>): Promise<T> {\n this.busy.set(true);\n try {\n return await fn();\n } finally {\n this.busy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXProgressBarModule } from '@acorex/components/progress-bar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isNumber } from 'lodash-es';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport type {\n AXPBackgroundOperation,\n AXPBackgroundOperationActionKey,\n} from '../background-operation.types';\nimport { AXStyleLookType } from '@acorex/cdk/common';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-item',\n templateUrl: './background-operation-item.component.html',\n styleUrls: ['./background-operation-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXProgressBarModule, AXTranslationModule],\n})\nexport class AXPBackgroundOperationItemComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n data = input.required<AXPBackgroundOperation>();\n\n actionCompleted = output<void>();\n\n itemClicked = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly pendingAction = signal<AXPBackgroundOperationActionKey | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly statusClass = computed(() => `--${this.data().status}`);\n\n protected readonly statusIcon = computed(() => {\n switch (this.data().status) {\n case 'queued':\n return 'fa-light fa-clock';\n case 'running':\n return 'fa-light fa-spinner fa-spin';\n case 'paused':\n return 'fa-light fa-pause';\n case 'completed':\n return 'fa-light fa-circle-check';\n case 'failed':\n return 'fa-light fa-circle-exclamation';\n case 'cancelled':\n return 'fa-light fa-ban';\n default:\n return 'fa-light fa-list-check';\n }\n });\n\n protected readonly progressColor = computed(() => {\n switch (this.data().status) {\n case 'failed':\n return 'danger';\n case 'paused':\n return 'warning';\n case 'completed':\n return 'success';\n default:\n return 'primary';\n }\n });\n\n protected readonly showProgressBar = computed(() => {\n const operation = this.data();\n return axpIsActiveBackgroundOperationStatus(operation.status);\n });\n\n protected readonly isIndeterminateProgress = computed(() => {\n const operation = this.data();\n return !isNumber(operation.progress) && !operation.currentStep;\n });\n\n protected readonly progressMode = computed(() =>\n this.isIndeterminateProgress() ? 'indeterminate' : 'determinate',\n );\n\n protected readonly progressValue = computed(() => {\n const progress = this.data().progress;\n if (isNumber(progress)) {\n return Math.min(Math.max(progress, 0), 100);\n }\n return 0;\n });\n\n protected readonly isClickable = computed(() => this.operationService.hasClickHandler(this.data()));\n\n protected readonly showError = computed(() => this.data().status === 'failed' && !!this.data().error?.message);\n\n protected readonly actions = computed(() => this.operationService.getAvailableActions(this.data()));\n\n protected readonly showMetaRow = computed(() => {\n const operation = this.data();\n return (\n !!operation.statusText ||\n !!operation.currentStep ||\n this.actions().length > 0\n );\n });\n\n //#endregion\n\n //#region ---- Action presentation ----\n\n protected actionLabelKey(action: AXPBackgroundOperationActionKey): string {\n return `@general:background-operation.actions.${action}`;\n }\n\n protected actionButtonLook(action: AXPBackgroundOperationActionKey): AXStyleLookType {\n if (action === 'dismiss') {\n return 'blank';\n }\n return 'twotone';\n }\n\n protected actionButtonColor(action: AXPBackgroundOperationActionKey): string {\n switch (action) {\n case 'cancel':\n return 'danger';\n case 'resume':\n case 'retry':\n return 'primary';\n default:\n return 'default';\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected async onItemClick(): Promise<void> {\n if (!this.isClickable()) {\n return;\n }\n try {\n await this.operationService.executeClick(this.data().id);\n this.itemClicked.emit();\n } catch (error) {\n console.error('Background operation click failed:', error);\n }\n }\n\n protected async onAction(action: AXPBackgroundOperationActionKey): Promise<void> {\n if (this.pendingAction()) {\n return;\n }\n this.pendingAction.set(action);\n try {\n await this.operationService.runAction(this.data().id, action);\n this.actionCompleted.emit();\n } catch (error) {\n console.error('Background operation action failed:', error);\n } finally {\n this.pendingAction.set(null);\n }\n }\n\n protected isActionDisabled(action: AXPBackgroundOperationActionKey): boolean {\n const pending = this.pendingAction();\n return pending !== null && pending !== action;\n }\n\n protected isActionLoading(action: AXPBackgroundOperationActionKey): boolean {\n return this.pendingAction() === action;\n }\n\n //#endregion\n}\n\n//#endregion\n","<article\n class=\"operation-item\"\n [class]=\"statusClass()\"\n [class.--clickable]=\"isClickable()\"\n (click)=\"onItemClick()\"\n>\n <div class=\"operation-item__body\">\n <div class=\"operation-item__header\">\n <ax-icon class=\"operation-item__status-icon\" [class]=\"statusClass()\">\n <i [class]=\"statusIcon()\"></i>\n </ax-icon>\n\n <div class=\"operation-item__summary\">\n <h3 class=\"operation-item__title\">{{ data().title }}</h3>\n\n @if (showMetaRow()) {\n <div class=\"operation-item__meta\">\n <div class=\"operation-item__meta-content\">\n @if (data().statusText) {\n <p class=\"operation-item__status-text\">{{ data().statusText }}</p>\n }\n\n @if (data().currentStep) {\n <span class=\"operation-item__step\">\n {{ '@general:background-operation.step' | translate | async }} {{ data().currentStep }}\n </span>\n }\n </div>\n\n @if (actions().length > 0) {\n <footer class=\"operation-item__actions\" (click)=\"$event.stopPropagation()\">\n @for (action of actions(); track action) {\n <ax-button\n class=\"ax-xs\"\n [look]=\"actionButtonLook(action)\"\n [color]=\"actionButtonColor(action)\"\n [text]=\"(actionLabelKey(action) | translate | async) ?? ''\"\n [disabled]=\"isActionDisabled(action) || isActionLoading(action)\"\n (onClick)=\"onAction(action)\"\n ></ax-button>\n }\n </footer>\n }\n </div>\n }\n\n @if (showProgressBar()) {\n <ax-progress-bar\n [progress]=\"progressValue()\"\n [mode]=\"progressMode()\"\n [color]=\"progressColor()\"\n [style.height.px]=\"4\"\n ></ax-progress-bar>\n }\n\n @if (showError()) {\n <p class=\"operation-item__error\" role=\"alert\">{{ data().error!.message }}</p>\n }\n </div>\n </div>\n </div>\n</article>\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport type { AXPBackgroundOperationStatus } from '../background-operation.types';\nimport { axpIsActiveBackgroundOperationStatus } from '../background-operation.util';\nimport { AXPBackgroundOperationItemComponent } from './background-operation-item.component';\n\n//#endregion\n\n//#region ---- Sort priority ----\n\nconst STATUS_SORT_PRIORITY: Record<AXPBackgroundOperationStatus, number> = {\n running: 0,\n queued: 1,\n paused: 2,\n failed: 3,\n completed: 4,\n cancelled: 5,\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-panel',\n templateUrl: './background-operation-panel.component.html',\n styleUrls: ['./background-operation-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXTranslationModule, AXPBackgroundOperationItemComponent],\n})\nexport class AXPBackgroundOperationPanelComponent {\n //#region ---- Outputs ----\n\n onActiveCountChange = output<number>();\n\n onClosePopover = output<void>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly visibleOperations = computed(() =>\n [...this.operationService.operations()]\n .filter(\n (operation) =>\n axpIsActiveBackgroundOperationStatus(operation.status) || operation.status === 'failed',\n )\n .sort((left, right) => {\n const priorityDiff = STATUS_SORT_PRIORITY[left.status] - STATUS_SORT_PRIORITY[right.status];\n if (priorityDiff !== 0) {\n return priorityDiff;\n }\n return right.createdAt.getTime() - left.createdAt.getTime();\n }),\n );\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"operation-panel\">\n <header class=\"operation-panel__header\">\n <h2 class=\"operation-panel__title\">{{ '@general:background-operation.panel.title' | translate | async }}</h2>\n </header>\n\n <div class=\"operation-panel__list\">\n @if (visibleOperations().length === 0) {\n <div class=\"operation-panel__empty\">\n <i class=\"fa-regular fa-list-check\"></i>\n <span class=\"ax-text-sm\">{{ '@general:background-operation.empty.all' | translate | async }}</span>\n </div>\n } @else {\n @for (operation of visibleOperations(); track operation.id) {\n <axp-background-operation-item\n [data]=\"operation\"\n (actionCompleted)=\"onActiveCountChange.emit(operationService.activeCount())\"\n (itemClicked)=\"onClosePopover.emit()\"\n ></axp-background-operation-item>\n }\n }\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPBackgroundOperationService } from '../background-operation.service';\nimport { AXPBackgroundOperationPanelComponent } from './background-operation-panel.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-background-operation-slot',\n templateUrl: './background-operation-slot.component.html',\n styleUrls: ['./background-operation-slot.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXDecoratorModule, AXTranslationModule, AXPopoverModule, AXPBackgroundOperationPanelComponent],\n})\nexport class AXPBackgroundOperationSlotComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly operationService = inject(AXPBackgroundOperationService);\n\n //#endregion\n\n //#region ---- View Queries ----\n\n private readonly popover = viewChild(AXPopoverComponent);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly activeCount = this.operationService.activeCount;\n\n protected readonly failedCount = this.operationService.failedCount;\n\n protected readonly showSlot = computed(\n () => this.activeCount() > 0 || this.failedCount() > 0,\n );\n\n protected readonly slotShowsFailureOnly = computed(\n () => this.activeCount() === 0 && this.failedCount() > 0,\n );\n\n protected readonly slotLabelKey = computed(() => {\n if (this.slotShowsFailureOnly()) {\n return this.failedCount() === 1\n ? '@general:background-operation.slot.failed-single'\n : '@general:background-operation.slot.failed-multiple';\n }\n\n return this.activeCount() === 1\n ? '@general:background-operation.slot.single'\n : '@general:background-operation.slot.multiple';\n });\n\n protected readonly slotLabelParams = computed(() => ({\n count: this.slotShowsFailureOnly() ? this.failedCount() : this.activeCount(),\n }));\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected closePopover(): void {\n this.popover()?.close();\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (showSlot()) {\n <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger>\n <ax-icon class=\"operation-slot__icon\">\n @if (slotShowsFailureOnly()) {\n <i class=\"fa-light fa-circle-exclamation\"></i>\n } @else {\n <i class=\"fa-light fa-spinner fa-spin\"></i>\n }\n </ax-icon>\n <span class=\"operation-slot__text\">\n {{ slotLabelKey() | translate: { params: slotLabelParams() } | async }}\n </span>\n </button>\n\n <ax-popover [target]=\"operationTrigger\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-rounded-md ax-w-full\">\n <axp-background-operation-panel (onClosePopover)=\"closePopover()\"></axp-background-operation-panel>\n </div>\n </ax-popover>\n}\n","import { 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 { axpIsEntityDetailsPath, axpIsEntityListPath } from '../../utils/app-path-navigation.util';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuRouteMatchResult {\n item: AXPMenuItem;\n /** Parent menu items from root down to the direct parent of the matched item. */\n ancestors: AXPMenuItem[];\n isPartialMatch: boolean;\n}\n\nconst DEFAULT_TRAILING_SEGMENTS = ['list', 'view', 'edit', 'create'];\n\ninterface EntityRouteKey {\n app: string;\n module: string;\n entity: string;\n /** Segment index after the entity name (first segment that is not part of the entity key). */\n entityEndIndex: number;\n}\n\n//#region ---- Entity Route Helpers ----\n\n/**\n * Parses `/{app}/m/{module}/e/{entity}/...` routes into a stable entity key.\n */\nfunction axpParseEntityRouteKey(segments: string[]): EntityRouteKey | null {\n const mIndex = segments.indexOf('m');\n const eIndex = segments.indexOf('e');\n\n if (mIndex < 1 || eIndex <= mIndex + 1 || eIndex + 1 >= segments.length) {\n return null;\n }\n\n return {\n app: segments[mIndex - 1],\n module: segments[mIndex + 1],\n entity: segments[eIndex + 1],\n entityEndIndex: eIndex + 2,\n };\n}\n\nfunction axpEntityRouteKeysEqual(left: EntityRouteKey, right: EntityRouteKey): boolean {\n return left.app === right.app && left.module === right.module && left.entity === right.entity;\n}\n\n/**\n * Matches entity list menu entries against list/detail/create/edit routes for the same entity.\n */\nfunction axpTryMatchEntityMenuRoute(\n itemSegments: string[],\n pathSegments: string[],\n currentBase: string,\n): { isMatch: boolean; isPartial: boolean } | null {\n const menuEntity = axpParseEntityRouteKey(itemSegments);\n const currentEntity = axpParseEntityRouteKey(pathSegments);\n\n if (!menuEntity || !currentEntity || !axpEntityRouteKeysEqual(menuEntity, currentEntity)) {\n return null;\n }\n\n const isPartial =\n pathSegments.length > menuEntity.entityEndIndex ||\n axpIsEntityDetailsPath(currentBase) ||\n !axpIsEntityListPath(currentBase);\n\n return { isMatch: true, isPartial };\n}\n\n//#endregion\n\n/**\n * Compares a menu item path with the current browser path.\n * Mirrors the matching rules used when selecting the active menu item.\n */\nexport function axpMenuPathsMatch(\n itemPath: string,\n currentPath: string,\n trailingSegmentsToIgnore: string[] = DEFAULT_TRAILING_SEGMENTS,\n): { isMatch: boolean; isPartial: boolean } {\n const itemNoHash = itemPath.split('#')[0];\n const currentNoHash = currentPath.split('#')[0];\n\n const [itemBase, itemQueryString = ''] = itemNoHash.split('?');\n const [currentBase] = currentNoHash.split('?');\n\n const itemSegments = itemBase.split('/').filter((segment) => segment.length > 0);\n const pathSegments = currentBase.split('/').filter((segment) => segment.length > 0);\n\n const entityMatch = axpTryMatchEntityMenuRoute(itemSegments, pathSegments, `/${currentBase}`);\n if (entityMatch) {\n return entityMatch;\n }\n\n const menuLength = itemSegments.length;\n const pathLength = pathSegments.length;\n\n let effectiveMenuLength = menuLength;\n if (menuLength > 0 && trailingSegmentsToIgnore.includes(itemSegments[menuLength - 1])) {\n effectiveMenuLength--;\n }\n\n if (pathLength < effectiveMenuLength) {\n return { isMatch: false, isPartial: false };\n }\n\n let isPrefix = true;\n for (let i = 0; i < effectiveMenuLength; i++) {\n if (itemSegments[i] !== pathSegments[i]) {\n isPrefix = false;\n break;\n }\n }\n\n if (!isPrefix) {\n return { isMatch: false, isPartial: false };\n }\n\n const isPartialMatch = effectiveMenuLength < pathLength;\n const isExactMatch = effectiveMenuLength === pathLength;\n\n const itemParams = new URLSearchParams(itemQueryString);\n const currentParams = new URLSearchParams(currentNoHash.split('?')[1] ?? '');\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 const menuEntity = axpParseEntityRouteKey(itemSegments);\n if (menuEntity) {\n effectiveMenuLength = menuEntity.entityEndIndex;\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 { AXPMenuItem } from './menu.types';\nimport { AXPMenuItemFinder, AXPMenuMiddlewareContext } from './menu.middleware';\n\n//#region ---- Menu Context Builder ----\n\n/**\n * Creates a rich context for menu manipulation\n * Similar to entity modifier context pattern\n */\nexport function createMenuContext(items: AXPMenuItem[]): AXPMenuMiddlewareContext {\n const context: AXPMenuMiddlewareContext = {\n get items() {\n return items;\n },\n\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder {\n if (typeof nameOrPattern === 'string') {\n return context.findByName(nameOrPattern);\n }\n const found = context.findByPattern(nameOrPattern);\n return found.length > 0 ? found[0] : createEmptyFinder();\n },\n\n findByName(name: string): AXPMenuItemFinder {\n return createMenuItemFinder(items, name);\n },\n\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[] {\n const regex = typeof pattern === 'string' ? wildcardToRegex(pattern) : pattern;\n const results: AXPMenuItemFinder[] = [];\n\n const searchRecursive = (itemList: AXPMenuItem[]) => {\n for (const item of itemList) {\n if (item.name && regex.test(item.name)) {\n results.push(createMenuItemFinder(items, item.name));\n }\n if (item.children) {\n searchRecursive(item.children);\n }\n }\n };\n\n searchRecursive(items);\n return results;\n },\n\n add(...newItems: AXPMenuItem[]): AXPMenuMiddlewareContext {\n items.push(...newItems);\n return context;\n },\n\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext {\n removeRecursive(items, predicate);\n return context;\n },\n\n sort(): AXPMenuMiddlewareContext {\n sortItemsRecursively(items);\n return context;\n },\n\n toArray(): AXPMenuItem[] {\n return items;\n },\n };\n\n return context;\n}\n\n//#endregion\n\n//#region ---- Menu Item Finder Implementation ----\n\n/**\n * Creates a finder for a specific menu item\n */\nfunction createMenuItemFinder(rootItems: AXPMenuItem[], targetName: string): AXPMenuItemFinder {\n const findItemWithParent = (\n items: AXPMenuItem[],\n name: string,\n parent: { items: AXPMenuItem[] } = { items: rootItems }\n ): { item: AXPMenuItem | undefined; parent: { items: AXPMenuItem[] } } => {\n for (const item of items) {\n if (item.name === name) {\n return { item, parent };\n }\n if (item.children) {\n const result = findItemWithParent(item.children, name, { items: item.children });\n if (result.item) {\n return result;\n }\n }\n }\n return { item: undefined, parent };\n };\n\n const finder: AXPMenuItemFinder = {\n get(): AXPMenuItem | undefined {\n return findItemWithParent(rootItems, targetName).item;\n },\n\n exists(): boolean {\n return finder.get() !== undefined;\n },\n\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n const updates = typeof updater === 'function' ? updater(item) : updater;\n Object.assign(item, updates);\n }\n return finder;\n },\n\n remove(): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 1);\n }\n }\n return finder;\n },\n\n hide(): AXPMenuItemFinder {\n // Hide by removing the item from menu\n return finder.remove();\n },\n\n show(): AXPMenuItemFinder {\n // Show is a no-op since items are visible by default\n // To truly implement show, we'd need to track removed items and re-add them\n console.warn('show() is not fully implemented - items are visible by default');\n return finder;\n },\n\n setPriority(priority: number): AXPMenuItemFinder {\n return finder.update({ priority });\n },\n\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item) {\n item.children = item.children || [];\n item.children.push(...children);\n }\n return finder;\n },\n\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder {\n const { item } = findItemWithParent(rootItems, targetName);\n if (item && item.children) {\n item.children = item.children.filter((c) => !predicate(c));\n }\n return finder;\n },\n\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder {\n const { item, parent: oldParent } = findItemWithParent(rootItems, targetName);\n if (!item) {\n return finder;\n }\n\n // Remove from old parent\n const oldIndex = oldParent.items.indexOf(item);\n if (oldIndex !== -1) {\n oldParent.items.splice(oldIndex, 1);\n }\n\n // Add to new parent\n if (!parentName || parentName === '') {\n // Move to root (handles null, undefined, and empty string)\n rootItems.push(item);\n } else {\n const { item: newParentItem } = findItemWithParent(rootItems, parentName);\n if (newParentItem) {\n newParentItem.children = newParentItem.children || [];\n newParentItem.children.push(item);\n }\n }\n\n return finder;\n },\n\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index, 0, ...items);\n }\n }\n return finder;\n },\n\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder {\n const { item, parent } = findItemWithParent(rootItems, targetName);\n if (item) {\n const index = parent.items.indexOf(item);\n if (index !== -1) {\n parent.items.splice(index + 1, 0, ...items);\n }\n }\n return finder;\n },\n };\n\n return finder;\n}\n\n/**\n * Creates an empty finder for items not found\n */\nfunction createEmptyFinder(): AXPMenuItemFinder {\n return {\n get: () => undefined,\n exists: () => false,\n update: () => createEmptyFinder(),\n remove: () => createEmptyFinder(),\n hide: () => createEmptyFinder(),\n show: () => createEmptyFinder(),\n setPriority: () => createEmptyFinder(),\n addChildren: () => createEmptyFinder(),\n removeChildren: () => createEmptyFinder(),\n moveTo: () => createEmptyFinder(),\n insertBefore: () => createEmptyFinder(),\n insertAfter: () => createEmptyFinder(),\n };\n}\n\n//#endregion\n\n//#region ---- Helper Functions ----\n\n/**\n * Converts wildcard pattern to regex\n */\nfunction wildcardToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+?^${}()|\\[\\]\\\\]/g, '\\\\$&');\n const regexStr = `^${escaped.replace(/\\*/g, '.*')}$`;\n return new RegExp(regexStr);\n}\n\n/**\n * Recursively removes items matching predicate\n */\nfunction removeRecursive(items: AXPMenuItem[], predicate: (item: AXPMenuItem) => boolean): void {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (predicate(item)) {\n items.splice(i, 1);\n } else if (item.children) {\n removeRecursive(item.children, predicate);\n }\n }\n}\n\n/**\n * Recursively sorts items by priority\n */\nfunction sortItemsRecursively(items: AXPMenuItem[]): void {\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n items.forEach((item) => {\n if (item.children && item.children.length > 0) {\n sortItemsRecursively(item.children);\n }\n });\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\n\n//#region ---- Menu Middleware Context ----\n\n/**\n * Rich context API for manipulating menu items within middleware\n * Provides helper methods to find, update, remove, and add menu items easily\n */\nexport interface AXPMenuMiddlewareContext {\n /**\n * Get all menu items\n */\n readonly items: AXPMenuItem[];\n\n /**\n * Find menu item(s) by name or pattern\n */\n find(nameOrPattern: string | RegExp): AXPMenuItemFinder;\n\n /**\n * Find menu item by name (exact match)\n */\n findByName(name: string): AXPMenuItemFinder;\n\n /**\n * Find menu items by pattern (regex or wildcard)\n */\n findByPattern(pattern: string | RegExp): AXPMenuItemFinder[];\n\n /**\n * Add new menu items to root level\n */\n add(...items: AXPMenuItem[]): AXPMenuMiddlewareContext;\n\n /**\n * Remove menu items by predicate\n */\n remove(predicate: (item: AXPMenuItem) => boolean): AXPMenuMiddlewareContext;\n\n /**\n * Sort all menu items recursively by priority\n */\n sort(): AXPMenuMiddlewareContext;\n\n /**\n * Get the final menu items array\n */\n toArray(): AXPMenuItem[];\n}\n\n/**\n * Helper for finding and manipulating a specific menu item\n */\nexport interface AXPMenuItemFinder {\n /**\n * Get the found menu item (or undefined)\n */\n get(): AXPMenuItem | undefined;\n\n /**\n * Check if menu item exists\n */\n exists(): boolean;\n\n /**\n * Update menu item properties\n */\n update(updater: Partial<AXPMenuItem> | ((item: AXPMenuItem) => Partial<AXPMenuItem>)): AXPMenuItemFinder;\n\n /**\n * Remove the menu item\n */\n remove(): AXPMenuItemFinder;\n\n /**\n * Hide the menu item (removes it from the menu)\n */\n hide(): AXPMenuItemFinder;\n\n /**\n * Show the menu item (currently a no-op as items are visible by default)\n * Note: To truly implement show, we'd need to track removed items\n */\n show(): AXPMenuItemFinder;\n\n /**\n * Set priority\n */\n setPriority(priority: number): AXPMenuItemFinder;\n\n /**\n * Add children to this menu item\n */\n addChildren(...children: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Remove children by predicate\n */\n removeChildren(predicate: (child: AXPMenuItem) => boolean): AXPMenuItemFinder;\n\n /**\n * Move menu item to a different parent\n */\n moveTo(parentName: string | null | undefined): AXPMenuItemFinder;\n\n /**\n * Insert menu items before this item\n */\n insertBefore(...items: AXPMenuItem[]): AXPMenuItemFinder;\n\n /**\n * Insert menu items after this item\n */\n insertAfter(...items: AXPMenuItem[]): AXPMenuItemFinder;\n}\n\n//#endregion\n\n//#region ---- Menu Middleware ----\n\n/**\n * Middleware that processes menu items after all providers have executed\n * Middlewares are executed in order based on their priority (higher priority = earlier execution)\n */\nexport interface AXPMenuMiddleware {\n /**\n * Optional priority for execution order (higher = earlier)\n * Default: 0\n */\n readonly priority?: number;\n\n /**\n * Optional name for debugging and identification\n */\n readonly name?: string;\n\n /**\n * Process menu items using the rich context API\n * @param context - The menu middleware context with helper methods\n * @returns Processed context or void (context is mutable)\n */\n process(context: AXPMenuMiddlewareContext): Promise<void | AXPMenuMiddlewareContext>;\n}\n\n/**\n * Provider definition for registering middleware via multi-provider\n */\nexport interface AXPMenuMiddlewareProvider {\n /**\n * The middleware instance\n */\n middleware: AXPMenuMiddleware;\n\n /**\n * Optional priority override\n */\n priority?: number;\n}\n\n/**\n * Injection token for menu middlewares (multi-provider)\n */\nexport const AXP_MENU_MIDDLEWARE = new InjectionToken<AXPMenuMiddleware[]>('AXP_MENU_MIDDLEWARE');\n\n//#endregion\n\n","import { inject, Injectable } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Registry ----\n\n/**\n * Central service for managing menu middlewares with priority-based ordering\n * Similar to token registry pattern used in identifier-management\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuMiddlewareRegistry {\n\n //#region ---- Fields ----\n\n /**\n * Manually registered middlewares\n */\n private readonly manualMiddlewares = new Map<string, AXPMenuMiddleware>();\n\n /**\n * Provider-based middlewares (multi-provider injection)\n */\n private readonly providerMiddlewares = inject(AXP_MENU_MIDDLEWARE, { optional: true }) ?? [];\n\n //#endregion\n\n //#region ---- Registration Methods ----\n\n /**\n * Manually register a middleware\n * @param middleware - The middleware to register\n */\n register(middleware: AXPMenuMiddleware): void {\n const name = middleware.name || `middleware_${Date.now()}_${Math.random()}`;\n\n const existing = this.manualMiddlewares.get(name);\n if (!existing || (middleware.priority ?? 0) > (existing.priority ?? 0)) {\n this.manualMiddlewares.set(name, middleware);\n }\n }\n\n /**\n * Unregister a middleware by name\n * @param name - The name of the middleware to remove\n */\n unregister(name: string): void {\n this.manualMiddlewares.delete(name);\n }\n\n /**\n * Get a specific middleware by name\n * @param name - The middleware name\n */\n get(name: string): AXPMenuMiddleware | undefined {\n // Provider-provided middlewares take precedence\n const fromProvider = this.providerMiddlewares\n .filter((m) => m.name === name)\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))[0];\n\n if (fromProvider) {\n return fromProvider;\n }\n\n return this.manualMiddlewares.get(name);\n }\n\n /**\n * Get all middlewares sorted by priority (highest first)\n * Combines provider-based and manually registered middlewares\n */\n list(): AXPMenuMiddleware[] {\n const map = new Map<string, AXPMenuMiddleware>();\n\n // Helper to add middleware, respecting priority\n const addMiddleware = (m: AXPMenuMiddleware) => {\n const name = m.name || `anonymous_${Date.now()}`;\n const existing = map.get(name);\n if (!existing || (m.priority ?? 0) > (existing.priority ?? 0)) {\n map.set(name, m);\n }\n };\n\n // Add provider middlewares first (higher precedence)\n this.providerMiddlewares.forEach(addMiddleware);\n\n // Add manual middlewares\n Array.from(this.manualMiddlewares.values()).forEach(addMiddleware);\n\n // Return sorted by priority (highest first)\n return Array.from(map.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Check if a middleware exists\n * @param name - The middleware name\n */\n exists(name: string): boolean {\n return this.get(name) !== undefined;\n }\n\n /**\n * Clear all manually registered middlewares\n * Provider-based middlewares are not affected\n */\n clear(): void {\n this.manualMiddlewares.clear();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXPMenuFinderResult, AXPMenuInsertion, AXPMenuItem, AXPMenuProviderContext } from './menu.types';\nimport { createMenuContext } from './menu.context';\nimport { AXPMenuMiddlewareRegistry } from './menu-middleware.registry';\n\nexport interface AXPMenuProvider {\n provide(context: AXPMenuProviderContext): Promise<void>;\n}\n\nexport const AXP_MENU_PROVIDER = new InjectionToken<AXPMenuProvider[]>('AXP_MENU_PROVIDER');\n\n//TODO: check performance of this service\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuProviderService {\n\n //#region ---- Dependencies ----\n\n private providers = inject(AXP_MENU_PROVIDER, { optional: true });\n private middlewareRegistry = inject(AXPMenuMiddlewareRegistry);\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: AXPMenuItem[] | null = null;\n private pendingInserts: Array<{ target: string; newItems: AXPMenuItem[]; position: AXPMenuInsertion }> = [];\n private pendingRemovals: string[] = [];\n private pendingUpdates: Array<{ target: string; updatedItem: Partial<AXPMenuItem> }> = [];\n private pendingAdditions: Array<{ target: string; newItems: AXPMenuItem[] }> = [];\n private pendingMoves: Array<{ source: string; destination: string; position: AXPMenuInsertion }> = [];\n\n /**\n * Observable for menu reload events\n * Emits when menu cache is cleared and consumers should reload\n */\n private menuReloadSubject = new Subject<void>();\n public readonly menuReload$ = this.menuReloadSubject.asObservable();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get menu items with middlewares applied (for end-user display)\n */\n async items(): Promise<AXPMenuItem[]> {\n // Return cached items if available\n if (this.cache) {\n return this.cache;\n }\n\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider so subsequent providers\n // can find items added by earlier providers (e.g. Tokens under Data Definitions)\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Apply middlewares using registry (sorted by priority)\n await this.applyMiddlewares(items);\n\n // ADD level property to items\n setMenuItemMeta(items);\n\n // Cache the computed items\n this.cache = items;\n return items;\n }\n\n /**\n * Get raw menu items WITHOUT middleware applied (for management/editing)\n * Used by menu management pages to show original items before customization\n */\n async rawItems(): Promise<AXPMenuItem[]> {\n const items: AXPMenuItem[] = [];\n const context = this.createMenuProviderContext(items);\n\n // Load providers from DI tokens\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.provide(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.provide(context);\n }\n // Apply pending operations after each provider\n this.applyPendingOperations(items);\n }\n }\n\n // Sort items by priority\n items.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // ADD level property to items (but NO middleware)\n setMenuItemMeta(items);\n\n return items;\n }\n\n /**\n * Clear the cache to force reload of menu items\n * Notifies all subscribers to reload their menu data\n */\n clearCache(): void {\n this.cache = null;\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n\n // Notify subscribers that menu should be reloaded\n this.menuReloadSubject.next();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply middlewares in priority order using the enhanced context API\n */\n private async applyMiddlewares(items: AXPMenuItem[]): Promise<void> {\n const middlewares = this.middlewareRegistry.list();\n\n for (const middleware of middlewares) {\n try {\n const context = createMenuContext(items);\n await middleware.process(context);\n\n // The context mutates the items array, so no need to reassign\n } catch (error) {\n console.error(\n `Error in menu middleware ${middleware.name || 'anonymous'}:`,\n error\n );\n }\n }\n }\n\n /**\n * Create provider context for menu providers\n */\n private createMenuProviderContext(items: AXPMenuItem[]): AXPMenuProviderContext {\n return {\n addItems: (newItems: AXPMenuItem[]) => {\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(items, newItem.name);\n if (existingItem) {\n // Update existing item, merging properties\n this.mergeMenuItem(existingItem, newItem);\n } else {\n // Add new item if it doesn't exist\n items.push(newItem);\n }\n } else {\n // Add item without name (no way to check for duplicates)\n items.push(newItem);\n }\n }\n },\n find: (target: string): AXPMenuFinderResult => {\n const foundItemInfo = this.findItemWithParent(items, target);\n const exists = foundItemInfo.foundItem !== null;\n\n return {\n exists,\n insert: (newItems: AXPMenuItem[], position: AXPMenuInsertion) => {\n this.pendingInserts.push({ target, newItems, position });\n },\n remove: () => {\n this.pendingRemovals.push(target);\n },\n update: (updatedItem: Partial<AXPMenuItem>) => {\n this.pendingUpdates.push({ target, updatedItem });\n },\n addItems: (newItems: AXPMenuItem[]) => {\n this.pendingAdditions.push({ target, newItems });\n },\n moveTo: (destination: string, position: AXPMenuInsertion = 'inside') => {\n this.pendingMoves.push({\n source: target,\n destination,\n position: position ?? 'inside',\n });\n },\n };\n }\n };\n }\n\n private applyPendingOperations(items: AXPMenuItem[]): void {\n for (const { target, newItems, position } of this.pendingInserts) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, appending items.`);\n items.push(...newItems);\n } else {\n if (position === 'inside') {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n } else {\n // For 'before' and 'after', check for duplicates in parent items\n const itemsToInsert: AXPMenuItem[] = [];\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingItem = this.findItemByName(parentItems, newItem.name);\n if (existingItem) {\n this.mergeMenuItem(existingItem, newItem);\n } else {\n itemsToInsert.push(newItem);\n }\n } else {\n itemsToInsert.push(newItem);\n }\n }\n\n if (itemsToInsert.length > 0) {\n const index = parentItems.indexOf(foundItem);\n const insertPosition = position === 'before' ? index : index + 1;\n parentItems.splice(insertPosition, 0, ...itemsToInsert);\n }\n }\n }\n }\n\n for (const target of this.pendingRemovals) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem, parentItems } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to remove.`);\n } else {\n const index = parentItems.indexOf(foundItem);\n parentItems.splice(index, 1);\n }\n }\n\n for (const { target, updatedItem } of this.pendingUpdates) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to update.`);\n } else {\n Object.assign(foundItem, updatedItem);\n }\n }\n\n for (const { target, newItems } of this.pendingAdditions) {\n const foundItemInfo = this.findItemWithParent(items, target);\n const { foundItem } = foundItemInfo;\n if (!foundItem) {\n console.warn(`Target \"${target}\" not found, nothing to add items to.`);\n } else {\n if (!foundItem.children) {\n foundItem.children = [];\n }\n\n // Check for duplicates by name and merge or add\n for (const newItem of newItems) {\n if (newItem.name) {\n const existingChild = this.findItemByName(foundItem.children, newItem.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newItem);\n } else {\n foundItem.children.push(newItem);\n }\n } else {\n foundItem.children.push(newItem);\n }\n }\n }\n }\n\n for (const move of this.pendingMoves) {\n this.applyPendingMove(items, move.source, move.destination, move.position);\n }\n\n // Clear pending operations after applying them\n this.pendingInserts = [];\n this.pendingRemovals = [];\n this.pendingUpdates = [];\n this.pendingAdditions = [];\n this.pendingMoves = [];\n }\n\n private findItemWithParent(items: AXPMenuItem[], target: string, parentItems: AXPMenuItem[] = items): { foundItem: AXPMenuItem | null, parentItems: AXPMenuItem[] } {\n for (const item of items) {\n if (item.name === target) {\n return { foundItem: item, parentItems };\n }\n\n if (item.children) {\n const result = this.findItemWithParent(item.children, target, item.children);\n if (result.foundItem) {\n return result;\n }\n }\n }\n return { foundItem: null, parentItems: items };\n }\n\n /**\n * Find menu item by name in the items tree (recursive search)\n */\n private findItemByName(items: AXPMenuItem[], name: string): AXPMenuItem | null {\n for (const item of items) {\n if (item.name === name) {\n return item;\n }\n\n if (item.children) {\n const found = this.findItemByName(item.children, name);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private applyPendingMove(\n items: AXPMenuItem[],\n sourceName: string,\n destName: string,\n position: AXPMenuInsertion\n ): void {\n if (sourceName === destName) {\n console.warn(`moveTo: source and destination are the same (\"${sourceName}\"), ignored.`);\n return;\n }\n\n const sourceInfo = this.findItemWithParent(items, sourceName);\n const { foundItem: sourceItem, parentItems: sourceParent } = sourceInfo;\n if (!sourceItem) {\n console.warn(`moveTo: source \"${sourceName}\" not found.`);\n return;\n }\n\n const destInfo = this.findItemWithParent(items, destName);\n const { foundItem: destItem, parentItems: destParent } = destInfo;\n if (!destItem) {\n console.warn(`moveTo: destination \"${destName}\" not found.`);\n return;\n }\n\n if (this.itemIsInSubtreeOf(sourceItem, destItem)) {\n console.warn(\n `moveTo: cannot move \"${sourceName}\" because \"${destName}\" is inside the source subtree.`\n );\n return;\n }\n\n const sourceIndex = sourceParent.indexOf(sourceItem);\n if (sourceIndex === -1) {\n console.warn(`moveTo: source \"${sourceName}\" not in parent list (inconsistent).`);\n return;\n }\n sourceParent.splice(sourceIndex, 1);\n\n if (position === 'inside') {\n if (!destItem.children) {\n destItem.children = [];\n }\n destItem.children.push(sourceItem);\n return;\n }\n\n const destIndexInParent = destParent.indexOf(destItem);\n if (destIndexInParent === -1) {\n console.warn(\n `moveTo: destination \"${destName}\" not in parent list, reverting source removal.`\n );\n sourceParent.splice(sourceIndex, 0, sourceItem);\n return;\n }\n const insertIndex = position === 'before' ? destIndexInParent : destIndexInParent + 1;\n destParent.splice(insertIndex, 0, sourceItem);\n }\n\n private itemIsInSubtreeOf(root: AXPMenuItem, candidate: AXPMenuItem): boolean {\n if (root === candidate) {\n return true;\n }\n if (!root.children?.length) {\n return false;\n }\n for (const child of root.children) {\n if (child === candidate) {\n return true;\n }\n if (this.itemIsInSubtreeOf(child, candidate)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Merge new item properties into existing item, handling children merge\n */\n private mergeMenuItem(existingItem: AXPMenuItem, newItem: AXPMenuItem): void {\n // Merge top-level properties (newItem properties override existing only if defined)\n if (newItem.text !== undefined) existingItem.text = newItem.text;\n if (newItem.description !== undefined) existingItem.description = newItem.description;\n if (newItem.icon !== undefined) existingItem.icon = newItem.icon;\n if (newItem.path !== undefined) existingItem.path = newItem.path;\n if (newItem.priority !== undefined) existingItem.priority = newItem.priority;\n if (newItem.type !== undefined) existingItem.type = newItem.type;\n if (newItem.command !== undefined) existingItem.command = newItem.command;\n if (newItem.badgeKey !== undefined) existingItem.badgeKey = newItem.badgeKey;\n if (newItem.data !== undefined) existingItem.data = newItem.data;\n if (newItem.policy !== undefined) existingItem.policy = newItem.policy;\n\n // Merge children if both have children\n if (newItem.children && newItem.children.length > 0) {\n if (!existingItem.children) {\n existingItem.children = [];\n }\n\n // For each child in newItem, check if it exists by name and merge or add\n for (const newChild of newItem.children) {\n if (newChild.name) {\n const existingChild = this.findItemByName(existingItem.children, newChild.name);\n if (existingChild) {\n this.mergeMenuItem(existingChild, newChild);\n } else {\n existingItem.children.push(newChild);\n }\n } else {\n existingItem.children.push(newChild);\n }\n }\n }\n }\n\n //#endregion\n}\n\nfunction setMenuItemMeta(items: any[], parentIndex: string = '', depth: number = 0) {\n items.forEach((item, index) => {\n const currentIndex = parentIndex ? `${parentIndex}-${index}` : `${index}`;\n const hasChildren = !!(item.children && Array.isArray(item.children) && item.children.length > 0);\n\n item.meta = {\n index: currentIndex,\n isRoot: depth === 0,\n hasChildren,\n depth\n }\n\n if (hasChildren) {\n setMenuItemMeta(item.children, currentIndex, depth + 1);\n }\n });\n}\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuItem } from './menu.types';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * Service for checking menu item visibility based on permissions, features, and children.\n * This service helps filter out empty menu items that have no visible children.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuVisibilityService {\n private sessionService = inject(AXPSessionService);\n\n /**\n * Checks visibility for a menu branch, including ancestor policies.\n * Parent module features and permissions must pass before child routes are accessible.\n */\n isMenuBranchVisible(item: AXPMenuItem, ancestors: AXPMenuItem[] = []): boolean {\n for (const menuItem of [...ancestors, item]) {\n if (!this.isItemVisible(menuItem)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Checks if a menu item should be visible based on permissions and features.\n */\n isItemVisible(item: AXPMenuItem): boolean {\n const policy = item.policy;\n if (!policy) {\n return true; // No policy means visible\n }\n\n // Check features\n if (policy.features && policy.features.length > 0) {\n const featureKeys = Array.isArray(policy.features) ? policy.features : [policy.features];\n if (!this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n }\n\n // Check permissions\n if (policy.permissions && policy.permissions.length > 0) {\n const permissionKeys = Array.isArray(policy.permissions) ? policy.permissions : [policy.permissions];\n if (!this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Recursively checks if a menu item has any visible children.\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n hasVisibleChildren(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n if (!item.children || item.children.length === 0) {\n return false;\n }\n\n return item.children.some((child) => {\n // Check if child itself is visible\n if (!this.isItemVisible(child)) {\n return false;\n }\n\n // If child has a routerLink, it's visible\n if (getRouterLink && getRouterLink(child)) {\n return true;\n }\n\n // If child has visible children, it's visible\n if (this.hasVisibleChildren(child, getRouterLink)) {\n return true;\n }\n\n // For items without routerLink, check if they have a command (non-empty menu items)\n if (child.command) {\n return true;\n }\n\n return false;\n });\n }\n\n /**\n * Determines if a menu item should be rendered.\n * A menu item should be rendered if:\n * 1. It has a routerLink, OR\n * 2. It has visible children, OR\n * 3. It has a command (for non-router navigation)\n *\n * @param item The menu item to check\n * @param getRouterLink Optional function to check if an item has a router link\n */\n shouldRenderMenuItem(item: AXPMenuItem, getRouterLink?: (item: AXPMenuItem) => unknown): boolean {\n // Check if item itself is visible (permissions/features)\n if (!this.isItemVisible(item)) {\n return false;\n }\n\n // If it has a routerLink, render it\n if (getRouterLink && getRouterLink(item)) {\n return true;\n }\n\n // If it has visible children, render it\n if (this.hasVisibleChildren(item, getRouterLink)) {\n return true;\n }\n\n // If it has a command (for non-router navigation), render it\n if (item.command) {\n return true;\n }\n\n // Otherwise, don't render empty menu items\n return false;\n }\n}\n\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority } from '@acorex/platform/contracts';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPKeyboardShortcutRegistry, normalizeKeyboardShortcuts } from '@acorex/platform/core';\nimport { DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { AXPMenuService } from './menu.service';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\nimport { AXPMenuItem } from './menu.types';\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface AXPMenuShortcutEntry {\n item: AXPMenuItem;\n ancestors: AXPMenuItem[];\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPMenuKeyboardShortcutService {\n //#region ---- Services & Dependencies ----\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly visibilityService = inject(AXPMenuVisibilityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly isAuthenticated = toSignal(this.sessionService.isAuthenticated$, { initialValue: false });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Registers global keyboard shortcuts declared on menu items (`shortcuts` property).\n * Replaces the previous registration when the menu tree is reloaded.\n */\n sync(items: AXPMenuItem[]): void {\n const shortcuts = this.buildShortcutBindings(items);\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'menu-items-shortcuts',\n priority: AXPKeyboardShortcutPriority.Global,\n group: '@general:keyboard-shortcuts.groups.global',\n when: () => this.isAuthenticated() === true,\n shortcuts,\n });\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private buildShortcutBindings(items: AXPMenuItem[]): AXPKeyboardShortcutBinding[] {\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n for (const entry of this.collectShortcutEntries(items)) {\n if (!entry.item.path && !entry.item.command) {\n continue;\n }\n\n for (const shortcut of normalizeKeyboardShortcuts(entry.item.shortcuts)) {\n for (const chord of shortcut.keys) {\n shortcuts.push({\n keys: [chord],\n title: entry.item.text,\n group: '@general:keyboard-shortcuts.groups.global',\n allowInEditableFields: shortcut.allowInEditableFields,\n directionBehavior: shortcut.directionBehavior,\n when: () => this.isShortcutActive(entry) && (shortcut.when?.() ?? true),\n handler: () => {\n this.injector.get(AXPMenuService).executeCommand(entry.item);\n },\n });\n }\n }\n }\n\n return shortcuts;\n }\n\n private collectShortcutEntries(\n items: AXPMenuItem[],\n ancestors: AXPMenuItem[] = [],\n ): AXPMenuShortcutEntry[] {\n const result: AXPMenuShortcutEntry[] = [];\n\n for (const item of items) {\n const parents = ancestors;\n if (item.shortcuts?.length) {\n result.push({ item, ancestors: parents });\n }\n\n if (item.children?.length) {\n result.push(...this.collectShortcutEntries(item.children, [...parents, item]));\n }\n }\n\n return result;\n }\n\n private isShortcutActive(entry: AXPMenuShortcutEntry): boolean {\n if (this.isAuthenticated() !== true) {\n return false;\n }\n\n return this.visibilityService.isMenuBranchVisible(entry.item, entry.ancestors);\n }\n\n //#endregion\n}\n","import { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { patchState, signalStore, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuKeyboardShortcutService } from './menu-keyboard-shortcuts.service';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuItem } from './menu.types';\n\nexport const AXPMenuService = signalStore(\n { providedIn: 'root' },\n\n // Initial State\n withState((router = inject(Router)) => {\n return {\n items: [] as AXPMenuItem[],\n selectedMenuItem: {\n item: null as AXPMenuItem | null,\n isFullMatch: false,\n },\n };\n }),\n\n // Methods for State Management\n withMethods(\n (\n store,\n router = inject(Router),\n workflow = inject(AXPWorkflowService),\n commandExecutor = inject(AXPCommandExecutor),\n ) => {\n return {\n setMenuItems(items: AXPMenuItem[]): void {\n patchState(store, { items: items });\n },\n\n selectMenuItemByRoute(path: string): void {\n const match = axpFindMenuItemByRoute(store.items(), path, ['list', 'view', 'edit', 'create']);\n patchState(store, {\n selectedMenuItem: {\n item: match?.item ?? null,\n isFullMatch: match ? !match.isPartialMatch : false,\n },\n });\n },\n\n executeCommand(item: AXPMenuItem): void {\n if (item.path) {\n workflow.execute('navigate', {\n type: 'router',\n options: { path: item.path },\n } as AXPNavigateActionCommand<'router'>);\n patchState(store, { selectedMenuItem: { item, isFullMatch: true } });\n }\n if (item.command) {\n const command = item.command as AXPExecuteCommand;\n if (workflow.exists(command?.name)) {\n workflow.execute(command.name, command.options);\n } else {\n commandExecutor.execute(command.name, command.options);\n }\n }\n },\n\n isItemOpen(item: AXPMenuItem): boolean {\n const selectedItem = store.selectedMenuItem().item;\n if (!selectedItem) {\n return false;\n }\n\n if (item === selectedItem || (item.name && item.name === selectedItem.name)) {\n return true;\n }\n\n const findParent = (currentItem: AXPMenuItem, targetItem: AXPMenuItem): boolean => {\n if (\n currentItem.children?.some(\n (child) => child === targetItem || (child.name && child.name === targetItem.name),\n )\n ) {\n return true;\n }\n return currentItem.children?.some((child) => findParent(child, targetItem)) ?? false;\n };\n\n return findParent(item, selectedItem);\n },\n };\n },\n ),\n withHooks((store, menuProviderService = inject(AXPMenuProviderService), menuKeyboardShortcuts = inject(AXPMenuKeyboardShortcutService), router = inject(Router)) => {\n let reloadSubscription: any;\n\n const applyMenuItems = (items: AXPMenuItem[]): void => {\n patchState(store, { items });\n menuKeyboardShortcuts.sync(items);\n store.selectMenuItemByRoute(router.url);\n };\n\n return {\n onInit() {\n // Load initial menu items\n (async () => {\n applyMenuItems(await menuProviderService.items());\n })();\n\n // Subscribe to menu reload events\n reloadSubscription = menuProviderService.menuReload$.subscribe(async () => {\n applyMenuItems(await menuProviderService.items());\n });\n },\n onDestroy() {\n // Clean up subscription\n if (reloadSubscription) {\n reloadSubscription.unsubscribe();\n }\n },\n };\n }),\n);\n","import { defaultTo } from 'lodash-es';\n\n//#region ---- Tab Key ----\n\n/** Query params ignored when building a tab dedupe key. */\nconst IGNORED_QUERY_KEYS = new Set(['_ts']);\n\n/**\n * Builds a stable tab key from a router URL.\n * Path segments define identity; query params are excluded so the same entity record\n * or list reuses one tab even when filters or refresh tokens change.\n */\nexport function axpBuildTabKey(url: string): string {\n const normalized = normalizeRouterUrl(url);\n const pathOnly = normalized.split('?')[0].split('#')[0];\n return pathOnly;\n}\n\n/** Normalizes a router URL for storage and navigation. */\nexport function normalizeRouterUrl(url: string): string {\n const trimmed = url.trim();\n if (!trimmed.length) {\n return '/';\n }\n\n const withLeadingSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n const [pathAndFragment, queryString = ''] = withLeadingSlash.split('?');\n const [pathPart, fragment = ''] = pathAndFragment.split('#');\n\n const normalizedPath = pathPart.replace(/\\/+$/, '') || '/';\n const filteredQuery = filterQueryString(queryString);\n\n let result = normalizedPath;\n if (filteredQuery) {\n result += `?${filteredQuery}`;\n }\n if (fragment) {\n result += `#${fragment}`;\n }\n return result;\n}\n\nfunction filterQueryString(queryString: string): string {\n if (!queryString) {\n return '';\n }\n\n const params = new URLSearchParams(queryString);\n const kept: string[] = [];\n params.forEach((value, key) => {\n if (!IGNORED_QUERY_KEYS.has(key)) {\n kept.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n });\n kept.sort();\n return kept.join('&');\n}\n\n/** Human-readable fallback title from the URL path. */\nexport function axpFallbackTabTitle(url: string): string {\n const pathOnly = url.split('?')[0].split('#')[0];\n const segments = pathOnly.split('/').filter(Boolean);\n const last = defaultTo(segments[segments.length - 1], 'Page');\n return decodeURIComponent(last);\n}\n\n//#endregion\n","//#region ---- Types ----\n\nexport type AXPNavigationMode = 'simple' | 'tabular';\n\nexport const AXP_HOME_TAB_KEY = 'axp:home';\n\n/** Route `data` key for tab-navigation behavior (`data.tab`). */\nexport const AXP_TAB_ROUTE_DATA_KEY = 'tab';\n\n/**\n * Set `data.tab = true` on the route that should act as the tab boundary.\n * Child navigations under this route update the same tab rather than opening a new one.\n */\nexport type AXPTabRouteData = true;\n\nexport interface AXPTabDescriptor {\n /** Stable dedupe key derived from the route (path-based, query excluded). */\n key: string;\n /** Full router URL including query string and fragment. */\n url: string;\n title: string;\n /** Resolved breadcrumb segments used for tab chrome (leaf/prefix); avoids parsing joined titles. */\n titleSegments?: string[];\n icon?: string;\n pinned: boolean;\n closable: boolean;\n /** Timestamp used for LRU eviction when max tabs is reached. */\n openedAt: number;\n /** Updated whenever the tab becomes active. */\n lastActivatedAt: number;\n}\n\nexport interface AXPTabSessionState {\n tabs: AXPTabDescriptor[];\n activeTabKey: string | null;\n}\n\n/** Optional hook for confirming closure of a cached background tab (no router navigation). */\nexport interface AXPTabCloseConfirm {\n onBeforeTabClose(): boolean | Promise<boolean>;\n}\n\n//#endregion\n","import { ActivatedRouteSnapshot, Router, Routes } from '@angular/router';\nimport { normalizeRouterUrl } from './tab-key.util';\nimport { AXP_TAB_ROUTE_DATA_KEY } from './tab-navigation.types';\n\n//#region ---- Route Data ----\n\n/** True when the route declares itself as a scoped tab root (`data.tab = true`). */\nexport function axpHasTabScope(data: Record<string, unknown> | undefined): boolean {\n return data?.[AXP_TAB_ROUTE_DATA_KEY] === true;\n}\n\n//#endregion\n\n//#region ---- Snapshot Resolution ----\n\n/** Resolved URL path for a snapshot (no query or fragment). */\nexport function axpPathFromSnapshot(snapshot: ActivatedRouteSnapshot): string {\n const segments = snapshot.pathFromRoot\n .flatMap((entry) => entry.url.map((segment) => segment.path))\n .filter(Boolean);\n return segments.length ? `/${segments.join('/')}` : '/';\n}\n\n/** Returns the leaf snapshot under the router state root. */\nexport function axpGetLeafRouteSnapshot(root: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n let route = root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n}\n\n/**\n * Resolves the tab dedupe key from an activated route tree.\n * Uses the nearest ancestor with `data.tab = true`; otherwise the leaf path.\n */\nexport function axpResolveTabKeyFromSnapshot(leaf: ActivatedRouteSnapshot): string {\n const chain = leaf.pathFromRoot;\n\n for (let index = chain.length - 1; index >= 0; index--) {\n const snapshot = chain[index];\n if (axpHasTabScope(snapshot.data)) {\n return axpPathFromSnapshot(snapshot);\n }\n }\n\n return axpPathFromSnapshot(leaf);\n}\n\n//#endregion\n\n//#region ---- Router / URL Resolution ----\n\n/**\n * Resolves a tab key for the given URL (or the current router URL).\n * Prefers the live route snapshot when it matches the target URL; otherwise matches route config.\n */\nexport function axpResolveTabKey(router: Router, url?: string): string {\n const normalized = normalizeRouterUrl(url ?? router.url);\n const pathOnly = normalized.split('?')[0].split('#')[0];\n\n const currentPath = normalizeRouterUrl(router.url).split('?')[0].split('#')[0];\n if (!url || pathOnly === currentPath) {\n const leaf = axpGetLeafRouteSnapshot(router.routerState.snapshot.root);\n return axpResolveTabKeyFromSnapshot(leaf);\n }\n\n const fromConfig = axpResolveTabKeyFromRouteConfig(router.config, pathOnly);\n if (fromConfig) {\n return fromConfig;\n }\n\n return pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n}\n\n//#endregion\n\n//#region ---- Route Config Matching ----\n\ninterface MatchedRouteLevel {\n mergedData: Record<string, unknown>;\n path: string;\n}\n\n/**\n * Matches a URL path against registered routes and resolves the tab key from `data.tab`.\n */\nexport function axpResolveTabKeyFromRouteConfig(routes: Routes, pathOnly: string): string | null {\n const normalized = pathOnly.startsWith('/') ? pathOnly.replace(/\\/+$/, '') || '/' : `/${pathOnly}`.replace(/\\/+$/, '') || '/';\n const segments = normalized === '/' ? [] : normalized.split('/').filter(Boolean);\n const chain = matchRouteConfigChain(routes, segments, 0, {}, []);\n\n if (!chain?.length) {\n return null;\n }\n\n for (let index = chain.length - 1; index >= 0; index--) {\n const level = chain[index];\n if (axpHasTabScope(level.mergedData)) {\n return level.path;\n }\n }\n\n return chain[chain.length - 1]?.path ?? null;\n}\n\nfunction matchRouteConfigChain(\n routes: Routes,\n segments: string[],\n startIndex: number,\n inheritedData: Record<string, unknown>,\n chain: MatchedRouteLevel[],\n): MatchedRouteLevel[] | null {\n let bestMatch: MatchedRouteLevel[] | null = null;\n\n for (const route of routes) {\n if (route.redirectTo) {\n continue;\n }\n\n const segmentMatch = matchRoutePath(route.path ?? '', segments, startIndex);\n if (!segmentMatch) {\n continue;\n }\n\n const pathSegments = [...segments.slice(0, startIndex), ...segments.slice(startIndex, startIndex + segmentMatch.consumed)];\n const path = pathSegments.length ? `/${pathSegments.join('/')}` : '/';\n const mergedData: Record<string, unknown> = { ...inheritedData, ...(route.data ?? {}) };\n const level: MatchedRouteLevel = { mergedData, path };\n const nextChain = [...chain, level];\n const nextIndex = startIndex + segmentMatch.consumed;\n\n if (route.children?.length) {\n const childMatch = matchRouteConfigChain(route.children, segments, nextIndex, mergedData, nextChain);\n if (childMatch && (!bestMatch || childMatch.length > bestMatch.length)) {\n bestMatch = childMatch;\n }\n }\n\n if (nextIndex === segments.length) {\n if (!bestMatch || nextChain.length > bestMatch.length) {\n bestMatch = nextChain;\n }\n }\n }\n\n return bestMatch;\n}\n\nfunction matchRoutePath(\n routePath: string,\n segments: string[],\n startIndex: number,\n): { consumed: number } | null {\n if (routePath === '**') {\n return { consumed: Math.max(0, segments.length - startIndex) };\n }\n\n const parts = routePath.split('/').filter(Boolean);\n if (!parts.length) {\n return { consumed: 0 };\n }\n\n let consumed = 0;\n for (const part of parts) {\n const segment = segments[startIndex + consumed];\n if (segment === undefined) {\n return null;\n }\n\n if (part.startsWith(':') || part === segment) {\n consumed++;\n continue;\n }\n\n return null;\n }\n\n return { consumed };\n}\n\n//#endregion\n","//#region ---- Tab Title ----\n\nexport const AXP_TAB_BREADCRUMB_JOIN_SEPARATOR = ' - ';\n\nexport interface AXPTabTitleParts {\n prefix: string | null;\n leaf: string;\n}\n\n/** Joins breadcrumb segments for the stored tab title and tooltip full label. */\nexport function axpJoinTabTitleSegments(segments: string[]): string {\n return segments.join(AXP_TAB_BREADCRUMB_JOIN_SEPARATOR);\n}\n\n/** Derives compact tab label parts from structured breadcrumb segments. */\nexport function axpResolveTabTitleParts(\n tab: { titleSegments?: string[] },\n fallbackTitle: string,\n): AXPTabTitleParts {\n const segments = tab.titleSegments;\n if (!segments?.length) {\n return { prefix: null, leaf: fallbackTitle };\n }\n\n if (segments.length === 1) {\n return { prefix: null, leaf: segments[0] };\n }\n\n return {\n prefix: axpJoinTabTitleSegments(segments.slice(0, -1)),\n leaf: segments[segments.length - 1],\n };\n}\n\n//#endregion\n","import { Injectable, signal } from '@angular/core';\nimport type { AXPTabStructuredPreview } from './tab-preview.types';\n\n//#region ---- Tab Preview Service ----\n\n/**\n * In-memory structured previews for tab hover cards and dirty indicators.\n * Populated by active/cached pages via {@link AXPPageLayoutBaseComponent}.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabPreviewService {\n //#region ---- State ----\n\n private readonly previewMap = signal<Readonly<Record<string, AXPTabStructuredPreview>>>({});\n\n readonly previews = this.previewMap.asReadonly();\n\n //#endregion\n\n //#region ---- Public API ----\n\n setPreview(key: string, preview: AXPTabStructuredPreview): void {\n this.previewMap.update((current) => ({\n ...current,\n [key]: preview,\n }));\n }\n\n patchPreview(key: string, patch: Partial<AXPTabStructuredPreview>): void {\n this.previewMap.update((current) => {\n const existing = current[key];\n if (!existing) {\n if (!patch.url) {\n return current;\n }\n\n return {\n ...current,\n [key]: {\n title: patch.title ?? '',\n url: patch.url,\n icon: patch.icon,\n subtitle: patch.subtitle,\n isDirty: patch.isDirty ?? false,\n breadcrumbTrail: patch.breadcrumbTrail ?? [],\n },\n };\n }\n\n return {\n ...current,\n [key]: {\n ...existing,\n ...patch,\n },\n };\n });\n }\n\n getPreview(key: string): AXPTabStructuredPreview | undefined {\n return this.previewMap()[key];\n }\n\n isTabDirty(key: string): boolean {\n return !!this.previewMap()[key]?.isDirty;\n }\n\n clearPreview(key: string): void {\n this.previewMap.update((current) => {\n if (!(key in current)) {\n return current;\n }\n\n const next = { ...current };\n delete next[key];\n return next;\n });\n }\n\n clearPreviews(keys: Iterable<string>): void {\n const keySet = new Set(keys);\n if (!keySet.size) {\n return;\n }\n\n this.previewMap.update((current) => {\n const next: Record<string, AXPTabStructuredPreview> = { ...current };\n let changed = false;\n\n for (const key of keySet) {\n if (key in next) {\n delete next[key];\n changed = true;\n }\n }\n\n return changed ? next : current;\n });\n }\n\n clearAll(): void {\n this.previewMap.set({});\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Tab Route Policy ----\n\nconst EXCLUDED_PATH_PREFIXES = ['/auth', '/error'] as const;\n\nconst EXCLUDED_PATH_PATTERNS: RegExp[] = [\n /^\\/assessment\\/fill\\//i,\n /^\\/forms\\//i,\n];\n\n/**\n * Returns true when the URL represents an in-app page that may appear in the tab bar.\n */\nexport function axpIsTabEligibleUrl(url: string): boolean {\n const pathOnly = url.split('?')[0].split('#')[0].trim();\n if (!pathOnly || pathOnly === '/') {\n return false;\n }\n\n const normalized = pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`;\n\n if (EXCLUDED_PATH_PREFIXES.some((prefix) => normalized.startsWith(prefix))) {\n return false;\n }\n\n if (EXCLUDED_PATH_PATTERNS.some((pattern) => pattern.test(normalized))) {\n return false;\n }\n\n return true;\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { computed, DestroyRef, effect, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, NavigationExtras, Router } from '@angular/router';\nimport { cloneDeep, defaultTo } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPHomePageService } from '../home-page/home-page.service';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { AXPSettingsService } from '../settings/settings.service';\nimport { AXPUnsavedChangesConfirmService } from '../settings/unsaved-changes-confirm.service';\nimport { axpNavigateAppPath } from '../utils/app-path-navigation.util';\nimport { axpFallbackTabTitle, normalizeRouterUrl } from './tab-key.util';\nimport { axpJoinTabTitleSegments } from './tab-title.util';\nimport {\n AXP_HOME_TAB_KEY,\n type AXPNavigationMode,\n type AXPTabCloseConfirm,\n type AXPTabDescriptor,\n type AXPTabSessionState,\n} from './tab-navigation.types';\nimport { AXPTabPreviewService } from './tab-preview.service';\nimport { AXPTabRouteCacheRegistry } from './tab-route-cache.registry';\nimport { axpIsTabEligibleUrl } from './tab-route-policy';\nimport { axpResolveTabKey } from './tab-route-resolver';\n\n//#region ---- Constants ----\n\nconst SESSION_STORAGE_PREFIX = 'AXP_TAB_NAV';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTabNavigationService {\n //#region ---- Services & Dependencies ----\n\n private readonly router = inject(Router);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly deviceService = inject(AXPDeviceService);\n private readonly menuService = inject(AXPMenuService);\n private readonly homePageService = inject(AXPHomePageService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly routeCacheRegistry = inject(AXPTabRouteCacheRegistry);\n private readonly tabPreviewService = inject(AXPTabPreviewService);\n private readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly navigationMode = signal<AXPNavigationMode>('simple');\n private readonly maxOpenTabs = signal(5);\n private readonly tabs = signal<AXPTabDescriptor[]>([]);\n private readonly activeTabKey = signal<string | null>(null);\n private suppressNavigationSync = false;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Effective mode: mobile always uses simple navigation. */\n readonly effectiveMode = computed<AXPNavigationMode>(() => {\n if (this.deviceService.isSmall()) {\n return 'simple';\n }\n return this.navigationMode();\n });\n\n readonly isTabBarVisible = computed(() => this.effectiveMode() === 'tabular' && this.tabs().length > 0);\n\n readonly tabList = this.tabs.asReadonly();\n readonly activeKey = this.activeTabKey.asReadonly();\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n void this.loadSettings();\n this.bindRouterEvents();\n this.bindSettingsChanges();\n this.bindSessionChanges();\n this.bindRouteCacheSync();\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Navigates to a path, opening or activating a tab when tabular mode is active. */\n async navigate(path: string, extras?: NavigationExtras): Promise<boolean> {\n const normalizedPath = normalizeRouterUrl(path);\n\n if (this.effectiveMode() === 'simple' || !axpIsTabEligibleUrl(normalizedPath)) {\n return axpNavigateAppPath(this.router, normalizedPath, extras);\n }\n\n await this.openOrActivateTab(normalizedPath);\n return true;\n }\n\n /** Opens a tab or activates an existing tab with the same key. */\n async openOrActivateTab(url: string, title?: string): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n await axpNavigateAppPath(this.router, url);\n return;\n }\n\n const normalizedUrl = normalizeRouterUrl(url);\n if (!axpIsTabEligibleUrl(normalizedUrl)) {\n await axpNavigateAppPath(this.router, normalizedUrl);\n return;\n }\n\n await this.ensureHomeTab();\n\n if (this.isHomePageUrl(normalizedUrl)) {\n await this.activateTabKey(AXP_HOME_TAB_KEY, normalizedUrl);\n return;\n }\n\n const resolvedKey = axpResolveTabKey(this.router, normalizedUrl);\n const existing = this.findTabForUrl(normalizedUrl);\n\n if (existing) {\n if (existing.key !== resolvedKey) {\n this.migrateTabKey(existing.key, resolvedKey);\n }\n this.updateTabUrl(resolvedKey, normalizedUrl);\n await this.activateTabKey(resolvedKey, normalizedUrl);\n return;\n }\n\n // Navigate first so scoped tab keys (`data.tab`) resolve from the live route snapshot.\n this.suppressNavigationSync = true;\n try {\n await axpNavigateAppPath(this.router, normalizedUrl);\n const key = axpResolveTabKey(this.router);\n const postNavExisting = this.findTabForUrl(normalizedUrl);\n\n if (postNavExisting) {\n if (postNavExisting.key !== key) {\n this.migrateTabKey(postNavExisting.key, key);\n }\n this.updateTabUrl(key, normalizedUrl);\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n return;\n }\n\n this.insertTab(this.createTabDescriptor(normalizedUrl, title, key));\n this.activeTabKey.set(key);\n this.persistSession();\n } finally {\n this.suppressNavigationSync = false;\n }\n }\n\n /**\n * Activates a tab and navigates to its URL. The previously active page is detached and cached by\n * the reuse strategy, so its state is preserved; this tab's cached instance is reattached when\n * available instead of being re-rendered.\n *\n * @param suspendDeactivateGuard When true (default for tab switches), unsaved-changes prompts are\n * skipped so switching tabs keeps a dirty page alive. Closing a tab passes false to keep the prompt.\n */\n async activateTabKey(key: string, urlOverride?: string, suspendDeactivateGuard = true): Promise<void> {\n const tab = this.tabs().find((item) => item.key === key);\n if (!tab) {\n return;\n }\n\n const targetUrl = urlOverride ?? tab.url;\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n\n const navigate = async (): Promise<void> => {\n this.suppressNavigationSync = true;\n try {\n await this.router.navigateByUrl(targetUrl);\n } finally {\n this.suppressNavigationSync = false;\n }\n };\n\n if (suspendDeactivateGuard) {\n await this.routeCacheRegistry.runWithSuspendedDeactivateGuards(navigate);\n return;\n }\n\n await navigate();\n }\n\n /** Closes a tab and navigates to a neighbor when the active tab is closed. */\n async closeTab(key: string): Promise<void> {\n await this.closeTabs([key]);\n }\n\n /** Closes every closable tab except the given key (pinned tabs are kept). */\n async closeOtherTabs(keepKey: string): Promise<void> {\n const keys = this.tabs()\n .filter((tab) => tab.closable && !tab.pinned && tab.key !== keepKey)\n .map((tab) => tab.key);\n await this.closeTabs(keys);\n }\n\n /** Closes all closable tabs (pinned tabs are kept). */\n async closeAllTabs(): Promise<void> {\n const keys = this.tabs()\n .filter((tab) => tab.closable && !tab.pinned)\n .map((tab) => tab.key);\n await this.closeTabs(keys);\n }\n\n /** Toggles whether a tab stays pinned in the strip (home tab is always pinned). */\n toggleTabPinned(key: string): void {\n if (key === AXP_HOME_TAB_KEY) {\n return;\n }\n\n this.tabs.update((items) => {\n const updated = items.map((tab) => {\n if (tab.key !== key) {\n return tab;\n }\n\n const pinned = !tab.pinned;\n return {\n ...tab,\n pinned,\n closable: !pinned,\n };\n });\n\n return this.normalizeTabOrder(updated);\n });\n this.persistSession();\n }\n\n /**\n * Reorders tabs after drag-and-drop. Home stays first; pinned and unpinned tabs cannot cross groups.\n */\n reorderTabs(previousIndex: number, currentIndex: number): void {\n if (previousIndex === currentIndex) {\n return;\n }\n\n const items = this.tabs();\n if (previousIndex < 0 || currentIndex < 0 || previousIndex >= items.length || currentIndex >= items.length) {\n return;\n }\n\n const moving = items[previousIndex];\n if (moving.key === AXP_HOME_TAB_KEY) {\n return;\n }\n\n const lastPinnedIndex = this.getLastPinnedTabIndex(items);\n let targetIndex = currentIndex;\n\n if (moving.pinned) {\n if (targetIndex === 0) {\n return;\n }\n targetIndex = Math.max(1, Math.min(targetIndex, lastPinnedIndex));\n } else {\n const firstUnpinnedIndex = lastPinnedIndex + 1;\n if (firstUnpinnedIndex >= items.length) {\n return;\n }\n targetIndex = Math.max(firstUnpinnedIndex, Math.min(targetIndex, items.length - 1));\n }\n\n if (previousIndex === targetIndex) {\n return;\n }\n\n const next = [...items];\n const [removed] = next.splice(previousIndex, 1);\n next.splice(targetIndex, 0, removed);\n this.tabs.set(next);\n this.persistSession();\n }\n\n /** Updates a tab title from the current page chrome (e.g. breadcrumb trail). */\n syncTabTitle(key: string, titleOrSegments: string | string[]): void {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n if (!this.tabs().some((tab) => tab.key === key)) {\n return;\n }\n\n const segments = Array.isArray(titleOrSegments) ? titleOrSegments : undefined;\n const title = (Array.isArray(titleOrSegments) ? axpJoinTabTitleSegments(titleOrSegments) : titleOrSegments).trim();\n if (!title || this.isGenericHomeTitle(title)) {\n return;\n }\n\n this.updateTabTitle(key, title, segments);\n }\n\n /** Updates a tab icon from the current page chrome or menu metadata. */\n syncTabIcon(key: string, icon: string): void {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n if (!this.tabs().some((tab) => tab.key === key)) {\n return;\n }\n\n const normalized = icon.trim();\n if (!normalized) {\n return;\n }\n\n this.updateTabIcon(key, normalized);\n }\n\n //#endregion\n\n //#region ---- Bulk Tab Close ----\n\n /** Closes multiple tabs in one update; navigates once when the active tab is closed. */\n private async closeTabs(keys: string[]): Promise<void> {\n const uniqueKeys = [...new Set(keys)];\n if (!uniqueKeys.length) {\n return;\n }\n\n const closableKeySet = new Set(\n uniqueKeys.filter((key) => {\n const tab = this.tabs().find((item) => item.key === key);\n return !!tab?.closable && !tab.pinned;\n }),\n );\n\n if (!closableKeySet.size) {\n return;\n }\n\n const activeKey = this.activeTabKey();\n const backgroundKeys = [...closableKeySet].filter((key) => key !== activeKey);\n\n for (const key of backgroundKeys) {\n if (!(await this.confirmBackgroundTabClose(key))) {\n closableKeySet.delete(key);\n }\n }\n\n if (!closableKeySet.size) {\n return;\n }\n\n const currentTabs = this.tabs();\n const wasActiveClosed = !!activeKey && closableKeySet.has(activeKey);\n const closedActiveIndex = wasActiveClosed ? currentTabs.findIndex((item) => item.key === activeKey) : -1;\n const nextTabs = currentTabs.filter((item) => !closableKeySet.has(item.key));\n\n if (wasActiveClosed) {\n const navigated = await this.navigateAwayBeforeClosingActiveTab(closedActiveIndex, nextTabs);\n if (!navigated) {\n return;\n }\n }\n\n this.tabs.set(nextTabs);\n this.tabPreviewService.clearPreviews(closableKeySet);\n this.persistSession();\n }\n\n //#endregion\n\n //#region ---- Tab Close Helpers ----\n\n /**\n * Prompts before closing a cached background tab. Uses the page's {@link AXPTabCloseConfirm}\n * hook when available, otherwise falls back to the tab preview dirty flag.\n */\n private async confirmBackgroundTabClose(key: string): Promise<boolean> {\n const instance = this.routeCacheRegistry.getComponentInstance<AXPTabCloseConfirm>(key);\n if (instance && typeof instance.onBeforeTabClose === 'function') {\n return instance.onBeforeTabClose();\n }\n\n return this.unsavedChangesConfirm.confirmIfDirty(this.tabPreviewService.isTabDirty(key), {\n approveLeaveOnConfirm: false,\n });\n }\n\n //#endregion\n\n //#region ---- Tab Close Navigation ----\n\n /**\n * Navigates away from the active tab before it is removed so canDeactivate runs while the tab is still visible.\n * Returns false when navigation was cancelled (e.g. unsaved-changes confirmation declined).\n */\n private async navigateAwayBeforeClosingActiveTab(\n closedActiveIndex: number,\n remainingTabs: AXPTabDescriptor[],\n ): Promise<boolean> {\n const fallbackIndex = this.resolveFallbackTabIndex(closedActiveIndex, remainingTabs);\n const fallback = fallbackIndex >= 0 ? remainingTabs[fallbackIndex] : undefined;\n\n let targetKey: string;\n let targetUrl: string;\n\n if (fallback) {\n targetKey = fallback.key;\n targetUrl = fallback.url;\n } else {\n await this.ensureHomeTab();\n const home = this.tabs().find((item) => item.key === AXP_HOME_TAB_KEY);\n if (!home) {\n return false;\n }\n targetKey = home.key;\n targetUrl = home.url;\n }\n\n this.suppressNavigationSync = true;\n try {\n const navigated = await this.router.navigateByUrl(targetUrl);\n if (!navigated) {\n return false;\n }\n } finally {\n this.suppressNavigationSync = false;\n }\n\n this.activeTabKey.set(targetKey);\n this.touchTab(targetKey);\n return true;\n }\n\n /** Prefers the tab to the right after removal, then the tab to the left (browser-like). */\n private resolveFallbackTabIndex(closedIndex: number, remainingTabs: AXPTabDescriptor[]): number {\n if (!remainingTabs.length) {\n return -1;\n }\n\n if (closedIndex < remainingTabs.length) {\n return closedIndex;\n }\n\n return closedIndex - 1;\n }\n\n //#endregion\n\n //#region ---- Route Cache Sync ----\n\n /**\n * Keeps the route cache registry aligned with the current navigation mode and the set of open\n * tabs. Cached page instances for closed/evicted tabs are destroyed by the registry.\n */\n private bindRouteCacheSync(): void {\n effect(() => {\n this.routeCacheRegistry.setEnabled(this.effectiveMode() === 'tabular');\n this.routeCacheRegistry.syncOpenKeys(\n this.tabs().map((tab) => tab.key),\n this.tabs().map((tab) => tab.url),\n );\n });\n }\n\n //#endregion\n\n //#region ---- Router Sync ----\n\n private bindRouterEvents(): void {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((event: NavigationEnd) => {\n void this.handleNavigationEnd(event.urlAfterRedirects);\n });\n }\n\n private async handleNavigationEnd(url: string): Promise<void> {\n if (this.suppressNavigationSync) {\n return;\n }\n\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n const normalizedUrl = normalizeRouterUrl(url);\n if (!axpIsTabEligibleUrl(normalizedUrl)) {\n return;\n }\n\n await this.ensureHomeTab();\n\n if (this.isHomePageUrl(normalizedUrl)) {\n this.activateHomeTabForUrl(normalizedUrl);\n return;\n }\n\n const key = axpResolveTabKey(this.router, normalizedUrl);\n const existing = this.findTabForUrl(normalizedUrl);\n\n if (existing) {\n if (existing.key !== key) {\n this.migrateTabKey(existing.key, key);\n }\n this.updateTabUrl(key, normalizedUrl);\n this.touchTab(key);\n this.activeTabKey.set(key);\n this.persistSession();\n return;\n }\n\n this.insertTab(this.createTabDescriptor(normalizedUrl, undefined, key));\n this.activeTabKey.set(key);\n this.persistSession();\n }\n\n //#endregion\n\n //#region ---- Settings ----\n\n private async loadSettings(): Promise<void> {\n const [mode, maxTabs] = await Promise.all([\n this.settingsService.get<AXPNavigationMode>(AXPCommonSettings.NavigationMode),\n this.settingsService.get<number>(AXPCommonSettings.MaxOpenTabs),\n ]);\n\n this.navigationMode.set(mode === 'tabular' ? 'tabular' : 'simple');\n this.maxOpenTabs.set(this.normalizeMaxTabs(maxTabs));\n await this.restoreSessionIfNeeded();\n }\n\n private bindSettingsChanges(): void {\n this.settingsService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.includes(AXPCommonSettings.NavigationMode)) {\n const raw = event.values[AXPCommonSettings.NavigationMode] as AXPNavigationMode;\n const newMode: AXPNavigationMode = raw === 'tabular' ? 'tabular' : 'simple';\n if (newMode !== this.navigationMode()) {\n this.navigationMode.set(newMode);\n if (this.effectiveMode() === 'simple') {\n this.clearSession();\n } else {\n void this.ensureHomeTab().then(() => this.syncCurrentRouteAsTab());\n }\n }\n }\n\n if (event.keys.includes(AXPCommonSettings.MaxOpenTabs)) {\n this.maxOpenTabs.set(this.normalizeMaxTabs(event.values[AXPCommonSettings.MaxOpenTabs] as number));\n this.enforceMaxTabs();\n this.persistSession();\n }\n });\n }\n\n private bindSessionChanges(): void {\n this.sessionService.user$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.restoreSessionIfNeeded();\n });\n }\n\n //#endregion\n\n //#region ---- Tab Management ----\n\n private async ensureHomeTab(): Promise<void> {\n const homePath = this.resolveHomePath();\n if (!homePath) {\n return;\n }\n\n const homeUrl = normalizeRouterUrl(homePath);\n const homeKey = AXP_HOME_TAB_KEY;\n const existing = this.tabs().find((tab) => tab.key === homeKey);\n\n if (existing) {\n this.tabs.update((items) =>\n items.map((tab) =>\n tab.key === homeKey\n ? {\n ...tab,\n url: homeUrl,\n title: this.isGenericHomeTitle(tab.title) ? this.resolveHomeTitle() : tab.title,\n icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n }\n : tab,\n ),\n );\n return;\n }\n\n const now = Date.now();\n const homeTab: AXPTabDescriptor = {\n key: homeKey,\n url: homeUrl,\n title: this.resolveHomeTitle(),\n icon: this.resolveTabIcon(homeUrl, 'fa-light fa-house'),\n pinned: true,\n closable: false,\n openedAt: now,\n lastActivatedAt: now,\n };\n\n this.tabs.update((items) => this.normalizeTabOrder([homeTab, ...items.filter((tab) => tab.key !== homeKey)]));\n }\n\n private insertTab(tab: AXPTabDescriptor): void {\n if (this.isHomePageUrl(tab.url)) {\n this.activateHomeTabForUrl(tab.url);\n return;\n }\n\n this.tabs.update((items) => {\n const withoutDuplicate = items.filter((item) => {\n if (item.key === tab.key) {\n return false;\n }\n\n return axpResolveTabKey(this.router, item.url) !== tab.key;\n });\n return this.normalizeTabOrder([...withoutDuplicate, tab]);\n });\n this.enforceMaxTabs();\n }\n\n /** Home first; preserves session order for the remaining tabs. */\n private ensureHomeTabFirst(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n const others = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY);\n return home ? [home, ...others] : items;\n }\n\n private getLastPinnedTabIndex(items: ReadonlyArray<AXPTabDescriptor>): number {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index]?.pinned) {\n return index;\n }\n }\n\n return 0;\n }\n\n /** Home first, then other pinned tabs, then unpinned tabs (stable by openedAt within each group). */\n private normalizeTabOrder(items: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const home = items.find((tab) => tab.key === AXP_HOME_TAB_KEY);\n const pinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && tab.pinned);\n const unpinned = items.filter((tab) => tab.key !== AXP_HOME_TAB_KEY && !tab.pinned);\n const byOpenedAt = (a: AXPTabDescriptor, b: AXPTabDescriptor) => a.openedAt - b.openedAt;\n\n return [...(home ? [home] : []), ...pinned.sort(byOpenedAt), ...unpinned.sort(byOpenedAt)];\n }\n\n private enforceMaxTabs(): void {\n const limit = this.maxOpenTabs();\n let current = this.tabs();\n\n while (current.length > limit) {\n const evictionCandidate = [...current]\n .filter((tab) => tab.closable && !tab.pinned && tab.key !== this.activeTabKey())\n .filter((tab) => !this.tabPreviewService.isTabDirty(tab.key))\n .sort((a, b) => a.lastActivatedAt - b.lastActivatedAt)[0];\n\n if (!evictionCandidate) {\n break;\n }\n\n current = current.filter((tab) => tab.key !== evictionCandidate.key);\n }\n\n this.tabs.set(current);\n }\n\n private createTabDescriptor(url: string, title?: string, keyOverride?: string): AXPTabDescriptor {\n const now = Date.now();\n const key = keyOverride ?? axpResolveTabKey(this.router, url);\n return {\n key,\n url,\n title: title ?? this.resolveTabTitle(url),\n icon: this.resolveTabIcon(url),\n pinned: false,\n closable: true,\n openedAt: now,\n lastActivatedAt: now,\n };\n }\n\n /** Finds a tab by scoped key or legacy full-path key for the same URL. */\n private findTabForUrl(url: string): AXPTabDescriptor | undefined {\n if (this.isHomePageUrl(url)) {\n return this.tabs().find((tab) => tab.key === AXP_HOME_TAB_KEY);\n }\n\n const resolvedKey = axpResolveTabKey(this.router, url);\n return this.tabs().find(\n (tab) =>\n tab.key !== AXP_HOME_TAB_KEY &&\n (tab.key === resolvedKey || axpResolveTabKey(this.router, tab.url) === resolvedKey),\n );\n }\n\n /** True when the URL is the configured application home page (e.g. dashboard). */\n private isHomePageUrl(url: string): boolean {\n const homeUrl = this.resolveHomeUrl();\n if (!homeUrl) {\n return false;\n }\n\n return normalizeRouterUrl(url) === homeUrl;\n }\n\n private resolveHomeUrl(): string | null {\n const homePath = this.resolveHomePath();\n if (!homePath) {\n return null;\n }\n\n return normalizeRouterUrl(homePath);\n }\n\n /** Activates the pinned home tab for a home-page URL instead of opening a duplicate tab. */\n private activateHomeTabForUrl(url: string): void {\n this.updateTabUrl(AXP_HOME_TAB_KEY, normalizeRouterUrl(url));\n this.touchTab(AXP_HOME_TAB_KEY);\n this.activeTabKey.set(AXP_HOME_TAB_KEY);\n this.persistSession();\n }\n\n /** Drops non-home tabs that duplicate the home page URL after session restore. */\n private removeDuplicateHomeUrlTabs(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const homeUrl = this.resolveHomeUrl();\n if (!homeUrl) {\n return tabs;\n }\n\n return tabs.filter((tab) => tab.key === AXP_HOME_TAB_KEY || normalizeRouterUrl(tab.url) !== homeUrl);\n }\n\n /** Rewrites a tab key when route-scope resolution changes (e.g. profile sub-routes). */\n private migrateTabKey(fromKey: string, toKey: string): void {\n if (fromKey === toKey) {\n return;\n }\n\n if (this.activeTabKey() === fromKey) {\n this.activeTabKey.set(toKey);\n }\n\n this.tabs.update((items) => {\n const tab = items.find((item) => item.key === fromKey);\n if (!tab) {\n return items;\n }\n\n const without = items.filter((item) => item.key !== fromKey && item.key !== toKey);\n return this.normalizeTabOrder([...without, { ...tab, key: toKey }]);\n });\n }\n\n /** Collapses restored tabs that share the same scoped route key. */\n private normalizeRestoredTabKeys(tabs: AXPTabDescriptor[]): AXPTabDescriptor[] {\n const byResolvedKey = new Map<string, AXPTabDescriptor>();\n\n for (const tab of tabs) {\n if (tab.key === AXP_HOME_TAB_KEY) {\n byResolvedKey.set(AXP_HOME_TAB_KEY, tab);\n continue;\n }\n\n const resolvedKey = axpResolveTabKey(this.router, tab.url);\n const normalized = { ...tab, key: resolvedKey };\n const existing = byResolvedKey.get(resolvedKey);\n\n if (!existing || normalized.lastActivatedAt > existing.lastActivatedAt) {\n byResolvedKey.set(resolvedKey, normalized);\n }\n }\n\n return [...byResolvedKey.values()];\n }\n\n private updateTabUrl(key: string, url: string): void {\n this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, url } : tab)));\n }\n\n private updateTabTitle(key: string, title: string, titleSegments?: string[]): void {\n this.tabs.update((items) =>\n items.map((tab) => {\n if (tab.key !== key) {\n return tab;\n }\n\n const segmentsUnchanged =\n tab.titleSegments === titleSegments ||\n (tab.titleSegments?.length === titleSegments?.length &&\n tab.titleSegments?.every((segment, index) => segment === titleSegments?.[index]));\n\n if (tab.title === title && segmentsUnchanged) {\n return tab;\n }\n\n return { ...tab, title, titleSegments };\n }),\n );\n this.persistSession();\n }\n\n private updateTabIcon(key: string, icon: string): void {\n this.tabs.update((items) => items.map((tab) => (tab.key === key && tab.icon !== icon ? { ...tab, icon } : tab)));\n this.persistSession();\n }\n\n private touchTab(key: string): void {\n const now = Date.now();\n this.tabs.update((items) => items.map((tab) => (tab.key === key ? { ...tab, lastActivatedAt: now } : tab)));\n }\n\n private resolveTabTitle(url: string, fallback?: string): string {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (match?.item.text) {\n return match.item.text;\n }\n return fallback ?? axpFallbackTabTitle(url);\n }\n\n private resolveTabIcon(url: string, fallback = 'fa-light fa-window'): string {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (match?.item.icon?.trim()) {\n return match.item.icon.trim();\n }\n return fallback;\n }\n\n private resolveHomePath(): string {\n const current = this.homePageService.getCurrent();\n return current.path ? normalizeRouterUrl(current.path) : '';\n }\n\n private resolveHomeTitle(): string {\n const current = this.homePageService.getCurrent();\n return current.title || 'Home';\n }\n\n private isGenericHomeTitle(title: string): boolean {\n if (title === '@general:terms.interface.navigation.home') {\n return true;\n }\n\n const homeTitle = this.resolveHomeTitle().trim();\n return title === homeTitle;\n }\n\n private async syncCurrentRouteAsTab(): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n await this.ensureHomeTab();\n await this.handleNavigationEnd(this.router.url);\n }\n\n private normalizeMaxTabs(value: unknown): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) {\n return 5;\n }\n return Math.min(20, Math.max(2, Math.round(parsed)));\n }\n\n //#endregion\n\n //#region ---- Session Persistence ----\n\n private sessionStorageKey(): string | null {\n const userId = this.sessionService.user?.id;\n if (!userId) {\n return null;\n }\n return `${SESSION_STORAGE_PREFIX}(${userId})`;\n }\n\n private persistSession(): void {\n const key = this.sessionStorageKey();\n if (!key || this.effectiveMode() === 'simple') {\n return;\n }\n\n const payload: AXPTabSessionState = {\n tabs: cloneDeep(this.tabs()),\n activeTabKey: this.activeTabKey(),\n };\n sessionStorage.setItem(key, JSON.stringify(payload));\n }\n\n private clearSession(): void {\n const key = this.sessionStorageKey();\n if (key) {\n sessionStorage.removeItem(key);\n }\n this.tabs.set([]);\n this.activeTabKey.set(null);\n this.tabPreviewService.clearAll();\n }\n\n private async restoreSessionIfNeeded(): Promise<void> {\n if (this.effectiveMode() === 'simple') {\n return;\n }\n\n const storageKey = this.sessionStorageKey();\n if (!storageKey) {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n return;\n }\n\n const raw = sessionStorage.getItem(storageKey);\n if (!raw) {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n return;\n }\n\n try {\n const parsed = JSON.parse(raw) as AXPTabSessionState;\n const restoredTabs = this.removeDuplicateHomeUrlTabs(\n this.normalizeRestoredTabKeys(defaultTo(parsed.tabs, []).filter((tab) => tab?.key && tab?.url)),\n );\n this.tabs.set(this.ensureHomeTabFirst(restoredTabs));\n await this.ensureHomeTab();\n\n const activeKey = parsed.activeTabKey ?? this.tabs()[this.tabs().length - 1]?.key ?? AXP_HOME_TAB_KEY;\n this.activeTabKey.set(activeKey);\n\n const activeTab = this.tabs().find((tab) => tab.key === activeKey);\n if (activeTab && normalizeRouterUrl(this.router.url) !== normalizeRouterUrl(activeTab.url)) {\n this.suppressNavigationSync = true;\n try {\n await this.router.navigateByUrl(activeTab.url);\n } finally {\n this.suppressNavigationSync = false;\n }\n }\n } catch {\n await this.ensureHomeTab();\n await this.syncCurrentRouteAsTab();\n }\n }\n\n //#endregion\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { DestroyRef, Injectable, effect, inject, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { axpFindMenuItemByRoute } from '../layout/menu/menu-route-matcher';\nimport { AXPMenuService } from '../layout/menu/menu.service';\nimport { axpResolveTabKey } from '../tab-navigation/tab-route-resolver';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\nimport type { AXPNavigationMode } from '../tab-navigation/tab-navigation.types';\n\ninterface AXPSimpleModePageTitleState {\n routeKey: string;\n title: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPBrowserTitleService {\n //#region ---- Services & Dependencies ----\n\n private readonly document = inject(DOCUMENT);\n private readonly translateService = inject(AXTranslationService);\n private readonly tabNavigation = inject(AXPTabNavigationService);\n private readonly menuService = inject(AXPMenuService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly simpleModePageTitle = signal<AXPSimpleModePageTitleState | null>(null);\n private readonly localeRevision = signal(0);\n private readonly sessionRevision = signal(0);\n private readonly routeRevision = signal(0);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.translateService.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.localeRevision.update((value) => value + 1);\n });\n\n this.sessionService.application$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.sessionRevision.update((value) => value + 1);\n });\n\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.routeRevision.update((value) => value + 1);\n });\n\n effect(() => {\n this.localeRevision();\n this.sessionRevision();\n this.routeRevision();\n const mode = this.tabNavigation.effectiveMode();\n const simpleModePageTitle = this.simpleModePageTitle();\n\n if (mode === 'tabular') {\n const activeKey = this.tabNavigation.activeKey();\n const tabs = this.tabNavigation.tabList();\n untracked(() => {\n void this.syncDocumentTitle(mode, activeKey, tabs, simpleModePageTitle);\n });\n return;\n }\n\n untracked(() => {\n void this.syncDocumentTitle(mode, null, [], simpleModePageTitle);\n });\n });\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Publishes the resolved page title for the given route key (ignored in tabular mode). */\n setSimpleModePageTitle(title: string | null, routeKey: string): void {\n if (!routeKey.trim()) {\n return;\n }\n\n if (!title?.trim()) {\n const current = this.simpleModePageTitle();\n if (current?.routeKey === routeKey) {\n this.simpleModePageTitle.set(null);\n }\n return;\n }\n\n this.simpleModePageTitle.set({\n routeKey: routeKey.trim(),\n title: title.trim(),\n });\n }\n\n //#endregion\n\n //#region ---- Title Sync ----\n\n private async syncDocumentTitle(\n mode: AXPNavigationMode,\n activeTabKey: string | null,\n tabs: ReturnType<AXPTabNavigationService['tabList']>,\n simpleModePageTitle: AXPSimpleModePageTitleState | null,\n ): Promise<void> {\n const routeTitle =\n mode === 'tabular'\n ? await this.resolveTabularRouteTitle(activeTabKey, tabs)\n : await this.resolveSimpleRouteTitle(simpleModePageTitle);\n\n const appTitle = await this.resolveApplicationTitle();\n const nextTitle = this.buildDocumentTitle(routeTitle, appTitle);\n\n if (this.document?.title !== nextTitle) {\n this.document.title = nextTitle;\n }\n }\n\n private async resolveTabularRouteTitle(\n activeTabKey: string | null,\n tabs: ReturnType<AXPTabNavigationService['tabList']>,\n ): Promise<string | null> {\n if (!activeTabKey) {\n return null;\n }\n\n const tab = tabs.find((item) => item.key === activeTabKey);\n if (!tab?.title?.trim()) {\n return null;\n }\n\n return this.resolveLocalizedText(tab.title);\n }\n\n private async resolveSimpleRouteTitle(\n simpleModePageTitle: AXPSimpleModePageTitleState | null,\n ): Promise<string | null> {\n const currentRouteKey = axpResolveTabKey(this.router);\n if (simpleModePageTitle?.routeKey === currentRouteKey && simpleModePageTitle.title) {\n return simpleModePageTitle.title;\n }\n\n return this.resolveMenuRouteTitle(this.router.url);\n }\n\n private async resolveMenuRouteTitle(url: string): Promise<string | null> {\n const match = axpFindMenuItemByRoute(this.menuService.items(), url);\n if (!match?.item.text?.trim()) {\n return null;\n }\n\n return this.resolveLocalizedText(match.item.text);\n }\n\n private async resolveApplicationTitle(): Promise<string> {\n const application = this.sessionService.application;\n const raw = application?.title?.trim() || application?.name?.trim() || '';\n if (!raw) {\n return '';\n }\n\n return (await this.resolveLocalizedText(raw)) ?? raw;\n }\n\n private async resolveLocalizedText(value: string): Promise<string | null> {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n private buildDocumentTitle(routeTitle: string | null, appTitle: string): string {\n const route = routeTitle?.trim();\n const app = appTitle.trim();\n\n if (route && app) {\n return `${route} | ${app}`;\n }\n\n return route || app || 'ACoreX';\n }\n\n //#endregion\n}\n","export abstract class AXPDataProvider {\n abstract insertOne(entity: any, entityItem: any): Promise<any>;\n abstract insertMany(entity: any, entityList: any): Promise<any>;\n abstract getOne(entity: any, id: string): Promise<any>;\n abstract getMany(entity: any, params?: any): Promise<any>;\n abstract updateOne(entity: any, id?: string, data?: { [key: string]: any }): Promise<any>;\n abstract deleteOne(entity: any, id: string): Promise<any>;\n abstract getFirst(entity: any): Promise<any>;\n abstract uploadFile(file: File, title: string, customUrl?: string): Promise<string>;\n abstract updateFile(id:string,file: File, title: string, customUrl?: string): Promise<string>;\n abstract uploadMultipleFiles(files: File[], title: string): Promise<string[]>;\n abstract viewFile(id: string, name: string): Promise<Blob>;\n abstract downloadFile(id: string, name: string): Promise<Blob>;\n}\n","import { AXDataSourceOperator } from '@acorex/cdk/common';\nimport { Injectable } from '@angular/core';\n\nexport abstract class AXPCustomOperatorService {\n abstract getCustomOperators(): { [key: string]: AXDataSourceOperator };\n}\n\n@Injectable()\nexport class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {\n getCustomOperators(): { [key: string]: AXDataSourceOperator } {\n return {};\n }\n}\n","import { AXDataSourceFilterOption, AXDataSourceOperator } from '@acorex/cdk/common';\nimport { inject, Injectable } from '@angular/core';\nimport { ALL_DEFAULT_OPERATORS } from '../app';\nimport { AXPCustomOperatorService } from './operators.service';\n\nexport abstract class AXPFilterOperatorMiddlewareService {\n /**\n * Middleware to transform selected filters into corresponding operators.\n * @param filters Array of selected filters (e.g., user input).\n * @param customOperators Optional custom operators map to override default operators.\n * @returns Transformed filters based on custom or default operators.\n */\n abstract transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[];\n\n /**\n * Helper method to transform a single filter. This handles recursion for nested filters.\n * @param filter A single filter object.\n * @returns Transformed filter.\n */\n abstract transformFilter(filters: AXDataSourceFilterOption): AXDataSourceFilterOption;\n\n abstract getOperator(key: string): AXDataSourceOperator;\n}\n\n@Injectable()\nexport class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {\n private customOperatorService = inject(AXPCustomOperatorService);\n\n private operators: { [key: string]: AXDataSourceOperator } = {\n ...this.getDefaultOperators(),\n ...this.customOperatorService.getCustomOperators(),\n };\n\n transformFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters.map((filter) => this.transformFilter(filter));\n }\n\n transformFilter(filter: AXDataSourceFilterOption): AXDataSourceFilterOption {\n const { operator, value, filters, field } = filter;\n // Find the operator (either default or custom)\n const filterOperator = this.operators[operator?.type ?? ''] || null;\n\n // Start by transforming the filter itself\n const transformedFilter: AXDataSourceFilterOption = {\n ...filter, // Keep the original filter structure\n operator: filterOperator ? filterOperator : operator, // Add operator name\n };\n\n // If the filter contains nested filters, recursively transform them\n if (filters && filters.length > 0) {\n transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters\n }\n\n return transformedFilter;\n }\n\n getOperator(key: string) {\n return this.operators[key];\n }\n\n // Helper function to return the default operators\n private getDefaultOperators(): { [key: string]: AXDataSourceOperator } {\n return ALL_DEFAULT_OPERATORS.reduce(\n (acc, operator) => {\n acc[operator.name] = {\n type: operator.name as any,\n };\n return acc;\n },\n {} as { [key: string]: AXDataSourceOperator },\n );\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandler } from \"./error-handler.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPErrorHandlerRegistryService {\n private errorHandlers: AXPErrorHandler[] = [];\n\n constructor(private injector: Injector) {\n }\n\n register(...plugins: (new () => AXPErrorHandler)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const handler = childInjector.get(t);\n if (handler) {\n this.errorHandlers.push(handler);\n }\n })\n }\n\n\n public get handlers(): AXPErrorHandler[] {\n return this.errorHandlers;\n }\n}","import { ErrorHandler, Injectable, Injector } from \"@angular/core\";\nimport { AXPErrorHandlerRegistryService } from \"./error-handler-registry.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class AXPGlobalErrorHandler extends ErrorHandler {\n\n\n\n constructor(private injector: Injector, private registry: AXPErrorHandlerRegistryService) {\n super()\n }\n\n override handleError(error: Error) {\n const handleErrorRecursively = (index: number, error: any) => {\n const errorHandlers = this.registry.handlers;\n if (index < errorHandlers.length) {\n errorHandlers[index].handleError(error, (err) => {\n handleErrorRecursively(index + 1, err);\n });\n } else {\n super.handleError(error); // Fallback to default handler\n }\n };\n if (error.message?.startsWith('NG0100')) {\n //ignore it\n return\n }\n handleErrorRecursively(0, error);\n }\n}\n","/** Thrown when a requested platform resource cannot be resolved. */\nexport class AXPNotFoundError extends Error {\n constructor(message = 'Resource not found') {\n super(message);\n this.name = 'AXPNotFoundError';\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { RedirectCommand, Route, Router, ROUTES } from '@angular/router';\n\n/** Canonical route path for the platform 404 page. */\nexport const AXP_NOT_FOUND_ROUTE = '/error/404';\n\n/**\n * Catch-all route that redirects unknown URLs to the platform 404 page.\n * Register this as the **last** route source in the application (after all app and module routes).\n */\nexport const AXP_NOT_FOUND_CATCH_ALL_ROUTE: Route = {\n path: '**',\n redirectTo: AXP_NOT_FOUND_ROUTE,\n};\n\n/**\n * Registers the platform catch-all 404 route.\n * Must be the last `ROUTES` provider in `app.config` so custom app routes are matched first.\n */\nexport function AXPNotFoundCatchAllRoute(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: ROUTES,\n multi: true,\n useValue: [AXP_NOT_FOUND_CATCH_ALL_ROUTE],\n },\n ]);\n}\n\n/**\n * Returns true when an entity byKey query did not resolve a record.\n */\nexport function axpIsEntityRecordNotFound(data: unknown): boolean {\n return data == null;\n}\n\n/**\n * Creates an Angular redirect command to the platform 404 page.\n */\nexport function axpRedirectToNotFound(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_NOT_FOUND_ROUTE));\n}\n","import { inject } from '@angular/core';\nimport { RedirectCommand, Router } from '@angular/router';\n\n/** Canonical route path for the platform 401 page. */\nexport const AXP_UNAUTHORIZED_ROUTE = '/error/401';\n\n/**\n * Creates an Angular redirect command to the platform 401 page.\n */\nexport function axpRedirectToUnauthorized(router: Router = inject(Router)): RedirectCommand {\n return new RedirectCommand(router.parseUrl(AXP_UNAUTHORIZED_ROUTE));\n}\n","//#region ---- Imports ----\n\nimport { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXTranslationService, translateSync } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil, isObject, isString } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPTranslateFormatterOptions extends AXFormatOptions {\n scope?: string;\n lang?: string;\n params?: Record<string, unknown>;\n}\n\n//#endregion\n\n/**\n * Platform formatter for display text: resolves ML objects, i18n keys (`@scope:key`), and primitives.\n * Register via {@link AXPCommonModule} (auto) or `AXFormatModule.forRoot({ formatters: [AXPTranslateFormatter] })`.\n */\n@Injectable()\nexport class AXPTranslateFormatter implements AXFormatter {\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXFormatter ----\n\n get name(): string {\n return 'translate';\n }\n\n format(value: unknown, options?: AXPTranslateFormatterOptions | string): string {\n if (isNil(value) || value === '') {\n return '';\n }\n\n if (isObject(value) && !Array.isArray(value) && !(value instanceof Date)) {\n const resolved = this.translationService.resolve(value as never);\n return resolved?.trim() ?? '';\n }\n\n if (isString(value)) {\n const text = value.trim();\n if (!text) {\n return '';\n }\n if (text.startsWith('@')) {\n const translateOptions = typeof options === 'object' ? options : undefined;\n const translated = translateSync(text, translateOptions);\n return translated?.trim() ?? text;\n }\n return text;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n return String(value).trim();\n }\n\n //#endregion\n}\n","import { Injectable } from \"@angular/core\";\nimport { AXPFileManyStorageInfo, AXPFileStorageCreateRequest, AXPFileStorageFindRequest, AXPFileStorageInfo, AXPFileStorageUpdateRequest } from '@acorex/platform/contracts';\n\n@Injectable()\nexport abstract class AXPFileStorageService {\n\n abstract save(request: AXPFileStorageCreateRequest): Promise<AXPFileStorageInfo>;\n\n abstract update(request: AXPFileStorageUpdateRequest): Promise<AXPFileStorageInfo>;\n\n abstract find(request: AXPFileStorageFindRequest): Promise<AXPFileStorageInfo[]>;\n\n abstract findMany(ids : string[]): Promise<AXPFileManyStorageInfo[]>;\n\n abstract getInfo(fileId: string): Promise<AXPFileStorageInfo>;\n\n abstract remove(fileId: string): Promise<void>;\n\n abstract commit(fileId: string): Promise<void>;\n\n abstract markForDeletion(fileId: string): Promise<void>;\n}\n","/** Trace namespace for file-storage expression evaluator scope diagnostics. */\nexport const FILE_STORAGE_TRACE_NS = 'file-storage';\n","import {\n AXPDebugService,\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n} from '@acorex/platform/core';\nimport { inject } from '@angular/core';\nimport { FILE_STORAGE_TRACE_NS } from './file-storage-trace.constants';\nimport { AXPFileStorageService } from './file-storage.service';\n\nexport class AXPFileStorageEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly fileStorageService = inject(AXPFileStorageService);\n private readonly debug = inject(AXPDebugService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n this.debug.trace(FILE_STORAGE_TRACE_NS, 'expression-evaluator-scope', 'Scope provider registered');\n\n context.addScope('fileStorage', {\n getFiles: async (entityType: string, entityId: string) => {\n this.debug.trace(FILE_STORAGE_TRACE_NS, 'getFiles', 'Loading files for entity', () => ({\n entityType,\n entityId,\n }));\n\n const filesFromService = await this.fileStorageService.find({\n category: '',\n refId: entityId,\n refType: entityType,\n });\n const mappedFiles = filesFromService?.map((file) => ({\n id: file.id ?? '',\n name: file.name,\n size: file.size,\n status: 'remote',\n source: {\n kind: 'fileId',\n value: file.fileId,\n },\n }));\n\n return mappedFiles;\n },\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPKeyboardShortcutHelpEntry } from '@acorex/platform/contracts';\nimport { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPKeyboardShortcutRegistry, chordToKbdItemKeys } from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, ViewEncapsulation } from '@angular/core';\n\n//#endregion\n\ninterface AXPKeyboardShortcutHelpGroup {\n label: string;\n items: AXPKeyboardShortcutHelpEntry[];\n}\n\n@Component({\n selector: 'axp-keyboard-shortcuts-help',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AsyncPipe, AXKBDComponent, AXKBDItemComponent, AXTranslationModule],\n styleUrls: ['./keyboard-shortcuts-help.component.scss'],\n template: `\n <div class=\"axp-keyboard-shortcuts-help\">\n <div class=\"__body\">\n @if (groups().length === 0) {\n <p class=\"__empty\">\n {{ '@general:keyboard-shortcuts.no-shortcuts' | translate | async }}\n </p>\n } @else {\n @for (group of groups(); track group.label) {\n <section class=\"__section\">\n <h3 class=\"__heading\">\n {{ group.label | translate | async }}\n </h3>\n <div class=\"__list\">\n @for (item of group.items; track item.registrationId + item.bindingTitle) {\n <div class=\"__row\">\n <span class=\"__action\">\n {{ item.bindingTitle | translate | async }}\n </span>\n <div class=\"__keys\">\n @for (chord of item.displayChords; track chord; let last = $last) {\n <ax-kbd look=\"solid\">\n <ax-kbd-item [keys]=\"chordToKbdKeys(chord)\" join=\"split\" look=\"solid\"></ax-kbd-item>\n </ax-kbd>\n @if (!last) {\n <span class=\"__or\">\n {{ '@general:keyboard-shortcuts.or' | translate | async }}\n </span>\n }\n }\n </div>\n </div>\n }\n </div>\n </section>\n }\n }\n </div>\n </div>\n `,\n})\nexport class AXPKeyboardShortcutsHelpComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly groups = computed((): AXPKeyboardShortcutHelpGroup[] => {\n const grouped = new Map<string, AXPKeyboardShortcutHelpEntry[]>();\n\n for (const entry of this.shortcutRegistry.helpEntries()) {\n const label = entry.group ?? entry.scope ?? '@general:keyboard-shortcuts.groups.general';\n const bucket = grouped.get(label) ?? [];\n bucket.push(entry);\n grouped.set(label, bucket);\n }\n\n return [...grouped.entries()].map(([label, items]) => ({ label, items }));\n });\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n protected chordToKbdKeys(chord: string): string[] {\n return chordToKbdItemKeys(chord, { skipDirectionResolve: true });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { DOCUMENT } from '@angular/common';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPKeyboardShortcutRegistry, hasForegroundOverlayLayer } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPKeyboardShortcutsHelpService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly document = inject(DOCUMENT);\n\n //#endregion\n\n //#region ---- State ----\n\n /** In-flight help popup session (open until the popup closes). */\n private activeShow: Promise<void> | null = null;\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n this.shortcutRegistry.setHelpDialogHandler(() => this.show());\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Opens the keyboard shortcuts help popup, or no-ops when it is already open.\n */\n show(): Promise<void> {\n if (this.activeShow) {\n return this.activeShow;\n }\n\n if (typeof this.document !== 'undefined' && hasForegroundOverlayLayer(this.document)) {\n return Promise.resolve();\n }\n\n this.activeShow = this.openHelpPopup().finally(() => {\n this.activeShow = null;\n });\n\n return this.activeShow;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async openHelpPopup(): Promise<void> {\n const title = await this.translationService.translateAsync('@general:keyboard-shortcuts.help-title');\n const component = await import('./keyboard-shortcuts-help.component').then(\n (module) => module.AXPKeyboardShortcutsHelpComponent,\n );\n\n await this.popupService.open(component, {\n title,\n size: 'sm',\n closeButton: true,\n closeOnBackdropClick: true,\n draggable: false,\n });\n }\n\n //#endregion\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[axpSticky]',\n exportAs: 'axpSticky',\n standalone: true,\n})\nexport class AXPStickyDirective {\n @Input('axpSticky') stickyClass!: string;\n @Input('stickyOffset') stickyOffset: number = 100;\n\n @Output() isStickyChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _isSticky: boolean = false;\n public get isSticky(): boolean {\n return this._isSticky;\n }\n public set isSticky(value: boolean) {\n if (this._isSticky !== value) {\n this._isSticky = value;\n this.isStickyChange.emit(value);\n }\n }\n\n private parentElement!: HTMLElement | Window;\n private targetElement!: HTMLElement;\n private mutationObserver!: MutationObserver;\n\n private readonly onWindowResize = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n @Input() stickyParent!: string | HTMLElement;\n @Input() stickyTarget!: string;\n\n constructor(\n private element: ElementRef<HTMLDivElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit() {\n this.initSticky();\n\n // Add mutation observer for dynamic content\n this.mutationObserver = new MutationObserver(() => {\n this.applyStickyStateFromScrollPosition();\n });\n\n this.mutationObserver.observe(this.element.nativeElement, {\n childList: true,\n subtree: true,\n });\n\n window.addEventListener('resize', this.onWindowResize);\n }\n\n private initSticky() {\n if (this.stickyParent instanceof HTMLElement) {\n this.parentElement = this.stickyParent;\n } else {\n this.parentElement = (document.querySelector(this.stickyParent) as HTMLElement) || window;\n }\n\n this.targetElement = (document.querySelector(this.stickyTarget) as HTMLElement) || this.element.nativeElement;\n\n this.parentElement.addEventListener('scroll', this.onParentScroll);\n this.applyStickyStateFromScrollPosition();\n }\n\n private getScrollTop(): number {\n return this.parentElement === window ? window.scrollY : (this.parentElement as HTMLElement).scrollTop;\n }\n\n /**\n * Toggle stuck styling only while this element is visually pinned (matches `position: sticky; top: 0`).\n * Scroll-offset thresholds would stay true for every section already passed, so multiple stacked stickies\n * would all keep `--stuck`; geometry fixes that.\n */\n private computeShouldStick(): boolean {\n if (this.getScrollTop() <= 0) {\n return false;\n }\n const tRect = this.targetElement.getBoundingClientRect();\n const epsilon = 3;\n let limitY: number;\n if (this.parentElement === window) {\n limitY = this.stickyOffset;\n } else {\n limitY = (this.parentElement as HTMLElement).getBoundingClientRect().top;\n }\n return tRect.top <= limitY + epsilon && tRect.top >= limitY - epsilon;\n }\n\n private applyStickyStateFromScrollPosition(): void {\n this.zone.runOutsideAngular(() => {\n const shouldStick = this.computeShouldStick();\n\n if (shouldStick !== this.isSticky) {\n this.zone.run(() => {\n this.isSticky = shouldStick;\n this.toggleStickyClasses(shouldStick);\n this.cdr.markForCheck();\n });\n }\n });\n }\n\n private onParentScroll = (): void => {\n this.applyStickyStateFromScrollPosition();\n };\n\n private toggleStickyClasses(isSticky: boolean): void {\n const classes = this.stickyClass.split(' ').filter(Boolean);\n classes.forEach((className) => {\n if (isSticky) {\n this.renderer.addClass(this.targetElement, className);\n } else {\n this.renderer.removeClass(this.targetElement, className);\n }\n });\n }\n\n ngOnDestroy() {\n this.parentElement.removeEventListener('scroll', this.onParentScroll);\n window.removeEventListener('resize', this.onWindowResize);\n\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n }\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\n\nimport { inject } from '@angular/core';\nimport { AXPMenuItem } from './menu.types';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPPlatformCommonDataSourceKeys } from '../../contracts/datasource.keys';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenMenuItems(items: AXPMenuItem[], depth: number): Array<{ id: string; title: string }> {\n const rows: Array<{ id: string; title: string }> = [];\n let index = 0;\n for (const it of items) {\n const fallback = `menu-${depth}-${index}`;\n index += 1;\n const id = it.name ?? it.path ?? fallback;\n rows.push({ id, title: it.text });\n if (it.children?.length) {\n rows.push(...flattenMenuItems(it.children, depth + 1));\n }\n }\n return rows;\n}\n\n//#endregion\n\n//#region ---- Menu items data source ----\n\n/**\n * Data source definition for menu items from {@link AXPMenuProviderService#rawItems}.\n */\nexport class AXPMenuItemsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProviderService = inject(AXPMenuProviderService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async items(): Promise<AXPDataSourceDefinition[]> {\n return [\n {\n name: AXPPlatformCommonDataSourceKeys.MenuItems,\n title: 'Menu items',\n source: () =>\n new AXDataSource({\n key: 'id',\n load: async () => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return { items: list, total: list.length };\n },\n byKey: async (key: unknown) => {\n const raw = await this.menuProviderService.rawItems();\n const list = flattenMenuItems(raw, 0);\n return list.find((item) => item.id === key);\n },\n pageSize: 1000,\n }),\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'equal' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ],\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_MENU_MIDDLEWARE, AXPMenuMiddleware } from './menu.middleware';\n\n//#region ---- Menu Middleware Provider Helper ----\n\n/**\n * Helper function to provide menu middlewares with proper DI setup\n * Similar to provideCommandMiddleware pattern\n * \n * @example\n * ```typescript\n * // In app.config.ts or module providers\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideMenuMiddleware([\n * customizationMiddleware,\n * securityMiddleware,\n * loggingMiddleware\n * ])\n * ]\n * };\n * ```\n */\nexport function provideMenuMiddleware(\n middlewares: AXPMenuMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...middlewares.map((middleware) => ({\n provide: AXP_MENU_MIDDLEWARE,\n useValue: middleware,\n multi: true,\n })),\n ]);\n}\n\n/**\n * Helper to create a class-based middleware with priority\n * \n * @example\n * ```typescript\n * const myMiddleware = createMenuMiddleware({\n * name: 'my-middleware',\n * priority: 100,\n * process: async (context) => {\n * context.find('dashboard').setPriority(1);\n * }\n * });\n * ```\n */\nexport function createMenuMiddleware(config: {\n name: string;\n priority?: number;\n process: (context: import('./menu.middleware').AXPMenuMiddlewareContext) => Promise<void>;\n}): AXPMenuMiddleware {\n return {\n name: config.name,\n priority: config.priority ?? 0,\n process: config.process,\n };\n}\n\n//#endregion\n\n","import { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { axpFindMenuItemByRoute } from './menu-route-matcher';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuVisibilityService } from './menu-visibility.service';\n\nconst SKIP_ROUTE_PREFIXES = ['/auth', '/error'];\nconst SKIP_ROUTE_PATHS = new Set(['/404', '/401', '/error/404', '/error/401']);\n\n//#region ---- Menu Route Access Service ----\n\n/**\n * Resolves route access using menu policy, route metadata, permissions, and features.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPMenuRouteAccessService {\n //#region ---- Services & Dependencies ----\n\n private readonly menuProvider = inject(AXPMenuProviderService);\n private readonly menuVisibility = inject(AXPMenuVisibilityService);\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Checks whether navigation to the target URL is allowed for the current user.\n */\n async canAccess(route: ActivatedRouteSnapshot, url: string): Promise<boolean> {\n if (this.shouldSkip(route, url)) {\n return true;\n }\n\n if (!this.hasExplicitRouteAccess(route)) {\n return false;\n }\n\n const menuItems = await this.menuProvider.items();\n const menuMatch = axpFindMenuItemByRoute(menuItems, url);\n\n if (!menuMatch) {\n return true;\n }\n\n if (this.menuVisibility.isMenuBranchVisible(menuMatch.item, menuMatch.ancestors)) {\n return true;\n }\n\n return false;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private shouldSkip(route: ActivatedRouteSnapshot, url: string): boolean {\n if (this.hasRouteFlag(route, 'skipMenuRouteGuard')) {\n return true;\n }\n\n const normalizedUrl = this.normalizeUrl(url);\n\n if (SKIP_ROUTE_PATHS.has(normalizedUrl)) {\n return true;\n }\n\n return SKIP_ROUTE_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix));\n }\n\n private hasRouteFlag(route: ActivatedRouteSnapshot, key: string): boolean {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n if (current.data?.[key] === true) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n private hasExplicitRouteAccess(route: ActivatedRouteSnapshot): boolean {\n const requiredPermission = this.getInheritedRouteData<string | string[] | null>(route, 'requiredPermission');\n const requiredFeature = this.getInheritedRouteData<string | string[] | null>(route, 'requiredFeature');\n\n const permissionKeys = this.normalizeKeys(requiredPermission);\n if (permissionKeys.length > 0 && !this.sessionService.authorize(...permissionKeys)) {\n return false;\n }\n\n const featureKeys = this.normalizeKeys(requiredFeature);\n if (featureKeys.length > 0 && !this.sessionService.isFeatureEnabled(...featureKeys)) {\n return false;\n }\n\n return true;\n }\n\n private getInheritedRouteData<T>(route: ActivatedRouteSnapshot, key: string): T | null {\n let current: ActivatedRouteSnapshot | null = route;\n\n while (current) {\n const value = current.data?.[key] as T | undefined;\n if (value != null) {\n return value;\n }\n current = current.parent;\n }\n\n return null;\n }\n\n private normalizeKeys(keys: string | string[] | null | undefined): string[] {\n if (!keys) {\n return [];\n }\n\n return Array.isArray(keys) ? keys : [keys];\n }\n\n private normalizeUrl(url: string): string {\n const path = url.split('?')[0]?.split('#')[0] ?? url;\n return path.startsWith('/') ? path : `/${path}`;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXP_UNAUTHORIZED_ROUTE } from '../../errors/unauthorized.routes';\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/contracts';\n\nexport class AXPMenuSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('menu', 'Menu', 'menu', 'fa-thin fa-bars', 2, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: AXPSystemActionType.View,\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPSearchDefinition } from './search.types';\n\n/**\n * Optional hook to resolve entity search definitions on demand (e.g. Module.X.Entity).\n */\nexport interface AXPSearchDefinitionLazyResolver {\n resolve(definitionName: string): Promise<AXPSearchDefinition | null>;\n}\n\nexport const AXP_SEARCH_DEFINITION_LAZY_RESOLVER = new InjectionToken<AXPSearchDefinitionLazyResolver>(\n 'AXP_SEARCH_DEFINITION_LAZY_RESOLVER',\n);\n","import { AXPSearchAction, AXPSearchDefinition, AXPSearchDefinitionDisplayFormat } from './search.types';\nimport { AXPSystemActionType } from '@acorex/platform/contracts';\n\nexport class AXPSearchDefinitionProviderContext {\n private definitions: AXPSearchDefinition[] = [];\n private definitionMap: Map<string, AXPSearchDefinition> = new Map();\n\n addDefinition(\n name: string,\n title: string,\n group: string,\n icon: string,\n order: number,\n options?: {\n format?: AXPSearchDefinitionDisplayFormat;\n actions?: AXPSearchAction[];\n }\n ): AXPSearchDefinitionBuilder {\n const definitionSearch: AXPSearchDefinition = {\n name,\n title,\n group,\n icon,\n order,\n format: {\n title: options?.format?.title ?? '{{ title }}',\n description: options?.format?.description ?? undefined,\n icon: options?.format?.icon ?? undefined,\n id: options?.format?.id ?? '{{ id }}',\n },\n actions: options?.actions ?? [],\n };\n\n this.definitions.push(definitionSearch);\n this.definitionMap.set(name, definitionSearch); // Index by name\n return new AXPSearchDefinitionBuilder(this, definitionSearch);\n }\n\n getDefinitions(): AXPSearchDefinition[] {\n return this.definitions;\n }\n\n // Expose groupMap for controlled access\n hasEntity(name: string): boolean {\n return this.definitionMap.has(name);\n }\n\n getDefinition(name: string): AXPSearchDefinition | undefined {\n return this.definitionMap.get(name);\n }\n}\n\nexport class AXPSearchDefinitionBuilder {\n private context: AXPSearchDefinitionProviderContext;\n private definition: AXPSearchDefinition;\n\n constructor(context: AXPSearchDefinitionProviderContext, definition: AXPSearchDefinition) {\n this.context = context;\n this.definition = definition;\n }\n\n addAction(name: string): AXPSearchDefinitionActionBuilder {\n const newAction: AXPSearchAction = {\n name,\n type: AXPSystemActionType.View,\n priority: 'primary',\n };\n this.definition.actions.push(newAction);\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n action(name: string): AXPSearchDefinitionActionBuilder | null {\n const foundAction = this.definition.actions.find((action) => action.name === name);\n if (!foundAction) {\n throw new Error(`action with name \"${name}\" not found in entity \"${this.definition.name}\".`);\n }\n return new AXPSearchDefinitionActionBuilder(this);\n }\n\n endEntity(): AXPSearchDefinitionProviderContext {\n return this.context;\n }\n}\n\nexport class AXPSearchDefinitionActionBuilder {\n private entityBuilder: AXPSearchDefinitionBuilder;\n\n constructor(entityBuilder: AXPSearchDefinitionBuilder) {\n this.entityBuilder = entityBuilder;\n }\n\n endAction(): AXPSearchDefinitionBuilder {\n return this.entityBuilder;\n }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AXPSearchDefinitionProviderContext } from './search-definition.builder';\nimport {\n AXP_SEARCH_DEFINITION_LAZY_RESOLVER,\n type AXPSearchDefinitionLazyResolver,\n} from './search-definition-lazy-resolver.token';\nimport { AXPSearchDefinition } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchDefinitionProvider {\n provide(context: AXPSearchDefinitionProviderContext): Promise<void>;\n}\n\n// Injection token for setting providers\nexport const AXP_SEARCH_DEFINITION_PROVIDER = new InjectionToken<AXPSearchDefinitionProvider[]>(\n 'AXP_SEARCH_DEFINITION_PROVIDER'\n);\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchDefinitionProviderService {\n private providers = inject(AXP_SEARCH_DEFINITION_PROVIDER, { optional: true });\n private lazyResolver = inject(AXP_SEARCH_DEFINITION_LAZY_RESOLVER, { optional: true });\n private cache: AXPSearchDefinition[] | null = null;\n\n private async load(): Promise<void> {\n if (this.cache) {\n return;\n }\n const context = new AXPSearchDefinitionProviderContext();\n \n // Load providers from DI tokens (backward compatibility)\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n await provider.provide(context);\n }\n }\n\n // Note: Search definition providers are different from search command providers\n // Search command providers are handled separately in search.service.ts\n \n this.cache = context.getDefinitions();\n }\n\n public async getListAsync(): Promise<AXPSearchDefinition[]> {\n await this.load();\n return this.getList();\n }\n\n public getList(): AXPSearchDefinition[] {\n if (!this.cache) {\n return [];\n } else {\n return this.cache;\n }\n }\n\n public findDefinition(definitionName: string): AXPSearchDefinition {\n const definition = this.getList().find((item) => item.name === definitionName);\n if (!definition) {\n throw new Error(`Definition with name ${definitionName} not found`);\n }\n return definition;\n }\n\n public async findDefinitionAsync(definitionName: string): Promise<AXPSearchDefinition | null> {\n await this.load();\n\n const existing = this.getList().find((item) => item.name === definitionName);\n if (existing) {\n return existing;\n }\n\n const lazy = this.lazyResolver as AXPSearchDefinitionLazyResolver | null;\n if (!lazy) {\n return null;\n }\n\n const resolved = await lazy.resolve(definitionName);\n if (!resolved) {\n return null;\n }\n\n this.cache = [...(this.cache ?? []), resolved];\n return resolved;\n }\n\n public findDefinitionByGroup(definitionGroup: string): AXPSearchDefinition {\n const definition = this.getList().find((definition) => definition.group === definitionGroup);\n if (!definition) {\n throw new Error(`Definition with group ${definitionGroup} not found`);\n }\n return definition;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPMultiLanguageString, isLocaleStringMap } from '@acorex/platform/contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { isPlainObject, isString } from 'lodash-es';\nimport { normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\n\n//#endregion\n\n//#region ---- Searchable text resolution ----\n\n/**\n * Resolves a value to plain text for global-search matching (i18n keys, locale maps, scalars).\n */\nexport function resolveSearchableText(\n value: unknown,\n locale: string,\n translationService: AXTranslationService,\n): string {\n if (value == null || value === false) {\n return '';\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n if (trimmed.startsWith('@')) {\n return translationService.translateSync(trimmed) || trimmed;\n }\n return trimmed;\n }\n\n if (isLocaleStringMap(value) || translationService.isValidMultiLanguageObject(value)) {\n return resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n }\n\n return '';\n}\n\n/**\n * Case-insensitive match against i18n keys, locale maps, and plain strings.\n */\nexport function searchInSearchableValue(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n): boolean {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q) {\n return true;\n }\n\n if (isLocaleStringMap(value)) {\n return Object.values(value)\n .filter((entry): entry is string => typeof entry === 'string' && entry.trim() !== '')\n .some((entry) => entry.toLocaleLowerCase(locale).includes(q));\n }\n\n const text = resolveSearchableText(value, locale, translationService).toLocaleLowerCase(locale);\n return text.includes(q);\n}\n\n/**\n * Shallow + nested search over entity/command payloads (skips id / entityName keys).\n */\nexport function searchInRecordValues(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): boolean {\n const maxDepth = 4;\n if (depth > maxDepth || value == null) {\n return false;\n }\n\n if (searchInSearchableValue(value, query, locale, translationService)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => searchInRecordValues(item, query, locale, translationService, depth + 1));\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n return Object.entries(value as Record<string, unknown>).some(([key, entry]) => {\n if (key === 'id' || key === 'entityName') {\n return false;\n }\n return searchInRecordValues(entry, query, locale, translationService, depth + 1);\n });\n }\n\n return false;\n}\n\n//#endregion\n\n//#region ---- Display template resolution ----\n\nfunction countMustacheExpressions(template: string): number {\n return (template.match(/\\{\\{/g) ?? []).length;\n}\n\n/** Standard display-tier row scope for entity title/search templates. */\nexport function createEntityRowExpressionScope(\n data: unknown,\n contextEvalFactory: AXPContextEvalFactory,\n): AXPExpressionEvaluatorScope {\n return {\n context: contextEvalFactory.createScope((data ?? {}) as Record<string, unknown>),\n };\n}\n\n/**\n * Coerces an evaluated display segment to plain text.\n * Piped eval returns strings; unpiped MLS still resolves via compat fallback.\n */\nfunction formatDisplaySegment(\n segment: unknown,\n locale: string,\n translationService: AXTranslationService,\n): string {\n if (segment === false || segment == null) {\n return '';\n }\n if (isString(segment)) {\n return segment.trim();\n }\n return resolveSearchableText(segment, locale, translationService);\n}\n\n/**\n * Evaluates a normalized entity display template via {@link AXPExpressionEvaluatorService}.\n */\nexport async function evaluateEntityDisplayTemplate(\n template: string,\n data: unknown,\n expressionEvaluator: AXPExpressionEvaluatorService,\n locale: string,\n translationService: AXTranslationService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<unknown> {\n const normalized = normalizeEntityDisplayTemplate(template);\n const scope = createEntityRowExpressionScope(data, contextEvalFactory);\n\n if (!normalized.includes('{{')) {\n return normalized;\n }\n\n if (\n countMustacheExpressions(normalized) === 1 &&\n expressionEvaluator.isExpression(normalized)\n ) {\n return expressionEvaluator.evaluate(normalized, scope);\n }\n\n const regex = /\\{\\{\\s*([\\s\\S]*?)\\s*\\}\\}/g;\n let result = '';\n let lastIndex = 0;\n\n for (const match of normalized.matchAll(regex)) {\n result += normalized.slice(lastIndex, match.index);\n const segment = await expressionEvaluator.evaluate(`{{ ${match[1].trim()} }}`, scope);\n result += formatDisplaySegment(segment, locale, translationService);\n lastIndex = (match.index ?? 0) + match[0].length;\n }\n\n result += normalized.slice(lastIndex);\n return result;\n}\n\n/**\n * Best display string from row values that contain the active search query (deep-match fallback).\n */\nexport function resolveQueryMatchingDisplayText(\n value: unknown,\n query: string,\n locale: string,\n translationService: AXTranslationService,\n depth = 0,\n): string {\n const q = query.trim().toLocaleLowerCase(locale);\n if (!q || depth > 4 || value == null) {\n return '';\n }\n\n let best = '';\n const consider = (candidate: unknown) => {\n const text = resolveSearchableText(candidate, locale, translationService).trim();\n if (text && text.toLocaleLowerCase(locale).includes(q) && text.length > best.length) {\n best = text;\n }\n };\n\n consider(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const nested = resolveQueryMatchingDisplayText(item, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n return best;\n }\n\n if (isPlainObject(value) && !isLocaleStringMap(value)) {\n for (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n if (key === 'id' || key === 'entityName') {\n continue;\n }\n const nested = resolveQueryMatchingDisplayText(entry, query, locale, translationService, depth + 1);\n if (nested.length > best.length) {\n best = nested;\n }\n }\n }\n\n return best;\n}\n\n/**\n * Resolves entity search display templates; coerces multi-language field values to readable text.\n */\nexport async function resolveSearchDisplayTemplate(\n template: string | undefined,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<AXPMultiLanguageString> {\n if (!template) {\n return '';\n }\n\n if (!template.includes('{{') && !template.includes('{')) {\n if (template.trim().startsWith('@')) {\n return resolveSearchableText(template, locale, translationService);\n }\n\n const formatted = formatService.format(template, 'string', data);\n return sanitizeResolvedEntityDisplayTitle(\n typeof formatted === 'string' ? formatted : String(formatted ?? ''),\n );\n }\n\n const evaluated = await evaluateEntityDisplayTemplate(\n template,\n data,\n expressionEvaluator,\n locale,\n translationService,\n contextEvalFactory,\n );\n return sanitizeResolvedEntityDisplayTitle(\n resolveSearchableText(evaluated, locale, translationService),\n );\n}\n\n//#endregion\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject } from '@angular/core';\nimport { searchInSearchableValue } from './search-display-string.util';\nimport { AXPSearchResult } from './search.types';\n\n// Interface for setting providers\nexport interface AXPSearchProvider {\n search(text: string): Promise<AXPSearchResult[]>;\n}\n\nexport abstract class AXPSearchCommandProvider {\n private readonly translationService = inject(AXTranslationService);\n abstract commands: AXPSearchResult[];\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n return this.commands.filter(\n (command) =>\n searchInSearchableValue(command.title, text, locale, this.translationService) ||\n searchInSearchableValue(command.description, text, locale, this.translationService),\n );\n }\n}\n","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, isMeaningfulEntityDisplayTitle, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityModifyRecordTitleTemplate, resolveEntityRowTitleTemplate, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { get } from 'lodash-es';\n\nimport { resolveSearchDisplayTemplate, resolveSearchableText } from './search-display-string.util';\nimport { AXPSearchDefinitionDisplayFormat } from './search.types';\n\n//#endregion\n\n//#region ---- Runtime resolution ----\n\n/**\n * Modify/edit popup chrome: `{action} {individual} ({update.title ?? single.title})` when a record template exists.\n */\nexport async function resolveEntityModifyPopupTitle(\n entity: AXPEntity,\n recordData: unknown,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n actionTitleKey = '@general:actions.modify.title',\n): Promise<string> {\n const actionPrefix = translationService.translateSync(actionTitleKey);\n const entityLabel = translationService.translateSync(entity.formats.individual);\n const baseTitle = `${actionPrefix} ${entityLabel}`.trim();\n\n const recordTemplate = resolveEntityModifyRecordTitleTemplate(entity);\n if (!recordTemplate) {\n return baseTitle;\n }\n\n const locale = translationService.getActiveLang();\n const resolved = await resolveSearchDisplayTemplate(\n recordTemplate,\n recordData,\n locale,\n translationService,\n formatService,\n expressionEvaluator,\n contextEvalFactory,\n );\n const recordTitle = sanitizeResolvedEntityDisplayTitle(\n typeof resolved === 'string'\n ? resolved\n : resolveSearchableText(resolved, locale, translationService),\n );\n\n if (!isMeaningfulEntityDisplayTitle(recordTitle)) {\n return baseTitle;\n }\n\n return `${baseTitle} (${recordTitle})`;\n}\n\n/**\n * Resolves an entity row title using entity-driven fallback templates and property paths.\n */\nexport async function resolveEntitySearchTitleFallback(\n format: Pick<AXPSearchDefinitionDisplayFormat, 'titleFallbackTemplates' | 'titleFallbackFields'>,\n data: unknown,\n locale: string,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n expressionEvaluator: AXPExpressionEvaluatorService,\n contextEvalFactory: AXPContextEvalFactory,\n): Promise<string> {\n if (data == null) {\n return '';\n }\n\n for (const template of format.titleFallbackTemplates ?? []) {\n const resolved = await resolveSearchDisplayTemplate(\n template,\n data,\n locale,\n translationService,\n formatService,\n expressionEvaluator,\n contextEvalFactory,\n );\n const text = sanitizeResolvedEntityDisplayTitle(\n typeof resolved === 'string'\n ? resolved\n : resolveSearchableText(resolved, locale, translationService),\n );\n if (isMeaningfulEntityDisplayTitle(text)) {\n return text;\n }\n }\n\n for (const path of format.titleFallbackFields ?? []) {\n const text = resolveSearchableText(get(data, path), locale, translationService).trim();\n if (text) {\n return text;\n }\n }\n\n return '';\n}\n\n//#endregion\n","import { isMeaningfulEntityDisplayTitle, sanitizeResolvedEntityDisplayTitle } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPContextEvalFactory, AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { omit } from 'lodash-es';\nimport { AXPSearchDefinitionProviderService } from './search-definition.provider';\nimport { resolveEntitySearchTitleFallback } from './entity-search-display-title.util';\nimport {\n resolveSearchDisplayTemplate,\n resolveSearchableText,\n searchInRecordValues,\n searchInSearchableValue,\n} from './search-display-string.util';\nimport { AXPSearchProvider } from './search.provider';\nimport { AXPSearchDisplayGroupResult, AXPSearchDisplayResult } from './search.types';\n\n// Injection token for setting providers\nexport const AXP_SEARCH_PROVIDER = new InjectionToken<AXPSearchProvider[]>('AXP_SEARCH_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPSearchService {\n private providers = inject(AXP_SEARCH_PROVIDER, { optional: true });\n private definitionService = inject(AXPSearchDefinitionProviderService);\n private formatService = inject(AXFormatService);\n private translationService = inject(AXTranslationService);\n private expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private contextEvalFactory = inject(AXPContextEvalFactory);\n\n async search(text: string): Promise<AXPSearchDisplayGroupResult[]> {\n //TODO better handle this\n if (this.definitionService.getList().length == 0) {\n await this.definitionService.getListAsync();\n }\n\n // Collect providers from DI tokens\n const allProviders: AXPSearchProvider[] = [];\n\n // Load from DI tokens\n if (Array.isArray(this.providers)) {\n allProviders.push(...this.providers);\n } else if (this.providers) {\n allProviders.push(this.providers);\n }\n\n if (allProviders.length === 0) {\n throw new Error('No search providers available');\n }\n\n const providersWithSearch = allProviders.filter(\n (provider): provider is AXPSearchProvider => provider != null && typeof provider.search === 'function',\n );\n\n if (providersWithSearch.length === 0) {\n throw new Error('No search providers with a valid search method available');\n }\n\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n const mergeData: AXPSearchDisplayResult[] = [];\n const promises = providersWithSearch.map((provider) => provider.search(text));\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n for (const result of resultArray) {\n try {\n const definition = await this.definitionService.findDefinitionAsync(result.group);\n if (!definition) {\n continue;\n }\n\n const resolvedTitle =\n result.title ??\n (definition.format.title\n ? await resolveSearchDisplayTemplate(\n definition.format.title,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n )\n : '');\n const resolvedDescription =\n result.description ??\n (definition.format.description\n ? await resolveSearchDisplayTemplate(\n definition.format.description,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n )\n : undefined);\n\n let titleText = sanitizeResolvedEntityDisplayTitle(\n typeof resolvedTitle === 'string'\n ? resolvedTitle\n : resolveSearchableText(resolvedTitle, locale, this.translationService),\n );\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n titleText = await resolveEntitySearchTitleFallback(\n definition.format,\n result.data,\n locale,\n this.translationService,\n this.formatService,\n this.expressionEvaluator,\n this.contextEvalFactory,\n );\n }\n\n if (!isMeaningfulEntityDisplayTitle(titleText)) {\n continue;\n }\n\n mergeData.push({\n definitionName: definition.group,\n definitionTitle: definition.title,\n name: result.group,\n id: `${definition.name}:${this.formatService.format(definition.format.id, 'string', result.data ?? result)}`,\n title: titleText,\n description: resolvedDescription,\n icon: result.icon ?? definition.icon,\n data: result.data,\n command: result.command,\n actions: definition.actions,\n parent: result.parent,\n order: definition.order,\n });\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n const normalizedQuery = text.trim();\n const visibleData =\n normalizedQuery.length === 0\n ? mergeData\n : mergeData.filter(\n (item) =>\n searchInSearchableValue(item.title, normalizedQuery, locale, this.translationService) ||\n searchInSearchableValue(item.description, normalizedQuery, locale, this.translationService) ||\n searchInRecordValues(item.data, normalizedQuery, locale, this.translationService),\n );\n\n // Group data\n const groupedData: AXPSearchDisplayGroupResult[] = [];\n const groupMap: { [key: string]: AXPSearchDisplayGroupResult } = {};\n\n // Create groups\n for (const item of visibleData) {\n const groupName = item.definitionName!; // Change this to the property you want to group by\n if (!groupMap[groupName]) {\n groupMap[groupName] = {\n name: groupName,\n title: item.definitionTitle!, // You can adjust the title logic if needed\n order: item.order, // Add order to the group\n children: [],\n };\n groupedData.push(groupMap[groupName]);\n }\n groupMap[groupName].children.push(omit(item, ['definitionName', 'definitionTitle', 'order']));\n }\n\n // Sort groups by order\n groupedData.sort((a, b) => a.order - b.order);\n\n return groupedData;\n }\n}\n","//#region ---- Imports ----\n\nimport { type AXPEntity, buildEntitySearchTitleContext, ENTITY_LAYOUT_SINGLE_TITLE_PATH, ENTITY_ROW_POPUP_TITLE_OPTION, ENTITY_ROW_TITLE_TEMPLATE_OPTION, isUnresolvedEntityDisplayTemplate, normalizeEntityDisplayTemplate, resolveEntityRowTitleTemplate } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormatService } from '@acorex/core/format';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport { AXPMultiLanguageString } from '@acorex/platform/contracts';\n\nimport { get } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPResolveEntityRowDisplayTitleOptions {\n /** Row or form context data used to evaluate title templates. */\n data: Record<string, unknown> | undefined;\n activeLang: string;\n formatService: AXFormatService;\n /** Entity definition when available (forms, columns with entity resolver). */\n entity?: AXPEntity | null;\n /** Widget/interface options — may contain `popupTitle` or `titleTemplate`. */\n widgetOptions?: Record<string, unknown> | undefined;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst INVALID_DISPLAY_TEXT = '[object Object]';\n\nconst DEFAULT_ROW_TITLE_FALLBACK_PATHS = ['title', 'name', 'code'] as const;\n\n//#endregion\n\n//#region ---- Value normalization ----\n\n/** Resolves a row field or format result to a plain display string for the active locale. */\nexport function resolveEntityRowDisplayText(value: unknown, activeLang: string): string {\n if (value == null || value === '') {\n return '';\n }\n\n if (typeof value === 'string') {\n const text = value.trim();\n if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n return '';\n }\n return text;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n const text = resolveMultiLanguageString(value as AXPMultiLanguageString, activeLang).trim();\n if (!text || text === INVALID_DISPLAY_TEXT || isUnresolvedEntityDisplayTemplate(text)) {\n return '';\n }\n return text;\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Row title resolution ----\n\nfunction readTitleTemplateFromWidgetOptions(\n widgetOptions: Record<string, unknown> | undefined,\n): unknown {\n if (!widgetOptions) {\n return undefined;\n }\n\n return widgetOptions[ENTITY_ROW_POPUP_TITLE_OPTION] ?? widgetOptions[ENTITY_ROW_TITLE_TEMPLATE_OPTION];\n}\n\nfunction resolveEntityRowDisplayTitleFromContext(\n data: Record<string, unknown>,\n widgetOptions: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n const titleTemplate = readTitleTemplateFromWidgetOptions(widgetOptions);\n const fromTemplateValue = resolveEntityRowDisplayText(titleTemplate, activeLang);\n if (fromTemplateValue) {\n return fromTemplateValue;\n }\n\n const fromEntityLayout = resolveEntityRowDisplayText(get(data, ENTITY_LAYOUT_SINGLE_TITLE_PATH), activeLang);\n if (fromEntityLayout) {\n return fromEntityLayout;\n }\n\n if (typeof titleTemplate === 'string' && titleTemplate.trim()) {\n const formatted = formatService.format(normalizeEntityDisplayTemplate(titleTemplate), 'string', data);\n const fromFormattedTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n if (fromFormattedTemplate) {\n return fromFormattedTemplate;\n }\n }\n\n for (const path of DEFAULT_ROW_TITLE_FALLBACK_PATHS) {\n const fromField = resolveEntityRowDisplayText(get(data, path), activeLang);\n if (fromField) {\n return fromField;\n }\n }\n\n return '';\n}\n\n/**\n * Resolves an entity row title for list columns, view widgets, and edit widgets.\n * Uses entity metadata when provided, otherwise widget title templates and common field paths.\n */\nexport function resolveEntityRowDisplayTitle(options: AXPResolveEntityRowDisplayTitleOptions): string {\n const { data, activeLang, formatService, entity, widgetOptions } = options;\n if (!data) {\n return '';\n }\n\n if (entity) {\n const fromEntity = formatEntityRowDisplayTitle(entity, data, formatService, activeLang);\n if (fromEntity) {\n return fromEntity;\n }\n }\n\n return resolveEntityRowDisplayTitleFromContext(data, widgetOptions, formatService, activeLang);\n}\n\n/**\n * @deprecated Use {@link resolveEntityRowDisplayTitle} instead.\n */\nexport function resolveEntityRowDisplayTitleFromColumnContext(\n rowData: Record<string, unknown> | undefined,\n columnOptions: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n return resolveEntityRowDisplayTitle({\n data: rowData,\n widgetOptions: columnOptions,\n formatService,\n activeLang,\n });\n}\n\n/**\n * Formats the entity row title for display using entity-driven templates and property paths.\n */\nexport function formatEntityRowDisplayTitle(\n entity: AXPEntity | null | undefined,\n rowData: Record<string, unknown> | undefined,\n formatService: AXFormatService,\n activeLang: string,\n): string {\n if (!rowData) {\n return '';\n }\n\n const titleContext = buildEntitySearchTitleContext(entity ?? ({} as AXPEntity));\n\n for (const path of titleContext.fallbackFields) {\n const fromField = resolveEntityRowDisplayText(get(rowData, path), activeLang);\n if (fromField) {\n return fromField;\n }\n }\n\n const templates = [\n resolveEntityRowTitleTemplate(entity),\n ...titleContext.fallbackTemplates,\n ].filter((template): template is string => !!template?.trim());\n\n for (const template of templates) {\n const formatted = formatService.format(normalizeEntityDisplayTemplate(template), 'string', rowData);\n const fromTemplate = resolveEntityRowDisplayText(formatted, activeLang);\n if (fromTemplate) {\n return fromTemplate;\n }\n }\n\n return '';\n}\n\n//#endregion\n","import type { AXPSearchResult } from './search.types';\n\n/**\n * Shared utility for creating Entity:Create command options used in search command providers.\n * Use with command: { name: 'Entity:Create', options: createEntityCommandOptions(...) }\n */\nexport function createEntityCommandOptions(\n entityKey: string,\n entityInfo: { name: string; module: string; title: string }\n): Record<string, unknown> {\n return {\n __context__: {\n entity: entityKey,\n entityInfo: {\n name: entityInfo.name,\n module: entityInfo.module,\n title: entityInfo.title,\n parentKey: undefined,\n source: entityKey,\n },\n data: {},\n options: {},\n },\n };\n}\n\n/**\n * Creates a search command for \"Create {Entity}\" with consistent i18n pattern.\n * Use titleKey/descriptionKey from module (e.g. @module:entity.permissions.create.title).\n * Standard: \"Create {Entity}\" for title, \"Create new {entities}\" for description.\n */\nexport function createEntitySearchCommand(config: {\n id: string;\n entityKey: string;\n entityInfo: { name: string; module: string; title: string };\n titleKey: string;\n descriptionKey?: string;\n icon: string;\n}): AXPSearchResult {\n return {\n id: config.id,\n group: 'command',\n title: config.titleKey,\n description: config.descriptionKey ?? config.titleKey,\n icon: config.icon,\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(config.entityKey, config.entityInfo),\n },\n };\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { inject } from '@angular/core';\nimport { omit, sortBy } from 'lodash-es';\nimport { AXPSearchProvider, AXPSearchResult, searchInSearchableValue } from '../../search';\nimport { AXPMenuProviderService } from './menu.provider';\nimport { AXPMenuItem } from './menu.types';\n\nexport interface AXPMenuItemWithParent extends AXPMenuItem {\n parent?: AXPMenuItem;\n}\n\nexport class AXPMenuSearchProvider implements AXPSearchProvider {\n menuService = inject(AXPMenuProviderService);\n translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const menuItems = this.searchMenuItems(await this.menuService.items(), text);\n return sortBy<AXPSearchResult>(\n menuItems.map<AXPSearchResult>((item) => ({\n group: 'menu', // Use `name` or empty string if undefined\n title: item.text, // Use `text` for the `title`\n icon: item.icon, // Include the `icon` if present\n data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`\n command: item.path\n ? ({\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: item.path,\n },\n },\n } as AXPExecuteCommand)\n : (item.command as AXPExecuteCommand),\n parent: item.parent\n ? {\n title: item.parent.text,\n }\n : undefined,\n })),\n [(o) => this.translateService.translateSync(String(o.title ?? ''))],\n );\n }\n\n /**\n * Recursively searches AXPMenuItem and its children for a matching text.\n *\n * @param menuItems - The array of AXPMenuItem to search in.\n * @param searchText - The text to search for (case-insensitive).\n * @returns An array of AXPMenuItem that match the search text.\n */\n private searchMenuItems(menuItems: AXPMenuItem[], searchText: string): AXPMenuItemWithParent[] {\n const result: AXPMenuItemWithParent[] = [];\n const locale = this.translateService.getActiveLang() ?? 'en-US';\n\n for (const item of menuItems) {\n // Check if the current item's text matches the search text\n if (\n item.type != 'group' &&\n (item.children?.length ?? 0) == 0 &&\n searchInSearchableValue(item.text, searchText, locale, this.translateService)\n ) {\n result.push(item as AXPMenuItemWithParent);\n }\n\n // Recursively search in children if they exist\n if (item.children && item.children.length > 0) {\n const childResults = this.searchMenuItems(item.children, searchText);\n result.push(...childResults.map((x) => ({ ...x, parent: item }) as AXPMenuItemWithParent));\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <small class=\"ax-text-sm\" [innerHTML]=\"text\"></small>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPFooterTextSlotComponent {\n @Input()\n public text!: string;\n}","\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { AXPMenuItem, AXPMenuItemCommand } from '../../../menu';\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-5\">\n @for (link of items; track link) {\n <a (click)=\"handleCommand(link.command)\" >{{ link.text }}</a>\n }\n </div>\n `,\n imports: [],\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPNavBarSlotComponent {\n @Input()\n public items!: AXPMenuItem[];\n\n\n protected handleCommand(action?: AXPMenuItemCommand) {\n // if (action)\n // this.store.dispatch(action)\n }\n}","import { InjectionToken } from '@angular/core';\n\nexport type AXPTokenDefinitionProviderToken =\n | AXPTokenDefinitionProvider\n | Promise<AXPTokenDefinitionProvider>;\n\nexport const AXP_TOKEN_DEFINITION_PROVIDER = new InjectionToken<AXPTokenDefinitionProviderToken[]>(\n 'AXP_TOKEN_DEFINITION_PROVIDER',\n {\n factory: () => [],\n },\n);\n\nexport interface AXPTokenDefinitionProvider<T = any> {\n name: string;\n title: string;\n description?: string;\n\n execute(): Promise<T> | T;\n}\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_TOKEN_DEFINITION_PROVIDER } from './token-definition.provider';\nimport { AXPTokenDefinition } from './token.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTokenDefinitionService {\n //#region ---- Providers & Caches ----\n\n private readonly definitionProviders = inject(AXP_TOKEN_DEFINITION_PROVIDER, { optional: true }) || [];\n\n /** Cache for definitions by name. */\n private definitionsByName: Map<string, AXPTokenDefinition> = new Map();\n\n\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Returns a token definition by its name.\n * First checks the cache, then queries all providers if not found.\n * @param name The token name.\n * @returns The token definition if found, undefined otherwise.\n */\n async getDefinition(name: string): Promise<AXPTokenDefinition | undefined> {\n // Check cache first\n if (this.definitionsByName.has(name)) {\n return this.definitionsByName.get(name);\n }\n // Not in cache, query providers\n // Resolve all providers (some may be promises, some may be arrays)\n const resolvedProviders = await Promise.all(this.definitionProviders);\n\n // Flatten the array - some providers may be arrays of providers (e.g., dynamic token providers)\n const flattenedProviders: AXPTokenDefinition[] = [];\n for (const provider of resolvedProviders) {\n if (Array.isArray(provider)) {\n // If provider is an array, add all items\n flattenedProviders.push(...provider);\n } else if (provider) {\n // If provider is a single provider, add it\n flattenedProviders.push(provider);\n }\n }\n\n const match = flattenedProviders.find(def => def?.name === name);\n if (match) {\n this.definitionsByName.set(name, match);\n return match;\n }\n return undefined;\n }\n\n /**\n * Gets the resolved value of a token by its name.\n * @param name The token name.\n * @returns The resolved token value, or undefined if the token is not found.\n */\n async getValue(name: string): Promise<any> {\n const definition = await this.getDefinition(name);\n if (definition) {\n return await definition.execute();\n }\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /** Clears the definitions by name cache. */\n clearDefinitionsCache(): void {\n this.definitionsByName.clear();\n }\n\n //#endregion\n}\n","\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPTokenDefinitionService } from \"./token-definition.service\";\n\nexport class AXPTokenEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected tokenService = inject(AXPTokenDefinitionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('tokens', {\n get: async (name: string) => {\n return await this.tokenService.getValue(name);\n }\n })\n }\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction, AXPWorkflowContext, createWorkFlowEvent } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AXPCommonSettings } from '../configs/common-settings.key';\nimport { AXPSettingsService } from '../settings';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\n\n//TODO Loading, Redirect, Drawer, Show toast\n\nexport const AXPRedirectEvent = createWorkFlowEvent<{ url: string }>('Redirect Event Fired');\nexport const AXPRefreshEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Refresh Event Fired');\nexport const AXPReloadEvent = createWorkFlowEvent<{ entity: string; meta?: any }>('Reload Event Fired');\n\n@Injectable()\nexport class AXPWorkflowNavigateAction extends AXPWorkflowAction {\n private router = inject(Router);\n private tabNavigation = inject(AXPTabNavigationService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const payload = context.getVariable('payload');\n if (Array.isArray(payload.commands)) {\n await this.router.navigate(payload.commands, payload.extras);\n return;\n }\n\n const path = payload.commands as string;\n if (!path) {\n return;\n }\n\n if (path.toLowerCase().startsWith('http') || payload.target === 'blank') {\n window.open(path, '_blank');\n return;\n }\n\n await this.tabNavigation.navigate(path, payload.extras);\n }\n}\n\n@Injectable()\nexport class AXPDialogConfirmAction extends AXPWorkflowAction {\n private dialogService = inject(AXDialogService);\n private translationService = inject(AXTranslationService);\n\n title!: string;\n message!: string;\n type!: AXStyleColorType;\n\n defaultAction = 'cancel';\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n console.log('AXPDialogConfirmAction', this.title, this.message, this.type);\n context.setOutput('result', false);\n const dialogResult = await this.dialogService.confirm(\n await this.translationService.translateAsync(this.title),\n await this.translationService.translateAsync(this.message),\n (await this.translationService.translateAsync(this.type)) as AXStyleColorType,\n 'horizontal',\n false,\n 'cancel',\n );\n context.setOutput('result', dialogResult.result);\n }\n}\n\n@Injectable()\nexport class AXPToastAction extends AXPWorkflowAction {\n private toastService = inject(AXToastService);\n private translationService = inject(AXTranslationService);\n private settingsService = inject(AXPSettingsService);\n\n color!: AXStyleColorType;\n title!: string;\n content!: string;\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const showResult = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (showResult) {\n this.toastService.show({\n color: this.color,\n title: await this.translationService.translateAsync(this.title),\n content: await this.translationService.translateAsync(this.content),\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n }\n}\n\n@Injectable()\nexport class AXPReloadAction extends AXPWorkflowAction {\n async execute(context: AXPWorkflowContext): Promise<void> {\n this.dispatch(AXPReloadEvent({ entity: context.getVariable('entity'), meta: context.getVariable<any>('meta') }));\n }\n}\n","//#region ---- Entity Workflow Events ----\n\n/** Workflow event type dispatched after a successful entity delete. */\nexport const AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE = '[Entity] Deleted';\n\nexport interface AXPEntityDeletedEventPayload {\n entity: string;\n ids: string[];\n meta?: unknown;\n}\n\n//#endregion\n","import { AXPNavigateActionCommand } from '@acorex/platform/core';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPTabNavigationService } from '../tab-navigation/tab-navigation.service';\n\n@Injectable()\nexport class AXPWorkflowRouterNavigateAction extends AXPWorkflowAction {\n private readonly tabNavigation = inject(AXPTabNavigationService);\n\n async execute(context: AXPWorkflowContext): Promise<void> {\n const command = context.getVariable<AXPNavigateActionCommand<'router'>>();\n const path = command.options.path;\n if (!path) {\n console.error('Path is required for navigate workflow');\n return;\n }\n\n if (path?.toLowerCase()?.startsWith('http') || command.options?.extras?.target === 'blank') {\n window.open(path, '_blank');\n } else {\n await this.tabNavigation.navigate(path, command.options.extras);\n }\n }\n}\n\nexport const AXPNavigateWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'navigate-router',\n },\n },\n};\n","import { Injectable, NgZone, inject, isDevMode } from \"@angular/core\";\nimport { AXDialogService } from \"@acorex/components/dialog\";\nimport { AXPWorkflowError } from \"@acorex/platform/workflow\";\nimport { AXPErrorHandler } from \"../errors\";\n\n@Injectable()\nexport class AXMWorkflowErrorHandler implements AXPErrorHandler {\n private dialog = inject(AXDialogService);\n\n\n handleError(error: any, next: (error: any) => void): void {\n if (error instanceof AXPWorkflowError) {\n this.dialog.alert(\"Somthing is wrong!\", error.inner ? error.inner.message : error.message, 'danger');\n next(error);\n } else {\n next(error);\n }\n }\n}","import { AXPopupModule } from '@acorex/components/popup';\nimport { AXToastModule } from '@acorex/components/toast';\nimport { AXFormatterRegistryService } from '@acorex/core/format';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport {\n AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n AXPAppStartUpProvider,\n AXPComponentSlotModule,\n AXPModuleManifestModule,\n} from '@acorex/platform/core';\n\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { ErrorHandler, inject, Inject, Injector, ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { AXPBackgroundOperationSlotComponent } from './background-operation';\nimport { AXPBrowserTitleService } from './browser-title';\nimport {\n AXPCustomOperatorService,\n AXPCustomOperatorServiceImpl,\n AXPFilterOperatorMiddlewareService,\n AXPFilterOperatorMiddlewareServiceImpl,\n} from './data';\nimport { AXPErrorHandler, AXPErrorHandlerRegistryService, AXPGlobalErrorHandler } from './errors';\nimport { AXPTranslateFormatter } from './formatters';\nimport { AXPFileStorageEvaluatorScopeProvider } from './file-storage';\nimport { AXPKeyboardShortcutsHelpService } from './keyboard-shortcuts';\nimport { AXPMenuSearchDefinitionProvider } from './layout';\nimport { AXPMenuSearchProvider } from './layout/menu/search.provider';\nimport { AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from './search';\nimport { AXP_SETTING_DEFINITION_PROVIDER, AXPSettingsEvaluatorScopeProvider } from './settings';\nimport { AXPTokenEvaluatorScopeProvider } from './tokens';\nimport {\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 formatterRegistry: AXFormatterRegistryService,\n ) {\n formatterRegistry.register(AXPTranslateFormatter);\n instances.forEach((f) => {\n f();\n });\n }\n}\n","import { AXPLogoConfig } from '@acorex/platform/contracts';\n\nimport { InjectionToken } from '@angular/core';\nimport { merge } from 'lodash-es';\n\nexport const ENVIRONMENT = new InjectionToken<any>('ENVIRONMENT');\n\nexport const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken<AXPPlatformConfigs>('AXP_PLATFORM_CONFIG_TOKEN', {\n providedIn: 'root',\n factory: () => {\n return AXPPlatformDefaultConfigs;\n },\n});\n\nexport interface AXPPlatformConfigs {\n title?: string;\n copyright?: string;\n logo?: {\n icon: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n text: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n full: {\n light: AXPLogoConfig;\n dark: AXPLogoConfig;\n };\n };\n network?: {\n timeOut?: number;\n };\n}\n\nexport const AXPPlatformDefaultConfigs: AXPPlatformConfigs = {\n copyright: 'ACoreX @ 2024',\n title: 'ACoreX Platform',\n\n network: {\n timeOut: 5000,\n },\n};\n\nexport function configPlatform(config: Partial<AXPPlatformConfigs> = AXPPlatformDefaultConfigs): AXPPlatformConfigs {\n return merge(AXPPlatformDefaultConfigs, config);\n}\n","import { AXPCommonSettings } from './common-settings.key';\nimport type { AXPSettingsService } from '../settings/settings.service';\n\nexport interface AXPEntityCreateListBehaviorOptions {\n redirect?: boolean;\n}\n\nexport interface AXPEntityCreateListBehavior {\n shouldRedirect: boolean;\n shouldHighlight: boolean;\n}\n\n/**\n * Resolves post-create list behavior from user settings and optional action overrides.\n */\nexport async function resolveEntityCreateListBehavior(\n settingsService: AXPSettingsService,\n options?: AXPEntityCreateListBehaviorOptions,\n): Promise<AXPEntityCreateListBehavior> {\n const [redirectSetting, highlightSetting] = await Promise.all([\n settingsService.get<boolean>(AXPCommonSettings.RedirectToDetailsAfterCreate),\n settingsService.get<boolean>(AXPCommonSettings.HighlightAfterCreateInList),\n ]);\n\n const shouldRedirect =\n options?.redirect !== undefined ? options.redirect : redirectSetting !== false;\n const shouldHighlight = highlightSetting === true;\n\n return { shouldRedirect, shouldHighlight };\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const AXP_ROOT_CONFIG_TOKEN = new InjectionToken<AXPRootConfigs>('AXP_ROOT_CONFIG_TOKEN');\n\nexport interface AXPRootConfigs {\n baseUrl: string;\n}","import { InjectionToken } from '@angular/core';\nimport { AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Provider Interface ----\n\n/**\n * Type for file action provider token (supports both direct and async providers).\n */\nexport type AXPFileActionProviderToken =\n | AXPFileActionProvider\n | Promise<AXPFileActionProvider>;\n\n/**\n * File action provider interface.\n * Providers can add actions to the file uploader widget.\n */\nexport interface AXPFileActionProvider {\n /**\n * Unique key identifying this provider.\n * Should match the webhook key for backward compatibility: 'file-uploader.actions'\n */\n key: string;\n\n /**\n * Execute the provider to add actions.\n * @param payload The payload containing capabilities and current actions.\n * @returns The modified payload with new actions added.\n */\n execute(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> | AXCFileUploaderActionsPayload;\n\n /**\n * Priority for execution order (lower numbers execute first).\n * Defaults to 0 if not specified.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\n/**\n * Multi-provider injection token for file action providers.\n * Modules can provide multiple implementations using this token.\n */\nexport const AXP_FILE_ACTION_PROVIDER = new InjectionToken<AXPFileActionProviderToken[]>(\n 'AXP_FILE_ACTION_PROVIDER',\n);\n\n//#endregion\n","import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { AXPHookService } from '@acorex/platform/core';\nimport { AXP_FILE_ACTION_PROVIDER, AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderAction, AXCFileUploaderActionsPayload } from './file-actions.types';\n\n//#region ---- Service ----\n\n/**\n * Service for managing file uploader actions.\n * Aggregates actions from multiple providers and filters them based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPFileActionsService {\n //#region ---- Dependencies ----\n\n private readonly actionProviders = inject(AXP_FILE_ACTION_PROVIDER, { optional: true }) || [];\n private readonly hookService = inject(AXPHookService);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get all actions from providers, filtered based on plugin configuration.\n * Wraps the hook system for backward compatibility.\n * @param payload Initial payload with capabilities and plugin configuration.\n * @returns Filtered list of actions.\n */\n async getActions(payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderAction[]> {\n // First, run hook system for backward compatibility\n // Note: Hook system may still use old format with 'host', but we pass capabilities\n // Hook providers that need host will need to be migrated to use capabilities\n let hookPayload: any;\n try {\n hookPayload = await this.hookService.runAsync('file-uploader.actions', {\n ...payload,\n // For backward compatibility, hooks might expect 'host' but we're using capabilities\n // Old hook providers will need to be migrated\n });\n } catch (err) {\n // If hook fails, continue with new system\n console.warn('[AXPFileActionsService] Hook system failed, continuing with providers only', err);\n }\n\n // Merge hook actions into payload (if any)\n const mergedPayload: AXCFileUploaderActionsPayload = {\n ...payload,\n actions: hookPayload?.actions ?? payload.actions ?? [],\n };\n\n // Resolve all providers (handle both direct and Promise<provider>)\n const providers = await this.resolveProviders();\n\n // Filter providers by key\n const matchingProviders = providers\n .filter((p) => p.key === 'file-uploader.actions')\n .sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n\n // Execute providers sequentially (waterfall pattern)\n let currentPayload = { ...mergedPayload, actions: [...mergedPayload.actions] };\n for (const provider of matchingProviders) {\n try {\n currentPayload = await Promise.resolve(\n runInInjectionContext(this.injector, () => provider.execute(currentPayload)),\n );\n } catch (err) {\n console.error(`[AXPFileActionsService] Provider '${provider.key}' failed`, err);\n }\n }\n\n // Filter actions based on plugin configuration\n return this.filterActions(currentPayload.actions, payload.plugins, payload.excludePlugins);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Resolve all providers (handle both direct providers and Promise<provider>).\n */\n private async resolveProviders(): Promise<AXPFileActionProvider[]> {\n return Promise.all(\n this.actionProviders.map((p) => (p instanceof Promise ? p : Promise.resolve(p))),\n );\n }\n\n /**\n * Filter actions based on enabled plugins and exclude list.\n */\n private filterActions(\n actions: AXCFileUploaderAction[],\n enabledPlugins: { name: string; options?: unknown }[],\n excludePlugins: string[],\n ): AXCFileUploaderAction[] {\n const enabledPluginNames = enabledPlugins?.map((p) => p.name) ?? [];\n const excludedPluginNames = excludePlugins ?? [];\n\n return actions.filter((action) => {\n // Exclude if in exclude list\n if (excludedPluginNames.includes(action.plugin)) {\n return false;\n }\n\n // Include if global\n if (action.global === true) {\n return true;\n }\n\n // Include if plugin is explicitly enabled\n if (enabledPluginNames.length > 0 && enabledPluginNames.includes(action.plugin)) {\n return true;\n }\n\n // If no plugins are enabled, only show global actions\n if (enabledPluginNames.length === 0) {\n return !!action.global;\n }\n\n return false;\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex/platform/contracts';\n\n//#region ---- File Uploader Capabilities ----\n\n/**\n * Capabilities API provided to file action providers.\n * These methods allow actions to interact with the file uploader widget.\n */\nexport interface AXCFileUploaderCapabilities {\n /**\n * Get all current files in the uploader.\n */\n getFiles: () => AXPFileListItem[];\n\n /**\n * Replace all files in the uploader.\n */\n setFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Add new files to the uploader.\n */\n addFiles: (files: AXPFileListItem[]) => void;\n\n /**\n * Update files matching a predicate.\n */\n updateFile: (\n predicate: (f: AXPFileListItem) => boolean,\n updater: (f: AXPFileListItem) => AXPFileListItem,\n ) => void;\n\n /**\n * Remove a file from the uploader.\n */\n removeFile: (file: AXPFileListItem) => void;\n\n /**\n * Clear all files from the uploader.\n */\n clear: () => void;\n\n /**\n * Get a file by its ID.\n */\n getFileById: (id: string) => AXPFileListItem | undefined;\n\n /**\n * Update a file by its ID.\n */\n updateFileById: (id: string, next: Partial<AXPFileListItem>) => void;\n}\n\n//#endregion\n\n//#region ---- File Uploader Action ----\n\n/**\n * A file uploader action that can be added by providers.\n */\nexport interface AXCFileUploaderAction {\n /**\n * Unique identifier for the action/plugin.\n */\n plugin: string;\n\n /**\n * Whether this action is global (available even if plugin is not explicitly enabled).\n */\n global?: boolean;\n\n /**\n * Display text for the action (optional if textKey is provided).\n */\n text?: string;\n\n /**\n * Translation key for the action text (optional if text is provided).\n */\n textKey?: string;\n\n /**\n * Icon class for the action (e.g., 'fa-light fa-file-arrow-up').\n */\n icon?: string;\n\n /**\n * Action execution handler.\n * Receives capabilities to interact with the file uploader.\n * @param capabilities The capabilities API for file operations.\n */\n run: (capabilities: AXCFileUploaderCapabilities) => void | Promise<void>;\n}\n\n//#endregion\n\n//#region ---- File Uploader Actions Payload ----\n\n/**\n * Payload passed to file action providers.\n */\nexport interface AXCFileUploaderActionsPayload {\n /**\n * Enabled plugins configuration.\n */\n plugins: { name: string; options?: unknown }[];\n\n /**\n * List of plugin names to exclude.\n */\n excludePlugins: string[];\n\n /**\n * Capabilities API for interacting with the file uploader.\n */\n capabilities: AXCFileUploaderCapabilities;\n\n /**\n * Current list of actions (providers can add to this array).\n */\n actions: AXCFileUploaderAction[];\n\n /**\n * Widget options (optional, for accessing widget-specific settings).\n */\n options?: {\n /**\n * Whether multiple files are allowed.\n */\n multiple?: boolean;\n\n /**\n * Accepted file types (e.g., '.jpg,.png' or 'image/*').\n */\n accept?: string;\n };\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex/platform/contracts';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileActionProvider } from './file-actions.provider';\nimport { AXCFileUploaderActionsPayload, AXCFileUploaderCapabilities } from './file-actions.types';\n\nexport const UploadFromComputerActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 1, // Higher priority than upload-from-drive to show first\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const fileService = inject(AXFileService);\n\n // Capture widget options for use in the action\n const widgetOptions = payload.options;\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-from-computer',\n global: true,\n textKey: '@document-management:actions.upload-from-device',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n // Open file picker with widget options\n const files = await fileService.choose({\n multiple: widgetOptions?.multiple ?? true,\n accept: widgetOptions?.accept,\n });\n\n // If no files are selected, return\n if (files.length === 0) {\n return;\n }\n\n // Create file list items from selected files\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }) as AXPFileListItem,\n );\n\n // Add files using capabilities\n capabilities.addFiles(fileItems);\n },\n },\n ];\n\n return payload;\n },\n};\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPFileType } from './file-type.types';\n\nexport interface AXPFileTypeInfoProvider {\n items(): Promise<AXPFileType[]>;\n}\n\nexport const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken<AXPFileTypeInfoProvider[]>('AXP_FILE_TYPE_INFO_PROVIDER');\n\n@Injectable({ providedIn: 'root' })\nexport class AXPFileTypeProviderService implements AXPFileTypeInfoProvider {\n private providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });\n\n async items(): Promise<AXPFileType[]> {\n const items: AXPFileType[] = [];\n\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n items.push(...(await provider.items()));\n }\n }\n return items;\n }\n\n async get(name: string): Promise<AXPFileType | undefined> {\n return (await this.items()).find((c) => c.name == name);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AXPIntegrationProviderContext } from './integration-provider.context';\n\n//#region ---- Integration provider interface ----\n\nexport interface AXPIntegrationProvider {\n provide(context: AXPIntegrationProviderContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_PROVIDER = new InjectionToken<AXPIntegrationProvider[]>(\n 'AXP_INTEGRATION_PROVIDER',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\n//#endregion\n\n//#region ---- Integration runtime provider (lazy hooks) ----\n\nexport interface AXPIntegrationRuntimeProvider {\n readonly providerId: string;\n getHooks(): Promise<import('@acorex/platform/contracts').AXPIntegrationProviderRuntimeHooks>;\n}\n\nexport const AXP_INTEGRATION_RUNTIME_PROVIDER = new InjectionToken<AXPIntegrationRuntimeProvider[]>(\n 'AXP_INTEGRATION_RUNTIME_PROVIDER',\n {\n providedIn: 'root',\n factory: () => [],\n },\n);\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\n\n//#region ---- Integration provider context ----\n\nexport class AXPIntegrationProviderContext {\n //#region ---- State ----\n\n private readonly definitions = new Map<string, AXPIntegrationProviderDefinition>();\n\n //#endregion\n\n //#region ---- Builder API ----\n\n /**\n * Registers a provider definition. Throws when duplicate ids are registered.\n */\n register(definition: AXPIntegrationProviderDefinition): void {\n if (this.definitions.has(definition.id)) {\n throw new Error(\n `[AXPIntegrationProviderContext] Duplicate integration provider id '${definition.id}'.`,\n );\n }\n this.definitions.set(definition.id, definition);\n }\n\n //#endregion\n\n //#region ---- Accessors ----\n\n getDefinitions(): ReadonlyMap<string, AXPIntegrationProviderDefinition> {\n return this.definitions;\n }\n\n //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationProviderDefinition } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPIntegrationProviderContext } from './integration-provider.context';\nimport { AXP_INTEGRATION_PROVIDER, type AXPIntegrationProvider } from './integration.provider';\n\n//#region ---- Integration provider registry ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPIntegrationProviderRegistryService {\n //#region ---- Dependencies ----\n\n private readonly providers = inject(AXP_INTEGRATION_PROVIDER, { optional: true });\n\n //#endregion\n\n //#region ---- State ----\n\n private cache: Map<string, AXPIntegrationProviderDefinition> | null = null;\n\n //#endregion\n\n //#region ---- Public API ----\n\n async list(): Promise<AXPIntegrationProviderDefinition[]> {\n const map = await this.load();\n return Array.from(map.values());\n }\n\n async get(id: string): Promise<AXPIntegrationProviderDefinition | null> {\n const map = await this.load();\n return map.get(id) ?? null;\n }\n\n async getOrThrow(id: string): Promise<AXPIntegrationProviderDefinition> {\n const definition = await this.get(id);\n if (!definition) {\n throw new Error(`[AXPIntegrationProviderRegistry] Unknown integration provider '${id}'.`);\n }\n return definition;\n }\n\n clearCache(): void {\n this.cache = null;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private async load(): Promise<Map<string, AXPIntegrationProviderDefinition>> {\n if (this.cache) {\n return this.cache;\n }\n\n const context = new AXPIntegrationProviderContext();\n const providerList = this.providers ?? [];\n\n for (const provider of providerList) {\n const resolved: AXPIntegrationProvider =\n provider instanceof Promise ? await provider : provider;\n await resolved.provide(context);\n }\n\n this.cache = new Map(context.getDefinitions());\n return this.cache;\n }\n\n //#endregion\n}\n\n//#endregion\n","import type { AXPIntegrationAuthContext, AXPIntegrationProviderDefinition, AXPIntegrationResolvedCredentials, AXPIntegrationRuntimeContext, AXPIntegrationSecretPayload } from '@acorex/platform/contracts';\nimport { InjectionToken } from '@angular/core';\n\n//#region ---- Secret store token ----\n\nexport interface AXPIntegrationSecretRefInput {\n providerId: string;\n connectionId: string;\n tenantId: string;\n userId: string;\n authMethodType: string;\n}\n\nexport interface AXPIntegrationSecretStore {\n store(ref: AXPIntegrationSecretRefInput, payload: AXPIntegrationSecretPayload): Promise<string>;\n rotate(\n secretRef: string,\n context: AXPIntegrationAuthContext,\n payload: Partial<AXPIntegrationSecretPayload>,\n ): Promise<void>;\n resolve(secretRef: string, context: AXPIntegrationAuthContext): Promise<AXPIntegrationResolvedCredentials>;\n revoke(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n delete(secretRef: string, context: AXPIntegrationAuthContext): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_SECRET_STORE = new InjectionToken<AXPIntegrationSecretStore>(\n 'AXP_INTEGRATION_SECRET_STORE',\n);\n\n//#endregion\n\n//#region ---- Runtime service token ----\n\nexport interface AXPIntegrationWithClientOptions {\n providerId: string;\n connectionScope?: 'user' | 'tenant';\n connectionKey?: string;\n requiredCapabilities?: string[];\n requiredScopes?: string[];\n}\n\nexport abstract class AXPIntegrationRuntimeService {\n abstract getProvider(id: string): Promise<AXPIntegrationProviderDefinition>;\n abstract listProviders(): Promise<AXPIntegrationProviderDefinition[]>;\n abstract getConnection(\n options: AXPIntegrationWithClientOptions,\n ): Promise<import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto>;\n abstract withClient<T>(\n options: AXPIntegrationWithClientOptions,\n fn: (client: unknown, ctx: AXPIntegrationRuntimeContext) => Promise<T>,\n ): Promise<T>;\n abstract buildRuntimeContext(\n connection: import('@acorex/platform/contracts').AXPSafeIntegrationConnectionDto & { secretRef: string },\n ): Promise<AXPIntegrationRuntimeContext>;\n}\n\nexport interface AXPIntegrationOAuthStartInput {\n providerId: string;\n connectionScope: 'user' | 'tenant';\n connectionKey: string;\n displayName: string;\n redirectUri: string;\n tenantId: string;\n userId: string;\n scopes?: string[];\n}\n\nexport interface AXPIntegrationOAuthCompleteInput {\n providerId: string;\n state: string;\n code: string;\n}\n\nexport abstract class AXPIntegrationOAuthService {\n abstract startAuthorization(\n input: AXPIntegrationOAuthStartInput,\n ): Promise<{ redirectUrl: string; state: string }>;\n abstract completeCallback(input: AXPIntegrationOAuthCompleteInput): Promise<{ connectionId: string }>;\n}\n\nexport const AXP_INTEGRATION_OAUTH_SERVICE = new InjectionToken<AXPIntegrationOAuthService>(\n 'AXP_INTEGRATION_OAUTH_SERVICE',\n);\n\n//#endregion\n","import type { AXPSafeIntegrationConnectionDto } from '@acorex/platform/contracts';\nimport { InjectionToken } from '@angular/core';\n\n//#region ---- Connection established handler ----\n\n/**\n * Optional hook invoked after a connection is successfully established (OAuth callback or credentials connect).\n * Use to link provider-specific records (e.g. Jira/GitLab instance ↔ integration connection).\n */\nexport interface AXPIntegrationConnectionEstablishedHandler {\n readonly providerId: string;\n onEstablished(connection: AXPSafeIntegrationConnectionDto): Promise<void>;\n}\n\nexport const AXP_INTEGRATION_CONNECTION_ESTABLISHED = new InjectionToken<\n AXPIntegrationConnectionEstablishedHandler[]\n>('AXP_INTEGRATION_CONNECTION_ESTABLISHED', {\n providedIn: 'root',\n factory: () => [],\n});\n\n//#endregion\n","//#region ---- Integration barrel ----\n\nexport * from './integration.provider';\nexport * from './integration-provider.context';\nexport * from './integration-provider.registry.service';\nexport * from './integration-secret-store.token';\nexport * from './integration-connection-established.token';\n\n//#endregion\n","import { Injectable } from \"@angular/core\";\nimport {AXPLockGetInfoRequest, AXPLockInfo, AXPLockRequest, AXPUnLockRequest } from \"./lock.types\";\n\n@Injectable()\nexport abstract class AXPLockService {\n\n abstract lock(request: AXPLockRequest): Promise<AXPLockInfo>;\n\n abstract unlock(request: AXPUnLockRequest): Promise<void>;\n\n abstract check(request: AXPLockGetInfoRequest): Promise<boolean>;\n\n abstract getInfo(request: AXPLockGetInfoRequest): Promise<AXPLockInfo>;\n}\n","import { AXPMultiLanguageString, AXPStatusProvider, AXPStatusTransition } from '@acorex/platform/contracts';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\n\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for status providers\n * Use with multi: true to register multiple providers\n */\nexport const AXP_STATUS_PROVIDERS = new InjectionToken<AXPStatusProvider[]>('AXP_STATUS_PROVIDERS');\n\n//#endregion\n\n//#region ---- Provider Service ----\n\n/**\n * Service for managing status definitions from multiple providers\n * Similar to AXPTaskBadgeService pattern - no cache, direct access\n * \n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_STATUS_PROVIDERS,\n * useClass: TaskStatusProvider,\n * multi: true,\n * }\n * \n * // Example provider implementation:\n * export class TaskStatusProvider extends AXPStatusProvider {\n * readonly key = 'task-management.status';\n * readonly statuses = [\n * { name: 'todo', title: 'To Do', color: '#6b7280', icon: 'fa-light fa-circle', isInitial: true },\n * { name: 'in-progress', title: 'In Progress', color: '#3b82f6', icon: 'fa-light fa-play' },\n * { name: 'done', title: 'Done', color: '#10b981', icon: 'fa-light fa-check-circle', isFinal: true },\n * ];\n * readonly transitions = [\n * { from: 'todo', to: 'in-progress', title: 'Start', condition: '{{user.canEdit}}' },\n * { from: 'in-progress', to: 'done', title: 'Complete' },\n * ];\n * readonly defaultStatus = 'todo';\n * }\n * \n * // Later, get the status:\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPStatusDefinitionProviderService {\n //#region ---- Dependencies ----\n\n private providers: AXPStatusProvider[] = inject(AXP_STATUS_PROVIDERS, { optional: true }) ?? [];\n private commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- State ----\n\n private statusMap = new Map<string, AXPStatusProvider>();\n private initializationPromise: Promise<void> | null = null;\n private isInitialized = false;\n\n //#endregion\n\n //#region ---- Initialization ----\n\n /**\n * Initialize providers (resolve promises if needed)\n * Called lazily on first access\n */\n private async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n if (this.initializationPromise) {\n return this.initializationPromise;\n }\n\n this.initializationPromise = this._doInitialize();\n await this.initializationPromise;\n }\n\n private async _doInitialize(): Promise<void> {\n // Register all providers, resolving promises if needed\n for (const provider of this.providers) {\n let resolvedProvider: AXPStatusProvider;\n\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n resolvedProvider = await provider;\n } else {\n // If provider is a direct instance, use it directly\n resolvedProvider = provider;\n }\n\n if (this.statusMap.has(resolvedProvider.key)) {\n console.warn(`Status with key \"${resolvedProvider.key}\" already exists. Overwriting with new status.`);\n }\n\n this.statusMap.set(resolvedProvider.key, resolvedProvider);\n }\n\n this.isInitialized = true;\n }\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Get a status provider by key\n * Ensures initialization is complete before accessing the status map.\n * \n * @param key - Status key (e.g., 'task-management.status')\n * @returns Promise that resolves to status provider with all statuses and transitions, or undefined if not found\n * \n * @example\n * ```typescript\n * const status = await statusService.getStatus('task-management.status');\n * if (status) {\n * console.log('Statuses:', status.statuses);\n * console.log('Transitions:', status.transitions);\n * }\n * ```\n */\n public async getStatus(key: string): Promise<AXPStatusProvider | undefined> {\n await this.initialize();\n return this.statusMap.get(key);\n }\n\n /**\n * Execute a status transition workflow action\n * Uses transition.command if provided, otherwise defaults to Entity:UpdateStatus\n * Validates the transition is allowed before executing\n * \n * @param definitionKey - Status definition key\n * @param transition - The transition to execute\n * @param context - Context data for the command (must include entity name and id/ids)\n * @returns Promise that resolves when the command execution completes\n * \n * @example\n * ```typescript\n * await statusService.executeTransition(\n * 'task-management.status',\n * { from: 'todo', to: 'in-progress' },\n * { entity: 'TaskManagement.Task', id: '123', ...entityData }\n * );\n * ```\n */\n public async executeTransition(\n definitionKey: string,\n transition: AXPStatusTransition,\n context: Record<string, any>\n ): Promise<void> {\n await this.initialize();\n const provider = this.statusMap.get(definitionKey);\n if (!provider) {\n throw new Error(`Status provider with key \"${definitionKey}\" not found.`);\n }\n\n // Validate transition is allowed\n if (!this.isValidTransition(provider, transition.from, transition.to)) {\n throw new Error(`Invalid transition from \"${transition.from}\" to \"${transition.to}\"`);\n }\n\n // Determine which command to use\n let commandName: string;\n let commandOptions: Record<string, unknown>;\n\n if (transition.command) {\n // Use transition's explicit command\n commandName = transition.command.name;\n commandOptions = {\n ...(transition.command.options ?? {}),\n ...context,\n };\n } else {\n // Use default Entity:UpdateStatus command\n const entity =\n context['entity'] ?? context['entityName'] ?? context['__meta__']?.config?.name;\n if (!entity) {\n throw new Error('Entity name is required in context when using default status update command');\n }\n\n const id = context['id'];\n const ids = context['ids'];\n\n if (!id && !ids) {\n throw new Error('Either id or ids must be provided in context');\n }\n\n commandName = 'Entity:UpdateStatus';\n commandOptions = {\n entity,\n status: transition.to,\n statusField: context['statusField'] ?? context['fieldName'] ?? 'statusId',\n ...(id ? { id } : {}),\n ...(ids ? { ids } : {}),\n };\n }\n\n // Execute the command\n const result = await this.commandService.execute(commandName, commandOptions);\n\n if (!result?.success) {\n const text = this.commandMessageTextForError(result?.message?.text);\n throw new Error(text || 'Failed to execute status transition command');\n }\n }\n\n /**\n * Validate if a transition is allowed\n * Checks if the transition exists in the provider's transitions list\n */\n private isValidTransition(\n provider: AXPStatusProvider,\n from: string,\n to: string\n ): boolean {\n return provider.transitions.some(\n (transition) => transition.from === from && transition.to === to\n );\n }\n\n /**\n * Best-effort plain string for {@link Error} messages (no i18n lookup).\n */\n private commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n const values = Object.values(value as Record<string, string>);\n const first = values.find((v) => typeof v === 'string' && v.length > 0);\n return first ?? '';\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Types ----\n\n/** Structured hover-card payload for a tab (kept in memory; not session-persisted). */\nexport interface AXPTabStructuredPreview {\n /** Primary label (usually page title or breadcrumb trail). */\n title: string;\n /** Optional page description or secondary line. */\n subtitle?: string;\n /** Full router URL for the tab. */\n url: string;\n icon?: string;\n /** Whether the cached page reports unsaved user edits. */\n isDirty: boolean;\n /** Breadcrumb segments excluding home (for the hover card). */\n breadcrumbTrail: string[];\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPClipBoardService {\n //#region ---- Services & Dependencies ----\n\n private readonly toast = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n public async copy(title: string, value: string): Promise<void> {\n const copyText = document.createElement('input');\n copyText.type = 'text';\n copyText.select();\n copyText.setSelectionRange(0, 99999); // For mobile devices\n copyText.remove();\n await navigator.clipboard.writeText(value);\n\n const message = await this.translationService.translateAsync('@general:messages.clipboard.copied', {\n params: { title },\n });\n this.toast.success(message);\n }\n\n //#endregion\n}\n","//#region ---- Types ----\n\nexport type AXPGraphicDownloadFormat = 'svg' | 'png' | 'jpeg';\n\nexport interface AXPGraphicPrintContent {\n bodyMarkup: string;\n styleRule: string;\n}\n\nexport interface AXPPrintGraphicOptions {\n /** Used when the rendered element has no measurable size. */\n fallbackSize?: number;\n title?: string;\n imageAlt?: string;\n}\n\nexport interface AXPGraphicDownloadOptions {\n format: AXPGraphicDownloadFormat;\n filename: string;\n /** Used when rasterizing SVG or sizing canvas output. */\n fallbackSize?: number;\n}\n\n//#endregion\n\n//#region ---- Option normalization ----\n\n/**\n * Normalizes widget option values to a positive finite number\n * (plain number, numeric string, or editor object with `value` / `id`).\n */\nexport function normalizePositiveNumberOption(value: unknown, fallback: number): number {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n\n if (value != null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n if ('value' in record) {\n return normalizePositiveNumberOption(record['value'], fallback);\n }\n if ('id' in record) {\n return normalizePositiveNumberOption(record['id'], fallback);\n }\n }\n\n return fallback;\n}\n\n//#endregion\n\n//#region ---- DOM measurement ----\n\n/**\n * Resolves the rendered graphic size from a container (canvas or SVG).\n */\nexport function resolveGraphicElementSize(container: HTMLElement, fallback: number): number {\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement && canvas.width > 0) {\n return canvas.width;\n }\n\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n const svgWidth = svg.width?.baseVal?.value;\n if (svgWidth > 0) {\n return svgWidth;\n }\n\n const widthAttr = svg.getAttribute('width');\n if (widthAttr) {\n const parsed = Number.parseFloat(widthAttr);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n }\n\n return normalizePositiveNumberOption(fallback, fallback);\n}\n\n//#endregion\n\n//#region ---- SVG helpers ----\n\n/**\n * Serializes an SVG element to a string, optionally prefixing the XML declaration.\n */\nexport function serializeSvgElement(svg: SVGSVGElement, includeXmlDeclaration = true): string {\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(svg);\n\n if (includeXmlDeclaration && !source.match(/^<\\?xml/)) {\n source = `<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n${source}`;\n }\n\n return source;\n}\n\n//#endregion\n\n//#region ---- Graphic content resolution ----\n\n/**\n * Builds printable HTML body markup and CSS for an SVG or canvas inside a container.\n */\nexport function resolveGraphicPrintContent(\n container: HTMLElement,\n size: number,\n imageAlt = 'Graphic',\n): AXPGraphicPrintContent | undefined {\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n return {\n bodyMarkup: svg.outerHTML,\n styleRule: `svg { width: ${size}px !important; height: ${size}px !important; }`,\n };\n }\n\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement) {\n try {\n const dataUrl = canvas.toDataURL('image/png');\n if (!dataUrl.startsWith('data:image/png')) {\n return undefined;\n }\n\n return {\n bodyMarkup: `<img src=\"${dataUrl}\" width=\"${size}\" height=\"${size}\" alt=\"${imageAlt}\" />`,\n styleRule: `img { width: ${size}px !important; height: ${size}px !important; }`,\n };\n } catch {\n return undefined;\n }\n }\n\n return undefined;\n}\n\n//#endregion\n\n//#region ---- Browser download ----\n\n/**\n * Triggers a file download for the given blob via a temporary anchor element.\n */\nexport function triggerBrowserDownload(blob: Blob, filename: string): void {\n const link = document.createElement('a');\n const url = URL.createObjectURL(blob);\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n//#endregion\n\n//#region ---- Print ----\n\n/**\n * Opens the system print dialog for an SVG or canvas graphic inside the given container.\n */\nexport function printGraphicFromElement(container: HTMLElement, options: AXPPrintGraphicOptions = {}): void {\n const fallbackSize = options.fallbackSize ?? 200;\n const size = resolveGraphicElementSize(container, fallbackSize);\n const printContent = resolveGraphicPrintContent(container, size, options.imageAlt ?? 'Graphic');\n if (!printContent) {\n return;\n }\n\n const iframe = document.createElement('iframe');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.style.cssText = `position:fixed;left:0;top:0;width:${size}px;height:${size}px;border:0;visibility:hidden;`;\n document.body.appendChild(iframe);\n\n const printWindow = iframe.contentWindow;\n const doc = printWindow?.document;\n if (!printWindow || !doc) {\n iframe.remove();\n return;\n }\n\n const title = options.title ?? 'Print';\n\n doc.open();\n doc.write(`<!DOCTYPE html>\n<html>\n <head>\n <title>${title}</title>\n <style>\n body {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n margin: 0;\n }\n @media print {\n body {\n min-height: auto;\n }\n }\n ${printContent.styleRule}\n </style>\n </head>\n <body>${printContent.bodyMarkup}</body>\n</html>`);\n doc.close();\n\n const cleanup = (): void => {\n iframe.remove();\n };\n\n const triggerPrint = (): void => {\n printWindow.focus();\n printWindow.print();\n\n printWindow.addEventListener('afterprint', cleanup, { once: true });\n window.setTimeout(cleanup, 1000);\n };\n\n const image = doc.querySelector('img');\n if (image && !image.complete) {\n image.addEventListener('load', triggerPrint, { once: true });\n image.addEventListener('error', cleanup, { once: true });\n return;\n }\n\n requestAnimationFrame(triggerPrint);\n}\n\n//#endregion\n\n//#region ---- Download ----\n\n/**\n * Downloads an SVG or canvas graphic from a container as SVG, PNG, or JPEG.\n */\nexport function downloadGraphicFromElement(container: HTMLElement, options: AXPGraphicDownloadOptions): void {\n const size = resolveGraphicElementSize(container, options.fallbackSize ?? 200);\n\n if (options.format === 'svg') {\n downloadSvgGraphic(container, options.filename);\n return;\n }\n\n const mime = options.format === 'png' ? 'image/png' : 'image/jpeg';\n downloadRasterGraphic(container, mime, options.filename, size);\n}\n\nfunction downloadSvgGraphic(container: HTMLElement, filename: string): void {\n const svg = container.querySelector('svg');\n if (!(svg instanceof SVGSVGElement)) {\n return;\n }\n\n const source = serializeSvgElement(svg);\n triggerBrowserDownload(new Blob([source], { type: 'image/svg+xml;charset=utf-8' }), filename);\n}\n\nfunction downloadRasterGraphic(\n container: HTMLElement,\n mime: 'image/png' | 'image/jpeg',\n filename: string,\n size: number,\n): void {\n const canvas = container.querySelector('canvas');\n if (canvas instanceof HTMLCanvasElement) {\n const dataUrl = rasterizeCanvasToDataUrl(canvas, mime, size);\n if (dataUrl) {\n triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n }\n return;\n }\n\n const svg = container.querySelector('svg');\n if (svg instanceof SVGSVGElement) {\n rasterizeSvgToDataUrl(svg, mime, size, (dataUrl) => {\n triggerBrowserDownload(dataUrlToBlob(dataUrl), filename);\n });\n }\n}\n\nfunction rasterizeCanvasToDataUrl(\n canvas: HTMLCanvasElement,\n mime: 'image/png' | 'image/jpeg',\n size: number,\n): string | undefined {\n if (mime === 'image/png') {\n try {\n return canvas.toDataURL('image/png');\n } catch {\n return undefined;\n }\n }\n\n const outputCanvas = document.createElement('canvas');\n outputCanvas.width = size;\n outputCanvas.height = size;\n const ctx = outputCanvas.getContext('2d');\n if (!ctx) {\n return undefined;\n }\n\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, size, size);\n ctx.drawImage(canvas, 0, 0, size, size);\n\n try {\n return outputCanvas.toDataURL('image/jpeg');\n } catch {\n return undefined;\n }\n}\n\nfunction rasterizeSvgToDataUrl(\n svg: SVGSVGElement,\n mime: 'image/png' | 'image/jpeg',\n size: number,\n onReady: (dataUrl: string) => void,\n): void {\n const source = serializeSvgElement(svg);\n const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(source)}`;\n const img = new Image();\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n if (mime === 'image/jpeg') {\n ctx.fillStyle = '#ffffff';\n ctx.fillRect(0, 0, size, size);\n }\n\n img.onload = () => {\n ctx.drawImage(img, 0, 0, size, size);\n onReady(canvas.toDataURL(mime));\n };\n img.src = svgUrl;\n}\n\nfunction dataUrlToBlob(dataUrl: string): Blob {\n const [header, data] = dataUrl.split(',');\n const mime = header.match(/:(.*?);/)?.[1] ?? 'application/octet-stream';\n const binary = atob(data);\n const bytes = new Uint8Array(binary.length);\n\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n\n return new Blob([bytes], { type: mime });\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXNumberBoxModule } from '@acorex/components/number-box';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { afterNextRender, Component, linkedSignal, model, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDomToImageOptions } from './export.service';\n\n@Component({\n template: ` <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Resolution (px)</ax-label>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"width()\"\n (onValueChanged)=\"calculateRatio($event, 'width')\"\n name=\"Width\"\n >\n </ax-number-box>\n <ax-button [toggleable]=\"true\" [(selected)]=\"ratio\"\n ><ax-icon><i class=\"fa-solid fa-vector-square\"></i></ax-icon\n ></ax-button>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [decimals]=\"4\"\n [value]=\"height()\"\n (onValueChanged)=\"calculateRatio($event, 'height')\"\n name=\"Height\"\n >\n </ax-number-box>\n </div>\n\n <ax-label>Background color</ax-label>\n <ax-color-box [(ngModel)]=\"bgcolor\"></ax-color-box>\n\n <ax-label>Quality of image (50-100%)</ax-label>\n <ax-number-box\n [changeOnScroll]=\"true\"\n [minValue]=\"50\"\n [maxValue]=\"100\"\n [(ngModel)]=\"qualityComputed\"\n name=\"Quality\"\n >\n </ax-number-box>\n\n <ax-label>Scale</ax-label>\n <ax-number-box [changeOnScroll]=\"true\" [minValue]=\"1\" [(ngModel)]=\"scale\" name=\"scale\"> </ax-number-box>\n </div>\n\n <ax-footer>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"> </ax-button>\n <ax-button text=\"Print\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-print\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>`,\n imports: [\n FormsModule,\n AXCheckBoxModule,\n AXNumberBoxModule,\n AXTextBoxModule,\n AXLabelModule,\n AXDecoratorModule,\n AXButtonModule,\n AXColorBoxModule,\n ],\n})\nexport class AXMOrgChartPrintPage extends AXBasePageComponent {\n private data: AXPDomToImageOptions;\n\n protected ratio = signal(false);\n protected baseWidth = signal<number | undefined>(undefined);\n protected baseHeight = signal<number | undefined>(undefined);\n\n protected bgcolor = model<string>();\n protected width = model<number>();\n protected height = model<number>();\n protected quality = model<number>();\n protected qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);\n protected scale = model<number>();\n\n #init = afterNextRender(() => {\n this.bgcolor.set(this.data.bgcolor);\n\n this.width.set(this.data.width);\n this.baseWidth.set(this.data.width);\n\n this.height.set(this.data.height);\n this.baseHeight.set(this.data.height);\n\n this.quality.set(this.data.quality);\n this.scale.set(this.data.scale);\n });\n\n protected calculateRatio(event: AXValueChangedEvent, type: 'width' | 'height'): void {\n if (!this.ratio() || !event.isUserInteraction) return;\n const value = event.value;\n if (type === 'width') {\n const newHeight = Math.round((value / this.baseWidth()!) * this.baseHeight()! * 100) / 100;\n this.height.set(newHeight);\n this.width.set(value);\n } else {\n const newWidth = Math.round((value / this.baseHeight()!) * this.baseWidth()! * 100) / 100;\n this.width.set(newWidth);\n this.height.set(value);\n }\n }\n\n protected async handleClose(isCanceled = false) {\n this.close({\n bgcolor: this.bgcolor(),\n width: this.width(),\n height: this.height(),\n quality: this.qualityComputed() / 100,\n scale: this.scale(),\n isCanceled,\n });\n }\n}\n","// AXPPdfService\nimport { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMOrgChartPrintPage } from './export-popup';\nimport { triggerBrowserDownload } from './dom-graphic.util';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPExportService {\n popupService = inject(AXPopupService);\n async generateBlobFromElement(element: HTMLElement, blobOptions?: AXPDomToImageOptions): Promise<Blob> {\n const domtoimage = (await import('dom-to-image')).default;\n\n const originalWidth = element.scrollWidth;\n const originalHeight = element.scrollHeight;\n\n let popup: boolean | undefined,\n options: AXPDomToImageOptions = {},\n newOptions: AXPDomToImageOptions = {};\n\n if (blobOptions) {\n ({ popup, ...options } = blobOptions);\n }\n\n if (popup) {\n const result = await this.popupService.open(AXMOrgChartPrintPage, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Export Options',\n data: { data: options },\n });\n if (result.data.isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n newOptions = { ...options, ...result.data };\n }\n }\n\n return domtoimage.toBlob(element, {\n ...newOptions,\n width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),\n height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),\n style: {\n transform: `scale(${newOptions?.scale ?? 1})`,\n transformOrigin: 'top left',\n },\n });\n }\n\n download(blob: Blob, filename: string): void {\n triggerBrowserDownload(blob, filename);\n }\n}\n\nexport interface AXPDomToImageOptions {\n popup?: true;\n filter?: (node: Node) => boolean;\n bgcolor?: string;\n width?: number;\n height?: number;\n style?: {};\n quality?: number;\n imagePlaceholder?: string;\n cacheBust?: boolean;\n scale?: number;\n}\n","import { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPCleanNestedFilters(filters: AXDataSourceFilterOption[]): AXDataSourceFilterOption[] {\n return filters\n .map((filter) => {\n if (!filter) return undefined;\n if (filter.filters?.length) {\n const cleanedNestedFilters = AXPCleanNestedFilters(filter.filters);\n if (!filter.field && !filter.operator && cleanedNestedFilters.length === 0) {\n return undefined;\n }\n return {\n ...filter,\n filters: cleanedNestedFilters.filter(Boolean),\n };\n }\n if ((!filter.value && filter.value != false) || filter.value === 'unknown') {\n return undefined;\n }\n return filter;\n })\n .filter(Boolean) as AXDataSourceFilterOption[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPLanguage, AXPLocaleProfile } from './regional.types';\n\n/**\n * Narrow API for reading app locale profiles and active languages.\n * Implemented by locale-management; consumed by platform layout without importing the module (avoids circular deps).\n */\nexport interface AXPLocaleManagementPort {\n getLocaleProfiles(): Promise<AXPLocaleProfile[]>;\n getLanguages(): Promise<AXPLanguage[]>;\n}\n\nexport const AXP_LOCALE_MANAGEMENT_PORT = new InjectionToken<AXPLocaleManagementPort>('AXP_LOCALE_MANAGEMENT_PORT');\n","//#region ---- Versioning Types ----\n\nexport interface AXPVersionStream {\n id: string;\n entityType: string;\n entityId: string;\n createdAt: string;\n}\n\nexport enum AXVChangeType {\n Create = 'Create',\n Update = 'Update',\n Delete = 'Delete',\n}\n\nexport type CanonicalChangeOp = 'add' | 'remove' | 'replace' | 'rename' | 'metadata';\n\nexport interface CanonicalChange {\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface AXPVersionEntry {\n id: string;\n streamId: string;\n versionNumber: number;\n changeType: AXVChangeType;\n changedBy: string;\n changedAt: string;\n snapshotJson: unknown;\n patchFromPrevJson: CanonicalChange[];\n summary?: string;\n metadataJson?: unknown;\n}\n\nexport interface AXPVersionChange {\n id?: number;\n versionEntryId: string;\n path: string;\n op: CanonicalChangeOp;\n oldValue?: unknown;\n newValue?: unknown;\n}\n\nexport interface VersionedFileInfo {\n id: string;\n name: string;\n size: number;\n mime: string;\n hash: string;\n url?: string;\n thumbUrl?: string;\n}\n\n//#endregion\n\n//#region ---- Service Contract ----\n\nexport abstract class AXPVersioningService {\n abstract getStreamIdIfExists(entityType: string, entityId: string): Promise<string | null>;\n abstract listEntries(streamId: string, options?: { limit?: number; offset?: number }): Promise<AXPVersionEntry[]>;\n abstract getUiFriendlyDiff(streamId: string, v1: number, v2: number): Promise<Array<{ badge: string; path: string; summary: string; oldValue?: unknown; newValue?: unknown }>>;\n}\n\n//#endregion\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["merge","i2","i4","i1","i3","i1.AXPErrorHandlerRegistryService","i1.AXPKeyboardShortcutsHelpService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAEA;AACO,MAAM,+BAA+B,GAAG;AAC7C,IAAA,SAAS,EAAE,qBAAqB;;AAGlC;;ACPA;AAIA;;ACJA;AA8DA;AACO,MAAM,oDAAoD,GAAG;AAsBpE;;MClEa,+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;;;AC1BM,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;;ICbW;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,4BAAA,CAAA,GAAA,kDAA+E;AAC/E,IAAA,iBAAA,CAAA,eAAA,CAAA,GAAA,qCAAqD;AACrD,IAAA,iBAAA,CAAA,uBAAA,CAAA,GAAA,6CAAqE;AACrE,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;AACvE,IAAA,iBAAA,CAAA,gBAAA,CAAA,GAAA,gCAAiD;AACjD,IAAA,iBAAA,CAAA,aAAA,CAAA,GAAA,uCAAqD;AACvD,CAAC,EAdW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;;MCOhB,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,OAmBV,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;AACzC,YAAA,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,KAAK;YACzD,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;;ACzKD;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;AA8LzD,IAAA;AA5LS,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;AAEA,IAAA,MAAM,wBAAwB,GAAA;QAC5B,MAAM,YAAY,GAA4B,EAAE;AAEhD,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;AACnC,wBAAA,IAAI,OAAO,CAAC,mBAAmB,EAAE;AAC/B,4BAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;wBACnC;AACF,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,YAAY;IACrB;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;8GA/LW,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;;AAmMlC;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;;;AClOlC;AAaA;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;;MClFa,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;;MCrEY,kBAAkB,CAAA;AAU7B,IAAA,WAAA,GAAA;AATiB,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,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,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;AAC1B,YAAA,KAAK,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;AACzC,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,MAAM,IAAI,CAAC,0BAA0B,EAAE;AACvC,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;AAC1B,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAyB,wBAAwB,EAAE,KAAK,CAAC;IACpF;AAEQ,IAAA,MAAM,0BAA0B,GAAA;AACtC,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAU,iBAAiB,CAAC,SAAS,CAAC;YACtE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7C;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC;QACvC;IACF;AAEQ,IAAA,uBAAuB,CAAC,KAA6B,EAAA;AAC3D,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;YACrD;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7E;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;8GA9LW,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;;AAkMD,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;YACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;AACvC,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;YACL,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;AAClF,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;;ACnRD,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;;;ACAlC;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;;ACjLA;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;;ACpBA;;;;;AAKG;AAEG,MAAO,0BAA2B,SAAQ,iBAAiB,CAAA;8GAApD,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACgBD;MAKa,+BAA+B,CAAA;AAH5C,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAUxD,IAAA,CAAA,cAAc,GAAG,KAAK;AAqG/B,IAAA;;;AA/FC;;AAEG;AACH,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAU,iBAAiB,CAAC,qBAAqB,CAAC;QAC9F,OAAO,KAAK,KAAK,KAAK;IACxB;AAEA;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;;IAGA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI;IACpC;;IAGA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;;IAGA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC7B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACH,IAAA,MAAM,cAAc,CAAC,OAAgB,EAAE,OAAyC,EAAA;AAC9E,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,OAAO,IAAI,CAAC,cAAc;QAC5B;QAEA,IAAI,OAAO,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAA,OAAO,IAAI;QACb;;QAGA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;AACzD,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,cAAc;QAClC;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;IACF;;;IAMQ,MAAM,qBAAqB,CAAC,OAAyC,EAAA;QAC3E,IAAI,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5C,IAAI,SAAS,IAAI,OAAO,EAAE,qBAAqB,KAAK,KAAK,EAAE;AACzD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;AACA,QAAA,OAAO,SAAS;IAClB;IAEQ,MAAM,MAAM,CAAC,OAAyC,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACtD,OAAO,EAAE,KAAK,IAAI,yCAAyC,CAC5D;AACD,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACxD,OAAO,EAAE,OAAO,IAAI,2CAA2C,CAChE;QACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CACnD,KAAK,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,KAAK,EACL,QAAQ,CACT;AACD,QAAA,OAAO,YAAY,CAAC,MAAM,KAAK,IAAI;IACrC;8GAjHW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA/B,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,+BAA+B,cAF9B,MAAM,EAAA,CAAA,CAAA;;2FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACfD;AAEA;;;;AAIG;MAIU,gCAAgC,CAAA;;;AAoB3C,IAAA,WAAA,GAAA;;AAjBiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;QAMxC,IAAA,CAAA,OAAO,GAAsC,EAAE;QAC/C,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAOtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QAEnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC/E,YAAA,IAAI,KAAK,YAAY,aAAa,EAAE;AAClC,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;gBAClC;YACF;YAEA,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,iBAAiB,KAAK,UAAU,EAAE;AAC9E,gBAAA,KAAK,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;;;AAMA,IAAA,cAAc,CAAC,MAAuC,EAAA;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,gBAAgB,CAAC,EAAU,EAAA;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChE;;;;IAOA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEQ,MAAM,wBAAwB,CAAC,KAAsB,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE;YACpC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG;AAC3B,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;YAEzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC9D;YACF;AAEA,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QACvB;gBAAU;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;IACF;;;IAMQ,OAAO,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;IACxD;8GApGW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhC,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,gCAAgC,cAF/B,MAAM,EAAA,CAAA,CAAA;;2FAEP,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACdD;AAEA;;;;;;;AAOG;MAIU,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA+B;AACzD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAU;QAC5B,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,wBAAwB,GAAG,KAAK;AAyKzC,IAAA;;;AAnKC;;;;AAIG;IACH,MAAM,gCAAgC,CAAI,MAAwB,EAAA;AAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB;AAC9C,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,QAAA,IAAI;YACF,OAAO,MAAM,MAAM,EAAE;QACvB;gBAAU;AACR,YAAA,IAAI,CAAC,wBAAwB,GAAG,QAAQ;QAC1C;IACF;IAEA,0BAA0B,GAAA;QACxB,OAAO,IAAI,CAAC,wBAAwB;IACtC;;;;AAOA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO;IACrB;;;AAMA;;;AAGG;AACH,IAAA,YAAY,CAAC,UAAoB,EAAE,aAAA,GAA0B,EAAE,EAAA;AAC7D,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;AACrC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CACvF;AAED,QAAA,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;AAC/C,YAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG;YAC9D,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACxD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC5D,MAAM,mBAAmB,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAC7C,CAAC,SAAS,KACR,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAA,EAAG,SAAS,CAAA,CAAA,CAAG,CAAC,CACrF;YAED,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,IAAI,CAAC,mBAAmB,EAAE;AAC9D,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC/B;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC3B;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAI,GAAW,EAAA;AACjC,QAAA,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACvE,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAI,MAAM,CAAC;QAC9C;QAEA,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC7C,YAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG;AAC9D,YAAA,IAAI,kBAAkB,KAAK,aAAa,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAA,EAAG,aAAa,CAAA,CAAA,CAAG,CAAC,EAAE;AAC9F,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAI,MAAM,CAAC;YAC9C;QACF;AAEA,QAAA,OAAO,IAAI;IACb;;;AAMA;;;;AAIG;IACH,KAAK,CAAC,GAAW,EAAE,MAA2B,EAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IAC/B;AAEA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;IACtC;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,GAAG,CAAC,GAAW,EAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B;;AAGA,IAAA,KAAK,CAAC,GAAW,EAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B;;IAGA,KAAK,GAAA;QACH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;;;AAMQ,IAAA,qBAAqB,CAAI,MAA2B,EAAA;AAC1D,QAAA,MAAM,YAAY,GAAI,MAA4C,CAAC,YAAY;AAC/E,QAAA,OAAQ,YAAY,EAAE,QAAc,IAAI,IAAI;IAC9C;AAEQ,IAAA,aAAa,CAAC,MAAuC,EAAA;QAC3D,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AACA,QAAA,MAAM,YAAY,GAAI,MAA4C,CAAC,YAAY;AAC/E,QAAA,YAAY,EAAE,OAAO,IAAI;IAC3B;8GA5KW,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,cAFvB,MAAM,EAAA,CAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AChBD;SAEgB,sCAAsC,GAAA;IACpD,OAAO,CAAC,SAAS,KAAI;;;AAGnB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrE,QAAA,IAAI,QAAQ,EAAE,0BAA0B,EAAE,EAAE;AAC1C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,SAAS,CAAC,aAAa,EAAE;AAClC,IAAA,CAAC;AACH;AAEA;;ACnBA,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;AACzD,gBAAA,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aACvG;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;;AAEG;IACH,kBAAkB,GAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAA,CAAE;AAC7E,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,MAAM,UAAU,GAAA;;QAEd,UAAU,CAAC,MAAK;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC;QACpF,CAAC,EAAE,GAAG,CAAC;IACT;8GAjJW,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;;ACPA,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;;;MCEY,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;;;ACbD;MA6Ba,+BAA+B,GAAG,IAAI,cAAc,CAC/D,iCAAiC;AAGnC;;ACjCA;AAYA;AAEA;AAEA;;AAEG;MAEU,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;QAEmB,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAiF5D,IAAA;IA/EC,MAAM,MAAM,CAAC,SAAiC,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YACnE;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;QAC3C,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACxC,QAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AAE1D,QAAA,MAAM,OAAO,GAAsC;YACjD,EAAE,EAAE,eAAe,SAAS,CAAC,EAAE,CAAA,CAAA,EAAI,SAAS,CAAC,MAAM,CAAA,CAAE;YACrD,IAAI,EAAE,SAAS,CAAC,KAAK;YACrB,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,IAAI;YACJ,IAAI;YACJ,QAAQ;AACR,YAAA,QAAQ,EAAE;AACR,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAuB;gBACtE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAuB;AACtE,aAAA;AACD,YAAA,IAAI,EAAE;gBACJ,qBAAqB,EAAE,SAAS,CAAC,EAAE;gBACnC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM,EAAE,SAAS,CAAC,MAAM;AACxB,gBAAA,IAAI,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;AAC1B,aAAA;SACF;QAED,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC;IACrD;;AAIQ,IAAA,YAAY,CAAC,SAAiC,EAAA;AACpD,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS;AAElC,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,YAAY,CAAC,cAAc,KAAK,KAAK;QAC9C;AAEA,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE;AACxE,YAAA,OAAO,YAAY,CAAC,gBAAgB,KAAK,KAAK;QAChD;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,WAAW,CAAC,SAAiC,EAAA;AACnD,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE;YACjC,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC,UAAU,IAAI,wBAAwB;QACrF;QAEA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;AAC/C,QAAA,OAAO,UAAU,IAAI,SAAS,CAAC,KAAK;IACtC;AAEQ,IAAA,eAAe,CAAC,SAAiC,EAAA;AAIvD,QAAA,QAAQ,SAAS,CAAC,MAAM;AACtB,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjE,YAAA,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACvE,YAAA,KAAK,WAAW;gBACd,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACzD,YAAA;gBACE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,EAAE;;IAEnE;8GAjFW,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,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACnBlC;AAYA;AAEA;SAEgB,8BAA8B,GAAA;AAC5C,IAAA,OAAO,SAAS,gBAAgB,CAAC,IAAI,EAAE,EAAE;AAC3C;SAEgB,2BAA2B,CACzC,WAAmB,EACnB,OAA4C,EAC5C,SAA2C,EAAA;AAE3C,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,IAAA,MAAM,SAAS,GAA2B;QACxC,EAAE,EAAE,8BAA8B,EAAE;QACpC,WAAW;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;AACpB,QAAA,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,QAAA,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;AACpC,QAAA,GAAG,SAAS;KACb;AACD,IAAA,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ;IAElF,OAAO;AACL,QAAA,GAAG,SAAS;AACZ,QAAA,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,GAAG;AACrC,QAAA,SAAS,EAAE,SAAS,CAAC,SAAS,KAAK,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC;KACjE;AACH;AAEM,SAAU,gCAAgC,CAAC,KAAgC,EAAA;IAC/E,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC5D,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;AACnD;AAEM,SAAU,iCAAiC,CAAC,SAAiC,EAAA;AACjF,IAAA,QACE,gCAAgC,CAAC,SAAS,CAAC,SAAS,CAAC;AACrD,QAAA,gCAAgC,CAAC,SAAS,CAAC,SAAS,CAAC;AAEzD;AAEA;;AAEG;AACG,SAAU,iCAAiC,CAAC,SAAiC,EAAA;AACjF,IAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE;AACxF,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS;AACtE,IAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE;AACtE,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,GAAG,EAAE;AACzC,QAAA,OAAO,CAAC;IACV;IAEA,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAChF;AAEA,IAAA,MAAM,OAAO,GAAG,gCAAgC,CAAC,SAAS,CAAC;IAC3D,IAAI,OAAO,EAAE;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACnD;AAEA,IAAA,OAAO,mBAAmB;AAC5B;AAEA;;AAEG;AACG,SAAU,qCAAqC,CAAC,SAAiC,EAAA;AACrF,IAAA,MAAM,WAAW,GAAG,iCAAiC,CAAC,SAAS,CAAC;AAChE,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;AAC3C;AAEM,SAAU,kCAAkC,CAChD,OAAA,GAAuD,EAAE,EAAA;IAEzD,OAAO;AACL,QAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;AACzC,QAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;AACnC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;AACrC,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;AACrC,QAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;AACnD,QAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;AACnD,QAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;AACrC,QAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;AAClD,QAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;KAC/C;AACH;AAEM,SAAU,mCAAmC,CACjD,OAAA,GAAwD,EAAE,EAAA;IAE1D,OAAO;AACL,QAAA,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;QAC7B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU;AAC9B,QAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;KACpC;AACH;AAEM,SAAU,oCAAoC,CAAC,MAAoC,EAAA;IACvF,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ;AAC3E;AAEM,SAAU,uCAAuC,CAAC,MAAoC,EAAA;AAC1F,IAAA,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW;AACzD;AAEA;;AC5IA;AAOA;AAEA;AAEA;;AAEG;MAEU,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,yCAAyC,CAAC;AAoCzF,IAAA;;IAjCC,gBAAgB,CAAC,cAAkC,EAAE,SAAiC,EAAA;AACpF,QAAA,QACE,cAAc,KAAK,SAAS,CAAC,MAAM,IAAI,uCAAuC,CAAC,SAAS,CAAC,MAAM,CAAC;IAEpG;;IAGA,mBAAmB,CAAC,cAAkC,EAAE,SAAiC,EAAA;QACvF,OAAO,cAAc,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ;IAC7E;;AAGA,IAAA,MAAM,eAAe,CAAC,SAAiC,EAAE,MAAkB,EAAA;AACzE,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,MAAM,EAAE;IACV;;IAGA,MAAM,aAAa,CAAC,SAAiC,EAAA;AACnD,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC9B;;IAIQ,MAAM,MAAM,CAAC,SAAiC,EAAA;AACpD,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;QAClD;QAAE,OAAO,KAAc,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;QACvF;IACF;8GAlCW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvC,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,uCAAuC,cAD1B,MAAM,EAAA,CAAA,CAAA;;2FACnB,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACdlC;AA6EA;;AC7EA;AAEO,MAAM,gCAAgC,GAAG;AAC9C,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,IAAI,EAAE,yBAAyB;AAChC,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,mBAAmB,EAAE;AACnB,YAAA,IAAI,EAAE,sBAAsB;AAC5B,YAAA,KAAK,EAAE,4CAA4C;AACnD,YAAA,WAAW,EAAE,6CAA6C;AAC1D,YAAA,IAAI,EAAE,qBAAqB;AAC5B,SAAA;AACF,KAAA;;AAGH;SACgB,gCAAgC,GAAA;AAC9C,IAAA,OAAO,CAAA,EAAG,gCAAgC,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,gCAAgC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAChI;AAEA;;ACvBA;MAmBa,uCAAuC,GAAG,IAAI,cAAc,CACvE,yCAAyC;AAG3C;;ACvBA;AAMA;AAEA;AAEM,SAAU,mCAAmC,CACjD,SAAiC,EAAA;IAEjC,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;QAClD,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,WAAW,EAAE,SAAS,CAAC,WAAW;AAClC,QAAA,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;AAC5C,QAAA,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE;AAC7C,QAAA,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE;QACjD,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB;AACH;AAEM,SAAU,qCAAqC,CACnD,KAAwC,EAAA;AAExC,IAAA,MAAM,SAAS,GAAG,gCAAgC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;IAEjF,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS;QACT,SAAS,EAAE,gCAAgC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS;QACzE,WAAW,EAAE,gCAAgC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,SAAS;QAC7E,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB;AACH;AAEA;;ACxDA;AAKA;AAEA;AAEA;;AAEG;SACa,8BAA8B,GAAA;AAO5C,IAAA,MAAM,eAAe,GAAG,MAAM,CAA2B,EAAE,sFAAC;IAE5D,OAAO;AACL,QAAA,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE;AAExC,QAAA,MAAM,CAAC,SAAiC,EAAA;AACtC,YAAA,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC9B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAChE,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,oBAAA,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;gBAC7B;AACA,gBAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACtB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;AACvB,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,EAAU,EAAE,KAAsC,EAAA;AACtD,YAAA,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CACpE;QACH,CAAC;AAED,QAAA,IAAI,CAAC,EAAU,EAAA;AACb,YAAA,OAAO,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,CAAC;AAED,QAAA,MAAM,CAAC,EAAU,EAAA;YACf,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;KACF;AACH;AAEA;;ACpDA;AA0BA;AAEA;AAEA;;;AAGG;MAEU,wCAAwC,CAAA;AADrD,IAAA,WAAA,GAAA;QAEmB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEnF,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,uCAAuC,CAAC;QAEnE,IAAA,CAAA,UAAU,GAAG,gCAAgC,EAAE;QAExD,IAAA,CAAA,QAAQ,GAAG,KAAK;AAIP,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAA6D;;AAkF1F,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAChC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC,oFACtE;AA8DF,IAAA;;AA9IC,IAAA,MAAM,cAAc,GAAA;QAClB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE;QACvD;QAEA,MAAM,IAAI,CAAC,cAAc;IAC3B;IAEA,MAAM,2BAA2B,CAAC,YAA+B,EAAA;AAC/D,QAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAE3B,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7D,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnE;AAEA,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAC/C,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CACrF;IACH;;;AAMA,IAAA,mBAAmB,CAAC,WAAmB,EAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;QAErD,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;AAE3G,YAAA,MAAM,EAAE,CAAC,SAAiC,KAAU;AAClD,gBAAA,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AACvB,gBAAA,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACvC,CAAC;AAED,YAAA,KAAK,EAAE,CAAC,WAAmB,EAAE,KAAsC,KAAU;gBAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,gBAAA,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC;gBAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE;oBACd;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;oBACxE,KAAK,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,SAAS,EAAE,MAAK;AAC1D,wBAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;AACzB,wBAAA,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AACxC,oBAAA,CAAC,CAAC;oBACF;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;oBAC3E,KAAK,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC;gBACtD;AAEA,gBAAA,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACvC,CAAC;YAED,IAAI,EAAE,CAAC,WAAmB,KAAyC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AAE1F,YAAA,MAAM,EAAE,CAAC,WAAmB,KAAU;AACpC,gBAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;YACxC,CAAC;SACF;IACH;;;AAWQ,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAE7D,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,MAAM,SAAS,GAAG,qCAAqC,CAAC,GAAG,CAAC;AAE5D,YAAA,IAAI,uCAAuC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBAC7D,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC;YACF;AAEA,YAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QACrE;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,MAAM,gBAAgB,CAAC,SAAiC,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,SAAS,CAAC,CAAC;QACrG;QAAE,OAAO,KAAc,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;QACpF;IACF;IAEQ,MAAM,eAAe,CAAC,WAAmB,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;QAClE;QAAE,OAAO,KAAc,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,WAAW,EAAE,KAAK,CAAC;QAClF;IACF;AAEQ,IAAA,qBAAqB,CAAC,WAAmB,EAAA;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,8BAA8B,EAAE;YACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;QAC1C;AACA,QAAA,OAAO,KAAK;IACd;8GA1JW,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;;;AClClC;AAgCA;;AChCA;AAKA;AAEA;AAEA;;;AAGG;AACI,eAAe,gCAAgC,GAAA;AACpD,IAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,gCAAgC;IAE7D,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI;AACnB,QAAA,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI;AACvC,QAAA,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,KAAK;AACzC,QAAA,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI;AACvC,QAAA,OAAO,EAAE;AACP,YAAA,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC,KAAK;AAC9C,YAAA,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,WAAW;AACjD,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA;AACE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,6BAA6B;AACpC,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,8BAA8B;AACrC,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,yBAAyB;AAChC,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE,kCAAkC;AACzC,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;AACjC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;AACjC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;AACjC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC/B,aAAA;AACF,SAAA;KACF;AACH;AAEA;;ACzGA;AAMA;AAEA;MAEa,iCAAiC,GAAG,IAAI,cAAc,CACjE,mCAAmC;AAGrC;AAEA;AAEA;;;AAGG;MACmB,6BAA6B,CAAA;AAIlD;AAED;;AC5BA;AAQA;AAEA;MAEa,kCAAkC,GAAG,IAAI,cAAc,CAClE,oCAAoC;AAGtC;AAEA;AAEA;;;AAGG;MACmB,8BAA8B,CAAA;AAenD;AAED;;ACzCA;AAqBA;AAEA;MAGa,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAEhF,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;;;AAM9E,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,KAAK,2EAAC;AAE5B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAEhC,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAoC,MAChE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC5D;AAEQ,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,oCAAoC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC7G;QAEQ,IAAA,CAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACpF;AA6JF,IAAA;;;AAvJC,IAAA,mBAAmB,CAAC,SAAiC,EAAA;QACnD,MAAM,OAAO,GAAsC,EAAE;AACrD,QAAA,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS;AAE1C,QAAA,IAAI,YAAY,CAAC,WAAW,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE;AACpG,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB;QACA,IAAI,YAAY,CAAC,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE;AACjD,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB;QACA,IAAI,YAAY,CAAC,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB;QACA,IAAI,YAAY,CAAC,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE;AACjD,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB;AAEA,QAAA,OAAO,OAAO;IAChB;;;AAMA,IAAA,MAAM,MAAM,CAAC,WAAmB,EAAE,OAA4C,EAAA;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD;IAEA,MAAM,MAAM,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAA,oBAAA,CAAsB,CAAC;QACjE;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD;IAEA,MAAM,KAAK,CAAC,WAAmB,EAAA;AAC7B,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvD,YAAA,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAA,iBAAA,CAAmB,CAAC;QAC9D;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC;IACpD;IAEA,MAAM,MAAM,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzD,YAAA,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAA,kBAAA,CAAoB,CAAC;QAC/D;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAO,CAAC,WAAW,CAAC,CAAC;IACrD;IAEA,MAAM,KAAK,CAAC,WAAmB,EAAA;AAC7B,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAClE,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAA,kBAAA,CAAoB,CAAC;QAC/D;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAM,CAAC,WAAW,CAAC,CAAC;IACpD;IAEA,MAAM,OAAO,CAAC,WAAmB,EAAA;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC;YACpD;QACF;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD;AAEA,IAAA,eAAe,CAAC,SAAiC,EAAA;AAC/C,QAAA,QACE,SAAS,CAAC,YAAY,CAAC,SAAS;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,CAAC;IAElF;AAEA,IAAA,MAAM,cAAc,CAAC,WAAmB,EAAE,OAA0B,EAAA;QAClE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AACA,QAAA,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D;IAEA,MAAM,YAAY,CAAC,WAAmB,EAAA;AACpC,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3D;AAEA,IAAA,MAAM,SAAS,CAAC,WAAmB,EAAE,MAAuC,EAAA;QAC1E,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC9B;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC7B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC9B;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC7B;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC/B;AACF,YAAA;gBACE;;IAEN;;;AAMQ,IAAA,cAAc,CAAC,WAAmB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC;IAC7E;AAEQ,IAAA,eAAe,CAAC,WAAmB,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,CAAA,mBAAA,CAAqB,CAAC;QACrF;AACA,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,gBAAgB,CAAC,WAAmB,EAAA;AAI1C,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC;YAC/E,IAAI,SAAS,EAAE;AACb,gBAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;YAChC;QACF;AACA,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,CAAA,eAAA,CAAiB,CAAC;IACxE;IAEQ,MAAM,GAAG,CAAI,EAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI;YACF,OAAO,MAAM,EAAE,EAAE;QACnB;gBAAU;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB;IACF;8GAnLW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,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,6BAA6B,cADhB,MAAM,EAAA,CAAA,CAAA;;2FACnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACzBlC;AA0BA;AAEA;MAUa,mCAAmC,CAAA;AARhD,IAAA,WAAA,GAAA;;AAWmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC;;;AAMzE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAA0B;QAE/C,IAAA,CAAA,eAAe,GAAG,MAAM,EAAQ;QAEhC,IAAA,CAAA,WAAW,GAAG,MAAM,EAAQ;;;AAMT,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAyC,IAAI,oFAAC;;;AAMpE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA,CAAE,kFAAC;AAEvD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;AACxB,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,mBAAmB;AAC5B,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,6BAA6B;AACtC,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,mBAAmB;AAC5B,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,0BAA0B;AACnC,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,gCAAgC;AACzC,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,iBAAiB;AAC1B,gBAAA;AACE,oBAAA,OAAO,wBAAwB;;AAErC,QAAA,CAAC,iFAAC;AAEiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;AACxB,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,QAAQ;AACjB,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,SAAS;AAClB,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,SAAS;AAClB,gBAAA;AACE,oBAAA,OAAO,SAAS;;AAEtB,QAAA,CAAC,oFAAC;AAEiB,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,oCAAoC,CAAC,SAAS,CAAC,MAAM,CAAC;AAC/D,QAAA,CAAC,sFAAC;AAEiB,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AACzD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW;AAChE,QAAA,CAAC,8FAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,uBAAuB,EAAE,GAAG,eAAe,GAAG,aAAa,mFACjE;AAEkB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ;AACrC,YAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACtB,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;YAC7C;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,oFAAC;AAEiB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,kFAAC;QAEhF,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE3F,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,8EAAC;AAEhF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,QACE,CAAC,CAAC,SAAS,CAAC,UAAU;gBACtB,CAAC,CAAC,SAAS,CAAC,WAAW;gBACvB,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC;AAE7B,QAAA,CAAC,kFAAC;AAsEH,IAAA;;;AAhEW,IAAA,cAAc,CAAC,MAAuC,EAAA;QAC9D,OAAO,CAAA,sCAAA,EAAyC,MAAM,CAAA,CAAE;IAC1D;AAEU,IAAA,gBAAgB,CAAC,MAAuC,EAAA;AAChE,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,OAAO;QAChB;AACA,QAAA,OAAO,SAAS;IAClB;AAEU,IAAA,iBAAiB,CAAC,MAAuC,EAAA;QACjE,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,SAAS;AAClB,YAAA;AACE,gBAAA,OAAO,SAAS;;IAEtB;;;AAMU,IAAA,MAAM,WAAW,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB;QACF;AACA,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;QAC5D;IACF;IAEU,MAAM,QAAQ,CAAC,MAAuC,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC;AAC7D,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC7B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;QAC7D;gBAAU;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B;IACF;AAEU,IAAA,gBAAgB,CAAC,MAAuC,EAAA;AAChE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AACpC,QAAA,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM;IAC/C;AAEU,IAAA,eAAe,CAAC,MAAuC,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,MAAM;IACxC;8GAjKW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtChD,qqEA8DA,EAAA,MAAA,EAAA,CAAA,wjFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAExF,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,mBAGxB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,qqEAAA,EAAA,MAAA,EAAA,CAAA,wjFAAA,CAAA,EAAA;;;AEpCtG;AAiBA;AAEA;AAEA,MAAM,oBAAoB,GAAiD;AACzE,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,CAAC;CACb;AAED;AAEA;MAUa,oCAAoC,CAAA;AARjD,IAAA,WAAA,GAAA;;QAWE,IAAA,CAAA,mBAAmB,GAAG,MAAM,EAAU;QAEtC,IAAA,CAAA,cAAc,GAAG,MAAM,EAAQ;;;AAMZ,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC;;;AAMxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACnC,aAAA,MAAM,CACL,CAAC,SAAS,KACR,oCAAoC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ;AAE1F,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACtB,YAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3F,YAAA,IAAI,YAAY,KAAK,CAAC,EAAE;AACtB,gBAAA,OAAO,YAAY;YACrB;AACA,YAAA,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC7D,CAAC,CAAC,wFACH;AAGF,IAAA;8GAjCY,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,qLC1CjD,i4BAsBA,EAAA,MAAA,EAAA,CAAA,2xBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDkBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,+BAAE,mCAAmC,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErE,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBARhD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,eAAA,EAGzB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,mBAAmB,EAAE,mCAAmC,CAAC,EAAA,QAAA,EAAA,i4BAAA,EAAA,MAAA,EAAA,CAAA,2xBAAA,CAAA,EAAA;;;AExCnF;AAiBA;AAEA;MAUa,mCAAmC,CAAA;AARhD,IAAA,WAAA,GAAA;;AAWmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC;;;AAMxD,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,kBAAkB,8EAAC;;;AAMrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW;QAE/C,IAAA,CAAA,QAAQ,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,+EACvD;QAEkB,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,2FACzD;AAEkB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK;AAC5B,sBAAE;sBACA,oDAAoD;YAC1D;AAEA,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK;AAC5B,kBAAE;kBACA,6CAA6C;AACnD,QAAA,CAAC,mFAAC;AAEiB,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;AACnD,YAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7E,SAAA,CAAC,sFAAC;AAWJ,IAAA;;;IALW,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE;IACzB;8GAjDW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAST,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCzD,8yBAoBA,EAAA,MAAA,EAAA,CAAA,2dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,8XAAE,oCAAoC,EAAA,QAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE1G,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,mBAGxB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,oCAAoC,CAAC,EAAA,QAAA,EAAA,8yBAAA,EAAA,MAAA,EAAA,CAAA,2dAAA,CAAA,EAAA;yFAWjF,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5BzD;AAEA;AAEA;;;AAGG;AACG,SAAU,eAAe,CAAC,IAAY,EAAA;AAC1C,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;IAC3B,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;AAChF,IAAA,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AACrE,IAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;AACvD,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAEpD,MAAM,WAAW,GAAG;AAClB,UAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAyB,CAAC,MAAM,EAAE,IAAI,KAAI;AACrE,YAAA,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACzC,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;YAC7D;AACA,YAAA,OAAO,MAAM;QACf,CAAC,EAAE,EAAE;UACL,SAAS;IAEb,OAAO;QACL,QAAQ;QACR,WAAW;QACX,QAAQ,EAAE,QAAQ,IAAI,SAAS;KAChC;AACH;AAEA;SACgB,kBAAkB,CAAC,MAAc,EAAE,IAAY,EAAE,MAAyB,EAAA;AACxF,IAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC;AACjE,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC/B,QAAA,GAAG,MAAM;QACT,WAAW;QACX,QAAQ;AACT,KAAA,CAAC;AACJ;AAEA;AACM,SAAU,mBAAmB,CAAC,GAAW,EAAA;AAC7C,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC;AAEA;AACM,SAAU,oBAAoB,CAAC,MAAc,EAAA;AACjD,IAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;AACxC;AAEA;AACM,SAAU,sBAAsB,CAAC,GAAW,EAAA;AAChD,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9C;AAEA;AACM,SAAU,2BAA2B,CAAC,MAAc,EAAA;AACxD,IAAA,OAAO,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C;AAEA;;;AAGG;AACG,SAAU,oCAAoC,CAClD,MAAc,EACd,WAAsD,EAAA;AAEtD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;AACtB,IAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;QAC7B;IACF;AAEA,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC;AAC9C,IAAA,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC7B,WAAW;AACX,QAAA,mBAAmB,EAAE,OAAO;AAC5B,QAAA,UAAU,EAAE,IAAI;AACjB,KAAA,CAAC;AACJ;AAEA;;ACtFA,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;AAUpE;AAEA;;AAEG;AACH,SAAS,sBAAsB,CAAC,QAAkB,EAAA;IAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;AAEpC,IAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;AACvE,QAAA,OAAO,IAAI;IACb;IAEA,OAAO;AACL,QAAA,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,QAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,QAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,cAAc,EAAE,MAAM,GAAG,CAAC;KAC3B;AACH;AAEA,SAAS,uBAAuB,CAAC,IAAoB,EAAE,KAAqB,EAAA;IAC1E,OAAO,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAC/F;AAEA;;AAEG;AACH,SAAS,0BAA0B,CACjC,YAAsB,EACtB,YAAsB,EACtB,WAAmB,EAAA;AAEnB,IAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC;AACvD,IAAA,MAAM,aAAa,GAAG,sBAAsB,CAAC,YAAY,CAAC;AAE1D,IAAA,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE;AACxF,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,SAAS,GACb,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,cAAc;QAC/C,sBAAsB,CAAC,WAAW,CAAC;AACnC,QAAA,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAEnC,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AACrC;AAEA;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAC/B,QAAgB,EAChB,WAAmB,EACnB,2BAAqC,yBAAyB,EAAA;IAE9D,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/C,IAAA,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IAC9D,MAAM,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;IAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAEnF,IAAA,MAAM,WAAW,GAAG,0BAA0B,CAAC,YAAY,EAAE,YAAY,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;IAC7F,IAAI,WAAW,EAAE;AACf,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM;AACtC,IAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM;IAEtC,IAAI,mBAAmB,GAAG,UAAU;AACpC,IAAA,IAAI,UAAU,GAAG,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;AACrF,QAAA,mBAAmB,EAAE;IACvB;AAEA,IAAA,IAAI,UAAU,GAAG,mBAAmB,EAAE;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7C;IAEA,IAAI,QAAQ,GAAG,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE;YACvC,QAAQ,GAAG,KAAK;YAChB;QACF;IACF;IAEA,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7C;AAEA,IAAA,MAAM,cAAc,GAAG,mBAAmB,GAAG,UAAU;AACvD,IAAA,MAAM,YAAY,GAAG,mBAAmB,KAAK,UAAU;AAEvD,IAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC;AACvD,IAAA,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,YAAY,GAAG,IAAI;IAEvB,MAAM,cAAc,GAA4B,EAAE;IAClD,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;QAChC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnC,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE;YACzC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE;gBACpC,YAAY,GAAG,KAAK;gBACpB;YACF;QACF;IACF;IAEA,OAAO;AACL,QAAA,OAAO,EAAE,CAAC,YAAY,IAAI,cAAc,KAAK,YAAY;AACzD,QAAA,SAAS,EAAE,cAAc,IAAI,CAAC,YAAY;KAC3C;AACH;AAEA;;AAEG;AACG,SAAU,sBAAsB,CACpC,KAAoB,EACpB,WAAmB,EACnB,2BAAqC,yBAAyB,EAAA;IAE9D,IAAI,SAAS,GAAmC,IAAI;AACpD,IAAA,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,IAAA,MAAM,KAAK,GAAG,CAAC,SAAwB,EAAE,SAAwB,KAAU;AACzE,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd;YACF;AAEA,YAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,wBAAwB,CAAC;AACvF,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBACxB;YACF;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;YACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAEhF,YAAA,IAAI,mBAAmB,GAAG,YAAY,CAAC,MAAM;AAC7C,YAAA,IACE,YAAY,CAAC,MAAM,GAAG,CAAC;AACvB,gBAAA,wBAAwB,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACxE;AACA,gBAAA,mBAAmB,EAAE;YACvB;AAEA,YAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC;YACvD,IAAI,UAAU,EAAE;AACd,gBAAA,mBAAmB,GAAG,UAAU,CAAC,cAAc;YACjD;AAEA,YAAA,IAAI,mBAAmB,GAAG,mBAAmB,EAAE;gBAC7C,mBAAmB,GAAG,mBAAmB;AACzC,gBAAA,SAAS,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,SAAS,EAAE;YACxE;QACF;AACF,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAChB,IAAA,OAAO,SAAS;AAClB;;ACjMA;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;;ACveA;;;AAGG;MAEU,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAiHrD,IAAA;AA/GG;;;AAGG;AACH,IAAA,mBAAmB,CAAC,IAAiB,EAAE,SAAA,GAA2B,EAAE,EAAA;QAChE,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC/B,gBAAA,OAAO,KAAK;YAChB;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;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;8GAjHS,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;;;ACRlC;AAoBA;MAKa,8BAA8B,CAAA;AAH3C,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACtD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACpD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAoF3G,IAAA;;;AA9EC;;;AAGG;AACH,IAAA,IAAI,CAAC,KAAoB,EAAA;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAEnD,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,UAAU;AACtB,YAAA,EAAE,EAAE,sBAAsB;YAC1B,QAAQ,EAAE,2BAA2B,CAAC,MAAM;AAC5C,YAAA,KAAK,EAAE,2CAA2C;YAClD,IAAI,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI;YAC3C,SAAS;AACV,SAAA,CAAC;IACJ;;;AAMQ,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QAChD,MAAM,SAAS,GAAiC,EAAE;QAElD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;AACtD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;gBAC3C;YACF;AAEA,YAAA,KAAK,MAAM,QAAQ,IAAI,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACvE,gBAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACjC,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,CAAC,KAAK,CAAC;AACb,wBAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;AACtB,wBAAA,KAAK,EAAE,2CAA2C;wBAClD,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;wBACrD,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;AAC7C,wBAAA,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC;wBACvE,OAAO,EAAE,MAAK;AACZ,4BAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC9D,CAAC;AACF,qBAAA,CAAC;gBACJ;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,sBAAsB,CAC5B,KAAoB,EACpB,SAAA,GAA2B,EAAE,EAAA;QAE7B,MAAM,MAAM,GAA2B,EAAE;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,OAAO,GAAG,SAAS;AACzB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAC3C;AAEA,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAChF;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,gBAAgB,CAAC,KAA2B,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;AACnC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IAChF;8GAzFW,8BAA8B,EAAA,IAAA,EAAA,EAAA,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,cAF7B,MAAM,EAAA,CAAA,CAAA;;2FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACZM,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,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7F,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,gBAAgB,EAAE;AAChB,oBAAA,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI;AACzB,oBAAA,WAAW,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK;AACnD,iBAAA;AACF,aAAA,CAAC;QACJ,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;YAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC,IAAI;YAClD,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,IAAI,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,EAAE;AAC3E,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,MAAM,UAAU,GAAG,CAAC,WAAwB,EAAE,UAAuB,KAAa;AAChF,gBAAA,IACE,WAAW,CAAC,QAAQ,EAAE,IAAI,CACxB,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAClF,EACD;AACA,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,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,CAAC;KACF;AACH,CAAC,CACF,EACD,SAAS,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,8BAA8B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAI;AACjK,IAAA,IAAI,kBAAuB;AAE3B,IAAA,MAAM,cAAc,GAAG,CAAC,KAAoB,KAAU;AACpD,QAAA,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;AAC5B,QAAA,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;AACzC,IAAA,CAAC;IAED,OAAO;QACL,MAAM,GAAA;;YAEJ,CAAC,YAAW;AACV,gBAAA,cAAc,CAAC,MAAM,mBAAmB,CAAC,KAAK,EAAE,CAAC;YACnD,CAAC,GAAG;;YAGJ,kBAAkB,GAAG,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,YAAW;AACxE,gBAAA,cAAc,CAAC,MAAM,mBAAmB,CAAC,KAAK,EAAE,CAAC;AACnD,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,SAAS,GAAA;;YAEP,IAAI,kBAAkB,EAAE;gBACtB,kBAAkB,CAAC,WAAW,EAAE;YAClC;QACF,CAAC;KACF;AACH,CAAC,CAAC;;ACvHJ;AAEA;AACA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAE3C;;;;AAIG;AACG,SAAU,cAAc,CAAC,GAAW,EAAA;AACxC,IAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAC1C,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,IAAA,OAAO,QAAQ;AACjB;AAEA;AACM,SAAU,kBAAkB,CAAC,GAAW,EAAA;AAC5C,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE;AAC1B,IAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAA,CAAA,EAAI,OAAO,EAAE;AAC1E,IAAA,MAAM,CAAC,eAAe,EAAE,WAAW,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;AACvE,IAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;AAE5D,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG;AAC1D,IAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,WAAW,CAAC;IAEpD,IAAI,MAAM,GAAG,cAAc;IAC3B,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,IAAI,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE;IAC/B;IACA,IAAI,QAAQ,EAAE;AACZ,QAAA,MAAM,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;IAC1B;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,iBAAiB,CAAC,WAAmB,EAAA;IAC5C,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;IAC/C,MAAM,IAAI,GAAa,EAAE;IACzB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;QAC5B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;QACtE;AACF,IAAA,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE;AACX,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB;AAEA;AACM,SAAU,mBAAmB,CAAC,GAAW,EAAA;AAC7C,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACpD,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AAC7D,IAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC;AACjC;AAEA;;AClEA;AAIO,MAAM,gBAAgB,GAAG;AAEhC;AACO,MAAM,sBAAsB,GAAG;AAmCtC;;ACtCA;AAEA;AACM,SAAU,cAAc,CAAC,IAAyC,EAAA;AACtE,IAAA,OAAO,IAAI,GAAG,sBAAsB,CAAC,KAAK,IAAI;AAChD;AAEA;AAEA;AAEA;AACM,SAAU,mBAAmB,CAAC,QAAgC,EAAA;AAClE,IAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC;SACvB,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC;SAC3D,MAAM,CAAC,OAAO,CAAC;AAClB,IAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,GAAG,GAAG;AACzD;AAEA;AACM,SAAU,uBAAuB,CAAC,IAA4B,EAAA;IAClE,IAAI,KAAK,GAAG,IAAI;AAChB,IAAA,OAAO,KAAK,CAAC,UAAU,EAAE;AACvB,QAAA,KAAK,GAAG,KAAK,CAAC,UAAU;IAC1B;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;;AAGG;AACG,SAAU,4BAA4B,CAAC,IAA4B,EAAA;AACvE,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY;AAE/B,IAAA,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACtD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,YAAA,OAAO,mBAAmB,CAAC,QAAQ,CAAC;QACtC;IACF;AAEA,IAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC;AAClC;AAEA;AAEA;AAEA;;;AAGG;AACG,SAAU,gBAAgB,CAAC,MAAc,EAAE,GAAY,EAAA;IAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;AACxD,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9E,IAAA,IAAI,CAAC,GAAG,IAAI,QAAQ,KAAK,WAAW,EAAE;AACpC,QAAA,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtE,QAAA,OAAO,4BAA4B,CAAC,IAAI,CAAC;IAC3C;IAEA,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3E,IAAI,UAAU,EAAE;AACd,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,EAAE;AAC7D;AAWA;;AAEG;AACG,SAAU,+BAA+B,CAAC,MAAc,EAAE,QAAgB,EAAA;AAC9E,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG;IAC7H,MAAM,QAAQ,GAAG,UAAU,KAAK,GAAG,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAChF,IAAA,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;AAEhE,IAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAClB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YACpC,OAAO,KAAK,CAAC,IAAI;QACnB;IACF;AAEA,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI;AAC9C;AAEA,SAAS,qBAAqB,CAC5B,MAAc,EACd,QAAkB,EAClB,UAAkB,EAClB,aAAsC,EACtC,KAA0B,EAAA;IAE1B,IAAI,SAAS,GAA+B,IAAI;AAEhD,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC3E,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QAEA,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAA,CAAA,EAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,GAAG,GAAG;AACrE,QAAA,MAAM,UAAU,GAA4B,EAAE,GAAG,aAAa,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;AACvF,QAAA,MAAM,KAAK,GAAsB,EAAE,UAAU,EAAE,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AACnC,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC,QAAQ;AAEpD,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC1B,YAAA,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;AACpG,YAAA,IAAI,UAAU,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE;gBACtE,SAAS,GAAG,UAAU;YACxB;QACF;AAEA,QAAA,IAAI,SAAS,KAAK,QAAQ,CAAC,MAAM,EAAE;YACjC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;gBACrD,SAAS,GAAG,SAAS;YACvB;QACF;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEA,SAAS,cAAc,CACrB,SAAiB,EACjB,QAAkB,EAClB,UAAkB,EAAA;AAElB,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,QAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;IAChE;AAEA,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAClD,IAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,QAAA,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;IACxB;IAEA,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC/C,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE;AAC5C,YAAA,QAAQ,EAAE;YACV;QACF;AAEA,QAAA,OAAO,IAAI;IACb;IAEA,OAAO,EAAE,QAAQ,EAAE;AACrB;AAEA;;ACrLA;AAEO,MAAM,iCAAiC,GAAG;AAOjD;AACM,SAAU,uBAAuB,CAAC,QAAkB,EAAA;AACxD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC;AACzD;AAEA;AACM,SAAU,uBAAuB,CACrC,GAAiC,EACjC,aAAqB,EAAA;AAErB,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa;AAClC,IAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE;IAC9C;AAEA,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;IAC5C;IAEA,OAAO;AACL,QAAA,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KACpC;AACH;AAEA;;AC/BA;AAEA;;;AAGG;MAIU,oBAAoB,CAAA;AAHjC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAoD,EAAE,iFAAC;AAElF,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AA0FjD,IAAA;;;IApFC,UAAU,CAAC,GAAW,EAAE,OAAgC,EAAA;QACtD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AACnC,YAAA,GAAG,OAAO;YACV,CAAC,GAAG,GAAG,OAAO;AACf,SAAA,CAAC,CAAC;IACL;IAEA,YAAY,CAAC,GAAW,EAAE,KAAuC,EAAA;QAC/D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACjC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACd,oBAAA,OAAO,OAAO;gBAChB;gBAEA,OAAO;AACL,oBAAA,GAAG,OAAO;oBACV,CAAC,GAAG,GAAG;AACL,wBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;wBACxB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK;AAC/B,wBAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;AAC7C,qBAAA;iBACF;YACH;YAEA,OAAO;AACL,gBAAA,GAAG,OAAO;gBACV,CAAC,GAAG,GAAG;AACL,oBAAA,GAAG,QAAQ;AACX,oBAAA,GAAG,KAAK;AACT,iBAAA;aACF;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;IAC/B;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO;IAC1C;AAEA,IAAA,YAAY,CAAC,GAAW,EAAA;QACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACjC,YAAA,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE;AACrB,gBAAA,OAAO,OAAO;YAChB;AAEA,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC;AAChB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,aAAa,CAAC,IAAsB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAChB;QACF;QAEA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACjC,YAAA,MAAM,IAAI,GAA4C,EAAE,GAAG,OAAO,EAAE;YACpE,IAAI,OAAO,GAAG,KAAK;AAEnB,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC;oBAChB,OAAO,GAAG,IAAI;gBAChB;YACF;YAEA,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO;AACjC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACzB;8GA5FW,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;;;ACXD;AAEA,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAU;AAE3D,MAAM,sBAAsB,GAAa;IACvC,wBAAwB;IACxB,aAAa;CACd;AAED;;AAEG;AACG,SAAU,mBAAmB,CAAC,GAAW,EAAA;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACvD,IAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE;AACjC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,EAAE;AAEvE,IAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;AAC1E,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;AACtE,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;ACHA;AAEA,MAAM,sBAAsB,GAAG,aAAa;AAE5C;MAKa,uBAAuB,CAAA;;;AA6ClC,IAAA,WAAA,GAAA;;AA1CiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAChD,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC/D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;AAM/B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAoB,QAAQ,qFAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,CAAC,kFAAC;AACvB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAqB,EAAE,2EAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,mFAAC;QACnD,IAAA,CAAA,sBAAsB,GAAG,KAAK;;;;AAO7B,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAoB,MAAK;AACxD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;AAChC,gBAAA,OAAO,QAAQ;YACjB;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE;AAC9B,QAAA,CAAC,oFAAC;QAEO,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE9F,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAOjD,QAAA,KAAK,IAAI,CAAC,YAAY,EAAE;QACxB,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,kBAAkB,EAAE;IAC3B;;;;AAOA,IAAA,MAAM,QAAQ,CAAC,IAAY,EAAE,MAAyB,EAAA;AACpD,QAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAE/C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE;YAC7E,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC;QAChE;AAEA,QAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;AAC5C,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,MAAM,iBAAiB,CAAC,GAAW,EAAE,KAAc,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC1C;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;YACvC,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;YACpD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAE1B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;YACrC,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,aAAa,CAAC;YAC1D;QACF;QAEA,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAElD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,WAAW,EAAE;gBAChC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;YAC/C;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC;YAC7C,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,aAAa,CAAC;YACrD;QACF;;AAGA,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI;YACF,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;YACpD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;YACzC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;YAEzD,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,eAAe,CAAC,GAAG,KAAK,GAAG,EAAE;oBAC/B,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC9C;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC1B,IAAI,CAAC,cAAc,EAAE;gBACrB;YACF;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE;QACvB;gBAAU;AACR,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;QACrC;IACF;AAEA;;;;;;;AAOG;IACH,MAAM,cAAc,CAAC,GAAW,EAAE,WAAoB,EAAE,sBAAsB,GAAG,IAAI,EAAA;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;QACxD,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,WAAW,IAAI,GAAG,CAAC,GAAG;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,MAAM,QAAQ,GAAG,YAA0B;AACzC,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,YAAA,IAAI;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;YAC5C;oBAAU;AACR,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACrC;AACF,QAAA,CAAC;QAED,IAAI,sBAAsB,EAAE;YAC1B,MAAM,IAAI,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,QAAQ,CAAC;YACxE;QACF;QAEA,MAAM,QAAQ,EAAE;IAClB;;IAGA,MAAM,QAAQ,CAAC,GAAW,EAAA;QACxB,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B;;IAGA,MAAM,cAAc,CAAC,OAAe,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;aACnB,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO;aAClE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACnB,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM;aAC3C,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,GAAG,KAAK,gBAAgB,EAAE;YAC5B;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YACzB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAChC,gBAAA,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;AACnB,oBAAA,OAAO,GAAG;gBACZ;AAEA,gBAAA,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM;gBAC1B,OAAO;AACL,oBAAA,GAAG,GAAG;oBACN,MAAM;oBACN,QAAQ,EAAE,CAAC,MAAM;iBAClB;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACxC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA;;AAEG;IACH,WAAW,CAAC,aAAqB,EAAE,YAAoB,EAAA;AACrD,QAAA,IAAI,aAAa,KAAK,YAAY,EAAE;YAClC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE;QACzB,IAAI,aAAa,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE;YAC1G;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,QAAA,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;YACnC;QACF;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QACzD,IAAI,WAAW,GAAG,YAAY;AAE9B,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,WAAW,KAAK,CAAC,EAAE;gBACrB;YACF;AACA,YAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACnE;aAAO;AACL,YAAA,MAAM,kBAAkB,GAAG,eAAe,GAAG,CAAC;AAC9C,YAAA,IAAI,kBAAkB,IAAI,KAAK,CAAC,MAAM,EAAE;gBACtC;YACF;YACA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF;AAEA,QAAA,IAAI,aAAa,KAAK,WAAW,EAAE;YACjC;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AACvB,QAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,cAAc,EAAE;IACvB;;IAGA,YAAY,CAAC,GAAW,EAAE,eAAkC,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;YAC/C;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,SAAS;QAC7E,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC,eAAe,CAAC,GAAG,eAAe,EAAE,IAAI,EAAE;QAClH,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC5C;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC;IAC3C;;IAGA,WAAW,CAAC,GAAW,EAAE,IAAY,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;YAC/C;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;QAC9B,IAAI,CAAC,UAAU,EAAE;YACf;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC;IACrC;;;;IAOQ,MAAM,SAAS,CAAC,IAAc,EAAA;QACpC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACtB;QACF;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;YACxD,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM;QACvC,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YACxB;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,SAAS,CAAC;AAE7E,QAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;YAChC,IAAI,EAAE,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE;AAChD,gBAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5B;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YACxB;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/B,QAAA,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QACpE,MAAM,iBAAiB,GAAG,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5E,IAAI,eAAe,EAAE;YACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kCAAkC,CAAC,iBAAiB,EAAE,QAAQ,CAAC;YAC5F,IAAI,CAAC,SAAS,EAAE;gBACd;YACF;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,cAAc,EAAE;IACvB;;;AAMA;;;AAGG;IACK,MAAM,yBAAyB,CAAC,GAAW,EAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAqB,GAAG,CAAC;QACtF,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,EAAE;AAC/D,YAAA,OAAO,QAAQ,CAAC,gBAAgB,EAAE;QACpC;AAEA,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACvF,YAAA,qBAAqB,EAAE,KAAK;AAC7B,SAAA,CAAC;IACJ;;;AAMA;;;AAGG;AACK,IAAA,MAAM,kCAAkC,CAC9C,iBAAyB,EACzB,aAAiC,EAAA;QAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,aAAa,CAAC;AACpF,QAAA,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS;AAE9E,QAAA,IAAI,SAAiB;AACrB,QAAA,IAAI,SAAiB;QAErB,IAAI,QAAQ,EAAE;AACZ,YAAA,SAAS,GAAG,QAAQ,CAAC,GAAG;AACxB,YAAA,SAAS,GAAG,QAAQ,CAAC,GAAG;QAC1B;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC;YACtE,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG;AACpB,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG;QACtB;AAEA,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;YAC5D,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,OAAO,KAAK;YACd;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;QACrC;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,QAAA,OAAO,IAAI;IACb;;IAGQ,uBAAuB,CAAC,WAAmB,EAAE,aAAiC,EAAA;AACpF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzB,OAAO,CAAC,CAAC;QACX;AAEA,QAAA,IAAI,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE;AACtC,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,WAAW,GAAG,CAAC;IACxB;;;AAMA;;;AAGG;IACK,kBAAkB,GAAA;QACxB,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,SAAS,CAAC;AACtE,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAClC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,EACjC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAClC;AACH,QAAA,CAAC,CAAC;IACJ;;;IAMQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;YAClC,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACxD,QAAA,CAAC,CAAC;IACN;IAEQ,MAAM,mBAAmB,CAAC,GAAW,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAE1B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;YACzC;QACF;QAEA,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAElD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;YACvC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE;IACvB;;;AAMQ,IAAA,MAAM,YAAY,GAAA;QACxB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAoB,iBAAiB,CAAC,cAAc,CAAC;YAC7E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAS,iBAAiB,CAAC,WAAW,CAAC;AAChE,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAClE,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,MAAM,IAAI,CAAC,sBAAsB,EAAE;IACrC;IAEQ,mBAAmB,GAAA;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAC3F,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE;gBACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAsB;AAC/E,gBAAA,MAAM,OAAO,GAAsB,GAAG,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ;AAC3E,gBAAA,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,EAAE;AACrC,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAChC,oBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;wBACrC,IAAI,CAAC,YAAY,EAAE;oBACrB;yBAAO;AACL,wBAAA,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBACpE;gBACF;YACF;YAEA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAW,CAAC,CAAC;gBAClG,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,cAAc,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjF,YAAA,KAAK,IAAI,CAAC,sBAAsB,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;;;AAMQ,IAAA,MAAM,aAAa,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QACvC,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QAC5C,MAAM,OAAO,GAAG,gBAAgB;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC;QAE/D,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KACrB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KACZ,GAAG,CAAC,GAAG,KAAK;AACV,kBAAE;AACE,oBAAA,GAAG,GAAG;AACN,oBAAA,GAAG,EAAE,OAAO;oBACZ,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG,CAAC,KAAK;oBAC/E,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC;AACxD;AACH,kBAAE,GAAG,CACR,CACF;YACD;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC;AACvD,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,eAAe,EAAE,GAAG;SACrB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/G;AAEQ,IAAA,SAAS,CAAC,GAAqB,EAAA;QACrC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;YACnC;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YACzB,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC7C,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE;AACxB,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG;AAC5D,YAAA,CAAC,CAAC;YACF,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC3D,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,EAAE;IACvB;;AAGQ,IAAA,kBAAkB,CAAC,KAAyB,EAAA;AAClD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,CAAC;AAClE,QAAA,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK;IACzC;AAEQ,IAAA,qBAAqB,CAAC,KAAsC,EAAA;AAClE,QAAA,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AACzD,YAAA,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;AACxB,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,CAAC;IACV;;AAGQ,IAAA,iBAAiB,CAAC,KAAyB,EAAA;AACjD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC;QAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACnF,QAAA,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,CAAmB,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAExF,QAAA,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5F;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAEzB,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE;AAC7B,YAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,OAAO;iBAClC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,EAAE;AAC9E,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3D,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE3D,IAAI,CAAC,iBAAiB,EAAE;gBACtB;YACF;AAEA,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,iBAAiB,CAAC,GAAG,CAAC;QACtE;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB;AAEQ,IAAA,mBAAmB,CAAC,GAAW,EAAE,KAAc,EAAE,WAAoB,EAAA;AAC3E,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;QAC7D,OAAO;YACL,GAAG;YACH,GAAG;YACH,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACzC,YAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC9B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,eAAe,EAAE,GAAG;SACrB;IACH;;AAGQ,IAAA,aAAa,CAAC,GAAW,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,CAAC;QAChE;QAEA,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CACrB,CAAC,GAAG,KACF,GAAG,CAAC,GAAG,KAAK,gBAAgB;aAC3B,GAAG,CAAC,GAAG,KAAK,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,CACtF;IACH;;AAGQ,IAAA,aAAa,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACrC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,OAAO;IAC5C;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QACvC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC;IACrC;;AAGQ,IAAA,qBAAqB,CAAC,GAAW,EAAA;QACvC,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACvC,IAAI,CAAC,cAAc,EAAE;IACvB;;AAGQ,IAAA,0BAA0B,CAAC,IAAwB,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACrC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;IACtG;;IAGQ,aAAa,CAAC,OAAe,EAAE,KAAa,EAAA;AAClD,QAAA,IAAI,OAAO,KAAK,KAAK,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAC9B;QAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AACzB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC;YACtD,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,OAAO,KAAK;YACd;YAEA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC;AAClF,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,QAAA,CAAC,CAAC;IACJ;;AAGQ,IAAA,wBAAwB,CAAC,IAAwB,EAAA;AACvD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B;AAEzD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,GAAG,CAAC,GAAG,KAAK,gBAAgB,EAAE;AAChC,gBAAA,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBACxC;YACF;AAEA,YAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;YAC1D,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE;YAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;YAE/C,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,EAAE;AACtE,gBAAA,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC;YAC5C;QACF;AAEA,QAAA,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;IACpC;IAEQ,YAAY,CAAC,GAAW,EAAE,GAAW,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5F;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,aAAwB,EAAA;AACzE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KACrB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAChB,YAAA,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;AACnB,gBAAA,OAAO,GAAG;YACZ;AAEA,YAAA,MAAM,iBAAiB,GACrB,GAAG,CAAC,aAAa,KAAK,aAAa;iBAClC,GAAG,CAAC,aAAa,EAAE,MAAM,KAAK,aAAa,EAAE,MAAM;oBAClD,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,KAAK,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;YAErF,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,iBAAiB,EAAE;AAC5C,gBAAA,OAAO,GAAG;YACZ;YAEA,OAAO,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;QACzC,CAAC,CAAC,CACH;QACD,IAAI,CAAC,cAAc,EAAE;IACvB;IAEQ,aAAa,CAAC,GAAW,EAAE,IAAY,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,QAAQ,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7G;IAEQ,eAAe,CAAC,GAAW,EAAE,QAAiB,EAAA;AACpD,QAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;AACnE,QAAA,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;AACpB,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI;QACxB;AACA,QAAA,OAAO,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC;IAC7C;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAE,QAAQ,GAAG,oBAAoB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;QACnE,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAC/B;AACA,QAAA,OAAO,QAAQ;IACjB;IAEQ,eAAe,GAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACjD,QAAA,OAAO,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;IAC7D;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACjD,QAAA,OAAO,OAAO,CAAC,KAAK,IAAI,MAAM;IAChC;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,KAAK,KAAK,0CAA0C,EAAE;AACxD,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAChD,OAAO,KAAK,KAAK,SAAS;IAC5B;AAEQ,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;QAC1B,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACjD;AAEQ,IAAA,gBAAgB,CAAC,KAAc,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC;QACV;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD;;;IAMQ,iBAAiB,GAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;QAC3C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,CAAA,EAAG,sBAAsB,CAAA,CAAA,EAAI,MAAM,GAAG;IAC/C;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACpC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YAC7C;QACF;AAEA,QAAA,MAAM,OAAO,GAAuB;AAClC,YAAA,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;SAClC;AACD,QAAA,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtD;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACpC,IAAI,GAAG,EAAE;AACP,YAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;QAChC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;IACnC;AAEQ,IAAA,MAAM,sBAAsB,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC3C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;YAClC;QACF;QAEA,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;YAClC;QACF;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB;AACpD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAClD,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAChG;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACpD,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;YAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,gBAAgB;AACrG,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC;AAClE,YAAA,IAAI,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;AAC1F,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,gBAAA,IAAI;oBACF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC;gBAChD;wBAAU;AACR,oBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;gBACrC;YACF;QACF;AAAE,QAAA,MAAM;AACN,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;QACpC;IACF;8GA55BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,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,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCfY,sBAAsB,CAAA;;;AAwBjC,IAAA,WAAA,GAAA;;AArBiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACpC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;AAM/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAqC,IAAI,0FAAC;AACtE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,CAAC,qFAAC;AAC1B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,CAAC,oFAAC;AAOxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1F,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;AAClD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACxF,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;AACnD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,EACjD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;QAEJ,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAC/C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAEtD,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;gBACzC,SAAS,CAAC,MAAK;AACb,oBAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC;AACzE,gBAAA,CAAC,CAAC;gBACF;YACF;YAEA,SAAS,CAAC,MAAK;AACb,gBAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,mBAAmB,CAAC;AAClE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;;IAOA,sBAAsB,CAAC,KAAoB,EAAE,QAAgB,EAAA;AAC3D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;YACpB;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;AAClB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC1C,YAAA,IAAI,OAAO,EAAE,QAAQ,KAAK,QAAQ,EAAE;AAClC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YACpC;YACA;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,YAAA,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;AACzB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;AACpB,SAAA,CAAC;IACJ;;;IAMQ,MAAM,iBAAiB,CAC7B,IAAuB,EACvB,YAA2B,EAC3B,IAAoD,EACpD,mBAAuD,EAAA;AAEvD,QAAA,MAAM,UAAU,GACd,IAAI,KAAK;cACL,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,IAAI;cACtD,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC;AAE7D,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAE/D,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS;QACjC;IACF;AAEQ,IAAA,MAAM,wBAAwB,CACpC,YAA2B,EAC3B,IAAoD,EAAA;QAEpD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC;QAC1D,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7C;IAEQ,MAAM,uBAAuB,CACnC,mBAAuD,EAAA;QAEvD,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;QACrD,IAAI,mBAAmB,EAAE,QAAQ,KAAK,eAAe,IAAI,mBAAmB,CAAC,KAAK,EAAE;YAClF,OAAO,mBAAmB,CAAC,KAAK;QAClC;QAEA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACpD;IAEQ,MAAM,qBAAqB,CAAC,GAAW,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;AAC7B,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACnD;AAEQ,IAAA,MAAM,uBAAuB,GAAA;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW;AACnD,QAAA,MAAM,GAAG,GAAG,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QACzE,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,GAAG;IACtD;IAEQ,MAAM,oBAAoB,CAAC,KAAa,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO;QACzE;AAEA,QAAA,OAAO,OAAO;IAChB;IAEQ,kBAAkB,CAAC,UAAyB,EAAE,QAAgB,EAAA;AACpE,QAAA,MAAM,KAAK,GAAG,UAAU,EAAE,IAAI,EAAE;AAChC,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE;AAE3B,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE;AAChB,YAAA,OAAO,CAAA,EAAG,KAAK,CAAA,GAAA,EAAM,GAAG,EAAE;QAC5B;AAEA,QAAA,OAAO,KAAK,IAAI,GAAG,IAAI,QAAQ;IACjC;8GAnLW,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,cAFrB,MAAM,EAAA,CAAA,CAAA;;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCpBqB,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,EAAAG,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;;;ACHlC;AACM,MAAO,gBAAiB,SAAQ,KAAK,CAAA;IACzC,WAAA,CAAY,OAAO,GAAG,oBAAoB,EAAA;QACxC,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,kBAAkB;IAChC;AACD;;ACHD;AACO,MAAM,mBAAmB,GAAG;AAEnC;;;AAGG;AACI,MAAM,6BAA6B,GAAU;AAClD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,UAAU,EAAE,mBAAmB;;AAGjC;;;AAGG;SACa,wBAAwB,GAAA;AACtC,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,CAAC,6BAA6B,CAAC;AAC1C,SAAA;AACF,KAAA,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,yBAAyB,CAAC,IAAa,EAAA;IACrD,OAAO,IAAI,IAAI,IAAI;AACrB;AAEA;;AAEG;SACa,qBAAqB,CAAC,SAAiB,MAAM,CAAC,MAAM,CAAC,EAAA;IACnE,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAClE;;ACtCA;AACO,MAAM,sBAAsB,GAAG;AAEtC;;AAEG;SACa,yBAAyB,CAAC,SAAiB,MAAM,CAAC,MAAM,CAAC,EAAA;IACvE,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACrE;;ACMA;AAEA;;;AAGG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA6CnE,IAAA;;;AAvCC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,WAAW;IACpB;IAEA,MAAM,CAAC,KAAc,EAAE,OAA+C,EAAA;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE;AAChC,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAc,CAAC;AAChE,YAAA,OAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QAC/B;AAEA,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,gBAAA,MAAM,gBAAgB,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,SAAS;gBAC1E,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC;AACxD,gBAAA,OAAO,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI;YACnC;AACA,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC3D,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;AAEA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC,WAAW,EAAE;QAC5B;AAEA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IAC7B;8GA7CW,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;kBADjC;;;MCnBqB,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;;;ACHD;AACO,MAAM,qBAAqB,GAAG,cAAc;;MCQtC,oCAAoC,CAAA;AAAjD,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;IAgClD;IA9BE,MAAM,OAAO,CAAC,OAAmD,EAAA;QAC/D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,2BAA2B,CAAC;AAElG,QAAA,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC9B,YAAA,QAAQ,EAAE,OAAO,UAAkB,EAAE,QAAgB,KAAI;AACvD,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,EAAE,UAAU,EAAE,0BAA0B,EAAE,OAAO;oBACrF,UAAU;oBACV,QAAQ;AACT,iBAAA,CAAC,CAAC;gBAEH,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;;MCoBY,iCAAiC,CAAA;AA/C9C,IAAA,WAAA,GAAA;;AAkDmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC;;;AAMpD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAqC;AACxE,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0C;YAEjE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE;gBACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,4CAA4C;gBACxF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACvC,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;YAC5B;YAEA,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,QAAA,CAAC,6EAAC;AAWH,IAAA;;;AALW,IAAA,cAAc,CAAC,KAAa,EAAA;QACpC,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAClE;8GA5BW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,snDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzCoB,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,0BAAlE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FA2CR,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBA/C7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,mBACtB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,snDAAA,CAAA,EAAA;;;;;;;;AC7DH;AAQA;MAKa,+BAA+B,CAAA;;;AAmB1C,IAAA,WAAA,GAAA;;AAhBiB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACtD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;;;QAOpC,IAAA,CAAA,UAAU,GAAyB,IAAI;AAO7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/D;;;AAMA;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU;QACxB;AAEA,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpF,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;QAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,MAAK;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACxB,QAAA,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU;IACxB;;;AAMQ,IAAA,MAAM,aAAa,GAAA;QACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wCAAwC,CAAC;AACpG,QAAA,MAAM,SAAS,GAAG,MAAM,+EAA6C,CAAC,IAAI,CACxE,CAAC,MAAM,KAAK,MAAM,CAAC,iCAAiC,CACrD;AAED,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;YACtC,KAAK;AACL,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,oBAAoB,EAAE,IAAI;AAC1B,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;8GA/DW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA/B,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,+BAA+B,cAF9B,MAAM,EAAA,CAAA,CAAA;;2FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,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;;;AC1CH;AAYA;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;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;gBACE,IAAI,EAAE,+BAA+B,CAAC,SAAS;AAC/C,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;;AChGA;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;;ACtDA,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAE9E;AAEA;;AAEG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC7C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA4G5D,IAAA;;;AAtGC;;AAEG;AACH,IAAA,MAAM,SAAS,CAAC,KAA6B,EAAE,GAAW,EAAA;QACxD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACjD,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC;QAExD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE;AAChF,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,KAAK;IACd;;;IAMQ,UAAU,CAAC,KAA6B,EAAE,GAAW,EAAA;QAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAE5C,QAAA,IAAI,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/E;IAEQ,YAAY,CAAC,KAA6B,EAAE,GAAW,EAAA;QAC7D,IAAI,OAAO,GAAkC,KAAK;QAElD,OAAO,OAAO,EAAE;YACd,IAAI,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE;AAChC,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM;QAC1B;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,sBAAsB,CAAC,KAA6B,EAAA;QAC1D,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAA2B,KAAK,EAAE,oBAAoB,CAAC;QAC5G,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAA2B,KAAK,EAAE,iBAAiB,CAAC;QAEtG,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;AAC7D,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,EAAE;AAClF,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;AACvD,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,EAAE;AACnF,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,qBAAqB,CAAI,KAA6B,EAAE,GAAW,EAAA;QACzE,IAAI,OAAO,GAAkC,KAAK;QAElD,OAAO,OAAO,EAAE;YACd,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAkB;AAClD,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,GAAG,OAAO,CAAC,MAAM;QAC1B;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,IAA0C,EAAA;QAC9D,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;IAC5C;AAEQ,IAAA,YAAY,CAAC,GAAW,EAAA;QAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;AACpD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,EAAE;IACjD;8GA9GW,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;;;ACDlC;;;;;;AAMG;MAEU,iBAAiB,GAAkB,CAE9C,KAA6B,EAE7B,KAA0B,KAExB;AAEF,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhD,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAEhE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAI7B,IAAA,OAAO,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAEjD,KAAK,EAAE,EAEP,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAEzE,GAAG,CAAC,CAAC,SAAS,KAAuB;QAEnC,IAAI,SAAS,EAAE;AAEb,YAAA,OAAO,IAAI;QAEb;AAIA,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAEhD,CAAC,CAAC,CAEH;AAEH;;ACzDA;MACa,0BAA0B,GAAG,CAAC,YAAY,EAAE,iBAAiB;;MCD7D,+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;;MCRY,mCAAmC,GAAG,IAAI,cAAc,CACnE,qCAAqC;;MCR1B,kCAAkC,CAAA;AAA/C,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,WAAW,GAA0B,EAAE;AACvC,QAAA,IAAA,CAAA,aAAa,GAAqC,IAAI,GAAG,EAAE;IA6CrE;IA3CE,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;IAEA,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;;ACjFD;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,YAAY,GAAG,MAAM,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,IAAA,CAAA,KAAK,GAAiC,IAAI;AAuEnD,IAAA;AArES,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,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;QAC9E,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,CAAA,UAAA,CAAY,CAAC;QACrE;AACA,QAAA,OAAO,UAAU;IACnB;IAEO,MAAM,mBAAmB,CAAC,cAAsB,EAAA;AACrD,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;QAC5E,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAsD;QACxE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC9C,QAAA,OAAO,QAAQ;IACjB;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;8GAzEW,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;;;AClBlC;AAUA;AAEA;AAEA;;AAEG;SACa,qBAAqB,CACnC,KAAc,EACd,MAAc,EACd,kBAAwC,EAAA;IAExC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;AACpC,QAAA,OAAO,EAAE;IACX;IAEA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC3D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO;QAC7D;AACA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE;QACpF,OAAO,0BAA0B,CAAC,KAA+B,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;IACnF;AAEA,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACG,SAAU,uBAAuB,CACrC,KAAc,EACd,KAAa,EACb,MAAc,EACd,kBAAwC,EAAA;IAExC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD,IAAI,CAAC,CAAC,EAAE;AACN,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC5B,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK;AACvB,aAAA,MAAM,CAAC,CAAC,KAAK,KAAsB,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;AACnF,aAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjE;AAEA,IAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC/F,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzB;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAClC,KAAc,EACd,KAAa,EACb,MAAc,EACd,kBAAwC,EACxC,KAAK,GAAG,CAAC,EAAA;IAET,MAAM,QAAQ,GAAG,CAAC;IAClB,IAAI,KAAK,GAAG,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE;AACrE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACvG;IAEA,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACrD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC5E,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,EAAE;AACxC,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,OAAO,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,GAAG,CAAC,CAAC;AAClF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,KAAK;AACd;AAEA;AAEA;AAEA,SAAS,wBAAwB,CAAC,QAAgB,EAAA;AAChD,IAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM;AAC/C;AAEA;AACM,SAAU,8BAA8B,CAC5C,IAAa,EACb,kBAAyC,EAAA;IAEzC,OAAO;QACL,OAAO,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,EAA6B;KACjF;AACH;AAEA;;;AAGG;AACH,SAAS,oBAAoB,CAC3B,OAAgB,EAChB,MAAc,EACd,kBAAwC,EAAA;IAExC,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,IAAI,IAAI,EAAE;AACxC,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;AACrB,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE;IACvB;IACA,OAAO,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC;AACnE;AAEA;;AAEG;AACI,eAAe,6BAA6B,CACjD,QAAgB,EAChB,IAAa,EACb,mBAAkD,EAClD,MAAc,EACd,kBAAwC,EACxC,kBAAyC,EAAA;AAEzC,IAAA,MAAM,UAAU,GAAG,8BAA8B,CAAC,QAAQ,CAAC;IAC3D,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAEtE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,IACE,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC;AAC1C,QAAA,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,EAC5C;QACA,OAAO,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IACxD;IAEA,MAAM,KAAK,GAAG,2BAA2B;IACzC,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,SAAS,GAAG,CAAC;IAEjB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC9C,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAA,GAAA,EAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;QACrF,MAAM,IAAI,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC;AACnE,QAAA,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;IAClD;AAEA,IAAA,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACrC,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACG,SAAU,+BAA+B,CAC7C,KAAc,EACd,KAAa,EACb,MAAc,EACd,kBAAwC,EACxC,KAAK,GAAG,CAAC,EAAA;IAET,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE;AACpC,QAAA,OAAO,EAAE;IACX;IAEA,IAAI,IAAI,GAAG,EAAE;AACb,IAAA,MAAM,QAAQ,GAAG,CAAC,SAAkB,KAAI;AACtC,QAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,IAAI,EAAE;QAChF,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YACnF,IAAI,GAAG,IAAI;QACb;AACF,IAAA,CAAC;IAED,QAAQ,CAAC,KAAK,CAAC;AAEf,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,GAAG,CAAC,CAAC;YAClG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC/B,IAAI,GAAG,MAAM;YACf;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACrD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE;YAC3E,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,EAAE;gBACxC;YACF;AACA,YAAA,MAAM,MAAM,GAAG,+BAA+B,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,GAAG,CAAC,CAAC;YACnG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC/B,IAAI,GAAG,MAAM;YACf;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACI,eAAe,4BAA4B,CAChD,QAA4B,EAC5B,IAAa,EACb,MAAc,EACd,kBAAwC,EACxC,aAA8B,EAC9B,mBAAkD,EAClD,kBAAyC,EAAA;IAEzC,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACnC,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC;QACpE;AAEA,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;QAChE,OAAO,kCAAkC,CACvC,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CACpE;IACH;AAEA,IAAA,MAAM,SAAS,GAAG,MAAM,6BAA6B,CACnD,QAAQ,EACR,IAAI,EACJ,mBAAmB,EACnB,MAAM,EACN,kBAAkB,EAClB,kBAAkB,CACnB;IACD,OAAO,kCAAkC,CACvC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAC7D;AACH;AAEA;;MCvQsB,wBAAwB,CAAA;AAA9C,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAWpE;IARE,MAAM,MAAM,CAAC,IAAY,EAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,OAAO;QACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,CAAC,OAAO,KACN,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7E,YAAA,uBAAuB,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CACtF;IACH;AACD;;ACtBD;AAYA;AAEA;AAEA;;AAEG;AACI,eAAe,6BAA6B,CACjD,MAAiB,EACjB,UAAmB,EACnB,kBAAwC,EACxC,aAA8B,EAC9B,mBAAkD,EAClD,kBAAyC,EACzC,cAAc,GAAG,+BAA+B,EAAA;IAEhD,MAAM,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,cAAc,CAAC;AACrE,IAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/E,MAAM,SAAS,GAAG,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC,IAAI,EAAE;AAEzD,IAAA,MAAM,cAAc,GAAG,sCAAsC,CAAC,MAAM,CAAC;IACrE,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE;AACjD,IAAA,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CACjD,cAAc,EACd,UAAU,EACV,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,CACnB;AACD,IAAA,MAAM,WAAW,GAAG,kCAAkC,CACpD,OAAO,QAAQ,KAAK;AAClB,UAAE;UACA,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAChE;AAED,IAAA,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,EAAE;AAChD,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,WAAW,GAAG;AACxC;AAEA;;AAEG;AACI,eAAe,gCAAgC,CACpD,MAAgG,EAChG,IAAa,EACb,MAAc,EACd,kBAAwC,EACxC,aAA8B,EAC9B,mBAAkD,EAClD,kBAAyC,EAAA;AAEzC,IAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,QAAA,OAAO,EAAE;IACX;IAEA,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,sBAAsB,IAAI,EAAE,EAAE;AAC1D,QAAA,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CACjD,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,CACnB;AACD,QAAA,MAAM,IAAI,GAAG,kCAAkC,CAC7C,OAAO,QAAQ,KAAK;AAClB,cAAE;cACA,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAChE;AACD,QAAA,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI;QACb;IACF;IAEA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,IAAI,EAAE,EAAE;AACnD,QAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,IAAI,EAAE;QACtF,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,EAAE;AACX;AAEA;;ACzFA;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;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAC3D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAkJ3D,IAAA;IAhJC,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,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,OAAO;QACjE,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,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC;oBACjF,IAAI,CAAC,UAAU,EAAE;wBACf;oBACF;AAEA,oBAAA,MAAM,aAAa,GACjB,MAAM,CAAC,KAAK;AACZ,yBAAC,UAAU,CAAC,MAAM,CAAC;AACjB,8BAAE,MAAM,4BAA4B,CAChC,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,MAAM,CAAC,IAAI,EACX,MAAM,EACN,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,kBAAkB;8BAEzB,EAAE,CAAC;AACT,oBAAA,MAAM,mBAAmB,GACvB,MAAM,CAAC,WAAW;AAClB,yBAAC,UAAU,CAAC,MAAM,CAAC;AACjB,8BAAE,MAAM,4BAA4B,CAChC,UAAU,CAAC,MAAM,CAAC,WAAW,EAC7B,MAAM,CAAC,IAAI,EACX,MAAM,EACN,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,kBAAkB;8BAEzB,SAAS,CAAC;AAEhB,oBAAA,IAAI,SAAS,GAAG,kCAAkC,CAChD,OAAO,aAAa,KAAK;AACvB,0BAAE;AACF,0BAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAC1E;AAED,oBAAA,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,EAAE;AAC9C,wBAAA,SAAS,GAAG,MAAM,gCAAgC,CAChD,UAAU,CAAC,MAAM,EACjB,MAAM,CAAC,IAAI,EACX,MAAM,EACN,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,kBAAkB,CACxB;oBACH;AAEA,oBAAA,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,EAAE;wBAC9C;oBACF;oBAEA,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,CAAA,EAAG,UAAU,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAA,CAAE;AAC5G,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,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;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,QAAA,MAAM,WAAW,GACf,eAAe,CAAC,MAAM,KAAK;AACzB,cAAE;cACA,SAAS,CAAC,MAAM,CACd,CAAC,IAAI,KACH,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrF,gBAAA,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC3F,gBAAA,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CACpF;;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;8GAvJW,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;;;ACpBlC;AAyBA;AAEA;AAEA,MAAM,oBAAoB,GAAG,iBAAiB;AAE9C,MAAM,gCAAgC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU;AAE3E;AAEA;AAEA;AACM,SAAU,2BAA2B,CAAC,KAAc,EAAE,UAAkB,EAAA;IAC5E,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACjC,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,oBAAoB,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE;AACrF,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC3D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtD,MAAM,IAAI,GAAG,0BAA0B,CAAC,KAA+B,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;AAC3F,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,oBAAoB,IAAI,iCAAiC,CAAC,IAAI,CAAC,EAAE;AACrF,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,EAAE;AACX;AAEA;AAEA;AAEA,SAAS,kCAAkC,CACzC,aAAkD,EAAA;IAElD,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,SAAS;IAClB;IAEA,OAAO,aAAa,CAAC,6BAA6B,CAAC,IAAI,aAAa,CAAC,gCAAgC,CAAC;AACxG;AAEA,SAAS,uCAAuC,CAC9C,IAA6B,EAC7B,aAAkD,EAClD,aAA8B,EAC9B,UAAkB,EAAA;AAElB,IAAA,MAAM,aAAa,GAAG,kCAAkC,CAAC,aAAa,CAAC;IACvE,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,aAAa,EAAE,UAAU,CAAC;IAChF,IAAI,iBAAiB,EAAE;AACrB,QAAA,OAAO,iBAAiB;IAC1B;AAEA,IAAA,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,+BAA+B,CAAC,EAAE,UAAU,CAAC;IAC5G,IAAI,gBAAgB,EAAE;AACpB,QAAA,OAAO,gBAAgB;IACzB;IAEA,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE;AAC7D,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,8BAA8B,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC;QACrG,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,SAAS,EAAE,UAAU,CAAC;QAChF,IAAI,qBAAqB,EAAE;AACzB,YAAA,OAAO,qBAAqB;QAC9B;IACF;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,gCAAgC,EAAE;AACnD,QAAA,MAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC;QAC1E,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS;QAClB;IACF;AAEA,IAAA,OAAO,EAAE;AACX;AAEA;;;AAGG;AACG,SAAU,4BAA4B,CAAC,OAA+C,EAAA;AAC1F,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO;IAC1E,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,EAAE;IACX;IAEA,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC;QACvF,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,UAAU;QACnB;IACF;IAEA,OAAO,uCAAuC,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,CAAC;AAChG;AAEA;;AAEG;AACG,SAAU,6CAA6C,CAC3D,OAA4C,EAC5C,aAAkD,EAClD,aAA8B,EAC9B,UAAkB,EAAA;AAElB,IAAA,OAAO,4BAA4B,CAAC;AAClC,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,aAAa,EAAE,aAAa;QAC5B,aAAa;QACb,UAAU;AACX,KAAA,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,2BAA2B,CACzC,MAAoC,EACpC,OAA4C,EAC5C,aAA8B,EAC9B,UAAkB,EAAA;IAElB,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,IAAK,EAAgB,CAAC;AAE/E,IAAA,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,cAAc,EAAE;AAC9C,QAAA,MAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC;QAC7E,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS;QAClB;IACF;AAEA,IAAA,MAAM,SAAS,GAAG;QAChB,6BAA6B,CAAC,MAAM,CAAC;QACrC,GAAG,YAAY,CAAC,iBAAiB;AAClC,KAAA,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAyB,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9D,IAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,8BAA8B,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnG,MAAM,YAAY,GAAG,2BAA2B,CAAC,SAAS,EAAE,UAAU,CAAC;QACvE,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,YAAY;QACrB;IACF;AAEA,IAAA,OAAO,EAAE;AACX;AAEA;;AC5LA;;;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;;MCtCa,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;IA6DjD;IA3DE,MAAM,MAAM,CAAC,IAAY,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;QAC5E,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;IACK,eAAe,CAAC,SAAwB,EAAE,UAAkB,EAAA;QAClE,MAAM,MAAM,GAA4B,EAAE;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,OAAO;AAE/D,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;AACjC,gBAAA,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAC7E;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,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACpE,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;;MClEY,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;;;MCVQ,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;;ACLD;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;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAqBxD,IAAA;IAnBC,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,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;YAC5D;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAkB;QACvC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AACvE,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3B;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACzD;8GAtBW,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;;AA2BK,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;;;AC/FD;AAEA;AACO,MAAM,sCAAsC,GAAG;AAQtD;;ACLM,MAAO,+BAAgC,SAAQ,iBAAiB,CAAA;AADtE,IAAA,WAAA,GAAA;;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAgBjE,IAAA;IAdC,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,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE;IACF;8GAhBW,+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;;AAoBM,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;;;MCzBU,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;;;MCqHY,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,EAClD,sBAAuD,EACvD,iBAA6C,EAAA;AAE7C,QAAA,iBAAiB,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AACjD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACtB,YAAA,CAAC,EAAE;AACL,QAAA,CAAC,CAAC;IACJ;AA/CW,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,EAAA,EAAA,KAAA,EAAAG,+BAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,0BAAA,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,iEAzDxB,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,CA1EC,sBAAsB,CAAC,QAAQ,CAAC;AAC9B,gBAAA,iBAAiB,EAAE;AACjB,oBAAA;AACE,wBAAA,IAAI,EAAE,sBAAsB;AAC5B,wBAAA,SAAS,EAAE,mCAAmC;AAC/C,qBAAA;AACF,iBAAA;aACF,CAAC;YACF,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;kBA9E3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,sBAAsB,CAAC,QAAQ,CAAC;AAC9B,4BAAA,iBAAiB,EAAE;AACjB,gCAAA;AACE,oCAAA,IAAI,EAAE,sBAAsB;AAC5B,oCAAA,SAAS,EAAE,mCAAmC;AAC/C,iCAAA;AACF,6BAAA;yBACF,CAAC;wBACF,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;;;MC5JvB,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;;ACnCA;;AAEG;AACI,eAAe,+BAA+B,CACnD,eAAmC,EACnC,OAA4C,EAAA;IAE5C,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AAC5D,QAAA,eAAe,CAAC,GAAG,CAAU,iBAAiB,CAAC,4BAA4B,CAAC;AAC5E,QAAA,eAAe,CAAC,GAAG,CAAU,iBAAiB,CAAC,0BAA0B,CAAC;AAC3E,KAAA,CAAC;AAEF,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ,KAAK,SAAS,GAAG,OAAO,CAAC,QAAQ,GAAG,eAAe,KAAK,KAAK;AAChF,IAAA,MAAM,eAAe,GAAG,gBAAgB,KAAK,IAAI;AAEjD,IAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE;AAC5C;;MC3Ba,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;;ACnIO,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;;;MClDU,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;;;MCArB,wBAAwB,GAAG,IAAI,cAAc,CACxD,0BAA0B,EAC1B;AACE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;MAYU,gCAAgC,GAAG,IAAI,cAAc,CAChE,kCAAkC,EAClC;AACE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;AAGH;;AChCA;MAEa,6BAA6B,CAAA;AAA1C,IAAA,WAAA,GAAA;;AAGmB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAA4C;;IA2BpF;;;AArBE;;AAEG;AACH,IAAA,QAAQ,CAAC,UAA4C,EAAA;QACnD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YACvC,MAAM,IAAI,KAAK,CACb,CAAA,mEAAA,EAAsE,UAAU,CAAC,EAAE,CAAA,EAAA,CAAI,CACxF;QACH;QACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC;IACjD;;;IAMA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAGD;AAED;;AC/BA;MAGa,qCAAqC,CAAA;AADlD,IAAA,WAAA,GAAA;;QAImB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;QAMzE,IAAA,CAAA,KAAK,GAAyD,IAAI;AAmD3E,IAAA;;;AA7CC,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACjC;IAEA,MAAM,GAAG,CAAC,EAAU,EAAA;AAClB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;QAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;IAC5B;IAEA,MAAM,UAAU,CAAC,EAAU,EAAA;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,kEAAkE,EAAE,CAAA,EAAA,CAAI,CAAC;QAC3F;AACA,QAAA,OAAO,UAAU;IACnB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;;;AAMQ,IAAA,MAAM,IAAI,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK;QACnB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,6BAA6B,EAAE;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE;AAEzC,QAAA,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE;AACnC,YAAA,MAAM,QAAQ,GACZ,QAAQ,YAAY,OAAO,GAAG,MAAM,QAAQ,GAAG,QAAQ;AACzD,YAAA,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QACjC;QAEA,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK;IACnB;8GAzDW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArC,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,qCAAqC,cADxB,MAAM,EAAA,CAAA,CAAA;;2FACnB,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCkBrB,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B;MAeV,4BAA4B,CAAA;AAajD;MAmBqB,0BAA0B,CAAA;AAK/C;MAEY,6BAA6B,GAAG,IAAI,cAAc,CAC7D,+BAA+B;AAGjC;;MCtEa,sCAAsC,GAAG,IAAI,cAAc,CAEtE,wCAAwC,EAAE;AAC1C,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,EAAE;AAClB,CAAA;AAED;;ACrBA;AAQA;;MCJsB,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;;;ACED;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;;;ACrDlC;AAiBA;;MCVa,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAqBnE,IAAA;;;AAfQ,IAAA,MAAM,IAAI,CAAC,KAAa,EAAE,KAAa,EAAA;QAC5C,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;QACjB,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QAE1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,oCAAoC,EAAE;YACjG,MAAM,EAAE,EAAE,KAAK,EAAE;AAClB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7B;8GAtBW,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,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACND;AAuBA;AAEA;AAEA;;;AAGG;AACG,SAAU,6BAA6B,CAAC,KAAc,EAAE,QAAgB,EAAA;AAC5E,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AACpE,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,MAAM;QACf;IACF;IAEA,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAgC;AAC/C,QAAA,IAAI,OAAO,IAAI,MAAM,EAAE;YACrB,OAAO,6BAA6B,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;QACjE;AACA,QAAA,IAAI,IAAI,IAAI,MAAM,EAAE;YAClB,OAAO,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QAC9D;IACF;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEA;AAEA;AAEA;;AAEG;AACG,SAAU,yBAAyB,CAAC,SAAsB,EAAE,QAAgB,EAAA;IAChF,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;IAChD,IAAI,MAAM,YAAY,iBAAiB,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE;QAC3D,OAAO,MAAM,CAAC,KAAK;IACrB;IAEA,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,GAAG,YAAY,aAAa,EAAE;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK;AAC1C,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;QAC3C,IAAI,SAAS,EAAE;YACb,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAA,OAAO,MAAM;YACf;QACF;IACF;AAEA,IAAA,OAAO,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D;AAEA;AAEA;AAEA;;AAEG;SACa,mBAAmB,CAAC,GAAkB,EAAE,qBAAqB,GAAG,IAAI,EAAA;AAClF,IAAA,MAAM,UAAU,GAAG,IAAI,aAAa,EAAE;IACtC,IAAI,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC;IAE9C,IAAI,qBAAqB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACrD,QAAA,MAAM,GAAG,CAAA,yCAAA,EAA4C,MAAM,CAAA,CAAE;IAC/D;AAEA,IAAA,OAAO,MAAM;AACf;AAEA;AAEA;AAEA;;AAEG;AACG,SAAU,0BAA0B,CACxC,SAAsB,EACtB,IAAY,EACZ,QAAQ,GAAG,SAAS,EAAA;IAEpB,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,GAAG,YAAY,aAAa,EAAE;QAChC,OAAO;YACL,UAAU,EAAE,GAAG,CAAC,SAAS;AACzB,YAAA,SAAS,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAA,uBAAA,EAA0B,IAAI,CAAA,gBAAA,CAAkB;SAChF;IACH;IAEA,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;AAChD,IAAA,IAAI,MAAM,YAAY,iBAAiB,EAAE;AACvC,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;AACzC,gBAAA,OAAO,SAAS;YAClB;YAEA,OAAO;gBACL,UAAU,EAAE,aAAa,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,UAAA,EAAa,IAAI,CAAA,OAAA,EAAU,QAAQ,CAAA,IAAA,CAAM;AACzF,gBAAA,SAAS,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAA,uBAAA,EAA0B,IAAI,CAAA,gBAAA,CAAkB;aAChF;QACH;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEA;AAEA;AAEA;;AAEG;AACG,SAAU,sBAAsB,CAAC,IAAU,EAAE,QAAgB,EAAA;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACrC,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,IAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,IAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B;AAEA;AAEA;AAEA;;AAEG;SACa,uBAAuB,CAAC,SAAsB,EAAE,UAAkC,EAAE,EAAA;AAClG,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,GAAG;IAChD,MAAM,IAAI,GAAG,yBAAyB,CAAC,SAAS,EAAE,YAAY,CAAC;AAC/D,IAAA,MAAM,YAAY,GAAG,0BAA0B,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC/F,IAAI,CAAC,YAAY,EAAE;QACjB;IACF;IAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,IAAA,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,qCAAqC,IAAI,CAAA,UAAA,EAAa,IAAI,CAAA,8BAAA,CAAgC;AACjH,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAEjC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa;AACxC,IAAA,MAAM,GAAG,GAAG,WAAW,EAAE,QAAQ;AACjC,IAAA,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE;QACxB,MAAM,CAAC,MAAM,EAAE;QACf;IACF;AAEA,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO;IAEtC,GAAG,CAAC,IAAI,EAAE;IACV,GAAG,CAAC,KAAK,CAAC,CAAA;;;aAGC,KAAK,CAAA;;;;;;;;;;;;;;AAcV,MAAA,EAAA,YAAY,CAAC,SAAS;;;AAGpB,QAAA,EAAA,YAAY,CAAC,UAAU,CAAA;AACzB,OAAA,CAAA,CAAC;IACP,GAAG,CAAC,KAAK,EAAE;IAEX,MAAM,OAAO,GAAG,MAAW;QACzB,MAAM,CAAC,MAAM,EAAE;AACjB,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAAW;QAC9B,WAAW,CAAC,KAAK,EAAE;QACnB,WAAW,CAAC,KAAK,EAAE;AAEnB,QAAA,WAAW,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE,QAAA,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AAClC,IAAA,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;AACtC,IAAA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC5B,QAAA,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5D,QAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxD;IACF;IAEA,qBAAqB,CAAC,YAAY,CAAC;AACrC;AAEA;AAEA;AAEA;;AAEG;AACG,SAAU,0BAA0B,CAAC,SAAsB,EAAE,OAAkC,EAAA;AACnG,IAAA,MAAM,IAAI,GAAG,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC;AAE9E,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;AAC5B,QAAA,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC/C;IACF;AAEA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;IAClE,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE;AAEA,SAAS,kBAAkB,CAAC,SAAsB,EAAE,QAAgB,EAAA;IAClE,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,EAAE,GAAG,YAAY,aAAa,CAAC,EAAE;QACnC;IACF;AAEA,IAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC;AACvC,IAAA,sBAAsB,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,EAAE,QAAQ,CAAC;AAC/F;AAEA,SAAS,qBAAqB,CAC5B,SAAsB,EACtB,IAAgC,EAChC,QAAgB,EAChB,IAAY,EAAA;IAEZ,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;AAChD,IAAA,IAAI,MAAM,YAAY,iBAAiB,EAAE;QACvC,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QAC5D,IAAI,OAAO,EAAE;YACX,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;QAC1D;QACA;IACF;IAEA,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,IAAA,IAAI,GAAG,YAAY,aAAa,EAAE;QAChC,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,KAAI;YACjD,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;AAC1D,QAAA,CAAC,CAAC;IACJ;AACF;AAEA,SAAS,wBAAwB,CAC/B,MAAyB,EACzB,IAAgC,EAChC,IAAY,EAAA;AAEZ,IAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,QAAA,IAAI;AACF,YAAA,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QACtC;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;IACF;IAEA,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACrD,IAAA,YAAY,CAAC,KAAK,GAAG,IAAI;AACzB,IAAA,YAAY,CAAC,MAAM,GAAG,IAAI;IAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,GAAG,CAAC,SAAS,GAAG,SAAS;IACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AAC9B,IAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AAEvC,IAAA,IAAI;AACF,QAAA,OAAO,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;IAC7C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF;AAEA,SAAS,qBAAqB,CAC5B,GAAkB,EAClB,IAAgC,EAChC,IAAY,EACZ,OAAkC,EAAA;AAElC,IAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC;IACvC,MAAM,MAAM,GAAG,CAAA,iCAAA,EAAoC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AAC/E,IAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;IACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,IAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,IAAA,MAAM,CAAC,MAAM,GAAG,IAAI;IACpB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE;QACR;IACF;AAEA,IAAA,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;QACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAChC;AAEA,IAAA,GAAG,CAAC,MAAM,GAAG,MAAK;AAChB,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,IAAA,CAAC;AACD,IAAA,GAAG,CAAC,GAAG,GAAG,MAAM;AAClB;AAEA,SAAS,aAAa,CAAC,OAAe,EAAA;AACpC,IAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,0BAA0B;AACvE,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAE3C,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;IACzC;AAEA,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1C;AAEA;;ACnSM,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,EAAAE,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,EAAAF,IAAA,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,EAAAG,IAAA,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;MASa,gBAAgB,CAAA;AAH7B,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AA6CtC,IAAA;AA5CC,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;AACnC,QAAA,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxC;8GA7CW,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;;;ACNK,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;;;;"}