@notmrabhi/flowforge 0.1.41 → 0.1.44
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-CMY30xhz.js +2 -0
- package/dist/GatewayBranchEdge-CMY30xhz.js.map +1 -0
- package/dist/{GatewayBranchEdge-F2AGJpun.js → GatewayBranchEdge-CrgczPYJ.js} +161 -153
- package/dist/GatewayBranchEdge-CrgczPYJ.js.map +1 -0
- package/dist/{SchemaBuilderDrawer-CUzYWGCN.js → SchemaBuilderDrawer-DlmInnSC.js} +33 -33
- package/dist/{SchemaBuilderDrawer-CUzYWGCN.js.map → SchemaBuilderDrawer-DlmInnSC.js.map} +1 -1
- package/dist/{SchemaBuilderDrawer-CiSdfXzJ.js → SchemaBuilderDrawer-KUOXc7K_.js} +2 -2
- package/dist/{SchemaBuilderDrawer-CiSdfXzJ.js.map → SchemaBuilderDrawer-KUOXc7K_.js.map} +1 -1
- package/dist/canvas.cjs +1 -1
- package/dist/canvas.d.ts +131 -1
- package/dist/canvas.js +2 -2
- package/dist/core.cjs +1 -1
- package/dist/core.d.ts +39 -0
- package/dist/core.js +22 -23
- package/dist/core.js.map +1 -1
- package/dist/defaultUi.cjs +1 -1
- package/dist/defaultUi.js +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.d.ts +121 -0
- package/dist/form.js +36 -33
- package/dist/{index-B8-KKaH_.js → index-AISQhG1t.js} +2 -2
- package/dist/{index-B8-KKaH_.js.map → index-AISQhG1t.js.map} +1 -1
- package/dist/index-BDDJrQn0.js +10 -0
- package/dist/index-BDDJrQn0.js.map +1 -0
- package/dist/{index-Buv1ylwP.js → index-CBJiDDQc.js} +2 -2
- package/dist/{index-Buv1ylwP.js.map → index-CBJiDDQc.js.map} +1 -1
- package/dist/{index-DjKhaaWf.js → index-CbdFoSw3.js} +2 -2
- package/dist/{index-DjKhaaWf.js.map → index-CbdFoSw3.js.map} +1 -1
- package/dist/{index-CiU9_8f1.js → index-DU-niBi3.js} +2 -2
- package/dist/{index-CiU9_8f1.js.map → index-DU-niBi3.js.map} +1 -1
- package/dist/{index-B74jTc2b.js → index-y_v8Qog1.js} +3124 -3005
- package/dist/index-y_v8Qog1.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +143 -1
- package/dist/index.js +81 -79
- package/dist/index.js.map +1 -1
- package/dist/nodeRegistry.cjs +1 -1
- package/dist/nodeRegistry.cjs.map +1 -1
- package/dist/nodeRegistry.d.ts +39 -0
- package/dist/nodeRegistry.js +543 -23
- package/dist/nodeRegistry.js.map +1 -1
- package/dist/{templateSkeletons-BQQ7UKp6.js → templateSkeletons-CHrd4Z5h.js} +375 -373
- package/dist/templateSkeletons-CHrd4Z5h.js.map +1 -0
- package/dist/templateSkeletons-CtknKiGO.js +2 -0
- package/dist/templateSkeletons-CtknKiGO.js.map +1 -0
- package/package.json +1 -1
- package/dist/GatewayBranchEdge-Dvkwkx-b.js +0 -2
- package/dist/GatewayBranchEdge-Dvkwkx-b.js.map +0 -1
- package/dist/GatewayBranchEdge-F2AGJpun.js.map +0 -1
- package/dist/index-B6xrei80.js +0 -87
- package/dist/index-B6xrei80.js.map +0 -1
- package/dist/index-B74jTc2b.js.map +0 -1
- package/dist/index-BrJBVztu.js +0 -2
- package/dist/index-BrJBVztu.js.map +0 -1
- package/dist/index-CXmgrKoe.js +0 -2
- package/dist/index-CXmgrKoe.js.map +0 -1
- package/dist/index-CqMPyOkL.js +0 -10
- package/dist/index-CqMPyOkL.js.map +0 -1
- package/dist/index-Dcur-XJ9.js +0 -36
- package/dist/index-Dcur-XJ9.js.map +0 -1
- package/dist/subWorkflowDescriptor-DYOYgBzX.js +0 -535
- package/dist/subWorkflowDescriptor-DYOYgBzX.js.map +0 -1
- package/dist/subWorkflowDescriptor-JDKi2INh.js +0 -2
- package/dist/subWorkflowDescriptor-JDKi2INh.js.map +0 -1
- package/dist/templateSkeletons-BQQ7UKp6.js.map +0 -1
- package/dist/templateSkeletons-C00QyIgk.js +0 -2
- package/dist/templateSkeletons-C00QyIgk.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GatewayBranchEdge-CrgczPYJ.js","sources":["../src/WorkflowCanvas/WorkflowCanvasContext.ts","../src/WorkflowCanvas/nodes/StartNode.tsx","../src/WorkflowCanvas/nodes/EndNode.tsx","../src/WorkflowCanvas/nodes/AddTriggerNode.tsx","../src/WorkflowCanvas/nodes/AddStepNode.tsx","../src/WorkflowCanvas/nodes/TriggerNode.tsx","../src/WorkflowCanvas/nodes/EventNode.tsx","../src/WorkflowCanvas/nodes/BranchRailDecoration.tsx","../src/WorkflowCanvas/nodes/FilterNode.tsx","../src/WorkflowCanvas/nodes/ActionNode.tsx","../src/WorkflowCanvas/nodes/ApprovalNode.tsx","../src/WorkflowCanvas/nodes/DelayNode.tsx","../src/WorkflowCanvas/nodes/NotificationNode.tsx","../src/WorkflowCanvas/nodes/WebhookTriggerNode.tsx","../src/WorkflowCanvas/nodes/RestApiNode.tsx","../src/WorkflowCanvas/nodes/ConditionBranchNode.tsx","../src/WorkflowCanvas/nodes/SubWorkflowNode.tsx","../src/WorkflowCanvas/nodes/index.ts","../src/WorkflowCanvas/edges/EdgeWithPlusLabel.tsx","../src/WorkflowCanvas/edges/PlusEdge.tsx","../src/WorkflowCanvas/edges/PlainEdge.tsx","../src/WorkflowCanvas/edges/LabelPlusEdge.tsx","../src/WorkflowCanvas/edges/GatewayBranchEdge.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\r\nimport { defaultFlowForgeMessages } from './messages';\r\nimport { FlowForgeMessages } from './types';\r\nimport type { NodeTypeRegistry } from '../nodeRegistry';\r\n\r\nexport interface CanvasHandlers {\r\n onEditNode: (slotId: string) => void;\r\n onDeleteNode: (slotId: string) => void;\r\n onAddStep: (afterSlotId: string) => void;\r\n onClickAddTrigger: () => void;\r\n messages: FlowForgeMessages;\r\n nodeRegistry: NodeTypeRegistry | null;\r\n /** How much of a node's data to show on its card. Default: 'full'. */\r\n nodeBody?: 'full' | 'title-only';\r\n}\r\n\r\nexport const WorkflowCanvasContext = createContext<CanvasHandlers>({\r\n onEditNode: () => {},\r\n onDeleteNode: () => {},\r\n onAddStep: () => {},\r\n onClickAddTrigger: () => {},\r\n messages: defaultFlowForgeMessages,\r\n nodeRegistry: null,\r\n nodeBody: 'full',\r\n});\r\n\r\nexport const useCanvasHandlers = () => useContext(WorkflowCanvasContext);\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\n\r\nconst StartNode = () => (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0, left: '50%' }} />\r\n <div style={{ padding: '8px 28px', borderRadius: 999, background: '#f5f5f5', border: '1.5px solid #bdbdbd', fontSize: 13, fontWeight: 500, color: '#424242', userSelect: 'none' }}>\r\n Start\r\n </div>\r\n </div>\r\n);\r\n\r\nexport default StartNode;\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\n\r\nconst EndNode = () => (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0, left: '50%' }} />\r\n <div style={{ padding: '8px 28px', borderRadius: 999, background: '#f5f5f5', border: '1.5px solid #bdbdbd', fontSize: 13, fontWeight: 500, color: '#424242', userSelect: 'none' }}>\r\n End\r\n </div>\r\n </div>\r\n);\r\n\r\nexport default EndNode;\r\n","import React from 'react';\r\nimport { Handle, Position } from 'reactflow';\r\nimport { Tooltip } from '@mui/material';\r\nimport { GrTrigger } from 'react-icons/gr';\r\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\r\n\r\nconst AddTriggerNode = () => {\r\n const { onClickAddTrigger, messages } = useCanvasHandlers();\r\n return (\r\n <div style={{ width: 350, display: 'flex', justifyContent: 'center' }}>\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0, left: '50%' }} />\r\n <Tooltip title={messages.addTriggerTooltip} placement=\"top\" arrow>\r\n <div\r\n onClick={onClickAddTrigger}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter') onClickAddTrigger(); }}\r\n style={{ padding: '10px 24px', borderRadius: 8, border: '1.5px dashed #d0d0d0', background: '#fff', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 8 }}\r\n >\r\n <GrTrigger size={16} />\r\n <span className=\"ff-text-black\" style={{ fontSize: 13 }} data-testid=\"add-trigger-btn-text\">\r\n {messages.addTriggerButton}\r\n </span>\r\n </div>\r\n </Tooltip>\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0, left: '50%' }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddTriggerNode;\r\n","import React from 'react';\r\nimport { Handle, Position, NodeProps } from 'reactflow';\r\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\r\n\r\nconst AddStepNode = ({ id }: NodeProps) => {\r\n const { onAddStep } = useCanvasHandlers();\r\n return (\r\n <div\r\n onClick={() => onAddStep(id)}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={(e) => { if (e.key === 'Enter') onAddStep(id); }}\r\n style={{ width: 28, height: 28, borderRadius: '50%', border: '1.5px solid #9e9e9e', background: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', fontSize: 18, color: '#757575', lineHeight: 1, userSelect: 'none' }}\r\n >\r\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\r\n +\r\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddStepNode;\r\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { Chip, Tooltip } from '@mui/material';\nimport { MdInput, MdOutlineModeEdit, MdInfoOutline } from 'react-icons/md';\nimport { FaCheckCircle, FaTimesCircle } from 'react-icons/fa';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\n\ninterface TriggerSource {\n value?: string;\n label?: string;\n}\n\ninterface TriggerExecutionStatus {\n status?: 'success' | 'failed' | string;\n}\n\ninterface TriggerNodeData {\n /** Trigger flavour. 'event' = event-based; 'scheduler' = cron/scheduler; absent = nothing chosen yet. */\n type?: 'event' | 'scheduler';\n /** Event-type label, e.g. 'END_USER_CREATION' → \"New User Registration\" */\n eventType?: string;\n /** Selected event sources (for type === 'event'). Each rendered as a chip. */\n sources?: TriggerSource[];\n /** Legacy / simple shape — single label + optional source, used when no `type`/`sources` are supplied. */\n label?: string;\n source?: string;\n /** Hides edit icon when previewing a stored workflow. */\n previewWorkflow?: boolean;\n /** When present, replaces the edit icon with a status badge. */\n executionStatus?: TriggerExecutionStatus;\n /** Optional info text shown in the (i) tooltip; defaults to a generic explanation. */\n infoText?: string;\n}\n\n// Last-resort humaniser for a raw code string. The package is generic — it\n// must NOT carry IAM-/PAM-/IGA-specific mappings. The host is expected to\n// supply human labels via `template.label` (merged into nodeData.label) and\n// via each source's `label` field (returned from loadTriggerSources). This\n// helper only runs when the host gave us nothing readable to display.\nfunction humaniseCode(code?: string): string {\n if (!code) return '';\n return code\n .replace(/[_-]+/g, ' ')\n .toLowerCase()\n .replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\n// Source label preference: host-provided `label` first, then humanise.\nfunction formatSource(s: TriggerSource | string): string {\n if (typeof s !== 'string' && s.label) return s.label;\n const value = typeof s === 'string' ? s : (s.value ?? '');\n return humaniseCode(value);\n}\n\nconst TriggerNode = ({ data }: NodeProps) => {\n const { onClickAddTrigger } = useCanvasHandlers();\n const {\n type, eventType, sources,\n label, source,\n previewWorkflow, executionStatus,\n infoText = 'This node decides the flow trigger type and configuration.',\n } = (data ?? {}) as TriggerNodeData;\n\n const handleEdit = (e?: React.SyntheticEvent) => {\n e?.stopPropagation();\n onClickAddTrigger();\n };\n\n // ── Shape flags ─────────────────────────────────────────────────────────────\n const hasEventSources = Array.isArray(sources) && sources.length > 0;\n const hasSimpleShape = !!(label || source);\n\n // ── Title text — always a generic role label, never the configured value.\n // The configured value (event name, sources) lives in the body below.\n const title =\n type === 'scheduler' ? 'Scheduler Trigger'\n : (type === 'event' || hasEventSources || hasSimpleShape) ? 'Event Trigger Source'\n : 'Select Trigger';\n\n const body: React.ReactNode = (() => {\n if (type === 'scheduler') {\n return <span>Scheduler to be configured</span>;\n }\n\n if (type === 'event' || hasEventSources) {\n // Prefer the template's own `label` (human-curated) over a code-derived\n // title. Falls back to a humanised form of the raw code for back-compat\n // with shapes that only carry the eventType code.\n const eventDisplay = label || humaniseCode(eventType);\n return (\n <div>\n <div className=\"ff-d-flex ff-align-items-center\">\n <span style={{ fontWeight: 600 }}>{eventDisplay}</span>\n <span className=\"ff-ms-2 ff-text-muted\" style={{ fontSize: 12 }}>via</span>\n </div>\n <div className=\"ff-d-flex ff-flex-wrap ff-mt-2\" style={{ gap: 4 }}>\n {hasEventSources ? (\n sources!.map((s, i) => (\n <Chip\n key={i}\n label={formatSource(s)}\n variant=\"outlined\"\n size=\"small\"\n className=\"ff-text-dark\"\n />\n ))\n ) : (\n <span className=\"ff-text-muted\" style={{ fontSize: 12 }}>No source selected</span>\n )}\n </div>\n </div>\n );\n }\n\n if (hasSimpleShape) {\n return (\n <div className=\"ff-d-flex ff-flex-wrap ff-align-items-center\" style={{ gap: 6 }}>\n {label && <span style={{ fontWeight: 600 }}>{label}</span>}\n {source && <Chip label={source} variant=\"outlined\" size=\"small\" />}\n </div>\n );\n }\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={handleEdit}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') handleEdit(e); }}\n style={{ cursor: 'pointer', color: '#1e88e5' }}\n >\n Click to select a trigger to start your workflow\n </span>\n );\n })();\n\n // ── Right-side cluster: execution status badge OR (edit + info) ─────────────\n const rightCluster = executionStatus ? (\n <>\n {executionStatus.status === 'success' && (\n <FaCheckCircle size={16} color=\"#1DBF60\" style={{ marginRight: 8 }} />\n )}\n {executionStatus.status === 'failed' && (\n <FaTimesCircle size={16} color=\"#f44336\" style={{ marginRight: 8 }} />\n )}\n </>\n ) : (\n <div className=\"ff-d-flex ff-align-items-center\">\n {!previewWorkflow && (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleEdit}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') handleEdit(e); }}\n className=\"ff-me-2\"\n style={{ cursor: 'pointer', color: '#212121' }}\n aria-label=\"Edit trigger\"\n >\n <MdOutlineModeEdit size={16} />\n </div>\n )}\n <Tooltip title={<div>{infoText}</div>} placement=\"right\" arrow>\n <span><MdInfoOutline color=\"gray\" size={16} /></span>\n </Tooltip>\n </div>\n );\n\n return (\n <div style={{ width: 350 }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #a5d6a7', borderRadius: 8, background: '#fff', overflow: 'hidden' }}>\n {/* Header row — original layout: icon in tinted square + small generic title */}\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '12px 14px'}}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div\n style={{\n width: 28, height: 28, borderRadius: 6,\n background: 'rgba(76,175,80,0.1)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <MdInput size={16} color=\"#388e3c\" />\n </div>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#212121' }}>{title}</span>\n </div>\n <div className=\"ff-d-flex ff-align-items-center\">{rightCluster}</div>\n </div>\n\n {/* Body */}\n <div\n style={{\n background: '#f5f5f5',\n fontSize: 12,\n color: '#212121',\n padding: '14px 16px',\n margin: '0 10px 12px',\n borderRadius: 6,\n textAlign: 'left',\n }}\n >\n {body}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} id=\"1\" />\n </div>\n );\n};\n\nexport default TriggerNode;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { Chip, Tooltip } from '@mui/material';\nimport { MdInput, MdInfoOutline } from 'react-icons/md';\nimport { FaCheckCircle, FaTimesCircle } from 'react-icons/fa';\n\n/**\n * EventNode — fixed, display-only \"system event\" marker (e.g. the\n * `User Created` step that's pre-seeded in the END_USER_CREATION template).\n *\n * Shares the green/event visual language with TriggerNode but has NO edit\n * affordance — this node represents an event the system raises, not something\n * the user configures. Click → no drawer opens.\n */\n\ninterface EventSource {\n value?: string;\n label?: string;\n}\n\ninterface EventExecutionStatus {\n status?: 'success' | 'failed' | string;\n}\n\ninterface EventNodeData {\n /** Header line, e.g. \"Event\" or \"Event Trigger Source\" */\n header?: string;\n /** Body title — the event being raised, e.g. \"User Created\" / \"New User Registration\" */\n title?: string;\n /** Optional event-type code (mapped to a friendly label below) */\n eventType?: string;\n /** Optional sources, rendered as chips */\n sources?: EventSource[];\n /** Optional tooltip text on the (i) icon */\n infoText?: string;\n /** Optional execution badge (success / failed) */\n executionStatus?: EventExecutionStatus;\n}\n\nfunction formatEventType(code?: string): string {\n if (!code) return '';\n if (code === 'END_USER_CREATION') return 'New User Registration';\n if (code === 'END_USER_UPDATION') return 'On User Update';\n return code.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\nfunction formatSource(s: EventSource | string): string {\n const value = typeof s === 'string' ? s : (s.value ?? '');\n if (value === 'SIGNUP_FLOW') return 'User Self-Registration';\n if (value === 'ADMIN_CREATION_FLOW') return 'Create User via Admin Portal';\n if (value === 'SHEDULAR' || value === 'SCHEDULER') return 'Scheduler';\n if (typeof s !== 'string' && s.label) return s.label;\n return value.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\nconst EventNode = ({ data }: NodeProps) => {\n const {\n header = 'Event',\n title,\n eventType,\n sources,\n executionStatus,\n infoText = 'This event is raised by the system. It cannot be configured.',\n } = (data ?? {}) as EventNodeData;\n\n const displayTitle = title ?? formatEventType(eventType) ?? '—';\n\n return (\n <div style={{ width: 350 }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #a5d6a7', borderRadius: 8, background: '#fff', overflow: 'hidden' }}>\n {/* Header row */}\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '12px 14px' }}>\n <div className=\"ff-d-flex ff-align-items-center ff-gap-2\">\n <div\n style={{\n width: 28, height: 28, borderRadius: 6,\n background: 'rgba(76,175,80,0.1)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <MdInput size={16} color=\"#388e3c\" />\n </div>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#212121' }}>{header}</span>\n </div>\n <div className=\"ff-d-flex ff-align-items-center\">\n {executionStatus?.status === 'success' && (\n <FaCheckCircle size={16} color=\"#1DBF60\" style={{ marginRight: 8 }} />\n )}\n {executionStatus?.status === 'failed' && (\n <FaTimesCircle size={16} color=\"#f44336\" style={{ marginRight: 8 }} />\n )}\n {!executionStatus && (\n <Tooltip title={<div>{infoText}</div>} placement=\"right\" arrow>\n <span><MdInfoOutline color=\"gray\" size={16} /></span>\n </Tooltip>\n )}\n </div>\n </div>\n\n {/* Body */}\n <div\n style={{\n background: '#f5f5f5',\n fontSize: 13,\n color: '#212121',\n padding: '14px 16px',\n margin: '0 10px 12px',\n borderRadius: 6,\n textAlign: 'left',\n }}\n >\n <div style={{ fontWeight: 600 }}>{displayTitle}</div>\n {Array.isArray(sources) && sources.length > 0 && (\n <>\n <div className=\"ff-text-muted\" style={{ fontSize: 12, marginTop: 4 }}>via</div>\n <div className=\"ff-d-flex ff-flex-wrap ff-mt-1\" style={{ gap: 4 }}>\n {sources.map((s, i) => (\n <Chip\n key={i}\n label={formatSource(s)}\n variant=\"outlined\"\n size=\"small\"\n className=\"ff-text-dark\"\n />\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} id=\"1\" />\n </div>\n );\n};\n\nexport default EventNode;\n","import React from 'react';\n\nexport interface BranchRailEntry {\n /** Y position of this branch's bullet, relative to gateway card's bottom edge */\n y: number;\n label: string;\n /** First/primary branch — used for pill coloring */\n isPass: boolean;\n}\n\nexport interface BranchRailSpec {\n branches: BranchRailEntry[];\n /** Total rail height, from gateway card bottom to end of last branch */\n height: number;\n /** Horizontal offset from gateway center to branch step center (px) */\n indent: number;\n}\n\n/**\n * Vertical rail decoration that hangs off the bottom of a gateway (filter/approval)\n * card. Provides the Workato-style visual: a left vertical line with branch bullets\n * + labels at the Y position of each branch's first step.\n *\n * Positioned absolutely so it overflows the node's bounding box without affecting\n * ReactFlow's measured size.\n */\nconst BranchRailDecoration: React.FC<{ rail: BranchRailSpec; cardWidth: number }> = ({ rail, cardWidth }) => {\n // Rail X sits just inside the gateway card's left edge, descending from card bottom.\n // Branch step center is at (cardCenter + indent). Card center is at cardWidth/2.\n // The bullet anchors on the rail and a short connector reaches the step.\n const railX = cardWidth / 2; // center of gateway card; rail descends from here\n const stepCenterX = cardWidth / 2 + rail.indent;\n const stroke = 'var(--ff-edge-color, #b0bec5)';\n\n return (\n <svg\n width={cardWidth + rail.indent + 200}\n height={rail.height}\n style={{ position: 'absolute', left: 0, top: '100%', pointerEvents: 'none', overflow: 'visible' }}\n >\n {/* Vertical rail */}\n <line x1={railX} y1={0} x2={railX} y2={rail.height} stroke={stroke} strokeWidth={1.5} />\n\n {rail.branches.map((b, idx) => {\n const bulletY = b.y;\n return (\n <g key={idx} transform={`translate(0, ${bulletY})`}>\n {/* Diamond bullet on the rail */}\n <rect\n x={railX - 5} y={-5} width={10} height={10}\n fill=\"#fff\" stroke={stroke} strokeWidth={1.5}\n transform={`rotate(45, ${railX}, 0)`}\n />\n {/* Plain-text label to the right of the bullet (Workato-style) */}\n <text x={railX + 14} y={4} fontSize={12} fontWeight={500}\n fill=\"var(--ff-text, #212121)\" style={{ fontFamily: 'sans-serif' }}>\n {b.label}\n </text>\n </g>\n );\n })}\n </svg>\n );\n};\n\nexport default BranchRailDecoration;\n","import React from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { FiFilter } from 'react-icons/fi';\nimport { MdInfoOutline, MdOutlineModeEdit, MdDeleteOutline } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\nimport BranchRailDecoration, { BranchRailSpec } from './BranchRailDecoration';\n\ninterface Condition {\n field: string;\n operator: string;\n value: string;\n logicalOperator?: string;\n}\n\nconst FilterNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode } = useCanvasHandlers();\n const { conditions = [], infoText = 'Filter conditions applied to workflow data', _branchRail } = data as { conditions?: Condition[]; infoText?: string; _branchRail?: BranchRailSpec };\n\n return (\n <div style={{ width: 350, position: 'relative' }}>\n <Handle type=\"target\" position={Position.Top} style={{ opacity: 0 }} />\n <div style={{ border: '1.5px solid #ffe082', borderRadius: 8, background: '#fff' }}>\n <div className=\"ff-d-flex ff-justify-content-between ff-align-items-center\" style={{ padding: '10px 6px' }}>\n <div className=\"ff-d-flex ff-align-items-center\">\n <div className=\"ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded\" style={{ width: 25, height: 25, background: 'rgba(255,160,0,0.1)' }}>\n <FiFilter className=\"ff-text-warning\" size={16} />\n </div>\n <span className=\"ff-ms-2 ff-fw-medium ff-text-dark\" style={{ fontSize: 14 }}>Filter</span>\n </div>\n <div className=\"node-actions ff-d-flex ff-align-items-center\">\n <div\n role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onEditNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onEditNode(id); } }}\n >\n <MdOutlineModeEdit size={16} />\n </div>\n <div\n className=\"ff-ms-2\" role=\"button\" tabIndex={0}\n onClick={(e) => { e.stopPropagation(); onDeleteNode(id); }}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); onDeleteNode(id); } }}\n >\n <MdDeleteOutline color=\"red\" size={16} />\n </div>\n <Tooltip title={infoText} placement=\"right\" arrow>\n <div className=\"ff-ms-2\"><MdInfoOutline color=\"gray\" size={16} /></div>\n </Tooltip>\n </div>\n </div>\n <div style={{ margin: '0 6px 10px', padding: '10px 12px', borderRadius: 6, background: '#fafafa', fontSize: 12 }}>\n {conditions.length === 0 ? (\n <span className=\"ff-text-muted\">No conditions configured</span>\n ) : conditions.map((condition, index) => (\n <div key={index} className=\"ff-d-flex ff-align-items-center ff-mb-1\">\n <p className=\"ff-m-0 ff-fw-bold ff-me-1 ff-text-truncate\" style={{ maxWidth: 100 }} title={condition.field}>{condition.field}</p>\n <span className=\"ff-text-muted\">{condition.operator}</span>\n <p className=\"ff-text-dark ff-text-truncate ff-mx-1 ff-m-0\" title={condition.value}>{condition.value}</p>\n {index < conditions.length - 1 && (\n <p className=\"ff-bg-primary ff-text-white ff-fw-bold ff-ms-1 ff-px-1 ff-rounded-1 ff-m-0\">{condition.logicalOperator}</p>\n )}\n </div>\n ))}\n </div>\n </div>\n <Handle type=\"source\" position={Position.Bottom} style={{ opacity: 0 }} />\n {_branchRail && <BranchRailDecoration rail={_branchRail} cardWidth={350} />}\n </div>\n );\n};\n\nexport default FilterNode;\n","import { ReactNode } from 'react';\nimport { Handle, Position, NodeProps } from 'reactflow';\nimport { MdInfoOutline, MdOutlineModeEdit, MdDeleteOutline } from 'react-icons/md';\nimport { Tooltip } from '@mui/material';\nimport { useCanvasHandlers } from '../WorkflowCanvasContext';\n\ninterface ActionNodeData {\n title?: string;\n descriptorType?: string;\n // groupBlocks shape (from IAM frontend)\n groupBlocks?: { groups?: string[]; isFallback?: boolean; isAlways?: boolean }[];\n // multi-select fields saved by the IAM task descriptors\n groups?: unknown;\n roles?: unknown;\n // flat fields saved by simple descriptors\n groupId?: unknown;\n roleId?: unknown;\n notes?: string;\n infoText?: string;\n}\n\nconst ActionNode = ({ id, data }: NodeProps) => {\n const { onEditNode, onDeleteNode, nodeRegistry, nodeBody = 'full' } = useCanvasHandlers();\n const { title = 'Task', descriptorType, groupBlocks, groups, roles, groupId, roleId, infoText = '' } = data as ActionNodeData;\n const descriptor = descriptorType ? nodeRegistry?.forType(descriptorType) : undefined;\n const icon: ReactNode = descriptor?.icon as ReactNode;\n\n const toDisplayString = (v: unknown): string => {\n if (v == null) return '';\n if (typeof v === 'string') return v;\n if (typeof v === 'object' && 'label' in (v as object)) return String((v as Record<string, unknown>).label);\n return String(v);\n };\n\n // Normalise a field that may be a single value or an array of values into a string list.\n const toList = (v: unknown): string[] =>\n Array.isArray(v) ? v.map(toDisplayString).filter(Boolean)\n : (v != null && v !== '' ? [toDisplayString(v)] : []);\n\n // Generic \"show every configured field\" body — used when the descriptor\n // doesn't supply a custom renderNode. Iterates `data`, skips canvas\n // internals, reads labels from descriptor.formSchema, renders each as\n // a \"Label: value\" line. Matches the IAM existing ActionNodeLabel style.\n const INTERNAL_KEYS = new Set([\n 'descriptorType',\n 'title',\n 'header',\n 'icon',\n 'infoText',\n 'label',\n // FlowForm's condition-builder sidecar — rendered separately below as\n // proper \"When ...\" rows, not as a JSON dump in the generic body.\n 'conditionConfig',\n '_conditionConfig',\n ]);\n const formSchema = (descriptor?.formSchema as\n | Array<{ id?: string; name?: string; label?: string }>\n | undefined);\n const labelFor = (key: string): string => {\n if (Array.isArray(formSchema)) {\n const f = formSchema.find((x) => x?.id === key || x?.name === key);\n if (f?.label) return f.label;\n }\n return key.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (m) => m.toUpperCase());\n };\n const renderValue = (v: unknown): string => {\n if (Array.isArray(v)) {\n const parts = v\n .map((x) =>\n typeof x === 'object' && x\n ? ((x as Record<string, unknown>).label as string) ??\n ((x as Record<string, unknown>).name as string) ??\n ((x as Record<string, unknown>).value as string) ??\n ''\n : String(x)\n )\n .filter(Boolean);\n const head = parts.slice(0, 3).join(', ');\n return parts.length > 3 ? `${head} +${parts.length - 3}` : head;\n }\n if (v && typeof v === 'object') {\n const obj = v as Record<string, unknown>;\n return (obj.label as string) ?? (obj.name as string) ?? (obj.value as string) ?? JSON.stringify(v);\n }\n return String(v);\n };\n const genericEntries = Object.entries(data || {}).filter(\n ([k, v]) =>\n !INTERNAL_KEYS.has(k) &&\n v !== '' &&\n v !== null &&\n v !== undefined &&\n !(Array.isArray(v) && v.length === 0)\n );\n\n // ── FlowForm condition-builder sidecar → \"When ...\" rows ──────────────\n // conditionConfig shape: { 'fieldId': [ { field, fieldLabel, operator,\n // value, connector }, … ] }\n // Renders each entry as \"[Field] [operator] [value]\" with the connector\n // (AND/OR) as a small pill between siblings — same visual as IAM's\n // ActionNodeLabel condition rows.\n const rawCondCfg =\n (data as Record<string, unknown>)?.conditionConfig ??\n (data as Record<string, unknown>)?._conditionConfig;\n const conditionGroups: Array<{ path: string; entries: Array<Record<string, unknown>> }> =\n rawCondCfg && typeof rawCondCfg === 'object'\n ? Object.entries(rawCondCfg as Record<string, unknown>)\n .filter(([, entries]) => Array.isArray(entries) && (entries as unknown[]).length > 0)\n .map(([path, entries]) => ({\n path,\n entries: (entries as Array<Record<string, unknown>>),\n }))\n : [];\n\n // Backwards-compat IAM-shape \"groups/roles/groupBlocks\" pills — kept so\n // existing nodes still render their badge style. Only used when there\n // are no other generic fields to show.\n const legacyDisplayValues: string[] = groupBlocks?.flatMap((b) => b.groups ?? [])\n ?? [...toList(groups), ...toList(roles), ...toList(groupId), ...toList(roleId)];\n const legacyConfigured = legacyDisplayValues.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 // Body container matches IAM ActionNodeLabel: 12px text, left-aligned.\n // We use a single bg-light rounded pill that wraps everything, the\n // same way IAM's groupBlocks each render as bg-light rounded my-2 p-2.\n <div\n style={{\n margin: '0 8px 8px',\n padding: 8,\n borderRadius: 4,\n background: '#f8f9fa',\n fontSize: 12,\n textAlign: 'left',\n color: '#212529',\n lineHeight: 1.4,\n }}\n >\n {descriptor?.renderNode ? (\n descriptor.renderNode(data as Record<string, unknown>)\n ) : genericEntries.length > 0 || conditionGroups.length > 0 ? (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n {/* ── 1. \"When\" + condition rows (top, matches IAM) ── */}\n {conditionGroups.map((group, gi) => (\n <div key={`cond-${gi}`}>\n <div style={{ color: '#6c757d' }}>When</div>\n {group.entries.slice(0, 3).map((entry, idx, arr) => {\n const fieldKey = (entry.field as string) || '';\n const fieldLabel =\n (entry.fieldLabel as string) || labelFor(fieldKey);\n const operator = (entry.operator as string) || '';\n const value =\n entry.value == null\n ? ''\n : typeof entry.value === 'object'\n ? renderValue(entry.value)\n : String(entry.value);\n const connector = (entry.connector as string) || 'and';\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n marginTop: 4,\n }}\n >\n <span style={{ fontWeight: 700, marginRight: 4, color: '#212529' }}>\n {fieldLabel}\n </span>\n <span style={{ color: '#6c757d', marginRight: 4 }}>{operator}</span>\n <span style={{ color: '#212529', marginRight: 4 }} title={value}>\n {value}\n </span>\n {idx < arr.length - 1 && (\n <span\n style={{\n background: '#0d6efd',\n color: '#fff',\n fontWeight: 700,\n marginLeft: 4,\n padding: '0 4px',\n borderRadius: 2,\n textTransform: 'uppercase',\n fontSize: 10,\n }}\n >\n {connector}\n </span>\n )}\n </div>\n );\n })}\n {group.entries.length > 3 && (\n <div style={{ color: '#6c757d', fontSize: 11, marginTop: 2 }}>\n +{group.entries.length - 3} more\n </div>\n )}\n </div>\n ))}\n\n {/* ── 2. Action subtitle (matches IAM action.config.title) ── */}\n {genericEntries.length > 0 && (\n <div\n style={{\n marginTop: 4,\n color: '#212529',\n display: 'flex',\n justifyContent: 'flex-start',\n }}\n >\n {descriptor?.label || title}\n </div>\n )}\n\n {/* ── 3. Form values as dark badges (matches IAM groups) ── */}\n {genericEntries.length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4, marginTop: 4 }}>\n {genericEntries.slice(0, 6).map(([k, v]) => (\n <span\n key={k}\n title={`${labelFor(k)}: ${renderValue(v)}`}\n style={{\n background: '#212529',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: 4,\n fontSize: 11,\n }}\n >\n {renderValue(v)}\n </span>\n ))}\n {genericEntries.length > 6 && (\n <span style={{ color: '#6c757d', fontSize: 11, alignSelf: 'center' }}>\n +{genericEntries.length - 6}\n </span>\n )}\n </div>\n )}\n </div>\n ) : legacyConfigured ? (\n // Dark badges matching IAM's bg-dark text-white py-1 px-2 rounded\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {legacyDisplayValues.map((v, i) => (\n <span\n key={i}\n title={v}\n style={{\n background: '#212529',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: 4,\n fontSize: 11,\n }}\n >\n {v}\n </span>\n ))}\n </div>\n ) : (\n <span style={{ color: '#6c757d' }}>Click edit to configure</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","INTERNAL_KEYS","formSchema","labelFor","key","f","x","renderValue","parts","head","obj","genericEntries","k","rawCondCfg","conditionGroups","entries","path","legacyDisplayValues","legacyConfigured","group","gi","entry","arr","fieldKey","fieldLabel","operator","connector","MAX_VISIBLE_STAGES","ApprovalNode","approvalData","isPreview","policy","stages","stageCount","visibleStages","remainingStages","policyName","MdCheckCircle","stage","displayName","_a","approverCount","groupName","_b","roleName","_c","configured","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","elbowY","onAddStepClick","segmentY","pillX","plusX","handlePlusClick","HALF","pillW"],"mappings":";;;;;;;;;;AAgBO,MAAMA,KAAwBC,GAA8B;AAAA,EACjE,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,cAAc,MAAM;AAAA,EAAC;AAAA,EACrB,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,mBAAmB,MAAM;AAAA,EAAC;AAAA,EAC1B,UAAUC;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AACZ,CAAC,GAEYC,IAAoB,MAAMC,GAAWJ,EAAqB,GCvBjEK,KAAY,MAChB,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,KAAK,SAAS,QAAQ,gBAAgB,SAAA,GACzD,UAAA;AAAA,EAAA,gBAAAC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,GAAG,MAAM,MAAA,EAAM,CAAG;AAAA,EACrF,gBAAAF,EAAC,SAAI,OAAO,EAAE,SAAS,YAAY,cAAc,KAAK,YAAY,WAAW,QAAQ,uBAAuB,UAAU,IAAI,YAAY,KAAK,OAAO,WAAW,YAAY,OAAA,GAAU,UAAA,QAAA,CAEnL;AAAA,EAAA,CACF,GCNIG,KAAU,MACd,gBAAAJ,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,KAAK,SAAS,QAAQ,gBAAgB,SAAA,GACzD,UAAA;AAAA,EAAA,gBAAAC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,GAAG,MAAM,MAAA,EAAM,CAAG;AAAA,EAClF,gBAAAF,EAAC,SAAI,OAAO,EAAE,SAAS,YAAY,cAAc,KAAK,YAAY,WAAW,QAAQ,uBAAuB,UAAU,IAAI,YAAY,KAAK,OAAO,WAAW,YAAY,OAAA,GAAU,UAAA,MAAA,CAEnL;AAAA,EAAA,CACF,GCHII,KAAiB,MAAM;AAC3B,QAAM,EAAE,mBAAAC,GAAmB,UAAAC,EAAA,IAAaV,EAAA;AACxC,SACE,gBAAAG,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,KAAK,SAAS,QAAQ,gBAAgB,SAAA,GACzD,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,GAAG,MAAM,MAAA,EAAM,CAAG;AAAA,IAClF,gBAAAF,EAACO,KAAQ,OAAOD,EAAS,mBAAmB,WAAU,OAAM,OAAK,IAC/D,UAAA,gBAAAP;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASM;AAAA,QACT,MAAK;AAAA,QACL,UAAU;AAAA,QACV,WAAW,CAACG,MAAM;AAAE,UAAIA,EAAE,QAAQ,WAASH,EAAA;AAAA,QAAqB;AAAA,QAChE,OAAO,EAAE,SAAS,aAAa,cAAc,GAAG,QAAQ,wBAAwB,YAAY,QAAQ,QAAQ,WAAW,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,KAAK,EAAA;AAAA,QAE7L,UAAA;AAAA,UAAA,gBAAAL,EAACS,IAAA,EAAU,MAAM,GAAA,CAAI;AAAA,UACrB,gBAAAT,EAAC,QAAA,EAAK,WAAU,iBAAgB,OAAO,EAAE,UAAU,GAAA,GAAM,eAAY,wBAClE,UAAAM,EAAS,iBAAA,CACZ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAN,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,GAAG,MAAM,QAAM,CAAG;AAAA,EAAA,GACvF;AAEJ,GCxBMQ,KAAc,CAAC,EAAE,IAAAC,QAAoB;AACzC,QAAM,EAAE,WAAAC,EAAA,IAAchB,EAAA;AACtB,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,MAAMa,EAAUD,CAAE;AAAA,MAC3B,MAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAW,CAACH,MAAM;AAAE,QAAIA,EAAE,QAAQ,WAASI,EAAUD,CAAE;AAAA,MAAG;AAAA,MAC1D,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,OAAO,QAAQ,uBAAuB,YAAY,QAAQ,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,QAAQ,WAAW,UAAU,IAAI,OAAO,WAAW,YAAY,GAAG,YAAY,OAAA;AAAA,MAEvP,UAAA;AAAA,QAAA,gBAAAX,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,QAAE;AAAA,QAEvE,gBAAAF,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG9E;ACoBA,SAASW,GAAaC,GAAuB;AAC3C,SAAKA,IACEA,EACJ,QAAQ,UAAU,GAAG,EACrB,YAAA,EACA,QAAQ,SAAS,CAACC,MAAMA,EAAE,aAAa,IAJxB;AAKpB;AAGA,SAASC,GAAaC,GAAmC;AACvD,MAAI,OAAOA,KAAM,YAAYA,EAAE,cAAcA,EAAE;AAC/C,QAAMC,IAAQ,OAAOD,KAAM,WAAWA,IAAKA,EAAE,SAAS;AACtD,SAAOJ,GAAaK,CAAK;AAC3B;AAEA,MAAMC,KAAc,CAAC,EAAE,MAAAC,QAAsB;AAC3C,QAAM,EAAE,mBAAAf,EAAA,IAAsBT,EAAA,GACxB;AAAA,IACJ,MAAAyB;AAAA,IAAM,WAAAC;AAAA,IAAW,SAAAC;AAAA,IACjB,OAAAC;AAAA,IAAO,QAAAC;AAAA,IACP,iBAAAC;AAAA,IAAiB,iBAAAC;AAAA,IACjB,UAAAC,IAAW;AAAA,EAAA,IACRR,KAAQ,CAAA,GAEPS,IAAa,CAACrB,MAA6B;AAC/C,IAAAA,KAAA,QAAAA,EAAG,mBACHH,EAAA;AAAA,EACF,GAGMyB,IAAkB,MAAM,QAAQP,CAAO,KAAKA,EAAQ,SAAS,GAC7DQ,IAAkB,CAAC,EAAEP,KAASC,IAI9BO,IACJX,MAAS,cAAc,sBACpBA,MAAS,WAAWS,KAAmBC,IAAkB,yBAC1D,kBAEEE,KAAyB,MAAM;AACnC,QAAIZ,MAAS;AACX,aAAO,gBAAArB,EAAC,UAAK,UAAA,6BAAA,CAA0B;AAGzC,QAAIqB,MAAS,WAAWS,GAAiB;AAIvC,YAAMI,IAAeV,KAASX,GAAaS,CAAS;AACpD,+BACG,OAAA,EACC,UAAA;AAAA,QAAA,gBAAAvB,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,YAAY,IAAA,GAAQ,UAAAkC,GAAa;AAAA,UAChD,gBAAAlC,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,MAAA,CAAG;AAAA,QAAA,GACtE;AAAA,QACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,OAAO,EAAE,KAAK,EAAA,GAC3D,UAAA8B,IACCP,EAAS,IAAI,CAACN,GAAGkB,MACf,gBAAAnC;AAAA,UAACoC;AAAA,UAAA;AAAA,YAEC,OAAOpB,GAAaC,CAAC;AAAA,YACrB,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,UAAA;AAAA,UAJLkB;AAAA,QAAA,CAMR,IAED,gBAAAnC,EAAC,QAAA,EAAK,WAAU,iBAAgB,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,qBAAA,CAAkB,EAAA,CAE/E;AAAA,MAAA,GACF;AAAA,IAEJ;AAEA,WAAI+B,IAEA,gBAAAhC,EAAC,SAAI,WAAU,gDAA+C,OAAO,EAAE,KAAK,KACzE,UAAA;AAAA,MAAAyB,uBAAU,QAAA,EAAK,OAAO,EAAE,YAAY,IAAA,GAAQ,UAAAA,GAAM;AAAA,MAClDC,uBAAWW,GAAA,EAAK,OAAOX,GAAQ,SAAQ,YAAW,MAAK,QAAA,CAAQ;AAAA,IAAA,GAClE,IAKF,gBAAAzB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,SAAS6B;AAAA,QACT,WAAW,CAACrB,MAAM;AAAE,WAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAgBA,CAAC;AAAA,QAAG;AAAA,QAC3E,OAAO,EAAE,QAAQ,WAAW,OAAO,UAAA;AAAA,QACpC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL,GAAA,GAGM6B,IAAeV,IACnB,gBAAA5B,EAAAuC,GAAA,EACG,UAAA;AAAA,IAAAX,EAAgB,WAAW,aAC1B,gBAAA3B,EAACuC,IAAA,EAAc,MAAM,IAAI,OAAM,WAAU,OAAO,EAAE,aAAa,EAAA,EAAE,CAAG;AAAA,IAErEZ,EAAgB,WAAW,YAC1B,gBAAA3B,EAACwC,IAAA,EAAc,MAAM,IAAI,OAAM,WAAU,OAAO,EAAE,aAAa,IAAE,CAAG;AAAA,EAAA,EAAA,CAExE,IAEA,gBAAAzC,EAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,IAAA,CAAC2B,KACA,gBAAA1B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,UAAU;AAAA,QACV,SAAS6B;AAAA,QACT,WAAW,CAACrB,MAAM;AAAE,WAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAgBA,CAAC;AAAA,QAAG;AAAA,QAC3E,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,WAAW,OAAO,UAAA;AAAA,QACnC,cAAW;AAAA,QAEX,UAAA,gBAAAR,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAGjC,gBAAAzC,EAACO,KAAQ,OAAO,gBAAAP,EAAC,SAAK,UAAA4B,EAAA,CAAS,GAAQ,WAAU,SAAQ,OAAK,IAC5D,UAAA,gBAAA5B,EAAC,QAAA,EAAK,4BAAC0C,GAAA,EAAc,OAAM,QAAO,MAAM,GAAA,CAAI,GAAE,EAAA,CAChD;AAAA,EAAA,GACF;AAGF,2BACG,OAAA,EAAI,OAAO,EAAE,OAAO,OACnB,UAAA;AAAA,IAAA,gBAAA1C,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,QAAQ,UAAU,SAAA,GAE1F,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,eAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,OAAO;AAAA,gBAAI,QAAQ;AAAA,gBAAI,cAAc;AAAA,gBACrC,YAAY;AAAA,gBACZ,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,gBAAgB;AAAA,gBACvD,YAAY;AAAA,cAAA;AAAA,cAGd,UAAA,gBAAAA,EAAC2C,IAAA,EAAQ,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAErC,gBAAA3C,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,aAAc,UAAAgC,EAAA,CAAM;AAAA,QAAA,GAC3E;AAAA,QACA,gBAAAhC,EAAC,OAAA,EAAI,WAAU,mCAAmC,UAAAqC,EAAA,CAAa;AAAA,MAAA,GACjE;AAAA,MAGA,gBAAArC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,WAAW;AAAA,UAAA;AAAA,UAGZ,UAAAiC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,IACA,gBAAAjC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,GAAK,IAAG,IAAA,CAAI;AAAA,EAAA,GACjF;AAEJ;ACxKA,SAAS0C,GAAgB9B,GAAuB;AAC9C,SAAKA,IACDA,MAAS,sBAA4B,0BACrCA,MAAS,sBAA4B,mBAClCA,EAAK,QAAQ,UAAU,GAAG,EAAE,QAAQ,SAAS,CAACC,MAAMA,EAAE,YAAA,CAAa,IAHxD;AAIpB;AAEA,SAASC,GAAaC,GAAiC;AACrD,QAAMC,IAAQ,OAAOD,KAAM,WAAWA,IAAKA,EAAE,SAAS;AACtD,SAAIC,MAAU,gBAAsB,2BAChCA,MAAU,wBAA8B,iCACxCA,MAAU,cAAcA,MAAU,cAAoB,cACtD,OAAOD,KAAM,YAAYA,EAAE,QAAcA,EAAE,QACxCC,EAAM,QAAQ,UAAU,GAAG,EAAE,QAAQ,SAAS,CAACH,MAAMA,EAAE,YAAA,CAAa;AAC7E;AAEA,MAAM8B,KAAY,CAAC,EAAE,MAAAzB,QAAsB;AACzC,QAAM;AAAA,IACJ,QAAA0B,IAAS;AAAA,IACT,OAAAd;AAAA,IACA,WAAAV;AAAA,IACA,SAAAC;AAAA,IACA,iBAAAI;AAAA,IACA,UAAAC,IAAW;AAAA,EAAA,IACRR,KAAQ,CAAA,GAEP2B,IAAef,KAASY,GAAgBtB,CAAS,KAAK;AAE5D,2BACG,OAAA,EAAI,OAAO,EAAE,OAAO,OACnB,UAAA;AAAA,IAAA,gBAAAtB,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,QAAQ,UAAU,SAAA,GAE1F,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,eAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,OAAO;AAAA,gBAAI,QAAQ;AAAA,gBAAI,cAAc;AAAA,gBACrC,YAAY;AAAA,gBACZ,SAAS;AAAA,gBAAQ,YAAY;AAAA,gBAAU,gBAAgB;AAAA,gBACvD,YAAY;AAAA,cAAA;AAAA,cAGd,UAAA,gBAAAA,EAAC2C,IAAA,EAAQ,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAErC,gBAAA3C,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,aAAc,UAAA8C,EAAA,CAAO;AAAA,QAAA,GAC5E;AAAA,QACA,gBAAA/C,EAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,WAAA4B,KAAA,gBAAAA,EAAiB,YAAW,aAC3B,gBAAA3B,EAACuC,IAAA,EAAc,MAAM,IAAI,OAAM,WAAU,OAAO,EAAE,aAAa,EAAA,EAAE,CAAG;AAAA,WAErEZ,KAAA,gBAAAA,EAAiB,YAAW,YAC3B,gBAAA3B,EAACwC,IAAA,EAAc,MAAM,IAAI,OAAM,WAAU,OAAO,EAAE,aAAa,IAAE,CAAG;AAAA,UAErE,CAACb,KACA,gBAAA3B,EAACO,GAAA,EAAQ,OAAO,gBAAAP,EAAC,OAAA,EAAK,UAAA4B,EAAA,CAAS,GAAQ,WAAU,SAAQ,OAAK,IAC5D,UAAA,gBAAA5B,EAAC,UAAK,UAAA,gBAAAA,EAAC0C,GAAA,EAAc,OAAM,QAAO,MAAM,GAAA,CAAI,EAAA,CAAE,EAAA,CAChD;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,GACF;AAAA,MAGA,gBAAA3C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,WAAW;AAAA,UAAA;AAAA,UAGb,UAAA;AAAA,YAAA,gBAAAC,EAAC,SAAI,OAAO,EAAE,YAAY,IAAA,GAAQ,UAAA+C,GAAa;AAAA,YAC9C,MAAM,QAAQxB,CAAO,KAAKA,EAAQ,SAAS,KAC1C,gBAAAxB,EAAAuC,GAAA,EACE,UAAA;AAAA,cAAA,gBAAAtC,EAAC,OAAA,EAAI,WAAU,iBAAgB,OAAO,EAAE,UAAU,IAAI,WAAW,EAAA,GAAK,UAAA,MAAA,CAAG;AAAA,cACzE,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,OAAO,EAAE,KAAK,EAAA,GAC3D,UAAAuB,EAAQ,IAAI,CAACN,GAAGkB,MACf,gBAAAnC;AAAA,gBAACoC;AAAA,gBAAA;AAAA,kBAEC,OAAOpB,GAAaC,CAAC;AAAA,kBACrB,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAU;AAAA,gBAAA;AAAA,gBAJLkB;AAAA,cAAA,CAMR,EAAA,CACH;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GACF;AAAA,IACA,gBAAAnC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,GAAK,IAAG,IAAA,CAAI;AAAA,EAAA,GACjF;AAEJ,GC7GM8C,KAA8E,CAAC,EAAE,MAAAC,GAAM,WAAAC,QAAgB;AAI3G,QAAMC,IAAQD,IAAY;AACN,EAAAA,IAAY,IAAID,EAAK;AACzC,QAAMG,IAAS;AAEf,SACE,gBAAArD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAOmD,IAAYD,EAAK,SAAS;AAAA,MACjC,QAAQA,EAAK;AAAA,MACb,OAAO,EAAE,UAAU,YAAY,MAAM,GAAG,KAAK,QAAQ,eAAe,QAAQ,UAAU,UAAA;AAAA,MAGtF,UAAA;AAAA,QAAA,gBAAAjD,EAAC,QAAA,EAAK,IAAImD,GAAO,IAAI,GAAG,IAAIA,GAAO,IAAIF,EAAK,QAAQ,QAAAG,GAAgB,aAAa,KAAK;AAAA,QAErFH,EAAK,SAAS,IAAI,CAACI,GAAGC,MAAQ;AAC7B,gBAAMC,IAAUF,EAAE;AAClB,iBACE,gBAAAtD,EAAC,KAAA,EAAY,WAAW,gBAAgBwD,CAAO,KAE7C,UAAA;AAAA,YAAA,gBAAAvD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,GAAGmD,IAAQ;AAAA,gBAAG,GAAG;AAAA,gBAAI,OAAO;AAAA,gBAAI,QAAQ;AAAA,gBACxC,MAAK;AAAA,gBAAO,QAAAC;AAAA,gBAAgB,aAAa;AAAA,gBACzC,WAAW,cAAcD,CAAK;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhC,gBAAAnD;AAAA,cAAC;AAAA,cAAA;AAAA,gBAAK,GAAGmD,IAAQ;AAAA,gBAAI,GAAG;AAAA,gBAAG,UAAU;AAAA,gBAAI,YAAY;AAAA,gBACnD,MAAK;AAAA,gBAA0B,OAAO,EAAE,YAAY,aAAA;AAAA,gBACnD,UAAAE,EAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACL,EAAA,GAXMC,CAYR;AAAA,QAEJ,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GChDME,KAAa,CAAC,EAAE,IAAA7C,GAAI,MAAAS,QAAsB;AAC9C,QAAM,EAAE,YAAAqC,GAAY,cAAAC,EAAA,IAAiB9D,EAAA,GAC/B,EAAE,YAAA+D,IAAa,CAAA,GAAI,UAAA/B,IAAW,8CAA8C,aAAAgC,MAAgBxC;AAElG,SACE,gBAAArB,EAAC,SAAI,OAAO,EAAE,OAAO,KAAK,UAAU,cAClC,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,SAAI,WAAU,wEAAuE,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,yBAChI,UAAA,gBAAAA,EAAC6D,IAAA,EAAS,WAAU,mBAAkB,MAAM,IAAI,GAClD;AAAA,UACA,gBAAA7D,EAAC,UAAK,WAAU,qCAAoC,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,SAAA,CAAM;AAAA,QAAA,GACrF;AAAA,QACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAEpF,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAEtF,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAExCvD,GAAA,EAAQ,OAAOqB,GAAU,WAAU,SAAQ,OAAK,IAC/C,UAAA,gBAAA5B,EAAC,SAAI,WAAU,WAAU,4BAAC0C,GAAA,EAAc,OAAM,QAAO,MAAM,GAAA,CAAI,GAAE,EAAA,CACnE;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MACA,gBAAA1C,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,WAAW,UAAU,MACzG,UAAA2D,EAAW,WAAW,IACrB,gBAAA3D,EAAC,QAAA,EAAK,WAAU,iBAAgB,sCAAwB,IACtD2D,EAAW,IAAI,CAACI,GAAWC,MAC7B,gBAAAjE,EAAC,OAAA,EAAgB,WAAU,2CACzB,UAAA;AAAA,QAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,8CAA6C,OAAO,EAAE,UAAU,IAAA,GAAO,OAAO+D,EAAU,OAAQ,UAAAA,EAAU,OAAM;AAAA,QAC7H,gBAAA/D,EAAC,QAAA,EAAK,WAAU,iBAAiB,YAAU,UAAS;AAAA,QACpD,gBAAAA,EAAC,OAAE,WAAU,gDAA+C,OAAO+D,EAAU,OAAQ,YAAU,MAAA,CAAM;AAAA,QACpGC,IAAQL,EAAW,SAAS,uBAC1B,KAAA,EAAE,WAAU,8EAA8E,UAAAI,EAAU,gBAAA,CAAgB;AAAA,MAAA,EAAA,GAL/GC,CAOV,CACD,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IACA,gBAAAhE,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACvE0D,KAAe,gBAAA5D,EAACgD,IAAA,EAAqB,MAAMY,GAAa,WAAW,IAAA,CAAK;AAAA,EAAA,GAC3E;AAEJ,GChDMK,KAAa,CAAC,EAAE,IAAAtD,GAAI,MAAAS,QAAsB;AAC9C,QAAM,EAAE,YAAAqC,GAAY,cAAAC,GAAc,cAAAQ,GAAc,UAAAC,IAAW,OAAA,IAAWvE,EAAA,GAChE,EAAE,OAAAoC,IAAQ,QAAQ,gBAAAoC,GAAgB,aAAAC,GAAa,QAAAC,GAAQ,OAAAC,GAAO,SAAAC,GAAS,QAAAC,GAAQ,UAAA7C,IAAW,GAAA,IAAOR,GACjGsD,IAAaN,IAAiBF,KAAA,gBAAAA,EAAc,QAAQE,KAAkB,QACtEO,IAAkBD,KAAA,gBAAAA,EAAY,MAE9BE,IAAkB,CAACC,MACnBA,KAAK,OAAa,KAClB,OAAOA,KAAM,WAAiBA,IAC9B,OAAOA,KAAM,YAAY,WAAYA,IAAqB,OAAQA,EAA8B,KAAK,IAClG,OAAOA,CAAC,GAIXC,IAAS,CAACD,MACd,MAAM,QAAQA,CAAC,IAAIA,EAAE,IAAID,CAAe,EAAE,OAAO,OAAO,IACnDC,KAAK,QAAQA,MAAM,KAAK,CAACD,EAAgBC,CAAC,CAAC,IAAI,CAAA,GAMhDE,wBAAoB,IAAI;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,EAAA,CACD,GACKC,IAAcN,KAAA,gBAAAA,EAAY,YAG1BO,IAAW,CAACC,MAAwB;AACxC,QAAI,MAAM,QAAQF,CAAU,GAAG;AAC7B,YAAMG,IAAIH,EAAW,KAAK,CAACI,OAAMA,KAAA,gBAAAA,EAAG,QAAOF,MAAOE,KAAA,gBAAAA,EAAG,UAASF,CAAG;AACjE,UAAIC,KAAA,QAAAA,EAAG,MAAO,QAAOA,EAAE;AAAA,IACzB;AACA,WAAOD,EAAI,QAAQ,UAAU,GAAG,EAAE,QAAQ,SAAS,CAACnE,MAAMA,EAAE,YAAA,CAAa;AAAA,EAC3E,GACMsE,IAAc,CAACR,MAAuB;AAC1C,QAAI,MAAM,QAAQA,CAAC,GAAG;AACpB,YAAMS,IAAQT,EACX;AAAA,QAAI,CAACO,MACJ,OAAOA,KAAM,YAAYA,IACnBA,EAA8B,SAC9BA,EAA8B,QAC9BA,EAA8B,SAChC,KACA,OAAOA,CAAC;AAAA,MAAA,EAEb,OAAO,OAAO,GACXG,IAAOD,EAAM,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AACxC,aAAOA,EAAM,SAAS,IAAI,GAAGC,CAAI,KAAKD,EAAM,SAAS,CAAC,KAAKC;AAAA,IAC7D;AACA,QAAIV,KAAK,OAAOA,KAAM,UAAU;AAC9B,YAAMW,IAAMX;AACZ,aAAQW,EAAI,SAAqBA,EAAI,QAAoBA,EAAI,SAAoB,KAAK,UAAUX,CAAC;AAAA,IACnG;AACA,WAAO,OAAOA,CAAC;AAAA,EACjB,GACMY,IAAiB,OAAO,QAAQrE,KAAQ,CAAA,CAAE,EAAE;AAAA,IAChD,CAAC,CAACsE,GAAGb,CAAC,MACJ,CAACE,EAAc,IAAIW,CAAC,KACpBb,MAAM,MACNA,MAAM,QACNA,MAAM,UACN,EAAE,MAAM,QAAQA,CAAC,KAAKA,EAAE,WAAW;AAAA,EAAA,GASjCc,KACHvE,KAAA,gBAAAA,EAAkC,qBAClCA,KAAA,gBAAAA,EAAkC,mBAC/BwE,IACJD,KAAc,OAAOA,KAAe,WAChC,OAAO,QAAQA,CAAqC,EACjD,OAAO,CAAC,CAAA,EAAGE,CAAO,MAAM,MAAM,QAAQA,CAAO,KAAMA,EAAsB,SAAS,CAAC,EACnF,IAAI,CAAC,CAACC,GAAMD,CAAO,OAAO;AAAA,IACzB,MAAAC;AAAA,IACA,SAAAD;AAAA,EAAA,EACA,IACJ,CAAA,GAKAE,KAAgC1B,KAAA,gBAAAA,EAAa,QAAQ,CAAChB,MAAMA,EAAE,UAAU,QACzE,CAAC,GAAGyB,EAAOR,CAAM,GAAG,GAAGQ,EAAOP,CAAK,GAAG,GAAGO,EAAON,CAAO,GAAG,GAAGM,EAAOL,CAAM,CAAC,GAC1EuB,IAAmBD,EAAoB,SAAS;AAEtD,2BACG,OAAA,EAAI,OAAO,EAAE,OAAO,OACnB,UAAA;AAAA,IAAA,gBAAA/F,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA;AAAA,UAAA4E,KAAQ,gBAAA3E,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAA,GAAa,UAAA2E,EAAA,CAAkB;AAAA,UACnF,gBAAA3E,EAAC,QAAA,EAAK,WAAU,gBAAe,OAAO,EAAE,UAAU,IAAI,YAAY,OAAQ,UAAAgC,EAAA,CAAM;AAAA,QAAA,GAClF;AAAA,QACA,gBAAAjC,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAEpF,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAEtF,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAExClC,uBACErB,GAAA,EAAQ,OAAOqB,GAAU,WAAU,SAAQ,OAAK,IAC/C,UAAA,gBAAA5B,EAAC,SAAI,WAAU,WAAU,4BAAC0C,GAAA,EAAc,OAAM,QAAO,MAAM,GAAA,CAAI,GAAE,EAAA,CACnE;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,GACF;AAAA,MAECyB,MAAa;AAAA;AAAA;AAAA,MAIZ,gBAAAnE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,WAAW;AAAA,YACX,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,UAGb,UAAA0E,KAAA,QAAAA,EAAY,aACXA,EAAW,WAAWtD,CAA+B,IACnDqE,EAAe,SAAS,KAAKG,EAAgB,SAAS,IACxD,gBAAA7F,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,YAE3C,UAAA;AAAA,YAAA6F,EAAgB,IAAI,CAACK,GAAOC,wBAC1B,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAlG,EAAC,SAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,QAAI;AAAA,cACrCiG,EAAM,QAAQ,MAAM,GAAG,CAAC,EAAE,IAAI,CAACE,GAAO7C,GAAK8C,OAAQ;AAClD,sBAAMC,KAAYF,EAAM,SAAoB,IACtCG,KACHH,EAAM,cAAyBlB,EAASoB,EAAQ,GAC7CE,KAAYJ,EAAM,YAAuB,IACzCjF,IACJiF,EAAM,SAAS,OACX,KACA,OAAOA,EAAM,SAAU,WACvBd,EAAYc,EAAM,KAAK,IACvB,OAAOA,EAAM,KAAK,GAClBK,KAAaL,EAAM,aAAwB;AACjD,uBACE,gBAAApG;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,UAAU;AAAA,sBACV,WAAW;AAAA,oBAAA;AAAA,oBAGb,UAAA;AAAA,sBAAA,gBAAAC,EAAC,QAAA,EAAK,OAAO,EAAE,YAAY,KAAK,aAAa,GAAG,OAAO,UAAA,GACpD,UAAAsG,GAAA,CACH;AAAA,sBACA,gBAAAtG,EAAC,UAAK,OAAO,EAAE,OAAO,WAAW,aAAa,EAAA,GAAM,UAAAuG,GAAA,CAAS;AAAA,sBAC7D,gBAAAvG,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,WAAW,aAAa,EAAA,GAAK,OAAOkB,GACvD,UAAAA,EAAA,CACH;AAAA,sBACCoC,IAAM8C,GAAI,SAAS,KAClB,gBAAApG;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,YAAY;AAAA,4BACZ,OAAO;AAAA,4BACP,YAAY;AAAA,4BACZ,YAAY;AAAA,4BACZ,SAAS;AAAA,4BACT,cAAc;AAAA,4BACd,eAAe;AAAA,4BACf,UAAU;AAAA,0BAAA;AAAA,0BAGX,UAAAwG;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACH;AAAA,kBAAA;AAAA,kBA7BGlD;AAAA,gBAAA;AAAA,cAiCX,CAAC;AAAA,cACA2C,EAAM,QAAQ,SAAS,uBACrB,OAAA,EAAI,OAAO,EAAE,OAAO,WAAW,UAAU,IAAI,WAAW,KAAK,UAAA;AAAA,gBAAA;AAAA,gBAC1DA,EAAM,QAAQ,SAAS;AAAA,gBAAE;AAAA,cAAA,EAAA,CAC7B;AAAA,YAAA,EAAA,GArDM,QAAQC,CAAE,EAuDpB,CACD;AAAA,YAGAT,EAAe,SAAS,KACvB,gBAAAzF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,WAAW;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS;AAAA,kBACT,gBAAgB;AAAA,gBAAA;AAAA,gBAGjB,kCAAY,UAASgC;AAAA,cAAA;AAAA,YAAA;AAAA,YAKzByD,EAAe,SAAS,KACvB,gBAAA1F,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,GAAG,WAAW,KACjE,UAAA;AAAA,cAAA0F,EAAe,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAACC,GAAGb,CAAC,MACpC,gBAAA7E;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,OAAO,GAAGiF,EAASS,CAAC,CAAC,KAAKL,EAAYR,CAAC,CAAC;AAAA,kBACxC,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,UAAU;AAAA,kBAAA;AAAA,kBAGX,YAAYA,CAAC;AAAA,gBAAA;AAAA,gBAVTa;AAAA,cAAA,CAYR;AAAA,cACAD,EAAe,SAAS,KACvB,gBAAA1F,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,WAAW,UAAU,IAAI,WAAW,YAAY,UAAA;AAAA,gBAAA;AAAA,gBAClE0F,EAAe,SAAS;AAAA,cAAA,EAAA,CAC5B;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,EAAA,CAEJ,IACEO;AAAA;AAAA,YAEF,gBAAAhG,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,KACnD,UAAA+F,EAAoB,IAAI,CAAClB,GAAG1C,MAC3B,gBAAAnC;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO6E;AAAA,gBACP,OAAO;AAAA,kBACL,YAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,SAAS;AAAA,kBACT,cAAc;AAAA,kBACd,UAAU;AAAA,gBAAA;AAAA,gBAGX,UAAAA;AAAA,cAAA;AAAA,cAVI1C;AAAA,YAAA,CAYR,EAAA,CACH;AAAA,gCAEC,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,0BAAA,CAAuB;AAAA,QAAA;AAAA,MAAA;AAAA,IAE9D,GAEJ;AAAA,IACA,gBAAAnC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GCtSMuG,IAAqB,GAqBrBC,KAAe,CAAC,EAAE,IAAA/F,GAAI,MAAAS,QAAsB;AAChD,QAAM,EAAE,YAAAqC,GAAY,cAAAC,EAAA,IAAiB9D,EAAA,GAC/B,EAAE,cAAA+G,GAAc,WAAAC,IAAY,IAAO,aAAAhD,MAAgBxC,GAEnDyF,KAASF,KAAA,gBAAAA,EAAc,WAAU,CAAA,GACjCG,IAASD,EAAO,UAAU,CAAA,GAC1BE,IAAaD,EAAO,QACpBE,IAAgBF,EAAO,MAAM,GAAGL,CAAkB,GAClDQ,IAAkBF,IAAaN,GAC/BS,IAAaL,EAAO,QAAQA,EAAO,cAAc;AAEvD,SACE,gBAAA9G,EAAC,SAAI,OAAO,EAAE,OAAO,KAAK,UAAU,cAClC,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,wEAAuE,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,0BAChI,UAAA,gBAAAA,EAACmH,MAAc,OAAO,EAAE,OAAO,aAAa,MAAM,GAAA,CAAI,EAAA,CACxD;AAAA,UACA,gBAAAnH,EAAC,UAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,kBAAA,CAAe;AAAA,QAAA,GACtF;AAAA,QACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,UAAA,CAAC6G,KACA,gBAAA5G;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cAAG,OAAO,EAAE,QAAQ,UAAA;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAEpF,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,IAAI,WAAU,oBAAA,CAAoB;AAAA,YAAA;AAAA,UAAA;AAAA,UAG9D,CAACmE,KACA,gBAAA5G;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAAG,OAAO,EAAE,QAAQ,UAAA;AAAA,cAChE,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAEtF,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAG1CvD,GAAA,EAAQ,OAAM,6FAA4F,OAAK,IAAC,WAAU,SACzH,UAAA,gBAAAP,EAAC,UAAK,WAAU,4BAA2B,4BAAC0C,GAAA,EAAc,OAAM,QAAO,MAAM,GAAA,CAAI,GAAE,EAAA,CACrF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEA,gBAAA3C,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,UAAA,GACrF,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oEACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,gEAA+D,OAAO,EAAE,UAAU,IAAI,YAAY,IAAA,GAAO,OAAOkH,GAC3H,UAAAA,GACH;AAAA,UACA,gBAAAnH,EAAC,QAAA,EAAK,WAAU,6DAA4D,OAAO,EAAE,YAAY,WAAW,OAAO,WAAW,UAAU,IAAI,YAAY,OACrJ,UAAA;AAAA,YAAAgH;AAAA,YAAW;AAAA,YAAOA,MAAe,IAAI,MAAM;AAAA,UAAA,EAAA,CAC9C;AAAA,QAAA,GACF;AAAA,QAECD,EAAO,SAAS,IACf,gBAAA/G,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,KAC1D,UAAA;AAAA,UAAAiH,EAAc,IAAI,CAACI,GAAOpD,MAAU;;AACnC,kBAAMqD,MAAcC,IAAAF,EAAM,cAAN,gBAAAE,EAAiB,WAAU,SAAStD,IAAQ,CAAC,IAC3DuD,IAAgB,MAAM,QAAQH,EAAM,OAAO,IAAIA,EAAM,QAAQ,SAAS,GACtEI,MAAYC,IAAAL,EAAM,cAAN,gBAAAK,EAAiB,WAAU,IACvCC,MAAWC,IAAAP,EAAM,aAAN,gBAAAO,EAAgB,WAAU,IACrCC,IAAaL,IAAgB,KAAKC,KAAaE;AACrD,gBAAIG,IAAa;AACjB,mBAAIL,IAAWK,IAAa,UAAUL,CAAS,KACtCE,IAAUG,IAAa,SAASH,CAAQ,KACxCH,IAAgB,MAAGM,IAAa,GAAGN,CAAa,YAAYA,MAAkB,IAAI,MAAM,EAAE,KAEjG,gBAAAxH,EAAC,OAAA,EAAgB,WAAU,4CACzB,UAAA;AAAA,cAAA,gBAAAC,EAAC,SAAI,WAAU,gGAA+F,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,WAAW,OAAO,WAAW,UAAU,IAAI,YAAY,IAAA,GAC9M,cAAQ,GACX;AAAA,cACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,yGAAwG,OAAO,EAAE,YAAY,WAAW,aAAa,UAAA,GAClK,UAAA;AAAA,gBAAA,gBAAAC,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,UAAA,GAAc,UAAAqH,EAAA,CAAY;AAAA,gBAC/E,gBAAAtH,EAAC,QAAA,EAAK,WAAW,4CAA4C6H,IAAa,iBAAiB,eAAe,IAAI,OAAO,EAAE,UAAU,GAAA,GAC/H,UAAA;AAAA,kBAAA,gBAAA5H,EAAC8H,IAAA,EAAS,MAAM,IAAI,WAAU,oBAAmB,OAAO,EAAE,OAAOF,IAAa,YAAY,UAAA,EAAU,CAAG;AAAA,kBACtGC;AAAA,gBAAA,EAAA,CACH;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,GAVQ7D,CAWV;AAAA,UAEJ,CAAC;AAAA,UACAiD,IAAkB,KACjB,gBAAAlH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,aAAa,WAAW,YAAY,WAAW,aAAa,UAAU,QAAQ6G,IAAY,YAAY,UAAA;AAAA,cAC/I,MAAMA,IAAY,SAAY;AAAA,cAC9B,UAAUA,IAAY,SAAY;AAAA,cAClC,SAAS,CAACpG,MAAM;AAAE,gBAAIoG,MAAmBpG,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cAC9E,WAAW,CAACH,MAAM;AAAE,gBAAIoG,KAAapG,EAAE,QAAQ,YAAiBA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACtG,UAAA;AAAA,gBAAA;AAAA,gBACIsG;AAAA,gBAAgB;AAAA,gBAAYA,IAAkB,IAAI,MAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAC7D,GAEJ,IAEA,gBAAAjH,EAAC,OAAA,EAAI,WAAU,+CAA8C,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,YAAY,WAAW,aAAa,WAAW,aAAa,SAAA,GAAY,UAAA,uBAAA,CAE9K;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACvE0D,KAAe,gBAAA5D,EAACgD,IAAA,EAAqB,MAAMY,GAAa,WAAW,IAAA,CAAK;AAAA,EAAA,GAC3E;AAEJ,GC9HMmE,KAAY,CAAC,EAAE,IAAApH,GAAI,MAAAS,QAAsB;AAC7C,QAAM,EAAE,YAAAqC,GAAY,cAAAC,EAAA,IAAiB9D,EAAA,GAC/B,EAAE,UAAAoI,GAAU,MAAAC,EAAA,IAAS7G,GACrBwG,IAAuCI,KAAa,QAAQC,GAC5DC,IAAcN,IAAa,QAAQI,CAAQ,IAAIC,CAAI,KAAK;AAE9D,2BACG,OAAA,EAAI,OAAO,EAAE,OAAO,OACnB,UAAA;AAAA,IAAA,gBAAAjI,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sFACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,SAAI,WAAU,wEAAuE,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,0BAChI,UAAA,gBAAAA,EAACmI,IAAA,EAAW,MAAM,IAAI,OAAM,WAAU,GACxC;AAAA,UACA,gBAAAnI,EAAC,UAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,QAAA,CAAK;AAAA,QAAA,GAC5E;AAAA,QACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAEpF,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAAM;AAAE,gBAAIA,EAAE,QAAQ,YAAWA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAEtF,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBACC,OAAA,EAAI,WAAU,qCAAoC,OAAO,EAAE,YAAY,WAAW,UAAU,GAAA,GAC3F,4BAAC,QAAA,EAAK,WAAW8D,IAAa,8BAA8B,iBAAkB,aAAY,EAAA,CAC5F;AAAA,IAAA,GACF;AAAA,IACA,gBAAA5H,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GCtBMkI,IAA4C;AAAA,EAChD,OAAU,EAAE,OAAO,SAAa,IAAI,WAAW,OAAO,WAAW,UAAUC,GAAA;AAAA,EAC3E,OAAU,EAAE,OAAO,SAAa,IAAI,WAAW,OAAO,WAAW,UAAUC,EAAA;AAAA,EAC3E,OAAU,EAAE,OAAO,YAAa,IAAI,WAAW,OAAO,WAAW,UAAUA,EAAA;AAAA,EAC3E,KAAU,EAAE,OAAO,OAAa,IAAI,WAAW,OAAO,WAAW,UAAUC,GAAA;AAAA,EAC3E,UAAU,EAAE,OAAO,UAAa,IAAI,WAAW,OAAO,WAAW,UAAUD,EAAA;AAAA,EAC3E,SAAU,EAAE,OAAO,WAAa,IAAI,WAAW,OAAO,WAAW,UAAUE,GAAA;AAC7E,GAEMC,KAA6B;AAAA,EACjC,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,UAAUH;AACZ;AAEA,SAASI,GAAoBtH,GAA2C;;AACtE,UAAQA,EAAK,SAAA;AAAA,IACX,KAAK;AAAY,eAAOkG,IAAAlG,EAAK,YAAL,gBAAAkG,EAAc,KAAK,UAASlG,EAAK,aAAa;AAAA,IACtE,KAAK;AAAY,aAAOA,EAAK,gBAAgB;AAAA,IAC7C,KAAK;AAAY,aAAOA,EAAK,eAAe,uBAAuB;AAAA,IACnE,KAAK;AAAY,aAAOA,EAAK,SAAS;AAAA,IACtC,KAAK;AAAY,aAAOA,EAAK,kBAAkB;AAAA,IAC/C,KAAK;AAAY,aAAOA,EAAK,cAAc;AAAA,IAC3C;AAAiB,aAAOA,EAAK,aAAa;AAAA,EAAA;AAE9C;AAEA,SAASuH,GAAkBvH,GAA2C;AACpE,UAAQA,EAAK,SAAA;AAAA,IACX,KAAK;AAAU,aAAOA,EAAK,gBAAgBA,EAAK,WAAW;AAAA,IAC3D,KAAK,SAAU;AACb,YAAMwH,IAAMxH,EAAK;AACjB,aAAOwH,IAAOA,EAAI,SAAS,KAAK,GAAGA,EAAI,MAAM,GAAG,EAAE,CAAC,MAAMA,IAAO;AAAA,IAClE;AAAA,IACA,KAAK;AAAU,aAAOxH,EAAK,cAAc;AAAA,IACzC;AAAe,aAAOA,EAAK,WAAW;AAAA,EAAA;AAE1C;AAEA,MAAMyH,KAAmB,CAAC,EAAE,IAAAlI,GAAI,MAAAS,QAAsB;AACpD,QAAM,EAAE,YAAAqC,GAAY,cAAAC,EAAA,IAAiB9D,EAAA,GAC/BkJ,IAAI1H,GACJ2H,IAAQD,EAAE,WAAWV,EAAaU,EAAE,OAAO,IAAKV,EAAaU,EAAE,OAAO,IAAIL,IAC1EO,IAAYN,GAAoBI,CAAC,GACjCG,IAAcN,GAAkBG,CAAC,GACjClB,IAAa,CAAC,EAAEkB,EAAE,WAAWE,IAC7BE,IAAgBH,EAAK;AAE3B,2BACG,OAAA,EAAI,OAAO,EAAE,OAAOI,KACnB,UAAA;AAAA,IAAA,gBAAAnJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,wEAAuE,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY+I,EAAK,GAAA,GACrI,4BAACG,GAAA,EAAc,MAAM,IAAI,OAAOH,EAAK,OAAO,EAAA,CAC9C;AAAA,UACA,gBAAA/I,EAAC,QAAA,EAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAC5D,YAAE,UAAU,GAAG+I,EAAK,KAAK,kBAAkB,eAAA,CAC9C;AAAA,QAAA,GACF;AAAA,QACA,gBAAAhJ,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAE1I,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAE5I,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBAEC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,WAAW,UAAU,MACzG,cACC,gBAAA/D,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,WAAU,8BAA6B,OAAO,EAAE,UAAU,IAAI,YAAY+I,EAAK,IAAI,OAAOA,EAAK,OAAO,YAAY,KAAK,YAAY,EAAA,GACtI,YAAK,OACR;AAAA,UACA,gBAAA/I,EAAC,UAAK,WAAU,iCAAgC,OAAO,EAAE,UAAU,IAAA,GAAQ,UAAAgJ,EAAA,CAAU;AAAA,QAAA,GACvF;AAAA,QACCC,KAAe,gBAAAjJ,EAAC,QAAA,EAAK,WAAU,kCAAiC,OAAO,EAAE,UAAU,OAAQ,UAAAiJ,EAAA,CAAY;AAAA,MAAA,GAC1G,IAEA,gBAAAjJ,EAAC,QAAA,EAAK,WAAU,iBAAgB,4BAAc,EAAA,CAElD;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GClHMkJ,IAAsC;AAAA,EAC1C,WAAW;AAAA,EACX,MAAM;AACR,GAEMC,KAAqB,CAAC,EAAE,MAAAjI,QAAsB;AAClD,QAAM,EAAE,mBAAAf,EAAA,IAAsBT,EAAA,GACxB,EAAE,OAAA4B,IAAQ,mBAAmB,aAAA8H,GAAa,YAAAC,GAAY,QAAA9H,MAAWL,GAEjES,IAAa,CAACrB,MAA8C;AAChE,IAAAA,EAAE,gBAAA,GACFH,EAAA;AAAA,EACF,GAEMmJ,IAAa,CAAChJ,MAA8C;AAChE,IAAAA,EAAE,gBAAA,GACE8I,eAAuB,UAAU,UAAUA,CAAW,EAAE,MAAM,MAAA;AAAA,KAAe;AAAA,EACnF;AAEA,2BACG,OAAA,EAAI,OAAO,EAAE,OAAOH,KACnB,UAAA;AAAA,IAAA,gBAAAnJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,QAAQ,UAAU,SAAA,GAC1F,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAY,wBAAwB,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,YAAY,EAAA,GACrK,UAAA,gBAAAA,EAACwI,IAAA,EAAU,MAAM,IAAI,OAAM,UAAA,CAAU,EAAA,CACvC;AAAA,UACA,gBAAAxI,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,aAAa,UAAA,kBAAA,CAAe;AAAA,QAAA,GACnF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,SAAS6B;AAAA,YACT,WAAW,CAACrB,MAA2C;AAAE,eAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAgBA,CAAC;AAAA,YAAG;AAAA,YAChH,WAAU;AAAA,YACV,OAAO,EAAE,cAAc,GAAG,QAAQ,UAAA;AAAA,YAElC,UAAA,gBAAAR,EAACyC,GAAA,EAAkB,MAAM,IAAI,OAAM,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5C,GACF;AAAA,MAEA,gBAAA1C,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,WAAW,QAAQ,uBACxG,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,YAAY,IAAA,GAAQ,UAAAwB,EAAA,CAAM;AAAA,UACxEC,KACC,gBAAAzB,EAAC,QAAA,EAAK,WAAU,8BAA6B,OAAO,EAAE,UAAU,IAAI,YAAY,QAAQ,QAAQ,qBAAqB,OAAO,aACzH,UAAAyB,GACH;AAAA,UAED8H,KAAcA,MAAe,UAAUH,EAAYG,CAAU,KAC5D,gBAAAvJ,EAAC,QAAA,EAAK,WAAU,8BAA6B,OAAO,EAAE,UAAU,IAAI,YAAY,WAAW,OAAO,QAAQ,YAAY,OACnH,UAAAoJ,EAAYG,CAAU,EAAA,CACzB;AAAA,QAAA,GAEJ;AAAA,QACCD,uBACE,OAAA,EAAI,WAAU,4CAA2C,OAAO,EAAE,WAAW,EAAA,GAC5E,UAAA;AAAA,UAAA,gBAAAtJ,EAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,YAAY,aAAa,MAAM,GAAG,UAAU,UAAU,cAAc,YAAY,YAAY,SAAA,GACxI,UAAAsJ,GACH;AAAA,4BACC/I,GAAA,EAAQ,OAAM,YAAW,WAAU,OAAM,OAAK,IAC7C,UAAA,gBAAAP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,SAASwJ;AAAA,cACT,WAAW,CAAChJ,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAgBA,CAAC;AAAA,cAAG;AAAA,cAChH,OAAO,EAAE,QAAQ,WAAW,YAAY,EAAA;AAAA,cAExC,UAAA,gBAAAR,EAACyJ,IAAA,EAAc,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA,EAC3C,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IACA,gBAAAzJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GCjFMwJ,KAAc,CAAC,EAAE,IAAA/I,GAAI,MAAAS,QAAsB;;AAC/C,QAAM,EAAE,YAAAqC,GAAY,cAAAC,GAAc,cAAAQ,EAAA,IAAiBtE,EAAA,GAC7C,EAAE,QAAA+J,GAAQ,KAAAC,GAAK,gBAAAxF,EAAA,IAAmBhD,GAClCuD,IAAkBP,KACnBkD,IAAApD,KAAA,gBAAAA,EAAc,QAAQE,OAAtB,gBAAAkD,EAAuC,OACxC,gBAAAtH,EAAC6J,IAAA,EAAO,MAAM,IAAI,OAAM,UAAA,CAAU,GAChCjC,IAAa,CAAC,EAAE+B,KAAUC,IAC1BE,KAAYH,KAAA,gBAAAA,EAAQ,kBAAiB,IACrCI,IAAcC,GAAkBF,CAAS,KAAK;AAEpD,2BACG,OAAA,EAAI,OAAO,EAAE,OAAOX,KACnB,UAAA;AAAA,IAAA,gBAAAnJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,SAAS,QAAQ,YAAY,UAAU,gBAAgB,YACzF,UAAA2E,GACH;AAAA,UACA,gBAAA3E,EAAC,UAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAAM,UAAA,gBAAA,CAAa;AAAA,QAAA,GACpF;AAAA,QACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAE1I,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAE5I,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBAEC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,WAAW,UAAU,MACzG,cACC,gBAAA/D,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA;AAAA,QAAAgK,KACC,gBAAA/J,EAAC,UAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,SAAS,WAAW,cAAc,GAAG,YAAY+J,EAAY,IAAI,OAAOA,EAAY,OAAO,YAAY,EAAA,GAClJ,UAAAD,EAAA,CACH;AAAA,QAEF,gBAAA9J,EAAC,QAAA,EAAK,WAAU,iCAAgC,OAAO,EAAE,YAAY,aAAa,UAAU,GAAA,GAAM,OAAO4J,GAAM,UAAAA,EAAA,CAAI;AAAA,MAAA,GACrH,IAEA,gBAAA5J,EAAC,QAAA,EAAK,WAAU,iBAAgB,4BAAc,EAAA,CAElD;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GC5CM+J,KAA0C;AAAA,EAC9C,IAAI;AAAA,EAAK,KAAK;AAAA,EAAK,IAAI;AAAA,EAAK,KAAK;AAAA,EAAK,IAAI;AAAA,EAAK,KAAK;AAAA,EACpD,UAAU;AAAA,EAAY,YAAY;AAAA,EAAe,UAAU;AAAA,EAC3D,SAAS;AAAA,EAAY,YAAY;AACnC,GAEMC,KAAsB,CAAC,EAAE,IAAAvJ,GAAI,MAAAS,QAAsB;AACvD,QAAM,EAAE,YAAAqC,GAAY,cAAAC,EAAA,IAAiB9D,EAAA,GAC/B,EAAE,OAAAoC,IAAQ,oBAAoB,eAAAmI,IAAgB,CAAA,GAAI,eAAAC,MAAkBhJ,GACpEwG,IAAauC,EAAc,SAAS;AAE1C,2BACG,OAAA,EAAI,OAAO,EAAE,OAAOhB,KACnB,UAAA;AAAA,IAAA,gBAAAnJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAY,wBAAwB,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAA,GAC/I,UAAA,gBAAAA,EAACqK,MAAY,MAAM,IAAI,OAAM,UAAA,CAAU,EAAA,CACzC;AAAA,UACA,gBAAArK,EAAC,UAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAAO,UAAAgC,EAAA,CAAM;AAAA,QAAA,GAC9E;AAAA,QACA,gBAAAjC,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAE1I,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAE5I,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEA,gBAAA9D,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY,WAAW,UAAU,MACzG,UAAA4H,IACC,gBAAA7H,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAA,GAC1D,UAAA;AAAA,QAAAoK,EAAc,IAAI,CAACG,GAAQhH,MAAQ;;AAClC,gBAAMiH,IAAUC,EAAelH,IAAMkH,EAAe,MAAM,GACpDC,KAAiBnD,IAAAgD,EAAO,eAAP,gBAAAhD,EAAoB,IACrCoD,OAAcjD,IAAA6C,EAAO,eAAP,gBAAA7C,EAAmB,WAAU,KAAK;AACtD,iBACE,gBAAA1H,EAAC,OAAA,EAAqB,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACzE,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,SAAS,WAAW,cAAc,IAAI,YAAYuK,EAAQ,IAAI,OAAOA,EAAQ,OAAO,YAAY,KAC3I,UAAAD,EAAO,SAASA,EAAO,IAAA,CAC1B;AAAA,YACCG,IACC,gBAAA1K,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,UAAU,UAAU,cAAc,YAAY,YAAY,YACtG,UAAA;AAAA,cAAA0K,EAAe;AAAA,cAAM;AAAA,cAAER,GAAgBQ,EAAe,QAAQ,KAAKA,EAAe;AAAA,cAClFA,EAAe,QAAQ,IAAIA,EAAe,KAAK,KAAK;AAAA,cACpDC,IAAa,IAAI,KAAKA,CAAU,UAAU;AAAA,YAAA,EAAA,CAC7C,IAEA,gBAAA1K,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAO,aAAa,UAAA,oBAAA,CAAiB;AAAA,UAAA,EAAA,GAX5DsK,EAAO,GAajB;AAAA,QAEJ,CAAC;AAAA,QACAF,KACC,gBAAArK,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,WAAW,KACtE,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,SAAS,WAAW,cAAc,IAAI,YAAY,WAAW,OAAO,WAAW,YAAY,EAAA,GAAK,UAAA,WAE9I;AAAA,UACA,gBAAAA,EAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,UAAA,GAAa,UAAA,gBAAA,CAAa;AAAA,QAAA,EAAA,CAChE;AAAA,MAAA,GAEJ,IAEA,gBAAAA,EAAC,QAAA,EAAK,WAAU,iBAAgB,yDAA2C,EAAA,CAE/E;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GC5FMyK,KAAkB,CAAC,EAAE,IAAAhK,GAAI,MAAAS,QAAsB;;AACnD,QAAM,EAAE,YAAAqC,GAAY,cAAAC,GAAc,cAAAQ,EAAA,IAAiBtE,EAAA,GAC7C,EAAE,OAAAoC,IAAQ,gBAAgB,YAAA4I,GAAY,eAAAC,GAAe,gBAAAzG,GAAgB,WAAA0G,MAAc1J,GACnFuD,IAAkBP,KACnBkD,IAAApD,KAAA,gBAAAA,EAAc,QAAQE,OAAtB,gBAAAkD,EAAuC,OACxC,gBAAAtH,EAAC+K,IAAA,EAAc,MAAM,IAAI,OAAM,UAAA,CAAU,GACvCnD,IAAa,CAAC,CAACgD,GAEfI,IAAgB,CAACxK,MAA8C;AACnE,IAAAA,EAAE,gBAAA,GACEoK,KAAcE,KAAWA,EAAUF,CAAU;AAAA,EACnD;AAEA,2BACG,OAAA,EAAI,OAAO,EAAE,OAAOzB,KACnB,UAAA;AAAA,IAAA,gBAAAnJ,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,KAAK,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,IACrE,gBAAAH,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,uBAAuB,cAAc,GAAG,YAAY,OAAA,GACxE,UAAA;AAAA,MAAA,gBAAAA,EAAC,SAAI,WAAU,8DAA6D,OAAO,EAAE,SAAS,cAC5F,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,SAAI,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,YAAY,uBAAuB,SAAS,QAAQ,YAAY,UAAU,gBAAgB,SAAA,GAC7I,UAAA2E,GACH;AAAA,UACA,gBAAA3E,EAAC,UAAK,WAAU,6BAA4B,OAAO,EAAE,UAAU,GAAA,GAAO,UAAAgC,EAAA,CAAM;AAAA,QAAA,GAC9E;AAAA,QACA,gBAAAjC,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cAAS,UAAU;AAAA,cACxB,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAG;AAAA,cACvD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBiD,EAAW9C,CAAE;AAAA,cAAK;AAAA,cAE1I,UAAA,gBAAAX,EAACyC,GAAA,EAAkB,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/B,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAAU,MAAK;AAAA,cAAS,UAAU;AAAA,cAC5C,SAAS,CAACQ,MAAM;AAAE,gBAAAA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAG;AAAA,cACzD,WAAW,CAACH,MAA2C;AAAE,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAAOA,EAAE,gBAAA,GAAmBkD,EAAa/C,CAAE;AAAA,cAAK;AAAA,cAE5I,UAAA,gBAAAX,EAAC8D,GAAA,EAAgB,OAAM,OAAM,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEA,gBAAA9D,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cAAc,SAAS,aAAa,cAAc,GAAG,YAAY4H,IAAa,YAAY,WAAW,UAAU,IAAI,QAAQA,IAAa,sBAAsB,OAAA,GACjL,UAAAA,IACC,gBAAA7H,EAAC,OAAA,EAAI,WAAU,8DACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,OAAO,UAAA,GAClD,UAAA6K,KAAiBD,EAAA,CACpB;AAAA,UACA,gBAAA7K,EAAC,QAAA,EAAK,OAAO,EAAE,UAAU,IAAI,OAAO,WAAW,YAAY,YAAA,GAAe,UAAA;AAAA,YAAA;AAAA,YAAK6K;AAAA,UAAA,EAAA,CAAW;AAAA,QAAA,GAC5F;AAAA,QACCE,KACC,gBAAA/K;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAU;AAAA,YACV,SAASiL;AAAA,YACT,WAAW,CAACxK,MAA2C;AAAE,eAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAmBA,CAAC;AAAA,YAAG;AAAA,YACnH,OAAO,EAAE,QAAQ,WAAW,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,UAAU,IAAI,OAAO,UAAA;AAAA,YAEhG,UAAA;AAAA,cAAA,gBAAAR,EAACiL,IAAA,EAAY,MAAM,GAAA,CAAI;AAAA,cAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAE3B,GAEJ,IAEA,gBAAAjL,EAAC,QAAA,EAAK,WAAU,iBAAgB,gDAAkC,EAAA,CAEtE;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACC,GAAA,EAAO,MAAK,UAAS,UAAUC,EAAS,QAAQ,OAAO,EAAE,SAAS,EAAA,EAAE,CAAG;AAAA,EAAA,GAC1E;AAEJ,GCrEagL,KAA8B;AAAA,EACzC,WAAWpL;AAAA,EACX,SAASK;AAAA,EACT,gBAAgBC;AAAA,EAChB,aAAaM;AAAA,EACb,aAAaS;AAAA,EACb,WAAW0B;AAAA,EACX,YAAYW;AAAA,EACZ,YAAYS;AAAA,EACZ,cAAcyC;AAAA,EACd,WAAWqB;AAAA,EACX,kBAAkBc;AAAA,EAClB,oBAAoBQ;AAAA,EACpB,aAAaK;AAAA,EACb,qBAAqBQ;AAAA,EACrB,iBAAiBS;AACnB,GC7BMQ,KAAI,MACJC,KAAS,GACTC,IAAY,GACZC,KAAa,IACbC,KAAc,IACdC,KAAS,GAuBTC,KAAoB,CAAC;AAAA,EACzB,IAAIC;AAAA,EACJ,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAvK;AAAA,EACA,QAAAwK;AAAA,EACA,MAAA7K;AACF,MAAwC;AACtC,QAAM,CAAC8K,GAAUC,GAAQC,CAAM,IAAIC,EAAgB;AAAA,IACjD,SAAAV;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,EAAA,CACD,GAEKQ,IAAYlL,KAAA,gBAAAA,EAAM,OAClBmL,IAASD,MAAc,QACvBE,IAAYD,KAAUD,MAAc,QAEpCG,IAAYd,KAAWE,IAAUF,KAAW,GAC5Ce,IAAYd,KAAWE,IAAUF,KAAW,GAC5Ce,IAAahB,IAAW,KAAKE,IAAUF,KAAY,GACnDiB,IAAahB,IAAW,KAAKE,IAAUF,KAAY,GAEnDiB,IAAqBzL,KAAA,gBAAAA,EAAM,gBAE3B0L,IAAc,CAACtM,MAA8C;AAEjE,QADAA,EAAE,gBAAA,GACE,OAAOqM,KAAuB,WAAY;AAC9C,UAAME,IAA0B;AAAA,MAC9B,QAAArB;AAAA,MACA,QAAQjK;AAAA,MACR,cAAcA;AAAA,MACd,cAAcwK;AAAA,MACd,UAAU;AAAA,MACV,iBAAiBxK;AAAA,MACjB,mBAAmBL,KAAA,gBAAAA,EAAM;AAAA,MACzB,gBAAgBA,KAAA,gBAAAA,EAAM;AAAA,IAAA;AAExB,IAAAyL,EAAmBpL,GAAQsL,CAAO;AAAA,EACpC,GAEMC,IAAgB,CAACxM,MAA2B;AAChD,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFsM,EAAYtM,CAAC;AAAA,EAEjB,GAEMyM,IAAc,MAClB,gBAAAlN,EAAAuC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAvC,EAAC,KAAA,EAAE,WAAU,uBACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,UAAA,EAAO,GAAGmL,IAAG,WAAU,oBAAmB;AAAA,wBAC1C,QAAA,EAAK,IAAI,GAAG,IAAI,CAACE,GAAW,IAAI,GAAG,IAAIA,GAAW,aAAaD,IAAQ,eAAc,SAAQ,WAAU,aAAY;AAAA,wBACnH,QAAA,EAAK,IAAI,CAACC,GAAW,IAAI,GAAG,IAAIA,GAAW,IAAI,GAAG,aAAaD,IAAQ,eAAc,SAAQ,WAAU,YAAA,CAAY;AAAA,IAAA,GACtH;AAAA,IACA,gBAAArL,EAAC,KAAA,EAAE,WAAU,qBAAoB,WAAU,oBACzC,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,GAAG,GAAG,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,IAAI,GAAG,WAAU,cAAa;AAAA,MACzE,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,WAAU,cAAa;AAAA,MACpD,gBAAAA,EAAC,UAAK,GAAG,IAAI,GAAG,GAAG,YAAW,UAAS,kBAAiB,WAAU,MAAK,SAAQ,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,eAAe,OAAA,GAAU,UAAA,WAAA,CAEhJ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF,GAGIkN,IAAYL,IAAqB;AAAA,IACrC,SAASC;AAAA,IACT,WAAWE;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO,EAAE,QAAQ,WAAW,eAAe,MAAA;AAAA,EAAe,IACxD;AAAA,IACF,OAAO,EAAE,QAAQ,WAAW,eAAe,MAAA;AAAA,EAAe;AAG5D,SACE,gBAAAjN,EAAC,KAAA,EAAE,WAAU,0BACX,UAAA;AAAA,IAAA,gBAAAC,EAACmN,GAAA,EAAS,IAAIzB,GAAQ,MAAMQ,GAAU;AAAA,IACrCM,IACC,gBAAAzM,EAAAuC,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAvC,EAAC,OAAE,WAAW,aAAa0M,CAAS,KAAKC,CAAS,KAChD,UAAA;AAAA,QAAA,gBAAA1M,EAAC,QAAA,EAAK,GAAG,CAACsL,KAAa,GAAG,GAAG,CAACC,KAAc,GAAG,OAAOD,IAAY,QAAQC,IAAa,IAAIC,IAAQ,IAAIA,IAAQ,MAAMe,IAAS,YAAY,WAAW;AAAA,0BACpJ,QAAA,EAAK,YAAW,UAAS,kBAAiB,WAAU,MAAMA,IAAS,YAAY,WAAW,OAAO,EAAE,UAAU,IAAI,YAAY,IAAA,GAC3H,UAAAD,EAAA,CACH;AAAA,MAAA,GACF;AAAA,wBACC,KAAA,EAAE,WAAU,8BAA6B,WAAW,aAAaK,CAAU,KAAKC,CAAU,KAAK,eAAY,kBAAkB,GAAGM,GAC/H,UAAA,gBAAAlN,EAACiN,KAAY,EAAA,CACf;AAAA,IAAA,GACF,IAEA,gBAAAjN,EAAC,KAAA,EAAE,WAAU,8BAA6B,WAAW,aAAamM,CAAM,KAAKC,CAAM,KAAK,eAAY,kBAAkB,GAAGc,GACvH,UAAA,gBAAAlN,EAACiN,KAAY,EAAA,CACf;AAAA,EAAA,GAEJ;AAEJ,GCjIM9B,KAAI,MACJC,KAAS,GACTC,IAAY,GAUZ+B,KAAW,CAAC;AAAA,EAChB,IAAAzM;AAAA,EACA,SAAAgL;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAArK;AAAA,EACA,QAAAwK;AAAA,EACA,MAAA7K;AACF,MAA+B;AAC7B,QAAM,CAAC8K,GAAUC,GAAQC,CAAM,IAAIC,EAAgB;AAAA,IACjD,SAAAV;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,EAAA,CACD,GAEKe,IAAqBzL,KAAA,gBAAAA,EAAM,gBAE3B0L,IAAc,CAACtM,MAA8C;AAEjE,IADAA,EAAE,gBAAA,GACE,OAAOqM,KAAuB,cAClCA,EAAmBpL,GAAQ;AAAA,MACzB,QAAQd;AAAA,MACR,QAAQc;AAAA,MACR,cAAcA;AAAA,MACd,cAAcwK;AAAA,MACd,UAAU;AAAA,MACV,iBAAiBxK;AAAA,MACjB,mBAAmBL,KAAA,gBAAAA,EAAM;AAAA,MACzB,gBAAgBA,KAAA,gBAAAA,EAAM;AAAA,MACtB,UAAUA,KAAA,gBAAAA,EAAM;AAAA,MAChB,QAAQA,KAAA,gBAAAA,EAAM;AAAA,IAAA,CACf;AAAA,EACH,GAEM4L,IAAgB,CAACxM,MAA2B;AAChD,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFsM,EAAYtM,CAAC;AAAA,EAEjB;AAEA,SACE,gBAAAT,EAAC,KAAA,EAAE,WAAU,0BACX,UAAA;AAAA,IAAA,gBAAAC,EAACmN,GAAA,EAAS,IAAAxM,GAAQ,MAAMuL,GAAU,OAAO,EAAE,QAAQ,aAAa;AAAA,IAChE,gBAAAnM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,aAAaoM,CAAM,KAAKC,CAAM;AAAA,QACzC,OAAO;AAAA,UACL,QAAQS,IAAqB,YAAY;AAAA,UACzC,eAAe;AAAA,UACf,SAAS;AAAA,QAAA;AAAA,QAEX,SAASA,IAAqBC,IAAc;AAAA,QAC5C,WAAWD,IAAqBG,IAAgB;AAAA,QAChD,MAAMH,IAAqB,WAAW;AAAA,QACtC,UAAUA,IAAqB,IAAI;AAAA,QACnC,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAA7M,EAAC,UAAA,EAAO,GAAGmL,IAAG,WAAU,oBAAmB;AAAA,UAC3C,gBAAAnL;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,IAAI,CAACqL;AAAAA,cACL,IAAI;AAAA,cACJ,IAAIA;AAAAA,cACJ,aAAaD;AAAAA,cACb,eAAc;AAAA,cACd,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZ,gBAAApL;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI,CAACqL;AAAAA,cACL,IAAI;AAAA,cACJ,IAAIA;AAAAA,cACJ,IAAI;AAAA,cACJ,aAAaD;AAAAA,cACb,eAAc;AAAA,cACd,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZ,gBAAArL,EAAC,KAAA,EAAE,WAAU,qBAAoB,WAAU,oBACzC,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,GAAG;AAAA,gBACH,GAAG;AAAA,gBACH,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,IAAI;AAAA,gBACJ,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,WAAU,cAAa;AAAA,YACpD,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,GAAG;AAAA,gBACH,GAAG;AAAA,gBACH,YAAW;AAAA,gBACX,kBAAiB;AAAA,gBACjB,MAAK;AAAA,gBACL,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,eAAe,OAAA;AAAA,gBACxD,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GCrHMqN,KAAY,CAAC,EAAE,IAAA1M,GAAI,SAAAgL,GAAS,SAAAC,GAAS,SAAAC,GAAS,SAAAC,QAAyB;AAC3E,QAAM,CAACI,CAAQ,IAAIG,EAAgB,EAAE,SAAAV,GAAS,SAAAC,GAAS,SAAAC,GAAS,SAAAC,GAAS;AACzE,SAAO,gBAAA9L,EAACmN,KAAS,IAAAxM,GAAQ,MAAMuL,GAAU,OAAO,EAAE,QAAQ,UAAA,GAAa;AACzE,GCDMf,KAAI,MACJC,KAAS,GACTC,IAAY,GACZiC,KAAiB,KACjBhC,KAAa,IACbC,KAAc,IACdC,KAAS,GAUT+B,KAAgB,CAAC;AAAA,EACrB,IAAA5M;AAAA,EACA,SAAAgL;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAArK;AAAA,EACA,QAAAwK;AAAA,EACA,MAAA7K;AACF,MAAoC;AAClC,QAAM,CAAC8K,GAAUC,GAAQC,CAAM,IAAIC,EAAgB,EAAE,SAAAV,GAAS,SAAAC,GAAS,SAAAC,GAAS,SAAAC,GAAS,GAEnFQ,IAAYlL,KAAA,gBAAAA,EAAM,OAClBmL,IAASD,MAAc,QACvBE,IAAYD,KAAUD,MAAc,QACpCO,IAAqBzL,KAAA,gBAAAA,EAAM,gBAC3BoM,KAAWpM,KAAA,gBAAAA,EAAM,cAAa,MAAS,CAAC,CAACyL,GAEzCC,IAAc,CAACtM,MAA8C;AAEjE,IADAA,EAAE,gBAAA,GACE,OAAOqM,KAAuB,cAClCA,EAAmBpL,GAAQ;AAAA,MACzB,QAAQd;AAAA,MACR,QAAQc;AAAA,MACR,cAAcA;AAAA,MACd,cAAcwK;AAAA,MACd,UAAU;AAAA,MACV,iBAAiBxK;AAAA,MACjB,mBAAmBL,KAAA,gBAAAA,EAAM;AAAA,MACzB,gBAAgBA,KAAA,gBAAAA,EAAM;AAAA,IAAA,CACvB;AAAA,EACH,GAEM4L,IAAgB,CAACxM,MAA2B;AAChD,KAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFsM,EAAYtM,CAAC;AAAA,EAEjB;AAEA,SACE,gBAAAT,EAAC,KAAA,EAAE,WAAU,0BACX,UAAA;AAAA,IAAA,gBAAAC,EAACmN,GAAA,EAAS,IAAAxM,GAAQ,MAAMuL,GAAU,OAAO,EAAE,QAAQ,aAAa;AAAA,IAChE,gBAAAnM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,WAAW,aAAaoM,CAAM,KAAKC,CAAM;AAAA,QACzC,OAAO,EAAE,QAAQS,IAAqB,YAAY,WAAW,eAAe,OAAO,SAAS,OAAA;AAAA,QAC5F,SAASA,IAAqBC,IAAc;AAAA,QAC5C,WAAWD,IAAqBG,IAAgB;AAAA,QAChD,MAAMH,IAAqB,WAAW;AAAA,QACtC,UAAUA,IAAqB,IAAI;AAAA,QAElC,UAAA;AAAA,UAAAL,uBACE,KAAA,EAAE,WAAW,gBAAgBgB,IAAWF,KAAiB,CAAC,KACzD,UAAA;AAAA,YAAA,gBAAAtN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,GAAG,CAACsL,KAAa;AAAA,gBAAG,GAAG,CAACC,KAAc;AAAA,gBACtC,OAAOD;AAAA,gBAAY,QAAQC;AAAA,gBAC3B,IAAIC;AAAA,gBAAQ,IAAIA;AAAA,gBAChB,MAAMe,IAAS,YAAY;AAAA,cAAA;AAAA,YAAA;AAAA,8BAE5B,QAAA,EAAK,YAAW,UAAS,kBAAiB,WAAU,MAAMA,IAAS,YAAY,WAAW,OAAO,EAAE,UAAU,IAAI,YAAY,IAAA,GAC3H,UAAAD,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UAGDkB,KACC,gBAAAzN,EAAC,KAAA,EAAE,WAAU,uBACX,UAAA;AAAA,YAAA,gBAAAC,EAAC,UAAA,EAAO,GAAGmL,IAAG,WAAU,oBAAmB;AAAA,8BAC1C,QAAA,EAAK,IAAI,GAAG,IAAI,CAACE,GAAW,IAAI,GAAG,IAAIA,GAAW,aAAaD,IAAQ,eAAc,SAAQ,WAAU,aAAY;AAAA,8BACnH,QAAA,EAAK,IAAI,CAACC,GAAW,IAAI,GAAG,IAAIA,GAAW,IAAI,GAAG,aAAaD,IAAQ,eAAc,SAAQ,WAAU,YAAA,CAAY;AAAA,UAAA,GACtH;AAAA,UAGDoC,KACC,gBAAAzN,EAAC,KAAA,EAAE,WAAU,qBAAoB,WAAU,oBACzC,UAAA;AAAA,YAAA,gBAAAC,EAAC,QAAA,EAAK,GAAG,GAAG,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,IAAI,GAAG,WAAU,cAAa;AAAA,YACzE,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,WAAU,cAAa;AAAA,YACpD,gBAAAA,EAAC,UAAK,GAAG,IAAI,GAAG,GAAG,YAAW,UAAS,kBAAiB,WAAU,MAAK,SAAQ,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,eAAe,OAAA,GAAU,UAAA,WAAA,CAEhJ;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ,GC7FMyN,KAAoB,CAAC;AAAA,EACzB,IAAA9M;AAAA,EACA,QAAAc;AAAA,EACA,QAAAwK;AAAA,EACA,SAAAN;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAA4B,IAAQ,CAAA;AAAA,EACR,WAAAC;AAAA,EACA,MAAAvM;AACF,MAAwC;AACtC,QAAMwM,KAAkBxM,KAAA,gBAAAA,EAAM,oBAAmB,IAM3CyM,IAAgB,IAChB/H,IAAO8H,KACR,MAAM;AACL,UAAMrK,IAAUuI,IAAU+B;AAC1B,WAAO,KAAKlC,CAAO,IAAIpI,CAAO,MAAMsI,CAAO,IAAItI,CAAO,MAAMsI,CAAO,IAAIC,CAAO;AAAA,EAChF,GAAA,KACC,MAAM;AACL,UAAMgC,IAASlC,IAAU;AACzB,WAAO,KAAKD,CAAO,IAAIC,CAAO,MAAMD,CAAO,IAAImC,CAAM,MAAMjC,CAAO,IAAIiC,CAAM,MAAMjC,CAAO,IAAIC,CAAO;AAAA,EACtG,GAAA,GACE1I,IAAUsK,EAAoD,UAAU,WACxElM,IAAQJ,KAAA,gBAAAA,EAAM,OACdmL,KAASnL,KAAA,gBAAAA,EAAM,YAAW,IAC1B2M,IAAiB3M,KAAA,gBAAAA,EAAM,gBAKvB4M,IAAWJ,IAAkB9B,IAAU+B,IAAgBjC,IAAU,IACjEqC,IAAQtC,KAAWE,IAAUF,MAAYiC,IAAkB,OAAO,OAClEM,IAAQvC,KAAWE,IAAUF,MAAYiC,IAAkB,OAAO,MAClExB,IAAS4B,GAETG,IAAkB,CAAC3N,MAAwB;AAE/C,IADAA,EAAE,gBAAA,GACGuN,KACLA,EAAetM,GAAQ;AAAA,MACrB,QAAQd;AAAA,MACR,QAAQc;AAAA,MACR,cAAcA;AAAA,MACd,cAAcwK;AAAA,MACd,UAAU;AAAA,MACV,iBAAiBxK;AAAA,MACjB,UAAUL,KAAA,gBAAAA,EAAM;AAAA,MAChB,QAAQA,KAAA,gBAAAA,EAAM;AAAA,IAAA,CACf;AAAA,EACH,GAEM+J,IAAI,MACJiD,IAAO;AAEb,2BACG,KAAA,EACC,UAAA;AAAA,IAAA,gBAAApO,EAAC,QAAA,EAAK,IAAAW,GAAQ,GAAGmF,GAAM,MAAK,QAAO,QAAA1C,GAAgB,aAAa,KAAK,WAAAuK,EAAA,CAAsB;AAAA,IAG1FnM,KAAS,CAACoM,KACT,gBAAA5N,EAAC,KAAA,EAAE,WAAW,aAAaiO,CAAK,KAAK7B,CAAM,KACvC,WAAA,MAAM;AACN,YAAMiC,IAAQ,KAAK,IAAI,IAAI7M,EAAM,SAAS,IAAI,EAAE;AAChD,aACE,gBAAAzB,EAAAuC,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAtC;AAAA,UAAC;AAAA,UAAA;AAAA,YAAK,GAAG,CAACqO,IAAQ;AAAA,YAAG,GAAG;AAAA,YAAK,OAAOA;AAAA,YAAO,QAAQ;AAAA,YAAI,IAAI;AAAA,YACzD,MAAM9B,IAAS,YAAY;AAAA,YAC3B,QAAQA,IAAS,YAAY;AAAA,YAC7B,aAAa;AAAA,UAAA;AAAA,QAAA;AAAA,QAEf,gBAAAvM;AAAA,UAAC;AAAA,UAAA;AAAA,YAAK,GAAG;AAAA,YAAG,GAAG;AAAA,YAAG,YAAW;AAAA,YAAS,UAAU;AAAA,YAAI,YAAY;AAAA,YAC9D,MAAMuM,IAAS,YAAY;AAAA,YAC3B,OAAO,EAAE,YAAY,cAAc,eAAe,OAAA;AAAA,YAEjD,UAAA/K;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,GACF;AAAA,IAEJ,KAAG,CACL;AAAA,IAIDuM,KACC,gBAAAhO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAamO,CAAK,KAAK9B,CAAM;AAAA,QACxC,SAAS+B;AAAA,QACT,OAAO,EAAE,QAAQ,WAAW,eAAe,MAAA;AAAA,QAC3C,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAnO,EAAC,UAAA,EAAO,GAAGmL,GAAG,WAAU,oBAAmB;AAAA,4BAC1C,QAAA,EAAK,IAAI,GAAG,IAAI,CAACiD,GAAM,IAAI,GAAG,IAAIA,GAAM,aAAa,GAAG,eAAc,SAAQ,WAAU,aAAY;AAAA,4BACpG,QAAA,EAAK,IAAI,CAACA,GAAM,IAAI,GAAG,IAAIA,GAAM,IAAI,GAAG,aAAa,GAAG,eAAc,SAAQ,WAAU,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACvG,GAEJ;AAEJ;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useMemo as P, useState as T, useRef as M, useEffect as de, useCallback as te } from "react";
|
|
2
2
|
import { useFormik as ke } from "formik";
|
|
3
|
-
import { k as pe,
|
|
3
|
+
import { k as pe, G as Ne, g as oe, a as ue, b as ie, v as se, H as ze, d as Te, V as we } from "./index-y_v8Qog1.js";
|
|
4
4
|
import { jsxs as t, Fragment as q, jsx as e } from "react/jsx-runtime";
|
|
5
|
-
import { Box as n, Collapse as Ie, Tooltip as
|
|
6
|
-
import { MdCheck as G, MdClose as _, MdAdd as J, MdArrowBack as fe, MdEdit as
|
|
5
|
+
import { Box as n, Collapse as Ie, Tooltip as D, Dialog as he, Typography as S, IconButton as Y, Stepper as Fe, Step as Oe, StepLabel as Re, Drawer as We, Chip as Ae, Divider as De } from "@mui/material";
|
|
6
|
+
import { MdCheck as G, MdClose as _, MdAdd as J, MdArrowBack as fe, MdEdit as Ee, MdDeleteOutline as Pe, MdSettings as be, MdArrowForward as Me } from "react-icons/md";
|
|
7
7
|
import { FaWpforms as _e } from "react-icons/fa6";
|
|
8
8
|
function sl({
|
|
9
9
|
schema: l,
|
|
@@ -89,7 +89,7 @@ function $e({ value: l, onChange: o }) {
|
|
|
89
89
|
const p = l ?? 12;
|
|
90
90
|
return /* @__PURE__ */ t(n, { children: [
|
|
91
91
|
/* @__PURE__ */ e("span", { className: m, children: "Column width" }),
|
|
92
|
-
/* @__PURE__ */ e(n, { sx: { display: "flex", gap: 0.5 }, children: Ve.map((c) => /* @__PURE__ */ e(
|
|
92
|
+
/* @__PURE__ */ e(n, { sx: { display: "flex", gap: 0.5 }, children: Ve.map((c) => /* @__PURE__ */ e(D, { title: `colSpan: ${c.value}`, placement: "top", children: /* @__PURE__ */ e(
|
|
93
93
|
n,
|
|
94
94
|
{
|
|
95
95
|
component: "button",
|
|
@@ -221,7 +221,7 @@ function He({ condition: l, onChange: o }) {
|
|
|
221
221
|
] })
|
|
222
222
|
] });
|
|
223
223
|
}
|
|
224
|
-
function
|
|
224
|
+
function E({ id: l, label: o, checked: p, onChange: c }) {
|
|
225
225
|
return /* @__PURE__ */ t(n, { sx: { display: "flex", alignItems: "center", gap: 0.75 }, children: [
|
|
226
226
|
/* @__PURE__ */ e("input", { type: "checkbox", id: l, checked: p, onChange: (a) => c(a.target.checked), style: { cursor: "pointer", width: 14, height: 14, flexShrink: 0 } }),
|
|
227
227
|
/* @__PURE__ */ e("label", { htmlFor: l, className: m, style: { margin: 0, cursor: "pointer" }, children: o })
|
|
@@ -480,12 +480,12 @@ function ge({ field: l, onChange: o, onSave: p, onCancel: c, noFooter: a }) {
|
|
|
480
480
|
/* @__PURE__ */ e("input", { className: v, value: l.info ?? "", onChange: (r) => u("info", r.target.value || void 0), placeholder: "Shown in ℹ tooltip" })
|
|
481
481
|
] }),
|
|
482
482
|
/* @__PURE__ */ t(n, { sx: { display: "flex", flexWrap: "wrap", gap: 1.5 }, children: [
|
|
483
|
-
/* @__PURE__ */ e(
|
|
484
|
-
/* @__PURE__ */ e(
|
|
485
|
-
/* @__PURE__ */ e(
|
|
486
|
-
/* @__PURE__ */ e(
|
|
487
|
-
/* @__PURE__ */ e(
|
|
488
|
-
/* @__PURE__ */ e(
|
|
483
|
+
/* @__PURE__ */ e(E, { id: `${s}-req`, label: "Required", checked: !!l.required, onChange: (r) => u("required", r || void 0) }),
|
|
484
|
+
/* @__PURE__ */ e(E, { id: `${s}-dis`, label: "Disabled", checked: !!l.disabled, onChange: (r) => u("disabled", r || void 0) }),
|
|
485
|
+
/* @__PURE__ */ e(E, { id: `${s}-hid`, label: "Hidden", checked: !!l.hidden, onChange: (r) => u("hidden", r || void 0) }),
|
|
486
|
+
/* @__PURE__ */ e(E, { id: `${s}-opt`, label: "Show optional", checked: !!l.showOptional, onChange: (r) => u("showOptional", r || void 0) }),
|
|
487
|
+
/* @__PURE__ */ e(E, { id: `${s}-div`, label: "Divider after", checked: !!l.dividerAfter, onChange: (r) => u("dividerAfter", r || void 0) }),
|
|
488
|
+
/* @__PURE__ */ e(E, { id: `${s}-frm`, label: "Formula input", checked: !!l.formula, onChange: (r) => u("formula", r || void 0) })
|
|
489
489
|
] })
|
|
490
490
|
] }) })
|
|
491
491
|
] })
|
|
@@ -720,7 +720,7 @@ function re({ open: l, initial: o, onSave: p, onClose: c, editMode: a = !1 }) {
|
|
|
720
720
|
/* @__PURE__ */ e(S, { sx: { fontSize: 14, fontWeight: 700, color: "#0f172a", flex: 1 }, children: a ? "Edit Field" : "Add Field" }),
|
|
721
721
|
/* @__PURE__ */ e(Y, { size: "small", onClick: c, sx: { color: "#94a3b8" }, children: /* @__PURE__ */ e(_, { size: 17 }) })
|
|
722
722
|
] }),
|
|
723
|
-
/* @__PURE__ */ e(Fe, { activeStep: g, sx: { pb: 1.5 }, children: u.map((z,
|
|
723
|
+
/* @__PURE__ */ e(Fe, { activeStep: g, sx: { pb: 1.5 }, children: u.map((z, W) => /* @__PURE__ */ e(Oe, { completed: g > W, children: /* @__PURE__ */ e(Re, { children: z }) }, z)) })
|
|
724
724
|
] }),
|
|
725
725
|
/* @__PURE__ */ t(n, { sx: { flex: 1, overflowY: "auto" }, children: [
|
|
726
726
|
i === 1 && /* @__PURE__ */ e(ge, { field: s, onChange: d, onSave: b, onCancel: c, noFooter: !0 }),
|
|
@@ -759,8 +759,8 @@ function Xe({ field: l, index: o, total: p, onEdit: c, onDelete: a, onMoveUp: i,
|
|
|
759
759
|
] }),
|
|
760
760
|
/* @__PURE__ */ e(S, { sx: { fontSize: 11, color: "#94a3b8", fontFamily: "monospace" }, children: d })
|
|
761
761
|
] }),
|
|
762
|
-
/* @__PURE__ */ e(
|
|
763
|
-
/* @__PURE__ */ e(
|
|
762
|
+
/* @__PURE__ */ e(D, { title: "Edit field", placement: "top", children: /* @__PURE__ */ e(n, { component: "button", onClick: c, sx: { background: "none", border: "none", cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", width: 28, height: 28, borderRadius: "6px", p: 0, color: "#94a3b8", "&:hover": { bgcolor: "#f1f5f9", color: "#475569" } }, children: /* @__PURE__ */ e(Ee, { size: 14 }) }) }),
|
|
763
|
+
/* @__PURE__ */ e(D, { title: "Remove field", placement: "top", children: /* @__PURE__ */ e(n, { component: "button", onClick: a, sx: { background: "none", border: "none", cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", width: 28, height: 28, borderRadius: "6px", p: 0, color: "#94a3b8", "&:hover": { bgcolor: "#fee2e2", color: "#dc2626" } }, children: /* @__PURE__ */ e(Pe, { size: 16 }) }) })
|
|
764
764
|
] });
|
|
765
765
|
}
|
|
766
766
|
function Ze({ open: l, value: o, onSave: p, onClose: c }) {
|
|
@@ -867,7 +867,7 @@ function U({
|
|
|
867
867
|
initialFormulaConfig: x,
|
|
868
868
|
initialConditionConfig: y
|
|
869
869
|
}) {
|
|
870
|
-
const [N, u] = T(!1), [r, b] = T(!1), [f, C] = T(null), [g, I] = T(x ?? {}), [w, z] = T(y ?? {}),
|
|
870
|
+
const [N, u] = T(!1), [r, b] = T(!1), [f, C] = T(null), [g, I] = T(x ?? {}), [w, z] = T(y ?? {}), W = M(d ?? {}), j = P(() => ye(l), [l]), K = P(
|
|
871
871
|
() => d && Object.keys(d).length > 0 ? { ...j, ...d } : j,
|
|
872
872
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
873
873
|
[j, d]
|
|
@@ -881,12 +881,12 @@ function U({
|
|
|
881
881
|
formulaConfig: g,
|
|
882
882
|
conditionConfig: w,
|
|
883
883
|
conditionExpressions: se(w),
|
|
884
|
-
values:
|
|
885
|
-
evaluationPayload: oe({ values:
|
|
884
|
+
values: W.current,
|
|
885
|
+
evaluationPayload: oe({ values: W.current, conditionConfig: w })
|
|
886
886
|
});
|
|
887
887
|
}, [w, g, l]);
|
|
888
888
|
const X = te((F) => {
|
|
889
|
-
|
|
889
|
+
W.current = F, a && a({
|
|
890
890
|
schema: l,
|
|
891
891
|
formulaConfig: g,
|
|
892
892
|
conditionConfig: w,
|
|
@@ -906,7 +906,7 @@ function U({
|
|
|
906
906
|
return {
|
|
907
907
|
...O,
|
|
908
908
|
tabs: le.map(
|
|
909
|
-
(
|
|
909
|
+
(A) => A.id === Q ? { ...A, fields: [...A.fields ?? [], F] } : A
|
|
910
910
|
)
|
|
911
911
|
};
|
|
912
912
|
});
|
|
@@ -919,7 +919,7 @@ function U({
|
|
|
919
919
|
return {
|
|
920
920
|
...O,
|
|
921
921
|
tabs: le.map(
|
|
922
|
-
(
|
|
922
|
+
(A) => A.id === V ? { ...A, fields: (A.fields ?? []).filter((el, Se) => Se !== Q) } : A
|
|
923
923
|
)
|
|
924
924
|
};
|
|
925
925
|
});
|
|
@@ -931,7 +931,7 @@ function U({
|
|
|
931
931
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
932
932
|
}), [l, o]), ae = /* @__PURE__ */ t("div", { className: "schema-builder-root", children: [
|
|
933
933
|
l.length > 0 && /* @__PURE__ */ e("div", { className: "schema-builder-header", children: /* @__PURE__ */ t("div", { className: "schema-builder-actions", children: [
|
|
934
|
-
/* @__PURE__ */ e(
|
|
934
|
+
/* @__PURE__ */ e(D, { title: "Edit schema", placement: "top", children: /* @__PURE__ */ t(
|
|
935
935
|
"button",
|
|
936
936
|
{
|
|
937
937
|
className: "sb-btn sb-btn-outline",
|
|
@@ -942,7 +942,7 @@ function U({
|
|
|
942
942
|
]
|
|
943
943
|
}
|
|
944
944
|
) }),
|
|
945
|
-
/* @__PURE__ */ e(
|
|
945
|
+
/* @__PURE__ */ e(D, { title: "Add a new field", placement: "top", children: /* @__PURE__ */ t(
|
|
946
946
|
"button",
|
|
947
947
|
{
|
|
948
948
|
className: "sb-btn sb-btn-primary",
|
|
@@ -1016,8 +1016,8 @@ function Qe({ fields: l, onOpen: o }) {
|
|
|
1016
1016
|
return /* @__PURE__ */ t(n, { sx: { border: "1px solid #e2e8f0", borderRadius: "8px", bgcolor: "#fff", overflow: "hidden" }, children: [
|
|
1017
1017
|
l.length > 0 ? /* @__PURE__ */ e(n, { sx: { px: 1.5, py: 1.25, display: "flex", flexWrap: "wrap", gap: 0.5 }, children: l.map((p, c) => {
|
|
1018
1018
|
const a = p.id ?? p.name ?? "";
|
|
1019
|
-
return /* @__PURE__ */ e(
|
|
1020
|
-
|
|
1019
|
+
return /* @__PURE__ */ e(D, { title: `${p.type} · ${a}`, placement: "top", children: /* @__PURE__ */ e(
|
|
1020
|
+
Ae,
|
|
1021
1021
|
{
|
|
1022
1022
|
label: p.label || a,
|
|
1023
1023
|
size: "small",
|
|
@@ -1025,7 +1025,7 @@ function Qe({ fields: l, onOpen: o }) {
|
|
|
1025
1025
|
}
|
|
1026
1026
|
) }, c);
|
|
1027
1027
|
}) }) : /* @__PURE__ */ e(n, { sx: { px: 1.5, py: 1.5 }, children: /* @__PURE__ */ e(S, { sx: { fontSize: 12, color: "#94a3b8" }, children: "No fields defined yet" }) }),
|
|
1028
|
-
/* @__PURE__ */ e(
|
|
1028
|
+
/* @__PURE__ */ e(De, { sx: { borderColor: "#f1f5f9" } }),
|
|
1029
1029
|
/* @__PURE__ */ t(n, { onClick: o, sx: { display: "flex", alignItems: "center", gap: 0.75, px: 1.5, py: 1, cursor: "pointer", "&:hover": { bgcolor: "#f8fafc" }, transition: "background 0.12s" }, children: [
|
|
1030
1030
|
l.length === 0 ? /* @__PURE__ */ e(J, { size: 14, color: "#6366f1" }) : /* @__PURE__ */ e(be, { size: 13, color: "#6366f1" }),
|
|
1031
1031
|
/* @__PURE__ */ e(S, { sx: { fontSize: 12, fontWeight: 600, color: "#6366f1", flex: 1 }, children: l.length === 0 ? "Add fields" : "Configure fields" }),
|
|
@@ -1045,7 +1045,7 @@ function cl({
|
|
|
1045
1045
|
drawerTitle: d = "Configure Fields",
|
|
1046
1046
|
drawerWidth: x = 580
|
|
1047
1047
|
}) {
|
|
1048
|
-
const [y, N] = T(!1), [u, r] = T({ type: "list" }), [b, f] = T(l), C = M(null), g = M(void 0), I = M(void 0), w = M(void 0), [z,
|
|
1048
|
+
const [y, N] = T(!1), [u, r] = T({ type: "list" }), [b, f] = T(l), C = M(null), g = M(void 0), I = M(void 0), w = M(void 0), [z, W] = T(null);
|
|
1049
1049
|
function j() {
|
|
1050
1050
|
f(l), r({ type: "list" }), N(!0);
|
|
1051
1051
|
}
|
|
@@ -1060,10 +1060,10 @@ function cl({
|
|
|
1060
1060
|
function X() {
|
|
1061
1061
|
if (u.type !== "edit" || !z) return;
|
|
1062
1062
|
const k = [...b];
|
|
1063
|
-
k[u.index] = z, f(k), r({ type: "list" }),
|
|
1063
|
+
k[u.index] = z, f(k), r({ type: "list" }), W(null);
|
|
1064
1064
|
}
|
|
1065
1065
|
function $() {
|
|
1066
|
-
r({ type: "list" }),
|
|
1066
|
+
r({ type: "list" }), W(null);
|
|
1067
1067
|
}
|
|
1068
1068
|
const Z = JSON.stringify(b) !== JSON.stringify(l);
|
|
1069
1069
|
return u.type === "edit" && b[u.index], /* @__PURE__ */ t(q, { children: [
|
|
@@ -1072,7 +1072,7 @@ function cl({
|
|
|
1072
1072
|
/* @__PURE__ */ e(Qe, { fields: l, onOpen: j })
|
|
1073
1073
|
] }),
|
|
1074
1074
|
/* @__PURE__ */ t(
|
|
1075
|
-
|
|
1075
|
+
We,
|
|
1076
1076
|
{
|
|
1077
1077
|
anchor: "right",
|
|
1078
1078
|
open: y,
|
|
@@ -1080,12 +1080,12 @@ function cl({
|
|
|
1080
1080
|
PaperProps: { sx: { width: x, display: "flex", flexDirection: "column", boxShadow: "-4px 0 24px rgba(0,0,0,0.12)", overflow: "hidden" } },
|
|
1081
1081
|
children: [
|
|
1082
1082
|
/* @__PURE__ */ t(n, { sx: { display: "flex", alignItems: "center", px: 2, py: 1.5, borderBottom: "1px solid #e2e8f0", flexShrink: 0, gap: 1 }, children: [
|
|
1083
|
-
u.type === "edit" && /* @__PURE__ */ e(
|
|
1083
|
+
u.type === "edit" && /* @__PURE__ */ e(D, { title: "Back to fields", placement: "bottom", children: /* @__PURE__ */ e(Y, { size: "small", onClick: $, sx: { color: "#64748b" }, children: /* @__PURE__ */ e(fe, { size: 17 }) }) }),
|
|
1084
1084
|
/* @__PURE__ */ t(n, { sx: { flex: 1 }, children: [
|
|
1085
1085
|
/* @__PURE__ */ e(S, { sx: { fontSize: 14, fontWeight: 700, color: "#0f172a" }, children: u.type === "edit" ? (z == null ? void 0 : z.label) || (z == null ? void 0 : z.id) || "Edit field" : d }),
|
|
1086
1086
|
/* @__PURE__ */ e(S, { sx: { fontSize: 11, color: "#94a3b8" }, children: u.type === "edit" ? "Configure field properties" : `${b.length} field${b.length !== 1 ? "s" : ""} defined` })
|
|
1087
1087
|
] }),
|
|
1088
|
-
u.type === "list" && /* @__PURE__ */ e(
|
|
1088
|
+
u.type === "list" && /* @__PURE__ */ e(D, { title: "Close", placement: "bottom", children: /* @__PURE__ */ e(Y, { size: "small", onClick: L, sx: { color: "#94a3b8" }, children: /* @__PURE__ */ e(_, { size: 17 }) }) })
|
|
1089
1089
|
] }),
|
|
1090
1090
|
u.type === "list" && /* @__PURE__ */ t(q, { children: [
|
|
1091
1091
|
/* @__PURE__ */ e(n, { sx: { flex: 1, overflowY: "auto", p: 2.5 }, children: /* @__PURE__ */ e(
|
|
@@ -1118,7 +1118,7 @@ function cl({
|
|
|
1118
1118
|
ge,
|
|
1119
1119
|
{
|
|
1120
1120
|
field: z,
|
|
1121
|
-
onChange:
|
|
1121
|
+
onChange: W,
|
|
1122
1122
|
onSave: X,
|
|
1123
1123
|
onCancel: $
|
|
1124
1124
|
}
|
|
@@ -1134,4 +1134,4 @@ export {
|
|
|
1134
1134
|
cl as a,
|
|
1135
1135
|
sl as u
|
|
1136
1136
|
};
|
|
1137
|
-
//# sourceMappingURL=SchemaBuilderDrawer-
|
|
1137
|
+
//# sourceMappingURL=SchemaBuilderDrawer-DlmInnSC.js.map
|