@acorex/modules 21.0.0-next.31 → 21.0.0-next.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs → acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs} +10 -11
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs.map → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs.map → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs} +6 -4
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs.map → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs → acorex-modules-ai-management-index-KX3TVRXr.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs.map → acorex-modules-ai-management-index-KX3TVRXr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs → acorex-modules-ai-management-model.entity-BeuDUahR.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs.map → acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map} +1 -1
- package/fesm2022/acorex-modules-ai-management.mjs +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs} +25 -25
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs.map → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-BBzx9W5u.mjs → acorex-modules-assessment-management-index-B2SncZAW.mjs} +6 -6
- package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs.map → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs.map → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +4366 -3497
- package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +3 -2
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +784 -0
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +3 -9
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workflow-management.mjs +488 -105
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-dashboard-management.d.ts +397 -218
- package/types/acorex-modules-organization-management.d.ts +3 -12
- package/types/acorex-modules-workflow-management.d.ts +27 -0
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-index-BBzx9W5u.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs +0 -638
- package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-workflow-management.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/const.ts","../../../../libs/modules/workflow-management/src/lib/entity.provider.ts","../../../../libs/modules/workflow-management/src/lib/menu.keys.ts","../../../../libs/modules/workflow-management/src/lib/menu.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/activity-command-configurator/activity-command-configurator-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-bar-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-donut-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-gauge-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-line-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-confirm-popup.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-layout-popup.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/human-task.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-toast.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/collect-signature.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/create-entity-form.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/workflow-activities-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/entiy.create.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/automation-plugin/automation.plugin.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-plugin/workflow.plugin.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-plugin/workflow-plugin.module.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/category.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/workflows/workflow-category.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/workflows/workflow-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/manifest.ts","../../../../libs/modules/workflow-management/src/lib/features/automation-evaluator-scope.provider.ts","../../../../libs/modules/workflow-management/src/lib/permission.keys.ts","../../../../libs/modules/workflow-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/task-provider/generic-workflow-task.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/provider.task.ts","../../../../libs/modules/workflow-management/src/lib/workflow-management.module.ts","../../../../libs/modules/workflow-management/src/lib/entities/automation/automation.types.ts","../../../../libs/modules/workflow-management/src/lib/entities/index.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.html","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/workflow-studio.component.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/workflow-studio.component.html","../../../../libs/modules/workflow-management/src/acorex-modules-workflow-management.ts"],"sourcesContent":["const config = {\n i18n: 'workflow-management',\n module: 'WorkflowManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'workflow-management',\n name: config.module,\n title: '@workflow-management:module.title',\n icon: 'fa-light fa-diagram-project',\n },\n entities: {\n workflowDefinition: {\n name: 'WorkflowDefinition',\n fullName: `${config.module}.WorkflowDefinition`,\n title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',\n titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',\n icon: 'fa-light fa-diagram-project',\n },\n workflowInstance: {\n name: 'WorkflowInstance',\n fullName: `${config.module}.WorkflowInstance`,\n title: '@workflow-management:workflow-instances.entities.workflow-instance.title',\n titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',\n icon: 'fa-light fa-play-circle',\n },\n activityDefinition: {\n name: 'ActivityDefinition',\n fullName: `${config.module}.ActivityDefinition`,\n title: '@workflow-management:activities.entities.activity-definition.title',\n titlePlural: '@workflow-management:activities.entities.activity-definition.plural',\n icon: 'fa-light fa-puzzle-piece',\n },\n automation: {\n name: 'Automation',\n fullName: `${config.module}.Automation`,\n title: '@workflow-management:automations.entities.automation.title',\n titlePlural: '@workflow-management:automations.entities.automation.plural',\n icon: 'fa-light fa-bolt',\n },\n // workflowCategory: {\n // name: 'WorkflowCategory',\n // fullName: `${config.module}.WorkflowCategory`,\n // title: '@workflow-management:workflows.entities.workflow-category.title',\n // titlePlural: '@workflow-management:workflows.entities.workflow-category.plural',\n // icon: 'fa-light fa-folder',\n // },\n },\n};\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMWorkflowManagementModuleEntityProvider implements AXPEntityDefinitionLoader {\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.workflowDefinition.name:\n return (await import('./entities/workflow-definition/workflow-definition.entity')).factory();\n case RootConfig.entities.workflowInstance.name:\n return (await import('./entities/workflow-instance/workflow-instance.entity')).factory();\n case RootConfig.entities.activityDefinition.name:\n return (await import('./entities/activity-definition/activity-definition.entity')).factory();\n case RootConfig.entities.automation.name:\n return (await import('./entities/automation/automation.entity')).factory();\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n","export const AXPWorkflowManagementMenuKeys = {\n Root: 'workflow-management:menu',\n Workflow: 'workflow-management:workflow',\n WorkflowDefinitions: 'workflow-management:workflow-definitions',\n WorkflowInstances: 'workflow-management:workflow-instances',\n WorkflowStudio: 'workflow-management:workflow-studio',\n Activities: 'workflow-management:activities',\n ActivityDefinitions: 'workflow-management:activity-definitions',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPWorkflowManagementMenuKeys } from './menu.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name ?? module.name;\n\n const workflowsMenu = context.find(AXPCommonMenuKeys.Workflows);\n if (!workflowsMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Workflows,\n priority: 12,\n text: '@general:menus.workflows.title',\n icon: module.icon,\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Workflows).addItems([\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowDefinitions,\n text: '@workflow-management:workflow-definitions.menus.workflow-definitions.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowDefinition.name),\n priority: 1,\n icon: RootConfig.entities.workflowDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowInstances,\n text: '@workflow-management:workflow-instances.menus.workflow-instances.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowInstance.name),\n priority: 2,\n icon: RootConfig.entities.workflowInstance.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowStudio,\n text: '@workflow-management:workflow-studio.menus.workflow-studio.title',\n path: `/${appName}/workflow-management/studio`,\n priority: 3,\n icon: 'fa-light fa-wrench',\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.ActivityDefinitions,\n text: '@workflow-management:activities.menus.activity.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.activityDefinition.name),\n priority: 4,\n icon: RootConfig.entities.activityDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMActivityCommandConfiguratorWidget: AXPWidgetConfig = {\n name: 'activity-command-configurator',\n title: 'Activity Command Configurator',\n icon: 'fa-light fa-bolt',\n description: 'Select an activity (command) and configure its parameters',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Enter label',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./activity-command-configurator-widget-edit.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetEditComponent\n ),\n },\n designer: {\n component: () =>\n import('./activity-command-configurator-widget-edit.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetEditComponent\n ),\n },\n column: {\n component: () =>\n import('./activity-command-configurator-widget-column.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetColumnComponent\n ),\n },\n },\n};\n\n//#endregion\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { AXPWidgetGroupEnum, type extendedWidget } from '@acorex/platform/layout/widget-core';\n\nexport const AXMWorkflowBarChartExtendedWidget: extendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-bar-chart',\n title: 'Workflow Pending Approvals by Age',\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [\n {\n name: 'workflow',\n title: 'Workflow',\n order: 3,\n },\n ],\n options: {\n title: 'Pending Approvals by Age',\n xAxisLabel: 'Age Bucket',\n yAxisLabel: 'Count',\n dataSource: 'workflow-pending-approval-by-age',\n },\n },\n};\n","import { AXPDonutChartWidget } from '@acorex/modules/dashboard-management';\nimport { AXPWidgetGroupEnum, type extendedWidget } from '@acorex/platform/layout/widget-core';\n\nexport const AXMWorkflowDonutChartExtendedWidget: extendedWidget = {\n parentName: AXPDonutChartWidget.name,\n widget: {\n ...AXPDonutChartWidget,\n name: 'workflow-donut-chart',\n title: 'Workflow Workload by Process',\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [\n {\n name: 'workflow',\n title: 'Workflow',\n order: 3,\n },\n ],\n options: {\n title: 'Workload by Process',\n dataSource: 'workflow-workload-by-process',\n },\n },\n};\n","import { AXPGaugeChartWidget } from '@acorex/modules/dashboard-management';\nimport { AXPWidgetGroupEnum, type extendedWidget } from '@acorex/platform/layout/widget-core';\n\nexport const AXMWorkflowGaugeChartExtendedWidget: extendedWidget = {\n parentName: AXPGaugeChartWidget.name,\n widget: {\n ...AXPGaugeChartWidget,\n name: 'workflow-gauge-chart',\n title: 'Workflow SLA Compliance',\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [\n {\n name: 'workflow',\n title: 'Workflow',\n order: 3,\n },\n ],\n options: {\n title: 'SLA Compliance',\n label: 'Resolved In SLA (%)',\n dataSource: 'workflow-sla-compliance',\n minValue: 0,\n maxValue: 100,\n thresholds: [\n {\n value: 30,\n color: 'rgba(var(--ax-sys-color-danger-500))',\n label: 'Low',\n },\n { value: 70, color: 'rgba(var(--ax-sys-color-warning-500))', label: 'Medium' },\n { value: 100, color: 'rgba(var(--ax-sys-color-success-500))', label: 'High' },\n ],\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { AXPWidgetGroupEnum, type extendedWidget } from '@acorex/platform/layout/widget-core';\n\nexport const AXMWorkflowLineChartExtendedWidget: extendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-line-chart',\n title: 'Workflow Throughput Trend',\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [\n {\n name: 'workflow',\n title: 'Workflow',\n order: 3,\n },\n ],\n options: {\n title: 'Created vs Completed (Last 8 Weeks)',\n xAxisLabel: 'Week',\n yAxisLabel: 'Items',\n fillArea: false,\n dataSource: 'workflow-throughput-last-8-weeks',\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport type { extendedWidget } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMActivityCommandConfiguratorWidget } from './features/activity-command-configurator/activity-command-configurator-widget.config';\nimport {\n AXMWorkflowBarChartExtendedWidget,\n AXMWorkflowDonutChartExtendedWidget,\n AXMWorkflowGaugeChartExtendedWidget,\n AXMWorkflowLineChartExtendedWidget,\n} from './features/dashboard/widgets';\n\n//#endregion\n\n//#region ---- Workflow Management Widgets Provider ----\n\nconst WORKFLOW_WIDGETS = [AXMActivityCommandConfiguratorWidget];\nconst EXTENDED_WIDGETS: extendedWidget[] = [\n AXMWorkflowBarChartExtendedWidget,\n AXMWorkflowDonutChartExtendedWidget,\n AXMWorkflowGaugeChartExtendedWidget,\n AXMWorkflowLineChartExtendedWidget,\n];\n\n@Injectable()\nexport class AXMWorkflowManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return WORKFLOW_WIDGETS;\n }\n\n getExtendedWidgets() {\n return EXTENDED_WIDGETS;\n }\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\n//#region ---- Types ----\n\n/**\n * Input for ShowConfirmPopup activity.\n */\nexport interface ShowConfirmPopupInput {\n /**\n * Title of the confirmation dialog\n */\n title: string;\n\n /**\n * Message/content of the confirmation dialog\n */\n message: string;\n\n /**\n * Dialog type/color (e.g., 'warning', 'danger', 'info', 'success')\n */\n type?: AXStyleColorType;\n\n /**\n * Button layout direction ('horizontal' or 'vertical')\n */\n direction?: 'horizontal' | 'vertical';\n\n /**\n * Whether dialog is closable\n */\n closable?: boolean;\n\n /**\n * Default action button ('confirm' or 'cancel')\n */\n defaultAction?: 'confirm' | 'cancel';\n}\n\n/**\n * Output for ShowConfirmPopup activity.\n * Outcome is determined by the outcomes object (ok or cancel).\n */\nexport interface ShowConfirmPopupOutput {\n // No output data needed - outcome is determined by outcomes\n}\n\n//#endregion\n\n/**\n * ShowConfirmPopup Activity (Frontend)\n * \n * Shows a confirmation popup dialog with OK and Cancel buttons.\n * This activity runs on the frontend and requires user interaction.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-confirm-popup\n * \n * Outcomes:\n * - ok: User clicked OK button\n * - cancel: User clicked Cancel button or closed the dialog\n */\n@Injectable()\nexport class ShowConfirmPopupActivity implements AXPCommand<ShowConfirmPopupInput, ShowConfirmPopupOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: ShowConfirmPopupInput,\n ): Promise<AXPExecuteCommandResult<ShowConfirmPopupOutput>> {\n try {\n // Translate title and message if they are translation keys\n const title = await this.translationService.translateAsync(input.title);\n const message = await this.translationService.translateAsync(input.message);\n\n // Show confirmation dialog\n const dialogResult = await this.dialogService.confirm(\n title,\n message,\n input.type || 'warning',\n input.direction || 'horizontal',\n input.closable ?? false,\n input.defaultAction || 'cancel',\n );\n\n const confirmed = dialogResult.result === true;\n const outcome = confirmed ? 'ok' : 'cancel';\n\n console.log(`[ShowConfirmPopupActivity] User ${confirmed ? 'confirmed' : 'cancelled'} the dialog`);\n\n return {\n success: true,\n data: {} as ShowConfirmPopupOutput,\n metadata: {\n outcome,\n },\n };\n } catch (error: any) {\n console.error(`[ShowConfirmPopupActivity] Failed to show confirm popup:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show confirmation dialog',\n },\n data: {} as ShowConfirmPopupOutput,\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport {\n AXPDialogRendererComponent,\n DialogRendererConfig,\n DialogRendererResult,\n} from '@acorex/platform/layout/builder';\nimport { AXPWidgetNode, AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for ShowLayoutPopup activity.\n */\nexport interface ShowLayoutPopupInput {\n /**\n * Layout definition as JSON string or AXPWidgetNode object\n */\n layout: string | AXPWidgetNode;\n\n /**\n * Dialog title\n */\n title?: string;\n\n /**\n * Dialog size\n */\n size?: AXPopupSizeType;\n\n /**\n * Whether to show close button\n */\n closeButton?: boolean;\n\n /**\n * Initial context data for the form\n */\n context?: Record<string, any>;\n\n /**\n * Dialog actions (buttons) to display in footer\n * Each action will create a corresponding outcome\n */\n actions?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n}\n\n//#endregion\n\n/**\n * ShowLayoutPopup Activity (Frontend)\n *\n * Shows a popup dialog with a custom layout built using layout builder.\n * The layout can be provided as JSON string or AXPWidgetNode object.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-layout-popup\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'save', outcome will be { save: true }\n * - If action has name = 'delete', outcome will be { delete: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n */\n@Injectable()\nexport class ShowLayoutPopupActivity implements AXPCommand<ShowLayoutPopupInput, Record<string, any>> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(input: ShowLayoutPopupInput): Promise<AXPExecuteCommandResult<Record<string, any>>> {\n try {\n // Parse layout definition\n let layoutNode: AXPWidgetNode;\n\n if (typeof input.layout === 'string') {\n // If it's a JSON string, parse it\n try {\n layoutNode = AXPWidgetSerializationHelper.fromJson(input.layout);\n } catch (error: any) {\n throw new Error(`Invalid layout JSON: ${error.message}`);\n }\n } else {\n // If it's already an object, use it directly (clone to avoid mutations)\n layoutNode = cloneDeep(input.layout);\n }\n\n // Validate layout node\n if (!layoutNode || !layoutNode.type) {\n throw new Error('Invalid layout: missing type property');\n }\n\n // Build actions from input or use defaults\n const actions = input.actions || {\n suffix: [\n {\n title: '@general:actions.cancel.title',\n icon: 'fa-times',\n color: 'default',\n command: { name: 'cancel' },\n },\n {\n title: '@general:actions.submit.title',\n icon: 'fa-check',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n },\n ],\n };\n\n // Create dialog configuration\n const dialogConfig: DialogRendererConfig = {\n title: input.title || 'Dialog',\n context: input.context || {},\n definition: layoutNode,\n actions: {\n footer: {\n prefix: actions.prefix || [],\n suffix: actions.suffix || [],\n },\n },\n };\n\n // Show dialog using AXPDialogRendererComponent. Close dialog before resolving so UI is updated before workflow continues.\n const dialogResult = await new Promise<DialogRendererResult>((resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: input.size || 'md',\n closeButton: input.closeButton !== undefined ? input.closeButton : true,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result: any) => {\n if (typeof result?.close === 'function') {\n result.close();\n }\n resolve({\n context: result?.context?.() ?? dialogConfig.context,\n action: result?.action ? result.action() : 'cancel',\n });\n },\n },\n });\n });\n\n // Extract result data and action\n const result = dialogResult?.context || {};\n let actionName = 'cancel'; // Default action\n\n const rawActionFromDialog = dialogResult?.action;\n let resolvedAction: string | { name?: string } | undefined;\n\n if (rawActionFromDialog) {\n resolvedAction = rawActionFromDialog;\n }\n\n if (typeof resolvedAction === 'string') {\n actionName = resolvedAction;\n } else if (typeof resolvedAction === 'object' && resolvedAction && 'name' in resolvedAction) {\n actionName = resolvedAction.name ?? 'cancel';\n }\n const action = actionName;\n\n console.log(`[ShowLayoutPopupActivity] Dialog closed with action: ${action}`, result);\n\n return {\n success: true,\n data: result,\n metadata: {\n outcome: action,\n },\n };\n } catch (error: any) {\n console.error(`[ShowLayoutPopupActivity] Failed to show layout popup:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show layout popup',\n },\n data: {},\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for Human Task activity.\n */\nexport interface HumanTaskInput {\n /**\n * Task title\n */\n title?: string;\n\n /**\n * Task description\n */\n description?: string;\n\n /**\n * Assigned user IDs (direct assignment)\n */\n assignedUserIds?: string[];\n\n /**\n * Candidate user IDs (users who can claim the task)\n */\n candidateUserIds?: string[];\n\n /**\n * Candidate role IDs (roles whose members can claim the task)\n */\n candidateRoleIds?: string[];\n\n /**\n * Task priority\n */\n priority?: 'Low' | 'Normal' | 'High' | 'Urgent';\n\n /**\n * Task due date (ISO date string or Date)\n */\n dueDate?: string | Date;\n\n /**\n * Initial context data for the form\n */\n context?: Record<string, any>;\n\n /**\n * Actions (buttons) for this task. Format: { prefix?: Array<Action>, suffix?: Array<Action> } (or JSON string).\n * Each action name becomes an outcome when the task is completed.\n */\n actions?: { prefix?: Array<{ name?: string; command?: { name?: string } }>; suffix?: Array<{ name?: string; command?: { name?: string } }> } | string;\n}\n\n/**\n * Output for Human Task activity.\n */\nexport interface HumanTaskOutput {\n /**\n * Result data from task completion (form values)\n */\n result: Record<string, any>;\n\n /**\n * Action that was clicked (e.g., 'approve', 'reject', 'cancel')\n */\n action: string;\n}\n\n//#endregion\n\n/**\n * Human Task Activity (Frontend)\n * \n * Generic human task activity that suspends workflow and waits for user interaction.\n * Supports assignment and actions (displayed inline). For dialog-style flow, use a follow-up activity.\n * \n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:human-task\n * \n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n * \n * Examples:\n * - If action has command.name = 'approve', outcome will be { approve: true }\n * - If action has name = 'reject', outcome will be { reject: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n * \n * Assignment:\n * - assignedUserIds: Direct assignment to specific users\n * - candidateUserIds: Users who can claim the task\n * - candidateRoleIds: Roles whose members can claim the task\n * \n * Display Modes:\n * - 'dialog': Traditional modal dialog (default)\n * - 'inline': Actions displayed directly on page before resume\n */\n@Injectable()\nexport class HumanTaskActivity implements AXPCommand<HumanTaskInput, HumanTaskOutput> {\n //#region ---- Services & Dependencies ----\n\n // Note: This activity doesn't execute immediately - it suspends the workflow\n // The actual UI display is handled by the Generic Task Provider and Display Service\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n /**\n * Execute human task activity.\n * \n * This method doesn't actually show UI - it just validates input and returns success.\n * The workflow engine will suspend at this activity and create a bookmark.\n * The Generic Task Provider will handle displaying the task UI inline.\n */\n async execute(input: HumanTaskInput): Promise<AXPExecuteCommandResult<HumanTaskOutput>> {\n console.log('human task input', input.context?.['input'] ?? 'no input');\n\n try {\n // Validate required fields\n if (!input.title && !input.description) {\n console.warn('[HumanTaskActivity] No title or description provided');\n }\n\n // Build available outcomes from actions (dynamic) or default submit/cancel\n const availableOutcomes: string[] = [];\n const rawActions = input.actions;\n if (rawActions) {\n try {\n const actions = typeof rawActions === 'string' ? JSON.parse(rawActions) : rawActions;\n const prefix = actions?.prefix ?? [];\n const suffix = actions?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string') availableOutcomes.push(name);\n }\n } catch {\n // ignore parse error\n }\n }\n if (availableOutcomes.length === 0) {\n availableOutcomes.push('cancel', 'submit');\n }\n\n // This activity suspends the workflow - the actual result will come from resume\n // Return a placeholder result - the real result comes when user completes the task\n return {\n success: true,\n data: {\n result: input.context || {},\n action: 'pending', // Will be replaced when task is completed\n },\n metadata: {\n outcome: 'pending',\n },\n };\n } catch (error: any) {\n console.error(`[HumanTaskActivity] Failed to execute human task:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to execute human task',\n },\n data: {\n result: {},\n action: 'cancel',\n },\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\n//#region ---- Types ----\n\n/**\n * Input for ShowToast activity.\n */\nexport interface ShowToastInput {\n /**\n * Message/content of the toast\n */\n message: string;\n\n /**\n * Toast type/color (e.g., 'success', 'danger', 'info', 'warning')\n */\n type?: AXStyleColorType;\n\n /**\n * Toast title (optional)\n */\n title?: string;\n\n /**\n * Whether to show close button\n */\n closeButton?: boolean;\n\n /**\n * Timeout in milliseconds (0 = no timeout)\n */\n timeOut?: number;\n\n /**\n * Whether to show timeout progress\n */\n timeOutProgress?: boolean;\n}\n\n/**\n * Output for ShowToast activity.\n */\nexport interface ShowToastOutput {\n // No output data needed - toast is just a notification\n}\n\n//#endregion\n\n/**\n * ShowToast Activity (Frontend)\n * \n * Shows a toast notification message to the user.\n * This activity runs on the frontend and displays a temporary notification.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-toast\n * \n * Outcomes:\n * - done: Toast was displayed successfully\n */\n@Injectable()\nexport class ShowToastActivity implements AXPCommand<ShowToastInput, ShowToastOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: ShowToastInput,\n ): Promise<AXPExecuteCommandResult<ShowToastOutput>> {\n try {\n // Translate message and title if they are translation keys\n const message = await this.translationService.translateAsync(input.message);\n const title = input.title ? await this.translationService.translateAsync(input.title) : undefined;\n\n // Show toast notification\n this.toastService.show({\n color: input.type || 'default',\n title: title,\n content: message,\n closeButton: input.closeButton ?? true,\n timeOut: input.timeOut ?? 3000,\n timeOutProgress: input.timeOutProgress ?? false,\n });\n\n return {\n success: true,\n data: {} as ShowToastOutput,\n metadata: {\n outcome: 'done',\n },\n };\n } catch (error: any) {\n console.error(`[ShowToastActivity] Failed to show toast:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show toast notification',\n },\n data: {} as ShowToastOutput,\n metadata: {\n outcome: 'failed',\n },\n };\n }\n }\n\n //#endregion\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/modules/common';\n\n//#region ---- Types ----\n\n/**\n * Input for CollectSignature activity.\n */\nexport interface CollectSignatureInput {\n /**\n * Signature request ID\n */\n signatureRequestId: string;\n\n /**\n * ID of the signer\n */\n signerId: string;\n\n /**\n * Reference ID of the entity record\n */\n refId: string;\n\n /**\n * Reference type (module.entity format)\n */\n refType: string;\n\n /**\n * Message to display to the signer\n */\n message?: string;\n}\n\n/**\n * Output for CollectSignature activity.\n */\nexport interface CollectSignatureOutput {\n /**\n * Signature data (base64 encoded image or text)\n */\n signature: string;\n\n /**\n * Optional note from the signer\n */\n note?: string;\n\n /**\n * Timestamp when signature was collected\n */\n signedAt: string;\n}\n\n//#endregion\n\n/**\n * CollectSignature Activity (Frontend)\n * \n * Collects a signature from a user through a dialog.\n * This activity runs on the frontend and requires user interaction.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:collect-signature\n * \n * Outcomes:\n * - Signed: User provided signature successfully\n * - Cancelled: User cancelled the signature dialog\n */\n@Injectable()\nexport class CollectSignatureActivity implements AXPCommand<CollectSignatureInput, CollectSignatureOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: CollectSignatureInput,\n ): Promise<AXPExecuteCommandResult<CollectSignatureOutput>> {\n try {\n console.log(`[CollectSignatureActivity] Collecting signature from user: ${input.signerId}`);\n\n // Translate message if provided\n const message = input.message\n ? await this.translationService.translateAsync(input.message)\n : await this.translationService.translateAsync('@workflow-management:signature.activities.collect-signature.default-message');\n\n // Show signature collection dialog\n const dialogResult = await this.showSignatureDialog(message);\n\n if (dialogResult.cancelled) {\n console.log(`[CollectSignatureActivity] User cancelled signature collection`);\n return {\n success: true,\n data: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n const signedAt = new Date().toISOString();\n\n console.log(`[CollectSignatureActivity] Signature collected successfully at ${signedAt}`);\n\n return {\n success: true,\n data: {\n signature: dialogResult.signature,\n note: dialogResult.note,\n signedAt,\n },\n metadata: {\n outcome: 'Signed',\n },\n };\n } catch (error: any) {\n console.error(`[CollectSignatureActivity] Failed to collect signature:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to collect signature',\n },\n data: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Dialog Logic ----\n\n /**\n * Shows a dialog to collect signature from the user.\n */\n private async showSignatureDialog(\n message: string,\n ): Promise<{ signature: string; note?: string; cancelled: boolean }> {\n const result = await this.layoutBuilder\n .create()\n .dialog<{ signature: string; note?: string; cancelled: boolean }>((dialog) => {\n dialog\n .setTitle('@workflow-management:signature.activities.collect-signature.dialog-title')\n .setMessage(message)\n .setContext({ signature: '', note: '' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@workflow-management:signature.activities.collect-signature.note-label', (field) => {\n field.path('note');\n field.largeTextBox({\n placeholder: '@workflow-management:signature.activities.collect-signature.note-placeholder',\n maxLength: 1000,\n });\n })\n .formField('@workflow-management:signature.activities.collect-signature.signature-label', (field) => {\n field.path('signature');\n field.customWidget(AXPWidgetsList.Editors.SignatureBox, {\n validations: [\n {\n rule: 'required',\n options: {\n message: '@workflow-management:signature.activities.collect-signature.signature-required',\n },\n },\n ],\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@workflow-management:signature.activities.collect-signature.submit-text');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return { signature: '', note: undefined, cancelled: true };\n }\n const formData = context as { signature?: string; note?: string };\n return {\n signature: formData['signature'] || '',\n note: formData['note'],\n cancelled: false,\n };\n });\n })\n .show();\n\n return result;\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for Create Entity Form activity.\n */\nexport interface CreateEntityFormInput {\n /**\n * Module name (e.g. HumanCapitalManagement)\n */\n module: string;\n\n /**\n * Entity name (e.g. LeaveRequest)\n */\n entity: string;\n\n /**\n * If true, form only collects data and the next workflow step (e.g. entity-create) persists.\n * If false, entity create is executed on frontend and outcome is 'Done'.\n */\n persistInWorkflow?: boolean;\n\n /**\n * Property names to show. Only these properties are displayed. If both includes and excludes are set, only includes is applied.\n */\n includes?: string[];\n\n /**\n * Property names to hide. Ignored when includes is also set.\n */\n excludes?: string[];\n\n /**\n * Property names that should be displayed as readonly.\n */\n readonlys?: string[];\n\n /**\n * Default values for form properties. Keys are property names; filled values are applied as initial context.\n */\n data?: Record<string, any>;\n}\n\n/**\n * Output for Create Entity Form activity.\n */\nexport interface CreateEntityFormOutput {\n /**\n * Form data for the next workflow step (when persistInWorkflow is true).\n */\n result?: Record<string, any>;\n\n /**\n * Created entity ID (when persistInWorkflow is false and entity create succeeds).\n */\n id?: string;\n}\n\n//#endregion\n\n/**\n * Create Entity Form Activity (Frontend)\n *\n * Shows a create-entity form as an interactive dialog. When persistInWorkflow is true,\n * returns form data and outcome 'Submitted'/'Cancelled' so the workflow handles persistence.\n * When false, executes entity create on frontend and returns outcome 'Done'.\n *\n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:create-entity-form\n *\n * Outcomes:\n * - Submitted: User submitted form (persistInWorkflow true → next step persists)\n * - Cancelled: User cancelled the form\n * - Done: Entity was created on frontend (persistInWorkflow false)\n */\n@Injectable()\nexport class CreateEntityFormActivity implements AXPCommand<CreateEntityFormInput, CreateEntityFormOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityForm = inject(AXPEntityFormBuilderService);\n private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n async execute(\n input: CreateEntityFormInput\n ): Promise<AXPExecuteCommandResult<CreateEntityFormOutput>> {\n const {\n module,\n entity,\n persistInWorkflow = false,\n includes,\n excludes,\n readonlys,\n data,\n } = input;\n\n if (!module || !entity) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n let dialogRef: any;\n\n try {\n const entityRef = await this.entityService.resolve(module, entity);\n\n const includeList = this.normalizePropertyList(includes);\n const excludeList = this.normalizePropertyList(excludes);\n const readonlyList = this.normalizePropertyList(readonlys);\n const initialData = this.normalizeData(data);\n\n let chain = this.entityForm.entity(`${module}.${entity}`).create(initialData);\n\n if (includeList.length > 0) {\n chain = chain.include(...includeList);\n } else if (excludeList.length > 0) {\n chain = chain.exclude(...excludeList);\n }\n\n if (readonlyList.length > 0) {\n chain = chain.readonlyProperties(...readonlyList);\n }\n\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n\n dialogRef = await chain.show();\n\n if (dialogRef.action() === 'cancel') {\n dialogRef.close();\n return {\n success: true,\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n if (dialogRef.action() === 'submit') {\n const context = dialogRef.context();\n\n if (persistInWorkflow) {\n // Form only collects data; workflow persists in next step\n dialogRef.close();\n return {\n success: true,\n data: { result: context ?? {} },\n metadata: {\n outcome: 'Submitted',\n },\n };\n }\n\n // Entity creates on frontend → outcome 'Done'\n dialogRef.setLoading(true);\n try {\n const createFn = entityRef.commands?.create?.execute as (payload: any) => Promise<{ id: string } | AXPExecuteCommandResult<any>>;\n\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n const result = await createFn(context);\n dialogRef.close();\n\n const id = typeof result === 'object' && result !== null && 'id' in result\n ? (result as { id: string }).id\n : (result as AXPExecuteCommandResult<any>)?.data?.id ?? (result as any)?.data?.item?.id;\n\n return {\n success: true,\n data: {\n id: id ?? '',\n result: context ?? {},\n },\n metadata: {\n outcome: 'Done',\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } catch (error: any) {\n console.error('[CreateEntityFormActivity] Entity create failed:', error);\n throw error;\n } finally {\n dialogRef?.setLoading(false);\n }\n }\n\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n } catch (error: any) {\n console.error('[CreateEntityFormActivity] Failed:', error);\n\n return {\n success: false,\n message: {\n text:\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n }\n\n //#region ---- Private Helpers ----\n\n /**\n * Normalizes property list input (array, JSON string, or expression result).\n */\n private normalizePropertyList(value: string[] | any): string[] {\n if (!value) return [];\n if (Array.isArray(value)) {\n return value.filter((v) => typeof v === 'string');\n }\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter((v: any) => typeof v === 'string') : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n /**\n * Normalizes data input (object or JSON string).\n */\n private normalizeData(value: Record<string, any> | any): Record<string, any> {\n if (!value) return {};\n if (typeof value === 'object' && !Array.isArray(value)) return value;\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) ? parsed : {};\n } catch {\n return {};\n }\n }\n return {};\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPActivityProvider, AXPActivityDefinition } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Activities Definition Provider\n * \n * Provides activity definitions (metadata only).\n * Activity definitions contain metadata for UI and tooling.\n * The `name` property is used as the command key for execution.\n * Reads from entity service (mock data).\n */\n@Injectable()\nexport class AXMWorkflowActivitiesDefinitionProvider implements AXPActivityProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private activityDefinitionService = this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.activityDefinition.name\n ).data<any, any>();\n\n //#endregion\n\n //#region ---- AXPActivityProvider Implementation ----\n\n async getList(categoryId: string): Promise<AXPActivityDefinition[]> {\n // Use 'equal' operator to filter by category field\n const result = await this.activityDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'category',\n operator: {\n type: 'equal',\n },\n value: categoryId,\n }]\n }\n });\n return result.items as AXPActivityDefinition[];\n }\n\n async getById(name: string): Promise<AXPActivityDefinition | undefined> {\n // Try to find by name field first, then by type field\n const byName = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n \n if (byName.items && byName.items.length > 0) {\n return byName.items[0] as AXPActivityDefinition;\n }\n\n // Try by type field\n const byType = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'type',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n\n if (byType.items && byType.items.length > 0) {\n return byType.items[0] as AXPActivityDefinition;\n }\n\n return undefined;\n }\n\n //#endregion\n}\n\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\n\nexport interface CreateEnityInput{\n module : string;\n entity : string;\n\n}\n\n\nexport interface CreateEnityOutput {\n id:string;\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPCreateEntityActivity implements AXPCommand<CreateEnityInput, CreateEnityOutput> {\n private entityForm = inject(AXPEntityFormBuilderService);\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private translationService = inject(AXTranslationService);\n\n protected context = {};\n\n async execute(input: CreateEnityInput): Promise<AXPExecuteCommandResult<any>> {\n const entityRef = await this.entityService.resolve(input.module, input.entity);\n\n let dialogRef: any;\n\n try {\n let chain = this.entityForm.entity(`${input.module}.${input.entity}`).create({});\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n\n dialogRef = await chain.show();\n if (dialogRef.action() == 'cancel') {\n dialogRef.close();\n return {\n success: true,\n data: { id: '' },\n metadata: { outcome: 'cancel' },\n };\n } else if (dialogRef.action() == 'submit') {\n dialogRef.setLoading(true);\n const context = dialogRef.context();\n const createFn = entityRef.commands?.create?.execute as (payload: any) => Promise<{id : string}>;\n\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n };\n }\n const result = await createFn(context);\n if (result) {\n dialogRef.close();\n \n return {\n success: true,\n data: {\n id: result.id,\n },\n metadata: {\n outcome: 'Submitted',\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } else {\n //todo\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n },\n data: {\n id: '-1',\n },\n metadata: {\n outcome: 'Submitted',\n },\n };\n }\n }\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n };\n } catch (error) {\n return {\n success: false,\n message: {\n text:\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n };\n } finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex/platform/common';\nimport { AXPSystemActionType } from '@acorex/platform/core';\nimport {\n AXPEntityActionPlugin,\n entityDetailsCrudActions,\n} from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Plugin options ----\n\nexport type AutomationLayoutType =\n | 'page-list'\n | 'tab-list'\n | 'page-detail'\n | 'tab-detail';\n\nexport interface AXMAutomationPluginOptions {\n /** Title (i18n key or label) for the automations block in the UI. */\n title?: string;\n /** Icon class (e.g. 'fa-light fa-bolt'). Default 'fa-light fa-bolt'. */\n icon?: string;\n /** How to display: page-list (default), tab-list, page-detail, tab-detail. */\n layoutType?: AutomationLayoutType;\n /** Position relative to main content: 'before' | 'after' | 'middle'. Default 'after'. */\n position?: 'before' | 'after' | 'middle';\n /** Order among related entities. Default 2. */\n order?: number;\n /** Column names to show in list view. Default ['name', 'title', 'description', 'command']. */\n columns?: string[];\n}\n\nconst DEFAULT_ICON = 'fa-light fa-bolt';\nconst AUTOMATION_ENTITY = 'WorkflowManagement.Automation';\n\n//#endregion\n\n//#region ---- Plugin ----\n\n/**\n * Automation entity plugin.\n * Adds a related entity (WorkflowManagement.Automation) bound to the current entity via refType/refId.\n * Any entity can enable it with: plugins: [{ name: 'automation', options: { title: '...', layoutType: 'page-list', ... } }].\n */\nexport const automationPlugin: AXPEntityActionPlugin = {\n name: 'automation',\n order: 50,\n apply: (ctx, options?: AXMAutomationPluginOptions) => {\n const opts = options ?? {};\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n const title = opts.title?.trim()?.length ? opts.title : '@workflow-management:automations.terms.automations';\n const icon = opts.icon?.trim()?.length ? opts.icon : DEFAULT_ICON;\n const layoutType = opts.layoutType ?? 'page-list';\n const position = opts.position ?? 'after';\n const order = opts.order ?? 2;\n const columns = opts.columns ?? ['name', 'title', 'description', 'command'];\n\n const createAction: AXPEntityAction = {\n title: '@general:actions.create.title',\n command: {\n name: 'Entity:Create',\n options: {\n process: {\n redirect: false,\n canCreateNewOne: true,\n data: {\n refType,\n refId: '{{context.eval(\"id\")}}',\n },\n },\n },\n },\n priority: 'primary',\n type: AXPSystemActionType.Create,\n scope: AXPEntityCommandScope.TypeLevel,\n };\n\n const otherActions = entityDetailsCrudActions('refId', { create: false });\n\n ctx.relatedEntities.add({\n entity: AUTOMATION_ENTITY,\n title,\n icon,\n columns,\n conditions: [\n { name: 'refType', operator: { type: 'equal' }, value: refType },\n { name: 'refId', operator: { type: 'equal' }, value: '{{context.eval(\"id\")}}' },\n ],\n actions: [createAction, ...otherActions],\n layout: { type: layoutType, position, order },\n excludeProperties: ['refType', 'refId'],\n });\n },\n};\n\n//#endregion\n","import { AXPEntityActionPlugin } from '@acorex/platform/layout/entity';\n\n/**\n * Workflow Plugin\n *\n * Marks an entity as workflow-capable. This plugin does NOT configure workflows;\n * it only indicates that the entity can participate in workflows.\n *\n * Workflow bindings are configured in Workflow Management (workflow definition → bindings),\n * not in the entity definition.\n *\n * This plugin:\n * - Adds workflow capability marker to entity extensions\n * - Enables workflow trigger middleware to detect workflow-capable entities\n * - Provides UI hooks for workflow-related features (future enhancement)\n *\n * Usage:\n * ```typescript\n * plugins: [\n * { name: 'workflow' }, // Entity is workflow-capable\n * ]\n * ```\n */\nexport const workflowPlugin: AXPEntityActionPlugin = {\n name: 'workflow',\n order: 50, // After core plugins (40-45), before status/archive (60-70)\n apply: (ctx) => {\n // Mark entity as workflow-capable in extensions\n (ctx.entity as any).extensions ??= {};\n (ctx.entity as any).extensions.workflow = {\n enabled: true,\n };\n\n // Note: No properties, actions, or views are added by this plugin.\n // It only marks the entity as workflow-capable.\n // Actual workflow bindings are configured in Workflow Management.\n },\n};\n\n","import { NgModule } from '@angular/core';\nimport { AXP_ENTITY_ACTION_PLUGIN } from '@acorex/platform/layout/entity';\nimport { automationPlugin } from '../automation-plugin/automation.plugin';\nimport { workflowPlugin } from './workflow.plugin';\n\n/**\n * Workflow Plugin Module\n *\n * Registers:\n * - workflow plugin: marks entities as workflow-capable\n * - automation plugin: adds WorkflowManagement.Automation as related entity (refType/refId)\n */\n@NgModule({\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: automationPlugin,\n multi: true,\n },\n ],\n})\nexport class AXMWorkflowPluginModule {}\n\n","import { AXPActivityCategoryProvider, AXPActivityCategory } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\n\n/**\n * Provider for activity categories.\n * Reads categories from entity service (mock data).\n */\n@Injectable()\nexport class AXCCategoryProvider implements AXPActivityCategoryProvider {\n \n private readonly entityService = inject(AXPEntityService);\n /** Category entity is provided by category plugin (ActivityDefinition → ActivityDefinitionCategory). */\n private categoryService = this.entityService.withEntity(\n RootConfig.module.name,\n 'ActivityDefinitionCategory'\n ).data<any, any>();\n\n async getList(parentId?: string): Promise<AXPActivityCategory[]> {\n const list: AXPActivityCategory[] = [];\n \n if (parentId) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n } else {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n });\n list.push(...result.items);\n }\n \n return list;\n }\n\n async getById(id: string): Promise<AXPActivityCategory | undefined> {\n return await this.categoryService.byKey(id);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPWorkflowCategoryProvider, AXPWorkflowCategory } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Category Provider\n * \n * Provides workflow categories from entity service.\n * Reads from entity service (mock data or API).\n */\n@Injectable()\nexport class AXMWorkflowCategoryProvider implements AXPWorkflowCategoryProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly categoryService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name + 'Category')\n .data<any, any>();\n\n //#endregion\n\n //#region ---- AXPWorkflowCategoryProvider Implementation ----\n\n async getList(parentId?: string): Promise<AXPWorkflowCategory[]> {\n const filters: any[] = [];\n\n if (parentId === undefined) {\n // Root categories: parentId is null or undefined\n filters.push({\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n });\n } else {\n // Child categories: parentId matches\n filters.push({\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n });\n }\n\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters,\n },\n });\n\n return (result.items || []) as AXPWorkflowCategory[];\n }\n\n async getById(id: string): Promise<AXPWorkflowCategory | undefined> {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: id,\n }],\n },\n });\n\n if (result.items && result.items.length > 0) {\n return result.items[0] as AXPWorkflowCategory;\n }\n\n return undefined;\n }\n\n //#endregion\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { AXPWorkflowProvider, AXPWorkflowDefinition } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Definition Provider\n * \n * Provides workflow definitions for UI and tooling.\n * The `name` property is used as the workflow identifier.\n * Reads from entity service (mock data or API).\n */\n@Injectable()\nexport class AXMWorkflowDefinitionProvider implements AXPWorkflowProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly workflowDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name)\n .data<any, any>();\n\n //#endregion\n\n //#region ---- AXPWorkflowProvider Implementation ----\n\n async getList(categoryId: string): Promise<AXPWorkflowDefinition[]> {\n // Same as report: filter by categoryIds array with 'contains'\n const result = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n\n // Convert entity data to workflow definition format\n return (result.items || []).map((item: any): AXPWorkflowDefinition => ({\n schemaVersion: item.schemaVersion || 'acorex-platform-workflow/v1',\n name: item.name || item.id || '',\n title: item.title || item.name || item.id || null,\n description: item.description || null,\n variables: item.variables || [],\n inputs: item.inputs || [],\n outputs: item.outputs || [],\n graph: item.graph,\n customProperties: item.customProperties || {},\n extensions: item.extensions || {},\n }));\n }\n\n async getByName(name: string): Promise<AXPWorkflowDefinition | null> {\n // Try to find by name field first, then by id field\n const byName = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n \n if (byName.items && byName.items.length > 0) {\n const entity = byName.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n\n // Try by id field\n const byId = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n\n if (byId.items && byId.items.length > 0) {\n const entity = byId.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n\n return null;\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Workflow Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const WorkflowManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Default automation evaluator scope.\n * Provides automation.rules(refType, refId) for ConditionBuilder filterDefinitions.\n * Returns empty array by default; modules (e.g. assessment-management) can register\n * their own scope with the same name to provide rules for specific refTypes.\n */\nexport class AXMAutomationEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('automation', {\n /** Returns filter definitions for automation condition builder. Override per refType in consuming modules. */\n rules: async (_refType: string, _refId: string): Promise<AXPFilterDefinition[]> => {\n return [];\n },\n });\n }\n}\n\n//#endregion\n","export const AXMPermissionsKeys = {\n WorkflowManagement: {\n Management: 'WorkflowManagement:Permission:Management',\n },\n};\n","import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translationService = inject(AXTranslationService);\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) =>\n await this.translationService.translateAsync(`@workflow-management:${key}`);\n\n const keys = AXMPermissionsKeys;\n\n const MODULE_PERMISSIONS = '@workflow-management:module.permissions';\n\n context.addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n );\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPExtraField,\n AXPTask,\n AXPTaskActionMenuItem,\n AXPTaskFilter,\n AXPTaskPopoverComponent,\n AXPTaskStatus,\n AXPWorkflowTaskProvider,\n} from '@acorex/modules/task-management';\nimport { AXPSystemStatuses } from '@acorex/platform/common';\nimport { AXPExecuteCommand, AXPExecuteCommandResult, AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowManager } from '@acorex/platform/workflow';\nimport { Inject, Injectable, InjectionToken, inject, Type } from '@angular/core';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../entities/workflow-instance/workflow-instance.types';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Configuration for a workflow-specific task provider.\n * One provider per workflow definition – pass definitionId to scope tasks to that definition only.\n */\nexport interface AXPGenericWorkflowTaskProviderConfig {\n /** Unique provider name (e.g. 'leave-request-workflow-tasks', 'document-review-workflow-tasks'). */\n name: string;\n /** Display title in task board type selector. */\n title: string;\n /** Optional icon (default: 'fa-light fa-diagram-project'). */\n icon?: string;\n /**\n * When set, only workflow instances for this definition are shown.\n * One provider = one definition. Omit to show all suspended workflow tasks (single generic provider).\n */\n definitionId?: string;\n}\n\n/**\n * Injection token for provider config. Use when registering via DI (provide token + useFactory with deps).\n * When creating via useFactory: () => new AXPGenericWorkflowTaskProvider({ ... }), config is passed in the closure.\n */\nexport const AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG =\n new InjectionToken<AXPGenericWorkflowTaskProviderConfig>('AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG');\n\n/**\n * Bookmark as stored in WorkflowInstance entity (workflowInstance.bookmarks).\n * Read from entity service; no direct DB access.\n */\ninterface WorkflowInstanceBookmark {\n id: string;\n activityId: string;\n type: string;\n payload?: Record<string, any> | null;\n payloadJson?: string;\n consumed?: boolean;\n isConsumed?: boolean;\n createdAt?: string;\n}\n\n/** Shape used when entity storage stores workflowInstance with bookmarks at root level. */\ninterface WorkflowInstanceWithBookmarks {\n bookmarks?: WorkflowInstanceBookmark[];\n}\n\n/**\n * Bookmark payload structure for human-task activities.\n */\ninterface HumanTaskBookmarkPayload {\n activityType: string;\n activityName: string;\n taskToken: string;\n taskType: 'human-task' | 'ui-activity' | 'system-activity';\n assignedUserIds?: string[] | null;\n candidateUserIds?: string[] | null;\n candidateRoleIds?: string[] | null;\n title?: string;\n description?: string;\n priority?: 'Low' | 'Normal' | 'High' | 'Urgent';\n dueDate?: string | Date | null;\n layout?: string | any;\n actions?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n context?: Record<string, any>;\n}\n\n//#endregion\n\n/**\n * Generic Workflow Task Provider\n *\n * Provides tasks from Workflow Instances directly (no Work Items).\n * Queries suspended workflow instances and extracts tasks from bookmarks.\n *\n * Create one provider per workflow definition by passing a config (name, title, definitionId).\n * E.g. leave request: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' }\n *\n * Architecture:\n * - Queries Workflow Instances with subStatus = 'Suspended'\n * - Filters by config.definitionId when set (one provider = one definition)\n * - Extracts active bookmarks for each instance\n * - Parses bookmark payload for assignment/actions\n * - Maps to task board format\n */\n@Injectable()\nexport class AXPGenericWorkflowTaskProvider extends AXPWorkflowTaskProvider<Record<string, any>> {\n //#region ---- Config ----\n\n private readonly config: AXPGenericWorkflowTaskProviderConfig;\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly workflowInstanceData = this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data<string, AXMWorkflowManagementWorkflowInstanceEntityModel>();\n private readonly translationService = inject(AXTranslationService);\n private readonly workflowManager = inject(AXPWorkflowManager);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor(\n @Inject(AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG) config: AXPGenericWorkflowTaskProviderConfig,\n ) {\n super();\n this.config = config;\n }\n\n //#endregion\n\n //#region ---- Provider Metadata ----\n\n get name(): string {\n return this.config.name;\n }\n\n get title(): string {\n return this.config.title;\n }\n\n get icon(): string {\n return this.config.icon ?? 'fa-light fa-diagram-project';\n }\n\n //#endregion\n\n //#region ---- Task Retrieval ----\n\n /**\n * Get tasks from suspended workflow instances.\n * \n * Queries workflow instances filtered by:\n * - subStatus = 'Suspended'\n * - entityRefType (if provided in filter)\n * - definitionId (if provided in filter)\n * - assignee/claimant (if filter provided)\n * \n * Then extracts active bookmarks and maps to task board format.\n */\n async getTasks(\n options: AXPTaskFilter,\n ): Promise<{ items: AXPTask<Record<string, any>>[]; total: number }> {\n // Build filter for workflow instances\n const baseFilter: AXDataSourceFilterOption = { logic: 'and', filters: [] };\n\n // Filter by subStatus = 'Suspended' (only suspended workflows have pending tasks)\n baseFilter.filters?.push({\n field: 'subStatus',\n operator: { type: 'equal' },\n value: 'Suspended',\n });\n\n // Scope this provider to one workflow definition\n if (this.config.definitionId) {\n baseFilter.filters?.push({\n field: 'definitionId',\n operator: { type: 'equal' },\n value: this.config.definitionId,\n });\n }\n\n // Filter by date range if provided (using createdAt or updatedAt)\n if (options?.range?.from || options?.range?.end) {\n if (options.range.from) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'gte' },\n value: options.range.from.toISOString(),\n });\n }\n \n if (options.range.end) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'lte' },\n value: options.range.end.toISOString(),\n });\n }\n }\n\n // Query workflow instances\n const { items: instances, total } = await this.workflowInstanceData.query({\n skip: options?.skip ?? 0,\n take: options?.take ?? 20,\n filter: baseFilter,\n });\n\n // Extract tasks from bookmarks for each instance\n const tasks: AXPTask<Record<string, any>>[] = [];\n\n for (const instance of instances) {\n try {\n // Get active bookmarks from instance entity (workflowInstance.bookmarks)\n const bookmarks = this.getActiveBookmarksFromInstance(instance);\n\n // Process each bookmark (typically one per suspended activity)\n for (const bookmark of bookmarks) {\n try {\n // Get payload from entity (payload object or parse payloadJson)\n let payload: HumanTaskBookmarkPayload;\n try {\n const raw =\n bookmark.payload ??\n (bookmark.payloadJson ? JSON.parse(bookmark.payloadJson) : null);\n payload =\n typeof raw === 'object' && raw !== null\n ? (raw as HumanTaskBookmarkPayload)\n : ({} as HumanTaskBookmarkPayload);\n } catch {\n continue;\n }\n\n // Only process bookmarks for workflow-activity:human-task (cartable tasks only; forms/popups excluded)\n if (payload.activityType !== 'workflow-activity:human-task') {\n continue;\n }\n\n // Check assignment filter if provided\n if (options?.assigneeIds && options.assigneeIds.length > 0) {\n const assignedIds = payload.assignedUserIds || [];\n const candidateIds = payload.candidateUserIds || [];\n const allUserIds = [...assignedIds, ...candidateIds];\n \n // TODO: Also check candidateRoleIds by resolving role members\n \n const matchesAssignee = allUserIds.some((id) => options.assigneeIds!.includes(id));\n if (!matchesAssignee) {\n continue;\n }\n }\n\n // Map bookmark to task\n const task = this.mapBookmarkToTask(instance, bookmark, payload);\n tasks.push(task);\n } catch {\n // Skip this bookmark and continue\n }\n }\n } catch {\n // Skip this instance and continue\n }\n }\n\n return { items: tasks, total };\n }\n\n /**\n * Get active (non-consumed) bookmarks from workflow instance entity.\n * Reads from instance.workflowInstance?.bookmarks — no direct DB access.\n */\n private getActiveBookmarksFromInstance(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel\n ): WorkflowInstanceBookmark[] {\n const wi = instance?.workflowInstance as WorkflowInstanceWithBookmarks | undefined;\n const bookmarks = wi?.bookmarks ?? [];\n const active = bookmarks.filter(\n (b: WorkflowInstanceBookmark) => !b.isConsumed && !b.consumed\n ) as WorkflowInstanceBookmark[];\n return active;\n }\n\n /**\n * Map bookmark to task board task format.\n */\n private mapBookmarkToTask(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel,\n bookmark: WorkflowInstanceBookmark,\n payload: HumanTaskBookmarkPayload\n ): AXPTask<Record<string, any>> {\n // Extract dates\n const dueDate = payload.dueDate \n ? (typeof payload.dueDate === 'string' ? new Date(payload.dueDate) : payload.dueDate)\n : (instance.createdAt ? new Date(instance.createdAt) : new Date());\n \n const startDate = instance.createdAt \n ? new Date(instance.createdAt) \n : dueDate;\n\n // If startDate and endDate are the same, set endDate to one day after startDate\n let endDate = dueDate;\n if (startDate.getTime() === dueDate.getTime()) {\n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 1);\n }\n\n // Map priority\n const priority = this.mapPriorityToTaskPriority(payload.priority || 'Normal');\n\n // Build title\n const title = payload.title || payload.activityName || 'Workflow Task';\n\n return {\n id: bookmark.id, // Use bookmark ID as task ID\n title,\n description: payload.description || `Action required: ${payload.activityName}`,\n startDate,\n endDate,\n allDay: false,\n assignee: payload.assignedUserIds && payload.assignedUserIds.length > 0\n ? {\n id: payload.assignedUserIds[0], // Use first assigned user\n type: 'user',\n fullName: '', // Will be populated if user data is loaded\n }\n : undefined,\n index: 2,\n status: {\n id: AXPSystemStatuses.Pending.name,\n title: this.translationService.translateSync('@workflow-management:tasks.states.pending'),\n },\n priority,\n reporter: {\n id: instance.auditInfo?.created?.by?.id || '',\n type: 'user',\n fullName: instance.auditInfo?.created?.by?.fullName || '',\n },\n data: {\n // Store workflow instance and bookmark metadata\n instanceId: instance.id,\n bookmarkId: bookmark.id,\n activityId: bookmark.activityId,\n activityType: payload.activityType,\n activityName: payload.activityName,\n taskToken: payload.taskToken,\n entityRefId: instance.entityRefId,\n entityRefType: instance.entityRefType,\n definitionId: instance.definitionId,\n // Store full payload for actions\n payload: payload,\n } as any,\n };\n }\n\n /**\n * Map priority to task board priority.\n */\n private mapPriorityToTaskPriority(\n priority: 'Low' | 'Normal' | 'High' | 'Urgent'\n ): 'highest' | 'high' | 'medium' | 'low' | 'lowest' {\n switch (priority) {\n case 'Urgent':\n return 'highest';\n case 'High':\n return 'high';\n case 'Normal':\n return 'medium';\n case 'Low':\n return 'low';\n default:\n return 'medium';\n }\n }\n\n //#endregion\n\n //#region ---- Task Updates ----\n\n /**\n * Update tasks (not applicable for workflow instances - they are read-only from task provider perspective).\n */\n async updateTasks(\n tasksToUpdate: AXPTask<Record<string, any>>[],\n ): Promise<AXPTask<Record<string, any>>[]> {\n // Workflow instances are managed by workflow engine\n // Task updates should be done through workflow resume, not direct updates\n return tasksToUpdate;\n }\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n /**\n * Execute commands on tasks.\n * \n * Supports:\n * - Workflow resume commands (Complete, Cancel)\n */\n async executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult> {\n if (!command?.name) return { success: true };\n\n const taskData = command.options?.['data'] as any;\n const instanceId = taskData?.instanceId ?? command.options?.['instanceId'] ?? '';\n const bookmarkId = taskData?.bookmarkId ?? command.options?.['bookmarkId'] ?? '';\n const taskToken = taskData?.taskToken ?? command.options?.['taskToken'] ?? '';\n const activityId = taskData?.activityId ?? command.options?.['activityId'] ?? '';\n const outcome = command.options?.['outcome'] ?? 'Done';\n const userInput = command.options?.['userInput'] ?? {};\n\n // Handle workflow resume commands\n if (command.name === 'WorkflowManagement.WorkflowInstance:Resume' || command.name === 'resume-workflow') {\n if (!instanceId || !taskToken || !activityId) {\n return {\n success: false,\n message: {\n text: 'Missing required parameters: instanceId, taskToken, activityId',\n },\n };\n }\n\n try {\n const result = await this.workflowManager.resume(\n instanceId,\n activityId,\n outcome,\n userInput,\n taskToken\n );\n\n return {\n success: result.success,\n message: result.error\n ? {\n text: result.error,\n }\n : undefined,\n };\n } catch (error: unknown) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to resume workflow',\n },\n };\n }\n }\n\n return { success: true };\n }\n\n //#endregion\n\n //#region ---- Actions & Statuses ----\n\n /**\n * Get available actions for a task.\n * \n * Extracts actions from bookmark payload.\n */\n async getActions(task?: AXPTask<Record<string, any>>): Promise<AXPTaskActionMenuItem[]> {\n const actions: AXPTaskActionMenuItem[] = [];\n\n if (!task) return actions;\n\n const taskData = task.data as any;\n const payload = taskData?.payload as HumanTaskBookmarkPayload | undefined;\n\n if (!payload) return actions;\n\n // Extract actions from payload\n if (payload.actions) {\n const allActions = [\n ...(payload.actions.prefix || []),\n ...(payload.actions.suffix || []),\n ];\n\n for (const action of allActions) {\n const actionName = action.command?.name || action.name || 'unknown';\n \n actions.push({\n name: actionName,\n title: action.title || actionName,\n icon: action.icon,\n color: action.color,\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: actionName,\n userInput: {},\n },\n },\n });\n }\n } else {\n // Default actions if none provided\n actions.push({\n name: 'submit',\n title: this.translationService.translateSync('@general:actions.submit.title'),\n icon: 'fa-light fa-check',\n color: 'primary',\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'submit',\n userInput: {},\n },\n },\n });\n\n actions.push({\n name: 'cancel',\n title: this.translationService.translateSync('@general:actions.cancel.title'),\n icon: 'fa-light fa-times',\n color: 'default',\n priority: 'secondary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'cancel',\n userInput: {},\n },\n },\n });\n }\n\n return actions;\n }\n\n async getExtraFields(): Promise<AXPExtraField[]> {\n return [];\n }\n\n async getStatuses(): Promise<AXPTaskStatus[]> {\n return [\n {\n index: 0,\n key: AXPSystemStatuses.Pending.name,\n title: await this.translationService.translateAsync('@workflow-management:tasks.states.pending'),\n color: 'warning',\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Component ----\n\n override getComponent(): (() => Promise<Type<AXPTaskPopoverComponent>>) | Type<AXPTaskPopoverComponent> | null {\n return () =>\n import('./workflow-task-popover.component').then((m) => m.AXMWorkflowTaskPopoverComponent);\n }\n\n //#endregion\n}\n","import { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport {\n EnvironmentProviders,\n Injector,\n makeEnvironmentProviders,\n runInInjectionContext,\n} from '@angular/core';\nimport { AXPGenericWorkflowTaskProvider } from '../task-provider/generic-workflow-task.provider';\n\nexport function provideTaskWorkflow(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useFactory: (injector: Injector) => {\n return (async () => {\n const workflowDefinitionService = injector.get(AXPWorkflowDefinitionService);\n const categories = await workflowDefinitionService.getCategories();\n const providers: AXPGenericWorkflowTaskProvider[] = [];\n for (const category of categories) {\n const workflows = await workflowDefinitionService.getWorkflowsByCategoryId(category.id);\n for (const workflow of workflows) {\n const provider = runInInjectionContext(injector, () =>\n new AXPGenericWorkflowTaskProvider({\n name: workflow.name,\n title: workflow.title ?? workflow.name,\n icon: 'fa-light fa-diagram-project',\n definitionId: workflow.name,\n })\n );\n providers.push(provider);\n }\n }\n console.log('providers', providers);\n \n return providers;\n })();\n },\n deps: [Injector],\n },\n ]);\n}\n","import { AXMCalendarManagementModule } from '@acorex/modules/calendar-management';\nimport { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport {\n AXP_ENTITY_CONFIG_TOKEN,\n AXP_ENTITY_DEFINITION_LOADER,\n} from '@acorex/platform/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMWorkflowManagementWidgetsProvider } from './widget-definition.provider';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport {\n AXP_ACTIVITY_CATEGORY_PROVIDER,\n AXP_ACTIVITY_PROVIDER,\n AXP_WORKFLOW_CATEGORY_PROVIDER,\n AXP_WORKFLOW_PROVIDER,\n} from '@acorex/platform/workflow';\nimport { inject, NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXMWorkflowManagementModuleEntityProvider } from './entity.provider';\nimport {\n CollectSignatureActivity,\n CreateEntityFormActivity,\n HumanTaskActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n ShowToastActivity,\n} from './features/engine/activities';\nimport { AXMWorkflowPluginModule } from './features/workflow-plugin/workflow-plugin.module';\n\nimport { AXMWorkflowActivitiesDefinitionProvider } from './features/engine/activities/workflow-activities-definition.provider';\nimport { AXCCategoryProvider } from './features/engine/category.provider';\nimport { AXMWorkflowCategoryProvider } from './features/engine/workflows/workflow-category.provider';\nimport { AXMWorkflowDefinitionProvider } from './features/engine/workflows/workflow-definition.provider';\nimport { WorkflowManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMAutomationEvaluatorScopeProvider } from './features/automation-evaluator-scope.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { provideTaskWorkflow } from './features/engine/provider.task';\nimport { AXMActivityCommandConfiguratorWidget } from './features/activity-command-configurator/activity-command-configurator-widget.config';\nfunction routesFactory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes: Routes = [\n {\n path: ':app/workflow-management/studio',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/engine/studio/workflow-studio.component').then((c) => c.WorkflowStudioComponent),\n },\n ],\n },\n ];\n return routes;\n}\n\n\n@NgModule({\n imports: [\n AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule, // Register workflow plugin\n AXPWidgetCoreModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMWorkflowManagementWidgetsProvider, multi: true },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:create-entity-form',\n command: () => import('./features/engine/activities').then((c) => c.CreateEntityFormActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Automation condition builder: default automation.rules(refType, refId); modules override for their refTypes\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMAutomationEvaluatorScopeProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n CreateEntityFormActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ],\n})\nexport class AXMWorkflowManagementModule {}\n","//#region ---- Imports ----\n\nimport { AXPFilterClause } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Automation Model ----\n\n/**\n * Reusable automation entity model.\n * refType + refId reference any parent entity (e.g. AssessmentManagement.Questionnaire, refId = questionnaire id).\n */\nexport interface AXMWorkflowManagementAutomationEntityModel extends AXPEntityModel<string> {\n /** Entity type of the parent record (e.g. \"AssessmentManagement.Questionnaire\"). */\n refType: string;\n /** Parent record id. */\n refId: string;\n name?: string;\n title?: string;\n description?: string;\n condition: AXPFilterClause;\n /** Activity/command key and parameters (from activity-command-configurator). */\n command: { commandKey: string; params?: Record<string, unknown> };\n}\n\n//#endregion\n","// Entity exports - services and modules removed, handled by middleware\n// Exporting entity types for use in feature components\n\nexport * from './activity-category/activity-category.types';\nexport * from './activity-definition/activity-definition.types';\nexport * from './automation/automation.types';\nexport * from './workflow-definition/workflow-definition.types';\nexport * from './workflow-instance/workflow-instance.types';\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTreeItemClickBaseEventLegacy, AXTreeViewLegacyModule } from '@acorex/components/tree-view-legacy';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { ChangeDetectionStrategy, Component, inject, output, ViewEncapsulation } from '@angular/core';\nimport { AXPMultiLanguageStringResolverService } from '@acorex/platform/core';\nimport { AXPActivityCategory, AXPActivityDefinition, AXPActivityDefinitionService } from '@acorex/platform/workflow';\n\n//#endregion\n\n//#region ---- Tree View Item (same pattern as report) ----\n\nexport interface ActivityTreeViewItem {\n id: string;\n title: string;\n hasChild: boolean;\n children?: ActivityTreeViewItem[];\n item?: AXPActivityCategory | AXPActivityDefinition;\n type: 'category' | 'definition';\n expanded: boolean;\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-activity-categories-tree',\n standalone: true,\n imports: [AXDecoratorModule, AXTreeViewLegacyModule, AXTranslationModule],\n templateUrl: './activity-categories-tree.component.html',\n styleUrl: './activity-categories-tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-activity-categories-tree' },\n})\nexport class AXMActivityCategoriesTreeComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly multiLanguageResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Output Events ----\n\n categoryClick = output<AXPActivityCategory>();\n activityClick = output<AXPActivityDefinition>();\n\n /** Emitted when user starts dragging an activity (so parent can set draggedActivity for canvas drop). */\n activityDragStart = output<{ event: DragEvent; activity: AXPActivityDefinition }>();\n\n //#endregion\n\n //#region ---- Lazy Tree Data (same pattern as report-categories-tree) ----\n\n protected readonly provideLazyTreeView = async (\n selectedItemId?: string | number\n ): Promise<ActivityTreeViewItem[]> => {\n if (selectedItemId !== undefined && selectedItemId !== null) {\n const parentId = String(selectedItemId);\n if (parentId.startsWith('activity_')) {\n return [];\n }\n const categories = await this.activityDefinitionService.getCategories(parentId);\n const categoryItems: ActivityTreeViewItem[] = categories.map((item) => ({\n id: item.id,\n title: this.multiLanguageResolver.resolve(item.title) || item.id,\n hasChild: (item.childrenCount ?? 0) > 0 || (item.itemsCount ?? 0) > 0,\n item,\n type: 'category',\n expanded: false,\n }));\n const activities = await this.activityDefinitionService.getActivitiesByCategoryId(parentId);\n const definitionItems: ActivityTreeViewItem[] = activities.map((item) => ({\n id: `activity_${item.type ?? item.name}`,\n title: item.title ?? item.name ?? item.type ?? '',\n hasChild: false,\n item,\n type: 'definition',\n expanded: false,\n }));\n return [...categoryItems, ...definitionItems];\n }\n const categories = await this.activityDefinitionService.getCategories();\n return categories.map((item) => ({\n id: item.id,\n title: this.multiLanguageResolver.resolve(item.title) || item.id,\n hasChild: (item.childrenCount ?? 0) > 0 || (item.itemsCount ?? 0) > 0,\n item,\n type: 'category' as const,\n expanded: false,\n }));\n };\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleNodeClick(event: AXTreeItemClickBaseEventLegacy): void {\n const node = event.data as ActivityTreeViewItem;\n if (node.type === 'category' && node.item) {\n this.categoryClick.emit(node.item as AXPActivityCategory);\n } else if (node.type === 'definition' && node.item) {\n this.activityClick.emit(node.item as AXPActivityDefinition);\n }\n }\n\n protected onActivityDragStart(event: DragEvent, item: ActivityTreeViewItem): void {\n if (item.type !== 'definition' || !item.item) return;\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', (item.item as AXPActivityDefinition).type);\n }\n this.activityDragStart.emit({ event, activity: item.item as AXPActivityDefinition });\n }\n\n /**\n * Normalize FontAwesome icon for display: prepend 'fa-light ' when missing style prefix.\n */\n protected getActivityIconClass(icon: string | undefined): string {\n if (!icon?.trim()) return 'fa-light fa-puzzle-piece';\n const trimmed = icon.trim();\n const hasStylePrefix = /^(fa-light|fas|far|fal|fa-solid|fa-regular|fa-brands|fa-duotone)(\\s|$)/i.test(trimmed);\n return hasStylePrefix ? trimmed : `fa-light ${trimmed}`;\n }\n\n //#endregion\n}\n","<ax-tree-view-legacy\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view-legacy>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <span class=\"__tree-item __category\">\n <i class=\"fas fa-folder ax-text-warning __icon\"></i>\n <span class=\"__title\">{{ item.title }}</span>\n </span>\n } @else {\n <span\n class=\"__tree-item __activity\"\n draggable=\"true\"\n (dragstart)=\"onActivityDragStart($event, item)\"\n >\n <i class=\"__icon ax-text-primary\" [class]=\"getActivityIconClass(item.item?.icon)\"></i>\n <span class=\"__title\">{{ item.title }}</span>\n </span>\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPWorkflowManager, AXPActivityDefinitionService, AXPActivityDefinition, AXPActivityCategory, AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport {\n AXPPropertyViewerComponent,\n AXPPropertyViewerTab,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetProperty, AXPWidgetPropertyGroup } from '@acorex/platform/layout/widget-core';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { RootConfig } from '../../../const';\nimport { AXMActivityCategoriesTreeComponent } from './components/activity-categories-tree/activity-categories-tree.component';\n\ninterface ActivityCategoryUI {\n id: string;\n name: string;\n title: string;\n icon: string;\n color: string;\n activities: ActivityInfo[];\n}\n\ninterface PropertySchema {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'select' | 'any';\n required: boolean;\n description?: string;\n defaultValue?: any;\n options?: Array<{ value: any; label: string }>; // For select type\n}\n\ninterface ActivityInfo {\n type: string;\n name: string;\n description: string;\n icon: string;\n properties: PropertySchema[];\n defaultProperties?: Record<string, any>; // Default property values\n}\n\ninterface ExecutionLog {\n timestamp: Date;\n level: 'info' | 'success' | 'warning' | 'error';\n message: string;\n data?: any;\n expanded?: boolean;\n}\n\n/**\n * Represents a connection from one outcome to a target node.\n */\ninterface OutcomeConnection {\n outcome: string; // e.g., \"200\", \"Done\", \"Failed\"\n targetNodeId: string;\n}\n\ninterface VisualNode {\n id: string;\n type: string;\n name: string;\n icon: string;\n properties: Record<string, any>;\n position: { x: number; y: number };\n\n /**\n * @deprecated Use outcomeConnections instead\n * Simple list of connections (for backward compatibility)\n */\n connections: string[];\n\n /**\n * Outcome-based connections.\n * Each outcome can connect to a different target.\n */\n outcomeConnections?: OutcomeConnection[];\n\n /**\n * Available outcomes for this node.\n * Computed from activity descriptor.\n */\n outcomes?: string[];\n}\n\ntype EditorTab = 'json' | 'visual';\n\ninterface WorkflowSettings {\n // Identification\n definitionId: string;\n name: string;\n description: string;\n\n // Workflow Common\n inputs: WorkflowInput[];\n outputs: WorkflowOutput[];\n variables: WorkflowVariable[];\n outcomes: string[];\n\n // Options\n usableAsActivity: boolean;\n autoUpdateConsumingWorkflows: boolean;\n\n // Metadata\n version: number;\n isLatest: boolean;\n isPublished: boolean;\n toolVersion: string;\n providerName: string;\n}\n\ninterface WorkflowInput {\n name: string;\n title: string;\n description?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean;\n hidden?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n };\n validations?: Array<{ rule: string; message?: string; options?: any }>;\n}\n\ninterface WorkflowOutput {\n name: string;\n title: string;\n description?: string;\n schema: {\n dataType: string;\n };\n}\n\ninterface WorkflowVariable {\n name: string;\n typeName: string;\n value?: any;\n description?: string;\n}\n\n\n@Component({\n selector: 'app-workflow-studio',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSelectBoxModule,\n AXSearchBoxModule,\n AXSwitchModule,\n AXTabsModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPPropertyViewerComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutStartSideComponent,\n AXMActivityCategoriesTreeComponent,\n ],\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ],\n templateUrl: './workflow-studio.component.html',\n styleUrls: ['./workflow-studio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WorkflowStudioComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n activeTab = signal<EditorTab>('json');\n selectedCategory = signal<AXPActivityCategory | null>(null);\n selectedActivity = signal<AXPActivityDefinition | null>(null);\n workflowJson = signal<string>(this.getEmptyWorkflow());\n visualNodes = signal<VisualNode[]>([]);\n selectedNode = signal<VisualNode | null>(null);\n isExecuting = signal<boolean>(false);\n executionLogs = signal<ExecutionLog[]>([]);\n\n // Execution Dialog State\n showExecutionDialog = signal<boolean>(false);\n workflowInstanceState = signal<any>(null);\n\n // UI State\n showPropertiesPanel = signal<boolean>(true);\n\n /** When true, workflow changes can trigger auto-save (e.g. apply to JSON); actual persist is up to the host. */\n autoSaveEnabled = signal<boolean>(false);\n\n /** Activity definition for the selected node (loaded when selection changes). */\n activityDefinitionForSelected = signal<AXPActivityDefinition | null>(null);\n\n /** Cache key for property viewer tabs so we keep stable refs and avoid re-render/focus loss on value change. */\n private lastPropertyViewerStructKey: string | null = null;\n\n /** Cached tabs; updated only when selected node identity or def structure changes. */\n private readonly cachedPropertyViewerTabs = signal<AXPPropertyViewerTab[]>([]);\n\n /** Tabs for the property viewer (platform widget-based rendering). Stable refs to prevent focus loss. */\n readonly propertyViewerTabs = computed<AXPPropertyViewerTab[]>(() => this.cachedPropertyViewerTabs());\n\n private readonly updatePropertyViewerTabsEffect = effect(() => {\n const def = this.activityDefinitionForSelected();\n const node = this.selectedNode();\n if (!node) {\n this.lastPropertyViewerStructKey = null;\n this.cachedPropertyViewerTabs.set([]);\n return;\n }\n const structKey = `${node.id}:${node.type}:${(def?.inputs?.length ?? 0)}`;\n if (this.lastPropertyViewerStructKey === structKey) return;\n this.lastPropertyViewerStructKey = structKey;\n this.cachedPropertyViewerTabs.set(this.buildPropertyViewerTabs(def, node));\n });\n\n protected readonly propertyViewerRef = viewChild(AXPPropertyViewerComponent);\n\n private readonly loadActivityDefinitionForSelectedEffect = effect(() => {\n const node = this.selectedNode();\n if (!node) {\n this.activityDefinitionForSelected.set(null);\n return;\n }\n this.activityDefinitionService.getActivityByName(node.type).then((def) => {\n this.activityDefinitionForSelected.set(def ?? null);\n });\n });\n\n private readonly initPropertyViewerContextEffect = effect(() => {\n const viewer = this.propertyViewerRef();\n const node = this.selectedNode();\n const tabs = this.propertyViewerTabs();\n if (viewer && node && tabs.length > 0) {\n viewer.initializeContext({ ...node, properties: { ...node.properties } });\n }\n });\n\n // Workflow Settings\n workflowSettings = signal<WorkflowSettings>({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n\n /** Data source for variable type select (settings modal). */\n readonly variableTypeOptions: Array<{ value: string; label: string }> = [\n { value: 'string', label: 'String' },\n { value: 'number', label: 'Number' },\n { value: 'boolean', label: 'Boolean' },\n { value: 'object', label: 'Object' },\n { value: 'array', label: 'Array' }\n ];\n\n // Canvas state\n canvasOffset = { x: 0, y: 0 };\n isDraggingCanvas = false;\n dragStartPos = { x: 0, y: 0 };\n draggedActivity: ActivityInfo | null = null;\n draggedNode: VisualNode | null = null;\n nodeDragOffset = { x: 0, y: 0 };\n connectionSource: { node: VisualNode; type: 'in' | 'out'; outcome?: string } | null = null;\n\n /** Canvas area element for zoom/center/auto-layout. */\n protected readonly canvasAreaRef = viewChild<ElementRef<HTMLElement>>('canvasAreaRef');\n\n override async ngOnInit() {\n // Page layout initialization\n await super.ngOnInit();\n \n // Load workflow from query parameter if provided\n await this.loadWorkflowFromRoute();\n }\n\n /**\n * Load workflow from route query parameter\n */\n private async loadWorkflowFromRoute(): Promise<void> {\n // Read from snapshot (for initial load)\n const workflowName = this.activatedRoute.snapshot.queryParams['workflow'];\n \n if (!workflowName) {\n return;\n }\n\n await this.loadWorkflowByName(workflowName);\n \n // Subscribe to query param changes (like drive component)\n this.activatedRoute.queryParams\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (params) => {\n const newWorkflowName = params['workflow'];\n if (newWorkflowName && newWorkflowName !== workflowName) {\n await this.loadWorkflowByName(newWorkflowName);\n }\n });\n }\n\n /**\n * Update a single workflow setting field (for signal-based form binding).\n */\n updateWorkflowSetting<K extends keyof WorkflowSettings>(key: K, value: WorkflowSettings[K]): void {\n this.workflowSettings.update((s) => ({ ...s, [key]: value }));\n }\n\n /**\n * Handle JSON editor input (textarea value -> workflowJson signal).\n */\n onWorkflowJsonInput(ev: Event): void {\n const value = (ev.target as HTMLTextAreaElement).value;\n this.workflowJson.set(value);\n }\n\n /**\n * Load workflow by name\n */\n private async loadWorkflowByName(workflowName: string): Promise<void> {\n\n try {\n this.addLog('info', `Loading workflow: ${workflowName}...`);\n\n // Try to get workflow from entity service first\n const workflowEntityService = this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data<any, any>();\n\n const result = await workflowEntityService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: { type: 'equal' },\n value: workflowName,\n }]\n }\n });\n\n let workflowDef: any = null;\n\n if (result.items && result.items.length > 0) {\n workflowDef = result.items[0];\n } else {\n // Try workflow definition service\n workflowDef = await this.workflowDefinitionService.getWorkflowByName(workflowName);\n }\n\n if (!workflowDef) {\n this.addLog('warning', `Workflow '${workflowName}' not found`);\n return;\n }\n\n // Convert workflow definition to studio JSON format\n const studioJson = this.convertWorkflowDefinitionToStudioJson(workflowDef);\n this.workflowJson.set(JSON.stringify(studioJson, null, 2));\n\n // Update workflow settings\n this.workflowSettings.set({\n definitionId: workflowDef.id || workflowDef.definitionId || workflowDef.name,\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n inputs: (workflowDef.inputs || []).map((input: any) => ({\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema || { dataType: 'string' },\n validations: input.validations,\n })),\n outputs: (workflowDef.outputs || []).map((output: any) => ({\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema || { dataType: 'string' },\n })),\n variables: workflowDef.variables || [],\n outcomes: workflowDef.outcomes || ['Done'],\n usableAsActivity: workflowDef.extensions?.elsa?.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflowDef.extensions?.elsa?.options?.autoUpdateConsumingWorkflows || false,\n version: workflowDef.version || 1,\n isLatest: workflowDef.isLatest !== undefined ? workflowDef.isLatest : true,\n isPublished: workflowDef.isPublished || false,\n toolVersion: workflowDef.toolVersion || '1.0.0',\n providerName: workflowDef.providerName || 'ACoreX',\n });\n\n this.addLog('success', `Workflow '${workflowName}' loaded successfully`);\n\n // If visual tab is active, convert to visual\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n } catch (error: any) {\n this.addLog('error', `Failed to load workflow: ${error.message}`);\n console.error('[WorkflowStudio] Error loading workflow:', error);\n }\n }\n\n /**\n * Convert workflow definition to studio JSON format\n */\n private convertWorkflowDefinitionToStudioJson(workflowDef: any): any {\n // Convert graph format to root activity format\n const graph = workflowDef.graph;\n if (!graph) {\n return this.getEmptyWorkflow();\n }\n\n // Build root activity structure\n const rootActivity: any = {\n id: graph.startActivityId || 'root',\n type: 'workflow-activity:sequence',\n name: workflowDef.title || workflowDef.name || 'Root',\n children: [],\n };\n\n // Convert activities to children\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n\n // Build activity map\n const activityMap = new Map<string, any>();\n activities.forEach((activity: any) => {\n activityMap.set(activity.id, {\n id: activity.id,\n type: activity.name || activity.type,\n name: activity.customProperties?.nodeId || activity.id,\n properties: activity.inputs || {},\n children: [],\n });\n });\n\n // Build connections tree\n const startActivity = activityMap.get(graph.startActivityId);\n if (startActivity) {\n rootActivity.children.push(startActivity);\n \n // Follow connections to build tree\n const processed = new Set<string>();\n const processActivity = (activityId: string) => {\n if (processed.has(activityId)) {\n return;\n }\n processed.add(activityId);\n\n const activity = activityMap.get(activityId);\n if (!activity) {\n return;\n }\n\n // Find outgoing connections\n const outgoingConnections = connections.filter(\n (conn: any) => conn.source.activtyName === activityId\n );\n\n outgoingConnections.forEach((conn: any) => {\n const targetActivity = activityMap.get(conn.target.activtyName);\n if (targetActivity && !processed.has(targetActivity.id)) {\n activity.children.push(targetActivity);\n processActivity(targetActivity.id);\n }\n });\n };\n\n processActivity(graph.startActivityId);\n }\n\n return {\n id: workflowDef.id || workflowDef.name || 'workflow',\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n version: workflowDef.version || 1,\n root: rootActivity,\n };\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPageTitle(): Promise<string> {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.title');\n }\n\n override async getPageDescription(): Promise<string | null> {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.description');\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'execute-workflow',\n title: '@workflow-management:workflow-studio.actions.execute-workflow.title',\n icon: 'fa-light fa-play',\n color: 'success',\n disabled: this.isExecuting(),\n command: { name: 'execute-workflow' },\n },\n {\n name: 'workflow-settings',\n title: '@workflow-management:workflow-studio.actions.settings.title',\n icon: 'fa-light fa-cog',\n color: 'default',\n command: { name: 'workflow-settings' },\n },\n {\n name: 'export-workflow',\n title: '@workflow-management:workflow-studio.actions.export.title',\n icon: 'fa-light fa-download',\n color: 'default',\n command: { name: 'export-workflow' },\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'format-json',\n title: '@workflow-management:workflow-studio.actions.format-json.title',\n icon: 'fa-light fa-code',\n color: 'default',\n command: { name: 'format-json' },\n },\n {\n name: 'clear-canvas',\n title: '@workflow-management:workflow-studio.actions.clear-canvas.title',\n icon: 'fa-light fa-trash',\n color: 'danger',\n visible: this.activeTab() === 'visual',\n command: { name: 'clear-canvas' },\n },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'execute-workflow':\n this.openExecutionDialog();\n break;\n case 'workflow-settings':\n this.openWorkflowSettings();\n break;\n case 'export-workflow':\n this.downloadWorkflowDefinition();\n break;\n case 'format-json':\n this.formatJson();\n break;\n case 'clear-canvas':\n this.clearCanvas();\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Category & Activity Loading ----\n\n /**\n * Handle category selection from tree\n */\n onCategoryClick(category: AXPActivityCategory): void {\n this.selectedCategory.set(category);\n this.selectedActivity.set(null);\n }\n\n /**\n * Handle activity selection from tree\n */\n onActivityClick(activity: AXPActivityDefinition): void {\n this.selectedActivity.set(activity);\n this.addLog('info', `Activity selected: ${activity.name}`);\n }\n\n /**\n * Handle drag start from activity tree – set draggedActivity so canvas drop can add the node.\n */\n onActivityDragStartFromTree(payload: { event: DragEvent; activity: AXPActivityDefinition }): void {\n this.draggedActivity = this.convertActivityDefinitionToInfo(payload.activity);\n if (payload.event.dataTransfer) {\n payload.event.dataTransfer.effectAllowed = 'copy';\n payload.event.dataTransfer.setData('text/plain', payload.activity.type);\n }\n }\n\n /**\n * Convert AXPActivityDefinition to ActivityInfo\n */\n private convertActivityDefinitionToInfo(activity: AXPActivityDefinition): ActivityInfo {\n const properties: PropertySchema[] = (activity.inputs || []).map(input => ({\n name: input.name,\n type: this.getPropertyTypeFromSchema(input.schema),\n required: !input.schema.nullable,\n description: input.description,\n defaultValue: input.schema.defaultValue\n }));\n\n const defaultProperties: Record<string, any> = {};\n properties.forEach(prop => {\n if (prop.defaultValue !== undefined) {\n defaultProperties[prop.name] = prop.defaultValue;\n }\n });\n\n return {\n type: activity.type,\n name: activity.name,\n description: activity.description || '',\n icon: this.normalizeActivityIcon(activity.icon),\n properties,\n defaultProperties\n };\n }\n\n /**\n * Normalize FontAwesome icon: if missing style prefix (e.g. fa-light, fas), prepend 'fa-light ' so short values like 'fa-shield-alt' render.\n */\n private normalizeActivityIcon(icon: string | undefined): string {\n if (!icon?.trim()) return 'fa-light fa-circle';\n const trimmed = icon.trim();\n const hasStylePrefix = /^(fa-light|fas|far|fal|fa-solid|fa-regular|fa-brands|fa-duotone)(\\s|$)/i.test(trimmed);\n return hasStylePrefix ? trimmed : `fa-light ${trimmed}`;\n }\n\n /**\n * Get property type from schema\n */\n private getPropertyTypeFromSchema(schema: any): 'string' | 'number' | 'boolean' | 'object' | 'array' | 'select' | 'any' {\n const dataType = schema?.dataType || 'string';\n if (dataType === 'array') return 'array';\n if (dataType === 'object') return 'object';\n if (dataType === 'boolean') return 'boolean';\n if (dataType === 'number' || dataType === 'integer') return 'number';\n return 'string';\n }\n\n /**\n * Get category color\n */\n private getCategoryColor(categoryId: string): string {\n const colorMap: Record<string, string> = {\n 'workflow-markers': '#10B981',\n 'control-flow': '#3B82F6',\n 'user-interaction': '#8B5CF6',\n 'data': '#10B981',\n 'navigation': '#F59E0B',\n 'events': '#EF4444',\n 'http': '#06B6D4'\n };\n return colorMap[categoryId] || '#64748B';\n }\n\n /**\n * Get empty workflow JSON\n */\n private getEmptyWorkflow(): string {\n return JSON.stringify({\n id: 'new-workflow',\n name: '',\n description: '',\n version: 1,\n root: {\n id: 'root',\n type: 'workflow-activity:sequence',\n name: 'Root',\n children: []\n }\n }, null, 2);\n }\n\n //#endregion\n\n\n\n\n /**\n * Sync visualizer with JSON changes\n */\n syncVisualizerWithJson() {\n try {\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n } catch (err) {\n console.error('[WorkflowStudio] Error syncing visualizer:', err);\n }\n }\n\n //#region ---- Workflow Execution ----\n\n /**\n * Open execution dialog\n */\n openExecutionDialog() {\n this.showExecutionDialog.set(true);\n this.workflowInstanceState.set(null);\n }\n\n /**\n * Close execution dialog\n */\n closeExecutionDialog() {\n this.showExecutionDialog.set(false);\n this.workflowInstanceState.set(null);\n }\n\n /**\n * Start workflow execution\n */\n async startWorkflowExecution() {\n await this.runWorkflow();\n }\n\n\n /**\n * اجرای workflow\n */\n async runWorkflow() {\n this.isExecuting.set(true);\n this.executionLogs.set([]);\n this.workflowInstanceState.set({\n status: 'running',\n startTime: new Date(),\n currentState: null\n });\n\n this.addLog('info', 'شروع اجرای Workflow...');\n\n try {\n // Parse JSON\n const workflowDef = JSON.parse(this.workflowJson());\n const logMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.json-parsed');\n this.addLog('success', logMessage, workflowDef);\n\n // Save workflow definition to entity service first\n const workflowId = workflowDef.id || `workflow-${Date.now()}`;\n const definitionToSave = this.exportWorkflowDefinition();\n \n if (!definitionToSave) {\n throw new Error('Failed to export workflow definition');\n }\n\n // Save or update workflow definition\n try {\n const existing = await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().byKey(workflowId);\n\n if (existing) {\n await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().update(workflowId, definitionToSave);\n } else {\n await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().create({ ...definitionToSave, id: workflowId });\n }\n\n const saveMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.success.workflow-saved');\n this.addLog('success', saveMessage);\n } catch (saveError: any) {\n // Continue execution even if save fails\n const saveErrorMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.warning.save-failed');\n this.addLog('warning', `${saveErrorMessage}: ${saveError.message}`);\n }\n\n // اجرای workflow\n const executingMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.executing');\n this.addLog('info', executingMessage);\n\n // Start workflow execution using the workflow name\n const workflowName = definitionToSave.name || workflowId;\n let result = await this.workflowManager.start(workflowName, {});\n this.addLog('info', `Workflow started. Instance ID: ${result.instanceId}`, result);\n\n if (!result.instanceId) {\n this.addLog('error', '❌ Workflow با خطا مواجه شد', result);\n return;\n }\n\n // Handle workflow execution loop - execute all frontend tasks\n let currentResult = result;\n let taskCount = 0;\n\n while (currentResult.nextTask) {\n taskCount++;\n const task = currentResult.nextTask;\n\n this.addLog('info', `📋 Task ${taskCount}: ${task.activityType} (${task.activityName || task.activityId})`, task);\n\n try {\n // Execute frontend task\n this.addLog('info', `⚡ Executing task: ${task.activityType}...`);\n // const { output, outcome } = await this.workflowManager.execute(task);\n // this.addLog('success', `✅ Task executed. Outcome: ${outcome}`, { output, outcome });\n\n // Complete task and get next\n this.addLog('info', `🔄 Completing task and getting next...`);\n // currentResult = await this.workflowManager.complete(\n // currentResult.instanceId!,\n // task,\n // outcome,\n // output\n // );\n\n if (!currentResult.instanceId) {\n this.addLog('error', '❌ Task completion failed', currentResult);\n break;\n }\n\n if (currentResult.nextTask) {\n this.addLog('info', `➡️ Next task available: ${currentResult.nextTask.activityType}`);\n } else {\n this.addLog('success', '✅ No more tasks. Workflow completed!');\n }\n } catch (error: any) {\n this.addLog('error', `❌ Error executing task: ${error.message}`, error);\n currentResult = {\n ...currentResult,\n success: false,\n error: error.message || 'Task execution failed'\n };\n break;\n }\n }\n\n // نتیجه\n this.workflowInstanceState.set({\n status: 'finished',\n finalResult: currentResult,\n startTime: this.workflowInstanceState().startTime || new Date(),\n endTime: new Date(),\n result: currentResult,\n currentState: currentResult.state?.output?.['taskStatus'] || currentResult.state?.output?.['currentState']\n });\n\n if (currentResult.success) {\n this.addLog('success', `✅ Workflow با موفقیت اجرا شد! (${taskCount} task(s) executed)`, currentResult);\n } else {\n this.addLog('error', '❌ Workflow با خطا مواجه شد: ' + (currentResult.error || 'Unknown error'), currentResult);\n }\n\n } catch (error: any) {\n this.addLog('error', '❌ خطا در اجرای Workflow: ' + error.message, error);\n this.workflowInstanceState.set({\n status: 'error',\n error: error.message,\n startTime: this.workflowInstanceState().startTime\n });\n } finally {\n this.isExecuting.set(false);\n }\n }\n\n\n /**\n * اضافه کردن لاگ\n */\n addLog(level: 'info' | 'success' | 'warning' | 'error', message: string, data?: any) {\n const logs = this.executionLogs();\n logs.push({\n timestamp: new Date(),\n level,\n message,\n data\n });\n this.executionLogs.set([...logs]);\n }\n\n\n /**\n * کپی کردن نمونه activity\n */\n copyActivityTemplate(activity: ActivityInfo) {\n const template = {\n id: `${activity.type.toLowerCase()}-${Date.now()}`,\n type: activity.type,\n name: activity.name,\n properties: {}\n };\n\n // کپی در کلیپبورد\n navigator.clipboard.writeText(JSON.stringify(template, null, 2));\n this.addLog('success', `✂️ Template برای ${activity.name} کپی شد!`);\n }\n\n /**\n * فرمت کردن JSON\n */\n formatJson() {\n try {\n const parsed = JSON.parse(this.workflowJson());\n this.workflowJson.set(JSON.stringify(parsed, null, 2));\n this.addLog('success', '✨ JSON فرمت شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در فرمت: ' + error.message);\n }\n }\n\n\n /**\n * Open workflow settings dialog built with Layout Builder (platform widgets / Acorex).\n */\n openWorkflowSettings(): void {\n this.syncWorkflowSettingsFromJson();\n const settings = this.workflowSettings();\n\n const dialogContext = {\n name: settings.name,\n definitionId: settings.definitionId,\n description: settings.description ?? '',\n inputsJson: JSON.stringify(settings.inputs, null, 2),\n outputsJson: JSON.stringify(settings.outputs, null, 2),\n variablesJson: JSON.stringify(settings.variables, null, 2),\n outcomesJson: Array.isArray(settings.outcomes) ? settings.outcomes.join(', ') : 'Done',\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows,\n toolVersion: settings.toolVersion ?? '1.0.0',\n providerName: settings.providerName ?? 'WorkflowStudio'\n };\n\n this.layoutBuilder\n .create()\n .dialog<void>(dialog => {\n dialog\n .setTitle('@workflow-management:workflow-studio.settings.title')\n .setSize('lg')\n .setCloseButton(true)\n .setContext(dialogContext)\n .content(flex => {\n flex\n .setDirection('column')\n .setGap('12px')\n .fieldset(general => {\n general\n .setTitle('@workflow-management:workflow-studio.settings.tabs.general')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.name.title',\n field => {\n field.path('name');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder'\n });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title',\n field => {\n field.path('definitionId');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder'\n });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.description.title',\n field => {\n field.path('description');\n field.largeTextBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder',\n rows: 4\n });\n }\n );\n })\n .fieldset(inputs => {\n inputs\n .setTitle('@workflow-management:workflow-studio.settings.tabs.inputs')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.inputs.fields.inputs-json',\n field => {\n field.path('inputsJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(outputs => {\n outputs\n .setTitle('@workflow-management:workflow-studio.settings.tabs.outputs')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.outputs.fields.outputs-json',\n field => {\n field.path('outputsJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(variables => {\n variables\n .setTitle('@workflow-management:workflow-studio.settings.tabs.variables')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.variables.fields.variables-json',\n field => {\n field.path('variablesJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(advanced => {\n advanced\n .setTitle('@workflow-management:workflow-studio.settings.tabs.advanced')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.version',\n field => {\n field.path('version');\n field.numberBox({ min: 1 });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.is-latest',\n field => {\n field.path('isLatest');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.is-published',\n field => {\n field.path('isPublished');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.usable-as-activity',\n field => {\n field.path('usableAsActivity');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.auto-update-consuming',\n field => {\n field.path('autoUpdateConsumingWorkflows');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.tool-version',\n field => {\n field.path('toolVersion');\n field.textBox({ placeholder: '1.0.0' });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.provider-name',\n field => {\n field.path('providerName');\n field.textBox({ placeholder: 'WorkflowStudio' });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.outcomes-label',\n field => {\n field.path('outcomesJson');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.outcomes-placeholder'\n });\n }\n );\n });\n })\n .setActions(actions => {\n actions\n .cancel('@workflow-management:workflow-studio.settings.actions.cancel')\n .submit('@workflow-management:workflow-studio.settings.actions.save');\n })\n .onAction(async dialogRef => {\n const action = dialogRef.action();\n if (action === 'cancel') return;\n const ctx = dialogRef.context();\n if (!ctx) return;\n\n let inputs: WorkflowInput[] = [];\n let outputs: WorkflowOutput[] = [];\n let variables: WorkflowVariable[] = [];\n let outcomes: string[] = ['Done'];\n try {\n if (typeof ctx.inputsJson === 'string' && ctx.inputsJson.trim()) {\n inputs = JSON.parse(ctx.inputsJson);\n }\n } catch {\n this.addLog('error', 'Invalid inputs JSON');\n }\n try {\n if (typeof ctx.outputsJson === 'string' && ctx.outputsJson.trim()) {\n outputs = JSON.parse(ctx.outputsJson);\n }\n } catch {\n this.addLog('error', 'Invalid outputs JSON');\n }\n try {\n if (typeof ctx.variablesJson === 'string' && ctx.variablesJson.trim()) {\n variables = JSON.parse(ctx.variablesJson);\n }\n } catch {\n this.addLog('error', 'Invalid variables JSON');\n }\n if (typeof ctx.outcomesJson === 'string' && ctx.outcomesJson.trim()) {\n outcomes = ctx.outcomesJson.split(',').map((s: string) => s.trim()).filter(Boolean);\n }\n if (outcomes.length === 0) outcomes = ['Done'];\n\n const newSettings: WorkflowSettings = {\n definitionId: String(ctx.definitionId ?? ''),\n name: String(ctx.name ?? ''),\n description: String(ctx.description ?? ''),\n inputs,\n outputs,\n variables,\n outcomes,\n version: Number(ctx.version) || 1,\n isLatest: Boolean(ctx.isLatest),\n isPublished: Boolean(ctx.isPublished),\n usableAsActivity: Boolean(ctx.usableAsActivity),\n autoUpdateConsumingWorkflows: Boolean(ctx.autoUpdateConsumingWorkflows),\n toolVersion: String(ctx.toolVersion ?? '1.0.0'),\n providerName: String(ctx.providerName ?? 'WorkflowStudio')\n };\n this.workflowSettings.set(newSettings);\n this.applyWorkflowSettingsToJson();\n });\n })\n .show();\n }\n\n /**\n * Sync workflowSettings from current workflow JSON (used before opening settings dialog).\n */\n private syncWorkflowSettingsFromJson(): void {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const convertInput = (input: any): WorkflowInput => {\n if (input.schema) {\n return {\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema,\n validations: input.validations\n };\n }\n return {\n name: input.name,\n title: input.name,\n description: input.description,\n schema: {\n dataType: input.typeName || 'string',\n defaultValue: input.defaultValue\n },\n validations: input.isRequired ? [{ rule: 'required' }] : undefined\n };\n };\n const convertOutput = (output: any): WorkflowOutput => {\n if (output.schema) {\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema\n };\n }\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: { dataType: output.typeName || 'string' }\n };\n };\n this.workflowSettings.set({\n definitionId: workflow.definitionId || workflow.id || '',\n name: workflow.name || '',\n description: workflow.description || '',\n inputs: (workflow.inputs || []).map(convertInput),\n outputs: (workflow.outputs || []).map(convertOutput),\n variables: workflow.variables || [],\n outcomes: workflow.outcomes || ['Done'],\n usableAsActivity: workflow.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflow.options?.autoUpdateConsumingWorkflows || false,\n version: workflow.version || 1,\n isLatest: workflow.isLatest !== undefined ? workflow.isLatest : true,\n isPublished: workflow.isPublished || false,\n toolVersion: workflow.toolVersion || '1.0.0',\n providerName: workflow.providerName || 'WorkflowStudio'\n });\n } catch {\n this.workflowSettings.set({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n }\n }\n\n /**\n * Apply current workflowSettings to workflow JSON (used after saving from dialog).\n */\n private applyWorkflowSettingsToJson(): void {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n workflow.definitionId = settings.definitionId;\n workflow.name = settings.name;\n workflow.description = settings.description;\n workflow.version = settings.version;\n workflow.isLatest = settings.isLatest;\n workflow.isPublished = settings.isPublished;\n workflow.toolVersion = settings.toolVersion;\n workflow.providerName = settings.providerName;\n workflow.options = {\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows\n };\n workflow.variables = settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n }));\n workflow.inputs = settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations\n }));\n workflow.outputs = settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: { dataType: o.schema.dataType }\n }));\n workflow.outcomes = settings.outcomes;\n workflow.customProperties = workflow.customProperties || {};\n workflow.isReadonly = false;\n workflow.isSystem = false;\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Workflow settings saved');\n } catch (error: any) {\n this.addLog('error', '❌ Failed to save settings: ' + error?.message);\n }\n }\n\n /**\n * Export workflow به فرمت Elsa Workflow Definition v3.0.0\n * https://elsaworkflows.io/schemas/workflow-definition/v3.0.0/schema.json\n */\n exportWorkflowDefinition(): any {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n\n // Create Elsa Workflow Definition v3.0.0 structure\n const definition: any = {\n // VersionedEntity fields\n id: workflow.id || this.generateId(),\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n\n // Identification fields\n definitionId: settings.definitionId || workflow.id || this.generateId(),\n name: settings.name || workflow.name || 'Untitled Workflow',\n description: settings.description || workflow.description || '',\n toolVersion: settings.toolVersion || '3.0.0',\n\n // Materialization fields\n providerName: settings.providerName || 'ACoreX',\n materializerContext: {\n materializerName: 'Json',\n // Store the root activity as JSON string\n stringData: JSON.stringify(workflow.root)\n },\n\n // WorkflowCommon fields\n options: {\n usableAsActivity: settings.usableAsActivity || false,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows || false\n },\n\n // Variables array\n variables: settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n })),\n\n // Inputs array\n inputs: settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations || []\n })),\n\n // Outputs array\n outputs: settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n })),\n\n // Outcomes array\n outcomes: settings.outcomes || ['Done'],\n\n // Custom properties\n customProperties: workflow.customProperties || {},\n\n // Flags\n isReadonly: false,\n isSystem: false,\n\n // Root activity (direct reference for Elsa compatibility)\n root: workflow.root\n };\n\n return definition;\n } catch (error: any) {\n this.addLog('error', '❌ خطا در export: ' + error.message);\n return null;\n }\n }\n\n /**\n * دانلود WorkflowDefinition به صورت JSON file\n */\n downloadWorkflowDefinition() {\n const definition = this.exportWorkflowDefinition();\n if (!definition) return;\n\n const blob = new Blob([JSON.stringify(definition, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${definition.definitionId || 'workflow'}-v${definition.version}.json`;\n link.click();\n URL.revokeObjectURL(url);\n\n this.addLog('success', `📥 Workflow Definition دانلود شد: ${link.download}`);\n }\n\n private generateId(): string {\n return `wf-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n // ============ Workflow Inputs Management ============\n\n addWorkflowInput() {\n const settings = this.workflowSettings();\n settings.inputs.push({\n name: `input${settings.inputs.length + 1}`,\n title: `Input ${settings.inputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string',\n defaultValue: undefined\n },\n validations: undefined\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowInput(index: number) {\n const settings = this.workflowSettings();\n settings.inputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInput(index: number, field: string, value: any) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n\n if (field === 'schema') {\n // For nested schema updates\n (input as any)[field] = value;\n } else if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n (input.schema as any)[schemaField] = value;\n } else {\n (input as any)[field] = value;\n }\n\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInputSchema(index: number, schemaField: string, value: any) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n (input.schema as any)[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInputValidation(index: number, isRequired: boolean) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (isRequired) {\n if (!input.validations) {\n input.validations = [];\n }\n if (!input.validations.some(v => v.rule === 'required')) {\n input.validations.push({ rule: 'required' });\n }\n } else {\n input.validations = input.validations?.filter(v => v.rule !== 'required');\n if (input.validations?.length === 0) {\n input.validations = undefined;\n }\n }\n this.workflowSettings.set({ ...settings });\n }\n\n getInputIsRequired(input: WorkflowInput): boolean {\n return input.validations?.some(v => v.rule === 'required') ?? false;\n }\n\n // ============ Workflow Outputs Management ============\n\n addWorkflowOutput() {\n const settings = this.workflowSettings();\n settings.outputs.push({\n name: `output${settings.outputs.length + 1}`,\n title: `Output ${settings.outputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string'\n }\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowOutput(index: number) {\n const settings = this.workflowSettings();\n settings.outputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowOutput(index: number, field: string, value: any) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n\n if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n (output.schema as any)[schemaField] = value;\n } else {\n (output as any)[field] = value;\n }\n\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowOutputSchema(index: number, schemaField: string, value: any) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n (output.schema as any)[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n // ============ Workflow Variables Management ============\n\n addWorkflowVariable() {\n const settings = this.workflowSettings();\n settings.variables.push({\n name: `variable${settings.variables.length + 1}`,\n typeName: 'string',\n value: '',\n description: ''\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowVariable(index: number) {\n const settings = this.workflowSettings();\n settings.variables.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowVariable(index: number, field: keyof WorkflowVariable, value: any) {\n const settings = this.workflowSettings();\n (settings.variables[index] as any)[field] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n /**\n * بهروزرسانی outcomes از string\n */\n updateOutcomes(outcomesString: string) {\n const settings = this.workflowSettings();\n settings.outcomes = outcomesString\n .split(',')\n .map(o => o.trim())\n .filter(o => o.length > 0);\n this.workflowSettings.set({ ...settings });\n }\n\n /**\n * پاک کردن لاگها\n */\n clearLogs() {\n this.executionLogs.set([]);\n }\n\n // ============ Visual Designer Methods ============\n\n /**\n * تغییر تب\n */\n switchTab(tab: EditorTab) {\n if (tab === 'visual' && this.activeTab() === 'json') {\n // تبدیل JSON به Visual\n this.jsonToVisual();\n } else if (tab === 'json' && this.activeTab() === 'visual') {\n // تبدیل Visual به JSON\n this.visualToJson();\n }\n this.activeTab.set(tab);\n }\n\n /**\n * انتخاب Node\n */\n selectNodeById(node: VisualNode) {\n this.selectedNode.set(node);\n }\n\n /**\n * Delete node from canvas (used from template to avoid event propagation).\n */\n deleteNodeFromCanvas(nodeId: string): void {\n this.deleteNode(nodeId);\n }\n\n /**\n * حذف Node\n */\n deleteNode(nodeId: string) {\n const nodes = this.visualNodes().filter(n => n.id !== nodeId);\n // حذف اتصالات به این نود\n nodes.forEach(n => {\n n.connections = n.connections.filter(c => c !== nodeId);\n });\n this.visualNodes.set(nodes);\n\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(null);\n }\n\n this.addLog('info', `🗑️ Node حذف شد`);\n }\n\n /**\n * اتصال دو Node با outcome مشخص\n */\n connectNodes(fromId: string, toId: string, outcome?: string) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n const toNode = nodes.find(n => n.id === toId);\n\n if (fromNodeIndex !== -1 && toNode) {\n const fromNode = nodes[fromNodeIndex];\n\n // Use outcome-based connections if available\n if (outcome && fromNode.outcomes && fromNode.outcomes.length > 1) {\n const outcomeConnections = fromNode.outcomeConnections || [];\n\n // Check if this outcome already has a connection\n const existingConnection = outcomeConnections.find(c => c.outcome === outcome);\n if (existingConnection) {\n this.addLog('warning', `⚠️ Outcome \"${outcome}\" قبلاً متصل شده است`);\n return;\n }\n\n // Add new outcome connection\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: [...outcomeConnections, { outcome, targetNodeId: toId }],\n connections: [...fromNode.connections, toId] // Keep for backward compat\n };\n\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} [${outcome}] → ${toNode.name}`);\n } else {\n // Simple connection (no outcomes)\n if (!fromNode.connections.includes(toId)) {\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: [...fromNode.connections, toId]\n };\n\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} متصل شد به ${toNode.name}`);\n } else {\n this.addLog('warning', '⚠️ این اتصال از قبل وجود دارد');\n }\n }\n } else {\n this.addLog('error', '❌ خطا در ایجاد اتصال');\n }\n }\n\n /**\n * قطع اتصال (با یا بدون outcome)\n */\n disconnectNodes(fromId: string, toId: string, outcome?: string) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n\n if (fromNodeIndex !== -1) {\n const fromNode = nodes[fromNodeIndex];\n const updatedNodes = [...nodes];\n\n // Remove from outcome connections if specified\n if (outcome && fromNode.outcomeConnections) {\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: fromNode.outcomeConnections.filter(\n c => !(c.outcome === outcome && c.targetNodeId === toId)\n ),\n connections: fromNode.connections.filter(c => c !== toId)\n };\n } else {\n // Simple disconnect\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: fromNode.connections.filter(c => c !== toId),\n outcomeConnections: fromNode.outcomeConnections?.filter(c => c.targetNodeId !== toId)\n };\n }\n\n this.visualNodes.set(updatedNodes);\n this.addLog('info', `✂️ اتصال قطع شد${outcome ? ` [${outcome}]` : ''}`);\n }\n }\n\n /**\n * تبدیل JSON به Visual\n */\n jsonToVisual() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const nodes: VisualNode[] = [];\n let yPos = 100;\n\n // پردازش root activity\n if (workflow.root) {\n this.processActivityToNode(workflow.root, nodes, 100, yPos);\n }\n\n this.visualNodes.set(nodes);\n this.addLog('success', '✅ JSON به Visual تبدیل شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n\n /**\n * پردازش Activity به Node (recursive)\n */\n private processActivityToNode(\n activity: any,\n nodes: VisualNode[],\n x: number,\n y: number,\n parentId?: string\n ): string {\n const nodeId = activity.id || `${activity.type}-${Date.now()}-${Math.random()}`;\n\n // Get outcomes for this activity type (use default for now, will be updated async if needed)\n const outcomes = ['Done']; // Default outcome, will be updated when activity info is loaded\n\n // Get outcomeConnections from activity definition\n const outcomeConnections = activity.outcomeConnections || [];\n\n // Build simple connections list from outcomeConnections for backward compatibility\n const connections = outcomeConnections.map((conn: any) => conn.targetNodeId);\n\n const node: VisualNode = {\n id: nodeId,\n type: activity.type,\n name: activity.name || activity.type,\n icon: this.getIconForActivityType(activity.type),\n properties: activity.properties || {},\n position: { x, y },\n connections: connections,\n outcomeConnections: outcomeConnections,\n outcomes: outcomes\n };\n\n nodes.push(node);\n\n // اگر parent دارد، اتصال برقرار کن (برای Sequence)\n if (parentId && !outcomeConnections.length) {\n const parentNode = nodes.find(n => n.id === parentId);\n if (parentNode && !parentNode.connections.includes(nodeId)) {\n parentNode.connections.push(nodeId);\n }\n }\n\n // پردازش children (برای Sequence) - اما فقط اگر outcomeConnections نباشد\n if (activity.children && Array.isArray(activity.children) && !outcomeConnections.length) {\n let childY = y;\n activity.children.forEach((child: any, index: number) => {\n childY = y + (index * 100);\n this.processActivityToNode(child, nodes, x + 250, childY, nodeId);\n });\n }\n\n return nodeId;\n }\n\n /**\n * تبدیل Visual به JSON\n */\n visualToJson() {\n try {\n const nodes = this.visualNodes();\n\n if (nodes.length === 0) {\n this.addLog('warning', '⚠️ هیچ Node ای وجود ندارد');\n return;\n }\n\n // پیدا کردن root node (node بدون parent)\n const rootNode = this.findRootNode(nodes);\n\n if (!rootNode) {\n this.addLog('error', '❌ Root Node پیدا نشد');\n return;\n }\n\n const workflow = {\n id: 'visual-workflow-' + Date.now(),\n name: 'Visual Workflow',\n version: 1,\n root: this.nodeToActivity(rootNode, nodes)\n };\n\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Visual به JSON تبدیل شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n\n /**\n * پیدا کردن Root Node\n */\n private findRootNode(nodes: VisualNode[]): VisualNode | null {\n // Node ای که به آن اشاره نشده\n const connectedIds = new Set<string>();\n nodes.forEach(n => n.connections.forEach(c => connectedIds.add(c)));\n\n const rootNodes = nodes.filter(n => !connectedIds.has(n.id));\n return rootNodes[0] || nodes[0];\n }\n\n /**\n * تبدیل Node به Activity (recursive)\n */\n private nodeToActivity(node: VisualNode, allNodes: VisualNode[]): any {\n const activity: any = {\n id: node.id,\n type: node.type,\n name: node.name,\n properties: node.properties\n };\n\n // اگر children دارد (connections)\n if (node.connections.length > 0) {\n const children = node.connections\n .map(connId => allNodes.find(n => n.id === connId))\n .filter(n => n !== undefined)\n .map(childNode => this.nodeToActivity(childNode!, allNodes));\n\n if (children.length > 0) {\n activity.children = children;\n }\n }\n\n return activity;\n }\n\n /**\n * دریافت آیکون برای نوع Activity\n */\n private getIconForActivityType(type: string): string {\n const iconMap: Record<string, string> = {\n 'workflow-activity:sequence': 'fa-light fa-list-ol',\n 'workflow-activity:show-confirm-dialog': 'fa-light fa-question-circle',\n 'workflow-activity:show-alert-dialog': 'fa-light fa-circle-info',\n 'workflow-activity:show-toast': 'fa-light fa-bell',\n 'workflow-activity:set-variable': 'fa-light fa-variable',\n 'workflow-activity:navigate': 'fa-light fa-route',\n 'workflow-activity:dispatch-event': 'fa-light fa-paper-plane',\n 'workflow-activity:entity-create': 'fa-light fa-plus',\n 'workflow-activity:entity-read': 'fa-light fa-book-open',\n 'workflow-activity:entity-update': 'fa-light fa-pen',\n 'workflow-activity:entity-delete': 'fa-light fa-trash'\n };\n\n return iconMap[type] || 'fa-light fa-circle';\n }\n\n /**\n * بهروزرسانی property نود\n */\n updateNodeProperty(nodeId: string, propertyName: string, value: any) {\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === nodeId);\n\n if (nodeIndex !== -1) {\n const node = nodes[nodeIndex];\n const updatedNodes = [...nodes];\n\n \n if (propertyName === 'name') {\n updatedNodes[nodeIndex] = {\n ...node,\n name: value\n };\n } else {\n const newProperties = {\n ...node.properties,\n [propertyName]: value\n };\n\n let newOutcomes = node.outcomes;\n const shouldRecomputeOutcomes =\n (propertyName === 'expectedStatusCodes' && node.type === 'workflow-activity:http-request') ||\n (propertyName === 'actions' && node.type === 'workflow-activity:human-task');\n if (shouldRecomputeOutcomes) {\n this.findActivityInfo(node.type).then(activityInfo => {\n if (activityInfo) {\n const computedOutcomes = this.computeOutcomes(activityInfo, newProperties);\n const updatedNodes = this.visualNodes();\n const nodeIdx = updatedNodes.findIndex(n => n.id === nodeId);\n if (nodeIdx !== -1) {\n updatedNodes[nodeIdx] = {\n ...updatedNodes[nodeIdx],\n outcomes: computedOutcomes\n };\n this.visualNodes.set([...updatedNodes]);\n this.addLog('info', `🔄 Outcomes updated: [${computedOutcomes.join(', ')}]`);\n }\n }\n }).catch(() => {\n });\n }\n\n updatedNodes[nodeIndex] = {\n ...node,\n properties: newProperties,\n outcomes: newOutcomes\n };\n }\n\n this.visualNodes.set(updatedNodes);\n\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(updatedNodes[nodeIndex]);\n }\n }\n }\n\n /**\n * پیدا کردن activity info بر اساس type\n */\n private async findActivityInfo(type: string): Promise<ActivityInfo | null> {\n try { \n const activity = await this.activityDefinitionService.getActivityByName(type);\n if (activity) {\n return this.convertActivityDefinitionToInfo(activity);\n }\n } catch (error) {\n console.warn(`Failed to find activity info for type: ${type}`, error);\n }\n return null;\n }\n\n /**\n * پاک کردن همه نودها\n */\n clearCanvas() {\n this.visualNodes.set([]);\n this.selectedNode.set(null);\n this.addLog('info', '🗑️ Canvas پاک شد');\n }\n\n /**\n * Copy workflow Definition ID to clipboard (Elsa-style workflow info).\n */\n async copyDefinitionIdToClipboard(): Promise<void> {\n const id = this.workflowSettings().definitionId || 'new-workflow';\n try {\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(id);\n this.addLog('success', 'Definition ID copied to clipboard');\n }\n } catch {\n this.addLog('warning', 'Could not copy to clipboard');\n }\n }\n\n /**\n * Scroll canvas area so content is centered (Elsa-style \"Center\").\n */\n canvasCenter(): void {\n const el = this.canvasAreaRef()?.nativeElement;\n if (!el) return;\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + 150);\n maxY = Math.max(maxY, n.position.y + 120);\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n const parent = el.parentElement;\n if (parent && parent.scrollWidth > parent.clientWidth) {\n parent.scrollLeft = Math.max(0, cx - parent.clientWidth / 2);\n }\n if (parent && parent.scrollHeight > parent.clientHeight) {\n parent.scrollTop = Math.max(0, cy - parent.clientHeight / 2);\n }\n }\n\n /**\n * Scroll canvas so all nodes are in view (Elsa-style \"Zoom to fit\" – fit by scroll).\n */\n canvasZoomToFit(): void {\n const el = this.canvasAreaRef()?.nativeElement;\n if (!el) return;\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + 150);\n maxY = Math.max(maxY, n.position.y + 120);\n }\n const parent = el.parentElement;\n if (parent) {\n parent.scrollLeft = Math.max(0, minX - 24);\n parent.scrollTop = Math.max(0, minY - 24);\n }\n }\n\n /**\n * Auto-arrange nodes in a vertical flow (Elsa-style \"Auto layout\").\n */\n canvasAutoLayout(): void {\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n const root = this.findRootNode(nodes);\n const ordered: VisualNode[] = [];\n const visited = new Set<string>();\n const add = (n: VisualNode) => {\n if (visited.has(n.id)) return;\n visited.add(n.id);\n ordered.push(n);\n const targets = (n.outcomeConnections ?? []).map((c) => this.findNodeById(c.targetNodeId)).filter(Boolean) as VisualNode[];\n for (const t of targets) add(t);\n const fallback = (n.connections ?? []).map((id) => this.findNodeById(id)).filter(Boolean) as VisualNode[];\n for (const t of fallback) add(t);\n };\n if (root) add(root);\n for (const n of nodes) if (!visited.has(n.id)) ordered.push(n);\n const startX = 50;\n const startY = 50;\n const stepY = 120;\n this.visualNodes.update((list) =>\n list.map((node) => {\n const idx = ordered.findIndex((o) => o.id === node.id);\n const y = idx >= 0 ? startY + idx * stepY : node.position.y;\n return { ...node, position: { x: startX, y } };\n })\n );\n this.addLog('info', 'Layout applied');\n }\n\n // ============ Drag & Drop Methods ============\n\n /**\n * شروع drag از activity list\n */\n onActivityDragStart(event: DragEvent, activity: ActivityInfo) {\n this.draggedActivity = activity;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', activity.type);\n }\n this.addLog('info', `🎯 در حال Drag: ${activity.name}`);\n }\n\n /**\n * پایان drag از activity list\n */\n onActivityDragEnd(event: DragEvent) {\n this.draggedActivity = null;\n }\n\n /**\n * drag over روی Canvas\n */\n onCanvasDragOver(event: DragEvent) {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n\n /**\n * drag leave از Canvas\n */\n onCanvasDragLeave(event: DragEvent) {\n // میتوان از این برای visual feedback استفاده کرد\n }\n\n /**\n * محاسبه outcomes برای یک activity\n */\n computeOutcomes(activityInfo: ActivityInfo, properties: Record<string, any>): string[] {\n // For HTTP Request with expected status codes\n if (activityInfo.type === 'workflow-activity:http-request' && properties['expectedStatusCodes']) {\n const codes = Array.isArray(properties['expectedStatusCodes'])\n ? properties['expectedStatusCodes']\n : [properties['expectedStatusCodes']];\n\n const statusOutcomes = codes.map((code: number) => code.toString());\n return [...statusOutcomes, 'Done', 'Failed', 'Timeout'];\n }\n\n // Human Task: outcomes from actions (prefix/suffix) in workflow definition\n if (activityInfo.type === 'workflow-activity:human-task' && properties['actions']) {\n const names: string[] = [];\n try {\n const actions = properties['actions'];\n const parsed = typeof actions === 'string' ? JSON.parse(actions) : actions;\n const prefix = parsed?.prefix ?? [];\n const suffix = parsed?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string' && !names.includes(name)) names.push(name);\n }\n } catch {\n // ignore parse error\n }\n if (names.length > 0) return names;\n }\n\n // Default: check activity info for outcomes\n const outcomeMap: Record<string, string[]> = {\n 'workflow-activity:if': ['Then', 'Else'],\n 'workflow-activity:show-confirm-dialog': ['Confirmed', 'Cancelled'],\n 'workflow-activity:show-alert-dialog': ['Done'],\n 'workflow-activity:show-form': ['Submitted', 'Cancelled'],\n 'workflow-activity:human-task': ['submit', 'cancel'],\n 'workflow-activity:http-request': ['Done', 'Failed', 'Timeout'],\n 'workflow-activity:sequence': ['Done'],\n 'workflow-activity:for-each': ['Done'],\n 'workflow-activity:while': ['Done'],\n 'workflow-activity:set-variable': ['Done'],\n 'workflow-activity:navigate': ['Done'],\n 'workflow-activity:show-toast': ['Done'],\n 'workflow-activity:dispatch-event': ['Done'],\n 'workflow-activity:entity-create': ['Done', 'Failed'],\n 'workflow-activity:entity-read': ['Done', 'NotFound', 'Failed'],\n 'workflow-activity:entity-update': ['Done', 'Failed'],\n 'workflow-activity:entity-delete': ['Done', 'Failed']\n };\n\n return outcomeMap[activityInfo.type] || ['Done'];\n }\n\n /**\n * drop روی Canvas - اضافه کردن activity جدید\n */\n onCanvasDrop(event: DragEvent) {\n event.preventDefault();\n\n if (!this.draggedActivity) {\n return;\n }\n\n const canvas = event.currentTarget as HTMLElement;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - 75; // center node\n const y = event.clientY - rect.top - 40;\n\n const nodes = this.visualNodes();\n const defaultProps = { ...(this.draggedActivity.defaultProperties || {}) };\n\n const newNode: VisualNode = {\n id: `${this.draggedActivity.type}-${Date.now()}`,\n type: this.draggedActivity.type,\n name: this.draggedActivity.name,\n icon: this.draggedActivity.icon,\n properties: defaultProps,\n position: { x: Math.max(0, x), y: Math.max(0, y) },\n connections: [],\n outcomeConnections: [],\n outcomes: this.computeOutcomes(this.draggedActivity, defaultProps)\n };\n\n this.visualNodes.set([...nodes, newNode]);\n\n const outcomesInfo = newNode.outcomes && newNode.outcomes.length > 1\n ? ` with ${newNode.outcomes.length} outcomes [${newNode.outcomes.join(', ')}]`\n : '';\n\n this.addLog('success', `✅ Activity ${this.draggedActivity.name} اضافه شد${outcomesInfo}`);\n this.draggedActivity = null;\n }\n\n /**\n * شروع drag نود\n */\n onNodeDragStart(event: DragEvent, node: VisualNode) {\n this.draggedNode = node;\n\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.nodeDragOffset = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Make drag image transparent\n const img = new Image();\n img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n event.dataTransfer.setDragImage(img, 0, 0);\n }\n }\n\n /**\n * در حال drag نود\n */\n onNodeDrag(event: DragEvent, node: VisualNode) {\n if (!this.draggedNode || event.clientX === 0 || event.clientY === 0) {\n return;\n }\n\n const canvas = document.querySelector('.canvas-area') as HTMLElement;\n if (!canvas) return;\n\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - this.nodeDragOffset.x;\n const y = event.clientY - rect.top - this.nodeDragOffset.y;\n\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === node.id);\n\n if (nodeIndex !== -1) {\n nodes[nodeIndex].position = {\n x: Math.max(0, x),\n y: Math.max(0, y)\n };\n this.visualNodes.set([...nodes]);\n }\n }\n\n /**\n * پایان drag نود\n */\n onNodeDragEnd(event: DragEvent, node: VisualNode) {\n this.draggedNode = null;\n }\n\n /**\n * کلیک روی کانکتور - برای ایجاد اتصال (برای activities با یک outcome)\n */\n onConnectorClick(event: Event, node: VisualNode, type: 'in' | 'out') {\n event.stopPropagation();\n\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source\n if (type === 'out') {\n this.connectionSource = { node, type };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name}`);\n }\n } else {\n // دومین کلیک - ایجاد اتصال\n if (type === 'in' && this.connectionSource.node.id !== node.id) {\n this.connectNodes(this.connectionSource.node.id, node.id, this.connectionSource.outcome);\n this.connectionSource = null;\n } else {\n this.addLog('warning', '⚠️ اتصال نامعتبر - ابتدا روی connector خروجی و سپس ورودی کلیک کنید');\n this.connectionSource = null;\n }\n }\n }\n\n /**\n * کلیک روی outcome connector - برای activities با چند outcome\n */\n onOutcomeConnectorClick(event: Event, node: VisualNode, outcome: string) {\n event.stopPropagation();\n\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source با outcome\n this.connectionSource = { node, type: 'out', outcome };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name} [${outcome}]`);\n } else {\n this.addLog('warning', '⚠️ لطفاً روی input connector یک نود دیگر کلیک کنید');\n this.connectionSource = null;\n }\n }\n\n // ============ UI Methods ============\n\n /**\n * تغییر وضعیت نمایش Properties Panel\n */\n togglePropertiesPanel() {\n this.showPropertiesPanel.set(!this.showPropertiesPanel());\n }\n\n /**\n * Build property viewer tabs from activity definition (platform widget-based).\n * Used so the properties panel renders via the same widget system as the form builder.\n */\n protected buildPropertyViewerTabs(\n def: AXPActivityDefinition | null | undefined,\n node: VisualNode\n ): AXPPropertyViewerTab[] {\n const generalGroup: AXPWidgetPropertyGroup = { name: 'identity', title: 'General', order: 0 };\n const inputGroup: AXPWidgetPropertyGroup = { name: 'input-properties', title: 'Input Properties', order: 1 };\n const outputGroup: AXPWidgetPropertyGroup = { name: 'output', title: 'Output & Variables', order: 2 };\n\n const identityProps: AXPWidgetProperty[] = [\n this.createReadOnlyStringProp('id', 'ID', 'id', generalGroup),\n this.createReadOnlyStringProp('type', 'Type', 'type', generalGroup),\n this.createStringProp('name', 'Name', 'name', generalGroup),\n ];\n\n const inputProps: AXPWidgetProperty[] = (def?.inputs ?? []).map((input, index) =>\n this.activityInputToWidgetProperty(input, inputGroup, index)\n );\n\n const outputProps: AXPWidgetProperty[] = [\n this.createStringProp(\n 'outputVariable',\n 'Output Variable',\n 'properties.outputVariable',\n outputGroup\n ),\n ];\n\n const groups = [\n { name: generalGroup.name, title: generalGroup.title, isCollapsed: false, props: identityProps },\n ...(inputProps.length\n ? [{ name: inputGroup.name, title: inputGroup.title, isCollapsed: false, props: inputProps }]\n : []),\n { name: outputGroup.name, title: outputGroup.title, isCollapsed: false, props: outputProps },\n ];\n\n return [{ name: 'general', title: 'General', groups }];\n }\n\n private createStringProp(\n name: string,\n title: string,\n path: string,\n group: AXPWidgetPropertyGroup\n ): AXPWidgetProperty {\n return {\n name,\n title,\n group,\n order: 0,\n schema: {\n dataType: 'string',\n interface: {\n path,\n name,\n type: 'text-editor',\n options: {},\n },\n },\n visible: true,\n };\n }\n\n private createReadOnlyStringProp(\n name: string,\n title: string,\n path: string,\n group: AXPWidgetPropertyGroup\n ): AXPWidgetProperty {\n return {\n name,\n title,\n group,\n order: 0,\n schema: {\n dataType: 'string',\n interface: {\n path,\n name,\n type: 'text-editor',\n options: { readonly: true },\n },\n },\n visible: true,\n };\n }\n\n private activityInputToWidgetProperty(\n input: { name: string; title: string; schema: { dataType?: string; defaultValue?: any; interface?: { type?: string; options?: Record<string, any> } } },\n group: AXPWidgetPropertyGroup,\n order: number\n ): AXPWidgetProperty {\n const path = `properties.${input.name}`;\n const iface = input.schema?.interface;\n const widgetType = iface?.type ?? 'text-editor';\n return {\n name: input.name,\n title: input.title,\n group,\n order,\n schema: {\n dataType: (input.schema?.dataType as any) ?? 'string',\n defaultValue: input.schema?.defaultValue,\n interface: {\n path,\n name: input.name,\n type: widgetType,\n options: iface?.options ?? {},\n },\n },\n visible: true,\n };\n }\n\n /**\n * Apply property viewer context changes back to the selected node.\n */\n protected onPropertyViewerChanged(ev: { values: any; mode: 'init' | 'update' }): void {\n const node = this.selectedNode();\n if (!node || ev.mode !== 'update') return;\n const v = ev.values;\n if (v.name !== undefined) this.updateNodeProperty(node.id, 'name', v.name);\n if (v.properties && typeof v.properties === 'object') {\n for (const key of Object.keys(v.properties)) {\n this.updateNodeProperty(node.id, key, v.properties[key]);\n }\n }\n }\n\n // ============ Template Helper Methods ============\n\n /**\n * پیدا کردن Node با ID\n */\n findNodeById(nodeId: string): VisualNode | undefined {\n return this.visualNodes().find(n => n.id === nodeId);\n }\n\n /**\n * بررسی اینکه آیا properties خالی است یا نه\n */\n hasProperties(properties: Record<string, any>): boolean {\n return properties && Object.keys(properties).length > 0;\n }\n\n /**\n * دسترسی به Object برای استفاده در template\n */\n protected readonly Object = Object;\n\n /**\n * دسترسی به typeof برای استفاده در template\n */\n protected readonly typeof = (value: any) => typeof value;\n\n /**\n * دسترسی به JSON برای استفاده در template\n */\n protected readonly JSON = JSON;\n\n /**\n * Builds SVG path for a curved connection (quadratic Bezier) so the line is smooth like Elsa/n8n.\n * Control point is offset so the curve bows naturally between source and target.\n */\n protected getConnectionPath(x1: number, y1: number, x2: number, y2: number): string {\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const dy = y2 - y1;\n const offset = Math.min(80, Math.max(40, Math.abs(dy) * 0.3));\n const cpy = midY - (dy >= 0 ? offset : -offset);\n return `M ${x1} ${y1} Q ${midX} ${cpy} ${x2} ${y2}`;\n }\n\n /**\n * Approximate midpoint on the curve for label placement (quadratic Bezier t=0.5).\n */\n protected getConnectionLabelPosition(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ): { x: number; y: number } {\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const dy = y2 - y1;\n const offset = Math.min(80, Math.max(40, Math.abs(dy) * 0.3));\n const cpy = midY - (dy >= 0 ? offset : -offset);\n const t = 0.5;\n const x = (1 - t) * (1 - t) * x1 + 2 * (1 - t) * t * midX + t * t * x2;\n const y = (1 - t) * (1 - t) * y1 + 2 * (1 - t) * t * cpy + t * t * y2;\n return { x, y: y + 12 };\n }\n\n /**\n * دریافت رنگ بر اساس outcome\n */\n protected getOutcomeColor(outcome: string): string {\n const colorMap: Record<string, string> = {\n '200': '#10b981', // Green - Success\n 'Done': '#10b981', // Green - Success\n 'Success': '#10b981', // Green - Success\n '404': '#ef4444', // Red - Error\n '500': '#ef4444', // Red - Error\n 'Failed': '#ef4444', // Red - Error\n 'Error': '#ef4444', // Red - Error\n 'Timeout': '#f59e0b', // Orange - Warning\n 'Cancelled': '#f59e0b',// Orange - Warning\n 'Then': '#3b82f6', // Blue - Info\n 'Else': '#64748b', // Gray\n };\n\n return colorMap[outcome] || '#8b5cf6'; // Purple - Default\n }\n\n /**\n * Returns marker name for arrowhead def (success, error, warning, info, primary, default).\n */\n protected getOutcomeColorName(outcome: string): string {\n if (['200', 'Done', 'Success'].includes(outcome)) {\n return 'success';\n }\n if (['404', '500', 'Failed', 'Error'].includes(outcome)) {\n return 'error';\n }\n if (['Timeout', 'Cancelled'].includes(outcome)) {\n return 'warning';\n }\n if (['Then'].includes(outcome)) {\n return 'info';\n }\n if (['Else'].includes(outcome)) {\n return 'default';\n }\n return 'primary'; // purple for custom outcomes\n }\n\n /**\n * بهروزرسانی property با parse کردن JSON\n */\n updateNodePropertyJSON(nodeId: string, propertyName: string, jsonString: string) {\n try {\n const value = JSON.parse(jsonString);\n this.updateNodeProperty(nodeId, propertyName, value);\n } catch (error) {\n // اگر JSON نامعتبر بود، چیزی نکن\n console.warn('Invalid JSON:', jsonString);\n }\n }\n\n}\n","<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@workflow-management:activities.menus.activity-categories.title' | translate | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [placeholder]=\"'@workflow-management:workflow-studio.components.activity-categories-tree.search-placeholder' | translate | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-activity-categories-tree\n (categoryClick)=\"onCategoryClick($event)\"\n (activityClick)=\"onActivityClick($event)\"\n (activityDragStart)=\"onActivityDragStartFromTree($event)\"\n ></axp-activity-categories-tree>\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n <!-- JSON / Visual toggle (same pattern as report view mode) -->\n <div class=\"studio-editor-tabs\">\n <ax-button-group class=\"ax-sm\" [selection]=\"'single'\">\n <ax-button-group-item (onClick)=\"switchTab('json')\" text=\"{{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\" [selected]=\"activeTab() === 'json'\">\n <ax-prefix>\n <i class=\"fa-light fa-code\"></i>\n </ax-prefix>\n </ax-button-group-item>\n <ax-button-group-item (onClick)=\"switchTab('visual')\" text=\"{{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\" [selected]=\"activeTab() === 'visual'\">\n <ax-prefix>\n <i class=\"fa-light fa-diagram-project\"></i>\n </ax-prefix>\n </ax-button-group-item>\n </ax-button-group>\n </div>\n </axp-layout-prefix>\n </axp-page-toolbar>\n\n <axp-page-content>\n <div class=\"workflow-studio\">\n <!-- Main Layout -->\n <div class=\"studio-body\" [class.properties-hidden]=\"!showPropertiesPanel()\">\n\n <!-- Editor -->\n <div class=\"studio-editor\">\n <!-- Tab Content -->\n <div class=\"editor-content\">\n <!-- JSON Tab -->\n @if (activeTab() === 'json') {\n <div class=\"json-tab\">\n <textarea class=\"json-editor\" [value]=\"workflowJson()\"\n (input)=\"onWorkflowJsonInput($event)\"\n [placeholder]=\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\"\n spellcheck=\"false\"></textarea>\n </div>\n }\n\n <!-- Visual Tab -->\n @if (activeTab() === 'visual') {\n <div class=\"visual-tab\">\n <!-- Canvas -->\n <div class=\"visual-canvas\">\n <div class=\"canvas-toolbar\">\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.zoom-to-fit.title' | translate | async\" (onClick)=\"canvasZoomToFit()\">\n <ax-prefix><i class=\"fa-light fa-expand\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.center.title' | translate | async\" (onClick)=\"canvasCenter()\">\n <ax-prefix><i class=\"fa-light fa-crosshairs\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.auto-layout.title' | translate | async\" (onClick)=\"canvasAutoLayout()\">\n <ax-prefix><i class=\"fa-light fa-sitemap\"></i></ax-prefix>\n </ax-button>\n <span class=\"toolbar-sep\"></span>\n <label class=\"toolbar-auto-save\">\n <ax-switch [value]=\"autoSaveEnabled()\" (valueChange)=\"autoSaveEnabled.set($event)\"></ax-switch>\n <span>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.auto-save' | translate | async }}</span>\n </label>\n <span class=\"toolbar-sep\"></span>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\" (onClick)=\"clearCanvas()\">\n <ax-prefix><i class=\"fa-light fa-trash\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\" (onClick)=\"visualToJson()\">\n <ax-prefix><i class=\"fa-light fa-code\"></i></ax-prefix>\n </ax-button>\n <span class=\"tool-info\">\n <i class=\"fa-light fa-lightbulb\"></i>\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\n </span>\n </div>\n\n <div #canvasAreaRef class=\"canvas-area\" (drop)=\"onCanvasDrop($event)\" (dragover)=\"onCanvasDragOver($event)\"\n (dragleave)=\"onCanvasDragLeave($event)\">\n <!-- SVG for Connections -->\n <svg class=\"connections-layer\">\n <!-- Outcome-based Connections -->\n @for (node of visualNodes(); track node.id) {\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\n @let targetNode = findNodeById(conn.targetNodeId);\n @if (targetNode) {\n <g class=\"outcome-connection-group\">\n <line [attr.x1]=\"node.position.x + 75\" [attr.y1]=\"node.position.y + 80\"\n [attr.x2]=\"targetNode.position.x + 75\" [attr.y2]=\"targetNode.position.y - 50\"\n class=\"connection-line outcome-line\" [attr.stroke]=\"getOutcomeColor(conn.outcome)\"\n stroke-width=\"2.5\"\n [attr.marker-end]=\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\"\n style=\"cursor: pointer\" (dblclick)=\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\"\n [attr.title]=\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\">\n <title>{{ conn.outcome }} → {{ targetNode.name }}</title>\n </line>\n <text [attr.x]=\"(node.position.x + targetNode.position.x) / 2 + 75\"\n [attr.y]=\"(node.position.y + targetNode.position.y) / 2 + 15\" class=\"connection-label\"\n text-anchor=\"middle\" dominant-baseline=\"middle\" [attr.fill]=\"getOutcomeColor(conn.outcome)\" font-size=\"11\"\n font-weight=\"600\" pointer-events=\"none\">\n {{ conn.outcome }}\n </text>\n </g>\n }\n }\n } @else {\n <!-- Simple Connections (backward compatibility) -->\n @for (targetId of node.connections; track targetId) {\n @let targetNode = findNodeById(targetId);\n @if (targetNode) {\n @let sx = node.position.x + 75;\n @let sy = node.position.y + 40;\n @let tx = targetNode.position.x + 75;\n @let ty = targetNode.position.y - 50;\n @let pathD = getConnectionPath(sx, sy, tx, ty);\n <g class=\"connection-group\">\n <path [attr.d]=\"pathD\" class=\"connection-line connection-hit\" fill=\"none\" stroke=\"transparent\"\n stroke-width=\"16\" pointer-events=\"stroke\" (dblclick)=\"disconnectNodes(node.id, targetId)\">\n </path>\n <path [attr.d]=\"pathD\" class=\"connection-line\" fill=\"none\" stroke=\"#64748b\" stroke-width=\"2\"\n stroke-linecap=\"round\" marker-end=\"url(#arrowhead-default)\" pointer-events=\"none\">\n </path>\n <title>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.connection-remove-hint' | translate | async }}</title>\n </g>\n }\n }\n }\n }\n\n <defs>\n <!-- Arrow markers: larger, rounded tip on line end (refX so tip touches path end) -->\n <marker id=\"arrowhead-default\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#64748b\" />\n </marker>\n <marker id=\"arrowhead-primary\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#8b5cf6\" />\n </marker>\n <marker id=\"arrowhead-success\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#10b981\" />\n </marker>\n <marker id=\"arrowhead-error\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#ef4444\" />\n </marker>\n <marker id=\"arrowhead-warning\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#f59e0b\" />\n </marker>\n <marker id=\"arrowhead-info\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#3b82f6\" />\n </marker>\n </defs>\n </svg>\n\n <!-- Nodes -->\n @for (node of visualNodes(); track node.id) {\n <div class=\"visual-node\" [class.selected]=\"selectedNode()?.id === node.id\"\n [style.left.px]=\"node.position.x\" [style.top.px]=\"node.position.y\" [attr.data-node-id]=\"node.id\"\n draggable=\"true\" (dragstart)=\"onNodeDragStart($event, node)\" (drag)=\"onNodeDrag($event, node)\"\n (dragend)=\"onNodeDragEnd($event, node)\" (click)=\"selectNodeById(node)\">\n <div class=\"node-header\">\n <i [class]=\"node.icon\"></i>\n <span>{{ node.name }}</span>\n <span class=\"node-delete-wrap\" (click)=\"$event.stopPropagation()\">\n <ax-button look=\"blank\" size=\"sm\" class=\"node-delete\" (onClick)=\"deleteNodeFromCanvas(node.id)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </span>\n </div>\n\n <div class=\"node-body\">\n <small>{{ node.type }}</small>\n </div>\n\n <div class=\"node-connectors\">\n <!-- Input Connector -->\n <div class=\"connector connector-in\" title=\"Input\" (click)=\"onConnectorClick($event, node, 'in')\">\n </div>\n\n <!-- Output Connectors - Multiple outcomes support -->\n @if (node.outcomes && node.outcomes.length > 1) {\n <!-- Multiple outcomes: show separate port for each -->\n <div class=\"outcomes-container\">\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\n <div class=\"outcome-connector\" [class.active]=\"\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\n \" [attr.data-outcome]=\"outcome\" [title]=\"'Output: ' + outcome\"\n (click)=\"onOutcomeConnectorClick($event, node, outcome)\">\n <span class=\"outcome-label\">{{ outcome }}</span>\n <div class=\"outcome-dot\"></div>\n </div>\n }\n </div>\n } @else {\n <!-- Single outcome: show simple output connector -->\n <div class=\"connector connector-out\" [class.active]=\"connectionSource?.node?.id === node.id\"\n title=\"Output\" (click)=\"onConnectorClick($event, node, 'out')\"></div>\n }\n </div>\n </div>\n }\n\n <!-- Empty State -->\n @if (visualNodes().length === 0) {\n <div class=\"canvas-empty-state\">\n <i class=\"fa-light fa-diagram-project\"></i>\n <p>{{ '@workflow-management:workflow-studio.components.canvas-empty-state.title' | translate | async }}</p>\n <small>{{ '@workflow-management:workflow-studio.components.canvas-empty-state.description' | translate | async }}</small>\n </div>\n }\n </div>\n </div>\n\n <!-- Workflow Panel (when no node selected, Elsa-style) -->\n @if (!selectedNode() && showPropertiesPanel()) {\n <div class=\"properties-panel workflow-panel\">\n <div class=\"properties-header\">\n <i class=\"fa-light fa-diagram-project\"></i>\n <h4>{{ '@workflow-management:workflow-studio.components.workflow-panel.title' | translate | async }}</h4>\n <div class=\"header-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\" (onClick)=\"togglePropertiesPanel()\">\n <ax-prefix><i class=\"fa-light fa-angle-right\"></i></ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"properties-body\">\n <section class=\"workflow-panel-section\">\n <h5>{{ '@workflow-management:workflow-studio.components.workflow-panel.metadata' | translate | async }}</h5>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.workflow-panel.name' | translate | async }}</label>\n <ax-text-box class=\"form-input\" [value]=\"workflowSettings().name\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.workflow-panel.description' | translate | async }}</label>\n <ax-text-box class=\"form-input\" [value]=\"workflowSettings().description\" [disabled]=\"true\" />\n </div>\n </section>\n <div class=\"properties-divider\"></div>\n <section class=\"workflow-panel-section\">\n <h5>{{ '@workflow-management:workflow-studio.components.workflow-panel.information' | translate | async }}</h5>\n <div class=\"workflow-info-table\">\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.definition-id' | translate | async }}</span>\n <span class=\"info-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.workflow-panel.copy' | translate | async\" (onClick)=\"copyDefinitionIdToClipboard()\">\n <ax-prefix><i class=\"fa-light fa-copy\"></i></ax-prefix>\n </ax-button>\n </span>\n <span class=\"info-value\">{{ workflowSettings().definitionId || 'new-workflow' }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.version' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().version }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.status' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().isPublished ? ('@workflow-management:workflow-studio.components.workflow-panel.published' | translate | async) : ('@workflow-management:workflow-studio.components.workflow-panel.draft' | translate | async) }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.usable-as-activity' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().usableAsActivity ? ('@general:terms.common.yes-no.yes' | translate | async) : ('@general:terms.common.yes-no.no' | translate | async) }}</span>\n </div>\n </div>\n </section>\n <p class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.workflow-panel.settings-hint' | translate | async }}</p>\n </div>\n </div>\n }\n\n <!-- Properties Panel (when a node is selected) -->\n @if (selectedNode() && showPropertiesPanel()) {\n <div class=\"properties-panel\">\n <div class=\"properties-header\">\n <i class=\"fa-light fa-sliders\"></i>\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\n <div class=\"header-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\" (onClick)=\"togglePropertiesPanel()\">\n <ax-prefix><i class=\"fa-light fa-angle-right\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\" (onClick)=\"selectedNode.set(null)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"properties-body\">\n @if (propertyViewerTabs().length > 0) {\n <div class=\"properties-widget-section\">\n <axp-property-viewer\n #propertyViewerRef\n [tabsInput]=\"propertyViewerTabs()\"\n [mode]=\"'simple'\"\n (onChanged)=\"onPropertyViewerChanged($event)\">\n </axp-property-viewer>\n </div>\n } @else {\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.id\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.type\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.name\"\n (valueChange)=\"updateNodeProperty(selectedNode()!.id, 'name', $event)\" />\n </div>\n <p class=\"no-properties\">\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\n </p>\n }\n\n <div class=\"properties-divider\"></div>\n\n\n <h5>🔗 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\n <small class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections-hint' | translate | async }}</small>\n\n <!-- Outcome-based Connections -->\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\n <div class=\"connections-list\">\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\n @let targetNode = findNodeById(conn.targetNodeId);\n @if (targetNode) {\n <div class=\"connection-item outcome-connection\">\n <span class=\"outcome-badge\" [style.background]=\"getOutcomeColor(conn.outcome)\">\n {{ conn.outcome }}\n </span>\n <i class=\"fa-light fa-arrow-right\"></i>\n <span>{{ targetNode.name }}</span>\n <ax-button look=\"blank\" size=\"sm\" class=\"remove-btn\"\n [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.remove-connection' | translate | async\"\n (onClick)=\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n }\n }\n </div>\n } @else if (selectedNode()!.connections.length > 0) {\n <!-- Simple Connections (fallback) -->\n <div class=\"connections-list\">\n @for (targetId of selectedNode()!.connections; track targetId) {\n @let targetNode = findNodeById(targetId);\n @if (targetNode) {\n <div class=\"connection-item\">\n <i class=\"fa-light fa-arrow-right\"></i>\n <span>{{ targetNode.name }}</span>\n <ax-button look=\"blank\" size=\"sm\" class=\"remove-btn\"\n [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.remove-connection' | translate | async\"\n (onClick)=\"disconnectNodes(selectedNode()!.id, targetId)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n }\n }\n </div>\n } @else {\n <p class=\"no-properties\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\n }\n\n <!-- Available Outcomes Info -->\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\n <div class=\"properties-divider\"></div>\n <h5>📤 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\n <small class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes-hint' | translate | async }}</small>\n <div class=\"outcomes-info\">\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\n <span class=\"outcome-tag\" [style.borderColor]=\"getOutcomeColor(outcome)\">\n <span class=\"outcome-dot\" [style.background]=\"getOutcomeColor(outcome)\"></span>\n {{ outcome }}\n </span>\n }\n </div>\n }\n\n <div class=\"properties-divider\"></div>\n\n <h5>📠{{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\n <pre class=\"properties-json\">{{ selectedNode() | json }}</pre>\n </div>\n </div>\n }\n\n <!-- Toggle Button for Properties (when closed) -->\n @if (!showPropertiesPanel()) {\n <ax-button look=\"blank\" class=\"sidebar-toggle-btn right\" (onClick)=\"togglePropertiesPanel()\"\n [title]=\"selectedNode() ? ('@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async) : ('@workflow-management:workflow-studio.components.workflow-panel.show-panel' | translate | async)\">\n <ax-prefix><i class=\"fa-light fa-sliders\"></i></ax-prefix>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n\n </div>\n\n <!-- Workflow Settings: opened via Layout Builder dialog in openWorkflowSettings() -->\n\n <!-- Workflow Execution Dialog -->\n @if (showExecutionDialog()) {\n <div class=\"execution-dialog-overlay\" (click)=\"closeExecutionDialog()\">\n <div class=\"execution-dialog\" (click)=\"$event.stopPropagation()\">\n <!-- Dialog Header -->\n <div class=\"execution-dialog-header\">\n <div class=\"header-content\">\n <i class=\"fa-light fa-play-circle\"></i>\n <div class=\"header-info\">\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\n async }}</h2>\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\n | async }}</p>\n </div>\n </div>\n <ax-button look=\"blank\" size=\"sm\" class=\"close-btn\" [disabled]=\"isExecuting()\" (onClick)=\"closeExecutionDialog()\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n\n <!-- Dialog Body -->\n <div class=\"execution-dialog-body\">\n <!-- Workflow Info Panel (Before Execution) -->\n @if (!workflowInstanceState()) {\n <div class=\"workflow-info-panel\">\n <div class=\"start-section\">\n <div class=\"start-illustration\">\n <i class=\"fa-light fa-rocket\"></i>\n </div>\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\n async }}</h3>\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\n }}</p>\n <ax-button\n [text]=\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\"\n color=\"success\" size=\"lg\" (onClick)=\"startWorkflowExecution()\">\n </ax-button>\n </div>\n </div>\n }\n\n\n <!-- Custom UI for Registration -->\n @if (false) {\n <div class=\"registration-ui\">\n <div class=\"registration-card\">\n <div class=\"registration-icon\">\n <i class=\"fa-light fa-user-circle\"></i>\n </div>\n <h3>ÙØ±Ø¢ÛŒÙ†Ø¯ ثبت‌نام</h3>\n <p class=\"registration-desc\">\n این Ùلو شامل چند مرØÙ„Ù‡ است Ú©Ù‡ داده‌های کاربر را جمع‌آوری کرده Ùˆ در نهایت ØØ³Ø§Ø¨ کاربری ایجاد می‌کند.\n </p>\n\n @if (workflowInstanceState()?.status === 'running') {\n <div class=\"registration-progress\">\n <div class=\"progress-spinner\">\n <i class=\"fa-light fa-spinner-third fa-spin\"></i>\n </div>\n <p>در ØØ§Ù„ اجرای مراØÙ„ ثبت‌نام...</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'finished') {\n <div class=\"registration-success\">\n <i class=\"fa-light fa-check-circle\"></i>\n <h4>ثبت‌نام با موÙقیت انجام شد!</h4>\n <p>ØØ³Ø§Ø¨ کاربری شما ایجاد شد Ùˆ به زودی به داشبورد منتقل خواهید شد.</p>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Default Execution View -->\n @if (workflowInstanceState()) {\n <div class=\"default-execution-view\">\n <div class=\"execution-status\">\n @if (workflowInstanceState()?.status === 'running') {\n <div class=\"status-running\">\n <i class=\"fa-light fa-spinner-third fa-spin\"></i>\n <h3>در ØØ§Ù„ اجرا...</h3>\n <p>Workflow در ØØ§Ù„ اجرا است. Ù„Ø·ÙØ§Ù‹ صبر کنید.</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'finished') {\n <div class=\"status-finished\">\n <i class=\"fa-light fa-check-circle\"></i>\n <h3>اجرا با موÙقیت تکمیل شد</h3>\n <p>Workflow با موÙقیت اجرا شد Ùˆ تمام Activities انجام شدند.</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'error') {\n <div class=\"status-error\">\n <i class=\"fa-light fa-times-circle\"></i>\n <h3>خطا در اجرا</h3>\n <p>{{ workflowInstanceState()?.error }}</p>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Execution Logs Panel -->\n @if (workflowInstanceState() && executionLogs().length > 0) {\n <div class=\"execution-logs-panel\">\n <h3><i class=\"fa-light fa-terminal\"></i> لاگ‌های اجرا</h3>\n <div class=\"logs-container-compact\">\n @for (log of executionLogs(); track $index) {\n <div class=\"log-item-compact\" [class]=\"'log-' + log.level\">\n <span class=\"log-time\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\n <span class=\"log-icon\">\n @switch (log.level) {\n @case ('info') {\n <i class=\"fa-light fa-info-circle\"></i>\n }\n @case ('success') {\n <i class=\"fa-light fa-check-circle\"></i>\n }\n @case ('warning') {\n <i class=\"fa-light fa-exclamation-triangle\"></i>\n }\n @case ('error') {\n <i class=\"fa-light fa-times-circle\"></i>\n }\n }\n </span>\n <span class=\"log-message\">{{ log.message }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Dialog Footer -->\n <div class=\"execution-dialog-footer\">\n <div class=\"footer-info\">\n @if (workflowInstanceState()?.startTime) {\n <span class=\"time-info\">\n <i class=\"fa-light fa-clock\"></i>\n شروع: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\n </span>\n }\n @if (workflowInstanceState()?.endTime) {\n <span class=\"time-info\">\n <i class=\"fa-light fa-flag-checkered\"></i>\n پایان: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\n </span>\n }\n </div>\n <div class=\"footer-actions\">\n <ax-button\n [text]=\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\"\n color=\"secondary\" size=\"md\" [disabled]=\"isExecuting()\" (onClick)=\"closeExecutionDialog()\">\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-workflow-management.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/const.ts","../../../../libs/modules/workflow-management/src/lib/entity.provider.ts","../../../../libs/modules/workflow-management/src/lib/menu.keys.ts","../../../../libs/modules/workflow-management/src/lib/menu.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-dashboard-widget-category.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/errors/workflow-errors-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/failures/workflow-failed-processes-by-type-donut-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/failures/workflow-failed-processes-summary-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/failures/workflow-failed-processes-trend-line-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/failures/workflow-stuck-processes-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/sla/workflow-gauge-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/sla/workflow-sla-risk-prediction-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/sla/workflow-sla-trend-line-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/sla/workflow-sla-violations-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/system-health/workflow-system-health-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/tasks/workflow-overdue-tasks-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/tasks/workflow-pending-tasks-by-age-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/throughput/workflow-line-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/throughput/workflow-throughput-daily-line-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/throughput/workflow-throughput-weekly-line-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-bottleneck-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-donut-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-overloaded-users-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-workload-per-user-active-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-workload-per-user-avg-age-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/admin/workload/workflow-workload-per-user-overdue-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/user/workflow-bar-chart-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/user/workflow-tasks-near-deadline-bar-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/features/dashboard/widgets/workflow-dashboard-widgets.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/activity-command-configurator/activity-command-configurator-widget.config.ts","../../../../libs/modules/workflow-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-confirm-popup.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-layout-popup.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/human-task.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/show-toast.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/collect-signature.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/create-entity-form.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/workflow-activities-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/activities/entiy.create.activity.ts","../../../../libs/modules/workflow-management/src/lib/features/automation-plugin/automation.plugin.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-plugin/workflow.plugin.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-plugin/workflow-plugin.module.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/category.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/workflows/workflow-category.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/workflows/workflow-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/manifest.ts","../../../../libs/modules/workflow-management/src/lib/features/automation-evaluator-scope.provider.ts","../../../../libs/modules/workflow-management/src/lib/permission.keys.ts","../../../../libs/modules/workflow-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/task-provider/generic-workflow-task.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/provider.task.ts","../../../../libs/modules/workflow-management/src/lib/workflow-management.module.ts","../../../../libs/modules/workflow-management/src/lib/entities/automation/automation.types.ts","../../../../libs/modules/workflow-management/src/lib/entities/index.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.html","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/workflow-studio.component.ts","../../../../libs/modules/workflow-management/src/lib/features/engine/studio/workflow-studio.component.html","../../../../libs/modules/workflow-management/src/acorex-modules-workflow-management.ts"],"sourcesContent":["const config = {\n i18n: 'workflow-management',\n module: 'WorkflowManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'workflow-management',\n name: config.module,\n title: '@workflow-management:module.title',\n icon: 'fa-light fa-diagram-project',\n },\n entities: {\n workflowDefinition: {\n name: 'WorkflowDefinition',\n fullName: `${config.module}.WorkflowDefinition`,\n title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',\n titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',\n icon: 'fa-light fa-diagram-project',\n },\n workflowInstance: {\n name: 'WorkflowInstance',\n fullName: `${config.module}.WorkflowInstance`,\n title: '@workflow-management:workflow-instances.entities.workflow-instance.title',\n titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',\n icon: 'fa-light fa-play-circle',\n },\n activityDefinition: {\n name: 'ActivityDefinition',\n fullName: `${config.module}.ActivityDefinition`,\n title: '@workflow-management:activities.entities.activity-definition.title',\n titlePlural: '@workflow-management:activities.entities.activity-definition.plural',\n icon: 'fa-light fa-puzzle-piece',\n },\n automation: {\n name: 'Automation',\n fullName: `${config.module}.Automation`,\n title: '@workflow-management:automations.entities.automation.title',\n titlePlural: '@workflow-management:automations.entities.automation.plural',\n icon: 'fa-light fa-bolt',\n },\n // workflowCategory: {\n // name: 'WorkflowCategory',\n // fullName: `${config.module}.WorkflowCategory`,\n // title: '@workflow-management:workflows.entities.workflow-category.title',\n // titlePlural: '@workflow-management:workflows.entities.workflow-category.plural',\n // icon: 'fa-light fa-folder',\n // },\n },\n dataSources: {\n dashboardChart: {\n pendingApproval: `${config.module}:DataSource:PendingApproval`,\n workloadByProcess: `${config.module}:DataSource:WorkloadByProcess`,\n slaCompliance: `${config.module}:DataSource:SlaCompliance`,\n throughputLast8Weeks: `${config.module}:DataSource:ThroughputLast8Weeks`,\n systemHealthSummary: `${config.module}:DataSource:SystemHealthSummary`,\n throughputDaily: `${config.module}:DataSource:ThroughputDaily`,\n throughputWeekly: `${config.module}:DataSource:ThroughputWeekly`,\n slaViolationsAndDelay: `${config.module}:DataSource:SlaViolationsAndDelay`,\n slaComplianceTrend: `${config.module}:DataSource:SlaComplianceTrend`,\n pendingTasksByAge: `${config.module}:DataSource:PendingTasksByAge`,\n failedProcessesSummary: `${config.module}:DataSource:FailedProcessesSummary`,\n failedProcessFailureTrend: `${config.module}:DataSource:FailedProcessFailureTrend`,\n failedProcessesByType: `${config.module}:DataSource:FailedProcessesByType`,\n stuckProcesses: `${config.module}:DataSource:StuckProcesses`,\n overdueTasksByProcess: `${config.module}:DataSource:OverdueTasksByProcess`,\n tasksNearDeadline: `${config.module}:DataSource:TasksNearDeadline`,\n bottleneckActivities: `${config.module}:DataSource:BottleneckActivities`,\n errorsByCategory: `${config.module}:DataSource:ErrorsByCategory`,\n workloadPerUserActive: `${config.module}:DataSource:WorkloadPerUserActive`,\n workloadPerUserOverdue: `${config.module}:DataSource:WorkloadPerUserOverdue`,\n workloadPerUserAvgAgeHours: `${config.module}:DataSource:WorkloadPerUserAvgAgeHours`,\n workloadOverloadedUsers: `${config.module}:DataSource:WorkloadOverloadedUsers`,\n slaRiskPrediction: `${config.module}:DataSource:SlaRiskPrediction`,\n },\n },\n};\n","import { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMWorkflowManagementModuleEntityProvider implements AXPEntityDefinitionLoader {\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.workflowDefinition.name:\n return (await import('./entities/workflow-definition/workflow-definition.entity')).factory();\n case RootConfig.entities.workflowInstance.name:\n return (await import('./entities/workflow-instance/workflow-instance.entity')).factory();\n case RootConfig.entities.activityDefinition.name:\n return (await import('./entities/activity-definition/activity-definition.entity')).factory();\n case RootConfig.entities.automation.name:\n return (await import('./entities/automation/automation.entity')).factory();\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n","export const AXPWorkflowManagementMenuKeys = {\n Root: 'workflow-management:menu',\n Workflow: 'workflow-management:workflow',\n WorkflowDefinitions: 'workflow-management:workflow-definitions',\n WorkflowInstances: 'workflow-management:workflow-instances',\n WorkflowStudio: 'workflow-management:workflow-studio',\n Activities: 'workflow-management:activities',\n ActivityDefinitions: 'workflow-management:activity-definitions',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPWorkflowManagementMenuKeys } from './menu.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name ?? module.name;\n\n const workflowsMenu = context.find(AXPCommonMenuKeys.Workflows);\n if (!workflowsMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Workflows,\n priority: 12,\n text: '@general:menus.workflows.title',\n icon: module.icon,\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.Workflows).addItems([\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowDefinitions,\n text: '@workflow-management:workflow-definitions.menus.workflow-definitions.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowDefinition.name),\n priority: 1,\n icon: RootConfig.entities.workflowDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowInstances,\n text: '@workflow-management:workflow-instances.menus.workflow-instances.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowInstance.name),\n priority: 2,\n icon: RootConfig.entities.workflowInstance.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowStudio,\n text: '@workflow-management:workflow-studio.menus.workflow-studio.title',\n path: `/${appName}/workflow-management/studio`,\n priority: 3,\n icon: 'fa-light fa-wrench',\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.ActivityDefinitions,\n text: '@workflow-management:activities.menus.activity.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.activityDefinition.name),\n priority: 4,\n icon: RootConfig.entities.activityDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n ]);\n }\n}\n","import { createMultiLanguageString } from '@acorex/platform/core';\nimport type { AXPWidgetCategory } from '@acorex/platform/layout/widget-core';\n\n/**\n * Single source of truth for the workflow tab in the widget picker.\n * All workflow dashboard extended widgets must use this so `uniqBy(name)` keeps a localized title.\n */\nexport const AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY: AXPWidgetCategory = {\n name: 'workflow',\n order: 3,\n title: createMultiLanguageString('Workflow', 'گردش کار'),\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowErrorsBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-errors-bar',\n title: createMultiLanguageString(\n 'Workflow Error Categorization',\n 'دستهبندی خطاهای گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Errors by type and code',\n 'خطاها بر اساس نوع و کد',\n ),\n xAxisLabel: createMultiLanguageString('Error category', 'دسته خطا'),\n yAxisLabel: createMultiLanguageString('Occurrences', 'تکرار'),\n dataSource: RootConfig.dataSources.dashboardChart.errorsByCategory,\n },\n },\n};\n","import { AXPDonutChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowFailedProcessesByTypeDonutChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPDonutChartWidget.name,\n widget: {\n ...AXPDonutChartWidget,\n name: 'workflow-failed-processes-by-type-donut',\n title: createMultiLanguageString(\n 'Workflow Failed Processes by Type',\n 'فرایندهای ناموفق بر اساس نوع',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Affected Process Types',\n 'انواع فرایند تحت تأثیر',\n ),\n dataSource: RootConfig.dataSources.dashboardChart.failedProcessesByType,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowFailedProcessesSummaryBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-failed-processes-summary-bar',\n title: createMultiLanguageString(\n 'Workflow Failed Processes Summary',\n 'خلاصه فرایندهای ناموفق گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Total vs Recent Failures',\n 'کل در مقابل شکستهای اخیر',\n ),\n xAxisLabel: createMultiLanguageString('Scope', 'محدوده'),\n yAxisLabel: createMultiLanguageString('Instances', 'نمونهها'),\n dataSource: RootConfig.dataSources.dashboardChart.failedProcessesSummary,\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowFailedProcessesTrendLineChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-failed-processes-trend-line',\n title: createMultiLanguageString(\n 'Workflow Failed Instances Trend',\n 'روند نمونههای ناموفق گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Failed Instances by Week',\n 'نمونههای ناموفق بر اساس هفته',\n ),\n xAxisLabel: createMultiLanguageString('Week', 'هفته'),\n yAxisLabel: createMultiLanguageString('Failures', 'شکستها'),\n fillArea: false,\n yAxisStartsAtZero: true,\n dataSource: RootConfig.dataSources.dashboardChart.failedProcessFailureTrend,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowStuckProcessesBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-stuck-processes-bar',\n title: createMultiLanguageString(\n 'Workflow Stuck Processes',\n 'فرایندهای گیرکرده گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Idle Time by Instance (hours)',\n 'زمان بیکاری بر اساس نمونه (ساعت)',\n ),\n xAxisLabel: createMultiLanguageString('Instance', 'نمونه'),\n yAxisLabel: createMultiLanguageString('Hours without progress', 'ساعت بدون پیشرفت'),\n dataSource: RootConfig.dataSources.dashboardChart.stuckProcesses,\n },\n },\n};\n","import { AXPGaugeChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowGaugeChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPGaugeChartWidget.name,\n widget: {\n ...AXPGaugeChartWidget,\n name: 'workflow-gauge-chart',\n title: createMultiLanguageString(\n 'Workflow SLA Compliance',\n 'انطباق SLA گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString('SLA Compliance', 'انطباق SLA'),\n label: createMultiLanguageString('Resolved In SLA (%)', 'حلشده در SLA (٪)'),\n dataSource: RootConfig.dataSources.dashboardChart.slaCompliance,\n minValue: 0,\n maxValue: 100,\n thresholds: [\n {\n value: 30,\n color: 'rgba(var(--ax-sys-color-danger-500))',\n label: 'Low',\n },\n { value: 70, color: 'rgba(var(--ax-sys-color-warning-500))', label: 'Medium' },\n { value: 100, color: 'rgba(var(--ax-sys-color-success-500))', label: 'High' },\n ],\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowSlaRiskPredictionBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-sla-risk-prediction-bar',\n title: createMultiLanguageString(\n 'Workflow SLA Risk Prediction',\n 'پیشبینی ریسک SLA گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Likely breach risk score (0–100)',\n 'امتیاز ریسک نقض محتمل (۰–۱۰۰)',\n ),\n xAxisLabel: createMultiLanguageString('Item', 'مورد'),\n yAxisLabel: createMultiLanguageString('Risk score', 'امتیاز ریسک'),\n dataSource: RootConfig.dataSources.dashboardChart.slaRiskPrediction,\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowSlaTrendLineChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-sla-trend-line',\n title: createMultiLanguageString(\n 'Workflow SLA Compliance Trend',\n 'روند انطباق SLA گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Resolved Within SLA (%)',\n 'حلشده در SLA (٪)',\n ),\n xAxisLabel: createMultiLanguageString('Week', 'هفته'),\n yAxisLabel: createMultiLanguageString('Percent', 'درصد'),\n fillArea: true,\n yAxisStartsAtZero: false,\n dataSource: RootConfig.dataSources.dashboardChart.slaComplianceTrend,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowSlaViolationsBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-sla-violations-bar',\n title: createMultiLanguageString(\n 'Workflow SLA Violations & Delay',\n 'تخلفات SLA و تأخیر گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Violations and Average Delay',\n 'تخلفات و میانگین تأخیر',\n ),\n xAxisLabel: createMultiLanguageString('Measure', 'معیار'),\n yAxisLabel: createMultiLanguageString('Count / Hours', 'تعداد / ساعت'),\n dataSource: RootConfig.dataSources.dashboardChart.slaViolationsAndDelay,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowSystemHealthBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-system-health-bar',\n title: createMultiLanguageString(\n 'Workflow System Health Summary',\n 'خلاصه وضعیت سلامت گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Instances, Tasks, and SLA',\n 'نمونهها، وظایف و SLA',\n ),\n xAxisLabel: createMultiLanguageString('Metric', 'شاخص'),\n yAxisLabel: createMultiLanguageString('Count / %', 'تعداد / ٪'),\n dataSource: RootConfig.dataSources.dashboardChart.systemHealthSummary,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowOverdueTasksBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-overdue-tasks-bar',\n title: createMultiLanguageString(\n 'Workflow Overdue Tasks by Process',\n 'وظایف معوقه گردش کار بر اساس فرایند',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Overdue Tasks (by process type)',\n 'وظایف معوقه (بر اساس نوع فرایند)',\n ),\n xAxisLabel: createMultiLanguageString('Process type', 'نوع فرایند'),\n yAxisLabel: createMultiLanguageString('Overdue tasks', 'وظایف معوقه'),\n dataSource: RootConfig.dataSources.dashboardChart.overdueTasksByProcess,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowPendingTasksByAgeBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-pending-tasks-by-age-bar',\n title: createMultiLanguageString(\n 'Workflow Pending Tasks by Age',\n 'وظایف در انتظار گردش کار بر اساس قدمت',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Pending Tasks by Age Bucket',\n 'وظایف در انتظار بر اساس بازه قدمت',\n ),\n xAxisLabel: createMultiLanguageString('Age Bucket', 'بازه قدمت'),\n yAxisLabel: createMultiLanguageString('Tasks', 'وظایف'),\n dataSource: RootConfig.dataSources.dashboardChart.pendingTasksByAge,\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowLineChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-line-chart',\n title: createMultiLanguageString(\n 'Workflow Throughput Trend',\n 'روند توان عملیات گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Created vs Completed (Last 8 Weeks)',\n 'ایجادشده و تکمیلشده (۸ هفته اخیر)',\n ),\n xAxisLabel: createMultiLanguageString('Week', 'هفته'),\n yAxisLabel: createMultiLanguageString('Items', 'تعداد'),\n fillArea: false,\n /** Focus Y domain on the data range so the two series are readable (not squashed to the top band). */\n yAxisStartsAtZero: false,\n dataSource: RootConfig.dataSources.dashboardChart.throughputLast8Weeks,\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowThroughputDailyLineChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-throughput-daily-line',\n title: createMultiLanguageString(\n 'Workflow Created vs Completed (Daily)',\n 'ایجاد و تکمیل روزانه گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Created vs Completed — Daily',\n 'ایجاد در مقابل تکمیل — روزانه',\n ),\n xAxisLabel: createMultiLanguageString('Day', 'روز'),\n yAxisLabel: createMultiLanguageString('Items', 'تعداد'),\n fillArea: false,\n yAxisStartsAtZero: false,\n dataSource: RootConfig.dataSources.dashboardChart.throughputDaily,\n },\n },\n};\n","import { AXPLineChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowThroughputWeeklyLineChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: 'workflow-throughput-weekly-line',\n title: createMultiLanguageString(\n 'Workflow Created vs Completed (Weekly)',\n 'ایجاد و تکمیل هفتگی گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Created vs Completed — Weekly',\n 'ایجاد در مقابل تکمیل — هفتگی',\n ),\n xAxisLabel: createMultiLanguageString('Week', 'هفته'),\n yAxisLabel: createMultiLanguageString('Items', 'تعداد'),\n fillArea: false,\n yAxisStartsAtZero: false,\n dataSource: RootConfig.dataSources.dashboardChart.throughputWeekly,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowBottleneckBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-bottleneck-bar',\n title: createMultiLanguageString(\n 'Workflow Bottleneck Detection',\n 'تشخیص گلوگاه گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Highest average wait by activity',\n 'بیشترین میانگین انتظار بر اساس فعالیت',\n ),\n xAxisLabel: createMultiLanguageString('Activity / step', 'فعالیت / گام'),\n yAxisLabel: createMultiLanguageString('Avg wait (hours)', 'میانگین انتظار (ساعت)'),\n dataSource: RootConfig.dataSources.dashboardChart.bottleneckActivities,\n },\n },\n};\n","import { AXPDonutChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowDonutChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPDonutChartWidget.name,\n widget: {\n ...AXPDonutChartWidget,\n name: 'workflow-donut-chart',\n title: createMultiLanguageString(\n 'Workflow Workload by Process',\n 'بار کاری گردش کار بر اساس فرایند',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString('Workload by Process', 'بار کاری بر اساس فرایند'),\n dataSource: RootConfig.dataSources.dashboardChart.workloadByProcess,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowOverloadedUsersBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-overloaded-users-bar',\n title: createMultiLanguageString(\n 'Workflow Overloaded Users',\n 'کاربران با بار بیش از حد گردش کار',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Users above capacity threshold (active tasks)',\n 'کاربران بالاتر از آستانه ظرفیت (وظایف فعال)',\n ),\n xAxisLabel: createMultiLanguageString('User', 'کاربر'),\n yAxisLabel: createMultiLanguageString('Active tasks', 'وظایف فعال'),\n dataSource: RootConfig.dataSources.dashboardChart.workloadOverloadedUsers,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowWorkloadPerUserActiveBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-workload-per-user-active-bar',\n title: createMultiLanguageString(\n 'Workflow Workload per User (Active)',\n 'بار کاری گردش کار به ازای کاربر (فعال)',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Active task count by user',\n 'تعداد وظایف فعال به ازای کاربر',\n ),\n xAxisLabel: createMultiLanguageString('User', 'کاربر'),\n yAxisLabel: createMultiLanguageString('Active tasks', 'وظایف فعال'),\n dataSource: RootConfig.dataSources.dashboardChart.workloadPerUserActive,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowWorkloadPerUserAvgAgeBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-workload-per-user-avg-age-bar',\n title: createMultiLanguageString(\n 'Workflow Avg Task Age per User',\n 'میانگین قدمت وظیفه به ازای کاربر',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Average age of active tasks (hours)',\n 'میانگین قدمت وظایف فعال (ساعت)',\n ),\n xAxisLabel: createMultiLanguageString('User', 'کاربر'),\n yAxisLabel: createMultiLanguageString('Hours', 'ساعت'),\n dataSource: RootConfig.dataSources.dashboardChart.workloadPerUserAvgAgeHours,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowWorkloadPerUserOverdueBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-workload-per-user-overdue-bar',\n title: createMultiLanguageString(\n 'Workflow Workload per User (Overdue)',\n 'بار کاری گردش کار به ازای کاربر (معوقه)',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Overdue task count by user',\n 'تعداد وظایف معوقه به ازای کاربر',\n ),\n xAxisLabel: createMultiLanguageString('User', 'کاربر'),\n yAxisLabel: createMultiLanguageString('Overdue tasks', 'وظایف معوقه'),\n dataSource: RootConfig.dataSources.dashboardChart.workloadPerUserOverdue,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-bar-chart',\n title: createMultiLanguageString(\n 'Workflow Pending Approvals by Age',\n 'تأییدهای در انتظار گردش کار بر اساس قدمت',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString('Pending Approvals by Age', 'تأییدهای در انتظار بر اساس قدمت'),\n xAxisLabel: createMultiLanguageString('Age Bucket', 'بازه قدمت'),\n yAxisLabel: createMultiLanguageString('Count', 'تعداد'),\n dataSource: RootConfig.dataSources.dashboardChart.pendingApproval,\n },\n },\n};\n","import { AXPBarChartWidget } from '@acorex/modules/dashboard-management';\nimport { createMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetGroupEnum, type AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../../../const';\nimport { AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY } from '../workflow-dashboard-widget-category';\n\nexport const AXMWorkflowTasksNearDeadlineBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPBarChartWidget.name,\n widget: {\n ...AXPBarChartWidget,\n name: 'workflow-tasks-near-deadline-bar',\n title: createMultiLanguageString(\n 'Workflow Tasks Near Deadline / SLA Risk',\n 'وظایف نزدیک مهلت / ریسک SLA',\n ),\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_WORKFLOW_DASHBOARD_WIDGET_CATEGORY],\n options: {\n title: createMultiLanguageString(\n 'Remaining time to deadline (minutes)',\n 'زمان باقیمانده تا مهلت (دقیقه)',\n ),\n xAxisLabel: createMultiLanguageString('Task', 'وظیفه'),\n yAxisLabel: createMultiLanguageString('Minutes left', 'دقیقه باقیمانده'),\n dataSource: RootConfig.dataSources.dashboardChart.tasksNearDeadline,\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport type { AXPExtendedWidget } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport {\n AXMWorkflowBottleneckBarChartAXPExtendedWidget,\n AXMWorkflowDonutChartAXPExtendedWidget,\n AXMWorkflowErrorsBarChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesByTypeDonutChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesSummaryBarChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesTrendLineChartAXPExtendedWidget,\n AXMWorkflowGaugeChartAXPExtendedWidget,\n AXMWorkflowLineChartAXPExtendedWidget,\n AXMWorkflowOverdueTasksBarChartAXPExtendedWidget,\n AXMWorkflowOverloadedUsersBarChartAXPExtendedWidget,\n AXMWorkflowPendingTasksByAgeBarChartAXPExtendedWidget,\n AXMWorkflowSlaRiskPredictionBarChartAXPExtendedWidget,\n AXMWorkflowSlaTrendLineChartAXPExtendedWidget,\n AXMWorkflowSlaViolationsBarChartAXPExtendedWidget,\n AXMWorkflowStuckProcessesBarChartAXPExtendedWidget,\n AXMWorkflowSystemHealthBarChartAXPExtendedWidget,\n AXMWorkflowThroughputDailyLineChartAXPExtendedWidget,\n AXMWorkflowThroughputWeeklyLineChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserActiveBarChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserAvgAgeBarChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserOverdueBarChartAXPExtendedWidget,\n} from './admin';\nimport { AXMWorkflowBarChartAXPExtendedWidget, AXMWorkflowTasksNearDeadlineBarChartAXPExtendedWidget } from './user';\n\n//#endregion\n\n//#region ---- Extended dashboard widgets ----\n\nconst WORKFLOW_DASHBOARD_EXTENDED_WIDGETS: AXPExtendedWidget[] = [\n AXMWorkflowBarChartAXPExtendedWidget,\n AXMWorkflowTasksNearDeadlineBarChartAXPExtendedWidget,\n AXMWorkflowSystemHealthBarChartAXPExtendedWidget,\n AXMWorkflowThroughputDailyLineChartAXPExtendedWidget,\n AXMWorkflowThroughputWeeklyLineChartAXPExtendedWidget,\n AXMWorkflowLineChartAXPExtendedWidget,\n AXMWorkflowGaugeChartAXPExtendedWidget,\n AXMWorkflowSlaViolationsBarChartAXPExtendedWidget,\n AXMWorkflowSlaTrendLineChartAXPExtendedWidget,\n AXMWorkflowSlaRiskPredictionBarChartAXPExtendedWidget,\n AXMWorkflowPendingTasksByAgeBarChartAXPExtendedWidget,\n AXMWorkflowOverdueTasksBarChartAXPExtendedWidget,\n AXMWorkflowDonutChartAXPExtendedWidget,\n AXMWorkflowBottleneckBarChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserActiveBarChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserOverdueBarChartAXPExtendedWidget,\n AXMWorkflowWorkloadPerUserAvgAgeBarChartAXPExtendedWidget,\n AXMWorkflowOverloadedUsersBarChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesSummaryBarChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesTrendLineChartAXPExtendedWidget,\n AXMWorkflowFailedProcessesByTypeDonutChartAXPExtendedWidget,\n AXMWorkflowStuckProcessesBarChartAXPExtendedWidget,\n AXMWorkflowErrorsBarChartAXPExtendedWidget,\n];\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Registers workflow dashboard extended widgets (admin/user chart widgets).\n */\n@Injectable()\nexport class AXMWorkflowDashboardWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [];\n }\n\n getExtendedWidgets() {\n return WORKFLOW_DASHBOARD_EXTENDED_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMActivityCommandConfiguratorWidget: AXPWidgetConfig = {\n name: 'activity-command-configurator',\n title: 'Activity Command Configurator',\n icon: 'fa-light fa-bolt',\n description: 'Select an activity (command) and configure its parameters',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Enter label',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./activity-command-configurator-widget-edit.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetEditComponent\n ),\n },\n designer: {\n component: () =>\n import('./activity-command-configurator-widget-edit.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetEditComponent\n ),\n },\n column: {\n component: () =>\n import('./activity-command-configurator-widget-column.component').then(\n (c) => c.AXMActivityCommandConfiguratorWidgetColumnComponent\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMActivityCommandConfiguratorWidget } from './features/activity-command-configurator/activity-command-configurator-widget.config';\n\n//#endregion\n\n//#region ---- Workflow Management Widgets Provider ----\n\nconst WORKFLOW_WIDGETS = [AXMActivityCommandConfiguratorWidget];\n\n@Injectable()\nexport class AXMWorkflowManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return WORKFLOW_WIDGETS;\n }\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\n//#region ---- Types ----\n\n/**\n * Input for ShowConfirmPopup activity.\n */\nexport interface ShowConfirmPopupInput {\n /**\n * Title of the confirmation dialog\n */\n title: string;\n\n /**\n * Message/content of the confirmation dialog\n */\n message: string;\n\n /**\n * Dialog type/color (e.g., 'warning', 'danger', 'info', 'success')\n */\n type?: AXStyleColorType;\n\n /**\n * Button layout direction ('horizontal' or 'vertical')\n */\n direction?: 'horizontal' | 'vertical';\n\n /**\n * Whether dialog is closable\n */\n closable?: boolean;\n\n /**\n * Default action button ('confirm' or 'cancel')\n */\n defaultAction?: 'confirm' | 'cancel';\n}\n\n/**\n * Output for ShowConfirmPopup activity.\n * Outcome is determined by the outcomes object (ok or cancel).\n */\nexport interface ShowConfirmPopupOutput {\n // No output data needed - outcome is determined by outcomes\n}\n\n//#endregion\n\n/**\n * ShowConfirmPopup Activity (Frontend)\n * \n * Shows a confirmation popup dialog with OK and Cancel buttons.\n * This activity runs on the frontend and requires user interaction.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-confirm-popup\n * \n * Outcomes:\n * - ok: User clicked OK button\n * - cancel: User clicked Cancel button or closed the dialog\n */\n@Injectable()\nexport class ShowConfirmPopupActivity implements AXPCommand<ShowConfirmPopupInput, ShowConfirmPopupOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: ShowConfirmPopupInput,\n ): Promise<AXPExecuteCommandResult<ShowConfirmPopupOutput>> {\n try {\n // Translate title and message if they are translation keys\n const title = await this.translationService.translateAsync(input.title);\n const message = await this.translationService.translateAsync(input.message);\n\n // Show confirmation dialog\n const dialogResult = await this.dialogService.confirm(\n title,\n message,\n input.type || 'warning',\n input.direction || 'horizontal',\n input.closable ?? false,\n input.defaultAction || 'cancel',\n );\n\n const confirmed = dialogResult.result === true;\n const outcome = confirmed ? 'ok' : 'cancel';\n\n console.log(`[ShowConfirmPopupActivity] User ${confirmed ? 'confirmed' : 'cancelled'} the dialog`);\n\n return {\n success: true,\n data: {} as ShowConfirmPopupOutput,\n metadata: {\n outcome,\n },\n };\n } catch (error: any) {\n console.error(`[ShowConfirmPopupActivity] Failed to show confirm popup:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show confirmation dialog',\n },\n data: {} as ShowConfirmPopupOutput,\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { AXPActionMenuItem, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport {\n AXPDialogRendererComponent,\n DialogRendererConfig,\n DialogRendererResult,\n} from '@acorex/platform/layout/builder';\nimport { AXPWidgetNode, AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for ShowLayoutPopup activity.\n */\nexport interface ShowLayoutPopupInput {\n /**\n * Layout definition as JSON string or AXPWidgetNode object\n */\n layout: string | AXPWidgetNode;\n\n /**\n * Dialog title\n */\n title?: string;\n\n /**\n * Dialog size\n */\n size?: AXPopupSizeType;\n\n /**\n * Whether to show close button\n */\n closeButton?: boolean;\n\n /**\n * Initial context data for the form\n */\n context?: Record<string, any>;\n\n /**\n * Dialog actions (buttons) to display in footer\n * Each action will create a corresponding outcome\n */\n actions?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n}\n\n//#endregion\n\n/**\n * ShowLayoutPopup Activity (Frontend)\n *\n * Shows a popup dialog with a custom layout built using layout builder.\n * The layout can be provided as JSON string or AXPWidgetNode object.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-layout-popup\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'save', outcome will be { save: true }\n * - If action has name = 'delete', outcome will be { delete: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n */\n@Injectable()\nexport class ShowLayoutPopupActivity implements AXPCommand<ShowLayoutPopupInput, Record<string, any>> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(input: ShowLayoutPopupInput): Promise<AXPExecuteCommandResult<Record<string, any>>> {\n try {\n // Parse layout definition\n let layoutNode: AXPWidgetNode;\n\n if (typeof input.layout === 'string') {\n // If it's a JSON string, parse it\n try {\n layoutNode = AXPWidgetSerializationHelper.fromJson(input.layout);\n } catch (error: any) {\n throw new Error(`Invalid layout JSON: ${error.message}`);\n }\n } else {\n // If it's already an object, use it directly (clone to avoid mutations)\n layoutNode = cloneDeep(input.layout);\n }\n\n // Validate layout node\n if (!layoutNode || !layoutNode.type) {\n throw new Error('Invalid layout: missing type property');\n }\n\n // Build actions from input or use defaults\n const actions = input.actions || {\n suffix: [\n {\n title: '@general:actions.cancel.title',\n icon: 'fa-times',\n color: 'default',\n command: { name: 'cancel' },\n },\n {\n title: '@general:actions.submit.title',\n icon: 'fa-check',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n },\n ],\n };\n\n // Create dialog configuration\n const dialogConfig: DialogRendererConfig = {\n title: input.title || 'Dialog',\n context: input.context || {},\n definition: layoutNode,\n actions: {\n footer: {\n prefix: actions.prefix || [],\n suffix: actions.suffix || [],\n },\n },\n };\n\n // Show dialog using AXPDialogRendererComponent. Close dialog before resolving so UI is updated before workflow continues.\n const dialogResult = await new Promise<DialogRendererResult>((resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: input.size || 'md',\n closeButton: input.closeButton !== undefined ? input.closeButton : true,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result: any) => {\n if (typeof result?.close === 'function') {\n result.close();\n }\n resolve({\n context: result?.context?.() ?? dialogConfig.context,\n action: result?.action ? result.action() : 'cancel',\n });\n },\n },\n });\n });\n\n // Extract result data and action\n const result = dialogResult?.context || {};\n let actionName = 'cancel'; // Default action\n\n const rawActionFromDialog = dialogResult?.action;\n let resolvedAction: string | { name?: string } | undefined;\n\n if (rawActionFromDialog) {\n resolvedAction = rawActionFromDialog;\n }\n\n if (typeof resolvedAction === 'string') {\n actionName = resolvedAction;\n } else if (typeof resolvedAction === 'object' && resolvedAction && 'name' in resolvedAction) {\n actionName = resolvedAction.name ?? 'cancel';\n }\n const action = actionName;\n\n console.log(`[ShowLayoutPopupActivity] Dialog closed with action: ${action}`, result);\n\n return {\n success: true,\n data: result,\n metadata: {\n outcome: action,\n },\n };\n } catch (error: any) {\n console.error(`[ShowLayoutPopupActivity] Failed to show layout popup:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show layout popup',\n },\n data: {},\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for Human Task activity.\n */\nexport interface HumanTaskInput {\n /**\n * Task title\n */\n title?: string;\n\n /**\n * Task description\n */\n description?: string;\n\n /**\n * Assigned user IDs (direct assignment)\n */\n assignedUserIds?: string[];\n\n /**\n * Candidate user IDs (users who can claim the task)\n */\n candidateUserIds?: string[];\n\n /**\n * Candidate role IDs (roles whose members can claim the task)\n */\n candidateRoleIds?: string[];\n\n /**\n * Task priority\n */\n priority?: 'Low' | 'Normal' | 'High' | 'Urgent';\n\n /**\n * Task due date (ISO date string or Date)\n */\n dueDate?: string | Date;\n\n /**\n * Initial context data for the form\n */\n context?: Record<string, any>;\n\n /**\n * Actions (buttons) for this task. Format: { prefix?: Array<Action>, suffix?: Array<Action> } (or JSON string).\n * Each action name becomes an outcome when the task is completed.\n */\n actions?: { prefix?: Array<{ name?: string; command?: { name?: string } }>; suffix?: Array<{ name?: string; command?: { name?: string } }> } | string;\n}\n\n/**\n * Output for Human Task activity.\n */\nexport interface HumanTaskOutput {\n /**\n * Result data from task completion (form values)\n */\n result: Record<string, any>;\n\n /**\n * Action that was clicked (e.g., 'approve', 'reject', 'cancel')\n */\n action: string;\n}\n\n//#endregion\n\n/**\n * Human Task Activity (Frontend)\n * \n * Generic human task activity that suspends workflow and waits for user interaction.\n * Supports assignment and actions (displayed inline). For dialog-style flow, use a follow-up activity.\n * \n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:human-task\n * \n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n * \n * Examples:\n * - If action has command.name = 'approve', outcome will be { approve: true }\n * - If action has name = 'reject', outcome will be { reject: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n * \n * Assignment:\n * - assignedUserIds: Direct assignment to specific users\n * - candidateUserIds: Users who can claim the task\n * - candidateRoleIds: Roles whose members can claim the task\n * \n * Display Modes:\n * - 'dialog': Traditional modal dialog (default)\n * - 'inline': Actions displayed directly on page before resume\n */\n@Injectable()\nexport class HumanTaskActivity implements AXPCommand<HumanTaskInput, HumanTaskOutput> {\n //#region ---- Services & Dependencies ----\n\n // Note: This activity doesn't execute immediately - it suspends the workflow\n // The actual UI display is handled by the Generic Task Provider and Display Service\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n /**\n * Execute human task activity.\n * \n * This method doesn't actually show UI - it just validates input and returns success.\n * The workflow engine will suspend at this activity and create a bookmark.\n * The Generic Task Provider will handle displaying the task UI inline.\n */\n async execute(input: HumanTaskInput): Promise<AXPExecuteCommandResult<HumanTaskOutput>> {\n console.log('human task input', input.context?.['input'] ?? 'no input');\n\n try {\n // Validate required fields\n if (!input.title && !input.description) {\n console.warn('[HumanTaskActivity] No title or description provided');\n }\n\n // Build available outcomes from actions (dynamic) or default submit/cancel\n const availableOutcomes: string[] = [];\n const rawActions = input.actions;\n if (rawActions) {\n try {\n const actions = typeof rawActions === 'string' ? JSON.parse(rawActions) : rawActions;\n const prefix = actions?.prefix ?? [];\n const suffix = actions?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string') availableOutcomes.push(name);\n }\n } catch {\n // ignore parse error\n }\n }\n if (availableOutcomes.length === 0) {\n availableOutcomes.push('cancel', 'submit');\n }\n\n // This activity suspends the workflow - the actual result will come from resume\n // Return a placeholder result - the real result comes when user completes the task\n return {\n success: true,\n data: {\n result: input.context || {},\n action: 'pending', // Will be replaced when task is completed\n },\n metadata: {\n outcome: 'pending',\n },\n };\n } catch (error: any) {\n console.error(`[HumanTaskActivity] Failed to execute human task:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to execute human task',\n },\n data: {\n result: {},\n action: 'cancel',\n },\n metadata: {\n outcome: 'cancel',\n },\n };\n }\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXStyleColorType } from '@acorex/cdk/common';\n\n//#region ---- Types ----\n\n/**\n * Input for ShowToast activity.\n */\nexport interface ShowToastInput {\n /**\n * Message/content of the toast\n */\n message: string;\n\n /**\n * Toast type/color (e.g., 'success', 'danger', 'info', 'warning')\n */\n type?: AXStyleColorType;\n\n /**\n * Toast title (optional)\n */\n title?: string;\n\n /**\n * Whether to show close button\n */\n closeButton?: boolean;\n\n /**\n * Timeout in milliseconds (0 = no timeout)\n */\n timeOut?: number;\n\n /**\n * Whether to show timeout progress\n */\n timeOutProgress?: boolean;\n}\n\n/**\n * Output for ShowToast activity.\n */\nexport interface ShowToastOutput {\n // No output data needed - toast is just a notification\n}\n\n//#endregion\n\n/**\n * ShowToast Activity (Frontend)\n * \n * Shows a toast notification message to the user.\n * This activity runs on the frontend and displays a temporary notification.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-toast\n * \n * Outcomes:\n * - done: Toast was displayed successfully\n */\n@Injectable()\nexport class ShowToastActivity implements AXPCommand<ShowToastInput, ShowToastOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: ShowToastInput,\n ): Promise<AXPExecuteCommandResult<ShowToastOutput>> {\n try {\n // Translate message and title if they are translation keys\n const message = await this.translationService.translateAsync(input.message);\n const title = input.title ? await this.translationService.translateAsync(input.title) : undefined;\n\n // Show toast notification\n this.toastService.show({\n color: input.type || 'default',\n title: title,\n content: message,\n closeButton: input.closeButton ?? true,\n timeOut: input.timeOut ?? 3000,\n timeOutProgress: input.timeOutProgress ?? false,\n });\n\n return {\n success: true,\n data: {} as ShowToastOutput,\n metadata: {\n outcome: 'done',\n },\n };\n } catch (error: any) {\n console.error(`[ShowToastActivity] Failed to show toast:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show toast notification',\n },\n data: {} as ShowToastOutput,\n metadata: {\n outcome: 'failed',\n },\n };\n }\n }\n\n //#endregion\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/modules/common';\n\n//#region ---- Types ----\n\n/**\n * Input for CollectSignature activity.\n */\nexport interface CollectSignatureInput {\n /**\n * Signature request ID\n */\n signatureRequestId: string;\n\n /**\n * ID of the signer\n */\n signerId: string;\n\n /**\n * Reference ID of the entity record\n */\n refId: string;\n\n /**\n * Reference type (module.entity format)\n */\n refType: string;\n\n /**\n * Message to display to the signer\n */\n message?: string;\n}\n\n/**\n * Output for CollectSignature activity.\n */\nexport interface CollectSignatureOutput {\n /**\n * Signature data (base64 encoded image or text)\n */\n signature: string;\n\n /**\n * Optional note from the signer\n */\n note?: string;\n\n /**\n * Timestamp when signature was collected\n */\n signedAt: string;\n}\n\n//#endregion\n\n/**\n * CollectSignature Activity (Frontend)\n * \n * Collects a signature from a user through a dialog.\n * This activity runs on the frontend and requires user interaction.\n * \n * Execution Mode: frontend\n * Activity Type: workflow-activity:collect-signature\n * \n * Outcomes:\n * - Signed: User provided signature successfully\n * - Cancelled: User cancelled the signature dialog\n */\n@Injectable()\nexport class CollectSignatureActivity implements AXPCommand<CollectSignatureInput, CollectSignatureOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- AXPCommand Implementation ----\n\n async execute(\n input: CollectSignatureInput,\n ): Promise<AXPExecuteCommandResult<CollectSignatureOutput>> {\n try {\n console.log(`[CollectSignatureActivity] Collecting signature from user: ${input.signerId}`);\n\n // Translate message if provided\n const message = input.message\n ? await this.translationService.translateAsync(input.message)\n : await this.translationService.translateAsync('@workflow-management:signature.activities.collect-signature.default-message');\n\n // Show signature collection dialog\n const dialogResult = await this.showSignatureDialog(message);\n\n if (dialogResult.cancelled) {\n console.log(`[CollectSignatureActivity] User cancelled signature collection`);\n return {\n success: true,\n data: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n const signedAt = new Date().toISOString();\n\n console.log(`[CollectSignatureActivity] Signature collected successfully at ${signedAt}`);\n\n return {\n success: true,\n data: {\n signature: dialogResult.signature,\n note: dialogResult.note,\n signedAt,\n },\n metadata: {\n outcome: 'Signed',\n },\n };\n } catch (error: any) {\n console.error(`[CollectSignatureActivity] Failed to collect signature:`, error);\n\n return {\n success: false,\n message: {\n text: error.message || 'Failed to collect signature',\n },\n data: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Dialog Logic ----\n\n /**\n * Shows a dialog to collect signature from the user.\n */\n private async showSignatureDialog(\n message: string,\n ): Promise<{ signature: string; note?: string; cancelled: boolean }> {\n const result = await this.layoutBuilder\n .create()\n .dialog<{ signature: string; note?: string; cancelled: boolean }>((dialog) => {\n dialog\n .setTitle('@workflow-management:signature.activities.collect-signature.dialog-title')\n .setMessage(message)\n .setContext({ signature: '', note: '' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@workflow-management:signature.activities.collect-signature.note-label', (field) => {\n field.path('note');\n field.largeTextBox({\n placeholder: '@workflow-management:signature.activities.collect-signature.note-placeholder',\n maxLength: 1000,\n });\n })\n .formField('@workflow-management:signature.activities.collect-signature.signature-label', (field) => {\n field.path('signature');\n field.customWidget(AXPWidgetsList.Editors.SignatureBox, {\n validations: [\n {\n rule: 'required',\n options: {\n message: '@workflow-management:signature.activities.collect-signature.signature-required',\n },\n },\n ],\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@workflow-management:signature.activities.collect-signature.submit-text');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return { signature: '', note: undefined, cancelled: true };\n }\n const formData = context as { signature?: string; note?: string };\n return {\n signature: formData['signature'] || '',\n note: formData['note'],\n cancelled: false,\n };\n });\n })\n .show();\n\n return result;\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Input for Create Entity Form activity.\n */\nexport interface CreateEntityFormInput {\n /**\n * Module name (e.g. HumanCapitalManagement)\n */\n module: string;\n\n /**\n * Entity name (e.g. LeaveRequest)\n */\n entity: string;\n\n /**\n * If true, form only collects data and the next workflow step (e.g. entity-create) persists.\n * If false, entity create is executed on frontend and outcome is 'Done'.\n */\n persistInWorkflow?: boolean;\n\n /**\n * Property names to show. Only these properties are displayed. If both includes and excludes are set, only includes is applied.\n */\n includes?: string[];\n\n /**\n * Property names to hide. Ignored when includes is also set.\n */\n excludes?: string[];\n\n /**\n * Property names that should be displayed as readonly.\n */\n readonlys?: string[];\n\n /**\n * Default values for form properties. Keys are property names; filled values are applied as initial context.\n */\n data?: Record<string, any>;\n}\n\n/**\n * Output for Create Entity Form activity.\n */\nexport interface CreateEntityFormOutput {\n /**\n * Form data for the next workflow step (when persistInWorkflow is true).\n */\n result?: Record<string, any>;\n\n /**\n * Created entity ID (when persistInWorkflow is false and entity create succeeds).\n */\n id?: string;\n}\n\n//#endregion\n\n/**\n * Create Entity Form Activity (Frontend)\n *\n * Shows a create-entity form as an interactive dialog. When persistInWorkflow is true,\n * returns form data and outcome 'Submitted'/'Cancelled' so the workflow handles persistence.\n * When false, executes entity create on frontend and returns outcome 'Done'.\n *\n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:create-entity-form\n *\n * Outcomes:\n * - Submitted: User submitted form (persistInWorkflow true → next step persists)\n * - Cancelled: User cancelled the form\n * - Done: Entity was created on frontend (persistInWorkflow false)\n */\n@Injectable()\nexport class CreateEntityFormActivity implements AXPCommand<CreateEntityFormInput, CreateEntityFormOutput> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityForm = inject(AXPEntityFormBuilderService);\n private readonly entityService = inject(AXPEntityDefinitionRegistryService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n async execute(\n input: CreateEntityFormInput\n ): Promise<AXPExecuteCommandResult<CreateEntityFormOutput>> {\n const {\n module,\n entity,\n persistInWorkflow = false,\n includes,\n excludes,\n readonlys,\n data,\n } = input;\n\n if (!module || !entity) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-identifier'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n let dialogRef: any;\n\n try {\n const entityRef = await this.entityService.resolve(module, entity);\n\n const includeList = this.normalizePropertyList(includes);\n const excludeList = this.normalizePropertyList(excludes);\n const readonlyList = this.normalizePropertyList(readonlys);\n const initialData = this.normalizeData(data);\n\n let chain = this.entityForm.entity(`${module}.${entity}`).create(initialData);\n\n if (includeList.length > 0) {\n chain = chain.include(...includeList);\n } else if (excludeList.length > 0) {\n chain = chain.exclude(...excludeList);\n }\n\n if (readonlyList.length > 0) {\n chain = chain.readonlyProperties(...readonlyList);\n }\n\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n\n dialogRef = await chain.show();\n\n if (dialogRef.action() === 'cancel') {\n dialogRef.close();\n return {\n success: true,\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n if (dialogRef.action() === 'submit') {\n const context = dialogRef.context();\n\n if (persistInWorkflow) {\n // Form only collects data; workflow persists in next step\n dialogRef.close();\n return {\n success: true,\n data: { result: context ?? {} },\n metadata: {\n outcome: 'Submitted',\n },\n };\n }\n\n // Entity creates on frontend → outcome 'Done'\n dialogRef.setLoading(true);\n try {\n const createFn = entityRef.commands?.create?.execute as (payload: any) => Promise<{ id: string } | AXPExecuteCommandResult<any>>;\n\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n\n const result = await createFn(context);\n dialogRef.close();\n\n const id = typeof result === 'object' && result !== null && 'id' in result\n ? (result as { id: string }).id\n : (result as AXPExecuteCommandResult<any>)?.data?.id ?? (result as any)?.data?.item?.id;\n\n return {\n success: true,\n data: {\n id: id ?? '',\n result: context ?? {},\n },\n metadata: {\n outcome: 'Done',\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } catch (error: any) {\n console.error('[CreateEntityFormActivity] Entity create failed:', error);\n throw error;\n } finally {\n dialogRef?.setLoading(false);\n }\n }\n\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n } catch (error: any) {\n console.error('[CreateEntityFormActivity] Failed:', error);\n\n return {\n success: false,\n message: {\n text:\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n data: {},\n metadata: {\n outcome: 'Cancelled',\n },\n };\n }\n }\n\n //#region ---- Private Helpers ----\n\n /**\n * Normalizes property list input (array, JSON string, or expression result).\n */\n private normalizePropertyList(value: string[] | any): string[] {\n if (!value) return [];\n if (Array.isArray(value)) {\n return value.filter((v) => typeof v === 'string');\n }\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter((v: any) => typeof v === 'string') : [];\n } catch {\n return [];\n }\n }\n return [];\n }\n\n /**\n * Normalizes data input (object or JSON string).\n */\n private normalizeData(value: Record<string, any> | any): Record<string, any> {\n if (!value) return {};\n if (typeof value === 'object' && !Array.isArray(value)) return value;\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) ? parsed : {};\n } catch {\n return {};\n }\n }\n return {};\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPActivityProvider, AXPActivityDefinition } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Activities Definition Provider\n * \n * Provides activity definitions (metadata only).\n * Activity definitions contain metadata for UI and tooling.\n * The `name` property is used as the command key for execution.\n * Reads from entity service (mock data).\n */\n@Injectable()\nexport class AXMWorkflowActivitiesDefinitionProvider implements AXPActivityProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private activityDefinitionService = this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.activityDefinition.name\n ).data<any, any>();\n\n //#endregion\n\n //#region ---- AXPActivityProvider Implementation ----\n\n async getList(categoryId: string): Promise<AXPActivityDefinition[]> {\n // Use 'equal' operator to filter by category field\n const result = await this.activityDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'category',\n operator: {\n type: 'equal',\n },\n value: categoryId,\n }]\n }\n });\n return result.items as AXPActivityDefinition[];\n }\n\n async getById(name: string): Promise<AXPActivityDefinition | undefined> {\n // Try to find by name field first, then by type field\n const byName = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n \n if (byName.items && byName.items.length > 0) {\n return byName.items[0] as AXPActivityDefinition;\n }\n\n // Try by type field\n const byType = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'type',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n\n if (byType.items && byType.items.length > 0) {\n return byType.items[0] as AXPActivityDefinition;\n }\n\n return undefined;\n }\n\n //#endregion\n}\n\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\n\nexport interface CreateEnityInput{\n module : string;\n entity : string;\n\n}\n\n\nexport interface CreateEnityOutput {\n id:string;\n}\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPCreateEntityActivity implements AXPCommand<CreateEnityInput, CreateEnityOutput> {\n private entityForm = inject(AXPEntityFormBuilderService);\n private entityService = inject(AXPEntityDefinitionRegistryService);\n private translationService = inject(AXTranslationService);\n\n protected context = {};\n\n async execute(input: CreateEnityInput): Promise<AXPExecuteCommandResult<any>> {\n const entityRef = await this.entityService.resolve(input.module, input.entity);\n\n let dialogRef: any;\n\n try {\n let chain = this.entityForm.entity(`${input.module}.${input.entity}`).create({});\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n\n dialogRef = await chain.show();\n if (dialogRef.action() == 'cancel') {\n dialogRef.close();\n return {\n success: true,\n data: { id: '' },\n metadata: { outcome: 'cancel' },\n };\n } else if (dialogRef.action() == 'submit') {\n dialogRef.setLoading(true);\n const context = dialogRef.context();\n const createFn = entityRef.commands?.create?.execute as (payload: any) => Promise<{id : string}>;\n\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n };\n }\n const result = await createFn(context);\n if (result) {\n dialogRef.close();\n \n return {\n success: true,\n data: {\n id: result.id,\n },\n metadata: {\n outcome: 'Submitted',\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } else {\n //todo\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n },\n data: {\n id: '-1',\n },\n metadata: {\n outcome: 'Submitted',\n },\n };\n }\n }\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n };\n } catch (error) {\n return {\n success: false,\n message: {\n text:\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n };\n } finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex/platform/common';\nimport { AXPSystemActionType } from '@acorex/platform/core';\nimport {\n AXPEntityActionPlugin,\n entityDetailsCrudActions,\n} from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Plugin options ----\n\nexport type AutomationLayoutType =\n | 'page-list'\n | 'tab-list'\n | 'page-detail'\n | 'tab-detail';\n\nexport interface AXMAutomationPluginOptions {\n /** Title (i18n key or label) for the automations block in the UI. */\n title?: string;\n /** Icon class (e.g. 'fa-light fa-bolt'). Default 'fa-light fa-bolt'. */\n icon?: string;\n /** How to display: page-list (default), tab-list, page-detail, tab-detail. */\n layoutType?: AutomationLayoutType;\n /** Position relative to main content: 'before' | 'after' | 'middle'. Default 'after'. */\n position?: 'before' | 'after' | 'middle';\n /** Order among related entities. Default 2. */\n order?: number;\n /** Column names to show in list view. Default ['name', 'title', 'description', 'command']. */\n columns?: string[];\n}\n\nconst DEFAULT_ICON = 'fa-light fa-bolt';\nconst AUTOMATION_ENTITY = 'WorkflowManagement.Automation';\n\n//#endregion\n\n//#region ---- Plugin ----\n\n/**\n * Automation entity plugin.\n * Adds a related entity (WorkflowManagement.Automation) bound to the current entity via refType/refId.\n * Any entity can enable it with: plugins: [{ name: 'automation', options: { title: '...', layoutType: 'page-list', ... } }].\n */\nexport const automationPlugin: AXPEntityActionPlugin = {\n name: 'automation',\n order: 50,\n apply: (ctx, options?: AXMAutomationPluginOptions) => {\n const opts = options ?? {};\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n const title = opts.title?.trim()?.length ? opts.title : '@workflow-management:automations.terms.automations';\n const icon = opts.icon?.trim()?.length ? opts.icon : DEFAULT_ICON;\n const layoutType = opts.layoutType ?? 'page-list';\n const position = opts.position ?? 'after';\n const order = opts.order ?? 2;\n const columns = opts.columns ?? ['name', 'title', 'description', 'command'];\n\n const createAction: AXPEntityAction = {\n title: '@general:actions.create.title',\n command: {\n name: 'Entity:Create',\n options: {\n process: {\n redirect: false,\n canCreateNewOne: true,\n data: {\n refType,\n refId: '{{context.eval(\"id\")}}',\n },\n },\n },\n },\n priority: 'primary',\n type: AXPSystemActionType.Create,\n scope: AXPEntityCommandScope.TypeLevel,\n };\n\n const otherActions = entityDetailsCrudActions('refId', { create: false });\n\n ctx.relatedEntities.add({\n entity: AUTOMATION_ENTITY,\n title,\n icon,\n columns,\n conditions: [\n { name: 'refType', operator: { type: 'equal' }, value: refType },\n { name: 'refId', operator: { type: 'equal' }, value: '{{context.eval(\"id\")}}' },\n ],\n actions: [createAction, ...otherActions],\n layout: { type: layoutType, position, order },\n excludeProperties: ['refType', 'refId'],\n });\n },\n};\n\n//#endregion\n","import { AXPEntityActionPlugin } from '@acorex/platform/layout/entity';\n\n/**\n * Workflow Plugin\n *\n * Marks an entity as workflow-capable. This plugin does NOT configure workflows;\n * it only indicates that the entity can participate in workflows.\n *\n * Workflow bindings are configured in Workflow Management (workflow definition → bindings),\n * not in the entity definition.\n *\n * This plugin:\n * - Adds workflow capability marker to entity extensions\n * - Enables workflow trigger middleware to detect workflow-capable entities\n * - Provides UI hooks for workflow-related features (future enhancement)\n *\n * Usage:\n * ```typescript\n * plugins: [\n * { name: 'workflow' }, // Entity is workflow-capable\n * ]\n * ```\n */\nexport const workflowPlugin: AXPEntityActionPlugin = {\n name: 'workflow',\n order: 50, // After core plugins (40-45), before status/archive (60-70)\n apply: (ctx) => {\n // Mark entity as workflow-capable in extensions\n (ctx.entity as any).extensions ??= {};\n (ctx.entity as any).extensions.workflow = {\n enabled: true,\n };\n\n // Note: No properties, actions, or views are added by this plugin.\n // It only marks the entity as workflow-capable.\n // Actual workflow bindings are configured in Workflow Management.\n },\n};\n\n","import { NgModule } from '@angular/core';\nimport { AXP_ENTITY_ACTION_PLUGIN } from '@acorex/platform/layout/entity';\nimport { automationPlugin } from '../automation-plugin/automation.plugin';\nimport { workflowPlugin } from './workflow.plugin';\n\n/**\n * Workflow Plugin Module\n *\n * Registers:\n * - workflow plugin: marks entities as workflow-capable\n * - automation plugin: adds WorkflowManagement.Automation as related entity (refType/refId)\n */\n@NgModule({\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: automationPlugin,\n multi: true,\n },\n ],\n})\nexport class AXMWorkflowPluginModule {}\n\n","import { AXPActivityCategoryProvider, AXPActivityCategory } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\n\n/**\n * Provider for activity categories.\n * Reads categories from entity service (mock data).\n */\n@Injectable()\nexport class AXCCategoryProvider implements AXPActivityCategoryProvider {\n \n private readonly entityService = inject(AXPEntityService);\n /** Category entity is provided by category plugin (ActivityDefinition → ActivityDefinitionCategory). */\n private categoryService = this.entityService.withEntity(\n RootConfig.module.name,\n 'ActivityDefinitionCategory'\n ).data<any, any>();\n\n async getList(parentId?: string): Promise<AXPActivityCategory[]> {\n const list: AXPActivityCategory[] = [];\n \n if (parentId) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n } else {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n });\n list.push(...result.items);\n }\n \n return list;\n }\n\n async getById(id: string): Promise<AXPActivityCategory | undefined> {\n return await this.categoryService.byKey(id);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { AXPWorkflowCategoryProvider, AXPWorkflowCategory } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Category Provider\n * \n * Provides workflow categories from entity service.\n * Reads from entity service (mock data or API).\n */\n@Injectable()\nexport class AXMWorkflowCategoryProvider implements AXPWorkflowCategoryProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly categoryService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name + 'Category')\n .data<any, any>();\n\n //#endregion\n\n //#region ---- AXPWorkflowCategoryProvider Implementation ----\n\n async getList(parentId?: string): Promise<AXPWorkflowCategory[]> {\n const filters: any[] = [];\n\n if (parentId === undefined) {\n // Root categories: parentId is null or undefined\n filters.push({\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n });\n } else {\n // Child categories: parentId matches\n filters.push({\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n });\n }\n\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters,\n },\n });\n\n return (result.items || []) as AXPWorkflowCategory[];\n }\n\n async getById(id: string): Promise<AXPWorkflowCategory | undefined> {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: id,\n }],\n },\n });\n\n if (result.items && result.items.length > 0) {\n return result.items[0] as AXPWorkflowCategory;\n }\n\n return undefined;\n }\n\n //#endregion\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { AXPWorkflowProvider, AXPWorkflowDefinition } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\n\n/**\n * Workflow Definition Provider\n * \n * Provides workflow definitions for UI and tooling.\n * The `name` property is used as the workflow identifier.\n * Reads from entity service (mock data or API).\n */\n@Injectable()\nexport class AXMWorkflowDefinitionProvider implements AXPWorkflowProvider {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly workflowDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name)\n .data<any, any>();\n\n //#endregion\n\n //#region ---- AXPWorkflowProvider Implementation ----\n\n async getList(categoryId: string): Promise<AXPWorkflowDefinition[]> {\n // Same as report: filter by categoryIds array with 'contains'\n const result = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n\n // Convert entity data to workflow definition format\n return (result.items || []).map((item: any): AXPWorkflowDefinition => ({\n schemaVersion: item.schemaVersion || 'acorex-platform-workflow/v1',\n name: item.name || item.id || '',\n title: item.title || item.name || item.id || null,\n description: item.description || null,\n variables: item.variables || [],\n inputs: item.inputs || [],\n outputs: item.outputs || [],\n graph: item.graph,\n customProperties: item.customProperties || {},\n extensions: item.extensions || {},\n }));\n }\n\n async getByName(name: string): Promise<AXPWorkflowDefinition | null> {\n // Try to find by name field first, then by id field\n const byName = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n \n if (byName.items && byName.items.length > 0) {\n const entity = byName.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n\n // Try by id field\n const byId = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n\n if (byId.items && byId.items.length > 0) {\n const entity = byId.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n\n return null;\n }\n\n //#endregion\n}\n\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Workflow Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const WorkflowManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n AXPFilterDefinition,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Default automation evaluator scope.\n * Provides automation.rules(refType, refId) for ConditionBuilder filterDefinitions.\n * Returns empty array by default; modules (e.g. assessment-management) can register\n * their own scope with the same name to provide rules for specific refTypes.\n */\nexport class AXMAutomationEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('automation', {\n /** Returns filter definitions for automation condition builder. Override per refType in consuming modules. */\n rules: async (_refType: string, _refId: string): Promise<AXPFilterDefinition[]> => {\n return [];\n },\n });\n }\n}\n\n//#endregion\n","export const AXMPermissionsKeys = {\n WorkflowManagement: {\n Management: 'WorkflowManagement:Permission:Management',\n },\n};\n","import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translationService = inject(AXTranslationService);\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) =>\n await this.translationService.translateAsync(`@workflow-management:${key}`);\n\n const keys = AXMPermissionsKeys;\n\n const MODULE_PERMISSIONS = '@workflow-management:module.permissions';\n\n context.addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n );\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPExtraField,\n AXPTask,\n AXPTaskActionMenuItem,\n AXPTaskFilter,\n AXPTaskPopoverComponent,\n AXPTaskStatus,\n AXPWorkflowTaskProvider,\n} from '@acorex/modules/task-management';\nimport { AXPSystemStatuses } from '@acorex/platform/common';\nimport { AXPExecuteCommand, AXPExecuteCommandResult, AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowManager } from '@acorex/platform/workflow';\nimport { Inject, Injectable, InjectionToken, inject, Type } from '@angular/core';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../entities/workflow-instance/workflow-instance.types';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Configuration for a workflow-specific task provider.\n * One provider per workflow definition – pass definitionId to scope tasks to that definition only.\n */\nexport interface AXPGenericWorkflowTaskProviderConfig {\n /** Unique provider name (e.g. 'leave-request-workflow-tasks', 'document-review-workflow-tasks'). */\n name: string;\n /** Display title in task board type selector. */\n title: string;\n /** Optional icon (default: 'fa-light fa-diagram-project'). */\n icon?: string;\n /**\n * When set, only workflow instances for this definition are shown.\n * One provider = one definition. Omit to show all suspended workflow tasks (single generic provider).\n */\n definitionId?: string;\n}\n\n/**\n * Injection token for provider config. Use when registering via DI (provide token + useFactory with deps).\n * When creating via useFactory: () => new AXPGenericWorkflowTaskProvider({ ... }), config is passed in the closure.\n */\nexport const AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG =\n new InjectionToken<AXPGenericWorkflowTaskProviderConfig>('AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG');\n\n/**\n * Bookmark as stored in WorkflowInstance entity (workflowInstance.bookmarks).\n * Read from entity service; no direct DB access.\n */\ninterface WorkflowInstanceBookmark {\n id: string;\n activityId: string;\n type: string;\n payload?: Record<string, any> | null;\n payloadJson?: string;\n consumed?: boolean;\n isConsumed?: boolean;\n createdAt?: string;\n}\n\n/** Shape used when entity storage stores workflowInstance with bookmarks at root level. */\ninterface WorkflowInstanceWithBookmarks {\n bookmarks?: WorkflowInstanceBookmark[];\n}\n\n/**\n * Bookmark payload structure for human-task activities.\n */\ninterface HumanTaskBookmarkPayload {\n activityType: string;\n activityName: string;\n taskToken: string;\n taskType: 'human-task' | 'ui-activity' | 'system-activity';\n assignedUserIds?: string[] | null;\n candidateUserIds?: string[] | null;\n candidateRoleIds?: string[] | null;\n title?: string;\n description?: string;\n priority?: 'Low' | 'Normal' | 'High' | 'Urgent';\n dueDate?: string | Date | null;\n layout?: string | any;\n actions?: {\n prefix?: AXPActionMenuItem[];\n suffix?: AXPActionMenuItem[];\n };\n context?: Record<string, any>;\n}\n\n//#endregion\n\n/**\n * Generic Workflow Task Provider\n *\n * Provides tasks from Workflow Instances directly (no Work Items).\n * Queries suspended workflow instances and extracts tasks from bookmarks.\n *\n * Create one provider per workflow definition by passing a config (name, title, definitionId).\n * E.g. leave request: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' }\n *\n * Architecture:\n * - Queries Workflow Instances with subStatus = 'Suspended'\n * - Filters by config.definitionId when set (one provider = one definition)\n * - Extracts active bookmarks for each instance\n * - Parses bookmark payload for assignment/actions\n * - Maps to task board format\n */\n@Injectable()\nexport class AXPGenericWorkflowTaskProvider extends AXPWorkflowTaskProvider<Record<string, any>> {\n //#region ---- Config ----\n\n private readonly config: AXPGenericWorkflowTaskProviderConfig;\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly workflowInstanceData = this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data<string, AXMWorkflowManagementWorkflowInstanceEntityModel>();\n private readonly translationService = inject(AXTranslationService);\n private readonly workflowManager = inject(AXPWorkflowManager);\n\n //#endregion\n\n //#region ---- Constructor ----\n\n constructor(\n @Inject(AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG) config: AXPGenericWorkflowTaskProviderConfig,\n ) {\n super();\n this.config = config;\n }\n\n //#endregion\n\n //#region ---- Provider Metadata ----\n\n get name(): string {\n return this.config.name;\n }\n\n get title(): string {\n return this.config.title;\n }\n\n get icon(): string {\n return this.config.icon ?? 'fa-light fa-diagram-project';\n }\n\n //#endregion\n\n //#region ---- Task Retrieval ----\n\n /**\n * Get tasks from suspended workflow instances.\n * \n * Queries workflow instances filtered by:\n * - subStatus = 'Suspended'\n * - entityRefType (if provided in filter)\n * - definitionId (if provided in filter)\n * - assignee/claimant (if filter provided)\n * \n * Then extracts active bookmarks and maps to task board format.\n */\n async getTasks(\n options: AXPTaskFilter,\n ): Promise<{ items: AXPTask<Record<string, any>>[]; total: number }> {\n // Build filter for workflow instances\n const baseFilter: AXDataSourceFilterOption = { logic: 'and', filters: [] };\n\n // Filter by subStatus = 'Suspended' (only suspended workflows have pending tasks)\n baseFilter.filters?.push({\n field: 'subStatus',\n operator: { type: 'equal' },\n value: 'Suspended',\n });\n\n // Scope this provider to one workflow definition\n if (this.config.definitionId) {\n baseFilter.filters?.push({\n field: 'definitionId',\n operator: { type: 'equal' },\n value: this.config.definitionId,\n });\n }\n\n // Filter by date range if provided (using createdAt or updatedAt)\n if (options?.range?.from || options?.range?.end) {\n if (options.range.from) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'gte' },\n value: options.range.from.toISOString(),\n });\n }\n \n if (options.range.end) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'lte' },\n value: options.range.end.toISOString(),\n });\n }\n }\n\n // Query workflow instances\n const { items: instances, total } = await this.workflowInstanceData.query({\n skip: options?.skip ?? 0,\n take: options?.take ?? 20,\n filter: baseFilter,\n });\n\n // Extract tasks from bookmarks for each instance\n const tasks: AXPTask<Record<string, any>>[] = [];\n\n for (const instance of instances) {\n try {\n // Get active bookmarks from instance entity (workflowInstance.bookmarks)\n const bookmarks = this.getActiveBookmarksFromInstance(instance);\n\n // Process each bookmark (typically one per suspended activity)\n for (const bookmark of bookmarks) {\n try {\n // Get payload from entity (payload object or parse payloadJson)\n let payload: HumanTaskBookmarkPayload;\n try {\n const raw =\n bookmark.payload ??\n (bookmark.payloadJson ? JSON.parse(bookmark.payloadJson) : null);\n payload =\n typeof raw === 'object' && raw !== null\n ? (raw as HumanTaskBookmarkPayload)\n : ({} as HumanTaskBookmarkPayload);\n } catch {\n continue;\n }\n\n // Only process bookmarks for workflow-activity:human-task (cartable tasks only; forms/popups excluded)\n if (payload.activityType !== 'workflow-activity:human-task') {\n continue;\n }\n\n // Check assignment filter if provided\n if (options?.assigneeIds && options.assigneeIds.length > 0) {\n const assignedIds = payload.assignedUserIds || [];\n const candidateIds = payload.candidateUserIds || [];\n const allUserIds = [...assignedIds, ...candidateIds];\n \n // TODO: Also check candidateRoleIds by resolving role members\n \n const matchesAssignee = allUserIds.some((id) => options.assigneeIds!.includes(id));\n if (!matchesAssignee) {\n continue;\n }\n }\n\n // Map bookmark to task\n const task = this.mapBookmarkToTask(instance, bookmark, payload);\n tasks.push(task);\n } catch {\n // Skip this bookmark and continue\n }\n }\n } catch {\n // Skip this instance and continue\n }\n }\n\n return { items: tasks, total };\n }\n\n /**\n * Get active (non-consumed) bookmarks from workflow instance entity.\n * Reads from instance.workflowInstance?.bookmarks — no direct DB access.\n */\n private getActiveBookmarksFromInstance(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel\n ): WorkflowInstanceBookmark[] {\n const wi = instance?.workflowInstance as WorkflowInstanceWithBookmarks | undefined;\n const bookmarks = wi?.bookmarks ?? [];\n const active = bookmarks.filter(\n (b: WorkflowInstanceBookmark) => !b.isConsumed && !b.consumed\n ) as WorkflowInstanceBookmark[];\n return active;\n }\n\n /**\n * Map bookmark to task board task format.\n */\n private mapBookmarkToTask(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel,\n bookmark: WorkflowInstanceBookmark,\n payload: HumanTaskBookmarkPayload\n ): AXPTask<Record<string, any>> {\n // Extract dates\n const dueDate = payload.dueDate \n ? (typeof payload.dueDate === 'string' ? new Date(payload.dueDate) : payload.dueDate)\n : (instance.createdAt ? new Date(instance.createdAt) : new Date());\n \n const startDate = instance.createdAt \n ? new Date(instance.createdAt) \n : dueDate;\n\n // If startDate and endDate are the same, set endDate to one day after startDate\n let endDate = dueDate;\n if (startDate.getTime() === dueDate.getTime()) {\n endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 1);\n }\n\n // Map priority\n const priority = this.mapPriorityToTaskPriority(payload.priority || 'Normal');\n\n // Build title\n const title = payload.title || payload.activityName || 'Workflow Task';\n\n return {\n id: bookmark.id, // Use bookmark ID as task ID\n title,\n description: payload.description || `Action required: ${payload.activityName}`,\n startDate,\n endDate,\n allDay: false,\n assignee: payload.assignedUserIds && payload.assignedUserIds.length > 0\n ? {\n id: payload.assignedUserIds[0], // Use first assigned user\n type: 'user',\n fullName: '', // Will be populated if user data is loaded\n }\n : undefined,\n index: 2,\n status: {\n id: AXPSystemStatuses.Pending.name,\n title: this.translationService.translateSync('@workflow-management:tasks.states.pending'),\n },\n priority,\n reporter: {\n id: instance.auditInfo?.created?.by?.id || '',\n type: 'user',\n fullName: instance.auditInfo?.created?.by?.fullName || '',\n },\n data: {\n // Store workflow instance and bookmark metadata\n instanceId: instance.id,\n bookmarkId: bookmark.id,\n activityId: bookmark.activityId,\n activityType: payload.activityType,\n activityName: payload.activityName,\n taskToken: payload.taskToken,\n entityRefId: instance.entityRefId,\n entityRefType: instance.entityRefType,\n definitionId: instance.definitionId,\n // Store full payload for actions\n payload: payload,\n } as any,\n };\n }\n\n /**\n * Map priority to task board priority.\n */\n private mapPriorityToTaskPriority(\n priority: 'Low' | 'Normal' | 'High' | 'Urgent'\n ): 'highest' | 'high' | 'medium' | 'low' | 'lowest' {\n switch (priority) {\n case 'Urgent':\n return 'highest';\n case 'High':\n return 'high';\n case 'Normal':\n return 'medium';\n case 'Low':\n return 'low';\n default:\n return 'medium';\n }\n }\n\n //#endregion\n\n //#region ---- Task Updates ----\n\n /**\n * Update tasks (not applicable for workflow instances - they are read-only from task provider perspective).\n */\n async updateTasks(\n tasksToUpdate: AXPTask<Record<string, any>>[],\n ): Promise<AXPTask<Record<string, any>>[]> {\n // Workflow instances are managed by workflow engine\n // Task updates should be done through workflow resume, not direct updates\n return tasksToUpdate;\n }\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n /**\n * Execute commands on tasks.\n * \n * Supports:\n * - Workflow resume commands (Complete, Cancel)\n */\n async executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult> {\n if (!command?.name) return { success: true };\n\n const taskData = command.options?.['data'] as any;\n const instanceId = taskData?.instanceId ?? command.options?.['instanceId'] ?? '';\n const bookmarkId = taskData?.bookmarkId ?? command.options?.['bookmarkId'] ?? '';\n const taskToken = taskData?.taskToken ?? command.options?.['taskToken'] ?? '';\n const activityId = taskData?.activityId ?? command.options?.['activityId'] ?? '';\n const outcome = command.options?.['outcome'] ?? 'Done';\n const userInput = command.options?.['userInput'] ?? {};\n\n // Handle workflow resume commands\n if (command.name === 'WorkflowManagement.WorkflowInstance:Resume' || command.name === 'resume-workflow') {\n if (!instanceId || !taskToken || !activityId) {\n return {\n success: false,\n message: {\n text: 'Missing required parameters: instanceId, taskToken, activityId',\n },\n };\n }\n\n try {\n const result = await this.workflowManager.resume(\n instanceId,\n activityId,\n outcome,\n userInput,\n taskToken\n );\n\n return {\n success: result.success,\n message: result.error\n ? {\n text: result.error,\n }\n : undefined,\n };\n } catch (error: unknown) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to resume workflow',\n },\n };\n }\n }\n\n return { success: true };\n }\n\n //#endregion\n\n //#region ---- Actions & Statuses ----\n\n /**\n * Get available actions for a task.\n * \n * Extracts actions from bookmark payload.\n */\n async getActions(task?: AXPTask<Record<string, any>>): Promise<AXPTaskActionMenuItem[]> {\n const actions: AXPTaskActionMenuItem[] = [];\n\n if (!task) return actions;\n\n const taskData = task.data as any;\n const payload = taskData?.payload as HumanTaskBookmarkPayload | undefined;\n\n if (!payload) return actions;\n\n // Extract actions from payload\n if (payload.actions) {\n const allActions = [\n ...(payload.actions.prefix || []),\n ...(payload.actions.suffix || []),\n ];\n\n for (const action of allActions) {\n const actionName = action.command?.name || action.name || 'unknown';\n \n actions.push({\n name: actionName,\n title: action.title || actionName,\n icon: action.icon,\n color: action.color,\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: actionName,\n userInput: {},\n },\n },\n });\n }\n } else {\n // Default actions if none provided\n actions.push({\n name: 'submit',\n title: this.translationService.translateSync('@general:actions.submit.title'),\n icon: 'fa-light fa-check',\n color: 'primary',\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'submit',\n userInput: {},\n },\n },\n });\n\n actions.push({\n name: 'cancel',\n title: this.translationService.translateSync('@general:actions.cancel.title'),\n icon: 'fa-light fa-times',\n color: 'default',\n priority: 'secondary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'cancel',\n userInput: {},\n },\n },\n });\n }\n\n return actions;\n }\n\n async getExtraFields(): Promise<AXPExtraField[]> {\n return [];\n }\n\n async getStatuses(): Promise<AXPTaskStatus[]> {\n return [\n {\n index: 0,\n key: AXPSystemStatuses.Pending.name,\n title: await this.translationService.translateAsync('@workflow-management:tasks.states.pending'),\n color: 'warning',\n },\n ];\n }\n\n //#endregion\n\n //#region ---- Component ----\n\n override getComponent(): (() => Promise<Type<AXPTaskPopoverComponent>>) | Type<AXPTaskPopoverComponent> | null {\n return () =>\n import('./workflow-task-popover.component').then((m) => m.AXMWorkflowTaskPopoverComponent);\n }\n\n //#endregion\n}\n","import { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport {\n EnvironmentProviders,\n Injector,\n makeEnvironmentProviders,\n runInInjectionContext,\n} from '@angular/core';\nimport { AXPGenericWorkflowTaskProvider } from '../task-provider/generic-workflow-task.provider';\n\nexport function provideTaskWorkflow(): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useFactory: (injector: Injector) => {\n return (async () => {\n const workflowDefinitionService = injector.get(AXPWorkflowDefinitionService);\n const categories = await workflowDefinitionService.getCategories();\n const providers: AXPGenericWorkflowTaskProvider[] = [];\n for (const category of categories) {\n const workflows = await workflowDefinitionService.getWorkflowsByCategoryId(category.id);\n for (const workflow of workflows) {\n const provider = runInInjectionContext(injector, () =>\n new AXPGenericWorkflowTaskProvider({\n name: workflow.name,\n title: workflow.title ?? workflow.name,\n icon: 'fa-light fa-diagram-project',\n definitionId: workflow.name,\n })\n );\n providers.push(provider);\n }\n }\n console.log('providers', providers);\n \n return providers;\n })();\n },\n deps: [Injector],\n },\n ]);\n}\n","import { AXMCalendarManagementModule } from '@acorex/modules/calendar-management';\nimport { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport {\n AXP_ENTITY_CONFIG_TOKEN,\n AXP_ENTITY_DEFINITION_LOADER,\n} from '@acorex/platform/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMWorkflowDashboardWidgetsProvider } from './features/dashboard/widgets';\nimport { AXMWorkflowManagementWidgetsProvider } from './widget-definition.provider';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport {\n AXP_ACTIVITY_CATEGORY_PROVIDER,\n AXP_ACTIVITY_PROVIDER,\n AXP_WORKFLOW_CATEGORY_PROVIDER,\n AXP_WORKFLOW_PROVIDER,\n} from '@acorex/platform/workflow';\nimport { inject, NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXMWorkflowManagementModuleEntityProvider } from './entity.provider';\nimport {\n CollectSignatureActivity,\n CreateEntityFormActivity,\n HumanTaskActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n ShowToastActivity,\n} from './features/engine/activities';\nimport { AXMWorkflowPluginModule } from './features/workflow-plugin/workflow-plugin.module';\n\nimport { AXMWorkflowActivitiesDefinitionProvider } from './features/engine/activities/workflow-activities-definition.provider';\nimport { AXCCategoryProvider } from './features/engine/category.provider';\nimport { AXMWorkflowCategoryProvider } from './features/engine/workflows/workflow-category.provider';\nimport { AXMWorkflowDefinitionProvider } from './features/engine/workflows/workflow-definition.provider';\nimport { WorkflowManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMAutomationEvaluatorScopeProvider } from './features/automation-evaluator-scope.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { provideTaskWorkflow } from './features/engine/provider.task';\nfunction routesFactory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes: Routes = [\n {\n path: ':app/workflow-management/studio',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/engine/studio/workflow-studio.component').then((c) => c.WorkflowStudioComponent),\n },\n ],\n },\n ];\n return routes;\n}\n\n\n@NgModule({\n imports: [\n AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule, // Register workflow plugin\n AXPWidgetCoreModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMWorkflowManagementWidgetsProvider, multi: true },\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMWorkflowDashboardWidgetsProvider, multi: true },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:create-entity-form',\n command: () => import('./features/engine/activities').then((c) => c.CreateEntityFormActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Automation condition builder: default automation.rules(refType, refId); modules override for their refTypes\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMAutomationEvaluatorScopeProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n CreateEntityFormActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ],\n})\nexport class AXMWorkflowManagementModule { }\n","//#region ---- Imports ----\n\nimport { AXPFilterClause } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Automation Model ----\n\n/**\n * Reusable automation entity model.\n * refType + refId reference any parent entity (e.g. AssessmentManagement.Questionnaire, refId = questionnaire id).\n */\nexport interface AXMWorkflowManagementAutomationEntityModel extends AXPEntityModel<string> {\n /** Entity type of the parent record (e.g. \"AssessmentManagement.Questionnaire\"). */\n refType: string;\n /** Parent record id. */\n refId: string;\n name?: string;\n title?: string;\n description?: string;\n condition: AXPFilterClause;\n /** Activity/command key and parameters (from activity-command-configurator). */\n command: { commandKey: string; params?: Record<string, unknown> };\n}\n\n//#endregion\n","// Entity exports - services and modules removed, handled by middleware\n// Exporting entity types for use in feature components\n\nexport * from './activity-category/activity-category.types';\nexport * from './activity-definition/activity-definition.types';\nexport * from './automation/automation.types';\nexport * from './workflow-definition/workflow-definition.types';\nexport * from './workflow-instance/workflow-instance.types';\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTreeItemClickBaseEventLegacy, AXTreeViewLegacyModule } from '@acorex/components/tree-view-legacy';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { ChangeDetectionStrategy, Component, inject, output, ViewEncapsulation } from '@angular/core';\nimport { AXPMultiLanguageStringResolverService } from '@acorex/platform/core';\nimport { AXPActivityCategory, AXPActivityDefinition, AXPActivityDefinitionService } from '@acorex/platform/workflow';\n\n//#endregion\n\n//#region ---- Tree View Item (same pattern as report) ----\n\nexport interface ActivityTreeViewItem {\n id: string;\n title: string;\n hasChild: boolean;\n children?: ActivityTreeViewItem[];\n item?: AXPActivityCategory | AXPActivityDefinition;\n type: 'category' | 'definition';\n expanded: boolean;\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-activity-categories-tree',\n standalone: true,\n imports: [AXDecoratorModule, AXTreeViewLegacyModule, AXTranslationModule],\n templateUrl: './activity-categories-tree.component.html',\n styleUrl: './activity-categories-tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-activity-categories-tree' },\n})\nexport class AXMActivityCategoriesTreeComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly multiLanguageResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Output Events ----\n\n categoryClick = output<AXPActivityCategory>();\n activityClick = output<AXPActivityDefinition>();\n\n /** Emitted when user starts dragging an activity (so parent can set draggedActivity for canvas drop). */\n activityDragStart = output<{ event: DragEvent; activity: AXPActivityDefinition }>();\n\n //#endregion\n\n //#region ---- Lazy Tree Data (same pattern as report-categories-tree) ----\n\n protected readonly provideLazyTreeView = async (\n selectedItemId?: string | number\n ): Promise<ActivityTreeViewItem[]> => {\n if (selectedItemId !== undefined && selectedItemId !== null) {\n const parentId = String(selectedItemId);\n if (parentId.startsWith('activity_')) {\n return [];\n }\n const categories = await this.activityDefinitionService.getCategories(parentId);\n const categoryItems: ActivityTreeViewItem[] = categories.map((item) => ({\n id: item.id,\n title: this.multiLanguageResolver.resolve(item.title) || item.id,\n hasChild: (item.childrenCount ?? 0) > 0 || (item.itemsCount ?? 0) > 0,\n item,\n type: 'category',\n expanded: false,\n }));\n const activities = await this.activityDefinitionService.getActivitiesByCategoryId(parentId);\n const definitionItems: ActivityTreeViewItem[] = activities.map((item) => ({\n id: `activity_${item.type ?? item.name}`,\n title: item.title ?? item.name ?? item.type ?? '',\n hasChild: false,\n item,\n type: 'definition',\n expanded: false,\n }));\n return [...categoryItems, ...definitionItems];\n }\n const categories = await this.activityDefinitionService.getCategories();\n return categories.map((item) => ({\n id: item.id,\n title: this.multiLanguageResolver.resolve(item.title) || item.id,\n hasChild: (item.childrenCount ?? 0) > 0 || (item.itemsCount ?? 0) > 0,\n item,\n type: 'category' as const,\n expanded: false,\n }));\n };\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleNodeClick(event: AXTreeItemClickBaseEventLegacy): void {\n const node = event.data as ActivityTreeViewItem;\n if (node.type === 'category' && node.item) {\n this.categoryClick.emit(node.item as AXPActivityCategory);\n } else if (node.type === 'definition' && node.item) {\n this.activityClick.emit(node.item as AXPActivityDefinition);\n }\n }\n\n protected onActivityDragStart(event: DragEvent, item: ActivityTreeViewItem): void {\n if (item.type !== 'definition' || !item.item) return;\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', (item.item as AXPActivityDefinition).type);\n }\n this.activityDragStart.emit({ event, activity: item.item as AXPActivityDefinition });\n }\n\n /**\n * Normalize FontAwesome icon for display: prepend 'fa-light ' when missing style prefix.\n */\n protected getActivityIconClass(icon: string | undefined): string {\n if (!icon?.trim()) return 'fa-light fa-puzzle-piece';\n const trimmed = icon.trim();\n const hasStylePrefix = /^(fa-light|fas|far|fal|fa-solid|fa-regular|fa-brands|fa-duotone)(\\s|$)/i.test(trimmed);\n return hasStylePrefix ? trimmed : `fa-light ${trimmed}`;\n }\n\n //#endregion\n}\n","<ax-tree-view-legacy\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view-legacy>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <span class=\"__tree-item __category\">\n <i class=\"fas fa-folder ax-text-warning __icon\"></i>\n <span class=\"__title\">{{ item.title }}</span>\n </span>\n } @else {\n <span\n class=\"__tree-item __activity\"\n draggable=\"true\"\n (dragstart)=\"onActivityDragStart($event, item)\"\n >\n <i class=\"__icon ax-text-primary\" [class]=\"getActivityIconClass(item.item?.icon)\"></i>\n <span class=\"__title\">{{ item.title }}</span>\n </span>\n }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPWorkflowManager, AXPActivityDefinitionService, AXPActivityDefinition, AXPActivityCategory, AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport {\n AXPPropertyViewerComponent,\n AXPPropertyViewerTab,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetProperty, AXPWidgetPropertyGroup } from '@acorex/platform/layout/widget-core';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { RootConfig } from '../../../const';\nimport { AXMActivityCategoriesTreeComponent } from './components/activity-categories-tree/activity-categories-tree.component';\n\ninterface ActivityCategoryUI {\n id: string;\n name: string;\n title: string;\n icon: string;\n color: string;\n activities: ActivityInfo[];\n}\n\ninterface PropertySchema {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'select' | 'any';\n required: boolean;\n description?: string;\n defaultValue?: any;\n options?: Array<{ value: any; label: string }>; // For select type\n}\n\ninterface ActivityInfo {\n type: string;\n name: string;\n description: string;\n icon: string;\n properties: PropertySchema[];\n defaultProperties?: Record<string, any>; // Default property values\n}\n\ninterface ExecutionLog {\n timestamp: Date;\n level: 'info' | 'success' | 'warning' | 'error';\n message: string;\n data?: any;\n expanded?: boolean;\n}\n\n/**\n * Represents a connection from one outcome to a target node.\n */\ninterface OutcomeConnection {\n outcome: string; // e.g., \"200\", \"Done\", \"Failed\"\n targetNodeId: string;\n}\n\ninterface VisualNode {\n id: string;\n type: string;\n name: string;\n icon: string;\n properties: Record<string, any>;\n position: { x: number; y: number };\n\n /**\n * @deprecated Use outcomeConnections instead\n * Simple list of connections (for backward compatibility)\n */\n connections: string[];\n\n /**\n * Outcome-based connections.\n * Each outcome can connect to a different target.\n */\n outcomeConnections?: OutcomeConnection[];\n\n /**\n * Available outcomes for this node.\n * Computed from activity descriptor.\n */\n outcomes?: string[];\n}\n\ntype EditorTab = 'json' | 'visual';\n\ninterface WorkflowSettings {\n // Identification\n definitionId: string;\n name: string;\n description: string;\n\n // Workflow Common\n inputs: WorkflowInput[];\n outputs: WorkflowOutput[];\n variables: WorkflowVariable[];\n outcomes: string[];\n\n // Options\n usableAsActivity: boolean;\n autoUpdateConsumingWorkflows: boolean;\n\n // Metadata\n version: number;\n isLatest: boolean;\n isPublished: boolean;\n toolVersion: string;\n providerName: string;\n}\n\ninterface WorkflowInput {\n name: string;\n title: string;\n description?: string;\n schema: {\n dataType: string;\n nullable?: boolean;\n readonly?: boolean;\n hidden?: boolean | string;\n defaultValue?: any | string | ((context: any | null) => any);\n };\n validations?: Array<{ rule: string; message?: string; options?: any }>;\n}\n\ninterface WorkflowOutput {\n name: string;\n title: string;\n description?: string;\n schema: {\n dataType: string;\n };\n}\n\ninterface WorkflowVariable {\n name: string;\n typeName: string;\n value?: any;\n description?: string;\n}\n\n\n@Component({\n selector: 'app-workflow-studio',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSelectBoxModule,\n AXSearchBoxModule,\n AXSwitchModule,\n AXTabsModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPPropertyViewerComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutStartSideComponent,\n AXMActivityCategoriesTreeComponent,\n ],\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ],\n templateUrl: './workflow-studio.component.html',\n styleUrls: ['./workflow-studio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WorkflowStudioComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly workflowManager = inject(AXPWorkflowManager);\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- State ----\n\n activeTab = signal<EditorTab>('json');\n selectedCategory = signal<AXPActivityCategory | null>(null);\n selectedActivity = signal<AXPActivityDefinition | null>(null);\n workflowJson = signal<string>(this.getEmptyWorkflow());\n visualNodes = signal<VisualNode[]>([]);\n selectedNode = signal<VisualNode | null>(null);\n isExecuting = signal<boolean>(false);\n executionLogs = signal<ExecutionLog[]>([]);\n\n // Execution Dialog State\n showExecutionDialog = signal<boolean>(false);\n workflowInstanceState = signal<any>(null);\n\n // UI State\n showPropertiesPanel = signal<boolean>(true);\n\n /** When true, workflow changes can trigger auto-save (e.g. apply to JSON); actual persist is up to the host. */\n autoSaveEnabled = signal<boolean>(false);\n\n /** Activity definition for the selected node (loaded when selection changes). */\n activityDefinitionForSelected = signal<AXPActivityDefinition | null>(null);\n\n /** Cache key for property viewer tabs so we keep stable refs and avoid re-render/focus loss on value change. */\n private lastPropertyViewerStructKey: string | null = null;\n\n /** Cached tabs; updated only when selected node identity or def structure changes. */\n private readonly cachedPropertyViewerTabs = signal<AXPPropertyViewerTab[]>([]);\n\n /** Tabs for the property viewer (platform widget-based rendering). Stable refs to prevent focus loss. */\n readonly propertyViewerTabs = computed<AXPPropertyViewerTab[]>(() => this.cachedPropertyViewerTabs());\n\n private readonly updatePropertyViewerTabsEffect = effect(() => {\n const def = this.activityDefinitionForSelected();\n const node = this.selectedNode();\n if (!node) {\n this.lastPropertyViewerStructKey = null;\n this.cachedPropertyViewerTabs.set([]);\n return;\n }\n const structKey = `${node.id}:${node.type}:${(def?.inputs?.length ?? 0)}`;\n if (this.lastPropertyViewerStructKey === structKey) return;\n this.lastPropertyViewerStructKey = structKey;\n this.cachedPropertyViewerTabs.set(this.buildPropertyViewerTabs(def, node));\n });\n\n protected readonly propertyViewerRef = viewChild(AXPPropertyViewerComponent);\n\n private readonly loadActivityDefinitionForSelectedEffect = effect(() => {\n const node = this.selectedNode();\n if (!node) {\n this.activityDefinitionForSelected.set(null);\n return;\n }\n this.activityDefinitionService.getActivityByName(node.type).then((def) => {\n this.activityDefinitionForSelected.set(def ?? null);\n });\n });\n\n private readonly initPropertyViewerContextEffect = effect(() => {\n const viewer = this.propertyViewerRef();\n const node = this.selectedNode();\n const tabs = this.propertyViewerTabs();\n if (viewer && node && tabs.length > 0) {\n viewer.initializeContext({ ...node, properties: { ...node.properties } });\n }\n });\n\n // Workflow Settings\n workflowSettings = signal<WorkflowSettings>({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n\n /** Data source for variable type select (settings modal). */\n readonly variableTypeOptions: Array<{ value: string; label: string }> = [\n { value: 'string', label: 'String' },\n { value: 'number', label: 'Number' },\n { value: 'boolean', label: 'Boolean' },\n { value: 'object', label: 'Object' },\n { value: 'array', label: 'Array' }\n ];\n\n // Canvas state\n canvasOffset = { x: 0, y: 0 };\n isDraggingCanvas = false;\n dragStartPos = { x: 0, y: 0 };\n draggedActivity: ActivityInfo | null = null;\n draggedNode: VisualNode | null = null;\n nodeDragOffset = { x: 0, y: 0 };\n connectionSource: { node: VisualNode; type: 'in' | 'out'; outcome?: string } | null = null;\n\n /** Canvas area element for zoom/center/auto-layout. */\n protected readonly canvasAreaRef = viewChild<ElementRef<HTMLElement>>('canvasAreaRef');\n\n override async ngOnInit() {\n // Page layout initialization\n await super.ngOnInit();\n \n // Load workflow from query parameter if provided\n await this.loadWorkflowFromRoute();\n }\n\n /**\n * Load workflow from route query parameter\n */\n private async loadWorkflowFromRoute(): Promise<void> {\n // Read from snapshot (for initial load)\n const workflowName = this.activatedRoute.snapshot.queryParams['workflow'];\n \n if (!workflowName) {\n return;\n }\n\n await this.loadWorkflowByName(workflowName);\n \n // Subscribe to query param changes (like drive component)\n this.activatedRoute.queryParams\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (params) => {\n const newWorkflowName = params['workflow'];\n if (newWorkflowName && newWorkflowName !== workflowName) {\n await this.loadWorkflowByName(newWorkflowName);\n }\n });\n }\n\n /**\n * Update a single workflow setting field (for signal-based form binding).\n */\n updateWorkflowSetting<K extends keyof WorkflowSettings>(key: K, value: WorkflowSettings[K]): void {\n this.workflowSettings.update((s) => ({ ...s, [key]: value }));\n }\n\n /**\n * Handle JSON editor input (textarea value -> workflowJson signal).\n */\n onWorkflowJsonInput(ev: Event): void {\n const value = (ev.target as HTMLTextAreaElement).value;\n this.workflowJson.set(value);\n }\n\n /**\n * Load workflow by name\n */\n private async loadWorkflowByName(workflowName: string): Promise<void> {\n\n try {\n this.addLog('info', `Loading workflow: ${workflowName}...`);\n\n // Try to get workflow from entity service first\n const workflowEntityService = this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data<any, any>();\n\n const result = await workflowEntityService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: { type: 'equal' },\n value: workflowName,\n }]\n }\n });\n\n let workflowDef: any = null;\n\n if (result.items && result.items.length > 0) {\n workflowDef = result.items[0];\n } else {\n // Try workflow definition service\n workflowDef = await this.workflowDefinitionService.getWorkflowByName(workflowName);\n }\n\n if (!workflowDef) {\n this.addLog('warning', `Workflow '${workflowName}' not found`);\n return;\n }\n\n // Convert workflow definition to studio JSON format\n const studioJson = this.convertWorkflowDefinitionToStudioJson(workflowDef);\n this.workflowJson.set(JSON.stringify(studioJson, null, 2));\n\n // Update workflow settings\n this.workflowSettings.set({\n definitionId: workflowDef.id || workflowDef.definitionId || workflowDef.name,\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n inputs: (workflowDef.inputs || []).map((input: any) => ({\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema || { dataType: 'string' },\n validations: input.validations,\n })),\n outputs: (workflowDef.outputs || []).map((output: any) => ({\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema || { dataType: 'string' },\n })),\n variables: workflowDef.variables || [],\n outcomes: workflowDef.outcomes || ['Done'],\n usableAsActivity: workflowDef.extensions?.elsa?.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflowDef.extensions?.elsa?.options?.autoUpdateConsumingWorkflows || false,\n version: workflowDef.version || 1,\n isLatest: workflowDef.isLatest !== undefined ? workflowDef.isLatest : true,\n isPublished: workflowDef.isPublished || false,\n toolVersion: workflowDef.toolVersion || '1.0.0',\n providerName: workflowDef.providerName || 'ACoreX',\n });\n\n this.addLog('success', `Workflow '${workflowName}' loaded successfully`);\n\n // If visual tab is active, convert to visual\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n } catch (error: any) {\n this.addLog('error', `Failed to load workflow: ${error.message}`);\n console.error('[WorkflowStudio] Error loading workflow:', error);\n }\n }\n\n /**\n * Convert workflow definition to studio JSON format\n */\n private convertWorkflowDefinitionToStudioJson(workflowDef: any): any {\n // Convert graph format to root activity format\n const graph = workflowDef.graph;\n if (!graph) {\n return this.getEmptyWorkflow();\n }\n\n // Build root activity structure\n const rootActivity: any = {\n id: graph.startActivityId || 'root',\n type: 'workflow-activity:sequence',\n name: workflowDef.title || workflowDef.name || 'Root',\n children: [],\n };\n\n // Convert activities to children\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n\n // Build activity map\n const activityMap = new Map<string, any>();\n activities.forEach((activity: any) => {\n activityMap.set(activity.id, {\n id: activity.id,\n type: activity.name || activity.type,\n name: activity.customProperties?.nodeId || activity.id,\n properties: activity.inputs || {},\n children: [],\n });\n });\n\n // Build connections tree\n const startActivity = activityMap.get(graph.startActivityId);\n if (startActivity) {\n rootActivity.children.push(startActivity);\n \n // Follow connections to build tree\n const processed = new Set<string>();\n const processActivity = (activityId: string) => {\n if (processed.has(activityId)) {\n return;\n }\n processed.add(activityId);\n\n const activity = activityMap.get(activityId);\n if (!activity) {\n return;\n }\n\n // Find outgoing connections\n const outgoingConnections = connections.filter(\n (conn: any) => conn.source.activtyName === activityId\n );\n\n outgoingConnections.forEach((conn: any) => {\n const targetActivity = activityMap.get(conn.target.activtyName);\n if (targetActivity && !processed.has(targetActivity.id)) {\n activity.children.push(targetActivity);\n processActivity(targetActivity.id);\n }\n });\n };\n\n processActivity(graph.startActivityId);\n }\n\n return {\n id: workflowDef.id || workflowDef.name || 'workflow',\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n version: workflowDef.version || 1,\n root: rootActivity,\n };\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPageTitle(): Promise<string> {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.title');\n }\n\n override async getPageDescription(): Promise<string | null> {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.description');\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'execute-workflow',\n title: '@workflow-management:workflow-studio.actions.execute-workflow.title',\n icon: 'fa-light fa-play',\n color: 'success',\n disabled: this.isExecuting(),\n command: { name: 'execute-workflow' },\n },\n {\n name: 'workflow-settings',\n title: '@workflow-management:workflow-studio.actions.settings.title',\n icon: 'fa-light fa-cog',\n color: 'default',\n command: { name: 'workflow-settings' },\n },\n {\n name: 'export-workflow',\n title: '@workflow-management:workflow-studio.actions.export.title',\n icon: 'fa-light fa-download',\n color: 'default',\n command: { name: 'export-workflow' },\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'format-json',\n title: '@workflow-management:workflow-studio.actions.format-json.title',\n icon: 'fa-light fa-code',\n color: 'default',\n command: { name: 'format-json' },\n },\n {\n name: 'clear-canvas',\n title: '@workflow-management:workflow-studio.actions.clear-canvas.title',\n icon: 'fa-light fa-trash',\n color: 'danger',\n visible: this.activeTab() === 'visual',\n command: { name: 'clear-canvas' },\n },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'execute-workflow':\n this.openExecutionDialog();\n break;\n case 'workflow-settings':\n this.openWorkflowSettings();\n break;\n case 'export-workflow':\n this.downloadWorkflowDefinition();\n break;\n case 'format-json':\n this.formatJson();\n break;\n case 'clear-canvas':\n this.clearCanvas();\n break;\n }\n }\n\n //#endregion\n\n //#region ---- Category & Activity Loading ----\n\n /**\n * Handle category selection from tree\n */\n onCategoryClick(category: AXPActivityCategory): void {\n this.selectedCategory.set(category);\n this.selectedActivity.set(null);\n }\n\n /**\n * Handle activity selection from tree\n */\n onActivityClick(activity: AXPActivityDefinition): void {\n this.selectedActivity.set(activity);\n this.addLog('info', `Activity selected: ${activity.name}`);\n }\n\n /**\n * Handle drag start from activity tree – set draggedActivity so canvas drop can add the node.\n */\n onActivityDragStartFromTree(payload: { event: DragEvent; activity: AXPActivityDefinition }): void {\n this.draggedActivity = this.convertActivityDefinitionToInfo(payload.activity);\n if (payload.event.dataTransfer) {\n payload.event.dataTransfer.effectAllowed = 'copy';\n payload.event.dataTransfer.setData('text/plain', payload.activity.type);\n }\n }\n\n /**\n * Convert AXPActivityDefinition to ActivityInfo\n */\n private convertActivityDefinitionToInfo(activity: AXPActivityDefinition): ActivityInfo {\n const properties: PropertySchema[] = (activity.inputs || []).map(input => ({\n name: input.name,\n type: this.getPropertyTypeFromSchema(input.schema),\n required: !input.schema.nullable,\n description: input.description,\n defaultValue: input.schema.defaultValue\n }));\n\n const defaultProperties: Record<string, any> = {};\n properties.forEach(prop => {\n if (prop.defaultValue !== undefined) {\n defaultProperties[prop.name] = prop.defaultValue;\n }\n });\n\n return {\n type: activity.type,\n name: activity.name,\n description: activity.description || '',\n icon: this.normalizeActivityIcon(activity.icon),\n properties,\n defaultProperties\n };\n }\n\n /**\n * Normalize FontAwesome icon: if missing style prefix (e.g. fa-light, fas), prepend 'fa-light ' so short values like 'fa-shield-alt' render.\n */\n private normalizeActivityIcon(icon: string | undefined): string {\n if (!icon?.trim()) return 'fa-light fa-circle';\n const trimmed = icon.trim();\n const hasStylePrefix = /^(fa-light|fas|far|fal|fa-solid|fa-regular|fa-brands|fa-duotone)(\\s|$)/i.test(trimmed);\n return hasStylePrefix ? trimmed : `fa-light ${trimmed}`;\n }\n\n /**\n * Get property type from schema\n */\n private getPropertyTypeFromSchema(schema: any): 'string' | 'number' | 'boolean' | 'object' | 'array' | 'select' | 'any' {\n const dataType = schema?.dataType || 'string';\n if (dataType === 'array') return 'array';\n if (dataType === 'object') return 'object';\n if (dataType === 'boolean') return 'boolean';\n if (dataType === 'number' || dataType === 'integer') return 'number';\n return 'string';\n }\n\n /**\n * Get category color\n */\n private getCategoryColor(categoryId: string): string {\n const colorMap: Record<string, string> = {\n 'workflow-markers': '#10B981',\n 'control-flow': '#3B82F6',\n 'user-interaction': '#8B5CF6',\n 'data': '#10B981',\n 'navigation': '#F59E0B',\n 'events': '#EF4444',\n 'http': '#06B6D4'\n };\n return colorMap[categoryId] || '#64748B';\n }\n\n /**\n * Get empty workflow JSON\n */\n private getEmptyWorkflow(): string {\n return JSON.stringify({\n id: 'new-workflow',\n name: '',\n description: '',\n version: 1,\n root: {\n id: 'root',\n type: 'workflow-activity:sequence',\n name: 'Root',\n children: []\n }\n }, null, 2);\n }\n\n //#endregion\n\n\n\n\n /**\n * Sync visualizer with JSON changes\n */\n syncVisualizerWithJson() {\n try {\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n } catch (err) {\n console.error('[WorkflowStudio] Error syncing visualizer:', err);\n }\n }\n\n //#region ---- Workflow Execution ----\n\n /**\n * Open execution dialog\n */\n openExecutionDialog() {\n this.showExecutionDialog.set(true);\n this.workflowInstanceState.set(null);\n }\n\n /**\n * Close execution dialog\n */\n closeExecutionDialog() {\n this.showExecutionDialog.set(false);\n this.workflowInstanceState.set(null);\n }\n\n /**\n * Start workflow execution\n */\n async startWorkflowExecution() {\n await this.runWorkflow();\n }\n\n\n /**\n * اجرای workflow\n */\n async runWorkflow() {\n this.isExecuting.set(true);\n this.executionLogs.set([]);\n this.workflowInstanceState.set({\n status: 'running',\n startTime: new Date(),\n currentState: null\n });\n\n this.addLog('info', 'شروع اجرای Workflow...');\n\n try {\n // Parse JSON\n const workflowDef = JSON.parse(this.workflowJson());\n const logMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.json-parsed');\n this.addLog('success', logMessage, workflowDef);\n\n // Save workflow definition to entity service first\n const workflowId = workflowDef.id || `workflow-${Date.now()}`;\n const definitionToSave = this.exportWorkflowDefinition();\n \n if (!definitionToSave) {\n throw new Error('Failed to export workflow definition');\n }\n\n // Save or update workflow definition\n try {\n const existing = await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().byKey(workflowId);\n\n if (existing) {\n await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().update(workflowId, definitionToSave);\n } else {\n await this.entityService.withEntity(\n RootConfig.module.name,\n RootConfig.entities.workflowDefinition.name\n ).data().create({ ...definitionToSave, id: workflowId });\n }\n\n const saveMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.success.workflow-saved');\n this.addLog('success', saveMessage);\n } catch (saveError: any) {\n // Continue execution even if save fails\n const saveErrorMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.warning.save-failed');\n this.addLog('warning', `${saveErrorMessage}: ${saveError.message}`);\n }\n\n // اجرای workflow\n const executingMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.executing');\n this.addLog('info', executingMessage);\n\n // Start workflow execution using the workflow name\n const workflowName = definitionToSave.name || workflowId;\n let result = await this.workflowManager.start(workflowName, {});\n this.addLog('info', `Workflow started. Instance ID: ${result.instanceId}`, result);\n\n if (!result.instanceId) {\n this.addLog('error', '❌ Workflow با خطا مواجه شد', result);\n return;\n }\n\n // Handle workflow execution loop - execute all frontend tasks\n let currentResult = result;\n let taskCount = 0;\n\n while (currentResult.nextTask) {\n taskCount++;\n const task = currentResult.nextTask;\n\n this.addLog('info', `📋 Task ${taskCount}: ${task.activityType} (${task.activityName || task.activityId})`, task);\n\n try {\n // Execute frontend task\n this.addLog('info', `⚡ Executing task: ${task.activityType}...`);\n // const { output, outcome } = await this.workflowManager.execute(task);\n // this.addLog('success', `✅ Task executed. Outcome: ${outcome}`, { output, outcome });\n\n // Complete task and get next\n this.addLog('info', `🔄 Completing task and getting next...`);\n // currentResult = await this.workflowManager.complete(\n // currentResult.instanceId!,\n // task,\n // outcome,\n // output\n // );\n\n if (!currentResult.instanceId) {\n this.addLog('error', '❌ Task completion failed', currentResult);\n break;\n }\n\n if (currentResult.nextTask) {\n this.addLog('info', `➡️ Next task available: ${currentResult.nextTask.activityType}`);\n } else {\n this.addLog('success', '✅ No more tasks. Workflow completed!');\n }\n } catch (error: any) {\n this.addLog('error', `❌ Error executing task: ${error.message}`, error);\n currentResult = {\n ...currentResult,\n success: false,\n error: error.message || 'Task execution failed'\n };\n break;\n }\n }\n\n // نتیجه\n this.workflowInstanceState.set({\n status: 'finished',\n finalResult: currentResult,\n startTime: this.workflowInstanceState().startTime || new Date(),\n endTime: new Date(),\n result: currentResult,\n currentState: currentResult.state?.output?.['taskStatus'] || currentResult.state?.output?.['currentState']\n });\n\n if (currentResult.success) {\n this.addLog('success', `✅ Workflow با موفقیت اجرا شد! (${taskCount} task(s) executed)`, currentResult);\n } else {\n this.addLog('error', '❌ Workflow با خطا مواجه شد: ' + (currentResult.error || 'Unknown error'), currentResult);\n }\n\n } catch (error: any) {\n this.addLog('error', '❌ خطا در اجرای Workflow: ' + error.message, error);\n this.workflowInstanceState.set({\n status: 'error',\n error: error.message,\n startTime: this.workflowInstanceState().startTime\n });\n } finally {\n this.isExecuting.set(false);\n }\n }\n\n\n /**\n * اضافه کردن لاگ\n */\n addLog(level: 'info' | 'success' | 'warning' | 'error', message: string, data?: any) {\n const logs = this.executionLogs();\n logs.push({\n timestamp: new Date(),\n level,\n message,\n data\n });\n this.executionLogs.set([...logs]);\n }\n\n\n /**\n * کپی کردن نمونه activity\n */\n copyActivityTemplate(activity: ActivityInfo) {\n const template = {\n id: `${activity.type.toLowerCase()}-${Date.now()}`,\n type: activity.type,\n name: activity.name,\n properties: {}\n };\n\n // کپی در کلیپبورد\n navigator.clipboard.writeText(JSON.stringify(template, null, 2));\n this.addLog('success', `✂️ Template برای ${activity.name} کپی شد!`);\n }\n\n /**\n * فرمت کردن JSON\n */\n formatJson() {\n try {\n const parsed = JSON.parse(this.workflowJson());\n this.workflowJson.set(JSON.stringify(parsed, null, 2));\n this.addLog('success', '✨ JSON فرمت شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در فرمت: ' + error.message);\n }\n }\n\n\n /**\n * Open workflow settings dialog built with Layout Builder (platform widgets / Acorex).\n */\n openWorkflowSettings(): void {\n this.syncWorkflowSettingsFromJson();\n const settings = this.workflowSettings();\n\n const dialogContext = {\n name: settings.name,\n definitionId: settings.definitionId,\n description: settings.description ?? '',\n inputsJson: JSON.stringify(settings.inputs, null, 2),\n outputsJson: JSON.stringify(settings.outputs, null, 2),\n variablesJson: JSON.stringify(settings.variables, null, 2),\n outcomesJson: Array.isArray(settings.outcomes) ? settings.outcomes.join(', ') : 'Done',\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows,\n toolVersion: settings.toolVersion ?? '1.0.0',\n providerName: settings.providerName ?? 'WorkflowStudio'\n };\n\n this.layoutBuilder\n .create()\n .dialog<void>(dialog => {\n dialog\n .setTitle('@workflow-management:workflow-studio.settings.title')\n .setSize('lg')\n .setCloseButton(true)\n .setContext(dialogContext)\n .content(flex => {\n flex\n .setDirection('column')\n .setGap('12px')\n .fieldset(general => {\n general\n .setTitle('@workflow-management:workflow-studio.settings.tabs.general')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.name.title',\n field => {\n field.path('name');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder'\n });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title',\n field => {\n field.path('definitionId');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder'\n });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.general.fields.description.title',\n field => {\n field.path('description');\n field.largeTextBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder',\n rows: 4\n });\n }\n );\n })\n .fieldset(inputs => {\n inputs\n .setTitle('@workflow-management:workflow-studio.settings.tabs.inputs')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.inputs.fields.inputs-json',\n field => {\n field.path('inputsJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(outputs => {\n outputs\n .setTitle('@workflow-management:workflow-studio.settings.tabs.outputs')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.outputs.fields.outputs-json',\n field => {\n field.path('outputsJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(variables => {\n variables\n .setTitle('@workflow-management:workflow-studio.settings.tabs.variables')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.variables.fields.variables-json',\n field => {\n field.path('variablesJson');\n field.largeTextBox({ rows: 12 });\n }\n );\n })\n .fieldset(advanced => {\n advanced\n .setTitle('@workflow-management:workflow-studio.settings.tabs.advanced')\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.version',\n field => {\n field.path('version');\n field.numberBox({ min: 1 });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.is-latest',\n field => {\n field.path('isLatest');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.is-published',\n field => {\n field.path('isPublished');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.usable-as-activity',\n field => {\n field.path('usableAsActivity');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.auto-update-consuming',\n field => {\n field.path('autoUpdateConsumingWorkflows');\n field.toggleSwitch();\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.tool-version',\n field => {\n field.path('toolVersion');\n field.textBox({ placeholder: '1.0.0' });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.provider-name',\n field => {\n field.path('providerName');\n field.textBox({ placeholder: 'WorkflowStudio' });\n }\n )\n .formField(\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.outcomes-label',\n field => {\n field.path('outcomesJson');\n field.textBox({\n placeholder:\n '@workflow-management:workflow-studio.settings.sections.advanced.fields.outcomes-placeholder'\n });\n }\n );\n });\n })\n .setActions(actions => {\n actions\n .cancel('@workflow-management:workflow-studio.settings.actions.cancel')\n .submit('@workflow-management:workflow-studio.settings.actions.save');\n })\n .onAction(async dialogRef => {\n const action = dialogRef.action();\n if (action === 'cancel') return;\n const ctx = dialogRef.context();\n if (!ctx) return;\n\n let inputs: WorkflowInput[] = [];\n let outputs: WorkflowOutput[] = [];\n let variables: WorkflowVariable[] = [];\n let outcomes: string[] = ['Done'];\n try {\n if (typeof ctx.inputsJson === 'string' && ctx.inputsJson.trim()) {\n inputs = JSON.parse(ctx.inputsJson);\n }\n } catch {\n this.addLog('error', 'Invalid inputs JSON');\n }\n try {\n if (typeof ctx.outputsJson === 'string' && ctx.outputsJson.trim()) {\n outputs = JSON.parse(ctx.outputsJson);\n }\n } catch {\n this.addLog('error', 'Invalid outputs JSON');\n }\n try {\n if (typeof ctx.variablesJson === 'string' && ctx.variablesJson.trim()) {\n variables = JSON.parse(ctx.variablesJson);\n }\n } catch {\n this.addLog('error', 'Invalid variables JSON');\n }\n if (typeof ctx.outcomesJson === 'string' && ctx.outcomesJson.trim()) {\n outcomes = ctx.outcomesJson.split(',').map((s: string) => s.trim()).filter(Boolean);\n }\n if (outcomes.length === 0) outcomes = ['Done'];\n\n const newSettings: WorkflowSettings = {\n definitionId: String(ctx.definitionId ?? ''),\n name: String(ctx.name ?? ''),\n description: String(ctx.description ?? ''),\n inputs,\n outputs,\n variables,\n outcomes,\n version: Number(ctx.version) || 1,\n isLatest: Boolean(ctx.isLatest),\n isPublished: Boolean(ctx.isPublished),\n usableAsActivity: Boolean(ctx.usableAsActivity),\n autoUpdateConsumingWorkflows: Boolean(ctx.autoUpdateConsumingWorkflows),\n toolVersion: String(ctx.toolVersion ?? '1.0.0'),\n providerName: String(ctx.providerName ?? 'WorkflowStudio')\n };\n this.workflowSettings.set(newSettings);\n this.applyWorkflowSettingsToJson();\n });\n })\n .show();\n }\n\n /**\n * Sync workflowSettings from current workflow JSON (used before opening settings dialog).\n */\n private syncWorkflowSettingsFromJson(): void {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const convertInput = (input: any): WorkflowInput => {\n if (input.schema) {\n return {\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema,\n validations: input.validations\n };\n }\n return {\n name: input.name,\n title: input.name,\n description: input.description,\n schema: {\n dataType: input.typeName || 'string',\n defaultValue: input.defaultValue\n },\n validations: input.isRequired ? [{ rule: 'required' }] : undefined\n };\n };\n const convertOutput = (output: any): WorkflowOutput => {\n if (output.schema) {\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema\n };\n }\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: { dataType: output.typeName || 'string' }\n };\n };\n this.workflowSettings.set({\n definitionId: workflow.definitionId || workflow.id || '',\n name: workflow.name || '',\n description: workflow.description || '',\n inputs: (workflow.inputs || []).map(convertInput),\n outputs: (workflow.outputs || []).map(convertOutput),\n variables: workflow.variables || [],\n outcomes: workflow.outcomes || ['Done'],\n usableAsActivity: workflow.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflow.options?.autoUpdateConsumingWorkflows || false,\n version: workflow.version || 1,\n isLatest: workflow.isLatest !== undefined ? workflow.isLatest : true,\n isPublished: workflow.isPublished || false,\n toolVersion: workflow.toolVersion || '1.0.0',\n providerName: workflow.providerName || 'WorkflowStudio'\n });\n } catch {\n this.workflowSettings.set({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n }\n }\n\n /**\n * Apply current workflowSettings to workflow JSON (used after saving from dialog).\n */\n private applyWorkflowSettingsToJson(): void {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n workflow.definitionId = settings.definitionId;\n workflow.name = settings.name;\n workflow.description = settings.description;\n workflow.version = settings.version;\n workflow.isLatest = settings.isLatest;\n workflow.isPublished = settings.isPublished;\n workflow.toolVersion = settings.toolVersion;\n workflow.providerName = settings.providerName;\n workflow.options = {\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows\n };\n workflow.variables = settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n }));\n workflow.inputs = settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations\n }));\n workflow.outputs = settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: { dataType: o.schema.dataType }\n }));\n workflow.outcomes = settings.outcomes;\n workflow.customProperties = workflow.customProperties || {};\n workflow.isReadonly = false;\n workflow.isSystem = false;\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Workflow settings saved');\n } catch (error: any) {\n this.addLog('error', '❌ Failed to save settings: ' + error?.message);\n }\n }\n\n /**\n * Export workflow به فرمت Elsa Workflow Definition v3.0.0\n * https://elsaworkflows.io/schemas/workflow-definition/v3.0.0/schema.json\n */\n exportWorkflowDefinition(): any {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n\n // Create Elsa Workflow Definition v3.0.0 structure\n const definition: any = {\n // VersionedEntity fields\n id: workflow.id || this.generateId(),\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n\n // Identification fields\n definitionId: settings.definitionId || workflow.id || this.generateId(),\n name: settings.name || workflow.name || 'Untitled Workflow',\n description: settings.description || workflow.description || '',\n toolVersion: settings.toolVersion || '3.0.0',\n\n // Materialization fields\n providerName: settings.providerName || 'ACoreX',\n materializerContext: {\n materializerName: 'Json',\n // Store the root activity as JSON string\n stringData: JSON.stringify(workflow.root)\n },\n\n // WorkflowCommon fields\n options: {\n usableAsActivity: settings.usableAsActivity || false,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows || false\n },\n\n // Variables array\n variables: settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n })),\n\n // Inputs array\n inputs: settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations || []\n })),\n\n // Outputs array\n outputs: settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n })),\n\n // Outcomes array\n outcomes: settings.outcomes || ['Done'],\n\n // Custom properties\n customProperties: workflow.customProperties || {},\n\n // Flags\n isReadonly: false,\n isSystem: false,\n\n // Root activity (direct reference for Elsa compatibility)\n root: workflow.root\n };\n\n return definition;\n } catch (error: any) {\n this.addLog('error', '❌ خطا در export: ' + error.message);\n return null;\n }\n }\n\n /**\n * دانلود WorkflowDefinition به صورت JSON file\n */\n downloadWorkflowDefinition() {\n const definition = this.exportWorkflowDefinition();\n if (!definition) return;\n\n const blob = new Blob([JSON.stringify(definition, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${definition.definitionId || 'workflow'}-v${definition.version}.json`;\n link.click();\n URL.revokeObjectURL(url);\n\n this.addLog('success', `📥 Workflow Definition دانلود شد: ${link.download}`);\n }\n\n private generateId(): string {\n return `wf-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n // ============ Workflow Inputs Management ============\n\n addWorkflowInput() {\n const settings = this.workflowSettings();\n settings.inputs.push({\n name: `input${settings.inputs.length + 1}`,\n title: `Input ${settings.inputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string',\n defaultValue: undefined\n },\n validations: undefined\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowInput(index: number) {\n const settings = this.workflowSettings();\n settings.inputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInput(index: number, field: string, value: any) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n\n if (field === 'schema') {\n // For nested schema updates\n (input as any)[field] = value;\n } else if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n (input.schema as any)[schemaField] = value;\n } else {\n (input as any)[field] = value;\n }\n\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInputSchema(index: number, schemaField: string, value: any) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n (input.schema as any)[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowInputValidation(index: number, isRequired: boolean) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (isRequired) {\n if (!input.validations) {\n input.validations = [];\n }\n if (!input.validations.some(v => v.rule === 'required')) {\n input.validations.push({ rule: 'required' });\n }\n } else {\n input.validations = input.validations?.filter(v => v.rule !== 'required');\n if (input.validations?.length === 0) {\n input.validations = undefined;\n }\n }\n this.workflowSettings.set({ ...settings });\n }\n\n getInputIsRequired(input: WorkflowInput): boolean {\n return input.validations?.some(v => v.rule === 'required') ?? false;\n }\n\n // ============ Workflow Outputs Management ============\n\n addWorkflowOutput() {\n const settings = this.workflowSettings();\n settings.outputs.push({\n name: `output${settings.outputs.length + 1}`,\n title: `Output ${settings.outputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string'\n }\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowOutput(index: number) {\n const settings = this.workflowSettings();\n settings.outputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowOutput(index: number, field: string, value: any) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n\n if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n (output.schema as any)[schemaField] = value;\n } else {\n (output as any)[field] = value;\n }\n\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowOutputSchema(index: number, schemaField: string, value: any) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n (output.schema as any)[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n // ============ Workflow Variables Management ============\n\n addWorkflowVariable() {\n const settings = this.workflowSettings();\n settings.variables.push({\n name: `variable${settings.variables.length + 1}`,\n typeName: 'string',\n value: '',\n description: ''\n });\n this.workflowSettings.set({ ...settings });\n }\n\n removeWorkflowVariable(index: number) {\n const settings = this.workflowSettings();\n settings.variables.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n\n updateWorkflowVariable(index: number, field: keyof WorkflowVariable, value: any) {\n const settings = this.workflowSettings();\n (settings.variables[index] as any)[field] = value;\n this.workflowSettings.set({ ...settings });\n }\n\n /**\n * بهروزرسانی outcomes از string\n */\n updateOutcomes(outcomesString: string) {\n const settings = this.workflowSettings();\n settings.outcomes = outcomesString\n .split(',')\n .map(o => o.trim())\n .filter(o => o.length > 0);\n this.workflowSettings.set({ ...settings });\n }\n\n /**\n * پاک کردن لاگها\n */\n clearLogs() {\n this.executionLogs.set([]);\n }\n\n // ============ Visual Designer Methods ============\n\n /**\n * تغییر تب\n */\n switchTab(tab: EditorTab) {\n if (tab === 'visual' && this.activeTab() === 'json') {\n // تبدیل JSON به Visual\n this.jsonToVisual();\n } else if (tab === 'json' && this.activeTab() === 'visual') {\n // تبدیل Visual به JSON\n this.visualToJson();\n }\n this.activeTab.set(tab);\n }\n\n /**\n * انتخاب Node\n */\n selectNodeById(node: VisualNode) {\n this.selectedNode.set(node);\n }\n\n /**\n * Delete node from canvas (used from template to avoid event propagation).\n */\n deleteNodeFromCanvas(nodeId: string): void {\n this.deleteNode(nodeId);\n }\n\n /**\n * حذف Node\n */\n deleteNode(nodeId: string) {\n const nodes = this.visualNodes().filter(n => n.id !== nodeId);\n // حذف اتصالات به این نود\n nodes.forEach(n => {\n n.connections = n.connections.filter(c => c !== nodeId);\n });\n this.visualNodes.set(nodes);\n\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(null);\n }\n\n this.addLog('info', `🗑️ Node حذف شد`);\n }\n\n /**\n * اتصال دو Node با outcome مشخص\n */\n connectNodes(fromId: string, toId: string, outcome?: string) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n const toNode = nodes.find(n => n.id === toId);\n\n if (fromNodeIndex !== -1 && toNode) {\n const fromNode = nodes[fromNodeIndex];\n\n // Use outcome-based connections if available\n if (outcome && fromNode.outcomes && fromNode.outcomes.length > 1) {\n const outcomeConnections = fromNode.outcomeConnections || [];\n\n // Check if this outcome already has a connection\n const existingConnection = outcomeConnections.find(c => c.outcome === outcome);\n if (existingConnection) {\n this.addLog('warning', `⚠️ Outcome \"${outcome}\" قبلاً متصل شده است`);\n return;\n }\n\n // Add new outcome connection\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: [...outcomeConnections, { outcome, targetNodeId: toId }],\n connections: [...fromNode.connections, toId] // Keep for backward compat\n };\n\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} [${outcome}] → ${toNode.name}`);\n } else {\n // Simple connection (no outcomes)\n if (!fromNode.connections.includes(toId)) {\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: [...fromNode.connections, toId]\n };\n\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} متصل شد به ${toNode.name}`);\n } else {\n this.addLog('warning', '⚠️ این اتصال از قبل وجود دارد');\n }\n }\n } else {\n this.addLog('error', '❌ خطا در ایجاد اتصال');\n }\n }\n\n /**\n * قطع اتصال (با یا بدون outcome)\n */\n disconnectNodes(fromId: string, toId: string, outcome?: string) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n\n if (fromNodeIndex !== -1) {\n const fromNode = nodes[fromNodeIndex];\n const updatedNodes = [...nodes];\n\n // Remove from outcome connections if specified\n if (outcome && fromNode.outcomeConnections) {\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: fromNode.outcomeConnections.filter(\n c => !(c.outcome === outcome && c.targetNodeId === toId)\n ),\n connections: fromNode.connections.filter(c => c !== toId)\n };\n } else {\n // Simple disconnect\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: fromNode.connections.filter(c => c !== toId),\n outcomeConnections: fromNode.outcomeConnections?.filter(c => c.targetNodeId !== toId)\n };\n }\n\n this.visualNodes.set(updatedNodes);\n this.addLog('info', `✂️ اتصال قطع شد${outcome ? ` [${outcome}]` : ''}`);\n }\n }\n\n /**\n * تبدیل JSON به Visual\n */\n jsonToVisual() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const nodes: VisualNode[] = [];\n let yPos = 100;\n\n // پردازش root activity\n if (workflow.root) {\n this.processActivityToNode(workflow.root, nodes, 100, yPos);\n }\n\n this.visualNodes.set(nodes);\n this.addLog('success', '✅ JSON به Visual تبدیل شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n\n /**\n * پردازش Activity به Node (recursive)\n */\n private processActivityToNode(\n activity: any,\n nodes: VisualNode[],\n x: number,\n y: number,\n parentId?: string\n ): string {\n const nodeId = activity.id || `${activity.type}-${Date.now()}-${Math.random()}`;\n\n // Get outcomes for this activity type (use default for now, will be updated async if needed)\n const outcomes = ['Done']; // Default outcome, will be updated when activity info is loaded\n\n // Get outcomeConnections from activity definition\n const outcomeConnections = activity.outcomeConnections || [];\n\n // Build simple connections list from outcomeConnections for backward compatibility\n const connections = outcomeConnections.map((conn: any) => conn.targetNodeId);\n\n const node: VisualNode = {\n id: nodeId,\n type: activity.type,\n name: activity.name || activity.type,\n icon: this.getIconForActivityType(activity.type),\n properties: activity.properties || {},\n position: { x, y },\n connections: connections,\n outcomeConnections: outcomeConnections,\n outcomes: outcomes\n };\n\n nodes.push(node);\n\n // اگر parent دارد، اتصال برقرار کن (برای Sequence)\n if (parentId && !outcomeConnections.length) {\n const parentNode = nodes.find(n => n.id === parentId);\n if (parentNode && !parentNode.connections.includes(nodeId)) {\n parentNode.connections.push(nodeId);\n }\n }\n\n // پردازش children (برای Sequence) - اما فقط اگر outcomeConnections نباشد\n if (activity.children && Array.isArray(activity.children) && !outcomeConnections.length) {\n let childY = y;\n activity.children.forEach((child: any, index: number) => {\n childY = y + (index * 100);\n this.processActivityToNode(child, nodes, x + 250, childY, nodeId);\n });\n }\n\n return nodeId;\n }\n\n /**\n * تبدیل Visual به JSON\n */\n visualToJson() {\n try {\n const nodes = this.visualNodes();\n\n if (nodes.length === 0) {\n this.addLog('warning', '⚠️ هیچ Node ای وجود ندارد');\n return;\n }\n\n // پیدا کردن root node (node بدون parent)\n const rootNode = this.findRootNode(nodes);\n\n if (!rootNode) {\n this.addLog('error', '❌ Root Node پیدا نشد');\n return;\n }\n\n const workflow = {\n id: 'visual-workflow-' + Date.now(),\n name: 'Visual Workflow',\n version: 1,\n root: this.nodeToActivity(rootNode, nodes)\n };\n\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Visual به JSON تبدیل شد');\n } catch (error: any) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n\n /**\n * پیدا کردن Root Node\n */\n private findRootNode(nodes: VisualNode[]): VisualNode | null {\n // Node ای که به آن اشاره نشده\n const connectedIds = new Set<string>();\n nodes.forEach(n => n.connections.forEach(c => connectedIds.add(c)));\n\n const rootNodes = nodes.filter(n => !connectedIds.has(n.id));\n return rootNodes[0] || nodes[0];\n }\n\n /**\n * تبدیل Node به Activity (recursive)\n */\n private nodeToActivity(node: VisualNode, allNodes: VisualNode[]): any {\n const activity: any = {\n id: node.id,\n type: node.type,\n name: node.name,\n properties: node.properties\n };\n\n // اگر children دارد (connections)\n if (node.connections.length > 0) {\n const children = node.connections\n .map(connId => allNodes.find(n => n.id === connId))\n .filter(n => n !== undefined)\n .map(childNode => this.nodeToActivity(childNode!, allNodes));\n\n if (children.length > 0) {\n activity.children = children;\n }\n }\n\n return activity;\n }\n\n /**\n * دریافت آیکون برای نوع Activity\n */\n private getIconForActivityType(type: string): string {\n const iconMap: Record<string, string> = {\n 'workflow-activity:sequence': 'fa-light fa-list-ol',\n 'workflow-activity:show-confirm-dialog': 'fa-light fa-question-circle',\n 'workflow-activity:show-alert-dialog': 'fa-light fa-circle-info',\n 'workflow-activity:show-toast': 'fa-light fa-bell',\n 'workflow-activity:set-variable': 'fa-light fa-variable',\n 'workflow-activity:navigate': 'fa-light fa-route',\n 'workflow-activity:dispatch-event': 'fa-light fa-paper-plane',\n 'workflow-activity:entity-create': 'fa-light fa-plus',\n 'workflow-activity:entity-read': 'fa-light fa-book-open',\n 'workflow-activity:entity-update': 'fa-light fa-pen',\n 'workflow-activity:entity-delete': 'fa-light fa-trash'\n };\n\n return iconMap[type] || 'fa-light fa-circle';\n }\n\n /**\n * بهروزرسانی property نود\n */\n updateNodeProperty(nodeId: string, propertyName: string, value: any) {\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === nodeId);\n\n if (nodeIndex !== -1) {\n const node = nodes[nodeIndex];\n const updatedNodes = [...nodes];\n\n \n if (propertyName === 'name') {\n updatedNodes[nodeIndex] = {\n ...node,\n name: value\n };\n } else {\n const newProperties = {\n ...node.properties,\n [propertyName]: value\n };\n\n let newOutcomes = node.outcomes;\n const shouldRecomputeOutcomes =\n (propertyName === 'expectedStatusCodes' && node.type === 'workflow-activity:http-request') ||\n (propertyName === 'actions' && node.type === 'workflow-activity:human-task');\n if (shouldRecomputeOutcomes) {\n this.findActivityInfo(node.type).then(activityInfo => {\n if (activityInfo) {\n const computedOutcomes = this.computeOutcomes(activityInfo, newProperties);\n const updatedNodes = this.visualNodes();\n const nodeIdx = updatedNodes.findIndex(n => n.id === nodeId);\n if (nodeIdx !== -1) {\n updatedNodes[nodeIdx] = {\n ...updatedNodes[nodeIdx],\n outcomes: computedOutcomes\n };\n this.visualNodes.set([...updatedNodes]);\n this.addLog('info', `🔄 Outcomes updated: [${computedOutcomes.join(', ')}]`);\n }\n }\n }).catch(() => {\n });\n }\n\n updatedNodes[nodeIndex] = {\n ...node,\n properties: newProperties,\n outcomes: newOutcomes\n };\n }\n\n this.visualNodes.set(updatedNodes);\n\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(updatedNodes[nodeIndex]);\n }\n }\n }\n\n /**\n * پیدا کردن activity info بر اساس type\n */\n private async findActivityInfo(type: string): Promise<ActivityInfo | null> {\n try { \n const activity = await this.activityDefinitionService.getActivityByName(type);\n if (activity) {\n return this.convertActivityDefinitionToInfo(activity);\n }\n } catch (error) {\n console.warn(`Failed to find activity info for type: ${type}`, error);\n }\n return null;\n }\n\n /**\n * پاک کردن همه نودها\n */\n clearCanvas() {\n this.visualNodes.set([]);\n this.selectedNode.set(null);\n this.addLog('info', '🗑️ Canvas پاک شد');\n }\n\n /**\n * Copy workflow Definition ID to clipboard (Elsa-style workflow info).\n */\n async copyDefinitionIdToClipboard(): Promise<void> {\n const id = this.workflowSettings().definitionId || 'new-workflow';\n try {\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(id);\n this.addLog('success', 'Definition ID copied to clipboard');\n }\n } catch {\n this.addLog('warning', 'Could not copy to clipboard');\n }\n }\n\n /**\n * Scroll canvas area so content is centered (Elsa-style \"Center\").\n */\n canvasCenter(): void {\n const el = this.canvasAreaRef()?.nativeElement;\n if (!el) return;\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + 150);\n maxY = Math.max(maxY, n.position.y + 120);\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n const parent = el.parentElement;\n if (parent && parent.scrollWidth > parent.clientWidth) {\n parent.scrollLeft = Math.max(0, cx - parent.clientWidth / 2);\n }\n if (parent && parent.scrollHeight > parent.clientHeight) {\n parent.scrollTop = Math.max(0, cy - parent.clientHeight / 2);\n }\n }\n\n /**\n * Scroll canvas so all nodes are in view (Elsa-style \"Zoom to fit\" – fit by scroll).\n */\n canvasZoomToFit(): void {\n const el = this.canvasAreaRef()?.nativeElement;\n if (!el) return;\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of nodes) {\n minX = Math.min(minX, n.position.x);\n minY = Math.min(minY, n.position.y);\n maxX = Math.max(maxX, n.position.x + 150);\n maxY = Math.max(maxY, n.position.y + 120);\n }\n const parent = el.parentElement;\n if (parent) {\n parent.scrollLeft = Math.max(0, minX - 24);\n parent.scrollTop = Math.max(0, minY - 24);\n }\n }\n\n /**\n * Auto-arrange nodes in a vertical flow (Elsa-style \"Auto layout\").\n */\n canvasAutoLayout(): void {\n const nodes = this.visualNodes();\n if (nodes.length === 0) return;\n const root = this.findRootNode(nodes);\n const ordered: VisualNode[] = [];\n const visited = new Set<string>();\n const add = (n: VisualNode) => {\n if (visited.has(n.id)) return;\n visited.add(n.id);\n ordered.push(n);\n const targets = (n.outcomeConnections ?? []).map((c) => this.findNodeById(c.targetNodeId)).filter(Boolean) as VisualNode[];\n for (const t of targets) add(t);\n const fallback = (n.connections ?? []).map((id) => this.findNodeById(id)).filter(Boolean) as VisualNode[];\n for (const t of fallback) add(t);\n };\n if (root) add(root);\n for (const n of nodes) if (!visited.has(n.id)) ordered.push(n);\n const startX = 50;\n const startY = 50;\n const stepY = 120;\n this.visualNodes.update((list) =>\n list.map((node) => {\n const idx = ordered.findIndex((o) => o.id === node.id);\n const y = idx >= 0 ? startY + idx * stepY : node.position.y;\n return { ...node, position: { x: startX, y } };\n })\n );\n this.addLog('info', 'Layout applied');\n }\n\n // ============ Drag & Drop Methods ============\n\n /**\n * شروع drag از activity list\n */\n onActivityDragStart(event: DragEvent, activity: ActivityInfo) {\n this.draggedActivity = activity;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', activity.type);\n }\n this.addLog('info', `🎯 در حال Drag: ${activity.name}`);\n }\n\n /**\n * پایان drag از activity list\n */\n onActivityDragEnd(event: DragEvent) {\n this.draggedActivity = null;\n }\n\n /**\n * drag over روی Canvas\n */\n onCanvasDragOver(event: DragEvent) {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n\n /**\n * drag leave از Canvas\n */\n onCanvasDragLeave(event: DragEvent) {\n // میتوان از این برای visual feedback استفاده کرد\n }\n\n /**\n * محاسبه outcomes برای یک activity\n */\n computeOutcomes(activityInfo: ActivityInfo, properties: Record<string, any>): string[] {\n // For HTTP Request with expected status codes\n if (activityInfo.type === 'workflow-activity:http-request' && properties['expectedStatusCodes']) {\n const codes = Array.isArray(properties['expectedStatusCodes'])\n ? properties['expectedStatusCodes']\n : [properties['expectedStatusCodes']];\n\n const statusOutcomes = codes.map((code: number) => code.toString());\n return [...statusOutcomes, 'Done', 'Failed', 'Timeout'];\n }\n\n // Human Task: outcomes from actions (prefix/suffix) in workflow definition\n if (activityInfo.type === 'workflow-activity:human-task' && properties['actions']) {\n const names: string[] = [];\n try {\n const actions = properties['actions'];\n const parsed = typeof actions === 'string' ? JSON.parse(actions) : actions;\n const prefix = parsed?.prefix ?? [];\n const suffix = parsed?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string' && !names.includes(name)) names.push(name);\n }\n } catch {\n // ignore parse error\n }\n if (names.length > 0) return names;\n }\n\n // Default: check activity info for outcomes\n const outcomeMap: Record<string, string[]> = {\n 'workflow-activity:if': ['Then', 'Else'],\n 'workflow-activity:show-confirm-dialog': ['Confirmed', 'Cancelled'],\n 'workflow-activity:show-alert-dialog': ['Done'],\n 'workflow-activity:show-form': ['Submitted', 'Cancelled'],\n 'workflow-activity:human-task': ['submit', 'cancel'],\n 'workflow-activity:http-request': ['Done', 'Failed', 'Timeout'],\n 'workflow-activity:sequence': ['Done'],\n 'workflow-activity:for-each': ['Done'],\n 'workflow-activity:while': ['Done'],\n 'workflow-activity:set-variable': ['Done'],\n 'workflow-activity:navigate': ['Done'],\n 'workflow-activity:show-toast': ['Done'],\n 'workflow-activity:dispatch-event': ['Done'],\n 'workflow-activity:entity-create': ['Done', 'Failed'],\n 'workflow-activity:entity-read': ['Done', 'NotFound', 'Failed'],\n 'workflow-activity:entity-update': ['Done', 'Failed'],\n 'workflow-activity:entity-delete': ['Done', 'Failed']\n };\n\n return outcomeMap[activityInfo.type] || ['Done'];\n }\n\n /**\n * drop روی Canvas - اضافه کردن activity جدید\n */\n onCanvasDrop(event: DragEvent) {\n event.preventDefault();\n\n if (!this.draggedActivity) {\n return;\n }\n\n const canvas = event.currentTarget as HTMLElement;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - 75; // center node\n const y = event.clientY - rect.top - 40;\n\n const nodes = this.visualNodes();\n const defaultProps = { ...(this.draggedActivity.defaultProperties || {}) };\n\n const newNode: VisualNode = {\n id: `${this.draggedActivity.type}-${Date.now()}`,\n type: this.draggedActivity.type,\n name: this.draggedActivity.name,\n icon: this.draggedActivity.icon,\n properties: defaultProps,\n position: { x: Math.max(0, x), y: Math.max(0, y) },\n connections: [],\n outcomeConnections: [],\n outcomes: this.computeOutcomes(this.draggedActivity, defaultProps)\n };\n\n this.visualNodes.set([...nodes, newNode]);\n\n const outcomesInfo = newNode.outcomes && newNode.outcomes.length > 1\n ? ` with ${newNode.outcomes.length} outcomes [${newNode.outcomes.join(', ')}]`\n : '';\n\n this.addLog('success', `✅ Activity ${this.draggedActivity.name} اضافه شد${outcomesInfo}`);\n this.draggedActivity = null;\n }\n\n /**\n * شروع drag نود\n */\n onNodeDragStart(event: DragEvent, node: VisualNode) {\n this.draggedNode = node;\n\n const target = event.target as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.nodeDragOffset = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Make drag image transparent\n const img = new Image();\n img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n event.dataTransfer.setDragImage(img, 0, 0);\n }\n }\n\n /**\n * در حال drag نود\n */\n onNodeDrag(event: DragEvent, node: VisualNode) {\n if (!this.draggedNode || event.clientX === 0 || event.clientY === 0) {\n return;\n }\n\n const canvas = document.querySelector('.canvas-area') as HTMLElement;\n if (!canvas) return;\n\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - this.nodeDragOffset.x;\n const y = event.clientY - rect.top - this.nodeDragOffset.y;\n\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === node.id);\n\n if (nodeIndex !== -1) {\n nodes[nodeIndex].position = {\n x: Math.max(0, x),\n y: Math.max(0, y)\n };\n this.visualNodes.set([...nodes]);\n }\n }\n\n /**\n * پایان drag نود\n */\n onNodeDragEnd(event: DragEvent, node: VisualNode) {\n this.draggedNode = null;\n }\n\n /**\n * کلیک روی کانکتور - برای ایجاد اتصال (برای activities با یک outcome)\n */\n onConnectorClick(event: Event, node: VisualNode, type: 'in' | 'out') {\n event.stopPropagation();\n\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source\n if (type === 'out') {\n this.connectionSource = { node, type };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name}`);\n }\n } else {\n // دومین کلیک - ایجاد اتصال\n if (type === 'in' && this.connectionSource.node.id !== node.id) {\n this.connectNodes(this.connectionSource.node.id, node.id, this.connectionSource.outcome);\n this.connectionSource = null;\n } else {\n this.addLog('warning', '⚠️ اتصال نامعتبر - ابتدا روی connector خروجی و سپس ورودی کلیک کنید');\n this.connectionSource = null;\n }\n }\n }\n\n /**\n * کلیک روی outcome connector - برای activities با چند outcome\n */\n onOutcomeConnectorClick(event: Event, node: VisualNode, outcome: string) {\n event.stopPropagation();\n\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source با outcome\n this.connectionSource = { node, type: 'out', outcome };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name} [${outcome}]`);\n } else {\n this.addLog('warning', '⚠️ لطفاً روی input connector یک نود دیگر کلیک کنید');\n this.connectionSource = null;\n }\n }\n\n // ============ UI Methods ============\n\n /**\n * تغییر وضعیت نمایش Properties Panel\n */\n togglePropertiesPanel() {\n this.showPropertiesPanel.set(!this.showPropertiesPanel());\n }\n\n /**\n * Build property viewer tabs from activity definition (platform widget-based).\n * Used so the properties panel renders via the same widget system as the form builder.\n */\n protected buildPropertyViewerTabs(\n def: AXPActivityDefinition | null | undefined,\n node: VisualNode\n ): AXPPropertyViewerTab[] {\n const generalGroup: AXPWidgetPropertyGroup = { name: 'identity', title: 'General', order: 0 };\n const inputGroup: AXPWidgetPropertyGroup = { name: 'input-properties', title: 'Input Properties', order: 1 };\n const outputGroup: AXPWidgetPropertyGroup = { name: 'output', title: 'Output & Variables', order: 2 };\n\n const identityProps: AXPWidgetProperty[] = [\n this.createReadOnlyStringProp('id', 'ID', 'id', generalGroup),\n this.createReadOnlyStringProp('type', 'Type', 'type', generalGroup),\n this.createStringProp('name', 'Name', 'name', generalGroup),\n ];\n\n const inputProps: AXPWidgetProperty[] = (def?.inputs ?? []).map((input, index) =>\n this.activityInputToWidgetProperty(input, inputGroup, index)\n );\n\n const outputProps: AXPWidgetProperty[] = [\n this.createStringProp(\n 'outputVariable',\n 'Output Variable',\n 'properties.outputVariable',\n outputGroup\n ),\n ];\n\n const groups = [\n { name: generalGroup.name, title: generalGroup.title, isCollapsed: false, props: identityProps },\n ...(inputProps.length\n ? [{ name: inputGroup.name, title: inputGroup.title, isCollapsed: false, props: inputProps }]\n : []),\n { name: outputGroup.name, title: outputGroup.title, isCollapsed: false, props: outputProps },\n ];\n\n return [{ name: 'general', title: 'General', groups }];\n }\n\n private createStringProp(\n name: string,\n title: string,\n path: string,\n group: AXPWidgetPropertyGroup\n ): AXPWidgetProperty {\n return {\n name,\n title,\n group,\n order: 0,\n schema: {\n dataType: 'string',\n interface: {\n path,\n name,\n type: 'text-editor',\n options: {},\n },\n },\n visible: true,\n };\n }\n\n private createReadOnlyStringProp(\n name: string,\n title: string,\n path: string,\n group: AXPWidgetPropertyGroup\n ): AXPWidgetProperty {\n return {\n name,\n title,\n group,\n order: 0,\n schema: {\n dataType: 'string',\n interface: {\n path,\n name,\n type: 'text-editor',\n options: { readonly: true },\n },\n },\n visible: true,\n };\n }\n\n private activityInputToWidgetProperty(\n input: { name: string; title: string; schema: { dataType?: string; defaultValue?: any; interface?: { type?: string; options?: Record<string, any> } } },\n group: AXPWidgetPropertyGroup,\n order: number\n ): AXPWidgetProperty {\n const path = `properties.${input.name}`;\n const iface = input.schema?.interface;\n const widgetType = iface?.type ?? 'text-editor';\n return {\n name: input.name,\n title: input.title,\n group,\n order,\n schema: {\n dataType: (input.schema?.dataType as any) ?? 'string',\n defaultValue: input.schema?.defaultValue,\n interface: {\n path,\n name: input.name,\n type: widgetType,\n options: iface?.options ?? {},\n },\n },\n visible: true,\n };\n }\n\n /**\n * Apply property viewer context changes back to the selected node.\n */\n protected onPropertyViewerChanged(ev: { values: any; mode: 'init' | 'update' }): void {\n const node = this.selectedNode();\n if (!node || ev.mode !== 'update') return;\n const v = ev.values;\n if (v.name !== undefined) this.updateNodeProperty(node.id, 'name', v.name);\n if (v.properties && typeof v.properties === 'object') {\n for (const key of Object.keys(v.properties)) {\n this.updateNodeProperty(node.id, key, v.properties[key]);\n }\n }\n }\n\n // ============ Template Helper Methods ============\n\n /**\n * پیدا کردن Node با ID\n */\n findNodeById(nodeId: string): VisualNode | undefined {\n return this.visualNodes().find(n => n.id === nodeId);\n }\n\n /**\n * بررسی اینکه آیا properties خالی است یا نه\n */\n hasProperties(properties: Record<string, any>): boolean {\n return properties && Object.keys(properties).length > 0;\n }\n\n /**\n * دسترسی به Object برای استفاده در template\n */\n protected readonly Object = Object;\n\n /**\n * دسترسی به typeof برای استفاده در template\n */\n protected readonly typeof = (value: any) => typeof value;\n\n /**\n * دسترسی به JSON برای استفاده در template\n */\n protected readonly JSON = JSON;\n\n /**\n * Builds SVG path for a curved connection (quadratic Bezier) so the line is smooth like Elsa/n8n.\n * Control point is offset so the curve bows naturally between source and target.\n */\n protected getConnectionPath(x1: number, y1: number, x2: number, y2: number): string {\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const dy = y2 - y1;\n const offset = Math.min(80, Math.max(40, Math.abs(dy) * 0.3));\n const cpy = midY - (dy >= 0 ? offset : -offset);\n return `M ${x1} ${y1} Q ${midX} ${cpy} ${x2} ${y2}`;\n }\n\n /**\n * Approximate midpoint on the curve for label placement (quadratic Bezier t=0.5).\n */\n protected getConnectionLabelPosition(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ): { x: number; y: number } {\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n const dy = y2 - y1;\n const offset = Math.min(80, Math.max(40, Math.abs(dy) * 0.3));\n const cpy = midY - (dy >= 0 ? offset : -offset);\n const t = 0.5;\n const x = (1 - t) * (1 - t) * x1 + 2 * (1 - t) * t * midX + t * t * x2;\n const y = (1 - t) * (1 - t) * y1 + 2 * (1 - t) * t * cpy + t * t * y2;\n return { x, y: y + 12 };\n }\n\n /**\n * دریافت رنگ بر اساس outcome\n */\n protected getOutcomeColor(outcome: string): string {\n const colorMap: Record<string, string> = {\n '200': '#10b981', // Green - Success\n 'Done': '#10b981', // Green - Success\n 'Success': '#10b981', // Green - Success\n '404': '#ef4444', // Red - Error\n '500': '#ef4444', // Red - Error\n 'Failed': '#ef4444', // Red - Error\n 'Error': '#ef4444', // Red - Error\n 'Timeout': '#f59e0b', // Orange - Warning\n 'Cancelled': '#f59e0b',// Orange - Warning\n 'Then': '#3b82f6', // Blue - Info\n 'Else': '#64748b', // Gray\n };\n\n return colorMap[outcome] || '#8b5cf6'; // Purple - Default\n }\n\n /**\n * Returns marker name for arrowhead def (success, error, warning, info, primary, default).\n */\n protected getOutcomeColorName(outcome: string): string {\n if (['200', 'Done', 'Success'].includes(outcome)) {\n return 'success';\n }\n if (['404', '500', 'Failed', 'Error'].includes(outcome)) {\n return 'error';\n }\n if (['Timeout', 'Cancelled'].includes(outcome)) {\n return 'warning';\n }\n if (['Then'].includes(outcome)) {\n return 'info';\n }\n if (['Else'].includes(outcome)) {\n return 'default';\n }\n return 'primary'; // purple for custom outcomes\n }\n\n /**\n * بهروزرسانی property با parse کردن JSON\n */\n updateNodePropertyJSON(nodeId: string, propertyName: string, jsonString: string) {\n try {\n const value = JSON.parse(jsonString);\n this.updateNodeProperty(nodeId, propertyName, value);\n } catch (error) {\n // اگر JSON نامعتبر بود، چیزی نکن\n console.warn('Invalid JSON:', jsonString);\n }\n }\n\n}\n","<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@workflow-management:activities.menus.activity-categories.title' | translate | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [placeholder]=\"'@workflow-management:workflow-studio.components.activity-categories-tree.search-placeholder' | translate | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-activity-categories-tree\n (categoryClick)=\"onCategoryClick($event)\"\n (activityClick)=\"onActivityClick($event)\"\n (activityDragStart)=\"onActivityDragStartFromTree($event)\"\n ></axp-activity-categories-tree>\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-toolbar>\n <axp-layout-prefix>\n <!-- JSON / Visual toggle (same pattern as report view mode) -->\n <div class=\"studio-editor-tabs\">\n <ax-button-group class=\"ax-sm\" [selection]=\"'single'\">\n <ax-button-group-item (onClick)=\"switchTab('json')\" text=\"{{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\" [selected]=\"activeTab() === 'json'\">\n <ax-prefix>\n <i class=\"fa-light fa-code\"></i>\n </ax-prefix>\n </ax-button-group-item>\n <ax-button-group-item (onClick)=\"switchTab('visual')\" text=\"{{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\" [selected]=\"activeTab() === 'visual'\">\n <ax-prefix>\n <i class=\"fa-light fa-diagram-project\"></i>\n </ax-prefix>\n </ax-button-group-item>\n </ax-button-group>\n </div>\n </axp-layout-prefix>\n </axp-page-toolbar>\n\n <axp-page-content>\n <div class=\"workflow-studio\">\n <!-- Main Layout -->\n <div class=\"studio-body\" [class.properties-hidden]=\"!showPropertiesPanel()\">\n\n <!-- Editor -->\n <div class=\"studio-editor\">\n <!-- Tab Content -->\n <div class=\"editor-content\">\n <!-- JSON Tab -->\n @if (activeTab() === 'json') {\n <div class=\"json-tab\">\n <textarea class=\"json-editor\" [value]=\"workflowJson()\"\n (input)=\"onWorkflowJsonInput($event)\"\n [placeholder]=\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\"\n spellcheck=\"false\"></textarea>\n </div>\n }\n\n <!-- Visual Tab -->\n @if (activeTab() === 'visual') {\n <div class=\"visual-tab\">\n <!-- Canvas -->\n <div class=\"visual-canvas\">\n <div class=\"canvas-toolbar\">\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.zoom-to-fit.title' | translate | async\" (onClick)=\"canvasZoomToFit()\">\n <ax-prefix><i class=\"fa-light fa-expand\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.center.title' | translate | async\" (onClick)=\"canvasCenter()\">\n <ax-prefix><i class=\"fa-light fa-crosshairs\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.auto-layout.title' | translate | async\" (onClick)=\"canvasAutoLayout()\">\n <ax-prefix><i class=\"fa-light fa-sitemap\"></i></ax-prefix>\n </ax-button>\n <span class=\"toolbar-sep\"></span>\n <label class=\"toolbar-auto-save\">\n <ax-switch [value]=\"autoSaveEnabled()\" (valueChange)=\"autoSaveEnabled.set($event)\"></ax-switch>\n <span>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.auto-save' | translate | async }}</span>\n </label>\n <span class=\"toolbar-sep\"></span>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\" (onClick)=\"clearCanvas()\">\n <ax-prefix><i class=\"fa-light fa-trash\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-sm\" [attr.title]=\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\" (onClick)=\"visualToJson()\">\n <ax-prefix><i class=\"fa-light fa-code\"></i></ax-prefix>\n </ax-button>\n <span class=\"tool-info\">\n <i class=\"fa-light fa-lightbulb\"></i>\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\n </span>\n </div>\n\n <div #canvasAreaRef class=\"canvas-area\" (drop)=\"onCanvasDrop($event)\" (dragover)=\"onCanvasDragOver($event)\"\n (dragleave)=\"onCanvasDragLeave($event)\">\n <!-- SVG for Connections -->\n <svg class=\"connections-layer\">\n <!-- Outcome-based Connections -->\n @for (node of visualNodes(); track node.id) {\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\n @let targetNode = findNodeById(conn.targetNodeId);\n @if (targetNode) {\n <g class=\"outcome-connection-group\">\n <line [attr.x1]=\"node.position.x + 75\" [attr.y1]=\"node.position.y + 80\"\n [attr.x2]=\"targetNode.position.x + 75\" [attr.y2]=\"targetNode.position.y - 50\"\n class=\"connection-line outcome-line\" [attr.stroke]=\"getOutcomeColor(conn.outcome)\"\n stroke-width=\"2.5\"\n [attr.marker-end]=\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\"\n style=\"cursor: pointer\" (dblclick)=\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\"\n [attr.title]=\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\">\n <title>{{ conn.outcome }} → {{ targetNode.name }}</title>\n </line>\n <text [attr.x]=\"(node.position.x + targetNode.position.x) / 2 + 75\"\n [attr.y]=\"(node.position.y + targetNode.position.y) / 2 + 15\" class=\"connection-label\"\n text-anchor=\"middle\" dominant-baseline=\"middle\" [attr.fill]=\"getOutcomeColor(conn.outcome)\" font-size=\"11\"\n font-weight=\"600\" pointer-events=\"none\">\n {{ conn.outcome }}\n </text>\n </g>\n }\n }\n } @else {\n <!-- Simple Connections (backward compatibility) -->\n @for (targetId of node.connections; track targetId) {\n @let targetNode = findNodeById(targetId);\n @if (targetNode) {\n @let sx = node.position.x + 75;\n @let sy = node.position.y + 40;\n @let tx = targetNode.position.x + 75;\n @let ty = targetNode.position.y - 50;\n @let pathD = getConnectionPath(sx, sy, tx, ty);\n <g class=\"connection-group\">\n <path [attr.d]=\"pathD\" class=\"connection-line connection-hit\" fill=\"none\" stroke=\"transparent\"\n stroke-width=\"16\" pointer-events=\"stroke\" (dblclick)=\"disconnectNodes(node.id, targetId)\">\n </path>\n <path [attr.d]=\"pathD\" class=\"connection-line\" fill=\"none\" stroke=\"#64748b\" stroke-width=\"2\"\n stroke-linecap=\"round\" marker-end=\"url(#arrowhead-default)\" pointer-events=\"none\">\n </path>\n <title>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.connection-remove-hint' | translate | async }}</title>\n </g>\n }\n }\n }\n }\n\n <defs>\n <!-- Arrow markers: larger, rounded tip on line end (refX so tip touches path end) -->\n <marker id=\"arrowhead-default\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#64748b\" />\n </marker>\n <marker id=\"arrowhead-primary\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#8b5cf6\" />\n </marker>\n <marker id=\"arrowhead-success\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#10b981\" />\n </marker>\n <marker id=\"arrowhead-error\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#ef4444\" />\n </marker>\n <marker id=\"arrowhead-warning\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#f59e0b\" />\n </marker>\n <marker id=\"arrowhead-info\" markerWidth=\"12\" markerHeight=\"12\" refX=\"10\" refY=\"4\" orient=\"auto\">\n <polygon points=\"0 0, 12 4, 0 8\" fill=\"#3b82f6\" />\n </marker>\n </defs>\n </svg>\n\n <!-- Nodes -->\n @for (node of visualNodes(); track node.id) {\n <div class=\"visual-node\" [class.selected]=\"selectedNode()?.id === node.id\"\n [style.left.px]=\"node.position.x\" [style.top.px]=\"node.position.y\" [attr.data-node-id]=\"node.id\"\n draggable=\"true\" (dragstart)=\"onNodeDragStart($event, node)\" (drag)=\"onNodeDrag($event, node)\"\n (dragend)=\"onNodeDragEnd($event, node)\" (click)=\"selectNodeById(node)\">\n <div class=\"node-header\">\n <i [class]=\"node.icon\"></i>\n <span>{{ node.name }}</span>\n <span class=\"node-delete-wrap\" (click)=\"$event.stopPropagation()\">\n <ax-button look=\"blank\" size=\"sm\" class=\"node-delete\" (onClick)=\"deleteNodeFromCanvas(node.id)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </span>\n </div>\n\n <div class=\"node-body\">\n <small>{{ node.type }}</small>\n </div>\n\n <div class=\"node-connectors\">\n <!-- Input Connector -->\n <div class=\"connector connector-in\" title=\"Input\" (click)=\"onConnectorClick($event, node, 'in')\">\n </div>\n\n <!-- Output Connectors - Multiple outcomes support -->\n @if (node.outcomes && node.outcomes.length > 1) {\n <!-- Multiple outcomes: show separate port for each -->\n <div class=\"outcomes-container\">\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\n <div class=\"outcome-connector\" [class.active]=\"\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\n \" [attr.data-outcome]=\"outcome\" [title]=\"'Output: ' + outcome\"\n (click)=\"onOutcomeConnectorClick($event, node, outcome)\">\n <span class=\"outcome-label\">{{ outcome }}</span>\n <div class=\"outcome-dot\"></div>\n </div>\n }\n </div>\n } @else {\n <!-- Single outcome: show simple output connector -->\n <div class=\"connector connector-out\" [class.active]=\"connectionSource?.node?.id === node.id\"\n title=\"Output\" (click)=\"onConnectorClick($event, node, 'out')\"></div>\n }\n </div>\n </div>\n }\n\n <!-- Empty State -->\n @if (visualNodes().length === 0) {\n <div class=\"canvas-empty-state\">\n <i class=\"fa-light fa-diagram-project\"></i>\n <p>{{ '@workflow-management:workflow-studio.components.canvas-empty-state.title' | translate | async }}</p>\n <small>{{ '@workflow-management:workflow-studio.components.canvas-empty-state.description' | translate | async }}</small>\n </div>\n }\n </div>\n </div>\n\n <!-- Workflow Panel (when no node selected, Elsa-style) -->\n @if (!selectedNode() && showPropertiesPanel()) {\n <div class=\"properties-panel workflow-panel\">\n <div class=\"properties-header\">\n <i class=\"fa-light fa-diagram-project\"></i>\n <h4>{{ '@workflow-management:workflow-studio.components.workflow-panel.title' | translate | async }}</h4>\n <div class=\"header-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\" (onClick)=\"togglePropertiesPanel()\">\n <ax-prefix><i class=\"fa-light fa-angle-right\"></i></ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"properties-body\">\n <section class=\"workflow-panel-section\">\n <h5>{{ '@workflow-management:workflow-studio.components.workflow-panel.metadata' | translate | async }}</h5>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.workflow-panel.name' | translate | async }}</label>\n <ax-text-box class=\"form-input\" [value]=\"workflowSettings().name\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.workflow-panel.description' | translate | async }}</label>\n <ax-text-box class=\"form-input\" [value]=\"workflowSettings().description\" [disabled]=\"true\" />\n </div>\n </section>\n <div class=\"properties-divider\"></div>\n <section class=\"workflow-panel-section\">\n <h5>{{ '@workflow-management:workflow-studio.components.workflow-panel.information' | translate | async }}</h5>\n <div class=\"workflow-info-table\">\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.definition-id' | translate | async }}</span>\n <span class=\"info-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.workflow-panel.copy' | translate | async\" (onClick)=\"copyDefinitionIdToClipboard()\">\n <ax-prefix><i class=\"fa-light fa-copy\"></i></ax-prefix>\n </ax-button>\n </span>\n <span class=\"info-value\">{{ workflowSettings().definitionId || 'new-workflow' }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.version' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().version }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.status' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().isPublished ? ('@workflow-management:workflow-studio.components.workflow-panel.published' | translate | async) : ('@workflow-management:workflow-studio.components.workflow-panel.draft' | translate | async) }}</span>\n </div>\n <div class=\"workflow-info-row\">\n <span class=\"info-label\">{{ '@workflow-management:workflow-studio.components.workflow-panel.usable-as-activity' | translate | async }}</span>\n <span class=\"info-value\">{{ workflowSettings().usableAsActivity ? ('@general:terms.common.yes-no.yes' | translate | async) : ('@general:terms.common.yes-no.no' | translate | async) }}</span>\n </div>\n </div>\n </section>\n <p class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.workflow-panel.settings-hint' | translate | async }}</p>\n </div>\n </div>\n }\n\n <!-- Properties Panel (when a node is selected) -->\n @if (selectedNode() && showPropertiesPanel()) {\n <div class=\"properties-panel\">\n <div class=\"properties-header\">\n <i class=\"fa-light fa-sliders\"></i>\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\n <div class=\"header-actions\">\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\" (onClick)=\"togglePropertiesPanel()\">\n <ax-prefix><i class=\"fa-light fa-angle-right\"></i></ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" size=\"sm\" [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\" (onClick)=\"selectedNode.set(null)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n </div>\n <div class=\"properties-body\">\n @if (propertyViewerTabs().length > 0) {\n <div class=\"properties-widget-section\">\n <axp-property-viewer\n #propertyViewerRef\n [tabsInput]=\"propertyViewerTabs()\"\n [mode]=\"'simple'\"\n (onChanged)=\"onPropertyViewerChanged($event)\">\n </axp-property-viewer>\n </div>\n } @else {\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.id\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.type\" [disabled]=\"true\" />\n </div>\n <div class=\"property-row\">\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\n <ax-text-box class=\"form-input\" [value]=\"selectedNode()!.name\"\n (valueChange)=\"updateNodeProperty(selectedNode()!.id, 'name', $event)\" />\n </div>\n <p class=\"no-properties\">\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\n </p>\n }\n\n <div class=\"properties-divider\"></div>\n\n\n <h5>🔗 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\n <small class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections-hint' | translate | async }}</small>\n\n <!-- Outcome-based Connections -->\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\n <div class=\"connections-list\">\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\n @let targetNode = findNodeById(conn.targetNodeId);\n @if (targetNode) {\n <div class=\"connection-item outcome-connection\">\n <span class=\"outcome-badge\" [style.background]=\"getOutcomeColor(conn.outcome)\">\n {{ conn.outcome }}\n </span>\n <i class=\"fa-light fa-arrow-right\"></i>\n <span>{{ targetNode.name }}</span>\n <ax-button look=\"blank\" size=\"sm\" class=\"remove-btn\"\n [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.remove-connection' | translate | async\"\n (onClick)=\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n }\n }\n </div>\n } @else if (selectedNode()!.connections.length > 0) {\n <!-- Simple Connections (fallback) -->\n <div class=\"connections-list\">\n @for (targetId of selectedNode()!.connections; track targetId) {\n @let targetNode = findNodeById(targetId);\n @if (targetNode) {\n <div class=\"connection-item\">\n <i class=\"fa-light fa-arrow-right\"></i>\n <span>{{ targetNode.name }}</span>\n <ax-button look=\"blank\" size=\"sm\" class=\"remove-btn\"\n [title]=\"'@workflow-management:workflow-studio.components.properties-panel.actions.remove-connection' | translate | async\"\n (onClick)=\"disconnectNodes(selectedNode()!.id, targetId)\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n }\n }\n </div>\n } @else {\n <p class=\"no-properties\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\n }\n\n <!-- Available Outcomes Info -->\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\n <div class=\"properties-divider\"></div>\n <h5>📤 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\n <small class=\"properties-hint\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes-hint' | translate | async }}</small>\n <div class=\"outcomes-info\">\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\n <span class=\"outcome-tag\" [style.borderColor]=\"getOutcomeColor(outcome)\">\n <span class=\"outcome-dot\" [style.background]=\"getOutcomeColor(outcome)\"></span>\n {{ outcome }}\n </span>\n }\n </div>\n }\n\n <div class=\"properties-divider\"></div>\n\n <h5>📠{{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\n <pre class=\"properties-json\">{{ selectedNode() | json }}</pre>\n </div>\n </div>\n }\n\n <!-- Toggle Button for Properties (when closed) -->\n @if (!showPropertiesPanel()) {\n <ax-button look=\"blank\" class=\"sidebar-toggle-btn right\" (onClick)=\"togglePropertiesPanel()\"\n [title]=\"selectedNode() ? ('@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async) : ('@workflow-management:workflow-studio.components.workflow-panel.show-panel' | translate | async)\">\n <ax-prefix><i class=\"fa-light fa-sliders\"></i></ax-prefix>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n\n </div>\n\n <!-- Workflow Settings: opened via Layout Builder dialog in openWorkflowSettings() -->\n\n <!-- Workflow Execution Dialog -->\n @if (showExecutionDialog()) {\n <div class=\"execution-dialog-overlay\" (click)=\"closeExecutionDialog()\">\n <div class=\"execution-dialog\" (click)=\"$event.stopPropagation()\">\n <!-- Dialog Header -->\n <div class=\"execution-dialog-header\">\n <div class=\"header-content\">\n <i class=\"fa-light fa-play-circle\"></i>\n <div class=\"header-info\">\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\n async }}</h2>\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\n | async }}</p>\n </div>\n </div>\n <ax-button look=\"blank\" size=\"sm\" class=\"close-btn\" [disabled]=\"isExecuting()\" (onClick)=\"closeExecutionDialog()\">\n <ax-prefix><i class=\"fa-light fa-times\"></i></ax-prefix>\n </ax-button>\n </div>\n\n <!-- Dialog Body -->\n <div class=\"execution-dialog-body\">\n <!-- Workflow Info Panel (Before Execution) -->\n @if (!workflowInstanceState()) {\n <div class=\"workflow-info-panel\">\n <div class=\"start-section\">\n <div class=\"start-illustration\">\n <i class=\"fa-light fa-rocket\"></i>\n </div>\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\n async }}</h3>\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\n }}</p>\n <ax-button\n [text]=\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\"\n color=\"success\" size=\"lg\" (onClick)=\"startWorkflowExecution()\">\n </ax-button>\n </div>\n </div>\n }\n\n\n <!-- Custom UI for Registration -->\n @if (false) {\n <div class=\"registration-ui\">\n <div class=\"registration-card\">\n <div class=\"registration-icon\">\n <i class=\"fa-light fa-user-circle\"></i>\n </div>\n <h3>ÙØ±Ø¢ÛŒÙ†Ø¯ ثبت‌نام</h3>\n <p class=\"registration-desc\">\n این Ùلو شامل چند مرØÙ„Ù‡ است Ú©Ù‡ داده‌های کاربر را جمع‌آوری کرده Ùˆ در نهایت ØØ³Ø§Ø¨ کاربری ایجاد می‌کند.\n </p>\n\n @if (workflowInstanceState()?.status === 'running') {\n <div class=\"registration-progress\">\n <div class=\"progress-spinner\">\n <i class=\"fa-light fa-spinner-third fa-spin\"></i>\n </div>\n <p>در ØØ§Ù„ اجرای مراØÙ„ ثبت‌نام...</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'finished') {\n <div class=\"registration-success\">\n <i class=\"fa-light fa-check-circle\"></i>\n <h4>ثبت‌نام با موÙقیت انجام شد!</h4>\n <p>ØØ³Ø§Ø¨ کاربری شما ایجاد شد Ùˆ به زودی به داشبورد منتقل خواهید شد.</p>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Default Execution View -->\n @if (workflowInstanceState()) {\n <div class=\"default-execution-view\">\n <div class=\"execution-status\">\n @if (workflowInstanceState()?.status === 'running') {\n <div class=\"status-running\">\n <i class=\"fa-light fa-spinner-third fa-spin\"></i>\n <h3>در ØØ§Ù„ اجرا...</h3>\n <p>Workflow در ØØ§Ù„ اجرا است. Ù„Ø·ÙØ§Ù‹ صبر کنید.</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'finished') {\n <div class=\"status-finished\">\n <i class=\"fa-light fa-check-circle\"></i>\n <h3>اجرا با موÙقیت تکمیل شد</h3>\n <p>Workflow با موÙقیت اجرا شد Ùˆ تمام Activities انجام شدند.</p>\n </div>\n }\n\n @if (workflowInstanceState()?.status === 'error') {\n <div class=\"status-error\">\n <i class=\"fa-light fa-times-circle\"></i>\n <h3>خطا در اجرا</h3>\n <p>{{ workflowInstanceState()?.error }}</p>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Execution Logs Panel -->\n @if (workflowInstanceState() && executionLogs().length > 0) {\n <div class=\"execution-logs-panel\">\n <h3><i class=\"fa-light fa-terminal\"></i> لاگ‌های اجرا</h3>\n <div class=\"logs-container-compact\">\n @for (log of executionLogs(); track $index) {\n <div class=\"log-item-compact\" [class]=\"'log-' + log.level\">\n <span class=\"log-time\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\n <span class=\"log-icon\">\n @switch (log.level) {\n @case ('info') {\n <i class=\"fa-light fa-info-circle\"></i>\n }\n @case ('success') {\n <i class=\"fa-light fa-check-circle\"></i>\n }\n @case ('warning') {\n <i class=\"fa-light fa-exclamation-triangle\"></i>\n }\n @case ('error') {\n <i class=\"fa-light fa-times-circle\"></i>\n }\n }\n </span>\n <span class=\"log-message\">{{ log.message }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Dialog Footer -->\n <div class=\"execution-dialog-footer\">\n <div class=\"footer-info\">\n @if (workflowInstanceState()?.startTime) {\n <span class=\"time-info\">\n <i class=\"fa-light fa-clock\"></i>\n شروع: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\n </span>\n }\n @if (workflowInstanceState()?.endTime) {\n <span class=\"time-info\">\n <i class=\"fa-light fa-flag-checkered\"></i>\n پایان: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\n </span>\n }\n </div>\n <div class=\"footer-actions\">\n <ax-button\n [text]=\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\"\n color=\"secondary\" size=\"md\" [disabled]=\"isExecuting()\" (onClick)=\"closeExecutionDialog()\">\n </ax-button>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,MAAM,EAAE,oBAAoB;CAC7B;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,MAAM,CAAC,MAAM;AACnB,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,IAAI,EAAE,6BAA6B;AACpC,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,kBAAkB,EAAE;AAClB,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,mBAAA,CAAqB;AAC/C,YAAA,KAAK,EAAE,8EAA8E;AACrF,YAAA,WAAW,EAAE,+EAA+E;AAC5F,YAAA,IAAI,EAAE,6BAA6B;AACpC,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,iBAAA,CAAmB;AAC7C,YAAA,KAAK,EAAE,0EAA0E;AACjF,YAAA,WAAW,EAAE,2EAA2E;AACxF,YAAA,IAAI,EAAE,yBAAyB;AAChC,SAAA;AACD,QAAA,kBAAkB,EAAE;AAClB,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,mBAAA,CAAqB;AAC/C,YAAA,KAAK,EAAE,oEAAoE;AAC3E,YAAA,WAAW,EAAE,qEAAqE;AAClF,YAAA,IAAI,EAAE,0BAA0B;AACjC,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,WAAA,CAAa;AACvC,YAAA,KAAK,EAAE,4DAA4D;AACnE,YAAA,WAAW,EAAE,6DAA6D;AAC1E,YAAA,IAAI,EAAE,kBAAkB;AACzB,SAAA;;;;;;;;AAQF,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,cAAc,EAAE;AACd,YAAA,eAAe,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,2BAAA,CAA6B;AAC9D,YAAA,iBAAiB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,6BAAA,CAA+B;AAClE,YAAA,aAAa,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,yBAAA,CAA2B;AAC1D,YAAA,oBAAoB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,gCAAA,CAAkC;AACxE,YAAA,mBAAmB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,+BAAA,CAAiC;AACtE,YAAA,eAAe,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,2BAAA,CAA6B;AAC9D,YAAA,gBAAgB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,4BAAA,CAA8B;AAChE,YAAA,qBAAqB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,iCAAA,CAAmC;AAC1E,YAAA,kBAAkB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,8BAAA,CAAgC;AACpE,YAAA,iBAAiB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,6BAAA,CAA+B;AAClE,YAAA,sBAAsB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,kCAAA,CAAoC;AAC5E,YAAA,yBAAyB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,qCAAA,CAAuC;AAClF,YAAA,qBAAqB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,iCAAA,CAAmC;AAC1E,YAAA,cAAc,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,0BAAA,CAA4B;AAC5D,YAAA,qBAAqB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,iCAAA,CAAmC;AAC1E,YAAA,iBAAiB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,6BAAA,CAA+B;AAClE,YAAA,oBAAoB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,gCAAA,CAAkC;AACxE,YAAA,gBAAgB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,4BAAA,CAA8B;AAChE,YAAA,qBAAqB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,iCAAA,CAAmC;AAC1E,YAAA,sBAAsB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,kCAAA,CAAoC;AAC5E,YAAA,0BAA0B,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,sCAAA,CAAwC;AACpF,YAAA,uBAAuB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,mCAAA,CAAqC;AAC9E,YAAA,iBAAiB,EAAE,CAAA,EAAG,MAAM,CAAC,MAAM,CAAA,6BAAA,CAA+B;AACnE,SAAA;AACF,KAAA;;;MCtEU,yCAAyC,CAAA;IAC7C,OAAO,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAW,MAAM;AAC1E,YAAA,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM,CAAC,IAAI;AACpB,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,MAAM,GAAG,CAAC,UAAkB,EAAE,UAAkB,EAAA;QAC9C,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;YACzC,QAAQ,UAAU;AAChB,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;oBAC9C,OAAO,CAAC,MAAM,OAAO,8EAA2D,CAAC,EAAE,OAAO,EAAE;AAC9F,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI;oBAC5C,OAAO,CAAC,MAAM,OAAO,4EAAuD,CAAC,EAAE,OAAO,EAAE;AAC1F,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;oBAC9C,OAAO,CAAC,MAAM,OAAO,8EAA2D,CAAC,EAAE,OAAO,EAAE;AAC9F,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI;oBACtC,OAAO,CAAC,MAAM,OAAO,qEAAyC,CAAC,EAAE,OAAO,EAAE;;QAEhF;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;AAChC,QAAA,OAAO,OAAO,CAAC,OAAO,CACpB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAC7E;IACH;8GA9BW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzC,yCAAyC,EAAA,CAAA,CAAA;;2FAAzC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD;;;ACLM,MAAM,6BAA6B,GAAG;AAC3C,IAAA,IAAI,EAAE,0BAA0B;AAChC,IAAA,QAAQ,EAAE,8BAA8B;AACxC,IAAA,mBAAmB,EAAE,0CAA0C;AAC/D,IAAA,iBAAiB,EAAE,wCAAwC;AAC3D,IAAA,cAAc,EAAE,qCAAqC;AACrD,IAAA,UAAU,EAAE,gCAAgC;AAC5C,IAAA,mBAAmB,EAAE,0CAA0C;CACvD;;MCCG,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAoEpD;IAlEE,MAAM,OAAO,CAAC,OAA+B,EAAA;QAC3C,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAC5E,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI;QAEpE,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAC/D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,gBAAA;oBACE,IAAI,EAAE,iBAAiB,CAAC,SAAS;AACjC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,gCAAgC;oBACtC,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;AACjD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,mBAAmB;AACvD,gBAAA,IAAI,EAAE,4EAA4E;AAClF,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC7F,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;AACjD,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,iBAAA;AACF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,iBAAiB;AACrD,gBAAA,IAAI,EAAE,wEAAwE;AAC9E,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3F,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI;AAC/C,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,iBAAA;AACF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,cAAc;AAClD,gBAAA,IAAI,EAAE,kEAAkE;gBACxE,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,2BAAA,CAA6B;AAC9C,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,iBAAA;AACF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,mBAAmB;AACvD,gBAAA,IAAI,EAAE,sDAAsD;AAC5D,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC7F,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;AACjD,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;AC5ED;;;AAGG;AACI,MAAM,sCAAsC,GAAsB;AACvE,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,yBAAyB,CAAC,UAAU,EAAE,UAAU,CAAC;CACzD;;ACLM,MAAM,0CAA0C,GAAsB;IAC3E,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,2BAA2B,CAC5B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,yBAAyB,EACzB,wBAAwB,CACzB;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,gBAAgB,EAAE,UAAU,CAAC;AACnE,YAAA,UAAU,EAAE,yBAAyB,CAAC,aAAa,EAAE,OAAO,CAAC;AAC7D,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB;AACnE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,2DAA2D,GAAsB;IAC5F,UAAU,EAAE,mBAAmB,CAAC,IAAI;AACpC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,mBAAmB;AACtB,QAAA,IAAI,EAAE,yCAAyC;AAC/C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,mCAAmC,EACnC,8BAA8B,CAC/B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,wBAAwB,EACxB,wBAAwB,CACzB;AACD,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB;AACxE,SAAA;AACF,KAAA;CACF;;ACnBM,MAAM,0DAA0D,GAAsB;IAC3F,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,uCAAuC;AAC7C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,mCAAmC,EACnC,iCAAiC,CAClC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,0BAA0B,EAC1B,2BAA2B,CAC5B;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;AACxD,YAAA,UAAU,EAAE,yBAAyB,CAAC,WAAW,EAAE,UAAU,CAAC;AAC9D,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,sBAAsB;AACzE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,yDAAyD,GAAsB;IAC1F,UAAU,EAAE,kBAAkB,CAAC,IAAI;AACnC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,kBAAkB;AACrB,QAAA,IAAI,EAAE,sCAAsC;AAC5C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,iCAAiC,EACjC,gCAAgC,CACjC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,0BAA0B,EAC1B,+BAA+B,CAChC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,YAAA,UAAU,EAAE,yBAAyB,CAAC,UAAU,EAAE,SAAS,CAAC;AAC5D,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB;AAC5E,SAAA;AACF,KAAA;CACF;;ACvBM,MAAM,kDAAkD,GAAsB;IACnF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,8BAA8B;AACpC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,0BAA0B,EAC1B,4BAA4B,CAC7B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,kCAAkC,CACnC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC;AAC1D,YAAA,UAAU,EAAE,yBAAyB,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;AACnF,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc;AACjE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,sCAAsC,GAAsB;IACvE,UAAU,EAAE,mBAAmB,CAAC,IAAI;AACpC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,mBAAmB;AACtB,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,yBAAyB,EACzB,qBAAqB,CACtB;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAAC,gBAAgB,EAAE,YAAY,CAAC;AAChE,YAAA,KAAK,EAAE,yBAAyB,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;AAC5E,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa;AAC/D,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,UAAU,EAAE;AACV,gBAAA;AACE,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,sCAAsC;AAC7C,oBAAA,KAAK,EAAE,KAAK;AACb,iBAAA;gBACD,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,uCAAuC,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC9E,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,uCAAuC,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9E,aAAA;AACF,SAAA;AACF,KAAA;CACF;;AC5BM,MAAM,qDAAqD,GAAsB;IACtF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,kCAAkC;AACxC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,8BAA8B,EAC9B,4BAA4B,CAC7B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,kCAAkC,EAClC,+BAA+B,CAChC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,YAAA,UAAU,EAAE,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC;AAClE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB;AACpE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,6CAA6C,GAAsB;IAC9E,UAAU,EAAE,kBAAkB,CAAC,IAAI;AACnC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,kBAAkB;AACrB,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,0BAA0B,CAC3B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,yBAAyB,EACzB,mBAAmB,CACpB;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,YAAA,UAAU,EAAE,yBAAyB,CAAC,SAAS,EAAE,MAAM,CAAC;AACxD,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,kBAAkB;AACrE,SAAA;AACF,KAAA;CACF;;ACvBM,MAAM,iDAAiD,GAAsB;IAClF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,6BAA6B;AACnC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,iCAAiC,EACjC,6BAA6B,CAC9B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,8BAA8B,EAC9B,wBAAwB,CACzB;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC;AACzD,YAAA,UAAU,EAAE,yBAAyB,CAAC,eAAe,EAAE,cAAc,CAAC;AACtE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB;AACxE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,gDAAgD,GAAsB;IACjF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,4BAA4B;AAClC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,gCAAgC,EAChC,4BAA4B,CAC7B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,2BAA2B,EAC3B,uBAAuB,CACxB;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvD,YAAA,UAAU,EAAE,yBAAyB,CAAC,WAAW,EAAE,WAAW,CAAC;AAC/D,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,mBAAmB;AACtE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,gDAAgD,GAAsB;IACjF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,4BAA4B;AAClC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,mCAAmC,EACnC,qCAAqC,CACtC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,iCAAiC,EACjC,kCAAkC,CACnC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,cAAc,EAAE,YAAY,CAAC;AACnE,YAAA,UAAU,EAAE,yBAAyB,CAAC,eAAe,EAAE,aAAa,CAAC;AACrE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB;AACxE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,qDAAqD,GAAsB;IACtF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,mCAAmC;AACzC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,uCAAuC,CACxC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,6BAA6B,EAC7B,mCAAmC,CACpC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,YAAY,EAAE,WAAW,CAAC;AAChE,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC;AACvD,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB;AACpE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,qCAAqC,GAAsB;IACtE,UAAU,EAAE,kBAAkB,CAAC,IAAI;AACnC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,kBAAkB;AACrB,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,2BAA2B,EAC3B,2BAA2B,CAC5B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,qCAAqC,EACrC,oCAAoC,CACrC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC;AACvD,YAAA,QAAQ,EAAE,KAAK;;AAEf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB;AACvE,SAAA;AACF,KAAA;CACF;;ACxBM,MAAM,oDAAoD,GAAsB;IACrF,UAAU,EAAE,kBAAkB,CAAC,IAAI;AACnC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,kBAAkB;AACrB,QAAA,IAAI,EAAE,gCAAgC;AACtC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,uCAAuC,EACvC,+BAA+B,CAChC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,8BAA8B,EAC9B,+BAA+B,CAChC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC;AACnD,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC;AACvD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe;AAClE,SAAA;AACF,KAAA;CACF;;ACvBM,MAAM,qDAAqD,GAAsB;IACtF,UAAU,EAAE,kBAAkB,CAAC,IAAI;AACnC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,kBAAkB;AACrB,QAAA,IAAI,EAAE,iCAAiC;AACvC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,wCAAwC,EACxC,8BAA8B,CAC/B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,8BAA8B,CAC/B;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC;AACvD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB;AACnE,SAAA;AACF,KAAA;CACF;;ACvBM,MAAM,8CAA8C,GAAsB;IAC/E,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,+BAA+B,EAC/B,uBAAuB,CACxB;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,kCAAkC,EAClC,uCAAuC,CACxC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,iBAAiB,EAAE,cAAc,CAAC;AACxE,YAAA,UAAU,EAAE,yBAAyB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;AAClF,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB;AACvE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,sCAAsC,GAAsB;IACvE,UAAU,EAAE,mBAAmB,CAAC,IAAI;AACpC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,mBAAmB;AACtB,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,8BAA8B,EAC9B,kCAAkC,CACnC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;AAClF,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB;AACpE,SAAA;AACF,KAAA;CACF;;AChBM,MAAM,mDAAmD,GAAsB;IACpF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,+BAA+B;AACrC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,2BAA2B,EAC3B,mCAAmC,CACpC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,+CAA+C,EAC/C,6CAA6C,CAC9C;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,YAAA,UAAU,EAAE,yBAAyB,CAAC,cAAc,EAAE,YAAY,CAAC;AACnE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,uBAAuB;AAC1E,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,yDAAyD,GAAsB;IAC1F,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,uCAAuC;AAC7C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,qCAAqC,EACrC,wCAAwC,CACzC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,2BAA2B,EAC3B,gCAAgC,CACjC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,YAAA,UAAU,EAAE,yBAAyB,CAAC,cAAc,EAAE,YAAY,CAAC;AACnE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB;AACxE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,yDAAyD,GAAsB;IAC1F,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,wCAAwC;AAC9C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,gCAAgC,EAChC,kCAAkC,CACnC;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,qCAAqC,EACrC,gCAAgC,CACjC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC;AACtD,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,0BAA0B;AAC7E,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,0DAA0D,GAAsB;IAC3F,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,wCAAwC;AAC9C,QAAA,KAAK,EAAE,yBAAyB,CAC9B,sCAAsC,EACtC,yCAAyC,CAC1C;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,4BAA4B,EAC5B,iCAAiC,CAClC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,YAAA,UAAU,EAAE,yBAAyB,CAAC,eAAe,EAAE,aAAa,CAAC;AACrE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,sBAAsB;AACzE,SAAA;AACF,KAAA;CACF;;ACrBM,MAAM,oCAAoC,GAAsB;IACrE,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,yBAAyB,CAC9B,mCAAmC,EACnC,0CAA0C,CAC3C;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAAC,0BAA0B,EAAE,iCAAiC,CAAC;AAC/F,YAAA,UAAU,EAAE,yBAAyB,CAAC,YAAY,EAAE,WAAW,CAAC;AAChE,YAAA,UAAU,EAAE,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC;AACvD,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe;AAClE,SAAA;AACF,KAAA;CACF;;AClBM,MAAM,qDAAqD,GAAsB;IACtF,UAAU,EAAE,iBAAiB,CAAC,IAAI;AAClC,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,iBAAiB;AACpB,QAAA,IAAI,EAAE,kCAAkC;AACxC,QAAA,KAAK,EAAE,yBAAyB,CAC9B,yCAAyC,EACzC,6BAA6B,CAC9B;AACD,QAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC5C,UAAU,EAAE,CAAC,sCAAsC,CAAC;AACpD,QAAA,OAAO,EAAE;AACP,YAAA,KAAK,EAAE,yBAAyB,CAC9B,sCAAsC,EACtC,iCAAiC,CAClC;AACD,YAAA,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;AACtD,YAAA,UAAU,EAAE,yBAAyB,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACzE,YAAA,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB;AACpE,SAAA;AACF,KAAA;CACF;;ACGD;AAEA;AAEA,MAAM,mCAAmC,GAAwB;IAC/D,oCAAoC;IACpC,qDAAqD;IACrD,gDAAgD;IAChD,oDAAoD;IACpD,qDAAqD;IACrD,qCAAqC;IACrC,sCAAsC;IACtC,iDAAiD;IACjD,6CAA6C;IAC7C,qDAAqD;IACrD,qDAAqD;IACrD,gDAAgD;IAChD,sCAAsC;IACtC,8CAA8C;IAC9C,yDAAyD;IACzD,0DAA0D;IAC1D,yDAAyD;IACzD,mDAAmD;IACnD,0DAA0D;IAC1D,yDAAyD;IACzD,2DAA2D;IAC3D,kDAAkD;IAClD,0CAA0C;CAC3C;AAED;AAEA;AAEA;;AAEG;MAEU,mCAAmC,CAAA;IAC9C,UAAU,GAAA;AACR,QAAA,OAAO,EAAE;IACX;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,mCAAmC;IAC5C;8GAPW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnC,mCAAmC,EAAA,CAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;;ACnED;AAKA;AAEA;AAEO,MAAM,oCAAoC,GAAoB;AACnE,IAAA,IAAI,EAAE,+BAA+B;AACrC,IAAA,KAAK,EAAE,+BAA+B;AACtC,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,WAAW,EAAE,2DAA2D;AACxE,IAAA,UAAU,EAAE,2BAA2B;AACvC,IAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAC1C,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,uBAAuB,EAAE,eAAe;AACxC,IAAA,UAAU,EAAE;QACV,iBAAiB;QACjB,sBAAsB;AACtB,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;AACtD,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE;AACP,wBAAA,WAAW,EAAE,aAAa;AAC3B,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MACT,OAAO,uGAAuD,CAAC,CAAC,IAAI,CAClE,CAAC,CAAC,KAAK,CAAC,CAAC,iDAAiD,CAC3D;AACJ,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,MACT,OAAO,uGAAuD,CAAC,CAAC,IAAI,CAClE,CAAC,CAAC,KAAK,CAAC,CAAC,iDAAiD,CAC3D;AACJ,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,MACT,OAAO,yGAAyD,CAAC,CAAC,IAAI,CACpE,CAAC,CAAC,KAAK,CAAC,CAAC,mDAAmD,CAC7D;AACJ,SAAA;AACF,KAAA;CACF;AAED;;ACtDA;AAEA;AAEA,MAAM,gBAAgB,GAAG,CAAC,oCAAoC,CAAC;MAGlD,oCAAoC,CAAA;IAC/C,UAAU,GAAA;AACR,QAAA,OAAO,gBAAgB;IACzB;8GAHW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;ACwCD;AAEA;;;;;;;;;;;;AAYG;MAEU,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAqDnE,IAAA;;;IA/CC,MAAM,OAAO,CACX,KAA4B,EAAA;AAE5B,QAAA,IAAI;;AAEF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;AACvE,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;;AAG3E,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CACnD,KAAK,EACL,OAAO,EACP,KAAK,CAAC,IAAI,IAAI,SAAS,EACvB,KAAK,CAAC,SAAS,IAAI,YAAY,EAC/B,KAAK,CAAC,QAAQ,IAAI,KAAK,EACvB,KAAK,CAAC,aAAa,IAAI,QAAQ,CAChC;AAED,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,KAAK,IAAI;YAC9C,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ;AAE3C,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,gCAAA,EAAmC,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA,WAAA,CAAa,CAAC;YAElG,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,EAA4B;AAClC,gBAAA,QAAQ,EAAE;oBACR,OAAO;AACR,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,KAAK,CAAC;YAEhF,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,oCAAoC;AAC5D,iBAAA;AACD,gBAAA,IAAI,EAAE,EAA4B;AAClC,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA;aACF;QACH;IACF;8GAtDW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACnED;AAyDA;AAEA;;;;;;;;;;;;;;;;;;AAkBG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AA8HvD,IAAA;;;IAxHC,MAAM,OAAO,CAAC,KAA2B,EAAA;AACvC,QAAA,IAAI;;AAEF,YAAA,IAAI,UAAyB;AAE7B,YAAA,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;;AAEpC,gBAAA,IAAI;oBACF,UAAU,GAAG,4BAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;gBAClE;gBAAE,OAAO,KAAU,EAAE;oBACnB,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;gBAC1D;YACF;iBAAO;;AAEL,gBAAA,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;YACtC;;YAGA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACnC,gBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;YAC1D;;AAGA,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI;AAC/B,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,KAAK,EAAE,+BAA+B;AACtC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC5B,qBAAA;AACD,oBAAA;AACE,wBAAA,KAAK,EAAE,+BAA+B;AACtC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;AACzD,qBAAA;AACF,iBAAA;aACF;;AAGD,YAAA,MAAM,YAAY,GAAyB;AACzC,gBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ;AAC9B,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5B,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE;AACN,wBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;AAC5B,wBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;AAC7B,qBAAA;AACF,iBAAA;aACF;;YAGD,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAuB,CAAC,OAAO,KAAI;AACvE,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE;oBACjD,KAAK,EAAE,YAAY,CAAC,KAAK;AACzB,oBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;AACxB,oBAAA,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI;AACvE,oBAAA,oBAAoB,EAAE,KAAK;AAC3B,oBAAA,SAAS,EAAE,KAAK;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,MAAM,EAAE,YAAY;AACpB,wBAAA,QAAQ,EAAE,CAAC,MAAW,KAAI;AACxB,4BAAA,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,UAAU,EAAE;gCACvC,MAAM,CAAC,KAAK,EAAE;4BAChB;AACA,4BAAA,OAAO,CAAC;gCACN,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,YAAY,CAAC,OAAO;AACpD,gCAAA,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,QAAQ;AACpD,6BAAA,CAAC;wBACJ,CAAC;AACF,qBAAA;AACF,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,MAAM,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE;AAC1C,YAAA,IAAI,UAAU,GAAG,QAAQ,CAAC;AAE1B,YAAA,MAAM,mBAAmB,GAAG,YAAY,EAAE,MAAM;AAChD,YAAA,IAAI,cAAsD;YAE1D,IAAI,mBAAmB,EAAE;gBACvB,cAAc,GAAG,mBAAmB;YACtC;AAEA,YAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;gBACtC,UAAU,GAAG,cAAc;YAC7B;iBAAO,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,IAAI,MAAM,IAAI,cAAc,EAAE;AAC3F,gBAAA,UAAU,GAAG,cAAc,CAAC,IAAI,IAAI,QAAQ;YAC9C;YACA,MAAM,MAAM,GAAG,UAAU;YAEzB,OAAO,CAAC,GAAG,CAAC,CAAA,qDAAA,EAAwD,MAAM,CAAA,CAAE,EAAE,MAAM,CAAC;YAErF,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,CAAC;YAE9E,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,6BAA6B;AACrD,iBAAA;AACD,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA;aACF;QACH;IACF;8GA9HW,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;;;AC9ED;AA4EA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MAEU,iBAAiB,CAAA;;;;;;AAU5B;;;;;;AAMG;IACH,MAAM,OAAO,CAAC,KAAqB,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,UAAU,CAAC;AAEvE,QAAA,IAAI;;YAEF,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACtC,gBAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;YACtE;;YAGA,MAAM,iBAAiB,GAAa,EAAE;AACtC,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO;YAChC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI;AACF,oBAAA,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,UAAU;AACpF,oBAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;AACpC,oBAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;oBACpC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE;wBACzC,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI;AAC9C,wBAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,4BAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpE;gBACF;AAAE,gBAAA,MAAM;;gBAER;YACF;AACA,YAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC5C;;;YAIA,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;oBAC3B,MAAM,EAAE,SAAS;AAClB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,SAAS;AACnB,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC;YAEzE,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,8BAA8B;AACtD,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA;aACF;QACH;IACF;8GA3EW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACxDD;AAEA;;;;;;;;;;;AAWG;MAEU,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAgDnE,IAAA;;;IA1CC,MAAM,OAAO,CACX,KAAqB,EAAA;AAErB,QAAA,IAAI;;AAEF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;;AAGjG,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;AAC9B,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;AACtC,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;AAC9B,gBAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK;AAChD,aAAA,CAAC;YAEF,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,EAAqB;AAC3B,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC;YAEjE,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,mCAAmC;AAC3D,iBAAA;AACD,gBAAA,IAAI,EAAE,EAAqB;AAC3B,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA;aACF;QACH;IACF;8GAjDW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACND;AAEA;;;;;;;;;;;;AAYG;MAEU,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAsInE,IAAA;;;IAhIC,MAAM,OAAO,CACX,KAA4B,EAAA;AAE5B,QAAA,IAAI;YACF,OAAO,CAAC,GAAG,CAAC,CAAA,2DAAA,EAA8D,KAAK,CAAC,QAAQ,CAAA,CAAE,CAAC;;AAG3F,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC;kBAClB,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO;kBAC1D,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6EAA6E,CAAC;;YAG/H,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAE5D,YAAA,IAAI,YAAY,CAAC,SAAS,EAAE;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8DAAA,CAAgE,CAAC;gBAC7E,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,EAAE;AACb,wBAAA,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,WAAW;AACrB,qBAAA;iBACF;YACH;YAEA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAEzC,YAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,QAAQ,CAAA,CAAE,CAAC;YAEzF,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE;oBACJ,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,QAAQ;AACT,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,KAAK,CAAC;YAE/E,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,6BAA6B;AACrD,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACrB,iBAAA;aACF;QACH;IACF;;;AAMA;;AAEG;IACK,MAAM,mBAAmB,CAC/B,OAAe,EAAA;AAEf,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAA2D,CAAC,MAAM,KAAI;YAC3E;iBACG,QAAQ,CAAC,0EAA0E;iBACnF,UAAU,CAAC,OAAO;iBAClB,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACtC,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;gBAChB;qBACG,YAAY,CAAC,QAAQ;AACrB,qBAAA,SAAS,CAAC,wEAAwE,EAAE,CAAC,KAAK,KAAI;AAC7F,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAClB,KAAK,CAAC,YAAY,CAAC;AACjB,wBAAA,WAAW,EAAE,8EAA8E;AAC3F,wBAAA,SAAS,EAAE,IAAI;AAChB,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,6EAA6E,EAAE,CAAC,KAAK,KAAI;AAClG,oBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;oBACvB,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;AACtD,wBAAA,WAAW,EAAE;AACX,4BAAA;AACE,gCAAA,IAAI,EAAE,UAAU;AAChB,gCAAA,OAAO,EAAE;AACP,oCAAA,OAAO,EAAE,gFAAgF;AAC1F,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB;qBACG,MAAM,CAAC,+BAA+B;qBACtC,MAAM,CAAC,yEAAyE,CAAC;AACtF,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE;AACnC,oBAAA,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;gBAC5D;gBACA,MAAM,QAAQ,GAAG,OAAgD;gBACjE,OAAO;AACL,oBAAA,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;AACtC,oBAAA,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AACtB,oBAAA,SAAS,EAAE,KAAK;iBACjB;AACH,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AAET,QAAA,OAAO,MAAM;IACf;8GAvIW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;AC1ED;AAoEA;AAEA;;;;;;;;;;;;;;;AAeG;MAEU,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC1D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAyMnE,IAAA;;;IAnMC,MAAM,OAAO,CACX,KAA4B,EAAA;AAE5B,QAAA,MAAM,EACJ,MAAM,EACN,MAAM,EACN,iBAAiB,GAAG,KAAK,EACzB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,IAAI,GACL,GAAG,KAAK;AAET,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;AAClG,iBAAA;AACD,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACrB,iBAAA;aACF;QACH;AAEA,QAAA,IAAI,SAAc;AAElB,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAElE,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACxD,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;YAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAE5C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AAE7E,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;YACvC;AAAO,iBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;YACvC;AAEA,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAAC;YACnD;AAEA,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxB,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACjD,YAAA,CAAC,CAAC;AAEF,YAAA,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;AAE9B,YAAA,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE;gBACnC,SAAS,CAAC,KAAK,EAAE;gBACjB,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,QAAQ,EAAE;AACR,wBAAA,OAAO,EAAE,WAAW;AACrB,qBAAA;iBACF;YACH;AAEA,YAAA,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE;AACnC,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;gBAEnC,IAAI,iBAAiB,EAAE;;oBAErB,SAAS,CAAC,KAAK,EAAE;oBACjB,OAAO;AACL,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE;AAC/B,wBAAA,QAAQ,EAAE;AACR,4BAAA,OAAO,EAAE,WAAW;AACrB,yBAAA;qBACF;gBACH;;AAGA,gBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI;oBACF,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAmF;oBAEhI,IAAI,CAAC,QAAQ,EAAE;wBACb,OAAO;AACL,4BAAA,OAAO,EAAE,KAAK;AACd,4BAAA,OAAO,EAAE;gCACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,qDAAqD,CAAC;AAC1G,6BAAA;AACD,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,QAAQ,EAAE;AACR,gCAAA,OAAO,EAAE,WAAW;AACrB,6BAAA;yBACF;oBACH;AAEA,oBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;oBACtC,SAAS,CAAC,KAAK,EAAE;AAEjB,oBAAA,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI;0BAC/D,MAAyB,CAAC;AAC7B,0BAAG,MAAuC,EAAE,IAAI,EAAE,EAAE,IAAK,MAAc,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;oBAEzF,OAAO;AACL,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,IAAI,EAAE;4BACJ,EAAE,EAAE,EAAE,IAAI,EAAE;4BACZ,MAAM,EAAE,OAAO,IAAI,EAAE;AACtB,yBAAA;AACD,wBAAA,QAAQ,EAAE;AACR,4BAAA,OAAO,EAAE,MAAM;AAChB,yBAAA;AACD,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,+CAA+C,CAAC;AACpG,yBAAA;qBACF;gBACH;gBAAE,OAAO,KAAU,EAAE;AACnB,oBAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC;AACxE,oBAAA,MAAM,KAAK;gBACb;wBAAU;AACR,oBAAA,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC;gBAC9B;YACF;YAEA,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,yCAAyC,CAAC;AAC9F,iBAAA;AACD,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACrB,iBAAA;aACF;QACH;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;YAE1D,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EACF,KAAK,YAAY;0BACb,KAAK,CAAC;0BACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wCAAwC,CAAC;AAC7F,iBAAA;AACD,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE,WAAW;AACrB,iBAAA;aACF;QACH;IACF;;AAIA;;AAEG;AACK,IAAA,qBAAqB,CAAC,KAAqB,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;QACnD;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAChC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,GAAG,EAAE;YACtF;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE;YACX;QACF;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,KAAgC,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACpE,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAChC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE;YAC9F;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE;YACX;QACF;AACA,QAAA,OAAO,EAAE;IACX;8GA3MW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACjFD;;;;;;;AAOG;MAEU,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;;AAIqB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACjD,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAC7D,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAC9C,CAAC,IAAI,EAAY;AAsErB,IAAA;;;IAhEG,MAAM,OAAO,CAAC,UAAkB,EAAA;;QAE5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,UAAU;qBACpB;AACJ;AACJ,SAAA,CAAC;QACF,OAAO,MAAM,CAAC,KAAgC;IAClD;IAEA,MAAM,OAAO,CAAC,IAAY,EAAA;;QAEtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,IAAI;qBACd;AACJ;AACJ,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAA0B;QACnD;;QAGA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,IAAI;qBACd;AACJ;AACJ,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAA0B;QACnD;AAEA,QAAA,OAAO,SAAS;IACpB;8GA1ES,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvC,uCAAuC,EAAA,CAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;MCSY,uBAAuB,CAAA;AAHpC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC1D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE/C,IAAA,CAAA,OAAO,GAAG,EAAE;AAyFvB,IAAA;IAvFC,MAAM,OAAO,CAAC,KAAuB,EAAA;AACnC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;AAE9E,QAAA,IAAI,SAAc;AAElB,QAAA,IAAI;YACF,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA,EAAG,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAChF,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxB,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACjD,YAAA,CAAC,CAAC;AAEF,YAAA,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;AAC9B,YAAA,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,QAAQ,EAAE;gBAClC,SAAS,CAAC,KAAK,EAAE;gBACjB,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;iBAChC;YACH;AAAO,iBAAA,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzC,gBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;gBACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAmD;gBAEhG,IAAI,CAAC,QAAQ,EAAE;oBACb,OAAO;AACL,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,qDAAqD,CAAC;AAC1G,yBAAA;qBACF;gBACH;AACA,gBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;gBACtC,IAAI,MAAM,EAAE;oBACV,SAAS,CAAC,KAAK,EAAE;oBAEjB,OAAO;AACL,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,IAAI,EAAE;4BACJ,EAAE,EAAE,MAAM,CAAC,EAAE;AACd,yBAAA;AACD,wBAAA,QAAQ,EAAE;AACR,4BAAA,OAAO,EAAE,WAAW;AACrB,yBAAA;AACD,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,+CAA+C,CAAC;AACpG,yBAAA;qBACF;gBACH;qBAAO;;oBAEL,OAAO;AACL,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,4CAA4C,CAAC;AACjG,yBAAA;AACD,wBAAA,IAAI,EAAE;AACJ,4BAAA,EAAE,EAAE,IAAI;AACT,yBAAA;AACD,wBAAA,QAAQ,EAAE;AACR,4BAAA,OAAO,EAAE,WAAW;AACrB,yBAAA;qBACF;gBACH;YACF;YACA,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,yCAAyC,CAAC;AAC9F,iBAAA;aACF;QACH;QAAE,OAAO,KAAK,EAAE;YACd,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EACF,KAAK,YAAY;0BACb,KAAK,CAAC;0BACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wCAAwC,CAAC;AAC7F,iBAAA;aACF;QACH;gBAAU;YACR,IAAI,SAAS,EAAE;AACb,gBAAA,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;YAC7B;QACF;IACF;8GA7FW,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;;;;;;;;;;;;;;;ACrBD;AAkCA,MAAM,YAAY,GAAG,kBAAkB;AACvC,MAAM,iBAAiB,GAAG,+BAA+B;AAEzD;AAEA;AAEA;;;;AAIG;AACI,MAAM,gBAAgB,GAA0B;AACrD,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,CAAC,GAAG,EAAE,OAAoC,KAAI;AACnD,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,oDAAoD;QAC5G,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,YAAY;AACjE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC;AAE3E,QAAA,MAAM,YAAY,GAAoB;AACpC,YAAA,KAAK,EAAE,+BAA+B;AACtC,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE;AACP,oBAAA,OAAO,EAAE;AACP,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,eAAe,EAAE,IAAI;AACrB,wBAAA,IAAI,EAAE;4BACJ,OAAO;AACP,4BAAA,KAAK,EAAE,wBAAwB;AAChC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,mBAAmB,CAAC,MAAM;YAChC,KAAK,EAAE,qBAAqB,CAAC,SAAS;SACvC;AAED,QAAA,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAEzE,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AACtB,YAAA,MAAM,EAAE,iBAAiB;YACzB,KAAK;YACL,IAAI;YACJ,OAAO;AACP,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AAChE,gBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;AAChF,aAAA;AACD,YAAA,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC7C,YAAA,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;AACxC,SAAA,CAAC;IACJ,CAAC;CACF;AAED;;AC/FA;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,cAAc,GAA0B;AACnD,IAAA,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;AAEZ,QAAA,GAAG,CAAC,MAAc,CAAC,UAAU,KAAK,EAAE;AACpC,QAAA,GAAG,CAAC,MAAc,CAAC,UAAU,CAAC,QAAQ,GAAG;AACxC,YAAA,OAAO,EAAE,IAAI;SACd;;;;IAKH,CAAC;CACF;;AChCD;;;;;;AAMG;MAeU,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAvB,uBAAuB,EAAA,CAAA,CAAA;AAAvB,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,uBAAuB,EAAA,SAAA,EAbvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,gBAAgB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;2FAEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAdnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,cAAc;AACxB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,gBAAgB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACpBD;;;AAGG;MAEU,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAGmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAEjD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CACrD,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,4BAA4B,CAC7B,CAAC,IAAI,EAAY;AAmCnB,IAAA;IAjCC,MAAM,OAAO,CAAC,QAAiB,EAAA;QAC7B,MAAM,IAAI,GAA0B,EAAE;QAEtC,IAAI,QAAQ,EAAE;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,MAAM,EAAE;AACN,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,OAAO,EAAE,CAAC;AACR,4BAAA,KAAK,EAAE,UAAU;AACjB,4BAAA,QAAQ,EAAE;AACR,gCAAA,IAAI,EAAE,OAAO;AACd,6BAAA;AACD,4BAAA,KAAK,EAAE,QAAQ;yBAChB;AACF;AACF,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B;aAAO;YACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,OAAO,CAAC,EAAU,EAAA;QACtB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7C;8GAzCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACJD;;;;;AAKG;MAEU,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;;AAIqB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC;AACnC,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,GAAG,UAAU;AAC3F,aAAA,IAAI,EAAY;AAgExB,IAAA;;;IA1DG,MAAM,OAAO,CAAC,QAAiB,EAAA;QAC3B,MAAM,OAAO,GAAU,EAAE;AAEzB,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;;YAExB,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE;AACN,oBAAA,IAAI,EAAE,QAAQ;AACjB,iBAAA;AACJ,aAAA,CAAC;QACN;aAAO;;YAEH,OAAO,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE;AACN,oBAAA,IAAI,EAAE,OAAO;AAChB,iBAAA;AACD,gBAAA,KAAK,EAAE,QAAQ;AAClB,aAAA,CAAC;QACN;QAEA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;gBACZ,OAAO;AACV,aAAA;AACJ,SAAA,CAAC;AAEF,QAAA,QAAQ,MAAM,CAAC,KAAK,IAAI,EAAE;IAC9B;IAEA,MAAM,OAAO,CAAC,EAAU,EAAA;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,EAAE;qBACZ,CAAC;AACL,aAAA;AACJ,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAwB;QACjD;AAEA,QAAA,OAAO,SAAS;IACpB;8GAnES,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACND;;;;;;AAMG;MAEU,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;;AAIqB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC;AAC7C,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI;AAC9E,aAAA,IAAI,EAAY;AA2GxB,IAAA;;;IArGG,MAAM,OAAO,CAAC,UAAkB,EAAA;;QAE5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,UAAU;AACnB,yBAAA;AACD,wBAAA,KAAK,EAAE,UAAU;qBACpB;AACJ;AACJ,SAAA,CAAC;;AAGF,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAS,MAA6B;AACnE,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,6BAA6B;YAClE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;AACrC,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;AACzB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;AAC7C,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACpC,SAAA,CAAC,CAAC;IACP;IAEA,MAAM,SAAS,CAAC,IAAY,EAAA;;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,IAAI;qBACd;AACJ;AACJ,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9B,OAAO;AACH,gBAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,6BAA6B;gBACpE,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;AAC3B,gBAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;AACvC,gBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;AACjC,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,gBAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;AAC/C,gBAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;aACtC;QACL;;QAGA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACpD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,MAAM,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACN,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,QAAQ,EAAE;AACN,4BAAA,IAAI,EAAE,OAAO;AAChB,yBAAA;AACD,wBAAA,KAAK,EAAE,IAAI;qBACd;AACJ;AACJ,SAAA,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5B,OAAO;AACH,gBAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,6BAA6B;gBACpE,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;AAC3B,gBAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;AACvC,gBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;AACjC,gBAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AAC3B,gBAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;AAC/C,gBAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;aACtC;QACL;AAEA,QAAA,OAAO,IAAI;IACf;8GA9GS,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;ACZD;AAKA;AAEA;AAEA;;;AAGG;AACI,MAAM,0BAA0B,GAAsB;AAC3D,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;;CAG7B;AAED;;ACvBA;AAQA;AAEA;AAEA;;;;;AAKG;MACU,mCAAmC,CAAA;IAC9C,MAAM,OAAO,CAAC,OAAmD,EAAA;AAC/D,QAAA,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE;;AAE7B,YAAA,KAAK,EAAE,OAAO,QAAgB,EAAE,MAAc,KAAoC;AAChF,gBAAA,OAAO,EAAE;YACX,CAAC;AACF,SAAA,CAAC;IACJ;AACD;AAED;;AC7BO,MAAM,kBAAkB,GAAG;AAChC,IAAA,kBAAkB,EAAE;AAClB,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;CACF;;MCGY,+BAA+B,CAAA;AAD5C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAgBnE,IAAA;IAdC,MAAM,MAAM,CAAC,OAA+C,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,OAAO,GAAW,KAC9B,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wBAAwB,GAAG,CAAA,CAAE,CAAC;QAE7E,MAAM,IAAI,GAAG,kBAAkB;QAE/B,MAAM,kBAAkB,GAAG,yCAAyC;AAEpE,QAAA,OAAO,CAAC,QAAQ,CACd,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,CAAA,EAAG,kBAAkB,CAAA,MAAA,CAAQ,EAC7B,GAAG,kBAAkB,CAAA,YAAA,CAAc,CACpC;IACH;8GAhBW,+BAA+B,EAAA,IAAA,EAAA,EAAA,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;;;ACoCD;;;AAGG;MACU,yCAAyC,GACpD,IAAI,cAAc,CAAuC,2CAA2C;AA6CtG;AAEA;;;;;;;;;;;;;;;AAeG;AAEG,MAAO,8BAA+B,SAAQ,uBAA4C,CAAA;;;AAoB9F,IAAA,WAAA,CACqD,MAA4C,EAAA;AAE/F,QAAA,KAAK,EAAE;;;AAdQ,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC;AAC1C,aAAA,UAAU,CAAC,oBAAoB,EAAE,kBAAkB;AACnD,aAAA,IAAI,EAA4D;AAClD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAU3D,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;;;AAMA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;IAC1B;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,6BAA6B;IAC1D;;;AAMA;;;;;;;;;;AAUG;IACH,MAAM,QAAQ,CACZ,OAAsB,EAAA;;QAGtB,MAAM,UAAU,GAA6B,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;;AAG1E,QAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AACvB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,YAAA,KAAK,EAAE,WAAW;AACnB,SAAA,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC5B,YAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AACvB,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;AAChC,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;AAC/C,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AACtB,gBAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AACvB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;AACxC,iBAAA,CAAC;YACJ;AAEA,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;AACrB,gBAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AACvB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACzB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;AACvC,iBAAA,CAAC;YACJ;QACF;;AAGA,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACxE,YAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;AACxB,YAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;AACzB,YAAA,MAAM,EAAE,UAAU;AACnB,SAAA,CAAC;;QAGF,MAAM,KAAK,GAAmC,EAAE;AAEhD,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,IAAI;;gBAEF,MAAM,SAAS,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC;;AAG/D,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,oBAAA,IAAI;;AAEF,wBAAA,IAAI,OAAiC;AACrC,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GACP,QAAQ,CAAC,OAAO;AAChB,iCAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;4BAClE,OAAO;AACL,gCAAA,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK;AACjC,sCAAG;sCACA,EAA+B;wBACxC;AAAE,wBAAA,MAAM;4BACN;wBACF;;AAGA,wBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,8BAA8B,EAAE;4BAC3D;wBACF;;AAGA,wBAAA,IAAI,OAAO,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,4BAAA,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE;AACjD,4BAAA,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE;4BACnD,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC;;4BAIpD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,WAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;4BAClF,IAAI,CAAC,eAAe,EAAE;gCACpB;4BACF;wBACF;;AAGA,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AAChE,wBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClB;AAAE,oBAAA,MAAM;;oBAER;gBACF;YACF;AAAE,YAAA,MAAM;;YAER;QACF;AAEA,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAChC;AAEA;;;AAGG;AACK,IAAA,8BAA8B,CACpC,QAA0D,EAAA;AAE1D,QAAA,MAAM,EAAE,GAAG,QAAQ,EAAE,gBAA6D;AAClF,QAAA,MAAM,SAAS,GAAG,EAAE,EAAE,SAAS,IAAI,EAAE;QACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,CAAC,CAA2B,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,CAChC;AAC/B,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,iBAAiB,CACvB,QAA0D,EAC1D,QAAkC,EAClC,OAAiC,EAAA;;AAGjC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC;eACnB,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO;eACjF,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAEpE,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC;AACzB,cAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;cAC3B,OAAO;;QAGX,IAAI,OAAO,GAAG,OAAO;QACrB,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;YAC7B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC;;AAGA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;;QAG7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,eAAe;QAEtE,OAAO;AACL,YAAA,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAA,iBAAA,EAAoB,OAAO,CAAC,YAAY,CAAA,CAAE;YAC9E,SAAS;YACT,OAAO;AACP,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG;AACpE,kBAAE;oBACE,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAC9B,oBAAA,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,EAAE;AACb;AACH,kBAAE,SAAS;AACb,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI;gBAClC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,2CAA2C,CAAC;AAC1F,aAAA;YACD,QAAQ;AACR,YAAA,QAAQ,EAAE;gBACR,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;AAC7C,gBAAA,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,IAAI,EAAE;AAC1D,aAAA;AACD,YAAA,IAAI,EAAE;;gBAEJ,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,YAAY,EAAE,QAAQ,CAAC,YAAY;;AAEnC,gBAAA,OAAO,EAAE,OAAO;AACV,aAAA;SACT;IACH;AAEA;;AAEG;AACK,IAAA,yBAAyB,CAC/B,QAA8C,EAAA;QAE9C,QAAQ,QAAQ;AACd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS;AAClB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,QAAQ;;IAErB;;;AAMA;;AAEG;IACH,MAAM,WAAW,CACf,aAA6C,EAAA;;;AAI7C,QAAA,OAAO,aAAa;IACtB;;;AAMA;;;;;AAKG;IACH,MAAM,cAAc,CAAC,OAA0B,EAAA;QAC7C,IAAI,CAAC,OAAO,EAAE,IAAI;AAAE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAQ;AACjD,QAAA,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE;AAChF,QAAA,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE;AAChF,QAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE;AAC7E,QAAA,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE;QAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,MAAM;QACtD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE;;AAGtD,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,4CAA4C,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE;YACvG,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;gBAC5C,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,gEAAgE;AACvE,qBAAA;iBACF;YACH;AAEA,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAC9C,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,SAAS,CACV;gBAED,OAAO;oBACL,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC;AACd,0BAAE;4BACE,IAAI,EAAE,MAAM,CAAC,KAAK;AACnB;AACH,0BAAE,SAAS;iBACd;YACH;YAAE,OAAO,KAAc,EAAE;gBACvB,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,2BAA2B;AAC3E,qBAAA;iBACF;YACH;QACF;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;;;AAMA;;;;AAIG;IACH,MAAM,UAAU,CAAC,IAAmC,EAAA;QAClD,MAAM,OAAO,GAA4B,EAAE;AAE3C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,OAAO;AAEzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAW;AACjC,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,OAA+C;AAEzE,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,OAAO;;AAG5B,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,UAAU,GAAG;gBACjB,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;aAClC;AAED,YAAA,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;AAC/B,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS;gBAEnE,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;oBACjC,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,OAAO,EAAE;4BACP,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;AAC7B,4BAAA,OAAO,EAAE,UAAU;AACnB,4BAAA,SAAS,EAAE,EAAE;AACd,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;QACF;aAAO;;YAEL,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,+BAA+B,CAAC;AAC7E,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,4CAA4C;AAClD,oBAAA,OAAO,EAAE;wBACP,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;AAC7B,wBAAA,OAAO,EAAE,QAAQ;AACjB,wBAAA,SAAS,EAAE,EAAE;AACd,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,+BAA+B,CAAC;AAC7E,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,4CAA4C;AAClD,oBAAA,OAAO,EAAE;wBACP,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;AAC7B,wBAAA,OAAO,EAAE,QAAQ;AACjB,wBAAA,SAAS,EAAE,EAAE;AACd,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,WAAW,GAAA;QACf,OAAO;AACL,YAAA;AACE,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,IAAI;gBACnC,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,2CAA2C,CAAC;AAChG,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA;SACF;IACH;;;IAMS,YAAY,GAAA;AACnB,QAAA,OAAO,MACL,OAAO,mFAAmC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,+BAA+B,CAAC;IAC9F;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,8BAA8B,kBAqB/B,yCAAyC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHArBxC,8BAA8B,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C;;0BAsBI,MAAM;2BAAC,yCAAyC;;;SC1HrC,mBAAmB,GAAA;AACjC,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,0BAA0B;AACnC,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,CAAC,QAAkB,KAAI;gBACjC,OAAO,CAAC,YAAW;oBACjB,MAAM,yBAAyB,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC5E,oBAAA,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,aAAa,EAAE;oBAClE,MAAM,SAAS,GAAqC,EAAE;AACtD,oBAAA,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;wBACjC,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvF,wBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;4BAChC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAC/C,IAAI,8BAA8B,CAAC;gCACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,gCAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI;AACtC,gCAAA,IAAI,EAAE,6BAA6B;gCACnC,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,6BAAA,CAAC,CACH;AACD,4BAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC1B;oBACF;AACA,oBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;AAEnC,oBAAA,OAAO,SAAS;gBAClB,CAAC,GAAG;YACN,CAAC;YACD,IAAI,EAAE,CAAC,QAAQ,CAAC;AACjB,SAAA;AACF,KAAA,CAAC;AACJ;;ACAA,SAAS,aAAa,GAAA;AACpB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC9C,IAAA,MAAM,MAAM,GAAW;AACrB,QAAA;AACE,YAAA,IAAI,EAAE,iCAAiC;YACvC,aAAa,EAAE,MAAK;AAClB,gBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YAC9B,CAAC;YACD,WAAW,EAAE,CAAC,YAAY,CAAC;AAC3B,YAAA,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,YAAA,QAAQ,EAAE;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,aAAa,EAAE,MACb,wEAA4D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;AACtG,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,MAAM;AACf;MAkJa,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,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,2BAA2B,YA7IpC,2BAA2B;YAC3B,eAAe;AACf,YAAA,uBAAuB;YACvB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AA0IV,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,2BAA2B,EAAA,SAAA,EAxI3B;YACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,oCAAoC,EAAE,KAAK,EAAE,IAAI,EAAE;YACxG,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,mCAAmC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvG,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,aAAa;AAC1B,aAAA;AACD,YAAA,oBAAoB,CAAC;AACnB,gBAAA;AACE,oBAAA,GAAG,EAAE,+CAA+C;AACpD,oBAAA,OAAO,EAAE,MAAM,OAAO,yDAAyC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC;AACvG,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,oDAAoD;AACzD,oBAAA,OAAO,EAAE,MAAM,OAAO,yDAAyC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;AACpG,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,8BAA8B;AACnC,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AACvF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,iCAAiC;AACtC,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;AAC7F,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,sCAAsC;AAC3C,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,qCAAqC;AAC1C,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;AAC7F,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,sCAAsC;AAC3C,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,8BAA8B;AACnC,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AACvF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,qCAAqC;AAC1C,oBAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,iBAAA;aACF,CAAC;;;AAGF,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,yCAAyC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,mCAAmC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,6BAA6B;AACvC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,8BAA8B;AACvC,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,uCAAuC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,8BAA8B;AACvC,gBAAA,QAAQ,EAAE,2BAA2B;AACrC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,6BAA6B;AACvC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;YAED,wBAAwB;YACxB,uBAAuB;YACvB,wBAAwB;YACxB,iBAAiB;YACjB,iBAAiB;YACjB,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;AAuBxB,YAAA,mBAAmB;AACpB,SAAA,EAAA,OAAA,EAAA,CA3IC,2BAA2B;YAC3B,eAAe;AACf,YAAA,uBAAuB;YACvB,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FA0IV,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA/IvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,2BAA2B;wBAC3B,eAAe;AACf,wBAAA,uBAAuB;wBACvB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,oCAAoC,EAAE,KAAK,EAAE,IAAI,EAAE;wBACxG,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,mCAAmC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvG,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,aAAa;AAC1B,yBAAA;AACD,wBAAA,oBAAoB,CAAC;AACnB,4BAAA;AACE,gCAAA,GAAG,EAAE,+CAA+C;AACpD,gCAAA,OAAO,EAAE,MAAM,OAAO,yDAAyC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC;AACvG,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,oDAAoD;AACzD,gCAAA,OAAO,EAAE,MAAM,OAAO,yDAAyC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;AACpG,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,8BAA8B;AACnC,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AACvF,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,iCAAiC;AACtC,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;AAC7F,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,sCAAsC;AAC3C,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,qCAAqC;AAC1C,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;AAC7F,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,sCAAsC;AAC3C,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,8BAA8B;AACnC,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;AACvF,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,qCAAqC;AAC1C,gCAAA,OAAO,EAAE,MAAM,qDAAsC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC;AAC9F,6BAAA;yBACF,CAAC;;;AAGF,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,yCAAyC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,mCAAmC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AACzB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,6BAA6B;AACvC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,8BAA8B;AACvC,4BAAA,QAAQ,EAAE,mBAAmB;AAC7B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,uCAAuC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,8BAA8B;AACvC,4BAAA,QAAQ,EAAE,2BAA2B;AACrC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,6BAA6B;AACvC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;wBAED,wBAAwB;wBACxB,uBAAuB;wBACvB,wBAAwB;wBACxB,iBAAiB;wBACjB,iBAAiB;wBACjB,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;AAuBxB,wBAAA,mBAAmB;AACpB,qBAAA;AACF,iBAAA;;;AC/MD;AA0BA;;AC1BA;AACA;;ACDA;AAwBA;MAYa,kCAAkC,CAAA;AAV/C,IAAA,WAAA,GAAA;;AAamB,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAChE,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qCAAqC,CAAC;;;QAMtF,IAAA,CAAA,aAAa,GAAG,MAAM,EAAuB;QAC7C,IAAA,CAAA,aAAa,GAAG,MAAM,EAAyB;;QAG/C,IAAA,CAAA,iBAAiB,GAAG,MAAM,EAAyD;;;AAMhE,QAAA,IAAA,CAAA,mBAAmB,GAAG,OACvC,cAAgC,KACG;YACnC,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3D,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,gBAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACpC,oBAAA,OAAO,EAAE;gBACX;gBACA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAC/E,MAAM,aAAa,GAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBACtE,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,oBAAA,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE;AAChE,oBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;oBACrE,IAAI;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,QAAQ,CAAC;gBAC3F,MAAM,eAAe,GAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBACxE,EAAE,EAAE,YAAY,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA,CAAE;AACxC,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACjD,oBAAA,QAAQ,EAAE,KAAK;oBACf,IAAI;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC;YAC/C;YACA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE;YACvE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;gBAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE;AAChE,gBAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;gBACrE,IAAI;AACJ,gBAAA,IAAI,EAAE,UAAmB;AACzB,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;AACL,QAAA,CAAC;AAoCF,IAAA;;;AA9BW,IAAA,eAAe,CAAC,KAAqC,EAAA;AAC7D,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAA4B;QAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE;YACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAA2B,CAAC;QAC3D;aAAO,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE;YAClD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAA6B,CAAC;QAC7D;IACF;IAEU,mBAAmB,CAAC,KAAgB,EAAE,IAA0B,EAAA;QACxE,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;AACzC,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAG,IAAI,CAAC,IAA8B,CAAC,IAAI,CAAC;QACrF;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAA6B,EAAE,CAAC;IACtF;AAEA;;AAEG;AACO,IAAA,oBAAoB,CAAC,IAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAAE,YAAA,OAAO,0BAA0B;AACpD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,MAAM,cAAc,GAAG,yEAAyE,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9G,OAAO,cAAc,GAAG,OAAO,GAAG,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE;IACzD;8GA1FW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,uQCpC/C,04BA6BA,EAAA,MAAA,EAAA,CAAA,obAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAY,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,sBAAsB,ypBAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAO7D,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAV9C,SAAS;+BACE,8BAA8B,EAAA,UAAA,EAC5B,IAAI,EAAA,OAAA,EACP,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,CAAC,EAAA,eAAA,EAGxD,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,QAC/B,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAA,QAAA,EAAA,04BAAA,EAAA,MAAA,EAAA,CAAA,obAAA,CAAA,EAAA;;;AE6J3C,MAAO,uBAAwB,SAAQ,0BAA0B,CAAA;AAjCvE,IAAA,WAAA,GAAA;;;AAoCmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAChE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAChE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;AAMhD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAY,MAAM,gFAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA6B,IAAI,uFAAC;AAC3D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA+B,IAAI,uFAAC;QAC7D,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,IAAI,CAAC,gBAAgB,EAAE,mFAAC;AACtD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAe,EAAE,kFAAC;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,IAAI,mFAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAU,KAAK,kFAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAiB,EAAE,oFAAC;;AAG1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAU,KAAK,0FAAC;AAC5C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAM,IAAI,4FAAC;;AAGzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAU,IAAI,0FAAC;;AAG3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAU,KAAK,sFAAC;;AAGxC,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CAA+B,IAAI,oGAAC;;QAGlE,IAAA,CAAA,2BAA2B,GAAkB,IAAI;;AAGxC,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAyB,EAAE,+FAAC;;QAGrE,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAyB,MAAM,IAAI,CAAC,wBAAwB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEpF,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,MAAK;AAC5D,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,6BAA6B,EAAE;AAChD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;AACvC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC;YACF;YACA,MAAM,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAC,CAAE;AACzE,YAAA,IAAI,IAAI,CAAC,2BAA2B,KAAK,SAAS;gBAAE;AACpD,YAAA,IAAI,CAAC,2BAA2B,GAAG,SAAS;AAC5C,YAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5E,QAAA,CAAC,qGAAC;AAEiB,QAAA,IAAA,CAAA,iBAAiB,GAAG,SAAS,CAAC,0BAA0B,wFAAC;AAE3D,QAAA,IAAA,CAAA,uCAAuC,GAAG,MAAM,CAAC,MAAK;AACrE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;YAChC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5C;YACF;AACA,YAAA,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;gBACvE,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;AACrD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,8GAAC;AAEe,QAAA,IAAA,CAAA,+BAA+B,GAAG,MAAM,CAAC,MAAK;AAC7D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACtC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAC3E;AACF,QAAA,CAAC,sGAAC;;QAGF,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAmB;AAC1C,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,CAAC,MAAM,CAAC;AAClB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,4BAA4B,EAAE,KAAK;AACnC,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,YAAY,EAAE;AACf,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,mBAAmB,GAA4C;AACtE,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;SACjC;;QAGD,IAAA,CAAA,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC7B,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC7B,IAAA,CAAA,eAAe,GAAwB,IAAI;QAC3C,IAAA,CAAA,WAAW,GAAsB,IAAI;QACrC,IAAA,CAAA,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC/B,IAAA,CAAA,gBAAgB,GAAsE,IAAI;;AAGvE,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAA0B,eAAe,oFAAC;AAmnEtF;;AAEG;QACgB,IAAA,CAAA,MAAM,GAAG,MAAM;AAElC;;AAEG;QACgB,IAAA,CAAA,MAAM,GAAG,CAAC,KAAU,KAAK,OAAO,KAAK;AAExD;;AAEG;QACgB,IAAA,CAAA,IAAI,GAAG,IAAI;AA2F/B,IAAA;AAztEU,IAAA,MAAM,QAAQ,GAAA;;AAErB,QAAA,MAAM,KAAK,CAAC,QAAQ,EAAE;;AAGtB,QAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;IACpC;AAEA;;AAEG;AACK,IAAA,MAAM,qBAAqB,GAAA;;AAEjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;QAEzE,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;;QAG3C,IAAI,CAAC,cAAc,CAAC;AACjB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,OAAO,MAAM,KAAI;AAC1B,YAAA,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1C,YAAA,IAAI,eAAe,IAAI,eAAe,KAAK,YAAY,EAAE;AACvD,gBAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACH,qBAAqB,CAAmC,GAAM,EAAE,KAA0B,EAAA;QACxF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IAC/D;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,EAAS,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAI,EAAE,CAAC,MAA8B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;AAEA;;AAEG;IACK,MAAM,kBAAkB,CAAC,YAAoB,EAAA;AAEnD,QAAA,IAAI;YACF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,YAAY,CAAA,GAAA,CAAK,CAAC;;YAG3D,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CACzD,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAY;AAElB,YAAA,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC;AAC/C,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,OAAO,EAAE,CAAC;AACR,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,4BAAA,KAAK,EAAE,YAAY;yBACpB;AACF;AACF,aAAA,CAAC;YAEF,IAAI,WAAW,GAAQ,IAAI;AAE3B,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B;iBAAO;;gBAEL,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,YAAY,CAAC;YACpF;YAEA,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,UAAA,EAAa,YAAY,CAAA,WAAA,CAAa,CAAC;gBAC9D;YACF;;YAGA,MAAM,UAAU,GAAG,IAAI,CAAC,qCAAqC,CAAC,WAAW,CAAC;AAC1E,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;AAG1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACxB,YAAY,EAAE,WAAW,CAAC,EAAE,IAAI,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,IAAI;AAC5E,gBAAA,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;AAC5B,gBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;AAC1C,gBAAA,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAU,MAAM;oBACtD,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,oBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;oBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC9C,WAAW,EAAE,KAAK,CAAC,WAAW;AAC/B,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAW,MAAM;oBACzD,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;oBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAChD,iBAAA,CAAC,CAAC;AACH,gBAAA,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,EAAE;AACtC,gBAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC;gBAC1C,gBAAgB,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,IAAI,KAAK;gBAClF,4BAA4B,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,IAAI,KAAK;AAC1G,gBAAA,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,CAAC;AACjC,gBAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,KAAK,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC1E,gBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,KAAK;AAC7C,gBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,OAAO;AAC/C,gBAAA,YAAY,EAAE,WAAW,CAAC,YAAY,IAAI,QAAQ;AACnD,aAAA,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,UAAA,EAAa,YAAY,CAAA,qBAAA,CAAuB,CAAC;;AAGxE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;gBACjC,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA,yBAAA,EAA4B,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;AACjE,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;QAClE;IACF;AAEA;;AAEG;AACK,IAAA,qCAAqC,CAAC,WAAgB,EAAA;;AAE5D,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK;QAC/B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;QAChC;;AAGA,QAAA,MAAM,YAAY,GAAQ;AACxB,YAAA,EAAE,EAAE,KAAK,CAAC,eAAe,IAAI,MAAM;AACnC,YAAA,IAAI,EAAE,4BAA4B;YAClC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,IAAI,MAAM;AACrD,YAAA,QAAQ,EAAE,EAAE;SACb;;AAGD,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE;AACzC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;;AAG3C,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe;AAC1C,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,QAAa,KAAI;AACnC,YAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC3B,EAAE,EAAE,QAAQ,CAAC,EAAE;AACf,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;gBACpC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAE;AACtD,gBAAA,UAAU,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;AACjC,gBAAA,QAAQ,EAAE,EAAE;AACb,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;QAC5D,IAAI,aAAa,EAAE;AACjB,YAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGzC,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;AACnC,YAAA,MAAM,eAAe,GAAG,CAAC,UAAkB,KAAI;AAC7C,gBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;oBAC7B;gBACF;AACA,gBAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;gBAEzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;gBAC5C,IAAI,CAAC,QAAQ,EAAE;oBACb;gBACF;;AAGA,gBAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAC5C,CAAC,IAAS,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,CACtD;AAED,gBAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACxC,oBAAA,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/D,oBAAA,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;AACvD,wBAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACtC,wBAAA,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;oBACpC;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AAED,YAAA,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;QACxC;QAEA,OAAO;YACL,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,IAAI,UAAU;AACpD,YAAA,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;AAC5B,YAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;AAC1C,YAAA,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,CAAC;AACjC,YAAA,IAAI,EAAE,YAAY;SACnB;IACH;;;AAMS,IAAA,MAAM,YAAY,GAAA;QACzB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,kEAAkE,CAAC;IACzH;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wEAAwE,CAAC;IAC/H;AAES,IAAA,MAAM,mBAAmB,GAAA;QAChC,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,qEAAqE;AAC5E,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;AAC5B,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,6DAA6D;AACpE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;AACvC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,2DAA2D;AAClE,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;AACrC,aAAA;SACF;IACH;AAES,IAAA,MAAM,qBAAqB,GAAA;QAClC,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,gEAAgE;AACvE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AACjC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,KAAK,EAAE,iEAAiE;AACxE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ;AACtC,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;AAClC,aAAA;SACF;IACH;IAES,MAAM,OAAO,CAAC,OAA0B,EAAA;AAC/C,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,kBAAkB;gBACrB,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;AACF,YAAA,KAAK,mBAAmB;gBACtB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;AACF,YAAA,KAAK,iBAAiB;gBACpB,IAAI,CAAC,0BAA0B,EAAE;gBACjC;AACF,YAAA,KAAK,aAAa;gBAChB,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,CAAC,WAAW,EAAE;gBAClB;;IAEN;;;AAMA;;AAEG;AACH,IAAA,eAAe,CAAC,QAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,QAA+B,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,mBAAA,EAAsB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;IAC5D;AAEA;;AAEG;AACH,IAAA,2BAA2B,CAAC,OAA8D,EAAA;QACxF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC7E,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;AACjD,YAAA,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzE;IACF;AAEA;;AAEG;AACK,IAAA,+BAA+B,CAAC,QAA+B,EAAA;AACrE,QAAA,MAAM,UAAU,GAAqB,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,KAAK;YACzE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC;AAClD,YAAA,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,YAAA,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;AAC5B,SAAA,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAwB,EAAE;AACjD,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;AACxB,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;gBACnC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY;YAClD;AACF,QAAA,CAAC,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,YAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;YACvC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC/C,UAAU;YACV;SACD;IACH;AAEA;;AAEG;AACK,IAAA,qBAAqB,CAAC,IAAwB,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAAE,YAAA,OAAO,oBAAoB;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,MAAM,cAAc,GAAG,yEAAyE,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9G,OAAO,cAAc,GAAG,OAAO,GAAG,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE;IACzD;AAEA;;AAEG;AACK,IAAA,yBAAyB,CAAC,MAAW,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ;QAC7C,IAAI,QAAQ,KAAK,OAAO;AAAE,YAAA,OAAO,OAAO;QACxC,IAAI,QAAQ,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAC1C,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;AAC5C,QAAA,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,QAAQ;AACpE,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;AACK,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACzC,QAAA,MAAM,QAAQ,GAA2B;AACvC,YAAA,kBAAkB,EAAE,SAAS;AAC7B,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,kBAAkB,EAAE,SAAS;AAC7B,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS;IAC1C;AAEA;;AAEG;IACK,gBAAgB,GAAA;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC;AACpB,YAAA,EAAE,EAAE,cAAc;AAClB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA,EAAE,IAAI,EAAE,CAAC,CAAC;IACb;;AAOA;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;gBACjC,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC;QAClE;IACF;;AAIA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC;AAEA;;AAEG;AACH,IAAA,MAAM,sBAAsB,GAAA;AAC1B,QAAA,MAAM,IAAI,CAAC,WAAW,EAAE;IAC1B;AAGA;;AAEG;AACH,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC7B,YAAA,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE;AACrB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC;AAE7C,QAAA,IAAI;;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,2DAA2D,CAAC;YAC5H,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;;AAG/C,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,IAAI,CAAA,SAAA,EAAY,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;AAC7D,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,EAAE;YAExD,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;YACzD;;AAGA,YAAA,IAAI;AACF,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAClD,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;gBAE1B,IAAI,QAAQ,EAAE;AACZ,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CACjC,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC;gBAC/C;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CACjC,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,gBAAgB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBAC1D;gBAEA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,iEAAiE,CAAC;AACnI,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;YACrC;YAAE,OAAO,SAAc,EAAE;;gBAEvB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,8DAA8D,CAAC;AACrI,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,EAAG,gBAAgB,CAAA,EAAA,EAAK,SAAS,CAAC,OAAO,CAAA,CAAE,CAAC;YACrE;;YAGA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,yDAAyD,CAAC;AAChI,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;;AAGrC,YAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,IAAI,UAAU;AACxD,YAAA,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;AAC/D,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,+BAAA,EAAkC,MAAM,CAAC,UAAU,CAAA,CAAE,EAAE,MAAM,CAAC;AAElF,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,MAAM,CAAC;gBAC1D;YACF;;YAGA,IAAI,aAAa,GAAG,MAAM;YAC1B,IAAI,SAAS,GAAG,CAAC;AAEjB,YAAA,OAAO,aAAa,CAAC,QAAQ,EAAE;AAC7B,gBAAA,SAAS,EAAE;AACX,gBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ;gBAEnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,QAAA,EAAW,SAAS,CAAA,EAAA,EAAK,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC;AAEjH,gBAAA,IAAI;;oBAEF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,IAAI,CAAC,YAAY,CAAA,GAAA,CAAK,CAAC;;;;AAKhE,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,sCAAA,CAAwC,CAAC;;;;;;;AAQ7D,oBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;wBAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,CAAC;wBAC/D;oBACF;AAEA,oBAAA,IAAI,aAAa,CAAC,QAAQ,EAAE;AAC1B,wBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,wBAAA,EAA2B,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAA,CAAE,CAAC;oBACvF;yBAAO;AACL,wBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;oBAChE;gBACF;gBAAE,OAAO,KAAU,EAAE;AACnB,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA,wBAAA,EAA2B,KAAK,CAAC,OAAO,CAAA,CAAE,EAAE,KAAK,CAAC;AACvE,oBAAA,aAAa,GAAG;AACd,wBAAA,GAAG,aAAa;AAChB,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI;qBACzB;oBACD;gBACF;YACF;;AAGA,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC7B,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,WAAW,EAAE,aAAa;gBAC1B,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;gBAC/D,OAAO,EAAE,IAAI,IAAI,EAAE;AACnB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;AAC1G,aAAA,CAAC;AAEF,YAAA,IAAI,aAAa,CAAC,OAAO,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,+BAAA,EAAkC,SAAS,CAAA,kBAAA,CAAoB,EAAE,aAAa,CAAC;YACxG;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,8BAA8B,IAAI,aAAa,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,aAAa,CAAC;YAChH;QAEF;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;AACxE,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC7B,gBAAA,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,KAAK,CAAC,OAAO;AACpB,gBAAA,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACzC,aAAA,CAAC;QACJ;gBAAU;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;IACF;AAGA;;AAEG;AACH,IAAA,MAAM,CAAC,KAA+C,EAAE,OAAe,EAAE,IAAU,EAAA;AACjF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK;YACL,OAAO;YACP;AACD,SAAA,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnC;AAGA;;AAEG;AACH,IAAA,oBAAoB,CAAC,QAAsB,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,EAAE,EAAE,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;YAClD,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,YAAA,UAAU,EAAE;SACb;;AAGD,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,iBAAA,EAAoB,QAAQ,CAAC,IAAI,CAAA,QAAA,CAAU,CAAC;IACrE;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;QAC1C;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC;QACzD;IACF;AAGA;;AAEG;IACH,oBAAoB,GAAA;QAClB,IAAI,CAAC,4BAA4B,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAExC,QAAA,MAAM,aAAa,GAAG;YACpB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;AACnC,YAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;AACvC,YAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,YAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;YACtF,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,4BAA4B,EAAE,QAAQ,CAAC,4BAA4B;AACnE,YAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,OAAO;AAC5C,YAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI;SACxC;AAED,QAAA,IAAI,CAAC;AACF,aAAA,MAAM;aACN,MAAM,CAAO,MAAM,IAAG;YACrB;iBACG,QAAQ,CAAC,qDAAqD;iBAC9D,OAAO,CAAC,IAAI;iBACZ,cAAc,CAAC,IAAI;iBACnB,UAAU,CAAC,aAAa;iBACxB,OAAO,CAAC,IAAI,IAAG;gBACd;qBACG,YAAY,CAAC,QAAQ;qBACrB,MAAM,CAAC,MAAM;qBACb,QAAQ,CAAC,OAAO,IAAG;oBAClB;yBACG,QAAQ,CAAC,4DAA4D;AACrE,yBAAA,SAAS,CACR,kFAAkF,EAClF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;wBAClB,KAAK,CAAC,OAAO,CAAC;AACZ,4BAAA,WAAW,EACT;AACH,yBAAA,CAAC;AACJ,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,2FAA2F,EAC3F,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;wBAC1B,KAAK,CAAC,OAAO,CAAC;AACZ,4BAAA,WAAW,EACT;AACH,yBAAA,CAAC;AACJ,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,yFAAyF,EACzF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBACzB,KAAK,CAAC,YAAY,CAAC;AACjB,4BAAA,WAAW,EACT,+FAA+F;AACjG,4BAAA,IAAI,EAAE;AACP,yBAAA,CAAC;AACJ,oBAAA,CAAC,CACF;AACL,gBAAA,CAAC;qBACA,QAAQ,CAAC,MAAM,IAAG;oBACjB;yBACG,QAAQ,CAAC,2DAA2D;AACpE,yBAAA,SAAS,CACR,kFAAkF,EAClF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;wBACxB,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClC,oBAAA,CAAC,CACF;AACL,gBAAA,CAAC;qBACA,QAAQ,CAAC,OAAO,IAAG;oBAClB;yBACG,QAAQ,CAAC,4DAA4D;AACrE,yBAAA,SAAS,CACR,oFAAoF,EACpF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBACzB,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClC,oBAAA,CAAC,CACF;AACL,gBAAA,CAAC;qBACA,QAAQ,CAAC,SAAS,IAAG;oBACpB;yBACG,QAAQ,CAAC,8DAA8D;AACvE,yBAAA,SAAS,CACR,wFAAwF,EACxF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;wBAC3B,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClC,oBAAA,CAAC,CACF;AACL,gBAAA,CAAC;qBACA,QAAQ,CAAC,QAAQ,IAAG;oBACnB;yBACG,QAAQ,CAAC,6DAA6D;AACtE,yBAAA,SAAS,CACR,gFAAgF,EAChF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;wBACrB,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7B,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,kFAAkF,EAClF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;wBACtB,KAAK,CAAC,YAAY,EAAE;AACtB,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,qFAAqF,EACrF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBACzB,KAAK,CAAC,YAAY,EAAE;AACtB,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,2FAA2F,EAC3F,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;wBAC9B,KAAK,CAAC,YAAY,EAAE;AACtB,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,8FAA8F,EAC9F,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC;wBAC1C,KAAK,CAAC,YAAY,EAAE;AACtB,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,qFAAqF,EACrF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;wBACzB,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACzC,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,sFAAsF,EACtF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;wBAC1B,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAClD,oBAAA,CAAC;AAEF,yBAAA,SAAS,CACR,uFAAuF,EACvF,KAAK,IAAG;AACN,wBAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;wBAC1B,KAAK,CAAC,OAAO,CAAC;AACZ,4BAAA,WAAW,EACT;AACH,yBAAA,CAAC;AACJ,oBAAA,CAAC,CACF;AACL,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;iBACA,UAAU,CAAC,OAAO,IAAG;gBACpB;qBACG,MAAM,CAAC,8DAA8D;qBACrE,MAAM,CAAC,4DAA4D,CAAC;AACzE,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAM,SAAS,KAAG;AAC1B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;gBACjC,IAAI,MAAM,KAAK,QAAQ;oBAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,GAAG;oBAAE;gBAEV,IAAI,MAAM,GAAoB,EAAE;gBAChC,IAAI,OAAO,GAAqB,EAAE;gBAClC,IAAI,SAAS,GAAuB,EAAE;AACtC,gBAAA,IAAI,QAAQ,GAAa,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI;AACF,oBAAA,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE;wBAC/D,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;oBACrC;gBACF;AAAE,gBAAA,MAAM;AACN,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,qBAAqB,CAAC;gBAC7C;AACA,gBAAA,IAAI;AACF,oBAAA,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE;wBACjE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;oBACvC;gBACF;AAAE,gBAAA,MAAM;AACN,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;gBAC9C;AACA,gBAAA,IAAI;AACF,oBAAA,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE;wBACrE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC3C;gBACF;AAAE,gBAAA,MAAM;AACN,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC;gBAChD;AACA,gBAAA,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;oBACnE,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACrF;AACA,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,QAAQ,GAAG,CAAC,MAAM,CAAC;AAE9C,gBAAA,MAAM,WAAW,GAAqB;oBACpC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;oBAC5C,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC5B,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC1C,MAAM;oBACN,OAAO;oBACP,SAAS;oBACT,QAAQ;oBACR,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AACjC,oBAAA,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/B,oBAAA,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,oBAAA,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC/C,oBAAA,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;oBACvE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC;oBAC/C,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,gBAAgB;iBAC1D;AACD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;gBACtC,IAAI,CAAC,2BAA2B,EAAE;AACpC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;IACX;AAEA;;AAEG;IACK,4BAA4B,GAAA;AAClC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAChD,YAAA,MAAM,YAAY,GAAG,CAAC,KAAU,KAAmB;AACjD,gBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChB,OAAO;wBACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,wBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;wBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,WAAW,EAAE,KAAK,CAAC;qBACpB;gBACH;gBACA,OAAO;oBACL,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ;wBACpC,YAAY,EAAE,KAAK,CAAC;AACrB,qBAAA;AACD,oBAAA,WAAW,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG;iBAC1D;AACH,YAAA,CAAC;AACD,YAAA,MAAM,aAAa,GAAG,CAAC,MAAW,KAAoB;AACpD,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,OAAO;wBACL,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,wBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;wBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,MAAM,EAAE,MAAM,CAAC;qBAChB;gBACH;gBACA,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;oBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ;iBAChD;AACH,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACxB,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE;AACxD,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;AACzB,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;AACvC,gBAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC;AACjD,gBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC;AACpD,gBAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,gBAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC;AACvC,gBAAA,gBAAgB,EAAE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,IAAI,KAAK;AAC7D,gBAAA,4BAA4B,EAAE,QAAQ,CAAC,OAAO,EAAE,4BAA4B,IAAI,KAAK;AACrF,gBAAA,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC;AAC9B,gBAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI;AACpE,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,KAAK;AAC1C,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,OAAO;AAC5C,gBAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI;AACxC,aAAA,CAAC;QACJ;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACxB,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,CAAC,MAAM,CAAC;AAClB,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,4BAA4B,EAAE,KAAK;AACnC,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,YAAY,EAAE;AACf,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,2BAA2B,GAAA;AACjC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAChD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,YAAA,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;AAC7C,YAAA,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC7B,YAAA,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;AAC3C,YAAA,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;AACnC,YAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AACrC,YAAA,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;AAC3C,YAAA,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;AAC3C,YAAA,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;YAC7C,QAAQ,CAAC,OAAO,GAAG;gBACjB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gBAC3C,4BAA4B,EAAE,QAAQ,CAAC;aACxC;AACD,YAAA,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK;gBAChD,EAAE,EAAE,CAAC,CAAC,IAAI;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,gBAAA,iBAAiB,EAAE;AACpB,aAAA,CAAC,CAAC;AACH,YAAA,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;gBAC1C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,oBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,oBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,oBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,oBAAA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;AACxB,iBAAA;gBACD,WAAW,EAAE,CAAC,CAAC;AAChB,aAAA,CAAC,CAAC;AACH,YAAA,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;gBAC5C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AACtC,aAAA,CAAC,CAAC;AACH,YAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;YACrC,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,EAAE;AAC3D,YAAA,QAAQ,CAAC,UAAU,GAAG,KAAK;AAC3B,YAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;QACrD;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG,KAAK,EAAE,OAAO,CAAC;QACtE;IACF;AAEA;;;AAGG;IACH,wBAAwB,GAAA;AACtB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAChD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;;AAGxC,YAAA,MAAM,UAAU,GAAQ;;gBAEtB,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;;AAGjC,gBAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACvE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,mBAAmB;gBAC3D,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE;AAC/D,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,OAAO;;AAG5C,gBAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ;AAC/C,gBAAA,mBAAmB,EAAE;AACnB,oBAAA,gBAAgB,EAAE,MAAM;;oBAExB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;AACzC,iBAAA;;AAGD,gBAAA,OAAO,EAAE;AACP,oBAAA,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,KAAK;AACpD,oBAAA,4BAA4B,EAAE,QAAQ,CAAC,4BAA4B,IAAI;AACxE,iBAAA;;gBAGD,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK;oBACtC,EAAE,EAAE,CAAC,CAAC,IAAI;oBACV,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,oBAAA,iBAAiB,EAAE;AACpB,iBAAA,CAAC,CAAC;;gBAGH,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;oBAChC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,wBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,wBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC3B,wBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,wBAAA,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;AACxB,qBAAA;AACD,oBAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI;AAC/B,iBAAA,CAAC,CAAC;;gBAGH,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK;oBAClC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;AACpB;AACF,iBAAA,CAAC,CAAC;;AAGH,gBAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC;;AAGvC,gBAAA,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE;;AAGjD,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,QAAQ,EAAE,KAAK;;gBAGf,IAAI,EAAE,QAAQ,CAAC;aAChB;AAED,YAAA,OAAO,UAAU;QACnB;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;AACzD,YAAA,OAAO,IAAI;QACb;IACF;AAEA;;AAEG;IACH,0BAA0B,GAAA;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAClD,QAAA,IAAI,CAAC,UAAU;YAAE;QAEjB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC1F,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAA,EAAA,EAAK,UAAU,CAAC,OAAO,OAAO;QACtF,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,kCAAA,EAAqC,IAAI,CAAC,QAAQ,CAAA,CAAE,CAAC;IAC9E;IAEQ,UAAU,GAAA;QAChB,OAAO,CAAA,GAAA,EAAM,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;IACtE;;IAIA,gBAAgB,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,QAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;YAC1C,KAAK,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;AAC5C,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAU,EAAA;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAEpC,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;;AAErB,YAAA,KAAa,CAAC,KAAK,CAAC,GAAG,KAAK;QAC/B;AAAO,aAAA,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;;YAEtC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjB,KAAK,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;YACvC;AACC,YAAA,KAAK,CAAC,MAAc,CAAC,WAAW,CAAC,GAAG,KAAK;QAC5C;aAAO;AACJ,YAAA,KAAa,CAAC,KAAK,CAAC,GAAG,KAAK;QAC/B;QAEA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,yBAAyB,CAAC,KAAa,EAAE,WAAmB,EAAE,KAAU,EAAA;AACtE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACvC;AACC,QAAA,KAAK,CAAC,MAAc,CAAC,WAAW,CAAC,GAAG,KAAK;QAC1C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;IAEA,6BAA6B,CAAC,KAAa,EAAE,UAAmB,EAAA;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AACtB,gBAAA,KAAK,CAAC,WAAW,GAAG,EAAE;YACxB;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;gBACvD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAC9C;QACF;aAAO;AACL,YAAA,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;YACzE,IAAI,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,EAAE;AACnC,gBAAA,KAAK,CAAC,WAAW,GAAG,SAAS;YAC/B;QACF;QACA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK;IACrE;;IAIA,iBAAiB,GAAA;AACf,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,SAAS,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;YAC5C,KAAK,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;AAC9C,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAU,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAEtC,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;;YAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClB,MAAM,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;YACxC;AACC,YAAA,MAAM,CAAC,MAAc,CAAC,WAAW,CAAC,GAAG,KAAK;QAC7C;aAAO;AACJ,YAAA,MAAc,CAAC,KAAK,CAAC,GAAG,KAAK;QAChC;QAEA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,0BAA0B,CAAC,KAAa,EAAE,WAAmB,EAAE,KAAU,EAAA;AACvE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,MAAM,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACxC;AACC,QAAA,MAAM,CAAC,MAAc,CAAC,WAAW,CAAC,GAAG,KAAK;QAC3C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;;IAIA,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,WAAW,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE;AAChD,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,sBAAsB,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA,IAAA,sBAAsB,CAAC,KAAa,EAAE,KAA6B,EAAE,KAAU,EAAA;AAC7E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACvC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,KAAK,CAAC,GAAG,KAAK;QACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,cAAsB,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,QAAQ,CAAC,QAAQ,GAAG;aACjB,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;aACjB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC5C;AAEA;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B;;AAIA;;AAEG;AACH,IAAA,SAAS,CAAC,GAAc,EAAA;QACtB,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE;;YAEnD,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO,IAAI,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;;YAE1D,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IACzB;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,IAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;AAEA;;AAEG;AACH,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACzB;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;;AAE7D,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;AACzD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,eAAA,CAAiB,CAAC;IACxC;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,OAAgB,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AAC3D,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAE7C,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,MAAM,EAAE;AAClC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;;AAGrC,YAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,gBAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE;;AAG5D,gBAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;gBAC9E,IAAI,kBAAkB,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,YAAA,EAAe,OAAO,CAAA,oBAAA,CAAsB,CAAC;oBACpE;gBACF;;AAGA,gBAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC/B,YAAY,CAAC,aAAa,CAAC,GAAG;AAC5B,oBAAA,GAAG,QAAQ;AACX,oBAAA,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;oBAC5E,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;iBAC7C;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,IAAA,EAAO,MAAM,CAAC,IAAI,CAAA,CAAE,CAAC;YAC7E;iBAAO;;gBAEL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxC,oBAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC/B,YAAY,CAAC,aAAa,CAAC,GAAG;AAC5B,wBAAA,GAAG,QAAQ;wBACX,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI;qBAC5C;AAED,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,GAAA,EAAM,QAAQ,CAAC,IAAI,eAAe,MAAM,CAAC,IAAI,CAAA,CAAE,CAAC;gBACzE;qBAAO;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;gBACzD;YACF;QACF;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;QAC9C;IACF;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,MAAc,EAAE,IAAY,EAAE,OAAgB,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AAE3D,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;AACrC,YAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;;AAG/B,YAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE;gBAC1C,YAAY,CAAC,aAAa,CAAC,GAAG;AAC5B,oBAAA,GAAG,QAAQ;oBACX,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CACpD,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CACzD;AACD,oBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;iBACzD;YACH;iBAAO;;gBAEL,YAAY,CAAC,aAAa,CAAC,GAAG;AAC5B,oBAAA,GAAG,QAAQ;AACX,oBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACzD,oBAAA,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI;iBACrF;YACH;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,eAAA,EAAkB,OAAO,GAAG,CAAA,EAAA,EAAK,OAAO,GAAG,GAAG,EAAE,CAAA,CAAE,CAAC;QACzE;IACF;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,MAAM,KAAK,GAAiB,EAAE;YAC9B,IAAI,IAAI,GAAG,GAAG;;AAGd,YAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;YAC7D;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;QACrD;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC1D;IACF;AAEA;;AAEG;IACK,qBAAqB,CAC3B,QAAa,EACb,KAAmB,EACnB,CAAS,EACT,CAAS,EACT,QAAiB,EAAA;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAA,EAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAA,CAAE;;AAG/E,QAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC;;AAG1B,QAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE;;AAG5D,QAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,YAAY,CAAC;AAE5E,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,YAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;YACpC,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChD,YAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;AACrC,YAAA,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AAClB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,QAAQ,EAAE;SACX;AAED,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGhB,QAAA,IAAI,QAAQ,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACrD,YAAA,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1D,gBAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC;QACF;;AAGA,QAAA,IAAI,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACvF,IAAI,MAAM,GAAG,CAAC;YACd,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,KAAI;gBACtD,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AACnE,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAEhC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;gBACnD;YACF;;YAGA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAEzC,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC;gBAC5C;YACF;AAEA,YAAA,MAAM,QAAQ,GAAG;AACf,gBAAA,EAAE,EAAE,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE;AACnC,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK;aAC1C;AAED,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;QACrD;QAAE,OAAO,KAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC1D;IACF;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,KAAmB,EAAA;;AAEtC,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACjC;AAEA;;AAEG;IACK,cAAc,CAAC,IAAgB,EAAE,QAAsB,EAAA;AAC7D,QAAA,MAAM,QAAQ,GAAQ;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC;SAClB;;QAGD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,iBAAA,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;iBACjD,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;AAC3B,iBAAA,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC;AAE9D,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,gBAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ;YAC9B;QACF;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,IAAY,EAAA;AACzC,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,4BAA4B,EAAE,qBAAqB;AACnD,YAAA,uCAAuC,EAAE,6BAA6B;AACtE,YAAA,qCAAqC,EAAE,yBAAyB;AAChE,YAAA,8BAA8B,EAAE,kBAAkB;AAClD,YAAA,gCAAgC,EAAE,sBAAsB;AACxD,YAAA,4BAA4B,EAAE,mBAAmB;AACjD,YAAA,kCAAkC,EAAE,yBAAyB;AAC7D,YAAA,iCAAiC,EAAE,kBAAkB;AACrD,YAAA,+BAA+B,EAAE,uBAAuB;AACxD,YAAA,iCAAiC,EAAE,iBAAiB;AACpD,YAAA,iCAAiC,EAAE;SACpC;AAED,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,oBAAoB;IAC9C;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAE,YAAoB,EAAE,KAAU,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AAEvD,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AAC7B,YAAA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;AAG/B,YAAA,IAAI,YAAY,KAAK,MAAM,EAAE;gBAC3B,YAAY,CAAC,SAAS,CAAC,GAAG;AACxB,oBAAA,GAAG,IAAI;AACP,oBAAA,IAAI,EAAE;iBACP;YACH;iBAAO;AACL,gBAAA,MAAM,aAAa,GAAG;oBACpB,GAAG,IAAI,CAAC,UAAU;oBAClB,CAAC,YAAY,GAAG;iBACjB;AAED,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ;AAC/B,gBAAA,MAAM,uBAAuB,GAC3B,CAAC,YAAY,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAgC;qBACxF,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,8BAA8B,CAAC;gBAC9E,IAAI,uBAAuB,EAAE;AAC3B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAG;wBACnD,IAAI,YAAY,EAAE;4BAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,aAAa,CAAC;AAC1E,4BAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;AACvC,4BAAA,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;AAC5D,4BAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;gCAClB,YAAY,CAAC,OAAO,CAAC,GAAG;oCACtB,GAAG,YAAY,CAAC,OAAO,CAAC;AACxB,oCAAA,QAAQ,EAAE;iCACX;gCACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AACvC,gCAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,sBAAA,EAAyB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;4BAC9E;wBACF;AACF,oBAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACd,oBAAA,CAAC,CAAC;gBACJ;gBAEA,YAAY,CAAC,SAAS,CAAC,GAAG;AACxB,oBAAA,GAAG,IAAI;AACP,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,QAAQ,EAAE;iBACX;YACH;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAElC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE;gBACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAChD;QACF;IACF;AAEA;;AAEG;IACK,MAAM,gBAAgB,CAAC,IAAY,EAAA;AACzC,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC7E,IAAI,QAAQ,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC;YACvD;QACF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAE,EAAE,KAAK,CAAC;QACvE;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAC1C;AAEA;;AAEG;AACH,IAAA,MAAM,2BAA2B,GAAA;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,IAAI,cAAc;AACjE,QAAA,IAAI;YACF,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE;gBACtE,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;YAC7D;QACF;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;QACvD;IACF;AAEA;;AAEG;IACH,YAAY,GAAA;QACV,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AAC9C,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ;AACxE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;AACzC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3C;QACA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE;AACrD,YAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QAC9D;QACA,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE;AACvD,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QAC9D;IACF;AAEA;;AAEG;IACH,eAAe,GAAA;QACb,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AAC9C,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AACxB,QAAA,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ;AACxE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;AACzC,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3C;AACA,QAAA,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa;QAC/B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;AAC1C,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;QAC3C;IACF;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrC,MAAM,OAAO,GAAiB,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,GAAG,GAAG,CAAC,CAAa,KAAI;AAC5B,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE;AACvB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACf,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAiB;YAC1H,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,GAAG,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAiB;YACzG,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,GAAG,CAAC,CAAC,CAAC;AAClC,QAAA,CAAC;AACD,QAAA,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,GAAG;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAChB,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QAChD,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IACvC;;AAIA;;AAEG;IACH,mBAAmB,CAAC,KAAgB,EAAE,QAAsB,EAAA;AAC1D,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ;AAC/B,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;YACzC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;QACzD;QACA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,gBAAA,EAAmB,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;IACzD;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAAgB,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACxC;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAgB,EAAA;;IAElC;AAEA;;AAEG;IACH,eAAe,CAAC,YAA0B,EAAE,UAA+B,EAAA;;QAEzE,IAAI,YAAY,CAAC,IAAI,KAAK,gCAAgC,IAAI,UAAU,CAAC,qBAAqB,CAAC,EAAE;YAC/F,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;AAC3D,kBAAE,UAAU,CAAC,qBAAqB;AAClC,kBAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAEvC,YAAA,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnE,OAAO,CAAC,GAAG,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;QACzD;;QAGA,IAAI,YAAY,CAAC,IAAI,KAAK,8BAA8B,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;YACjF,MAAM,KAAK,GAAa,EAAE;AAC1B,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;AACrC,gBAAA,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO;AAC1E,gBAAA,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,EAAE;gBACnC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE;oBACzC,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI;AAC9C,oBAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,wBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjF;YACF;AAAE,YAAA,MAAM;;YAER;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,OAAO,KAAK;QACpC;;AAGA,QAAA,MAAM,UAAU,GAA6B;AAC3C,YAAA,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACxC,YAAA,uCAAuC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;YACnE,qCAAqC,EAAE,CAAC,MAAM,CAAC;AAC/C,YAAA,6BAA6B,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;AACzD,YAAA,8BAA8B,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACpD,YAAA,gCAAgC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;YAC/D,4BAA4B,EAAE,CAAC,MAAM,CAAC;YACtC,4BAA4B,EAAE,CAAC,MAAM,CAAC;YACtC,yBAAyB,EAAE,CAAC,MAAM,CAAC;YACnC,gCAAgC,EAAE,CAAC,MAAM,CAAC;YAC1C,4BAA4B,EAAE,CAAC,MAAM,CAAC;YACtC,8BAA8B,EAAE,CAAC,MAAM,CAAC;YACxC,kCAAkC,EAAE,CAAC,MAAM,CAAC;AAC5C,YAAA,iCAAiC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;AACrD,YAAA,+BAA+B,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC/D,YAAA,iCAAiC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;AACrD,YAAA,iCAAiC,EAAE,CAAC,MAAM,EAAE,QAAQ;SACrD;QAED,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAgB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;AACjD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;AAEvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,YAAY,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAAE;AAE1E,QAAA,MAAM,OAAO,GAAe;AAC1B,YAAA,EAAE,EAAE,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;AAChD,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;AAC/B,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;AAC/B,YAAA,UAAU,EAAE,YAAY;YACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAClD,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,kBAAkB,EAAE,EAAE;YACtB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY;SAClE;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;AAEzC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG;AACjE,cAAE,CAAA,MAAA,EAAS,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAA,WAAA,EAAc,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA;cACzE,EAAE;AAEN,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,eAAe,CAAC,IAAI,CAAA,SAAA,EAAY,YAAY,CAAA,CAAE,CAAC;AACzF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;AAEA;;AAEG;IACH,eAAe,CAAC,KAAgB,EAAE,IAAgB,EAAA;AAChD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAC3C,IAAI,CAAC,cAAc,GAAG;AACpB,YAAA,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AAC5B,YAAA,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;SACzB;AAED,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,GAAG,MAAM;;AAEzC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,YAAA,GAAG,CAAC,GAAG,GAAG,gFAAgF;YAC1F,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C;IACF;AAEA;;AAEG;IACH,UAAU,CAAC,KAAgB,EAAE,IAAgB,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE;YACnE;QACF;QAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAgB;AACpE,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAC3C,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3D,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAE1D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAExD,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG;gBAC1B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;aACjB;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC;IACF;AAEA;;AAEG;IACH,aAAa,CAAC,KAAgB,EAAE,IAAgB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAAY,EAAE,IAAgB,EAAE,IAAkB,EAAA;QACjE,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;;AAE1B,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;gBAClB,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;gBACtC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,yBAAA,EAA4B,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;YAC9D;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;gBAC9D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxF,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC9B;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,oEAAoE,CAAC;AAC5F,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC9B;QACF;IACF;AAEA;;AAEG;AACH,IAAA,uBAAuB,CAAC,KAAY,EAAE,IAAgB,EAAE,OAAe,EAAA;QACrE,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;;AAE1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AACtD,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA,yBAAA,EAA4B,IAAI,CAAC,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAG,CAAC;QAC3E;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,oDAAoD,CAAC;AAC5E,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;IACF;;AAIA;;AAEG;IACH,qBAAqB,GAAA;QACnB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC3D;AAEA;;;AAGG;IACO,uBAAuB,CAC/B,GAA6C,EAC7C,IAAgB,EAAA;AAEhB,QAAA,MAAM,YAAY,GAA2B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;AAC7F,QAAA,MAAM,UAAU,GAA2B,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE;AAC5G,QAAA,MAAM,WAAW,GAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE;AAErG,QAAA,MAAM,aAAa,GAAwB;YACzC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC;YAC7D,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;YACnE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;SAC5D;AAED,QAAA,MAAM,UAAU,GAAwB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAC3E,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAC7D;AAED,QAAA,MAAM,WAAW,GAAwB;YACvC,IAAI,CAAC,gBAAgB,CACnB,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,WAAW,CACZ;SACF;AAED,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;YAChG,IAAI,UAAU,CAAC;kBACX,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;kBAC1F,EAAE,CAAC;AACP,YAAA,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;SAC7F;AAED,QAAA,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACxD;AAEQ,IAAA,gBAAgB,CACtB,IAAY,EACZ,KAAa,EACb,IAAY,EACZ,KAA6B,EAAA;QAE7B,OAAO;YACL,IAAI;YACJ,KAAK;YACL,KAAK;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE;oBACT,IAAI;oBACJ,IAAI;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;SACd;IACH;AAEQ,IAAA,wBAAwB,CAC9B,IAAY,EACZ,KAAa,EACb,IAAY,EACZ,KAA6B,EAAA;QAE7B,OAAO;YACL,IAAI;YACJ,KAAK;YACL,KAAK;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,SAAS,EAAE;oBACT,IAAI;oBACJ,IAAI;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC5B,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;SACd;IACH;AAEQ,IAAA,6BAA6B,CACnC,KAAuJ,EACvJ,KAA6B,EAC7B,KAAa,EAAA;AAEb,QAAA,MAAM,IAAI,GAAG,CAAA,WAAA,EAAc,KAAK,CAAC,IAAI,EAAE;AACvC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS;AACrC,QAAA,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa;QAC/C,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK;YACL,KAAK;AACL,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAG,KAAK,CAAC,MAAM,EAAE,QAAgB,IAAI,QAAQ;AACrD,gBAAA,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY;AACxC,gBAAA,SAAS,EAAE;oBACT,IAAI;oBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE;AAC9B,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;SACd;IACH;AAEA;;AAEG;AACO,IAAA,uBAAuB,CAAC,EAA4C,EAAA;AAC5E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ;YAAE;AACnC,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM;AACnB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,EAAE;AACpD,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1D;QACF;IACF;;AAIA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,UAA+B,EAAA;AAC3C,QAAA,OAAO,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC;IACzD;AAiBA;;;AAGG;AACO,IAAA,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;QACxE,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1B,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7D,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AAC/C,QAAA,OAAO,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;IACrD;AAEA;;AAEG;AACO,IAAA,0BAA0B,CAClC,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EAAA;QAEV,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAC1B,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAC7D,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;QAC/C,MAAM,CAAC,GAAG,GAAG;AACb,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;AACtE,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;QACrE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;IACzB;AAEA;;AAEG;AACO,IAAA,eAAe,CAAC,OAAe,EAAA;AACvC,QAAA,MAAM,QAAQ,GAA2B;YACvC,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IACxC;AAEA;;AAEG;AACO,IAAA,mBAAmB,CAAC,OAAe,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACvD,YAAA,OAAO,OAAO;QAChB;QACA,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,OAAO,SAAS;QAClB;QACA,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC9B,YAAA,OAAO,MAAM;QACf;QACA,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC9B,YAAA,OAAO,SAAS;QAClB;QACA,OAAO,SAAS,CAAC;IACnB;AAEA;;AAEG;AACH,IAAA,sBAAsB,CAAC,MAAc,EAAE,YAAoB,EAAE,UAAkB,EAAA;AAC7E,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;QACtD;QAAE,OAAO,KAAK,EAAE;;AAEd,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;QAC3C;IACF;8GAl1EW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,SAAA,EAVvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,uBAAuB;AACrC,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAmEgD,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7P7E,mrpCAukBA,EAAA,MAAA,EAAA,CAAA,42rDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDraI,YAAY,8BACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,qWACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,kSACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,4BAA4B,giBAC5B,6BAA6B,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,8BAA8B,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,gCAAgC,8FAChC,kCAAkC,EAAA,QAAA,EAAA,8BAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,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,CAAA,CAAA;;2FAYzB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjCnC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,mBAAmB;wBACnB,iBAAiB;wBACjB,eAAe;wBACf,iBAAiB;wBACjB,iBAAiB;wBACjB,cAAc;wBACd,YAAY;wBACZ,mBAAmB;wBACnB,sBAAsB;wBACtB,0BAA0B;wBAC1B,4BAA4B;wBAC5B,6BAA6B;wBAC7B,8BAA8B;wBAC9B,gCAAgC;wBAChC,kCAAkC;qBACnC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,uBAAyB;AACrC,yBAAA;qBACF,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mrpCAAA,EAAA,MAAA,EAAA,CAAA,42rDAAA,CAAA,EAAA;AAgEE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,0BAA0B,wEA2DL,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;;;;AExTvF;;AAEG;;;;"}
|