@aranzatech/diagrams-bpmn 0.2.13 → 0.2.14

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 (34) hide show
  1. package/dist/{catalog-Di2nzGs9.d.ts → catalog-CK3_4cOb.d.ts} +1 -1
  2. package/dist/{catalog-BiLXVn-2.d.cts → catalog-xOMF2ifW.d.cts} +1 -1
  3. package/dist/{chunk-O3NWJ5H7.js → chunk-QSMP34CT.js} +38 -5
  4. package/dist/chunk-QSMP34CT.js.map +1 -0
  5. package/dist/edges/index.cjs +35 -2
  6. package/dist/edges/index.cjs.map +1 -1
  7. package/dist/edges/index.js +1 -1
  8. package/dist/elements/index.d.cts +4 -4
  9. package/dist/elements/index.d.ts +4 -4
  10. package/dist/{guards-DPHXfpY8.d.cts → guards-C70uIY_O.d.cts} +1 -1
  11. package/dist/{guards-qgSeZEU4.d.ts → guards-foB6XIfZ.d.ts} +1 -1
  12. package/dist/index.cjs +35 -2
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +4 -4
  15. package/dist/index.d.ts +4 -4
  16. package/dist/index.js +1 -1
  17. package/dist/layout/index.cjs +55 -19
  18. package/dist/layout/index.cjs.map +1 -1
  19. package/dist/layout/index.d.cts +17 -11
  20. package/dist/layout/index.d.ts +17 -11
  21. package/dist/layout/index.js +55 -19
  22. package/dist/layout/index.js.map +1 -1
  23. package/dist/modeling/index.d.cts +3 -3
  24. package/dist/modeling/index.d.ts +3 -3
  25. package/dist/{types-rEfHsPr5.d.ts → types-DG5yPKld.d.ts} +1 -1
  26. package/dist/{types-s2_VvPGf.d.cts → types-jIDz306Y.d.cts} +1 -1
  27. package/dist/{types-Dfrt0wVs.d.cts → types-y-ZbX-ff.d.cts} +3 -0
  28. package/dist/{types-Dfrt0wVs.d.ts → types-y-ZbX-ff.d.ts} +3 -0
  29. package/dist/validation/index.d.cts +2 -2
  30. package/dist/validation/index.d.ts +2 -2
  31. package/dist/xml/index.d.cts +3 -3
  32. package/dist/xml/index.d.ts +3 -3
  33. package/package.json +2 -2
  34. package/dist/chunk-O3NWJ5H7.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/aranza-descriptor.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/simulation/batch.ts","../src/modeling/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","parseVariableType","isSubProcess","nodeById","GATEWAY_TYPES","TASK_TYPES","next","getNode","getNodeSize","getNodeAbsolutePosition","toRelativeNodePosition","findContainingNode","getNodeCenterPosition","patchNode","resizeNode","getOutgoingEdges","getIncomingEdges","createModelingRules","addNode","connectNodes","reparentNode","replaceNode","moveNode","patchEdge","removeElements","copyElements","pasteElements","setSelection","createSelectionState","createDiagramDocument","normalizeDiagramState","serializeDiagramSnapshot","serializeDiagram","parseDiagramDocument","deserializeDiagram","deserializeDiagramSnapshot","createDiagramEventBus","executeCommand","executeCommands","persistCommandHistory","restoreCommandHistory","computeSmartGuides","createUniqueId","groupNodes","getNodeTabOrder","getEdgeLabelLayout","resizeNodeByHandle","createLayoutCache","withLayoutCache"],"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","/**\n * bpmn-moddle package descriptor for the AranzaFlows extension namespace.\n *\n * Registered as { aranza: ARANZA_DESCRIPTOR } when constructing BpmnModdle so\n * that aranza:TaskConfig elements can be created and parsed via extensionElements.\n *\n * XML shape:\n * <bpmn:userTask id=\"Task_1\" name=\"Review\">\n * <bpmn:extensionElements>\n * <aranza:taskConfig priority=\"critical\" owner=\"ops-team\" sla=\"PT4H\" />\n * </bpmn:extensionElements>\n * </bpmn:userTask>\n */\nexport const ARANZA_DESCRIPTOR = {\n name: \"Aranza\",\n uri: \"http://aranzatech.io/schema/bpmn-extension/1.0\",\n prefix: \"aranza\",\n xml: { tagAlias: \"lowerCase\" },\n types: [\n {\n name: \"TaskConfig\",\n superClass: [\"Element\"],\n properties: [\n { name: \"priority\", isAttr: true, type: \"String\" },\n { name: \"owner\", isAttr: true, type: \"String\" },\n { name: \"sla\", isAttr: true, type: \"String\" },\n // Aranza connector execution config (resolved at runtime by the Flowable delegate)\n { name: \"connector\", isAttr: true, type: \"String\" },\n { name: \"action\", isAttr: true, type: \"String\" },\n // Flowable implementation hints stored for round-trip fidelity\n { name: \"flowableType\", isAttr: true, type: \"String\" },\n { name: \"flowableDelegateExpression\", isAttr: true, type: \"String\" },\n // BusinessRuleTask: reference to a DMN decision table id\n { name: \"decisionRef\", isAttr: true, type: \"String\" },\n // UserTask: form key resolved to a FormDefinition name at runtime\n { name: \"formKey\", isAttr: true, type: \"String\" },\n // UserTask: Flowable task assignment — comma-separated ids\n { name: \"candidateUsers\", isAttr: true, type: \"String\" },\n { name: \"candidateGroups\", isAttr: true, type: \"String\" },\n // UserTask: scheduling + skip expression\n { name: \"dueDate\", isAttr: true, type: \"String\" },\n { name: \"skipExpression\", isAttr: true, type: \"String\" },\n { name: \"businessCalendarName\", isAttr: true, type: \"String\" },\n ],\n },\n {\n // BusinessRuleTask: simplified inline decision table (JSON-serialized)\n name: \"InlineDecision\",\n superClass: [\"Element\"],\n properties: [\n { name: \"hitPolicy\", isAttr: true, type: \"String\" },\n { name: \"tableJson\", isAttr: true, type: \"String\" },\n ],\n },\n {\n // MessageFlow: payload schema + correlation key for executable BPMN\n name: \"MessageFlowConfig\",\n superClass: [\"Element\"],\n properties: [\n { name: \"payloadSchema\", isAttr: true, type: \"String\" },\n { name: \"correlationKey\", isAttr: true, type: \"String\" },\n ],\n },\n ],\n enumerations: [],\n associations: [],\n} as const;\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 type { ModdleElement } from \"bpmn-moddle\";\nimport { ARANZA_DESCRIPTOR } from \"./aranza-descriptor\";\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// ─── AranzaFlows extensionElements extractor ─────────────────────────────────\n\nfunction extractAranzaExtensions(el: ModdleElement): Partial<BpmnNodeData> {\n const result: Partial<BpmnNodeData> = {};\n\n // Read Flowable $attrs directly on the element\n const elAttrs = (el as Record<string, unknown>).$attrs as Record<string, unknown> | undefined;\n if (elAttrs) {\n const ft = asString(elAttrs[\"flowable:type\"]);\n if (ft) result.flowableType = ft;\n const fde = asString(elAttrs[\"flowable:delegateExpression\"]);\n if (fde) result.flowableDelegateExpression = fde;\n const fk = asString(elAttrs[\"flowable:formKey\"]);\n if (fk) result.formKey = fk;\n const cu = asString(elAttrs[\"flowable:candidateUsers\"]);\n if (cu) result.candidateUsers = cu;\n const cg = asString(elAttrs[\"flowable:candidateGroups\"]);\n if (cg) result.candidateGroups = cg;\n }\n\n const ext = el.extensionElements as ModdleElement | undefined;\n if (!ext) return result;\n\n const extValues = asElements(ext.values);\n\n // Inline decision table\n const inlineDecision = extValues.find((v) => v.$type === \"aranza:InlineDecision\");\n if (inlineDecision) {\n const hitPolicy = asString(inlineDecision.hitPolicy) ?? \"UNIQUE\";\n const tableJson = asString(inlineDecision.tableJson);\n if (tableJson) {\n try {\n const parsed = JSON.parse(tableJson) as Record<string, unknown>;\n result.inlineDecisionTable = { hitPolicy, ...parsed } as import(\"../elements/types\").InlineDecisionTable;\n } catch {\n // malformed JSON — skip\n }\n }\n }\n\n const taskConfig = extValues.find((v) => v.$type === \"aranza:TaskConfig\");\n if (!taskConfig) return result;\n\n const priority = asString(taskConfig.priority);\n if (priority === \"critical\" || priority === \"high\" || priority === \"medium\" || priority === \"low\") {\n result.priority = priority;\n }\n const owner = asString(taskConfig.owner);\n if (owner) result.owner = owner;\n const sla = asString(taskConfig.sla);\n if (sla) result.sla = sla;\n const connector = asString(taskConfig.connector);\n if (connector) result.connector = connector;\n const action = asString(taskConfig.action);\n if (action) result.action = action;\n // aranza:TaskConfig stores flowableType/flowableDelegateExpression for round-trip fidelity;\n // prefer these over $attrs when both are present.\n const flowableType = asString(taskConfig.flowableType);\n if (flowableType) result.flowableType = flowableType;\n const flowableDelegateExpression = asString(taskConfig.flowableDelegateExpression);\n if (flowableDelegateExpression) result.flowableDelegateExpression = flowableDelegateExpression;\n const decisionRef = asString(taskConfig.decisionRef);\n if (decisionRef) result.decisionRef = decisionRef;\n const formKey = asString(taskConfig.formKey);\n if (formKey) result.formKey = formKey;\n const candidateUsers = asString(taskConfig.candidateUsers);\n if (candidateUsers) result.candidateUsers = candidateUsers;\n const candidateGroups = asString(taskConfig.candidateGroups);\n if (candidateGroups) result.candidateGroups = candidateGroups;\n const dueDate = asString(taskConfig.dueDate);\n if (dueDate) result.dueDate = dueDate;\n const skipExpression = asString(taskConfig.skipExpression);\n if (skipExpression) result.skipExpression = skipExpression;\n const businessCalendarName = asString(taskConfig.businessCalendarName);\n if (businessCalendarName) result.businessCalendarName = businessCalendarName;\n\n return result;\n}\n\nfunction extractCompletionCondition(el: ModdleElement): string | undefined {\n const cc = el.completionCondition as { body?: string } | string | undefined;\n if (!cc) return undefined;\n if (typeof cc === \"string\") return cc.trim() || undefined;\n return asString(cc.body);\n}\n\nfunction extractLoopCharacteristics(el: ModdleElement): Partial<BpmnNodeData> {\n const lc = el.loopCharacteristics as ModdleElement | undefined;\n if (!lc) return {};\n\n if (lc.$type === \"bpmn:StandardLoopCharacteristics\") {\n const loopCondition = asString((lc.loopCondition as ModdleElement | undefined)?.body);\n return { loopType: \"loop\", ...(loopCondition ? { loopCondition } : {}) };\n }\n\n if (lc.$type === \"bpmn:MultiInstanceLoopCharacteristics\") {\n const loopType = lc.isSequential === true ? \"sequentialMultiple\" : \"parallelMultiple\";\n const loopCardinality = asString((lc.loopCardinality as ModdleElement | undefined)?.body);\n const loopCompletionCondition = asString((lc.completionCondition as ModdleElement | undefined)?.body);\n return {\n loopType,\n ...(loopCardinality ? { loopCardinality } : {}),\n ...(loopCompletionCondition ? { loopCompletionCondition } : {}),\n };\n }\n\n return {};\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 (artifacts like TextAnnotation are in el.artifacts)\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = [...asElements(el.flowElements), ...asElements(el.artifacts)];\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 // TextAnnotation uses `text`, not `name`\n const label = elementType === \"Annotation\" ? (asString(el.text) ?? asString(el.name)) : 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 const calledElement = elementType === \"CallActivity\" ? asString(el.calledElement) : undefined;\n const aranzaExt = extractAranzaExtensions(el);\n\n const scriptFormat = elementType === \"ScriptTask\" ? asString(el.scriptFormat) : undefined;\n const script = elementType === \"ScriptTask\" ? asString(el.script) : undefined;\n const completionCondition = elementType === \"AdHocSubProcess\" ? extractCompletionCondition(el) : undefined;\n const loopChars = extractLoopCharacteristics(el);\n const dataObjectRef = elementType === \"DataObjectReference\"\n ? asString((el.dataObjectRef as ModdleElement | undefined)?.id)\n : 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 ...(calledElement ? { calledElement } : {}),\n ...(scriptFormat ? { scriptFormat } : {}),\n ...(script ? { script } : {}),\n ...(completionCondition ? { completionCondition } : {}),\n ...(dataObjectRef ? { dataObjectRef } : {}),\n ...loopChars,\n ...aranzaExt,\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 rawDir = asString(el.associationDirection);\n const associationDirection =\n edgeType === \"association\" && rawDir\n ? (rawDir.toLowerCase() as \"none\" | \"one\" | \"both\")\n : undefined;\n\n // MessageFlow: extract aranza:MessageFlowConfig extension\n let payloadSchema: string | undefined;\n let correlationKey: string | undefined;\n if (edgeType === \"messageFlow\") {\n const mfExt = el.extensionElements as ModdleElement | undefined;\n if (mfExt) {\n const mfConfig = asElements(mfExt.values).find((v) => v.$type === \"aranza:MessageFlowConfig\");\n if (mfConfig) {\n payloadSchema = asString(mfConfig.payloadSchema) || undefined;\n correlationKey = asString(mfConfig.correlationKey) || undefined;\n }\n }\n }\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n ...(associationDirection ? { associationDirection } : {}),\n ...(payloadSchema ? { payloadSchema } : {}),\n ...(correlationKey ? { correlationKey } : {}),\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), ...asElements(processRef.artifacts)],\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 | undefined,\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 ...(poolId ? { 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\n/**\n * Parse a BPMN 2.0 XML string into a ReactFlow-compatible node/edge graph.\n *\n * @param xml - Raw BPMN 2.0 XML string (UTF-8).\n * @returns Parsed nodes, edges, optional definitions set, and any parser warnings.\n * @throws {Error} When the XML cannot be parsed by bpmn-moddle.\n */\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const { BpmnModdle } = await import(\"bpmn-moddle\");\n const moddle = new BpmnModdle({ aranza: ARANZA_DESCRIPTOR });\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, undefined, ctx, nodes);\n walkFlowElements(\n [...asElements(rootEl.flowElements), ...asElements(rootEl.artifacts)],\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 type { BpmnModdle, ModdleElement } from \"bpmn-moddle\";\nimport { ARANZA_DESCRIPTOR } from \"./aranza-descriptor\";\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// ─── AranzaFlows extensionElements builder ────────────────────────────────────\n\nfunction buildAranzaExtensionElements(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n): ModdleElement | null {\n const { priority, owner, sla } = node.data;\n const connector = typeof node.data.connector === \"string\" ? node.data.connector : undefined;\n const action = typeof node.data.action === \"string\" ? node.data.action : undefined;\n const flowableType = typeof node.data.flowableType === \"string\" ? node.data.flowableType : undefined;\n const flowableDelegateExpression =\n typeof node.data.flowableDelegateExpression === \"string\"\n ? node.data.flowableDelegateExpression\n : undefined;\n const decisionRef = typeof node.data.decisionRef === \"string\" ? node.data.decisionRef : undefined;\n const formKey = typeof node.data.formKey === \"string\" ? node.data.formKey : undefined;\n const candidateUsers = typeof node.data.candidateUsers === \"string\" ? node.data.candidateUsers : undefined;\n const candidateGroups = typeof node.data.candidateGroups === \"string\" ? node.data.candidateGroups : undefined;\n const dueDate = typeof node.data.dueDate === \"string\" ? node.data.dueDate : undefined;\n const skipExpression = typeof node.data.skipExpression === \"string\" ? node.data.skipExpression : undefined;\n const businessCalendarName = typeof node.data.businessCalendarName === \"string\" ? node.data.businessCalendarName : undefined;\n\n if (!priority && !owner && !sla && !connector && !action && !flowableType && !flowableDelegateExpression && !decisionRef && !formKey && !candidateUsers && !candidateGroups && !dueDate && !skipExpression && !businessCalendarName) {\n return null;\n }\n\n const configAttrs: Record<string, string> = {};\n if (priority) configAttrs.priority = priority;\n if (owner) configAttrs.owner = owner;\n if (sla) configAttrs.sla = sla;\n if (connector) configAttrs.connector = connector;\n if (action) configAttrs.action = action;\n if (flowableType) configAttrs.flowableType = flowableType;\n if (flowableDelegateExpression) configAttrs.flowableDelegateExpression = flowableDelegateExpression;\n if (decisionRef) configAttrs.decisionRef = decisionRef;\n if (formKey) configAttrs.formKey = formKey;\n if (candidateUsers) configAttrs.candidateUsers = candidateUsers;\n if (candidateGroups) configAttrs.candidateGroups = candidateGroups;\n if (dueDate) configAttrs.dueDate = dueDate;\n if (skipExpression) configAttrs.skipExpression = skipExpression;\n if (businessCalendarName) configAttrs.businessCalendarName = businessCalendarName;\n\n const values: ModdleElement[] = [moddle.create(\"aranza:TaskConfig\", configAttrs)];\n\n const inlineDecisionTable = node.data.inlineDecisionTable;\n if (inlineDecisionTable && typeof inlineDecisionTable === \"object\") {\n const tbl = inlineDecisionTable as unknown as { hitPolicy: string; [k: string]: unknown };\n const { hitPolicy, ...rest } = tbl;\n values.push(\n moddle.create(\"aranza:InlineDecision\", {\n hitPolicy: hitPolicy ?? \"UNIQUE\",\n tableJson: JSON.stringify(rest),\n }),\n );\n }\n\n return moddle.create(\"bpmn:ExtensionElements\", { values });\n}\n\n// ─── Artifact vs flow-element classification ──────────────────────────────────\n\n/** These element types map to bpmn:Artifact and must go in process.artifacts, not flowElements. */\nconst ARTIFACT_ELEMENT_TYPES = new Set<string>([\"Annotation\", \"Group\"]);\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 const ps = typeof e.data?.payloadSchema === \"string\" ? e.data.payloadSchema : undefined;\n const ck = typeof e.data?.correlationKey === \"string\" ? e.data.correlationKey : undefined;\n const mfAttrs: Record<string, unknown> = {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n };\n if (ps || ck) {\n const cfg = moddle.create(\"aranza:MessageFlowConfig\", {\n ...(ps ? { payloadSchema: ps } : {}),\n ...(ck ? { correlationKey: ck } : {}),\n });\n mfAttrs.extensionElements = moddle.create(\"bpmn:ExtensionElements\", { values: [cfg] });\n }\n return moddle.create(\"bpmn:MessageFlow\", mfAttrs);\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 // D2: Ensure every DataObjectReference has a backing DataObject in flowElements.\n // If `data.dataObjectRef` points to an existing node in scope, use that; otherwise\n // auto-generate a synthetic DataObject so the XML is valid.\n const presentDataObjectIds = new Set(\n myNodes.filter((n) => n.data.elementType === \"DataObject\").map((n) => n.id),\n );\n const flowElements: ModdleElement[] = [];\n const artifacts: ModdleElement[] = [];\n\n for (const node of myNodes) {\n if (node.data.elementType === \"DataObjectReference\") {\n const explicitRef = typeof node.data.dataObjectRef === \"string\" ? node.data.dataObjectRef : null;\n if (!explicitRef || !presentDataObjectIds.has(explicitRef)) {\n const syntheticId = `DataObject_${node.id}`;\n if (!presentDataObjectIds.has(syntheticId)) {\n flowElements.push(moddle.create(\"bpmn:DataObject\", { id: syntheticId }));\n presentDataObjectIds.add(syntheticId);\n }\n }\n }\n }\n\n // D1: Route artifact-type nodes to artifacts array, flow nodes to flowElements.\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (!el) continue;\n if (ARTIFACT_ELEMENT_TYPES.has(node.data.elementType)) {\n artifacts.push(el);\n } else {\n flowElements.push(el);\n }\n }\n\n // Sequence flows, associations, and data 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) continue;\n // D1: bpmn:Association is an Artifact — goes in artifacts, not flowElements\n if (edge.data?.edgeType === \"association\") {\n artifacts.push(edgeMeta);\n } else {\n flowElements.push(edgeMeta);\n }\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 ...(artifacts.length > 0 ? { artifacts } : {}),\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 // TextAnnotation uses `text`, not `name`\n if (elementType === \"Annotation\") {\n delete attrs.name;\n attrs.text = 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 if (elementType === \"CallActivity\" && node.data.calledElement) {\n attrs.calledElement = node.data.calledElement;\n }\n\n // D2: DataObjectReference must reference its backing DataObject\n if (elementType === \"DataObjectReference\") {\n const refId = typeof node.data.dataObjectRef === \"string\"\n ? node.data.dataObjectRef\n : `DataObject_${node.id}`;\n attrs.dataObjectRef = { id: refId };\n }\n\n if (elementType === \"ScriptTask\") {\n const scriptFormat = typeof node.data.scriptFormat === \"string\" ? node.data.scriptFormat : undefined;\n const script = typeof node.data.script === \"string\" ? node.data.script : undefined;\n if (scriptFormat) attrs.scriptFormat = scriptFormat;\n if (script) attrs.script = script;\n }\n\n // Flowable execution attributes on ServiceTask — emitted as namespace-prefixed\n // XML attributes (bpmn-moddle passes $attrs through to the serialized output).\n if (elementType === \"ServiceTask\") {\n const flowableAttrs: Record<string, string> = {};\n const flowableType = typeof node.data.flowableType === \"string\" ? node.data.flowableType : undefined;\n const flowableDelegateExpression =\n typeof node.data.flowableDelegateExpression === \"string\"\n ? node.data.flowableDelegateExpression\n : undefined;\n const connector = typeof node.data.connector === \"string\" ? node.data.connector : undefined;\n // Connector tasks use an HTTP-type delegate that reads aranza:TaskConfig at runtime\n if (connector) flowableAttrs[\"flowable:type\"] = \"http\";\n if (flowableType) flowableAttrs[\"flowable:type\"] = flowableType;\n if (flowableDelegateExpression) {\n flowableAttrs[\"flowable:delegateExpression\"] = flowableDelegateExpression;\n }\n if (Object.keys(flowableAttrs).length > 0) attrs.$attrs = flowableAttrs;\n }\n\n const aranzaConfig = buildAranzaExtensionElements(moddle, node);\n if (aranzaConfig) attrs.extensionElements = aranzaConfig;\n\n const isSubProcess =\n elementType === \"SubProcess\" ||\n elementType === \"Transaction\" ||\n elementType === \"EventSubProcess\" ||\n elementType === \"AdHocSubProcess\";\n\n if (isSubProcess) {\n const nested = buildNestedFlowElements(moddle, node, allNodes, allEdges);\n attrs.flowElements = nested.flowElements;\n if (nested.artifacts.length > 0) attrs.artifacts = nested.artifacts;\n if (elementType === \"EventSubProcess\" || node.data.subProcessVariant === \"event\") {\n attrs.triggeredByEvent = true;\n }\n if (elementType === \"AdHocSubProcess\" && typeof node.data.completionCondition === \"string\" && node.data.completionCondition.trim()) {\n attrs.completionCondition = moddle.create(\"bpmn:FormalExpression\", {\n body: node.data.completionCondition.trim(),\n });\n }\n }\n\n // Loop / multi-instance characteristics\n const loopType = typeof node.data.loopType === \"string\" ? node.data.loopType : \"none\";\n if (loopType && loopType !== \"none\") {\n if (loopType === \"loop\") {\n const lcAttrs: Record<string, unknown> = { id: uid(\"LoopChar\", node.id) };\n const loopCondition = typeof node.data.loopCondition === \"string\" ? node.data.loopCondition : undefined;\n if (loopCondition) {\n lcAttrs.loopCondition = moddle.create(\"bpmn:FormalExpression\", { body: loopCondition });\n }\n attrs.loopCharacteristics = moddle.create(\"bpmn:StandardLoopCharacteristics\", lcAttrs);\n } else {\n const isSequential = loopType === \"sequentialMultiple\";\n const lcAttrs: Record<string, unknown> = { id: uid(\"LoopChar\", node.id), isSequential };\n const loopCardinality = typeof node.data.loopCardinality === \"string\" ? node.data.loopCardinality : undefined;\n const loopCompletionCondition = typeof node.data.loopCompletionCondition === \"string\" ? node.data.loopCompletionCondition : undefined;\n if (loopCardinality) {\n lcAttrs.loopCardinality = moddle.create(\"bpmn:FormalExpression\", { body: loopCardinality });\n }\n if (loopCompletionCondition) {\n lcAttrs.completionCondition = moddle.create(\"bpmn:FormalExpression\", { body: loopCompletionCondition });\n }\n attrs.loopCharacteristics = moddle.create(\"bpmn:MultiInstanceLoopCharacteristics\", lcAttrs);\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): { flowElements: ModdleElement[]; artifacts: 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 const artifacts: ModdleElement[] = [];\n\n // D2: Synthetic DataObjects for DataObjectReferences inside the subprocess\n const presentDataObjectIds = new Set(\n childNodes.filter((n) => n.data.elementType === \"DataObject\").map((n) => n.id),\n );\n for (const node of childNodes) {\n if (node.data.elementType === \"DataObjectReference\") {\n const explicitRef = typeof node.data.dataObjectRef === \"string\" ? node.data.dataObjectRef : null;\n if (!explicitRef || !presentDataObjectIds.has(explicitRef)) {\n const syntheticId = `DataObject_${node.id}`;\n if (!presentDataObjectIds.has(syntheticId)) {\n flowElements.push(moddle.create(\"bpmn:DataObject\", { id: syntheticId }));\n presentDataObjectIds.add(syntheticId);\n }\n }\n }\n }\n\n for (const child of childNodes) {\n const element = buildFlowElement(moddle, child, allNodes, allEdges);\n if (!element) continue;\n if (ARTIFACT_ELEMENT_TYPES.has(child.data.elementType)) {\n artifacts.push(element);\n } else {\n flowElements.push(element);\n }\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) continue;\n if (edge.data?.edgeType === \"association\") {\n artifacts.push(element);\n } else {\n flowElements.push(element);\n }\n }\n\n return { flowElements, artifacts };\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 // bpmn:Association.associationDirection uses Title-case values\n if (edge.data.edgeType === \"association\" && edge.data.associationDirection && edge.data.associationDirection !== \"none\") {\n attrs.associationDirection = edge.data.associationDirection === \"both\" ? \"Both\" : \"One\";\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\n/**\n * Serialize a ReactFlow BPMN graph to a BPMN 2.0 XML string.\n *\n * @param nodes - ReactFlow nodes carrying {@link BpmnNodeData}.\n * @param edges - ReactFlow edges carrying {@link BpmnEdgeData}.\n * @param opts - Optional export options (process id/name, formatting, variables).\n * @returns Formatted BPMN 2.0 XML string.\n */\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const { BpmnModdle } = await import(\"bpmn-moddle\");\n const moddle = new BpmnModdle({ aranza: ARANZA_DESCRIPTOR });\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\n/**\n * Initialize a new token-based simulation from all root-level start events.\n *\n * @param diagram - The BPMN graph to simulate (nodes + edges).\n * @param initialVariables - Optional process-level variable values to seed.\n * @returns Initial {@link SimulationState} with tokens placed at all start events.\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\n/**\n * Advance the simulation by one step, automatically propagating all tokens\n * through automated elements (gateways, auto-completing tasks, etc.).\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @returns Updated state after all automatic transitions are resolved.\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\n/**\n * Manually fire an element that requires user interaction (e.g. UserTask,\n * IntermediateCatchEvent, BoundaryEvent). Consumes the token at the element,\n * emits it along outgoing edges, then calls {@link tick} to continue automatic\n * propagation.\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @param elementId - Id of the element to fire.\n * @param variables - Optional variables to set before firing.\n * @returns Updated state after the element fires and all automatic steps resolve.\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\n/**\n * Return element ids that can be manually fired in the current simulation step.\n * Includes tasks that require human interaction, intermediate catch events, and\n * boundary events attached to tasks that currently hold a token.\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @returns Array of element ids ready to be passed to {@link fire}.\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 createSimulation,\n tick,\n fire,\n getFireable,\n} from \"./index\";\nimport type { SimDiagram, SimEdge } from \"./index\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\n/**\n * Branch weights for one gateway.\n * Maps each outgoing sequence-flow edge ID to a non-negative weight.\n * Weights are normalised internally so they need not sum to any specific value.\n * An edge absent from the map inherits weight 1.\n */\nexport type GatewayWeights = Record<string, number>;\n\nexport interface BatchSimConfig {\n /**\n * Number of process instances to simulate.\n * @default 100\n */\n instances?: number;\n\n /**\n * Gateway branch weights. Keys are gateway node IDs; values map\n * each outgoing edge ID to its relative weight.\n * Applies to ExclusiveGateway and InclusiveGateway nodes.\n * Gateways absent from this map fall back to condition evaluation\n * or first-edge behaviour.\n */\n gatewayWeights?: Record<string, GatewayWeights>;\n\n /**\n * Simulated activity duration per node in milliseconds.\n * Used to compute the `totalDurationMs` load indicator:\n * totalDurationMs = visits × nodeDurations[nodeId]\n * Nodes absent from this map contribute 0 ms.\n */\n nodeDurations?: Record<string, number>;\n\n /**\n * Safety limit: maximum tick iterations per instance.\n * Prevents infinite-loop diagrams from blocking indefinitely.\n * @default 500\n */\n maxSteps?: number;\n}\n\nexport interface NodeSimStats {\n /**\n * Number of instances in which at least one token passed through\n * this node. Value in [0, config.instances].\n */\n visits: number;\n\n /**\n * visits × nodeDurations[nodeId].\n * Higher values indicate heavier aggregate load on this activity.\n */\n totalDurationMs: number;\n\n /**\n * Highest number of concurrent tokens at this node observed within\n * any single instance. Values > 1 occur inside parallel branches.\n */\n peakConcurrency: number;\n}\n\nexport interface BatchSimResult {\n /** Per-node aggregated statistics, keyed by node ID. */\n nodeStats: Record<string, NodeSimStats>;\n\n /** Instances that reached the EndEvent(s) successfully. */\n completed: number;\n\n /** Instances that stalled with tokens still present (deadlock). */\n deadlocked: number;\n\n /** Total instances attempted — equals `config.instances`. */\n total: number;\n\n /**\n * Mean number of simulation steps across completed instances.\n * Proxy for relative cycle time (higher = longer path).\n * 0 when no instance completed.\n */\n avgSteps: number;\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\n/** Weighted random selection from a list of edge IDs. */\nfunction weightedChoice(edgeIds: string[], weights: GatewayWeights): string {\n if (edgeIds.length === 0) return \"\";\n const w = edgeIds.map((id) => Math.max(0, weights[id] ?? 1));\n const total = w.reduce((a, b) => a + b, 0);\n if (total === 0) return edgeIds[0];\n\n let r = Math.random() * total;\n for (let i = 0; i < edgeIds.length; i++) {\n r -= w[i];\n if (r <= 0) return edgeIds[i];\n }\n return edgeIds[edgeIds.length - 1];\n}\n\n/**\n * Builds a modified diagram where each weighted gateway's outgoing\n * sequence edges carry a synthetic condition expression keyed to a\n * deterministic per-instance variable `__g{i}`.\n *\n * This lets the existing ExclusiveGateway evaluator (condition-based)\n * implement probabilistic branching without touching the engine core.\n */\nfunction buildBatchDiagram(\n diagram: SimDiagram,\n gatewayWeights: Record<string, GatewayWeights>,\n gwVarMap: Record<string, string>,\n): SimDiagram {\n const patchedEdges: SimEdge[] = diagram.edges.map((edge) => {\n const gwId = edge.source;\n if (!(gwId in gatewayWeights) || edge.type !== \"sequenceFlow\") return edge;\n\n const varName = gwVarMap[gwId];\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const idx = outEdges.findIndex((e) => e.id === edge.id);\n if (idx === -1) return edge;\n\n return {\n ...edge,\n conditionExpression: `\\${${varName} == ${idx}}`,\n isDefault: false,\n };\n });\n\n return { nodes: diagram.nodes, edges: patchedEdges };\n}\n\ninterface InstanceResult {\n /** All node IDs touched by any token during this instance. */\n visitedNodes: Set<string>;\n /** Peak concurrent-token count per node observed during this instance. */\n peakPerNode: Record<string, number>;\n /** Final simulation step count. */\n steps: number;\n completed: boolean;\n}\n\n/**\n * Runs a single process instance to completion (or until the safety\n * limit is reached). Manual elements (Tasks, CatchEvents) are fired\n * immediately — simulating instant activity completion — so the\n * run is fully automated.\n */\nfunction runOneInstance(\n diagram: SimDiagram,\n initialVars: Record<string, string | number | boolean>,\n maxSteps: number,\n): InstanceResult {\n let state = createSimulation(diagram, initialVars);\n state = tick(diagram, state);\n\n const visitedNodes = new Set<string>();\n const peakPerNode: Record<string, number> = {};\n\n function snapshot() {\n // Track which nodes are occupied and peak concurrency.\n const counts: Record<string, number> = {};\n for (const token of state.tokens) {\n visitedNodes.add(token.elementId);\n counts[token.elementId] = (counts[token.elementId] ?? 0) + 1;\n }\n for (const [nodeId, c] of Object.entries(counts)) {\n if (c > (peakPerNode[nodeId] ?? 0)) peakPerNode[nodeId] = c;\n }\n }\n\n snapshot();\n\n let steps = 0;\n while (state.status === \"running\" && steps < maxSteps) {\n const fireable = getFireable(diagram, state);\n if (fireable.length === 0) break;\n\n for (const id of fireable) {\n if (state.status !== \"running\") break;\n state = fire(diagram, state, id);\n snapshot();\n }\n steps++;\n }\n\n // Capture all nodes mentioned in the log (covers automatics that\n // never appear as token positions but do appear in log entries).\n for (const entry of state.log) {\n visitedNodes.add(entry.elementId);\n }\n\n return {\n visitedNodes,\n peakPerNode,\n steps: state.step,\n completed: state.status === \"completed\",\n };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Run `config.instances` process instances through the diagram and\n * aggregate per-node statistics for bottleneck analysis.\n *\n * Tasks are completed instantly (no wait time); gateway choices follow\n * either the weights in `config.gatewayWeights` or the existing\n * condition/default/first-edge logic when no weights are specified.\n *\n * @param diagram - The BPMN graph to simulate.\n * @param config - Simulation parameters.\n * @returns Aggregated {@link BatchSimResult}.\n *\n * @example\n * ```ts\n * const result = runBatchSimulation(diagram, {\n * instances: 200,\n * gatewayWeights: {\n * \"gw_approve\": { \"edge_approved\": 70, \"edge_rejected\": 30 },\n * },\n * nodeDurations: { \"task_review\": 3600_000 }, // 1 hour\n * });\n * const topBottleneck = Object.entries(result.nodeStats)\n * .sort((a, b) => b[1].totalDurationMs - a[1].totalDurationMs)[0];\n * ```\n */\nexport function runBatchSimulation(\n diagram: SimDiagram,\n config: BatchSimConfig = {},\n): BatchSimResult {\n const n = Math.max(1, config.instances ?? 100);\n const maxSteps = Math.max(1, config.maxSteps ?? 500);\n const gwWeights = config.gatewayWeights ?? {};\n const nodeDurations = config.nodeDurations ?? {};\n\n // Map each weighted gateway to a synthetic variable name (__g0, __g1, …)\n const gwVarMap: Record<string, string> = {};\n Object.keys(gwWeights).forEach((gwId, i) => {\n gwVarMap[gwId] = `__g${i}`;\n });\n\n const batchDiagram =\n Object.keys(gwWeights).length > 0\n ? buildBatchDiagram(diagram, gwWeights, gwVarMap)\n : diagram;\n\n const nodeStats: Record<string, NodeSimStats> = {};\n\n function node(id: string): NodeSimStats {\n if (!nodeStats[id]) {\n nodeStats[id] = { visits: 0, totalDurationMs: 0, peakConcurrency: 0 };\n }\n return nodeStats[id];\n }\n\n let completed = 0;\n let deadlocked = 0;\n let totalSteps = 0;\n\n for (let i = 0; i < n; i++) {\n // Resolve branch choices for this instance based on configured weights.\n const instanceVars: Record<string, string | number | boolean> = {};\n for (const [gwId, varName] of Object.entries(gwVarMap)) {\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const edgeIds = outEdges.map((e) => e.id);\n const chosen = weightedChoice(edgeIds, gwWeights[gwId]);\n instanceVars[varName] = outEdges.findIndex((e) => e.id === chosen);\n }\n\n const result = runOneInstance(batchDiagram, instanceVars, maxSteps);\n\n if (result.completed) {\n completed++;\n totalSteps += result.steps;\n } else {\n deadlocked++;\n }\n\n // Accumulate per-node stats.\n for (const nodeId of result.visitedNodes) {\n const s = node(nodeId);\n s.visits++;\n s.totalDurationMs += nodeDurations[nodeId] ?? 0;\n }\n\n for (const [nodeId, peak] of Object.entries(result.peakPerNode)) {\n const s = node(nodeId);\n if (peak > s.peakConcurrency) s.peakConcurrency = peak;\n }\n }\n\n return {\n nodeStats,\n completed,\n deadlocked,\n total: n,\n avgSteps: completed > 0 ? Math.round(totalSteps / completed) : 0,\n };\n}\n","import {\n addNode,\n connectNodes,\n copyElements,\n createModelingRules,\n createSelectionState,\n createUniqueId,\n DiagramEventBus,\n createDiagramEventBus,\n executeCommand,\n executeCommands,\n findContainingNode,\n getNode,\n getNodeAbsolutePosition,\n getNodeCenterPosition,\n getNodeSize,\n getOutgoingEdges,\n getIncomingEdges,\n groupNodes,\n getNodeTabOrder,\n normalizeDiagramState,\n pasteElements,\n patchEdge,\n patchNode,\n moveNode,\n persistCommandHistory,\n removeElements,\n replaceNode,\n reparentNode,\n resizeNode,\n resizeNodeByHandle,\n restoreCommandHistory,\n setSelection,\n toRelativeNodePosition,\n computeSmartGuides,\n LayoutCache,\n createLayoutCache,\n withLayoutCache,\n getEdgeLabelLayout,\n type CommandStackState,\n type ClipboardState,\n type ConnectionValidator,\n type DiagramCommand,\n type DiagramSnapshot,\n type DiagramState,\n type EdgeLabelLayout,\n type EdgeLabelOffsetOptions,\n type LayoutCacheOptions,\n type LayoutFn,\n type ModelingRules,\n type ResizeHandlePosition,\n type SelectionState,\n type SmartGuideResult,\n type Viewport,\n} from \"@aranzatech/diagrams-core\";\nimport {\n createDiagramDocument,\n deserializeDiagram,\n deserializeDiagramSnapshot,\n parseDiagramDocument,\n serializeDiagram,\n serializeDiagramSnapshot,\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>;\nexport type BpmnDiagramSnapshot = DiagramSnapshot<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnEventBus = DiagramEventBus<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 interface GroupAsBpmnSubProcessOptions {\n groupId?: string;\n nodeIds: string[];\n label?: string;\n padding?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ResizeBpmnNodeByHandleOptions {\n id: string;\n handle: ResizeHandlePosition;\n dx: number;\n dy: 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\n/** Returns true for every element type that can be dragged into a Pool or Lane container. */\nexport function isBpmnDroppableInContainer(type: BpmnElementType): boolean {\n return (\n isBpmnProcessNode(type) ||\n type === \"Annotation\" ||\n type === \"Group\" ||\n type === \"DataObject\" ||\n type === \"DataObjectReference\" ||\n type === \"DataStore\" ||\n type === \"DataStoreReference\"\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\" || isBpmnDroppableInContainer(childType)\n ? true\n : \"Pools can contain lanes, BPMN process nodes, annotations, groups, and data elements.\";\n }\n if (parentType === \"Lane\") {\n return isBpmnDroppableInContainer(childType)\n ? true\n : \"Lanes can only contain BPMN process nodes, annotations, groups, and data elements.\";\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\n/**\n * Create a {@link DiagramCommand} that adds a new BPMN element to the diagram.\n *\n * @param options - Element type, id, position, label, and optional parent/data overrides.\n * @returns Undoable command to be executed by {@link runBpmnCommand}.\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\n/**\n * Create a {@link DiagramCommand} that connects two BPMN elements with the\n * most appropriate edge type (auto-inferred when `edgeType` is omitted).\n * Validates the connection against BPMN 2.0 rules before executing.\n *\n * @param options - Source/target ids, optional edge type, label, and data overrides.\n * @returns Undoable command, throws when the connection violates BPMN rules.\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\n// Half-size of a BoundaryEvent (36×36) — used to convert center↔top-left coords.\nconst BE_HALF = 18;\n\nfunction clampBoundaryEventsAfterResize(\n state: Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0],\n hostId: string,\n oldW: number,\n oldH: number,\n newW: number,\n newH: number,\n): Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0] {\n const boundaryEvents = state.nodes.filter(\n (n) => n.data.elementType === \"BoundaryEvent\" && n.parentId === hostId,\n );\n\n let next = state;\n for (const be of boundaryEvents) {\n const px = be.position?.x ?? 0;\n const py = be.position?.y ?? 0;\n const cx = px + BE_HALF;\n const cy = py + BE_HALF;\n\n const distLeft = Math.abs(cx);\n const distRight = Math.abs(cx - oldW);\n const distTop = Math.abs(cy);\n const distBottom = Math.abs(cy - oldH);\n const minDist = Math.min(distLeft, distRight, distTop, distBottom);\n\n let newCx: number;\n let newCy: number;\n\n if (minDist === distBottom) {\n newCy = newH;\n newCx = Math.min(Math.max(cx, BE_HALF), newW - BE_HALF);\n } else if (minDist === distRight) {\n newCx = newW;\n newCy = Math.min(Math.max(cy, BE_HALF), newH - BE_HALF);\n } else if (minDist === distTop) {\n newCy = 0;\n newCx = Math.min(Math.max(cx, BE_HALF), newW - BE_HALF);\n } else {\n newCx = 0;\n newCy = Math.min(Math.max(cy, BE_HALF), newH - BE_HALF);\n }\n\n next = moveNode(next, be.id, { x: newCx - BE_HALF, y: newCy - BE_HALF });\n }\n\n return next;\n}\n\n/**\n * Create a {@link DiagramCommand} that resizes a BPMN element, enforcing\n * minimum dimensions per spec. Boundary events attached to the resized element\n * are automatically repositioned to stay on the new border.\n *\n * @param options - Target element id, optional new width/height.\n * @returns Undoable command, throws when the element is not resizable.\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\n const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const clampedW =\n options.width === undefined ? undefined : Math.max(size.minWidth, options.width);\n const clampedH =\n options.height === undefined ? undefined : Math.max(size.minHeight, options.height);\n\n const resized = resizeNode(state, options.id, {\n width: clampedW,\n height: clampedH,\n } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? clampedW ?? oldW;\n const newH = updatedNode?.height ?? clampedH ?? oldH;\n\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\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\"> & { viewport?: Viewport } = {},\n): string {\n const { viewport, ...docOptions } = options;\n const normalized = normalizeDiagramState(state);\n if (viewport) {\n return serializeDiagramSnapshot(\n { nodes: normalized.nodes, edges: normalized.edges, viewport },\n { ...docOptions, diagramType: \"bpmn\" },\n );\n }\n return serializeDiagram(normalized, { ...docOptions, diagramType: \"bpmn\" });\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\n/**\n * Deserialize a BPMN diagram document to a snapshot that includes the persisted\n * viewport. Returns `viewport: { x:0, y:0, zoom:1 }` when none was saved.\n */\nexport function deserializeBpmnDiagramSnapshot(json: string): BpmnDiagramSnapshot {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagramSnapshot<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\nexport function createBpmnEventBus(): BpmnEventBus {\n return createDiagramEventBus<BpmnRFNode, BpmnRFEdge>();\n}\n\nexport function runBpmnCommand(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n command: DiagramCommand<BpmnRFNode, BpmnRFEdge>,\n bus?: BpmnEventBus,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const next = executeCommand(stack, command);\n bus?.emit(\"command:executed\", {\n commandId: command.id,\n ...(command.label !== undefined ? { label: command.label } : {}),\n state: next.current,\n });\n return next;\n}\n\nexport function runBpmnCommands(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n commands: Array<DiagramCommand<BpmnRFNode, BpmnRFEdge>>,\n options: { id?: string; label?: string; bus?: BpmnEventBus } = {},\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const { bus, ...execOptions } = options;\n const next = executeCommands(stack, commands, execOptions);\n bus?.emit(\"command:executed\", {\n commandId: execOptions.id ?? \"bpmn.batch\",\n ...(execOptions.label !== undefined ? { label: execOptions.label } : {}),\n state: next.current,\n });\n return next;\n}\n\n/**\n * Persist BPMN command history to localStorage under a per-diagram key.\n * Safe to call in SSR environments — writes are silently skipped.\n */\nexport function persistBpmnHistory(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n diagramId: string,\n): void {\n persistCommandHistory(stack, `bpmn.history.${diagramId}`);\n}\n\n/**\n * Restore BPMN command history from localStorage. Returns `null` when no\n * history exists for the given diagram id or when called server-side.\n */\nexport function restoreBpmnHistory(\n diagramId: string,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> | null {\n return restoreCommandHistory<BpmnRFNode, BpmnRFEdge>(`bpmn.history.${diagramId}`);\n}\n\n/**\n * Compute smart alignment guides for nodes being dragged on a BPMN canvas.\n * Excludes boundary events, lanes, and pools from guide sources.\n * When `poolId` is given, only considers nodes within that pool as static references.\n */\nexport function computeBpmnSmartGuides(\n movingNodes: BpmnRFNode[],\n state: BpmnDiagramState,\n poolId?: string,\n): SmartGuideResult {\n const movingIds = new Set(movingNodes.map((n) => n.id));\n const staticNodes = state.nodes.filter((n) => {\n if (movingIds.has(n.id)) return false;\n const et = n.data.elementType;\n if (et === \"BoundaryEvent\" || et === \"Lane\" || et === \"Pool\") return false;\n if (poolId) {\n const inPool =\n n.parentId === poolId ||\n (n.parentId !== undefined && getNode(state, n.parentId)?.parentId === poolId);\n if (!inPool) return false;\n }\n return true;\n });\n return computeSmartGuides(movingNodes, staticNodes);\n}\n\n/**\n * Create a command that groups selected BPMN nodes into a new SubProcess element.\n * Validates that every node can be contained by a SubProcess before executing.\n */\nexport function groupAsBpmnSubProcessCommand(\n options: GroupAsBpmnSubProcessOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.groupAsSubProcess.${options.groupId ?? options.nodeIds.join(\".\")}`,\n label: \"Group as SubProcess\",\n execute: (state) => {\n for (const nodeId of options.nodeIds) {\n const node = getNode(state, nodeId);\n if (!node) continue;\n const result = canContainBpmnElement(\"SubProcess\", node.data.elementType);\n if (result !== true) throw new Error(result);\n }\n const groupId = options.groupId ?? createUniqueId(\"subprocess\", state.nodes.map((n) => n.id));\n const groupNode = createBpmnNode({\n id: groupId,\n elementType: \"SubProcess\",\n position: { x: 0, y: 0 },\n ...(options.label !== undefined ? { label: options.label } : {}),\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n return groupNodes(state, {\n groupNode,\n nodeIds: options.nodeIds,\n padding: options.padding ?? 20,\n });\n },\n };\n}\n\n/**\n * Return node IDs in logical tab order for keyboard navigation.\n * When `poolId` is given, scopes the order to nodes within that pool and its lanes.\n */\nexport function getBpmnTabOrder(\n state: BpmnDiagramState,\n poolId?: string,\n): string[] {\n if (!poolId) return getNodeTabOrder(state);\n const pool = getNode(state, poolId);\n if (!pool) return [];\n const scopeIds = state.nodes\n .filter((n) => {\n if (n.id === poolId) return false;\n if (n.parentId === poolId) return true;\n const parent = getNode(state, n.parentId ?? \"\");\n return parent?.parentId === poolId;\n })\n .map((n) => n.id);\n return getNodeTabOrder(state, scopeIds);\n}\n\n/**\n * Compute the label layout (position + angle) for a BPMN edge.\n * Uses the edge's stored routing points when available; falls back to\n * the straight line between source and target centers.\n */\nexport function getBpmnEdgeLabelLayout(\n edgeId: string,\n state: BpmnDiagramState,\n options?: EdgeLabelOffsetOptions,\n): EdgeLabelLayout | null {\n const edge = state.edges.find((e) => e.id === edgeId);\n if (!edge) return null;\n const routingPoints = (edge.data?.routingPoints ?? []) as Array<{ x: number; y: number }>;\n if (routingPoints.length >= 2) {\n return getEdgeLabelLayout(routingPoints, options);\n }\n const sourceNode = getNode(state, edge.source);\n const targetNode = getNode(state, edge.target);\n if (!sourceNode || !targetNode) return null;\n const sourceAbsPos = getBpmnNodeAbsolutePosition(state, edge.source) ?? sourceNode.position;\n const targetAbsPos = getBpmnNodeAbsolutePosition(state, edge.target) ?? targetNode.position;\n const sourceCenter = getNodeCenterPosition(sourceAbsPos, getBpmnNodeSize(sourceNode));\n const targetCenter = getNodeCenterPosition(targetAbsPos, getBpmnNodeSize(targetNode));\n return getEdgeLabelLayout([sourceCenter, targetCenter], options);\n}\n\n/**\n * Create a command that resizes a BPMN element by dragging one of its 8 handles.\n * Boundary events attached to the resized element are automatically repositioned.\n *\n * @param options - Target element id, handle position, and pixel delta.\n * @returns Undoable command.\n */\nexport function resizeBpmnNodeByHandleCommand(\n options: ResizeBpmnNodeByHandleOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resizeByHandle.${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 const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const resized = resizeNodeByHandle(state, {\n id: options.id,\n handle: options.handle,\n dx: options.dx,\n dy: options.dy,\n constraints: { minWidth: size.minWidth, minHeight: size.minHeight },\n });\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? oldW;\n const newH = updatedNode?.height ?? oldH;\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\n },\n };\n}\n\n/**\n * Create a layout cache for BPMN auto-layout calls.\n * Pass the returned cache to `withBpmnLayoutCache` to memoize identical topologies.\n */\nexport function createBpmnLayoutCache(options?: LayoutCacheOptions): LayoutCache {\n return createLayoutCache(options);\n}\n\n/**\n * Wrap an ELK-based layout function with BPMN topology caching so that diagrams\n * with unchanged node/edge structure are not re-laid-out unnecessarily.\n */\nexport function withBpmnLayoutCache(\n layoutFn: LayoutFn<BpmnRFNode, BpmnRFEdge>,\n cache?: LayoutCache,\n): LayoutFn<BpmnRFNode, BpmnRFEdge> {\n return withLayoutCache(layoutFn, cache ?? createLayoutCache());\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/aranza-descriptor.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/simulation/batch.ts","../src/modeling/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","useReactFlow","useRef","useCallback","BaseEdge","EdgeLabelRenderer","getStraightPath","laneSet","def","parseVariableType","isSubProcess","nodeById","GATEWAY_TYPES","TASK_TYPES","next","getNode","getNodeSize","getNodeAbsolutePosition","toRelativeNodePosition","findContainingNode","getNodeCenterPosition","patchNode","resizeNode","getOutgoingEdges","getIncomingEdges","createModelingRules","addNode","connectNodes","reparentNode","replaceNode","moveNode","patchEdge","removeElements","copyElements","pasteElements","setSelection","createSelectionState","createDiagramDocument","normalizeDiagramState","serializeDiagramSnapshot","serializeDiagram","parseDiagramDocument","deserializeDiagram","deserializeDiagramSnapshot","createDiagramEventBus","executeCommand","executeCommands","persistCommandHistory","restoreCommandHistory","computeSmartGuides","createUniqueId","groupNodes","getNodeTabOrder","getEdgeLabelLayout","resizeNodeByHandle","createLayoutCache","withLayoutCache"],"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 { useCallback, useRef } from \"react\";\nimport { BaseEdge, EdgeLabelRenderer, useReactFlow, 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 const labelX = midpoint.x + (d?.labelOffsetX ?? 0);\n const labelY = midpoint.y + (d?.labelOffsetY ?? 0);\n\n const { updateEdgeData, getViewport } = useReactFlow();\n const dragStartRef = useRef<{ mx: number; my: number; ox: number; oy: number } | null>(null);\n\n const handleLabelPointerDown = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n e.currentTarget.setPointerCapture(e.pointerId);\n dragStartRef.current = {\n mx: e.clientX,\n my: e.clientY,\n ox: d?.labelOffsetX ?? 0,\n oy: d?.labelOffsetY ?? 0,\n };\n }, [d?.labelOffsetX, d?.labelOffsetY]);\n\n const handleLabelPointerMove = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n if (!dragStartRef.current) return;\n const { zoom } = getViewport();\n const dx = (e.clientX - dragStartRef.current.mx) / zoom;\n const dy = (e.clientY - dragStartRef.current.my) / zoom;\n updateEdgeData(id, {\n labelOffsetX: dragStartRef.current.ox + dx,\n labelOffsetY: dragStartRef.current.oy + dy,\n });\n }, [id, updateEdgeData, getViewport]);\n\n const handleLabelPointerUp = useCallback(() => {\n dragStartRef.current = null;\n }, []);\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 onPointerDown={handleLabelPointerDown}\n onPointerMove={handleLabelPointerMove}\n onPointerUp={handleLabelPointerUp}\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${labelX}px,${labelY}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 cursor: \"grab\",\n userSelect: \"none\",\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","/**\n * bpmn-moddle package descriptor for the AranzaFlows extension namespace.\n *\n * Registered as { aranza: ARANZA_DESCRIPTOR } when constructing BpmnModdle so\n * that aranza:TaskConfig elements can be created and parsed via extensionElements.\n *\n * XML shape:\n * <bpmn:userTask id=\"Task_1\" name=\"Review\">\n * <bpmn:extensionElements>\n * <aranza:taskConfig priority=\"critical\" owner=\"ops-team\" sla=\"PT4H\" />\n * </bpmn:extensionElements>\n * </bpmn:userTask>\n */\nexport const ARANZA_DESCRIPTOR = {\n name: \"Aranza\",\n uri: \"http://aranzatech.io/schema/bpmn-extension/1.0\",\n prefix: \"aranza\",\n xml: { tagAlias: \"lowerCase\" },\n types: [\n {\n name: \"TaskConfig\",\n superClass: [\"Element\"],\n properties: [\n { name: \"priority\", isAttr: true, type: \"String\" },\n { name: \"owner\", isAttr: true, type: \"String\" },\n { name: \"sla\", isAttr: true, type: \"String\" },\n // Aranza connector execution config (resolved at runtime by the Flowable delegate)\n { name: \"connector\", isAttr: true, type: \"String\" },\n { name: \"action\", isAttr: true, type: \"String\" },\n // Flowable implementation hints stored for round-trip fidelity\n { name: \"flowableType\", isAttr: true, type: \"String\" },\n { name: \"flowableDelegateExpression\", isAttr: true, type: \"String\" },\n // BusinessRuleTask: reference to a DMN decision table id\n { name: \"decisionRef\", isAttr: true, type: \"String\" },\n // UserTask: form key resolved to a FormDefinition name at runtime\n { name: \"formKey\", isAttr: true, type: \"String\" },\n // UserTask: Flowable task assignment — comma-separated ids\n { name: \"candidateUsers\", isAttr: true, type: \"String\" },\n { name: \"candidateGroups\", isAttr: true, type: \"String\" },\n // UserTask: scheduling + skip expression\n { name: \"dueDate\", isAttr: true, type: \"String\" },\n { name: \"skipExpression\", isAttr: true, type: \"String\" },\n { name: \"businessCalendarName\", isAttr: true, type: \"String\" },\n ],\n },\n {\n // BusinessRuleTask: simplified inline decision table (JSON-serialized)\n name: \"InlineDecision\",\n superClass: [\"Element\"],\n properties: [\n { name: \"hitPolicy\", isAttr: true, type: \"String\" },\n { name: \"tableJson\", isAttr: true, type: \"String\" },\n ],\n },\n {\n // MessageFlow: payload schema + correlation key for executable BPMN\n name: \"MessageFlowConfig\",\n superClass: [\"Element\"],\n properties: [\n { name: \"payloadSchema\", isAttr: true, type: \"String\" },\n { name: \"correlationKey\", isAttr: true, type: \"String\" },\n ],\n },\n ],\n enumerations: [],\n associations: [],\n} as const;\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 type { ModdleElement } from \"bpmn-moddle\";\nimport { ARANZA_DESCRIPTOR } from \"./aranza-descriptor\";\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// ─── AranzaFlows extensionElements extractor ─────────────────────────────────\n\nfunction extractAranzaExtensions(el: ModdleElement): Partial<BpmnNodeData> {\n const result: Partial<BpmnNodeData> = {};\n\n // Read Flowable $attrs directly on the element\n const elAttrs = (el as Record<string, unknown>).$attrs as Record<string, unknown> | undefined;\n if (elAttrs) {\n const ft = asString(elAttrs[\"flowable:type\"]);\n if (ft) result.flowableType = ft;\n const fde = asString(elAttrs[\"flowable:delegateExpression\"]);\n if (fde) result.flowableDelegateExpression = fde;\n const fk = asString(elAttrs[\"flowable:formKey\"]);\n if (fk) result.formKey = fk;\n const cu = asString(elAttrs[\"flowable:candidateUsers\"]);\n if (cu) result.candidateUsers = cu;\n const cg = asString(elAttrs[\"flowable:candidateGroups\"]);\n if (cg) result.candidateGroups = cg;\n }\n\n const ext = el.extensionElements as ModdleElement | undefined;\n if (!ext) return result;\n\n const extValues = asElements(ext.values);\n\n // Inline decision table\n const inlineDecision = extValues.find((v) => v.$type === \"aranza:InlineDecision\");\n if (inlineDecision) {\n const hitPolicy = asString(inlineDecision.hitPolicy) ?? \"UNIQUE\";\n const tableJson = asString(inlineDecision.tableJson);\n if (tableJson) {\n try {\n const parsed = JSON.parse(tableJson) as Record<string, unknown>;\n result.inlineDecisionTable = { hitPolicy, ...parsed } as import(\"../elements/types\").InlineDecisionTable;\n } catch {\n // malformed JSON — skip\n }\n }\n }\n\n const taskConfig = extValues.find((v) => v.$type === \"aranza:TaskConfig\");\n if (!taskConfig) return result;\n\n const priority = asString(taskConfig.priority);\n if (priority === \"critical\" || priority === \"high\" || priority === \"medium\" || priority === \"low\") {\n result.priority = priority;\n }\n const owner = asString(taskConfig.owner);\n if (owner) result.owner = owner;\n const sla = asString(taskConfig.sla);\n if (sla) result.sla = sla;\n const connector = asString(taskConfig.connector);\n if (connector) result.connector = connector;\n const action = asString(taskConfig.action);\n if (action) result.action = action;\n // aranza:TaskConfig stores flowableType/flowableDelegateExpression for round-trip fidelity;\n // prefer these over $attrs when both are present.\n const flowableType = asString(taskConfig.flowableType);\n if (flowableType) result.flowableType = flowableType;\n const flowableDelegateExpression = asString(taskConfig.flowableDelegateExpression);\n if (flowableDelegateExpression) result.flowableDelegateExpression = flowableDelegateExpression;\n const decisionRef = asString(taskConfig.decisionRef);\n if (decisionRef) result.decisionRef = decisionRef;\n const formKey = asString(taskConfig.formKey);\n if (formKey) result.formKey = formKey;\n const candidateUsers = asString(taskConfig.candidateUsers);\n if (candidateUsers) result.candidateUsers = candidateUsers;\n const candidateGroups = asString(taskConfig.candidateGroups);\n if (candidateGroups) result.candidateGroups = candidateGroups;\n const dueDate = asString(taskConfig.dueDate);\n if (dueDate) result.dueDate = dueDate;\n const skipExpression = asString(taskConfig.skipExpression);\n if (skipExpression) result.skipExpression = skipExpression;\n const businessCalendarName = asString(taskConfig.businessCalendarName);\n if (businessCalendarName) result.businessCalendarName = businessCalendarName;\n\n return result;\n}\n\nfunction extractCompletionCondition(el: ModdleElement): string | undefined {\n const cc = el.completionCondition as { body?: string } | string | undefined;\n if (!cc) return undefined;\n if (typeof cc === \"string\") return cc.trim() || undefined;\n return asString(cc.body);\n}\n\nfunction extractLoopCharacteristics(el: ModdleElement): Partial<BpmnNodeData> {\n const lc = el.loopCharacteristics as ModdleElement | undefined;\n if (!lc) return {};\n\n if (lc.$type === \"bpmn:StandardLoopCharacteristics\") {\n const loopCondition = asString((lc.loopCondition as ModdleElement | undefined)?.body);\n return { loopType: \"loop\", ...(loopCondition ? { loopCondition } : {}) };\n }\n\n if (lc.$type === \"bpmn:MultiInstanceLoopCharacteristics\") {\n const loopType = lc.isSequential === true ? \"sequentialMultiple\" : \"parallelMultiple\";\n const loopCardinality = asString((lc.loopCardinality as ModdleElement | undefined)?.body);\n const loopCompletionCondition = asString((lc.completionCondition as ModdleElement | undefined)?.body);\n return {\n loopType,\n ...(loopCardinality ? { loopCardinality } : {}),\n ...(loopCompletionCondition ? { loopCompletionCondition } : {}),\n };\n }\n\n return {};\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 (artifacts like TextAnnotation are in el.artifacts)\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = [...asElements(el.flowElements), ...asElements(el.artifacts)];\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 // TextAnnotation uses `text`, not `name`\n const label = elementType === \"Annotation\" ? (asString(el.text) ?? asString(el.name)) : 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 const calledElement = elementType === \"CallActivity\" ? asString(el.calledElement) : undefined;\n const aranzaExt = extractAranzaExtensions(el);\n\n const scriptFormat = elementType === \"ScriptTask\" ? asString(el.scriptFormat) : undefined;\n const script = elementType === \"ScriptTask\" ? asString(el.script) : undefined;\n const completionCondition = elementType === \"AdHocSubProcess\" ? extractCompletionCondition(el) : undefined;\n const loopChars = extractLoopCharacteristics(el);\n const dataObjectRef = elementType === \"DataObjectReference\"\n ? asString((el.dataObjectRef as ModdleElement | undefined)?.id)\n : 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 ...(calledElement ? { calledElement } : {}),\n ...(scriptFormat ? { scriptFormat } : {}),\n ...(script ? { script } : {}),\n ...(completionCondition ? { completionCondition } : {}),\n ...(dataObjectRef ? { dataObjectRef } : {}),\n ...loopChars,\n ...aranzaExt,\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 rawDir = asString(el.associationDirection);\n const associationDirection =\n edgeType === \"association\" && rawDir\n ? (rawDir.toLowerCase() as \"none\" | \"one\" | \"both\")\n : undefined;\n\n // MessageFlow: extract aranza:MessageFlowConfig extension\n let payloadSchema: string | undefined;\n let correlationKey: string | undefined;\n if (edgeType === \"messageFlow\") {\n const mfExt = el.extensionElements as ModdleElement | undefined;\n if (mfExt) {\n const mfConfig = asElements(mfExt.values).find((v) => v.$type === \"aranza:MessageFlowConfig\");\n if (mfConfig) {\n payloadSchema = asString(mfConfig.payloadSchema) || undefined;\n correlationKey = asString(mfConfig.correlationKey) || undefined;\n }\n }\n }\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(documentation ? { documentation } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n ...(associationDirection ? { associationDirection } : {}),\n ...(payloadSchema ? { payloadSchema } : {}),\n ...(correlationKey ? { correlationKey } : {}),\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), ...asElements(processRef.artifacts)],\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 | undefined,\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 ...(poolId ? { 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\n/**\n * Parse a BPMN 2.0 XML string into a ReactFlow-compatible node/edge graph.\n *\n * @param xml - Raw BPMN 2.0 XML string (UTF-8).\n * @returns Parsed nodes, edges, optional definitions set, and any parser warnings.\n * @throws {Error} When the XML cannot be parsed by bpmn-moddle.\n */\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const { BpmnModdle } = await import(\"bpmn-moddle\");\n const moddle = new BpmnModdle({ aranza: ARANZA_DESCRIPTOR });\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, undefined, ctx, nodes);\n walkFlowElements(\n [...asElements(rootEl.flowElements), ...asElements(rootEl.artifacts)],\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 type { BpmnModdle, ModdleElement } from \"bpmn-moddle\";\nimport { ARANZA_DESCRIPTOR } from \"./aranza-descriptor\";\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// ─── AranzaFlows extensionElements builder ────────────────────────────────────\n\nfunction buildAranzaExtensionElements(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n): ModdleElement | null {\n const { priority, owner, sla } = node.data;\n const connector = typeof node.data.connector === \"string\" ? node.data.connector : undefined;\n const action = typeof node.data.action === \"string\" ? node.data.action : undefined;\n const flowableType = typeof node.data.flowableType === \"string\" ? node.data.flowableType : undefined;\n const flowableDelegateExpression =\n typeof node.data.flowableDelegateExpression === \"string\"\n ? node.data.flowableDelegateExpression\n : undefined;\n const decisionRef = typeof node.data.decisionRef === \"string\" ? node.data.decisionRef : undefined;\n const formKey = typeof node.data.formKey === \"string\" ? node.data.formKey : undefined;\n const candidateUsers = typeof node.data.candidateUsers === \"string\" ? node.data.candidateUsers : undefined;\n const candidateGroups = typeof node.data.candidateGroups === \"string\" ? node.data.candidateGroups : undefined;\n const dueDate = typeof node.data.dueDate === \"string\" ? node.data.dueDate : undefined;\n const skipExpression = typeof node.data.skipExpression === \"string\" ? node.data.skipExpression : undefined;\n const businessCalendarName = typeof node.data.businessCalendarName === \"string\" ? node.data.businessCalendarName : undefined;\n\n if (!priority && !owner && !sla && !connector && !action && !flowableType && !flowableDelegateExpression && !decisionRef && !formKey && !candidateUsers && !candidateGroups && !dueDate && !skipExpression && !businessCalendarName) {\n return null;\n }\n\n const configAttrs: Record<string, string> = {};\n if (priority) configAttrs.priority = priority;\n if (owner) configAttrs.owner = owner;\n if (sla) configAttrs.sla = sla;\n if (connector) configAttrs.connector = connector;\n if (action) configAttrs.action = action;\n if (flowableType) configAttrs.flowableType = flowableType;\n if (flowableDelegateExpression) configAttrs.flowableDelegateExpression = flowableDelegateExpression;\n if (decisionRef) configAttrs.decisionRef = decisionRef;\n if (formKey) configAttrs.formKey = formKey;\n if (candidateUsers) configAttrs.candidateUsers = candidateUsers;\n if (candidateGroups) configAttrs.candidateGroups = candidateGroups;\n if (dueDate) configAttrs.dueDate = dueDate;\n if (skipExpression) configAttrs.skipExpression = skipExpression;\n if (businessCalendarName) configAttrs.businessCalendarName = businessCalendarName;\n\n const values: ModdleElement[] = [moddle.create(\"aranza:TaskConfig\", configAttrs)];\n\n const inlineDecisionTable = node.data.inlineDecisionTable;\n if (inlineDecisionTable && typeof inlineDecisionTable === \"object\") {\n const tbl = inlineDecisionTable as unknown as { hitPolicy: string; [k: string]: unknown };\n const { hitPolicy, ...rest } = tbl;\n values.push(\n moddle.create(\"aranza:InlineDecision\", {\n hitPolicy: hitPolicy ?? \"UNIQUE\",\n tableJson: JSON.stringify(rest),\n }),\n );\n }\n\n return moddle.create(\"bpmn:ExtensionElements\", { values });\n}\n\n// ─── Artifact vs flow-element classification ──────────────────────────────────\n\n/** These element types map to bpmn:Artifact and must go in process.artifacts, not flowElements. */\nconst ARTIFACT_ELEMENT_TYPES = new Set<string>([\"Annotation\", \"Group\"]);\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 const ps = typeof e.data?.payloadSchema === \"string\" ? e.data.payloadSchema : undefined;\n const ck = typeof e.data?.correlationKey === \"string\" ? e.data.correlationKey : undefined;\n const mfAttrs: Record<string, unknown> = {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n };\n if (ps || ck) {\n const cfg = moddle.create(\"aranza:MessageFlowConfig\", {\n ...(ps ? { payloadSchema: ps } : {}),\n ...(ck ? { correlationKey: ck } : {}),\n });\n mfAttrs.extensionElements = moddle.create(\"bpmn:ExtensionElements\", { values: [cfg] });\n }\n return moddle.create(\"bpmn:MessageFlow\", mfAttrs);\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 // D2: Ensure every DataObjectReference has a backing DataObject in flowElements.\n // If `data.dataObjectRef` points to an existing node in scope, use that; otherwise\n // auto-generate a synthetic DataObject so the XML is valid.\n const presentDataObjectIds = new Set(\n myNodes.filter((n) => n.data.elementType === \"DataObject\").map((n) => n.id),\n );\n const flowElements: ModdleElement[] = [];\n const artifacts: ModdleElement[] = [];\n\n for (const node of myNodes) {\n if (node.data.elementType === \"DataObjectReference\") {\n const explicitRef = typeof node.data.dataObjectRef === \"string\" ? node.data.dataObjectRef : null;\n if (!explicitRef || !presentDataObjectIds.has(explicitRef)) {\n const syntheticId = `DataObject_${node.id}`;\n if (!presentDataObjectIds.has(syntheticId)) {\n flowElements.push(moddle.create(\"bpmn:DataObject\", { id: syntheticId }));\n presentDataObjectIds.add(syntheticId);\n }\n }\n }\n }\n\n // D1: Route artifact-type nodes to artifacts array, flow nodes to flowElements.\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (!el) continue;\n if (ARTIFACT_ELEMENT_TYPES.has(node.data.elementType)) {\n artifacts.push(el);\n } else {\n flowElements.push(el);\n }\n }\n\n // Sequence flows, associations, and data 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) continue;\n // D1: bpmn:Association is an Artifact — goes in artifacts, not flowElements\n if (edge.data?.edgeType === \"association\") {\n artifacts.push(edgeMeta);\n } else {\n flowElements.push(edgeMeta);\n }\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 ...(artifacts.length > 0 ? { artifacts } : {}),\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 // TextAnnotation uses `text`, not `name`\n if (elementType === \"Annotation\") {\n delete attrs.name;\n attrs.text = 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 if (elementType === \"CallActivity\" && node.data.calledElement) {\n attrs.calledElement = node.data.calledElement;\n }\n\n // D2: DataObjectReference must reference its backing DataObject\n if (elementType === \"DataObjectReference\") {\n const refId = typeof node.data.dataObjectRef === \"string\"\n ? node.data.dataObjectRef\n : `DataObject_${node.id}`;\n attrs.dataObjectRef = { id: refId };\n }\n\n if (elementType === \"ScriptTask\") {\n const scriptFormat = typeof node.data.scriptFormat === \"string\" ? node.data.scriptFormat : undefined;\n const script = typeof node.data.script === \"string\" ? node.data.script : undefined;\n if (scriptFormat) attrs.scriptFormat = scriptFormat;\n if (script) attrs.script = script;\n }\n\n // Flowable execution attributes on ServiceTask — emitted as namespace-prefixed\n // XML attributes (bpmn-moddle passes $attrs through to the serialized output).\n if (elementType === \"ServiceTask\") {\n const flowableAttrs: Record<string, string> = {};\n const flowableType = typeof node.data.flowableType === \"string\" ? node.data.flowableType : undefined;\n const flowableDelegateExpression =\n typeof node.data.flowableDelegateExpression === \"string\"\n ? node.data.flowableDelegateExpression\n : undefined;\n const connector = typeof node.data.connector === \"string\" ? node.data.connector : undefined;\n // Connector tasks use an HTTP-type delegate that reads aranza:TaskConfig at runtime\n if (connector) flowableAttrs[\"flowable:type\"] = \"http\";\n if (flowableType) flowableAttrs[\"flowable:type\"] = flowableType;\n if (flowableDelegateExpression) {\n flowableAttrs[\"flowable:delegateExpression\"] = flowableDelegateExpression;\n }\n if (Object.keys(flowableAttrs).length > 0) attrs.$attrs = flowableAttrs;\n }\n\n const aranzaConfig = buildAranzaExtensionElements(moddle, node);\n if (aranzaConfig) attrs.extensionElements = aranzaConfig;\n\n const isSubProcess =\n elementType === \"SubProcess\" ||\n elementType === \"Transaction\" ||\n elementType === \"EventSubProcess\" ||\n elementType === \"AdHocSubProcess\";\n\n if (isSubProcess) {\n const nested = buildNestedFlowElements(moddle, node, allNodes, allEdges);\n attrs.flowElements = nested.flowElements;\n if (nested.artifacts.length > 0) attrs.artifacts = nested.artifacts;\n if (elementType === \"EventSubProcess\" || node.data.subProcessVariant === \"event\") {\n attrs.triggeredByEvent = true;\n }\n if (elementType === \"AdHocSubProcess\" && typeof node.data.completionCondition === \"string\" && node.data.completionCondition.trim()) {\n attrs.completionCondition = moddle.create(\"bpmn:FormalExpression\", {\n body: node.data.completionCondition.trim(),\n });\n }\n }\n\n // Loop / multi-instance characteristics\n const loopType = typeof node.data.loopType === \"string\" ? node.data.loopType : \"none\";\n if (loopType && loopType !== \"none\") {\n if (loopType === \"loop\") {\n const lcAttrs: Record<string, unknown> = { id: uid(\"LoopChar\", node.id) };\n const loopCondition = typeof node.data.loopCondition === \"string\" ? node.data.loopCondition : undefined;\n if (loopCondition) {\n lcAttrs.loopCondition = moddle.create(\"bpmn:FormalExpression\", { body: loopCondition });\n }\n attrs.loopCharacteristics = moddle.create(\"bpmn:StandardLoopCharacteristics\", lcAttrs);\n } else {\n const isSequential = loopType === \"sequentialMultiple\";\n const lcAttrs: Record<string, unknown> = { id: uid(\"LoopChar\", node.id), isSequential };\n const loopCardinality = typeof node.data.loopCardinality === \"string\" ? node.data.loopCardinality : undefined;\n const loopCompletionCondition = typeof node.data.loopCompletionCondition === \"string\" ? node.data.loopCompletionCondition : undefined;\n if (loopCardinality) {\n lcAttrs.loopCardinality = moddle.create(\"bpmn:FormalExpression\", { body: loopCardinality });\n }\n if (loopCompletionCondition) {\n lcAttrs.completionCondition = moddle.create(\"bpmn:FormalExpression\", { body: loopCompletionCondition });\n }\n attrs.loopCharacteristics = moddle.create(\"bpmn:MultiInstanceLoopCharacteristics\", lcAttrs);\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): { flowElements: ModdleElement[]; artifacts: 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 const artifacts: ModdleElement[] = [];\n\n // D2: Synthetic DataObjects for DataObjectReferences inside the subprocess\n const presentDataObjectIds = new Set(\n childNodes.filter((n) => n.data.elementType === \"DataObject\").map((n) => n.id),\n );\n for (const node of childNodes) {\n if (node.data.elementType === \"DataObjectReference\") {\n const explicitRef = typeof node.data.dataObjectRef === \"string\" ? node.data.dataObjectRef : null;\n if (!explicitRef || !presentDataObjectIds.has(explicitRef)) {\n const syntheticId = `DataObject_${node.id}`;\n if (!presentDataObjectIds.has(syntheticId)) {\n flowElements.push(moddle.create(\"bpmn:DataObject\", { id: syntheticId }));\n presentDataObjectIds.add(syntheticId);\n }\n }\n }\n }\n\n for (const child of childNodes) {\n const element = buildFlowElement(moddle, child, allNodes, allEdges);\n if (!element) continue;\n if (ARTIFACT_ELEMENT_TYPES.has(child.data.elementType)) {\n artifacts.push(element);\n } else {\n flowElements.push(element);\n }\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) continue;\n if (edge.data?.edgeType === \"association\") {\n artifacts.push(element);\n } else {\n flowElements.push(element);\n }\n }\n\n return { flowElements, artifacts };\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 // bpmn:Association.associationDirection uses Title-case values\n if (edge.data.edgeType === \"association\" && edge.data.associationDirection && edge.data.associationDirection !== \"none\") {\n attrs.associationDirection = edge.data.associationDirection === \"both\" ? \"Both\" : \"One\";\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\n/**\n * Serialize a ReactFlow BPMN graph to a BPMN 2.0 XML string.\n *\n * @param nodes - ReactFlow nodes carrying {@link BpmnNodeData}.\n * @param edges - ReactFlow edges carrying {@link BpmnEdgeData}.\n * @param opts - Optional export options (process id/name, formatting, variables).\n * @returns Formatted BPMN 2.0 XML string.\n */\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const { BpmnModdle } = await import(\"bpmn-moddle\");\n const moddle = new BpmnModdle({ aranza: ARANZA_DESCRIPTOR });\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\n/**\n * Initialize a new token-based simulation from all root-level start events.\n *\n * @param diagram - The BPMN graph to simulate (nodes + edges).\n * @param initialVariables - Optional process-level variable values to seed.\n * @returns Initial {@link SimulationState} with tokens placed at all start events.\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\n/**\n * Advance the simulation by one step, automatically propagating all tokens\n * through automated elements (gateways, auto-completing tasks, etc.).\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @returns Updated state after all automatic transitions are resolved.\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\n/**\n * Manually fire an element that requires user interaction (e.g. UserTask,\n * IntermediateCatchEvent, BoundaryEvent). Consumes the token at the element,\n * emits it along outgoing edges, then calls {@link tick} to continue automatic\n * propagation.\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @param elementId - Id of the element to fire.\n * @param variables - Optional variables to set before firing.\n * @returns Updated state after the element fires and all automatic steps resolve.\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\n/**\n * Return element ids that can be manually fired in the current simulation step.\n * Includes tasks that require human interaction, intermediate catch events, and\n * boundary events attached to tasks that currently hold a token.\n *\n * @param diagram - The BPMN graph.\n * @param state - Current simulation state.\n * @returns Array of element ids ready to be passed to {@link fire}.\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 createSimulation,\n tick,\n fire,\n getFireable,\n} from \"./index\";\nimport type { SimDiagram, SimEdge } from \"./index\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\n/**\n * Branch weights for one gateway.\n * Maps each outgoing sequence-flow edge ID to a non-negative weight.\n * Weights are normalised internally so they need not sum to any specific value.\n * An edge absent from the map inherits weight 1.\n */\nexport type GatewayWeights = Record<string, number>;\n\nexport interface BatchSimConfig {\n /**\n * Number of process instances to simulate.\n * @default 100\n */\n instances?: number;\n\n /**\n * Gateway branch weights. Keys are gateway node IDs; values map\n * each outgoing edge ID to its relative weight.\n * Applies to ExclusiveGateway and InclusiveGateway nodes.\n * Gateways absent from this map fall back to condition evaluation\n * or first-edge behaviour.\n */\n gatewayWeights?: Record<string, GatewayWeights>;\n\n /**\n * Simulated activity duration per node in milliseconds.\n * Used to compute the `totalDurationMs` load indicator:\n * totalDurationMs = visits × nodeDurations[nodeId]\n * Nodes absent from this map contribute 0 ms.\n */\n nodeDurations?: Record<string, number>;\n\n /**\n * Safety limit: maximum tick iterations per instance.\n * Prevents infinite-loop diagrams from blocking indefinitely.\n * @default 500\n */\n maxSteps?: number;\n}\n\nexport interface NodeSimStats {\n /**\n * Number of instances in which at least one token passed through\n * this node. Value in [0, config.instances].\n */\n visits: number;\n\n /**\n * visits × nodeDurations[nodeId].\n * Higher values indicate heavier aggregate load on this activity.\n */\n totalDurationMs: number;\n\n /**\n * Highest number of concurrent tokens at this node observed within\n * any single instance. Values > 1 occur inside parallel branches.\n */\n peakConcurrency: number;\n}\n\nexport interface BatchSimResult {\n /** Per-node aggregated statistics, keyed by node ID. */\n nodeStats: Record<string, NodeSimStats>;\n\n /** Instances that reached the EndEvent(s) successfully. */\n completed: number;\n\n /** Instances that stalled with tokens still present (deadlock). */\n deadlocked: number;\n\n /** Total instances attempted — equals `config.instances`. */\n total: number;\n\n /**\n * Mean number of simulation steps across completed instances.\n * Proxy for relative cycle time (higher = longer path).\n * 0 when no instance completed.\n */\n avgSteps: number;\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\n/** Weighted random selection from a list of edge IDs. */\nfunction weightedChoice(edgeIds: string[], weights: GatewayWeights): string {\n if (edgeIds.length === 0) return \"\";\n const w = edgeIds.map((id) => Math.max(0, weights[id] ?? 1));\n const total = w.reduce((a, b) => a + b, 0);\n if (total === 0) return edgeIds[0];\n\n let r = Math.random() * total;\n for (let i = 0; i < edgeIds.length; i++) {\n r -= w[i];\n if (r <= 0) return edgeIds[i];\n }\n return edgeIds[edgeIds.length - 1];\n}\n\n/**\n * Builds a modified diagram where each weighted gateway's outgoing\n * sequence edges carry a synthetic condition expression keyed to a\n * deterministic per-instance variable `__g{i}`.\n *\n * This lets the existing ExclusiveGateway evaluator (condition-based)\n * implement probabilistic branching without touching the engine core.\n */\nfunction buildBatchDiagram(\n diagram: SimDiagram,\n gatewayWeights: Record<string, GatewayWeights>,\n gwVarMap: Record<string, string>,\n): SimDiagram {\n const patchedEdges: SimEdge[] = diagram.edges.map((edge) => {\n const gwId = edge.source;\n if (!(gwId in gatewayWeights) || edge.type !== \"sequenceFlow\") return edge;\n\n const varName = gwVarMap[gwId];\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const idx = outEdges.findIndex((e) => e.id === edge.id);\n if (idx === -1) return edge;\n\n return {\n ...edge,\n conditionExpression: `\\${${varName} == ${idx}}`,\n isDefault: false,\n };\n });\n\n return { nodes: diagram.nodes, edges: patchedEdges };\n}\n\ninterface InstanceResult {\n /** All node IDs touched by any token during this instance. */\n visitedNodes: Set<string>;\n /** Peak concurrent-token count per node observed during this instance. */\n peakPerNode: Record<string, number>;\n /** Final simulation step count. */\n steps: number;\n completed: boolean;\n}\n\n/**\n * Runs a single process instance to completion (or until the safety\n * limit is reached). Manual elements (Tasks, CatchEvents) are fired\n * immediately — simulating instant activity completion — so the\n * run is fully automated.\n */\nfunction runOneInstance(\n diagram: SimDiagram,\n initialVars: Record<string, string | number | boolean>,\n maxSteps: number,\n): InstanceResult {\n let state = createSimulation(diagram, initialVars);\n state = tick(diagram, state);\n\n const visitedNodes = new Set<string>();\n const peakPerNode: Record<string, number> = {};\n\n function snapshot() {\n // Track which nodes are occupied and peak concurrency.\n const counts: Record<string, number> = {};\n for (const token of state.tokens) {\n visitedNodes.add(token.elementId);\n counts[token.elementId] = (counts[token.elementId] ?? 0) + 1;\n }\n for (const [nodeId, c] of Object.entries(counts)) {\n if (c > (peakPerNode[nodeId] ?? 0)) peakPerNode[nodeId] = c;\n }\n }\n\n snapshot();\n\n let steps = 0;\n while (state.status === \"running\" && steps < maxSteps) {\n const fireable = getFireable(diagram, state);\n if (fireable.length === 0) break;\n\n for (const id of fireable) {\n if (state.status !== \"running\") break;\n state = fire(diagram, state, id);\n snapshot();\n }\n steps++;\n }\n\n // Capture all nodes mentioned in the log (covers automatics that\n // never appear as token positions but do appear in log entries).\n for (const entry of state.log) {\n visitedNodes.add(entry.elementId);\n }\n\n return {\n visitedNodes,\n peakPerNode,\n steps: state.step,\n completed: state.status === \"completed\",\n };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * Run `config.instances` process instances through the diagram and\n * aggregate per-node statistics for bottleneck analysis.\n *\n * Tasks are completed instantly (no wait time); gateway choices follow\n * either the weights in `config.gatewayWeights` or the existing\n * condition/default/first-edge logic when no weights are specified.\n *\n * @param diagram - The BPMN graph to simulate.\n * @param config - Simulation parameters.\n * @returns Aggregated {@link BatchSimResult}.\n *\n * @example\n * ```ts\n * const result = runBatchSimulation(diagram, {\n * instances: 200,\n * gatewayWeights: {\n * \"gw_approve\": { \"edge_approved\": 70, \"edge_rejected\": 30 },\n * },\n * nodeDurations: { \"task_review\": 3600_000 }, // 1 hour\n * });\n * const topBottleneck = Object.entries(result.nodeStats)\n * .sort((a, b) => b[1].totalDurationMs - a[1].totalDurationMs)[0];\n * ```\n */\nexport function runBatchSimulation(\n diagram: SimDiagram,\n config: BatchSimConfig = {},\n): BatchSimResult {\n const n = Math.max(1, config.instances ?? 100);\n const maxSteps = Math.max(1, config.maxSteps ?? 500);\n const gwWeights = config.gatewayWeights ?? {};\n const nodeDurations = config.nodeDurations ?? {};\n\n // Map each weighted gateway to a synthetic variable name (__g0, __g1, …)\n const gwVarMap: Record<string, string> = {};\n Object.keys(gwWeights).forEach((gwId, i) => {\n gwVarMap[gwId] = `__g${i}`;\n });\n\n const batchDiagram =\n Object.keys(gwWeights).length > 0\n ? buildBatchDiagram(diagram, gwWeights, gwVarMap)\n : diagram;\n\n const nodeStats: Record<string, NodeSimStats> = {};\n\n function node(id: string): NodeSimStats {\n if (!nodeStats[id]) {\n nodeStats[id] = { visits: 0, totalDurationMs: 0, peakConcurrency: 0 };\n }\n return nodeStats[id];\n }\n\n let completed = 0;\n let deadlocked = 0;\n let totalSteps = 0;\n\n for (let i = 0; i < n; i++) {\n // Resolve branch choices for this instance based on configured weights.\n const instanceVars: Record<string, string | number | boolean> = {};\n for (const [gwId, varName] of Object.entries(gwVarMap)) {\n const outEdges = diagram.edges.filter(\n (e) => e.source === gwId && e.type === \"sequenceFlow\",\n );\n const edgeIds = outEdges.map((e) => e.id);\n const chosen = weightedChoice(edgeIds, gwWeights[gwId]);\n instanceVars[varName] = outEdges.findIndex((e) => e.id === chosen);\n }\n\n const result = runOneInstance(batchDiagram, instanceVars, maxSteps);\n\n if (result.completed) {\n completed++;\n totalSteps += result.steps;\n } else {\n deadlocked++;\n }\n\n // Accumulate per-node stats.\n for (const nodeId of result.visitedNodes) {\n const s = node(nodeId);\n s.visits++;\n s.totalDurationMs += nodeDurations[nodeId] ?? 0;\n }\n\n for (const [nodeId, peak] of Object.entries(result.peakPerNode)) {\n const s = node(nodeId);\n if (peak > s.peakConcurrency) s.peakConcurrency = peak;\n }\n }\n\n return {\n nodeStats,\n completed,\n deadlocked,\n total: n,\n avgSteps: completed > 0 ? Math.round(totalSteps / completed) : 0,\n };\n}\n","import {\n addNode,\n connectNodes,\n copyElements,\n createModelingRules,\n createSelectionState,\n createUniqueId,\n DiagramEventBus,\n createDiagramEventBus,\n executeCommand,\n executeCommands,\n findContainingNode,\n getNode,\n getNodeAbsolutePosition,\n getNodeCenterPosition,\n getNodeSize,\n getOutgoingEdges,\n getIncomingEdges,\n groupNodes,\n getNodeTabOrder,\n normalizeDiagramState,\n pasteElements,\n patchEdge,\n patchNode,\n moveNode,\n persistCommandHistory,\n removeElements,\n replaceNode,\n reparentNode,\n resizeNode,\n resizeNodeByHandle,\n restoreCommandHistory,\n setSelection,\n toRelativeNodePosition,\n computeSmartGuides,\n LayoutCache,\n createLayoutCache,\n withLayoutCache,\n getEdgeLabelLayout,\n type CommandStackState,\n type ClipboardState,\n type ConnectionValidator,\n type DiagramCommand,\n type DiagramSnapshot,\n type DiagramState,\n type EdgeLabelLayout,\n type EdgeLabelOffsetOptions,\n type LayoutCacheOptions,\n type LayoutFn,\n type ModelingRules,\n type ResizeHandlePosition,\n type SelectionState,\n type SmartGuideResult,\n type Viewport,\n} from \"@aranzatech/diagrams-core\";\nimport {\n createDiagramDocument,\n deserializeDiagram,\n deserializeDiagramSnapshot,\n parseDiagramDocument,\n serializeDiagram,\n serializeDiagramSnapshot,\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>;\nexport type BpmnDiagramSnapshot = DiagramSnapshot<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnEventBus = DiagramEventBus<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 interface GroupAsBpmnSubProcessOptions {\n groupId?: string;\n nodeIds: string[];\n label?: string;\n padding?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ResizeBpmnNodeByHandleOptions {\n id: string;\n handle: ResizeHandlePosition;\n dx: number;\n dy: 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\n/** Returns true for every element type that can be dragged into a Pool or Lane container. */\nexport function isBpmnDroppableInContainer(type: BpmnElementType): boolean {\n return (\n isBpmnProcessNode(type) ||\n type === \"Annotation\" ||\n type === \"Group\" ||\n type === \"DataObject\" ||\n type === \"DataObjectReference\" ||\n type === \"DataStore\" ||\n type === \"DataStoreReference\"\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\" || isBpmnDroppableInContainer(childType)\n ? true\n : \"Pools can contain lanes, BPMN process nodes, annotations, groups, and data elements.\";\n }\n if (parentType === \"Lane\") {\n return isBpmnDroppableInContainer(childType)\n ? true\n : \"Lanes can only contain BPMN process nodes, annotations, groups, and data elements.\";\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\n/**\n * Create a {@link DiagramCommand} that adds a new BPMN element to the diagram.\n *\n * @param options - Element type, id, position, label, and optional parent/data overrides.\n * @returns Undoable command to be executed by {@link runBpmnCommand}.\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\n/**\n * Create a {@link DiagramCommand} that connects two BPMN elements with the\n * most appropriate edge type (auto-inferred when `edgeType` is omitted).\n * Validates the connection against BPMN 2.0 rules before executing.\n *\n * @param options - Source/target ids, optional edge type, label, and data overrides.\n * @returns Undoable command, throws when the connection violates BPMN rules.\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\n// Half-size of a BoundaryEvent (36×36) — used to convert center↔top-left coords.\nconst BE_HALF = 18;\n\nfunction clampBoundaryEventsAfterResize(\n state: Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0],\n hostId: string,\n oldW: number,\n oldH: number,\n newW: number,\n newH: number,\n): Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0] {\n const boundaryEvents = state.nodes.filter(\n (n) => n.data.elementType === \"BoundaryEvent\" && n.parentId === hostId,\n );\n\n let next = state;\n for (const be of boundaryEvents) {\n const px = be.position?.x ?? 0;\n const py = be.position?.y ?? 0;\n const cx = px + BE_HALF;\n const cy = py + BE_HALF;\n\n const distLeft = Math.abs(cx);\n const distRight = Math.abs(cx - oldW);\n const distTop = Math.abs(cy);\n const distBottom = Math.abs(cy - oldH);\n const minDist = Math.min(distLeft, distRight, distTop, distBottom);\n\n let newCx: number;\n let newCy: number;\n\n if (minDist === distBottom) {\n newCy = newH;\n newCx = Math.min(Math.max(cx, BE_HALF), newW - BE_HALF);\n } else if (minDist === distRight) {\n newCx = newW;\n newCy = Math.min(Math.max(cy, BE_HALF), newH - BE_HALF);\n } else if (minDist === distTop) {\n newCy = 0;\n newCx = Math.min(Math.max(cx, BE_HALF), newW - BE_HALF);\n } else {\n newCx = 0;\n newCy = Math.min(Math.max(cy, BE_HALF), newH - BE_HALF);\n }\n\n next = moveNode(next, be.id, { x: newCx - BE_HALF, y: newCy - BE_HALF });\n }\n\n return next;\n}\n\n/**\n * Create a {@link DiagramCommand} that resizes a BPMN element, enforcing\n * minimum dimensions per spec. Boundary events attached to the resized element\n * are automatically repositioned to stay on the new border.\n *\n * @param options - Target element id, optional new width/height.\n * @returns Undoable command, throws when the element is not resizable.\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\n const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const clampedW =\n options.width === undefined ? undefined : Math.max(size.minWidth, options.width);\n const clampedH =\n options.height === undefined ? undefined : Math.max(size.minHeight, options.height);\n\n const resized = resizeNode(state, options.id, {\n width: clampedW,\n height: clampedH,\n } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? clampedW ?? oldW;\n const newH = updatedNode?.height ?? clampedH ?? oldH;\n\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\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\"> & { viewport?: Viewport } = {},\n): string {\n const { viewport, ...docOptions } = options;\n const normalized = normalizeDiagramState(state);\n if (viewport) {\n return serializeDiagramSnapshot(\n { nodes: normalized.nodes, edges: normalized.edges, viewport },\n { ...docOptions, diagramType: \"bpmn\" },\n );\n }\n return serializeDiagram(normalized, { ...docOptions, diagramType: \"bpmn\" });\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\n/**\n * Deserialize a BPMN diagram document to a snapshot that includes the persisted\n * viewport. Returns `viewport: { x:0, y:0, zoom:1 }` when none was saved.\n */\nexport function deserializeBpmnDiagramSnapshot(json: string): BpmnDiagramSnapshot {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagramSnapshot<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\nexport function createBpmnEventBus(): BpmnEventBus {\n return createDiagramEventBus<BpmnRFNode, BpmnRFEdge>();\n}\n\nexport function runBpmnCommand(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n command: DiagramCommand<BpmnRFNode, BpmnRFEdge>,\n bus?: BpmnEventBus,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const next = executeCommand(stack, command);\n bus?.emit(\"command:executed\", {\n commandId: command.id,\n ...(command.label !== undefined ? { label: command.label } : {}),\n state: next.current,\n });\n return next;\n}\n\nexport function runBpmnCommands(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n commands: Array<DiagramCommand<BpmnRFNode, BpmnRFEdge>>,\n options: { id?: string; label?: string; bus?: BpmnEventBus } = {},\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const { bus, ...execOptions } = options;\n const next = executeCommands(stack, commands, execOptions);\n bus?.emit(\"command:executed\", {\n commandId: execOptions.id ?? \"bpmn.batch\",\n ...(execOptions.label !== undefined ? { label: execOptions.label } : {}),\n state: next.current,\n });\n return next;\n}\n\n/**\n * Persist BPMN command history to localStorage under a per-diagram key.\n * Safe to call in SSR environments — writes are silently skipped.\n */\nexport function persistBpmnHistory(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n diagramId: string,\n): void {\n persistCommandHistory(stack, `bpmn.history.${diagramId}`);\n}\n\n/**\n * Restore BPMN command history from localStorage. Returns `null` when no\n * history exists for the given diagram id or when called server-side.\n */\nexport function restoreBpmnHistory(\n diagramId: string,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> | null {\n return restoreCommandHistory<BpmnRFNode, BpmnRFEdge>(`bpmn.history.${diagramId}`);\n}\n\n/**\n * Compute smart alignment guides for nodes being dragged on a BPMN canvas.\n * Excludes boundary events, lanes, and pools from guide sources.\n * When `poolId` is given, only considers nodes within that pool as static references.\n */\nexport function computeBpmnSmartGuides(\n movingNodes: BpmnRFNode[],\n state: BpmnDiagramState,\n poolId?: string,\n): SmartGuideResult {\n const movingIds = new Set(movingNodes.map((n) => n.id));\n const staticNodes = state.nodes.filter((n) => {\n if (movingIds.has(n.id)) return false;\n const et = n.data.elementType;\n if (et === \"BoundaryEvent\" || et === \"Lane\" || et === \"Pool\") return false;\n if (poolId) {\n const inPool =\n n.parentId === poolId ||\n (n.parentId !== undefined && getNode(state, n.parentId)?.parentId === poolId);\n if (!inPool) return false;\n }\n return true;\n });\n return computeSmartGuides(movingNodes, staticNodes);\n}\n\n/**\n * Create a command that groups selected BPMN nodes into a new SubProcess element.\n * Validates that every node can be contained by a SubProcess before executing.\n */\nexport function groupAsBpmnSubProcessCommand(\n options: GroupAsBpmnSubProcessOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.groupAsSubProcess.${options.groupId ?? options.nodeIds.join(\".\")}`,\n label: \"Group as SubProcess\",\n execute: (state) => {\n for (const nodeId of options.nodeIds) {\n const node = getNode(state, nodeId);\n if (!node) continue;\n const result = canContainBpmnElement(\"SubProcess\", node.data.elementType);\n if (result !== true) throw new Error(result);\n }\n const groupId = options.groupId ?? createUniqueId(\"subprocess\", state.nodes.map((n) => n.id));\n const groupNode = createBpmnNode({\n id: groupId,\n elementType: \"SubProcess\",\n position: { x: 0, y: 0 },\n ...(options.label !== undefined ? { label: options.label } : {}),\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n return groupNodes(state, {\n groupNode,\n nodeIds: options.nodeIds,\n padding: options.padding ?? 20,\n });\n },\n };\n}\n\n/**\n * Return node IDs in logical tab order for keyboard navigation.\n * When `poolId` is given, scopes the order to nodes within that pool and its lanes.\n */\nexport function getBpmnTabOrder(\n state: BpmnDiagramState,\n poolId?: string,\n): string[] {\n if (!poolId) return getNodeTabOrder(state);\n const pool = getNode(state, poolId);\n if (!pool) return [];\n const scopeIds = state.nodes\n .filter((n) => {\n if (n.id === poolId) return false;\n if (n.parentId === poolId) return true;\n const parent = getNode(state, n.parentId ?? \"\");\n return parent?.parentId === poolId;\n })\n .map((n) => n.id);\n return getNodeTabOrder(state, scopeIds);\n}\n\n/**\n * Compute the label layout (position + angle) for a BPMN edge.\n * Uses the edge's stored routing points when available; falls back to\n * the straight line between source and target centers.\n */\nexport function getBpmnEdgeLabelLayout(\n edgeId: string,\n state: BpmnDiagramState,\n options?: EdgeLabelOffsetOptions,\n): EdgeLabelLayout | null {\n const edge = state.edges.find((e) => e.id === edgeId);\n if (!edge) return null;\n const routingPoints = (edge.data?.routingPoints ?? []) as Array<{ x: number; y: number }>;\n if (routingPoints.length >= 2) {\n return getEdgeLabelLayout(routingPoints, options);\n }\n const sourceNode = getNode(state, edge.source);\n const targetNode = getNode(state, edge.target);\n if (!sourceNode || !targetNode) return null;\n const sourceAbsPos = getBpmnNodeAbsolutePosition(state, edge.source) ?? sourceNode.position;\n const targetAbsPos = getBpmnNodeAbsolutePosition(state, edge.target) ?? targetNode.position;\n const sourceCenter = getNodeCenterPosition(sourceAbsPos, getBpmnNodeSize(sourceNode));\n const targetCenter = getNodeCenterPosition(targetAbsPos, getBpmnNodeSize(targetNode));\n return getEdgeLabelLayout([sourceCenter, targetCenter], options);\n}\n\n/**\n * Create a command that resizes a BPMN element by dragging one of its 8 handles.\n * Boundary events attached to the resized element are automatically repositioned.\n *\n * @param options - Target element id, handle position, and pixel delta.\n * @returns Undoable command.\n */\nexport function resizeBpmnNodeByHandleCommand(\n options: ResizeBpmnNodeByHandleOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resizeByHandle.${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 const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const resized = resizeNodeByHandle(state, {\n id: options.id,\n handle: options.handle,\n dx: options.dx,\n dy: options.dy,\n constraints: { minWidth: size.minWidth, minHeight: size.minHeight },\n });\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? oldW;\n const newH = updatedNode?.height ?? oldH;\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\n },\n };\n}\n\n/**\n * Create a layout cache for BPMN auto-layout calls.\n * Pass the returned cache to `withBpmnLayoutCache` to memoize identical topologies.\n */\nexport function createBpmnLayoutCache(options?: LayoutCacheOptions): LayoutCache {\n return createLayoutCache(options);\n}\n\n/**\n * Wrap an ELK-based layout function with BPMN topology caching so that diagrams\n * with unchanged node/edge structure are not re-laid-out unnecessarily.\n */\nexport function withBpmnLayoutCache(\n layoutFn: LayoutFn<BpmnRFNode, BpmnRFEdge>,\n cache?: LayoutCache,\n): LayoutFn<BpmnRFNode, BpmnRFEdge> {\n return withLayoutCache(layoutFn, cache ?? createLayoutCache());\n}\n"]}