@aranzatech/diagrams-bpmn 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/{catalog-DIBySQqA.d.ts → catalog-CQtKEV7q.d.ts} +1 -1
  2. package/dist/{catalog-m8fHIiKH.d.cts → catalog-D2AcvrDO.d.cts} +1 -1
  3. package/dist/{chunk-33AR3PXF.js → chunk-ASZ3TFNQ.js} +228 -17
  4. package/dist/chunk-ASZ3TFNQ.js.map +1 -0
  5. package/dist/{chunk-H3YMTGFG.js → chunk-IMW6RG6F.js} +3 -3
  6. package/dist/{chunk-H3YMTGFG.js.map → chunk-IMW6RG6F.js.map} +1 -1
  7. package/dist/{chunk-ECTJRD7Z.js → chunk-O3NWJ5H7.js} +9 -18
  8. package/dist/chunk-O3NWJ5H7.js.map +1 -0
  9. package/dist/{chunk-KALSGH4D.js → chunk-PDTXM32P.js} +6 -6
  10. package/dist/chunk-PDTXM32P.js.map +1 -0
  11. package/dist/edges/index.cjs +6 -15
  12. package/dist/edges/index.cjs.map +1 -1
  13. package/dist/edges/index.js +2 -2
  14. package/dist/elements/index.d.cts +3 -3
  15. package/dist/elements/index.d.ts +3 -3
  16. package/dist/index.cjs +248 -46
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +3 -3
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +4 -4
  21. package/dist/modeling/index.d.cts +3 -3
  22. package/dist/modeling/index.d.ts +3 -3
  23. package/dist/nodes/index.cjs +16 -16
  24. package/dist/nodes/index.cjs.map +1 -1
  25. package/dist/nodes/index.js +2 -2
  26. package/dist/{types-vVi5T7qj.d.cts → types-CIBColRi.d.ts} +11 -2
  27. package/dist/{types-BxjCV2oX.d.ts → types-fDlPLIHd.d.cts} +11 -2
  28. package/dist/{types-DznxZxpV.d.cts → types-rWbKYrHH.d.cts} +61 -1
  29. package/dist/{types-DznxZxpV.d.ts → types-rWbKYrHH.d.ts} +61 -1
  30. package/dist/validation/index.d.cts +2 -2
  31. package/dist/validation/index.d.ts +2 -2
  32. package/dist/xml/index.cjs +226 -15
  33. package/dist/xml/index.cjs.map +1 -1
  34. package/dist/xml/index.d.cts +3 -2
  35. package/dist/xml/index.d.ts +3 -2
  36. package/dist/xml/index.js +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-33AR3PXF.js.map +0 -1
  39. package/dist/chunk-ECTJRD7Z.js.map +0 -1
  40. package/dist/chunk-KALSGH4D.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/elements/catalog.ts","../src/elements/guards.ts","../src/nodes/shared/BpmnHandles.tsx","../src/nodes/shared/theme.ts","../src/nodes/shared/BpmnLabel.tsx","../src/nodes/shared/EventMarker.tsx","../src/nodes/StartEventNode.tsx","../src/nodes/EndEventNode.tsx","../src/nodes/IntermediateEventNode.tsx","../src/nodes/shared/TaskIcon.tsx","../src/nodes/shared/TaskMarkers.tsx","../src/nodes/TaskNode.tsx","../src/nodes/GatewayNode.tsx","../src/nodes/SubProcessNode.tsx","../src/nodes/PoolNode.tsx","../src/nodes/LaneNode.tsx","../src/nodes/AnnotationNode.tsx","../src/nodes/GroupNode.tsx","../src/nodes/DataNode.tsx","../src/nodes/DataRefNode.tsx","../src/nodes/ConversationNode.tsx","../src/nodes/ChoreographyNode.tsx","../src/nodes/nodeTypes.ts","../src/edges/path.ts","../src/edges/SequenceFlowEdge.tsx","../src/edges/MessageFlowEdge.tsx","../src/edges/AssociationEdge.tsx","../src/edges/DataAssociationEdge.tsx","../src/edges/ConversationLinkEdge.tsx","../src/edges/edgeTypes.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/modeling/index.ts","../src/validation/index.ts"],"names":["Position","jsxs","Fragment","jsx","Handle","SIZE","CX","R","HEADER_HEIGHT","HEADER_WIDTH","HANDLE_STYLE","H","foldPath","W","FOLD","DS_W","DS_H","RX","RY","pointsToSvgPath","getOrthogonalPath","BaseEdge","EdgeLabelRenderer","getStraightPath","laneSet","BpmnModdle","isSubProcess","nodeById","GATEWAY_TYPES","TASK_TYPES","next","getNode","getNodeSize","getNodeAbsolutePosition","toRelativeNodePosition","findContainingNode","getNodeCenterPosition","patchNode","resizeNode","getOutgoingEdges","getIncomingEdges","createModelingRules","addNode","connectNodes","reparentNode","replaceNode","patchEdge","removeElements","copyElements","pasteElements","setSelection","createSelectionState","createDiagramDocument","normalizeDiagramState","serializeDiagram","parseDiagramDocument","deserializeDiagram","executeCommand","executeCommands"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BpmnElementType, BpmnElementMeta, BpmnElementSize } from \"./types\";\n\nexport const BPMN_ELEMENT_CATALOG: Record<BpmnElementType, BpmnElementMeta> = {\n // ─── Events ──────────────────────────────────────────────────────────────────\n StartEvent: {\n label: \"Start Event\",\n icon: \"Circle\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"source\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"start\",\n canBeStart: true, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 1,\n },\n EndEvent: {\n label: \"End Event\",\n icon: \"CircleDot\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"target\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"end\",\n canBeStart: false, canBeEnd: true,\n maxOutgoing: 0,\n },\n IntermediateCatchEvent: {\n label: \"Intermediate Catch Event\",\n icon: \"Clock3\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"intermediateCatch\",\n canBeStart: false, canBeEnd: false,\n },\n IntermediateThrowEvent: {\n label: \"Intermediate Throw Event\",\n icon: \"Send\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"intermediateThrow\",\n canBeStart: false, canBeEnd: false,\n },\n BoundaryEvent: {\n label: \"Boundary Event\",\n icon: \"AlarmClock\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"source\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"boundary\",\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0,\n },\n\n // ─── Tasks ───────────────────────────────────────────────────────────────────\n Task: {\n label: \"Task\",\n icon: \"CheckSquare\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n UserTask: {\n label: \"User Task\",\n icon: \"UserRound\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ServiceTask: {\n label: \"Service Task\",\n icon: \"Cog\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ScriptTask: {\n label: \"Script Task\",\n icon: \"FileCode\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ManualTask: {\n label: \"Manual Task\",\n icon: \"Hand\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n BusinessRuleTask: {\n label: \"Business Rule Task\",\n icon: \"Table2\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ReceiveTask: {\n label: \"Receive Task\",\n icon: \"Inbox\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n SendTask: {\n label: \"Send Task\",\n icon: \"Send\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n CallActivity: {\n label: \"Call Activity\",\n icon: \"ExternalLink\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Gateways ────────────────────────────────────────────────────────────────\n ExclusiveGateway: {\n label: \"Exclusive Gateway\",\n icon: \"X\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n InclusiveGateway: {\n label: \"Inclusive Gateway\",\n icon: \"Circle\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n ParallelGateway: {\n label: \"Parallel Gateway\",\n icon: \"Plus\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n EventBasedGateway: {\n label: \"Event-Based Gateway\",\n icon: \"Radio\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 1,\n },\n ComplexGateway: {\n label: \"Complex Gateway\",\n icon: \"Asterisk\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Containers ───────────────────────────────────────────────────────────────\n SubProcess: {\n label: \"Sub-Process\",\n icon: \"PlusSquare\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n Transaction: {\n label: \"Transaction\",\n icon: \"Receipt\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n EventSubProcess: {\n label: \"Event Sub-Process\",\n icon: \"CircleDotDashed\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n AdHocSubProcess: {\n label: \"Ad-Hoc Sub-Process\",\n icon: \"Waves\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n Pool: {\n label: \"Pool\",\n icon: \"Rows3\",\n category: \"container\",\n defaultWidth: 600, defaultHeight: 200,\n handlePolicy: \"none\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n Lane: {\n label: \"Lane\",\n icon: \"PanelTop\",\n category: \"container\",\n defaultWidth: 600, defaultHeight: 120,\n handlePolicy: \"none\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Artifacts ────────────────────────────────────────────────────────────────\n Annotation: {\n label: \"Text Annotation\",\n icon: \"StickyNote\",\n category: \"artifact\",\n defaultWidth: 100, defaultHeight: 60,\n handlePolicy: \"none\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n Group: {\n label: \"Group\",\n icon: \"Group\",\n category: \"artifact\",\n defaultWidth: 300, defaultHeight: 200,\n handlePolicy: \"none\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Data (BPMN 2.0 §10.3) ───────────────────────────────────────────────────\n DataObject: {\n label: \"Data Object\",\n icon: \"File\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataObjectReference: {\n label: \"Data Object Reference\",\n icon: \"FileSymlink\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataInput: {\n label: \"Data Input\",\n icon: \"FileInput\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0,\n },\n DataOutput: {\n label: \"Data Output\",\n icon: \"FileOutput\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxOutgoing: 0,\n },\n DataStore: {\n label: \"Data Store\",\n icon: \"Database\",\n category: \"data\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataStoreReference: {\n label: \"Data Store Reference\",\n icon: \"DatabaseZap\",\n category: \"data\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Conversation (BPMN 2.0 §12) ─────────────────────────────────────────────\n Conversation: {\n label: \"Conversation\",\n icon: \"MessageCircle\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n SubConversation: {\n label: \"Sub-Conversation\",\n icon: \"MessagesSquare\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true,\n canBeStart: false, canBeEnd: false,\n },\n CallConversation: {\n label: \"Call Conversation\",\n icon: \"PhoneCall\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Choreography (BPMN 2.0 §11) ─────────────────────────────────────────────\n ChoreographyTask: {\n label: \"Choreography Task\",\n icon: \"ArrowLeftRight\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n SubChoreography: {\n label: \"Sub-Choreography\",\n icon: \"BoxSelect\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true,\n canBeStart: false, canBeEnd: false,\n },\n CallChoreography: {\n label: \"Call Choreography\",\n icon: \"Phone\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n};\n\nexport function getElementMeta(type: BpmnElementType): BpmnElementMeta {\n return BPMN_ELEMENT_CATALOG[type];\n}\n\nexport const BPMN_RESIZABLE_ELEMENT_TYPES = [\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n \"SubProcess\",\n \"Transaction\",\n \"EventSubProcess\",\n \"AdHocSubProcess\",\n \"Pool\",\n \"Lane\",\n \"Annotation\",\n \"Group\",\n \"SubConversation\",\n \"ChoreographyTask\",\n \"SubChoreography\",\n \"CallChoreography\",\n] satisfies BpmnElementType[];\n\nconst BPMN_MIN_SIZE_OVERRIDES: Partial<\n Record<BpmnElementType, Pick<BpmnElementSize, \"minWidth\" | \"minHeight\">>\n> = {\n Task: { minWidth: 80, minHeight: 48 },\n UserTask: { minWidth: 80, minHeight: 48 },\n ServiceTask: { minWidth: 80, minHeight: 48 },\n ScriptTask: { minWidth: 80, minHeight: 48 },\n ManualTask: { minWidth: 80, minHeight: 48 },\n BusinessRuleTask: { minWidth: 80, minHeight: 48 },\n ReceiveTask: { minWidth: 80, minHeight: 48 },\n SendTask: { minWidth: 80, minHeight: 48 },\n CallActivity: { minWidth: 80, minHeight: 48 },\n SubProcess: { minWidth: 160, minHeight: 100 },\n Transaction: { minWidth: 160, minHeight: 100 },\n EventSubProcess: { minWidth: 160, minHeight: 100 },\n AdHocSubProcess: { minWidth: 160, minHeight: 100 },\n Pool: { minWidth: 240, minHeight: 120 },\n Lane: { minWidth: 240, minHeight: 80 },\n Annotation: { minWidth: 80, minHeight: 40 },\n Group: { minWidth: 120, minHeight: 80 },\n SubConversation: { minWidth: 60, minHeight: 52 },\n ChoreographyTask: { minWidth: 100, minHeight: 70 },\n SubChoreography: { minWidth: 100, minHeight: 70 },\n CallChoreography: { minWidth: 100, minHeight: 70 },\n};\n\nconst resizableTypes = new Set<BpmnElementType>(BPMN_RESIZABLE_ELEMENT_TYPES);\n\nexport function isBpmnElementResizable(type: BpmnElementType): boolean {\n return resizableTypes.has(type);\n}\n\nexport function getBpmnElementSize(type: BpmnElementType): BpmnElementSize {\n const meta = getElementMeta(type);\n const min = BPMN_MIN_SIZE_OVERRIDES[type];\n return {\n width: meta.defaultWidth,\n height: meta.defaultHeight,\n minWidth: meta.minWidth ?? min?.minWidth ?? meta.defaultWidth,\n minHeight: meta.minHeight ?? min?.minHeight ?? meta.defaultHeight,\n resizable: meta.resizable ?? isBpmnElementResizable(type),\n };\n}\n","import { BPMN_ELEMENT_CATALOG } from \"./catalog\";\nimport type { BpmnElementType } from \"./types\";\n\nconst TASK_TYPES = new Set<BpmnElementType>([\n \"Task\", \"UserTask\", \"ServiceTask\", \"ScriptTask\",\n \"ManualTask\", \"BusinessRuleTask\", \"ReceiveTask\", \"SendTask\", \"CallActivity\",\n]);\n\nconst GATEWAY_TYPES = new Set<BpmnElementType>([\n \"ExclusiveGateway\", \"InclusiveGateway\", \"ParallelGateway\",\n \"EventBasedGateway\", \"ComplexGateway\",\n]);\n\nconst EVENT_TYPES = new Set<BpmnElementType>([\n \"StartEvent\", \"EndEvent\", \"IntermediateCatchEvent\",\n \"IntermediateThrowEvent\", \"BoundaryEvent\",\n]);\n\nconst DATA_TYPES = new Set<BpmnElementType>([\n \"DataObject\", \"DataObjectReference\", \"DataInput\", \"DataOutput\",\n \"DataStore\", \"DataStoreReference\",\n]);\n\nconst CONVERSATION_TYPES = new Set<BpmnElementType>([\n \"Conversation\", \"SubConversation\", \"CallConversation\",\n]);\n\nconst CHOREOGRAPHY_TYPES = new Set<BpmnElementType>([\n \"ChoreographyTask\", \"SubChoreography\", \"CallChoreography\",\n]);\n\nexport function isTaskType(type: BpmnElementType): boolean {\n return TASK_TYPES.has(type);\n}\n\nexport function isGatewayType(type: BpmnElementType): boolean {\n return GATEWAY_TYPES.has(type);\n}\n\nexport function isEventType(type: BpmnElementType): boolean {\n return EVENT_TYPES.has(type);\n}\n\nexport function isDataType(type: BpmnElementType): boolean {\n return DATA_TYPES.has(type);\n}\n\nexport function isConversationType(type: BpmnElementType): boolean {\n return CONVERSATION_TYPES.has(type);\n}\n\nexport function isChoreographyType(type: BpmnElementType): boolean {\n return CHOREOGRAPHY_TYPES.has(type);\n}\n\nexport function isContainerType(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].isContainer;\n}\n\nexport function acceptsBoundaryEvents(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].acceptsBoundaryEvents;\n}\n\nexport function getHandlePolicy(type: BpmnElementType) {\n return BPMN_ELEMENT_CATALOG[type].handlePolicy;\n}\n\nexport function getOrientation(type: BpmnElementType) {\n return BPMN_ELEMENT_CATALOG[type].orientation;\n}\n\nexport function supportsCollapse(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].supportsCollapse ?? false;\n}\n\nexport function supportsMarkers(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].supportsMarkers ?? false;\n}\n","import { Handle, Position } from \"@xyflow/react\";\n\ntype HandleVariant =\n | \"all\" // source + target on all 4 sides\n | \"source\" // only outgoing (start events)\n | \"target\" // only incoming (end events)\n | \"none\"; // pools, lanes, annotations\n\nconst ALL_POSITIONS = [\n Position.Top,\n Position.Right,\n Position.Bottom,\n Position.Left,\n] as const;\n\nconst HANDLE_STYLE = {\n width: 8,\n height: 8,\n background: \"#8c8c8c\",\n border: \"1.5px solid #fff\",\n};\n\nexport function BpmnHandles({ variant = \"all\" }: { variant?: HandleVariant }) {\n const src = variant === \"all\" || variant === \"source\";\n const tgt = variant === \"all\" || variant === \"target\";\n\n return (\n <>\n {tgt && ALL_POSITIONS.map((position) => (\n <Handle\n key={`target-${position}`}\n type=\"target\"\n position={position}\n id={`target-${position}`}\n style={HANDLE_STYLE}\n />\n ))}\n {src && ALL_POSITIONS.map((position) => (\n <Handle\n key={`source-${position}`}\n type=\"source\"\n position={position}\n id={`source-${position}`}\n style={HANDLE_STYLE}\n />\n ))}\n </>\n );\n}\n","export const BPMN_THEME = {\n fill: \"#ffffff\",\n fillSoft: \"#f8fbff\",\n fillSubtle: \"#eef6ff\",\n stroke: \"#334155\",\n strokeMuted: \"#64748b\",\n strokeSelected: \"#2563eb\",\n strokeWidth: 1.5,\n strokeWidthSelected: 2.5,\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontSize: 11,\n labelColor: \"#0f172a\",\n handleColor: \"#94a3b8\",\n handleColorSelected: \"#2563eb\",\n shadow: \"0 4px 12px rgba(15, 23, 42, 0.08)\",\n shadowSelected: \"0 0 0 4px rgba(37, 99, 235, 0.14), 0 8px 18px rgba(15, 23, 42, 0.12)\",\n transition: \"box-shadow 140ms ease, filter 140ms ease, transform 140ms ease\",\n} as const;\n\nexport function resolveStroke(selected: boolean | undefined, override?: string): string {\n if (selected) return BPMN_THEME.strokeSelected;\n return override ?? BPMN_THEME.stroke;\n}\n\nexport function resolveStrokeWidth(selected: boolean | undefined): number {\n return selected ? BPMN_THEME.strokeWidthSelected : BPMN_THEME.strokeWidth;\n}\n\nexport function resolveShapeFilter(selected: boolean | undefined): string | undefined {\n return selected\n ? \"drop-shadow(0 0 0 rgba(37,99,235,0.2)) drop-shadow(0 8px 14px rgba(15,23,42,0.12))\"\n : \"drop-shadow(0 4px 10px rgba(15,23,42,0.08))\";\n}\n\nexport function resolveNodeShadow(selected: boolean | undefined): string {\n return selected ? BPMN_THEME.shadowSelected : BPMN_THEME.shadow;\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { BPMN_THEME } from \"./theme\";\n\ninterface BpmnLabelProps {\n children?: ReactNode;\n /** Render label below the shape instead of inside. Default: false (inside). */\n external?: boolean;\n style?: CSSProperties;\n}\n\nconst EXTERNAL_STYLE: CSSProperties = {\n position: \"absolute\",\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n marginTop: 4,\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: BPMN_THEME.labelColor,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n maxWidth: 100,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n pointerEvents: \"none\",\n lineHeight: 1.3,\n};\n\nconst INTERNAL_STYLE: CSSProperties = {\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: BPMN_THEME.labelColor,\n textAlign: \"center\",\n lineHeight: 1.3,\n overflow: \"hidden\",\n wordBreak: \"break-word\",\n};\n\nexport function BpmnLabel({ children, external = false, style }: BpmnLabelProps) {\n if (!children) return null;\n return (\n <div style={{ ...(external ? EXTERNAL_STYLE : INTERNAL_STYLE), ...style }}>\n {children}\n </div>\n );\n}\n","import type { EventTrigger } from \"../../elements/types\";\n\ninterface EventMarkerProps {\n cx: number;\n cy: number;\n trigger: EventTrigger;\n /** True for throw events — markers rendered filled (dark). */\n filled?: boolean;\n stroke: string;\n /** Background fill, used for negative-space areas. */\n bg: string;\n /** Usable radius within the event circle (inner ring radius). */\n r?: number;\n}\n\n// Pentagon points for \"Multiple\" trigger\nfunction pentagon(r: number): string {\n const pts = Array.from({ length: 5 }, (_, i) => {\n const a = (i * 72 - 90) * (Math.PI / 180);\n return `${(r * Math.cos(a)).toFixed(2)},${(r * Math.sin(a)).toFixed(2)}`;\n });\n return `M ${pts.join(\" L \")} Z`;\n}\n\nexport function EventMarker({ cx, cy, trigger, filled = false, stroke, bg, r = 10 }: EventMarkerProps) {\n const s = r * 0.6; // scale factor — icons drawn in roughly [-s, s] box\n const f = filled ? stroke : \"none\";\n const sw = 1.4;\n\n if (trigger === \"none\" || !trigger) return null;\n\n return (\n <g transform={`translate(${cx},${cy})`} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {trigger === \"message\" && (\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n {/* Envelope rectangle */}\n <rect x={-s} y={-s * 0.65} width={s * 2} height={s * 1.3} rx={0.5} />\n {/* Envelope flap */}\n <polyline fill=\"none\" points={`${-s},${-s * 0.65} 0,${s * 0.2} ${s},${-s * 0.65}`} />\n </g>\n )}\n\n {trigger === \"timer\" && (\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n <circle r={s} fill={bg} stroke={stroke} strokeWidth={sw} />\n {/* 12 tick marks */}\n {Array.from({ length: 12 }, (_, i) => {\n const a = (i * 30 - 90) * (Math.PI / 180);\n const len = i % 3 === 0 ? 0.25 : 0.15;\n const x1 = Math.cos(a) * s * 0.75;\n const y1 = Math.sin(a) * s * 0.75;\n const x2 = Math.cos(a) * s * (0.75 + len);\n const y2 = Math.sin(a) * s * (0.75 + len);\n return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={stroke} strokeWidth={sw * 0.8} />;\n })}\n {/* Hour hand */}\n <line x1={0} y1={0} x2={0} y2={-s * 0.5} stroke={stroke} strokeWidth={sw} />\n {/* Minute hand */}\n <line x1={0} y1={0} x2={s * 0.4} y2={0} stroke={stroke} strokeWidth={sw} />\n </g>\n )}\n\n {trigger === \"error\" && (\n <path\n d={`M ${s * 0.35},${-s} L ${-s * 0.15},${-s * 0.05} L ${s * 0.35},${s * 0.05} L ${-s * 0.35},${s} L ${s * 0.15},${s * 0.05} L ${-s * 0.35},${-s * 0.05} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"escalation\" && (\n <path\n d={`M 0,${-s} L ${s * 0.8},${s * 0.7} L 0,${s * 0.2} L ${-s * 0.8},${s * 0.7} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"conditional\" && (\n // Three horizontal lines (document/list)\n <g stroke={stroke} strokeWidth={sw} fill=\"none\">\n <rect x={-s * 0.75} y={-s * 0.9} width={s * 1.5} height={s * 1.8} rx={1} fill={bg} stroke={stroke} strokeWidth={sw} />\n <line x1={-s * 0.45} y1={-s * 0.4} x2={s * 0.45} y2={-s * 0.4} />\n <line x1={-s * 0.45} y1={0} x2={s * 0.45} y2={0} />\n <line x1={-s * 0.45} y1={s * 0.4} x2={s * 0.45} y2={s * 0.4} />\n </g>\n )}\n\n {trigger === \"link\" && (\n // Arrow pointing right\n <path\n d={`M ${-s * 0.9},${-s * 0.35} L ${s * 0.1},${-s * 0.35} L ${s * 0.1},${-s * 0.65} L ${s},0 L ${s * 0.1},${s * 0.65} L ${s * 0.1},${s * 0.35} L ${-s * 0.9},${s * 0.35} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"compensation\" && (\n // Two left-pointing chevrons <<\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n <polyline fill={f} strokeLinejoin=\"round\"\n points={`${s * 0.5},${-s * 0.7} ${-s * 0.1},0 ${s * 0.5},${s * 0.7}`} />\n <polyline fill={f} strokeLinejoin=\"round\"\n points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n {filled && (\n <>\n <polygon fill={stroke} points={`${s * 0.5},${-s * 0.7} ${-s * 0.1},0 ${s * 0.5},${s * 0.7}`} />\n <polygon fill={stroke} points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n </>\n )}\n </g>\n )}\n\n {trigger === \"signal\" && (\n <polygon\n points={`0,${-s} ${s * 0.9},${s * 0.7} ${-s * 0.9},${s * 0.7}`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"cancel\" && (\n // X mark\n <g stroke={stroke} strokeWidth={sw * 1.5} strokeLinecap=\"round\" fill=\"none\">\n <line x1={-s * 0.7} y1={-s * 0.7} x2={s * 0.7} y2={s * 0.7} />\n <line x1={s * 0.7} y1={-s * 0.7} x2={-s * 0.7} y2={s * 0.7} />\n </g>\n )}\n\n {trigger === \"terminate\" && (\n <circle r={s * 0.8} fill={stroke} stroke={stroke} strokeWidth={sw} />\n )}\n\n {trigger === \"multiple\" && (\n <path d={pentagon(s * 0.9)} fill={f} stroke={stroke} strokeWidth={sw} />\n )}\n\n {trigger === \"parallelMultiple\" && (\n <g stroke={stroke} strokeWidth={sw * 1.5} strokeLinecap=\"round\" fill=\"none\">\n <line x1={0} y1={-s * 0.8} x2={0} y2={s * 0.8} />\n <line x1={-s * 0.8} y1={0} x2={s * 0.8} y2={0} />\n </g>\n )}\n </g>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R = CX - 2;\n\nexport function StartEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger ?? \"none\";\n // Non-interrupting start events (in event sub-processes) use dashed border\n const dashArray = d.isNonInterrupting ? \"4 2\" : undefined;\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle\n cx={CX} cy={CX} r={R}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw}\n strokeDasharray={dashArray}\n />\n {/* Trigger marker — catch semantics, outline style */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={R * 0.55} />\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R = CX - 2;\n\nexport function EndEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n {/* Thick border = end event */}\n <circle cx={CX} cy={CX} r={R}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw + 2}\n />\n {/* Trigger marker — throw semantics, filled style */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={true} stroke={stroke} bg={fill} r={R * 0.55} />\n </svg>\n <BpmnHandles variant=\"target\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R_OUTER = CX - 2;\nconst R_INNER = R_OUTER - 3;\n// Icon fits within the inner ring\nconst ICON_R = R_INNER * 0.65;\n\nexport function IntermediateCatchEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"timer\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER} fill={fill} stroke={stroke} strokeWidth={sw} />\n <circle cx={CX} cy={CX} r={R_INNER} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Catch: outline marker */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\nexport function IntermediateThrowEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"message\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER} fill={fill} stroke={stroke} strokeWidth={sw} />\n {/* Throw events: filled inner disk as background */}\n <circle cx={CX} cy={CX} r={R_INNER} fill={stroke} stroke={stroke} strokeWidth={sw} />\n {/* Throw: filled marker (inverted colors) */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={true} stroke={fill} bg={stroke} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\nexport function BoundaryEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"timer\";\n // Non-interrupting boundary events have a dashed border\n const dashArray = d.isNonInterrupting ? \"4 2\" : undefined;\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER}\n fill={fill} stroke={stroke} strokeWidth={sw} strokeDasharray={dashArray} />\n <circle cx={CX} cy={CX} r={R_INNER}\n fill=\"none\" stroke={stroke} strokeWidth={sw} strokeDasharray={dashArray} />\n {/* Catch: outline marker */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { BpmnElementType } from \"../../elements/types\";\n\ninterface TaskIconProps {\n type: BpmnElementType;\n size?: number;\n color?: string;\n}\n\nexport function TaskIcon({ type, size = 14, color = \"#404040\" }: TaskIconProps) {\n const s = size;\n const c = color;\n\n switch (type) {\n case \"Task\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" rx=\"1.5\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M5.5 8.2 7.2 10 10.8 6\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n case \"UserTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"5\" r=\"3\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 14c0-3.3 2.7-6 6-6s6 2.7 6 6\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ServiceTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M8 1v2M8 13v2M1 8h2M13 8h2M3.2 3.2l1.4 1.4M11.4 11.4l1.4 1.4M3.2 12.8l1.4-1.4M11.4 4.6l1.4-1.4\"\n stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ScriptTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"2\" width=\"10\" height=\"12\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M6 6h4M6 9h4M6 12h2\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ManualTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5 10V6a1 1 0 0 1 2 0v2a1 1 0 0 1 2 0v1a1 1 0 0 1 2 0v2c0 1.7-1.3 3-3 3H6a3 3 0 0 1-3-3V9.5\"\n stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n case \"BusinessRuleTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 7h12M6 3v10\" stroke={c} strokeWidth=\"1.5\" />\n </svg>\n );\n case \"ReceiveTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"8\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 4l6 5 6-5\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"SendTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill={c}>\n <path d=\"M2 4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4zm1 0l5 4.5L13 4H3z\" />\n </svg>\n );\n case \"CallActivity\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"5\" width=\"10\" height=\"6\" rx=\"1\" stroke={c} strokeWidth=\"2\" />\n </svg>\n );\n default:\n return null;\n }\n}\n","import type { TaskMarker } from \"../../elements/types\";\n\ninterface TaskMarkersProps {\n markers: TaskMarker[];\n stroke: string;\n size?: number;\n}\n\nconst MARKER_SIZE = 12;\nconst GAP = 3;\n\nexport function TaskMarkers({ markers, stroke, size = MARKER_SIZE }: TaskMarkersProps) {\n if (!markers || markers.length === 0) return null;\n\n const total = markers.length * size + (markers.length - 1) * GAP;\n // Rendered as a horizontal row centered at bottom of the task\n return (\n <div\n style={{\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: GAP,\n width: total,\n }}\n >\n {markers.map((m) => (\n <MarkerIcon key={m} marker={m} stroke={stroke} size={size} />\n ))}\n </div>\n );\n}\n\nfunction MarkerIcon({ marker, stroke, size }: { marker: TaskMarker; stroke: string; size: number }) {\n const s = size / 2;\n const sw = 1.3;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`${-s} ${-s} ${size} ${size}`}\n style={{ overflow: \"visible\", display: \"block\" }}\n >\n {marker === \"loop\" && (\n // Circular arrow (↻)\n <g fill=\"none\" stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <path d={`M 0,${-s * 0.85} A ${s * 0.85},${s * 0.85} 0 1 1 ${s * 0.6},${s * 0.6}`} />\n {/* Arrowhead */}\n <polyline points={`${s * 0.2},${s * 0.9} ${s * 0.6},${s * 0.6} ${s * 0.95},${s}`} />\n </g>\n )}\n\n {marker === \"parallelMultiple\" && (\n // Three vertical bars |||\n <g stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <line x1={-s * 0.55} y1={-s * 0.75} x2={-s * 0.55} y2={s * 0.75} />\n <line x1={0} y1={-s * 0.75} x2={0} y2={s * 0.75} />\n <line x1={s * 0.55} y1={-s * 0.75} x2={s * 0.55} y2={s * 0.75} />\n </g>\n )}\n\n {marker === \"sequentialMultiple\" && (\n // Three horizontal bars ≡\n <g stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <line x1={-s * 0.75} y1={-s * 0.55} x2={s * 0.75} y2={-s * 0.55} />\n <line x1={-s * 0.75} y1={0} x2={s * 0.75} y2={0} />\n <line x1={-s * 0.75} y1={s * 0.55} x2={s * 0.75} y2={s * 0.55} />\n </g>\n )}\n\n {marker === \"compensation\" && (\n // Two left-pointing triangles <<\n <g fill={stroke} stroke={stroke} strokeWidth={0.5} strokeLinejoin=\"round\">\n <polygon points={`${s * 0.4},${-s * 0.7} ${-s * 0.2},0 ${s * 0.4},${s * 0.7}`} />\n <polygon points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n </g>\n )}\n </svg>\n );\n}\n\n// Tilde symbol for ad-hoc sub-processes — rendered as text or SVG path\nexport function AdhocMarker({ stroke, size = MARKER_SIZE }: { stroke: string; size?: number }) {\n return (\n <div\n style={{\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n color: stroke,\n fontSize: size,\n lineHeight: 1,\n fontFamily: \"serif\",\n userSelect: \"none\",\n }}\n >\n ~\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskIcon } from \"./shared/TaskIcon\";\nimport { TaskMarkers } from \"./shared/TaskMarkers\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nexport function TaskNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const hasMarkers = d.markers && d.markers.length > 0;\n // CallActivity has a thick border per BPMN 2.0 spec\n const borderWidth = d.elementType === \"CallActivity\" ? sw + 2 : sw;\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n background: d.color?.fill ?? `linear-gradient(180deg, ${BPMN_THEME.fill} 0%, ${BPMN_THEME.fillSoft} 100%)`,\n border: `${borderWidth}px solid ${stroke}`,\n borderRadius: 7,\n boxSizing: \"border-box\",\n boxShadow: resolveNodeShadow(selected),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: hasMarkers ? \"4px 8px 22px\" : \"4px 8px\",\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Task type icon — top-left corner */}\n {d.elementType && (\n <div style={{ position: \"absolute\", top: 5, left: 5 }}>\n <TaskIcon type={d.elementType} size={14} color={stroke} />\n </div>\n )}\n\n <BpmnLabel style={{ width: \"100%\" }}>\n {d.label ?? d.elementType}\n </BpmnLabel>\n\n {/* Priority indicator — top-right dot */}\n {d.priority && (\n <div\n title={d.priority}\n style={{\n position: \"absolute\",\n top: 5,\n right: 5,\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: PRIORITY_COLOR[d.priority],\n }}\n />\n )}\n\n {/* Instance markers — bottom center */}\n {hasMarkers && (\n <TaskMarkers markers={d.markers!} stroke={stroke} />\n )}\n\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\nconst PRIORITY_COLOR: Record<string, string> = {\n critical: \"#ef4444\",\n high: \"#f97316\",\n medium: \"#eab308\",\n low: \"#22c55e\",\n};\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData, BpmnElementType } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 50;\nconst H = SIZE / 2;\nconst DIAMOND = `${H},2 ${SIZE - 2},${H} ${H},${SIZE - 2} 2,${H}`;\n\nfunction GatewaySymbol({ type, stroke }: { type: BpmnElementType; stroke: string }) {\n const c = H;\n switch (type) {\n case \"ExclusiveGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1={c - 7} y1={c - 7} x2={c + 7} y2={c + 7} />\n <line x1={c + 7} y1={c - 7} x2={c - 7} y2={c + 7} />\n </g>\n );\n case \"InclusiveGateway\":\n return <circle cx={c} cy={c} r={8} fill=\"none\" stroke={stroke} strokeWidth=\"2\" />;\n case \"ParallelGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1={c} y1={c - 9} x2={c} y2={c + 9} />\n <line x1={c - 9} y1={c} x2={c + 9} y2={c} />\n </g>\n );\n case \"EventBasedGateway\":\n return (\n <g>\n <circle cx={c} cy={c} r={9} fill=\"none\" stroke={stroke} strokeWidth=\"1.5\" />\n <circle cx={c} cy={c} r={6} fill=\"none\" stroke={stroke} strokeWidth=\"1.2\" />\n <polygon\n points={`${c},${c - 5.5} ${c + 5.2},${c - 1.7} ${c + 3.2},${c + 4.8} ${c - 3.2},${c + 4.8} ${c - 5.2},${c - 1.7}`}\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.4\"\n strokeLinejoin=\"round\"\n />\n </g>\n );\n case \"ComplexGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1={c} y1={c - 9} x2={c} y2={c + 9} />\n <line x1={c - 9} y1={c} x2={c + 9} y2={c} />\n <line x1={c - 6} y1={c - 6} x2={c + 6} y2={c + 6} />\n <line x1={c + 6} y1={c - 6} x2={c - 6} y2={c + 6} />\n </g>\n );\n default:\n return null;\n }\n}\n\nexport function GatewayNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <polygon\n points={DIAMOND}\n fill={d.color?.fill ?? BPMN_THEME.fill}\n stroke={stroke}\n strokeWidth={sw}\n />\n <GatewaySymbol type={d.elementType} stroke={stroke} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData, SubProcessVariant } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskMarkers, AdhocMarker } from \"./shared/TaskMarkers\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\n// Derive visual variant from elementType when subProcessVariant is not explicitly set.\n// This lets Transaction, EventSubProcess, AdHocSubProcess render correctly\n// even when dropped from the palette without a preset subProcessVariant.\nfunction resolveVariant(d: BpmnNodeData): SubProcessVariant {\n if (d.subProcessVariant) return d.subProcessVariant;\n switch (d.elementType) {\n case \"Transaction\": return \"transaction\";\n case \"EventSubProcess\": return \"event\";\n case \"AdHocSubProcess\": return \"adhoc\";\n default: return \"embedded\";\n }\n}\n\nexport function SubProcessNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const variant = resolveVariant(d);\n const isExpanded = d.isExpanded ?? true;\n const hasMarkers = d.markers && d.markers.length > 0;\n\n const borderStyle = variant === \"event\" ? \"dashed\" : \"solid\";\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n background: d.color?.fill ?? `linear-gradient(180deg, ${BPMN_THEME.fill} 0%, ${BPMN_THEME.fillSubtle} 100%)`,\n border: `${sw}px ${borderStyle} ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\n boxShadow: resolveNodeShadow(selected),\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Transaction: double-border — inner inset 4 px */}\n {variant === \"transaction\" && (\n <div\n style={{\n position: \"absolute\",\n inset: 4,\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n pointerEvents: \"none\",\n }}\n />\n )}\n\n <BpmnLabel style={{ padding: \"4px 8px\" }}>{d.label}</BpmnLabel>\n\n {/* Collapsed subprocess marker — centered at bottom */}\n {!isExpanded && (\n <div\n aria-label=\"collapsed-subprocess-marker\"\n style={{\n position: \"absolute\",\n bottom: 6,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 16,\n height: 16,\n border: `1.5px solid ${stroke}`,\n borderRadius: 2,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 12,\n color: stroke,\n background: BPMN_THEME.fill,\n zIndex: 1,\n }}\n >\n +\n </div>\n )}\n\n {/* Ad-hoc tilde marker — shown for adhoc variant (incl. AdHocSubProcess type) */}\n {variant === \"adhoc\" && <AdhocMarker stroke={stroke} />}\n\n {/* Instance markers (loop, multi-instance, compensation) */}\n {hasMarkers && <TaskMarkers markers={d.markers!} stroke={stroke} />}\n\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nconst HEADER_WIDTH = 30;\nconst HEADER_HEIGHT = 28;\n\nexport function PoolNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"horizontal\";\n const fill = d.color?.fill ?? \"#f8fbff\";\n const headerFill = d.color?.fill ?? \"#eaf2ff\";\n\n if (orientation === \"vertical\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n <div\n aria-label=\"pool-header\"\n className=\"pool-drag-handle\"\n style={{\n height: HEADER_HEIGHT,\n minHeight: HEADER_HEIGHT,\n borderBottom: `${sw}px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n padding: \"0 8px\",\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 600,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Vertical header */}\n <div\n aria-label=\"pool-header\"\n className=\"pool-drag-handle\"\n style={{\n width: HEADER_WIDTH,\n minWidth: HEADER_WIDTH,\n borderRight: `${sw}px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\",\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 600,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxHeight: \"90%\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n {/* Canvas area for lanes / nodes */}\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nconst HEADER_HEIGHT = 24;\nconst HEADER_WIDTH = 28;\n\nexport function LaneNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"horizontal\";\n const fill = d.color?.fill ?? \"#fbfdff\";\n const headerFill = d.color?.fill ?? \"#eef6ff\";\n\n if (orientation === \"vertical\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 2,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n <div\n aria-label=\"lane-header\"\n className=\"lane-drag-handle\"\n style={{\n width: HEADER_WIDTH,\n minWidth: HEADER_WIDTH,\n borderRight: `1px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n padding: \"6px 0\",\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\",\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 500,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxHeight: \"90%\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 2,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Drag handle: the horizontal label strip */}\n <div\n aria-label=\"lane-header\"\n className=\"lane-drag-handle\"\n style={{\n height: HEADER_HEIGHT,\n minHeight: HEADER_HEIGHT,\n borderBottom: `1px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: 8,\n background: headerFill,\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 500,\n color: BPMN_THEME.labelColor,\n cursor: \"grab\",\n }}\n >\n {d.label}\n </div>\n\n {/* Canvas area */}\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst HANDLE_STYLE = { opacity: 0, width: 6, height: 6 };\n\nexport function AnnotationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"vertical\";\n\n if (orientation === \"horizontal\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n borderTop: `${sw + 1}px solid ${stroke}`,\n borderLeft: `${sw}px solid ${stroke}`,\n borderRight: `${sw}px solid ${stroke}`,\n padding: \"8px 6px\",\n background: \"transparent\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n lineHeight: 1.4,\n }}\n >\n {d.label}\n <Handle type=\"target\" position={Position.Left} id=\"target-left\" style={HANDLE_STYLE} />\n <Handle type=\"target\" position={Position.Right} id=\"target-right\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Left} id=\"source-left\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Right} id=\"source-right\" style={HANDLE_STYLE} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n borderLeft: `${sw + 1}px solid ${stroke}`,\n borderTop: `${sw}px solid ${stroke}`,\n borderBottom: `${sw}px solid ${stroke}`,\n padding: \"4px 8px\",\n background: \"transparent\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n lineHeight: 1.4,\n }}\n >\n {d.label}\n <Handle type=\"target\" position={Position.Top} id=\"target-top\" style={HANDLE_STYLE} />\n <Handle type=\"target\" position={Position.Bottom} id=\"target-bottom\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Top} id=\"source-top\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Bottom} id=\"source-bottom\" style={HANDLE_STYLE} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nexport function GroupNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n border: `${sw}px dashed ${stroke}`,\n borderRadius: 8,\n boxSizing: \"border-box\",\n background: \"transparent\",\n padding: \"4px 8px\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n fontStyle: \"italic\",\n }}\n >\n {d.label}\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// ─── Data Object ─────────────────────────────────────────────────────────────\n// Classic document shape: rectangle with folded top-right corner.\n\nconst W = 36;\nconst H = 50;\nconst FOLD = 10;\n\nexport function DataObjectNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n const path = [\n `M 0 0`,\n `L ${W - FOLD} 0`,\n `L ${W} ${FOLD}`,\n `L ${W} ${H}`,\n `L 0 ${H}`,\n `Z`,\n ].join(\" \");\n\n const foldPath = [\n `M ${W - FOLD} 0`,\n `L ${W - FOLD} ${FOLD}`,\n `L ${W} ${FOLD}`,\n ].join(\" \");\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={path} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── Data Store ───────────────────────────────────────────────────────────────\n// Classic cylinder / database shape.\n\nconst DS_W = 50;\nconst DS_H = 50;\nconst RX = DS_W / 2;\nconst RY = 7; // ellipse y radius for top/bottom caps\n\nexport function DataStoreNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: DS_W, height: DS_H, position: \"relative\" }}>\n <svg width={DS_W} height={DS_H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n {/* Body */}\n <path\n d={`M 0 ${RY} Q 0 0 ${RX} 0 Q ${DS_W} 0 ${DS_W} ${RY} L ${DS_W} ${DS_H - RY} Q ${DS_W} ${DS_H} ${RX} ${DS_H} Q 0 ${DS_H} 0 ${DS_H - RY} Z`}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw}\n />\n {/* Top ellipse */}\n <ellipse cx={RX} cy={RY} rx={RX} ry={RY} fill={fill} stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// ─── Shared document shape constants ─────────────────────────────────────────\n\nconst W = 36;\nconst H = 50;\nconst FOLD = 10;\n\nfunction documentPath(): string {\n return [\n `M 0 0`, `L ${W - FOLD} 0`, `L ${W} ${FOLD}`,\n `L ${W} ${H}`, `L 0 ${H}`, `Z`,\n ].join(\" \");\n}\n\nfunction foldPath(): string {\n return [`M ${W - FOLD} 0`, `L ${W - FOLD} ${FOLD}`, `L ${W} ${FOLD}`].join(\" \");\n}\n\n// Three parallel horizontal lines at the bottom — collection marker\nfunction collectionLines(stroke: string, sw: number) {\n const y = H - 8;\n return (\n <g stroke={stroke} strokeWidth={sw * 0.7} strokeLinecap=\"round\">\n <line x1={W * 0.25} y1={y} x2={W * 0.75} y2={y} />\n <line x1={W * 0.25} y1={y + 3} x2={W * 0.75} y2={y + 3} />\n <line x1={W * 0.25} y1={y + 6} x2={W * 0.75} y2={y + 6} />\n </g>\n );\n}\n\n// ─── DataObjectReference ─────────────────────────────────────────────────────\n// Visually identical to DataObject — semantically a reference on the diagram.\n\nexport function DataObjectReferenceNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataInput ───────────────────────────────────────────────────────────────\n// Document shape + small filled inward-pointing arrow at top-left (BPMN §10.3.3).\n\nexport function DataInputNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Input marker: small arrow pointing right (into the element) */}\n <polygon\n points={`2,4 8,8 2,12`}\n fill=\"none\" stroke={stroke} strokeWidth={sw * 0.8}\n />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"target\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataOutput ──────────────────────────────────────────────────────────────\n// Document shape + small filled outward-pointing arrow at top-left (BPMN §10.3.3).\n\nexport function DataOutputNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Output marker: small filled arrow pointing right (out of the element) */}\n <polygon\n points={`2,4 8,8 2,12`}\n fill={stroke} stroke={stroke} strokeWidth={sw * 0.8}\n />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataStoreReference ──────────────────────────────────────────────────────\n// Visually identical to DataStore — a reference placed on the diagram.\n\nconst DS_W = 50;\nconst DS_H = 50;\nconst RX = DS_W / 2;\nconst RY = 7;\n\nexport function DataStoreReferenceNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: DS_W, height: DS_H, position: \"relative\" }}>\n <svg width={DS_W} height={DS_H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path\n d={`M 0 ${RY} Q 0 0 ${RX} 0 Q ${DS_W} 0 ${DS_W} ${RY} L ${DS_W} ${DS_H - RY} Q ${DS_W} ${DS_H} ${RX} ${DS_H} Q 0 ${DS_H} 0 ${DS_H - RY} Z`}\n fill={fill} stroke={stroke} strokeWidth={sw}\n />\n <ellipse cx={RX} cy={RY} rx={RX} ry={RY} fill={fill} stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// BPMN 2.0 §12 — Conversation nodes are rendered as hexagons.\n// W:H ratio ≈ 1.15 (flat-top hexagon).\n\nconst W = 60;\nconst H = 52;\n// Flat-top hexagon: side indentation = W/4\nconst INDENT = W / 4;\n\nfunction hexPoints(): string {\n return [\n `0,${H / 2}`,\n `${INDENT},0`,\n `${W - INDENT},0`,\n `${W},${H / 2}`,\n `${W - INDENT},${H}`,\n `${INDENT},${H}`,\n ].join(\" \");\n}\n\n// Shared hexagon shell\nfunction HexShell({\n fill, stroke, sw, thick = false,\n}: { fill: string; stroke: string; sw: number; thick?: boolean }) {\n return (\n <polygon\n points={hexPoints()}\n fill={fill}\n stroke={stroke}\n strokeWidth={thick ? sw + 2 : sw}\n />\n );\n}\n\n// ─── Conversation ─────────────────────────────────────────────────────────────\n\nexport function ConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── SubConversation ──────────────────────────────────────────────────────────\n// Hexagon + expand/collapse marker (+ box) at the bottom center.\n\nexport function SubConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} />\n {/* Collapse marker */}\n <rect x={W / 2 - 7} y={H - 15} width={14} height={12} rx={2}\n fill={fill} stroke={stroke} strokeWidth={sw * 0.8} />\n <text x={W / 2} y={H - 6} textAnchor=\"middle\" fontSize={10} fill={stroke} fontFamily={BPMN_THEME.fontFamily}>+</text>\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── CallConversation ─────────────────────────────────────────────────────────\n// Hexagon with thick border + collapse marker.\n\nexport function CallConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} thick />\n {/* Collapse marker */}\n <rect x={W / 2 - 7} y={H - 15} width={14} height={12} rx={2}\n fill={fill} stroke={stroke} strokeWidth={sw * 0.8} />\n <text x={W / 2} y={H - 6} textAnchor=\"middle\" fontSize={10} fill={stroke} fontFamily={BPMN_THEME.fontFamily}>+</text>\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// BPMN 2.0 §11 — Choreography tasks are banded rectangles.\n// Layout: top participant band | task name band | bottom participant band.\n// The initiating participant's band is white; responding bands are filled gray.\n\nconst BAND_H = 20; // height of each participant band\nconst RADIUS = 6;\n\ninterface ChoreographyShellProps {\n d: BpmnNodeData;\n stroke: string;\n sw: number;\n thick?: boolean; // CallChoreography uses a thick border\n collapsed?: boolean; // SubChoreography shows a + marker\n}\n\nfunction ChoreographyShell({ d, stroke, sw, thick = false, collapsed = false }: ChoreographyShellProps) {\n const participants = d.participants ?? [\n { name: \"Initiator\", isInitiating: true },\n { name: \"Responder\", isInitiating: false },\n ];\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const respondFill = \"#c8d8e8\"; // light blue-gray for responding participant bands\n const bw = thick ? sw + 2 : sw;\n\n // Separate initiating from responding — show first initiating at top, rest at bottom\n const [topParticipant, ...rest] = participants;\n const bottomParticipants = rest;\n\n return (\n <>\n {/* Top participant band */}\n <rect x={0} y={0} width=\"100%\" height={BAND_H}\n fill={topParticipant.isInitiating ? fill : respondFill}\n stroke={stroke} strokeWidth={bw}\n rx={RADIUS} ry={RADIUS}\n />\n {/* Hide bottom-radius of top band */}\n <rect x={0} y={BAND_H / 2} width=\"100%\" height={BAND_H / 2}\n fill={topParticipant.isInitiating ? fill : respondFill}\n stroke=\"none\"\n />\n\n {/* Middle name band */}\n <rect x={0} y={BAND_H} width=\"100%\" height={`calc(100% - ${BAND_H * (1 + bottomParticipants.length)}px)`}\n fill={fill} stroke={stroke} strokeWidth={bw}\n />\n\n {/* Bottom participant bands */}\n {bottomParticipants.map((p, i) => {\n const y = `calc(100% - ${BAND_H * (bottomParticipants.length - i)}px)`;\n return (\n <g key={i}>\n <rect x={0} y={y} width=\"100%\" height={BAND_H}\n fill={p.isInitiating ? fill : respondFill}\n stroke={stroke} strokeWidth={bw}\n />\n </g>\n );\n })}\n\n {/* Outer border — drawn last so it's on top */}\n <rect x={bw / 2} y={bw / 2}\n width={`calc(100% - ${bw}px)`}\n height={`calc(100% - ${bw}px)`}\n fill=\"none\" stroke={stroke} strokeWidth={bw}\n rx={RADIUS} ry={RADIUS}\n />\n\n {/* Task name */}\n <foreignObject x={4} y={BAND_H} width=\"calc(100% - 8px)\"\n height={`calc(100% - ${BAND_H * (1 + bottomParticipants.length)}px)`}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: stroke,\n textAlign: \"center\",\n padding: \"2px 4px\",\n boxSizing: \"border-box\",\n overflow: \"hidden\",\n }}\n >\n {d.label ?? \"\"}\n </div>\n </foreignObject>\n\n {/* Participant names */}\n <text x=\"50%\" y={BAND_H * 0.65} textAnchor=\"middle\"\n fontSize={BPMN_THEME.fontSize - 1} fontFamily={BPMN_THEME.fontFamily}\n fill={stroke} clipPath={undefined}\n >\n {topParticipant.name}\n </text>\n\n {bottomParticipants.map((p, i) => (\n <text\n key={i}\n x=\"50%\"\n y={`calc(100% - ${BAND_H * (bottomParticipants.length - i) - BAND_H * 0.35}px)`}\n textAnchor=\"middle\"\n fontSize={BPMN_THEME.fontSize - 1}\n fontFamily={BPMN_THEME.fontFamily}\n fill={stroke}\n >\n {p.name}\n </text>\n ))}\n\n {/* Collapse marker for SubChoreography */}\n {collapsed && (\n <g>\n <rect x=\"50%\" y=\"calc(100% - 22px)\"\n width={14} height={12}\n transform=\"translate(-7, 0)\"\n rx={2} fill={fill} stroke={stroke} strokeWidth={sw * 0.8}\n />\n <text x=\"50%\" y=\"calc(100% - 13px)\"\n textAnchor=\"middle\" fontSize={10}\n fill={stroke} fontFamily={BPMN_THEME.fontFamily}\n >+</text>\n </g>\n )}\n </>\n );\n}\n\n// ─── ChoreographyTask ─────────────────────────────────────────────────────────\n\nexport function ChoreographyTaskNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\n// ─── SubChoreography ──────────────────────────────────────────────────────────\n\nexport function SubChoreographyNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} collapsed />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\n// ─── CallChoreography ─────────────────────────────────────────────────────────\n\nexport function CallChoreographyNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} thick collapsed />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n","import type { NodeTypes } from \"@xyflow/react\";\nimport { StartEventNode } from \"./StartEventNode\";\nimport { EndEventNode } from \"./EndEventNode\";\nimport {\n IntermediateCatchEventNode,\n IntermediateThrowEventNode,\n BoundaryEventNode,\n} from \"./IntermediateEventNode\";\nimport { TaskNode } from \"./TaskNode\";\nimport { GatewayNode } from \"./GatewayNode\";\nimport { SubProcessNode } from \"./SubProcessNode\";\nimport { PoolNode } from \"./PoolNode\";\nimport { LaneNode } from \"./LaneNode\";\nimport { AnnotationNode } from \"./AnnotationNode\";\nimport { GroupNode } from \"./GroupNode\";\nimport { DataObjectNode, DataStoreNode } from \"./DataNode\";\nimport {\n DataObjectReferenceNode,\n DataInputNode,\n DataOutputNode,\n DataStoreReferenceNode,\n} from \"./DataRefNode\";\nimport {\n ConversationNode,\n SubConversationNode,\n CallConversationNode,\n} from \"./ConversationNode\";\nimport {\n ChoreographyTaskNode,\n SubChoreographyNode,\n CallChoreographyNode,\n} from \"./ChoreographyNode\";\n\n/** Pass this object to `DiagramCanvas` as `nodeTypes`. All BPMN 2.0 element types are wired here. */\nexport const BPMN_NODE_TYPES: NodeTypes = {\n // Events\n StartEvent: StartEventNode,\n EndEvent: EndEventNode,\n IntermediateCatchEvent: IntermediateCatchEventNode,\n IntermediateThrowEvent: IntermediateThrowEventNode,\n BoundaryEvent: BoundaryEventNode,\n // Tasks — differentiated by data.elementType\n Task: TaskNode,\n UserTask: TaskNode,\n ServiceTask: TaskNode,\n ScriptTask: TaskNode,\n ManualTask: TaskNode,\n BusinessRuleTask: TaskNode,\n ReceiveTask: TaskNode,\n SendTask: TaskNode,\n CallActivity: TaskNode,\n // Gateways — differentiated by data.elementType\n ExclusiveGateway: GatewayNode,\n InclusiveGateway: GatewayNode,\n ParallelGateway: GatewayNode,\n EventBasedGateway: GatewayNode,\n ComplexGateway: GatewayNode,\n // Containers — Transaction, EventSubProcess, AdHocSubProcess derive their visual variant from elementType\n SubProcess: SubProcessNode,\n Transaction: SubProcessNode,\n EventSubProcess: SubProcessNode,\n AdHocSubProcess: SubProcessNode,\n Pool: PoolNode,\n Lane: LaneNode,\n // Artifacts\n Annotation: AnnotationNode,\n Group: GroupNode,\n // Data\n DataObject: DataObjectNode,\n DataObjectReference: DataObjectReferenceNode,\n DataInput: DataInputNode,\n DataOutput: DataOutputNode,\n DataStore: DataStoreNode,\n DataStoreReference: DataStoreReferenceNode,\n // Conversation (§12)\n Conversation: ConversationNode,\n SubConversation: SubConversationNode,\n CallConversation: CallConversationNode,\n // Choreography (§11)\n ChoreographyTask: ChoreographyTaskNode,\n SubChoreography: SubChoreographyNode,\n CallChoreography: CallChoreographyNode,\n};\n","import type { Position } from \"@xyflow/react\";\n\nexport interface EdgePoint {\n x: number;\n y: number;\n}\n\nexport function getEdgePoints(\n sourceX: number,\n sourceY: number,\n targetX: number,\n targetY: number,\n routingPoints?: EdgePoint[],\n): EdgePoint[] {\n if (routingPoints && routingPoints.length >= 2) {\n return routingPoints;\n }\n\n return [\n { x: sourceX, y: sourceY },\n { x: targetX, y: targetY },\n ];\n}\n\nexport function getPolylineMidpoint(points: EdgePoint[]): EdgePoint {\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return points[0];\n\n let total = 0;\n const lengths: number[] = [];\n\n for (let i = 1; i < points.length; i += 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n const length = Math.hypot(dx, dy);\n lengths.push(length);\n total += length;\n }\n\n const halfway = total / 2;\n let traversed = 0;\n\n for (let i = 1; i < points.length; i += 1) {\n const length = lengths[i - 1];\n if (traversed + length >= halfway) {\n const ratio = length === 0 ? 0 : (halfway - traversed) / length;\n return {\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\n };\n }\n traversed += length;\n }\n\n return points[points.length - 1];\n}\n\nexport function getSegmentAngle(points: EdgePoint[]): number {\n if (points.length < 2) return 0;\n const from = points[0];\n const to = points[1];\n return Math.atan2(to.y - from.y, to.x - from.x);\n}\n\nexport function getDefaultFlowMarkerPath(points: EdgePoint[]): string | null {\n if (points.length < 2) return null;\n\n const start = points[0];\n const angle = getSegmentAngle(points);\n const anchorX = start.x + Math.cos(angle) * 16;\n const anchorY = start.y + Math.sin(angle) * 16;\n const normalAngle = angle + Math.PI / 2;\n const half = 7;\n\n const x1 = anchorX + Math.cos(normalAngle) * half;\n const y1 = anchorY + Math.sin(normalAngle) * half;\n const x2 = anchorX - Math.cos(normalAngle) * half;\n const y2 = anchorY - Math.sin(normalAngle) * half;\n\n return `M ${x1} ${y1} L ${x2} ${y2}`;\n}\n\nexport function fallbackAssociationDirection(\n sourcePosition?: Position,\n targetPosition?: Position,\n): \"horizontal\" | \"vertical\" {\n if (sourcePosition === \"left\" || sourcePosition === \"right\" || targetPosition === \"left\" || targetPosition === \"right\") {\n return \"horizontal\";\n }\n\n return \"vertical\";\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getDefaultFlowMarkerPath, getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function SequenceFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n const defaultMarkerPath = d?.isDefault ? getDefaultFlowMarkerPath(polyline) : null;\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n {...(d?.conditionExpression ? { markerStart: \"url(#bpmn-diamond-open)\" } : {})}\n markerEnd={markerEnd ?? \"url(#bpmn-arrow)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n ...(style ?? {}),\n }}\n />\n {defaultMarkerPath && (\n <path\n d={defaultMarkerPath}\n fill=\"none\"\n stroke={selected ? \"#1a56db\" : \"#404040\"}\n strokeWidth={selected ? 2 : 1.5}\n strokeLinecap=\"round\"\n data-testid=\"bpmn-default-flow-marker\"\n />\n )}\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function MessageFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n markerStart=\"url(#bpmn-circle-open)\"\n markerEnd={markerEnd ?? \"url(#bpmn-arrow-open)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: \"6 3\",\n ...(style ?? {}),\n }}\n />\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function AssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const direction = d?.associationDirection ?? \"none\";\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n {...(direction === \"both\" ? { markerStart: \"url(#bpmn-arrow-open)\" } : {})}\n {...(direction === \"one\" || direction === \"both\" ? { markerEnd: \"url(#bpmn-arrow-open)\" } : {})}\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function DataAssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n markerEnd=\"url(#bpmn-arrow-open)\"\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import type { EdgeProps } from \"@xyflow/react\";\nimport { BaseEdge, getStraightPath } from \"@xyflow/react\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { BPMN_THEME } from \"../nodes/shared/theme\";\n\n// BPMN 2.0 §12.2 — ConversationLink is rendered as a double line.\n// Technique: draw the path twice — wide stroke then narrower background —\n// to produce a parallel-line effect without complex path offsets.\n\nexport function ConversationLinkEdge({\n sourceX, sourceY, targetX, targetY,\n data, markerEnd,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const stroke = BPMN_THEME.stroke;\n\n const [path] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n\n return (\n <g>\n {/* Outer (wide) stroke */}\n <BaseEdge\n path={path}\n {...(markerEnd ? { markerEnd } : {})}\n style={{ stroke, strokeWidth: 5, fill: \"none\" }}\n />\n {/* Inner white gap — creates double-line visual */}\n <BaseEdge\n path={path}\n style={{ stroke: \"#ffffff\", strokeWidth: 2, fill: \"none\" }}\n />\n {/* Label */}\n {d?.label && (\n <text fontSize={BPMN_THEME.fontSize} fontFamily={BPMN_THEME.fontFamily} fill={stroke}>\n <textPath href={`#${path}`} startOffset=\"50%\" textAnchor=\"middle\">\n {d.label}\n </textPath>\n </text>\n )}\n </g>\n );\n}\n","import type { EdgeTypes } from \"@xyflow/react\";\nimport { SequenceFlowEdge } from \"./SequenceFlowEdge\";\nimport { MessageFlowEdge } from \"./MessageFlowEdge\";\nimport { AssociationEdge } from \"./AssociationEdge\";\nimport { DataAssociationEdge } from \"./DataAssociationEdge\";\nimport { ConversationLinkEdge } from \"./ConversationLinkEdge\";\n\n/** Pass this object to `DiagramCanvas` as `edgeTypes`. */\nexport const BPMN_EDGE_TYPES: EdgeTypes = {\n sequenceFlow: SequenceFlowEdge,\n messageFlow: MessageFlowEdge,\n association: AssociationEdge,\n dataAssociation: DataAssociationEdge,\n conversationLink: ConversationLinkEdge,\n};\n","import type { BpmnElementType, BpmnEdgeType, EventTrigger } from \"../elements/types\";\n\n// ─── BPMN moddle $type → our BpmnElementType ─────────────────────────────────\n\nexport const MODDLE_TO_ELEMENT_TYPE: Record<string, BpmnElementType | undefined> = {\n \"bpmn:StartEvent\": \"StartEvent\",\n \"bpmn:EndEvent\": \"EndEvent\",\n \"bpmn:IntermediateCatchEvent\": \"IntermediateCatchEvent\",\n \"bpmn:IntermediateThrowEvent\": \"IntermediateThrowEvent\",\n \"bpmn:BoundaryEvent\": \"BoundaryEvent\",\n \"bpmn:Task\": \"Task\",\n \"bpmn:UserTask\": \"UserTask\",\n \"bpmn:ServiceTask\": \"ServiceTask\",\n \"bpmn:ScriptTask\": \"ScriptTask\",\n \"bpmn:ManualTask\": \"ManualTask\",\n \"bpmn:BusinessRuleTask\": \"BusinessRuleTask\",\n \"bpmn:ReceiveTask\": \"ReceiveTask\",\n \"bpmn:SendTask\": \"SendTask\",\n \"bpmn:CallActivity\": \"CallActivity\",\n \"bpmn:ExclusiveGateway\": \"ExclusiveGateway\",\n \"bpmn:InclusiveGateway\": \"InclusiveGateway\",\n \"bpmn:ParallelGateway\": \"ParallelGateway\",\n \"bpmn:EventBasedGateway\": \"EventBasedGateway\",\n \"bpmn:ComplexGateway\": \"ComplexGateway\",\n \"bpmn:SubProcess\": \"SubProcess\",\n \"bpmn:AdHocSubProcess\": \"AdHocSubProcess\",\n \"bpmn:Transaction\": \"Transaction\",\n \"bpmn:TextAnnotation\": \"Annotation\",\n \"bpmn:Group\": \"Group\",\n \"bpmn:DataObject\": \"DataObject\",\n \"bpmn:DataObjectReference\": \"DataObjectReference\",\n \"bpmn:DataInput\": \"DataInput\",\n \"bpmn:DataOutput\": \"DataOutput\",\n \"bpmn:DataStore\": \"DataStore\",\n \"bpmn:DataStoreReference\": \"DataStoreReference\",\n \"bpmn:Conversation\": \"Conversation\",\n \"bpmn:SubConversation\": \"SubConversation\",\n \"bpmn:CallConversation\": \"CallConversation\",\n \"bpmn:ChoreographyTask\": \"ChoreographyTask\",\n \"bpmn:SubChoreography\": \"SubChoreography\",\n \"bpmn:CallChoreography\": \"CallChoreography\",\n \"bpmn:Lane\": \"Lane\",\n};\n\n// ─── Our BpmnElementType → canonical bpmn: type ──────────────────────────────\n\nexport const ELEMENT_TYPE_TO_MODDLE: Partial<Record<BpmnElementType, string>> = {\n StartEvent: \"bpmn:StartEvent\",\n EndEvent: \"bpmn:EndEvent\",\n IntermediateCatchEvent: \"bpmn:IntermediateCatchEvent\",\n IntermediateThrowEvent: \"bpmn:IntermediateThrowEvent\",\n BoundaryEvent: \"bpmn:BoundaryEvent\",\n Task: \"bpmn:Task\",\n UserTask: \"bpmn:UserTask\",\n ServiceTask: \"bpmn:ServiceTask\",\n ScriptTask: \"bpmn:ScriptTask\",\n ManualTask: \"bpmn:ManualTask\",\n BusinessRuleTask: \"bpmn:BusinessRuleTask\",\n ReceiveTask: \"bpmn:ReceiveTask\",\n SendTask: \"bpmn:SendTask\",\n CallActivity: \"bpmn:CallActivity\",\n ExclusiveGateway: \"bpmn:ExclusiveGateway\",\n InclusiveGateway: \"bpmn:InclusiveGateway\",\n ParallelGateway: \"bpmn:ParallelGateway\",\n EventBasedGateway: \"bpmn:EventBasedGateway\",\n ComplexGateway: \"bpmn:ComplexGateway\",\n SubProcess: \"bpmn:SubProcess\",\n Transaction: \"bpmn:Transaction\",\n EventSubProcess: \"bpmn:SubProcess\",\n AdHocSubProcess: \"bpmn:AdHocSubProcess\",\n Pool: \"bpmn:Participant\",\n Lane: \"bpmn:Lane\",\n Annotation: \"bpmn:TextAnnotation\",\n Group: \"bpmn:Group\",\n DataObject: \"bpmn:DataObject\",\n DataObjectReference: \"bpmn:DataObjectReference\",\n DataInput: \"bpmn:DataInput\",\n DataOutput: \"bpmn:DataOutput\",\n DataStore: \"bpmn:DataStore\",\n DataStoreReference: \"bpmn:DataStoreReference\",\n Conversation: \"bpmn:Conversation\",\n SubConversation: \"bpmn:SubConversation\",\n CallConversation: \"bpmn:CallConversation\",\n ChoreographyTask: \"bpmn:ChoreographyTask\",\n SubChoreography: \"bpmn:SubChoreography\",\n CallChoreography: \"bpmn:CallChoreography\",\n};\n\n// ─── Edge type mappings ───────────────────────────────────────────────────────\n\nexport const MODDLE_TO_EDGE_TYPE: Record<string, BpmnEdgeType | undefined> = {\n \"bpmn:SequenceFlow\": \"sequenceFlow\",\n \"bpmn:MessageFlow\": \"messageFlow\",\n \"bpmn:Association\": \"association\",\n \"bpmn:DataInputAssociation\": \"dataAssociation\",\n \"bpmn:DataOutputAssociation\": \"dataAssociation\",\n \"bpmn:ConversationLink\": \"conversationLink\",\n};\n\nexport const EDGE_TYPE_TO_MODDLE: Record<BpmnEdgeType, string> = {\n sequenceFlow: \"bpmn:SequenceFlow\",\n messageFlow: \"bpmn:MessageFlow\",\n association: \"bpmn:Association\",\n dataAssociation: \"bpmn:DataInputAssociation\",\n conversationLink:\"bpmn:ConversationLink\",\n};\n\n// ─── Event definition type → trigger ─────────────────────────────────────────\n\nexport const EVENT_DEF_TO_TRIGGER: Record<string, EventTrigger> = {\n \"bpmn:MessageEventDefinition\": \"message\",\n \"bpmn:TimerEventDefinition\": \"timer\",\n \"bpmn:EscalationEventDefinition\": \"escalation\",\n \"bpmn:ConditionalEventDefinition\": \"conditional\",\n \"bpmn:ErrorEventDefinition\": \"error\",\n \"bpmn:CancelEventDefinition\": \"cancel\",\n \"bpmn:CompensateEventDefinition\": \"compensation\",\n \"bpmn:SignalEventDefinition\": \"signal\",\n \"bpmn:LinkEventDefinition\": \"link\",\n \"bpmn:TerminateEventDefinition\": \"terminate\",\n};\n\nexport const TRIGGER_TO_EVENT_DEF: Partial<Record<EventTrigger, string>> = {\n message: \"bpmn:MessageEventDefinition\",\n timer: \"bpmn:TimerEventDefinition\",\n escalation: \"bpmn:EscalationEventDefinition\",\n conditional: \"bpmn:ConditionalEventDefinition\",\n error: \"bpmn:ErrorEventDefinition\",\n cancel: \"bpmn:CancelEventDefinition\",\n compensation: \"bpmn:CompensateEventDefinition\",\n signal: \"bpmn:SignalEventDefinition\",\n link: \"bpmn:LinkEventDefinition\",\n terminate: \"bpmn:TerminateEventDefinition\",\n};\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnElementType, BpmnEdgeType, BpmnNodeData, BpmnEdgeData, EventTrigger, SubProcessVariant } from \"../elements/types\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnImportResult } from \"./types\";\nimport {\n MODDLE_TO_ELEMENT_TYPE,\n MODDLE_TO_EDGE_TYPE,\n EVENT_DEF_TO_TRIGGER,\n} from \"./mapper\";\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface ShapeInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n isExpanded?: boolean;\n}\n\ntype ShapeMap = Map<string, ShapeInfo>;\ntype WaypointMap = Map<string, Array<{ x: number; y: number }>>;\n\nfunction asElements(v: unknown): ModdleElement[] {\n return Array.isArray(v) ? (v as ModdleElement[]) : [];\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\nfunction extractDocumentation(el: ModdleElement): string | undefined {\n const [doc] = asElements(el.documentation);\n return asString(doc?.text);\n}\n\n// ─── Extract BPMNDI shape/edge positions ─────────────────────────────────────\n\nfunction extractDiagramInfo(definitions: ModdleElement): {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n} {\n const shapes: ShapeMap = new Map();\n const waypoints: WaypointMap = new Map();\n\n for (const diagram of asElements(definitions.diagrams)) {\n const plane = diagram.plane as ModdleElement | undefined;\n if (!plane) continue;\n\n for (const el of asElements(plane.planeElement)) {\n const bpmnEl = el.bpmnElement as ModdleElement | undefined;\n if (!bpmnEl?.id) continue;\n const id = bpmnEl.id as string;\n\n if (el.$type === \"bpmndi:BPMNShape\") {\n const b = el.bounds as { x: number; y: number; width: number; height: number } | undefined;\n if (b) {\n shapes.set(id, {\n x: b.x,\n y: b.y,\n width: b.width,\n height: b.height,\n ...(typeof el.isExpanded === \"boolean\" ? { isExpanded: el.isExpanded as boolean } : {}),\n });\n }\n } else if (el.$type === \"bpmndi:BPMNEdge\") {\n const pts = (el.waypoint ?? []) as Array<{ x: number; y: number }>;\n if (pts.length) waypoints.set(id, pts);\n }\n }\n }\n\n return { shapes, waypoints };\n}\n\n// ─── Lane membership (flowNodeId → laneId) ───────────────────────────────────\n\nfunction extractLaneMembership(process: ModdleElement): Map<string, string> {\n const map = new Map<string, string>();\n\n function walkLaneSet(laneSet: ModdleElement) {\n for (const lane of asElements(laneSet.lanes)) {\n const laneId = lane.id as string | undefined;\n if (!laneId) continue;\n for (const ref of asElements(lane.flowNodeRef)) {\n if (ref.id) map.set(ref.id as string, laneId);\n }\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) walkLaneSet(child);\n }\n }\n\n const laneSet = process.laneSet as ModdleElement | undefined;\n if (laneSet) walkLaneSet(laneSet);\n return map;\n}\n\n// ─── Event trigger from eventDefinitions ─────────────────────────────────────\n\nfunction extractTrigger(el: ModdleElement): EventTrigger | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) return el.$type.includes(\"Parallel\") ? \"parallelMultiple\" : \"multiple\";\n return EVENT_DEF_TO_TRIGGER[defs[0].$type];\n}\n\n// ─── SubProcessVariant from moddle type / properties ─────────────────────────\n\nfunction extractSubProcessVariant(el: ModdleElement): SubProcessVariant | undefined {\n if (el.$type === \"bpmn:Transaction\") return \"transaction\";\n if (el.$type === \"bpmn:AdHocSubProcess\") return \"adhoc\";\n if (el.$type === \"bpmn:SubProcess\" && el.triggeredByEvent === true) return \"event\";\n if (el.triggeredByEvent === true) return \"event\";\n return \"embedded\";\n}\n\n// ─── Walk a flowElements list, producing nodes and edges ─────────────────────\n\ninterface WalkContext {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n laneMembership: Map<string, string>;\n warnings: string[];\n autoX: { value: number };\n}\n\nfunction walkFlowElements(\n elements: ModdleElement[],\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n for (const el of elements) {\n const { $type, id } = el;\n if (!id) continue;\n\n const edgeType = MODDLE_TO_EDGE_TYPE[$type];\n if (edgeType !== undefined) {\n buildEdge(el, edgeType, ctx, edges);\n continue;\n }\n\n // Lane nodes are handled separately via laneMembership\n if ($type === \"bpmn:LaneSet\") continue;\n\n const elementType =\n $type === \"bpmn:SubProcess\" && el.triggeredByEvent === true\n ? \"EventSubProcess\"\n : MODDLE_TO_ELEMENT_TYPE[$type];\n if (!elementType) {\n ctx.warnings.push(`Unknown element type \"${$type}\" (id=${id as string}) — skipped.`);\n continue;\n }\n\n buildNode(el, elementType, parentId, ctx, nodes);\n\n // Recurse into subprocess children\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = asElements(el.flowElements);\n const laneMembership = extractLaneMembership(el);\n walkFlowElements(children, id as string, { ...ctx, laneMembership }, nodes, edges);\n }\n }\n}\n\nfunction buildNode(\n el: ModdleElement,\n elementType: BpmnElementType,\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n const id = el.id as string;\n const meta = BPMN_ELEMENT_CATALOG[elementType];\n const shape = ctx.shapes.get(id);\n\n // Position: use BPMNDI if available, otherwise auto-grid\n const x = shape?.x ?? ctx.autoX.value;\n const y = shape?.y ?? 100;\n if (!shape) ctx.autoX.value += (meta?.defaultWidth ?? 120) + 20;\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const trigger = extractTrigger(el);\n const isNonInterrupting = el.cancelActivity === false;\n const attachedToRef = (el.attachedToRef as ModdleElement | undefined)?.id as string | undefined;\n\n const data: BpmnNodeData = {\n elementType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(trigger ? { trigger } : {}),\n ...(isNonInterrupting ? { isNonInterrupting: true } : {}),\n ...(attachedToRef ? { attachedToRef } : {}),\n };\n\n // SubProcess variant\n if (elementType === \"SubProcess\" || elementType === \"Transaction\" || elementType === \"EventSubProcess\" || elementType === \"AdHocSubProcess\") {\n const variant = extractSubProcessVariant(el);\n if (variant) data.subProcessVariant = variant;\n const isExpanded = shape?.isExpanded ?? true;\n data.isExpanded = isExpanded;\n }\n\n // Determine effective parentId: lane membership overrides process-level parent\n const laneId = ctx.laneMembership.get(id);\n const effectiveParentId = attachedToRef ?? laneId ?? parentId;\n\n const node: BpmnRFNode = {\n id,\n type: elementType,\n position: { x, y },\n data,\n width: shape?.width ?? meta?.defaultWidth,\n height: shape?.height ?? meta?.defaultHeight,\n ...(effectiveParentId ? { parentId: effectiveParentId } : {}),\n };\n\n nodes.push(node);\n}\n\nfunction buildEdge(\n el: ModdleElement,\n edgeType: BpmnEdgeType,\n ctx: WalkContext,\n edges: BpmnRFEdge[],\n) {\n const id = el.id as string;\n const source = (el.sourceRef as ModdleElement | undefined)?.id as string | undefined;\n const target = (el.targetRef as ModdleElement | undefined)?.id as string | undefined;\n\n if (!source || !target) {\n ctx.warnings.push(`Edge \"${id}\" missing source or target — skipped.`);\n return;\n }\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const condExpr = el.conditionExpression as { body?: string } | undefined;\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n };\n\n const waypoints = ctx.waypoints.get(id);\n if (waypoints?.length) data.routingPoints = waypoints;\n\n edges.push({ id, type: edgeType, source, target, data });\n}\n\n// ─── Handle Collaboration: Participants → Pool nodes ──────────────────────────\n\nfunction handleCollaboration(\n collaboration: ModdleElement,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n // Participants become Pool nodes\n for (const participant of asElements(collaboration.participants)) {\n const id = participant.id as string | undefined;\n if (!id) continue;\n const label = asString(participant.name);\n const shape = ctx.shapes.get(id);\n\n const poolNode: BpmnRFNode = {\n id,\n type: \"Pool\",\n position: { x: shape?.x ?? 0, y: shape?.y ?? 0 },\n data: { elementType: \"Pool\", ...(label ? { label } : {}) },\n width: shape?.width ?? 600,\n height: shape?.height ?? 200,\n };\n nodes.push(poolNode);\n\n // Walk the referenced process, assigning pool as parent\n const processRef = participant.processRef as ModdleElement | undefined;\n if (processRef) {\n const laneMembership = extractLaneMembership(processRef);\n walkFlowElements(\n asElements(processRef.flowElements),\n id,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n\n // Add Lane nodes\n const laneSet = processRef.laneSet as ModdleElement | undefined;\n if (laneSet) {\n addLaneNodes(laneSet, id, ctx, nodes);\n }\n }\n }\n\n // Message flows\n for (const mf of asElements(collaboration.messageFlows)) {\n buildEdge(mf, \"messageFlow\", ctx, edges);\n }\n\n // Conversation links\n for (const cl of asElements(collaboration.conversationLinks)) {\n buildEdge(cl, \"conversationLink\", ctx, edges);\n }\n}\n\nfunction addLaneNodes(\n laneSet: ModdleElement,\n poolId: string,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n for (const lane of asElements(laneSet.lanes)) {\n const id = lane.id as string | undefined;\n if (!id) continue;\n const label = asString(lane.name);\n const shape = ctx.shapes.get(id);\n\n nodes.push({\n id,\n type: \"Lane\",\n position: { x: shape?.x ?? 30, y: shape?.y ?? 0 },\n data: { elementType: \"Lane\", ...(label ? { label } : {}) },\n width: shape?.width ?? 570,\n height: shape?.height ?? 120,\n parentId: poolId,\n });\n\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) addLaneNodes(child, poolId, ctx, nodes);\n }\n}\n\n// ─── Public: parseBpmnXml ─────────────────────────────────────────────────────\n\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const moddle = new BpmnModdle();\n const warnings: string[] = [];\n\n let rootElement: ModdleElement;\n try {\n const result = await moddle.fromXML(xml);\n rootElement = result.rootElement;\n for (const w of result.warnings) warnings.push(w.message);\n } catch (err) {\n throw new Error(`Failed to parse BPMN XML: ${String(err)}`);\n }\n\n const nodes: BpmnRFNode[] = [];\n const edges: BpmnRFEdge[] = [];\n\n const { shapes, waypoints } = extractDiagramInfo(rootElement);\n const ctx: WalkContext = {\n shapes,\n waypoints,\n laneMembership: new Map(),\n warnings,\n autoX: { value: 50 },\n };\n\n for (const rootEl of asElements(rootElement.rootElements)) {\n if (rootEl.$type === \"bpmn:Collaboration\") {\n handleCollaboration(rootEl, ctx, nodes, edges);\n } else if (rootEl.$type === \"bpmn:Process\") {\n const laneMembership = extractLaneMembership(rootEl);\n const laneSet = rootEl.laneSet as ModdleElement | undefined;\n if (laneSet) addLaneNodes(laneSet, \"\", ctx, nodes);\n walkFlowElements(\n asElements(rootEl.flowElements),\n undefined,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n }\n }\n\n const defaultFlowById = new Set<string>();\n const nodeIds = new Set(nodes.map((node) => node.id));\n for (const rootEl of asElements(rootElement.rootElements)) {\n collectDefaultFlows(rootEl, defaultFlowById);\n }\n\n const normalizedEdges: BpmnRFEdge[] = edges.map((edge) => {\n if (!defaultFlowById.has(edge.id)) return edge;\n const data: BpmnEdgeData = {\n edgeType: edge.data?.edgeType ?? (edge.type as BpmnEdgeType),\n ...(edge.data ?? {}),\n isDefault: true,\n };\n return { ...edge, data };\n });\n\n return {\n nodes: normalizeChildPositions(nodes, nodeIds),\n edges: normalizedEdges,\n warnings,\n };\n}\n\nfunction collectDefaultFlows(el: ModdleElement, defaultFlowById: Set<string>): void {\n const defaultRef = el.default as ModdleElement | undefined;\n if (defaultRef?.id) defaultFlowById.add(defaultRef.id as string);\n\n for (const child of asElements(el.rootElements)) collectDefaultFlows(child, defaultFlowById);\n for (const child of asElements(el.flowElements)) collectDefaultFlows(child, defaultFlowById);\n}\n\nfunction normalizeChildPositions(nodes: BpmnRFNode[], nodeIds: Set<string>): BpmnRFNode[] {\n const absoluteById = new Map(nodes.map((node) => [node.id, node.position]));\n\n return nodes.map((node) => {\n if (!node.parentId || !nodeIds.has(node.parentId)) return node;\n const parentPosition = absoluteById.get(node.parentId);\n if (!parentPosition) return node;\n\n return {\n ...node,\n position: {\n x: node.position.x - parentPosition.x,\n y: node.position.y - parentPosition.y,\n },\n };\n });\n}\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnExportOptions } from \"./types\";\nimport {\n ELEMENT_TYPE_TO_MODDLE,\n EDGE_TYPE_TO_MODDLE,\n TRIGGER_TO_EVENT_DEF,\n} from \"./mapper\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction uid(prefix: string, id: string): string {\n return `${prefix}_${id}`;\n}\n\nfunction asNodes(nodes: BpmnRFNode[], types: string[]): BpmnRFNode[] {\n return nodes.filter((n) => types.includes(n.data.elementType));\n}\n\n// ─── Build BPMN semantic model ────────────────────────────────────────────────\n\nfunction buildSemanticModel(\n moddle: BpmnModdle,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions,\n): ModdleElement {\n const defId = opts.id ?? \"Definitions_1\";\n const defName = opts.name;\n\n // Collect pool nodes → Collaboration + Participants\n const poolNodes = asNodes(nodes, [\"Pool\"]);\n const laneNodes = asNodes(nodes, [\"Lane\"]);\n const isCollaboration = poolNodes.length > 0;\n\n const definitions = moddle.create(\"bpmn:Definitions\", {\n id: defId,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n ...(defName ? { name: defName } : {}),\n });\n // Flowable namespace: bpmn-moddle serializes xmlns:* from the element's own namespace map.\n // Injected via the moddle descriptor when a full Flowable extension is loaded.\n // For now, individual elements declare their own flowable:* attributes via $attrs.\n\n const rootElements: ModdleElement[] = [];\n\n if (isCollaboration) {\n const participants: ModdleElement[] = [];\n const processes: ModdleElement[] = [];\n\n for (const pool of poolNodes) {\n const processId = `Process_${pool.id}`;\n const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId);\n processes.push(process);\n\n const participant = moddle.create(\"bpmn:Participant\", {\n id: pool.id,\n name: pool.data.label ?? \"\",\n processRef: process,\n });\n participants.push(participant);\n }\n\n // Message flows and conversation links belong to collaboration\n const messageFlowEdges = edges.filter((e) => e.data?.edgeType === \"messageFlow\");\n const conversationLinkEdges = edges.filter((e) => e.data?.edgeType === \"conversationLink\");\n\n const messageFlows = messageFlowEdges.map((e) =>\n moddle.create(\"bpmn:MessageFlow\", {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const conversationLinks = conversationLinkEdges.map((e) =>\n moddle.create(\"bpmn:ConversationLink\", {\n id: e.id,\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const collaboration = moddle.create(\"bpmn:Collaboration\", {\n id: `Collaboration_${defId}`,\n participants,\n messageFlows,\n conversationLinks,\n });\n\n rootElements.push(collaboration, ...processes);\n } else {\n // Single process — no collaboration\n const process = buildProcess(moddle, nodes, edges, undefined, laneNodes, \"Process_1\");\n rootElements.push(process);\n }\n\n (definitions as Record<string, unknown>).rootElements = rootElements;\n return definitions;\n}\n\n// Build a bpmn:Process element containing flow nodes and sequence flows\nfunction buildProcess(\n moddle: BpmnModdle,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n poolId: string | undefined,\n laneNodes: BpmnRFNode[],\n processId: string,\n): ModdleElement {\n // Collect flow nodes that belong to this pool (or all if no pools)\n const subProcessIds = new Set(\n allNodes\n .filter((n) =>\n n.data.elementType === \"SubProcess\" ||\n n.data.elementType === \"Transaction\" ||\n n.data.elementType === \"EventSubProcess\" ||\n n.data.elementType === \"AdHocSubProcess\",\n )\n .map((n) => n.id),\n );\n const isInsideSubProcess = (node: BpmnRFNode) => {\n let parentId = node.parentId;\n while (parentId) {\n if (subProcessIds.has(parentId)) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const belongsToPool = (node: BpmnRFNode): boolean => {\n let parentId = node.parentId;\n while (parentId) {\n if (parentId === poolId) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const myNodes = (poolId\n ? allNodes.filter((n) => belongsToPool(n))\n : allNodes.filter((n) => n.data.elementType !== \"Pool\" && n.data.elementType !== \"Lane\"))\n .filter((n) => !isInsideSubProcess(n));\n\n const myLanes = laneNodes.filter((l) => (poolId ? l.parentId === poolId : true));\n\n // Build flow elements\n const flowElements: ModdleElement[] = [];\n\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (el) flowElements.push(el);\n }\n\n // Sequence flows and associations\n const myNodeIds = new Set(myNodes.map((n) => n.id));\n const myEdges = allEdges.filter(\n (e) =>\n (e.data?.edgeType === \"sequenceFlow\" ||\n e.data?.edgeType === \"association\" ||\n e.data?.edgeType === \"dataAssociation\") &&\n myNodeIds.has(e.source) &&\n myNodeIds.has(e.target),\n );\n\n for (const edge of myEdges) {\n const edgeMeta = buildEdgeElement(moddle, edge);\n if (edgeMeta) flowElements.push(edgeMeta);\n }\n\n const elementById = new Map(\n flowElements\n .filter((element) => typeof element.id === \"string\")\n .map((element) => [element.id as string, element]),\n );\n for (const edge of myEdges) {\n if (!edge.data?.isDefault) continue;\n const sourceElement = elementById.get(edge.source);\n const edgeElement = elementById.get(edge.id);\n if (sourceElement && edgeElement) {\n (sourceElement as Record<string, unknown>).default = edgeElement;\n }\n }\n\n const process = moddle.create(\"bpmn:Process\", {\n id: processId,\n isExecutable: true,\n flowElements,\n });\n\n // Lane set\n if (myLanes.length > 0) {\n const laneElements = myLanes.map((l) =>\n moddle.create(\"bpmn:Lane\", {\n id: l.id,\n name: l.data.label ?? \"\",\n flowNodeRef: myNodes\n .filter((n) => n.parentId === l.id)\n .map((n) => ({ id: n.id })),\n }),\n );\n (process as Record<string, unknown>).laneSet = moddle.create(\"bpmn:LaneSet\", {\n id: `LaneSet_${processId}`,\n lanes: laneElements,\n });\n }\n\n return process;\n}\n\nfunction buildFlowElement(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement | null {\n const { elementType, label, trigger } = node.data;\n\n // Pools and Lanes are handled in buildProcess / collaboration\n if (elementType === \"Pool\" || elementType === \"Lane\") return null;\n\n const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: node.id,\n name: label ?? \"\",\n };\n\n if (node.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: node.data.documentation }),\n ];\n }\n\n // Event definitions\n if (trigger && trigger !== \"none\") {\n const defType = TRIGGER_TO_EVENT_DEF[trigger];\n if (defType) {\n attrs.eventDefinitions = [moddle.create(defType, { id: uid(\"EventDef\", node.id) })];\n }\n }\n\n if (elementType === \"BoundaryEvent\") {\n attrs.attachedToRef = { id: node.data.attachedToRef ?? node.parentId };\n attrs.cancelActivity = node.data.isNonInterrupting ? false : true;\n }\n\n const isSubProcess =\n elementType === \"SubProcess\" ||\n elementType === \"Transaction\" ||\n elementType === \"EventSubProcess\" ||\n elementType === \"AdHocSubProcess\";\n\n if (isSubProcess) {\n attrs.flowElements = buildNestedFlowElements(moddle, node, allNodes, allEdges);\n if (elementType === \"EventSubProcess\" || node.data.subProcessVariant === \"event\") {\n attrs.triggeredByEvent = true;\n }\n }\n\n const element = moddle.create(moddleType, attrs);\n\n return element;\n}\n\nfunction buildNestedFlowElements(\n moddle: BpmnModdle,\n parent: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement[] {\n const childNodes = allNodes.filter((node) => node.parentId === parent.id);\n const childNodeIds = new Set(childNodes.map((node) => node.id));\n const flowElements: ModdleElement[] = [];\n\n for (const child of childNodes) {\n const element = buildFlowElement(moddle, child, allNodes, allEdges);\n if (element) flowElements.push(element);\n }\n\n for (const edge of allEdges) {\n if (!childNodeIds.has(edge.source) || !childNodeIds.has(edge.target)) continue;\n const element = buildEdgeElement(moddle, edge);\n if (element) flowElements.push(element);\n }\n\n return flowElements;\n}\n\nfunction buildEdgeElement(moddle: BpmnModdle, edge: BpmnRFEdge): ModdleElement | null {\n if (!edge.data) return null;\n const moddleType = EDGE_TYPE_TO_MODDLE[edge.data.edgeType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: edge.id,\n name: edge.data.label ?? \"\",\n sourceRef: { id: edge.source },\n targetRef: { id: edge.target },\n };\n\n if (edge.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: edge.data.documentation }),\n ];\n }\n\n if (edge.data.conditionExpression) {\n attrs.conditionExpression = moddle.create(\"bpmn:FormalExpression\", {\n body: edge.data.conditionExpression,\n });\n }\n\n return moddle.create(moddleType, attrs);\n}\n\n// ─── Build BPMNDI (diagram interchange / layout) ─────────────────────────────\n\nfunction buildBpmnDI(\n moddle: BpmnModdle,\n definitions: ModdleElement,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n): void {\n const shapes: ModdleElement[] = [];\n const edgeShapes: ModdleElement[] = [];\n\n const absolutePositionById = buildAbsolutePositionMap(nodes);\n\n for (const node of nodes) {\n const meta = BPMN_ELEMENT_CATALOG[node.data.elementType];\n const w = node.width ?? meta?.defaultWidth ?? 120;\n const h = node.height ?? meta?.defaultHeight ?? 60;\n\n const bounds = moddle.create(\"dc:Bounds\", {\n x: absolutePositionById.get(node.id)?.x ?? node.position.x,\n y: absolutePositionById.get(node.id)?.y ?? node.position.y,\n width: w,\n height: h,\n });\n\n const shape = moddle.create(\"bpmndi:BPMNShape\", {\n id: uid(\"BPMNShape\", node.id),\n bpmnElement: { id: node.id },\n bounds,\n });\n\n if (node.data.isExpanded !== undefined) {\n (shape as Record<string, unknown>).isExpanded = node.data.isExpanded;\n }\n\n shapes.push(shape);\n }\n\n for (const edge of edges) {\n const waypoints = resolveEdgeWaypoints(edge, nodes, absolutePositionById).map((p) =>\n moddle.create(\"dc:Point\", { x: p.x, y: p.y }),\n );\n\n edgeShapes.push(\n moddle.create(\"bpmndi:BPMNEdge\", {\n id: uid(\"BPMNEdge\", edge.id),\n bpmnElement: { id: edge.id },\n waypoint: waypoints,\n }),\n );\n }\n\n // Find the main process / collaboration element\n const rootEls = (definitions as Record<string, unknown>).rootElements as ModdleElement[] | undefined;\n const planeElement = rootEls?.[0];\n\n const plane = moddle.create(\"bpmndi:BPMNPlane\", {\n id: \"BPMNPlane_1\",\n bpmnElement: planeElement ?? { id: \"unknown\" },\n planeElement: [...shapes, ...edgeShapes],\n });\n\n const diagram = moddle.create(\"bpmndi:BPMNDiagram\", {\n id: \"BPMNDiagram_1\",\n plane,\n });\n\n (definitions as Record<string, unknown>).diagrams = [diagram];\n}\n\nfunction resolveEdgeWaypoints(\n edge: BpmnRFEdge,\n nodes: BpmnRFNode[],\n absolutePositionById: Map<string, { x: number; y: number }>,\n): Array<{ x: number; y: number }> {\n if (edge.data?.routingPoints && edge.data.routingPoints.length >= 2) {\n return edge.data.routingPoints;\n }\n\n const source = nodes.find((node) => node.id === edge.source);\n const target = nodes.find((node) => node.id === edge.target);\n if (!source || !target) return [];\n\n const sourceMeta = BPMN_ELEMENT_CATALOG[source.data.elementType];\n const targetMeta = BPMN_ELEMENT_CATALOG[target.data.elementType];\n const sourcePosition = absolutePositionById.get(source.id) ?? source.position;\n const targetPosition = absolutePositionById.get(target.id) ?? target.position;\n return [\n {\n x: sourcePosition.x + (source.width ?? sourceMeta.defaultWidth) / 2,\n y: sourcePosition.y + (source.height ?? sourceMeta.defaultHeight) / 2,\n },\n {\n x: targetPosition.x + (target.width ?? targetMeta.defaultWidth) / 2,\n y: targetPosition.y + (target.height ?? targetMeta.defaultHeight) / 2,\n },\n ];\n}\n\nfunction buildAbsolutePositionMap(nodes: BpmnRFNode[]): Map<string, { x: number; y: number }> {\n const nodeById = new Map(nodes.map((node) => [node.id, node]));\n const absoluteById = new Map<string, { x: number; y: number }>();\n\n function resolve(node: BpmnRFNode): { x: number; y: number } {\n const cached = absoluteById.get(node.id);\n if (cached) return cached;\n\n const parent = node.parentId ? nodeById.get(node.parentId) : undefined;\n const parentPosition = parent ? resolve(parent) : { x: 0, y: 0 };\n const absolute = {\n x: parentPosition.x + node.position.x,\n y: parentPosition.y + node.position.y,\n };\n absoluteById.set(node.id, absolute);\n return absolute;\n }\n\n for (const node of nodes) resolve(node);\n return absoluteById;\n}\n\n// ─── Public: serializeBpmnXml ─────────────────────────────────────────────────\n\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const moddle = new BpmnModdle();\n\n const definitions = buildSemanticModel(moddle, nodes, edges, opts);\n buildBpmnDI(moddle, definitions, nodes, edges);\n\n const { xml } = await moddle.toXML(definitions, {\n format: opts.format ?? true,\n });\n\n return xml;\n}\n","export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"EventSubProcess\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\nfunction isRootProcessStart(diagram: SimDiagram, node: SimNode): boolean {\n if (node.type !== \"StartEvent\") return false;\n if (!node.parentId) return true;\n const parent = nodeById(diagram, node.parentId);\n return !parent || !isSubProcess(parent.type);\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter((n) => isRootProcessStart(diagram, n));\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n","import {\n addNode,\n connectNodes,\n copyElements,\n createModelingRules,\n createSelectionState,\n executeCommand,\n executeCommands,\n findContainingNode,\n getNode,\n getNodeAbsolutePosition,\n getNodeCenterPosition,\n getNodeSize,\n getOutgoingEdges,\n getIncomingEdges,\n normalizeDiagramState,\n pasteElements,\n patchEdge,\n patchNode,\n removeElements,\n replaceNode,\n reparentNode,\n resizeNode,\n setSelection,\n toRelativeNodePosition,\n type CommandStackState,\n type ClipboardState,\n type ConnectionValidator,\n type DiagramCommand,\n type DiagramState,\n type ModelingRules,\n type SelectionState,\n} from \"@aranzatech/diagrams-core\";\nimport {\n createDiagramDocument,\n deserializeDiagram,\n parseDiagramDocument,\n serializeDiagram,\n type CreateDiagramDocumentOptions,\n type DiagramDocument,\n} from \"@aranzatech/diagrams-core/serialization\";\nimport {\n BPMN_ELEMENT_CATALOG,\n getBpmnElementSize,\n isBpmnElementResizable,\n} from \"../elements/catalog\";\nimport {\n acceptsBoundaryEvents,\n getHandlePolicy,\n isDataType,\n isEventType,\n isGatewayType,\n} from \"../elements/guards\";\nimport type { BpmnElementType, BpmnEdgeData, BpmnEdgeType, BpmnNodeData } from \"../elements/types\";\nimport type { BpmnRFEdge, BpmnRFNode } from \"../xml/types\";\n\nexport { getBpmnElementSize, isBpmnElementResizable } from \"../elements/catalog\";\n\nexport type BpmnDiagramState = DiagramState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnClipboardState = ClipboardState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnDiagramDocument = DiagramDocument<BpmnRFNode, BpmnRFEdge>;\n\nexport interface CreateBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n position: { x: number; y: number };\n label?: string;\n parentId?: string;\n width?: number;\n height?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ConnectBpmnOptions {\n id?: string;\n source: string;\n target: string;\n edgeType?: BpmnEdgeType;\n label?: string;\n sourceHandle?: string | null;\n targetHandle?: string | null;\n data?: Partial<BpmnEdgeData>;\n}\n\nexport interface ReplaceBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n label?: string;\n data?: Partial<BpmnNodeData>;\n width?: number;\n height?: number;\n}\n\nexport interface ReparentBpmnNodeOptions {\n id: string;\n parentId?: string;\n position?: { x: number; y: number };\n}\n\nexport interface FindBpmnContainerAtOptions {\n position: { x: number; y: number };\n excludeId?: string;\n}\n\nexport interface ReparentBpmnNodeAtPositionOptions {\n id: string;\n position: { x: number; y: number };\n}\n\nexport interface ResizeBpmnNodeOptions {\n id: string;\n width?: number;\n height?: number;\n}\n\nexport interface ReorderBpmnLaneOptions {\n poolId: string;\n laneId: string;\n index: number;\n}\n\nexport interface MoveBpmnLaneOptions {\n poolId: string;\n laneId: string;\n position: { x: number; y: number };\n}\n\nexport interface RouteBpmnEdgeOptions {\n id: string;\n routingPoints: Array<{ x: number; y: number }>;\n}\n\nexport interface PasteBpmnOptions {\n offset?: { x: number; y: number };\n position?: { x: number; y: number };\n}\n\nexport function createBpmnNode(options: CreateBpmnNodeOptions): BpmnRFNode {\n const size = getBpmnElementSize(options.elementType);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n const orientation = options.data?.orientation ?? meta.orientation;\n const dragHandle = getBpmnDragHandleSelector(options.elementType);\n return {\n id: options.id,\n type: options.elementType,\n position: options.position,\n data: {\n elementType: options.elementType,\n orientation,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n width: options.width ?? size.width,\n height: options.height ?? size.height,\n zIndex: getBpmnNodeZIndex(options.elementType),\n ...(options.parentId ? { parentId: options.parentId } : {}),\n ...(options.elementType === \"Lane\" && options.parentId ? { extent: \"parent\" as const } : {}),\n ...(dragHandle ? { dragHandle } : {}),\n };\n}\n\nexport function getBpmnNodeZIndex(elementType: BpmnElementType): number {\n if (elementType === \"Pool\") return 0;\n if (elementType === \"Lane\") return 1;\n if (elementType === \"BoundaryEvent\") return 4;\n return 3;\n}\n\nexport function withBpmnNodeZIndexes(\n nodes: BpmnRFNode[],\n): BpmnRFNode[] {\n return nodes.map((node) => {\n const zIndex = getBpmnNodeZIndex(node.data.elementType);\n return node.zIndex === zIndex ? node : { ...node, zIndex };\n });\n}\n\nexport const BPMN_POOL_LANE_LAYOUT = {\n poolHeaderSize: 30,\n laneHeaderSize: 24,\n laneGap: 0,\n verticalPoolHeaderSize: 28,\n minLaneSize: 96,\n} as const;\n\nexport function getBpmnDragHandleSelector(\n elementType: BpmnElementType,\n): string | undefined {\n if (elementType === \"Pool\") return \".pool-drag-handle\";\n if (elementType === \"Lane\") return \".lane-drag-handle\";\n return undefined;\n}\n\nexport const BPMN_SELECTION_STYLE = {\n nodeOutline: \"#2563eb\",\n edgeStroke: \"#2563eb\",\n handleFill: \"#ffffff\",\n handleStroke: \"#2563eb\",\n resizeHandleSize: 8,\n routingPointRadius: 5,\n} as const;\n\nexport const BPMN_ROUTABLE_EDGE_TYPES = [\n \"sequenceFlow\",\n \"messageFlow\",\n \"association\",\n \"dataAssociation\",\n \"conversationLink\",\n] satisfies BpmnEdgeType[];\n\nexport interface BpmnConnectionRule {\n edgeType: BpmnEdgeType;\n sourceCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n targetCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n allowSameParent?: boolean;\n allowDifferentParent?: boolean;\n}\n\nexport const BPMN_EDGE_CONNECTION_RULES: Record<BpmnEdgeType, BpmnConnectionRule> = {\n sequenceFlow: {\n edgeType: \"sequenceFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: false,\n },\n messageFlow: {\n edgeType: \"messageFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: false,\n allowDifferentParent: true,\n },\n association: {\n edgeType: \"association\",\n sourceCategories: [\"flowNode\", \"artifact\", \"data\"],\n targetCategories: [\"flowNode\", \"artifact\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n dataAssociation: {\n edgeType: \"dataAssociation\",\n sourceCategories: [\"flowNode\", \"data\"],\n targetCategories: [\"flowNode\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n conversationLink: {\n edgeType: \"conversationLink\",\n sourceCategories: [\"conversation\", \"flowNode\"],\n targetCategories: [\"conversation\", \"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n};\n\nexport function inferBpmnEdgeType(\n state: BpmnDiagramState,\n sourceId: string,\n targetId: string,\n): BpmnEdgeType {\n const source = getNode(state, sourceId);\n const target = getNode(state, targetId);\n if (!source || !target) return \"sequenceFlow\";\n\n if (isDataType(source.data.elementType) || isDataType(target.data.elementType)) {\n return \"dataAssociation\";\n }\n if (\n source.data.elementType === \"Annotation\" ||\n target.data.elementType === \"Annotation\" ||\n source.data.elementType === \"Group\" ||\n target.data.elementType === \"Group\"\n ) {\n return \"association\";\n }\n if (\n source.data.elementType === \"Conversation\" ||\n source.data.elementType === \"SubConversation\" ||\n source.data.elementType === \"CallConversation\" ||\n target.data.elementType === \"Conversation\" ||\n target.data.elementType === \"SubConversation\" ||\n target.data.elementType === \"CallConversation\"\n ) {\n return \"conversationLink\";\n }\n if (source.parentId && target.parentId && source.parentId !== target.parentId) {\n return \"messageFlow\";\n }\n return \"sequenceFlow\";\n}\n\nfunction canUseSequenceFlow(type: BpmnElementType): boolean {\n const meta = BPMN_ELEMENT_CATALOG[type];\n return (\n meta.handlePolicy !== \"none\" &&\n !isDataType(type) &&\n type !== \"Annotation\" &&\n type !== \"Group\" &&\n meta.category !== \"conversation\"\n );\n}\n\nfunction matchesConnectionCategory(\n type: BpmnElementType,\n categories: BpmnConnectionRule[\"sourceCategories\"],\n): boolean {\n return categories.some((category) => {\n if (category === type) return true;\n if (category === \"flowNode\") return canUseSequenceFlow(type);\n if (category === \"data\") return isDataType(type);\n if (category === \"artifact\") return type === \"Annotation\" || type === \"Group\";\n if (category === \"conversation\") return BPMN_ELEMENT_CATALOG[type].category === \"conversation\";\n return false;\n });\n}\n\nexport function isBpmnEdgeRoutingEditable(edgeType: BpmnEdgeType): boolean {\n return BPMN_ROUTABLE_EDGE_TYPES.includes(edgeType);\n}\n\nexport function isBpmnProcessNode(type: BpmnElementType): boolean {\n return (\n isEventType(type) ||\n isGatewayType(type) ||\n type.includes(\"Task\") ||\n type === \"CallActivity\" ||\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\"\n );\n}\n\nexport function canContainBpmnElement(\n parentType: BpmnElementType | undefined,\n childType: BpmnElementType,\n): true | string {\n if (!parentType) return true;\n if (parentType === \"Pool\") {\n return childType === \"Lane\" || isBpmnProcessNode(childType)\n ? true\n : \"Pools can contain lanes or BPMN process nodes.\";\n }\n if (parentType === \"Lane\") {\n return isBpmnProcessNode(childType)\n ? true\n : \"Lanes can only contain BPMN process nodes.\";\n }\n if (\n parentType === \"SubProcess\" ||\n parentType === \"Transaction\" ||\n parentType === \"EventSubProcess\" ||\n parentType === \"AdHocSubProcess\"\n ) {\n return isBpmnProcessNode(childType)\n ? true\n : \"Subprocesses can only contain BPMN process nodes.\";\n }\n return `${parentType} cannot contain BPMN child elements.`;\n}\n\nfunction getDirectBpmnChildren(\n state: BpmnDiagramState,\n parentId: string,\n): BpmnRFNode[] {\n return state.nodes.filter((node) => node.parentId === parentId);\n}\n\nexport function getBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnRFNode[] {\n return getDirectBpmnChildren(state, poolId).filter(\n (node) => node.data.elementType === \"Lane\",\n );\n}\n\nfunction getNodeDimension(node: BpmnRFNode, axis: \"width\" | \"height\"): number {\n return node[axis] ?? node.measured?.[axis] ?? getBpmnElementSize(node.data.elementType)[axis];\n}\n\nfunction getBpmnLaneOrderPosition(\n lane: BpmnRFNode,\n orientation: \"horizontal\" | \"vertical\",\n): number {\n const size = getBpmnNodeSize(lane);\n return orientation === \"vertical\"\n ? lane.position.x + size.width / 2\n : lane.position.y + size.height / 2;\n}\n\nfunction resizeHorizontalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const poolSize = getBpmnNodeSize(pool);\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width - BPMN_POOL_LANE_LAYOUT.poolHeaderSize);\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.height / Math.max(1, lanes.length));\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: BPMN_POOL_LANE_LAYOUT.poolHeaderSize, y: index * laneHeight },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n extent: \"parent\" as const,\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"horizontal\", laneIndex: index },\n }));\n}\n\nfunction resizeVerticalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const poolSize = getBpmnNodeSize(pool);\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width / Math.max(1, lanes.length));\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.height - BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize);\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: index * laneWidth, y: BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n extent: \"parent\" as const,\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"vertical\", laneIndex: index },\n }));\n}\n\nexport function layoutBpmnPoolLaneNodes(\n nodes: BpmnRFNode[],\n poolId: string,\n): BpmnRFNode[] {\n const pool = nodes.find((node) => node.id === poolId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => {\n const aIndex = typeof a.data.laneIndex === \"number\" ? a.data.laneIndex : undefined;\n const bIndex = typeof b.data.laneIndex === \"number\" ? b.data.laneIndex : undefined;\n if (aIndex !== undefined || bIndex !== undefined) return (aIndex ?? 0) - (bIndex ?? 0);\n return getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation);\n });\n\n if (lanes.length === 0) return withBpmnNodeZIndexes(nodes);\n\n const laneMap = new Map(\n (orientation === \"vertical\" ? resizeVerticalBpmnLanes(lanes, pool) : resizeHorizontalBpmnLanes(lanes, pool))\n .map((lane) => [lane.id, lane]),\n );\n\n return withBpmnNodeZIndexes(nodes.map((node) => laneMap.get(node.id) ?? node));\n}\n\nexport function reorderBpmnLaneAfterDrop(\n nodes: BpmnRFNode[],\n laneId: string,\n): BpmnRFNode[] {\n const lane = nodes.find((node) => node.id === laneId && node.data.elementType === \"Lane\");\n if (!lane?.parentId) return nodes;\n\n const pool = nodes.find((node) => node.id === lane.parentId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation));\n\n const moved = lanes.find((candidate) => candidate.id === lane.id);\n if (!moved) return layoutBpmnPoolLaneNodes(nodes, pool.id);\n\n const withoutMoved = lanes.filter((candidate) => candidate.id !== lane.id);\n const movedCenter = getBpmnLaneOrderPosition(lane, orientation);\n const insertIndex = withoutMoved.findIndex(\n (candidate) => movedCenter < getBpmnLaneOrderPosition(candidate, orientation),\n );\n const ordered = [...withoutMoved];\n ordered.splice(insertIndex === -1 ? ordered.length : insertIndex, 0, moved);\n\n const orderedMap = new Map(ordered.map((candidate, index) => [candidate.id, index]));\n const sortedByDrop = nodes.map((node) => {\n if (node.parentId !== pool.id || node.data.elementType !== \"Lane\") return node;\n return { ...node, data: { ...node.data, laneIndex: orderedMap.get(node.id) ?? 0 } };\n });\n\n return layoutBpmnPoolLaneNodes(sortedByDrop, pool.id);\n}\n\nexport function getBpmnNodeSize(node: BpmnRFNode): { width: number; height: number } {\n return getNodeSize(node, getBpmnElementSize(node.data.elementType));\n}\n\nexport function getBpmnNodeAbsolutePosition(\n state: BpmnDiagramState,\n nodeOrId: BpmnRFNode | string,\n): { x: number; y: number } | undefined {\n const nodeId = typeof nodeOrId === \"string\" ? nodeOrId : nodeOrId.id;\n return getNodeAbsolutePosition(state, nodeId);\n}\n\nexport function toBpmnRelativePosition(\n state: BpmnDiagramState,\n absolutePosition: { x: number; y: number },\n parentOrId: BpmnRFNode | string,\n): { x: number; y: number } {\n return toRelativeNodePosition(state, absolutePosition, parentOrId);\n}\n\nconst BPMN_CONTAINER_PRIORITY: BpmnElementType[] = [\n \"Lane\",\n \"SubProcess\",\n \"EventSubProcess\",\n \"Transaction\",\n \"AdHocSubProcess\",\n \"Pool\",\n];\n\nexport function findBpmnContainerAt(\n state: BpmnDiagramState,\n options: FindBpmnContainerAtOptions,\n): BpmnRFNode | undefined {\n return findContainingNode(state, {\n point: options.position,\n excludeId: options.excludeId,\n fallbackSize: (node) => getBpmnElementSize(node.data.elementType),\n predicate: (node) => BPMN_CONTAINER_PRIORITY.includes(node.data.elementType),\n sort: (a, b) => {\n const aPriority = BPMN_CONTAINER_PRIORITY.indexOf(a.data.elementType);\n const bPriority = BPMN_CONTAINER_PRIORITY.indexOf(b.data.elementType);\n if (aPriority !== bPriority) return aPriority - bPriority;\n const aSize = getBpmnNodeSize(a);\n const bSize = getBpmnNodeSize(b);\n return aSize.width * aSize.height - bSize.width * bSize.height;\n },\n });\n}\n\nexport function getBpmnNodeCenter(\n node: BpmnRFNode,\n absolutePosition: { x: number; y: number },\n): { x: number; y: number } {\n return getNodeCenterPosition(absolutePosition, getBpmnNodeSize(node));\n}\n\nfunction resolvePoolLaneDirection(pool: BpmnRFNode): \"horizontal\" | \"vertical\" {\n return pool.data.orientation === \"vertical\" ? \"horizontal\" : \"vertical\";\n}\n\nexport function getBpmnLaneIndexAtPosition(\n state: BpmnDiagramState,\n poolId: string,\n position: { x: number; y: number },\n): number {\n const pool = getNode(state, poolId);\n if (!pool) return 0;\n const lanes = getBpmnPoolLanes(state, poolId);\n const direction = resolvePoolLaneDirection(pool);\n const axis = direction === \"vertical\" ? \"y\" : \"x\";\n const sizeKey = direction === \"vertical\" ? \"height\" : \"width\";\n\n for (let index = 0; index < lanes.length; index += 1) {\n const lane = lanes[index];\n const midpoint = lane.position[axis] + getNodeDimension(lane, sizeKey) / 2;\n if (position[axis] < midpoint) return index;\n }\n return lanes.length;\n}\n\nfunction sortBpmnLanes(\n state: BpmnDiagramState,\n poolId: string,\n laneId: string,\n index: number,\n): BpmnDiagramState {\n const lanes = getBpmnPoolLanes(state, poolId);\n const currentIndex = lanes.findIndex((lane) => lane.id === laneId);\n if (currentIndex < 0) return state;\n\n const orderedIds = lanes.map((lane) => lane.id);\n const [moved] = orderedIds.splice(currentIndex, 1);\n orderedIds.splice(Math.max(0, Math.min(index, orderedIds.length)), 0, moved);\n const order = new Map(orderedIds.map((id, laneIndex) => [id, laneIndex]));\n\n return {\n ...state,\n nodes: [...state.nodes].sort((a, b) => {\n const aOrder = order.get(a.id);\n const bOrder = order.get(b.id);\n if (aOrder === undefined && bOrder === undefined) return 0;\n if (aOrder === undefined) return -1;\n if (bOrder === undefined) return 1;\n return aOrder - bOrder;\n }),\n };\n}\n\nexport function layoutBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnDiagramState {\n const pool = getNode(state, poolId);\n if (!pool) return state;\n const poolSize = getBpmnElementSize(\"Pool\");\n const direction = resolvePoolLaneDirection(pool);\n const lanes = getBpmnPoolLanes(state, poolId);\n let cursor = direction === \"vertical\" ? BPMN_POOL_LANE_LAYOUT.poolHeaderSize : 0;\n\n let next = state;\n for (const lane of lanes) {\n const laneSize = getBpmnElementSize(\"Lane\");\n const width =\n direction === \"vertical\"\n ? Math.max(poolSize.minWidth - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.width ?? laneSize.width)\n : lane.width ?? laneSize.width;\n const height =\n direction === \"vertical\"\n ? lane.height ?? laneSize.height\n : Math.max(poolSize.minHeight - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.height ?? laneSize.height);\n next = patchNode(next, lane.id, {\n position: direction === \"vertical\" ? { x: BPMN_POOL_LANE_LAYOUT.poolHeaderSize, y: cursor } : { x: cursor, y: BPMN_POOL_LANE_LAYOUT.poolHeaderSize },\n width,\n height,\n data: { orientation: pool.data.orientation ?? \"horizontal\" },\n });\n cursor += (direction === \"vertical\" ? height : width) + BPMN_POOL_LANE_LAYOUT.laneGap;\n }\n\n const minWidth =\n direction === \"vertical\"\n ? poolSize.minWidth\n : Math.max(poolSize.minWidth, cursor);\n const minHeight =\n direction === \"vertical\"\n ? Math.max(poolSize.minHeight, cursor)\n : poolSize.minHeight;\n return resizeNode(next, poolId, { width: minWidth, height: minHeight } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n}\n\nexport function reorderBpmnLane(\n state: BpmnDiagramState,\n options: ReorderBpmnLaneOptions,\n): BpmnDiagramState {\n return layoutBpmnPoolLanes(\n sortBpmnLanes(state, options.poolId, options.laneId, options.index),\n options.poolId,\n );\n}\n\nexport function validateBpmnConnectionForEdgeType(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n const rule = BPMN_EDGE_CONNECTION_RULES[edgeType];\n if (!matchesConnectionCategory(source.data.elementType, rule.sourceCategories)) {\n return `${edgeType} cannot start from ${source.data.elementType}.`;\n }\n if (!matchesConnectionCategory(target.data.elementType, rule.targetCategories)) {\n return `${edgeType} cannot target ${target.data.elementType}.`;\n }\n const sameParent = (source.parentId ?? null) === (target.parentId ?? null);\n if (sameParent && rule.allowSameParent === false) {\n return `${edgeType} must connect BPMN elements in different participants/scopes.`;\n }\n if (!sameParent && rule.allowDifferentParent === false) {\n return `${edgeType} must stay inside the same BPMN participant/scope.`;\n }\n if (edgeType === \"sequenceFlow\") {\n if (source.data.elementType === \"EndEvent\") return \"End events cannot have outgoing sequence flows.\";\n if (target.data.elementType === \"StartEvent\") return \"Start events cannot have incoming sequence flows.\";\n return validateEdgeCardinality(state, edgeType, source, target);\n }\n return true;\n}\n\nfunction validateEdgeCardinality(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n if (edgeType !== \"sequenceFlow\") return true;\n\n const sourceMax = BPMN_ELEMENT_CATALOG[source.data.elementType].maxOutgoing;\n const targetMax = BPMN_ELEMENT_CATALOG[target.data.elementType].maxIncoming;\n const outgoing = getOutgoingEdges(state, source.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n const incoming = getIncomingEdges(state, target.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n\n if (sourceMax !== undefined && outgoing.length >= sourceMax) {\n return `${source.data.elementType} cannot have more than ${sourceMax} outgoing sequence flow(s).`;\n }\n if (targetMax !== undefined && incoming.length >= targetMax) {\n return `${target.data.elementType} cannot have more than ${targetMax} incoming sequence flow(s).`;\n }\n return true;\n}\n\nexport const bpmnConnectionValidators: Array<\n ConnectionValidator<BpmnRFNode, BpmnRFEdge>\n> = [\n ({ state, source, target }) => {\n if (source.id === target.id) return \"BPMN self-connections are not allowed.\";\n const edgeType = inferBpmnEdgeType(state, source.id, target.id);\n\n if (getHandlePolicy(source.data.elementType) === \"none\" || getHandlePolicy(target.data.elementType) === \"none\") {\n return \"Elements without BPMN connection handles cannot be directly connected.\";\n }\n\n if (edgeType === \"sequenceFlow\") {\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n }\n\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n },\n];\n\nexport const BPMN_MODELING_RULES: ModelingRules<BpmnRFNode, BpmnRFEdge> =\n createModelingRules({\n connect: [\n ({ state, source, target }) => {\n if (!source || !target) return false;\n for (const validator of bpmnConnectionValidators) {\n const result = validator({\n state,\n source,\n target,\n existingEdges: state.edges,\n });\n if (result !== true) return result;\n }\n return true;\n },\n ],\n drop: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be attached to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent.data.elementType, node.data.elementType);\n },\n ],\n reparent: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be reparented to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n },\n ],\n delete: [() => true],\n resize: [\n ({ node }) =>\n !node || isBpmnElementResizable(node.data.elementType)\n ? true\n : `${node.data.elementType} is not resizable in BPMN.`,\n ],\n });\n\nexport function createBpmnNodeCommand(\n options: CreateBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.createNode.${options.id}`,\n label: `Create ${options.elementType}`,\n execute: (state) => addNode(state, createBpmnNode(options)),\n };\n}\n\nexport function connectBpmnCommand(\n options: ConnectBpmnOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.connect.${options.id ?? `${options.source}-${options.target}`}`,\n label: \"Connect BPMN elements\",\n execute: (state) => {\n const edgeType = options.edgeType ?? inferBpmnEdgeType(state, options.source, options.target);\n const source = getNode(state, options.source);\n const target = getNode(state, options.target);\n if (!source) throw new Error(`Source node \"${options.source}\" does not exist.`);\n if (!target) throw new Error(`Target node \"${options.target}\" does not exist.`);\n const validation = validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n if (validation !== true) throw new Error(validation);\n return connectNodes(\n state,\n {\n source: options.source,\n target: options.target,\n type: edgeType,\n ...(options.sourceHandle !== undefined\n ? { sourceHandle: options.sourceHandle }\n : {}),\n ...(options.targetHandle !== undefined\n ? { targetHandle: options.targetHandle }\n : {}),\n ...(options.id ? { id: options.id } : {}),\n data: {\n edgeType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n },\n [],\n );\n },\n };\n}\n\nexport function attachBoundaryEventCommand(\n boundaryId: string,\n hostId: string,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.attachBoundary.${boundaryId}.${hostId}`,\n label: \"Attach boundary event\",\n execute: (state) => {\n const host = getNode(state, hostId);\n if (!host || !acceptsBoundaryEvents(host.data.elementType)) {\n throw new Error(`Element \"${hostId}\" cannot host boundary events.`);\n }\n const boundary = getNode(state, boundaryId);\n if (!boundary || boundary.data.elementType !== \"BoundaryEvent\") {\n throw new Error(`Element \"${boundaryId}\" is not a boundary event.`);\n }\n const reparented = reparentNode(state, boundaryId, { parentId: hostId });\n return patchNode(reparented, boundaryId, {\n data: { attachedToRef: hostId },\n });\n },\n };\n}\n\nexport function replaceBpmnNodeCommand(\n options: ReplaceBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.replaceNode.${options.id}.${options.elementType}`,\n label: `Replace with ${options.elementType}`,\n execute: (state) => {\n const current = getNode(state, options.id);\n if (!current) throw new Error(`Element \"${options.id}\" does not exist.`);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n return replaceNode(state, options.id, {\n ...current,\n type: options.elementType,\n width: options.width ?? current.width ?? meta.defaultWidth,\n height: options.height ?? current.height ?? meta.defaultHeight,\n data: {\n ...current.data,\n elementType: options.elementType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n });\n },\n };\n}\n\nexport function reparentBpmnNodeCommand(\n options: ReparentBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reparent.${options.id}.${options.parentId ?? \"root\"}`,\n label: \"Reparent BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n const parent = options.parentId ? getNode(state, options.parentId) : undefined;\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n if (parent && node.data.elementType === \"BoundaryEvent\" && !acceptsBoundaryEvents(parent.data.elementType)) {\n throw new Error(\"Boundary events can only be reparented to tasks or subprocesses.\");\n }\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n const reparented = reparentNode(state, options.id, {\n ...(options.parentId !== undefined ? { parentId: options.parentId } : {}),\n ...(options.position ? { position: options.position } : {}),\n });\n return parent?.data.elementType === \"Pool\" && node.data.elementType === \"Lane\"\n ? layoutBpmnPoolLanes(reparented, parent.id)\n : reparented;\n },\n };\n}\n\nexport function reparentBpmnNodeAtPosition(\n state: BpmnDiagramState,\n options: ReparentBpmnNodeAtPositionOptions,\n): BpmnDiagramState {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n\n const hitPoint = getBpmnNodeCenter(node, options.position);\n const parent = isBpmnProcessNode(node.data.elementType)\n ? findBpmnContainerAt(state, { position: hitPoint, excludeId: node.id })\n : undefined;\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n\n const nextPosition = parent\n ? toBpmnRelativePosition(state, options.position, parent)\n : options.position;\n return reparentNode(state, node.id, {\n ...(parent ? { parentId: parent.id } : { parentId: undefined }),\n position: nextPosition,\n });\n}\n\nexport function resizeBpmnNodeCommand(\n options: ResizeBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resize.${options.id}`,\n label: \"Resize BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n const size = getBpmnElementSize(node.data.elementType);\n if (!size.resizable) {\n throw new Error(`${node.data.elementType} is not resizable in BPMN.`);\n }\n return resizeNode(state, options.id, {\n width:\n options.width === undefined\n ? undefined\n : Math.max(size.minWidth, options.width),\n height:\n options.height === undefined\n ? undefined\n : Math.max(size.minHeight, options.height),\n } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n },\n };\n}\n\nexport function reorderBpmnLaneCommand(\n options: ReorderBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reorderLane.${options.poolId}.${options.laneId}`,\n label: \"Reorder BPMN lane\",\n execute: (state) => {\n const pool = getNode(state, options.poolId);\n const lane = getNode(state, options.laneId);\n if (!pool || pool.data.elementType !== \"Pool\") {\n throw new Error(`Element \"${options.poolId}\" is not a pool.`);\n }\n if (!lane || lane.data.elementType !== \"Lane\" || lane.parentId !== options.poolId) {\n throw new Error(`Element \"${options.laneId}\" is not a lane in pool \"${options.poolId}\".`);\n }\n return reorderBpmnLane(state, options);\n },\n };\n}\n\nexport function moveBpmnLaneCommand(\n options: MoveBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.moveLane.${options.poolId}.${options.laneId}`,\n label: \"Move BPMN lane\",\n execute: (state) =>\n reorderBpmnLane(state, {\n poolId: options.poolId,\n laneId: options.laneId,\n index: getBpmnLaneIndexAtPosition(state, options.poolId, options.position),\n }),\n };\n}\n\nexport function routeBpmnEdgeCommand(\n options: RouteBpmnEdgeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.routeEdge.${options.id}`,\n label: \"Route BPMN edge\",\n execute: (state) => {\n const edge = state.edges.find((item) => item.id === options.id);\n if (!edge) throw new Error(`Edge \"${options.id}\" does not exist.`);\n const edgeType = edge.data?.edgeType;\n if (!edgeType || !isBpmnEdgeRoutingEditable(edgeType)) {\n throw new Error(`${edgeType ?? \"edge\"} routing points cannot be edited.`);\n }\n return patchEdge(state, options.id, {\n data: { routingPoints: options.routingPoints },\n } as Parameters<typeof patchEdge<BpmnRFNode, BpmnRFEdge>>[2]);\n },\n };\n}\n\nexport function deleteBpmnElementsCommand(\n ids: string[],\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.delete.${ids.join(\".\")}`,\n label: \"Delete BPMN elements\",\n execute: (state) => removeElements(state, ids),\n };\n}\n\nexport function copyBpmnElements(\n state: BpmnDiagramState,\n selection?: SelectionState,\n): BpmnClipboardState {\n return copyElements(state, selection);\n}\n\nexport function pasteBpmnElementsCommand(\n clipboard: BpmnClipboardState,\n options: PasteBpmnOptions = {},\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.paste\",\n label: \"Paste BPMN elements\",\n execute: (state) => pasteElements(state, clipboard, options),\n };\n}\n\nexport function selectBpmnElementsCommand(\n selection: SelectionState,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.select\",\n label: \"Select BPMN elements\",\n execute: (state) => setSelection(state, createSelectionState(selection.nodeIds, selection.edgeIds)),\n };\n}\n\nexport function createBpmnDiagramDocument(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> = {},\n): BpmnDiagramDocument {\n return createDiagramDocument(normalizeDiagramState(state), {\n ...options,\n diagramType: \"bpmn\",\n });\n}\n\nexport function serializeBpmnDiagram(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> = {},\n): string {\n return serializeDiagram(normalizeDiagramState(state), {\n ...options,\n diagramType: \"bpmn\",\n });\n}\n\nexport function parseBpmnDiagramDocument(json: string): BpmnDiagramDocument {\n const document = parseDiagramDocument<BpmnRFNode, BpmnRFEdge>(json);\n if (document.diagramType && document.diagramType !== \"bpmn\") {\n throw new Error(`Expected a BPMN diagram document, received \"${document.diagramType}\".`);\n }\n return document;\n}\n\nexport function deserializeBpmnDiagram(json: string): BpmnDiagramState {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagram<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\nexport function runBpmnCommand(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n command: DiagramCommand<BpmnRFNode, BpmnRFEdge>,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n return executeCommand(stack, command);\n}\n\nexport function runBpmnCommands(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n commands: Array<DiagramCommand<BpmnRFNode, BpmnRFEdge>>,\n options: { id?: string; label?: string } = {},\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n return executeCommands(stack, commands, options);\n}\n","import { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport {\n isDataType,\n isEventType,\n isGatewayType,\n} from \"../elements/guards\";\nimport type { BpmnElementType } from \"../elements/types\";\nimport type { BpmnRFEdge, BpmnRFNode } from \"../xml/types\";\n\nexport type BpmnValidationSeverity = \"error\" | \"warning\" | \"info\";\n\nexport interface BpmnValidationIssue {\n id: string;\n severity: BpmnValidationSeverity;\n code: string;\n message: string;\n elementId?: string;\n relatedElementIds?: string[];\n}\n\nexport interface BpmnValidationResult {\n valid: boolean;\n issues: BpmnValidationIssue[];\n}\n\nexport interface BpmnValidationOptions {\n requireStartEvent?: boolean;\n requireEndEvent?: boolean;\n strictNames?: boolean;\n}\n\nfunction isFlowNode(type: BpmnElementType): boolean {\n return (\n isEventType(type) ||\n isGatewayType(type) ||\n type.includes(\"Task\") ||\n type === \"CallActivity\" ||\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\" ||\n type === \"ChoreographyTask\" ||\n type === \"SubChoreography\" ||\n type === \"CallChoreography\"\n );\n}\n\nfunction isProcessNode(type: BpmnElementType): boolean {\n return isFlowNode(type) && type !== \"BoundaryEvent\";\n}\n\nfunction isSubProcess(type: BpmnElementType): boolean {\n return (\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\"\n );\n}\n\nfunction isCatchTarget(type: BpmnElementType): boolean {\n return type === \"IntermediateCatchEvent\" || type === \"ReceiveTask\";\n}\n\nfunction poolAncestor(\n node: BpmnRFNode | undefined,\n nodeById: Map<string, BpmnRFNode>,\n): string | undefined {\n let current = node;\n const visited = new Set<string>();\n while (current?.parentId && !visited.has(current.id)) {\n visited.add(current.id);\n const parent = nodeById.get(current.parentId);\n if (parent?.data.elementType === \"Pool\") return parent.id;\n current = parent;\n }\n return undefined;\n}\n\nfunction countSequenceEdges(edges: BpmnRFEdge[], nodeId: string, direction: \"in\" | \"out\"): number {\n return edges.filter((edge) => {\n if (edge.data?.edgeType !== \"sequenceFlow\") return false;\n return direction === \"in\" ? edge.target === nodeId : edge.source === nodeId;\n }).length;\n}\n\nfunction sequenceEdges(edges: BpmnRFEdge[]): BpmnRFEdge[] {\n return edges.filter((edge) => (edge.data?.edgeType ?? edge.type) === \"sequenceFlow\");\n}\n\nfunction sequenceOut(edges: BpmnRFEdge[], nodeId: string): BpmnRFEdge[] {\n return sequenceEdges(edges).filter((edge) => edge.source === nodeId);\n}\n\nfunction sequenceIn(edges: BpmnRFEdge[], nodeId: string): BpmnRFEdge[] {\n return sequenceEdges(edges).filter((edge) => edge.target === nodeId);\n}\n\nfunction issue(\n code: string,\n severity: BpmnValidationSeverity,\n message: string,\n elementId?: string,\n relatedElementIds?: string[],\n): BpmnValidationIssue {\n return {\n id: `${code}:${elementId ?? relatedElementIds?.join(\",\") ?? \"diagram\"}`,\n code,\n severity,\n message,\n ...(elementId ? { elementId } : {}),\n ...(relatedElementIds ? { relatedElementIds } : {}),\n };\n}\n\nexport function validateBpmnDiagram(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n options: BpmnValidationOptions = {},\n): BpmnValidationResult {\n const opts = {\n requireStartEvent: true,\n requireEndEvent: true,\n strictNames: false,\n ...options,\n };\n const issues: BpmnValidationIssue[] = [];\n const nodeById = new Map(nodes.map((node) => [node.id, node]));\n const seqEdges = sequenceEdges(edges);\n\n const processNodes = nodes.filter((node) => isProcessNode(node.data.elementType));\n if (opts.requireStartEvent && !processNodes.some((node) => node.data.elementType === \"StartEvent\")) {\n issues.push(issue(\"bpmn/start-event-required\", \"error\", \"The diagram must contain at least one start event.\"));\n }\n if (opts.requireEndEvent && !processNodes.some((node) => node.data.elementType === \"EndEvent\")) {\n issues.push(issue(\"bpmn/end-event-required\", \"error\", \"The diagram must contain at least one end event.\"));\n }\n\n for (const edge of edges) {\n const edgeType = edge.data?.edgeType ?? edge.type;\n const source = nodeById.get(edge.source);\n const target = nodeById.get(edge.target);\n\n if (!source || !target) {\n issues.push(issue(\n \"bpmn/no-orphan-edges\",\n \"error\",\n `Edge \"${edge.id}\" references a missing ${!source ? \"source\" : \"target\"} node.`,\n edge.id,\n [edge.source, edge.target],\n ));\n continue;\n }\n\n if (edge.source === edge.target) {\n issues.push(issue(\"bpmn/no-self-loop\", \"error\", \"BPMN edges cannot connect an element to itself.\", edge.id, [edge.source]));\n }\n\n if (edgeType === \"sequenceFlow\") {\n if (!isFlowNode(source.data.elementType) || !isFlowNode(target.data.elementType) || isDataType(source.data.elementType) || isDataType(target.data.elementType)) {\n issues.push(issue(\"bpmn/sequence-flow-valid-endpoints\", \"error\", \"Sequence flows must connect BPMN flow nodes.\", edge.id, [source.id, target.id]));\n }\n const sourcePool = poolAncestor(source, nodeById);\n const targetPool = poolAncestor(target, nodeById);\n if (sourcePool && targetPool && sourcePool !== targetPool) {\n issues.push(issue(\"bpmn/sequence-flow-no-cross-pool\", \"error\", \"Sequence flows cannot cross pools. Use message flow between participants.\", edge.id, [source.id, target.id]));\n }\n }\n\n if (edgeType === \"messageFlow\") {\n const sourcePool = poolAncestor(source, nodeById);\n const targetPool = poolAncestor(target, nodeById);\n if (!sourcePool || !targetPool || sourcePool === targetPool) {\n issues.push(issue(\"bpmn/message-flow-valid-endpoints\", \"error\", \"Message flows must connect flow nodes in different pools.\", edge.id, [source.id, target.id]));\n }\n if (!isFlowNode(source.data.elementType) || !isFlowNode(target.data.elementType)) {\n issues.push(issue(\"bpmn/message-flow-valid-endpoints\", \"error\", \"Message flows must connect BPMN flow nodes, not containers.\", edge.id, [source.id, target.id]));\n }\n }\n\n if (edgeType === \"dataAssociation\") {\n const hasDataEndpoint = isDataType(source.data.elementType) || isDataType(target.data.elementType);\n const hasFlowEndpoint = isFlowNode(source.data.elementType) || isFlowNode(target.data.elementType);\n if (!hasDataEndpoint || !hasFlowEndpoint) {\n issues.push(issue(\"bpmn/data-association-valid-endpoints\", \"error\", \"Data associations must connect data elements with flow nodes.\", edge.id, [source.id, target.id]));\n }\n }\n }\n\n const duplicateSequenceKeys = new Set<string>();\n const reportedDuplicateKeys = new Set<string>();\n for (const edge of seqEdges) {\n const key = `${edge.source}->${edge.target}`;\n if (duplicateSequenceKeys.has(key) && !reportedDuplicateKeys.has(key)) {\n reportedDuplicateKeys.add(key);\n issues.push(issue(\"bpmn/no-duplicate-sequence-flow\", \"error\", \"Only one sequence flow is allowed between the same source and target.\", edge.id, [edge.source, edge.target]));\n }\n duplicateSequenceKeys.add(key);\n }\n\n for (const node of nodes) {\n const type = node.data.elementType;\n const incoming = countSequenceEdges(edges, node.id, \"in\");\n const outgoing = countSequenceEdges(edges, node.id, \"out\");\n const meta = BPMN_ELEMENT_CATALOG[type];\n\n if (type === \"StartEvent\" && incoming > 0) {\n issues.push(issue(\"bpmn/start-event-no-incoming\", \"error\", \"Start events cannot have incoming sequence flows.\", node.id));\n }\n if (type === \"EndEvent\") {\n if (outgoing > 0) issues.push(issue(\"bpmn/no-outgoing-from-end-event\", \"error\", \"End events cannot have outgoing sequence flows.\", node.id));\n if (incoming === 0) issues.push(issue(\"bpmn/end-event-has-incoming\", \"error\", \"End events should have at least one incoming sequence flow.\", node.id));\n }\n if ((type === \"IntermediateCatchEvent\" || type === \"IntermediateThrowEvent\") && (incoming === 0 || outgoing === 0)) {\n issues.push(issue(\"bpmn/intermediate-event-both-flows\", \"error\", \"Intermediate events should have both incoming and outgoing sequence flows.\", node.id));\n }\n if (type === \"BoundaryEvent\") {\n const hostId = node.data.attachedToRef ?? node.parentId;\n const host = hostId ? nodeById.get(hostId) : undefined;\n if (!host || !BPMN_ELEMENT_CATALOG[host.data.elementType]?.acceptsBoundaryEvents) {\n issues.push(issue(\"bpmn/boundary-event-attached\", \"error\", \"Boundary events must be attached to an activity or subprocess.\", node.id, hostId ? [hostId] : undefined));\n }\n if (sequenceIn(edges, node.id).length > 0) {\n issues.push(issue(\"bpmn/boundary-no-incoming\", \"error\", \"Boundary events cannot have incoming sequence flows.\", node.id));\n }\n if (sequenceOut(edges, node.id).length === 0) {\n issues.push(issue(\"bpmn/boundary-has-outgoing\", \"warning\", \"Boundary events should define an outgoing exception path.\", node.id));\n }\n }\n if (isGatewayType(type)) {\n if (incoming === 0) issues.push(issue(\"bpmn/gateway-has-incoming\", \"error\", \"Gateways should have at least one incoming sequence flow.\", node.id));\n if (outgoing === 0) issues.push(issue(\"bpmn/gateway-has-outgoing\", \"error\", \"Gateways should have at least one outgoing sequence flow.\", node.id));\n }\n if (type === \"ExclusiveGateway\" || type === \"InclusiveGateway\" || type === \"ComplexGateway\") {\n const outgoingEdges = sequenceOut(edges, node.id);\n const defaults = outgoingEdges.filter((edge) => edge.data?.isDefault);\n if (defaults.length > 1) {\n issues.push(issue(\"bpmn/gateway-single-default\", \"error\", \"Gateways can have at most one default sequence flow.\", node.id, defaults.map((edge) => edge.id)));\n }\n if (outgoingEdges.length >= 2) {\n for (const edge of outgoingEdges) {\n if (!edge.data?.isDefault && !edge.data?.conditionExpression) {\n issues.push(issue(\"bpmn/gateway-condition\", \"error\", \"Conditional gateway branches should have a condition or be marked as default.\", edge.id, [node.id, edge.target]));\n }\n }\n }\n }\n if (type === \"EventBasedGateway\") {\n const outgoingEdges = edges.filter((edge) => edge.data?.edgeType === \"sequenceFlow\" && edge.source === node.id);\n if (outgoingEdges.length < 2) {\n issues.push(issue(\"bpmn/event-based-gateway-min-outgoing\", \"error\", \"Event-based gateways should have at least two outgoing sequence flows.\", node.id));\n }\n for (const edge of outgoingEdges) {\n const target = nodeById.get(edge.target);\n if (target && !isCatchTarget(target.data.elementType)) {\n issues.push(issue(\"bpmn/event-based-gateway-valid-targets\", \"error\", \"Event-based gateways must target catch events or receive tasks.\", edge.id, [node.id, target.id]));\n }\n }\n }\n if (meta.maxIncoming !== undefined && incoming > meta.maxIncoming) {\n issues.push(issue(\"bpmn/max-incoming\", \"error\", `${type} cannot have more than ${meta.maxIncoming} incoming sequence flow(s).`, node.id));\n }\n if (meta.maxOutgoing !== undefined && outgoing > meta.maxOutgoing) {\n issues.push(issue(\"bpmn/max-outgoing\", \"error\", `${type} cannot have more than ${meta.maxOutgoing} outgoing sequence flow(s).`, node.id));\n }\n if (opts.strictNames && (type.includes(\"Task\") || isGatewayType(type)) && !node.data.label) {\n issues.push(issue(\"bpmn/name-required\", \"warning\", `${type} should have a label.`, node.id));\n }\n if (isSubProcess(type)) {\n const childNodes = nodes.filter((child) => child.parentId === node.id);\n if (childNodes.length > 0) {\n if (!childNodes.some((child) => child.data.elementType === \"StartEvent\")) {\n issues.push(issue(\"bpmn/subprocess-has-start-end\", \"error\", \"Expanded subprocesses should contain a start event.\", node.id));\n }\n if (!childNodes.some((child) => child.data.elementType === \"EndEvent\")) {\n issues.push(issue(\"bpmn/subprocess-has-start-end\", \"error\", \"Expanded subprocesses should contain an end event.\", node.id));\n }\n }\n if (type === \"EventSubProcess\") {\n const starts = childNodes.filter((child) => child.data.elementType === \"StartEvent\");\n for (const start of starts) {\n if (!start.data.trigger || start.data.trigger === \"none\") {\n issues.push(issue(\"bpmn/event-subprocess-triggered-start\", \"error\", \"Event subprocess start events must define an event trigger.\", start.id, [node.id]));\n }\n }\n }\n }\n if (type === \"Lane\") {\n const parent = node.parentId ? nodeById.get(node.parentId) : undefined;\n if (parent?.data.elementType !== \"Pool\") {\n issues.push(issue(\"bpmn/lane-parent-pool\", \"error\", \"Lanes must be contained by a pool.\", node.id));\n }\n }\n }\n\n return {\n valid: issues.every((item) => item.severity !== \"error\"),\n issues,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/elements/catalog.ts","../src/elements/guards.ts","../src/nodes/shared/BpmnHandles.tsx","../src/nodes/shared/theme.ts","../src/nodes/shared/BpmnLabel.tsx","../src/nodes/shared/EventMarker.tsx","../src/nodes/StartEventNode.tsx","../src/nodes/EndEventNode.tsx","../src/nodes/IntermediateEventNode.tsx","../src/nodes/shared/TaskIcon.tsx","../src/nodes/shared/TaskMarkers.tsx","../src/nodes/TaskNode.tsx","../src/nodes/GatewayNode.tsx","../src/nodes/SubProcessNode.tsx","../src/nodes/PoolNode.tsx","../src/nodes/LaneNode.tsx","../src/nodes/AnnotationNode.tsx","../src/nodes/GroupNode.tsx","../src/nodes/DataNode.tsx","../src/nodes/DataRefNode.tsx","../src/nodes/ConversationNode.tsx","../src/nodes/ChoreographyNode.tsx","../src/nodes/nodeTypes.ts","../src/edges/path.ts","../src/edges/SequenceFlowEdge.tsx","../src/edges/MessageFlowEdge.tsx","../src/edges/AssociationEdge.tsx","../src/edges/DataAssociationEdge.tsx","../src/edges/ConversationLinkEdge.tsx","../src/edges/edgeTypes.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/modeling/index.ts","../src/validation/index.ts"],"names":["Position","jsxs","Fragment","jsx","Handle","SIZE","CX","R","HEADER_HEIGHT","HEADER_WIDTH","HANDLE_STYLE","H","foldPath","W","FOLD","DS_W","DS_H","RX","RY","pointsToSvgPath","getOrthogonalPath","BaseEdge","EdgeLabelRenderer","getStraightPath","laneSet","def","BpmnModdle","parseVariableType","isSubProcess","nodeById","GATEWAY_TYPES","TASK_TYPES","next","getNode","getNodeSize","getNodeAbsolutePosition","toRelativeNodePosition","findContainingNode","getNodeCenterPosition","patchNode","resizeNode","getOutgoingEdges","getIncomingEdges","createModelingRules","addNode","connectNodes","reparentNode","replaceNode","patchEdge","removeElements","copyElements","pasteElements","setSelection","createSelectionState","createDiagramDocument","normalizeDiagramState","serializeDiagram","parseDiagramDocument","deserializeDiagram","executeCommand","executeCommands"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BpmnElementType, BpmnElementMeta, BpmnElementSize } from \"./types\";\n\nexport const BPMN_ELEMENT_CATALOG: Record<BpmnElementType, BpmnElementMeta> = {\n // ─── Events ──────────────────────────────────────────────────────────────────\n StartEvent: {\n label: \"Start Event\",\n icon: \"Circle\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"source\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"start\",\n canBeStart: true, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 1,\n },\n EndEvent: {\n label: \"End Event\",\n icon: \"CircleDot\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"target\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"end\",\n canBeStart: false, canBeEnd: true,\n maxOutgoing: 0,\n },\n IntermediateCatchEvent: {\n label: \"Intermediate Catch Event\",\n icon: \"Clock3\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"intermediateCatch\",\n canBeStart: false, canBeEnd: false,\n },\n IntermediateThrowEvent: {\n label: \"Intermediate Throw Event\",\n icon: \"Send\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"intermediateThrow\",\n canBeStart: false, canBeEnd: false,\n },\n BoundaryEvent: {\n label: \"Boundary Event\",\n icon: \"AlarmClock\",\n category: \"event\",\n defaultWidth: 36, defaultHeight: 36,\n handlePolicy: \"source\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n eventSemantics: \"boundary\",\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0,\n },\n\n // ─── Tasks ───────────────────────────────────────────────────────────────────\n Task: {\n label: \"Task\",\n icon: \"CheckSquare\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n UserTask: {\n label: \"User Task\",\n icon: \"UserRound\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ServiceTask: {\n label: \"Service Task\",\n icon: \"Cog\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ScriptTask: {\n label: \"Script Task\",\n icon: \"FileCode\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ManualTask: {\n label: \"Manual Task\",\n icon: \"Hand\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n BusinessRuleTask: {\n label: \"Business Rule Task\",\n icon: \"Table2\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n ReceiveTask: {\n label: \"Receive Task\",\n icon: \"Inbox\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n SendTask: {\n label: \"Send Task\",\n icon: \"Send\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n CallActivity: {\n label: \"Call Activity\",\n icon: \"ExternalLink\",\n category: \"task\",\n defaultWidth: 120, defaultHeight: 60,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: true,\n supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Gateways ────────────────────────────────────────────────────────────────\n ExclusiveGateway: {\n label: \"Exclusive Gateway\",\n icon: \"X\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n InclusiveGateway: {\n label: \"Inclusive Gateway\",\n icon: \"Circle\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n ParallelGateway: {\n label: \"Parallel Gateway\",\n icon: \"Plus\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n EventBasedGateway: {\n label: \"Event-Based Gateway\",\n icon: \"Radio\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 1,\n },\n ComplexGateway: {\n label: \"Complex Gateway\",\n icon: \"Asterisk\",\n category: \"gateway\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Containers ───────────────────────────────────────────────────────────────\n SubProcess: {\n label: \"Sub-Process\",\n icon: \"PlusSquare\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n Transaction: {\n label: \"Transaction\",\n icon: \"Receipt\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n EventSubProcess: {\n label: \"Event Sub-Process\",\n icon: \"CircleDotDashed\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n AdHocSubProcess: {\n label: \"Ad-Hoc Sub-Process\",\n icon: \"Waves\",\n category: \"container\",\n defaultWidth: 350, defaultHeight: 200,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: true,\n supportsCollapse: true, supportsMarkers: true,\n canBeStart: false, canBeEnd: false,\n },\n Pool: {\n label: \"Pool\",\n icon: \"Rows3\",\n category: \"container\",\n defaultWidth: 600, defaultHeight: 200,\n handlePolicy: \"none\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n Lane: {\n label: \"Lane\",\n icon: \"PanelTop\",\n category: \"container\",\n defaultWidth: 600, defaultHeight: 120,\n handlePolicy: \"none\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Artifacts ────────────────────────────────────────────────────────────────\n Annotation: {\n label: \"Text Annotation\",\n icon: \"StickyNote\",\n category: \"artifact\",\n defaultWidth: 100, defaultHeight: 60,\n handlePolicy: \"none\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n Group: {\n label: \"Group\",\n icon: \"Group\",\n category: \"artifact\",\n defaultWidth: 300, defaultHeight: 200,\n handlePolicy: \"none\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Data (BPMN 2.0 §10.3) ───────────────────────────────────────────────────\n DataObject: {\n label: \"Data Object\",\n icon: \"File\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataObjectReference: {\n label: \"Data Object Reference\",\n icon: \"FileSymlink\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataInput: {\n label: \"Data Input\",\n icon: \"FileInput\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0,\n },\n DataOutput: {\n label: \"Data Output\",\n icon: \"FileOutput\",\n category: \"data\",\n defaultWidth: 36, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxOutgoing: 0,\n },\n DataStore: {\n label: \"Data Store\",\n icon: \"Database\",\n category: \"data\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n DataStoreReference: {\n label: \"Data Store Reference\",\n icon: \"DatabaseZap\",\n category: \"data\",\n defaultWidth: 50, defaultHeight: 50,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n maxIncoming: 0, maxOutgoing: 0,\n },\n\n // ─── Conversation (BPMN 2.0 §12) ─────────────────────────────────────────────\n Conversation: {\n label: \"Conversation\",\n icon: \"MessageCircle\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n SubConversation: {\n label: \"Sub-Conversation\",\n icon: \"MessagesSquare\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true,\n canBeStart: false, canBeEnd: false,\n },\n CallConversation: {\n label: \"Call Conversation\",\n icon: \"PhoneCall\",\n category: \"conversation\",\n defaultWidth: 60, defaultHeight: 52,\n handlePolicy: \"all\", orientation: \"free\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n\n // ─── Choreography (BPMN 2.0 §11) ─────────────────────────────────────────────\n ChoreographyTask: {\n label: \"Choreography Task\",\n icon: \"ArrowLeftRight\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n SubChoreography: {\n label: \"Sub-Choreography\",\n icon: \"BoxSelect\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: true, acceptsBoundaryEvents: false,\n supportsCollapse: true,\n canBeStart: false, canBeEnd: false,\n },\n CallChoreography: {\n label: \"Call Choreography\",\n icon: \"Phone\",\n category: \"choreography\",\n defaultWidth: 120, defaultHeight: 80,\n handlePolicy: \"all\", orientation: \"horizontal\",\n isContainer: false, acceptsBoundaryEvents: false,\n canBeStart: false, canBeEnd: false,\n },\n};\n\nexport function getElementMeta(type: BpmnElementType): BpmnElementMeta {\n return BPMN_ELEMENT_CATALOG[type];\n}\n\nexport const BPMN_RESIZABLE_ELEMENT_TYPES = [\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n \"SubProcess\",\n \"Transaction\",\n \"EventSubProcess\",\n \"AdHocSubProcess\",\n \"Pool\",\n \"Lane\",\n \"Annotation\",\n \"Group\",\n \"SubConversation\",\n \"ChoreographyTask\",\n \"SubChoreography\",\n \"CallChoreography\",\n] satisfies BpmnElementType[];\n\nconst BPMN_MIN_SIZE_OVERRIDES: Partial<\n Record<BpmnElementType, Pick<BpmnElementSize, \"minWidth\" | \"minHeight\">>\n> = {\n Task: { minWidth: 80, minHeight: 48 },\n UserTask: { minWidth: 80, minHeight: 48 },\n ServiceTask: { minWidth: 80, minHeight: 48 },\n ScriptTask: { minWidth: 80, minHeight: 48 },\n ManualTask: { minWidth: 80, minHeight: 48 },\n BusinessRuleTask: { minWidth: 80, minHeight: 48 },\n ReceiveTask: { minWidth: 80, minHeight: 48 },\n SendTask: { minWidth: 80, minHeight: 48 },\n CallActivity: { minWidth: 80, minHeight: 48 },\n SubProcess: { minWidth: 160, minHeight: 100 },\n Transaction: { minWidth: 160, minHeight: 100 },\n EventSubProcess: { minWidth: 160, minHeight: 100 },\n AdHocSubProcess: { minWidth: 160, minHeight: 100 },\n Pool: { minWidth: 240, minHeight: 120 },\n Lane: { minWidth: 240, minHeight: 80 },\n Annotation: { minWidth: 80, minHeight: 40 },\n Group: { minWidth: 120, minHeight: 80 },\n SubConversation: { minWidth: 60, minHeight: 52 },\n ChoreographyTask: { minWidth: 100, minHeight: 70 },\n SubChoreography: { minWidth: 100, minHeight: 70 },\n CallChoreography: { minWidth: 100, minHeight: 70 },\n};\n\nconst resizableTypes = new Set<BpmnElementType>(BPMN_RESIZABLE_ELEMENT_TYPES);\n\nexport function isBpmnElementResizable(type: BpmnElementType): boolean {\n return resizableTypes.has(type);\n}\n\nexport function getBpmnElementSize(type: BpmnElementType): BpmnElementSize {\n const meta = getElementMeta(type);\n const min = BPMN_MIN_SIZE_OVERRIDES[type];\n return {\n width: meta.defaultWidth,\n height: meta.defaultHeight,\n minWidth: meta.minWidth ?? min?.minWidth ?? meta.defaultWidth,\n minHeight: meta.minHeight ?? min?.minHeight ?? meta.defaultHeight,\n resizable: meta.resizable ?? isBpmnElementResizable(type),\n };\n}\n","import { BPMN_ELEMENT_CATALOG } from \"./catalog\";\nimport type { BpmnElementType } from \"./types\";\n\nconst TASK_TYPES = new Set<BpmnElementType>([\n \"Task\", \"UserTask\", \"ServiceTask\", \"ScriptTask\",\n \"ManualTask\", \"BusinessRuleTask\", \"ReceiveTask\", \"SendTask\", \"CallActivity\",\n]);\n\nconst GATEWAY_TYPES = new Set<BpmnElementType>([\n \"ExclusiveGateway\", \"InclusiveGateway\", \"ParallelGateway\",\n \"EventBasedGateway\", \"ComplexGateway\",\n]);\n\nconst EVENT_TYPES = new Set<BpmnElementType>([\n \"StartEvent\", \"EndEvent\", \"IntermediateCatchEvent\",\n \"IntermediateThrowEvent\", \"BoundaryEvent\",\n]);\n\nconst DATA_TYPES = new Set<BpmnElementType>([\n \"DataObject\", \"DataObjectReference\", \"DataInput\", \"DataOutput\",\n \"DataStore\", \"DataStoreReference\",\n]);\n\nconst CONVERSATION_TYPES = new Set<BpmnElementType>([\n \"Conversation\", \"SubConversation\", \"CallConversation\",\n]);\n\nconst CHOREOGRAPHY_TYPES = new Set<BpmnElementType>([\n \"ChoreographyTask\", \"SubChoreography\", \"CallChoreography\",\n]);\n\nexport function isTaskType(type: BpmnElementType): boolean {\n return TASK_TYPES.has(type);\n}\n\nexport function isGatewayType(type: BpmnElementType): boolean {\n return GATEWAY_TYPES.has(type);\n}\n\nexport function isEventType(type: BpmnElementType): boolean {\n return EVENT_TYPES.has(type);\n}\n\nexport function isDataType(type: BpmnElementType): boolean {\n return DATA_TYPES.has(type);\n}\n\nexport function isConversationType(type: BpmnElementType): boolean {\n return CONVERSATION_TYPES.has(type);\n}\n\nexport function isChoreographyType(type: BpmnElementType): boolean {\n return CHOREOGRAPHY_TYPES.has(type);\n}\n\nexport function isContainerType(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].isContainer;\n}\n\nexport function acceptsBoundaryEvents(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].acceptsBoundaryEvents;\n}\n\nexport function getHandlePolicy(type: BpmnElementType) {\n return BPMN_ELEMENT_CATALOG[type].handlePolicy;\n}\n\nexport function getOrientation(type: BpmnElementType) {\n return BPMN_ELEMENT_CATALOG[type].orientation;\n}\n\nexport function supportsCollapse(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].supportsCollapse ?? false;\n}\n\nexport function supportsMarkers(type: BpmnElementType): boolean {\n return BPMN_ELEMENT_CATALOG[type].supportsMarkers ?? false;\n}\n","import { Handle, Position } from \"@xyflow/react\";\n\ntype HandleVariant =\n | \"all\" // source + target on all 4 sides\n | \"source\" // only outgoing (start events)\n | \"target\" // only incoming (end events)\n | \"none\"; // pools, lanes, annotations\n\nconst ALL_POSITIONS = [\n Position.Top,\n Position.Right,\n Position.Bottom,\n Position.Left,\n] as const;\n\nconst HANDLE_STYLE = {\n width: 8,\n height: 8,\n background: \"#8c8c8c\",\n border: \"1.5px solid #fff\",\n};\n\nexport function BpmnHandles({ variant = \"all\" }: { variant?: HandleVariant }) {\n const src = variant === \"all\" || variant === \"source\";\n const tgt = variant === \"all\" || variant === \"target\";\n\n return (\n <>\n {tgt && ALL_POSITIONS.map((position) => (\n <Handle\n key={`target-${position}`}\n type=\"target\"\n position={position}\n id={`target-${position}`}\n style={HANDLE_STYLE}\n />\n ))}\n {src && ALL_POSITIONS.map((position) => (\n <Handle\n key={`source-${position}`}\n type=\"source\"\n position={position}\n id={`source-${position}`}\n style={HANDLE_STYLE}\n />\n ))}\n </>\n );\n}\n","export const BPMN_THEME = {\n fill: \"#ffffff\",\n fillSoft: \"#f8fbff\",\n fillSubtle: \"#eef6ff\",\n stroke: \"#334155\",\n strokeMuted: \"#64748b\",\n strokeSelected: \"#2563eb\",\n strokeWidth: 1.5,\n strokeWidthSelected: 2.5,\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontSize: 11,\n labelColor: \"#0f172a\",\n handleColor: \"#94a3b8\",\n handleColorSelected: \"#2563eb\",\n shadow: \"none\",\n shadowSelected: \"none\",\n transition: \"box-shadow 140ms ease, filter 140ms ease, transform 140ms ease\",\n} as const;\n\nexport function resolveStroke(selected: boolean | undefined, override?: string): string {\n if (selected) return BPMN_THEME.strokeSelected;\n return override ?? BPMN_THEME.stroke;\n}\n\nexport function resolveStrokeWidth(selected: boolean | undefined): number {\n return selected ? BPMN_THEME.strokeWidthSelected : BPMN_THEME.strokeWidth;\n}\n\nexport function resolveShapeFilter(_selected: boolean | undefined): string | undefined {\n return undefined;\n}\n\nexport function resolveNodeShadow(selected: boolean | undefined): string {\n return selected ? BPMN_THEME.shadowSelected : BPMN_THEME.shadow;\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { BPMN_THEME } from \"./theme\";\n\ninterface BpmnLabelProps {\n children?: ReactNode;\n /** Render label below the shape instead of inside. Default: false (inside). */\n external?: boolean;\n style?: CSSProperties;\n}\n\nconst EXTERNAL_STYLE: CSSProperties = {\n position: \"absolute\",\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n marginTop: 4,\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: BPMN_THEME.labelColor,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n maxWidth: 100,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n pointerEvents: \"none\",\n lineHeight: 1.3,\n};\n\nconst INTERNAL_STYLE: CSSProperties = {\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: BPMN_THEME.labelColor,\n textAlign: \"center\",\n lineHeight: 1.3,\n overflow: \"hidden\",\n wordBreak: \"break-word\",\n};\n\nexport function BpmnLabel({ children, external = false, style }: BpmnLabelProps) {\n if (!children) return null;\n return (\n <div style={{ ...(external ? EXTERNAL_STYLE : INTERNAL_STYLE), ...style }}>\n {children}\n </div>\n );\n}\n","import type { EventTrigger } from \"../../elements/types\";\n\ninterface EventMarkerProps {\n cx: number;\n cy: number;\n trigger: EventTrigger;\n /** True for throw events — markers rendered filled (dark). */\n filled?: boolean;\n stroke: string;\n /** Background fill, used for negative-space areas. */\n bg: string;\n /** Usable radius within the event circle (inner ring radius). */\n r?: number;\n}\n\n// Pentagon points for \"Multiple\" trigger\nfunction pentagon(r: number): string {\n const pts = Array.from({ length: 5 }, (_, i) => {\n const a = (i * 72 - 90) * (Math.PI / 180);\n return `${(r * Math.cos(a)).toFixed(2)},${(r * Math.sin(a)).toFixed(2)}`;\n });\n return `M ${pts.join(\" L \")} Z`;\n}\n\nexport function EventMarker({ cx, cy, trigger, filled = false, stroke, bg, r = 10 }: EventMarkerProps) {\n const s = r * 0.6; // scale factor — icons drawn in roughly [-s, s] box\n const f = filled ? stroke : \"none\";\n const sw = 1.4;\n\n if (trigger === \"none\" || !trigger) return null;\n\n return (\n <g transform={`translate(${cx},${cy})`} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {trigger === \"message\" && (\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n {/* Envelope rectangle */}\n <rect x={-s} y={-s * 0.65} width={s * 2} height={s * 1.3} rx={0.5} />\n {/* Envelope flap */}\n <polyline fill=\"none\" points={`${-s},${-s * 0.65} 0,${s * 0.2} ${s},${-s * 0.65}`} />\n </g>\n )}\n\n {trigger === \"timer\" && (\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n <circle r={s} fill={bg} stroke={stroke} strokeWidth={sw} />\n {/* 12 tick marks */}\n {Array.from({ length: 12 }, (_, i) => {\n const a = (i * 30 - 90) * (Math.PI / 180);\n const len = i % 3 === 0 ? 0.25 : 0.15;\n const x1 = Math.cos(a) * s * 0.75;\n const y1 = Math.sin(a) * s * 0.75;\n const x2 = Math.cos(a) * s * (0.75 + len);\n const y2 = Math.sin(a) * s * (0.75 + len);\n return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={stroke} strokeWidth={sw * 0.8} />;\n })}\n {/* Hour hand */}\n <line x1={0} y1={0} x2={0} y2={-s * 0.5} stroke={stroke} strokeWidth={sw} />\n {/* Minute hand */}\n <line x1={0} y1={0} x2={s * 0.4} y2={0} stroke={stroke} strokeWidth={sw} />\n </g>\n )}\n\n {trigger === \"error\" && (\n <path\n d={`M ${s * 0.35},${-s} L ${-s * 0.15},${-s * 0.05} L ${s * 0.35},${s * 0.05} L ${-s * 0.35},${s} L ${s * 0.15},${s * 0.05} L ${-s * 0.35},${-s * 0.05} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"escalation\" && (\n <path\n d={`M 0,${-s} L ${s * 0.8},${s * 0.7} L 0,${s * 0.2} L ${-s * 0.8},${s * 0.7} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"conditional\" && (\n // Three horizontal lines (document/list)\n <g stroke={stroke} strokeWidth={sw} fill=\"none\">\n <rect x={-s * 0.75} y={-s * 0.9} width={s * 1.5} height={s * 1.8} rx={1} fill={bg} stroke={stroke} strokeWidth={sw} />\n <line x1={-s * 0.45} y1={-s * 0.4} x2={s * 0.45} y2={-s * 0.4} />\n <line x1={-s * 0.45} y1={0} x2={s * 0.45} y2={0} />\n <line x1={-s * 0.45} y1={s * 0.4} x2={s * 0.45} y2={s * 0.4} />\n </g>\n )}\n\n {trigger === \"link\" && (\n // Arrow pointing right\n <path\n d={`M ${-s * 0.9},${-s * 0.35} L ${s * 0.1},${-s * 0.35} L ${s * 0.1},${-s * 0.65} L ${s},0 L ${s * 0.1},${s * 0.65} L ${s * 0.1},${s * 0.35} L ${-s * 0.9},${s * 0.35} Z`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"compensation\" && (\n // Two left-pointing chevrons <<\n <g fill={f} stroke={stroke} strokeWidth={sw}>\n <polyline fill={f} strokeLinejoin=\"round\"\n points={`${s * 0.5},${-s * 0.7} ${-s * 0.1},0 ${s * 0.5},${s * 0.7}`} />\n <polyline fill={f} strokeLinejoin=\"round\"\n points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n {filled && (\n <>\n <polygon fill={stroke} points={`${s * 0.5},${-s * 0.7} ${-s * 0.1},0 ${s * 0.5},${s * 0.7}`} />\n <polygon fill={stroke} points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n </>\n )}\n </g>\n )}\n\n {trigger === \"signal\" && (\n <polygon\n points={`0,${-s} ${s * 0.9},${s * 0.7} ${-s * 0.9},${s * 0.7}`}\n fill={f} stroke={stroke} strokeWidth={sw}\n />\n )}\n\n {trigger === \"cancel\" && (\n // X mark\n <g stroke={stroke} strokeWidth={sw * 1.5} strokeLinecap=\"round\" fill=\"none\">\n <line x1={-s * 0.7} y1={-s * 0.7} x2={s * 0.7} y2={s * 0.7} />\n <line x1={s * 0.7} y1={-s * 0.7} x2={-s * 0.7} y2={s * 0.7} />\n </g>\n )}\n\n {trigger === \"terminate\" && (\n <circle r={s * 0.8} fill={stroke} stroke={stroke} strokeWidth={sw} />\n )}\n\n {trigger === \"multiple\" && (\n <path d={pentagon(s * 0.9)} fill={f} stroke={stroke} strokeWidth={sw} />\n )}\n\n {trigger === \"parallelMultiple\" && (\n <g stroke={stroke} strokeWidth={sw * 1.5} strokeLinecap=\"round\" fill=\"none\">\n <line x1={0} y1={-s * 0.8} x2={0} y2={s * 0.8} />\n <line x1={-s * 0.8} y1={0} x2={s * 0.8} y2={0} />\n </g>\n )}\n </g>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R = CX - 2;\n\nexport function StartEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger ?? \"none\";\n // Non-interrupting start events (in event sub-processes) use dashed border\n const dashArray = d.isNonInterrupting ? \"4 2\" : undefined;\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle\n cx={CX} cy={CX} r={R}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw}\n strokeDasharray={dashArray}\n />\n {/* Trigger marker — catch semantics, outline style */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={R * 0.55} />\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R = CX - 2;\n\nexport function EndEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n {/* Thick border = end event */}\n <circle cx={CX} cy={CX} r={R}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw + 2}\n />\n {/* Trigger marker — throw semantics, filled style */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={true} stroke={stroke} bg={fill} r={R * 0.55} />\n </svg>\n <BpmnHandles variant=\"target\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { EventMarker } from \"./shared/EventMarker\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 36;\nconst CX = SIZE / 2;\nconst R_OUTER = CX - 2;\nconst R_INNER = R_OUTER - 3;\n// Icon fits within the inner ring\nconst ICON_R = R_INNER * 0.65;\n\nexport function IntermediateCatchEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"timer\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER} fill={fill} stroke={stroke} strokeWidth={sw} />\n <circle cx={CX} cy={CX} r={R_INNER} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Catch: outline marker */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\nexport function IntermediateThrowEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"message\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER} fill={fill} stroke={stroke} strokeWidth={sw} />\n {/* Throw events: filled inner disk as background */}\n <circle cx={CX} cy={CX} r={R_INNER} fill={stroke} stroke={stroke} strokeWidth={sw} />\n {/* Throw: filled marker (inverted colors) */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={true} stroke={fill} bg={stroke} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\nexport function BoundaryEventNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const trigger = d.trigger && d.trigger !== \"none\" ? d.trigger : \"timer\";\n // Non-interrupting boundary events have a dashed border\n const dashArray = d.isNonInterrupting ? \"4 2\" : undefined;\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <circle cx={CX} cy={CX} r={R_OUTER}\n fill={fill} stroke={stroke} strokeWidth={sw} strokeDasharray={dashArray} />\n <circle cx={CX} cy={CX} r={R_INNER}\n fill=\"none\" stroke={stroke} strokeWidth={sw} strokeDasharray={dashArray} />\n {/* Catch: outline marker */}\n <EventMarker cx={CX} cy={CX} trigger={trigger} filled={false} stroke={stroke} bg={fill} r={ICON_R} />\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { BpmnElementType } from \"../../elements/types\";\n\ninterface TaskIconProps {\n type: BpmnElementType;\n size?: number;\n color?: string;\n}\n\nexport function TaskIcon({ type, size = 14, color = \"#404040\" }: TaskIconProps) {\n const s = size;\n const c = color;\n\n switch (type) {\n case \"Task\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" rx=\"1.5\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M5.5 8.2 7.2 10 10.8 6\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n case \"UserTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"5\" r=\"3\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 14c0-3.3 2.7-6 6-6s6 2.7 6 6\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ServiceTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M8 1v2M8 13v2M1 8h2M13 8h2M3.2 3.2l1.4 1.4M11.4 11.4l1.4 1.4M3.2 12.8l1.4-1.4M11.4 4.6l1.4-1.4\"\n stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ScriptTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"2\" width=\"10\" height=\"12\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M6 6h4M6 9h4M6 12h2\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"ManualTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M5 10V6a1 1 0 0 1 2 0v2a1 1 0 0 1 2 0v1a1 1 0 0 1 2 0v2c0 1.7-1.3 3-3 3H6a3 3 0 0 1-3-3V9.5\"\n stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n case \"BusinessRuleTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 7h12M6 3v10\" stroke={c} strokeWidth=\"1.5\" />\n </svg>\n );\n case \"ReceiveTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"2\" y=\"4\" width=\"12\" height=\"8\" rx=\"1\" stroke={c} strokeWidth=\"1.5\" />\n <path d=\"M2 4l6 5 6-5\" stroke={c} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n case \"SendTask\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill={c}>\n <path d=\"M2 4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4zm1 0l5 4.5L13 4H3z\" />\n </svg>\n );\n case \"CallActivity\":\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"3\" y=\"5\" width=\"10\" height=\"6\" rx=\"1\" stroke={c} strokeWidth=\"2\" />\n </svg>\n );\n default:\n return null;\n }\n}\n","import type { TaskMarker } from \"../../elements/types\";\n\ninterface TaskMarkersProps {\n markers: TaskMarker[];\n stroke: string;\n size?: number;\n}\n\nconst MARKER_SIZE = 12;\nconst GAP = 3;\n\nexport function TaskMarkers({ markers, stroke, size = MARKER_SIZE }: TaskMarkersProps) {\n if (!markers || markers.length === 0) return null;\n\n const total = markers.length * size + (markers.length - 1) * GAP;\n // Rendered as a horizontal row centered at bottom of the task\n return (\n <div\n style={{\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n display: \"flex\",\n alignItems: \"center\",\n gap: GAP,\n width: total,\n }}\n >\n {markers.map((m) => (\n <MarkerIcon key={m} marker={m} stroke={stroke} size={size} />\n ))}\n </div>\n );\n}\n\nfunction MarkerIcon({ marker, stroke, size }: { marker: TaskMarker; stroke: string; size: number }) {\n const s = size / 2;\n const sw = 1.3;\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`${-s} ${-s} ${size} ${size}`}\n style={{ overflow: \"visible\", display: \"block\" }}\n >\n {marker === \"loop\" && (\n // Circular arrow (↻)\n <g fill=\"none\" stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <path d={`M 0,${-s * 0.85} A ${s * 0.85},${s * 0.85} 0 1 1 ${s * 0.6},${s * 0.6}`} />\n {/* Arrowhead */}\n <polyline points={`${s * 0.2},${s * 0.9} ${s * 0.6},${s * 0.6} ${s * 0.95},${s}`} />\n </g>\n )}\n\n {marker === \"parallelMultiple\" && (\n // Three vertical bars |||\n <g stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <line x1={-s * 0.55} y1={-s * 0.75} x2={-s * 0.55} y2={s * 0.75} />\n <line x1={0} y1={-s * 0.75} x2={0} y2={s * 0.75} />\n <line x1={s * 0.55} y1={-s * 0.75} x2={s * 0.55} y2={s * 0.75} />\n </g>\n )}\n\n {marker === \"sequentialMultiple\" && (\n // Three horizontal bars ≡\n <g stroke={stroke} strokeWidth={sw} strokeLinecap=\"round\">\n <line x1={-s * 0.75} y1={-s * 0.55} x2={s * 0.75} y2={-s * 0.55} />\n <line x1={-s * 0.75} y1={0} x2={s * 0.75} y2={0} />\n <line x1={-s * 0.75} y1={s * 0.55} x2={s * 0.75} y2={s * 0.55} />\n </g>\n )}\n\n {marker === \"compensation\" && (\n // Two left-pointing triangles <<\n <g fill={stroke} stroke={stroke} strokeWidth={0.5} strokeLinejoin=\"round\">\n <polygon points={`${s * 0.4},${-s * 0.7} ${-s * 0.2},0 ${s * 0.4},${s * 0.7}`} />\n <polygon points={`${s},${-s * 0.7} ${s * 0.4},0 ${s},${s * 0.7}`} />\n </g>\n )}\n </svg>\n );\n}\n\n// Tilde symbol for ad-hoc sub-processes — rendered as text or SVG path\nexport function AdhocMarker({ stroke, size = MARKER_SIZE }: { stroke: string; size?: number }) {\n return (\n <div\n style={{\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n color: stroke,\n fontSize: size,\n lineHeight: 1,\n fontFamily: \"serif\",\n userSelect: \"none\",\n }}\n >\n ~\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskIcon } from \"./shared/TaskIcon\";\nimport { TaskMarkers } from \"./shared/TaskMarkers\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nexport function TaskNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const hasMarkers = d.markers && d.markers.length > 0;\n // CallActivity has a thick border per BPMN 2.0 spec\n const borderWidth = d.elementType === \"CallActivity\" ? sw + 2 : sw;\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n background: d.color?.fill ?? `linear-gradient(180deg, ${BPMN_THEME.fill} 0%, ${BPMN_THEME.fillSoft} 100%)`,\n border: `${borderWidth}px solid ${stroke}`,\n borderRadius: 7,\n boxSizing: \"border-box\",\n boxShadow: resolveNodeShadow(selected),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: hasMarkers ? \"4px 8px 22px\" : \"4px 8px\",\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Task type icon — top-left corner */}\n {d.elementType && (\n <div style={{ position: \"absolute\", top: 5, left: 5 }}>\n <TaskIcon type={d.elementType} size={14} color={stroke} />\n </div>\n )}\n\n <BpmnLabel style={{ width: \"100%\" }}>\n {d.label ?? d.elementType}\n </BpmnLabel>\n\n {/* Priority indicator — top-right dot */}\n {d.priority && (\n <div\n title={d.priority}\n style={{\n position: \"absolute\",\n top: 5,\n right: 5,\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: PRIORITY_COLOR[d.priority],\n }}\n />\n )}\n\n {/* Instance markers — bottom center */}\n {hasMarkers && (\n <TaskMarkers markers={d.markers!} stroke={stroke} />\n )}\n\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\nconst PRIORITY_COLOR: Record<string, string> = {\n critical: \"#ef4444\",\n high: \"#f97316\",\n medium: \"#eab308\",\n low: \"#22c55e\",\n};\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData, BpmnElementType } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst SIZE = 50;\nconst H = SIZE / 2;\nconst DIAMOND = `${H},2 ${SIZE - 2},${H} ${H},${SIZE - 2} 2,${H}`;\n\nfunction GatewaySymbol({ type, stroke }: { type: BpmnElementType; stroke: string }) {\n const c = H;\n switch (type) {\n case \"ExclusiveGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1={c - 7} y1={c - 7} x2={c + 7} y2={c + 7} />\n <line x1={c + 7} y1={c - 7} x2={c - 7} y2={c + 7} />\n </g>\n );\n case \"InclusiveGateway\":\n return <circle cx={c} cy={c} r={8} fill=\"none\" stroke={stroke} strokeWidth=\"2\" />;\n case \"ParallelGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <line x1={c} y1={c - 9} x2={c} y2={c + 9} />\n <line x1={c - 9} y1={c} x2={c + 9} y2={c} />\n </g>\n );\n case \"EventBasedGateway\":\n return (\n <g>\n <circle cx={c} cy={c} r={9} fill=\"none\" stroke={stroke} strokeWidth=\"1.5\" />\n <circle cx={c} cy={c} r={6} fill=\"none\" stroke={stroke} strokeWidth=\"1.2\" />\n <polygon\n points={`${c},${c - 5.5} ${c + 5.2},${c - 1.7} ${c + 3.2},${c + 4.8} ${c - 3.2},${c + 4.8} ${c - 5.2},${c - 1.7}`}\n fill=\"none\"\n stroke={stroke}\n strokeWidth=\"1.4\"\n strokeLinejoin=\"round\"\n />\n </g>\n );\n case \"ComplexGateway\":\n return (\n <g stroke={stroke} strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1={c} y1={c - 9} x2={c} y2={c + 9} />\n <line x1={c - 9} y1={c} x2={c + 9} y2={c} />\n <line x1={c - 6} y1={c - 6} x2={c + 6} y2={c + 6} />\n <line x1={c + 6} y1={c - 6} x2={c - 6} y2={c + 6} />\n </g>\n );\n default:\n return null;\n }\n}\n\nexport function GatewayNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <polygon\n points={DIAMOND}\n fill={d.color?.fill ?? BPMN_THEME.fill}\n stroke={stroke}\n strokeWidth={sw}\n />\n <GatewaySymbol type={d.elementType} stroke={stroke} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData, SubProcessVariant } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskMarkers, AdhocMarker } from \"./shared/TaskMarkers\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\n// Derive visual variant from elementType when subProcessVariant is not explicitly set.\n// This lets Transaction, EventSubProcess, AdHocSubProcess render correctly\n// even when dropped from the palette without a preset subProcessVariant.\nfunction resolveVariant(d: BpmnNodeData): SubProcessVariant {\n if (d.subProcessVariant) return d.subProcessVariant;\n switch (d.elementType) {\n case \"Transaction\": return \"transaction\";\n case \"EventSubProcess\": return \"event\";\n case \"AdHocSubProcess\": return \"adhoc\";\n default: return \"embedded\";\n }\n}\n\nexport function SubProcessNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const variant = resolveVariant(d);\n const isExpanded = d.isExpanded ?? true;\n const hasMarkers = d.markers && d.markers.length > 0;\n\n const borderStyle = variant === \"event\" ? \"dashed\" : \"solid\";\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n background: d.color?.fill ?? `linear-gradient(180deg, ${BPMN_THEME.fill} 0%, ${BPMN_THEME.fillSubtle} 100%)`,\n border: `${sw}px ${borderStyle} ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\n boxShadow: resolveNodeShadow(selected),\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Transaction: double-border — inner inset 4 px */}\n {variant === \"transaction\" && (\n <div\n style={{\n position: \"absolute\",\n inset: 4,\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n pointerEvents: \"none\",\n }}\n />\n )}\n\n <BpmnLabel style={{ padding: \"4px 8px\" }}>{d.label}</BpmnLabel>\n\n {/* Collapsed subprocess marker — centered at bottom */}\n {!isExpanded && (\n <div\n aria-label=\"collapsed-subprocess-marker\"\n style={{\n position: \"absolute\",\n bottom: 6,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 16,\n height: 16,\n border: `1.5px solid ${stroke}`,\n borderRadius: 2,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 12,\n color: stroke,\n background: BPMN_THEME.fill,\n zIndex: 1,\n }}\n >\n +\n </div>\n )}\n\n {/* Ad-hoc tilde marker — shown for adhoc variant (incl. AdHocSubProcess type) */}\n {variant === \"adhoc\" && <AdhocMarker stroke={stroke} />}\n\n {/* Instance markers (loop, multi-instance, compensation) */}\n {hasMarkers && <TaskMarkers markers={d.markers!} stroke={stroke} />}\n\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nconst HEADER_WIDTH = 30;\nconst HEADER_HEIGHT = 28;\n\nexport function PoolNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"horizontal\";\n const fill = d.color?.fill ?? \"#f8fbff\";\n const headerFill = d.color?.fill ?? \"#eaf2ff\";\n\n if (orientation === \"vertical\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n <div\n aria-label=\"pool-header\"\n className=\"pool-drag-handle\"\n style={{\n height: HEADER_HEIGHT,\n minHeight: HEADER_HEIGHT,\n borderBottom: `${sw}px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n padding: \"0 8px\",\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 600,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 4,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Vertical header */}\n <div\n aria-label=\"pool-header\"\n className=\"pool-drag-handle\"\n style={{\n width: HEADER_WIDTH,\n minWidth: HEADER_WIDTH,\n borderRight: `${sw}px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\",\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 600,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxHeight: \"90%\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n {/* Canvas area for lanes / nodes */}\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport {\n resolveNodeShadow,\n resolveStroke,\n resolveStrokeWidth,\n BPMN_THEME,\n} from \"./shared/theme\";\n\nconst HEADER_HEIGHT = 24;\nconst HEADER_WIDTH = 28;\n\nexport function LaneNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"horizontal\";\n const fill = d.color?.fill ?? \"#fbfdff\";\n const headerFill = d.color?.fill ?? \"#eef6ff\";\n\n if (orientation === \"vertical\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 2,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n <div\n aria-label=\"lane-header\"\n className=\"lane-drag-handle\"\n style={{\n width: HEADER_WIDTH,\n minWidth: HEADER_WIDTH,\n borderRight: `1px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: headerFill,\n padding: \"6px 0\",\n cursor: \"grab\",\n }}\n >\n <span\n style={{\n writingMode: \"vertical-rl\",\n transform: \"rotate(180deg)\",\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 500,\n color: BPMN_THEME.labelColor,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxHeight: \"90%\",\n }}\n >\n {d.label}\n </span>\n </div>\n\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n border: `${sw}px solid ${stroke}`,\n borderRadius: 2,\n boxSizing: \"border-box\",\n background: fill,\n boxShadow: resolveNodeShadow(selected),\n overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n transition: BPMN_THEME.transition,\n }}\n >\n {/* Drag handle: the horizontal label strip */}\n <div\n aria-label=\"lane-header\"\n className=\"lane-drag-handle\"\n style={{\n height: HEADER_HEIGHT,\n minHeight: HEADER_HEIGHT,\n borderBottom: `1px solid ${stroke}`,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: 8,\n background: headerFill,\n fontSize: BPMN_THEME.fontSize,\n fontWeight: 500,\n color: BPMN_THEME.labelColor,\n cursor: \"grab\",\n }}\n >\n {d.label}\n </div>\n\n {/* Canvas area */}\n <div style={{ flex: 1, position: \"relative\" }} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nconst HANDLE_STYLE = { opacity: 0, width: 6, height: 6 };\n\nexport function AnnotationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const orientation = d.orientation ?? \"vertical\";\n\n if (orientation === \"horizontal\") {\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n borderTop: `${sw + 1}px solid ${stroke}`,\n borderLeft: `${sw}px solid ${stroke}`,\n borderRight: `${sw}px solid ${stroke}`,\n padding: \"8px 6px\",\n background: \"transparent\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n lineHeight: 1.4,\n }}\n >\n {d.label}\n <Handle type=\"target\" position={Position.Left} id=\"target-left\" style={HANDLE_STYLE} />\n <Handle type=\"target\" position={Position.Right} id=\"target-right\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Left} id=\"source-left\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Right} id=\"source-right\" style={HANDLE_STYLE} />\n </div>\n );\n }\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n borderLeft: `${sw + 1}px solid ${stroke}`,\n borderTop: `${sw}px solid ${stroke}`,\n borderBottom: `${sw}px solid ${stroke}`,\n padding: \"4px 8px\",\n background: \"transparent\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n lineHeight: 1.4,\n }}\n >\n {d.label}\n <Handle type=\"target\" position={Position.Top} id=\"target-top\" style={HANDLE_STYLE} />\n <Handle type=\"target\" position={Position.Bottom} id=\"target-bottom\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Top} id=\"source-top\" style={HANDLE_STYLE} />\n <Handle type=\"source\" position={Position.Bottom} id=\"source-bottom\" style={HANDLE_STYLE} />\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\nexport function GroupNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n border: `${sw}px dashed ${stroke}`,\n borderRadius: 8,\n boxSizing: \"border-box\",\n background: \"transparent\",\n padding: \"4px 8px\",\n fontFamily: BPMN_THEME.fontFamily,\n fontSize: BPMN_THEME.fontSize,\n color: BPMN_THEME.labelColor,\n fontStyle: \"italic\",\n }}\n >\n {d.label}\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// ─── Data Object ─────────────────────────────────────────────────────────────\n// Classic document shape: rectangle with folded top-right corner.\n\nconst W = 36;\nconst H = 50;\nconst FOLD = 10;\n\nexport function DataObjectNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n const path = [\n `M 0 0`,\n `L ${W - FOLD} 0`,\n `L ${W} ${FOLD}`,\n `L ${W} ${H}`,\n `L 0 ${H}`,\n `Z`,\n ].join(\" \");\n\n const foldPath = [\n `M ${W - FOLD} 0`,\n `L ${W - FOLD} ${FOLD}`,\n `L ${W} ${FOLD}`,\n ].join(\" \");\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={path} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── Data Store ───────────────────────────────────────────────────────────────\n// Classic cylinder / database shape.\n\nconst DS_W = 50;\nconst DS_H = 50;\nconst RX = DS_W / 2;\nconst RY = 7; // ellipse y radius for top/bottom caps\n\nexport function DataStoreNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: DS_W, height: DS_H, position: \"relative\" }}>\n <svg width={DS_W} height={DS_H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n {/* Body */}\n <path\n d={`M 0 ${RY} Q 0 0 ${RX} 0 Q ${DS_W} 0 ${DS_W} ${RY} L ${DS_W} ${DS_H - RY} Q ${DS_W} ${DS_H} ${RX} ${DS_H} Q 0 ${DS_H} 0 ${DS_H - RY} Z`}\n fill={fill}\n stroke={stroke}\n strokeWidth={sw}\n />\n {/* Top ellipse */}\n <ellipse cx={RX} cy={RY} rx={RX} ry={RY} fill={fill} stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveShapeFilter, resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// ─── Shared document shape constants ─────────────────────────────────────────\n\nconst W = 36;\nconst H = 50;\nconst FOLD = 10;\n\nfunction documentPath(): string {\n return [\n `M 0 0`, `L ${W - FOLD} 0`, `L ${W} ${FOLD}`,\n `L ${W} ${H}`, `L 0 ${H}`, `Z`,\n ].join(\" \");\n}\n\nfunction foldPath(): string {\n return [`M ${W - FOLD} 0`, `L ${W - FOLD} ${FOLD}`, `L ${W} ${FOLD}`].join(\" \");\n}\n\n// Three parallel horizontal lines at the bottom — collection marker\nfunction collectionLines(stroke: string, sw: number) {\n const y = H - 8;\n return (\n <g stroke={stroke} strokeWidth={sw * 0.7} strokeLinecap=\"round\">\n <line x1={W * 0.25} y1={y} x2={W * 0.75} y2={y} />\n <line x1={W * 0.25} y1={y + 3} x2={W * 0.75} y2={y + 3} />\n <line x1={W * 0.25} y1={y + 6} x2={W * 0.75} y2={y + 6} />\n </g>\n );\n}\n\n// ─── DataObjectReference ─────────────────────────────────────────────────────\n// Visually identical to DataObject — semantically a reference on the diagram.\n\nexport function DataObjectReferenceNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataInput ───────────────────────────────────────────────────────────────\n// Document shape + small filled inward-pointing arrow at top-left (BPMN §10.3.3).\n\nexport function DataInputNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Input marker: small arrow pointing right (into the element) */}\n <polygon\n points={`2,4 8,8 2,12`}\n fill=\"none\" stroke={stroke} strokeWidth={sw * 0.8}\n />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"target\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataOutput ──────────────────────────────────────────────────────────────\n// Document shape + small filled outward-pointing arrow at top-left (BPMN §10.3.3).\n\nexport function DataOutputNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path d={documentPath()} fill={fill} stroke={stroke} strokeWidth={sw} />\n <path d={foldPath()} fill=\"none\" stroke={stroke} strokeWidth={sw} />\n {/* Output marker: small filled arrow pointing right (out of the element) */}\n <polygon\n points={`2,4 8,8 2,12`}\n fill={stroke} stroke={stroke} strokeWidth={sw * 0.8}\n />\n {d.isCollection && collectionLines(stroke, sw)}\n </svg>\n <BpmnHandles variant=\"source\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── DataStoreReference ──────────────────────────────────────────────────────\n// Visually identical to DataStore — a reference placed on the diagram.\n\nconst DS_W = 50;\nconst DS_H = 50;\nconst RX = DS_W / 2;\nconst RY = 7;\n\nexport function DataStoreReferenceNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: DS_W, height: DS_H, position: \"relative\" }}>\n <svg width={DS_W} height={DS_H} style={{ overflow: \"visible\", display: \"block\", filter: resolveShapeFilter(selected) }}>\n <path\n d={`M 0 ${RY} Q 0 0 ${RX} 0 Q ${DS_W} 0 ${DS_W} ${RY} L ${DS_W} ${DS_H - RY} Q ${DS_W} ${DS_H} ${RX} ${DS_H} Q 0 ${DS_H} 0 ${DS_H - RY} Z`}\n fill={fill} stroke={stroke} strokeWidth={sw}\n />\n <ellipse cx={RX} cy={RY} rx={RX} ry={RY} fill={fill} stroke={stroke} strokeWidth={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel external>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// BPMN 2.0 §12 — Conversation nodes are rendered as hexagons.\n// W:H ratio ≈ 1.15 (flat-top hexagon).\n\nconst W = 60;\nconst H = 52;\n// Flat-top hexagon: side indentation = W/4\nconst INDENT = W / 4;\n\nfunction hexPoints(): string {\n return [\n `0,${H / 2}`,\n `${INDENT},0`,\n `${W - INDENT},0`,\n `${W},${H / 2}`,\n `${W - INDENT},${H}`,\n `${INDENT},${H}`,\n ].join(\" \");\n}\n\n// Shared hexagon shell\nfunction HexShell({\n fill, stroke, sw, thick = false,\n}: { fill: string; stroke: string; sw: number; thick?: boolean }) {\n return (\n <polygon\n points={hexPoints()}\n fill={fill}\n stroke={stroke}\n strokeWidth={thick ? sw + 2 : sw}\n />\n );\n}\n\n// ─── Conversation ─────────────────────────────────────────────────────────────\n\nexport function ConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── SubConversation ──────────────────────────────────────────────────────────\n// Hexagon + expand/collapse marker (+ box) at the bottom center.\n\nexport function SubConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} />\n {/* Collapse marker */}\n <rect x={W / 2 - 7} y={H - 15} width={14} height={12} rx={2}\n fill={fill} stroke={stroke} strokeWidth={sw * 0.8} />\n <text x={W / 2} y={H - 6} textAnchor=\"middle\" fontSize={10} fill={stroke} fontFamily={BPMN_THEME.fontFamily}>+</text>\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n\n// ─── CallConversation ─────────────────────────────────────────────────────────\n// Hexagon with thick border + collapse marker.\n\nexport function CallConversationNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n\n return (\n <div style={{ width: W, height: H, position: \"relative\" }}>\n <svg width={W} height={H} style={{ overflow: \"visible\", display: \"block\" }}>\n <HexShell fill={fill} stroke={stroke} sw={sw} thick />\n {/* Collapse marker */}\n <rect x={W / 2 - 7} y={H - 15} width={14} height={12} rx={2}\n fill={fill} stroke={stroke} strokeWidth={sw * 0.8} />\n <text x={W / 2} y={H - 6} textAnchor=\"middle\" fontSize={10} fill={stroke} fontFamily={BPMN_THEME.fontFamily}>+</text>\n </svg>\n <BpmnHandles variant=\"all\" />\n <BpmnLabel style={{ textAlign: \"center\" }}>{d.label}</BpmnLabel>\n </div>\n );\n}\n","import type { NodeProps } from \"@xyflow/react\";\nimport type { BpmnNodeData } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\n\n// BPMN 2.0 §11 — Choreography tasks are banded rectangles.\n// Layout: top participant band | task name band | bottom participant band.\n// The initiating participant's band is white; responding bands are filled gray.\n\nconst BAND_H = 20; // height of each participant band\nconst RADIUS = 6;\n\ninterface ChoreographyShellProps {\n d: BpmnNodeData;\n stroke: string;\n sw: number;\n thick?: boolean; // CallChoreography uses a thick border\n collapsed?: boolean; // SubChoreography shows a + marker\n}\n\nfunction ChoreographyShell({ d, stroke, sw, thick = false, collapsed = false }: ChoreographyShellProps) {\n const participants = d.participants ?? [\n { name: \"Initiator\", isInitiating: true },\n { name: \"Responder\", isInitiating: false },\n ];\n const fill = d.color?.fill ?? BPMN_THEME.fill;\n const respondFill = \"#c8d8e8\"; // light blue-gray for responding participant bands\n const bw = thick ? sw + 2 : sw;\n\n // Separate initiating from responding — show first initiating at top, rest at bottom\n const [topParticipant, ...rest] = participants;\n const bottomParticipants = rest;\n\n return (\n <>\n {/* Top participant band */}\n <rect x={0} y={0} width=\"100%\" height={BAND_H}\n fill={topParticipant.isInitiating ? fill : respondFill}\n stroke={stroke} strokeWidth={bw}\n rx={RADIUS} ry={RADIUS}\n />\n {/* Hide bottom-radius of top band */}\n <rect x={0} y={BAND_H / 2} width=\"100%\" height={BAND_H / 2}\n fill={topParticipant.isInitiating ? fill : respondFill}\n stroke=\"none\"\n />\n\n {/* Middle name band */}\n <rect x={0} y={BAND_H} width=\"100%\" height={`calc(100% - ${BAND_H * (1 + bottomParticipants.length)}px)`}\n fill={fill} stroke={stroke} strokeWidth={bw}\n />\n\n {/* Bottom participant bands */}\n {bottomParticipants.map((p, i) => {\n const y = `calc(100% - ${BAND_H * (bottomParticipants.length - i)}px)`;\n return (\n <g key={i}>\n <rect x={0} y={y} width=\"100%\" height={BAND_H}\n fill={p.isInitiating ? fill : respondFill}\n stroke={stroke} strokeWidth={bw}\n />\n </g>\n );\n })}\n\n {/* Outer border — drawn last so it's on top */}\n <rect x={bw / 2} y={bw / 2}\n width={`calc(100% - ${bw}px)`}\n height={`calc(100% - ${bw}px)`}\n fill=\"none\" stroke={stroke} strokeWidth={bw}\n rx={RADIUS} ry={RADIUS}\n />\n\n {/* Task name */}\n <foreignObject x={4} y={BAND_H} width=\"calc(100% - 8px)\"\n height={`calc(100% - ${BAND_H * (1 + bottomParticipants.length)}px)`}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: BPMN_THEME.fontSize,\n fontFamily: BPMN_THEME.fontFamily,\n color: stroke,\n textAlign: \"center\",\n padding: \"2px 4px\",\n boxSizing: \"border-box\",\n overflow: \"hidden\",\n }}\n >\n {d.label ?? \"\"}\n </div>\n </foreignObject>\n\n {/* Participant names */}\n <text x=\"50%\" y={BAND_H * 0.65} textAnchor=\"middle\"\n fontSize={BPMN_THEME.fontSize - 1} fontFamily={BPMN_THEME.fontFamily}\n fill={stroke} clipPath={undefined}\n >\n {topParticipant.name}\n </text>\n\n {bottomParticipants.map((p, i) => (\n <text\n key={i}\n x=\"50%\"\n y={`calc(100% - ${BAND_H * (bottomParticipants.length - i) - BAND_H * 0.35}px)`}\n textAnchor=\"middle\"\n fontSize={BPMN_THEME.fontSize - 1}\n fontFamily={BPMN_THEME.fontFamily}\n fill={stroke}\n >\n {p.name}\n </text>\n ))}\n\n {/* Collapse marker for SubChoreography */}\n {collapsed && (\n <g>\n <rect x=\"50%\" y=\"calc(100% - 22px)\"\n width={14} height={12}\n transform=\"translate(-7, 0)\"\n rx={2} fill={fill} stroke={stroke} strokeWidth={sw * 0.8}\n />\n <text x=\"50%\" y=\"calc(100% - 13px)\"\n textAnchor=\"middle\" fontSize={10}\n fill={stroke} fontFamily={BPMN_THEME.fontFamily}\n >+</text>\n </g>\n )}\n </>\n );\n}\n\n// ─── ChoreographyTask ─────────────────────────────────────────────────────────\n\nexport function ChoreographyTaskNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\n// ─── SubChoreography ──────────────────────────────────────────────────────────\n\nexport function SubChoreographyNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} collapsed />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n\n// ─── CallChoreography ─────────────────────────────────────────────────────────\n\nexport function CallChoreographyNode({ data, selected }: NodeProps) {\n const d = data as BpmnNodeData;\n const stroke = resolveStroke(selected, d.color?.stroke);\n const sw = resolveStrokeWidth(selected);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\", position: \"relative\" }}>\n <svg width=\"100%\" height=\"100%\" style={{ overflow: \"visible\", display: \"block\" }}>\n <ChoreographyShell d={d} stroke={stroke} sw={sw} thick collapsed />\n </svg>\n <BpmnHandles variant=\"all\" />\n </div>\n );\n}\n","import type { NodeTypes } from \"@xyflow/react\";\nimport { StartEventNode } from \"./StartEventNode\";\nimport { EndEventNode } from \"./EndEventNode\";\nimport {\n IntermediateCatchEventNode,\n IntermediateThrowEventNode,\n BoundaryEventNode,\n} from \"./IntermediateEventNode\";\nimport { TaskNode } from \"./TaskNode\";\nimport { GatewayNode } from \"./GatewayNode\";\nimport { SubProcessNode } from \"./SubProcessNode\";\nimport { PoolNode } from \"./PoolNode\";\nimport { LaneNode } from \"./LaneNode\";\nimport { AnnotationNode } from \"./AnnotationNode\";\nimport { GroupNode } from \"./GroupNode\";\nimport { DataObjectNode, DataStoreNode } from \"./DataNode\";\nimport {\n DataObjectReferenceNode,\n DataInputNode,\n DataOutputNode,\n DataStoreReferenceNode,\n} from \"./DataRefNode\";\nimport {\n ConversationNode,\n SubConversationNode,\n CallConversationNode,\n} from \"./ConversationNode\";\nimport {\n ChoreographyTaskNode,\n SubChoreographyNode,\n CallChoreographyNode,\n} from \"./ChoreographyNode\";\n\n/** Pass this object to `DiagramCanvas` as `nodeTypes`. All BPMN 2.0 element types are wired here. */\nexport const BPMN_NODE_TYPES: NodeTypes = {\n // Events\n StartEvent: StartEventNode,\n EndEvent: EndEventNode,\n IntermediateCatchEvent: IntermediateCatchEventNode,\n IntermediateThrowEvent: IntermediateThrowEventNode,\n BoundaryEvent: BoundaryEventNode,\n // Tasks — differentiated by data.elementType\n Task: TaskNode,\n UserTask: TaskNode,\n ServiceTask: TaskNode,\n ScriptTask: TaskNode,\n ManualTask: TaskNode,\n BusinessRuleTask: TaskNode,\n ReceiveTask: TaskNode,\n SendTask: TaskNode,\n CallActivity: TaskNode,\n // Gateways — differentiated by data.elementType\n ExclusiveGateway: GatewayNode,\n InclusiveGateway: GatewayNode,\n ParallelGateway: GatewayNode,\n EventBasedGateway: GatewayNode,\n ComplexGateway: GatewayNode,\n // Containers — Transaction, EventSubProcess, AdHocSubProcess derive their visual variant from elementType\n SubProcess: SubProcessNode,\n Transaction: SubProcessNode,\n EventSubProcess: SubProcessNode,\n AdHocSubProcess: SubProcessNode,\n Pool: PoolNode,\n Lane: LaneNode,\n // Artifacts\n Annotation: AnnotationNode,\n Group: GroupNode,\n // Data\n DataObject: DataObjectNode,\n DataObjectReference: DataObjectReferenceNode,\n DataInput: DataInputNode,\n DataOutput: DataOutputNode,\n DataStore: DataStoreNode,\n DataStoreReference: DataStoreReferenceNode,\n // Conversation (§12)\n Conversation: ConversationNode,\n SubConversation: SubConversationNode,\n CallConversation: CallConversationNode,\n // Choreography (§11)\n ChoreographyTask: ChoreographyTaskNode,\n SubChoreography: SubChoreographyNode,\n CallChoreography: CallChoreographyNode,\n};\n","import type { Position } from \"@xyflow/react\";\n\nexport interface EdgePoint {\n x: number;\n y: number;\n}\n\nexport function getEdgePoints(\n sourceX: number,\n sourceY: number,\n targetX: number,\n targetY: number,\n routingPoints?: EdgePoint[],\n): EdgePoint[] {\n if (routingPoints && routingPoints.length >= 2) {\n return routingPoints;\n }\n\n return [\n { x: sourceX, y: sourceY },\n { x: targetX, y: targetY },\n ];\n}\n\nexport function getPolylineMidpoint(points: EdgePoint[]): EdgePoint {\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return points[0];\n\n let total = 0;\n const lengths: number[] = [];\n\n for (let i = 1; i < points.length; i += 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n const length = Math.hypot(dx, dy);\n lengths.push(length);\n total += length;\n }\n\n const halfway = total / 2;\n let traversed = 0;\n\n for (let i = 1; i < points.length; i += 1) {\n const length = lengths[i - 1];\n if (traversed + length >= halfway) {\n const ratio = length === 0 ? 0 : (halfway - traversed) / length;\n return {\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\n };\n }\n traversed += length;\n }\n\n return points[points.length - 1];\n}\n\nexport function getSegmentAngle(points: EdgePoint[]): number {\n if (points.length < 2) return 0;\n const from = points[0];\n const to = points[1];\n return Math.atan2(to.y - from.y, to.x - from.x);\n}\n\nexport function getDefaultFlowMarkerPath(points: EdgePoint[]): string | null {\n if (points.length < 2) return null;\n\n const start = points[0];\n const angle = getSegmentAngle(points);\n const anchorX = start.x + Math.cos(angle) * 16;\n const anchorY = start.y + Math.sin(angle) * 16;\n const normalAngle = angle + Math.PI / 2;\n const half = 7;\n\n const x1 = anchorX + Math.cos(normalAngle) * half;\n const y1 = anchorY + Math.sin(normalAngle) * half;\n const x2 = anchorX - Math.cos(normalAngle) * half;\n const y2 = anchorY - Math.sin(normalAngle) * half;\n\n return `M ${x1} ${y1} L ${x2} ${y2}`;\n}\n\nexport function fallbackAssociationDirection(\n sourcePosition?: Position,\n targetPosition?: Position,\n): \"horizontal\" | \"vertical\" {\n if (sourcePosition === \"left\" || sourcePosition === \"right\" || targetPosition === \"left\" || targetPosition === \"right\") {\n return \"horizontal\";\n }\n\n return \"vertical\";\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getDefaultFlowMarkerPath, getPolylineMidpoint } from \"./path\";\n\nexport function SequenceFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = points && points.length >= 2\n ? [{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }]\n : [{ x: sourceX, y: sourceY }, { x: targetX, y: targetY }];\n\n const path = points && points.length >= 2\n ? pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }])\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n const defaultMarkerPath = d?.isDefault ? getDefaultFlowMarkerPath(polyline) : null;\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n {...(d?.conditionExpression ? { markerStart: \"url(#bpmn-diamond-open)\" } : {})}\n markerEnd={markerEnd ?? \"url(#bpmn-arrow)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n ...(style ?? {}),\n }}\n />\n {defaultMarkerPath && (\n <path\n d={defaultMarkerPath}\n fill=\"none\"\n stroke={selected ? \"#1a56db\" : \"#404040\"}\n strokeWidth={selected ? 2 : 1.5}\n strokeLinecap=\"round\"\n data-testid=\"bpmn-default-flow-marker\"\n />\n )}\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getPolylineMidpoint } from \"./path\";\n\nexport function MessageFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = points && points.length >= 2\n ? [{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }]\n : [{ x: sourceX, y: sourceY }, { x: targetX, y: targetY }];\n\n const path = points && points.length >= 2\n ? pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }])\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n markerStart=\"url(#bpmn-circle-open)\"\n markerEnd={markerEnd ?? \"url(#bpmn-arrow-open)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: \"6 3\",\n ...(style ?? {}),\n }}\n />\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function AssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const direction = d?.associationDirection ?? \"none\";\n\n const path = points && points.length >= 2\n ? pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }])\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n {...(direction === \"both\" ? { markerStart: \"url(#bpmn-arrow-open)\" } : {})}\n {...(direction === \"one\" || direction === \"both\" ? { markerEnd: \"url(#bpmn-arrow-open)\" } : {})}\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function DataAssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n\n const path = points && points.length >= 2\n ? pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }])\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n markerEnd=\"url(#bpmn-arrow-open)\"\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import type { EdgeProps } from \"@xyflow/react\";\nimport { BaseEdge, getStraightPath } from \"@xyflow/react\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { BPMN_THEME } from \"../nodes/shared/theme\";\n\n// BPMN 2.0 §12.2 — ConversationLink is rendered as a double line.\n// Technique: draw the path twice — wide stroke then narrower background —\n// to produce a parallel-line effect without complex path offsets.\n\nexport function ConversationLinkEdge({\n sourceX, sourceY, targetX, targetY,\n data, markerEnd,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const stroke = BPMN_THEME.stroke;\n\n const [path] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n\n return (\n <g>\n {/* Outer (wide) stroke */}\n <BaseEdge\n path={path}\n {...(markerEnd ? { markerEnd } : {})}\n style={{ stroke, strokeWidth: 5, fill: \"none\" }}\n />\n {/* Inner white gap — creates double-line visual */}\n <BaseEdge\n path={path}\n style={{ stroke: \"#ffffff\", strokeWidth: 2, fill: \"none\" }}\n />\n {/* Label */}\n {d?.label && (\n <text fontSize={BPMN_THEME.fontSize} fontFamily={BPMN_THEME.fontFamily} fill={stroke}>\n <textPath href={`#${path}`} startOffset=\"50%\" textAnchor=\"middle\">\n {d.label}\n </textPath>\n </text>\n )}\n </g>\n );\n}\n","import type { EdgeTypes } from \"@xyflow/react\";\nimport { SequenceFlowEdge } from \"./SequenceFlowEdge\";\nimport { MessageFlowEdge } from \"./MessageFlowEdge\";\nimport { AssociationEdge } from \"./AssociationEdge\";\nimport { DataAssociationEdge } from \"./DataAssociationEdge\";\nimport { ConversationLinkEdge } from \"./ConversationLinkEdge\";\n\n/** Pass this object to `DiagramCanvas` as `edgeTypes`. */\nexport const BPMN_EDGE_TYPES: EdgeTypes = {\n sequenceFlow: SequenceFlowEdge,\n messageFlow: MessageFlowEdge,\n association: AssociationEdge,\n dataAssociation: DataAssociationEdge,\n conversationLink: ConversationLinkEdge,\n};\n","import type { BpmnElementType, BpmnEdgeType, EventTrigger } from \"../elements/types\";\n\n// ─── BPMN moddle $type → our BpmnElementType ─────────────────────────────────\n\nexport const MODDLE_TO_ELEMENT_TYPE: Record<string, BpmnElementType | undefined> = {\n \"bpmn:StartEvent\": \"StartEvent\",\n \"bpmn:EndEvent\": \"EndEvent\",\n \"bpmn:IntermediateCatchEvent\": \"IntermediateCatchEvent\",\n \"bpmn:IntermediateThrowEvent\": \"IntermediateThrowEvent\",\n \"bpmn:BoundaryEvent\": \"BoundaryEvent\",\n \"bpmn:Task\": \"Task\",\n \"bpmn:UserTask\": \"UserTask\",\n \"bpmn:ServiceTask\": \"ServiceTask\",\n \"bpmn:ScriptTask\": \"ScriptTask\",\n \"bpmn:ManualTask\": \"ManualTask\",\n \"bpmn:BusinessRuleTask\": \"BusinessRuleTask\",\n \"bpmn:ReceiveTask\": \"ReceiveTask\",\n \"bpmn:SendTask\": \"SendTask\",\n \"bpmn:CallActivity\": \"CallActivity\",\n \"bpmn:ExclusiveGateway\": \"ExclusiveGateway\",\n \"bpmn:InclusiveGateway\": \"InclusiveGateway\",\n \"bpmn:ParallelGateway\": \"ParallelGateway\",\n \"bpmn:EventBasedGateway\": \"EventBasedGateway\",\n \"bpmn:ComplexGateway\": \"ComplexGateway\",\n \"bpmn:SubProcess\": \"SubProcess\",\n \"bpmn:AdHocSubProcess\": \"AdHocSubProcess\",\n \"bpmn:Transaction\": \"Transaction\",\n \"bpmn:TextAnnotation\": \"Annotation\",\n \"bpmn:Group\": \"Group\",\n \"bpmn:DataObject\": \"DataObject\",\n \"bpmn:DataObjectReference\": \"DataObjectReference\",\n \"bpmn:DataInput\": \"DataInput\",\n \"bpmn:DataOutput\": \"DataOutput\",\n \"bpmn:DataStore\": \"DataStore\",\n \"bpmn:DataStoreReference\": \"DataStoreReference\",\n \"bpmn:Conversation\": \"Conversation\",\n \"bpmn:SubConversation\": \"SubConversation\",\n \"bpmn:CallConversation\": \"CallConversation\",\n \"bpmn:ChoreographyTask\": \"ChoreographyTask\",\n \"bpmn:SubChoreography\": \"SubChoreography\",\n \"bpmn:CallChoreography\": \"CallChoreography\",\n \"bpmn:Lane\": \"Lane\",\n};\n\n// ─── Our BpmnElementType → canonical bpmn: type ──────────────────────────────\n\nexport const ELEMENT_TYPE_TO_MODDLE: Partial<Record<BpmnElementType, string>> = {\n StartEvent: \"bpmn:StartEvent\",\n EndEvent: \"bpmn:EndEvent\",\n IntermediateCatchEvent: \"bpmn:IntermediateCatchEvent\",\n IntermediateThrowEvent: \"bpmn:IntermediateThrowEvent\",\n BoundaryEvent: \"bpmn:BoundaryEvent\",\n Task: \"bpmn:Task\",\n UserTask: \"bpmn:UserTask\",\n ServiceTask: \"bpmn:ServiceTask\",\n ScriptTask: \"bpmn:ScriptTask\",\n ManualTask: \"bpmn:ManualTask\",\n BusinessRuleTask: \"bpmn:BusinessRuleTask\",\n ReceiveTask: \"bpmn:ReceiveTask\",\n SendTask: \"bpmn:SendTask\",\n CallActivity: \"bpmn:CallActivity\",\n ExclusiveGateway: \"bpmn:ExclusiveGateway\",\n InclusiveGateway: \"bpmn:InclusiveGateway\",\n ParallelGateway: \"bpmn:ParallelGateway\",\n EventBasedGateway: \"bpmn:EventBasedGateway\",\n ComplexGateway: \"bpmn:ComplexGateway\",\n SubProcess: \"bpmn:SubProcess\",\n Transaction: \"bpmn:Transaction\",\n EventSubProcess: \"bpmn:SubProcess\",\n AdHocSubProcess: \"bpmn:AdHocSubProcess\",\n Pool: \"bpmn:Participant\",\n Lane: \"bpmn:Lane\",\n Annotation: \"bpmn:TextAnnotation\",\n Group: \"bpmn:Group\",\n DataObject: \"bpmn:DataObject\",\n DataObjectReference: \"bpmn:DataObjectReference\",\n DataInput: \"bpmn:DataInput\",\n DataOutput: \"bpmn:DataOutput\",\n DataStore: \"bpmn:DataStore\",\n DataStoreReference: \"bpmn:DataStoreReference\",\n Conversation: \"bpmn:Conversation\",\n SubConversation: \"bpmn:SubConversation\",\n CallConversation: \"bpmn:CallConversation\",\n ChoreographyTask: \"bpmn:ChoreographyTask\",\n SubChoreography: \"bpmn:SubChoreography\",\n CallChoreography: \"bpmn:CallChoreography\",\n};\n\n// ─── Edge type mappings ───────────────────────────────────────────────────────\n\nexport const MODDLE_TO_EDGE_TYPE: Record<string, BpmnEdgeType | undefined> = {\n \"bpmn:SequenceFlow\": \"sequenceFlow\",\n \"bpmn:MessageFlow\": \"messageFlow\",\n \"bpmn:Association\": \"association\",\n \"bpmn:DataInputAssociation\": \"dataAssociation\",\n \"bpmn:DataOutputAssociation\": \"dataAssociation\",\n \"bpmn:ConversationLink\": \"conversationLink\",\n};\n\nexport const EDGE_TYPE_TO_MODDLE: Record<BpmnEdgeType, string> = {\n sequenceFlow: \"bpmn:SequenceFlow\",\n messageFlow: \"bpmn:MessageFlow\",\n association: \"bpmn:Association\",\n dataAssociation: \"bpmn:DataInputAssociation\",\n conversationLink:\"bpmn:ConversationLink\",\n};\n\n// ─── Event definition type → trigger ─────────────────────────────────────────\n\nexport const EVENT_DEF_TO_TRIGGER: Record<string, EventTrigger> = {\n \"bpmn:MessageEventDefinition\": \"message\",\n \"bpmn:TimerEventDefinition\": \"timer\",\n \"bpmn:EscalationEventDefinition\": \"escalation\",\n \"bpmn:ConditionalEventDefinition\": \"conditional\",\n \"bpmn:ErrorEventDefinition\": \"error\",\n \"bpmn:CancelEventDefinition\": \"cancel\",\n \"bpmn:CompensateEventDefinition\": \"compensation\",\n \"bpmn:SignalEventDefinition\": \"signal\",\n \"bpmn:LinkEventDefinition\": \"link\",\n \"bpmn:TerminateEventDefinition\": \"terminate\",\n};\n\nexport const TRIGGER_TO_EVENT_DEF: Partial<Record<EventTrigger, string>> = {\n message: \"bpmn:MessageEventDefinition\",\n timer: \"bpmn:TimerEventDefinition\",\n escalation: \"bpmn:EscalationEventDefinition\",\n conditional: \"bpmn:ConditionalEventDefinition\",\n error: \"bpmn:ErrorEventDefinition\",\n cancel: \"bpmn:CancelEventDefinition\",\n compensation: \"bpmn:CompensateEventDefinition\",\n signal: \"bpmn:SignalEventDefinition\",\n link: \"bpmn:LinkEventDefinition\",\n terminate: \"bpmn:TerminateEventDefinition\",\n};\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type {\n BpmnElementType,\n BpmnEdgeType,\n BpmnNodeData,\n BpmnEdgeData,\n EventTrigger,\n SubProcessVariant,\n BpmnDefinitionsSet,\n BpmnEventDefinition,\n BpmnProcessVariable,\n} from \"../elements/types\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnImportResult } from \"./types\";\nimport {\n MODDLE_TO_ELEMENT_TYPE,\n MODDLE_TO_EDGE_TYPE,\n EVENT_DEF_TO_TRIGGER,\n} from \"./mapper\";\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface ShapeInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n isExpanded?: boolean;\n}\n\ntype ShapeMap = Map<string, ShapeInfo>;\ntype WaypointMap = Map<string, Array<{ x: number; y: number }>>;\n\nfunction asElements(v: unknown): ModdleElement[] {\n return Array.isArray(v) ? (v as ModdleElement[]) : [];\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\nfunction extractDocumentation(el: ModdleElement): string | undefined {\n const [doc] = asElements(el.documentation);\n return asString(doc?.text);\n}\n\n// ─── Extract BPMNDI shape/edge positions ─────────────────────────────────────\n\nfunction extractDiagramInfo(definitions: ModdleElement): {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n} {\n const shapes: ShapeMap = new Map();\n const waypoints: WaypointMap = new Map();\n\n for (const diagram of asElements(definitions.diagrams)) {\n const plane = diagram.plane as ModdleElement | undefined;\n if (!plane) continue;\n\n for (const el of asElements(plane.planeElement)) {\n const bpmnEl = el.bpmnElement as ModdleElement | undefined;\n if (!bpmnEl?.id) continue;\n const id = bpmnEl.id as string;\n\n if (el.$type === \"bpmndi:BPMNShape\") {\n const b = el.bounds as { x: number; y: number; width: number; height: number } | undefined;\n if (b) {\n shapes.set(id, {\n x: b.x,\n y: b.y,\n width: b.width,\n height: b.height,\n ...(typeof el.isExpanded === \"boolean\" ? { isExpanded: el.isExpanded as boolean } : {}),\n });\n }\n } else if (el.$type === \"bpmndi:BPMNEdge\") {\n const pts = (el.waypoint ?? []) as Array<{ x: number; y: number }>;\n if (pts.length) waypoints.set(id, pts);\n }\n }\n }\n\n return { shapes, waypoints };\n}\n\n// ─── Lane membership (flowNodeId → laneId) ───────────────────────────────────\n\nfunction extractLaneMembership(process: ModdleElement): Map<string, string> {\n const map = new Map<string, string>();\n\n function walkLaneSet(laneSet: ModdleElement) {\n for (const lane of asElements(laneSet.lanes)) {\n const laneId = lane.id as string | undefined;\n if (!laneId) continue;\n for (const ref of asElements(lane.flowNodeRef)) {\n if (ref.id) map.set(ref.id as string, laneId);\n }\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) walkLaneSet(child);\n }\n }\n\n const laneSet = process.laneSet as ModdleElement | undefined;\n if (laneSet) walkLaneSet(laneSet);\n return map;\n}\n\n// ─── Event trigger from eventDefinitions ─────────────────────────────────────\n\nfunction extractTrigger(el: ModdleElement): EventTrigger | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) {\n return defs.some((def) => def.$type === \"bpmn:ParallelMultipleEventDefinition\")\n ? \"parallelMultiple\"\n : \"multiple\";\n }\n return EVENT_DEF_TO_TRIGGER[defs[0].$type];\n}\n\nfunction parseVariableType(value: unknown): BpmnProcessVariable[\"type\"] {\n const text = asString(value) ?? \"\";\n if (text.includes(\"int\")) return \"integer\";\n if (text.includes(\"boolean\")) return \"boolean\";\n if (text.includes(\"date\")) return \"date\";\n if (text.includes(\"array\")) return \"array\";\n if (text.includes(\"anyType\")) return \"object\";\n return \"string\";\n}\n\nfunction extractEventDefinition(el: ModdleElement): BpmnEventDefinition | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) {\n return {\n type: defs.some((def) => def.$type === \"bpmn:ParallelMultipleEventDefinition\")\n ? \"parallelMultiple\"\n : \"multiple\",\n };\n }\n\n const [def] = defs;\n const type = EVENT_DEF_TO_TRIGGER[def.$type];\n if (!type) return undefined;\n\n const eventDefinition: BpmnEventDefinition = {\n type,\n ...(asString((def.messageRef as ModdleElement | undefined)?.id) ? { messageRef: (def.messageRef as ModdleElement).id as string } : {}),\n ...(asString((def.signalRef as ModdleElement | undefined)?.id) ? { signalRef: (def.signalRef as ModdleElement).id as string } : {}),\n ...(asString((def.errorRef as ModdleElement | undefined)?.id) ? { errorRef: (def.errorRef as ModdleElement).id as string } : {}),\n ...(asString((def.escalationRef as ModdleElement | undefined)?.id) ? { escalationRef: (def.escalationRef as ModdleElement).id as string } : {}),\n ...(asString((def.condition as ModdleElement | undefined)?.body) ? { conditionExpression: (def.condition as ModdleElement).body as string } : {}),\n };\n\n const timeDate = asString((def.timeDate as ModdleElement | undefined)?.body);\n const timeDuration = asString((def.timeDuration as ModdleElement | undefined)?.body);\n const timeCycle = asString((def.timeCycle as ModdleElement | undefined)?.body);\n if (timeDate) eventDefinition.timer = { kind: \"date\", value: timeDate };\n else if (timeCycle) eventDefinition.timer = { kind: \"cycle\", value: timeCycle };\n else if (timeDuration) eventDefinition.timer = { kind: \"duration\", value: timeDuration };\n\n if (type === \"link\") {\n const linkName = asString(el.name) ?? asString(def.name);\n if (linkName) eventDefinition.linkName = linkName;\n }\n\n return eventDefinition;\n}\n\nfunction extractDefinitions(rootElement: ModdleElement): BpmnDefinitionsSet | undefined {\n const definitions: BpmnDefinitionsSet = {};\n const rootElements = asElements(rootElement.rootElements);\n\n const messages = rootElements\n .filter((element) => element.$type === \"bpmn:Message\" && asString(element.id))\n .map((message) => ({\n id: message.id as string,\n name: asString(message.name) ?? message.id as string,\n }));\n if (messages.length > 0) definitions.messages = messages;\n\n const signals = rootElements\n .filter((element) => element.$type === \"bpmn:Signal\" && asString(element.id))\n .map((signal) => ({\n id: signal.id as string,\n name: asString(signal.name) ?? signal.id as string,\n }));\n if (signals.length > 0) definitions.signals = signals;\n\n const errors = rootElements\n .filter((element) => element.$type === \"bpmn:Error\" && asString(element.id))\n .map((error) => ({\n id: error.id as string,\n name: asString(error.name) ?? error.id as string,\n ...(asString(error.errorCode) ? { errorCode: error.errorCode as string } : {}),\n }));\n if (errors.length > 0) definitions.errors = errors;\n\n const escalations = rootElements\n .filter((element) => element.$type === \"bpmn:Escalation\" && asString(element.id))\n .map((escalation) => ({\n id: escalation.id as string,\n name: asString(escalation.name) ?? escalation.id as string,\n ...(asString(escalation.escalationCode) ? { escalationCode: escalation.escalationCode as string } : {}),\n }));\n if (escalations.length > 0) definitions.escalations = escalations;\n\n const itemDefinitions = asElements(rootElement.itemDefinitions)\n .filter((item) => asString(item.id))\n .map((item) => ({\n id: String(item.id).replace(/_item$/, \"\"),\n name: String(item.id).replace(/_item$/, \"\"),\n type: parseVariableType(item.structureRef),\n }));\n if (itemDefinitions.length > 0) definitions.variables = itemDefinitions;\n\n return Object.keys(definitions).length > 0 ? definitions : undefined;\n}\n\n// ─── SubProcessVariant from moddle type / properties ─────────────────────────\n\nfunction extractSubProcessVariant(el: ModdleElement): SubProcessVariant | undefined {\n if (el.$type === \"bpmn:Transaction\") return \"transaction\";\n if (el.$type === \"bpmn:AdHocSubProcess\") return \"adhoc\";\n if (el.$type === \"bpmn:SubProcess\" && el.triggeredByEvent === true) return \"event\";\n if (el.triggeredByEvent === true) return \"event\";\n return \"embedded\";\n}\n\n// ─── Walk a flowElements list, producing nodes and edges ─────────────────────\n\ninterface WalkContext {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n laneMembership: Map<string, string>;\n warnings: string[];\n autoX: { value: number };\n}\n\nfunction walkFlowElements(\n elements: ModdleElement[],\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n for (const el of elements) {\n const { $type, id } = el;\n if (!id) continue;\n\n const edgeType = MODDLE_TO_EDGE_TYPE[$type];\n if (edgeType !== undefined) {\n buildEdge(el, edgeType, ctx, edges);\n continue;\n }\n\n // Lane nodes are handled separately via laneMembership\n if ($type === \"bpmn:LaneSet\") continue;\n\n const elementType =\n $type === \"bpmn:SubProcess\" && el.triggeredByEvent === true\n ? \"EventSubProcess\"\n : MODDLE_TO_ELEMENT_TYPE[$type];\n if (!elementType) {\n ctx.warnings.push(`Unknown element type \"${$type}\" (id=${id as string}) — skipped.`);\n continue;\n }\n\n buildNode(el, elementType, parentId, ctx, nodes);\n\n // Recurse into subprocess children\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = asElements(el.flowElements);\n const laneMembership = extractLaneMembership(el);\n walkFlowElements(children, id as string, { ...ctx, laneMembership }, nodes, edges);\n }\n }\n}\n\nfunction buildNode(\n el: ModdleElement,\n elementType: BpmnElementType,\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n const id = el.id as string;\n const meta = BPMN_ELEMENT_CATALOG[elementType];\n const shape = ctx.shapes.get(id);\n\n // Position: use BPMNDI if available, otherwise auto-grid\n const x = shape?.x ?? ctx.autoX.value;\n const y = shape?.y ?? 100;\n if (!shape) ctx.autoX.value += (meta?.defaultWidth ?? 120) + 20;\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const trigger = extractTrigger(el);\n const eventDefinition = extractEventDefinition(el);\n const isNonInterrupting = el.cancelActivity === false;\n const attachedToRef = (el.attachedToRef as ModdleElement | undefined)?.id as string | undefined;\n\n const data: BpmnNodeData = {\n elementType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(trigger ? { trigger } : {}),\n ...(eventDefinition ? { eventDefinition } : {}),\n ...(isNonInterrupting ? { isNonInterrupting: true } : {}),\n ...(elementType === \"BoundaryEvent\" ? { cancelActivity: el.cancelActivity !== false } : {}),\n ...(attachedToRef ? { attachedToRef } : {}),\n ...(eventDefinition?.timer ? { timer: eventDefinition.timer, timerExpression: eventDefinition.timer } : {}),\n ...(eventDefinition?.messageRef ? { messageRef: eventDefinition.messageRef } : {}),\n ...(eventDefinition?.signalRef ? { signalRef: eventDefinition.signalRef } : {}),\n ...(eventDefinition?.errorRef ? { errorRef: eventDefinition.errorRef } : {}),\n ...(eventDefinition?.escalationRef ? { escalationRef: eventDefinition.escalationRef } : {}),\n ...(eventDefinition?.conditionExpression ? { conditionExpression: eventDefinition.conditionExpression } : {}),\n ...(eventDefinition?.linkName ? { linkName: eventDefinition.linkName } : {}),\n };\n\n // SubProcess variant\n if (elementType === \"SubProcess\" || elementType === \"Transaction\" || elementType === \"EventSubProcess\" || elementType === \"AdHocSubProcess\") {\n const variant = extractSubProcessVariant(el);\n if (variant) data.subProcessVariant = variant;\n const isExpanded = shape?.isExpanded ?? true;\n data.isExpanded = isExpanded;\n }\n\n // Determine effective parentId: lane membership overrides process-level parent\n const laneId = ctx.laneMembership.get(id);\n const effectiveParentId = attachedToRef ?? laneId ?? parentId;\n\n const node: BpmnRFNode = {\n id,\n type: elementType,\n position: { x, y },\n data,\n width: shape?.width ?? meta?.defaultWidth,\n height: shape?.height ?? meta?.defaultHeight,\n ...(effectiveParentId ? { parentId: effectiveParentId } : {}),\n };\n\n nodes.push(node);\n}\n\nfunction buildEdge(\n el: ModdleElement,\n edgeType: BpmnEdgeType,\n ctx: WalkContext,\n edges: BpmnRFEdge[],\n) {\n const id = el.id as string;\n const source = (el.sourceRef as ModdleElement | undefined)?.id as string | undefined;\n const target = (el.targetRef as ModdleElement | undefined)?.id as string | undefined;\n\n if (!source || !target) {\n ctx.warnings.push(`Edge \"${id}\" missing source or target — skipped.`);\n return;\n }\n\n const label = asString(el.name);\n const documentation = extractDocumentation(el);\n const condExpr = el.conditionExpression as { body?: string } | undefined;\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n };\n\n const waypoints = ctx.waypoints.get(id);\n if (waypoints?.length) data.routingPoints = waypoints;\n\n edges.push({ id, type: edgeType, source, target, data });\n}\n\n// ─── Handle Collaboration: Participants → Pool nodes ──────────────────────────\n\nfunction handleCollaboration(\n collaboration: ModdleElement,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n // Participants become Pool nodes\n for (const participant of asElements(collaboration.participants)) {\n const id = participant.id as string | undefined;\n if (!id) continue;\n const label = asString(participant.name);\n const shape = ctx.shapes.get(id);\n\n const poolNode: BpmnRFNode = {\n id,\n type: \"Pool\",\n position: { x: shape?.x ?? 0, y: shape?.y ?? 0 },\n data: { elementType: \"Pool\", ...(label ? { label } : {}) },\n width: shape?.width ?? 600,\n height: shape?.height ?? 200,\n };\n nodes.push(poolNode);\n\n // Walk the referenced process, assigning pool as parent\n const processRef = participant.processRef as ModdleElement | undefined;\n if (processRef) {\n const laneMembership = extractLaneMembership(processRef);\n walkFlowElements(\n asElements(processRef.flowElements),\n id,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n\n // Add Lane nodes\n const laneSet = processRef.laneSet as ModdleElement | undefined;\n if (laneSet) {\n addLaneNodes(laneSet, id, ctx, nodes);\n }\n }\n }\n\n // Message flows\n for (const mf of asElements(collaboration.messageFlows)) {\n buildEdge(mf, \"messageFlow\", ctx, edges);\n }\n\n // Conversation links\n for (const cl of asElements(collaboration.conversationLinks)) {\n buildEdge(cl, \"conversationLink\", ctx, edges);\n }\n}\n\nfunction addLaneNodes(\n laneSet: ModdleElement,\n poolId: string,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n for (const lane of asElements(laneSet.lanes)) {\n const id = lane.id as string | undefined;\n if (!id) continue;\n const label = asString(lane.name);\n const shape = ctx.shapes.get(id);\n\n nodes.push({\n id,\n type: \"Lane\",\n position: { x: shape?.x ?? 30, y: shape?.y ?? 0 },\n data: { elementType: \"Lane\", ...(label ? { label } : {}) },\n width: shape?.width ?? 570,\n height: shape?.height ?? 120,\n parentId: poolId,\n });\n\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) addLaneNodes(child, poolId, ctx, nodes);\n }\n}\n\n// ─── Public: parseBpmnXml ─────────────────────────────────────────────────────\n\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const moddle = new BpmnModdle();\n const warnings: string[] = [];\n\n let rootElement: ModdleElement;\n try {\n const result = await moddle.fromXML(xml);\n rootElement = result.rootElement;\n for (const w of result.warnings) warnings.push(w.message);\n } catch (err) {\n throw new Error(`Failed to parse BPMN XML: ${String(err)}`);\n }\n\n const nodes: BpmnRFNode[] = [];\n const edges: BpmnRFEdge[] = [];\n\n const { shapes, waypoints } = extractDiagramInfo(rootElement);\n const ctx: WalkContext = {\n shapes,\n waypoints,\n laneMembership: new Map(),\n warnings,\n autoX: { value: 50 },\n };\n\n for (const rootEl of asElements(rootElement.rootElements)) {\n if (rootEl.$type === \"bpmn:Collaboration\") {\n handleCollaboration(rootEl, ctx, nodes, edges);\n } else if (rootEl.$type === \"bpmn:Process\") {\n const laneMembership = extractLaneMembership(rootEl);\n const laneSet = rootEl.laneSet as ModdleElement | undefined;\n if (laneSet) addLaneNodes(laneSet, \"\", ctx, nodes);\n walkFlowElements(\n asElements(rootEl.flowElements),\n undefined,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n }\n }\n\n const defaultFlowById = new Set<string>();\n const nodeIds = new Set(nodes.map((node) => node.id));\n for (const rootEl of asElements(rootElement.rootElements)) {\n collectDefaultFlows(rootEl, defaultFlowById);\n }\n\n const normalizedEdges: BpmnRFEdge[] = edges.map((edge) => {\n if (!defaultFlowById.has(edge.id)) return edge;\n const data: BpmnEdgeData = {\n edgeType: edge.data?.edgeType ?? (edge.type as BpmnEdgeType),\n ...(edge.data ?? {}),\n isDefault: true,\n };\n return { ...edge, data };\n });\n\n const firstProcess = asElements(rootElement.rootElements).find((rootEl) => rootEl.$type === \"bpmn:Process\");\n\n const importedDefinitions = extractDefinitions(rootElement);\n const process =\n firstProcess\n ? (() => {\n const importedProcess: NonNullable<BpmnImportResult[\"process\"]> = {};\n const processId = asString(firstProcess.id);\n const documentation = extractDocumentation(firstProcess);\n if (processId) importedProcess.processId = processId;\n if (typeof firstProcess.isExecutable === \"boolean\") importedProcess.executable = firstProcess.isExecutable as boolean;\n if (documentation) importedProcess.documentation = documentation;\n if (importedDefinitions) importedProcess.definitions = importedDefinitions;\n return importedProcess;\n })()\n : importedDefinitions\n ? { definitions: importedDefinitions }\n : undefined;\n\n return {\n nodes: normalizeChildPositions(nodes, nodeIds),\n edges: normalizedEdges,\n warnings,\n ...(process ? { process } : {}),\n };\n}\n\nfunction collectDefaultFlows(el: ModdleElement, defaultFlowById: Set<string>): void {\n const defaultRef = el.default as ModdleElement | undefined;\n if (defaultRef?.id) defaultFlowById.add(defaultRef.id as string);\n\n for (const child of asElements(el.rootElements)) collectDefaultFlows(child, defaultFlowById);\n for (const child of asElements(el.flowElements)) collectDefaultFlows(child, defaultFlowById);\n}\n\nfunction normalizeChildPositions(nodes: BpmnRFNode[], nodeIds: Set<string>): BpmnRFNode[] {\n const absoluteById = new Map(nodes.map((node) => [node.id, node.position]));\n\n return nodes.map((node) => {\n if (!node.parentId || !nodeIds.has(node.parentId)) return node;\n const parentPosition = absoluteById.get(node.parentId);\n if (!parentPosition) return node;\n\n return {\n ...node,\n position: {\n x: node.position.x - parentPosition.x,\n y: node.position.y - parentPosition.y,\n },\n };\n });\n}\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnExportOptions } from \"./types\";\nimport type {\n BpmnDefinitionsSet,\n BpmnEventDefinition,\n BpmnNodeData,\n BpmnProcessVariable,\n} from \"../elements/types\";\nimport {\n ELEMENT_TYPE_TO_MODDLE,\n EDGE_TYPE_TO_MODDLE,\n TRIGGER_TO_EVENT_DEF,\n} from \"./mapper\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction uid(prefix: string, id: string): string {\n return `${prefix}_${id}`;\n}\n\nfunction asNodes(nodes: BpmnRFNode[], types: string[]): BpmnRFNode[] {\n return nodes.filter((n) => types.includes(n.data.elementType));\n}\n\nfunction normalizeEventDefinition(data: BpmnNodeData): BpmnEventDefinition | undefined {\n const trigger = data.eventDefinition?.type ?? data.trigger;\n if (!trigger || trigger === \"none\") return undefined;\n const normalized: BpmnEventDefinition = { type: trigger };\n const timer = data.eventDefinition?.timer ?? data.timer ?? data.timerExpression;\n const messageRef = data.eventDefinition?.messageRef ?? (typeof data.messageRef === \"string\" ? data.messageRef : undefined);\n const signalRef = data.eventDefinition?.signalRef ?? (typeof data.signalRef === \"string\" ? data.signalRef : undefined);\n const errorRef = data.eventDefinition?.errorRef ?? (typeof data.errorRef === \"string\" ? data.errorRef : undefined);\n const escalationRef = data.eventDefinition?.escalationRef ?? (typeof data.escalationRef === \"string\" ? data.escalationRef : undefined);\n const conditionExpression = data.eventDefinition?.conditionExpression ?? (typeof data.conditionExpression === \"string\" ? data.conditionExpression : undefined);\n const linkName = data.eventDefinition?.linkName ?? (typeof data.linkName === \"string\" ? data.linkName : undefined);\n\n if (timer) normalized.timer = timer;\n if (messageRef) normalized.messageRef = messageRef;\n if (signalRef) normalized.signalRef = signalRef;\n if (errorRef) normalized.errorRef = errorRef;\n if (escalationRef) normalized.escalationRef = escalationRef;\n if (conditionExpression) normalized.conditionExpression = conditionExpression;\n if (linkName) normalized.linkName = linkName;\n\n return normalized;\n}\n\nfunction parseVariableType(type: string | undefined): string {\n switch (type) {\n case \"integer\":\n return \"xsd:int\";\n case \"boolean\":\n return \"xsd:boolean\";\n case \"date\":\n return \"xsd:dateTime\";\n case \"object\":\n return \"xsd:anyType\";\n case \"array\":\n return \"xsd:anyType\";\n default:\n return \"xsd:string\";\n }\n}\n\nfunction buildGlobalDefinitions(moddle: BpmnModdle, definitionsSet?: BpmnDefinitionsSet): ModdleElement[] {\n if (!definitionsSet) return [];\n const rootElements: ModdleElement[] = [];\n\n for (const message of definitionsSet.messages ?? []) {\n rootElements.push(moddle.create(\"bpmn:Message\", { id: message.id, name: message.name }));\n }\n for (const signal of definitionsSet.signals ?? []) {\n rootElements.push(moddle.create(\"bpmn:Signal\", { id: signal.id, name: signal.name }));\n }\n for (const error of definitionsSet.errors ?? []) {\n rootElements.push(moddle.create(\"bpmn:Error\", {\n id: error.id,\n name: error.name,\n ...(error.errorCode ? { errorCode: error.errorCode } : {}),\n }));\n }\n for (const escalation of definitionsSet.escalations ?? []) {\n rootElements.push(moddle.create(\"bpmn:Escalation\", {\n id: escalation.id,\n name: escalation.name,\n ...(escalation.escalationCode ? { escalationCode: escalation.escalationCode } : {}),\n }));\n }\n\n return rootElements;\n}\n\nfunction buildItemDefinitions(moddle: BpmnModdle, variables?: BpmnProcessVariable[]): ModdleElement[] {\n return (variables ?? []).map((variable) =>\n moddle.create(\"bpmn:ItemDefinition\", {\n id: `${variable.id}_item`,\n itemKind: \"Information\",\n structureRef: parseVariableType(variable.type),\n }),\n );\n}\n\nfunction buildEventDefinitions(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n eventDefinition: BpmnEventDefinition,\n): ModdleElement[] {\n if (eventDefinition.type === \"multiple\" || eventDefinition.type === \"parallelMultiple\") {\n return [];\n }\n const defType = TRIGGER_TO_EVENT_DEF[eventDefinition.type];\n if (!defType) return [];\n\n const attrs: Record<string, unknown> = { id: uid(\"EventDef\", node.id) };\n\n if (eventDefinition.messageRef) attrs.messageRef = { id: eventDefinition.messageRef };\n if (eventDefinition.signalRef) attrs.signalRef = { id: eventDefinition.signalRef };\n if (eventDefinition.errorRef) attrs.errorRef = { id: eventDefinition.errorRef };\n if (eventDefinition.escalationRef) attrs.escalationRef = { id: eventDefinition.escalationRef };\n if (eventDefinition.conditionExpression) {\n attrs.condition = moddle.create(\"bpmn:FormalExpression\", {\n body: eventDefinition.conditionExpression,\n });\n }\n if (eventDefinition.timer?.value) {\n attrs[eventDefinition.timer.kind === \"date\"\n ? \"timeDate\"\n : eventDefinition.timer.kind === \"cycle\"\n ? \"timeCycle\"\n : \"timeDuration\"] = moddle.create(\"bpmn:FormalExpression\", {\n body: eventDefinition.timer.value,\n });\n }\n\n return [moddle.create(defType, attrs)];\n}\n\n// ─── Build BPMN semantic model ────────────────────────────────────────────────\n\nfunction buildSemanticModel(\n moddle: BpmnModdle,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions,\n): ModdleElement {\n const defId = opts.id ?? \"Definitions_1\";\n const defName = opts.name;\n\n // Collect pool nodes → Collaboration + Participants\n const poolNodes = asNodes(nodes, [\"Pool\"]);\n const laneNodes = asNodes(nodes, [\"Lane\"]);\n const isCollaboration = poolNodes.length > 0;\n\n const definitions = moddle.create(\"bpmn:Definitions\", {\n id: defId,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n ...(defName ? { name: defName } : {}),\n });\n // Flowable namespace: bpmn-moddle serializes xmlns:* from the element's own namespace map.\n // Injected via the moddle descriptor when a full Flowable extension is loaded.\n // For now, individual elements declare their own flowable:* attributes via $attrs.\n\n const rootElements: ModdleElement[] = [\n ...buildGlobalDefinitions(moddle, opts.process?.definitions),\n ];\n const itemDefinitions = buildItemDefinitions(moddle, opts.process?.definitions?.variables);\n if (itemDefinitions.length > 0) {\n (definitions as Record<string, unknown>).itemDefinitions = itemDefinitions;\n }\n\n if (isCollaboration) {\n const participants: ModdleElement[] = [];\n const processes: ModdleElement[] = [];\n\n for (const pool of poolNodes) {\n const processId = `Process_${pool.id}`;\n const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId, opts);\n processes.push(process);\n\n const participant = moddle.create(\"bpmn:Participant\", {\n id: pool.id,\n name: pool.data.label ?? \"\",\n processRef: process,\n });\n participants.push(participant);\n }\n\n // Message flows and conversation links belong to collaboration\n const messageFlowEdges = edges.filter((e) => e.data?.edgeType === \"messageFlow\");\n const conversationLinkEdges = edges.filter((e) => e.data?.edgeType === \"conversationLink\");\n\n const messageFlows = messageFlowEdges.map((e) =>\n moddle.create(\"bpmn:MessageFlow\", {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const conversationLinks = conversationLinkEdges.map((e) =>\n moddle.create(\"bpmn:ConversationLink\", {\n id: e.id,\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const collaboration = moddle.create(\"bpmn:Collaboration\", {\n id: `Collaboration_${defId}`,\n participants,\n messageFlows,\n conversationLinks,\n });\n\n rootElements.push(collaboration, ...processes);\n } else {\n // Single process — no collaboration\n const process = buildProcess(\n moddle,\n nodes,\n edges,\n undefined,\n laneNodes,\n opts.process?.processId ?? \"Process_1\",\n opts,\n );\n rootElements.push(process);\n }\n\n (definitions as Record<string, unknown>).rootElements = rootElements;\n return definitions;\n}\n\n// Build a bpmn:Process element containing flow nodes and sequence flows\nfunction buildProcess(\n moddle: BpmnModdle,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n poolId: string | undefined,\n laneNodes: BpmnRFNode[],\n processId: string,\n opts: BpmnExportOptions,\n): ModdleElement {\n // Collect flow nodes that belong to this pool (or all if no pools)\n const subProcessIds = new Set(\n allNodes\n .filter((n) =>\n n.data.elementType === \"SubProcess\" ||\n n.data.elementType === \"Transaction\" ||\n n.data.elementType === \"EventSubProcess\" ||\n n.data.elementType === \"AdHocSubProcess\",\n )\n .map((n) => n.id),\n );\n const isInsideSubProcess = (node: BpmnRFNode) => {\n let parentId = node.parentId;\n while (parentId) {\n if (subProcessIds.has(parentId)) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const belongsToPool = (node: BpmnRFNode): boolean => {\n let parentId = node.parentId;\n while (parentId) {\n if (parentId === poolId) return true;\n parentId = allNodes.find((candidate) => candidate.id === parentId)?.parentId;\n }\n return false;\n };\n\n const myNodes = (poolId\n ? allNodes.filter((n) => belongsToPool(n))\n : allNodes.filter((n) => n.data.elementType !== \"Pool\" && n.data.elementType !== \"Lane\"))\n .filter((n) => !isInsideSubProcess(n));\n\n const myLanes = laneNodes.filter((l) => (poolId ? l.parentId === poolId : true));\n\n // Build flow elements\n const flowElements: ModdleElement[] = [];\n\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (el) flowElements.push(el);\n }\n\n // Sequence flows and associations\n const myNodeIds = new Set(myNodes.map((n) => n.id));\n const myEdges = allEdges.filter(\n (e) =>\n (e.data?.edgeType === \"sequenceFlow\" ||\n e.data?.edgeType === \"association\" ||\n e.data?.edgeType === \"dataAssociation\") &&\n myNodeIds.has(e.source) &&\n myNodeIds.has(e.target),\n );\n\n for (const edge of myEdges) {\n const edgeMeta = buildEdgeElement(moddle, edge);\n if (edgeMeta) flowElements.push(edgeMeta);\n }\n\n const elementById = new Map(\n flowElements\n .filter((element) => typeof element.id === \"string\")\n .map((element) => [element.id as string, element]),\n );\n for (const edge of myEdges) {\n if (!edge.data?.isDefault) continue;\n const sourceElement = elementById.get(edge.source);\n const edgeElement = elementById.get(edge.id);\n if (sourceElement && edgeElement) {\n (sourceElement as Record<string, unknown>).default = edgeElement;\n }\n }\n\n const process = moddle.create(\"bpmn:Process\", {\n id: processId,\n isExecutable: opts.process?.executable ?? true,\n flowElements,\n });\n\n if (opts.process?.documentation) {\n (process as Record<string, unknown>).documentation = [\n moddle.create(\"bpmn:Documentation\", { text: opts.process.documentation }),\n ];\n }\n\n // Lane set\n if (myLanes.length > 0) {\n const laneElements = myLanes.map((l) =>\n moddle.create(\"bpmn:Lane\", {\n id: l.id,\n name: l.data.label ?? \"\",\n flowNodeRef: myNodes\n .filter((n) => n.parentId === l.id)\n .map((n) => ({ id: n.id })),\n }),\n );\n (process as Record<string, unknown>).laneSet = moddle.create(\"bpmn:LaneSet\", {\n id: `LaneSet_${processId}`,\n lanes: laneElements,\n });\n }\n\n return process;\n}\n\nfunction buildFlowElement(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement | null {\n const { elementType, label } = node.data;\n const eventDefinition = normalizeEventDefinition(node.data);\n\n // Pools and Lanes are handled in buildProcess / collaboration\n if (elementType === \"Pool\" || elementType === \"Lane\") return null;\n\n const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: node.id,\n name: label ?? \"\",\n };\n\n if (node.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: node.data.documentation }),\n ];\n }\n\n // Event definitions\n if (eventDefinition) {\n const eventDefinitions = buildEventDefinitions(moddle, node, eventDefinition);\n if (eventDefinitions.length > 0) attrs.eventDefinitions = eventDefinitions;\n if (eventDefinition.linkName) attrs.name = eventDefinition.linkName;\n }\n\n if (elementType === \"BoundaryEvent\") {\n attrs.attachedToRef = { id: node.data.attachedToRef ?? node.parentId };\n const interrupting = node.data.cancelActivity ?? !node.data.isNonInterrupting;\n attrs.cancelActivity = interrupting;\n }\n\n const isSubProcess =\n elementType === \"SubProcess\" ||\n elementType === \"Transaction\" ||\n elementType === \"EventSubProcess\" ||\n elementType === \"AdHocSubProcess\";\n\n if (isSubProcess) {\n attrs.flowElements = buildNestedFlowElements(moddle, node, allNodes, allEdges);\n if (elementType === \"EventSubProcess\" || node.data.subProcessVariant === \"event\") {\n attrs.triggeredByEvent = true;\n }\n }\n\n const element = moddle.create(moddleType, attrs);\n\n return element;\n}\n\nfunction buildNestedFlowElements(\n moddle: BpmnModdle,\n parent: BpmnRFNode,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n): ModdleElement[] {\n const childNodes = allNodes.filter((node) => node.parentId === parent.id);\n const childNodeIds = new Set(childNodes.map((node) => node.id));\n const flowElements: ModdleElement[] = [];\n\n for (const child of childNodes) {\n const element = buildFlowElement(moddle, child, allNodes, allEdges);\n if (element) flowElements.push(element);\n }\n\n for (const edge of allEdges) {\n if (!childNodeIds.has(edge.source) || !childNodeIds.has(edge.target)) continue;\n const element = buildEdgeElement(moddle, edge);\n if (element) flowElements.push(element);\n }\n\n return flowElements;\n}\n\nfunction buildEdgeElement(moddle: BpmnModdle, edge: BpmnRFEdge): ModdleElement | null {\n if (!edge.data) return null;\n const moddleType = EDGE_TYPE_TO_MODDLE[edge.data.edgeType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: edge.id,\n name: edge.data.label ?? \"\",\n sourceRef: { id: edge.source },\n targetRef: { id: edge.target },\n };\n\n if (edge.data.documentation) {\n attrs.documentation = [\n moddle.create(\"bpmn:Documentation\", { text: edge.data.documentation }),\n ];\n }\n\n if (edge.data.conditionExpression) {\n attrs.conditionExpression = moddle.create(\"bpmn:FormalExpression\", {\n body: edge.data.conditionExpression,\n });\n }\n\n return moddle.create(moddleType, attrs);\n}\n\n// ─── Build BPMNDI (diagram interchange / layout) ─────────────────────────────\n\nfunction buildBpmnDI(\n moddle: BpmnModdle,\n definitions: ModdleElement,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n): void {\n const shapes: ModdleElement[] = [];\n const edgeShapes: ModdleElement[] = [];\n\n const absolutePositionById = buildAbsolutePositionMap(nodes);\n\n for (const node of nodes) {\n const meta = BPMN_ELEMENT_CATALOG[node.data.elementType];\n const w = node.width ?? meta?.defaultWidth ?? 120;\n const h = node.height ?? meta?.defaultHeight ?? 60;\n\n const bounds = moddle.create(\"dc:Bounds\", {\n x: absolutePositionById.get(node.id)?.x ?? node.position.x,\n y: absolutePositionById.get(node.id)?.y ?? node.position.y,\n width: w,\n height: h,\n });\n\n const shape = moddle.create(\"bpmndi:BPMNShape\", {\n id: uid(\"BPMNShape\", node.id),\n bpmnElement: { id: node.id },\n bounds,\n });\n\n if (node.data.isExpanded !== undefined) {\n (shape as Record<string, unknown>).isExpanded = node.data.isExpanded;\n }\n\n shapes.push(shape);\n }\n\n for (const edge of edges) {\n const waypoints = resolveEdgeWaypoints(edge, nodes, absolutePositionById).map((p) =>\n moddle.create(\"dc:Point\", { x: p.x, y: p.y }),\n );\n\n edgeShapes.push(\n moddle.create(\"bpmndi:BPMNEdge\", {\n id: uid(\"BPMNEdge\", edge.id),\n bpmnElement: { id: edge.id },\n waypoint: waypoints,\n }),\n );\n }\n\n // Find the main process / collaboration element\n const rootEls = (definitions as Record<string, unknown>).rootElements as ModdleElement[] | undefined;\n const planeElement = rootEls?.[0];\n\n const plane = moddle.create(\"bpmndi:BPMNPlane\", {\n id: \"BPMNPlane_1\",\n bpmnElement: planeElement ?? { id: \"unknown\" },\n planeElement: [...shapes, ...edgeShapes],\n });\n\n const diagram = moddle.create(\"bpmndi:BPMNDiagram\", {\n id: \"BPMNDiagram_1\",\n plane,\n });\n\n (definitions as Record<string, unknown>).diagrams = [diagram];\n}\n\nfunction resolveEdgeWaypoints(\n edge: BpmnRFEdge,\n nodes: BpmnRFNode[],\n absolutePositionById: Map<string, { x: number; y: number }>,\n): Array<{ x: number; y: number }> {\n if (edge.data?.routingPoints && edge.data.routingPoints.length >= 2) {\n return edge.data.routingPoints;\n }\n\n const source = nodes.find((node) => node.id === edge.source);\n const target = nodes.find((node) => node.id === edge.target);\n if (!source || !target) return [];\n\n const sourceMeta = BPMN_ELEMENT_CATALOG[source.data.elementType];\n const targetMeta = BPMN_ELEMENT_CATALOG[target.data.elementType];\n const sourcePosition = absolutePositionById.get(source.id) ?? source.position;\n const targetPosition = absolutePositionById.get(target.id) ?? target.position;\n return [\n {\n x: sourcePosition.x + (source.width ?? sourceMeta.defaultWidth) / 2,\n y: sourcePosition.y + (source.height ?? sourceMeta.defaultHeight) / 2,\n },\n {\n x: targetPosition.x + (target.width ?? targetMeta.defaultWidth) / 2,\n y: targetPosition.y + (target.height ?? targetMeta.defaultHeight) / 2,\n },\n ];\n}\n\nfunction buildAbsolutePositionMap(nodes: BpmnRFNode[]): Map<string, { x: number; y: number }> {\n const nodeById = new Map(nodes.map((node) => [node.id, node]));\n const absoluteById = new Map<string, { x: number; y: number }>();\n\n function resolve(node: BpmnRFNode): { x: number; y: number } {\n const cached = absoluteById.get(node.id);\n if (cached) return cached;\n\n const parent = node.parentId ? nodeById.get(node.parentId) : undefined;\n const parentPosition = parent ? resolve(parent) : { x: 0, y: 0 };\n const absolute = {\n x: parentPosition.x + node.position.x,\n y: parentPosition.y + node.position.y,\n };\n absoluteById.set(node.id, absolute);\n return absolute;\n }\n\n for (const node of nodes) resolve(node);\n return absoluteById;\n}\n\n// ─── Public: serializeBpmnXml ─────────────────────────────────────────────────\n\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const moddle = new BpmnModdle();\n\n const definitions = buildSemanticModel(moddle, nodes, edges, opts);\n buildBpmnDI(moddle, definitions, nodes, edges);\n\n const { xml } = await moddle.toXML(definitions, {\n format: opts.format ?? true,\n });\n\n return xml;\n}\n","export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"EventSubProcess\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\nfunction isRootProcessStart(diagram: SimDiagram, node: SimNode): boolean {\n if (node.type !== \"StartEvent\") return false;\n if (!node.parentId) return true;\n const parent = nodeById(diagram, node.parentId);\n return !parent || !isSubProcess(parent.type);\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter((n) => isRootProcessStart(diagram, n));\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n","import {\n addNode,\n connectNodes,\n copyElements,\n createModelingRules,\n createSelectionState,\n executeCommand,\n executeCommands,\n findContainingNode,\n getNode,\n getNodeAbsolutePosition,\n getNodeCenterPosition,\n getNodeSize,\n getOutgoingEdges,\n getIncomingEdges,\n normalizeDiagramState,\n pasteElements,\n patchEdge,\n patchNode,\n removeElements,\n replaceNode,\n reparentNode,\n resizeNode,\n setSelection,\n toRelativeNodePosition,\n type CommandStackState,\n type ClipboardState,\n type ConnectionValidator,\n type DiagramCommand,\n type DiagramState,\n type ModelingRules,\n type SelectionState,\n} from \"@aranzatech/diagrams-core\";\nimport {\n createDiagramDocument,\n deserializeDiagram,\n parseDiagramDocument,\n serializeDiagram,\n type CreateDiagramDocumentOptions,\n type DiagramDocument,\n} from \"@aranzatech/diagrams-core/serialization\";\nimport {\n BPMN_ELEMENT_CATALOG,\n getBpmnElementSize,\n isBpmnElementResizable,\n} from \"../elements/catalog\";\nimport {\n acceptsBoundaryEvents,\n getHandlePolicy,\n isDataType,\n isEventType,\n isGatewayType,\n} from \"../elements/guards\";\nimport type { BpmnElementType, BpmnEdgeData, BpmnEdgeType, BpmnNodeData } from \"../elements/types\";\nimport type { BpmnRFEdge, BpmnRFNode } from \"../xml/types\";\n\nexport { getBpmnElementSize, isBpmnElementResizable } from \"../elements/catalog\";\n\nexport type BpmnDiagramState = DiagramState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnClipboardState = ClipboardState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnDiagramDocument = DiagramDocument<BpmnRFNode, BpmnRFEdge>;\n\nexport interface CreateBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n position: { x: number; y: number };\n label?: string;\n parentId?: string;\n width?: number;\n height?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ConnectBpmnOptions {\n id?: string;\n source: string;\n target: string;\n edgeType?: BpmnEdgeType;\n label?: string;\n sourceHandle?: string | null;\n targetHandle?: string | null;\n data?: Partial<BpmnEdgeData>;\n}\n\nexport interface ReplaceBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n label?: string;\n data?: Partial<BpmnNodeData>;\n width?: number;\n height?: number;\n}\n\nexport interface ReparentBpmnNodeOptions {\n id: string;\n parentId?: string;\n position?: { x: number; y: number };\n}\n\nexport interface FindBpmnContainerAtOptions {\n position: { x: number; y: number };\n excludeId?: string;\n}\n\nexport interface ReparentBpmnNodeAtPositionOptions {\n id: string;\n position: { x: number; y: number };\n}\n\nexport interface ResizeBpmnNodeOptions {\n id: string;\n width?: number;\n height?: number;\n}\n\nexport interface ReorderBpmnLaneOptions {\n poolId: string;\n laneId: string;\n index: number;\n}\n\nexport interface MoveBpmnLaneOptions {\n poolId: string;\n laneId: string;\n position: { x: number; y: number };\n}\n\nexport interface RouteBpmnEdgeOptions {\n id: string;\n routingPoints: Array<{ x: number; y: number }>;\n}\n\nexport interface PasteBpmnOptions {\n offset?: { x: number; y: number };\n position?: { x: number; y: number };\n}\n\nexport function createBpmnNode(options: CreateBpmnNodeOptions): BpmnRFNode {\n const size = getBpmnElementSize(options.elementType);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n const orientation = options.data?.orientation ?? meta.orientation;\n const dragHandle = getBpmnDragHandleSelector(options.elementType);\n return {\n id: options.id,\n type: options.elementType,\n position: options.position,\n data: {\n elementType: options.elementType,\n orientation,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n width: options.width ?? size.width,\n height: options.height ?? size.height,\n zIndex: getBpmnNodeZIndex(options.elementType),\n ...(options.parentId ? { parentId: options.parentId } : {}),\n ...(options.elementType === \"Lane\" && options.parentId ? { extent: \"parent\" as const } : {}),\n ...(dragHandle ? { dragHandle } : {}),\n };\n}\n\nexport function getBpmnNodeZIndex(elementType: BpmnElementType): number {\n if (elementType === \"Pool\") return 0;\n if (elementType === \"Lane\") return 1;\n if (elementType === \"BoundaryEvent\") return 4;\n return 3;\n}\n\nexport function withBpmnNodeZIndexes(\n nodes: BpmnRFNode[],\n): BpmnRFNode[] {\n return nodes.map((node) => {\n const zIndex = getBpmnNodeZIndex(node.data.elementType);\n return node.zIndex === zIndex ? node : { ...node, zIndex };\n });\n}\n\nexport const BPMN_POOL_LANE_LAYOUT = {\n poolHeaderSize: 30,\n laneHeaderSize: 24,\n laneGap: 0,\n verticalPoolHeaderSize: 28,\n minLaneSize: 96,\n} as const;\n\nexport function getBpmnDragHandleSelector(\n elementType: BpmnElementType,\n): string | undefined {\n if (elementType === \"Pool\") return \".pool-drag-handle\";\n if (elementType === \"Lane\") return \".lane-drag-handle\";\n return undefined;\n}\n\nexport const BPMN_SELECTION_STYLE = {\n nodeOutline: \"#2563eb\",\n edgeStroke: \"#2563eb\",\n handleFill: \"#ffffff\",\n handleStroke: \"#2563eb\",\n resizeHandleSize: 8,\n routingPointRadius: 5,\n} as const;\n\nexport const BPMN_ROUTABLE_EDGE_TYPES = [\n \"sequenceFlow\",\n \"messageFlow\",\n \"association\",\n \"dataAssociation\",\n \"conversationLink\",\n] satisfies BpmnEdgeType[];\n\nexport interface BpmnConnectionRule {\n edgeType: BpmnEdgeType;\n sourceCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n targetCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n allowSameParent?: boolean;\n allowDifferentParent?: boolean;\n}\n\nexport const BPMN_EDGE_CONNECTION_RULES: Record<BpmnEdgeType, BpmnConnectionRule> = {\n sequenceFlow: {\n edgeType: \"sequenceFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: false,\n },\n messageFlow: {\n edgeType: \"messageFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: false,\n allowDifferentParent: true,\n },\n association: {\n edgeType: \"association\",\n sourceCategories: [\"flowNode\", \"artifact\", \"data\"],\n targetCategories: [\"flowNode\", \"artifact\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n dataAssociation: {\n edgeType: \"dataAssociation\",\n sourceCategories: [\"flowNode\", \"data\"],\n targetCategories: [\"flowNode\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n conversationLink: {\n edgeType: \"conversationLink\",\n sourceCategories: [\"conversation\", \"flowNode\"],\n targetCategories: [\"conversation\", \"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n};\n\nexport function inferBpmnEdgeType(\n state: BpmnDiagramState,\n sourceId: string,\n targetId: string,\n): BpmnEdgeType {\n const source = getNode(state, sourceId);\n const target = getNode(state, targetId);\n if (!source || !target) return \"sequenceFlow\";\n\n if (isDataType(source.data.elementType) || isDataType(target.data.elementType)) {\n return \"dataAssociation\";\n }\n if (\n source.data.elementType === \"Annotation\" ||\n target.data.elementType === \"Annotation\" ||\n source.data.elementType === \"Group\" ||\n target.data.elementType === \"Group\"\n ) {\n return \"association\";\n }\n if (\n source.data.elementType === \"Conversation\" ||\n source.data.elementType === \"SubConversation\" ||\n source.data.elementType === \"CallConversation\" ||\n target.data.elementType === \"Conversation\" ||\n target.data.elementType === \"SubConversation\" ||\n target.data.elementType === \"CallConversation\"\n ) {\n return \"conversationLink\";\n }\n if (source.parentId && target.parentId && source.parentId !== target.parentId) {\n return \"messageFlow\";\n }\n return \"sequenceFlow\";\n}\n\nfunction canUseSequenceFlow(type: BpmnElementType): boolean {\n const meta = BPMN_ELEMENT_CATALOG[type];\n return (\n meta.handlePolicy !== \"none\" &&\n !isDataType(type) &&\n type !== \"Annotation\" &&\n type !== \"Group\" &&\n meta.category !== \"conversation\"\n );\n}\n\nfunction matchesConnectionCategory(\n type: BpmnElementType,\n categories: BpmnConnectionRule[\"sourceCategories\"],\n): boolean {\n return categories.some((category) => {\n if (category === type) return true;\n if (category === \"flowNode\") return canUseSequenceFlow(type);\n if (category === \"data\") return isDataType(type);\n if (category === \"artifact\") return type === \"Annotation\" || type === \"Group\";\n if (category === \"conversation\") return BPMN_ELEMENT_CATALOG[type].category === \"conversation\";\n return false;\n });\n}\n\nexport function isBpmnEdgeRoutingEditable(edgeType: BpmnEdgeType): boolean {\n return BPMN_ROUTABLE_EDGE_TYPES.includes(edgeType);\n}\n\nexport function isBpmnProcessNode(type: BpmnElementType): boolean {\n return (\n isEventType(type) ||\n isGatewayType(type) ||\n type.includes(\"Task\") ||\n type === \"CallActivity\" ||\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\"\n );\n}\n\nexport function canContainBpmnElement(\n parentType: BpmnElementType | undefined,\n childType: BpmnElementType,\n): true | string {\n if (!parentType) return true;\n if (parentType === \"Pool\") {\n return childType === \"Lane\" || isBpmnProcessNode(childType)\n ? true\n : \"Pools can contain lanes or BPMN process nodes.\";\n }\n if (parentType === \"Lane\") {\n return isBpmnProcessNode(childType)\n ? true\n : \"Lanes can only contain BPMN process nodes.\";\n }\n if (\n parentType === \"SubProcess\" ||\n parentType === \"Transaction\" ||\n parentType === \"EventSubProcess\" ||\n parentType === \"AdHocSubProcess\"\n ) {\n return isBpmnProcessNode(childType)\n ? true\n : \"Subprocesses can only contain BPMN process nodes.\";\n }\n return `${parentType} cannot contain BPMN child elements.`;\n}\n\nfunction getDirectBpmnChildren(\n state: BpmnDiagramState,\n parentId: string,\n): BpmnRFNode[] {\n return state.nodes.filter((node) => node.parentId === parentId);\n}\n\nexport function getBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnRFNode[] {\n return getDirectBpmnChildren(state, poolId).filter(\n (node) => node.data.elementType === \"Lane\",\n );\n}\n\nfunction getNodeDimension(node: BpmnRFNode, axis: \"width\" | \"height\"): number {\n return node[axis] ?? node.measured?.[axis] ?? getBpmnElementSize(node.data.elementType)[axis];\n}\n\nfunction getBpmnLaneOrderPosition(\n lane: BpmnRFNode,\n orientation: \"horizontal\" | \"vertical\",\n): number {\n const size = getBpmnNodeSize(lane);\n return orientation === \"vertical\"\n ? lane.position.x + size.width / 2\n : lane.position.y + size.height / 2;\n}\n\nfunction resizeHorizontalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const poolSize = getBpmnNodeSize(pool);\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width - BPMN_POOL_LANE_LAYOUT.poolHeaderSize);\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.height / Math.max(1, lanes.length));\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: BPMN_POOL_LANE_LAYOUT.poolHeaderSize, y: index * laneHeight },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n extent: \"parent\" as const,\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"horizontal\", laneIndex: index },\n }));\n}\n\nfunction resizeVerticalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const poolSize = getBpmnNodeSize(pool);\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width / Math.max(1, lanes.length));\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.height - BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize);\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: index * laneWidth, y: BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n extent: \"parent\" as const,\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"vertical\", laneIndex: index },\n }));\n}\n\nexport function layoutBpmnPoolLaneNodes(\n nodes: BpmnRFNode[],\n poolId: string,\n): BpmnRFNode[] {\n const pool = nodes.find((node) => node.id === poolId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => {\n const aIndex = typeof a.data.laneIndex === \"number\" ? a.data.laneIndex : undefined;\n const bIndex = typeof b.data.laneIndex === \"number\" ? b.data.laneIndex : undefined;\n if (aIndex !== undefined || bIndex !== undefined) return (aIndex ?? 0) - (bIndex ?? 0);\n return getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation);\n });\n\n if (lanes.length === 0) return withBpmnNodeZIndexes(nodes);\n\n const laneMap = new Map(\n (orientation === \"vertical\" ? resizeVerticalBpmnLanes(lanes, pool) : resizeHorizontalBpmnLanes(lanes, pool))\n .map((lane) => [lane.id, lane]),\n );\n\n return withBpmnNodeZIndexes(nodes.map((node) => laneMap.get(node.id) ?? node));\n}\n\nexport function reorderBpmnLaneAfterDrop(\n nodes: BpmnRFNode[],\n laneId: string,\n): BpmnRFNode[] {\n const lane = nodes.find((node) => node.id === laneId && node.data.elementType === \"Lane\");\n if (!lane?.parentId) return nodes;\n\n const pool = nodes.find((node) => node.id === lane.parentId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation));\n\n const moved = lanes.find((candidate) => candidate.id === lane.id);\n if (!moved) return layoutBpmnPoolLaneNodes(nodes, pool.id);\n\n const withoutMoved = lanes.filter((candidate) => candidate.id !== lane.id);\n const movedCenter = getBpmnLaneOrderPosition(lane, orientation);\n const insertIndex = withoutMoved.findIndex(\n (candidate) => movedCenter < getBpmnLaneOrderPosition(candidate, orientation),\n );\n const ordered = [...withoutMoved];\n ordered.splice(insertIndex === -1 ? ordered.length : insertIndex, 0, moved);\n\n const orderedMap = new Map(ordered.map((candidate, index) => [candidate.id, index]));\n const sortedByDrop = nodes.map((node) => {\n if (node.parentId !== pool.id || node.data.elementType !== \"Lane\") return node;\n return { ...node, data: { ...node.data, laneIndex: orderedMap.get(node.id) ?? 0 } };\n });\n\n return layoutBpmnPoolLaneNodes(sortedByDrop, pool.id);\n}\n\nexport function getBpmnNodeSize(node: BpmnRFNode): { width: number; height: number } {\n return getNodeSize(node, getBpmnElementSize(node.data.elementType));\n}\n\nexport function getBpmnNodeAbsolutePosition(\n state: BpmnDiagramState,\n nodeOrId: BpmnRFNode | string,\n): { x: number; y: number } | undefined {\n const nodeId = typeof nodeOrId === \"string\" ? nodeOrId : nodeOrId.id;\n return getNodeAbsolutePosition(state, nodeId);\n}\n\nexport function toBpmnRelativePosition(\n state: BpmnDiagramState,\n absolutePosition: { x: number; y: number },\n parentOrId: BpmnRFNode | string,\n): { x: number; y: number } {\n return toRelativeNodePosition(state, absolutePosition, parentOrId);\n}\n\nconst BPMN_CONTAINER_PRIORITY: BpmnElementType[] = [\n \"Lane\",\n \"SubProcess\",\n \"EventSubProcess\",\n \"Transaction\",\n \"AdHocSubProcess\",\n \"Pool\",\n];\n\nexport function findBpmnContainerAt(\n state: BpmnDiagramState,\n options: FindBpmnContainerAtOptions,\n): BpmnRFNode | undefined {\n return findContainingNode(state, {\n point: options.position,\n excludeId: options.excludeId,\n fallbackSize: (node) => getBpmnElementSize(node.data.elementType),\n predicate: (node) => BPMN_CONTAINER_PRIORITY.includes(node.data.elementType),\n sort: (a, b) => {\n const aPriority = BPMN_CONTAINER_PRIORITY.indexOf(a.data.elementType);\n const bPriority = BPMN_CONTAINER_PRIORITY.indexOf(b.data.elementType);\n if (aPriority !== bPriority) return aPriority - bPriority;\n const aSize = getBpmnNodeSize(a);\n const bSize = getBpmnNodeSize(b);\n return aSize.width * aSize.height - bSize.width * bSize.height;\n },\n });\n}\n\nexport function getBpmnNodeCenter(\n node: BpmnRFNode,\n absolutePosition: { x: number; y: number },\n): { x: number; y: number } {\n return getNodeCenterPosition(absolutePosition, getBpmnNodeSize(node));\n}\n\nfunction resolvePoolLaneDirection(pool: BpmnRFNode): \"horizontal\" | \"vertical\" {\n return pool.data.orientation === \"vertical\" ? \"horizontal\" : \"vertical\";\n}\n\nexport function getBpmnLaneIndexAtPosition(\n state: BpmnDiagramState,\n poolId: string,\n position: { x: number; y: number },\n): number {\n const pool = getNode(state, poolId);\n if (!pool) return 0;\n const lanes = getBpmnPoolLanes(state, poolId);\n const direction = resolvePoolLaneDirection(pool);\n const axis = direction === \"vertical\" ? \"y\" : \"x\";\n const sizeKey = direction === \"vertical\" ? \"height\" : \"width\";\n\n for (let index = 0; index < lanes.length; index += 1) {\n const lane = lanes[index];\n const midpoint = lane.position[axis] + getNodeDimension(lane, sizeKey) / 2;\n if (position[axis] < midpoint) return index;\n }\n return lanes.length;\n}\n\nfunction sortBpmnLanes(\n state: BpmnDiagramState,\n poolId: string,\n laneId: string,\n index: number,\n): BpmnDiagramState {\n const lanes = getBpmnPoolLanes(state, poolId);\n const currentIndex = lanes.findIndex((lane) => lane.id === laneId);\n if (currentIndex < 0) return state;\n\n const orderedIds = lanes.map((lane) => lane.id);\n const [moved] = orderedIds.splice(currentIndex, 1);\n orderedIds.splice(Math.max(0, Math.min(index, orderedIds.length)), 0, moved);\n const order = new Map(orderedIds.map((id, laneIndex) => [id, laneIndex]));\n\n return {\n ...state,\n nodes: [...state.nodes].sort((a, b) => {\n const aOrder = order.get(a.id);\n const bOrder = order.get(b.id);\n if (aOrder === undefined && bOrder === undefined) return 0;\n if (aOrder === undefined) return -1;\n if (bOrder === undefined) return 1;\n return aOrder - bOrder;\n }),\n };\n}\n\nexport function layoutBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnDiagramState {\n const pool = getNode(state, poolId);\n if (!pool) return state;\n const poolSize = getBpmnElementSize(\"Pool\");\n const direction = resolvePoolLaneDirection(pool);\n const lanes = getBpmnPoolLanes(state, poolId);\n let cursor = direction === \"vertical\" ? BPMN_POOL_LANE_LAYOUT.poolHeaderSize : 0;\n\n let next = state;\n for (const lane of lanes) {\n const laneSize = getBpmnElementSize(\"Lane\");\n const width =\n direction === \"vertical\"\n ? Math.max(poolSize.minWidth - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.width ?? laneSize.width)\n : lane.width ?? laneSize.width;\n const height =\n direction === \"vertical\"\n ? lane.height ?? laneSize.height\n : Math.max(poolSize.minHeight - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.height ?? laneSize.height);\n next = patchNode(next, lane.id, {\n position: direction === \"vertical\" ? { x: BPMN_POOL_LANE_LAYOUT.poolHeaderSize, y: cursor } : { x: cursor, y: BPMN_POOL_LANE_LAYOUT.poolHeaderSize },\n width,\n height,\n data: { orientation: pool.data.orientation ?? \"horizontal\" },\n });\n cursor += (direction === \"vertical\" ? height : width) + BPMN_POOL_LANE_LAYOUT.laneGap;\n }\n\n const minWidth =\n direction === \"vertical\"\n ? poolSize.minWidth\n : Math.max(poolSize.minWidth, cursor);\n const minHeight =\n direction === \"vertical\"\n ? Math.max(poolSize.minHeight, cursor)\n : poolSize.minHeight;\n return resizeNode(next, poolId, { width: minWidth, height: minHeight } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n}\n\nexport function reorderBpmnLane(\n state: BpmnDiagramState,\n options: ReorderBpmnLaneOptions,\n): BpmnDiagramState {\n return layoutBpmnPoolLanes(\n sortBpmnLanes(state, options.poolId, options.laneId, options.index),\n options.poolId,\n );\n}\n\nexport function validateBpmnConnectionForEdgeType(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n const rule = BPMN_EDGE_CONNECTION_RULES[edgeType];\n if (!matchesConnectionCategory(source.data.elementType, rule.sourceCategories)) {\n return `${edgeType} cannot start from ${source.data.elementType}.`;\n }\n if (!matchesConnectionCategory(target.data.elementType, rule.targetCategories)) {\n return `${edgeType} cannot target ${target.data.elementType}.`;\n }\n const sameParent = (source.parentId ?? null) === (target.parentId ?? null);\n if (sameParent && rule.allowSameParent === false) {\n return `${edgeType} must connect BPMN elements in different participants/scopes.`;\n }\n if (!sameParent && rule.allowDifferentParent === false) {\n return `${edgeType} must stay inside the same BPMN participant/scope.`;\n }\n if (edgeType === \"sequenceFlow\") {\n if (source.data.elementType === \"EndEvent\") return \"End events cannot have outgoing sequence flows.\";\n if (target.data.elementType === \"StartEvent\") return \"Start events cannot have incoming sequence flows.\";\n return validateEdgeCardinality(state, edgeType, source, target);\n }\n return true;\n}\n\nfunction validateEdgeCardinality(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n if (edgeType !== \"sequenceFlow\") return true;\n\n const sourceMax = BPMN_ELEMENT_CATALOG[source.data.elementType].maxOutgoing;\n const targetMax = BPMN_ELEMENT_CATALOG[target.data.elementType].maxIncoming;\n const outgoing = getOutgoingEdges(state, source.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n const incoming = getIncomingEdges(state, target.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n\n if (sourceMax !== undefined && outgoing.length >= sourceMax) {\n return `${source.data.elementType} cannot have more than ${sourceMax} outgoing sequence flow(s).`;\n }\n if (targetMax !== undefined && incoming.length >= targetMax) {\n return `${target.data.elementType} cannot have more than ${targetMax} incoming sequence flow(s).`;\n }\n return true;\n}\n\nexport const bpmnConnectionValidators: Array<\n ConnectionValidator<BpmnRFNode, BpmnRFEdge>\n> = [\n ({ state, source, target }) => {\n if (source.id === target.id) return \"BPMN self-connections are not allowed.\";\n const edgeType = inferBpmnEdgeType(state, source.id, target.id);\n\n if (getHandlePolicy(source.data.elementType) === \"none\" || getHandlePolicy(target.data.elementType) === \"none\") {\n return \"Elements without BPMN connection handles cannot be directly connected.\";\n }\n\n if (edgeType === \"sequenceFlow\") {\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n }\n\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n },\n];\n\nexport const BPMN_MODELING_RULES: ModelingRules<BpmnRFNode, BpmnRFEdge> =\n createModelingRules({\n connect: [\n ({ state, source, target }) => {\n if (!source || !target) return false;\n for (const validator of bpmnConnectionValidators) {\n const result = validator({\n state,\n source,\n target,\n existingEdges: state.edges,\n });\n if (result !== true) return result;\n }\n return true;\n },\n ],\n drop: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be attached to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent.data.elementType, node.data.elementType);\n },\n ],\n reparent: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be reparented to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n },\n ],\n delete: [() => true],\n resize: [\n ({ node }) =>\n !node || isBpmnElementResizable(node.data.elementType)\n ? true\n : `${node.data.elementType} is not resizable in BPMN.`,\n ],\n });\n\nexport function createBpmnNodeCommand(\n options: CreateBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.createNode.${options.id}`,\n label: `Create ${options.elementType}`,\n execute: (state) => addNode(state, createBpmnNode(options)),\n };\n}\n\nexport function connectBpmnCommand(\n options: ConnectBpmnOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.connect.${options.id ?? `${options.source}-${options.target}`}`,\n label: \"Connect BPMN elements\",\n execute: (state) => {\n const edgeType = options.edgeType ?? inferBpmnEdgeType(state, options.source, options.target);\n const source = getNode(state, options.source);\n const target = getNode(state, options.target);\n if (!source) throw new Error(`Source node \"${options.source}\" does not exist.`);\n if (!target) throw new Error(`Target node \"${options.target}\" does not exist.`);\n const validation = validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n if (validation !== true) throw new Error(validation);\n return connectNodes(\n state,\n {\n source: options.source,\n target: options.target,\n type: edgeType,\n ...(options.sourceHandle !== undefined\n ? { sourceHandle: options.sourceHandle }\n : {}),\n ...(options.targetHandle !== undefined\n ? { targetHandle: options.targetHandle }\n : {}),\n ...(options.id ? { id: options.id } : {}),\n data: {\n edgeType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n },\n [],\n );\n },\n };\n}\n\nexport function attachBoundaryEventCommand(\n boundaryId: string,\n hostId: string,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.attachBoundary.${boundaryId}.${hostId}`,\n label: \"Attach boundary event\",\n execute: (state) => {\n const host = getNode(state, hostId);\n if (!host || !acceptsBoundaryEvents(host.data.elementType)) {\n throw new Error(`Element \"${hostId}\" cannot host boundary events.`);\n }\n const boundary = getNode(state, boundaryId);\n if (!boundary || boundary.data.elementType !== \"BoundaryEvent\") {\n throw new Error(`Element \"${boundaryId}\" is not a boundary event.`);\n }\n const reparented = reparentNode(state, boundaryId, { parentId: hostId });\n return patchNode(reparented, boundaryId, {\n data: { attachedToRef: hostId },\n });\n },\n };\n}\n\nexport function replaceBpmnNodeCommand(\n options: ReplaceBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.replaceNode.${options.id}.${options.elementType}`,\n label: `Replace with ${options.elementType}`,\n execute: (state) => {\n const current = getNode(state, options.id);\n if (!current) throw new Error(`Element \"${options.id}\" does not exist.`);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n return replaceNode(state, options.id, {\n ...current,\n type: options.elementType,\n width: options.width ?? current.width ?? meta.defaultWidth,\n height: options.height ?? current.height ?? meta.defaultHeight,\n data: {\n ...current.data,\n elementType: options.elementType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n });\n },\n };\n}\n\nexport function reparentBpmnNodeCommand(\n options: ReparentBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reparent.${options.id}.${options.parentId ?? \"root\"}`,\n label: \"Reparent BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n const parent = options.parentId ? getNode(state, options.parentId) : undefined;\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n if (parent && node.data.elementType === \"BoundaryEvent\" && !acceptsBoundaryEvents(parent.data.elementType)) {\n throw new Error(\"Boundary events can only be reparented to tasks or subprocesses.\");\n }\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n const reparented = reparentNode(state, options.id, {\n ...(options.parentId !== undefined ? { parentId: options.parentId } : {}),\n ...(options.position ? { position: options.position } : {}),\n });\n return parent?.data.elementType === \"Pool\" && node.data.elementType === \"Lane\"\n ? layoutBpmnPoolLanes(reparented, parent.id)\n : reparented;\n },\n };\n}\n\nexport function reparentBpmnNodeAtPosition(\n state: BpmnDiagramState,\n options: ReparentBpmnNodeAtPositionOptions,\n): BpmnDiagramState {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n\n const hitPoint = getBpmnNodeCenter(node, options.position);\n const parent = isBpmnProcessNode(node.data.elementType)\n ? findBpmnContainerAt(state, { position: hitPoint, excludeId: node.id })\n : undefined;\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n\n const nextPosition = parent\n ? toBpmnRelativePosition(state, options.position, parent)\n : options.position;\n return reparentNode(state, node.id, {\n ...(parent ? { parentId: parent.id } : { parentId: undefined }),\n position: nextPosition,\n });\n}\n\nexport function resizeBpmnNodeCommand(\n options: ResizeBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resize.${options.id}`,\n label: \"Resize BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n const size = getBpmnElementSize(node.data.elementType);\n if (!size.resizable) {\n throw new Error(`${node.data.elementType} is not resizable in BPMN.`);\n }\n return resizeNode(state, options.id, {\n width:\n options.width === undefined\n ? undefined\n : Math.max(size.minWidth, options.width),\n height:\n options.height === undefined\n ? undefined\n : Math.max(size.minHeight, options.height),\n } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n },\n };\n}\n\nexport function reorderBpmnLaneCommand(\n options: ReorderBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reorderLane.${options.poolId}.${options.laneId}`,\n label: \"Reorder BPMN lane\",\n execute: (state) => {\n const pool = getNode(state, options.poolId);\n const lane = getNode(state, options.laneId);\n if (!pool || pool.data.elementType !== \"Pool\") {\n throw new Error(`Element \"${options.poolId}\" is not a pool.`);\n }\n if (!lane || lane.data.elementType !== \"Lane\" || lane.parentId !== options.poolId) {\n throw new Error(`Element \"${options.laneId}\" is not a lane in pool \"${options.poolId}\".`);\n }\n return reorderBpmnLane(state, options);\n },\n };\n}\n\nexport function moveBpmnLaneCommand(\n options: MoveBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.moveLane.${options.poolId}.${options.laneId}`,\n label: \"Move BPMN lane\",\n execute: (state) =>\n reorderBpmnLane(state, {\n poolId: options.poolId,\n laneId: options.laneId,\n index: getBpmnLaneIndexAtPosition(state, options.poolId, options.position),\n }),\n };\n}\n\nexport function routeBpmnEdgeCommand(\n options: RouteBpmnEdgeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.routeEdge.${options.id}`,\n label: \"Route BPMN edge\",\n execute: (state) => {\n const edge = state.edges.find((item) => item.id === options.id);\n if (!edge) throw new Error(`Edge \"${options.id}\" does not exist.`);\n const edgeType = edge.data?.edgeType;\n if (!edgeType || !isBpmnEdgeRoutingEditable(edgeType)) {\n throw new Error(`${edgeType ?? \"edge\"} routing points cannot be edited.`);\n }\n return patchEdge(state, options.id, {\n data: { routingPoints: options.routingPoints },\n } as Parameters<typeof patchEdge<BpmnRFNode, BpmnRFEdge>>[2]);\n },\n };\n}\n\nexport function deleteBpmnElementsCommand(\n ids: string[],\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.delete.${ids.join(\".\")}`,\n label: \"Delete BPMN elements\",\n execute: (state) => removeElements(state, ids),\n };\n}\n\nexport function copyBpmnElements(\n state: BpmnDiagramState,\n selection?: SelectionState,\n): BpmnClipboardState {\n return copyElements(state, selection);\n}\n\nexport function pasteBpmnElementsCommand(\n clipboard: BpmnClipboardState,\n options: PasteBpmnOptions = {},\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.paste\",\n label: \"Paste BPMN elements\",\n execute: (state) => pasteElements(state, clipboard, options),\n };\n}\n\nexport function selectBpmnElementsCommand(\n selection: SelectionState,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.select\",\n label: \"Select BPMN elements\",\n execute: (state) => setSelection(state, createSelectionState(selection.nodeIds, selection.edgeIds)),\n };\n}\n\nexport function createBpmnDiagramDocument(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> = {},\n): BpmnDiagramDocument {\n return createDiagramDocument(normalizeDiagramState(state), {\n ...options,\n diagramType: \"bpmn\",\n });\n}\n\nexport function serializeBpmnDiagram(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> = {},\n): string {\n return serializeDiagram(normalizeDiagramState(state), {\n ...options,\n diagramType: \"bpmn\",\n });\n}\n\nexport function parseBpmnDiagramDocument(json: string): BpmnDiagramDocument {\n const document = parseDiagramDocument<BpmnRFNode, BpmnRFEdge>(json);\n if (document.diagramType && document.diagramType !== \"bpmn\") {\n throw new Error(`Expected a BPMN diagram document, received \"${document.diagramType}\".`);\n }\n return document;\n}\n\nexport function deserializeBpmnDiagram(json: string): BpmnDiagramState {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagram<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\nexport function runBpmnCommand(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n command: DiagramCommand<BpmnRFNode, BpmnRFEdge>,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n return executeCommand(stack, command);\n}\n\nexport function runBpmnCommands(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n commands: Array<DiagramCommand<BpmnRFNode, BpmnRFEdge>>,\n options: { id?: string; label?: string } = {},\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n return executeCommands(stack, commands, options);\n}\n","import { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport {\n isDataType,\n isEventType,\n isGatewayType,\n} from \"../elements/guards\";\nimport type { BpmnElementType } from \"../elements/types\";\nimport type { BpmnRFEdge, BpmnRFNode } from \"../xml/types\";\n\nexport type BpmnValidationSeverity = \"error\" | \"warning\" | \"info\";\n\nexport interface BpmnValidationIssue {\n id: string;\n severity: BpmnValidationSeverity;\n code: string;\n message: string;\n elementId?: string;\n relatedElementIds?: string[];\n}\n\nexport interface BpmnValidationResult {\n valid: boolean;\n issues: BpmnValidationIssue[];\n}\n\nexport interface BpmnValidationOptions {\n requireStartEvent?: boolean;\n requireEndEvent?: boolean;\n strictNames?: boolean;\n}\n\nfunction isFlowNode(type: BpmnElementType): boolean {\n return (\n isEventType(type) ||\n isGatewayType(type) ||\n type.includes(\"Task\") ||\n type === \"CallActivity\" ||\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\" ||\n type === \"ChoreographyTask\" ||\n type === \"SubChoreography\" ||\n type === \"CallChoreography\"\n );\n}\n\nfunction isProcessNode(type: BpmnElementType): boolean {\n return isFlowNode(type) && type !== \"BoundaryEvent\";\n}\n\nfunction isSubProcess(type: BpmnElementType): boolean {\n return (\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\"\n );\n}\n\nfunction isCatchTarget(type: BpmnElementType): boolean {\n return type === \"IntermediateCatchEvent\" || type === \"ReceiveTask\";\n}\n\nfunction poolAncestor(\n node: BpmnRFNode | undefined,\n nodeById: Map<string, BpmnRFNode>,\n): string | undefined {\n let current = node;\n const visited = new Set<string>();\n while (current?.parentId && !visited.has(current.id)) {\n visited.add(current.id);\n const parent = nodeById.get(current.parentId);\n if (parent?.data.elementType === \"Pool\") return parent.id;\n current = parent;\n }\n return undefined;\n}\n\nfunction countSequenceEdges(edges: BpmnRFEdge[], nodeId: string, direction: \"in\" | \"out\"): number {\n return edges.filter((edge) => {\n if (edge.data?.edgeType !== \"sequenceFlow\") return false;\n return direction === \"in\" ? edge.target === nodeId : edge.source === nodeId;\n }).length;\n}\n\nfunction sequenceEdges(edges: BpmnRFEdge[]): BpmnRFEdge[] {\n return edges.filter((edge) => (edge.data?.edgeType ?? edge.type) === \"sequenceFlow\");\n}\n\nfunction sequenceOut(edges: BpmnRFEdge[], nodeId: string): BpmnRFEdge[] {\n return sequenceEdges(edges).filter((edge) => edge.source === nodeId);\n}\n\nfunction sequenceIn(edges: BpmnRFEdge[], nodeId: string): BpmnRFEdge[] {\n return sequenceEdges(edges).filter((edge) => edge.target === nodeId);\n}\n\nfunction issue(\n code: string,\n severity: BpmnValidationSeverity,\n message: string,\n elementId?: string,\n relatedElementIds?: string[],\n): BpmnValidationIssue {\n return {\n id: `${code}:${elementId ?? relatedElementIds?.join(\",\") ?? \"diagram\"}`,\n code,\n severity,\n message,\n ...(elementId ? { elementId } : {}),\n ...(relatedElementIds ? { relatedElementIds } : {}),\n };\n}\n\nexport function validateBpmnDiagram(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n options: BpmnValidationOptions = {},\n): BpmnValidationResult {\n const opts = {\n requireStartEvent: true,\n requireEndEvent: true,\n strictNames: false,\n ...options,\n };\n const issues: BpmnValidationIssue[] = [];\n const nodeById = new Map(nodes.map((node) => [node.id, node]));\n const seqEdges = sequenceEdges(edges);\n\n const processNodes = nodes.filter((node) => isProcessNode(node.data.elementType));\n if (opts.requireStartEvent && !processNodes.some((node) => node.data.elementType === \"StartEvent\")) {\n issues.push(issue(\"bpmn/start-event-required\", \"error\", \"The diagram must contain at least one start event.\"));\n }\n if (opts.requireEndEvent && !processNodes.some((node) => node.data.elementType === \"EndEvent\")) {\n issues.push(issue(\"bpmn/end-event-required\", \"error\", \"The diagram must contain at least one end event.\"));\n }\n\n for (const edge of edges) {\n const edgeType = edge.data?.edgeType ?? edge.type;\n const source = nodeById.get(edge.source);\n const target = nodeById.get(edge.target);\n\n if (!source || !target) {\n issues.push(issue(\n \"bpmn/no-orphan-edges\",\n \"error\",\n `Edge \"${edge.id}\" references a missing ${!source ? \"source\" : \"target\"} node.`,\n edge.id,\n [edge.source, edge.target],\n ));\n continue;\n }\n\n if (edge.source === edge.target) {\n issues.push(issue(\"bpmn/no-self-loop\", \"error\", \"BPMN edges cannot connect an element to itself.\", edge.id, [edge.source]));\n }\n\n if (edgeType === \"sequenceFlow\") {\n if (!isFlowNode(source.data.elementType) || !isFlowNode(target.data.elementType) || isDataType(source.data.elementType) || isDataType(target.data.elementType)) {\n issues.push(issue(\"bpmn/sequence-flow-valid-endpoints\", \"error\", \"Sequence flows must connect BPMN flow nodes.\", edge.id, [source.id, target.id]));\n }\n const sourcePool = poolAncestor(source, nodeById);\n const targetPool = poolAncestor(target, nodeById);\n if (sourcePool && targetPool && sourcePool !== targetPool) {\n issues.push(issue(\"bpmn/sequence-flow-no-cross-pool\", \"error\", \"Sequence flows cannot cross pools. Use message flow between participants.\", edge.id, [source.id, target.id]));\n }\n }\n\n if (edgeType === \"messageFlow\") {\n const sourcePool = poolAncestor(source, nodeById);\n const targetPool = poolAncestor(target, nodeById);\n if (!sourcePool || !targetPool || sourcePool === targetPool) {\n issues.push(issue(\"bpmn/message-flow-valid-endpoints\", \"error\", \"Message flows must connect flow nodes in different pools.\", edge.id, [source.id, target.id]));\n }\n if (!isFlowNode(source.data.elementType) || !isFlowNode(target.data.elementType)) {\n issues.push(issue(\"bpmn/message-flow-valid-endpoints\", \"error\", \"Message flows must connect BPMN flow nodes, not containers.\", edge.id, [source.id, target.id]));\n }\n }\n\n if (edgeType === \"dataAssociation\") {\n const hasDataEndpoint = isDataType(source.data.elementType) || isDataType(target.data.elementType);\n const hasFlowEndpoint = isFlowNode(source.data.elementType) || isFlowNode(target.data.elementType);\n if (!hasDataEndpoint || !hasFlowEndpoint) {\n issues.push(issue(\"bpmn/data-association-valid-endpoints\", \"error\", \"Data associations must connect data elements with flow nodes.\", edge.id, [source.id, target.id]));\n }\n }\n }\n\n const duplicateSequenceKeys = new Set<string>();\n const reportedDuplicateKeys = new Set<string>();\n for (const edge of seqEdges) {\n const key = `${edge.source}->${edge.target}`;\n if (duplicateSequenceKeys.has(key) && !reportedDuplicateKeys.has(key)) {\n reportedDuplicateKeys.add(key);\n issues.push(issue(\"bpmn/no-duplicate-sequence-flow\", \"error\", \"Only one sequence flow is allowed between the same source and target.\", edge.id, [edge.source, edge.target]));\n }\n duplicateSequenceKeys.add(key);\n }\n\n for (const node of nodes) {\n const type = node.data.elementType;\n const incoming = countSequenceEdges(edges, node.id, \"in\");\n const outgoing = countSequenceEdges(edges, node.id, \"out\");\n const meta = BPMN_ELEMENT_CATALOG[type];\n\n if (type === \"StartEvent\" && incoming > 0) {\n issues.push(issue(\"bpmn/start-event-no-incoming\", \"error\", \"Start events cannot have incoming sequence flows.\", node.id));\n }\n if (type === \"EndEvent\") {\n if (outgoing > 0) issues.push(issue(\"bpmn/no-outgoing-from-end-event\", \"error\", \"End events cannot have outgoing sequence flows.\", node.id));\n if (incoming === 0) issues.push(issue(\"bpmn/end-event-has-incoming\", \"error\", \"End events should have at least one incoming sequence flow.\", node.id));\n }\n if ((type === \"IntermediateCatchEvent\" || type === \"IntermediateThrowEvent\") && (incoming === 0 || outgoing === 0)) {\n issues.push(issue(\"bpmn/intermediate-event-both-flows\", \"error\", \"Intermediate events should have both incoming and outgoing sequence flows.\", node.id));\n }\n if (type === \"BoundaryEvent\") {\n const hostId = node.data.attachedToRef ?? node.parentId;\n const host = hostId ? nodeById.get(hostId) : undefined;\n if (!host || !BPMN_ELEMENT_CATALOG[host.data.elementType]?.acceptsBoundaryEvents) {\n issues.push(issue(\"bpmn/boundary-event-attached\", \"error\", \"Boundary events must be attached to an activity or subprocess.\", node.id, hostId ? [hostId] : undefined));\n }\n if (sequenceIn(edges, node.id).length > 0) {\n issues.push(issue(\"bpmn/boundary-no-incoming\", \"error\", \"Boundary events cannot have incoming sequence flows.\", node.id));\n }\n if (sequenceOut(edges, node.id).length === 0) {\n issues.push(issue(\"bpmn/boundary-has-outgoing\", \"warning\", \"Boundary events should define an outgoing exception path.\", node.id));\n }\n }\n if (isGatewayType(type)) {\n if (incoming === 0) issues.push(issue(\"bpmn/gateway-has-incoming\", \"error\", \"Gateways should have at least one incoming sequence flow.\", node.id));\n if (outgoing === 0) issues.push(issue(\"bpmn/gateway-has-outgoing\", \"error\", \"Gateways should have at least one outgoing sequence flow.\", node.id));\n }\n if (type === \"ExclusiveGateway\" || type === \"InclusiveGateway\" || type === \"ComplexGateway\") {\n const outgoingEdges = sequenceOut(edges, node.id);\n const defaults = outgoingEdges.filter((edge) => edge.data?.isDefault);\n if (defaults.length > 1) {\n issues.push(issue(\"bpmn/gateway-single-default\", \"error\", \"Gateways can have at most one default sequence flow.\", node.id, defaults.map((edge) => edge.id)));\n }\n if (outgoingEdges.length >= 2) {\n for (const edge of outgoingEdges) {\n if (!edge.data?.isDefault && !edge.data?.conditionExpression) {\n issues.push(issue(\"bpmn/gateway-condition\", \"error\", \"Conditional gateway branches should have a condition or be marked as default.\", edge.id, [node.id, edge.target]));\n }\n }\n }\n }\n if (type === \"EventBasedGateway\") {\n const outgoingEdges = edges.filter((edge) => edge.data?.edgeType === \"sequenceFlow\" && edge.source === node.id);\n if (outgoingEdges.length < 2) {\n issues.push(issue(\"bpmn/event-based-gateway-min-outgoing\", \"error\", \"Event-based gateways should have at least two outgoing sequence flows.\", node.id));\n }\n for (const edge of outgoingEdges) {\n const target = nodeById.get(edge.target);\n if (target && !isCatchTarget(target.data.elementType)) {\n issues.push(issue(\"bpmn/event-based-gateway-valid-targets\", \"error\", \"Event-based gateways must target catch events or receive tasks.\", edge.id, [node.id, target.id]));\n }\n }\n }\n if (meta.maxIncoming !== undefined && incoming > meta.maxIncoming) {\n issues.push(issue(\"bpmn/max-incoming\", \"error\", `${type} cannot have more than ${meta.maxIncoming} incoming sequence flow(s).`, node.id));\n }\n if (meta.maxOutgoing !== undefined && outgoing > meta.maxOutgoing) {\n issues.push(issue(\"bpmn/max-outgoing\", \"error\", `${type} cannot have more than ${meta.maxOutgoing} outgoing sequence flow(s).`, node.id));\n }\n if (opts.strictNames && (type.includes(\"Task\") || isGatewayType(type)) && !node.data.label) {\n issues.push(issue(\"bpmn/name-required\", \"warning\", `${type} should have a label.`, node.id));\n }\n if (isSubProcess(type)) {\n const childNodes = nodes.filter((child) => child.parentId === node.id);\n if (childNodes.length > 0) {\n if (!childNodes.some((child) => child.data.elementType === \"StartEvent\")) {\n issues.push(issue(\"bpmn/subprocess-has-start-end\", \"error\", \"Expanded subprocesses should contain a start event.\", node.id));\n }\n if (!childNodes.some((child) => child.data.elementType === \"EndEvent\")) {\n issues.push(issue(\"bpmn/subprocess-has-start-end\", \"error\", \"Expanded subprocesses should contain an end event.\", node.id));\n }\n }\n if (type === \"EventSubProcess\") {\n const starts = childNodes.filter((child) => child.data.elementType === \"StartEvent\");\n for (const start of starts) {\n if (!start.data.trigger || start.data.trigger === \"none\") {\n issues.push(issue(\"bpmn/event-subprocess-triggered-start\", \"error\", \"Event subprocess start events must define an event trigger.\", start.id, [node.id]));\n }\n }\n }\n }\n if (type === \"Lane\") {\n const parent = node.parentId ? nodeById.get(node.parentId) : undefined;\n if (parent?.data.elementType !== \"Pool\") {\n issues.push(issue(\"bpmn/lane-parent-pool\", \"error\", \"Lanes must be contained by a pool.\", node.id));\n }\n }\n }\n\n return {\n valid: issues.every((item) => item.severity !== \"error\"),\n issues,\n };\n}\n"]}