@open-mercato/core 0.6.6-develop.6184.1.b7e55f8d61 → 0.6.6-develop.6201.1.8ceb502c4b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/modules/auth/frontend/login.js +5 -5
  3. package/dist/modules/auth/frontend/login.js.map +2 -2
  4. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +3 -2
  5. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
  6. package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js +26 -14
  7. package/dist/modules/catalog/widgets/injection/product-seo/widget.client.js.map +2 -2
  8. package/dist/modules/customers/api/deals/[id]/route.js +169 -149
  9. package/dist/modules/customers/api/deals/[id]/route.js.map +3 -3
  10. package/dist/modules/customers/components/detail/InlineEditors.js +9 -4
  11. package/dist/modules/customers/components/detail/InlineEditors.js.map +2 -2
  12. package/dist/modules/integrations/backend/integrations/[id]/page.js +13 -9
  13. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  14. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +81 -37
  15. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  16. package/dist/modules/integrations/backend/integrations/detail-page-refresh.js +17 -0
  17. package/dist/modules/integrations/backend/integrations/detail-page-refresh.js.map +7 -0
  18. package/dist/modules/integrations/backend/integrations/page.js +45 -24
  19. package/dist/modules/integrations/backend/integrations/page.js.map +2 -2
  20. package/dist/modules/notifications/api/[id]/action/route.js +18 -3
  21. package/dist/modules/notifications/api/[id]/action/route.js.map +2 -2
  22. package/dist/modules/notifications/api/[id]/restore/route.js +19 -3
  23. package/dist/modules/notifications/api/[id]/restore/route.js.map +2 -2
  24. package/dist/modules/notifications/api/mark-all-read/route.js +18 -4
  25. package/dist/modules/notifications/api/mark-all-read/route.js.map +2 -2
  26. package/dist/modules/notifications/api/route.js +17 -4
  27. package/dist/modules/notifications/api/route.js.map +2 -2
  28. package/dist/modules/notifications/api/settings/route.js +26 -5
  29. package/dist/modules/notifications/api/settings/route.js.map +2 -2
  30. package/dist/modules/notifications/lib/routeHelpers.js +64 -5
  31. package/dist/modules/notifications/lib/routeHelpers.js.map +2 -2
  32. package/dist/modules/sales/components/documents/SalesDocumentForm.js +299 -297
  33. package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
  34. package/dist/modules/workflows/components/EdgeEditDialog.js +120 -141
  35. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  36. package/dist/modules/workflows/components/NodeEditDialog.js +114 -118
  37. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  38. package/dist/modules/workflows/frontend/checkout-demo/page.js +155 -260
  39. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  40. package/package.json +7 -7
  41. package/src/modules/auth/frontend/login.tsx +5 -5
  42. package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +4 -3
  43. package/src/modules/catalog/widgets/injection/product-seo/widget.client.tsx +27 -17
  44. package/src/modules/customers/api/deals/[id]/route.ts +208 -174
  45. package/src/modules/customers/components/detail/InlineEditors.tsx +6 -10
  46. package/src/modules/integrations/backend/integrations/[id]/page.tsx +13 -9
  47. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +78 -35
  48. package/src/modules/integrations/backend/integrations/detail-page-refresh.ts +36 -0
  49. package/src/modules/integrations/backend/integrations/page.tsx +42 -21
  50. package/src/modules/notifications/api/[id]/action/route.ts +17 -2
  51. package/src/modules/notifications/api/[id]/restore/route.ts +19 -3
  52. package/src/modules/notifications/api/mark-all-read/route.ts +18 -4
  53. package/src/modules/notifications/api/route.ts +16 -3
  54. package/src/modules/notifications/api/settings/route.ts +26 -5
  55. package/src/modules/notifications/lib/routeHelpers.ts +101 -4
  56. package/src/modules/sales/components/documents/SalesDocumentForm.tsx +351 -327
  57. package/src/modules/workflows/components/EdgeEditDialog.tsx +132 -157
  58. package/src/modules/workflows/components/NodeEditDialog.tsx +116 -121
  59. package/src/modules/workflows/frontend/checkout-demo/page.tsx +172 -239
  60. package/src/modules/workflows/i18n/de.json +2 -0
  61. package/src/modules/workflows/i18n/en.json +2 -0
  62. package/src/modules/workflows/i18n/es.json +2 -0
  63. package/src/modules/workflows/i18n/pl.json +2 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/components/NodeEditDialog.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport type {Node} from '@xyflow/react'\nimport {useEffect, useState} from 'react'\nimport {Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle} from '@open-mercato/ui/primitives/dialog'\nimport {Button} from '@open-mercato/ui/primitives/button'\nimport {Input} from '@open-mercato/ui/primitives/input'\nimport {Badge} from '@open-mercato/ui/primitives/badge'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport {Alert, AlertDescription} from '@open-mercato/ui/primitives/alert'\nimport {ChevronDown, Plus, Trash2} from 'lucide-react'\nimport {sanitizeId} from '../lib/graph-utils'\nimport {WorkflowDefinition, WorkflowSelector} from './WorkflowSelector'\nimport {JsonBuilder} from '@open-mercato/ui/backend/JsonBuilder'\nimport {StartPreConditionsEditor, type StartPreCondition} from './fields/StartPreConditionsEditor'\nimport {useT} from '@open-mercato/shared/lib/i18n/context'\nimport {useDialogKeyHandler} from '@open-mercato/ui/hooks/useDialogKeyHandler'\nimport {useConfirmDialog} from '@open-mercato/ui/backend/confirm-dialog'\nimport {isFutureIsoDateString, isValidDurationString} from '../data/validators'\n\nexport interface NodeEditDialogProps {\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 * NodeEditDialog - Modal dialog for editing step properties\n *\n * Allows editing:\n * - Label (name)\n * - Description\n * - User task configuration (assignedTo, assignedToRoles, formKey)\n * - Automated task configuration (activityType, activityId)\n */\ninterface FormField {\n name: string\n type: string\n label: string\n required: boolean\n placeholder?: string\n options?: string[] // For select/radio fields\n defaultValue?: string\n}\n\nexport function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }: NodeEditDialogProps) {\n const t = useT()\n const { confirm: confirmDialog, ConfirmDialogElement } = useConfirmDialog()\n const [stepName, setStepName] = useState('')\n const [description, setDescription] = useState('')\n const [assignedTo, setAssignedTo] = useState('')\n const [assignedToRoles, setAssignedToRoles] = useState('')\n const [formKey, setFormKey] = useState('')\n const [activityType, setActivityType] = useState('')\n const [activityId, setActivityId] = useState('')\n const [timeout, setTimeout] = useState('')\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [advancedConfig, setAdvancedConfig] = useState<Record<string, any>>({})\n const [formFields, setFormFields] = useState<FormField[]>([])\n const [expandedFields, setExpandedFields] = useState<Set<number>>(new Set())\n const [isJsonSchemaFormat, setIsJsonSchemaFormat] = useState(false)\n // Advanced userTaskConfig fields (Issue 4.3)\n const [assignmentRule, setAssignmentRule] = useState('')\n const [slaDuration, setSlaDuration] = useState('')\n const [escalationRules, setEscalationRules] = useState<any[]>([])\n\n // Sub-workflow configuration fields (Phase 8)\n const [subWorkflowId, setSubWorkflowId] = useState('')\n const [subWorkflowVersion, setSubWorkflowVersion] = useState('')\n const [inputMappings, setInputMappings] = useState<Array<{ key: string; value: string }>>([])\n const [outputMappings, setOutputMappings] = useState<Array<{ key: string; value: string }>>([])\n const [showWorkflowSelector, setShowWorkflowSelector] = useState(false)\n\n // Wait for signal configuration fields\n const [signalName, setSignalName] = useState('')\n const [signalTimeout, setSignalTimeout] = useState('')\n\n // Wait for timer configuration fields\n const [timerDuration, setTimerDuration] = useState('')\n const [timerUntil, setTimerUntil] = useState('')\n\n // Step activities state (for AUTOMATED steps)\n const [stepActivities, setStepActivities] = useState<any[]>([])\n const [expandedStepActivities, setExpandedStepActivities] = useState<Set<number>>(new Set())\n\n // Pre-conditions state (for START steps)\n const [preConditions, setPreConditions] = useState<StartPreCondition[]>([])\n\n // Inline validation errors keyed by field name\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({})\n\n // Convert JSON Schema to our custom format\n const convertJsonSchemaToFields = (schema: any): FormField[] => {\n if (!schema || !schema.properties) return []\n\n const fields: FormField[] = []\n const properties = schema.properties\n const required = schema.required || []\n\n for (const [name, prop] of Object.entries(properties)) {\n const propDef = prop as any\n const field: FormField = {\n name,\n type: mapJsonSchemaTypeToFieldType(propDef),\n label: propDef.title || name,\n required: required.includes(name),\n placeholder: propDef.description || undefined,\n }\n\n // Handle enum for select fields\n if (propDef.enum) {\n field.options = propDef.enum\n }\n\n // Handle default value\n if (propDef.default !== undefined) {\n field.defaultValue = String(propDef.default)\n }\n\n fields.push(field)\n }\n\n return fields\n }\n\n // Map JSON Schema types to our field types\n const mapJsonSchemaTypeToFieldType = (propDef: any): string => {\n if (propDef.enum) return 'select'\n\n switch (propDef.type) {\n case 'string':\n if (propDef.format === 'email') return 'email'\n if (propDef.format === 'uri') return 'url'\n if (propDef.format === 'date') return 'date'\n if (propDef.format === 'time') return 'time'\n if (propDef.format === 'date-time') return 'datetime-local'\n if (propDef.maxLength && propDef.maxLength > 200) return 'textarea'\n return 'text'\n case 'number':\n case 'integer':\n return 'number'\n case 'boolean':\n return 'checkbox'\n default:\n return 'text'\n }\n }\n\n // Load node data when dialog opens\n useEffect(() => {\n if (node && isOpen) {\n const nodeData = node.data as any\n setStepName(nodeData?.stepName || nodeData?.label || '')\n setDescription(nodeData?.description || '')\n setAssignedTo(nodeData?.assignedTo || '')\n setAssignedToRoles(nodeData?.assignedToRoles?.join(', ') || '')\n setFormKey(nodeData?.formKey || '')\n setActivityType(nodeData?.activityType || '')\n setActivityId(nodeData?.activityId || '')\n setTimeout(nodeData?.timeout || '')\n\n // Load advanced userTaskConfig fields (Issue 4.3)\n if (node.type === 'userTask' && nodeData?.userTaskConfig) {\n setAssignmentRule(nodeData.userTaskConfig.assignmentRule || nodeData.assignmentRule || '')\n setSlaDuration(nodeData.userTaskConfig.slaDuration || nodeData.slaDuration || '')\n setEscalationRules(nodeData.userTaskConfig.escalationRules || nodeData.escalationRules || [])\n } else {\n setAssignmentRule('')\n setSlaDuration('')\n setEscalationRules([])\n }\n\n // Load sub-workflow configuration (Phase 8)\n if (node.type === 'subWorkflow' && nodeData?.config) {\n setSubWorkflowId(nodeData.config.subWorkflowId || '')\n setSubWorkflowVersion(nodeData.config.version?.toString() || '')\n\n // Convert inputMapping object to array for editing\n if (nodeData.config.inputMapping) {\n const mappings = Object.entries(nodeData.config.inputMapping).map(([key, value]) => ({\n key,\n value: value as string\n }))\n setInputMappings(mappings)\n } else {\n setInputMappings([])\n }\n\n // Convert outputMapping object to array for editing\n if (nodeData.config.outputMapping) {\n const mappings = Object.entries(nodeData.config.outputMapping).map(([key, value]) => ({\n key,\n value: value as string\n }))\n setOutputMappings(mappings)\n } else {\n setOutputMappings([])\n }\n } else {\n setSubWorkflowId('')\n setSubWorkflowVersion('')\n setInputMappings([])\n setOutputMappings([])\n }\n\n // Load signal configuration\n if (node.type === 'waitForSignal' && nodeData?.signalConfig) {\n setSignalName(nodeData.signalConfig.signalName || '')\n setSignalTimeout(nodeData.signalConfig.timeout || 'PT5M')\n } else {\n setSignalName('')\n setSignalTimeout('')\n }\n\n // Load timer configuration\n if (node.type === 'waitForTimer') {\n setTimerDuration(nodeData?.config?.duration || '')\n setTimerUntil(nodeData?.config?.until || '')\n } else {\n setTimerDuration('')\n setTimerUntil('')\n }\n\n // Load step activities (for AUTOMATED steps)\n if (node.type === 'automated' && nodeData?.activities) {\n setStepActivities(nodeData.activities)\n } else if (node.type === 'automated') {\n setStepActivities([])\n }\n\n // Load pre-conditions (for START steps)\n if (node.type === 'start' && nodeData?.preConditions) {\n setPreConditions(nodeData.preConditions)\n } else if (node.type === 'start') {\n setPreConditions([])\n }\n\n // Load form fields from userTaskConfig.formSchema\n if (nodeData?.userTaskConfig?.formSchema) {\n const schema = nodeData.userTaskConfig.formSchema\n\n // Check if it's our custom format (with fields array) or JSON Schema format\n if (schema.fields && Array.isArray(schema.fields)) {\n // Custom format\n setFormFields(schema.fields)\n setIsJsonSchemaFormat(false)\n } else if (schema.properties) {\n // JSON Schema format - convert to our format\n setFormFields(convertJsonSchemaToFields(schema))\n setIsJsonSchemaFormat(true)\n } else {\n setFormFields([])\n setIsJsonSchemaFormat(false)\n }\n } else {\n setFormFields([])\n setIsJsonSchemaFormat(false)\n }\n\n // Load advanced config (userTaskConfig for USER_TASK, other custom fields)\n const advancedFields: any = {}\n if (nodeData?.userTaskConfig) {\n advancedFields.userTaskConfig = nodeData.userTaskConfig\n }\n if (nodeData?.retryPolicy) {\n advancedFields.retryPolicy = nodeData.retryPolicy\n }\n setAdvancedConfig(advancedFields)\n setExpandedFields(new Set())\n setFieldErrors({})\n }\n }, [node, isOpen])\n\n const addFormField = () => {\n const newField: FormField = {\n name: `field_${Date.now()}`,\n type: 'text',\n label: t('workflows.form.newField'),\n required: false,\n placeholder: '',\n }\n setFormFields([...formFields, newField])\n // Auto-expand the new field\n const newExpanded = new Set(expandedFields)\n newExpanded.add(formFields.length)\n setExpandedFields(newExpanded)\n }\n\n const removeFormField = async (index: number) => {\n const confirmed = await confirmDialog({\n title: t('workflows.confirm.removeField'),\n variant: 'destructive',\n })\n if (confirmed) {\n setFormFields(formFields.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedFields)\n newExpanded.delete(index)\n setExpandedFields(newExpanded)\n }\n }\n\n const updateFormField = (index: number, field: keyof FormField, value: any) => {\n const updated = [...formFields]\n updated[index] = { ...updated[index], [field]: value }\n setFormFields(updated)\n }\n\n const toggleFieldExpanded = (index: number) => {\n const newExpanded = new Set(expandedFields)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedFields(newExpanded)\n }\n\n const handleWorkflowSelect = (workflowId: string, workflow: WorkflowDefinition) => {\n setSubWorkflowId(workflowId)\n setSubWorkflowVersion(workflow.version.toString())\n setShowWorkflowSelector(false)\n }\n\n const handleSave = () => {\n if (!node) return\n\n // Pre-save validation for wait-related fields. Surface inline errors instead\n // of silently saving an invalid value that will only blow up later when the\n // whole workflow is serialized through the API zod schema.\n const errors: Record<string, string> = {}\n\n if (node.type === 'waitForTimer') {\n if (timerDuration && !isValidDurationString(timerDuration)) {\n errors.timerDuration = t('workflows.validation.invalidDuration')\n }\n if (timerUntil && !isFutureIsoDateString(timerUntil)) {\n errors.timerUntil = t('workflows.validation.untilMustBeFuture')\n }\n }\n\n if (node.type === 'waitForSignal' && signalTimeout && !isValidDurationString(signalTimeout)) {\n errors.signalTimeout = t('workflows.validation.invalidDuration')\n }\n\n if (Object.keys(errors).length > 0) {\n setFieldErrors(errors)\n return\n }\n setFieldErrors({})\n\n // Validate and sanitize step ID\n const sanitizedId = sanitizeId(node.id)\n if (sanitizedId !== node.id) {\n alert(t('workflows.nodeEditor.stepIdSanitized', { from: node.id, to: sanitizedId }))\n }\n\n const updates: Partial<Node['data']> = {\n stepName,\n label: stepName, // Keep label for backward compatibility\n description: description || undefined,\n timeout: timeout || undefined,\n }\n\n // User task specific fields\n if (node.type === 'userTask') {\n updates.assignedTo = assignedTo || undefined\n updates.assignedToRoles = assignedToRoles\n ? assignedToRoles.split(',').map((r) => r.trim()).filter(Boolean)\n : []\n updates.formKey = formKey || undefined\n\n // Build userTaskConfig with all fields (Issue 4.3 - preserve advanced fields)\n updates.userTaskConfig = {\n ...(formFields.length > 0 && {\n formSchema: {\n fields: formFields,\n },\n }),\n ...(assignedTo && { assignedTo }),\n ...(assignedToRoles && { assignedToRoles: assignedToRoles.split(',').map((r) => r.trim()).filter(Boolean) }),\n // Preserve advanced fields loaded from node data\n ...(assignmentRule && { assignmentRule }),\n ...(slaDuration && { slaDuration }),\n ...(escalationRules && escalationRules.length > 0 && { escalationRules }),\n }\n }\n\n // Automated task specific fields\n if (node.type === 'automated') {\n updates.activityType = activityType || undefined\n updates.activityId = activityId || undefined\n }\n\n // Sub-workflow specific fields (Phase 8)\n if (node.type === 'subWorkflow') {\n const config: any = {}\n\n if (subWorkflowId) {\n config.subWorkflowId = subWorkflowId\n }\n\n if (subWorkflowVersion) {\n const versionNum = parseInt(subWorkflowVersion, 10)\n if (!isNaN(versionNum)) {\n config.version = versionNum\n }\n }\n\n // Convert inputMappings array to object\n if (inputMappings.length > 0) {\n config.inputMapping = inputMappings\n .filter(m => m.key && m.value)\n .reduce((acc, m) => ({ ...acc, [m.key]: m.value }), {})\n }\n\n // Convert outputMappings array to object\n if (outputMappings.length > 0) {\n config.outputMapping = outputMappings\n .filter(m => m.key && m.value)\n .reduce((acc, m) => ({ ...acc, [m.key]: m.value }), {})\n }\n\n if (Object.keys(config).length > 0) {\n updates.config = config\n }\n }\n\n // Wait for signal specific fields\n if (node.type === 'waitForSignal') {\n const config: any = {}\n\n if (signalName) {\n config.signalName = signalName\n }\n\n if (signalTimeout) {\n config.timeout = signalTimeout\n }\n\n if (Object.keys(config).length > 0) {\n updates.signalConfig = config\n }\n }\n\n // Wait for timer specific fields (duration XOR until)\n if (node.type === 'waitForTimer') {\n const config: any = {}\n if (timerDuration) {\n config.duration = timerDuration\n } else if (timerUntil) {\n config.until = timerUntil\n }\n updates.config = Object.keys(config).length > 0 ? config : undefined\n }\n\n // Step activities (for AUTOMATED steps)\n if (node.type === 'automated' && stepActivities.length > 0) {\n updates.activities = stepActivities\n }\n\n // Pre-conditions (for START steps)\n if (node.type === 'start') {\n // Filter out empty rule IDs\n updates.preConditions = preConditions.filter(pc => pc.ruleId && pc.ruleId.trim())\n }\n\n // Merge advanced config\n if (advancedConfig && Object.keys(advancedConfig).length > 0) {\n Object.assign(updates, advancedConfig)\n }\n\n onSave(sanitizedId, updates)\n onClose()\n }\n\n const handleDelete = () => {\n if (!node || !onDelete) return\n onDelete(node.id)\n }\n\n const handleKeyDown = useDialogKeyHandler({ onConfirm: handleSave, onCancel: onClose })\n\n if (!isOpen || !node) return null\n\n const nodeTypeLabel = {\n start: t('workflows.nodeTypes.start'),\n end: t('workflows.nodeTypes.end'),\n userTask: t('workflows.nodeTypes.userTask'),\n automated: t('workflows.nodeTypes.automated'),\n decision: t('workflows.nodeTypes.decision'),\n waitForSignal: t('workflows.nodeTypes.waitForSignal'),\n waitForTimer: t('workflows.nodeTypes.waitForTimer'),\n subWorkflow: t('workflows.nodeTypes.subWorkflow'),\n parallelFork: t('workflows.nodeTypes.parallelFork'),\n parallelJoin: t('workflows.nodeTypes.parallelJoin'),\n }[node.type || 'automated']\n\n // START nodes are partially editable (pre-conditions only), END nodes are not editable\n const isEditable = node.type !== 'end'\n const isStartNode = node.type === 'start'\n\n const badgeVariant =\n node.type === 'start' ? 'default' :\n node.type === 'end' ? 'secondary' :\n node.type === 'userTask' ? 'outline' : 'muted'\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"sm:max-w-2xl max-h-[90vh] overflow-y-auto\" onKeyDown={handleKeyDown}>\n <DialogHeader>\n <div className=\"flex items-center gap-2 mb-2\">\n <DialogTitle>{t('workflows.nodeEditor.title')}</DialogTitle>\n <Badge variant={badgeVariant}>\n {nodeTypeLabel}\n </Badge>\n </div>\n <div className=\"space-y-1 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2 text-xs\">\n <span className=\"font-medium\">{t('workflows.fields.id')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted text-muted-foreground font-mono\">{node.id}</code>\n </div>\n {(node.data as any)?.stepName && (\n <div className=\"flex items-center gap-2 text-xs\">\n <span className=\"font-medium\">{t('workflows.fields.name')}:</span>\n <span>{(node.data as any).stepName}</span>\n </div>\n )}\n </div>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {!isEditable ? (\n <Alert variant=\"info\">\n <AlertDescription>\n {t('workflows.nodeEditor.endStepsNotEditable')}\n </AlertDescription>\n </Alert>\n ) : isStartNode ? (\n <div className=\"space-y-4\">\n {/* Info Alert for START nodes */}\n <Alert variant=\"info\">\n <AlertDescription>\n {t('workflows.nodeEditor.startStepsInfo')}\n </AlertDescription>\n </Alert>\n\n {/* Pre-Conditions Editor for START nodes */}\n <StartPreConditionsEditor\n value={preConditions}\n setValue={setPreConditions}\n />\n </div>\n ) : (\n <div className=\"space-y-4\">\n {/* Step Name */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.stepName')} *\n </label>\n <Input\n type=\"text\"\n value={stepName}\n onChange={(e) => setStepName(e.target.value)}\n placeholder={t('workflows.form.placeholders.stepName')}\n autoFocus\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.stepName')}\n </p>\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.description')}\n </label>\n <textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder={t('workflows.form.placeholders.description')}\n rows={3}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring\"\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.description')}\n </p>\n </div>\n\n {/* Timeout \u2014 hidden for wait nodes that already expose their own time-bound config\n (waitForTimer uses duration/until, waitForSignal uses signalConfig.timeout). */}\n {node.type !== 'waitForSignal' && node.type !== 'waitForTimer' && (\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n value={timeout}\n onChange={(e) => setTimeout(e.target.value)}\n placeholder={t('workflows.form.placeholders.timeout')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.timeout')}\n </p>\n </div>\n )}\n\n {/* User Task Configuration */}\n {node.type === 'userTask' && (\n <>\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.nodeEditor.userTaskConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.assignedTo')}\n </label>\n <Input\n type=\"text\"\n value={assignedTo}\n onChange={(e) => setAssignedTo(e.target.value)}\n placeholder={t('workflows.form.placeholders.userId')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.assignedTo')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.assignedToRoles')}\n </label>\n <Input\n type=\"text\"\n value={assignedToRoles}\n onChange={(e) => setAssignedToRoles(e.target.value)}\n placeholder={t('workflows.form.placeholders.roles')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.assignedToRoles')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.formKey')}\n </label>\n <Input\n type=\"text\"\n value={formKey}\n onChange={(e) => setFormKey(e.target.value)}\n placeholder={t('workflows.form.placeholders.formKey')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.formKey')}\n </p>\n </div>\n\n {/* Form Schema Builder */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.formFields', { count: formFields.length })}\n </h3>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n {t('workflows.form.descriptions.formFields')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={addFormField}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addField')}\n </Button>\n </div>\n\n {/* JSON Schema Format Notice */}\n {isJsonSchemaFormat && (\n <Alert variant=\"info\" className=\"mb-3\">\n <AlertDescription>\n {t('workflows.nodeEditor.jsonSchemaFormat')}\n </AlertDescription>\n </Alert>\n )}\n\n {formFields.length === 0 && (\n <div className=\"p-4 text-center text-sm text-gray-500 bg-gray-50 rounded-lg border border-gray-200\">\n {t('workflows.nodeEditor.noFormFields')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {formFields.map((field, index) => {\n const isExpanded = expandedFields.has(index)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n <button\n type=\"button\"\n onClick={() => toggleFieldExpanded(index)}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">\n {field.label || field.name}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {field.type}\n </Badge>\n {field.required && (\n <Badge variant=\"destructive\" className=\"text-xs text-white\">\n {t('workflows.form.required')}\n </Badge>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n Field name: <code className=\"bg-white px-1 rounded\">{field.name}</code>\n </p>\n </div>\n <ChevronDown\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n />\n </button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n {/* Field Name */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.fieldName')} *</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.name}\n onChange={(e) => updateFormField(index, 'name', e.target.value)}\n placeholder={t('workflows.form.placeholders.fieldName')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.fieldName')}</p>\n </div>\n\n {/* Field Label */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.fieldLabel')} *</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.label}\n onChange={(e) => updateFormField(index, 'label', e.target.value)}\n placeholder={t('workflows.form.placeholders.fieldLabel')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.fieldLabel')}</p>\n </div>\n\n {/* Field Type */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.fieldType')} *</label>\n <Select\n value={field.type}\n onValueChange={(value) => updateFormField(index, 'type', value)}\n >\n <SelectTrigger size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"text\">{t('workflows.form.fieldTypes.text')}</SelectItem>\n <SelectItem value=\"number\">{t('workflows.form.fieldTypes.number')}</SelectItem>\n <SelectItem value=\"email\">{t('workflows.form.fieldTypes.email')}</SelectItem>\n <SelectItem value=\"tel\">{t('workflows.form.fieldTypes.tel')}</SelectItem>\n <SelectItem value=\"url\">{t('workflows.form.fieldTypes.url')}</SelectItem>\n <SelectItem value=\"textarea\">{t('workflows.form.fieldTypes.textarea')}</SelectItem>\n <SelectItem value=\"select\">{t('workflows.form.fieldTypes.select')}</SelectItem>\n <SelectItem value=\"radio\">{t('workflows.form.fieldTypes.radio')}</SelectItem>\n <SelectItem value=\"checkbox\">{t('workflows.form.fieldTypes.checkbox')}</SelectItem>\n <SelectItem value=\"date\">{t('workflows.form.fieldTypes.date')}</SelectItem>\n <SelectItem value=\"time\">{t('workflows.form.fieldTypes.time')}</SelectItem>\n <SelectItem value=\"datetime-local\">{t('workflows.form.fieldTypes.datetime-local')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Placeholder */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.placeholder')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.placeholder || ''}\n onChange={(e) => updateFormField(index, 'placeholder', e.target.value)}\n placeholder={t('workflows.form.placeholders.placeholder')}\n />\n </div>\n\n {/* Default Value */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.defaultValue')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.defaultValue || ''}\n onChange={(e) => updateFormField(index, 'defaultValue', e.target.value)}\n placeholder={t('workflows.form.placeholders.defaultValue')}\n />\n </div>\n\n {/* Options (for select/radio) */}\n {(field.type === 'select' || field.type === 'radio') && (\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">{t('workflows.form.options')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.options?.join(', ') || ''}\n onChange={(e) => updateFormField(index, 'options', e.target.value.split(',').map(o => o.trim()).filter(Boolean))}\n placeholder={t('workflows.form.placeholders.options')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.options')}</p>\n </div>\n )}\n\n {/* Required Checkbox */}\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-gray-700\">\n <input\n type=\"checkbox\"\n checked={field.required}\n onChange={(e) => updateFormField(index, 'required', e.target.checked)}\n className=\"rounded border-gray-300 text-blue-600 focus-visible:ring-ring\"\n />\n {t('workflows.form.requiredField')}\n </label>\n </div>\n\n {/* Delete Button */}\n <div className=\"border-t border-gray-200 pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removeFormField(index)}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {t('workflows.form.removeField')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n </>\n )}\n\n {/* Automated Step Activities */}\n {node.type === 'automated' && (\n <>\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.stepActivities', { count: stepActivities.length })}\n </h3>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n {t('workflows.form.descriptions.activities')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n setStepActivities([\n ...stepActivities,\n {\n activityId: `activity_${stepActivities.length + 1}`,\n activityName: `${t('workflows.activities.singular')} ${stepActivities.length + 1}`,\n activityType: 'CALL_API',\n config: {},\n async: false,\n },\n ])\n }}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {stepActivities.length === 0 && (\n <div className=\"p-4 text-center text-sm text-gray-500 bg-gray-50 rounded-lg border border-gray-200\">\n {t('workflows.nodeEditor.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {stepActivities.map((activity, index) => {\n const isExpanded = expandedStepActivities.has(index)\n return (\n <div key={index} className=\"border border-gray-200 rounded-lg bg-gray-50\">\n {/* Activity Header (Collapsed) */}\n <button\n type=\"button\"\n onClick={() => {\n const newExpanded = new Set(expandedStepActivities)\n if (isExpanded) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedStepActivities(newExpanded)\n }}\n className=\"w-full px-4 py-3 text-left flex items-center justify-between hover:bg-gray-100 transition-colors rounded-t-lg\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">\n {activity.activityName || activity.activityId || `Activity ${index + 1}`}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activity.activityType}\n </Badge>\n {activity.async && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {t('workflows.form.async')}\n </Badge>\n )}\n </div>\n <p className=\"text-xs text-gray-600 mt-1\">\n ID: <code className=\"bg-white px-1 rounded\">{activity.activityId}</code>\n </p>\n </div>\n <ChevronDown\n className={`w-5 h-5 text-gray-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n />\n </button>\n\n {/* Activity Body (Expanded) */}\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-gray-200 bg-white\">\n {/* Activity ID */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.form.activityId')} *\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.activityId}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].activityId = e.target.value\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.activityId')}\n />\n </div>\n\n {/* Activity Name */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.form.activityName')} *\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.activityName || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].activityName = e.target.value\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.activityName')}\n />\n </div>\n\n {/* Activity Type */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.form.activityType')} *\n </label>\n <Select\n value={activity.activityType}\n onValueChange={(value) => {\n const updated = [...stepActivities]\n updated[index].activityType = value\n setStepActivities(updated)\n }}\n >\n <SelectTrigger size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"SEND_EMAIL\">{t('workflows.activities.types.SEND_EMAIL')}</SelectItem>\n <SelectItem value=\"CALL_API\">{t('workflows.activities.types.CALL_API')}</SelectItem>\n <SelectItem value=\"UPDATE_ENTITY\">{t('workflows.activities.types.UPDATE_ENTITY')}</SelectItem>\n <SelectItem value=\"EMIT_EVENT\">{t('workflows.activities.types.EMIT_EVENT')}</SelectItem>\n <SelectItem value=\"CALL_WEBHOOK\">{t('workflows.activities.types.CALL_WEBHOOK')}</SelectItem>\n <SelectItem value=\"EXECUTE_FUNCTION\">{t('workflows.activities.types.EXECUTE_FUNCTION')}</SelectItem>\n <SelectItem value=\"WAIT\">{t('workflows.activities.types.WAIT')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Timeout */}\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.timeoutMs || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].timeoutMs = e.target.value ? parseInt(e.target.value) : undefined\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.timeoutMs')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">{t('workflows.form.descriptions.timeoutMs')}</p>\n </div>\n\n {/* Retry Policy Grid */}\n <div className=\"border border-gray-200 rounded-lg p-3 bg-gray-50\">\n <label className=\"block text-xs font-semibold text-gray-700 mb-2\">\n {t('workflows.form.retryPolicy')}\n </label>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <label className=\"block text-xs text-gray-600 mb-1\">{t('workflows.form.maxAttempts')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.maxAttempts || 1}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.maxAttempts = parseInt(e.target.value) || 1\n setStepActivities(updated)\n }}\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs text-gray-600 mb-1\">{t('workflows.form.initialInterval')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.initialIntervalMs || 1000}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.initialIntervalMs = parseInt(e.target.value) || 1000\n setStepActivities(updated)\n }}\n />\n </div>\n <div>\n <label className=\"block text-xs text-gray-600 mb-1\">{t('workflows.form.backoffCoefficient')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffCoefficient || 2}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.backoffCoefficient = parseFloat(e.target.value) || 2\n setStepActivities(updated)\n }}\n />\n </div>\n <div>\n <label className=\"block text-xs text-gray-600 mb-1\">{t('workflows.form.maxInterval')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.maxIntervalMs || 60000}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.maxIntervalMs = parseInt(e.target.value) || 60000\n setStepActivities(updated)\n }}\n />\n </div>\n </div>\n </div>\n\n {/* Activity Flags */}\n <div className=\"flex gap-4\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={activity.async || false}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].async = e.target.checked\n setStepActivities(updated)\n }}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus-visible:ring-ring\"\n />\n <span className=\"text-xs text-gray-700\">{t('workflows.form.executeAsync')}</span>\n </label>\n </div>\n\n {/* WAIT Activity: Duration / Until fields */}\n {activity.activityType === 'WAIT' && (\n <div className=\"space-y-3\">\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.activities.waitDuration')}\n </label>\n <Input\n size=\"sm\"\n type=\"text\"\n value={activity.config?.duration || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].config = { ...updated[index].config, duration: e.target.value, until: undefined }\n setStepActivities(updated)\n }}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">{t('workflows.activities.waitDurationDescription')}</p>\n </div>\n <div className=\"text-xs text-center text-muted-foreground\">{t('workflows.activities.waitOr')}</div>\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.activities.waitUntil')}\n </label>\n <Input\n size=\"sm\"\n type=\"datetime-local\"\n value={activity.config?.until ? activity.config.until.slice(0, 16) : ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].config = { ...updated[index].config, until: e.target.value ? new Date(e.target.value).toISOString() : undefined, duration: undefined }\n setStepActivities(updated)\n }}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">{t('workflows.activities.waitUntilDescription')}</p>\n </div>\n </div>\n )}\n\n {/* Activity Config JSON (hidden for WAIT) */}\n {activity.activityType !== 'WAIT' && (\n <div>\n <label className=\"block text-xs font-medium text-gray-700 mb-1\">\n {t('workflows.form.configuration')}\n </label>\n <JsonBuilder\n value={activity.config || {}}\n onChange={(config) => {\n const updated = [...stepActivities]\n updated[index].config = config\n setStepActivities(updated)\n }}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.activityConfig')}\n </p>\n </div>\n )}\n\n {/* Delete Button */}\n <div className=\"pt-3 border-t border-gray-100\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n setStepActivities(stepActivities.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedStepActivities)\n newExpanded.delete(index)\n setExpandedStepActivities(newExpanded)\n }}\n >\n <Trash2 className=\"size-3 mr-1\" />\n {t('workflows.form.deleteActivity')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n </>\n )}\n\n {/* Sub-Workflow Configuration (Phase 8) */}\n {node.type === 'subWorkflow' && (\n <>\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.form.subWorkflowConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.workflowToInvoke')} *\n </label>\n <div className=\"flex gap-2\">\n <Input\n type=\"text\"\n value={subWorkflowId}\n onChange={(e) => setSubWorkflowId(e.target.value)}\n placeholder={t('workflows.form.placeholders.subWorkflowId')}\n className=\"flex-1\"\n readOnly\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setShowWorkflowSelector(true)}\n >\n {t('workflows.form.browse')}\n </Button>\n </div>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.subWorkflowId')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.version')}\n </label>\n <Input\n type=\"number\"\n value={subWorkflowVersion}\n onChange={(e) => setSubWorkflowVersion(e.target.value)}\n placeholder={t('workflows.form.placeholders.version')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.subWorkflowVersion')}\n </p>\n </div>\n\n {/* Input Mapping */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h4 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.inputMapping', { count: inputMappings.length })}\n </h4>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n {t('workflows.form.descriptions.inputMapping')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => setInputMappings([...inputMappings, { key: '', value: '' }])}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addMapping')}\n </Button>\n </div>\n\n {inputMappings.length === 0 ? (\n <p className=\"text-sm text-gray-500 italic\">\n {t('workflows.nodeEditor.noInputMappings')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {inputMappings.map((mapping, index) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.key}\n onChange={(e) => {\n const newMappings = [...inputMappings]\n newMappings[index].key = e.target.value\n setInputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.childKey')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.childKey')}</p>\n </div>\n <span className=\"text-gray-400 mt-2\">\u2192</span>\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.value}\n onChange={(e) => {\n const newMappings = [...inputMappings]\n newMappings[index].value = e.target.value\n setInputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.parentPath')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.parentPath')}</p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setInputMappings(inputMappings.filter((_, i) => i !== index))\n }}\n className=\"mt-1\"\n >\n <Trash2 className=\"size-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Output Mapping */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h4 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.outputMapping', { count: outputMappings.length })}\n </h4>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n {t('workflows.form.descriptions.outputMapping')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => setOutputMappings([...outputMappings, { key: '', value: '' }])}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addMapping')}\n </Button>\n </div>\n\n {outputMappings.length === 0 ? (\n <p className=\"text-sm text-gray-500 italic\">\n {t('workflows.nodeEditor.noOutputMappings')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {outputMappings.map((mapping, index) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.key}\n onChange={(e) => {\n const newMappings = [...outputMappings]\n newMappings[index].key = e.target.value\n setOutputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.parentKey')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.parentKey')}</p>\n </div>\n <span className=\"text-gray-400 mt-2\">\u2190</span>\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.value}\n onChange={(e) => {\n const newMappings = [...outputMappings]\n newMappings[index].value = e.target.value\n setOutputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.childPath')}\n />\n <p className=\"text-xs text-gray-500 mt-0.5\">{t('workflows.form.descriptions.childPath')}</p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setOutputMappings(outputMappings.filter((_, i) => i !== index))\n }}\n className=\"mt-1\"\n >\n <Trash2 className=\"size-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Wait for Signal Configuration */}\n {node.type === 'waitForSignal' && (\n <>\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.form.signalConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.signalName')} *\n </label>\n <Input\n type=\"text\"\n value={signalName}\n onChange={(e) => setSignalName(e.target.value)}\n placeholder={t('workflows.form.placeholders.signalName')}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.signalName')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n value={signalTimeout}\n onChange={(e) => {\n setSignalTimeout(e.target.value)\n if (fieldErrors.signalTimeout) {\n const next = { ...fieldErrors }\n delete next.signalTimeout\n setFieldErrors(next)\n }\n }}\n placeholder={t('workflows.form.placeholders.signalTimeout')}\n aria-invalid={fieldErrors.signalTimeout ? true : undefined}\n />\n {fieldErrors.signalTimeout ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.signalTimeout}\n </p>\n ) : (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.signalTimeout')}\n </p>\n )}\n </div>\n </>\n )}\n\n {/* Wait for Timer Configuration */}\n {node.type === 'waitForTimer' && (\n <>\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.steps.types.WAIT_FOR_TIMER')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.activities.waitDuration')}\n </label>\n <Input\n type=\"text\"\n value={timerDuration}\n onChange={(e) => {\n setTimerDuration(e.target.value)\n if (e.target.value) setTimerUntil('')\n if (fieldErrors.timerDuration) {\n const next = { ...fieldErrors }\n delete next.timerDuration\n setFieldErrors(next)\n }\n }}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n aria-invalid={fieldErrors.timerDuration ? true : undefined}\n />\n {fieldErrors.timerDuration ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.timerDuration}\n </p>\n ) : (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.activities.waitDurationDescription')}\n </p>\n )}\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n {t('workflows.activities.waitUntil')}\n </label>\n <Input\n type=\"datetime-local\"\n value={timerUntil ? timerUntil.slice(0, 16) : ''}\n min={new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 16)}\n onChange={(e) => {\n const next = e.target.value ? new Date(e.target.value).toISOString() : ''\n setTimerUntil(next)\n if (next) setTimerDuration('')\n if (fieldErrors.timerUntil) {\n const nextErrors = { ...fieldErrors }\n delete nextErrors.timerUntil\n setFieldErrors(nextErrors)\n }\n }}\n aria-invalid={fieldErrors.timerUntil ? true : undefined}\n />\n {fieldErrors.timerUntil ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.timerUntil}\n </p>\n ) : (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.activities.waitUntilDescription')}\n </p>\n )}\n </div>\n </>\n )}\n\n {/* Advanced Configuration */}\n <div className=\"border-t border-gray-200 pt-4 mt-4\">\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"flex items-center justify-between w-full text-left\"\n >\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.advancedConfiguration')}\n </h3>\n <svg\n className={`w-5 h-5 transition-transform ${showAdvanced ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {showAdvanced && (\n <div className=\"mt-3\">\n <JsonBuilder\n value={advancedConfig}\n onChange={setAdvancedConfig}\n />\n <p className=\"text-xs text-gray-500 mt-1\">\n {t('workflows.form.descriptions.advancedConfig')}\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n <DialogFooter className=\"flex justify-between\">\n {onDelete && (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.form.deleteStep')}\n </Button>\n )}\n <div className=\"flex gap-2 ml-auto\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n >\n {t('workflows.actions.cancel')}\n </Button>\n {isEditable && (\n <Button\n type=\"button\"\n onClick={handleSave}\n >\n {t('workflows.actions.saveChanges')}\n </Button>\n )}\n </div>\n </DialogFooter>\n </DialogContent>\n\n {/* Workflow Selector Dialog */}\n {node?.type === 'subWorkflow' && (\n <WorkflowSelector\n isOpen={showWorkflowSelector}\n onClose={() => setShowWorkflowSelector(false)}\n onSelect={handleWorkflowSelect}\n excludeWorkflowIds={[]}\n title={t('workflows.dialogs.selectSubWorkflow')}\n description={t('workflows.dialogs.selectSubWorkflowDescription')}\n onlyEnabled={true}\n />\n )}\n {ConfirmDialogElement}\n </Dialog>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client'\n\nimport type {Node} from '@xyflow/react'\nimport {useEffect, useState} from 'react'\nimport {Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle} from '@open-mercato/ui/primitives/dialog'\nimport {Button} from '@open-mercato/ui/primitives/button'\nimport {Input} from '@open-mercato/ui/primitives/input'\nimport {Textarea} from '@open-mercato/ui/primitives/textarea'\nimport {Checkbox} from '@open-mercato/ui/primitives/checkbox'\nimport {Badge} from '@open-mercato/ui/primitives/badge'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport {Alert, AlertDescription} from '@open-mercato/ui/primitives/alert'\nimport {ChevronDown, Plus, Trash2} from 'lucide-react'\nimport {sanitizeId} from '../lib/graph-utils'\nimport {WorkflowDefinition, WorkflowSelector} from './WorkflowSelector'\nimport {JsonBuilder} from '@open-mercato/ui/backend/JsonBuilder'\nimport {StartPreConditionsEditor, type StartPreCondition} from './fields/StartPreConditionsEditor'\nimport {useT} from '@open-mercato/shared/lib/i18n/context'\nimport {useDialogKeyHandler} from '@open-mercato/ui/hooks/useDialogKeyHandler'\nimport {useConfirmDialog} from '@open-mercato/ui/backend/confirm-dialog'\nimport {isFutureIsoDateString, isValidDurationString} from '../data/validators'\n\nexport interface NodeEditDialogProps {\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 * NodeEditDialog - Modal dialog for editing step properties\n *\n * Allows editing:\n * - Label (name)\n * - Description\n * - User task configuration (assignedTo, assignedToRoles, formKey)\n * - Automated task configuration (activityType, activityId)\n */\ninterface FormField {\n name: string\n type: string\n label: string\n required: boolean\n placeholder?: string\n options?: string[] // For select/radio fields\n defaultValue?: string\n}\n\nexport function NodeEditDialog({ node, isOpen, onClose, onSave, onDelete }: NodeEditDialogProps) {\n const t = useT()\n const { confirm: confirmDialog, ConfirmDialogElement } = useConfirmDialog()\n const [stepName, setStepName] = useState('')\n const [description, setDescription] = useState('')\n const [assignedTo, setAssignedTo] = useState('')\n const [assignedToRoles, setAssignedToRoles] = useState('')\n const [formKey, setFormKey] = useState('')\n const [activityType, setActivityType] = useState('')\n const [activityId, setActivityId] = useState('')\n const [timeout, setTimeout] = useState('')\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [advancedConfig, setAdvancedConfig] = useState<Record<string, any>>({})\n const [formFields, setFormFields] = useState<FormField[]>([])\n const [expandedFields, setExpandedFields] = useState<Set<number>>(new Set())\n const [isJsonSchemaFormat, setIsJsonSchemaFormat] = useState(false)\n // Advanced userTaskConfig fields (Issue 4.3)\n const [assignmentRule, setAssignmentRule] = useState('')\n const [slaDuration, setSlaDuration] = useState('')\n const [escalationRules, setEscalationRules] = useState<any[]>([])\n\n // Sub-workflow configuration fields (Phase 8)\n const [subWorkflowId, setSubWorkflowId] = useState('')\n const [subWorkflowVersion, setSubWorkflowVersion] = useState('')\n const [inputMappings, setInputMappings] = useState<Array<{ key: string; value: string }>>([])\n const [outputMappings, setOutputMappings] = useState<Array<{ key: string; value: string }>>([])\n const [showWorkflowSelector, setShowWorkflowSelector] = useState(false)\n\n // Wait for signal configuration fields\n const [signalName, setSignalName] = useState('')\n const [signalTimeout, setSignalTimeout] = useState('')\n\n // Wait for timer configuration fields\n const [timerDuration, setTimerDuration] = useState('')\n const [timerUntil, setTimerUntil] = useState('')\n\n // Step activities state (for AUTOMATED steps)\n const [stepActivities, setStepActivities] = useState<any[]>([])\n const [expandedStepActivities, setExpandedStepActivities] = useState<Set<number>>(new Set())\n\n // Pre-conditions state (for START steps)\n const [preConditions, setPreConditions] = useState<StartPreCondition[]>([])\n\n // Inline validation errors keyed by field name\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({})\n\n // Convert JSON Schema to our custom format\n const convertJsonSchemaToFields = (schema: any): FormField[] => {\n if (!schema || !schema.properties) return []\n\n const fields: FormField[] = []\n const properties = schema.properties\n const required = schema.required || []\n\n for (const [name, prop] of Object.entries(properties)) {\n const propDef = prop as any\n const field: FormField = {\n name,\n type: mapJsonSchemaTypeToFieldType(propDef),\n label: propDef.title || name,\n required: required.includes(name),\n placeholder: propDef.description || undefined,\n }\n\n // Handle enum for select fields\n if (propDef.enum) {\n field.options = propDef.enum\n }\n\n // Handle default value\n if (propDef.default !== undefined) {\n field.defaultValue = String(propDef.default)\n }\n\n fields.push(field)\n }\n\n return fields\n }\n\n // Map JSON Schema types to our field types\n const mapJsonSchemaTypeToFieldType = (propDef: any): string => {\n if (propDef.enum) return 'select'\n\n switch (propDef.type) {\n case 'string':\n if (propDef.format === 'email') return 'email'\n if (propDef.format === 'uri') return 'url'\n if (propDef.format === 'date') return 'date'\n if (propDef.format === 'time') return 'time'\n if (propDef.format === 'date-time') return 'datetime-local'\n if (propDef.maxLength && propDef.maxLength > 200) return 'textarea'\n return 'text'\n case 'number':\n case 'integer':\n return 'number'\n case 'boolean':\n return 'checkbox'\n default:\n return 'text'\n }\n }\n\n // Load node data when dialog opens\n useEffect(() => {\n if (node && isOpen) {\n const nodeData = node.data as any\n setStepName(nodeData?.stepName || nodeData?.label || '')\n setDescription(nodeData?.description || '')\n setAssignedTo(nodeData?.assignedTo || '')\n setAssignedToRoles(nodeData?.assignedToRoles?.join(', ') || '')\n setFormKey(nodeData?.formKey || '')\n setActivityType(nodeData?.activityType || '')\n setActivityId(nodeData?.activityId || '')\n setTimeout(nodeData?.timeout || '')\n\n // Load advanced userTaskConfig fields (Issue 4.3)\n if (node.type === 'userTask' && nodeData?.userTaskConfig) {\n setAssignmentRule(nodeData.userTaskConfig.assignmentRule || nodeData.assignmentRule || '')\n setSlaDuration(nodeData.userTaskConfig.slaDuration || nodeData.slaDuration || '')\n setEscalationRules(nodeData.userTaskConfig.escalationRules || nodeData.escalationRules || [])\n } else {\n setAssignmentRule('')\n setSlaDuration('')\n setEscalationRules([])\n }\n\n // Load sub-workflow configuration (Phase 8)\n if (node.type === 'subWorkflow' && nodeData?.config) {\n setSubWorkflowId(nodeData.config.subWorkflowId || '')\n setSubWorkflowVersion(nodeData.config.version?.toString() || '')\n\n // Convert inputMapping object to array for editing\n if (nodeData.config.inputMapping) {\n const mappings = Object.entries(nodeData.config.inputMapping).map(([key, value]) => ({\n key,\n value: value as string\n }))\n setInputMappings(mappings)\n } else {\n setInputMappings([])\n }\n\n // Convert outputMapping object to array for editing\n if (nodeData.config.outputMapping) {\n const mappings = Object.entries(nodeData.config.outputMapping).map(([key, value]) => ({\n key,\n value: value as string\n }))\n setOutputMappings(mappings)\n } else {\n setOutputMappings([])\n }\n } else {\n setSubWorkflowId('')\n setSubWorkflowVersion('')\n setInputMappings([])\n setOutputMappings([])\n }\n\n // Load signal configuration\n if (node.type === 'waitForSignal' && nodeData?.signalConfig) {\n setSignalName(nodeData.signalConfig.signalName || '')\n setSignalTimeout(nodeData.signalConfig.timeout || 'PT5M')\n } else {\n setSignalName('')\n setSignalTimeout('')\n }\n\n // Load timer configuration\n if (node.type === 'waitForTimer') {\n setTimerDuration(nodeData?.config?.duration || '')\n setTimerUntil(nodeData?.config?.until || '')\n } else {\n setTimerDuration('')\n setTimerUntil('')\n }\n\n // Load step activities (for AUTOMATED steps)\n if (node.type === 'automated' && nodeData?.activities) {\n setStepActivities(nodeData.activities)\n } else if (node.type === 'automated') {\n setStepActivities([])\n }\n\n // Load pre-conditions (for START steps)\n if (node.type === 'start' && nodeData?.preConditions) {\n setPreConditions(nodeData.preConditions)\n } else if (node.type === 'start') {\n setPreConditions([])\n }\n\n // Load form fields from userTaskConfig.formSchema\n if (nodeData?.userTaskConfig?.formSchema) {\n const schema = nodeData.userTaskConfig.formSchema\n\n // Check if it's our custom format (with fields array) or JSON Schema format\n if (schema.fields && Array.isArray(schema.fields)) {\n // Custom format\n setFormFields(schema.fields)\n setIsJsonSchemaFormat(false)\n } else if (schema.properties) {\n // JSON Schema format - convert to our format\n setFormFields(convertJsonSchemaToFields(schema))\n setIsJsonSchemaFormat(true)\n } else {\n setFormFields([])\n setIsJsonSchemaFormat(false)\n }\n } else {\n setFormFields([])\n setIsJsonSchemaFormat(false)\n }\n\n // Load advanced config (userTaskConfig for USER_TASK, other custom fields)\n const advancedFields: any = {}\n if (nodeData?.userTaskConfig) {\n advancedFields.userTaskConfig = nodeData.userTaskConfig\n }\n if (nodeData?.retryPolicy) {\n advancedFields.retryPolicy = nodeData.retryPolicy\n }\n setAdvancedConfig(advancedFields)\n setExpandedFields(new Set())\n setFieldErrors({})\n }\n }, [node, isOpen])\n\n const addFormField = () => {\n const newField: FormField = {\n name: `field_${Date.now()}`,\n type: 'text',\n label: t('workflows.form.newField'),\n required: false,\n placeholder: '',\n }\n setFormFields(prev => [...prev, newField])\n // Auto-expand the new field\n const newExpanded = new Set(expandedFields)\n newExpanded.add(formFields.length)\n setExpandedFields(newExpanded)\n }\n\n const removeFormField = async (index: number) => {\n const confirmed = await confirmDialog({\n title: t('workflows.confirm.removeField'),\n variant: 'destructive',\n })\n if (confirmed) {\n setFormFields(prev => prev.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedFields)\n newExpanded.delete(index)\n setExpandedFields(newExpanded)\n }\n }\n\n const updateFormField = (index: number, field: keyof FormField, value: any) => {\n const updated = [...formFields]\n updated[index] = { ...updated[index], [field]: value }\n setFormFields(updated)\n }\n\n const toggleFieldExpanded = (index: number) => {\n const newExpanded = new Set(expandedFields)\n if (newExpanded.has(index)) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedFields(newExpanded)\n }\n\n const handleWorkflowSelect = (workflowId: string, workflow: WorkflowDefinition) => {\n setSubWorkflowId(workflowId)\n setSubWorkflowVersion(workflow.version.toString())\n setShowWorkflowSelector(false)\n }\n\n const handleSave = () => {\n if (!node) return\n\n // Pre-save validation for wait-related fields. Surface inline errors instead\n // of silently saving an invalid value that will only blow up later when the\n // whole workflow is serialized through the API zod schema.\n const errors: Record<string, string> = {}\n\n if (node.type === 'waitForTimer') {\n if (timerDuration && !isValidDurationString(timerDuration)) {\n errors.timerDuration = t('workflows.validation.invalidDuration')\n }\n if (timerUntil && !isFutureIsoDateString(timerUntil)) {\n errors.timerUntil = t('workflows.validation.untilMustBeFuture')\n }\n }\n\n if (node.type === 'waitForSignal' && signalTimeout && !isValidDurationString(signalTimeout)) {\n errors.signalTimeout = t('workflows.validation.invalidDuration')\n }\n\n if (Object.keys(errors).length > 0) {\n setFieldErrors(errors)\n return\n }\n setFieldErrors({})\n\n // Validate and sanitize step ID\n const sanitizedId = sanitizeId(node.id)\n if (sanitizedId !== node.id) {\n alert(t('workflows.nodeEditor.stepIdSanitized', { from: node.id, to: sanitizedId }))\n }\n\n const updates: Partial<Node['data']> = {\n stepName,\n label: stepName, // Keep label for backward compatibility\n description: description || undefined,\n timeout: timeout || undefined,\n }\n\n // User task specific fields\n if (node.type === 'userTask') {\n updates.assignedTo = assignedTo || undefined\n updates.assignedToRoles = assignedToRoles\n ? assignedToRoles.split(',').map((r) => r.trim()).filter(Boolean)\n : []\n updates.formKey = formKey || undefined\n\n // Build userTaskConfig with all fields (Issue 4.3 - preserve advanced fields)\n updates.userTaskConfig = {\n ...(formFields.length > 0 && {\n formSchema: {\n fields: formFields,\n },\n }),\n ...(assignedTo && { assignedTo }),\n ...(assignedToRoles && { assignedToRoles: assignedToRoles.split(',').map((r) => r.trim()).filter(Boolean) }),\n // Preserve advanced fields loaded from node data\n ...(assignmentRule && { assignmentRule }),\n ...(slaDuration && { slaDuration }),\n ...(escalationRules && escalationRules.length > 0 && { escalationRules }),\n }\n }\n\n // Automated task specific fields\n if (node.type === 'automated') {\n updates.activityType = activityType || undefined\n updates.activityId = activityId || undefined\n }\n\n // Sub-workflow specific fields (Phase 8)\n if (node.type === 'subWorkflow') {\n const config: any = {}\n\n if (subWorkflowId) {\n config.subWorkflowId = subWorkflowId\n }\n\n if (subWorkflowVersion) {\n const versionNum = parseInt(subWorkflowVersion, 10)\n if (!isNaN(versionNum)) {\n config.version = versionNum\n }\n }\n\n // Convert inputMappings array to object\n if (inputMappings.length > 0) {\n config.inputMapping = inputMappings\n .filter(m => m.key && m.value)\n .reduce((acc, m) => ({ ...acc, [m.key]: m.value }), {})\n }\n\n // Convert outputMappings array to object\n if (outputMappings.length > 0) {\n config.outputMapping = outputMappings\n .filter(m => m.key && m.value)\n .reduce((acc, m) => ({ ...acc, [m.key]: m.value }), {})\n }\n\n if (Object.keys(config).length > 0) {\n updates.config = config\n }\n }\n\n // Wait for signal specific fields\n if (node.type === 'waitForSignal') {\n const config: any = {}\n\n if (signalName) {\n config.signalName = signalName\n }\n\n if (signalTimeout) {\n config.timeout = signalTimeout\n }\n\n if (Object.keys(config).length > 0) {\n updates.signalConfig = config\n }\n }\n\n // Wait for timer specific fields (duration XOR until)\n if (node.type === 'waitForTimer') {\n const config: any = {}\n if (timerDuration) {\n config.duration = timerDuration\n } else if (timerUntil) {\n config.until = timerUntil\n }\n updates.config = Object.keys(config).length > 0 ? config : undefined\n }\n\n // Step activities (for AUTOMATED steps)\n if (node.type === 'automated' && stepActivities.length > 0) {\n updates.activities = stepActivities\n }\n\n // Pre-conditions (for START steps)\n if (node.type === 'start') {\n // Filter out empty rule IDs\n updates.preConditions = preConditions.filter(pc => pc.ruleId && pc.ruleId.trim())\n }\n\n // Merge advanced config\n if (advancedConfig && Object.keys(advancedConfig).length > 0) {\n Object.assign(updates, advancedConfig)\n }\n\n onSave(sanitizedId, updates)\n onClose()\n }\n\n const handleDelete = () => {\n if (!node || !onDelete) return\n onDelete(node.id)\n }\n\n const handleKeyDown = useDialogKeyHandler({ onConfirm: handleSave, onCancel: onClose })\n\n if (!isOpen || !node) return null\n\n const nodeTypeLabel = {\n start: t('workflows.nodeTypes.start'),\n end: t('workflows.nodeTypes.end'),\n userTask: t('workflows.nodeTypes.userTask'),\n automated: t('workflows.nodeTypes.automated'),\n decision: t('workflows.nodeTypes.decision'),\n waitForSignal: t('workflows.nodeTypes.waitForSignal'),\n waitForTimer: t('workflows.nodeTypes.waitForTimer'),\n subWorkflow: t('workflows.nodeTypes.subWorkflow'),\n parallelFork: t('workflows.nodeTypes.parallelFork'),\n parallelJoin: t('workflows.nodeTypes.parallelJoin'),\n }[node.type || 'automated']\n\n // START nodes are partially editable (pre-conditions only), END nodes are not editable\n const isEditable = node.type !== 'end'\n const isStartNode = node.type === 'start'\n\n const badgeVariant =\n node.type === 'start' ? 'default' :\n node.type === 'end' ? 'secondary' :\n node.type === 'userTask' ? 'outline' : 'muted'\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"sm:max-w-2xl max-h-[90vh] overflow-y-auto\" onKeyDown={handleKeyDown}>\n <DialogHeader>\n <div className=\"flex items-center gap-2 mb-2\">\n <DialogTitle>{t('workflows.nodeEditor.title')}</DialogTitle>\n <Badge variant={badgeVariant}>\n {nodeTypeLabel}\n </Badge>\n </div>\n <div className=\"space-y-1 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2 text-xs\">\n <span className=\"font-medium\">{t('workflows.fields.id')}:</span>\n <code className=\"px-1.5 py-0.5 rounded bg-muted text-muted-foreground font-mono\">{node.id}</code>\n </div>\n {(node.data as any)?.stepName && (\n <div className=\"flex items-center gap-2 text-xs\">\n <span className=\"font-medium\">{t('workflows.fields.name')}:</span>\n <span>{(node.data as any).stepName}</span>\n </div>\n )}\n </div>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {!isEditable ? (\n <Alert variant=\"info\">\n <AlertDescription>\n {t('workflows.nodeEditor.endStepsNotEditable')}\n </AlertDescription>\n </Alert>\n ) : isStartNode ? (\n <div className=\"space-y-4\">\n {/* Info Alert for START nodes */}\n <Alert variant=\"info\">\n <AlertDescription>\n {t('workflows.nodeEditor.startStepsInfo')}\n </AlertDescription>\n </Alert>\n\n {/* Pre-Conditions Editor for START nodes */}\n <StartPreConditionsEditor\n value={preConditions}\n setValue={setPreConditions}\n />\n </div>\n ) : (\n <div className=\"space-y-4\">\n {/* Step Name */}\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.stepName')} *\n </label>\n <Input\n type=\"text\"\n value={stepName}\n onChange={(e) => setStepName(e.target.value)}\n placeholder={t('workflows.form.placeholders.stepName')}\n autoFocus\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.stepName')}\n </p>\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.description')}\n </label>\n <Textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder={t('workflows.form.placeholders.description')}\n rows={3}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.description')}\n </p>\n </div>\n\n {/* Timeout \u2014 hidden for wait nodes that already expose their own time-bound config\n (waitForTimer uses duration/until, waitForSignal uses signalConfig.timeout). */}\n {node.type !== 'waitForSignal' && node.type !== 'waitForTimer' && (\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n value={timeout}\n onChange={(e) => setTimeout(e.target.value)}\n placeholder={t('workflows.form.placeholders.timeout')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.timeout')}\n </p>\n </div>\n )}\n\n {/* User Task Configuration */}\n {node.type === 'userTask' && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.nodeEditor.userTaskConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.assignedTo')}\n </label>\n <Input\n type=\"text\"\n value={assignedTo}\n onChange={(e) => setAssignedTo(e.target.value)}\n placeholder={t('workflows.form.placeholders.userId')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.assignedTo')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.assignedToRoles')}\n </label>\n <Input\n type=\"text\"\n value={assignedToRoles}\n onChange={(e) => setAssignedToRoles(e.target.value)}\n placeholder={t('workflows.form.placeholders.roles')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.assignedToRoles')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.formKey')}\n </label>\n <Input\n type=\"text\"\n value={formKey}\n onChange={(e) => setFormKey(e.target.value)}\n placeholder={t('workflows.form.placeholders.formKey')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.formKey')}\n </p>\n </div>\n\n {/* Form Schema Builder */}\n <div className=\"border-t border-border pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.formFields', { count: formFields.length })}\n </h3>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('workflows.form.descriptions.formFields')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={addFormField}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addField')}\n </Button>\n </div>\n\n {/* JSON Schema Format Notice */}\n {isJsonSchemaFormat && (\n <Alert variant=\"info\" className=\"mb-3\">\n <AlertDescription>\n {t('workflows.nodeEditor.jsonSchemaFormat')}\n </AlertDescription>\n </Alert>\n )}\n\n {formFields.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border border-border\">\n {t('workflows.nodeEditor.noFormFields')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {formFields.map((field, index) => {\n const isExpanded = expandedFields.has(index)\n return (\n <div key={index} className=\"border border-border rounded-lg bg-muted\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => toggleFieldExpanded(index)}\n className=\"h-auto w-full justify-between rounded-t-lg px-4 py-3 text-left hover:bg-muted/80\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">\n {field.label || field.name}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {field.type}\n </Badge>\n {field.required && (\n <Badge variant=\"destructive\" className=\"text-xs\">\n {t('workflows.form.required')}\n </Badge>\n )}\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Field name: <code className=\"bg-background px-1 rounded\">{field.name}</code>\n </p>\n </div>\n <ChevronDown\n className={`size-5 text-muted-foreground transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n />\n </Button>\n\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-border bg-background\">\n {/* Field Name */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.fieldName')} *</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.name}\n onChange={(e) => updateFormField(index, 'name', e.target.value)}\n placeholder={t('workflows.form.placeholders.fieldName')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.fieldName')}</p>\n </div>\n\n {/* Field Label */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.fieldLabel')} *</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.label}\n onChange={(e) => updateFormField(index, 'label', e.target.value)}\n placeholder={t('workflows.form.placeholders.fieldLabel')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.fieldLabel')}</p>\n </div>\n\n {/* Field Type */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.fieldType')} *</label>\n <Select\n value={field.type}\n onValueChange={(value) => updateFormField(index, 'type', value)}\n >\n <SelectTrigger size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"text\">{t('workflows.form.fieldTypes.text')}</SelectItem>\n <SelectItem value=\"number\">{t('workflows.form.fieldTypes.number')}</SelectItem>\n <SelectItem value=\"email\">{t('workflows.form.fieldTypes.email')}</SelectItem>\n <SelectItem value=\"tel\">{t('workflows.form.fieldTypes.tel')}</SelectItem>\n <SelectItem value=\"url\">{t('workflows.form.fieldTypes.url')}</SelectItem>\n <SelectItem value=\"textarea\">{t('workflows.form.fieldTypes.textarea')}</SelectItem>\n <SelectItem value=\"select\">{t('workflows.form.fieldTypes.select')}</SelectItem>\n <SelectItem value=\"radio\">{t('workflows.form.fieldTypes.radio')}</SelectItem>\n <SelectItem value=\"checkbox\">{t('workflows.form.fieldTypes.checkbox')}</SelectItem>\n <SelectItem value=\"date\">{t('workflows.form.fieldTypes.date')}</SelectItem>\n <SelectItem value=\"time\">{t('workflows.form.fieldTypes.time')}</SelectItem>\n <SelectItem value=\"datetime-local\">{t('workflows.form.fieldTypes.datetime-local')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Placeholder */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.placeholder')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.placeholder || ''}\n onChange={(e) => updateFormField(index, 'placeholder', e.target.value)}\n placeholder={t('workflows.form.placeholders.placeholder')}\n />\n </div>\n\n {/* Default Value */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.defaultValue')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.defaultValue || ''}\n onChange={(e) => updateFormField(index, 'defaultValue', e.target.value)}\n placeholder={t('workflows.form.placeholders.defaultValue')}\n />\n </div>\n\n {/* Options (for select/radio) */}\n {(field.type === 'select' || field.type === 'radio') && (\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">{t('workflows.form.options')}</label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={field.options?.join(', ') || ''}\n onChange={(e) => updateFormField(index, 'options', e.target.value.split(',').map(o => o.trim()).filter(Boolean))}\n placeholder={t('workflows.form.placeholders.options')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.options')}</p>\n </div>\n )}\n\n {/* Required Checkbox */}\n <div>\n <label className=\"flex items-center gap-2 text-xs font-medium text-foreground\">\n <Checkbox\n checked={field.required}\n onCheckedChange={(checked) => updateFormField(index, 'required', checked === true)}\n />\n {t('workflows.form.requiredField')}\n </label>\n </div>\n\n {/* Delete Button */}\n <div className=\"border-t border-border pt-3\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removeFormField(index)}\n >\n <Trash2 className=\"size-4 mr-1\" />\n {t('workflows.form.removeField')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n </>\n )}\n\n {/* Automated Step Activities */}\n {node.type === 'automated' && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.stepActivities', { count: stepActivities.length })}\n </h3>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('workflows.form.descriptions.activities')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => {\n setStepActivities([\n ...stepActivities,\n {\n activityId: `activity_${stepActivities.length + 1}`,\n activityName: `${t('workflows.activities.singular')} ${stepActivities.length + 1}`,\n activityType: 'CALL_API',\n config: {},\n async: false,\n },\n ])\n }}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {stepActivities.length === 0 && (\n <div className=\"p-4 text-center text-sm text-muted-foreground bg-muted rounded-lg border border-border\">\n {t('workflows.nodeEditor.noActivities')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {stepActivities.map((activity, index) => {\n const isExpanded = expandedStepActivities.has(index)\n return (\n <div key={index} className=\"border border-border rounded-lg bg-muted\">\n {/* Activity Header (Collapsed) */}\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n const newExpanded = new Set(expandedStepActivities)\n if (isExpanded) {\n newExpanded.delete(index)\n } else {\n newExpanded.add(index)\n }\n setExpandedStepActivities(newExpanded)\n }}\n className=\"h-auto w-full justify-between rounded-t-lg px-4 py-3 text-left hover:bg-muted/80\"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold text-foreground\">\n {activity.activityName || activity.activityId || `Activity ${index + 1}`}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {activity.activityType}\n </Badge>\n {activity.async && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {t('workflows.form.async')}\n </Badge>\n )}\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n ID: <code className=\"bg-background px-1 rounded\">{activity.activityId}</code>\n </p>\n </div>\n <ChevronDown\n className={`size-5 text-muted-foreground transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n />\n </Button>\n\n {/* Activity Body (Expanded) */}\n {isExpanded && (\n <div className=\"px-4 pb-4 space-y-3 border-t border-border bg-background\">\n {/* Activity ID */}\n <div className=\"pt-3\">\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.form.activityId')} *\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.activityId}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].activityId = e.target.value\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.activityId')}\n />\n </div>\n\n {/* Activity Name */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.form.activityName')} *\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.activityName || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].activityName = e.target.value\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.activityName')}\n />\n </div>\n\n {/* Activity Type */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.form.activityType')} *\n </label>\n <Select\n value={activity.activityType}\n onValueChange={(value) => {\n const updated = [...stepActivities]\n updated[index].activityType = value\n setStepActivities(updated)\n }}\n >\n <SelectTrigger size=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"SEND_EMAIL\">{t('workflows.activities.types.SEND_EMAIL')}</SelectItem>\n <SelectItem value=\"CALL_API\">{t('workflows.activities.types.CALL_API')}</SelectItem>\n <SelectItem value=\"UPDATE_ENTITY\">{t('workflows.activities.types.UPDATE_ENTITY')}</SelectItem>\n <SelectItem value=\"EMIT_EVENT\">{t('workflows.activities.types.EMIT_EVENT')}</SelectItem>\n <SelectItem value=\"CALL_WEBHOOK\">{t('workflows.activities.types.CALL_WEBHOOK')}</SelectItem>\n <SelectItem value=\"EXECUTE_FUNCTION\">{t('workflows.activities.types.EXECUTE_FUNCTION')}</SelectItem>\n <SelectItem value=\"WAIT\">{t('workflows.activities.types.WAIT')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Timeout */}\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n size=\"sm\"\n value={activity.timeoutMs || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].timeoutMs = e.target.value ? parseInt(e.target.value) : undefined\n setStepActivities(updated)\n }}\n placeholder={t('workflows.form.placeholders.timeoutMs')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">{t('workflows.form.descriptions.timeoutMs')}</p>\n </div>\n\n {/* Retry Policy Grid */}\n <div className=\"border border-border rounded-lg p-3 bg-muted\">\n <label className=\"block text-xs font-semibold text-foreground mb-2\">\n {t('workflows.form.retryPolicy')}\n </label>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <label className=\"block text-xs text-muted-foreground mb-1\">{t('workflows.form.maxAttempts')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.maxAttempts || 1}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.maxAttempts = parseInt(e.target.value) || 1\n setStepActivities(updated)\n }}\n min=\"1\"\n max=\"10\"\n />\n </div>\n <div>\n <label className=\"block text-xs text-muted-foreground mb-1\">{t('workflows.form.initialInterval')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.initialIntervalMs || 1000}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.initialIntervalMs = parseInt(e.target.value) || 1000\n setStepActivities(updated)\n }}\n />\n </div>\n <div>\n <label className=\"block text-xs text-muted-foreground mb-1\">{t('workflows.form.backoffCoefficient')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffCoefficient || 2}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.backoffCoefficient = parseFloat(e.target.value) || 2\n setStepActivities(updated)\n }}\n />\n </div>\n <div>\n <label className=\"block text-xs text-muted-foreground mb-1\">{t('workflows.form.maxInterval')}</label>\n <Input\n type=\"number\"\n size=\"sm\"\n value={activity.retryPolicy?.maxIntervalMs || 60000}\n onChange={(e) => {\n const updated = [...stepActivities]\n if (!updated[index].retryPolicy) updated[index].retryPolicy = {}\n updated[index].retryPolicy.maxIntervalMs = parseInt(e.target.value) || 60000\n setStepActivities(updated)\n }}\n />\n </div>\n </div>\n </div>\n\n {/* Activity Flags */}\n <div className=\"flex gap-4\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <Checkbox\n checked={activity.async || false}\n onCheckedChange={(checked) => {\n const updated = [...stepActivities]\n updated[index].async = checked === true\n setStepActivities(updated)\n }}\n />\n <span className=\"text-xs text-foreground\">{t('workflows.form.executeAsync')}</span>\n </label>\n </div>\n\n {/* WAIT Activity: Duration / Until fields */}\n {activity.activityType === 'WAIT' && (\n <div className=\"space-y-3\">\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.activities.waitDuration')}\n </label>\n <Input\n size=\"sm\"\n type=\"text\"\n value={activity.config?.duration || ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].config = { ...updated[index].config, duration: e.target.value, until: undefined }\n setStepActivities(updated)\n }}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">{t('workflows.activities.waitDurationDescription')}</p>\n </div>\n <div className=\"text-xs text-center text-muted-foreground\">{t('workflows.activities.waitOr')}</div>\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.activities.waitUntil')}\n </label>\n <Input\n size=\"sm\"\n type=\"datetime-local\"\n value={activity.config?.until ? activity.config.until.slice(0, 16) : ''}\n onChange={(e) => {\n const updated = [...stepActivities]\n updated[index].config = { ...updated[index].config, until: e.target.value ? new Date(e.target.value).toISOString() : undefined, duration: undefined }\n setStepActivities(updated)\n }}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">{t('workflows.activities.waitUntilDescription')}</p>\n </div>\n </div>\n )}\n\n {/* Activity Config JSON (hidden for WAIT) */}\n {activity.activityType !== 'WAIT' && (\n <div>\n <label className=\"block text-xs font-medium text-foreground mb-1\">\n {t('workflows.form.configuration')}\n </label>\n <JsonBuilder\n value={activity.config || {}}\n onChange={(config) => {\n const updated = [...stepActivities]\n updated[index].config = config\n setStepActivities(updated)\n }}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.activityConfig')}\n </p>\n </div>\n )}\n\n {/* Delete Button */}\n <div className=\"pt-3 border-t border-border\">\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n setStepActivities(stepActivities.filter((_, i) => i !== index))\n const newExpanded = new Set(expandedStepActivities)\n newExpanded.delete(index)\n setExpandedStepActivities(newExpanded)\n }}\n >\n <Trash2 className=\"size-3 mr-1\" />\n {t('workflows.form.deleteActivity')}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n </>\n )}\n\n {/* Sub-Workflow Configuration (Phase 8) */}\n {node.type === 'subWorkflow' && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.form.subWorkflowConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.workflowToInvoke')} *\n </label>\n <div className=\"flex gap-2\">\n <Input\n type=\"text\"\n value={subWorkflowId}\n onChange={(e) => setSubWorkflowId(e.target.value)}\n placeholder={t('workflows.form.placeholders.subWorkflowId')}\n className=\"flex-1\"\n readOnly\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setShowWorkflowSelector(true)}\n >\n {t('workflows.form.browse')}\n </Button>\n </div>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.subWorkflowId')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.version')}\n </label>\n <Input\n type=\"number\"\n value={subWorkflowVersion}\n onChange={(e) => setSubWorkflowVersion(e.target.value)}\n placeholder={t('workflows.form.placeholders.version')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.subWorkflowVersion')}\n </p>\n </div>\n\n {/* Input Mapping */}\n <div className=\"border-t border-border pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h4 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.inputMapping', { count: inputMappings.length })}\n </h4>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('workflows.form.descriptions.inputMapping')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => setInputMappings(prev => [...prev, { key: '', value: '' }])}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addMapping')}\n </Button>\n </div>\n\n {inputMappings.length === 0 ? (\n <p className=\"text-sm text-muted-foreground italic\">\n {t('workflows.nodeEditor.noInputMappings')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {inputMappings.map((mapping, index) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.key}\n onChange={(e) => {\n const newMappings = [...inputMappings]\n newMappings[index].key = e.target.value\n setInputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.childKey')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.childKey')}</p>\n </div>\n <span className=\"text-muted-foreground mt-2\">\u2192</span>\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.value}\n onChange={(e) => {\n const newMappings = [...inputMappings]\n newMappings[index].value = e.target.value\n setInputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.parentPath')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.parentPath')}</p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setInputMappings(prev => prev.filter((_, i) => i !== index))\n }}\n className=\"mt-1\"\n >\n <Trash2 className=\"size-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Output Mapping */}\n <div className=\"border-t border-border pt-4 mt-4\">\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <h4 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.outputMapping', { count: outputMappings.length })}\n </h4>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {t('workflows.form.descriptions.outputMapping')}\n </p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => setOutputMappings(prev => [...prev, { key: '', value: '' }])}\n >\n <Plus className=\"size-3 mr-1\" />\n {t('workflows.form.addMapping')}\n </Button>\n </div>\n\n {outputMappings.length === 0 ? (\n <p className=\"text-sm text-muted-foreground italic\">\n {t('workflows.nodeEditor.noOutputMappings')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {outputMappings.map((mapping, index) => (\n <div key={index} className=\"flex gap-2 items-start\">\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.key}\n onChange={(e) => {\n const newMappings = [...outputMappings]\n newMappings[index].key = e.target.value\n setOutputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.parentKey')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.parentKey')}</p>\n </div>\n <span className=\"text-muted-foreground mt-2\">\u2190</span>\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={mapping.value}\n onChange={(e) => {\n const newMappings = [...outputMappings]\n newMappings[index].value = e.target.value\n setOutputMappings(newMappings)\n }}\n placeholder={t('workflows.form.placeholders.childPath')}\n />\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('workflows.form.descriptions.childPath')}</p>\n </div>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setOutputMappings(prev => prev.filter((_, i) => i !== index))\n }}\n className=\"mt-1\"\n >\n <Trash2 className=\"size-3\" />\n </Button>\n </div>\n ))}\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Wait for Signal Configuration */}\n {node.type === 'waitForSignal' && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.form.signalConfig')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.signalName')} *\n </label>\n <Input\n type=\"text\"\n value={signalName}\n onChange={(e) => setSignalName(e.target.value)}\n placeholder={t('workflows.form.placeholders.signalName')}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.signalName')}\n </p>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.form.timeout')}\n </label>\n <Input\n type=\"text\"\n value={signalTimeout}\n onChange={(e) => {\n setSignalTimeout(e.target.value)\n if (fieldErrors.signalTimeout) {\n const next = { ...fieldErrors }\n delete next.signalTimeout\n setFieldErrors(next)\n }\n }}\n placeholder={t('workflows.form.placeholders.signalTimeout')}\n aria-invalid={fieldErrors.signalTimeout ? true : undefined}\n />\n {fieldErrors.signalTimeout ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.signalTimeout}\n </p>\n ) : (\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.signalTimeout')}\n </p>\n )}\n </div>\n </>\n )}\n\n {/* Wait for Timer Configuration */}\n {node.type === 'waitForTimer' && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n {t('workflows.steps.types.WAIT_FOR_TIMER')}\n </h3>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.activities.waitDuration')}\n </label>\n <Input\n type=\"text\"\n value={timerDuration}\n onChange={(e) => {\n setTimerDuration(e.target.value)\n if (e.target.value) setTimerUntil('')\n if (fieldErrors.timerDuration) {\n const next = { ...fieldErrors }\n delete next.timerDuration\n setFieldErrors(next)\n }\n }}\n placeholder={t('workflows.activities.waitDurationPlaceholder')}\n aria-invalid={fieldErrors.timerDuration ? true : undefined}\n />\n {fieldErrors.timerDuration ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.timerDuration}\n </p>\n ) : (\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitDurationDescription')}\n </p>\n )}\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1\">\n {t('workflows.activities.waitUntil')}\n </label>\n <Input\n type=\"datetime-local\"\n value={timerUntil ? timerUntil.slice(0, 16) : ''}\n min={new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 16)}\n onChange={(e) => {\n const next = e.target.value ? new Date(e.target.value).toISOString() : ''\n setTimerUntil(next)\n if (next) setTimerDuration('')\n if (fieldErrors.timerUntil) {\n const nextErrors = { ...fieldErrors }\n delete nextErrors.timerUntil\n setFieldErrors(nextErrors)\n }\n }}\n aria-invalid={fieldErrors.timerUntil ? true : undefined}\n />\n {fieldErrors.timerUntil ? (\n <p className=\"text-xs text-destructive mt-1\">\n {fieldErrors.timerUntil}\n </p>\n ) : (\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.activities.waitUntilDescription')}\n </p>\n )}\n </div>\n </>\n )}\n\n {/* Advanced Configuration */}\n <div className=\"border-t border-border pt-4 mt-4\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n className=\"h-auto w-full justify-between px-0 py-0 text-left hover:bg-transparent\"\n >\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t('workflows.form.advancedConfiguration')}\n </h3>\n <ChevronDown\n className={`size-5 transition-transform ${showAdvanced ? 'rotate-180' : ''}`}\n />\n </Button>\n {showAdvanced && (\n <div className=\"mt-3\">\n <JsonBuilder\n value={advancedConfig}\n onChange={setAdvancedConfig}\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n {t('workflows.form.descriptions.advancedConfig')}\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n <DialogFooter className=\"flex justify-between\">\n {onDelete && (\n <Button\n type=\"button\"\n variant=\"destructive\"\n onClick={handleDelete}\n >\n <Trash2 className=\"size-4\" />\n {t('workflows.form.deleteStep')}\n </Button>\n )}\n <div className=\"flex gap-2 ml-auto\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onClose}\n >\n {t('workflows.actions.cancel')}\n </Button>\n {isEditable && (\n <Button\n type=\"button\"\n onClick={handleSave}\n >\n {t('workflows.actions.saveChanges')}\n </Button>\n )}\n </div>\n </DialogFooter>\n </DialogContent>\n\n {/* Workflow Selector Dialog */}\n {node?.type === 'subWorkflow' && (\n <WorkflowSelector\n isOpen={showWorkflowSelector}\n onClose={() => setShowWorkflowSelector(false)}\n onSelect={handleWorkflowSelect}\n excludeWorkflowIds={[]}\n title={t('workflows.dialogs.selectSubWorkflow')}\n description={t('workflows.dialogs.selectSubWorkflowDescription')}\n onlyEnabled={true}\n />\n )}\n {ConfirmDialogElement}\n </Dialog>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }