@open-mercato/core 0.7.1-develop.7193.1.910a5b0a1e → 0.7.1-develop.7194.1.ab4fc81f82
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/.turbo/turbo-build.log +2 -2
- package/AGENTS.md +4 -3
- package/agentic/standalone-guide.md +1 -1
- package/build.mjs +16 -0
- package/dist/generated/entities/action_log/index.js +2 -0
- package/dist/generated/entities/action_log/index.js.map +2 -2
- package/dist/generated/entities/user/index.js +2 -0
- package/dist/generated/entities/user/index.js.map +2 -2
- package/dist/generated/entities/user_task/index.js +14 -0
- package/dist/generated/entities/user_task/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition/index.js +6 -0
- package/dist/generated/entities/workflow_definition/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
- package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
- package/dist/generated/entities/workflow_instance/index.js +4 -0
- package/dist/generated/entities/workflow_instance/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +4 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +39 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/workflowsFixtures.js +477 -2
- package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
- package/dist/helpers/integration/workflowsUi.js +148 -0
- package/dist/helpers/integration/workflowsUi.js.map +7 -0
- package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
- package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
- package/dist/modules/audit_logs/data/entities.js +5 -0
- package/dist/modules/audit_logs/data/entities.js.map +2 -2
- package/dist/modules/audit_logs/data/validators.js +1 -0
- package/dist/modules/audit_logs/data/validators.js.map +2 -2
- package/dist/modules/audit_logs/lib/projections.js +2 -1
- package/dist/modules/audit_logs/lib/projections.js.map +2 -2
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
- package/dist/modules/audit_logs/services/actionLogService.js +3 -0
- package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
- package/dist/modules/auth/data/entities.js +6 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/executionPrincipal.js +140 -0
- package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
- package/dist/modules/business_rules/data/validators.js +6 -0
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +5 -3
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/commands/products.js +5 -0
- package/dist/modules/catalog/commands/products.js.map +2 -2
- package/dist/modules/catalog/workflows.js +19 -0
- package/dist/modules/catalog/workflows.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/cli.js +80 -0
- package/dist/modules/customer_accounts/cli.js.map +7 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
- package/dist/modules/customer_accounts/setup.js +4 -2
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +4 -0
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +2 -0
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/events.js +13 -2
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
- package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
- package/dist/modules/customers/lib/todoCompatibility.js +1 -1
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
- package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
- package/dist/modules/customers/workflows.js +29 -0
- package/dist/modules/customers/workflows.js.map +7 -0
- package/dist/modules/entities/api/records.js +13 -33
- package/dist/modules/entities/api/records.js.map +3 -3
- package/dist/modules/entities/lib/entityClassification.js +60 -0
- package/dist/modules/entities/lib/entityClassification.js.map +7 -0
- package/dist/modules/sales/commands/documents.js +31 -0
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/events.js +12 -1
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/workflows.js +12 -1
- package/dist/modules/sales/workflows.js.map +2 -2
- package/dist/modules/seeds/cli.js +199 -0
- package/dist/modules/seeds/cli.js.map +7 -0
- package/dist/modules/seeds/examples/sample-seed.json +26 -0
- package/dist/modules/seeds/index.js +12 -0
- package/dist/modules/seeds/index.js.map +7 -0
- package/dist/modules/workflows/acl.js +96 -0
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/ai-agents.js +50 -0
- package/dist/modules/workflows/ai-agents.js.map +7 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
- package/dist/modules/workflows/ai-tools/types.js +43 -0
- package/dist/modules/workflows/ai-tools/types.js.map +7 -0
- package/dist/modules/workflows/ai-tools.js +10 -0
- package/dist/modules/workflows/ai-tools.js.map +7 -0
- package/dist/modules/workflows/api/command-settings/route.js +137 -0
- package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/commands/route.js +72 -0
- package/dist/modules/workflows/api/commands/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
- package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/route.js +61 -113
- package/dist/modules/workflows/api/definitions/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/serialize.js +9 -0
- package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
- package/dist/modules/workflows/api/endpoints/route.js +69 -0
- package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
- package/dist/modules/workflows/api/functions/route.js +73 -0
- package/dist/modules/workflows/api/functions/route.js.map +7 -0
- package/dist/modules/workflows/api/grantable-features/route.js +75 -0
- package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
- package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/route.js +94 -3
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
- package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
- package/dist/modules/workflows/api/openapi.js +415 -4
- package/dist/modules/workflows/api/openapi.js.map +2 -2
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
- package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
- package/dist/modules/workflows/api/rule-usage/route.js +80 -0
- package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
- package/dist/modules/workflows/api/task-settings/route.js +107 -0
- package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
- package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/route.js +37 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/serialize.js +83 -0
- package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
- package/dist/modules/workflows/api/templates/route.js +69 -0
- package/dist/modules/workflows/api/templates/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/route.js +119 -0
- package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
- package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +131 -51
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
- package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
- package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/instances/page.js +159 -22
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/tasks/page.js +8 -250
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
- package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
- package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
- package/dist/modules/workflows/cli.js +1 -1
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/commands/tasks.js +81 -0
- package/dist/modules/workflows/commands/tasks.js.map +7 -0
- package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
- package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
- package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
- package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/AgentSelector.js +115 -0
- package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
- package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
- package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
- package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
- package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/InputDataPanel.js +128 -0
- package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
- package/dist/modules/workflows/components/InspectorPanel.js +161 -0
- package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
- package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
- package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
- package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
- package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
- package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TriggersDialog.js +53 -0
- package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
- package/dist/modules/workflows/components/TriggersEditor.js +331 -0
- package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
- package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
- package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
- package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
- package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
- package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
- package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
- package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
- package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
- package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
- package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
- package/dist/modules/workflows/components/formConfig.js +39 -10
- package/dist/modules/workflows/components/formConfig.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
- package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
- package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
- package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
- package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
- package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/index.js +14 -0
- package/dist/modules/workflows/components/nodes/index.js.map +2 -2
- package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
- package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunGantt.js +130 -0
- package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
- package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
- package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
- package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
- package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
- package/dist/modules/workflows/data/entities.js +144 -4
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/metrics-validators.js +35 -0
- package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
- package/dist/modules/workflows/data/task-primitives.js +14 -0
- package/dist/modules/workflows/data/task-primitives.js.map +7 -0
- package/dist/modules/workflows/data/validators.js +504 -61
- package/dist/modules/workflows/data/validators.js.map +3 -3
- package/dist/modules/workflows/di.js +16 -1
- package/dist/modules/workflows/di.js.map +2 -2
- package/dist/modules/workflows/events.js +66 -8
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
- package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/dist/modules/workflows/extension-points.js +1 -1
- package/dist/modules/workflows/extension-points.js.map +2 -2
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
- package/dist/modules/workflows/lib/activity-executor.js +505 -137
- package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
- package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
- package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
- package/dist/modules/workflows/lib/activity-registry.js +27 -0
- package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
- package/dist/modules/workflows/lib/activity-types.js +291 -0
- package/dist/modules/workflows/lib/activity-types.js.map +7 -0
- package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
- package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
- package/dist/modules/workflows/lib/advanced-config.js +31 -0
- package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review.js +66 -0
- package/dist/modules/workflows/lib/agent-review.js.map +7 -0
- package/dist/modules/workflows/lib/ai-authoring.js +155 -0
- package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
- package/dist/modules/workflows/lib/annotation-events.js +10 -0
- package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
- package/dist/modules/workflows/lib/branching-routes.js +182 -0
- package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
- package/dist/modules/workflows/lib/breach-routing.js +50 -0
- package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
- package/dist/modules/workflows/lib/bulk-replay.js +101 -0
- package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
- package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
- package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
- package/dist/modules/workflows/lib/caller-graph.js +53 -0
- package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
- package/dist/modules/workflows/lib/code-view-apply.js +86 -0
- package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
- package/dist/modules/workflows/lib/component-guard.js +7 -0
- package/dist/modules/workflows/lib/component-guard.js.map +7 -0
- package/dist/modules/workflows/lib/condition-handler.js +443 -0
- package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
- package/dist/modules/workflows/lib/context-ledger.js +448 -0
- package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
- package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
- package/dist/modules/workflows/lib/definition-error-body.js +33 -0
- package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
- package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
- package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
- package/dist/modules/workflows/lib/definition-grant.js +90 -0
- package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
- package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
- package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
- package/dist/modules/workflows/lib/definition-payload.js +31 -0
- package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
- package/dist/modules/workflows/lib/draft-restore.js +49 -0
- package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
- package/dist/modules/workflows/lib/dry-run.js +106 -0
- package/dist/modules/workflows/lib/dry-run.js.map +7 -0
- package/dist/modules/workflows/lib/duration.js +66 -17
- package/dist/modules/workflows/lib/duration.js.map +2 -2
- package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
- package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
- package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
- package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/editor-annotations.js +195 -0
- package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
- package/dist/modules/workflows/lib/editor-commands.js +103 -0
- package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
- package/dist/modules/workflows/lib/editor-history.js +51 -0
- package/dist/modules/workflows/lib/editor-history.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-path.js +90 -0
- package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
- package/dist/modules/workflows/lib/engine-version.js +42 -0
- package/dist/modules/workflows/lib/engine-version.js.map +7 -0
- package/dist/modules/workflows/lib/error-handler.js +132 -0
- package/dist/modules/workflows/lib/error-handler.js.map +7 -0
- package/dist/modules/workflows/lib/error-routing.js +104 -0
- package/dist/modules/workflows/lib/error-routing.js.map +7 -0
- package/dist/modules/workflows/lib/event-logger.js +23 -0
- package/dist/modules/workflows/lib/event-logger.js.map +2 -2
- package/dist/modules/workflows/lib/expression-refs.js +168 -0
- package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
- package/dist/modules/workflows/lib/failure-grouping.js +62 -0
- package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
- package/dist/modules/workflows/lib/find-definition.js +1 -0
- package/dist/modules/workflows/lib/find-definition.js.map +2 -2
- package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
- package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
- package/dist/modules/workflows/lib/graph-utils.js +328 -77
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/icon-search.js +32 -0
- package/dist/modules/workflows/lib/icon-search.js.map +7 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
- package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
- package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-drag.js +28 -0
- package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
- package/dist/modules/workflows/lib/node-config-summary.js +128 -0
- package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
- package/dist/modules/workflows/lib/node-geometry.js +53 -0
- package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
- package/dist/modules/workflows/lib/node-nudge.js +44 -0
- package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
- package/dist/modules/workflows/lib/node-placement.js +55 -0
- package/dist/modules/workflows/lib/node-placement.js.map +7 -0
- package/dist/modules/workflows/lib/node-type-icons.js +54 -13
- package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
- package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
- package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/outcome-routing.js +158 -0
- package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
- package/dist/modules/workflows/lib/owned-definition.js +107 -0
- package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
- package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
- package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drag.js +36 -0
- package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drop.js +45 -0
- package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
- package/dist/modules/workflows/lib/parallel-handler.js +57 -2
- package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
- package/dist/modules/workflows/lib/port-contract.js +54 -0
- package/dist/modules/workflows/lib/port-contract.js.map +7 -0
- package/dist/modules/workflows/lib/portal-task-access.js +89 -0
- package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
- package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
- package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
- package/dist/modules/workflows/lib/route-chip-events.js +23 -0
- package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
- package/dist/modules/workflows/lib/route-chips.js +91 -0
- package/dist/modules/workflows/lib/route-chips.js.map +7 -0
- package/dist/modules/workflows/lib/route-edge.js +17 -0
- package/dist/modules/workflows/lib/route-edge.js.map +7 -0
- package/dist/modules/workflows/lib/route-kinds.js +67 -0
- package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
- package/dist/modules/workflows/lib/route-priority.js +104 -0
- package/dist/modules/workflows/lib/route-priority.js.map +7 -0
- package/dist/modules/workflows/lib/run-duration.js +44 -0
- package/dist/modules/workflows/lib/run-duration.js.map +7 -0
- package/dist/modules/workflows/lib/run-event-tone.js +25 -0
- package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
- package/dist/modules/workflows/lib/run-execution.js +305 -0
- package/dist/modules/workflows/lib/run-execution.js.map +7 -0
- package/dist/modules/workflows/lib/run-gantt.js +180 -0
- package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome.js +48 -0
- package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
- package/dist/modules/workflows/lib/sample-resolver.js +71 -0
- package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
- package/dist/modules/workflows/lib/seeds.js +1 -1
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/server-output-contract.js +65 -0
- package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
- package/dist/modules/workflows/lib/set-variable.js +47 -0
- package/dist/modules/workflows/lib/set-variable.js.map +7 -0
- package/dist/modules/workflows/lib/signal-handler.js +63 -4
- package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
- package/dist/modules/workflows/lib/start-fixtures.js +42 -0
- package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
- package/dist/modules/workflows/lib/status-colors.js +153 -22
- package/dist/modules/workflows/lib/status-colors.js.map +2 -2
- package/dist/modules/workflows/lib/step-handler.js +529 -53
- package/dist/modules/workflows/lib/step-handler.js.map +3 -3
- package/dist/modules/workflows/lib/step-presentation.js +147 -0
- package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
- package/dist/modules/workflows/lib/step-through.js +26 -0
- package/dist/modules/workflows/lib/step-through.js.map +7 -0
- package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
- package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
- package/dist/modules/workflows/lib/task-decision-context.js +38 -0
- package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
- package/dist/modules/workflows/lib/task-decisions.js +49 -0
- package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-access.js +62 -0
- package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-types.js +36 -0
- package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-registry.js +33 -0
- package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-schema.js +75 -0
- package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
- package/dist/modules/workflows/lib/task-handler.js +251 -32
- package/dist/modules/workflows/lib/task-handler.js.map +2 -2
- package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
- package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
- package/dist/modules/workflows/lib/task-list-query.js +19 -0
- package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
- package/dist/modules/workflows/lib/task-notifications.js +119 -0
- package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
- package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
- package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
- package/dist/modules/workflows/lib/task-presets.js +35 -0
- package/dist/modules/workflows/lib/task-presets.js.map +7 -0
- package/dist/modules/workflows/lib/task-quick-action.js +45 -0
- package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
- package/dist/modules/workflows/lib/task-resolution.js +120 -0
- package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
- package/dist/modules/workflows/lib/task-sla.js +357 -0
- package/dist/modules/workflows/lib/task-sla.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
- package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility.js +194 -0
- package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
- package/dist/modules/workflows/lib/timer-handler.js +3 -1
- package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +148 -20
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/dist/modules/workflows/lib/trigger-node.js +121 -0
- package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
- package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
- package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-executor.js +658 -6
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
- package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
- package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-templates.js +69 -0
- package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
- package/dist/modules/workflows/notifications.js +38 -10
- package/dist/modules/workflows/notifications.js.map +2 -2
- package/dist/modules/workflows/setup.js +81 -1
- package/dist/modules/workflows/setup.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
- package/dist/modules/workflows/widgets/injection-table.js +26 -0
- package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
- package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
- package/generated/entities/action_log/index.ts +1 -0
- package/generated/entities/user/index.ts +1 -0
- package/generated/entities/user_task/index.ts +7 -0
- package/generated/entities/workflow_definition/index.ts +3 -0
- package/generated/entities/workflow_definition_draft/index.ts +11 -0
- package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
- package/generated/entities/workflow_instance/index.ts +2 -0
- package/generated/entities.ids.generated.ts +4 -1
- package/generated/entity-fields-registry.ts +39 -0
- package/jest.setup.ts +13 -0
- package/package.json +8 -7
- package/src/helpers/integration/workflowsFixtures.ts +765 -5
- package/src/helpers/integration/workflowsUi.ts +318 -0
- package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
- package/src/modules/audit_logs/data/entities.ts +12 -0
- package/src/modules/audit_logs/data/validators.ts +1 -0
- package/src/modules/audit_logs/lib/projections.ts +5 -1
- package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
- package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
- package/src/modules/audit_logs/services/actionLogService.ts +3 -0
- package/src/modules/auth/data/entities.ts +21 -0
- package/src/modules/auth/i18n/de.json +31 -0
- package/src/modules/auth/i18n/en.json +31 -0
- package/src/modules/auth/i18n/es.json +31 -0
- package/src/modules/auth/i18n/ko.json +31 -0
- package/src/modules/auth/i18n/pl.json +31 -0
- package/src/modules/auth/lib/executionPrincipal.ts +235 -0
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
- package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
- package/src/modules/business_rules/data/validators.ts +6 -0
- package/src/modules/business_rules/i18n/de.json +4 -0
- package/src/modules/business_rules/i18n/en.json +4 -0
- package/src/modules/business_rules/i18n/es.json +4 -0
- package/src/modules/business_rules/i18n/ko.json +4 -0
- package/src/modules/business_rules/i18n/pl.json +4 -0
- package/src/modules/business_rules/lib/rule-engine.ts +15 -1
- package/src/modules/catalog/commands/products.ts +12 -0
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/ko.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/catalog/workflows.ts +35 -0
- package/src/modules/customer_accounts/AGENTS.md +11 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
- package/src/modules/customer_accounts/cli.ts +96 -0
- package/src/modules/customer_accounts/i18n/de.json +5 -0
- package/src/modules/customer_accounts/i18n/en.json +5 -0
- package/src/modules/customer_accounts/i18n/es.json +5 -0
- package/src/modules/customer_accounts/i18n/ko.json +5 -0
- package/src/modules/customer_accounts/i18n/pl.json +5 -0
- package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
- package/src/modules/customer_accounts/setup.ts +15 -3
- package/src/modules/customers/commands/deals.ts +5 -0
- package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
- package/src/modules/customers/components/detail/utils.ts +2 -0
- package/src/modules/customers/events.ts +21 -3
- package/src/modules/customers/i18n/de.json +4 -0
- package/src/modules/customers/i18n/en.json +4 -0
- package/src/modules/customers/i18n/es.json +4 -0
- package/src/modules/customers/i18n/ko.json +4 -0
- package/src/modules/customers/i18n/pl.json +4 -0
- package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
- package/src/modules/customers/lib/todoCompatibility.ts +4 -1
- package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
- package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
- package/src/modules/customers/workflows.ts +57 -0
- package/src/modules/entities/api/records.ts +18 -62
- package/src/modules/entities/lib/entityClassification.ts +102 -0
- package/src/modules/sales/commands/documents.ts +46 -0
- package/src/modules/sales/events.ts +20 -2
- package/src/modules/sales/i18n/de.json +2 -1
- package/src/modules/sales/i18n/en.json +2 -1
- package/src/modules/sales/i18n/es.json +2 -1
- package/src/modules/sales/i18n/ko.json +2 -1
- package/src/modules/sales/i18n/pl.json +2 -1
- package/src/modules/sales/workflows.ts +12 -1
- package/src/modules/seeds/README.md +86 -0
- package/src/modules/seeds/cli.ts +220 -0
- package/src/modules/seeds/examples/sample-seed.json +26 -0
- package/src/modules/seeds/index.ts +11 -0
- package/src/modules/workflows/AGENTS.md +851 -10
- package/src/modules/workflows/acl.ts +96 -0
- package/src/modules/workflows/ai-agents.ts +80 -0
- package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
- package/src/modules/workflows/ai-tools/types.ts +117 -0
- package/src/modules/workflows/ai-tools.ts +20 -0
- package/src/modules/workflows/api/command-settings/route.ts +171 -0
- package/src/modules/workflows/api/commands/route.ts +109 -0
- package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
- package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
- package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
- package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
- package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
- package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
- package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
- package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
- package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
- package/src/modules/workflows/api/definitions/route.ts +88 -113
- package/src/modules/workflows/api/definitions/serialize.ts +9 -0
- package/src/modules/workflows/api/endpoints/route.ts +88 -0
- package/src/modules/workflows/api/functions/route.ts +91 -0
- package/src/modules/workflows/api/grantable-features/route.ts +102 -0
- package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
- package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
- package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
- package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
- package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
- package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
- package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
- package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
- package/src/modules/workflows/api/instances/route.ts +135 -3
- package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
- package/src/modules/workflows/api/openapi.ts +549 -2
- package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
- package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
- package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
- package/src/modules/workflows/api/rule-usage/route.ts +94 -0
- package/src/modules/workflows/api/task-settings/route.ts +138 -0
- package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
- package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
- package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
- package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
- package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
- package/src/modules/workflows/api/tasks/route.ts +60 -5
- package/src/modules/workflows/api/tasks/serialize.ts +119 -0
- package/src/modules/workflows/api/templates/route.ts +87 -0
- package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
- package/src/modules/workflows/api/work-inbox/route.ts +153 -0
- package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
- package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
- package/src/modules/workflows/backend/definitions/page.tsx +156 -76
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
- package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
- package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
- package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/page.tsx +218 -38
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
- package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
- package/src/modules/workflows/backend/tasks/page.tsx +20 -333
- package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
- package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
- package/src/modules/workflows/cli.ts +1 -1
- package/src/modules/workflows/commands/tasks.ts +146 -0
- package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
- package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
- package/src/modules/workflows/components/AgentSelector.tsx +200 -0
- package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
- package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
- package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
- package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
- package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
- package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
- package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
- package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
- package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
- package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
- package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
- package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
- package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
- package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
- package/src/modules/workflows/components/StepsEditor.tsx +9 -2
- package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
- package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
- package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
- package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
- package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
- package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
- package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
- package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
- package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
- package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
- package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
- package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
- package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
- package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
- package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
- package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
- package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
- package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
- package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
- package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
- package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
- package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
- package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
- package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
- package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
- package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
- package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
- package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
- package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
- package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
- package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
- package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
- package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
- package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
- package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
- package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
- package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
- package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
- package/src/modules/workflows/components/formConfig.tsx +84 -10
- package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
- package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
- package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
- package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
- package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
- package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
- package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
- package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
- package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
- package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
- package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
- package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
- package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
- package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
- package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
- package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
- package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
- package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
- package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
- package/src/modules/workflows/components/nodes/index.ts +17 -0
- package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
- package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
- package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
- package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
- package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
- package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
- package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
- package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
- package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
- package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
- package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
- package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
- package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
- package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
- package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
- package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
- package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
- package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
- package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
- package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
- package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
- package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
- package/src/modules/workflows/data/entities.ts +397 -4
- package/src/modules/workflows/data/metrics-validators.ts +51 -0
- package/src/modules/workflows/data/task-primitives.ts +36 -0
- package/src/modules/workflows/data/types.ts +81 -2
- package/src/modules/workflows/data/validators.ts +729 -60
- package/src/modules/workflows/di.ts +22 -0
- package/src/modules/workflows/events.ts +68 -8
- package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/src/modules/workflows/examples/templates/order-approval.json +230 -0
- package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/src/modules/workflows/extension-points.ts +1 -1
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
- package/src/modules/workflows/i18n/de.json +1083 -24
- package/src/modules/workflows/i18n/en.json +1081 -22
- package/src/modules/workflows/i18n/es.json +1083 -24
- package/src/modules/workflows/i18n/ko.json +1072 -13
- package/src/modules/workflows/i18n/pl.json +1082 -23
- package/src/modules/workflows/lib/activity-executor.ts +855 -186
- package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
- package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
- package/src/modules/workflows/lib/activity-registry.ts +89 -0
- package/src/modules/workflows/lib/activity-types.ts +415 -0
- package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
- package/src/modules/workflows/lib/advanced-config.ts +41 -0
- package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
- package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
- package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
- package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
- package/src/modules/workflows/lib/agent-review.ts +171 -0
- package/src/modules/workflows/lib/ai-authoring.ts +402 -0
- package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
- package/src/modules/workflows/lib/annotation-events.ts +15 -0
- package/src/modules/workflows/lib/branching-routes.ts +280 -0
- package/src/modules/workflows/lib/breach-routing.ts +142 -0
- package/src/modules/workflows/lib/bulk-replay.ts +185 -0
- package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
- package/src/modules/workflows/lib/caller-graph.ts +104 -0
- package/src/modules/workflows/lib/code-view-apply.ts +178 -0
- package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
- package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
- package/src/modules/workflows/lib/component-guard.ts +13 -0
- package/src/modules/workflows/lib/condition-handler.ts +658 -0
- package/src/modules/workflows/lib/context-ledger.ts +814 -0
- package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
- package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
- package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
- package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
- package/src/modules/workflows/lib/definition-error-body.ts +43 -0
- package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
- package/src/modules/workflows/lib/definition-grant.ts +211 -0
- package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
- package/src/modules/workflows/lib/definition-payload.ts +81 -0
- package/src/modules/workflows/lib/draft-restore.ts +72 -0
- package/src/modules/workflows/lib/dry-run.ts +203 -0
- package/src/modules/workflows/lib/duration.ts +138 -24
- package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
- package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
- package/src/modules/workflows/lib/editor-annotations.ts +301 -0
- package/src/modules/workflows/lib/editor-commands.ts +205 -0
- package/src/modules/workflows/lib/editor-history.ts +151 -0
- package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
- package/src/modules/workflows/lib/endpoint-path.ts +134 -0
- package/src/modules/workflows/lib/engine-version.ts +67 -0
- package/src/modules/workflows/lib/error-handler.ts +192 -0
- package/src/modules/workflows/lib/error-routing.ts +236 -0
- package/src/modules/workflows/lib/event-logger.ts +27 -0
- package/src/modules/workflows/lib/expression-refs.ts +291 -0
- package/src/modules/workflows/lib/failure-grouping.ts +134 -0
- package/src/modules/workflows/lib/find-definition.ts +4 -0
- package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
- package/src/modules/workflows/lib/graph-utils.ts +620 -110
- package/src/modules/workflows/lib/icon-search.ts +65 -0
- package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
- package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
- package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
- package/src/modules/workflows/lib/ledger-drag.ts +61 -0
- package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
- package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
- package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
- package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
- package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
- package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
- package/src/modules/workflows/lib/node-config-summary.ts +235 -0
- package/src/modules/workflows/lib/node-geometry.ts +168 -0
- package/src/modules/workflows/lib/node-nudge.ts +63 -0
- package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
- package/src/modules/workflows/lib/node-placement.ts +104 -0
- package/src/modules/workflows/lib/node-type-icons.ts +71 -10
- package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
- package/src/modules/workflows/lib/outcome-routing.ts +346 -0
- package/src/modules/workflows/lib/owned-definition.ts +188 -0
- package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
- package/src/modules/workflows/lib/palette-drag.ts +68 -0
- package/src/modules/workflows/lib/palette-drop.ts +114 -0
- package/src/modules/workflows/lib/parallel-handler.ts +79 -2
- package/src/modules/workflows/lib/port-contract.ts +107 -0
- package/src/modules/workflows/lib/portal-task-access.ts +220 -0
- package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
- package/src/modules/workflows/lib/route-chip-events.ts +45 -0
- package/src/modules/workflows/lib/route-chips.ts +177 -0
- package/src/modules/workflows/lib/route-edge.ts +57 -0
- package/src/modules/workflows/lib/route-kinds.ts +166 -0
- package/src/modules/workflows/lib/route-priority.ts +197 -0
- package/src/modules/workflows/lib/run-duration.ts +70 -0
- package/src/modules/workflows/lib/run-event-tone.ts +46 -0
- package/src/modules/workflows/lib/run-execution.ts +598 -0
- package/src/modules/workflows/lib/run-gantt.ts +311 -0
- package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
- package/src/modules/workflows/lib/run-outcome.ts +142 -0
- package/src/modules/workflows/lib/sample-resolver.ts +113 -0
- package/src/modules/workflows/lib/seeds.ts +3 -1
- package/src/modules/workflows/lib/server-output-contract.ts +120 -0
- package/src/modules/workflows/lib/set-variable.ts +94 -0
- package/src/modules/workflows/lib/signal-handler.ts +134 -4
- package/src/modules/workflows/lib/start-fixtures.ts +93 -0
- package/src/modules/workflows/lib/status-colors.ts +220 -21
- package/src/modules/workflows/lib/step-handler.ts +744 -68
- package/src/modules/workflows/lib/step-presentation.ts +295 -0
- package/src/modules/workflows/lib/step-through.ts +71 -0
- package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
- package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
- package/src/modules/workflows/lib/task-decision-context.ts +76 -0
- package/src/modules/workflows/lib/task-decisions.ts +117 -0
- package/src/modules/workflows/lib/task-entity-access.ts +181 -0
- package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
- package/src/modules/workflows/lib/task-entity-types.ts +66 -0
- package/src/modules/workflows/lib/task-form-registry.ts +123 -0
- package/src/modules/workflows/lib/task-form-schema.ts +129 -0
- package/src/modules/workflows/lib/task-handler.ts +492 -51
- package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
- package/src/modules/workflows/lib/task-list-query.ts +46 -0
- package/src/modules/workflows/lib/task-notifications.ts +218 -0
- package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
- package/src/modules/workflows/lib/task-presets.ts +95 -0
- package/src/modules/workflows/lib/task-quick-action.ts +111 -0
- package/src/modules/workflows/lib/task-resolution.ts +270 -0
- package/src/modules/workflows/lib/task-sla.ts +628 -0
- package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
- package/src/modules/workflows/lib/task-visibility.ts +627 -0
- package/src/modules/workflows/lib/timer-handler.ts +8 -1
- package/src/modules/workflows/lib/transition-handler.ts +228 -20
- package/src/modules/workflows/lib/trigger-node.ts +272 -0
- package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
- package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
- package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
- package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
- package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
- package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
- package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
- package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
- package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
- package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
- package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
- package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
- package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
- package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
- package/src/modules/workflows/lib/workflow-templates.ts +91 -0
- package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
- package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
- package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
- package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
- package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
- package/src/modules/workflows/notifications.ts +40 -10
- package/src/modules/workflows/setup.ts +128 -0
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
- package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
- package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
- package/src/modules/workflows/widgets/injection-table.ts +52 -2
- package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
- package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
- package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
- package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/workflows/components/NodeEditDialogCrudForm.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client'\n\nimport type { Node } from '@xyflow/react'\nimport { useState, useEffect, useCallback, useMemo } from 'react'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@open-mercato/ui/primitives/dialog'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Alert, AlertDescription } from '@open-mercato/ui/primitives/alert'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Trash2 } from 'lucide-react'\nimport { CrudForm, type CrudFormGroup, type CrudField, type CrudCustomFieldRenderProps } from '@open-mercato/ui/backend/CrudForm'\nimport { JsonBuilder } from '@open-mercato/ui/backend/JsonBuilder'\nimport { FormFieldArrayEditor } from './fields/FormFieldArrayEditor'\nimport { ActivityArrayEditor } from './fields/ActivityArrayEditor'\nimport { MappingArrayEditor } from './fields/MappingArrayEditor'\nimport { WorkflowSelectorField } from './fields/WorkflowSelectorField'\nimport { StartPreConditionsEditor } from './fields/StartPreConditionsEditor'\nimport { nodeToFormValues, formValuesToNodeUpdates, isJsonSchemaFormat, type NodeFormValues } from '../lib/nodeFormTransforms'\nimport { sanitizeId } from '../lib/graph-utils'\n\n/**\n * JsonConfigEditor - Custom field wrapper for JsonBuilder\n */\nfunction JsonConfigEditor({ value, setValue, disabled }: CrudCustomFieldRenderProps) {\n return (\n <JsonBuilder\n value={value || {}}\n onChange={setValue}\n disabled={disabled}\n />\n )\n}\n\nexport interface NodeEditDialogCrudFormProps {\n node: Node | null\n isOpen: boolean\n onClose: () => void\n onSave: (nodeId: string, updates: Partial<Node['data']>) => void\n onDelete?: (nodeId: string) => void\n}\n\n/**\n * NodeEditDialogCrudForm - CrudForm-based modal dialog for editing step properties\n *\n * Migrated from NodeEditDialog to use CrudForm for:\n * - UI coherence with other admin forms\n * - Custom fields support (future enhancement)\n * - Standardized validation and error handling\n * - Consistent keyboard shortcuts\n *\n * Handles 7 node types with dynamic groups:\n * - start: Non-editable (alert only)\n * - end: Non-editable (alert only)\n * - userTask: Assignment fields + form builder\n * - automated: Activity type + activities array\n * - subWorkflow: Workflow selector + input/output mappings\n * - waitForSignal: Signal name + timeout\n * - decision: Basic fields only\n */\nexport function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete }: NodeEditDialogCrudFormProps) {\n const [initialValues, setInitialValues] = useState<Partial<NodeFormValues>>({})\n const [showJsonSchemaWarning, setShowJsonSchemaWarning] = useState(false)\n\n // Load node data when dialog opens\n useEffect(() => {\n if (node && isOpen) {\n const values = nodeToFormValues(node)\n setInitialValues(values)\n setShowJsonSchemaWarning(isJsonSchemaFormat(node))\n }\n }, [node, isOpen])\n\n const handleSubmit = useCallback(async (values: Record<string, unknown>) => {\n if (!node) return\n\n // Validate and sanitize step ID\n const sanitizedId = sanitizeId(node.id)\n if (sanitizedId !== node.id) {\n if (typeof window !== 'undefined') {\n window.alert(\n `\u26A0\uFE0F Step ID was sanitized from \"${node.id}\" to \"${sanitizedId}\" to match schema requirements (lowercase letters, numbers, hyphens, and underscores only).`\n )\n }\n }\n\n try {\n const updates = formValuesToNodeUpdates(values as unknown as NodeFormValues, node)\n onSave(node.id, updates)\n onClose()\n } catch (error) {\n // Error will be displayed in form (e.g., invalid JSON)\n throw error\n }\n }, [node, onSave, onClose])\n\n const handleDelete = useCallback(() => {\n if (!node || !onDelete) return\n onDelete(node.id)\n }, [node, onDelete])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose()\n }\n }, [onClose])\n\n // Dynamic groups based on node type\n const groups: CrudFormGroup[] = useMemo(() => {\n if (!node) return []\n\n // End nodes are non-editable\n if (node.type === 'end') {\n return [\n {\n id: 'info',\n column: 1,\n bare: true,\n component: () => (\n <Alert status=\"information\">\n <AlertDescription>\n End nodes cannot be edited. They mark the completion of the workflow.\n </AlertDescription>\n </Alert>\n ),\n },\n ]\n }\n\n // Start nodes: allow editing pre-conditions\n if (node.type === 'start') {\n return [\n {\n id: 'info',\n column: 1,\n bare: true,\n component: () => (\n <Alert status=\"information\" className=\"mb-4\">\n <AlertDescription>\n Start nodes mark the beginning of the workflow. You can define pre-conditions that must pass before the workflow can be started.\n </AlertDescription>\n </Alert>\n ),\n },\n {\n id: 'preConditions',\n title: 'Pre-Conditions',\n column: 1,\n description: 'Business rules that must pass before the workflow can start',\n fields: ['preConditions'],\n },\n ]\n }\n\n const baseGroups: CrudFormGroup[] = [\n {\n id: 'basic',\n title: 'Basic Information',\n column: 1,\n fields: ['stepName', 'description', 'timeout'],\n },\n ]\n\n // UserTask specific groups\n if (node.type === 'userTask') {\n return [\n ...baseGroups,\n {\n id: 'userTask',\n title: 'User Task Configuration',\n column: 1,\n fields: ['assignedTo', 'assignedToRoles', 'formKey'],\n },\n {\n id: 'formFields',\n title: 'Form Fields',\n column: 1,\n description: 'Define the form structure for this user task',\n fields: ['formFields'],\n },\n {\n id: 'advanced',\n title: 'Advanced Configuration',\n column: 1,\n description: 'Additional JSON configuration (userTaskConfig, retryPolicy, etc.)',\n fields: ['advancedConfig'],\n },\n ]\n }\n\n // Automated specific groups\n if (node.type === 'automated') {\n return [\n ...baseGroups,\n {\n id: 'automated',\n title: 'Automated Task Configuration',\n column: 1,\n fields: ['activityType', 'activityId'],\n },\n {\n id: 'stepActivities',\n title: 'Step Activities',\n column: 1,\n description: 'Activities executed as part of this automated step',\n fields: ['stepActivities'],\n },\n {\n id: 'advanced',\n title: 'Advanced Configuration',\n column: 1,\n description: 'Additional JSON configuration (retryPolicy, etc.)',\n fields: ['advancedConfig'],\n },\n ]\n }\n\n // SubWorkflow specific groups\n if (node.type === 'subWorkflow') {\n return [\n ...baseGroups,\n {\n id: 'subWorkflow',\n title: 'Sub-Workflow Configuration',\n column: 1,\n fields: ['subWorkflowId', 'subWorkflowVersion'],\n },\n {\n id: 'mappings',\n title: 'Data Mappings',\n column: 1,\n description: 'Map data between parent and sub-workflow',\n fields: ['inputMappings', 'outputMappings'],\n },\n {\n id: 'advanced',\n title: 'Advanced Configuration',\n column: 1,\n description: 'Additional JSON configuration',\n fields: ['advancedConfig'],\n },\n ]\n }\n\n // WaitForSignal specific groups\n if (node.type === 'waitForSignal') {\n return [\n ...baseGroups,\n {\n id: 'signal',\n title: 'Signal Configuration',\n column: 1,\n fields: ['signalName', 'signalTimeout'],\n },\n {\n id: 'advanced',\n title: 'Advanced Configuration',\n column: 1,\n description: 'Additional JSON configuration',\n fields: ['advancedConfig'],\n },\n ]\n }\n\n // Decision and other types: just basic fields + advanced\n return [\n ...baseGroups,\n {\n id: 'advanced',\n title: 'Advanced Configuration',\n column: 1,\n description: 'Additional JSON configuration',\n fields: ['advancedConfig'],\n },\n ]\n }, [node])\n\n // Define all possible form fields (only relevant ones are used based on groups)\n const fields: CrudField[] = useMemo(() => [\n // Basic fields\n {\n id: 'stepName',\n label: 'Step Name',\n type: 'text',\n placeholder: 'Enter step name',\n required: true,\n description: 'Display name for this step',\n },\n {\n id: 'description',\n label: 'Description',\n type: 'textarea',\n placeholder: 'Enter step description',\n description: 'Optional description of what this step does',\n },\n {\n id: 'timeout',\n label: 'Timeout',\n type: 'text',\n placeholder: 'PT30S or 30000',\n description: 'ISO 8601 duration (e.g., PT30S) or milliseconds',\n },\n\n // UserTask fields\n {\n id: 'assignedTo',\n label: 'Assigned To',\n type: 'text',\n placeholder: 'user@example.com or userId',\n description: 'User email or ID to assign this task to',\n },\n {\n id: 'assignedToRoles',\n label: 'Assigned To Roles',\n type: 'text',\n placeholder: 'admin, manager',\n description: 'Comma-separated list of roles that can claim this task',\n },\n {\n id: 'formKey',\n label: 'Form Key',\n type: 'text',\n placeholder: 'approval_form',\n description: 'Optional form key for external form rendering',\n },\n {\n id: 'formFields',\n label: 'Form Fields',\n type: 'custom',\n component: (props) => (\n <FormFieldArrayEditor\n {...props}\n value={props.value as any}\n isJsonSchemaFormat={showJsonSchemaWarning}\n />\n ),\n },\n\n // Automated fields\n {\n id: 'activityType',\n label: 'Activity Type',\n type: 'select',\n options: [\n { value: 'SEND_EMAIL', label: 'Send Email' },\n { value: 'CALL_API', label: 'Call API' },\n { value: 'UPDATE_ENTITY', label: 'Update Entity' },\n { value: 'EMIT_EVENT', label: 'Emit Event' },\n { value: 'CALL_WEBHOOK', label: 'Call Webhook' },\n { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },\n { value: 'WAIT', label: 'Wait' },\n ],\n description: 'Type of activity to execute',\n },\n {\n id: 'activityId',\n label: 'Activity ID',\n type: 'text',\n placeholder: 'send_welcome_email',\n description: 'Unique identifier for this activity',\n },\n {\n id: 'stepActivities',\n label: 'Step Activities',\n type: 'custom',\n component: (props) => <ActivityArrayEditor {...props} value={props.value as any} />,\n },\n\n // SubWorkflow fields\n {\n id: 'subWorkflowId',\n label: 'Sub-Workflow',\n type: 'custom',\n component: (props) => <WorkflowSelectorField {...props} value={props.value as any} />,\n },\n {\n id: 'subWorkflowVersion',\n label: 'Version',\n type: 'number',\n placeholder: '1',\n description: 'Specific version of the sub-workflow to invoke',\n },\n {\n id: 'inputMappings',\n label: 'Input Mappings',\n type: 'custom',\n component: (props) => (\n <MappingArrayEditor\n {...props}\n value={props.value as any}\n label=\"Input Mappings\"\n description=\"Map parent workflow data to sub-workflow input\"\n />\n ),\n },\n {\n id: 'outputMappings',\n label: 'Output Mappings',\n type: 'custom',\n component: (props) => (\n <MappingArrayEditor\n {...props}\n value={props.value as any}\n label=\"Output Mappings\"\n description=\"Map sub-workflow output back to parent workflow\"\n />\n ),\n },\n\n // WaitForSignal fields\n {\n id: 'signalName',\n label: 'Signal Name',\n type: 'text',\n placeholder: 'approval_received',\n description: 'Name of the signal to wait for',\n },\n {\n id: 'signalTimeout',\n label: 'Signal Timeout',\n type: 'text',\n placeholder: 'PT5M',\n description: 'How long to wait for the signal (ISO 8601 duration)',\n },\n\n // Advanced configuration\n {\n id: 'advancedConfig',\n label: 'Advanced Configuration (JSON)',\n type: 'custom',\n description: 'Additional JSON configuration merged with the step data',\n component: (props) => <JsonConfigEditor {...props} />,\n },\n\n // Start node pre-conditions\n {\n id: 'preConditions',\n label: 'Pre-Conditions',\n type: 'custom',\n description: 'Business rules that must pass before the workflow can start',\n component: (props) => <StartPreConditionsEditor {...props} value={props.value as any} />,\n },\n ], [showJsonSchemaWarning])\n\n if (!isOpen || !node) return null\n\n const nodeType = node.type || 'unknown'\n const nodeTypeLabel = nodeType.charAt(0).toUpperCase() + nodeType.slice(1).replace(/([A-Z])/g, ' $1')\n\n const canDelete = !!onDelete\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent\n className=\"sm:max-w-7xl max-h-[90vh] overflow-hidden flex flex-col !p-0 [&_.grid]:!grid-cols-1\"\n onKeyDown={handleKeyDown}\n >\n <DialogHeader className=\"flex-shrink-0 p-6 pb-4 border-b border-border/70\">\n <div className=\"flex items-center gap-2 mb-2\">\n <DialogTitle>Edit Step</DialogTitle>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {nodeTypeLabel}\n </Badge>\n </div>\n <div className=\"space-y-1\">\n <DialogDescription>\n Configure step properties and behavior\n </DialogDescription>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium\">ID:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted font-mono\">{node.id}</code>\n </div>\n </div>\n </DialogHeader>\n\n <div className=\"flex-1 overflow-y-auto min-h-0 px-6\">\n {/* JSON Schema Conversion Warning */}\n {showJsonSchemaWarning && (\n <Alert status=\"information\" className=\"mb-4\">\n <AlertDescription className=\"text-xs\">\n This form uses JSON Schema format. Fields have been converted for visual editing.\n When you save, it will be converted to the simplified format. To preserve the original JSON Schema,\n edit it in the "Advanced Configuration (JSON)" section.\n </AlertDescription>\n </Alert>\n )}\n\n <CrudForm\n fields={fields}\n groups={groups}\n initialValues={initialValues}\n onSubmit={handleSubmit}\n embedded={true}\n submitLabel=\"Save Step\"\n extraActions={\n canDelete ? (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4 mr-2\" />\n Delete Step\n </Button>\n ) : undefined\n }\n />\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport type { Node } from '@xyflow/react'\nimport { useState, useEffect, useCallback, useMemo } from 'react'\nimport { Alert, AlertDescription } from '@open-mercato/ui/primitives/alert'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Trash2 } from 'lucide-react'\nimport { CrudForm, type CrudFormGroup, type CrudField, type CrudCustomFieldRenderProps } from '@open-mercato/ui/backend/CrudForm'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { JsonBuilder } from '@open-mercato/ui/backend/JsonBuilder'\nimport { DurationInput } from '@open-mercato/ui/backend/inputs/DurationInput'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { FormFieldArrayEditor } from './fields/FormFieldArrayEditor'\nimport { ActivityArrayEditor, type ActivityTestContext } from './fields/ActivityArrayEditor'\nimport { useActivityTypeOptions } from './fields/useActivityTypeOptions'\nimport { MappingArrayEditor } from './fields/MappingArrayEditor'\nimport { WorkflowSelectorField } from './fields/WorkflowSelectorField'\nimport { RolesMultiSelect } from './fields/RolesMultiSelect'\nimport { StartPreConditionsEditor } from './fields/StartPreConditionsEditor'\nimport { AgentInvokeConfigField } from './fields/AgentInvokeConfigField'\nimport { IfElseRoutesField, SwitchRoutesField } from './fields/BranchingRoutesEditor'\nimport { RouteOrderEditor } from './fields/RouteOrderEditor'\nimport { TemplateTextControl } from './fields/TemplateTextControl'\nimport { TaskEntityBindingsField } from './fields/TaskEntityBindingsField'\nimport { TaskAssignmentField } from './fields/TaskAssignmentField'\nimport { TaskOnBreachField, TaskRemindersField } from './fields/TaskDeadlineFields'\nimport { AgentReviewOnBreachField } from './fields/AgentReviewOnBreachField'\nimport { TaskDecisionsField, TaskEditablePrefilledField } from './fields/TaskDecisionsField'\nimport { TASK_PRIORITY_VALUES } from '../lib/task-inspector-config'\nimport { AGENT_REVIEW_ASSIGNMENT_MODES } from '../lib/agent-review-inspector'\nimport type { RouteOrderEntry } from '../lib/route-priority'\nimport { ConditionBuilder } from '@open-mercato/core/modules/business_rules/components/ConditionBuilder'\nimport type { GroupCondition } from '@open-mercato/core/modules/business_rules/components/utils/conditionValidation'\nimport { InputDataPanel } from './InputDataPanel'\nimport { InspectorPanel, type InspectorPanelVariant } from './InspectorPanel'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { nodeToFormValues, formValuesToNodeUpdates, isJsonSchemaFormat, type NodeFormValues } from '../lib/nodeFormTransforms'\nimport {\n isConvertibleStepType,\n listStepTypeConversionOptions,\n listStepTypeConversionTargets,\n readUnmappedStepConfig,\n type ConvertibleStepType,\n} from '../lib/step-type-conversion'\nimport { sanitizeId } from '../lib/graph-utils'\nimport { isBranchingNodeType } from '../lib/branching-routes'\nimport type { BranchingRouteDraft, SwitchRoutesValue } from '../lib/branching-routes'\nimport type { LedgerEntry } from '../lib/context-ledger'\nimport type { PinnedSampleEnvelope } from '../lib/sample-resolver'\n\n/**\n * JsonConfigEditor - Custom field wrapper for JsonBuilder\n */\nfunction JsonConfigEditor({ value, setValue, disabled }: CrudCustomFieldRenderProps) {\n return (\n <JsonBuilder\n value={value || {}}\n onChange={setValue}\n disabled={disabled}\n />\n )\n}\n\n/**\n * DurationCrudField - Custom field wrapper for DurationInput\n */\nexport function DurationCrudField({ id, value, setValue, disabled }: CrudCustomFieldRenderProps) {\n return (\n <DurationInput\n id={id}\n value={typeof value === 'string' ? value : ''}\n onChange={setValue}\n disabled={disabled}\n />\n )\n}\n\n/**\n * RolesCrudField - Custom field wrapper for RolesMultiSelect\n */\nexport function RolesCrudField({ id, value, setValue, disabled }: CrudCustomFieldRenderProps) {\n const roles = useMemo(\n () => (Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === 'string') : []),\n [value],\n )\n return (\n <RolesMultiSelect\n id={id}\n value={roles}\n onChange={setValue}\n disabled={disabled}\n />\n )\n}\n\n/**\n * StepTypeConversionControl \u2014 \"Change type\u2026\" (spec 4.5, #4237).\n *\n * Conversion is an action on the step, not a form value: it rewrites the node\n * type and its data wholesale, so it runs through its own callback (with a\n * confirmation on the page) instead of the CrudForm submit.\n *\n * The select still READS as the step's type: it opens on whatever the step is\n * today (issue #5988 \u2014 it used to open blank on every visit, so it never said\n * what the step was, not even right after a conversion), and picking a\n * different entry is what arms \"Change type\u2026\".\n */\nfunction StepTypeConversionControl({\n nodeType,\n onConvert,\n}: {\n nodeType: string | undefined\n onConvert: (targetType: ConvertibleStepType) => void\n}) {\n const t = useT()\n const currentType = isConvertibleStepType(nodeType) ? nodeType : null\n const options = useMemo(() => listStepTypeConversionOptions(nodeType), [nodeType])\n const [targetType, setTargetType] = useState<string>(currentType ?? '')\n\n // A conversion replaces the node type under an already-mounted control, so\n // the selection follows the step rather than stranding the previous choice.\n useEffect(() => {\n setTargetType(currentType ?? '')\n }, [currentType])\n\n if (options.length === 0) return null\n\n const canConvert = targetType.length > 0 && targetType !== currentType\n\n return (\n <div className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'workflows.stepConversion.description',\n 'Keeps this step\u2019s id, name, position and wiring. Configuration the new type cannot execute is parked under Unmapped configuration instead of being deleted.',\n )}\n </p>\n <div className=\"flex items-center gap-2\">\n <Select value={targetType} onValueChange={setTargetType}>\n <SelectTrigger className=\"w-64\" aria-label={t('workflows.steps.stepType')}>\n <SelectValue placeholder={t('workflows.stepConversion.targetPlaceholder', 'Select a step type')} />\n </SelectTrigger>\n <SelectContent>\n {options.map((candidate) => (\n <SelectItem key={candidate} value={candidate}>\n {t(`workflows.nodeTypes.${candidate}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={!canConvert}\n onClick={() => {\n if (canConvert) onConvert(targetType as ConvertibleStepType)\n }}\n >\n {t('workflows.stepConversion.action', 'Change type\u2026')}\n </Button>\n </div>\n </div>\n )\n}\n\n/**\n * UnmappedConfigDrawer \u2014 the quarantine made visible (spec 4.5). Read-only: the\n * values are stored verbatim in the step metadata and are recovered by\n * converting back, never edited in place.\n */\nfunction UnmappedConfigDrawer({ value }: { value: Record<string, unknown> }) {\n const t = useT()\n return (\n <details className=\"rounded-md border border-border bg-muted/30 p-3\">\n <summary className=\"cursor-pointer text-sm font-medium\">\n {t('workflows.stepConversion.unmapped.title', 'Unmapped configuration')}\n </summary>\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {t(\n 'workflows.stepConversion.unmapped.description',\n 'Kept from an earlier type change. It is stored with the step but is not executed; change the step back to recover it.',\n )}\n </p>\n <pre className=\"mt-2 max-h-64 overflow-auto rounded bg-background p-2 font-mono text-xs\">\n {JSON.stringify(value, null, 2)}\n </pre>\n </details>\n )\n}\n\nexport interface NodeEditDialogCrudFormProps {\n node: Node | null\n isOpen: boolean\n onClose: () => void\n onSave: (nodeId: string, updates: Partial<Node['data']>) => void\n onDelete?: (nodeId: string) => void\n ledgerEntries?: LedgerEntry[]\n definitionId?: string | null\n samples?: Record<string, PinnedSampleEnvelope>\n onPinSample?: (stepId: string, data: unknown) => void\n onUnpinSample?: (stepId: string) => void\n /**\n * Outgoing routes of a branching step (IF_ELSE / SWITCH). The inspector edits\n * transitions rather than step data, so the value round-trips through a\n * dedicated callback instead of the node-update payload.\n */\n branchingRoutes?: SwitchRoutesValue\n onSaveBranchingRoutes?: (nodeId: string, value: SwitchRoutesValue) => void\n /**\n * Outgoing routes of a NON-branching step, in evaluation order. Reordering the\n * list derives the transition priorities (spec 4.4) \u2014 branching steps order\n * their routes through their own case list instead.\n */\n routeOrder?: RouteOrderEntry[]\n onSaveRouteOrder?: (nodeId: string, entries: RouteOrderEntry[]) => void\n /**\n * In-place step type conversion (spec 4.5). The page confirms the change and\n * rewrites the node, because conversion replaces the node type and its data\n * rather than producing a form value.\n */\n onConvertType?: (nodeId: string, targetType: ConvertibleStepType) => void\n /**\n * How the inspector is presented. Defaults to `overlay` so a caller that has\n * not opted in keeps the modal shape it had.\n */\n variant?: InspectorPanelVariant\n /** Widen the overlay Drawer to the metadata-drawer width \u2014 the step form is dense. */\n wide?: boolean\n}\n\n/**\n * NodeEditDialogCrudForm - CrudForm-based modal dialog for editing step properties\n *\n * Migrated from NodeEditDialog to use CrudForm for:\n * - UI coherence with other admin forms\n * - Custom fields support (future enhancement)\n * - Standardized validation and error handling\n * - Consistent keyboard shortcuts\n *\n * Handles 7 node types with dynamic groups:\n * - start: Non-editable (alert only)\n * - end: Non-editable (alert only)\n * - userTask: Assignment fields + form builder\n * - automated: Activity type + activities array\n * - subWorkflow: Workflow selector + input/output mappings\n * - waitForSignal: Signal name + timeout\n * - waitForTimer: Duration XOR wait-until timer configuration\n * - waitForCondition: ConditionBuilder predicate + mandatory timeout policy\n * - decision: Basic fields only\n */\nexport function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete, ledgerEntries, definitionId, samples, onPinSample, onUnpinSample, branchingRoutes, onSaveBranchingRoutes, routeOrder, onSaveRouteOrder, onConvertType, variant = 'overlay', wide }: NodeEditDialogCrudFormProps) {\n const t = useT()\n const activityTypeOptions = useActivityTypeOptions()\n const [initialValues, setInitialValues] = useState<Partial<NodeFormValues>>({})\n const [showJsonSchemaWarning, setShowJsonSchemaWarning] = useState(false)\n\n const activityTestContext = useMemo<ActivityTestContext | undefined>(() => {\n if (!node || !onPinSample || !onUnpinSample) return undefined\n const stepId = node.id\n return {\n definitionId: definitionId ?? null,\n stepId,\n pinnedSample: samples?.[stepId],\n onPinSample: (data: unknown) => onPinSample(stepId, data),\n onUnpinSample: () => onUnpinSample(stepId),\n }\n }, [node, definitionId, samples, onPinSample, onUnpinSample])\n\n // Load node data when dialog opens\n useEffect(() => {\n if (node && isOpen) {\n const values = nodeToFormValues(node)\n setInitialValues(\n isBranchingNodeType(node.type)\n ? { ...values, branchingRoutes: branchingRoutes ?? { field: '', routes: [] } }\n : { ...values, routeOrder: routeOrder ?? [] },\n )\n setShowJsonSchemaWarning(isJsonSchemaFormat(node))\n }\n }, [node, isOpen, branchingRoutes, routeOrder])\n\n const handleSubmit = useCallback(async (values: Record<string, unknown>) => {\n if (!node) return\n\n // Validate and sanitize step ID\n const sanitizedId = sanitizeId(node.id)\n if (sanitizedId !== node.id) {\n flash(t('workflows.nodeEditor.stepIdSanitized', { from: node.id, to: sanitizedId }), 'warning')\n }\n\n try {\n const updates = formValuesToNodeUpdates(values as unknown as NodeFormValues, node)\n onSave(node.id, updates)\n if (isBranchingNodeType(node.type) && onSaveBranchingRoutes) {\n const routesValue = values.branchingRoutes as SwitchRoutesValue | undefined\n onSaveBranchingRoutes(node.id, routesValue ?? { field: '', routes: [] })\n } else if (onSaveRouteOrder) {\n const entries = values.routeOrder as RouteOrderEntry[] | undefined\n if (Array.isArray(entries) && entries.length > 0) onSaveRouteOrder(node.id, entries)\n }\n onClose()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(t(message))\n }\n }, [node, onSave, onSaveBranchingRoutes, onSaveRouteOrder, onClose, t])\n\n const handleDelete = useCallback(() => {\n if (!node || !onDelete) return\n onDelete(node.id)\n }, [node, onDelete])\n\n // Dynamic groups based on node type\n const typeGroups: CrudFormGroup[] = useMemo(() => {\n if (!node) return []\n\n // End nodes are non-editable\n if (node.type === 'end') {\n return [\n {\n id: 'info',\n column: 1,\n bare: true,\n component: () => (\n <Alert status=\"information\">\n <AlertDescription>\n {t('workflows.nodeEditor.endStepsNotEditable')}\n </AlertDescription>\n </Alert>\n ),\n },\n ]\n }\n\n // Start nodes: allow editing pre-conditions\n if (node.type === 'start') {\n return [\n {\n id: 'info',\n column: 1,\n bare: true,\n component: () => (\n <Alert status=\"information\" className=\"mb-4\">\n <AlertDescription>\n {t('workflows.nodeEditor.startStepsInfo')}\n </AlertDescription>\n </Alert>\n ),\n },\n {\n id: 'preConditions',\n title: t('workflows.transitions.preConditions'),\n column: 1,\n description: t('workflows.fieldEditors.preConditions.description'),\n fields: ['preConditions'],\n },\n ]\n }\n\n const baseGroups: CrudFormGroup[] = [\n {\n id: 'basic',\n title: t('workflows.form.groups.basic'),\n column: 1,\n fields: ['stepName', 'description', 'timeout'],\n },\n ]\n\n // Route ordering (spec 4.4) only makes sense once a step has a choice to\n // make. Branching steps order their routes through their own case list.\n if (!isBranchingNodeType(node.type) && (routeOrder?.length ?? 0) > 1) {\n baseGroups.push({\n id: 'routeOrder',\n title: t('workflows.routeOrder.groupTitle'),\n column: 1,\n description: t('workflows.routeOrder.groupDescription'),\n fields: ['routeOrder'],\n })\n }\n\n const advancedGroup: CrudFormGroup = {\n id: 'advanced',\n title: t('workflows.form.advancedConfiguration'),\n column: 1,\n description: t('workflows.form.descriptions.advancedConfig'),\n fields: ['advancedConfig'],\n }\n\n // Error handling (spec section 5.9): what this step does when it fails and\n // no error route is wired from its error handle.\n const errorHandlingGroup: CrudFormGroup = {\n id: 'errorHandling',\n title: t('workflows.nodeEditor.groups.errorHandling', 'Error Handling'),\n column: 1,\n description: t(\n 'workflows.nodeEditor.groups.errorHandlingDescription',\n 'Applies when this step fails and no error route is wired from its error output handle.',\n ),\n fields: ['errorDirectiveMode', 'errorDirectiveFallbackValue'],\n }\n\n // UserTask: the five task-inspector sections of spec \u00A76.1, in order \u2014\n // What / About what / Who / When / Decisions \u2014 followed by the step\n // mechanics every node type shares. Each section is container-agnostic: it\n // declares no width and assumes no modal chrome, so re-hosting the\n // inspector in a docked rail is a re-parent rather than a rewrite.\n if (node.type === 'userTask') {\n return [\n {\n id: 'taskWhat',\n title: t('workflows.tasks.inspector.what.title'),\n column: 1,\n fields: ['stepName', 'taskInstructions'],\n },\n {\n id: 'taskAbout',\n title: t('workflows.tasks.inspector.bindings.title'),\n column: 1,\n fields: ['taskEntityBindings'],\n },\n {\n id: 'taskWho',\n title: t('workflows.tasks.inspector.who.title'),\n column: 1,\n fields: ['assignmentMode'],\n },\n {\n id: 'taskWhen',\n title: t('workflows.tasks.inspector.when.title'),\n column: 1,\n fields: ['taskPriority', 'slaDuration', 'taskReminders', 'taskOnBreach'],\n },\n {\n id: 'taskDecisions',\n title: t('workflows.tasks.inspector.decisions.title'),\n column: 1,\n description: t('workflows.form.descriptions.formFields'),\n fields: ['taskDecisions', 'formFields', 'taskEditablePrefilled', 'formKey'],\n },\n {\n id: 'basic',\n title: t('workflows.form.groups.basic'),\n column: 1,\n fields: ['description', 'timeout'],\n },\n ...baseGroups.slice(1),\n errorHandlingGroup,\n advancedGroup,\n ]\n }\n\n // Automated specific groups\n if (node.type === 'automated') {\n return [\n ...baseGroups,\n {\n id: 'automated',\n title: t('workflows.nodeEditor.groups.automated'),\n column: 1,\n fields: ['activityType', 'activityId'],\n },\n {\n id: 'stepActivities',\n title: t('workflows.nodeEditor.groups.stepActivities'),\n column: 1,\n description: t('workflows.nodeEditor.groups.stepActivitiesDescription'),\n fields: ['stepActivities'],\n },\n errorHandlingGroup,\n advancedGroup,\n ]\n }\n\n // SubWorkflow specific groups\n if (node.type === 'subWorkflow') {\n return [\n ...baseGroups,\n {\n id: 'subWorkflow',\n title: t('workflows.form.subWorkflowConfig'),\n column: 1,\n fields: ['subWorkflowId', 'subWorkflowVersion'],\n },\n {\n id: 'mappings',\n title: t('workflows.nodeEditor.groups.mappings'),\n column: 1,\n description: t('workflows.nodeEditor.groups.mappingsDescription'),\n fields: ['inputMappings', 'outputMappings'],\n },\n errorHandlingGroup,\n advancedGroup,\n ]\n }\n\n // WaitForSignal specific groups\n if (node.type === 'waitForSignal') {\n return [\n ...baseGroups,\n {\n id: 'signal',\n title: t('workflows.form.signalConfig'),\n column: 1,\n fields: ['signalName', 'signalTimeout'],\n },\n advancedGroup,\n ]\n }\n\n // WaitForTimer specific groups\n if (node.type === 'waitForTimer') {\n return [\n {\n id: 'basic',\n title: t('workflows.form.groups.basic'),\n column: 1,\n fields: ['stepName', 'description'],\n },\n {\n id: 'timer',\n title: t('workflows.nodeEditor.groups.timer'),\n column: 1,\n description: t('workflows.nodeEditor.groups.timerDescription'),\n fields: ['timerDuration', 'timerUntil'],\n },\n advancedGroup,\n ]\n }\n\n // WaitForCondition specific groups\n if (node.type === 'waitForCondition') {\n return [\n {\n id: 'basic',\n title: t('workflows.form.groups.basic'),\n column: 1,\n fields: ['stepName', 'description'],\n },\n {\n id: 'waitCondition',\n title: t('workflows.nodeEditor.groups.waitCondition', 'Wait Condition'),\n column: 1,\n description: t(\n 'workflows.nodeEditor.groups.waitConditionDescription',\n 'The workflow pauses here until this condition over the run context becomes true. It is re-checked whenever the context is written and on a periodic poll.',\n ),\n fields: ['waitCondition'],\n },\n {\n id: 'waitConditionTimeout',\n title: t('workflows.nodeEditor.groups.waitConditionTimeout', 'Timeout Policy'),\n column: 1,\n description: t(\n 'workflows.nodeEditor.groups.waitConditionTimeoutDescription',\n 'A timeout is required so a condition that never becomes true cannot hang the run forever.',\n ),\n fields: ['waitConditionTimeout', 'waitConditionOnTimeout', 'waitConditionPollIntervalMs'],\n },\n advancedGroup,\n ]\n }\n\n // InvokeAgent specific groups\n if (node.type === 'invokeAgent') {\n return [\n ...baseGroups,\n {\n id: 'invokeAgent',\n title: t('workflows.form.invokeAgent.sectionTitle'),\n column: 1,\n description: t('workflows.form.invokeAgent.sectionDescription'),\n fields: ['agentConfig'],\n },\n // Review (spec \u00A77.5): who dispositions the proposal this step raises,\n // and by when. The same Who/When vocabulary the Task inspector authors\n // (\u00A76.1.3 / \u00A76.1.4) \u2014 because the thing being authored IS a task.\n {\n id: 'agentReviewWho',\n title: t('workflows.form.invokeAgent.review.whoTitle'),\n column: 1,\n description: t('workflows.form.invokeAgent.review.whoDescription'),\n fields: ['reviewAssignmentMode'],\n },\n {\n id: 'agentReviewWhen',\n title: t('workflows.form.invokeAgent.review.whenTitle'),\n column: 1,\n description: t('workflows.form.invokeAgent.review.whenDescription'),\n fields: ['reviewPriority', 'reviewDeadline', 'reviewReminders', 'reviewOnBreach'],\n },\n errorHandlingGroup,\n advancedGroup,\n ]\n }\n\n // Branching steps: the routes inspector edits the outgoing transitions\n if (isBranchingNodeType(node.type)) {\n return [\n ...baseGroups,\n {\n id: 'branchingRoutes',\n title: t('workflows.branching.groupTitle', 'Routes'),\n column: 1,\n description: t(\n 'workflows.branching.groupDescription',\n 'Routing happens on the outgoing transitions: each case is evaluated by priority, and the otherwise route runs when none matches.',\n ),\n fields: ['branchingRoutes'],\n },\n errorHandlingGroup,\n advancedGroup,\n ]\n }\n\n // Decision and other types: just basic fields + advanced\n return [\n ...baseGroups,\n advancedGroup,\n ]\n }, [node, t])\n\n // Quarantined config from an earlier type change, and the conversion control\n // itself (spec 4.5). Both hang off every editable step type, after whatever\n // that type's own inspector renders.\n const unmappedConfig = useMemo(() => readUnmappedStepConfig(node?.data), [node])\n\n const groups: CrudFormGroup[] = useMemo(() => {\n if (!node) return []\n const extras: CrudFormGroup[] = []\n if (unmappedConfig) {\n extras.push({\n id: 'unmappedConfig',\n column: 1,\n bare: true,\n component: () => <UnmappedConfigDrawer value={unmappedConfig} />,\n })\n }\n if (onConvertType && listStepTypeConversionTargets(node.type).length > 0) {\n extras.push({\n id: 'changeType',\n title: t('workflows.stepConversion.groupTitle', 'Change step type'),\n column: 1,\n bare: false,\n component: () => (\n <StepTypeConversionControl\n nodeType={node.type}\n onConvert={(targetType) => onConvertType(node.id, targetType)}\n />\n ),\n })\n }\n return [...typeGroups, ...extras]\n }, [node, typeGroups, unmappedConfig, onConvertType, t])\n\n // Define all possible form fields (only relevant ones are used based on groups)\n const fields: CrudField[] = useMemo(() => [\n // Basic fields. A user task's title is the sentence the assignee reads, so\n // it is pill-capable there (spec \u00A76.1 \"What\") and a plain text input\n // everywhere else.\n node?.type === 'userTask'\n ? {\n id: 'stepName',\n label: t('workflows.tasks.inspector.what.taskTitle'),\n type: 'custom',\n required: true,\n component: (props) => (\n <TemplateTextControl\n id={props.id}\n value={typeof props.value === 'string' ? props.value : ''}\n onValueChange={props.setValue}\n ledgerEntries={ledgerEntries}\n placeholder={t('workflows.form.placeholders.stepName')}\n disabled={props.disabled}\n aria-label={t('workflows.tasks.inspector.what.taskTitle')}\n />\n ),\n }\n : {\n id: 'stepName',\n label: t('workflows.form.stepName'),\n type: 'text',\n placeholder: t('workflows.form.placeholders.stepName'),\n required: true,\n description: t('workflows.form.descriptions.stepName'),\n },\n {\n id: 'description',\n label: t('workflows.form.description'),\n type: 'textarea',\n placeholder: t('workflows.form.placeholders.description'),\n description: t('workflows.form.descriptions.description'),\n },\n {\n id: 'timeout',\n label: t('workflows.form.timeout'),\n type: 'custom',\n description: t('workflows.form.descriptions.timeout'),\n component: (props) => <DurationCrudField {...props} />,\n },\n\n // UserTask fields\n {\n id: 'assignedTo',\n label: t('workflows.form.assignedTo'),\n type: 'text',\n placeholder: t('workflows.form.placeholders.userId'),\n description: t('workflows.form.descriptions.assignedTo'),\n },\n {\n id: 'assignedToRoles',\n label: t('workflows.form.assignedToRoles'),\n type: 'custom',\n description: t('workflows.form.descriptions.assignedToRoles'),\n component: (props) => <RolesCrudField {...props} />,\n },\n {\n id: 'formKey',\n label: t('workflows.form.formKey'),\n type: 'text',\n placeholder: t('workflows.form.placeholders.formKey'),\n description: t('workflows.form.descriptions.formKey'),\n },\n {\n id: 'slaDuration',\n label: t('workflows.tasks.inspector.when.deadline'),\n type: 'custom',\n description: t('workflows.nodeEditor.slaDurationDescription'),\n component: (props) => <DurationCrudField {...props} />,\n },\n\n // Task inspector sections (spec \u00A76.1)\n {\n id: 'taskInstructions',\n label: t('workflows.tasks.inspector.what.instructions'),\n type: 'custom',\n component: (props) => (\n <TemplateTextControl\n id={props.id}\n value={typeof props.value === 'string' ? props.value : ''}\n onValueChange={props.setValue}\n ledgerEntries={ledgerEntries}\n placeholder={t('workflows.tasks.inspector.what.instructionsPlaceholder')}\n disabled={props.disabled}\n multiline\n aria-label={t('workflows.tasks.inspector.what.instructions')}\n />\n ),\n },\n {\n id: 'taskEntityBindings',\n label: t('workflows.tasks.inspector.bindings.label'),\n type: 'custom',\n component: (props) => <TaskEntityBindingsField {...props} ledgerEntries={ledgerEntries} />,\n },\n {\n id: 'assignmentMode',\n label: t('workflows.tasks.inspector.who.label'),\n type: 'custom',\n component: (props) => (\n <TaskAssignmentField\n {...props}\n ledgerEntries={ledgerEntries}\n portalAudience={{ assigneeKind: 'taskAssigneeKind', entityBindings: 'taskEntityBindings' }}\n />\n ),\n },\n {\n id: 'taskPriority',\n label: t('workflows.tasks.inspector.when.priority'),\n type: 'select',\n options: TASK_PRIORITY_VALUES.map((priority) => ({\n value: priority,\n label: t(`workflows.tasks.inspector.when.priorities.${priority}`),\n })),\n },\n {\n id: 'taskReminders',\n label: t('workflows.tasks.inspector.when.reminders'),\n type: 'custom',\n component: (props) => <TaskRemindersField {...props} />,\n },\n {\n id: 'taskOnBreach',\n label: t('workflows.tasks.inspector.when.onBreach'),\n type: 'custom',\n component: (props) => <TaskOnBreachField {...props} routeOrder={routeOrder} />,\n },\n // Invoke Agent \u2014 Review (spec \u00A77.5). The assignment tabs and the reminder\n // control are the SAME components the Task inspector renders, pointed at\n // this section's own field ids; only the breach action set differs, because\n // a disposition deadline escalates and never decides.\n {\n id: 'reviewAssignmentMode',\n label: t('workflows.tasks.inspector.who.label'),\n type: 'custom',\n component: (props) => (\n <TaskAssignmentField\n {...props}\n ledgerEntries={ledgerEntries}\n modes={AGENT_REVIEW_ASSIGNMENT_MODES}\n fieldIds={{\n assignedTo: 'reviewAssignedTo',\n assignedToRoles: 'reviewAssignedToRoles',\n assignmentRule: 'reviewAssignmentRule',\n }}\n />\n ),\n },\n {\n id: 'reviewPriority',\n label: t('workflows.tasks.inspector.when.priority'),\n type: 'select',\n options: TASK_PRIORITY_VALUES.map((priority) => ({\n value: priority,\n label: t(`workflows.tasks.inspector.when.priorities.${priority}`),\n })),\n },\n {\n id: 'reviewDeadline',\n label: t('workflows.tasks.inspector.when.deadline'),\n type: 'custom',\n description: t('workflows.form.invokeAgent.review.deadlineDescription'),\n component: (props) => <DurationCrudField {...props} />,\n },\n {\n id: 'reviewReminders',\n label: t('workflows.tasks.inspector.when.reminders'),\n type: 'custom',\n component: (props) => <TaskRemindersField {...props} />,\n },\n {\n id: 'reviewOnBreach',\n label: t('workflows.tasks.inspector.when.onBreach'),\n type: 'custom',\n component: (props) => <AgentReviewOnBreachField {...props} />,\n },\n {\n id: 'taskDecisions',\n label: t('workflows.tasks.inspector.decisions.label'),\n type: 'custom',\n component: (props) => <TaskDecisionsField {...props} routeOrder={routeOrder} />,\n },\n {\n id: 'taskEditablePrefilled',\n label: t('workflows.tasks.inspector.decisions.editablePrefilled'),\n type: 'custom',\n component: (props) => <TaskEditablePrefilledField {...props} />,\n },\n {\n id: 'formFields',\n label: t('workflows.nodeEditor.groups.formFields'),\n type: 'custom',\n component: (props) => (\n <FormFieldArrayEditor\n {...props}\n value={props.value as any}\n isJsonSchemaFormat={showJsonSchemaWarning}\n />\n ),\n },\n\n // Automated fields\n {\n id: 'activityType',\n label: t('workflows.form.activityType'),\n type: 'select',\n options: activityTypeOptions,\n description: t('workflows.nodeEditor.activityTypeDescription'),\n },\n {\n id: 'activityId',\n label: t('workflows.form.activityId'),\n type: 'text',\n placeholder: t('workflows.form.placeholders.activityId'),\n description: t('workflows.nodeEditor.activityIdDescription'),\n },\n {\n id: 'stepActivities',\n label: t('workflows.nodeEditor.groups.stepActivities'),\n type: 'custom',\n component: (props) => <ActivityArrayEditor {...props} value={props.value as any} ledgerEntries={ledgerEntries} testContext={activityTestContext} />,\n },\n\n // SubWorkflow fields\n {\n id: 'subWorkflowId',\n label: t('workflows.form.workflowToInvoke'),\n type: 'custom',\n component: (props) => <WorkflowSelectorField {...props} value={props.value as any} />,\n },\n {\n id: 'subWorkflowVersion',\n label: t('workflows.form.version'),\n type: 'number',\n placeholder: t('workflows.form.placeholders.version'),\n description: t('workflows.form.descriptions.subWorkflowVersion'),\n },\n {\n id: 'inputMappings',\n label: t('workflows.nodeEditor.inputMappings'),\n type: 'custom',\n component: (props) => (\n <MappingArrayEditor\n {...props}\n value={props.value as any}\n label={t('workflows.nodeEditor.inputMappings')}\n description={t('workflows.form.descriptions.inputMapping')}\n variablePicker\n ledgerEntries={ledgerEntries}\n />\n ),\n },\n {\n id: 'outputMappings',\n label: t('workflows.nodeEditor.outputMappings'),\n type: 'custom',\n component: (props) => (\n <MappingArrayEditor\n {...props}\n value={props.value as any}\n label={t('workflows.nodeEditor.outputMappings')}\n description={t('workflows.form.descriptions.outputMapping')}\n />\n ),\n },\n\n // WaitForSignal fields\n {\n id: 'signalName',\n label: t('workflows.form.signalName'),\n type: 'text',\n placeholder: t('workflows.form.placeholders.signalName'),\n description: t('workflows.form.descriptions.signalName'),\n },\n {\n id: 'signalTimeout',\n label: t('workflows.nodeEditor.signalTimeout'),\n type: 'custom',\n description: t('workflows.form.descriptions.signalTimeout'),\n component: (props) => <DurationCrudField {...props} />,\n },\n\n // WaitForTimer fields\n {\n id: 'timerDuration',\n label: t('workflows.activities.waitDuration'),\n type: 'custom',\n description: t('workflows.nodeEditor.timerDurationDescription'),\n component: (props) => <DurationCrudField {...props} />,\n },\n {\n id: 'timerUntil',\n label: t('workflows.activities.waitUntil'),\n type: 'datetime',\n minDate: new Date(),\n description: t('workflows.nodeEditor.timerUntilDescription'),\n },\n\n // Error directive fields (spec section 5.9)\n {\n id: 'errorDirectiveMode',\n label: t('workflows.form.errorDirective.mode', 'On failure'),\n type: 'select',\n options: [\n { value: 'fail', label: t('workflows.form.errorDirective.modeFail', 'Fail the instance (default)') },\n {\n value: 'continueWithFallback',\n label: t('workflows.form.errorDirective.modeContinue', 'Continue with a fallback value'),\n },\n {\n value: 'failureQueue',\n label: t('workflows.form.errorDirective.modeQueue', 'Send to the failure queue'),\n },\n ],\n description: t(\n 'workflows.form.descriptions.errorDirectiveMode',\n 'Fail the instance, continue with a fallback value written to the run context under this step id, or park the run for triage.',\n ),\n },\n {\n id: 'errorDirectiveFallbackValue',\n label: t('workflows.form.errorDirective.fallbackValue', 'Fallback value (JSON)'),\n type: 'textarea',\n placeholder: '{ \"ok\": false }',\n description: t(\n 'workflows.form.descriptions.errorDirectiveFallbackValue',\n 'JSON value used when the directive is \"Continue with a fallback value\". Typed against this step output contract; leave empty to continue without writing anything.',\n ),\n },\n\n // WaitForCondition fields\n {\n id: 'waitCondition',\n label: '',\n type: 'custom',\n component: (props) => (\n <ConditionBuilder\n value={(props.value as GroupCondition | null) ?? null}\n onChangeAction={(next: GroupCondition) => props.setValue(next)}\n entityType=\"workflow:wait_condition\"\n />\n ),\n },\n {\n id: 'waitConditionTimeout',\n label: t('workflows.form.waitCondition.timeout', 'Timeout'),\n type: 'custom',\n description: t('workflows.form.descriptions.waitConditionTimeout', 'How long to wait before the timeout policy applies. Required.'),\n component: (props) => <DurationCrudField {...props} />,\n },\n {\n id: 'waitConditionOnTimeout',\n label: t('workflows.form.waitCondition.onTimeout', 'On timeout'),\n type: 'select',\n options: [\n { value: 'FAIL', label: t('workflows.form.waitCondition.onTimeoutFail', 'Fail the step') },\n { value: 'CONTINUE', label: t('workflows.form.waitCondition.onTimeoutContinue', 'Continue with timedOut') },\n ],\n description: t(\n 'workflows.form.descriptions.waitConditionOnTimeout',\n 'Fail the step, or continue with \"timedOut\" set so an outgoing route can branch on it.',\n ),\n },\n {\n id: 'waitConditionPollIntervalMs',\n label: t('workflows.form.waitCondition.pollIntervalMs', 'Poll interval (ms)'),\n type: 'number',\n placeholder: '30000',\n description: t(\n 'workflows.form.descriptions.waitConditionPollIntervalMs',\n 'Optional backstop poll interval between 5000 and 3600000 ms, and never longer than the timeout. Defaults to 30000.',\n ),\n },\n\n // InvokeAgent configuration\n {\n id: 'agentConfig',\n label: '',\n type: 'custom',\n component: (props) => (\n <AgentInvokeConfigField {...props} value={props.value as any} ledgerEntries={ledgerEntries} />\n ),\n },\n {\n id: 'routeOrder',\n label: '',\n type: 'custom',\n component: (props) => (\n <RouteOrderEditor\n id={props.id}\n value={props.value as RouteOrderEntry[] | undefined}\n setValue={props.setValue}\n disabled={props.disabled}\n />\n ),\n },\n {\n id: 'branchingRoutes',\n label: '',\n type: 'custom',\n component: (props) => {\n const routesValue = (props.value as SwitchRoutesValue | undefined) ?? { field: '', routes: [] }\n if (node?.type === 'switch') {\n return (\n <SwitchRoutesField\n id={props.id}\n value={routesValue}\n setValue={props.setValue}\n disabled={props.disabled}\n ledgerEntries={ledgerEntries}\n />\n )\n }\n return (\n <IfElseRoutesField\n id={props.id}\n value={routesValue.routes}\n setValue={(routes: BranchingRouteDraft[]) => props.setValue({ ...routesValue, routes })}\n disabled={props.disabled}\n />\n )\n },\n },\n\n // Advanced configuration\n {\n id: 'advancedConfig',\n label: t('workflows.form.advancedConfiguration'),\n type: 'custom',\n description: t('workflows.form.descriptions.advancedConfig'),\n component: (props) => <JsonConfigEditor {...props} />,\n },\n\n // Start node pre-conditions\n {\n id: 'preConditions',\n label: t('workflows.transitions.preConditions'),\n type: 'custom',\n description: t('workflows.fieldEditors.preConditions.description'),\n component: (props) => <StartPreConditionsEditor {...props} value={props.value as any} />,\n },\n ], [activityTypeOptions, showJsonSchemaWarning, ledgerEntries, activityTestContext, node?.type, routeOrder, t])\n\n if (!isOpen || !node) return null\n\n const nodeTypeLabel = t(`workflows.nodeTypes.${node.type || 'automated'}`)\n\n const canDelete = !!onDelete\n\n return (\n <InspectorPanel\n open={isOpen}\n onClose={onClose}\n variant={variant}\n wide={wide}\n title={t('workflows.nodeEditor.title')}\n typeLabel={nodeTypeLabel}\n description={t('workflows.nodeEditor.description')}\n recordId={node.id}\n >\n {/* JSON Schema Conversion Warning */}\n {showJsonSchemaWarning && (\n <Alert variant=\"info\" className=\"mb-4\">\n <AlertDescription className=\"text-xs\">\n {t('workflows.nodeEditor.jsonSchemaFormat')}\n </AlertDescription>\n </Alert>\n )}\n\n {/* Wide drawer: the ledger is a sticky right column so a field can be\n dragged onto any parameter no matter how far the form is scrolled. The\n narrow docked rail keeps the old stacked-and-folded layout (a side\n column would leave no room for the form). */}\n <div className={wide ? 'flex gap-6' : undefined}>\n <div className={wide ? 'min-w-0 flex-1' : undefined}>\n {/* Remount when the inspected step changes. CrudForm preserves fields\n the author already edited across `initialValues` changes, which\n would leak an unsaved edit from the previous step onto this one \u2014\n the key forces a fresh mount. */}\n <CrudForm\n key={node.id}\n density=\"compact\"\n fields={fields}\n groups={groups}\n initialValues={initialValues}\n onSubmit={handleSubmit}\n embedded={true}\n submitLabel={t('workflows.form.saveStep')}\n extraActions={\n canDelete ? (\n <Button\n type=\"button\"\n variant=\"destructive-outline\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4 mr-2\" />\n {t('workflows.form.deleteStep')}\n </Button>\n ) : undefined\n }\n />\n </div>\n <div className={wide ? 'sticky top-0 w-96 shrink-0 self-start' : 'mt-4'}>\n <InputDataPanel\n entries={ledgerEntries}\n stepId={node.id}\n samples={samples}\n defaultCollapsed={!wide}\n />\n </div>\n </div>\n </InspectorPanel>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/workflows/components/StepsEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Step {\n stepId: string\n stepName: string\n stepType: string\n description?: string\n config?: Record<string, any>\n timeout?: number\n retryPolicy?: {\n maxAttempts?: number\n retryDelay?: number\n backoffMultiplier?: number\n }\n}\n\ninterface StepsEditorProps {\n value: Step[]\n onChange: (steps: Step[]) => void\n error?: string\n}\n\nconst STEP_TYPES = [\n { value: 'START', label: 'Start' },\n { value: 'END', label: 'End' },\n { value: 'USER_TASK', label: 'User Task' },\n { value: 'AUTOMATED', label: 'Automated' },\n { value: 'PARALLEL_FORK', label: 'Parallel Fork' },\n { value: 'PARALLEL_JOIN', label: 'Parallel Join' },\n { value: 'SUB_WORKFLOW', label: 'Sub-Workflow' },\n { value: 'WAIT_FOR_SIGNAL', label: 'Wait for Signal' },\n { value: 'WAIT_FOR_TIMER', label: 'Wait for Timer' },\n]\n\nexport function StepsEditor({ value = [], onChange, error }: StepsEditorProps) {\n const t = useT()\n\n const addStep = () => {\n const newStep: Step = {\n stepId: `step_${Date.now()}`,\n stepName: t('workflows.common.newStep'),\n stepType: 'AUTOMATED',\n description: '',\n config: {},\n }\n onChange([...value, newStep])\n }\n\n const updateStep = (index: number, field: keyof Step, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const removeStep = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveStep = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.steps')}\n </p>\n {error && <p className=\"text-sm text-status-error-text mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addStep} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addStep')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noSteps')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((step, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`step-${index}-id`} className=\"text-xs\">\n {t('workflows.steps.stepId')} *\n </Label>\n <Input\n id={`step-${index}-id`}\n value={step.stepId}\n onChange={(e) => updateStep(index, 'stepId', e.target.value)}\n placeholder=\"step_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`step-${index}-name`} className=\"text-xs\">\n {t('workflows.steps.stepName')} *\n </Label>\n <Input\n id={`step-${index}-name`}\n value={step.stepName}\n onChange={(e) => updateStep(index, 'stepName', e.target.value)}\n placeholder={t('workflows.steps.stepName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveStep(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveStep(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeStep(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-destructive\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`step-${index}-type`} className=\"text-xs\">\n {t('workflows.steps.stepType')} *\n </Label>\n <Select\n value={step.stepType}\n onValueChange={(value) => updateStep(index, 'stepType', value)}\n >\n <SelectTrigger id={`step-${index}-type`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STEP_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.steps.types.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`step-${index}-timeout`} className=\"text-xs\">\n {t('workflows.steps.timeout')} (ms)\n </Label>\n <Input\n id={`step-${index}-timeout`}\n type=\"number\"\n value={step.timeout || ''}\n onChange={(e) => updateStep(index, 'timeout', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1\"\n />\n </div>\n </div>\n\n {step.stepType === 'WAIT_FOR_TIMER' && (\n <div className=\"grid grid-cols-1 sm:grid-cols-[1fr_auto_1fr] gap-3 items-end\">\n <div>\n <Label htmlFor={`step-${index}-duration`} className=\"text-xs\">\n {t('workflows.activities.waitDuration')}\n </Label>\n <Input\n id={`step-${index}-duration`}\n value={step.config?.duration || ''}\n onChange={(e) => updateStep(index, 'config', { ...step.config, duration: e.target.value, until: undefined })}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n className=\"mt-1\"\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitDurationDescription')}\n </p>\n </div>\n <span className=\"text-xs text-muted-foreground pb-6\">{t('workflows.activities.waitOr')}</span>\n <div>\n <Label htmlFor={`step-${index}-until`} className=\"text-xs\">\n {t('workflows.activities.waitUntil')}\n </Label>\n <Input\n id={`step-${index}-until`}\n type=\"datetime-local\"\n value={step.config?.until ? step.config.until.slice(0, 16) : ''}\n onChange={(e) => updateStep(index, 'config', { ...step.config, until: e.target.value ? new Date(e.target.value).toISOString() : undefined, duration: undefined })}\n className=\"mt-1\"\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitUntilDescription')}\n </p>\n </div>\n </div>\n )}\n\n <div>\n <Label htmlFor={`step-${index}-description`} className=\"text-xs\">\n {t('workflows.steps.singular')} {t('workflows.definitions.description')}\n </Label>\n <Textarea\n id={`step-${index}-description`}\n value={step.description || ''}\n onChange={(e) => updateStep(index, 'description', e.target.value)}\n placeholder={t('workflows.form.placeholders.description')}\n rows={2}\n className=\"mt-1\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Step {\n stepId: string\n stepName: string\n stepType: string\n description?: string\n config?: Record<string, any>\n timeout?: number\n retryPolicy?: {\n maxAttempts?: number\n initialIntervalMs?: number\n backoffCoefficient?: number\n maxIntervalMs?: number\n }\n}\n\ninterface StepsEditorProps {\n value: Step[]\n onChange: (steps: Step[]) => void\n error?: string\n}\n\nconst STEP_TYPES = [\n { value: 'START', label: 'Start' },\n { value: 'END', label: 'End' },\n { value: 'USER_TASK', label: 'User Task' },\n { value: 'AUTOMATED', label: 'Automated' },\n { value: 'PARALLEL_FORK', label: 'Parallel Fork' },\n { value: 'PARALLEL_JOIN', label: 'Parallel Join' },\n { value: 'SUB_WORKFLOW', label: 'Sub-Workflow' },\n { value: 'WAIT_FOR_SIGNAL', label: 'Wait for Signal' },\n { value: 'WAIT_FOR_TIMER', label: 'Wait for Timer' },\n]\n\n/**\n * @deprecated The form editor is retired (spec section 10) \u2014 steps are authored\n * on the canvas in `/backend/definitions/visual-editor`. This component stays\n * exported for at least one minor release for third-party forms that embed it;\n * it has no call site in this module any more.\n */\nexport function StepsEditor({ value = [], onChange, error }: StepsEditorProps) {\n const t = useT()\n\n const addStep = () => {\n const newStep: Step = {\n stepId: `step_${Date.now()}`,\n stepName: t('workflows.common.newStep'),\n stepType: 'AUTOMATED',\n description: '',\n config: {},\n }\n onChange([...value, newStep])\n }\n\n const updateStep = (index: number, field: keyof Step, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const removeStep = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveStep = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.steps')}\n </p>\n {error && <p className=\"text-sm text-status-error-text mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addStep} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addStep')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noSteps')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((step, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`step-${index}-id`} className=\"text-xs\">\n {t('workflows.steps.stepId')} *\n </Label>\n <Input\n id={`step-${index}-id`}\n value={step.stepId}\n onChange={(e) => updateStep(index, 'stepId', e.target.value)}\n placeholder=\"step_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`step-${index}-name`} className=\"text-xs\">\n {t('workflows.steps.stepName')} *\n </Label>\n <Input\n id={`step-${index}-name`}\n value={step.stepName}\n onChange={(e) => updateStep(index, 'stepName', e.target.value)}\n placeholder={t('workflows.steps.stepName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveStep(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveStep(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeStep(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-destructive\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`step-${index}-type`} className=\"text-xs\">\n {t('workflows.steps.stepType')} *\n </Label>\n <Select\n value={step.stepType}\n onValueChange={(value) => updateStep(index, 'stepType', value)}\n >\n <SelectTrigger id={`step-${index}-type`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STEP_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.steps.types.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`step-${index}-timeout`} className=\"text-xs\">\n {t('workflows.steps.timeout')} (ms)\n </Label>\n <Input\n id={`step-${index}-timeout`}\n type=\"number\"\n value={step.timeout || ''}\n onChange={(e) => updateStep(index, 'timeout', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1\"\n />\n </div>\n </div>\n\n {step.stepType === 'WAIT_FOR_TIMER' && (\n <div className=\"grid grid-cols-1 sm:grid-cols-[1fr_auto_1fr] gap-3 items-end\">\n <div>\n <Label htmlFor={`step-${index}-duration`} className=\"text-xs\">\n {t('workflows.activities.waitDuration')}\n </Label>\n <Input\n id={`step-${index}-duration`}\n value={step.config?.duration || ''}\n onChange={(e) => updateStep(index, 'config', { ...step.config, duration: e.target.value, until: undefined })}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n className=\"mt-1\"\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitDurationDescription')}\n </p>\n </div>\n <span className=\"text-xs text-muted-foreground pb-6\">{t('workflows.activities.waitOr')}</span>\n <div>\n <Label htmlFor={`step-${index}-until`} className=\"text-xs\">\n {t('workflows.activities.waitUntil')}\n </Label>\n <Input\n id={`step-${index}-until`}\n type=\"datetime-local\"\n value={step.config?.until ? step.config.until.slice(0, 16) : ''}\n onChange={(e) => updateStep(index, 'config', { ...step.config, until: e.target.value ? new Date(e.target.value).toISOString() : undefined, duration: undefined })}\n className=\"mt-1\"\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitUntilDescription')}\n </p>\n </div>\n </div>\n )}\n\n <div>\n <Label htmlFor={`step-${index}-description`} className=\"text-xs\">\n {t('workflows.steps.singular')} {t('workflows.definitions.description')}\n </Label>\n <Textarea\n id={`step-${index}-description`}\n value={step.description || ''}\n onChange={(e) => updateStep(index, 'description', e.target.value)}\n placeholder={t('workflows.form.placeholders.description')}\n rows={2}\n className=\"mt-1\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["value"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { AlarmClock, CircleCheck, Route, SquareDashed, Webhook, Workflow } from "lucide-react";
|
|
5
|
+
import {
|
|
6
|
+
Drawer,
|
|
7
|
+
DrawerBody,
|
|
8
|
+
DrawerContent,
|
|
9
|
+
DrawerDescription,
|
|
10
|
+
DrawerHeader,
|
|
11
|
+
DrawerTitle
|
|
12
|
+
} from "@open-mercato/ui/primitives/drawer";
|
|
13
|
+
import { Badge } from "@open-mercato/ui/primitives/badge";
|
|
14
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
15
|
+
import { LoadingMessage, ErrorMessage } from "@open-mercato/ui/backend/detail";
|
|
16
|
+
import { apiCall } from "@open-mercato/ui/backend/utils/apiCall";
|
|
17
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
18
|
+
const BLANK_CARD_ID = "blank";
|
|
19
|
+
const TEMPLATE_ICONS = {
|
|
20
|
+
"check-circle": CircleCheck,
|
|
21
|
+
"webhook": Webhook,
|
|
22
|
+
"alarm-clock": AlarmClock,
|
|
23
|
+
"route": Route
|
|
24
|
+
};
|
|
25
|
+
function resolveTemplateIcon(icon) {
|
|
26
|
+
return TEMPLATE_ICONS[icon] ?? Workflow;
|
|
27
|
+
}
|
|
28
|
+
function TemplateGalleryDialog({ open, onOpenChange, onSelect }) {
|
|
29
|
+
const t = useT();
|
|
30
|
+
const [templates, setTemplates] = React.useState(null);
|
|
31
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
32
|
+
const [loadError, setLoadError] = React.useState(null);
|
|
33
|
+
const [activeCardId, setActiveCardId] = React.useState(BLANK_CARD_ID);
|
|
34
|
+
const loadTemplates = React.useCallback(async () => {
|
|
35
|
+
setIsLoading(true);
|
|
36
|
+
setLoadError(null);
|
|
37
|
+
const result = await apiCall("/api/workflows/templates");
|
|
38
|
+
if (result.ok && Array.isArray(result.result?.items)) {
|
|
39
|
+
setTemplates(result.result.items);
|
|
40
|
+
} else {
|
|
41
|
+
setLoadError(result.result?.error || t("workflows.templates.gallery.loadFailed", "Failed to load workflow templates"));
|
|
42
|
+
}
|
|
43
|
+
setIsLoading(false);
|
|
44
|
+
}, [t]);
|
|
45
|
+
React.useEffect(() => {
|
|
46
|
+
if (open && templates === null && !isLoading && !loadError) {
|
|
47
|
+
void loadTemplates();
|
|
48
|
+
}
|
|
49
|
+
}, [open, templates, isLoading, loadError, loadTemplates]);
|
|
50
|
+
React.useEffect(() => {
|
|
51
|
+
if (!open) setActiveCardId(BLANK_CARD_ID);
|
|
52
|
+
}, [open]);
|
|
53
|
+
const handleSelect = React.useCallback((cardId) => {
|
|
54
|
+
if (cardId === BLANK_CARD_ID) {
|
|
55
|
+
onOpenChange(false);
|
|
56
|
+
onSelect(null);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const template = (templates ?? []).find((item) => item.id === cardId);
|
|
60
|
+
if (!template) return;
|
|
61
|
+
onOpenChange(false);
|
|
62
|
+
onSelect(template);
|
|
63
|
+
}, [templates, onOpenChange, onSelect]);
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
if (!open) return;
|
|
66
|
+
const handleKeyDown = (event) => {
|
|
67
|
+
if ((event.metaKey || event.ctrlKey) && event.key === "Enter") {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
handleSelect(activeCardId);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
73
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
74
|
+
}, [open, activeCardId, handleSelect]);
|
|
75
|
+
const cardClassName = (cardId) => `group relative flex w-full cursor-pointer flex-col gap-2 rounded-lg border-2 bg-background px-4 py-3 text-left transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${activeCardId === cardId ? "border-primary" : "border-border hover:border-muted-foreground/30"}`;
|
|
76
|
+
return /* @__PURE__ */ jsx(Drawer, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
|
|
77
|
+
DrawerContent,
|
|
78
|
+
{
|
|
79
|
+
"data-testid": "workflow-template-gallery-drawer",
|
|
80
|
+
className: "w-full max-w-none sm:w-3/5",
|
|
81
|
+
closeAriaLabel: t("workflows.templates.gallery.close", "Close template gallery"),
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ jsxs(DrawerHeader, { children: [
|
|
84
|
+
/* @__PURE__ */ jsx(DrawerTitle, { children: t("workflows.templates.gallery.title", "Choose a template") }),
|
|
85
|
+
/* @__PURE__ */ jsx(DrawerDescription, { children: t("workflows.templates.gallery.description", "Start from a ready-made workflow or a blank canvas.") })
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ jsx(DrawerBody, { className: "py-4", children: isLoading ? /* @__PURE__ */ jsx(LoadingMessage, { label: t("workflows.templates.gallery.loading", "Loading templates...") }) : loadError ? /* @__PURE__ */ jsx(
|
|
88
|
+
ErrorMessage,
|
|
89
|
+
{
|
|
90
|
+
label: t("workflows.templates.gallery.loadFailed", "Failed to load workflow templates"),
|
|
91
|
+
description: loadError,
|
|
92
|
+
action: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: () => {
|
|
93
|
+
void loadTemplates();
|
|
94
|
+
}, children: t("common.retry", "Retry") })
|
|
95
|
+
}
|
|
96
|
+
) : /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
|
|
97
|
+
/* @__PURE__ */ jsxs(
|
|
98
|
+
"button",
|
|
99
|
+
{
|
|
100
|
+
type: "button",
|
|
101
|
+
"data-testid": "template-card-blank",
|
|
102
|
+
onClick: () => handleSelect(BLANK_CARD_ID),
|
|
103
|
+
onFocus: () => setActiveCardId(BLANK_CARD_ID),
|
|
104
|
+
onMouseEnter: () => setActiveCardId(BLANK_CARD_ID),
|
|
105
|
+
className: cardClassName(BLANK_CARD_ID),
|
|
106
|
+
children: [
|
|
107
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
108
|
+
/* @__PURE__ */ jsx(SquareDashed, { className: "h-5 w-5 text-muted-foreground", "aria-hidden": "true" }),
|
|
109
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: t("workflows.templates.gallery.blank.name", "Blank canvas") })
|
|
110
|
+
] }),
|
|
111
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: t("workflows.templates.gallery.blank.description", "Start from scratch with an empty canvas.") })
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
(templates ?? []).map((template) => {
|
|
116
|
+
const Icon = resolveTemplateIcon(template.icon);
|
|
117
|
+
return /* @__PURE__ */ jsxs(
|
|
118
|
+
"button",
|
|
119
|
+
{
|
|
120
|
+
type: "button",
|
|
121
|
+
"data-testid": `template-card-${template.id}`,
|
|
122
|
+
onClick: () => handleSelect(template.id),
|
|
123
|
+
onFocus: () => setActiveCardId(template.id),
|
|
124
|
+
onMouseEnter: () => setActiveCardId(template.id),
|
|
125
|
+
className: cardClassName(template.id),
|
|
126
|
+
children: [
|
|
127
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
128
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
129
|
+
/* @__PURE__ */ jsx(Icon, { className: "h-5 w-5 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
|
|
130
|
+
/* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold text-foreground", children: t(template.nameKey) })
|
|
131
|
+
] }),
|
|
132
|
+
/* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "shrink-0", children: template.category })
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: t(template.descriptionKey) })
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
template.id
|
|
138
|
+
);
|
|
139
|
+
})
|
|
140
|
+
] }) })
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
) });
|
|
144
|
+
}
|
|
145
|
+
export {
|
|
146
|
+
TemplateGalleryDialog
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=TemplateGalleryDialog.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/components/TemplateGalleryDialog.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { AlarmClock, CircleCheck, Route, SquareDashed, Webhook, Workflow } from 'lucide-react'\nimport {\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n} from '@open-mercato/ui/primitives/drawer'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { LoadingMessage, ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { WorkflowDefinitionData } from '../data/entities'\n\nexport type WorkflowTemplateGalleryItem = {\n id: string\n nameKey: string\n descriptionKey: string\n category: string\n icon: string\n definition: WorkflowDefinitionData\n}\n\ntype TemplatesResponse = {\n items?: WorkflowTemplateGalleryItem[]\n error?: string\n}\n\nexport type TemplateGalleryDialogProps = {\n open: boolean\n onOpenChange: (open: boolean) => void\n onSelect: (template: WorkflowTemplateGalleryItem | null) => void\n}\n\nconst BLANK_CARD_ID = 'blank'\n\nconst TEMPLATE_ICONS: Record<string, LucideIcon> = {\n 'check-circle': CircleCheck,\n 'webhook': Webhook,\n 'alarm-clock': AlarmClock,\n 'route': Route,\n}\n\nfunction resolveTemplateIcon(icon: string): LucideIcon {\n return TEMPLATE_ICONS[icon] ?? Workflow\n}\n\n/**\n * TemplateGalleryDialog \u2014 the \"New workflow\" template picker (spec\n * 2026-07-26-workflows-ux-redesign.md section 2.1 \"Templates\").\n *\n * Lists the seeded templates from GET /api/workflows/templates as cards with\n * a \"Blank canvas\" card first. Selecting a card calls `onSelect` with the\n * chosen template (or `null` for blank canvas) and closes the dialog \u2014 the\n * host decides whether to navigate (definitions list) or apply the template\n * to the open canvas (visual editor).\n *\n * A Drawer rather than a modal: the gallery opens over the definitions list\n * and over the canvas, and a card grid is exactly the content the maintainer\n * wants room for. Keyboard unchanged: Escape cancels (Radix default),\n * Cmd/Ctrl+Enter selects the active card (blank canvas until a card is focused\n * or hovered).\n */\nexport function TemplateGalleryDialog({ open, onOpenChange, onSelect }: TemplateGalleryDialogProps) {\n const t = useT()\n const [templates, setTemplates] = React.useState<WorkflowTemplateGalleryItem[] | null>(null)\n const [isLoading, setIsLoading] = React.useState(false)\n const [loadError, setLoadError] = React.useState<string | null>(null)\n const [activeCardId, setActiveCardId] = React.useState<string>(BLANK_CARD_ID)\n\n const loadTemplates = React.useCallback(async () => {\n setIsLoading(true)\n setLoadError(null)\n const result = await apiCall<TemplatesResponse>('/api/workflows/templates')\n if (result.ok && Array.isArray(result.result?.items)) {\n setTemplates(result.result.items)\n } else {\n setLoadError(result.result?.error || t('workflows.templates.gallery.loadFailed', 'Failed to load workflow templates'))\n }\n setIsLoading(false)\n }, [t])\n\n React.useEffect(() => {\n if (open && templates === null && !isLoading && !loadError) {\n void loadTemplates()\n }\n }, [open, templates, isLoading, loadError, loadTemplates])\n\n React.useEffect(() => {\n if (!open) setActiveCardId(BLANK_CARD_ID)\n }, [open])\n\n const handleSelect = React.useCallback((cardId: string) => {\n if (cardId === BLANK_CARD_ID) {\n onOpenChange(false)\n onSelect(null)\n return\n }\n const template = (templates ?? []).find((item) => item.id === cardId)\n if (!template) return\n onOpenChange(false)\n onSelect(template)\n }, [templates, onOpenChange, onSelect])\n\n React.useEffect(() => {\n if (!open) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {\n event.preventDefault()\n handleSelect(activeCardId)\n }\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [open, activeCardId, handleSelect])\n\n const cardClassName = (cardId: string) => (\n `group relative flex w-full cursor-pointer flex-col gap-2 rounded-lg border-2 bg-background px-4 py-3 text-left transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${\n activeCardId === cardId ? 'border-primary' : 'border-border hover:border-muted-foreground/30'\n }`\n )\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent\n data-testid=\"workflow-template-gallery-drawer\"\n className=\"w-full max-w-none sm:w-3/5\"\n closeAriaLabel={t('workflows.templates.gallery.close', 'Close template gallery')}\n >\n <DrawerHeader>\n <DrawerTitle>{t('workflows.templates.gallery.title', 'Choose a template')}</DrawerTitle>\n <DrawerDescription>\n {t('workflows.templates.gallery.description', 'Start from a ready-made workflow or a blank canvas.')}\n </DrawerDescription>\n </DrawerHeader>\n <DrawerBody className=\"py-4\">\n {isLoading ? (\n <LoadingMessage label={t('workflows.templates.gallery.loading', 'Loading templates...')} />\n ) : loadError ? (\n <ErrorMessage\n label={t('workflows.templates.gallery.loadFailed', 'Failed to load workflow templates')}\n description={loadError}\n action={(\n <Button variant=\"outline\" size=\"sm\" onClick={() => { void loadTemplates() }}>\n {t('common.retry', 'Retry')}\n </Button>\n )}\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <button\n type=\"button\"\n data-testid=\"template-card-blank\"\n onClick={() => handleSelect(BLANK_CARD_ID)}\n onFocus={() => setActiveCardId(BLANK_CARD_ID)}\n onMouseEnter={() => setActiveCardId(BLANK_CARD_ID)}\n className={cardClassName(BLANK_CARD_ID)}\n >\n <div className=\"flex items-center gap-2\">\n <SquareDashed className=\"h-5 w-5 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"text-sm font-semibold text-foreground\">\n {t('workflows.templates.gallery.blank.name', 'Blank canvas')}\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {t('workflows.templates.gallery.blank.description', 'Start from scratch with an empty canvas.')}\n </span>\n </button>\n {(templates ?? []).map((template) => {\n const Icon = resolveTemplateIcon(template.icon)\n return (\n <button\n key={template.id}\n type=\"button\"\n data-testid={`template-card-${template.id}`}\n onClick={() => handleSelect(template.id)}\n onFocus={() => setActiveCardId(template.id)}\n onMouseEnter={() => setActiveCardId(template.id)}\n className={cardClassName(template.id)}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Icon className=\"h-5 w-5 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"truncate text-sm font-semibold text-foreground\">{t(template.nameKey)}</span>\n </div>\n <Badge variant=\"secondary\" className=\"shrink-0\">{template.category}</Badge>\n </div>\n <span className=\"text-xs text-muted-foreground\">{t(template.descriptionKey)}</span>\n </button>\n )\n })}\n </div>\n )}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|