@notmrabhi/flowforge 0.1.38 → 0.1.39

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"GatewayBranchEdge-Diid9GtB.js","sources":["../src/WorkflowCanvas/WorkflowCanvasContext.ts","../src/WorkflowCanvas/nodes/StartNode.tsx","../src/WorkflowCanvas/nodes/EndNode.tsx","../src/WorkflowCanvas/nodes/AddTriggerNode.tsx","../src/WorkflowCanvas/nodes/AddStepNode.tsx","../src/WorkflowCanvas/nodes/TriggerNode.tsx","../src/WorkflowCanvas/nodes/EventNode.tsx","../src/WorkflowCanvas/nodes/BranchRailDecoration.tsx","../src/WorkflowCanvas/nodes/FilterNode.tsx","../src/WorkflowCanvas/nodes/ActionNode.tsx","../src/WorkflowCanvas/nodes/ApprovalNode.tsx","../src/WorkflowCanvas/nodes/DelayNode.tsx","../src/WorkflowCanvas/nodes/NotificationNode.tsx","../src/WorkflowCanvas/nodes/WebhookTriggerNode.tsx","../src/WorkflowCanvas/nodes/RestApiNode.tsx","../src/WorkflowCanvas/nodes/ConditionBranchNode.tsx","../src/WorkflowCanvas/nodes/SubWorkflowNode.tsx","../src/WorkflowCanvas/nodes/index.ts","../src/WorkflowCanvas/edges/EdgeWithPlusLabel.tsx","../src/WorkflowCanvas/edges/PlusEdge.tsx","../src/WorkflowCanvas/edges/PlainEdge.tsx","../src/WorkflowCanvas/edges/LabelPlusEdge.tsx","../src/WorkflowCanvas/edges/GatewayBranchEdge.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\r\nimport { defaultFlowForgeMessages } from './messages';\r\nimport { FlowForgeMessages } from './types';\r\nimport type { NodeTypeRegistry } from '../nodeRegistry';\r\n\r\nexport interface CanvasHandlers {\r\n onEditNode: (slotId: string) => void;\r\n onDeleteNode: (slotId: string) => void;\r\n onAddStep: (afterSlotId: string) => void;\r\n onClickAddTrigger: () => void;\r\n messages: FlowForgeMessages;\r\n nodeRegistry: NodeTypeRegistry | null;\r\n /** How much of a node's data to show on its card. Default: 'full'. */\r\n nodeBody?: 'full' | 'title-only';\r\n}\r\n\r\nexport const WorkflowCanvasContext = createContext<CanvasHandlers>({\r\n onEditNode: () => {},\r\n onDeleteNode: () => {},\r\n onAddStep: () => {},\r\n onClickAddTrigger: () => {},\r\n messages: defaultFlowForgeMessages,\r\n nodeRegistry: null,\r\n nodeBody: 'full',\r\n});\r\n\r\nexport const useCanvasHandlers = () => useContext(WorkflowCanvasContext);\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\n\r\nconst StartNode = () => (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0, left: '50%' }} />\r\n <div style={{ padding: '8px 28px', borderRadius: 999, background: '#f5f5f5', border: '1.5px solid #bdbdbd', fontSize: 13, fontWeight: 500, color: '#424242', userSelect: 'none' }}>\r\n Start\r\n </div>\r\n </div>\r\n);\r\n\r\nexport default StartNode;\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\n\r\nconst EndNode = () => (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0, left: '50%' }} />\r\n <div style={{ padding: '8px 28px', borderRadius: 999, background: '#f5f5f5', border: '1.5px solid #bdbdbd', fontSize: 13, fontWeight: 500, color: '#424242', userSelect: 'none' }}>\r\n End\r\n </div>\r\n </div>\r\n);\r\n\r\nexport default EndNode;\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\nimport { Tooltip } from '@mui/material';\r\nimport { GrTrigger } from 'react-icons/gr';\r\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\r\n\r\nconst AddTriggerNode = () => {\r\n const { onClickAddTrigger, messages } = useCanvasHandlers();\r\n return (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0, left: '50%' }} />\r\n <Tooltip title={messages.addTriggerTooltip} placement=\"top\" arrow>\r\n <div\r\n onClick={onClickAddTrigger}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter') onClickAddTrigger(); }}\r\n style={{ padding: '10px 24px', borderRadius: 8, border: '1.5px dashed #d0d0d0', background: '#fff', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8 }}\r\n >\r\n <GrTrigger size={16} />\r\n <span className=\"ff-text-black\" style={{ fontSize: 13 }} data-testid=\"add-trigger-btn-text\">\r\n {messages.addTriggerButton}\r\n </span>\r\n </div>\r\n </Tooltip>\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0, left: '50%' }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddTriggerNode;\r\n","import React from 'react';\r\nimport { Handle, Position, NodeProps } from 'reactflow';\r\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\r\n\r\nconst AddStepNode = ({ id }: NodeProps) => {\r\n const { onAddStep } = useCanvasHandlers();\r\n return (\r\n <div\r\n onClick={() => onAddStep(id)}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter') onAddStep(id); }}\r\n style={{ width: 28, height: 28, borderRadius: '50%', border: '1.5px solid #9e9e9e', background: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', fontSize: 18, color: '#757575', lineHeight: 1, userSelect: 'none' }}\r\n >\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\r\n +\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddStepNode;\r\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { Chip, Tooltip } from '@mui/material';\nimport { MdInput, MdOutlineModeEdit, MdInfoOutline } from 'react-icons/md';\nimport { FaCheckCircle, FaTimesCircle } from 'react-icons/fa';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\n\ninterface TriggerSource {\n value?: string;\n label?: string;\n}\n\ninterface TriggerExecutionStatus {\n status?: 'success' | 'failed' | string;\n}\n\ninterface TriggerNodeData {\n /** Trigger flavour. 'event' = event-based; 'scheduler' = cron/scheduler; absent = nothing chosen yet. */\n type?: 'event' | 'scheduler';\n /** Event-type label, e.g. 'END_USER_CREATION' → \"New User Registration\" */\n eventType?: string;\n /** Selected event sources (for type === 'event'). Each rendered as a chip. */\n sources?: TriggerSource[];\n /** Legacy / simple shape — single label + optional source, used when no `type`/`sources` are supplied. */\n label?: string;\n source?: string;\n /** Hides edit icon when previewing a stored workflow. */\n previewWorkflow?: boolean;\n /** When present, replaces the edit icon with a status badge. */\n executionStatus?: TriggerExecutionStatus;\n /** Optional info text shown in the (i) tooltip; defaults to a generic explanation. */\n infoText?: string;\n}\n\n// Last-resort humaniser for a raw code string. The package is generic — it\n// must NOT carry IAM-/PAM-/IGA-specific mappings. The host is expected to\n// supply human labels via `template.label` (merged into nodeData.label) and\n// via each source's `label` field (returned from loadTriggerSources). This\n// helper only runs when the host gave us nothing readable to display.\nfunction humaniseCode(code?: string): string {\n if (!code) return '';\n return code\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\n// Source label preference: host-provided `label` first, then humanise.\nfunction formatSource(s: TriggerSource | string): string {\n if (typeof s !== 'string' && s.label) return s.label;\n const value = typeof s === 'string' ? s : (s.value ?? '');\n return humaniseCode(value);\n}\n\nconst TriggerNode = ({ data }: NodeProps) => {\n const { onClickAddTrigger } = useCanvasHandlers();\n const {\n type, eventType, sources,\n label, source,\n previewWorkflow, executionStatus,\n infoText = 'This node decides the flow trigger type and configuration.',\n } = (data ?? {}) as TriggerNodeData;\n\n const handleEdit = (e?: React.SyntheticEvent) => {\n e?.stopPropagation();\n onClickAddTrigger();\n };\n\n // ── Shape flags ─────────────────────────────────────────────────────────────\n const hasEventSources = Array.isArray(sources) && sources.length > 0;\n const hasSimpleShape = !!(label || source);\n\n // ── Title text — always a generic role label, never the configured value.\n // The configured value (event name, sources) lives in the body below.\n const title =\n type === 'scheduler' ? 'Scheduler Trigger'\n : (type === 'event' || hasEventSources || hasSimpleShape) ? 'Event Trigger Source'\n : 'Select Trigger';\n\n const body: React.ReactNode = (() => {\n if (type === 'scheduler') {\n return <span>Scheduler to be configured</span>;\n }\n\n if (type === 'event' || hasEventSources) {\n // Prefer the template's own `label` (human-curated) over a code-derived\n // title. Falls back to a humanised form of the raw code for back-compat\n // with shapes that only carry the eventType code.\n const eventDisplay = label || humaniseCode(eventType);\n return (\n <div>\n <div className=\"ff-d-flex ff-align-items-center\">\n <span style={{ fontWeight: 600 }}>{eventDisplay}</span>\n <span className=\"ff-ms-2 ff-text-muted\" style={{ fontSize: 12 }}>via</span>\n </div>\n <div className=\"ff-d-flex ff-flex-wrap ff-mt-2\" style={{ gap: 4 }}>\n {hasEventSources ? (\n sources!.map((s, i) => (\n <Chip\n key={i}\n label={formatSource(s)}\n variant=\"outlined\"\n size=\"small\"\n className=\"ff-text-dark\"\n />\n ))\n ) : (\n <span className=\"ff-text-muted\" style={{ fontSize: 12 }}>No source selected</span>\n )}\n </div>\n </div>\n );\n }\n\n if (hasSimpleShape) {\n return (\n <div className=\"ff-d-flex ff-flex-wrap ff-align-items-center\" style={{ gap: 6 }}>\n {label && <span style={{ fontWeight: 600 }}>{label}</span>}\n {source && <Chip label={source} variant=\"outlined\" size=\"small\" />}\n </div>\n );\n }\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleEdit}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') handleEdit(e); }}\n style={{ cursor: 'pointer', color: '#1e88e5' }}\n >\n Click to select a trigger to start your workflow\n </span>\n );\n })();\n\n // ── Right-side cluster: execution status badge OR (edit + info) ─────────────\n const rightCluster = executionStatus ? (\n <>\n {executionStatus.status === 'success' && (\n <FaCheckCircle size={16} color=\"#1DBF60\" style={{ marginRight: 8 }} />\n )}\n {executionStatus.status === 'failed' && (\n <FaTimesCircle size={16} color=\"#f44336\" style={{ marginRight: 8 }} />\n )}\n </>\n ) : (\n <div className=\"ff-d-flex ff-align-items-center\">\n {!previewWorkflow && (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleEdit}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') handleEdit(e); }}\n className=\"ff-me-2\"\n style={{ cursor: 'pointer', color: '#212121' }}\n aria-label=\"Edit trigger\"\n >\n <MdOutlineModeEdit size={16} />\n </div>\n )}\n <Tooltip title={<div>{infoText}</div>} placement=\"right\" arrow>\n <span><MdInfoOutline color=\"gray\" size={16} /></span>\n </Tooltip>\n </div>\n );\n\n return (\n <div style={{ width: 350 }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #a5d6a7', borderRadius: 8, background: '#fff', overflow: 'hidden' }}>\n {/* Header row — original layout: icon in tinted square + small generic title */}\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '12px 14px'}}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div\n style={{\n width: 28, height: 28, borderRadius: 6,\n background: 'rgba(76,175,80,0.1)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <MdInput size={16} color=\"#388e3c\" />\n </div>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#212121' }}>{title}</span>\n </div>\n <div className=\"ff-d-flex ff-align-items-center\">{rightCluster}</div>\n </div>\n\n {/* Body */}\n <div\n style={{\n background: '#f5f5f5',\n fontSize: 12,\n color: '#212121',\n padding: '14px 16px',\n margin: '0 10px 12px',\n borderRadius: 6,\n textAlign: 'left',\n }}\n >\n {body}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} id=\"1\" />\n </div>\n );\n};\n\nexport default TriggerNode;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { Chip, Tooltip } from '@mui/material';\nimport { MdInput, MdInfoOutline } from 'react-icons/md';\nimport { FaCheckCircle, FaTimesCircle } from 'react-icons/fa';\n\n/**\n * EventNode — fixed, display-only \"system event\" marker (e.g. the\n * `User Created` step that's pre-seeded in the END_USER_CREATION template).\n *\n * Shares the green/event visual language with TriggerNode but has NO edit\n * affordance — this node represents an event the system raises, not something\n * the user configures. Click → no drawer opens.\n */\n\ninterface EventSource {\n value?: string;\n label?: string;\n}\n\ninterface EventExecutionStatus {\n status?: 'success' | 'failed' | string;\n}\n\ninterface EventNodeData {\n /** Header line, e.g. \"Event\" or \"Event Trigger Source\" */\n header?: string;\n /** Body title — the event being raised, e.g. \"User Created\" / \"New User Registration\" */\n title?: string;\n /** Optional event-type code (mapped to a friendly label below) */\n eventType?: string;\n /** Optional sources, rendered as chips */\n sources?: EventSource[];\n /** Optional tooltip text on the (i) icon */\n infoText?: string;\n /** Optional execution badge (success / failed) */\n executionStatus?: EventExecutionStatus;\n}\n\nfunction formatEventType(code?: string): string {\n if (!code) return '';\n if (code === 'END_USER_CREATION') return 'New User Registration';\n if (code === 'END_USER_UPDATION') return 'On User Update';\n return code.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\nfunction formatSource(s: EventSource | string): string {\n const value = typeof s === 'string' ? s : (s.value ?? '');\n if (value === 'SIGNUP_FLOW') return 'User Self-Registration';\n if (value === 'ADMIN_CREATION_FLOW') return 'Create User via Admin Portal';\n if (value === 'SHEDULAR' || value === 'SCHEDULER') return 'Scheduler';\n if (typeof s !== 'string' && s.label) return s.label;\n return value.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\nconst EventNode = ({ data }: NodeProps) => {\n const {\n header = 'Event',\n title,\n eventType,\n sources,\n executionStatus,\n infoText = 'This event is raised by the system. It cannot be configured.',\n } = (data ?? {}) as EventNodeData;\n\n const displayTitle = title ?? formatEventType(eventType) ?? '—';\n\n return (\n <div style={{ width: 350 }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #a5d6a7', borderRadius: 8, background: '#fff', overflow: 'hidden' }}>\n {/* Header row */}\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '12px 14px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div\n style={{\n width: 28, height: 28, borderRadius: 6,\n background: 'rgba(76,175,80,0.1)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <MdInput size={16} color=\"#388e3c\" />\n </div>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#212121' }}>{header}</span>\n </div>\n <div className=\"ff-d-flex ff-align-items-center\">\n {executionStatus?.status === 'success' && (\n <FaCheckCircle size={16} color=\"#1DBF60\" style={{ marginRight: 8 }} />\n )}\n {executionStatus?.status === 'failed' && (\n <FaTimesCircle size={16} color=\"#f44336\" style={{ marginRight: 8 }} />\n )}\n {!executionStatus && (\n <Tooltip title={<div>{infoText}</div>} placement=\"right\" arrow>\n <span><MdInfoOutline color=\"gray\" size={16} /></span>\n </Tooltip>\n )}\n </div>\n </div>\n\n {/* Body */}\n <div\n style={{\n background: '#f5f5f5',\n fontSize: 13,\n color: '#212121',\n padding: '14px 16px',\n margin: '0 10px 12px',\n borderRadius: 6,\n textAlign: 'left',\n }}\n >\n <div style={{ fontWeight: 600 }}>{displayTitle}</div>\n {Array.isArray(sources) && sources.length > 0 && (\n <>\n <div className=\"ff-text-muted\" style={{ fontSize: 12, marginTop: 4 }}>via</div>\n <div className=\"ff-d-flex ff-flex-wrap ff-mt-1\" style={{ gap: 4 }}>\n {sources.map((s, i) => (\n <Chip\n key={i}\n label={formatSource(s)}\n variant=\"outlined\"\n size=\"small\"\n className=\"ff-text-dark\"\n />\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} id=\"1\" />\n </div>\n );\n};\n\nexport default EventNode;\n","import React from 'react';\n\nexport interface BranchRailEntry {\n /** Y position of this branch's bullet, relative to gateway card's bottom edge */\n y: number;\n label: string;\n /** First/primary branch — used for pill coloring */\n isPass: boolean;\n}\n\nexport interface BranchRailSpec {\n branches: BranchRailEntry[];\n /** Total rail height, from gateway card bottom to end of last branch */\n height: number;\n /** Horizontal offset from gateway center to branch step center (px) */\n indent: number;\n}\n\n/**\n * Vertical rail decoration that hangs off the bottom of a gateway (filter/approval)\n * card. Provides the Workato-style visual: a left vertical line with branch bullets\n * + labels at the Y position of each branch's first step.\n *\n * Positioned absolutely so it overflows the node's bounding box without affecting\n * ReactFlow's measured size.\n */\nconst BranchRailDecoration: React.FC<{ rail: BranchRailSpec; cardWidth: number }> = ({ rail, cardWidth }) => {\n // Rail X sits just inside the gateway card's left edge, descending from card bottom.\n // Branch step center is at (cardCenter + indent). Card center is at cardWidth/2.\n // The bullet anchors on the rail and a short connector reaches the step.\n const railX = cardWidth / 2; // center of gateway card; rail descends from here\n const stepCenterX = cardWidth / 2 + rail.indent;\n const stroke = 'var(--ff-edge-color, #b0bec5)';\n\n return (\n <svg\n width={cardWidth + rail.indent + 200}\n height={rail.height}\n style={{ position: 'absolute', left: 0, top: '100%', pointerEvents: 'none', overflow: 'visible' }}\n >\n {/* Vertical rail */}\n <line x1={railX} y1={0} x2={railX} y2={rail.height} stroke={stroke} strokeWidth={1.5} />\n\n {rail.branches.map((b, idx) => {\n const bulletY = b.y;\n return (\n <g key={idx} transform={`translate(0, ${bulletY})`}>\n {/* Diamond bullet on the rail */}\n <rect\n x={railX - 5} y={-5} width={10} height={10}\n fill=\"#fff\" stroke={stroke} strokeWidth={1.5}\n transform={`rotate(45, ${railX}, 0)`}\n />\n {/* Plain-text label to the right of the bullet (Workato-style) */}\n <text x={railX + 14} y={4} fontSize={12} fontWeight={500}\n fill=\"var(--ff-text, #212121)\" style={{ fontFamily: 'sans-serif' }}>\n {b.label}\n </text>\n </g>\n );\n })}\n </svg>\n );\n};\n\nexport default BranchRailDecoration;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { FiFilter } from 'react-icons/fi';\nimport { MdInfoOutline, MdOutlineModeEdit, MdDeleteOutline } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport BranchRailDecoration, { BranchRailSpec } from './BranchRailDecoration';\n\ninterface Condition {\n field: string;\n operator: string;\n value: string;\n logicalOperator?: string;\n}\n\nconst FilterNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\n const { conditions = [], infoText = 'Filter conditions applied to workflow data', _branchRail } = data as { conditions?: Condition[]; infoText?: string; _branchRail?: BranchRailSpec };\n\n return (\n <div style={{ width: 350, position: 'relative' }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #ffe082', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center\">\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded\" style={{ width: 25, height: 25, background: 'rgba(255,160,0,0.1)' }}>\n <FiFilter className=\"ff-text-warning\" size={16} />\n </div>\n <span className=\"ff-ms-2 ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>Filter</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n <Tooltip title={infoText} placement=\"right\" arrow>\n <div className=\"ff-ms-2\"><MdInfoOutline color=\"gray\" size={16} /></div>\n </Tooltip>\n </div>\n </div>\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {conditions.length === 0 ? (\n <span className=\"ff-text-muted\">No conditions configured</span>\n ) : conditions.map((condition, index) => (\n <div key={index} className=\"ff-d-flex ff-align-items-center ff-mb-1\">\n <p className=\"ff-m-0 ff-fw-bold ff-me-1 ff-text-truncate\" style={{ maxWidth: 100 }} title={condition.field}>{condition.field}</p>\n <span className=\"ff-text-muted\">{condition.operator}</span>\n <p className=\"ff-text-dark ff-text-truncate ff-mx-1 ff-m-0\" title={condition.value}>{condition.value}</p>\n {index < conditions.length - 1 && (\n <p className=\"ff-bg-primary ff-text-white ff-fw-bold ff-ms-1 ff-px-1 ff-rounded-1 ff-m-0\">{condition.logicalOperator}</p>\n )}\n </div>\n ))}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n {_branchRail && <BranchRailDecoration rail={_branchRail} cardWidth={350} />}\n </div>\n );\n};\n\nexport default FilterNode;\n","import { ReactNode } from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdInfoOutline, MdOutlineModeEdit, MdDeleteOutline } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\n\ninterface ActionNodeData {\n title?: string;\n descriptorType?: string;\n // groupBlocks shape (from IAM frontend)\n groupBlocks?: { groups?: string[]; isFallback?: boolean; isAlways?: boolean }[];\n // multi-select fields saved by the IAM task descriptors\n groups?: unknown;\n roles?: unknown;\n // flat fields saved by simple descriptors\n groupId?: unknown;\n roleId?: unknown;\n notes?: string;\n infoText?: string;\n}\n\nconst ActionNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode, nodeRegistry, nodeBody = 'full' } = useCanvasHandlers();\n const { title = 'Task', descriptorType, groupBlocks, groups, roles, groupId, roleId, infoText = '' } = data as ActionNodeData;\n const descriptor = descriptorType ? nodeRegistry?.forType(descriptorType) : undefined;\n const icon: ReactNode = descriptor?.icon as ReactNode;\n\n const toDisplayString = (v: unknown): string => {\n if (v == null) return '';\n if (typeof v === 'string') return v;\n if (typeof v === 'object' && 'label' in (v as object)) return String((v as Record<string, unknown>).label);\n return String(v);\n };\n\n // Normalise a field that may be a single value or an array of values into a string list.\n const toList = (v: unknown): string[] =>\n Array.isArray(v) ? v.map(toDisplayString).filter(Boolean)\n : (v != null && v !== '' ? [toDisplayString(v)] : []);\n\n // Derive display values from groupBlocks (IAM shape), the multi-select groups/roles,\n // or the legacy flat groupId/roleId fields.\n const displayValues: string[] = groupBlocks?.flatMap((b) => b.groups ?? [])\n ?? [...toList(groups), ...toList(roles), ...toList(groupId), ...toList(roleId)];\n\n const configured = displayValues.length > 0;\n\n return (\n <div style={{ width: 350 }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #b0bec5', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n {icon && <div style={{ display: 'flex', alignItems: 'center' }}>{icon as ReactNode}</div>}\n <span className=\"ff-text-dark\" style={{ fontSize: 14, fontWeight: 500 }}>{title}</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n {infoText && (\n <Tooltip title={infoText} placement=\"right\" arrow>\n <div className=\"ff-ms-2\"><MdInfoOutline color=\"gray\" size={16} /></div>\n </Tooltip>\n )}\n </div>\n </div>\n\n {nodeBody !== 'title-only' && (\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {descriptor?.renderNode ? (\n descriptor.renderNode(data as Record<string, unknown>)\n ) : configured ? (\n <div className=\"ff-d-flex ff-flex-wrap ff-gap-1\">\n {displayValues.map((v, i) => (\n <span key={i} className=\"ff-badge ff-bg-dark ff-text-white ff-py-1 ff-px-2 ff-rounded\" style={{ fontSize: 11 }} title={v}>{v}</span>\n ))}\n </div>\n ) : (\n <span className=\"ff-text-muted\">Not configured</span>\n )}\n </div>\n )}\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default ActionNode;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdDeleteOutline, MdInfoOutline, MdCheckCircle, MdPeople } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport BranchRailDecoration, { BranchRailSpec } from './BranchRailDecoration';\n\nconst MAX_VISIBLE_STAGES = 5;\n\ninterface Stage {\n stageName?: string;\n userIds?: string[];\n groupName?: string;\n roleName?: string;\n}\n\ninterface ApprovalPolicy {\n name?: string;\n policyName?: string;\n stages?: Stage[];\n}\n\ninterface ApprovalNodeData {\n approvalData?: { policy?: ApprovalPolicy };\n isPreview?: boolean;\n _branchRail?: BranchRailSpec;\n}\n\nconst ApprovalNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\n const { approvalData, isPreview = false, _branchRail } = data as ApprovalNodeData;\n\n const policy = approvalData?.policy ?? {};\n const stages = policy.stages ?? [];\n const stageCount = stages.length;\n const visibleStages = stages.slice(0, MAX_VISIBLE_STAGES);\n const remainingStages = stageCount - MAX_VISIBLE_STAGES;\n const policyName = policy.name ?? policy.policyName ?? 'Untitled Policy';\n\n return (\n <div style={{ width: 350, position: 'relative' }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #ffe082', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded\" style={{ width: 25, height: 25, background: 'rgba(251,192,45,0.2)' }}>\n <MdCheckCircle style={{ color: '#FBC02D' }} size={16} />\n </div>\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>Approval Policy</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n {!isPreview && (\n <div\n role=\"button\" tabIndex={0} style={{ cursor: 'pointer' }}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} className=\"ff-text-secondary\" />\n </div>\n )}\n {!isPreview && (\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0} style={{ cursor: 'pointer' }}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n )}\n <Tooltip title=\"This approval policy determines who must approve a request before the workflow continues.\" arrow placement=\"right\">\n <span className=\"ff-ms-2 ff-d-inline-flex\"><MdInfoOutline color=\"gray\" size={16} /></span>\n </Tooltip>\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#FCFCFC' }}>\n <div className=\"ff-d-flex ff-justify-content-start ff-align-items-center ff-mb-2\">\n <h6 className=\"ff-text-dark ff-mb-0 ff-text-truncate ff-flex-grow-1 ff-me-2\" style={{ fontSize: 13, fontWeight: 700 }} title={policyName}>\n {policyName}\n </h6>\n <span className=\"ff-badge ff-rounded-pill ff-px-2 ff-py-1 ff-flex-shrink-0\" style={{ background: '#FFF9C4', color: '#616161', fontSize: 11, fontWeight: 600 }}>\n {stageCount} Stage{stageCount !== 1 ? 's' : ''}\n </span>\n </div>\n\n {stages.length > 0 ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {visibleStages.map((stage, index) => {\n const displayName = stage.stageName?.trim() || `Stage ${index + 1}`;\n const approverCount = Array.isArray(stage.userIds) ? stage.userIds.length : 0;\n const groupName = stage.groupName?.trim() ?? '';\n const roleName = stage.roleName?.trim() ?? '';\n const configured = approverCount > 0 || groupName || roleName;\n let stageLabel = 'Not configured';\n if (groupName) stageLabel = `Group: ${groupName}`;\n else if (roleName) stageLabel = `Role: ${roleName}`;\n else if (approverCount > 0) stageLabel = `${approverCount} approver${approverCount !== 1 ? 's' : ''}`;\n return (\n <div key={index} className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div className=\"ff-rounded-circle ff-d-flex ff-align-items-center ff-justify-content-center ff-flex-shrink-0\" style={{ width: 28, height: 28, background: '#FFF9C4', color: '#5D4037', fontSize: 12, fontWeight: 700 }}>\n {index + 1}\n </div>\n <div className=\"ff-flex-grow-1 ff-rounded ff-p-2 ff-d-flex ff-justify-content-between ff-align-items-center ff-border\" style={{ background: '#FFFDE7', borderColor: '#FEE79A' }}>\n <span style={{ fontSize: 12, fontWeight: 700, color: '#212121' }}>{displayName}</span>\n <span className={`ff-d-flex ff-align-items-center ff-gap-1 ${configured ? 'ff-text-dark' : 'ff-text-muted'}`} style={{ fontSize: 12 }}>\n <MdPeople size={16} className=\"ff-flex-shrink-0\" style={{ color: configured ? '#5D4037' : '#9E9E9E' }} />\n {stageLabel}\n </span>\n </div>\n </div>\n );\n })}\n {remainingStages > 0 && (\n <div\n className=\"ff-text-center ff-fw-bold ff-py-2 ff-border ff-rounded\"\n style={{ fontSize: 11, color: '#1976d2', borderColor: '#FEE79A', background: '#FFFDE7', borderStyle: 'dashed', cursor: isPreview ? 'default' : 'pointer' }}\n role={isPreview ? undefined : 'button'}\n tabIndex={isPreview ? undefined : 0}\n onClick={(e) => { if (isPreview) return; e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e) => { if (isPreview || e.key !== 'Enter') return; e.stopPropagation(); onEditNode(id); }}\n >\n + {remainingStages} More Stage{remainingStages > 1 ? 's' : ''}\n </div>\n )}\n </div>\n ) : (\n <div className=\"ff-text-center ff-py-3 ff-rounded ff-border\" style={{ fontSize: 12, color: '#9e9e9e', background: '#FFFDE7', borderColor: '#FEE79A', borderStyle: 'dashed' }}>\n No stages configured\n </div>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n {_branchRail && <BranchRailDecoration rail={_branchRail} cardWidth={350} />}\n </div>\n );\n};\n\nexport default ApprovalNode;\n","import React from 'react';\r\nimport { Handle, Position, NodeProps } from 'reactflow';\r\nimport { MdOutlineModeEdit, MdDeleteOutline, MdSchedule } from 'react-icons/md';\r\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\r\n\r\ninterface DelayNodeData {\r\n duration?: number;\r\n unit?: 'minutes' | 'hours' | 'days';\r\n}\r\n\r\nconst DelayNode = ({ id, data }: NodeProps) => {\r\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\r\n const { duration, unit } = data as DelayNodeData;\r\n const configured = duration !== undefined && duration !== null && unit;\r\n const displayText = configured ? `Wait ${duration} ${unit}` : 'Not configured';\r\n\r\n return (\r\n <div style={{ width: 350 }}>\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\r\n <div style={{ border: '1.5px solid #b0bec5', borderRadius: 8, background: '#fff' }}>\r\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1\">\r\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\r\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded\" style={{ width: 25, height: 25, background: 'rgba(33,150,243,0.1)' }}>\r\n <MdSchedule size={16} color=\"#1976d2\" />\r\n </div>\r\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>Delay</span>\r\n </div>\r\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\r\n <div\r\n role=\"button\" tabIndex={0}\r\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\r\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onEditNode(id); } }}\r\n >\r\n <MdOutlineModeEdit size={16} />\r\n </div>\r\n <div\r\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\r\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\r\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDeleteNode(id); } }}\r\n >\r\n <MdDeleteOutline color=\"red\" size={16} />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"ff-mx-2 ff-mb-2 ff-p-2 ff-rounded\" style={{ background: '#fafafa', fontSize: 12 }}>\r\n <span className={configured ? 'ff-text-dark ff-fw-medium' : 'ff-text-muted'}>{displayText}</span>\r\n </div>\r\n </div>\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default DelayNode;\r\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdDeleteOutline, MdNotifications, MdEmail, MdSms, MdWebhook } from 'react-icons/md';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport { NODE_WIDTH } from '../canvasTokens';\n\ninterface NotificationNodeData {\n channel?: string;\n emailTo?: string[];\n emailSubject?: string;\n slackChannel?: string;\n slackMessage?: string;\n teamsMessage?: string;\n smsTo?: string;\n inAppRecipient?: string;\n inAppTitle?: string;\n webhookUrl?: string;\n // legacy shape\n recipient?: string;\n subject?: string;\n}\n\ninterface ChannelMeta {\n label: string;\n bg: string;\n color: string;\n iconType: React.ElementType;\n}\n\nconst CHANNEL_META: Record<string, ChannelMeta> = {\n email: { label: 'Email', bg: '#e3f2fd', color: '#1565c0', iconType: MdEmail },\n slack: { label: 'Slack', bg: '#e8f5e9', color: '#2e7d32', iconType: MdNotifications },\n teams: { label: 'MS Teams', bg: '#ede7f6', color: '#4527a0', iconType: MdNotifications },\n sms: { label: 'SMS', bg: '#fce4ec', color: '#880e4f', iconType: MdSms },\n 'in-app': { label: 'In-App', bg: '#fff3e0', color: '#e65100', iconType: MdNotifications },\n webhook: { label: 'Webhook', bg: '#f3e5f5', color: '#6a1b9a', iconType: MdWebhook },\n};\n\nconst FALLBACK_META: ChannelMeta = {\n label: 'Notification',\n bg: 'rgba(156,39,176,0.1)',\n color: '#7b1fa2',\n iconType: MdNotifications,\n};\n\nfunction getRecipientPreview(data: NotificationNodeData): string | null {\n switch (data.channel) {\n case 'email': return data.emailTo?.join(', ') ?? data.recipient ?? null;\n case 'slack': return data.slackChannel ?? null;\n case 'teams': return data.teamsMessage ? 'Message configured' : null;\n case 'sms': return data.smsTo ?? null;\n case 'in-app': return data.inAppRecipient ?? null;\n case 'webhook': return data.webhookUrl ?? null;\n default: return data.recipient ?? null;\n }\n}\n\nfunction getSubjectPreview(data: NotificationNodeData): string | null {\n switch (data.channel) {\n case 'email': return data.emailSubject ?? data.subject ?? null;\n case 'slack': {\n const msg = data.slackMessage;\n return msg ? (msg.length > 60 ? `${msg.slice(0, 60)}…` : msg) : null;\n }\n case 'in-app': return data.inAppTitle ?? null;\n default: return data.subject ?? null;\n }\n}\n\nconst NotificationNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\n const d = data as NotificationNodeData;\n const meta = (d.channel && CHANNEL_META[d.channel]) ? CHANNEL_META[d.channel] : FALLBACK_META;\n const recipient = getRecipientPreview(d);\n const subjectLine = getSubjectPreview(d);\n const configured = !!(d.channel && recipient);\n const IconComponent = meta.iconType;\n\n return (\n <div style={{ width: NODE_WIDTH }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #b0bec5', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded\" style={{ width: 25, height: 25, background: meta.bg }}>\n <IconComponent size={16} color={meta.color} />\n </div>\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>\n {d.channel ? `${meta.label} Notification` : 'Notification'}\n </span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {configured ? (\n <div className=\"ff-d-flex ff-flex-column ff-gap-1\">\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <span className=\"ff-px-2 ff-py-1 ff-rounded\" style={{ fontSize: 10, background: meta.bg, color: meta.color, fontWeight: 600, flexShrink: 0 }}>\n {meta.label}\n </span>\n <span className=\"ff-text-dark ff-text-truncate\" style={{ maxWidth: 220 }}>{recipient}</span>\n </div>\n {subjectLine && <span className=\"ff-text-muted ff-text-truncate\" style={{ maxWidth: 280 }}>{subjectLine}</span>}\n </div>\n ) : (\n <span className=\"ff-text-muted\">Not configured</span>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default NotificationNode;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdContentCopy, MdWebhook } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport { NODE_WIDTH } from '../canvasTokens';\n\ninterface WebhookTriggerNodeData {\n label?: string;\n endpointUrl?: string;\n authMethod?: 'none' | 'api-key' | 'hmac';\n source?: string;\n}\n\nconst AUTH_LABELS: Record<string, string> = {\n 'api-key': 'API Key',\n hmac: 'HMAC',\n};\n\nconst WebhookTriggerNode = ({ data }: NodeProps) => {\n const { onClickAddTrigger } = useCanvasHandlers();\n const { label = 'Webhook Trigger', endpointUrl, authMethod, source } = data as WebhookTriggerNodeData;\n\n const handleEdit = (e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation();\n onClickAddTrigger();\n };\n\n const handleCopy = (e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation();\n if (endpointUrl) navigator.clipboard.writeText(endpointUrl).catch(() => undefined);\n };\n\n return (\n <div style={{ width: NODE_WIDTH }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #90caf9', borderRadius: 8, background: '#fff', overflow: 'hidden' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div style={{ width: 28, height: 28, borderRadius: 6, background: 'rgba(33,150,243,0.1)', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <MdWebhook size={16} color=\"#1565c0\" />\n </div>\n <span style={{ fontSize: 13, fontWeight: 600, color: '#212121' }}>Webhook Trigger</span>\n </div>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleEdit}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') handleEdit(e); }}\n className=\"ff-d-flex ff-align-items-center\"\n style={{ paddingRight: 4, cursor: 'pointer' }}\n >\n <MdOutlineModeEdit size={16} color=\"#555\" />\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#e3f2fd', border: '1px solid #90caf9' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-flex-wrap ff-gap-2 ff-mb-1\">\n <span style={{ fontSize: 12, color: '#1565c0', fontWeight: 600 }}>{label}</span>\n {source && (\n <span className=\"ff-px-2 ff-py-1 ff-rounded\" style={{ fontSize: 11, background: '#fff', border: '1px solid #90caf9', color: '#1565c0' }}>\n {source}\n </span>\n )}\n {authMethod && authMethod !== 'none' && AUTH_LABELS[authMethod] && (\n <span className=\"ff-px-2 ff-py-1 ff-rounded\" style={{ fontSize: 10, background: '#1565c0', color: '#fff', fontWeight: 600 }}>\n {AUTH_LABELS[authMethod]}\n </span>\n )}\n </div>\n {endpointUrl && (\n <div className=\"ff-d-flex ff-align-items-center ff-gap-1\" style={{ marginTop: 4 }}>\n <span style={{ fontSize: 10, color: '#1565c0', fontFamily: 'monospace', flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {endpointUrl}\n </span>\n <Tooltip title=\"Copy URL\" placement=\"top\" arrow>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleCopy}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') handleCopy(e); }}\n style={{ cursor: 'pointer', flexShrink: 0 }}\n >\n <MdContentCopy size={12} color=\"#1565c0\" />\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default WebhookTriggerNode;\n","import React, { ReactNode } from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdDeleteOutline, MdHttp } from 'react-icons/md';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport { NODE_WIDTH, HTTP_METHOD_STYLE } from '../canvasTokens';\n\ninterface RestApiNodeData {\n method?: string;\n url?: string;\n descriptorType?: string;\n}\n\nconst RestApiNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode, nodeRegistry } = useCanvasHandlers();\n const { method, url, descriptorType } = data as RestApiNodeData;\n const icon: ReactNode = descriptorType\n ? (nodeRegistry?.forType(descriptorType)?.icon as ReactNode)\n : <MdHttp size={16} color=\"#546e7a\" />;\n const configured = !!(method && url);\n const methodKey = method?.toUpperCase() ?? '';\n const methodStyle = HTTP_METHOD_STYLE[methodKey] ?? null;\n\n return (\n <div style={{ width: NODE_WIDTH }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #b0bec5', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div style={{ width: 25, height: 25, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {icon as ReactNode}\n </div>\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>REST API Call</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {configured ? (\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n {methodStyle && (\n <span style={{ fontSize: 10, fontWeight: 700, padding: '2px 6px', borderRadius: 4, background: methodStyle.bg, color: methodStyle.color, flexShrink: 0 }}>\n {methodKey}\n </span>\n )}\n <span className=\"ff-text-dark ff-text-truncate\" style={{ fontFamily: 'monospace', fontSize: 11 }} title={url}>{url}</span>\n </div>\n ) : (\n <span className=\"ff-text-muted\">Not configured</span>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default RestApiNode;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdDeleteOutline, MdCallSplit } from 'react-icons/md';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport { NODE_WIDTH, BRANCH_PALETTE } from '../canvasTokens';\n\ninterface BranchCondition {\n field: string;\n operator: string;\n value?: string;\n logicalOperator?: string;\n}\n\ninterface BranchConfig {\n key: string;\n label: string;\n conditions?: BranchCondition[];\n}\n\ninterface ConditionBranchNodeData {\n title?: string;\n branchConfigs?: BranchConfig[];\n defaultBranch?: string;\n}\n\nconst OPERATOR_LABELS: Record<string, string> = {\n eq: '=', neq: '≠', gt: '>', gte: '≥', lt: '<', lte: '≤',\n contains: 'contains', startsWith: 'starts with', endsWith: 'ends with',\n isEmpty: 'is empty', isNotEmpty: 'is not empty',\n};\n\nconst ConditionBranchNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\n const { title = 'Condition Branch', branchConfigs = [], defaultBranch } = data as ConditionBranchNodeData;\n const configured = branchConfigs.length > 0;\n\n return (\n <div style={{ width: NODE_WIDTH }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #b39ddb', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div style={{ width: 25, height: 25, borderRadius: 6, background: 'rgba(103,58,183,0.1)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <MdCallSplit size={16} color=\"#512da8\" />\n </div>\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>{title}</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {configured ? (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {branchConfigs.map((branch, idx) => {\n const palette = BRANCH_PALETTE[idx % BRANCH_PALETTE.length];\n const firstCondition = branch.conditions?.[0];\n const extraCount = (branch.conditions?.length ?? 0) - 1;\n return (\n <div key={branch.key} style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span style={{ fontSize: 10, fontWeight: 600, padding: '2px 7px', borderRadius: 10, background: palette.bg, color: palette.color, flexShrink: 0 }}>\n {branch.label || branch.key}\n </span>\n {firstCondition ? (\n <span style={{ fontSize: 11, color: '#616161', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {firstCondition.field} {OPERATOR_LABELS[firstCondition.operator] ?? firstCondition.operator}\n {firstCondition.value ? ` ${firstCondition.value}` : ''}\n {extraCount > 0 ? ` +${extraCount} more` : ''}\n </span>\n ) : (\n <span style={{ fontSize: 11, color: '#9e9e9e' }}>No conditions yet</span>\n )}\n </div>\n );\n })}\n {defaultBranch && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginTop: 2 }}>\n <span style={{ fontSize: 10, fontWeight: 600, padding: '2px 7px', borderRadius: 10, background: '#f5f5f5', color: '#757575', flexShrink: 0 }}>\n Default\n </span>\n <span style={{ fontSize: 11, color: '#9e9e9e' }}>fallback path</span>\n </div>\n )}\n </div>\n ) : (\n <span className=\"ff-text-muted\">Not configured — click edit to add branches</span>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default ConditionBranchNode;\n","import React, { ReactNode } from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdOutlineModeEdit, MdDeleteOutline, MdAccountTree, MdOpenInNew } from 'react-icons/md';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport { NODE_WIDTH } from '../canvasTokens';\n\ninterface SubWorkflowNodeData {\n title?: string;\n workflowId?: string;\n workflowLabel?: string;\n descriptorType?: string;\n onPreview?: (workflowId: string) => void;\n}\n\nconst SubWorkflowNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode, nodeRegistry } = useCanvasHandlers();\n const { title = 'Sub-Workflow', workflowId, workflowLabel, descriptorType, onPreview } = data as SubWorkflowNodeData;\n const icon: ReactNode = descriptorType\n ? (nodeRegistry?.forType(descriptorType)?.icon as ReactNode)\n : <MdAccountTree size={16} color=\"#00695c\" />;\n const configured = !!workflowId;\n\n const handlePreview = (e: React.MouseEvent | React.KeyboardEvent) => {\n e.stopPropagation();\n if (workflowId && onPreview) onPreview(workflowId);\n };\n\n return (\n <div style={{ width: NODE_WIDTH }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #80cbc4', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div style={{ width: 25, height: 25, borderRadius: 6, background: 'rgba(0,137,123,0.1)', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {icon as ReactNode}\n </div>\n <span className=\"ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>{title}</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n </div>\n </div>\n\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: configured ? '#e0f2f1' : '#fafafa', fontSize: 12, border: configured ? '1px solid #b2dfdb' : 'none' }}>\n {configured ? (\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-between\">\n <div className=\"ff-d-flex ff-flex-column ff-gap-1\">\n <span style={{ fontSize: 12, fontWeight: 600, color: '#00695c' }}>\n {workflowLabel || workflowId}\n </span>\n <span style={{ fontSize: 10, color: '#80cbc4', fontFamily: 'monospace' }}>ID: {workflowId}</span>\n </div>\n {onPreview && (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handlePreview}\n onKeyDown={(e: React.KeyboardEvent<HTMLDivElement>) => { if (e.key === 'Enter' || e.key === ' ') handlePreview(e); }}\n style={{ cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 3, fontSize: 11, color: '#00897b' }}\n >\n <MdOpenInNew size={13} />\n Preview\n </div>\n )}\n </div>\n ) : (\n <span className=\"ff-text-muted\">Not configured — select a workflow</span>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n </div>\n );\n};\n\nexport default SubWorkflowNode;\n","import { NodeTypes } from 'reactflow';\r\nimport StartNode from './StartNode';\r\nimport EndNode from './EndNode';\r\nimport AddTriggerNode from './AddTriggerNode';\r\nimport AddStepNode from './AddStepNode';\r\nimport TriggerNode from './TriggerNode';\r\nimport EventNode from './EventNode';\r\nimport FilterNode from './FilterNode';\r\nimport ActionNode from './ActionNode';\r\nimport ApprovalNode from './ApprovalNode';\r\nimport DelayNode from './DelayNode';\r\nimport NotificationNode from './NotificationNode';\r\nimport WebhookTriggerNode from './WebhookTriggerNode';\r\nimport RestApiNode from './RestApiNode';\r\nimport ConditionBranchNode from './ConditionBranchNode';\r\nimport SubWorkflowNode from './SubWorkflowNode';\r\n\r\nexport const builtInNodeTypes: NodeTypes = {\r\n startNode: StartNode,\r\n endNode: EndNode,\r\n addTriggerNode: AddTriggerNode,\r\n addStepNode: AddStepNode,\r\n triggerNode: TriggerNode,\r\n eventNode: EventNode,\r\n filterNode: FilterNode,\r\n actionNode: ActionNode,\r\n approvalNode: ApprovalNode,\r\n delayNode: DelayNode,\r\n notificationNode: NotificationNode,\r\n webhookTriggerNode: WebhookTriggerNode,\r\n restApiNode: RestApiNode,\r\n conditionBranchNode: ConditionBranchNode,\r\n subWorkflowNode: SubWorkflowNode,\r\n};\r\n\r\nexport { StartNode, EndNode, AddTriggerNode, AddStepNode, TriggerNode, EventNode, FilterNode, ActionNode, ApprovalNode, DelayNode, NotificationNode, WebhookTriggerNode, RestApiNode, ConditionBranchNode, SubWorkflowNode };\r\n","import React from 'react';\r\nimport { getStraightPath, BaseEdge, EdgeProps } from 'reactflow';\r\nimport './EdgeWithPlusLabel.scss';\r\n\r\nconst R = 11.5;\r\nconst STROKE = 2;\r\nconst PLUS_HALF = 6;\r\nconst PILL_WIDTH = 40;\r\nconst PILL_HEIGHT = 20;\r\nconst PILL_R = 4;\r\n\r\nexport interface EdgeWithPlusLabelData {\r\n label?: string;\r\n onAddStepClick?: (sourceNodeId: string, context: AddStepContext) => void;\r\n referenceNodeType?: string;\r\n stepVisibility?: unknown;\r\n}\r\n\r\nexport interface AddStepContext {\r\n edgeId: string;\r\n nodeId: string;\r\n sourceNodeId: string;\r\n targetNodeId: string;\r\n position: 'between';\r\n referenceNodeId: string;\r\n referenceNodeType?: string;\r\n stepVisibility?: unknown;\r\n // branch context — set when this edge is inside a filter branch\r\n filterId?: string;\r\n branch?: string;\r\n}\r\n\r\nconst EdgeWithPlusLabel = ({\r\n id: edgeId,\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n sourcePosition,\r\n targetPosition,\r\n source,\r\n target,\r\n data,\r\n}: EdgeProps<EdgeWithPlusLabelData>) => {\r\n const [edgePath, labelX, labelY] = getStraightPath({\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n });\r\n\r\n const edgeLabel = data?.label;\r\n const isPass = edgeLabel === 'Pass';\r\n const showLabel = isPass || edgeLabel === 'Fail';\r\n\r\n const oneThirdX = sourceX + (targetX - sourceX) / 3;\r\n const oneThirdY = sourceY + (targetY - sourceY) / 3;\r\n const twoThirdsX = sourceX + (2 * (targetX - sourceX)) / 3;\r\n const twoThirdsY = sourceY + (2 * (targetY - sourceY)) / 3;\r\n\r\n const handleAddStepClick = data?.onAddStepClick;\r\n\r\n const handleClick = (e: React.MouseEvent | React.KeyboardEvent) => {\r\n e.stopPropagation();\r\n if (typeof handleAddStepClick !== 'function') return;\r\n const context: AddStepContext = {\r\n edgeId,\r\n nodeId: source,\r\n sourceNodeId: source,\r\n targetNodeId: target,\r\n position: 'between',\r\n referenceNodeId: source,\r\n referenceNodeType: data?.referenceNodeType,\r\n stepVisibility: data?.stepVisibility,\r\n };\r\n handleAddStepClick(source, context);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n handleClick(e);\r\n }\r\n };\r\n\r\n const PlusContent = () => (\r\n <>\r\n <g className=\"plus-icon-container\">\r\n <circle r={R} className=\"edge-plus-circle\" />\r\n <line x1={0} y1={-PLUS_HALF} x2={0} y2={PLUS_HALF} strokeWidth={STROKE} strokeLinecap=\"round\" className=\"plus-line\" />\r\n <line x1={-PLUS_HALF} y1={0} x2={PLUS_HALF} y2={0} strokeWidth={STROKE} strokeLinecap=\"round\" className=\"plus-line\" />\r\n </g>\r\n <g className=\"edge-plus-tooltip\" transform=\"translate(18, 0)\">\r\n <rect x={0} y={-10} width={65} height={20} rx={4} className=\"tooltip-bg\" />\r\n <path d=\"M0 -4 L-4 0 L0 4 Z\" className=\"tooltip-bg\" />\r\n <text x={32} y={0} textAnchor=\"middle\" dominantBaseline=\"central\" fill=\"white\" style={{ fontSize: 10, fontWeight: 600, pointerEvents: 'none' }}>\r\n Add Step\r\n </text>\r\n </g>\r\n </>\r\n );\r\n\r\n const plusProps = handleAddStepClick ? {\r\n onClick: handleClick,\r\n onKeyDown: handleKeyDown,\r\n role: 'button' as const,\r\n tabIndex: 0,\r\n style: { cursor: 'pointer', pointerEvents: 'all' as const },\r\n } : {\r\n style: { cursor: 'default', pointerEvents: 'all' as const },\r\n };\r\n\r\n return (\r\n <g className=\"edge-with-plus-wrapper\">\r\n <BaseEdge id={edgeId} path={edgePath} />\r\n {showLabel ? (\r\n <>\r\n <g transform={`translate(${oneThirdX}, ${oneThirdY})`}>\r\n <rect x={-PILL_WIDTH / 2} y={-PILL_HEIGHT / 2} width={PILL_WIDTH} height={PILL_HEIGHT} rx={PILL_R} ry={PILL_R} fill={isPass ? '#ADE6C5' : '#FDBFBF'} />\r\n <text textAnchor=\"middle\" dominantBaseline=\"central\" fill={isPass ? '#1DBF60' : '#C50000'} style={{ fontSize: 12, fontWeight: 500 }}>\r\n {edgeLabel}\r\n </text>\r\n </g>\r\n <g className=\"nodrag nopan edge-plus-svg\" transform={`translate(${twoThirdsX}, ${twoThirdsY})`} data-testid=\"plus-node-icon\" {...plusProps}>\r\n <PlusContent />\r\n </g>\r\n </>\r\n ) : (\r\n <g className=\"nodrag nopan edge-plus-svg\" transform={`translate(${labelX}, ${labelY})`} data-testid=\"plus-node-icon\" {...plusProps}>\r\n <PlusContent />\r\n </g>\r\n )}\r\n </g>\r\n );\r\n};\r\n\r\nexport default EdgeWithPlusLabel;\r\n","import React from \"react\";\r\nimport { getStraightPath, BaseEdge, EdgeProps } from \"reactflow\";\r\nimport { AddStepContext } from \"./EdgeWithPlusLabel\";\r\nimport \"./EdgeWithPlusLabel.scss\";\r\n\r\nconst R = 11.5;\r\nconst STROKE = 2;\r\nconst PLUS_HALF = 6;\r\n\r\nexport interface PlusEdgeData {\r\n onAddStepClick?: (sourceNodeId: string, context: AddStepContext) => void;\r\n referenceNodeType?: string;\r\n stepVisibility?: unknown;\r\n filterId?: string;\r\n branch?: string;\r\n}\r\n\r\nconst PlusEdge = ({\r\n id,\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n source,\r\n target,\r\n data,\r\n}: EdgeProps<PlusEdgeData>) => {\r\n const [edgePath, labelX, labelY] = getStraightPath({\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n });\r\n\r\n const handleAddStepClick = data?.onAddStepClick;\r\n\r\n const handleClick = (e: React.MouseEvent | React.KeyboardEvent) => {\r\n e.stopPropagation();\r\n if (typeof handleAddStepClick !== \"function\") return;\r\n handleAddStepClick(source, {\r\n edgeId: id,\r\n nodeId: source,\r\n sourceNodeId: source,\r\n targetNodeId: target,\r\n position: \"between\",\r\n referenceNodeId: source,\r\n referenceNodeType: data?.referenceNodeType,\r\n stepVisibility: data?.stepVisibility,\r\n filterId: data?.filterId,\r\n branch: data?.branch,\r\n });\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleClick(e);\r\n }\r\n };\r\n\r\n return (\r\n <g className=\"edge-with-plus-wrapper\">\r\n <BaseEdge id={id} path={edgePath} style={{ stroke: \"#b0bec5\" }} />\r\n <g\r\n className=\"nodrag nopan edge-plus-svg\"\r\n transform={`translate(${labelX}, ${labelY})`}\r\n style={{\r\n cursor: handleAddStepClick ? \"pointer\" : \"default\",\r\n pointerEvents: \"all\",\r\n outline: \"none\",\r\n }}\r\n onClick={handleAddStepClick ? handleClick : undefined}\r\n onKeyDown={handleAddStepClick ? handleKeyDown : undefined}\r\n role={handleAddStepClick ? \"button\" : undefined}\r\n tabIndex={handleAddStepClick ? 0 : undefined}\r\n data-testid=\"plus-node-icon\"\r\n >\r\n <circle r={R} className=\"edge-plus-circle\" />\r\n <line\r\n x1={0}\r\n y1={-PLUS_HALF}\r\n x2={0}\r\n y2={PLUS_HALF}\r\n strokeWidth={STROKE}\r\n strokeLinecap=\"round\"\r\n className=\"plus-line\"\r\n />\r\n <line\r\n x1={-PLUS_HALF}\r\n y1={0}\r\n x2={PLUS_HALF}\r\n y2={0}\r\n strokeWidth={STROKE}\r\n strokeLinecap=\"round\"\r\n className=\"plus-line\"\r\n />\r\n <g className=\"edge-plus-tooltip\" transform=\"translate(18, 0)\">\r\n <rect\r\n x={0}\r\n y={-10}\r\n width={65}\r\n height={20}\r\n rx={4}\r\n className=\"tooltip-bg\"\r\n />\r\n <path d=\"M0 -4 L-4 0 L0 4 Z\" className=\"tooltip-bg\" />\r\n <text\r\n x={32}\r\n y={0}\r\n textAnchor=\"middle\"\r\n dominantBaseline=\"central\"\r\n fill=\"white\"\r\n style={{ fontSize: 10, fontWeight: 600, pointerEvents: \"none\" }}\r\n >\r\n Add Step\r\n </text>\r\n </g>\r\n </g>\r\n </g>\r\n );\r\n};\r\n\r\nexport default PlusEdge;\r\n","import React from 'react';\r\nimport { getStraightPath, BaseEdge, EdgeProps } from 'reactflow';\r\n\r\nconst PlainEdge = ({ id, sourceX, sourceY, targetX, targetY }: EdgeProps) => {\r\n const [edgePath] = getStraightPath({ sourceX, sourceY, targetX, targetY });\r\n return <BaseEdge id={id} path={edgePath} style={{ stroke: '#b0bec5' }} />;\r\n};\r\n\r\nexport default PlainEdge;\r\n","import React from 'react';\r\nimport { getStraightPath, BaseEdge, EdgeProps } from 'reactflow';\r\nimport { AddStepContext } from './EdgeWithPlusLabel';\r\nimport './EdgeWithPlusLabel.scss';\r\n\r\nconst R = 11.5;\r\nconst STROKE = 2;\r\nconst PLUS_HALF = 6;\r\nconst LABEL_OFFSET_Y = -24;\r\nconst PILL_WIDTH = 40;\r\nconst PILL_HEIGHT = 20;\r\nconst PILL_R = 4;\r\n\r\nexport interface LabelPlusEdgeData {\r\n label?: string;\r\n onAddStepClick?: (sourceNodeId: string, context: AddStepContext) => void;\r\n referenceNodeType?: string;\r\n stepVisibility?: unknown;\r\n showPlus?: boolean;\r\n}\r\n\r\nconst LabelPlusEdge = ({\r\n id,\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n source,\r\n target,\r\n data,\r\n}: EdgeProps<LabelPlusEdgeData>) => {\r\n const [edgePath, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY });\r\n\r\n const edgeLabel = data?.label;\r\n const isPass = edgeLabel === 'Pass';\r\n const showLabel = isPass || edgeLabel === 'Fail';\r\n const handleAddStepClick = data?.onAddStepClick;\r\n const showPlus = data?.showPlus !== false && !!handleAddStepClick;\r\n\r\n const handleClick = (e: React.MouseEvent | React.KeyboardEvent) => {\r\n e.stopPropagation();\r\n if (typeof handleAddStepClick !== 'function') return;\r\n handleAddStepClick(source, {\r\n edgeId: id,\r\n nodeId: source,\r\n sourceNodeId: source,\r\n targetNodeId: target,\r\n position: 'between',\r\n referenceNodeId: source,\r\n referenceNodeType: data?.referenceNodeType,\r\n stepVisibility: data?.stepVisibility,\r\n });\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n handleClick(e);\r\n }\r\n };\r\n\r\n return (\r\n <g className=\"edge-with-plus-wrapper\">\r\n <BaseEdge id={id} path={edgePath} style={{ stroke: '#b0bec5' }} />\r\n <g\r\n className=\"nodrag nopan edge-plus-svg\"\r\n transform={`translate(${labelX}, ${labelY})`}\r\n style={{ cursor: handleAddStepClick ? 'pointer' : 'default', pointerEvents: 'all', outline: 'none' }}\r\n onClick={handleAddStepClick ? handleClick : undefined}\r\n onKeyDown={handleAddStepClick ? handleKeyDown : undefined}\r\n role={handleAddStepClick ? 'button' : undefined}\r\n tabIndex={handleAddStepClick ? 0 : undefined}\r\n >\r\n {showLabel && (\r\n <g transform={`translate(0, ${showPlus ? LABEL_OFFSET_Y : 0})`}>\r\n <rect\r\n x={-PILL_WIDTH / 2} y={-PILL_HEIGHT / 2}\r\n width={PILL_WIDTH} height={PILL_HEIGHT}\r\n rx={PILL_R} ry={PILL_R}\r\n fill={isPass ? '#ADE6C5' : '#FDBFBF'}\r\n />\r\n <text textAnchor=\"middle\" dominantBaseline=\"central\" fill={isPass ? '#1DBF60' : '#C50000'} style={{ fontSize: 12, fontWeight: 500 }}>\r\n {edgeLabel}\r\n </text>\r\n </g>\r\n )}\r\n\r\n {showPlus && (\r\n <g className=\"plus-icon-container\">\r\n <circle r={R} className=\"edge-plus-circle\" />\r\n <line x1={0} y1={-PLUS_HALF} x2={0} y2={PLUS_HALF} strokeWidth={STROKE} strokeLinecap=\"round\" className=\"plus-line\" />\r\n <line x1={-PLUS_HALF} y1={0} x2={PLUS_HALF} y2={0} strokeWidth={STROKE} strokeLinecap=\"round\" className=\"plus-line\" />\r\n </g>\r\n )}\r\n\r\n {showPlus && (\r\n <g className=\"edge-plus-tooltip\" transform=\"translate(22, 0)\">\r\n <rect x={0} y={-10} width={65} height={20} rx={4} className=\"tooltip-bg\" />\r\n <path d=\"M0 -4 L-4 0 L0 4 Z\" className=\"tooltip-bg\" />\r\n <text x={32} y={0} textAnchor=\"middle\" dominantBaseline=\"central\" fill=\"white\" style={{ fontSize: 10, fontWeight: 600, pointerEvents: 'none' }}>\r\n Add Step\r\n </text>\r\n </g>\r\n )}\r\n </g>\r\n </g>\r\n );\r\n};\r\n\r\nexport default LabelPlusEdge;\r\n","import React from 'react';\r\nimport { EdgeProps } from 'reactflow';\r\nimport { AddStepContext } from './EdgeWithPlusLabel';\r\n\r\ninterface GatewayBranchEdgeData {\r\n label?: string;\r\n branch?: string;\r\n isFirst?: boolean;\r\n filterId?: string;\r\n onAddStepClick?: (sourceNodeId: string, context: AddStepContext) => void;\r\n /** When true, route as a vertical rail (sourceX → down to targetY → right to target). Default: horizontal fan-out. */\r\n verticalRouting?: boolean;\r\n}\r\n\r\nconst GatewayBranchEdge = ({\r\n id,\r\n source,\r\n target,\r\n sourceX,\r\n sourceY,\r\n targetX,\r\n targetY,\r\n style = {},\r\n markerEnd,\r\n data,\r\n}: EdgeProps<GatewayBranchEdgeData>) => {\r\n const verticalRouting = data?.verticalRouting ?? false;\r\n // Workato-style vertical routing: the rail decoration draws the vertical line +\r\n // bullet. The edge L-routes (90° elbow) from the bullet Y (BULLET_OFFSET above the\r\n // target top) across to the step's centerX, then down into the step's top handle.\r\n // This applies to every branch, including empty ones (target = End).\r\n // BULLET_OFFSET must match BULLET_TO_STEP_GAP in WorkflowCanvas applyVerticalBranchLayout.\r\n const BULLET_OFFSET = 30;\r\n const path = verticalRouting\r\n ? (() => {\r\n const bulletY = targetY - BULLET_OFFSET;\r\n return `M ${sourceX},${bulletY} L ${targetX},${bulletY} L ${targetX},${targetY}`;\r\n })()\r\n : (() => {\r\n const elbowY = sourceY + 30;\r\n return `M ${sourceX},${sourceY} L ${sourceX},${elbowY} L ${targetX},${elbowY} L ${targetX},${targetY}`;\r\n })();\r\n const stroke = (style as React.CSSProperties & { stroke?: string }).stroke || '#d1d5db';\r\n const label = data?.label;\r\n const isPass = data?.isFirst ?? false;\r\n const onAddStepClick = data?.onAddStepClick;\r\n\r\n // Label + \"+\" sit on the horizontal segment.\r\n // - Vertical mode: horizontal segment is at bulletY (= targetY - BULLET_OFFSET)\r\n // - Horizontal mode: horizontal segment is at the elbow (sourceY+30)\r\n const segmentY = verticalRouting ? targetY - BULLET_OFFSET : sourceY + 30;\r\n const pillX = sourceX + (targetX - sourceX) * (verticalRouting ? 0.25 : 0.35);\r\n const plusX = sourceX + (targetX - sourceX) * (verticalRouting ? 0.65 : 0.7);\r\n const labelY = segmentY;\r\n\r\n const handlePlusClick = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (!onAddStepClick) return;\r\n onAddStepClick(source, {\r\n edgeId: id,\r\n nodeId: source,\r\n sourceNodeId: source,\r\n targetNodeId: target,\r\n position: 'between',\r\n referenceNodeId: source,\r\n filterId: data?.filterId,\r\n branch: data?.branch,\r\n });\r\n };\r\n\r\n const R = 11.5;\r\n const HALF = 6;\r\n\r\n return (\r\n <g>\r\n <path id={id} d={path} fill=\"none\" stroke={stroke} strokeWidth={1.5} markerEnd={markerEnd} />\r\n\r\n {/* Pass / Fail pill — hidden in vertical-routing mode (the rail decoration renders the label instead) */}\r\n {label && !verticalRouting && (\r\n <g transform={`translate(${pillX}, ${labelY})`}>\r\n {(() => {\r\n const pillW = Math.max(44, label.length * 7 + 20);\r\n return (\r\n <>\r\n <rect x={-pillW / 2} y={-11} width={pillW} height={22} rx={11}\r\n fill={isPass ? '#e8f5e9' : '#ffebee'}\r\n stroke={isPass ? '#81c784' : '#e57373'}\r\n strokeWidth={1}\r\n />\r\n <text x={0} y={4} textAnchor=\"middle\" fontSize={10} fontWeight={600}\r\n fill={isPass ? '#2e7d32' : '#c62828'}\r\n style={{ fontFamily: 'sans-serif', pointerEvents: 'none' }}\r\n >\r\n {label}\r\n </text>\r\n </>\r\n );\r\n })()}\r\n </g>\r\n )}\r\n\r\n {/* \"+\" button */}\r\n {onAddStepClick && (\r\n <g\r\n transform={`translate(${plusX}, ${labelY})`}\r\n onClick={handlePlusClick}\r\n style={{ cursor: 'pointer', pointerEvents: 'all' }}\r\n className=\"nodrag nopan edge-plus-svg\"\r\n >\r\n <circle r={R} className=\"edge-plus-circle\" />\r\n <line x1={0} y1={-HALF} x2={0} y2={HALF} strokeWidth={2} strokeLinecap=\"round\" className=\"plus-line\" />\r\n <line x1={-HALF} y1={0} x2={HALF} y2={0} strokeWidth={2} strokeLinecap=\"round\" className=\"plus-line\" />\r\n </g>\r\n )}\r\n </g>\r\n );\r\n};\r\n\r\nexport default GatewayBranchEdge;\r\n"],"names":["WorkflowCanvasContext","createContext","defaultFlowForgeMessages","useCanvasHandlers","useContext","StartNode","jsxs","jsx","Handle","Position","EndNode","AddTriggerNode","onClickAddTrigger","messages","Tooltip","e","GrTrigger","AddStepNode","id","onAddStep","humaniseCode","code","m","formatSource","s","value","TriggerNode","data","type","eventType","sources","label","source","previewWorkflow","executionStatus","infoText","handleEdit","hasEventSources","hasSimpleShape","title","body","eventDisplay","i","Chip","rightCluster","Fragment","FaCheckCircle","FaTimesCircle","MdOutlineModeEdit","MdInfoOutline","MdInput","formatEventType","EventNode","header","displayTitle","BranchRailDecoration","rail","cardWidth","railX","stroke","b","idx","bulletY","FilterNode","onEditNode","onDeleteNode","conditions","_branchRail","FiFilter","MdDeleteOutline","condition","index","ActionNode","nodeRegistry","nodeBody","descriptorType","groupBlocks","groups","roles","groupId","roleId","descriptor","icon","toDisplayString","v","toList","displayValues","configured","MAX_VISIBLE_STAGES","ApprovalNode","approvalData","isPreview","policy","stages","stageCount","visibleStages","remainingStages","policyName","MdCheckCircle","stage","displayName","_a","approverCount","groupName","_b","roleName","_c","stageLabel","MdPeople","DelayNode","duration","unit","displayText","MdSchedule","CHANNEL_META","MdEmail","MdNotifications","MdSms","MdWebhook","FALLBACK_META","getRecipientPreview","getSubjectPreview","msg","NotificationNode","d","meta","recipient","subjectLine","IconComponent","NODE_WIDTH","AUTH_LABELS","WebhookTriggerNode","endpointUrl","authMethod","handleCopy","MdContentCopy","RestApiNode","method","url","MdHttp","methodKey","methodStyle","HTTP_METHOD_STYLE","OPERATOR_LABELS","ConditionBranchNode","branchConfigs","defaultBranch","MdCallSplit","branch","palette","BRANCH_PALETTE","firstCondition","extraCount","SubWorkflowNode","workflowId","workflowLabel","onPreview","MdAccountTree","handlePreview","MdOpenInNew","builtInNodeTypes","R","STROKE","PLUS_HALF","PILL_WIDTH","PILL_HEIGHT","PILL_R","EdgeWithPlusLabel","edgeId","sourceX","sourceY","targetX","targetY","sourcePosition","targetPosition","target","edgePath","labelX","labelY","getStraightPath","edgeLabel","isPass","showLabel","oneThirdX","oneThirdY","twoThirdsX","twoThirdsY","handleAddStepClick","handleClick","context","handleKeyDown","PlusContent","plusProps","BaseEdge","PlusEdge","PlainEdge","LABEL_OFFSET_Y","LabelPlusEdge","showPlus","GatewayBranchEdge","style","markerEnd","verticalRouting","BULLET_OFFSET","path","elbowY","onAddStepClick","segmentY","pillX","plusX","handlePlusClick","HALF","pillW"],"mappings":"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"}