@notmrabhi/flowforge 0.1.36 → 0.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GatewayBranchEdge-DNSPjIZw.js +2 -0
- package/dist/GatewayBranchEdge-DNSPjIZw.js.map +1 -0
- package/dist/{GatewayBranchEdge-Dxoy5B1A.js → GatewayBranchEdge-Diid9GtB.js} +30 -28
- package/dist/GatewayBranchEdge-Diid9GtB.js.map +1 -0
- package/dist/canvas.cjs +1 -1
- package/dist/canvas.d.ts +46 -1
- package/dist/canvas.js +22 -21
- package/dist/defaultUi.cjs +1 -1
- package/dist/defaultUi.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +46 -1
- package/dist/index.js +33 -32
- package/dist/style.css +1 -1
- package/dist/{templateSkeletons-DCvfog6-.js → templateSkeletons-DVeGC-Wx.js} +1168 -987
- package/dist/templateSkeletons-DVeGC-Wx.js.map +1 -0
- package/dist/templateSkeletons-DyOZ6gBc.js +2 -0
- package/dist/templateSkeletons-DyOZ6gBc.js.map +1 -0
- package/package.json +1 -1
- package/dist/GatewayBranchEdge-9YF32wwN.js +0 -2
- package/dist/GatewayBranchEdge-9YF32wwN.js.map +0 -1
- package/dist/GatewayBranchEdge-Dxoy5B1A.js.map +0 -1
- package/dist/templateSkeletons-BTC2fk5u.js +0 -2
- package/dist/templateSkeletons-BTC2fk5u.js.map +0 -1
- package/dist/templateSkeletons-DCvfog6-.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GatewayBranchEdge-Dxoy5B1A.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: '10px 6px'}}>\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: '10px 6px',\n margin: '0 6px 10px',\n borderRadius: 6,\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: '10px 6px' }}>\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: '10px 12px',\n margin: '0 6px 10px',\n borderRadius: 6,\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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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const c=require("react/jsx-runtime"),p=require("react"),ce=require("reactflow");require("reactflow/dist/style.css");const oe=require("./GatewayBranchEdge-9YF32wwN.js"),P=require("@mui/material"),xn=require("react-select"),O=require("react-icons/md"),wn=require("react-icons/gr"),yt=require("react-icons/bi"),Lt=require("./index-CqMPyOkL.js"),vn=require("./messages-O9Tw_XXR.js"),X=require("./canvasTokens-gKNYrPl4.js");var Rt=Object.defineProperty,En=(e,t,n)=>t in e?Rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,kn=(e,t)=>{for(var n in t)Rt(e,n,{get:t[n],enumerable:!0})},jn=(e,t,n)=>En(e,t+"",n),zt={};kn(zt,{Graph:()=>$,alg:()=>Ke,json:()=>Pt,version:()=>Sn});var Tn=Object.defineProperty,Dt=(e,t)=>{for(var n in t)Tn(e,n,{get:t[n],enumerable:!0})},$=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected="directed"in e?e.directed:!0,this._isMultigraph="multigraph"in e?e.multigraph:!1,this._isCompound="compound"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children["\0"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!="function"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,t){return e.forEach(n=>{t!==void 0?this.setNode(n,t):this.setNode(n)}),this}setNode(e,t){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]="\0",this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let t=n=>this.removeEdge(this._edgeObjs[n]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(n=>{this.setParent(n)}),delete this._children[e]),Object.keys(this._in[e]).forEach(t),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(t===void 0)t="\0";else{t+="";for(let n=t;n!==void 0;n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}parent(e){if(this._isCompound){let t=this._parent[e];if(t!=="\0")return t}}children(e="\0"){if(this._isCompound){let t=this._children[e];if(t)return Object.keys(t)}else{if(e==="\0")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let t=this._preds[e];if(t)return Object.keys(t)}successors(e){let t=this._sucs[e];if(t)return Object.keys(t)}neighbors(e){let t=this.predecessors(e);if(t){let n=new Set(t);for(let r of this.successors(e))n.add(r);return Array.from(n.values())}}isLeaf(e){let t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){let t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph()),Object.entries(this._nodes).forEach(([o,i])=>{e(o)&&t.setNode(o,i)}),Object.values(this._edgeObjs).forEach(o=>{t.hasNode(o.v)&&t.hasNode(o.w)&&t.setEdge(o,this.edge(o))});let n={},r=o=>{let i=this.parent(o);return!i||t.hasNode(i)?(n[o]=i??void 0,i??void 0):i in n?n[i]:r(i)};return this._isCompound&&t.nodes().forEach(o=>t.setParent(o,r(o))),t}setDefaultEdgeLabel(e){return typeof e!="function"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,t){return e.reduce((n,r)=>(t!==void 0?this.setEdge(n,r,t):this.setEdge(n,r),r)),this}setEdge(e,t,n,r){let o,i,s,l,d=!1;typeof e=="object"&&e!==null&&"v"in e?(o=e.v,i=e.w,s=e.name,arguments.length===2&&(l=t,d=!0)):(o=e,i=t,s=r,arguments.length>2&&(l=n,d=!0)),o=""+o,i=""+i,s!==void 0&&(s=""+s);let a=ge(this._isDirected,o,i,s);if(a in this._edgeLabels)return d&&(this._edgeLabels[a]=l),this;if(s!==void 0&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(o),this.setNode(i),this._edgeLabels[a]=d?l:this._defaultEdgeLabelFn(o,i,s);let u=_n(this._isDirected,o,i,s);return o=u.v,i=u.w,Object.freeze(u),this._edgeObjs[a]=u,mt(this._preds[i],o),mt(this._sucs[o],i),this._in[i][a]=u,this._out[o][a]=u,this._edgeCount++,this}edge(e,t,n){let r=arguments.length===1?Me(this._isDirected,e):ge(this._isDirected,e,t,n);return this._edgeLabels[r]}edgeAsObj(e,t,n){let r=arguments.length===1?this.edge(e):this.edge(e,t,n);return typeof r!="object"?{label:r}:r}hasEdge(e,t,n){return(arguments.length===1?Me(this._isDirected,e):ge(this._isDirected,e,t,n))in this._edgeLabels}removeEdge(e,t,n){let r=arguments.length===1?Me(this._isDirected,e):ge(this._isDirected,e,t,n),o=this._edgeObjs[r];if(o){let i=o.v,s=o.w;delete this._edgeLabels[r],delete this._edgeObjs[r],xt(this._preds[s],i),xt(this._sucs[i],s),delete this._in[s][r],delete this._out[i][r],this._edgeCount--}return this}inEdges(e,t){return this.isDirected()?this.filterEdges(this._in[e],e,t):this.nodeEdges(e,t)}outEdges(e,t){return this.isDirected()?this.filterEdges(this._out[e],e,t):this.nodeEdges(e,t)}nodeEdges(e,t){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,t)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,t,n){if(!e)return;let r=Object.values(e);return n?r.filter(o=>o.v===t&&o.w===n||o.v===n&&o.w===t):r}};function mt(e,t){e[t]?e[t]++:e[t]=1}function xt(e,t){e[t]!==void 0&&!--e[t]&&delete e[t]}function ge(e,t,n,r){let o=""+t,i=""+n;if(!e&&o>i){let s=o;o=i,i=s}return o+""+i+""+(r===void 0?"\0":r)}function _n(e,t,n,r){let o=""+t,i=""+n;if(!e&&o>i){let l=o;o=i,i=l}let s={v:o,w:i};return r&&(s.name=r),s}function Me(e,t){return ge(e,t.v,t.w,t.name)}var Sn="4.0.1",Pt={};Dt(Pt,{read:()=>On,write:()=>Nn});function Nn(e){let t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:Cn(e),edges:In(e)},n=e.graph();return n!==void 0&&(t.value=structuredClone(n)),t}function Cn(e){return e.nodes().map(t=>{let n=e.node(t),r=e.parent(t),o={v:t};return n!==void 0&&(o.value=n),r!==void 0&&(o.parent=r),o})}function In(e){return e.edges().map(t=>{let n=e.edge(t),r={v:t.v,w:t.w};return t.name!==void 0&&(r.name=t.name),n!==void 0&&(r.value=n),r})}function On(e){let t=new $(e.options);return e.value!==void 0&&t.setGraph(e.value),e.nodes.forEach(n=>{t.setNode(n.v,n.value),n.parent&&t.setParent(n.v,n.parent)}),e.edges.forEach(n=>{t.setEdge({v:n.v,w:n.w,name:n.name},n.value)}),t}var Ke={};Dt(Ke,{CycleException:()=>je,bellmanFord:()=>Bt,components:()=>An,dijkstra:()=>ke,dijkstraAll:()=>zn,findCycles:()=>Dn,floydWarshall:()=>Bn,isAcyclic:()=>Gn,postorder:()=>Un,preorder:()=>Yn,prim:()=>qn,shortestPaths:()=>Kn,tarjan:()=>Gt,topsort:()=>$t});var Mn=()=>1;function Bt(e,t,n,r){return Fn(e,String(t),n||Mn,r||function(o){return e.outEdges(o)})}function Fn(e,t,n,r){let o={},i,s=0,l=e.nodes(),d=function(f){let h=n(f);o[f.v].distance+h<o[f.w].distance&&(o[f.w]={distance:o[f.v].distance+h,predecessor:f.v},i=!0)},a=function(){l.forEach(function(f){r(f).forEach(function(h){let g=h.v===f?h.v:h.w,y=g===h.v?h.w:h.v;d({v:g,w:y})})})};l.forEach(function(f){let h=f===t?0:Number.POSITIVE_INFINITY;o[f]={distance:h,predecessor:""}});let u=l.length;for(let f=1;f<u&&(i=!1,s++,a(),!!i);f++);if(s===u-1&&(i=!1,a(),i))throw new Error("The graph contains a negative weight cycle");return o}function An(e){let t={},n=[],r;function o(i){i in t||(t[i]=!0,r.push(i),e.successors(i).forEach(o),e.predecessors(i).forEach(o))}return e.nodes().forEach(function(i){r=[],o(i),r.length&&n.push(r)}),n}var Wt=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority}min(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key}add(e,t){let n=this._keyIndices,r=String(e);if(!(r in n)){let o=this._arr,i=o.length;return n[r]=i,o.push({key:r,priority:t}),this._decrease(i),!0}return!1}removeMin(){this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,t){let n=this._keyIndices[e];if(n===void 0)throw new Error(`Key not found: ${e}`);let r=this._arr[n].priority;if(t>r)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${r} New: ${t}`);this._arr[n].priority=t,this._decrease(n)}_heapify(e){let t=this._arr,n=2*e,r=n+1,o=e;n<t.length&&(o=t[n].priority<t[o].priority?n:o,r<t.length&&(o=t[r].priority<t[o].priority?r:o),o!==e&&(this._swap(e,o),this._heapify(o)))}_decrease(e){let t=this._arr,n=t[e].priority,r;for(;e!==0&&(r=e>>1,!(t[r].priority<n));)this._swap(e,r),e=r}_swap(e,t){let n=this._arr,r=this._keyIndices,o=n[e],i=n[t];n[e]=i,n[t]=o,r[i.key]=e,r[o.key]=t}},Ln=()=>1;function ke(e,t,n,r){let o=function(i){return e.outEdges(i)};return Rn(e,String(t),n||Ln,r||o)}function Rn(e,t,n,r){let o={},i=new Wt,s,l,d=function(a){let u=a.v!==s?a.v:a.w,f=o[u],h=n(a),g=l.distance+h;if(h<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+a+" Weight: "+h);g<f.distance&&(f.distance=g,f.predecessor=s,i.decrease(u,g))};for(e.nodes().forEach(function(a){let u=a===t?0:Number.POSITIVE_INFINITY;o[a]={distance:u,predecessor:""},i.add(a,u)});i.size()>0&&(s=i.removeMin(),l=o[s],l.distance!==Number.POSITIVE_INFINITY);)r(s).forEach(d);return o}function zn(e,t,n){return e.nodes().reduce(function(r,o){return r[o]=ke(e,o,t,n),r},{})}function Gt(e){let t=0,n=[],r={},o=[];function i(s){let l=r[s]={onStack:!0,lowlink:t,index:t++};if(n.push(s),e.successors(s).forEach(function(d){d in r?r[d].onStack&&(l.lowlink=Math.min(l.lowlink,r[d].index)):(i(d),l.lowlink=Math.min(l.lowlink,r[d].lowlink))}),l.lowlink===l.index){let d=[],a;do a=n.pop(),r[a].onStack=!1,d.push(a);while(s!==a);o.push(d)}}return e.nodes().forEach(function(s){s in r||i(s)}),o}function Dn(e){return Gt(e).filter(function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}var Pn=()=>1;function Bn(e,t,n){return Wn(e,t||Pn,n||function(r){return e.outEdges(r)})}function Wn(e,t,n){let r={},o=e.nodes();return o.forEach(function(i){r[i]={},r[i][i]={distance:0,predecessor:""},o.forEach(function(s){i!==s&&(r[i][s]={distance:Number.POSITIVE_INFINITY,predecessor:""})}),n(i).forEach(function(s){let l=s.v===i?s.w:s.v,d=t(s);r[i][l]={distance:d,predecessor:i}})}),o.forEach(function(i){let s=r[i];o.forEach(function(l){let d=r[l];o.forEach(function(a){let u=d[i],f=s[a],h=d[a],g=u.distance+f.distance;g<h.distance&&(h.distance=g,h.predecessor=f.predecessor)})})}),r}var je=class extends Error{constructor(...e){super(...e)}};function $t(e){let t={},n={},r=[];function o(i){if(i in n)throw new je;i in t||(n[i]=!0,t[i]=!0,e.predecessors(i).forEach(o),delete n[i],r.push(i))}if(e.sinks().forEach(o),Object.keys(t).length!==e.nodeCount())throw new je;return r}function Gn(e){try{$t(e)}catch(t){if(t instanceof je)return!1;throw t}return!0}function $n(e,t,n,r,o){Array.isArray(t)||(t=[t]);let i=l=>{var d;return(d=e.isDirected()?e.successors(l):e.neighbors(l))!=null?d:[]},s={};return t.forEach(function(l){if(!e.hasNode(l))throw new Error("Graph does not have node: "+l);o=Ut(e,l,n==="post",s,i,r,o)}),o}function Ut(e,t,n,r,o,i,s){return t in r||(r[t]=!0,n||(s=i(s,t)),o(t).forEach(function(l){s=Ut(e,l,n,r,o,i,s)}),n&&(s=i(s,t))),s}function Yt(e,t,n){return $n(e,t,n,function(r,o){return r.push(o),r},[])}function Un(e,t){return Yt(e,t,"post")}function Yn(e,t){return Yt(e,t,"pre")}function qn(e,t){let n=new $,r={},o=new Wt,i;function s(d){let a=d.v===i?d.w:d.v,u=o.priority(a);if(u!==void 0){let f=t(d);f<u&&(r[a]=i,o.decrease(a,f))}}if(e.nodeCount()===0)return n;e.nodes().forEach(function(d){o.add(d,Number.POSITIVE_INFINITY),n.setNode(d)}),o.decrease(e.nodes()[0],0);let l=!1;for(;o.size()>0;){if(i=o.removeMin(),i in r)n.setEdge(i,r[i]);else{if(l)throw new Error("Input graph is not connected: "+e);l=!0}e.nodeEdges(i).forEach(s)}return n}function Kn(e,t,n,r){return Xn(e,t,n,r??(o=>{let i=e.outEdges(o);return i??[]}))}function Xn(e,t,n,r){if(n===void 0)return ke(e,t,n,r);let o=!1,i=e.nodes();for(let s=0;s<i.length;s++){let l=r(i[s]);for(let d=0;d<l.length;d++){let a=l[d],u=a.v===i[s]?a.v:a.w,f=u===a.v?a.w:a.v;n({v:u,w:f})<0&&(o=!0)}if(o)return Bt(e,t,n,r)}return ke(e,t,n,r)}function fe(e,t,n,r){let o=r;for(;e.hasNode(o);)o=Xe(r);return n.dummy=t,e.setNode(o,n),o}function Vn(e){let t=new $().setGraph(e.graph());return e.nodes().forEach(n=>t.setNode(n,e.node(n))),e.edges().forEach(n=>{let r=t.edge(n.v,n.w)||{weight:0,minlen:1},o=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})}),t}function qt(e){let t=new $({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(n=>{e.children(n).length||t.setNode(n,e.node(n))}),e.edges().forEach(n=>{t.setEdge(n,e.edge(n))}),t}function wt(e,t){let n=e.x,r=e.y,o=t.x-n,i=t.y-r,s=e.width/2,l=e.height/2;if(!o&&!i)throw new Error("Not possible to find intersection inside of the rectangle");let d,a;return Math.abs(i)*s>Math.abs(o)*l?(i<0&&(l=-l),d=l*o/i,a=l):(o<0&&(s=-s),d=s,a=s*i/o),{x:n+d,y:r+a}}function ye(e){let t=pe(Xt(e)+1).map(()=>[]);return e.nodes().forEach(n=>{let r=e.node(n),o=r.rank;o!==void 0&&(t[o]||(t[o]=[]),t[o][r.order]=n)}),t}function Hn(e){let t=e.nodes().map(r=>{let o=e.node(r).rank;return o===void 0?Number.MAX_VALUE:o}),n=V(Math.min,t);e.nodes().forEach(r=>{let o=e.node(r);Object.hasOwn(o,"rank")&&(o.rank-=n)})}function Jn(e){let t=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),n=V(Math.min,t),r=[];e.nodes().forEach(s=>{let l=e.node(s).rank-n;r[l]||(r[l]=[]),r[l].push(s)});let o=0,i=e.graph().nodeRankFactor;Array.from(r).forEach((s,l)=>{s===void 0&&l%i!==0?--o:s!==void 0&&o&&s.forEach(d=>e.node(d).rank+=o)})}function vt(e,t,n,r){let o={width:0,height:0};return arguments.length>=4&&(o.rank=n,o.order=r),fe(e,"border",o,t)}function Zn(e,t=Kt){let n=[];for(let r=0;r<e.length;r+=t){let o=e.slice(r,r+t);n.push(o)}return n}var Kt=65535;function V(e,t){if(t.length>Kt){let n=Zn(t);return e(...n.map(r=>e(...r)))}else return e(...t)}function Xt(e){let t=e.nodes().map(n=>{let r=e.node(n).rank;return r===void 0?Number.MIN_VALUE:r});return V(Math.max,t)}function Qn(e,t){let n={lhs:[],rhs:[]};return e.forEach(r=>{t(r)?n.lhs.push(r):n.rhs.push(r)}),n}function Vt(e,t){let n=Date.now();try{return t()}finally{console.log(e+" time: "+(Date.now()-n)+"ms")}}function Ht(e,t){return t()}var er=0;function Xe(e){let t=++er;return e+(""+t)}function pe(e,t,n=1){t==null&&(t=e,e=0);let r=i=>i<t;n<0&&(r=i=>t<i);let o=[];for(let i=e;r(i);i+=n)o.push(i);return o}function Te(e,t){let n={};for(let r of t)e[r]!==void 0&&(n[r]=e[r]);return n}function _e(e,t){let n;return typeof t=="string"?n=r=>r[t]:n=t,Object.entries(e).reduce((r,[o,i])=>(r[o]=n(i,o),r),{})}function tr(e,t){return e.reduce((n,r,o)=>(n[r]=t[o],n),{})}var Se="\0",nr="3.0.0",rr=class{constructor(){jn(this,"_sentinel");let e={};e._next=e._prev=e,this._sentinel=e}dequeue(){let e=this._sentinel,t=e._prev;if(t!==e)return Et(t),t}enqueue(e){let t=this._sentinel;e._prev&&e._next&&Et(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t}toString(){let e=[],t=this._sentinel,n=t._prev;for(;n!==t;)e.push(JSON.stringify(n,or)),n=n._prev;return"["+e.join(", ")+"]"}};function Et(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function or(e,t){if(e!=="_next"&&e!=="_prev")return t}var ir=rr,sr=()=>1;function lr(e,t){if(e.nodeCount()<=1)return[];let n=dr(e,t||sr);return ar(n.graph,n.buckets,n.zeroIdx).flatMap(r=>e.outEdges(r.v,r.w)||[])}function ar(e,t,n){var r;let o=[],i=t[t.length-1],s=t[0],l;for(;e.nodeCount();){for(;l=s.dequeue();)Fe(e,t,n,l);for(;l=i.dequeue();)Fe(e,t,n,l);if(e.nodeCount()){for(let d=t.length-2;d>0;--d)if(l=(r=t[d])==null?void 0:r.dequeue(),l){o=o.concat(Fe(e,t,n,l,!0)||[]);break}}}return o}function Fe(e,t,n,r,o){let i=[],s=o?i:void 0;return(e.inEdges(r.v)||[]).forEach(l=>{let d=e.edge(l),a=e.node(l.v);o&&i.push({v:l.v,w:l.w}),a.out-=d,We(t,n,a)}),(e.outEdges(r.v)||[]).forEach(l=>{let d=e.edge(l),a=l.w,u=e.node(a);u.in-=d,We(t,n,u)}),e.removeNode(r.v),s}function dr(e,t){let n=new $,r=0,o=0;e.nodes().forEach(l=>{n.setNode(l,{v:l,in:0,out:0})}),e.edges().forEach(l=>{let d=n.edge(l.v,l.w)||0,a=t(l),u=d+a;n.setEdge(l.v,l.w,u);let f=n.node(l.v),h=n.node(l.w);o=Math.max(o,f.out+=a),r=Math.max(r,h.in+=a)});let i=cr(o+r+3).map(()=>new ir),s=r+1;return n.nodes().forEach(l=>{We(i,s,n.node(l))}),{graph:n,buckets:i,zeroIdx:s}}function We(e,t,n){var r,o,i;n.out?n.in?(i=e[n.out-n.in+t])==null||i.enqueue(n):(o=e[e.length-1])==null||o.enqueue(n):(r=e[0])==null||r.enqueue(n)}function cr(e){let t=[];for(let n=0;n<e;n++)t.push(n);return t}function ur(e){(e.graph().acyclicer==="greedy"?lr(e,t(e)):fr(e)).forEach(n=>{let r=e.edge(n);e.removeEdge(n),r.forwardName=n.name,r.reversed=!0,e.setEdge(n.w,n.v,r,Xe("rev"))});function t(n){return r=>n.edge(r).weight}}function fr(e){let t=[],n={},r={};function o(i){Object.hasOwn(r,i)||(r[i]=!0,n[i]=!0,e.outEdges(i).forEach(s=>{Object.hasOwn(n,s.w)?t.push(s):o(s.w)}),delete n[i])}return e.nodes().forEach(o),t}function hr(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.reversed){e.removeEdge(t);let r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}})}function gr(e){e.graph().dummyChains=[],e.edges().forEach(t=>pr(e,t))}function pr(e,t){let n=t.v,r=e.node(n).rank,o=t.w,i=e.node(o).rank,s=t.name,l=e.edge(t),d=l.labelRank;if(i===r+1)return;e.removeEdge(t);let a,u,f;for(f=0,++r;r<i;++f,++r)l.points=[],u={width:0,height:0,edgeLabel:l,edgeObj:t,rank:r},a=fe(e,"edge",u,"_d"),r===d&&(u.width=l.width,u.height=l.height,u.dummy="edge-label",u.labelpos=l.labelpos),e.setEdge(n,a,{weight:l.weight},s),f===0&&e.graph().dummyChains.push(a),n=a;e.setEdge(n,o,{weight:l.weight},s)}function br(e){e.graph().dummyChains.forEach(t=>{let n=e.node(t),r=n.edgeLabel,o;for(e.setEdge(n.edgeObj,r);n.dummy;)o=e.successors(t)[0],e.removeNode(t),r.points.push({x:n.x,y:n.y}),n.dummy==="edge-label"&&(r.x=n.x,r.y=n.y,r.width=n.width,r.height=n.height),t=o,n=e.node(t)})}function Ve(e){let t={};function n(r){let o=e.node(r);if(Object.hasOwn(t,r))return o.rank;t[r]=!0;let i=e.outEdges(r),s=i?i.map(d=>d==null?Number.POSITIVE_INFINITY:n(d.w)-e.edge(d).minlen):[],l=V(Math.min,s);return l===Number.POSITIVE_INFINITY&&(l=0),o.rank=l}e.sources().forEach(n)}function ue(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var Jt=yr;function yr(e){let t=new $({directed:!1}),n=e.nodes();if(n.length===0)throw new Error("Graph must have at least one node");let r=n[0],o=e.nodeCount();t.setNode(r,{});let i,s;for(;mr(t,e)<o&&(i=xr(t,e),!!i);)s=t.hasNode(i.v)?ue(e,i):-ue(e,i),wr(t,e,s);return t}function mr(e,t){function n(r){let o=t.nodeEdges(r);o&&o.forEach(i=>{let s=i.v,l=r===s?i.w:s;!e.hasNode(l)&&!ue(t,i)&&(e.setNode(l,{}),e.setEdge(r,l,{}),n(l))})}return e.nodes().forEach(n),e.nodeCount()}function xr(e,t){return t.edges().reduce((n,r)=>{let o=Number.POSITIVE_INFINITY;return e.hasNode(r.v)!==e.hasNode(r.w)&&(o=ue(t,r)),o<n[0]?[o,r]:n},[Number.POSITIVE_INFINITY,null])[1]}function wr(e,t,n){e.nodes().forEach(r=>t.node(r).rank+=n)}var{preorder:vr,postorder:Er}=Ke,kr=se;se.initLowLimValues=Je;se.initCutValues=He;se.calcCutValue=Zt;se.leaveEdge=en;se.enterEdge=tn;se.exchangeEdges=nn;function se(e){e=Vn(e),Ve(e);let t=Jt(e);Je(t),He(t,e);let n,r;for(;n=en(t);)r=tn(t,e,n),nn(t,e,n,r)}function He(e,t){let n=Er(e,e.nodes());n=n.slice(0,n.length-1),n.forEach(r=>jr(e,t,r))}function jr(e,t,n){let r=e.node(n).parent,o=e.edge(n,r);o.cutvalue=Zt(e,t,n)}function Zt(e,t,n){let r=e.node(n).parent,o=!0,i=t.edge(n,r),s=0;i||(o=!1,i=t.edge(r,n)),s=i.weight;let l=t.nodeEdges(n);return l&&l.forEach(d=>{let a=d.v===n,u=a?d.w:d.v;if(u!==r){let f=a===o,h=t.edge(d).weight;if(s+=f?h:-h,_r(e,n,u)){let g=e.edge(n,u).cutvalue;s+=f?-g:g}}}),s}function Je(e,t){arguments.length<2&&(t=e.nodes()[0]),Qt(e,{},1,t)}function Qt(e,t,n,r,o){let i=n,s=e.node(r);t[r]=!0;let l=e.neighbors(r);return l&&l.forEach(d=>{Object.hasOwn(t,d)||(n=Qt(e,t,n,d,r))}),s.low=i,s.lim=n++,o?s.parent=o:delete s.parent,n}function en(e){return e.edges().find(t=>e.edge(t).cutvalue<0)}function tn(e,t,n){let r=n.v,o=n.w;t.hasEdge(r,o)||(r=n.w,o=n.v);let i=e.node(r),s=e.node(o),l=i,d=!1;return i.lim>s.lim&&(l=s,d=!0),t.edges().filter(a=>d===kt(e,e.node(a.v),l)&&d!==kt(e,e.node(a.w),l)).reduce((a,u)=>ue(t,u)<ue(t,a)?u:a)}function nn(e,t,n,r){let o=n.v,i=n.w;e.removeEdge(o,i),e.setEdge(r.v,r.w,{}),Je(e),He(e,t),Tr(e,t)}function Tr(e,t){let n=e.nodes().find(o=>!e.node(o).parent);if(!n)return;let r=vr(e,[n]);r=r.slice(1),r.forEach(o=>{let i=e.node(o).parent,s=t.edge(o,i),l=!1;s||(s=t.edge(i,o),l=!0),t.node(o).rank=t.node(i).rank+(l?s.minlen:-s.minlen)})}function _r(e,t,n){return e.hasEdge(t,n)}function kt(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}var Sr=Nr;function Nr(e){let t=e.graph().ranker;if(typeof t=="function")return t(e);switch(t){case"network-simplex":jt(e);break;case"tight-tree":Ir(e);break;case"longest-path":Cr(e);break;case"none":break;default:jt(e)}}var Cr=Ve;function Ir(e){Ve(e),Jt(e)}function jt(e){kr(e)}var Or=Mr;function Mr(e){let t=Ar(e);e.graph().dummyChains.forEach(n=>{let r=e.node(n),o=r.edgeObj,i=Fr(e,t,o.v,o.w),s=i.path,l=i.lca,d=0,a=s[d],u=!0;for(;n!==o.w;){if(r=e.node(n),u){for(;(a=s[d])!==l&&e.node(a).maxRank<r.rank;)d++;a===l&&(u=!1)}if(!u){for(;d<s.length-1&&e.node(s[d+1]).minRank<=r.rank;)d++;a=s[d]}a!==void 0&&e.setParent(n,a),n=e.successors(n)[0]}})}function Fr(e,t,n,r){let o=[],i=[],s=Math.min(t[n].low,t[r].low),l=Math.max(t[n].lim,t[r].lim),d;d=n;do d=e.parent(d),o.push(d);while(d&&(t[d].low>s||l>t[d].lim));let a=d,u=r;for(;(u=e.parent(u))!==a;)i.push(u);return{path:o.concat(i.reverse()),lca:a}}function Ar(e){let t={},n=0;function r(o){let i=n;e.children(o).forEach(r),t[o]={low:i,lim:n++}}return e.children(Se).forEach(r),t}function Lr(e){let t=fe(e,"root",{},"_root"),n=Rr(e),r=Object.values(n),o=V(Math.max,r)-1,i=2*o+1;e.graph().nestingRoot=t,e.edges().forEach(l=>e.edge(l).minlen*=i);let s=zr(e)+1;e.children(Se).forEach(l=>rn(e,t,i,s,o,n,l)),e.graph().nodeRankFactor=i}function rn(e,t,n,r,o,i,s){var l;let d=e.children(s);if(!d.length){s!==t&&e.setEdge(t,s,{weight:0,minlen:n});return}let a=vt(e,"_bt"),u=vt(e,"_bb"),f=e.node(s);e.setParent(a,s),f.borderTop=a,e.setParent(u,s),f.borderBottom=u,d.forEach(h=>{var g;rn(e,t,n,r,o,i,h);let y=e.node(h),v=y.borderTop?y.borderTop:h,m=y.borderBottom?y.borderBottom:h,k=y.borderTop?r:2*r,_=v!==m?1:o-((g=i[s])!=null?g:0)+1;e.setEdge(a,v,{weight:k,minlen:_,nestingEdge:!0}),e.setEdge(m,u,{weight:k,minlen:_,nestingEdge:!0})}),e.parent(s)||e.setEdge(t,a,{weight:0,minlen:o+((l=i[s])!=null?l:0)})}function Rr(e){let t={};function n(r,o){let i=e.children(r);i&&i.length&&i.forEach(s=>n(s,o+1)),t[r]=o}return e.children(Se).forEach(r=>n(r,1)),t}function zr(e){return e.edges().reduce((t,n)=>t+e.edge(n).weight,0)}function Dr(e){let t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,e.edges().forEach(n=>{e.edge(n).nestingEdge&&e.removeEdge(n)})}var Pr=Br;function Br(e){function t(n){let r=e.children(n),o=e.node(n);if(r.length&&r.forEach(t),Object.hasOwn(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(let i=o.minRank,s=o.maxRank+1;i<s;++i)Tt(e,"borderLeft","_bl",n,o,i),Tt(e,"borderRight","_br",n,o,i)}}e.children(Se).forEach(t)}function Tt(e,t,n,r,o,i){let s={width:0,height:0,rank:i,borderType:t},l=o[t][i-1],d=fe(e,"border",s,n);o[t][i]=d,e.setParent(d,r),l&&e.setEdge(l,d,{weight:1})}function Wr(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n==="lr"||n==="rl")&&on(e)}function Gr(e){var t;let n=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(n==="bt"||n==="rl")&&$r(e),(n==="lr"||n==="rl")&&(Ur(e),on(e))}function on(e){e.nodes().forEach(t=>_t(e.node(t))),e.edges().forEach(t=>_t(e.edge(t)))}function _t(e){let t=e.width;e.width=e.height,e.height=t}function $r(e){e.nodes().forEach(t=>Ae(e.node(t))),e.edges().forEach(t=>{var n;let r=e.edge(t);(n=r.points)==null||n.forEach(Ae),Object.hasOwn(r,"y")&&Ae(r)})}function Ae(e){e.y=-e.y}function Ur(e){e.nodes().forEach(t=>Le(e.node(t))),e.edges().forEach(t=>{var n;let r=e.edge(t);(n=r.points)==null||n.forEach(Le),Object.hasOwn(r,"x")&&Le(r)})}function Le(e){let t=e.x;e.x=e.y,e.y=t}function Yr(e){let t={},n=e.nodes().filter(l=>!e.children(l).length),r=n.map(l=>e.node(l).rank),o=V(Math.max,r),i=pe(o+1).map(()=>[]);function s(l){if(t[l])return;t[l]=!0;let d=e.node(l);i[d.rank].push(l);let a=e.successors(l);a&&a.forEach(s)}return n.sort((l,d)=>e.node(l).rank-e.node(d).rank).forEach(s),i}function qr(e,t){let n=0;for(let r=1;r<t.length;++r)n+=Kr(e,t[r-1],t[r]);return n}function Kr(e,t,n){let r=tr(n,n.map((a,u)=>u)),o=t.flatMap(a=>{let u=e.outEdges(a);return u?u.map(f=>({pos:r[f.w],weight:e.edge(f).weight})).sort((f,h)=>f.pos-h.pos):[]}),i=1;for(;i<n.length;)i<<=1;let s=2*i-1;i-=1;let l=new Array(s).fill(0),d=0;return o.forEach(a=>{let u=a.pos+i;l[u]+=a.weight;let f=0;for(;u>0;)u%2&&(f+=l[u+1]),u=u-1>>1,l[u]+=a.weight;d+=a.weight*f}),d}function Xr(e,t=[]){return t.map(n=>{let r=e.inEdges(n);if(!r||!r.length)return{v:n};{let o=r.reduce((i,s)=>{let l=e.edge(s),d=e.node(s.v);return{sum:i.sum+l.weight*d.order,weight:i.weight+l.weight}},{sum:0,weight:0});return{v:n,barycenter:o.sum/o.weight,weight:o.weight}}})}function Vr(e,t){let n={};e.forEach((o,i)=>{let s={indegree:0,in:[],out:[],vs:[o.v],i};o.barycenter!==void 0&&(s.barycenter=o.barycenter,s.weight=o.weight),n[o.v]=s}),t.edges().forEach(o=>{let i=n[o.v],s=n[o.w];i!==void 0&&s!==void 0&&(s.indegree++,i.out.push(s))});let r=Object.values(n).filter(o=>!o.indegree);return Hr(r)}function Hr(e){let t=[];function n(o){return i=>{i.merged||(i.barycenter===void 0||o.barycenter===void 0||i.barycenter>=o.barycenter)&&Jr(o,i)}}function r(o){return i=>{i.in.push(o),--i.indegree===0&&e.push(i)}}for(;e.length;){let o=e.pop();t.push(o),o.in.reverse().forEach(n(o)),o.out.forEach(r(o))}return t.filter(o=>!o.merged).map(o=>Te(o,["vs","i","barycenter","weight"]))}function Jr(e,t){let n=0,r=0;e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=n/r,e.weight=r,e.i=Math.min(t.i,e.i),t.merged=!0}function Zr(e,t){let n=Qn(e,u=>Object.hasOwn(u,"barycenter")),r=n.lhs,o=n.rhs.sort((u,f)=>f.i-u.i),i=[],s=0,l=0,d=0;r.sort(Qr(!!t)),d=St(i,o,d),r.forEach(u=>{d+=u.vs.length,i.push(u.vs),s+=u.barycenter*u.weight,l+=u.weight,d=St(i,o,d)});let a={vs:i.flat(1)};return l&&(a.barycenter=s/l,a.weight=l),a}function St(e,t,n){let r;for(;t.length&&(r=t[t.length-1]).i<=n;)t.pop(),e.push(r.vs),n++;return n}function Qr(e){return(t,n)=>t.barycenter<n.barycenter?-1:t.barycenter>n.barycenter?1:e?n.i-t.i:t.i-n.i}function sn(e,t,n,r){let o=e.children(t),i=e.node(t),s=i?i.borderLeft:void 0,l=i?i.borderRight:void 0,d={};s&&(o=o.filter(h=>h!==s&&h!==l));let a=Xr(e,o);a.forEach(h=>{if(e.children(h.v).length){let g=sn(e,h.v,n,r);d[h.v]=g,Object.hasOwn(g,"barycenter")&&to(h,g)}});let u=Vr(a,n);eo(u,d);let f=Zr(u,r);if(s&&l){f.vs=[s,f.vs,l].flat(1);let h=e.predecessors(s);if(h&&h.length){let g=e.node(h[0]),y=e.predecessors(l),v=e.node(y[0]);Object.hasOwn(f,"barycenter")||(f.barycenter=0,f.weight=0),f.barycenter=(f.barycenter*f.weight+g.order+v.order)/(f.weight+2),f.weight+=2}}return f}function eo(e,t){e.forEach(n=>{n.vs=n.vs.flatMap(r=>t[r]?t[r].vs:r)})}function to(e,t){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight):(e.barycenter=t.barycenter,e.weight=t.weight)}function no(e,t,n,r){r||(r=e.nodes());let o=ro(e),i=new $({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(s=>e.node(s));return r.forEach(s=>{let l=e.node(s),d=e.parent(s);if(l.rank===t||l.minRank<=t&&t<=l.maxRank){i.setNode(s),i.setParent(s,d||o);let a=e[n](s);a&&a.forEach(u=>{let f=u.v===s?u.w:u.v,h=i.edge(f,s),g=h!==void 0?h.weight:0;i.setEdge(f,s,{weight:e.edge(u).weight+g})}),Object.hasOwn(l,"minRank")&&i.setNode(s,{borderLeft:l.borderLeft[t],borderRight:l.borderRight[t]})}}),i}function ro(e){let t;for(;e.hasNode(t=Xe("_root")););return t}function oo(e,t,n){let r={},o;n.forEach(i=>{let s=e.parent(i),l,d;for(;s;){if(l=e.parent(s),l?(d=r[l],r[l]=s):(d=o,o=s),d&&d!==s){t.setEdge(d,s);return}s=l}})}function ln(e,t={}){if(typeof t.customOrder=="function"){t.customOrder(e,ln);return}let n=Xt(e),r=Nt(e,pe(1,n+1),"inEdges"),o=Nt(e,pe(n-1,-1,-1),"outEdges"),i=Yr(e);if(Ct(e,i),t.disableOptimalOrderHeuristic)return;let s=Number.POSITIVE_INFINITY,l,d=t.constraints||[];for(let a=0,u=0;u<4;++a,++u){io(a%2?r:o,a%4>=2,d),i=ye(e);let f=qr(e,i);f<s?(u=0,l=Object.assign({},i),s=f):f===s&&(l=structuredClone(i))}Ct(e,l)}function Nt(e,t,n){let r=new Map,o=(i,s)=>{r.has(i)||r.set(i,[]),r.get(i).push(s)};for(let i of e.nodes()){let s=e.node(i);if(typeof s.rank=="number"&&o(s.rank,i),typeof s.minRank=="number"&&typeof s.maxRank=="number")for(let l=s.minRank;l<=s.maxRank;l++)l!==s.rank&&o(l,i)}return t.map(function(i){return no(e,i,n,r.get(i)||[])})}function io(e,t,n){let r=new $;e.forEach(function(o){n.forEach(l=>r.setEdge(l.left,l.right));let i=o.graph().root,s=sn(o,i,r,t);s.vs.forEach((l,d)=>o.node(l).order=d),oo(o,r,s.vs)})}function Ct(e,t){Object.values(t).forEach(n=>n.forEach((r,o)=>e.node(r).order=o))}function so(e,t){let n={};function r(o,i){let s=0,l=0,d=o.length,a=i[i.length-1];return i.forEach((u,f)=>{let h=ao(e,u),g=h?e.node(h).order:d;(h||u===a)&&(i.slice(l,f+1).forEach(y=>{let v=e.predecessors(y);v&&v.forEach(m=>{let k=e.node(m),_=k.order;(_<s||g<_)&&!(k.dummy&&e.node(y).dummy)&&an(n,m,y)})}),l=f+1,s=g)}),i}return t.length&&t.reduce(r),n}function lo(e,t){let n={};function r(i,s,l,d,a){pe(s,l).forEach(u=>{let f=i[u];if(f!==void 0&&e.node(f).dummy){let h=e.predecessors(f);h&&h.forEach(g=>{if(g===void 0)return;let y=e.node(g);y.dummy&&(y.order<d||y.order>a)&&an(n,g,f)})}})}function o(i,s){let l=-1,d=-1,a=0;return s.forEach((u,f)=>{if(e.node(u).dummy==="border"){let h=e.predecessors(u);if(h&&h.length){let g=h[0];if(g===void 0)return;d=e.node(g).order,r(s,a,f,l,d),a=f,l=d}}r(s,a,s.length,d,i.length)}),s}return t.length&&t.reduce(o),n}function ao(e,t){if(e.node(t).dummy){let n=e.predecessors(t);if(n)return n.find(r=>e.node(r).dummy)}}function an(e,t,n){if(t>n){let o=t;t=n,n=o}let r=e[t];r||(e[t]=r={}),r[n]=!0}function co(e,t,n){if(t>n){let o=t;t=n,n=o}let r=e[t];return r!==void 0&&Object.hasOwn(r,n)}function uo(e,t,n,r){let o={},i={},s={};return t.forEach(l=>{l.forEach((d,a)=>{o[d]=d,i[d]=d,s[d]=a})}),t.forEach(l=>{let d=-1;l.forEach(a=>{let u=r(a);if(u&&u.length){let f=u.sort((g,y)=>{let v=s[g],m=s[y];return(v!==void 0?v:0)-(m!==void 0?m:0)}),h=(f.length-1)/2;for(let g=Math.floor(h),y=Math.ceil(h);g<=y;++g){let v=f[g];if(v===void 0)continue;let m=s[v];if(m!==void 0&&i[a]===a&&d<m&&!co(n,a,v)){let k=o[v];k!==void 0&&(i[v]=a,i[a]=o[a]=k,d=m)}}}})}),{root:o,align:i}}function fo(e,t,n,r,o=!1){let i={},s=ho(e,t,n,o),l=o?"borderLeft":"borderRight";function d(g,y){let v=s.nodes().slice(),m={},k=v.pop();for(;k;){if(m[k])g(k);else{m[k]=!0,v.push(k);for(let _ of y(k))v.push(_)}k=v.pop()}}function a(g){let y=s.inEdges(g);y?i[g]=y.reduce((v,m)=>{var k;let _=(k=i[m.v])!=null?k:0,I=s.edge(m);return Math.max(v,_+(I!==void 0?I:0))},0):i[g]=0}function u(g){let y=s.outEdges(g),v=Number.POSITIVE_INFINITY;y&&(v=y.reduce((k,_)=>{let I=i[_.w],F=s.edge(_);return Math.min(k,(I!==void 0?I:0)-(F!==void 0?F:0))},Number.POSITIVE_INFINITY));let m=e.node(g);v!==Number.POSITIVE_INFINITY&&m.borderType!==l&&(i[g]=Math.max(i[g]!==void 0?i[g]:0,v))}function f(g){return s.predecessors(g)||[]}function h(g){return s.successors(g)||[]}return d(a,f),d(u,h),Object.keys(r).forEach(g=>{var y;let v=n[g];v!==void 0&&(i[g]=(y=i[v])!=null?y:0)}),i}function ho(e,t,n,r){let o=new $,i=e.graph(),s=mo(i.nodesep,i.edgesep,r);return t.forEach(l=>{let d;l.forEach(a=>{let u=n[a];if(u!==void 0){if(o.setNode(u),d!==void 0){let f=n[d];if(f!==void 0){let h=o.edge(f,u);o.setEdge(f,u,Math.max(s(e,a,d),h||0))}}d=a}})}),o}function go(e,t){return Object.values(t).reduce((n,r)=>{let o=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;Object.entries(r).forEach(([l,d])=>{let a=xo(e,l)/2;o=Math.max(d+a,o),i=Math.min(d-a,i)});let s=o-i;return s<n[0]&&(n=[s,r]),n},[Number.POSITIVE_INFINITY,null])[1]}function po(e,t){let n=Object.values(t),r=V(Math.min,n),o=V(Math.max,n);["u","d"].forEach(i=>{["l","r"].forEach(s=>{let l=i+s,d=e[l];if(!d||d===t)return;let a=Object.values(d),u=r-V(Math.min,a);s!=="l"&&(u=o-V(Math.max,a)),u&&(e[l]=_e(d,f=>f+u))})})}function bo(e,t=void 0){let n=e.ul;return n?_e(n,(r,o)=>{var i,s;if(t){let d=t.toLowerCase(),a=e[d];if(a&&a[o]!==void 0)return a[o]}let l=Object.values(e).map(d=>{let a=d[o];return a!==void 0?a:0}).sort((d,a)=>d-a);return(((i=l[1])!=null?i:0)+((s=l[2])!=null?s:0))/2}):{}}function yo(e){let t=ye(e),n=Object.assign(so(e,t),lo(e,t)),r={},o;["u","d"].forEach(s=>{o=s==="u"?t:Object.values(t).reverse(),["l","r"].forEach(l=>{l==="r"&&(o=o.map(u=>Object.values(u).reverse()));let d=uo(e,o,n,u=>(s==="u"?e.predecessors(u):e.successors(u))||[]),a=fo(e,o,d.root,d.align,l==="r");l==="r"&&(a=_e(a,u=>-u)),r[s+l]=a})});let i=go(e,r);return po(r,i),bo(r,e.graph().align)}function mo(e,t,n){return(r,o,i)=>{let s=r.node(o),l=r.node(i),d=0,a;if(d+=s.width/2,Object.hasOwn(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":a=-s.width/2;break;case"r":a=s.width/2;break}if(a&&(d+=n?a:-a),a=void 0,d+=(s.dummy?t:e)/2,d+=(l.dummy?t:e)/2,d+=l.width/2,Object.hasOwn(l,"labelpos"))switch(l.labelpos.toLowerCase()){case"l":a=l.width/2;break;case"r":a=-l.width/2;break}return a&&(d+=n?a:-a),d}}function xo(e,t){return e.node(t).width}function wo(e){e=qt(e),vo(e),Object.entries(yo(e)).forEach(([t,n])=>e.node(t).x=n)}function vo(e){let t=ye(e),n=e.graph(),r=n.ranksep,o=n.rankalign,i=0;t.forEach(s=>{let l=s.reduce((d,a)=>{var u;let f=(u=e.node(a).height)!=null?u:0;return d>f?d:f},0);s.forEach(d=>{let a=e.node(d);o==="top"?a.y=i+a.height/2:o==="bottom"?a.y=i+l-a.height/2:a.y=i+l/2}),i+=l+r})}function Eo(e,t={}){let n=t.debugTiming?Vt:Ht;return n("layout",()=>{let r=n(" buildLayoutGraph",()=>Mo(e));return n(" runLayout",()=>ko(r,n,t)),n(" updateInputGraph",()=>jo(e,r)),r})}function ko(e,t,n){t(" makeSpaceForEdgeLabels",()=>Fo(e)),t(" removeSelfEdges",()=>Go(e)),t(" acyclic",()=>ur(e)),t(" nestingGraph.run",()=>Lr(e)),t(" rank",()=>Sr(qt(e))),t(" injectEdgeLabelProxies",()=>Ao(e)),t(" removeEmptyRanks",()=>Jn(e)),t(" nestingGraph.cleanup",()=>Dr(e)),t(" normalizeRanks",()=>Hn(e)),t(" assignRankMinMax",()=>Lo(e)),t(" removeEdgeLabelProxies",()=>Ro(e)),t(" normalize.run",()=>gr(e)),t(" parentDummyChains",()=>Or(e)),t(" addBorderSegments",()=>Pr(e)),t(" order",()=>ln(e,n)),t(" insertSelfEdges",()=>$o(e)),t(" adjustCoordinateSystem",()=>Wr(e)),t(" position",()=>wo(e)),t(" positionSelfEdges",()=>Uo(e)),t(" removeBorderNodes",()=>Wo(e)),t(" normalize.undo",()=>br(e)),t(" fixupEdgeLabelCoords",()=>Po(e)),t(" undoCoordinateSystem",()=>Gr(e)),t(" translateGraph",()=>zo(e)),t(" assignNodeIntersects",()=>Do(e)),t(" reversePoints",()=>Bo(e)),t(" acyclic.undo",()=>hr(e))}function jo(e,t){e.nodes().forEach(n=>{let r=e.node(n),o=t.node(n);r&&(r.x=o.x,r.y=o.y,r.order=o.order,r.rank=o.rank,t.children(n).length&&(r.width=o.width,r.height=o.height))}),e.edges().forEach(n=>{let r=e.edge(n),o=t.edge(n);r.points=o.points,Object.hasOwn(o,"x")&&(r.x=o.x,r.y=o.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}var To=["nodesep","edgesep","ranksep","marginx","marginy"],_o={ranksep:50,edgesep:20,nodesep:50,rankdir:"TB",rankalign:"center"},So=["acyclicer","ranker","rankdir","align","rankalign"],No=["width","height","rank"],It={width:0,height:0},Co=["minlen","weight","width","height","labeloffset"],Io={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},Oo=["labelpos"];function Mo(e){let t=new $({multigraph:!0,compound:!0}),n=ze(e.graph());return t.setGraph(Object.assign({},_o,Re(n,To),Te(n,So))),e.nodes().forEach(r=>{let o=ze(e.node(r)),i=Re(o,No);Object.keys(It).forEach(l=>{i[l]===void 0&&(i[l]=It[l])}),t.setNode(r,i);let s=e.parent(r);s!==void 0&&t.setParent(r,s)}),e.edges().forEach(r=>{let o=ze(e.edge(r));t.setEdge(r,Object.assign({},Io,Re(o,Co),Te(o,Oo)))}),t}function Fo(e){let t=e.graph();t.ranksep/=2,e.edges().forEach(n=>{let r=e.edge(n);r.minlen*=2,r.labelpos.toLowerCase()!=="c"&&(t.rankdir==="TB"||t.rankdir==="BT"?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function Ao(e){e.edges().forEach(t=>{let n=e.edge(t);if(n.width&&n.height){let r=e.node(t.v),o={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};fe(e,"edge-proxy",o,"_ep")}})}function Lo(e){let t=0;e.nodes().forEach(n=>{let r=e.node(n);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,t=Math.max(t,r.maxRank))}),e.graph().maxRank=t}function Ro(e){e.nodes().forEach(t=>{let n=e.node(t);if(n.dummy==="edge-proxy"){let r=n;e.edge(r.e).labelRank=n.rank,e.removeNode(t)}})}function zo(e){let t=Number.POSITIVE_INFINITY,n=0,r=Number.POSITIVE_INFINITY,o=0,i=e.graph(),s=i.marginx||0,l=i.marginy||0;function d(a){let u=a.x,f=a.y,h=a.width,g=a.height;t=Math.min(t,u-h/2),n=Math.max(n,u+h/2),r=Math.min(r,f-g/2),o=Math.max(o,f+g/2)}e.nodes().forEach(a=>d(e.node(a))),e.edges().forEach(a=>{let u=e.edge(a);Object.hasOwn(u,"x")&&d(u)}),t-=s,r-=l,e.nodes().forEach(a=>{let u=e.node(a);u.x-=t,u.y-=r}),e.edges().forEach(a=>{let u=e.edge(a);u.points.forEach(f=>{f.x-=t,f.y-=r}),Object.hasOwn(u,"x")&&(u.x-=t),Object.hasOwn(u,"y")&&(u.y-=r)}),i.width=n-t+s,i.height=o-r+l}function Do(e){e.edges().forEach(t=>{let n=e.edge(t),r=e.node(t.v),o=e.node(t.w),i,s;n.points?(i=n.points[0],s=n.points[n.points.length-1]):(n.points=[],i=o,s=r),n.points.unshift(wt(r,i)),n.points.push(wt(o,s))})}function Po(e){e.edges().forEach(t=>{let n=e.edge(t);if(Object.hasOwn(n,"x"))switch((n.labelpos==="l"||n.labelpos==="r")&&(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset;break}})}function Bo(e){e.edges().forEach(t=>{let n=e.edge(t);n.reversed&&n.points.reverse()})}function Wo(e){e.nodes().forEach(t=>{if(e.children(t).length){let n=e.node(t),r=e.node(n.borderTop),o=e.node(n.borderBottom),i=e.node(n.borderLeft[n.borderLeft.length-1]),s=e.node(n.borderRight[n.borderRight.length-1]);n.width=Math.abs(s.x-i.x),n.height=Math.abs(o.y-r.y),n.x=i.x+n.width/2,n.y=r.y+n.height/2}}),e.nodes().forEach(t=>{e.node(t).dummy==="border"&&e.removeNode(t)})}function Go(e){e.edges().forEach(t=>{if(t.v===t.w){let n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function $o(e){ye(e).forEach(t=>{let n=0;t.forEach((r,o)=>{let i=e.node(r);i.order=o+n,(i.selfEdges||[]).forEach(s=>{fe(e,"selfedge",{width:s.label.width,height:s.label.height,rank:i.rank,order:o+ ++n,e:s.e,label:s.label},"_se")}),delete i.selfEdges})})}function Uo(e){e.nodes().forEach(t=>{let n=e.node(t);if(n.dummy==="selfedge"){let r=n,o=e.node(r.e.v),i=o.x+o.width/2,s=o.y,l=n.x-i,d=o.height/2;e.setEdge(r.e,r.label),e.removeNode(t),r.label.points=[{x:i+2*l/3,y:s-d},{x:i+5*l/6,y:s-d},{x:i+l,y:s},{x:i+5*l/6,y:s+d},{x:i+2*l/3,y:s+d}],r.label.x=n.x,r.label.y=n.y}})}function Re(e,t){return _e(Te(e,t),Number)}function ze(e){let t={};return e&&Object.entries(e).forEach(([n,r])=>{typeof n=="string"&&(n=n.toLowerCase()),t[n]=r}),t}function Yo(e){let t=ye(e),n=new $({compound:!0,multigraph:!0}).setGraph({});return e.nodes().forEach(r=>{n.setNode(r,{label:r}),n.setParent(r,"layer"+e.node(r).rank)}),e.edges().forEach(r=>n.setEdge(r.v,r.w,{},r.name)),t.forEach((r,o)=>{let i="layer"+o;n.setNode(i,{rank:"same"}),r.reduce((s,l)=>(n.setEdge(s,l,{style:"invis"}),l))}),n}var qo={graphlib:zt,version:nr,layout:Eo,debug:Yo,util:{time:Vt,notime:Ht}},Ot=qo;/*! For license information please see dagre.esm.js.LEGAL.txt */const Ko=e=>{const t=[];return e.nodeInternals.forEach((n,r)=>t.push(`${r}:${n.height??0}`)),t.join(",")},Xo=({onHeightsReady:e,nodeCount:t})=>{const n=ce.useStore(Ko),r=p.useRef("");p.useRef(0);const{fitView:o}=ce.useReactFlow();return p.useEffect(()=>{if(!n||n===r.current)return;const i={};for(const s of n.split(",")){const[l,d]=s.split(":"),a=Number(d);l&&a>0&&(i[l]=a)}Object.keys(i).length!==0&&(r.current=n,e(i))},[n]),null},Ne=({isOpen:e,onClose:t,title:n,icon:r,children:o,footer:i,width:s=600})=>{const[l,d]=p.useState(!1),a=()=>d(h=>!h),u=()=>c.jsxs(P.Box,{sx:{display:"flex",alignItems:"center",p:2,pt:3,borderBottom:"1px solid #e0e0e0",mb:0,flexShrink:0},children:[r&&c.jsx(P.Box,{sx:{mr:1.5,display:"flex",alignItems:"center",fontSize:"1.25rem",color:"#1DBF60"},children:r}),c.jsx("span",{style:{flexGrow:1,fontSize:14,fontWeight:500,color:"#212121"},children:n}),c.jsx(P.IconButton,{onClick:a,size:"small",sx:{mr:1},title:l?"Collapse":"Expand","data-testid":"expand-collapse-base-drawer-btn",children:l?c.jsx(yt.BiCollapse,{}):c.jsx(yt.BiExpand,{})}),c.jsx(P.IconButton,{onClick:t,size:"small","data-testid":"close-drawer-button",children:c.jsx(O.MdClose,{})})]}),f=()=>i?c.jsx(P.Box,{sx:{flexShrink:0,p:2,borderTop:"1px solid #e0e0e0",display:"flex",justifyContent:"flex-end",gap:2},children:i}):null;return l?c.jsxs(P.Dialog,{open:e,onClose:t,maxWidth:!1,fullWidth:!0,PaperProps:{sx:{display:"flex",flexDirection:"column",height:"80vh",boxShadow:24,width:"750px",maxWidth:"100%"}},children:[c.jsx(u,{}),c.jsx(P.Box,{sx:{flexGrow:1,overflowY:"auto",p:0},children:o}),c.jsx(f,{})]}):c.jsxs(P.Drawer,{anchor:"right",open:e,onClose:t,variant:"persistent",sx:{zIndex:900},ModalProps:{keepMounted:!1},PaperProps:{sx:{width:s,position:"fixed",top:"64px",height:"calc(100% - 74px)",right:"10px",borderRadius:"8px",border:"1px solid #bdbdbd",boxShadow:"none",zIndex:900,display:"flex",flexDirection:"column"}},children:[c.jsx(u,{}),c.jsx(P.Box,{sx:{flexGrow:1,overflowY:"auto",p:0},children:o}),c.jsx(f,{})]})},Vo=({open:e,templates:t,messages:n,onSelect:r,onClose:o,loadTriggerSources:i})=>{const[s,l]=p.useState("trigger"),[d,a]=p.useState(null),[u,f]=p.useState([]),[h,g]=p.useState([]),[y,v]=p.useState(!1),[m,k]=p.useState(null);p.useEffect(()=>{e||(l("trigger"),a(null),f([]),g([]),v(!1),k(null))},[e]);const _=p.useCallback(async A=>{if(!i){r(A);return}a(A),v(!0),k(null);try{const D=await i(A.triggerKey);if(!D||D.length===0){r(A);return}f(D),l("sources")}catch(D){k(D instanceof Error?D.message:"Failed to load sources.")}finally{v(!1)}},[i,r]),I=()=>{l("trigger"),a(null),f([]),g([]),k(null)},F=()=>{d&&r(d,h)},M=s==="sources"&&d,G=M?c.jsxs(c.Fragment,{children:[c.jsx(P.Button,{type:"button",variant:"outlined",size:"small",onClick:I,children:n.cancel??"Back"}),c.jsx(P.Button,{type:"button",variant:"contained",size:"small",onClick:F,disabled:h.length===0,children:n.save??"Continue"})]}):null;return c.jsx(Ne,{isOpen:e,onClose:o,title:M?d.label:n.addTriggerTitle,icon:c.jsx(wn.GrTrigger,{}),width:500,footer:G,children:c.jsxs(P.Box,{sx:{p:2},children:[!M&&c.jsxs(c.Fragment,{children:[c.jsx("p",{className:"ff-text-muted ff-mb-3",style:{fontSize:13},children:n.chooseTrigger}),c.jsxs("div",{className:"ff-d-flex ff-flex-column ff-gap-2",children:[t.map(A=>c.jsxs("div",{className:"ff-p-3 ff-rounded ff-border ff-d-flex ff-align-items-start ff-gap-3",style:{cursor:y?"wait":"pointer",transition:"background 0.15s",opacity:y?.6:1},onClick:()=>!y&&_(A),role:"button",tabIndex:0,onKeyDown:D=>{D.key==="Enter"&&!y&&_(A)},onMouseEnter:D=>{y||(D.currentTarget.style.background="#f5f5f5")},onMouseLeave:D=>{D.currentTarget.style.background=""},children:[c.jsx("div",{style:{color:A.triggerCategory==="scheduler"?"#1976d2":"#f57c00",marginTop:2,flexShrink:0},children:A.triggerCategory==="scheduler"?c.jsx(O.MdCalendarToday,{size:18}):c.jsx(O.MdBolt,{size:18})}),c.jsxs("div",{children:[c.jsx("div",{style:{fontSize:14,fontWeight:500,color:"#212121"},children:A.label}),A.description&&c.jsx("div",{style:{fontSize:12,color:"#757575",marginTop:2},children:A.description})]})]},A.triggerKey)),t.length===0&&c.jsx("p",{className:"ff-text-muted ff-text-center",style:{fontSize:13},children:n.noTriggers})]}),y&&c.jsxs(P.Box,{sx:{display:"flex",alignItems:"center",gap:1,mt:2,fontSize:12,color:"#64748b"},children:[c.jsx(P.CircularProgress,{size:14}),c.jsx("span",{children:"Loading sources for the selected trigger…"})]}),m&&c.jsx("p",{style:{fontSize:12,color:"#d32f2f",marginTop:12},children:m})]}),M&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{role:"button",tabIndex:0,onClick:I,onKeyDown:A=>{A.key==="Enter"&&I()},className:"ff-d-flex ff-align-items-center ff-gap-1 ff-mb-3",style:{cursor:"pointer",color:"#0066cc",fontSize:13,fontWeight:500,width:"fit-content"},children:[c.jsx(O.MdArrowBack,{size:16}),c.jsx("span",{children:n.addTriggerTitle})]}),c.jsxs("p",{className:"ff-text-muted ff-mb-2",style:{fontSize:13},children:["Pick one or more sources for ",c.jsx("strong",{children:d.label}),":"]}),c.jsx(xn,{isMulti:!0,options:u,value:h,onChange:A=>g(A??[]),placeholder:"Select sources…",menuPosition:"fixed",menuPortalTarget:typeof document<"u"?document.body:void 0,styles:Lt.buildSelectStyles(!1,!0)})]})]})})},De={cursor:"pointer",transition:"background 0.15s"},Pe="ff-p-3 ff-rounded ff-border ff-d-flex ff-align-items-center ff-gap-3",Ho=({open:e,availableDescriptors:t,messages:n,onSelect:r,onClose:o})=>{const{apps:i,ungrouped:s}=p.useMemo(()=>{const f=new Map,h=[];for(const g of t)if(g.app){const y=f.get(g.app.key);y?y.descriptors.push(g):f.set(g.app.key,{key:g.app.key,label:g.app.label,icon:g.app.icon,description:g.app.description,descriptors:[g]})}else h.push(g);return{apps:[...f.values()],ungrouped:h}},[t]),[l,d]=p.useState(null),a=l?i.find(f=>f.key===l)??null:null;p.useEffect(()=>{e||d(null)},[e]),p.useEffect(()=>{d(null)},[t]);const u=!a;return c.jsx(Ne,{isOpen:e,onClose:o,title:u?n.addStepTitle:a.label,icon:u?c.jsx(O.MdAddCircleOutline,{}):a.icon??c.jsx(O.MdApps,{}),width:500,children:c.jsxs(P.Box,{sx:{p:2},children:[!u&&c.jsxs("div",{role:"button",tabIndex:0,onClick:()=>d(null),onKeyDown:f=>{f.key==="Enter"&&d(null)},className:"ff-d-flex ff-align-items-center ff-gap-1 ff-mb-3",style:{cursor:"pointer",color:"#0066cc",fontSize:13,fontWeight:500,width:"fit-content"},children:[c.jsx(O.MdArrowBack,{size:16}),c.jsx("span",{children:n.addStepTitle})]}),c.jsx("p",{className:"ff-text-muted ff-mb-3",style:{fontSize:13},children:u?n.chooseAction:`Pick an action from ${a.label}`}),c.jsx("div",{className:"ff-d-flex ff-flex-column ff-gap-2",children:u?c.jsxs(c.Fragment,{children:[i.map(f=>c.jsxs("div",{className:Pe,style:De,onClick:()=>d(f.key),role:"button",tabIndex:0,onKeyDown:h=>{h.key==="Enter"&&d(f.key)},onMouseEnter:h=>{h.currentTarget.style.background="#f5f5f5"},onMouseLeave:h=>{h.currentTarget.style.background=""},children:[f.icon&&c.jsx("div",{style:{flexShrink:0},children:f.icon}),c.jsxs("div",{style:{flex:1,minWidth:0},children:[c.jsx("div",{style:{fontSize:14,fontWeight:500,color:"#212121"},children:f.label}),c.jsx("div",{style:{fontSize:12,color:"#757575",marginTop:2},children:f.description??`${f.descriptors.length} action${f.descriptors.length===1?"":"s"}`})]}),c.jsx(O.MdChevronRight,{size:18,color:"#9e9e9e"})]},`app-${f.key}`)),s.map(f=>c.jsxs("div",{className:Pe,style:De,onClick:()=>r(f),role:"button",tabIndex:0,onKeyDown:h=>{h.key==="Enter"&&r(f)},onMouseEnter:h=>{h.currentTarget.style.background="#f5f5f5"},onMouseLeave:h=>{h.currentTarget.style.background=""},children:[f.icon&&c.jsx("div",{style:{flexShrink:0},children:f.icon}),c.jsx("span",{style:{fontSize:14,fontWeight:500,color:"#212121"},children:f.label})]},f.type)),i.length===0&&s.length===0&&c.jsx("p",{className:"ff-text-muted ff-text-center",style:{fontSize:13},children:n.noActions})]}):a.descriptors.map(f=>c.jsxs("div",{className:Pe,style:De,onClick:()=>r(f),role:"button",tabIndex:0,onKeyDown:h=>{h.key==="Enter"&&r(f)},onMouseEnter:h=>{h.currentTarget.style.background="#f5f5f5"},onMouseLeave:h=>{h.currentTarget.style.background=""},children:[f.icon&&c.jsx("div",{style:{flexShrink:0},children:f.icon}),c.jsx("span",{style:{fontSize:14,fontWeight:500,color:"#212121"},children:f.label})]},f.type))})]})})},Mt="_conditionConfig",Jo=({open:e,nodeId:t,descriptor:n,initialValues:r,messages:o,onSave:i,onClose:s})=>{const[l,d]=p.useState([]),[a,u]=p.useState(!1),[f,h]=p.useState(null),[g,y]=p.useState({});p.useEffect(()=>{y((r==null?void 0:r[Mt])??{})},[r,t]),p.useEffect(()=>{let _=!1;if(h(null),!n||!t){d([]),u(!1);return}const I=n.formSchema;return typeof I=="function"?(u(!0),I(t).then(F=>{_||(d(F),u(!1))}).catch(F=>{_||(d([]),h(F instanceof Error?F.message:"Unable to load configuration."),u(!1))})):(d(I),u(!1)),()=>{_=!0}},[n,t]);const v=t?`node-config-form-${t}`:"node-config-form",m=!a&&!f&&l.length>0,k=m?c.jsxs(c.Fragment,{children:[c.jsx(P.Button,{type:"button",variant:"outlined",size:"small",onClick:s,children:o.cancel}),c.jsx(P.Button,{type:"submit",form:v,variant:"contained",size:"small",children:o.save})]}):null;return c.jsx(Ne,{isOpen:e,onClose:s,title:(n==null?void 0:n.label)??o.configureStep,icon:n==null?void 0:n.icon,width:500,footer:k,children:c.jsxs(P.Box,{sx:{p:2},children:[a&&c.jsx("p",{className:"ff-text-muted",style:{fontSize:13},children:o.loadingConfiguration}),!a&&f&&c.jsx("p",{style:{fontSize:13,color:"#d32f2f"},children:f}),!a&&!f&&l.length===0&&c.jsx("p",{className:"ff-text-muted",style:{fontSize:13},children:o.noConfigurationNeeded}),m&&c.jsx(Lt.FlowForm,{schema:{layout:"flat",fields:l},initialValues:r??{},formId:v,conditionConfig:g,onConditionConfigChange:y,onSubmit:_=>{if(!t)return;const I=Object.keys(g).length>0;i(t,{..._,[Mt]:I?g:void 0}),s()}})]})})},dn=({isOpen:e,onClose:t,workflowId:n,workflowLabel:r,onFetchWorkflow:o})=>{const[i,s]=p.useState({status:"idle"});return p.useEffect(()=>{if(!e||!n){s({status:"idle"});return}s({status:"loading"}),o(n).then(l=>s({status:"loaded",state:l})).catch(l=>s({status:"error",message:(l==null?void 0:l.message)??"Failed to load workflow"}))},[e,n,o]),c.jsx(Ne,{isOpen:e,onClose:t,title:r?`Preview: ${r}`:"Sub-Workflow Preview",icon:c.jsx(O.MdAccountTree,{size:18,color:"#00695c"}),width:700,children:c.jsxs("div",{style:{height:"100%",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:24},children:[i.status==="idle"&&c.jsx("span",{style:{color:"#9e9e9e",fontSize:14},children:"Select a workflow to preview"}),i.status==="loading"&&c.jsxs("div",{style:{textAlign:"center",color:"#9e9e9e"},children:[c.jsx("div",{style:{width:32,height:32,borderRadius:"50%",border:"3px solid #e0e0e0",borderTopColor:"#00897b",animation:"spin 0.8s linear infinite",margin:"0 auto 12px"}}),c.jsx("span",{style:{fontSize:14},children:"Loading workflow…"}),c.jsx("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),i.status==="error"&&c.jsxs("div",{style:{textAlign:"center",color:"#c62828"},children:[c.jsx(O.MdErrorOutline,{size:32,style:{marginBottom:8}}),c.jsx("p",{style:{margin:0,fontSize:14},children:i.message})]}),i.status==="loaded"&&c.jsx("div",{style:{width:"100%",flex:1},children:c.jsx(Zo,{state:i.state})})]})})},Zo=({state:e})=>{const[t,n]=p.useState(null),[r,o]=p.useState(null);return p.useEffect(()=>{Promise.all([Promise.resolve().then(()=>oi).then(i=>i.default),Promise.resolve().then(()=>require("./nodeRegistry.cjs")).then(i=>i.nodeTypeRegistry),Promise.resolve().then(()=>require("./templateRegistry.cjs")).then(i=>i.templateRegistry)]).then(([i,s,l])=>{n(()=>i),o({nodeTypeRegistry:s,templateRegistry:l})})},[]),!t||!r?c.jsx("div",{style:{color:"#9e9e9e",fontSize:13,textAlign:"center"},children:"Loading canvas…"}):c.jsx("div",{style:{width:"100%",height:480,border:"1px solid #e0e0e0",borderRadius:8,overflow:"hidden"},children:c.jsx(t,{nodeRegistry:r.nodeTypeRegistry,templateRegistry:r.templateRegistry,initialValue:e,readOnly:!0})})},be=350,Ge=70,$e=60,Ue={startNode:40,endNode:40,addTriggerNode:56,triggerNode:110,actionNode:90,filterNode:90,approvalNode:90,delayNode:80,notificationNode:80},Qo={plusEdge:oe.PlusEdge,labelPlusEdge:oe.LabelPlusEdge,plainEdge:oe.PlainEdge,edgeWithPlusLabel:oe.EdgeWithPlusLabel,gatewayBranchEdge:oe.GatewayBranchEdge};function Ft(){return[{id:"start",kind:"start",reactFlowType:"startNode"},{id:"addTrigger",kind:"addTrigger",reactFlowType:"addTriggerNode"},{id:"end",kind:"end",reactFlowType:"endNode"}]}function ei(e,t,n,r="TB"){const o=new Ot.graphlib.Graph;return o.setGraph({rankdir:r,ranksep:70,nodesep:50}),o.setDefaultEdgeLabel(()=>({})),e.forEach(i=>{const s=n[i.id]??{width:be,height:Ue[i.type??""]??80};o.setNode(i.id,{width:s.width,height:s.height})}),t.forEach(i=>o.setEdge(i.source,i.target)),Ot.layout(o),e.map(i=>{var a,u;const s=o.node(i.id),l=((a=n[i.id])==null?void 0:a.width)??be,d=((u=n[i.id])==null?void 0:u.height)??Ue[i.type??""]??80;return{...i,position:{x:s.x-l/2,y:s.y-d/2}}})}const ie=e=>e==="filter"||e==="approval";function ti(e,t,n,r){const s=Ge,l=30,d=30,a={},u={},f=new Map;for(const m of e)f.set(m.id,m);for(const m of Object.values(t))for(const k of Object.values(m))for(const _ of k)f.set(_.id,_);const h=(m,k,_)=>{const I=r[m]??{width:be,height:80};return a[m]={x:k-I.width/2,y:_},_+I.height},g=(m,k,_)=>{let I=_;for(const F of m)I=h(F.id,k,I)+s,ie(F.kind)&&t[F.id]&&(I=y(F.id,k,I));return I},y=(m,k,_)=>{const I=k+180,F=t[m],M=Object.keys(F),G=f.get(m),A=(G==null?void 0:G.branchLabels)??{pass:"Pass",fail:"Fail"},D=a[m],W=r[m]??{height:80},me=D.y+W.height,xe=[];let Z=_;return M.forEach((le,he)=>{const ee=F[le],R=Z;xe.push({y:R-me,label:A[le]??le,isPass:he===0}),Z=g(ee,I,Z+d),he<M.length-1&&(Z+=l)}),u[m]={branches:xe,height:Z-me,indent:180},Z};let v=$e;for(const m of e)v=h(m.id,400,v)+s,ie(m.kind)&&t[m.id]&&(v=y(m.id,400,v));return{nodes:n.map(m=>a[m.id]?{...m,position:a[m.id]}:m),railSpecs:u}}function At(e){return{id:e.id,type:e.reactFlowType,position:{x:0,y:0},data:{...e.nodeData,...e.formData,descriptorType:e.descriptorType},draggable:!1,selectable:!1}}function ni(e,t,n,r,o){return{id:`e-${e.id}-${t.id}`,source:e.id,target:t.id,type:"plusEdge",style:{stroke:n},data:{onAddStepClick:r,referenceNodeType:e.reactFlowType,...o??{}}}}function ri(e,t,n,r,o={},i="TB",s="horizontal"){const l=o.edgeColor??"#b0bec5",d=[],a=[],u=(y,v)=>{const m=t[y];if(!m)return;const _=v??{pass:"Pass",fail:"Fail"},I=Object.keys(m),F=(M,G,A,D)=>{if(M.length!==0){M.forEach(W=>d.push(At(W))),a.push({id:`e-${y}-${G}-start`,source:y,target:M[0].id,type:"gatewayBranchEdge",style:{stroke:l},data:{branch:G,filterId:y,label:A,isFirst:D===0,onAddStepClick:n,verticalRouting:s==="vertical"}});for(let W=1;W<M.length;W++)ie(M[W-1].kind)||a.push(ni(M[W-1],M[W],l,n,{filterId:y,branch:G}));for(const W of M)ie(W.kind)&&t[W.id]&&u(W.id,W.branchLabels)}};I.forEach((M,G)=>{F(m[M],M,_[M]??M,G)})};for(let y=0;y<e.length;y++){const v=e[y];if(d.push(At(v)),y>0){const m=e[y-1],k=m.kind==="start"||m.kind==="addTrigger";if(m.kind==="filter"||m.kind==="approval")continue;a.push({id:`e-${m.id}-${v.id}`,source:m.id,target:v.id,type:k?"plainEdge":"plusEdge",style:{stroke:l},data:k?{}:{onAddStepClick:n,referenceNodeType:m.reactFlowType}})}(v.kind==="filter"||v.kind==="approval")&&t[v.id]&&u(v.id,v.branchLabels)}const f={};if(d.forEach(y=>{f[y.id]={width:be,height:r[y.id]??Ue[y.type??""]??80}}),!(Object.keys(t).length>0)){if(i==="LR"){let _=$e;return{nodes:d.map(F=>{const M=f[F.id].width,G=f[F.id].height,A={...F,position:{x:_,y:300-G/2}};return _+=M+Ge,A}),edges:a}}const y=400;let v=$e;return{nodes:d.map(k=>{const _=f[k.id].height,I={...k,position:{x:y-be/2,y:v}};return v+=_+Ge,I}),edges:a}}if(s==="vertical"){const{nodes:y,railSpecs:v}=ti(e,t,d,f);return{nodes:y.map(k=>v[k.id]?{...k,data:{...k.data,_branchRail:v[k.id]}}:k),edges:a}}return{nodes:ei(d,a,f,i),edges:a}}const Ye=({nodeRegistry:e,templateRegistry:t,initialValue:n,nodeTypes:r,edgeTypes:o,onSave:i,readOnly:s=!1,theme:l={},messages:d,canvasOptions:a={},renderTriggerSelector:u,loadTriggerSources:f,renderNodePicker:h,renderNodeConfig:g,onNodeClick:y,maxNodes:v,layoutDirection:m="TB",executionRecord:k,onFetchWorkflow:_})=>{const{fitView:I=!0,fitViewPadding:F=.3,showControls:M=!0,showMiniMap:G=!1,panOnScroll:A=!0,zoomOnScroll:D=!1,minZoom:W=.25,maxZoom:me=2,snapToGrid:xe=!1,snapGrid:Z=[15,15],branchLayout:le="horizontal",nodeBody:he="full"}=a,ee=p.useMemo(()=>vn.mergeMessages(d),[d]),[R,te]=p.useState(()=>(n==null?void 0:n.slots)??Ft()),[U,H]=p.useState(()=>(n==null?void 0:n.branches)??{}),[ae,Y]=p.useState(null),[Ce,Ze]=p.useState(null),[q,we]=p.useState(null),[ne,Qe]=p.useState(null),[ve,et]=p.useState(null),[K,tt]=p.useState(()=>{const b=n==null?void 0:n.slots.find(T=>T.kind==="triggerFixed"),w=b!=null&&b.id.startsWith("trigger-")?b.id.slice(8):void 0;return w?t.lookup(w)??null:null}),[nt,un]=p.useState({}),fn=p.useCallback(b=>{un(b)},[]),hn=p.useMemo(()=>({...oe.builtInNodeTypes,...r}),[r]),gn=p.useMemo(()=>({...Qo,...o}),[o]),pn=p.useMemo(()=>{const b=R.filter(T=>T.kind==="userTask").length,w=Object.values(U).flatMap(T=>Object.values(T).flat()).filter(T=>T.kind==="userTask").length;return b+w},[R,U]),rt=v??(K==null?void 0:K.maxTasks),ot=rt!==void 0&&pn>=rt,re=p.useCallback(b=>{const w=R.find(T=>T.id===b);if(w)return w;for(const T of Object.values(U)){const E=Object.values(T).flat().find(C=>C.id===b);if(E)return E}return null},[R,U]),Ie=p.useCallback(b=>{s||(Ze(b),Y("nodeConfig"))},[s]),it=p.useCallback(b=>{if(!s){if(R.some(w=>w.id===b)){const w=R.find(T=>T.id===b);if((w==null?void 0:w.kind)==="triggerFixed"){te(Ft()),H({}),tt(null);return}te(T=>{const E=T.filter(C=>C.id!==b);return ie((w==null?void 0:w.kind)??"")&&!E.some(C=>C.kind==="end")?[...E,{id:"end",kind:"end",reactFlowType:"endNode"}]:E}),H(T=>{const E={...T},C=x=>{E[x]&&(Object.values(E[x]).flat().filter(j=>ie(j.kind)).forEach(j=>C(j.id)),delete E[x])};return C(b),E});return}H(w=>{const T=(C,x)=>{const j=[];for(const S of C)ie(S.kind)&&x[S.id]&&(j.push(S.id),Object.values(x[S.id]).forEach(N=>j.push(...T(N,x))));return j},E={...w};for(const C of Object.keys(E))for(const x of Object.keys(E[C])){const j=E[C][x],S=j.findIndex(z=>z.id===b);if(S===-1||j[S].kind==="end")continue;const N=j[S];let L=j.filter(z=>z.id!==b);return N.kind==="filter"&&((N.id in E?T([N],E):[]).forEach(B=>delete E[B]),delete E[N.id],L.some(B=>B.kind==="end")||(L=[...L,{id:`end-${C}-${x}`,kind:"end",reactFlowType:"endNode"}])),E[C]={...E[C],[x]:L},E}return E})}},[s,R]),Oe=p.useCallback(()=>{s||Y("triggerSelect")},[s]),st=p.useCallback((b,w)=>{s||ot||(we(b),Qe(w.filterId&&w.branch?{filterId:w.filterId,branch:w.branch}:null),Y("nodePicker"))},[s,ot]),lt=p.useCallback((b,w)=>{if(tt(b),Y(null),b.skeletonState){const E=Array.isArray(w)&&w.length>0,C=(b.skeletonState.slots??[]).map(x=>x.kind!=="triggerFixed"?x:{...x,nodeData:{label:b.label,...x.nodeData??{},...E&&{sources:w}}});H(b.skeletonState.branches??{}),te(C);return}H({});const T=Array.isArray(w)&&w.length>0;te([{id:"start",kind:"start",reactFlowType:"startNode"},{id:`trigger-${b.triggerKey}`,kind:"triggerFixed",reactFlowType:"triggerNode",nodeData:{label:b.label,source:b.source,eventType:b.triggerKey,type:b.triggerCategory==="scheduler"?"scheduler":"event",...T&&{sources:w}},deletable:!1},{id:"end",kind:"end",reactFlowType:"endNode"}])},[]),at=p.useCallback(()=>{var T;const b={insertAfterSlot:null,upstreamSlots:[],downstreamSlots:[],branch:ne,template:K};if(!q)return b;if(ne){const{filterId:E,branch:C}=ne,x=R.findIndex(z=>z.id===E),j=x>=0?R.slice(0,x+1):[],S=((T=U[E])==null?void 0:T[C])??[],N=S.findIndex(z=>z.id===q),L=N>=0?S.slice(0,N+1):[];return b.upstreamSlots=[...j,...L],b.downstreamSlots=N>=0?S.slice(N+1):S,b.insertAfterSlot=L[L.length-1]??null,b}const w=R.findIndex(E=>E.id===q);return b.upstreamSlots=w>=0?R.slice(0,w+1):[],b.downstreamSlots=w>=0?R.slice(w+1):[],b.insertAfterSlot=b.upstreamSlots[b.upstreamSlots.length-1]??null,b},[R,U,q,ne,K]),dt=(b,w)=>b.descriptorType===w||b.id===w||b.kind===w,ct=p.useCallback(()=>{const b=e.list(),w=K!=null&&K.availableTasks?b.filter(E=>K.availableTasks.includes(E.type)):b,T=at();return w.filter(E=>E.maxPerWorkflow!==void 0&&R.filter(x=>x.descriptorType===E.type).length+Object.values(U).flatMap(x=>Object.values(x).flat()).filter(x=>x.descriptorType===E.type).length>=E.maxPerWorkflow?!1:E.canInsert?E.canInsert(T):!(E.insertAfter&&E.insertAfter.length>0&&!T.upstreamSlots.some(x=>E.insertAfter.some(j=>dt(x,j)))||E.insertBefore&&E.insertBefore.length>0&&!T.downstreamSlots.some(x=>E.insertBefore.some(j=>dt(x,j)))))},[e,K,R,U,at]),ut=p.useCallback(b=>{if(!q)return;const w=`${b.type}-${Date.now()}`,T=b.reactFlowType==="filterNode"||b.reactFlowType==="approvalNode"||b.reactFlowType==="conditionBranchNode",E=b.branchLabels??{pass:"Pass",fail:"Fail"},C={id:w,kind:T?b.reactFlowType==="approvalNode"?"approval":"filter":"userTask",reactFlowType:b.reactFlowType,descriptorType:b.type,formData:{},nodeData:{title:b.label},deletable:!0,branchLabels:E};if(ne){const{filterId:x,branch:j}=ne;H(S=>{const N=[...S[x][j]];if(T){const Q=N.filter(de=>de.kind!=="end"),bt=Q.findIndex(de=>de.id===q),mn=bt===-1?Q.length:bt+1;return Q.splice(mn,0,C),{...S,[x]:{...S[x],[j]:Q},[w]:Object.fromEntries(Object.keys(E).map(de=>[de,[{id:`end-${w}-${de}`,kind:"end",reactFlowType:"endNode"}]]))}}const L=N.findIndex(Q=>Q.id===q),z=N.findIndex(Q=>Q.kind==="end"),B=L===-1?z===-1?N.length:z:L+1;return N.splice(B,0,C),{...S,[x]:{...S[x],[j]:N}}})}else T?(te(x=>{const j=x.findIndex(N=>N.id===q);return[...x.filter(N=>N.kind!=="end").slice(0,j+1),C]}),H(x=>({...x,[w]:Object.fromEntries(Object.keys(E).map(j=>[j,[{id:`end-${w}-${j}`,kind:"end",reactFlowType:"endNode"}]]))}))):te(x=>{const j=x.findIndex(S=>S.id===q);return j===-1?x:[...x.slice(0,j+1),C,...x.slice(j+1)]});we(null),Qe(null),Ze(w),Y("nodeConfig")},[q,ne]),ft=p.useCallback((b,w)=>{const T=x=>{const j=x.label||x.key;switch(x.kind){case"if":return`IF · ${j}`;case"elseif":return`ELSE IF · ${j}`;case"else":return j.toUpperCase()==="ELSE"?j:`ELSE · ${j}`;default:return j}},E=x=>{const j=re(b);if((j==null?void 0:j.descriptorType)!=="conditionBranch")return x;const N=(w.branchConfigs??[]).map(B=>B.key).filter(Boolean);if(N.length===0)return x;const L=x[b]??{},z={};return N.forEach(B=>{z[B]=L[B]??[{id:`end-${b}-${B}`,kind:"end",reactFlowType:"endNode"}]}),{...x,[b]:z}},C=(x,j)=>{if(x.descriptorType!=="conditionBranch")return{...x,formData:j};const S=j.branchConfigs??[],N={};return S.forEach(L=>{L.key&&(N[L.key]=T(L))}),{...x,formData:j,branchLabels:N}};if(R.some(x=>x.id===b)){H(x=>{const j=E(x);return te(S=>{const N=S.map(L=>L.id===b?C(L,w):L);return i==null||i({slots:N,branches:j}),N}),j});return}H(x=>{const S={...E(x)};for(const N of Object.keys(S)){const L=z=>z.map(B=>B.id===b?C(B,w):B);for(const z of Object.keys(S[N]))if(S[N][z].some(B=>B.id===b))return S[N]={...S[N],[z]:L(S[N][z])},i==null||i({slots:R,branches:S}),S}return S})},[R,U,re,i]),J=p.useMemo(()=>re(Ce??""),[re,Ce]),ht=p.useMemo(()=>J!=null&&J.descriptorType?e.forType(J.descriptorType)??null:null,[J,e]),{nodes:gt,edges:bn}=p.useMemo(()=>ri(R,U,s?null:st,nt,l,m,le),[R,U,s,st,nt,l,m,le]),pt=p.useMemo(()=>{const b=k?new Map(k.steps.map(w=>[w.nodeId,w])):null;return gt.map(w=>{let T={};if(b){const E=b.get(w.id);E&&(T={_executionStatus:E.status,_executionError:E.error})}return w.type==="subWorkflowNode"&&_&&(T.onPreview=E=>{var x;const C=re(w.id);et({workflowId:E,workflowLabel:((x=C==null?void 0:C.formData)==null?void 0:x.workflowLabel)??void 0})}),Object.keys(T).length>0?{...w,data:{...w.data,...T}}:w})},[gt,k,_,re]),yn=p.useMemo(()=>({onEditNode:Ie,onDeleteNode:it,onAddStep:()=>{},onClickAddTrigger:Oe,messages:ee,nodeRegistry:e,nodeBody:he}),[Ie,it,Oe,ee,e,he]);return c.jsx(oe.WorkflowCanvasContext.Provider,{value:yn,children:c.jsxs("div",{className:"flowforge-canvas",style:{width:"100%",height:"100%",position:"relative","--ff-primary":l.primaryColor??"#1dbf60","--ff-edge-color":l.edgeColor??"#b0bec5","--ff-text":l.textColor??"#212121","--ff-muted":l.mutedTextColor??"#9ca3af","--ff-surface":l.surfaceColor??"#fff","--ff-border":l.borderColor??"#dee2e6","--ff-danger":l.dangerColor??"#d32f2f","--ff-radius":`${l.borderRadius??6}px`,"--ff-font-family":l.fontFamily},children:[c.jsxs(ce,{nodes:pt,edges:bn,nodeTypes:hn,edgeTypes:gn,fitView:I,fitViewOptions:{padding:F},nodesDraggable:!1,nodesConnectable:!1,panOnScroll:A,zoomOnScroll:D,minZoom:W,maxZoom:me,snapToGrid:xe,snapGrid:Z,proOptions:{hideAttribution:!0},onNodeClick:(b,w)=>{const T=re(w.id);T&&(y!=null&&y(T)||(T.kind==="addTrigger"||T.kind==="triggerFixed"?Oe():(T.kind==="userTask"||T.kind==="filter"||T.kind==="approval")&&Ie(w.id)))},children:[l.background!=="none"&&c.jsx(ce.Background,{variant:l.background,color:l.backgroundColor??"#e0e0e0",gap:20}),M&&c.jsx(ce.Controls,{showInteractive:!1}),G&&c.jsx(ce.MiniMap,{zoomable:!0,pannable:!0}),c.jsx(Xo,{onHeightsReady:fn,nodeCount:pt.length})]}),u?ae==="triggerSelect"&&u(t.list(),lt,()=>Y(null)):c.jsx(Vo,{open:ae==="triggerSelect",templates:t.list(),messages:ee,onSelect:lt,onClose:()=>Y(null),loadTriggerSources:f}),h?ae==="nodePicker"&&h(ct(),ut,()=>{Y(null),we(null)}):c.jsx(Ho,{open:ae==="nodePicker",availableDescriptors:ct(),messages:ee,onSelect:ut,onClose:()=>{Y(null),we(null)}}),g?ae==="nodeConfig"&&g(ht??void 0,J,ft,()=>Y(null)):c.jsx(Jo,{open:ae==="nodeConfig",nodeId:Ce,descriptor:ht,initialValues:J==null?void 0:J.formData,messages:ee,onSave:ft,onClose:()=>Y(null)}),_&&ve&&c.jsx(dn,{isOpen:!!ve,onClose:()=>et(null),workflowId:ve.workflowId,workflowLabel:ve.workflowLabel,onFetchWorkflow:_})]})})},oi=Object.freeze(Object.defineProperty({__proto__:null,WorkflowCanvas:Ye,default:Ye},Symbol.toStringTag,{value:"Module"})),Be="All";function ii({template:e,onSelect:t}){var o,i;const n=e.triggerCategory?X.TRIGGER_CATEGORY_STYLE[e.triggerCategory]:null,r=((o=e.skeletonState)==null?void 0:o.slots.filter(s=>s.kind==="userTask").length)??0;return c.jsxs("div",{role:"button",tabIndex:0,onClick:t,onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&t()},style:{border:"1.5px solid #e0e0e0",borderRadius:10,padding:"16px",background:"#fff",cursor:"pointer",transition:"border-color 0.15s, box-shadow 0.15s",display:"flex",flexDirection:"column",gap:8,outline:"none"},onMouseEnter:s=>{s.currentTarget.style.borderColor="#1976d2",s.currentTarget.style.boxShadow="0 2px 8px rgba(25,118,210,0.12)"},onMouseLeave:s=>{s.currentTarget.style.borderColor="#e0e0e0",s.currentTarget.style.boxShadow="none"},children:[c.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:10},children:[e.icon&&c.jsx("div",{style:{flexShrink:0,width:36,height:36,borderRadius:8,background:"#f5f5f5",display:"flex",alignItems:"center",justifyContent:"center"},children:e.icon}),c.jsxs("div",{style:{flex:1,minWidth:0},children:[c.jsx("div",{style:{fontWeight:600,fontSize:14,color:"#212121",marginBottom:2},children:e.label}),e.description&&c.jsx("div",{style:{fontSize:12,color:"#757575",lineHeight:1.4,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:e.description})]})]}),c.jsxs("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:4},children:[n&&c.jsx("span",{style:{fontSize:10,fontWeight:600,padding:"2px 7px",borderRadius:10,background:n.bg,color:n.color},children:n.label}),(i=e.tags)==null?void 0:i.map(s=>c.jsx("span",{style:{fontSize:10,padding:"2px 7px",borderRadius:10,background:"#f5f5f5",color:"#616161"},children:s},s)),r>0&&c.jsxs("span",{style:{fontSize:10,color:"#9e9e9e",marginLeft:"auto"},children:[r," step",r!==1?"s":""]})]}),e.author&&c.jsxs("div",{style:{fontSize:11,color:"#bdbdbd"},children:["by ",e.author]})]})}const si=({templates:e,onSelectTemplate:t,onStartFromScratch:n})=>{const[r,o]=p.useState(""),[i,s]=p.useState(Be),l=p.useMemo(()=>{const a=new Set;return e.forEach(u=>{u.category&&a.add(u.category)}),[Be,...Array.from(a)]},[e]),d=p.useMemo(()=>{let a=e;if(i!==Be&&(a=a.filter(u=>u.category===i)),r.trim()){const u=r.toLowerCase();a=a.filter(f=>{var h,g;return f.label.toLowerCase().includes(u)||((h=f.description)==null?void 0:h.toLowerCase().includes(u))||((g=f.tags)==null?void 0:g.some(y=>y.toLowerCase().includes(u)))})}return[...a].sort((u,f)=>(f.popularity??0)-(u.popularity??0))},[e,i,r]);return c.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"inherit"},children:[c.jsxs("div",{style:{padding:"24px 24px 0",borderBottom:"1px solid #f0f0f0",paddingBottom:16},children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:16},children:[c.jsxs("div",{children:[c.jsx("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"#212121"},children:"Workflow Templates"}),c.jsx("p",{style:{margin:"4px 0 0",fontSize:13,color:"#757575"},children:"Choose a pre-built template or start from scratch"})]}),n&&c.jsxs("button",{onClick:n,style:{display:"flex",alignItems:"center",gap:6,padding:"8px 16px",border:"1.5px solid #1976d2",borderRadius:6,background:"#fff",color:"#1976d2",fontSize:13,fontWeight:600,cursor:"pointer"},children:[c.jsx(O.MdAdd,{size:16}),"Start from Scratch"]})]}),c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,background:"#f5f5f5",borderRadius:8,padding:"8px 12px",marginBottom:12},children:[c.jsx(O.MdSearch,{size:18,color:"#9e9e9e"}),c.jsx("input",{value:r,onChange:a=>o(a.target.value),placeholder:"Search templates...",style:{border:"none",background:"transparent",outline:"none",fontSize:14,color:"#212121",flex:1}})]}),l.length>1&&c.jsx("div",{style:{display:"flex",gap:4,flexWrap:"wrap"},children:l.map(a=>c.jsx("button",{onClick:()=>s(a),style:{padding:"4px 12px",borderRadius:20,border:"1.5px solid",borderColor:i===a?"#1976d2":"#e0e0e0",background:i===a?"#e3f2fd":"#fff",color:i===a?"#1565c0":"#616161",fontSize:12,fontWeight:i===a?600:400,cursor:"pointer"},children:a},a))})]}),c.jsx("div",{style:{flex:1,overflowY:"auto",padding:24},children:d.length===0?c.jsxs("div",{style:{textAlign:"center",padding:"40px 0",color:"#9e9e9e"},children:[c.jsx(O.MdCategory,{size:36,style:{marginBottom:8}}),c.jsx("p",{style:{margin:0,fontSize:14},children:"No templates found"})]}):c.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:16},children:d.map(a=>c.jsx(ii,{template:a,onSelect:()=>t(a)},a.triggerKey))})})]})},Ee={running:{label:"Running",color:X.EXECUTION_STATUS_COLOR.running,icon:p.createElement(O.MdPlayArrow,{size:14})},success:{label:"Success",color:X.EXECUTION_STATUS_COLOR.success,icon:p.createElement(O.MdCheckCircle,{size:14})},failed:{label:"Failed",color:X.EXECUTION_STATUS_COLOR.failed,icon:p.createElement(O.MdError,{size:14})},cancelled:{label:"Cancelled",color:X.EXECUTION_STATUS_COLOR.cancelled,icon:p.createElement(O.MdCancel,{size:14})}},li={pending:{color:X.EXECUTION_STATUS_COLOR.pending,icon:p.createElement(O.MdHourglassEmpty,{size:14})},running:{color:X.EXECUTION_STATUS_COLOR.running,icon:p.createElement(O.MdPlayArrow,{size:14})},success:{color:X.EXECUTION_STATUS_COLOR.success,icon:p.createElement(O.MdCheckCircle,{size:14})},failed:{color:X.EXECUTION_STATUS_COLOR.failed,icon:p.createElement(O.MdError,{size:14})},skipped:{color:X.EXECUTION_STATUS_COLOR.skipped,icon:p.createElement(O.MdCancel,{size:14})}};function qe(e){try{return new Date(e).toLocaleString()}catch{return e}}function cn(e,t){try{const n=new Date(t??new Date().toISOString()).getTime()-new Date(e).getTime();return n<1e3?`${n}ms`:n<6e4?`${(n/1e3).toFixed(1)}s`:`${Math.floor(n/6e4)}m ${Math.floor(n%6e4/1e3)}s`}catch{return"—"}}function ai({step:e}){const[t,n]=p.useState(!1),r=li[e.status],o=!!(e.inputs||e.outputs||e.error);return c.jsxs("div",{style:{borderBottom:"1px solid #f5f5f5"},children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"8px 12px",cursor:o?"pointer":"default"},onClick:()=>{o&&n(i=>!i)},role:o?"button":void 0,tabIndex:o?0:void 0,onKeyDown:i=>{o&&(i.key==="Enter"||i.key===" ")&&n(s=>!s)},children:[c.jsx("span",{style:{color:r.color,flexShrink:0},children:p.cloneElement(r.icon,{color:r.color})}),c.jsx("span",{style:{flex:1,fontSize:13,color:"#212121"},children:e.label||e.nodeId}),e.branchTaken&&c.jsx("span",{style:{fontSize:10,padding:"1px 6px",borderRadius:10,background:"#e3f2fd",color:"#1565c0",fontWeight:600},children:e.branchTaken}),c.jsx("span",{style:{fontSize:11,color:"#9e9e9e",flexShrink:0},children:e.startedAt?cn(e.startedAt,e.completedAt):"—"}),o&&c.jsx("span",{style:{color:"#9e9e9e",flexShrink:0},children:t?p.createElement(O.MdExpandLess,{size:16}):p.createElement(O.MdExpandMore,{size:16})})]}),t&&o&&c.jsxs("div",{style:{padding:"0 12px 10px 32px",fontSize:12},children:[e.error&&c.jsx("div",{style:{padding:"6px 10px",borderRadius:6,background:"#ffebee",color:"#c62828",marginBottom:6},children:e.error}),e.inputs&&Object.keys(e.inputs).length>0&&c.jsxs("details",{style:{marginBottom:4},children:[c.jsx("summary",{style:{cursor:"pointer",color:"#616161",marginBottom:4},children:"Inputs"}),c.jsx("pre",{style:{margin:0,fontSize:11,background:"#f5f5f5",padding:8,borderRadius:4,overflowX:"auto"},children:JSON.stringify(e.inputs,null,2)})]}),e.outputs&&Object.keys(e.outputs).length>0&&c.jsxs("details",{children:[c.jsx("summary",{style:{cursor:"pointer",color:"#616161",marginBottom:4},children:"Outputs"}),c.jsx("pre",{style:{margin:0,fontSize:11,background:"#f5f5f5",padding:8,borderRadius:4,overflowX:"auto"},children:JSON.stringify(e.outputs,null,2)})]})]})]})}function di({record:e,selected:t,onSelect:n}){const r=Ee[e.status];return c.jsxs("div",{role:"button",tabIndex:0,onClick:n,onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&n()},style:{padding:"10px 14px",borderBottom:"1px solid #f0f0f0",cursor:"pointer",background:t?"#e3f2fd":"#fff",display:"flex",alignItems:"center",gap:10,outline:"none"},children:[c.jsx("span",{style:{color:r.color,flexShrink:0},children:p.cloneElement(r.icon,{color:r.color,size:16})}),c.jsxs("div",{style:{flex:1,minWidth:0},children:[c.jsx("div",{style:{fontSize:12,color:"#212121",fontWeight:t?600:400,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:qe(e.triggeredAt)}),c.jsxs("div",{style:{fontSize:11,color:"#9e9e9e"},children:[e.triggeredBy?`by ${e.triggeredBy}`:"System"," · ",e.steps.length," step",e.steps.length!==1?"s":""]})]}),c.jsx("span",{style:{fontSize:11,fontWeight:600,color:r.color,flexShrink:0},children:r.label}),c.jsx(O.MdChevronRight,{size:14,color:"#bdbdbd"})]})}const ci=({records:e,onViewOnCanvas:t})=>{var s;const[n,r]=p.useState(((s=e[0])==null?void 0:s.id)??null),o=e.find(l=>l.id===n)??null,i=[...e].sort((l,d)=>new Date(d.triggeredAt).getTime()-new Date(l.triggeredAt).getTime());return e.length===0?c.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:300,color:"#9e9e9e",gap:8},children:[c.jsx(O.MdSchedule,{size:36}),c.jsx("p",{style:{margin:0,fontSize:14},children:"No executions yet"}),c.jsx("p",{style:{margin:0,fontSize:12},children:"Run history will appear here"})]}):c.jsxs("div",{style:{display:"flex",height:"100%",fontFamily:"inherit",border:"1px solid #e0e0e0",borderRadius:8,overflow:"hidden"},children:[c.jsxs("div",{style:{width:260,flexShrink:0,borderRight:"1px solid #e0e0e0",overflowY:"auto",background:"#fafafa"},children:[c.jsxs("div",{style:{padding:"12px 14px",borderBottom:"1px solid #e0e0e0",fontWeight:600,fontSize:13,color:"#212121"},children:["Run History (",e.length,")"]}),i.map(l=>c.jsx(di,{record:l,selected:l.id===n,onSelect:()=>r(l.id)},l.id))]}),c.jsx("div",{style:{flex:1,overflowY:"auto"},children:o?c.jsxs("div",{children:[c.jsxs("div",{style:{padding:"16px 20px",borderBottom:"1px solid #f0f0f0",display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12},children:[c.jsxs("div",{children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:4},children:[p.cloneElement(Ee[o.status].icon,{color:Ee[o.status].color,size:18}),c.jsx("span",{style:{fontWeight:700,fontSize:15,color:"#212121"},children:Ee[o.status].label})]}),c.jsxs("div",{style:{fontSize:12,color:"#757575",display:"flex",flexDirection:"column",gap:2},children:[c.jsxs("span",{style:{display:"flex",alignItems:"center",gap:4},children:[c.jsx(O.MdSchedule,{size:13})," ",qe(o.triggeredAt),o.completedAt&&` → ${qe(o.completedAt)} (${cn(o.triggeredAt,o.completedAt)})`]}),o.triggeredBy&&c.jsxs("span",{style:{display:"flex",alignItems:"center",gap:4},children:[c.jsx(O.MdPerson,{size:13})," ",o.triggeredBy]})]})]}),t&&c.jsx("button",{onClick:()=>t(o),style:{padding:"6px 12px",border:"1.5px solid #1976d2",borderRadius:6,background:"#fff",color:"#1976d2",fontSize:12,fontWeight:600,cursor:"pointer",flexShrink:0},children:"View on Canvas"})]}),o.error&&c.jsx("div",{style:{margin:"12px 16px",padding:"10px 14px",borderRadius:6,background:"#ffebee",color:"#c62828",fontSize:13},children:o.error}),c.jsxs("div",{children:[c.jsxs("div",{style:{padding:"10px 12px",fontSize:12,fontWeight:600,color:"#757575",borderBottom:"1px solid #f0f0f0"},children:["STEPS (",o.steps.length,")"]}),o.steps.map((l,d)=>c.jsx(ai,{step:l},`${l.nodeId}-${d}`))]}),o.inputs&&Object.keys(o.inputs).length>0&&c.jsx("div",{style:{padding:"10px 16px"},children:c.jsxs("details",{children:[c.jsx("summary",{style:{cursor:"pointer",fontSize:12,fontWeight:600,color:"#757575",marginBottom:6},children:"TRIGGER INPUTS"}),c.jsx("pre",{style:{margin:0,fontSize:11,background:"#f5f5f5",padding:10,borderRadius:4,overflowX:"auto"},children:JSON.stringify(o.inputs,null,2)})]})})]}):c.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",color:"#9e9e9e",fontSize:14},children:"Select a run to see details"})})]})},ui={slots:[{id:"start",kind:"start",reactFlowType:"startNode",deletable:!1},{id:"trigger-END_USER_CREATION",kind:"triggerFixed",reactFlowType:"triggerNode",deletable:!0,label:"New User Registration",nodeData:{label:"New User Registration"}},{id:"notification-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Welcome Email",nodeData:{title:"Welcome Email"}},{id:"approval-1",kind:"approval",reactFlowType:"approvalNode",descriptorType:"approval",deletable:!0,label:"Manager Approval",branchLabels:{pass:"Approved",fail:"Rejected"}},{id:"end",kind:"end",reactFlowType:"endNode",deletable:!1}],branches:{"approval-1":{pass:[{id:"notification-pass-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Approval Confirmed",nodeData:{title:"Approval Confirmed"}}],fail:[{id:"notification-fail-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Rejection Notice",nodeData:{title:"Rejection Notice"}}]}}},fi={slots:[{id:"start",kind:"start",reactFlowType:"startNode",deletable:!1},{id:"trigger-ACCESS_REQUEST",kind:"triggerFixed",reactFlowType:"triggerNode",deletable:!0,label:"Access Request Submitted",nodeData:{label:"Access Request Submitted"}},{id:"approval-1",kind:"approval",reactFlowType:"approvalNode",descriptorType:"approval",deletable:!0,label:"Access Approval",branchLabels:{pass:"Approved",fail:"Denied"}},{id:"end",kind:"end",reactFlowType:"endNode",deletable:!1}],branches:{"approval-1":{pass:[{id:"restApi-1",kind:"userTask",reactFlowType:"restApiNode",descriptorType:"restApi",deletable:!0,label:"Provision Access",nodeData:{title:"Provision Access"}},{id:"notification-pass-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Access Granted Email",nodeData:{title:"Access Granted Email"}}],fail:[{id:"notification-fail-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Access Denied Email",nodeData:{title:"Access Denied Email"}}]}}},hi={slots:[{id:"start",kind:"start",reactFlowType:"startNode",deletable:!1},{id:"trigger-USER_DEACTIVATION",kind:"triggerFixed",reactFlowType:"triggerNode",deletable:!0,label:"User Deactivation",nodeData:{label:"User Deactivation"}},{id:"delay-1",kind:"userTask",reactFlowType:"delayNode",descriptorType:"delay",deletable:!0,label:"Grace Period",nodeData:{title:"Grace Period",duration:7,unit:"days"},formData:{duration:7,unit:"days"}},{id:"notification-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Notify IT Team",nodeData:{title:"Notify IT Team"}},{id:"end",kind:"end",reactFlowType:"endNode",deletable:!1}],branches:{}},gi={slots:[{id:"start",kind:"start",reactFlowType:"startNode",deletable:!1},{id:"trigger-WEBHOOK_TRIGGER",kind:"triggerFixed",reactFlowType:"webhookTriggerNode",deletable:!0,label:"Incoming Webhook",nodeData:{label:"Incoming Webhook"}},{id:"restApi-1",kind:"userTask",reactFlowType:"restApiNode",descriptorType:"restApi",deletable:!0,label:"Call External API",nodeData:{title:"Call External API"}},{id:"notification-1",kind:"userTask",reactFlowType:"notificationNode",descriptorType:"notification",deletable:!0,label:"Notify on Completion",nodeData:{title:"Notify on Completion"}},{id:"end",kind:"end",reactFlowType:"endNode",deletable:!1}],branches:{}};exports.FlowForgeCanvas=Ye;exports.SubWorkflowPreviewDrawer=dn;exports.WorkflowExecutionHistory=ci;exports.WorkflowTemplateLibrary=si;exports.accessRequestSkeleton=fi;exports.offboardingSkeleton=hi;exports.userOnboardingSkeleton=ui;exports.webhookIntegrationSkeleton=gi;
|
|
2
|
-
//# sourceMappingURL=templateSkeletons-BTC2fk5u.js.map
|