@aranzatech/diagrams-bpmn 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/elements/catalog.ts","../src/elements/guards.ts","../src/nodes/shared/BpmnHandles.tsx","../src/nodes/shared/theme.ts","../src/nodes/shared/BpmnLabel.tsx","../src/nodes/shared/EventMarker.tsx","../src/nodes/StartEventNode.tsx","../src/nodes/EndEventNode.tsx","../src/nodes/IntermediateEventNode.tsx","../src/nodes/shared/TaskIcon.tsx","../src/nodes/shared/TaskMarkers.tsx","../src/nodes/TaskNode.tsx","../src/nodes/GatewayNode.tsx","../src/nodes/SubProcessNode.tsx","../src/nodes/PoolNode.tsx","../src/nodes/LaneNode.tsx","../src/nodes/AnnotationNode.tsx","../src/nodes/GroupNode.tsx","../src/nodes/DataNode.tsx","../src/nodes/DataRefNode.tsx","../src/nodes/ConversationNode.tsx","../src/nodes/ChoreographyNode.tsx","../src/nodes/nodeTypes.ts","../src/edges/path.ts","../src/edges/SequenceFlowEdge.tsx","../src/edges/MessageFlowEdge.tsx","../src/edges/AssociationEdge.tsx","../src/edges/DataAssociationEdge.tsx","../src/edges/ConversationLinkEdge.tsx","../src/edges/edgeTypes.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/flowable/adapter.ts"],"names":["Position","jsxs","Fragment","jsx","Handle","SIZE","CX","R","HEADER_HEIGHT","HEADER_WIDTH","HANDLE_STYLE","H","foldPath","W","FOLD","DS_W","DS_H","RX","RY","pointsToSvgPath","getOrthogonalPath","BaseEdge","EdgeLabelRenderer","getStraightPath","laneSet","BpmnModdle","GATEWAY_TYPES","TASK_TYPES","next"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BpmnElementType, BpmnElementMeta } from \"./types\";\n\nexport const BPMN_ELEMENT_CATALOG: Record<BpmnElementType, BpmnElementMeta> = {\n // ─── Events ──────────────────────────────────────────────────────────────────\n StartEvent: {\n label: \"Start Event\",\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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","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 stroke: \"#404040\",\n strokeSelected: \"#1a56db\",\n strokeWidth: 1.5,\n strokeWidthSelected: 2.5,\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontSize: 11,\n labelColor: \"#1a1a1a\",\n handleColor: \"#8c8c8c\",\n handleColorSelected: \"#1a56db\",\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","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 { 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\" }}>\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 { 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\" }}>\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 { 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 ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\" }}>\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 ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\" }}>\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 ?? \"none\";\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\" }}>\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 \"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 { resolveStroke, resolveStrokeWidth, BPMN_THEME } 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 ?? BPMN_THEME.fill,\n border: `${borderWidth}px solid ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\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 }}\n >\n {/* Task type icon — top-left corner */}\n {d.elementType && d.elementType !== \"Task\" && (\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 { 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\" }}>\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 } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskMarkers, AdhocMarker } from \"./shared/TaskMarkers\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\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 = d.subProcessVariant ?? \"embedded\";\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 ?? \"#f8faff\",\n border: `${sw}px ${borderStyle} ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Transaction sub-process: inner border inset 4px */}\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 */}\n {variant === \"adhoc\" && (\n <AdhocMarker stroke={stroke} />\n )}\n\n {/* Instance markers (loop, multi-instance, compensation) */}\n {hasMarkers && (\n <TaskMarkers markers={d.markers!} stroke={stroke} />\n )}\n\n <BpmnHandles variant=\"all\" />\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\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 ?? \"#f5f7ff\";\n const headerFill = d.color?.fill ?? \"#edf0ff\";\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n <div\n aria-label=\"pool-header\"\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 }}\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Vertical header */}\n <div\n aria-label=\"pool-header\"\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 }}\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 { resolveStroke, resolveStrokeWidth, BPMN_THEME } 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 ?? \"#fafbff\";\n const headerFill = d.color?.fill ?? \"#f0f3ff\";\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n <div\n aria-label=\"lane-header\"\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 }}\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Horizontal header */}\n <div\n aria-label=\"lane-header\"\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 }}\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 { 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\" }}>\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\" }}>\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 { 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\" }}>\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\" }}>\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\" }}>\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\" }}>\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\n SubProcess: SubProcessNode,\n Pool: PoolNode,\n Lane: LaneNode,\n // Artifacts\n Annotation: AnnotationNode,\n Group: GroupNode,\n // Data\n DataObject: DataObjectNode,\n DataObjectReference: DataObjectReferenceNode,\n DataInput: DataInputNode,\n DataOutput: DataOutputNode,\n DataStore: DataStoreNode,\n DataStoreReference: DataStoreReferenceNode,\n // Conversation (§12)\n Conversation: ConversationNode,\n SubConversation: SubConversationNode,\n CallConversation: CallConversationNode,\n // Choreography (§11)\n ChoreographyTask: ChoreographyTaskNode,\n SubChoreography: SubChoreographyNode,\n CallChoreography: CallChoreographyNode,\n};\n","import type { Position } from \"@xyflow/react\";\n\nexport interface EdgePoint {\n x: number;\n y: number;\n}\n\nexport function getEdgePoints(\n sourceX: number,\n sourceY: number,\n targetX: number,\n targetY: number,\n routingPoints?: EdgePoint[],\n): EdgePoint[] {\n if (routingPoints && routingPoints.length >= 2) {\n return routingPoints;\n }\n\n return [\n { x: sourceX, y: sourceY },\n { x: targetX, y: targetY },\n ];\n}\n\nexport function getPolylineMidpoint(points: EdgePoint[]): EdgePoint {\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return points[0];\n\n let total = 0;\n const lengths: number[] = [];\n\n for (let i = 1; i < points.length; i += 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n const length = Math.hypot(dx, dy);\n lengths.push(length);\n total += length;\n }\n\n const halfway = total / 2;\n let traversed = 0;\n\n for (let i = 1; i < points.length; i += 1) {\n const length = lengths[i - 1];\n if (traversed + length >= halfway) {\n const ratio = length === 0 ? 0 : (halfway - traversed) / length;\n return {\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\n };\n }\n traversed += length;\n }\n\n return points[points.length - 1];\n}\n\nexport function getSegmentAngle(points: EdgePoint[]): number {\n if (points.length < 2) return 0;\n const from = points[0];\n const to = points[1];\n return Math.atan2(to.y - from.y, to.x - from.x);\n}\n\nexport function getDefaultFlowMarkerPath(points: EdgePoint[]): string | null {\n if (points.length < 2) return null;\n\n const start = points[0];\n const angle = getSegmentAngle(points);\n const anchorX = start.x + Math.cos(angle) * 16;\n const anchorY = start.y + Math.sin(angle) * 16;\n const normalAngle = angle + Math.PI / 2;\n const half = 7;\n\n const x1 = anchorX + Math.cos(normalAngle) * half;\n const y1 = anchorY + Math.sin(normalAngle) * half;\n const x2 = anchorX - Math.cos(normalAngle) * half;\n const y2 = anchorY - Math.sin(normalAngle) * half;\n\n return `M ${x1} ${y1} L ${x2} ${y2}`;\n}\n\nexport function fallbackAssociationDirection(\n sourcePosition?: Position,\n targetPosition?: Position,\n): \"horizontal\" | \"vertical\" {\n if (sourcePosition === \"left\" || sourcePosition === \"right\" || targetPosition === \"left\" || targetPosition === \"right\") {\n return \"horizontal\";\n }\n\n return \"vertical\";\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getDefaultFlowMarkerPath, getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function SequenceFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n const defaultMarkerPath = d?.isDefault ? getDefaultFlowMarkerPath(polyline) : null;\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n {...(d?.conditionExpression ? { markerStart: \"url(#bpmn-diamond-open)\" } : {})}\n markerEnd={markerEnd ?? \"url(#bpmn-arrow)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n ...(style ?? {}),\n }}\n />\n {defaultMarkerPath && (\n <path\n d={defaultMarkerPath}\n fill=\"none\"\n stroke={selected ? \"#1a56db\" : \"#404040\"}\n strokeWidth={selected ? 2 : 1.5}\n strokeLinecap=\"round\"\n data-testid=\"bpmn-default-flow-marker\"\n />\n )}\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function MessageFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n markerStart=\"url(#bpmn-circle-open)\"\n markerEnd={markerEnd ?? \"url(#bpmn-arrow-open)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: \"6 3\",\n ...(style ?? {}),\n }}\n />\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function AssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const direction = d?.associationDirection ?? \"none\";\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n {...(direction === \"both\" ? { markerStart: \"url(#bpmn-arrow-open)\" } : {})}\n {...(direction === \"one\" || direction === \"both\" ? { markerEnd: \"url(#bpmn-arrow-open)\" } : {})}\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function DataAssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n markerEnd=\"url(#bpmn-arrow-open)\"\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import type { EdgeProps } from \"@xyflow/react\";\nimport { BaseEdge, getStraightPath } from \"@xyflow/react\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { BPMN_THEME } from \"../nodes/shared/theme\";\n\n// BPMN 2.0 §12.2 — ConversationLink is rendered as a double line.\n// Technique: draw the path twice — wide stroke then narrower background —\n// to produce a parallel-line effect without complex path offsets.\n\nexport function ConversationLinkEdge({\n sourceX, sourceY, targetX, targetY,\n data, markerEnd,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const stroke = BPMN_THEME.stroke;\n\n const [path] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n\n return (\n <g>\n {/* Outer (wide) stroke */}\n <BaseEdge\n path={path}\n {...(markerEnd ? { markerEnd } : {})}\n style={{ stroke, strokeWidth: 5, fill: \"none\" }}\n />\n {/* Inner white gap — creates double-line visual */}\n <BaseEdge\n path={path}\n style={{ stroke: \"#ffffff\", strokeWidth: 2, fill: \"none\" }}\n />\n {/* Label */}\n {d?.label && (\n <text fontSize={BPMN_THEME.fontSize} fontFamily={BPMN_THEME.fontFamily} fill={stroke}>\n <textPath href={`#${path}`} startOffset=\"50%\" textAnchor=\"middle\">\n {d.label}\n </textPath>\n </text>\n )}\n </g>\n );\n}\n","import type { EdgeTypes } from \"@xyflow/react\";\nimport { SequenceFlowEdge } from \"./SequenceFlowEdge\";\nimport { MessageFlowEdge } from \"./MessageFlowEdge\";\nimport { AssociationEdge } from \"./AssociationEdge\";\nimport { DataAssociationEdge } from \"./DataAssociationEdge\";\nimport { ConversationLinkEdge } from \"./ConversationLinkEdge\";\n\n/** Pass this object to `DiagramCanvas` as `edgeTypes`. */\nexport const BPMN_EDGE_TYPES: EdgeTypes = {\n sequenceFlow: SequenceFlowEdge,\n messageFlow: MessageFlowEdge,\n association: AssociationEdge,\n dataAssociation: DataAssociationEdge,\n conversationLink: ConversationLinkEdge,\n};\n","import type { BpmnElementType, BpmnEdgeType, EventTrigger } from \"../elements/types\";\n\n// ─── BPMN moddle $type → our BpmnElementType ─────────────────────────────────\n\nexport const MODDLE_TO_ELEMENT_TYPE: Record<string, BpmnElementType | undefined> = {\n \"bpmn:StartEvent\": \"StartEvent\",\n \"bpmn:EndEvent\": \"EndEvent\",\n \"bpmn:IntermediateCatchEvent\": \"IntermediateCatchEvent\",\n \"bpmn:IntermediateThrowEvent\": \"IntermediateThrowEvent\",\n \"bpmn:BoundaryEvent\": \"BoundaryEvent\",\n \"bpmn:Task\": \"Task\",\n \"bpmn:UserTask\": \"UserTask\",\n \"bpmn:ServiceTask\": \"ServiceTask\",\n \"bpmn:ScriptTask\": \"ScriptTask\",\n \"bpmn:ManualTask\": \"ManualTask\",\n \"bpmn:BusinessRuleTask\": \"BusinessRuleTask\",\n \"bpmn:ReceiveTask\": \"ReceiveTask\",\n \"bpmn:SendTask\": \"SendTask\",\n \"bpmn:CallActivity\": \"CallActivity\",\n \"bpmn:ExclusiveGateway\": \"ExclusiveGateway\",\n \"bpmn:InclusiveGateway\": \"InclusiveGateway\",\n \"bpmn:ParallelGateway\": \"ParallelGateway\",\n \"bpmn:EventBasedGateway\": \"EventBasedGateway\",\n \"bpmn:ComplexGateway\": \"ComplexGateway\",\n \"bpmn:SubProcess\": \"SubProcess\",\n \"bpmn:AdHocSubProcess\": \"SubProcess\",\n \"bpmn:Transaction\": \"SubProcess\",\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 Pool: \"bpmn:Participant\",\n Lane: \"bpmn:Lane\",\n Annotation: \"bpmn:TextAnnotation\",\n Group: \"bpmn:Group\",\n DataObject: \"bpmn:DataObject\",\n DataObjectReference: \"bpmn:DataObjectReference\",\n DataInput: \"bpmn:DataInput\",\n DataOutput: \"bpmn:DataOutput\",\n DataStore: \"bpmn:DataStore\",\n DataStoreReference: \"bpmn:DataStoreReference\",\n Conversation: \"bpmn:Conversation\",\n SubConversation: \"bpmn:SubConversation\",\n CallConversation: \"bpmn:CallConversation\",\n ChoreographyTask: \"bpmn:ChoreographyTask\",\n SubChoreography: \"bpmn:SubChoreography\",\n CallChoreography: \"bpmn:CallChoreography\",\n};\n\n// ─── Edge type mappings ───────────────────────────────────────────────────────\n\nexport const MODDLE_TO_EDGE_TYPE: Record<string, BpmnEdgeType | undefined> = {\n \"bpmn:SequenceFlow\": \"sequenceFlow\",\n \"bpmn:MessageFlow\": \"messageFlow\",\n \"bpmn:Association\": \"association\",\n \"bpmn:DataInputAssociation\": \"dataAssociation\",\n \"bpmn:DataOutputAssociation\": \"dataAssociation\",\n \"bpmn:ConversationLink\": \"conversationLink\",\n};\n\nexport const EDGE_TYPE_TO_MODDLE: Record<BpmnEdgeType, string> = {\n sequenceFlow: \"bpmn:SequenceFlow\",\n messageFlow: \"bpmn:MessageFlow\",\n association: \"bpmn:Association\",\n dataAssociation: \"bpmn:DataInputAssociation\",\n conversationLink:\"bpmn:ConversationLink\",\n};\n\n// ─── Event definition type → trigger ─────────────────────────────────────────\n\nexport const EVENT_DEF_TO_TRIGGER: Record<string, EventTrigger> = {\n \"bpmn:MessageEventDefinition\": \"message\",\n \"bpmn:TimerEventDefinition\": \"timer\",\n \"bpmn:EscalationEventDefinition\": \"escalation\",\n \"bpmn:ConditionalEventDefinition\": \"conditional\",\n \"bpmn:ErrorEventDefinition\": \"error\",\n \"bpmn:CancelEventDefinition\": \"cancel\",\n \"bpmn:CompensateEventDefinition\": \"compensation\",\n \"bpmn:SignalEventDefinition\": \"signal\",\n \"bpmn:LinkEventDefinition\": \"link\",\n \"bpmn:TerminateEventDefinition\": \"terminate\",\n};\n\nexport const TRIGGER_TO_EVENT_DEF: Partial<Record<EventTrigger, string>> = {\n message: \"bpmn:MessageEventDefinition\",\n timer: \"bpmn:TimerEventDefinition\",\n escalation: \"bpmn:EscalationEventDefinition\",\n conditional: \"bpmn:ConditionalEventDefinition\",\n error: \"bpmn:ErrorEventDefinition\",\n cancel: \"bpmn:CancelEventDefinition\",\n compensation: \"bpmn:CompensateEventDefinition\",\n signal: \"bpmn:SignalEventDefinition\",\n link: \"bpmn:LinkEventDefinition\",\n terminate: \"bpmn:TerminateEventDefinition\",\n};\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnElementType, BpmnEdgeType, BpmnNodeData, BpmnEdgeData, EventTrigger, SubProcessVariant } from \"../elements/types\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnImportResult } from \"./types\";\nimport {\n MODDLE_TO_ELEMENT_TYPE,\n MODDLE_TO_EDGE_TYPE,\n EVENT_DEF_TO_TRIGGER,\n} from \"./mapper\";\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface ShapeInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n isExpanded?: boolean;\n}\n\ntype ShapeMap = Map<string, ShapeInfo>;\ntype WaypointMap = Map<string, Array<{ x: number; y: number }>>;\n\nfunction asElements(v: unknown): ModdleElement[] {\n return Array.isArray(v) ? (v as ModdleElement[]) : [];\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\n// ─── Extract BPMNDI shape/edge positions ─────────────────────────────────────\n\nfunction extractDiagramInfo(definitions: ModdleElement): {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n} {\n const shapes: ShapeMap = new Map();\n const waypoints: WaypointMap = new Map();\n\n for (const diagram of asElements(definitions.diagrams)) {\n const plane = diagram.plane as ModdleElement | undefined;\n if (!plane) continue;\n\n for (const el of asElements(plane.planeElement)) {\n const bpmnEl = el.bpmnElement as ModdleElement | undefined;\n if (!bpmnEl?.id) continue;\n const id = bpmnEl.id as string;\n\n if (el.$type === \"bpmndi:BPMNShape\") {\n const b = el.bounds as { x: number; y: number; width: number; height: number } | undefined;\n if (b) {\n shapes.set(id, {\n x: b.x,\n y: b.y,\n width: b.width,\n height: b.height,\n ...(typeof el.isExpanded === \"boolean\" ? { isExpanded: el.isExpanded as boolean } : {}),\n });\n }\n } else if (el.$type === \"bpmndi:BPMNEdge\") {\n const pts = (el.waypoint ?? []) as Array<{ x: number; y: number }>;\n if (pts.length) waypoints.set(id, pts);\n }\n }\n }\n\n return { shapes, waypoints };\n}\n\n// ─── Lane membership (flowNodeId → laneId) ───────────────────────────────────\n\nfunction extractLaneMembership(process: ModdleElement): Map<string, string> {\n const map = new Map<string, string>();\n\n function walkLaneSet(laneSet: ModdleElement) {\n for (const lane of asElements(laneSet.lanes)) {\n const laneId = lane.id as string | undefined;\n if (!laneId) continue;\n for (const ref of asElements(lane.flowNodeRef)) {\n if (ref.id) map.set(ref.id as string, laneId);\n }\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) walkLaneSet(child);\n }\n }\n\n const laneSet = process.laneSet as ModdleElement | undefined;\n if (laneSet) walkLaneSet(laneSet);\n return map;\n}\n\n// ─── Event trigger from eventDefinitions ─────────────────────────────────────\n\nfunction extractTrigger(el: ModdleElement): EventTrigger | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) return el.$type.includes(\"Parallel\") ? \"parallelMultiple\" : \"multiple\";\n return EVENT_DEF_TO_TRIGGER[defs[0].$type];\n}\n\n// ─── SubProcessVariant from moddle type / properties ─────────────────────────\n\nfunction extractSubProcessVariant(el: ModdleElement): SubProcessVariant | undefined {\n if (el.$type === \"bpmn:Transaction\") return \"transaction\";\n if (el.$type === \"bpmn:AdHocSubProcess\") return \"adhoc\";\n if (el.triggeredByEvent === true) return \"event\";\n return \"embedded\";\n}\n\n// ─── Walk a flowElements list, producing nodes and edges ─────────────────────\n\ninterface WalkContext {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n laneMembership: Map<string, string>;\n warnings: string[];\n autoX: { value: number };\n}\n\nfunction walkFlowElements(\n elements: ModdleElement[],\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n for (const el of elements) {\n const { $type, id } = el;\n if (!id) continue;\n\n const edgeType = MODDLE_TO_EDGE_TYPE[$type];\n if (edgeType !== undefined) {\n buildEdge(el, edgeType, ctx, edges);\n continue;\n }\n\n // Lane nodes are handled separately via laneMembership\n if ($type === \"bpmn:LaneSet\") continue;\n\n const elementType = MODDLE_TO_ELEMENT_TYPE[$type];\n if (!elementType) {\n ctx.warnings.push(`Unknown element type \"${$type}\" (id=${id as string}) — skipped.`);\n continue;\n }\n\n buildNode(el, elementType, parentId, ctx, nodes);\n\n // Recurse into subprocess children\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = asElements(el.flowElements);\n const laneMembership = extractLaneMembership(el);\n walkFlowElements(children, id as string, { ...ctx, laneMembership }, nodes, edges);\n }\n }\n}\n\nfunction buildNode(\n el: ModdleElement,\n elementType: BpmnElementType,\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n const id = el.id as string;\n const meta = BPMN_ELEMENT_CATALOG[elementType];\n const shape = ctx.shapes.get(id);\n\n // Position: use BPMNDI if available, otherwise auto-grid\n const x = shape?.x ?? ctx.autoX.value;\n const y = shape?.y ?? 100;\n if (!shape) ctx.autoX.value += (meta?.defaultWidth ?? 120) + 20;\n\n const label = asString(el.name);\n const trigger = extractTrigger(el);\n const isNonInterrupting = el.cancelActivity === false;\n\n const data: BpmnNodeData = {\n elementType,\n ...(label ? { label } : {}),\n ...(trigger ? { trigger } : {}),\n ...(isNonInterrupting ? { isNonInterrupting: true } : {}),\n };\n\n // SubProcess variant\n if (elementType === \"SubProcess\") {\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 = 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 condExpr = el.conditionExpression as { body?: string } | undefined;\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n };\n\n const waypoints = ctx.waypoints.get(id);\n if (waypoints?.length) data.routingPoints = waypoints;\n\n edges.push({ id, type: edgeType, source, target, data });\n}\n\n// ─── Handle Collaboration: Participants → Pool nodes ──────────────────────────\n\nfunction handleCollaboration(\n collaboration: ModdleElement,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n // Participants become Pool nodes\n for (const participant of asElements(collaboration.participants)) {\n const id = participant.id as string | undefined;\n if (!id) continue;\n const label = asString(participant.name);\n const shape = ctx.shapes.get(id);\n\n const poolNode: BpmnRFNode = {\n id,\n type: \"Pool\",\n position: { x: shape?.x ?? 0, y: shape?.y ?? 0 },\n data: { elementType: \"Pool\", ...(label ? { label } : {}) },\n width: shape?.width ?? 600,\n height: shape?.height ?? 200,\n };\n nodes.push(poolNode);\n\n // Walk the referenced process, assigning pool as parent\n const processRef = participant.processRef as ModdleElement | undefined;\n if (processRef) {\n const laneMembership = extractLaneMembership(processRef);\n walkFlowElements(\n asElements(processRef.flowElements),\n id,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n\n // Add Lane nodes\n const laneSet = processRef.laneSet as ModdleElement | undefined;\n if (laneSet) {\n addLaneNodes(laneSet, id, ctx, nodes);\n }\n }\n }\n\n // Message flows\n for (const mf of asElements(collaboration.messageFlows)) {\n buildEdge(mf, \"messageFlow\", ctx, edges);\n }\n\n // Conversation links\n for (const cl of asElements(collaboration.conversationLinks)) {\n buildEdge(cl, \"conversationLink\", ctx, edges);\n }\n}\n\nfunction addLaneNodes(\n laneSet: ModdleElement,\n poolId: string,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n for (const lane of asElements(laneSet.lanes)) {\n const id = lane.id as string | undefined;\n if (!id) continue;\n const label = asString(lane.name);\n const shape = ctx.shapes.get(id);\n\n nodes.push({\n id,\n type: \"Lane\",\n position: { x: shape?.x ?? 30, y: shape?.y ?? 0 },\n data: { elementType: \"Lane\", ...(label ? { label } : {}) },\n width: shape?.width ?? 570,\n height: shape?.height ?? 120,\n parentId: poolId,\n });\n\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) addLaneNodes(child, poolId, ctx, nodes);\n }\n}\n\n// ─── Public: parseBpmnXml ─────────────────────────────────────────────────────\n\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const moddle = new BpmnModdle();\n const warnings: string[] = [];\n\n let rootElement: ModdleElement;\n try {\n const result = await moddle.fromXML(xml);\n rootElement = result.rootElement;\n for (const w of result.warnings) warnings.push(w.message);\n } catch (err) {\n throw new Error(`Failed to parse BPMN XML: ${String(err)}`);\n }\n\n const nodes: BpmnRFNode[] = [];\n const edges: BpmnRFEdge[] = [];\n\n const { shapes, waypoints } = extractDiagramInfo(rootElement);\n const ctx: WalkContext = {\n shapes,\n waypoints,\n laneMembership: new Map(),\n warnings,\n autoX: { value: 50 },\n };\n\n for (const rootEl of asElements(rootElement.rootElements)) {\n if (rootEl.$type === \"bpmn:Collaboration\") {\n handleCollaboration(rootEl, ctx, nodes, edges);\n } else if (rootEl.$type === \"bpmn:Process\") {\n const laneMembership = extractLaneMembership(rootEl);\n const laneSet = rootEl.laneSet as ModdleElement | undefined;\n if (laneSet) addLaneNodes(laneSet, \"\", ctx, nodes);\n walkFlowElements(\n asElements(rootEl.flowElements),\n undefined,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n }\n }\n\n return { nodes, edges, warnings };\n}\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnExportOptions } from \"./types\";\nimport {\n ELEMENT_TYPE_TO_MODDLE,\n EDGE_TYPE_TO_MODDLE,\n TRIGGER_TO_EVENT_DEF,\n} from \"./mapper\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction uid(prefix: string, id: string): string {\n return `${prefix}_${id}`;\n}\n\nfunction asNodes(nodes: BpmnRFNode[], types: string[]): BpmnRFNode[] {\n return nodes.filter((n) => types.includes(n.data.elementType));\n}\n\n// ─── Flowable extension attributes ───────────────────────────────────────────\n\nfunction buildFlowableAttrs(data: BpmnRFNode[\"data\"]): Record<string, string> {\n const attrs: Record<string, string> = {};\n if (data.flowableAssignee) attrs[\"flowable:assignee\"] = data.flowableAssignee;\n if (data.flowableCandidateGroups) attrs[\"flowable:candidateGroups\"] = data.flowableCandidateGroups;\n if (data.flowableCandidateUsers) attrs[\"flowable:candidateUsers\"] = data.flowableCandidateUsers;\n if (data.flowableFormKey) attrs[\"flowable:formKey\"] = data.flowableFormKey;\n if (data.flowableDueDate) attrs[\"flowable:dueDate\"] = data.flowableDueDate;\n if (data.flowableType) attrs[\"flowable:type\"] = data.flowableType;\n if (data.flowableExpression) attrs[\"flowable:expression\"] = data.flowableExpression;\n if (data.flowableClass) attrs[\"flowable:class\"] = data.flowableClass;\n if (data.flowableDelegateExpression) attrs[\"flowable:delegateExpression\"] = data.flowableDelegateExpression;\n return attrs;\n}\n\n// ─── Build BPMN semantic model ────────────────────────────────────────────────\n\nfunction buildSemanticModel(\n moddle: BpmnModdle,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions,\n): ModdleElement {\n const defId = opts.id ?? \"Definitions_1\";\n const defName = opts.name;\n\n // Collect pool nodes → Collaboration + Participants\n const poolNodes = asNodes(nodes, [\"Pool\"]);\n const laneNodes = asNodes(nodes, [\"Lane\"]);\n const isCollaboration = poolNodes.length > 0;\n\n const definitions = moddle.create(\"bpmn:Definitions\", {\n id: defId,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n ...(defName ? { name: defName } : {}),\n });\n // Flowable namespace: bpmn-moddle serializes xmlns:* from the element's own namespace map.\n // Injected via the moddle descriptor when a full Flowable extension is loaded.\n // For now, individual elements declare their own flowable:* attributes via $attrs.\n\n const rootElements: ModdleElement[] = [];\n\n if (isCollaboration) {\n const participants: ModdleElement[] = [];\n const processes: ModdleElement[] = [];\n\n for (const pool of poolNodes) {\n const processId = `Process_${pool.id}`;\n const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId);\n processes.push(process);\n\n const participant = moddle.create(\"bpmn:Participant\", {\n id: pool.id,\n name: pool.data.label ?? \"\",\n processRef: process,\n });\n participants.push(participant);\n }\n\n // Message flows and conversation links belong to collaboration\n const messageFlowEdges = edges.filter((e) => e.data?.edgeType === \"messageFlow\");\n const conversationLinkEdges = edges.filter((e) => e.data?.edgeType === \"conversationLink\");\n\n const messageFlows = messageFlowEdges.map((e) =>\n moddle.create(\"bpmn:MessageFlow\", {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const conversationLinks = conversationLinkEdges.map((e) =>\n moddle.create(\"bpmn:ConversationLink\", {\n id: e.id,\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const collaboration = moddle.create(\"bpmn:Collaboration\", {\n id: `Collaboration_${defId}`,\n participants,\n messageFlows,\n conversationLinks,\n });\n\n rootElements.push(collaboration, ...processes);\n } else {\n // Single process — no collaboration\n const process = buildProcess(moddle, nodes, edges, undefined, laneNodes, \"Process_1\");\n rootElements.push(process);\n }\n\n (definitions as Record<string, unknown>).rootElements = rootElements;\n return definitions;\n}\n\n// Build a bpmn:Process element containing flow nodes and sequence flows\nfunction buildProcess(\n moddle: BpmnModdle,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n poolId: string | undefined,\n laneNodes: BpmnRFNode[],\n processId: string,\n): ModdleElement {\n // Collect flow nodes that belong to this pool (or all if no pools)\n const myNodes = poolId\n ? allNodes.filter(\n (n) =>\n n.parentId === poolId ||\n laneNodes.some((l) => l.id === n.parentId && l.parentId === poolId),\n )\n : allNodes.filter((n) => n.data.elementType !== \"Pool\" && n.data.elementType !== \"Lane\");\n\n const myLanes = laneNodes.filter((l) => (poolId ? l.parentId === poolId : true));\n\n // Build flow elements\n const flowElements: ModdleElement[] = [];\n\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (el) flowElements.push(el);\n }\n\n // Sequence flows and associations\n const myNodeIds = new Set(myNodes.map((n) => n.id));\n const myEdges = allEdges.filter(\n (e) =>\n (e.data?.edgeType === \"sequenceFlow\" ||\n e.data?.edgeType === \"association\" ||\n e.data?.edgeType === \"dataAssociation\") &&\n myNodeIds.has(e.source) &&\n myNodeIds.has(e.target),\n );\n\n for (const edge of myEdges) {\n const edgeMeta = buildEdgeElement(moddle, edge);\n if (edgeMeta) flowElements.push(edgeMeta);\n }\n\n const process = moddle.create(\"bpmn:Process\", {\n id: processId,\n isExecutable: true,\n flowElements,\n });\n\n // Lane set\n if (myLanes.length > 0) {\n const laneElements = myLanes.map((l) =>\n moddle.create(\"bpmn:Lane\", {\n id: l.id,\n name: l.data.label ?? \"\",\n flowNodeRef: myNodes\n .filter((n) => n.parentId === l.id)\n .map((n) => ({ id: n.id })),\n }),\n );\n (process as Record<string, unknown>).laneSet = moddle.create(\"bpmn:LaneSet\", {\n id: `LaneSet_${processId}`,\n lanes: laneElements,\n });\n }\n\n return process;\n}\n\nfunction buildFlowElement(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n _allNodes: BpmnRFNode[],\n _allEdges: BpmnRFEdge[],\n): ModdleElement | null {\n const { elementType, label, trigger } = node.data;\n\n // Pools and Lanes are handled in buildProcess / collaboration\n if (elementType === \"Pool\" || elementType === \"Lane\") return null;\n\n const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: node.id,\n name: label ?? \"\",\n };\n\n // Event definitions\n if (trigger && trigger !== \"none\") {\n const defType = TRIGGER_TO_EVENT_DEF[trigger];\n if (defType) {\n attrs.eventDefinitions = [moddle.create(defType, { id: uid(\"EventDef\", node.id) })];\n }\n }\n\n // SubProcess variant\n if (elementType === \"SubProcess\" && node.data.subProcessVariant === \"transaction\") {\n return moddle.create(\"bpmn:Transaction\", attrs);\n }\n if (elementType === \"SubProcess\" && node.data.subProcessVariant === \"adhoc\") {\n return moddle.create(\"bpmn:AdHocSubProcess\", attrs);\n }\n\n const element = moddle.create(moddleType, attrs);\n\n // Flowable extension attributes\n const flowableAttrs = buildFlowableAttrs(node.data);\n if (Object.keys(flowableAttrs).length > 0) {\n (element as Record<string, unknown>).$attrs = flowableAttrs;\n }\n\n return element;\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.conditionExpression) {\n attrs.conditionExpression = moddle.create(\"bpmn:FormalExpression\", {\n body: edge.data.conditionExpression,\n });\n }\n\n return moddle.create(moddleType, attrs);\n}\n\n// ─── Build BPMNDI (diagram interchange / layout) ─────────────────────────────\n\nfunction buildBpmnDI(\n moddle: BpmnModdle,\n definitions: ModdleElement,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n): void {\n const shapes: ModdleElement[] = [];\n const edgeShapes: ModdleElement[] = [];\n\n 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: node.position.x,\n 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 =\n edge.data?.routingPoints?.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\n// ─── Public: serializeBpmnXml ─────────────────────────────────────────────────\n\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const moddle = new BpmnModdle();\n\n const definitions = buildSemanticModel(moddle, nodes, edges, opts);\n buildBpmnDI(moddle, definitions, nodes, edges);\n\n const { xml } = await moddle.toXML(definitions, {\n format: opts.format ?? true,\n });\n\n return xml;\n}\n","export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && !n.parentId,\n );\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n","import {\n createSimulation,\n tick,\n fire,\n getFireable,\n isCompleted,\n type SimDiagram,\n type SimulationState,\n} from \"../simulation/index\";\n\nexport type SimMode = \"preview\" | \"live\";\n\nexport type SimVariables = Record<string, string | number | boolean>;\n\n// ─── SimulationAdapter ────────────────────────────────────────────────────────\n//\n// Contract between the UI and whatever drives process execution.\n//\n// The webapp implements this interface for \"live\" mode by calling its own\n// backend API (which in turn calls Flowable). The library provides only the\n// \"preview\" implementation for offline design-time simulation.\n//\n// Example live adapter in the webapp:\n//\n// function createBackendAdapter(apiBase: string): SimulationAdapter {\n// let lastState = /* idle SimulationState */;\n// return {\n// mode: \"live\",\n// async start(vars) {\n// lastState = await post(`${apiBase}/process/start`, vars);\n// return lastState;\n// },\n// async tick() {\n// lastState = await get(`${apiBase}/process/state`);\n// return lastState;\n// },\n// async fire(elementId, vars) {\n// lastState = await post(`${apiBase}/process/fire/${elementId}`, vars);\n// return lastState;\n// },\n// async getFireable() {\n// return get(`${apiBase}/process/fireable`);\n// },\n// getState() { return lastState; },\n// isCompleted() { return lastState.status === \"completed\"; },\n// };\n// }\n\nexport interface SimulationAdapter {\n readonly mode: SimMode;\n\n /** Initialize the simulation. Places tokens (preview) or starts the process instance (live). */\n start(variables?: SimVariables): Promise<SimulationState>;\n\n /** Advance automatic elements. No-op in live mode — the engine drives execution. */\n tick(): Promise<SimulationState>;\n\n /**\n * Manually fire an element (complete a task, trigger a catch event).\n * In live mode: delegates to the backend, which completes the Flowable task.\n */\n fire(elementId: string, variables?: SimVariables): Promise<SimulationState>;\n\n /** Returns element IDs that can be manually fired right now. */\n getFireable(): Promise<string[]>;\n\n /** Returns the last known SimulationState snapshot without a network call. */\n getState(): SimulationState;\n\n isCompleted(): boolean;\n}\n\n// ─── Preview adapter — offline, uses the token simulator ─────────────────────\n\nclass PreviewAdapter implements SimulationAdapter {\n readonly mode: SimMode = \"preview\";\n private state: SimulationState;\n\n constructor(\n private readonly diagram: SimDiagram,\n initialVariables: SimVariables = {},\n ) {\n this.state = createSimulation(diagram, initialVariables);\n }\n\n async start(variables?: SimVariables): Promise<SimulationState> {\n this.state = tick(this.diagram, createSimulation(this.diagram, variables ?? {}));\n return this.state;\n }\n\n async tick(): Promise<SimulationState> {\n this.state = tick(this.diagram, this.state);\n return this.state;\n }\n\n async fire(elementId: string, variables?: SimVariables): Promise<SimulationState> {\n this.state = fire(this.diagram, this.state, elementId, variables);\n return this.state;\n }\n\n async getFireable(): Promise<string[]> {\n return getFireable(this.diagram, this.state);\n }\n\n getState(): SimulationState {\n return this.state;\n }\n\n isCompleted(): boolean {\n return isCompleted(this.state);\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createPreviewAdapter(\n diagram: SimDiagram,\n initialVariables?: SimVariables,\n): SimulationAdapter {\n return new PreviewAdapter(diagram, initialVariables);\n}\n"]}
1
+ {"version":3,"sources":["../src/elements/catalog.ts","../src/elements/guards.ts","../src/nodes/shared/BpmnHandles.tsx","../src/nodes/shared/theme.ts","../src/nodes/shared/BpmnLabel.tsx","../src/nodes/shared/EventMarker.tsx","../src/nodes/StartEventNode.tsx","../src/nodes/EndEventNode.tsx","../src/nodes/IntermediateEventNode.tsx","../src/nodes/shared/TaskIcon.tsx","../src/nodes/shared/TaskMarkers.tsx","../src/nodes/TaskNode.tsx","../src/nodes/GatewayNode.tsx","../src/nodes/SubProcessNode.tsx","../src/nodes/PoolNode.tsx","../src/nodes/LaneNode.tsx","../src/nodes/AnnotationNode.tsx","../src/nodes/GroupNode.tsx","../src/nodes/DataNode.tsx","../src/nodes/DataRefNode.tsx","../src/nodes/ConversationNode.tsx","../src/nodes/ChoreographyNode.tsx","../src/nodes/nodeTypes.ts","../src/edges/path.ts","../src/edges/SequenceFlowEdge.tsx","../src/edges/MessageFlowEdge.tsx","../src/edges/AssociationEdge.tsx","../src/edges/DataAssociationEdge.tsx","../src/edges/ConversationLinkEdge.tsx","../src/edges/edgeTypes.ts","../src/xml/mapper.ts","../src/xml/importer.ts","../src/xml/exporter.ts","../src/simulation/evaluator.ts","../src/simulation/index.ts","../src/flowable/adapter.ts"],"names":["Position","jsxs","Fragment","jsx","Handle","SIZE","CX","R","HEADER_HEIGHT","HEADER_WIDTH","HANDLE_STYLE","H","foldPath","W","FOLD","DS_W","DS_H","RX","RY","pointsToSvgPath","getOrthogonalPath","BaseEdge","EdgeLabelRenderer","getStraightPath","laneSet","BpmnModdle","GATEWAY_TYPES","TASK_TYPES","next"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BpmnElementType, BpmnElementMeta } 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: \"Clock\",\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: \"Zap\",\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: \"AlertCircle\",\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: \"Square\",\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: \"User\",\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: \"Settings\",\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: \"Scale\",\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: \"Mail\",\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: \"GitBranch\",\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: \"GitMerge\",\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: \"GitFork\",\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: \"Layout\",\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: \"CreditCard\",\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: \"Workflow\",\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: \"Shuffle\",\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: \"Columns\",\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: \"AlignJustify\",\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","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 stroke: \"#404040\",\n strokeSelected: \"#1a56db\",\n strokeWidth: 1.5,\n strokeWidthSelected: 2.5,\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontSize: 11,\n labelColor: \"#1a1a1a\",\n handleColor: \"#8c8c8c\",\n handleColorSelected: \"#1a56db\",\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","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 { 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\" }}>\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 { 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\" }}>\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 { 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 ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\" }}>\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 ?? \"none\";\n\n return (\n <div style={{ width: SIZE, height: SIZE, position: \"relative\" }}>\n <svg width={SIZE} height={SIZE} style={{ overflow: \"visible\", display: \"block\" }}>\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 ?? \"none\";\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\" }}>\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 \"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 { resolveStroke, resolveStrokeWidth, BPMN_THEME } 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 ?? BPMN_THEME.fill,\n border: `${borderWidth}px solid ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\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 }}\n >\n {/* Task type icon — top-left corner */}\n {d.elementType && d.elementType !== \"Task\" && (\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 { 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\" }}>\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 } from \"../elements/types\";\nimport { BpmnHandles } from \"./shared/BpmnHandles\";\nimport { BpmnLabel } from \"./shared/BpmnLabel\";\nimport { TaskMarkers, AdhocMarker } from \"./shared/TaskMarkers\";\nimport { resolveStroke, resolveStrokeWidth, BPMN_THEME } from \"./shared/theme\";\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 = d.subProcessVariant ?? \"embedded\";\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 ?? \"#f8faff\",\n border: `${sw}px ${borderStyle} ${stroke}`,\n borderRadius: 6,\n boxSizing: \"border-box\",\n position: \"relative\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Transaction sub-process: inner border inset 4px */}\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 */}\n {variant === \"adhoc\" && (\n <AdhocMarker stroke={stroke} />\n )}\n\n {/* Instance markers (loop, multi-instance, compensation) */}\n {hasMarkers && (\n <TaskMarkers markers={d.markers!} stroke={stroke} />\n )}\n\n <BpmnHandles variant=\"all\" />\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\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 ?? \"#f5f7ff\";\n const headerFill = d.color?.fill ?? \"#edf0ff\";\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n <div\n aria-label=\"pool-header\"\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 }}\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Vertical header */}\n <div\n aria-label=\"pool-header\"\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 }}\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 { resolveStroke, resolveStrokeWidth, BPMN_THEME } 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 ?? \"#fafbff\";\n const headerFill = d.color?.fill ?? \"#f0f3ff\";\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n <div\n aria-label=\"lane-header\"\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 }}\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 overflow: \"hidden\",\n fontFamily: BPMN_THEME.fontFamily,\n }}\n >\n {/* Horizontal header */}\n <div\n aria-label=\"lane-header\"\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 }}\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 { 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\" }}>\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\" }}>\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 { 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\" }}>\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\" }}>\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\" }}>\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\" }}>\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\n SubProcess: SubProcessNode,\n Pool: PoolNode,\n Lane: LaneNode,\n // Artifacts\n Annotation: AnnotationNode,\n Group: GroupNode,\n // Data\n DataObject: DataObjectNode,\n DataObjectReference: DataObjectReferenceNode,\n DataInput: DataInputNode,\n DataOutput: DataOutputNode,\n DataStore: DataStoreNode,\n DataStoreReference: DataStoreReferenceNode,\n // Conversation (§12)\n Conversation: ConversationNode,\n SubConversation: SubConversationNode,\n CallConversation: CallConversationNode,\n // Choreography (§11)\n ChoreographyTask: ChoreographyTaskNode,\n SubChoreography: SubChoreographyNode,\n CallChoreography: CallChoreographyNode,\n};\n","import type { Position } from \"@xyflow/react\";\n\nexport interface EdgePoint {\n x: number;\n y: number;\n}\n\nexport function getEdgePoints(\n sourceX: number,\n sourceY: number,\n targetX: number,\n targetY: number,\n routingPoints?: EdgePoint[],\n): EdgePoint[] {\n if (routingPoints && routingPoints.length >= 2) {\n return routingPoints;\n }\n\n return [\n { x: sourceX, y: sourceY },\n { x: targetX, y: targetY },\n ];\n}\n\nexport function getPolylineMidpoint(points: EdgePoint[]): EdgePoint {\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return points[0];\n\n let total = 0;\n const lengths: number[] = [];\n\n for (let i = 1; i < points.length; i += 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n const length = Math.hypot(dx, dy);\n lengths.push(length);\n total += length;\n }\n\n const halfway = total / 2;\n let traversed = 0;\n\n for (let i = 1; i < points.length; i += 1) {\n const length = lengths[i - 1];\n if (traversed + length >= halfway) {\n const ratio = length === 0 ? 0 : (halfway - traversed) / length;\n return {\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\n };\n }\n traversed += length;\n }\n\n return points[points.length - 1];\n}\n\nexport function getSegmentAngle(points: EdgePoint[]): number {\n if (points.length < 2) return 0;\n const from = points[0];\n const to = points[1];\n return Math.atan2(to.y - from.y, to.x - from.x);\n}\n\nexport function getDefaultFlowMarkerPath(points: EdgePoint[]): string | null {\n if (points.length < 2) return null;\n\n const start = points[0];\n const angle = getSegmentAngle(points);\n const anchorX = start.x + Math.cos(angle) * 16;\n const anchorY = start.y + Math.sin(angle) * 16;\n const normalAngle = angle + Math.PI / 2;\n const half = 7;\n\n const x1 = anchorX + Math.cos(normalAngle) * half;\n const y1 = anchorY + Math.sin(normalAngle) * half;\n const x2 = anchorX - Math.cos(normalAngle) * half;\n const y2 = anchorY - Math.sin(normalAngle) * half;\n\n return `M ${x1} ${y1} L ${x2} ${y2}`;\n}\n\nexport function fallbackAssociationDirection(\n sourcePosition?: Position,\n targetPosition?: Position,\n): \"horizontal\" | \"vertical\" {\n if (sourcePosition === \"left\" || sourcePosition === \"right\" || targetPosition === \"left\" || targetPosition === \"right\") {\n return \"horizontal\";\n }\n\n return \"vertical\";\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getDefaultFlowMarkerPath, getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function SequenceFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n const defaultMarkerPath = d?.isDefault ? getDefaultFlowMarkerPath(polyline) : null;\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n {...(d?.conditionExpression ? { markerStart: \"url(#bpmn-diamond-open)\" } : {})}\n markerEnd={markerEnd ?? \"url(#bpmn-arrow)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n ...(style ?? {}),\n }}\n />\n {defaultMarkerPath && (\n <path\n d={defaultMarkerPath}\n fill=\"none\"\n stroke={selected ? \"#1a56db\" : \"#404040\"}\n strokeWidth={selected ? 2 : 1.5}\n strokeLinecap=\"round\"\n data-testid=\"bpmn-default-flow-marker\"\n />\n )}\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, EdgeLabelRenderer, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { getEdgePoints, getPolylineMidpoint } from \"./path\";\n\nexport function MessageFlowEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, label, markerEnd, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const polyline = getEdgePoints(sourceX, sourceY, targetX, targetY, points);\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n const midpoint = getPolylineMidpoint(polyline);\n\n return (\n <>\n <BaseEdge\n id={id}\n path={path}\n markerStart=\"url(#bpmn-circle-open)\"\n markerEnd={markerEnd ?? \"url(#bpmn-arrow-open)\"}\n style={{\n stroke: selected ? \"#1a56db\" : \"#404040\",\n strokeWidth: selected ? 2 : 1.5,\n strokeDasharray: \"6 3\",\n ...(style ?? {}),\n }}\n />\n {(label ?? d?.label) && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%,-50%) translate(${midpoint.x}px,${midpoint.y}px)`,\n fontSize: 11,\n fontFamily: \"Inter, system-ui, sans-serif\",\n background: \"rgba(255,255,255,0.85)\",\n padding: \"1px 4px\",\n borderRadius: 2,\n pointerEvents: \"all\",\n }}\n className=\"nodrag nopan\"\n >\n {label ?? d?.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function AssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n const direction = d?.associationDirection ?? \"none\";\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n {...(direction === \"both\" ? { markerStart: \"url(#bpmn-arrow-open)\" } : {})}\n {...(direction === \"one\" || direction === \"both\" ? { markerEnd: \"url(#bpmn-arrow-open)\" } : {})}\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import { BaseEdge, type EdgeProps } from \"@xyflow/react\";\nimport { getOrthogonalPath, pointsToSvgPath } from \"@aranzatech/diagrams-core/routing\";\nimport type { BpmnEdgeData } from \"../elements/types\";\n\nexport function DataAssociationEdge({\n id,\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition,\n data, style, selected,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const points = d?.routingPoints;\n\n const path = points && points.length >= 2\n ? pointsToSvgPath(points)\n : getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);\n\n return (\n <BaseEdge\n id={id}\n path={path}\n markerEnd=\"url(#bpmn-arrow-open)\"\n style={{\n stroke: selected ? \"#1a56db\" : \"#888\",\n strokeWidth: 1,\n strokeDasharray: \"3 3\",\n ...(style ?? {}),\n }}\n />\n );\n}\n","import type { EdgeProps } from \"@xyflow/react\";\nimport { BaseEdge, getStraightPath } from \"@xyflow/react\";\nimport type { BpmnEdgeData } from \"../elements/types\";\nimport { BPMN_THEME } from \"../nodes/shared/theme\";\n\n// BPMN 2.0 §12.2 — ConversationLink is rendered as a double line.\n// Technique: draw the path twice — wide stroke then narrower background —\n// to produce a parallel-line effect without complex path offsets.\n\nexport function ConversationLinkEdge({\n sourceX, sourceY, targetX, targetY,\n data, markerEnd,\n}: EdgeProps) {\n const d = data as BpmnEdgeData | undefined;\n const stroke = BPMN_THEME.stroke;\n\n const [path] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n\n return (\n <g>\n {/* Outer (wide) stroke */}\n <BaseEdge\n path={path}\n {...(markerEnd ? { markerEnd } : {})}\n style={{ stroke, strokeWidth: 5, fill: \"none\" }}\n />\n {/* Inner white gap — creates double-line visual */}\n <BaseEdge\n path={path}\n style={{ stroke: \"#ffffff\", strokeWidth: 2, fill: \"none\" }}\n />\n {/* Label */}\n {d?.label && (\n <text fontSize={BPMN_THEME.fontSize} fontFamily={BPMN_THEME.fontFamily} fill={stroke}>\n <textPath href={`#${path}`} startOffset=\"50%\" textAnchor=\"middle\">\n {d.label}\n </textPath>\n </text>\n )}\n </g>\n );\n}\n","import type { EdgeTypes } from \"@xyflow/react\";\nimport { SequenceFlowEdge } from \"./SequenceFlowEdge\";\nimport { MessageFlowEdge } from \"./MessageFlowEdge\";\nimport { AssociationEdge } from \"./AssociationEdge\";\nimport { DataAssociationEdge } from \"./DataAssociationEdge\";\nimport { ConversationLinkEdge } from \"./ConversationLinkEdge\";\n\n/** Pass this object to `DiagramCanvas` as `edgeTypes`. */\nexport const BPMN_EDGE_TYPES: EdgeTypes = {\n sequenceFlow: SequenceFlowEdge,\n messageFlow: MessageFlowEdge,\n association: AssociationEdge,\n dataAssociation: DataAssociationEdge,\n conversationLink: ConversationLinkEdge,\n};\n","import type { BpmnElementType, BpmnEdgeType, EventTrigger } from \"../elements/types\";\n\n// ─── BPMN moddle $type → our BpmnElementType ─────────────────────────────────\n\nexport const MODDLE_TO_ELEMENT_TYPE: Record<string, BpmnElementType | undefined> = {\n \"bpmn:StartEvent\": \"StartEvent\",\n \"bpmn:EndEvent\": \"EndEvent\",\n \"bpmn:IntermediateCatchEvent\": \"IntermediateCatchEvent\",\n \"bpmn:IntermediateThrowEvent\": \"IntermediateThrowEvent\",\n \"bpmn:BoundaryEvent\": \"BoundaryEvent\",\n \"bpmn:Task\": \"Task\",\n \"bpmn:UserTask\": \"UserTask\",\n \"bpmn:ServiceTask\": \"ServiceTask\",\n \"bpmn:ScriptTask\": \"ScriptTask\",\n \"bpmn:ManualTask\": \"ManualTask\",\n \"bpmn:BusinessRuleTask\": \"BusinessRuleTask\",\n \"bpmn:ReceiveTask\": \"ReceiveTask\",\n \"bpmn:SendTask\": \"SendTask\",\n \"bpmn:CallActivity\": \"CallActivity\",\n \"bpmn:ExclusiveGateway\": \"ExclusiveGateway\",\n \"bpmn:InclusiveGateway\": \"InclusiveGateway\",\n \"bpmn:ParallelGateway\": \"ParallelGateway\",\n \"bpmn:EventBasedGateway\": \"EventBasedGateway\",\n \"bpmn:ComplexGateway\": \"ComplexGateway\",\n \"bpmn:SubProcess\": \"SubProcess\",\n \"bpmn:AdHocSubProcess\": \"SubProcess\",\n \"bpmn:Transaction\": \"SubProcess\",\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 Pool: \"bpmn:Participant\",\n Lane: \"bpmn:Lane\",\n Annotation: \"bpmn:TextAnnotation\",\n Group: \"bpmn:Group\",\n DataObject: \"bpmn:DataObject\",\n DataObjectReference: \"bpmn:DataObjectReference\",\n DataInput: \"bpmn:DataInput\",\n DataOutput: \"bpmn:DataOutput\",\n DataStore: \"bpmn:DataStore\",\n DataStoreReference: \"bpmn:DataStoreReference\",\n Conversation: \"bpmn:Conversation\",\n SubConversation: \"bpmn:SubConversation\",\n CallConversation: \"bpmn:CallConversation\",\n ChoreographyTask: \"bpmn:ChoreographyTask\",\n SubChoreography: \"bpmn:SubChoreography\",\n CallChoreography: \"bpmn:CallChoreography\",\n};\n\n// ─── Edge type mappings ───────────────────────────────────────────────────────\n\nexport const MODDLE_TO_EDGE_TYPE: Record<string, BpmnEdgeType | undefined> = {\n \"bpmn:SequenceFlow\": \"sequenceFlow\",\n \"bpmn:MessageFlow\": \"messageFlow\",\n \"bpmn:Association\": \"association\",\n \"bpmn:DataInputAssociation\": \"dataAssociation\",\n \"bpmn:DataOutputAssociation\": \"dataAssociation\",\n \"bpmn:ConversationLink\": \"conversationLink\",\n};\n\nexport const EDGE_TYPE_TO_MODDLE: Record<BpmnEdgeType, string> = {\n sequenceFlow: \"bpmn:SequenceFlow\",\n messageFlow: \"bpmn:MessageFlow\",\n association: \"bpmn:Association\",\n dataAssociation: \"bpmn:DataInputAssociation\",\n conversationLink:\"bpmn:ConversationLink\",\n};\n\n// ─── Event definition type → trigger ─────────────────────────────────────────\n\nexport const EVENT_DEF_TO_TRIGGER: Record<string, EventTrigger> = {\n \"bpmn:MessageEventDefinition\": \"message\",\n \"bpmn:TimerEventDefinition\": \"timer\",\n \"bpmn:EscalationEventDefinition\": \"escalation\",\n \"bpmn:ConditionalEventDefinition\": \"conditional\",\n \"bpmn:ErrorEventDefinition\": \"error\",\n \"bpmn:CancelEventDefinition\": \"cancel\",\n \"bpmn:CompensateEventDefinition\": \"compensation\",\n \"bpmn:SignalEventDefinition\": \"signal\",\n \"bpmn:LinkEventDefinition\": \"link\",\n \"bpmn:TerminateEventDefinition\": \"terminate\",\n};\n\nexport const TRIGGER_TO_EVENT_DEF: Partial<Record<EventTrigger, string>> = {\n message: \"bpmn:MessageEventDefinition\",\n timer: \"bpmn:TimerEventDefinition\",\n escalation: \"bpmn:EscalationEventDefinition\",\n conditional: \"bpmn:ConditionalEventDefinition\",\n error: \"bpmn:ErrorEventDefinition\",\n cancel: \"bpmn:CancelEventDefinition\",\n compensation: \"bpmn:CompensateEventDefinition\",\n signal: \"bpmn:SignalEventDefinition\",\n link: \"bpmn:LinkEventDefinition\",\n terminate: \"bpmn:TerminateEventDefinition\",\n};\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnElementType, BpmnEdgeType, BpmnNodeData, BpmnEdgeData, EventTrigger, SubProcessVariant } from \"../elements/types\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnImportResult } from \"./types\";\nimport {\n MODDLE_TO_ELEMENT_TYPE,\n MODDLE_TO_EDGE_TYPE,\n EVENT_DEF_TO_TRIGGER,\n} from \"./mapper\";\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\ninterface ShapeInfo {\n x: number;\n y: number;\n width: number;\n height: number;\n isExpanded?: boolean;\n}\n\ntype ShapeMap = Map<string, ShapeInfo>;\ntype WaypointMap = Map<string, Array<{ x: number; y: number }>>;\n\nfunction asElements(v: unknown): ModdleElement[] {\n return Array.isArray(v) ? (v as ModdleElement[]) : [];\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\n// ─── Extract BPMNDI shape/edge positions ─────────────────────────────────────\n\nfunction extractDiagramInfo(definitions: ModdleElement): {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n} {\n const shapes: ShapeMap = new Map();\n const waypoints: WaypointMap = new Map();\n\n for (const diagram of asElements(definitions.diagrams)) {\n const plane = diagram.plane as ModdleElement | undefined;\n if (!plane) continue;\n\n for (const el of asElements(plane.planeElement)) {\n const bpmnEl = el.bpmnElement as ModdleElement | undefined;\n if (!bpmnEl?.id) continue;\n const id = bpmnEl.id as string;\n\n if (el.$type === \"bpmndi:BPMNShape\") {\n const b = el.bounds as { x: number; y: number; width: number; height: number } | undefined;\n if (b) {\n shapes.set(id, {\n x: b.x,\n y: b.y,\n width: b.width,\n height: b.height,\n ...(typeof el.isExpanded === \"boolean\" ? { isExpanded: el.isExpanded as boolean } : {}),\n });\n }\n } else if (el.$type === \"bpmndi:BPMNEdge\") {\n const pts = (el.waypoint ?? []) as Array<{ x: number; y: number }>;\n if (pts.length) waypoints.set(id, pts);\n }\n }\n }\n\n return { shapes, waypoints };\n}\n\n// ─── Lane membership (flowNodeId → laneId) ───────────────────────────────────\n\nfunction extractLaneMembership(process: ModdleElement): Map<string, string> {\n const map = new Map<string, string>();\n\n function walkLaneSet(laneSet: ModdleElement) {\n for (const lane of asElements(laneSet.lanes)) {\n const laneId = lane.id as string | undefined;\n if (!laneId) continue;\n for (const ref of asElements(lane.flowNodeRef)) {\n if (ref.id) map.set(ref.id as string, laneId);\n }\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) walkLaneSet(child);\n }\n }\n\n const laneSet = process.laneSet as ModdleElement | undefined;\n if (laneSet) walkLaneSet(laneSet);\n return map;\n}\n\n// ─── Event trigger from eventDefinitions ─────────────────────────────────────\n\nfunction extractTrigger(el: ModdleElement): EventTrigger | undefined {\n const defs = asElements(el.eventDefinitions);\n if (defs.length === 0) return undefined;\n if (defs.length > 1) return el.$type.includes(\"Parallel\") ? \"parallelMultiple\" : \"multiple\";\n return EVENT_DEF_TO_TRIGGER[defs[0].$type];\n}\n\n// ─── SubProcessVariant from moddle type / properties ─────────────────────────\n\nfunction extractSubProcessVariant(el: ModdleElement): SubProcessVariant | undefined {\n if (el.$type === \"bpmn:Transaction\") return \"transaction\";\n if (el.$type === \"bpmn:AdHocSubProcess\") return \"adhoc\";\n if (el.triggeredByEvent === true) return \"event\";\n return \"embedded\";\n}\n\n// ─── Walk a flowElements list, producing nodes and edges ─────────────────────\n\ninterface WalkContext {\n shapes: ShapeMap;\n waypoints: WaypointMap;\n laneMembership: Map<string, string>;\n warnings: string[];\n autoX: { value: number };\n}\n\nfunction walkFlowElements(\n elements: ModdleElement[],\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n for (const el of elements) {\n const { $type, id } = el;\n if (!id) continue;\n\n const edgeType = MODDLE_TO_EDGE_TYPE[$type];\n if (edgeType !== undefined) {\n buildEdge(el, edgeType, ctx, edges);\n continue;\n }\n\n // Lane nodes are handled separately via laneMembership\n if ($type === \"bpmn:LaneSet\") continue;\n\n const elementType = MODDLE_TO_ELEMENT_TYPE[$type];\n if (!elementType) {\n ctx.warnings.push(`Unknown element type \"${$type}\" (id=${id as string}) — skipped.`);\n continue;\n }\n\n buildNode(el, elementType, parentId, ctx, nodes);\n\n // Recurse into subprocess children\n if ($type === \"bpmn:SubProcess\" || $type === \"bpmn:Transaction\" || $type === \"bpmn:AdHocSubProcess\") {\n const children = asElements(el.flowElements);\n const laneMembership = extractLaneMembership(el);\n walkFlowElements(children, id as string, { ...ctx, laneMembership }, nodes, edges);\n }\n }\n}\n\nfunction buildNode(\n el: ModdleElement,\n elementType: BpmnElementType,\n parentId: string | undefined,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n const id = el.id as string;\n const meta = BPMN_ELEMENT_CATALOG[elementType];\n const shape = ctx.shapes.get(id);\n\n // Position: use BPMNDI if available, otherwise auto-grid\n const x = shape?.x ?? ctx.autoX.value;\n const y = shape?.y ?? 100;\n if (!shape) ctx.autoX.value += (meta?.defaultWidth ?? 120) + 20;\n\n const label = asString(el.name);\n const trigger = extractTrigger(el);\n const isNonInterrupting = el.cancelActivity === false;\n\n const data: BpmnNodeData = {\n elementType,\n ...(label ? { label } : {}),\n ...(trigger ? { trigger } : {}),\n ...(isNonInterrupting ? { isNonInterrupting: true } : {}),\n };\n\n // SubProcess variant\n if (elementType === \"SubProcess\") {\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 = 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 condExpr = el.conditionExpression as { body?: string } | undefined;\n\n const data: BpmnEdgeData = {\n edgeType,\n ...(label ? { label } : {}),\n ...(condExpr?.body ? { conditionExpression: condExpr.body } : {}),\n };\n\n const waypoints = ctx.waypoints.get(id);\n if (waypoints?.length) data.routingPoints = waypoints;\n\n edges.push({ id, type: edgeType, source, target, data });\n}\n\n// ─── Handle Collaboration: Participants → Pool nodes ──────────────────────────\n\nfunction handleCollaboration(\n collaboration: ModdleElement,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n) {\n // Participants become Pool nodes\n for (const participant of asElements(collaboration.participants)) {\n const id = participant.id as string | undefined;\n if (!id) continue;\n const label = asString(participant.name);\n const shape = ctx.shapes.get(id);\n\n const poolNode: BpmnRFNode = {\n id,\n type: \"Pool\",\n position: { x: shape?.x ?? 0, y: shape?.y ?? 0 },\n data: { elementType: \"Pool\", ...(label ? { label } : {}) },\n width: shape?.width ?? 600,\n height: shape?.height ?? 200,\n };\n nodes.push(poolNode);\n\n // Walk the referenced process, assigning pool as parent\n const processRef = participant.processRef as ModdleElement | undefined;\n if (processRef) {\n const laneMembership = extractLaneMembership(processRef);\n walkFlowElements(\n asElements(processRef.flowElements),\n id,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n\n // Add Lane nodes\n const laneSet = processRef.laneSet as ModdleElement | undefined;\n if (laneSet) {\n addLaneNodes(laneSet, id, ctx, nodes);\n }\n }\n }\n\n // Message flows\n for (const mf of asElements(collaboration.messageFlows)) {\n buildEdge(mf, \"messageFlow\", ctx, edges);\n }\n\n // Conversation links\n for (const cl of asElements(collaboration.conversationLinks)) {\n buildEdge(cl, \"conversationLink\", ctx, edges);\n }\n}\n\nfunction addLaneNodes(\n laneSet: ModdleElement,\n poolId: string,\n ctx: WalkContext,\n nodes: BpmnRFNode[],\n) {\n for (const lane of asElements(laneSet.lanes)) {\n const id = lane.id as string | undefined;\n if (!id) continue;\n const label = asString(lane.name);\n const shape = ctx.shapes.get(id);\n\n nodes.push({\n id,\n type: \"Lane\",\n position: { x: shape?.x ?? 30, y: shape?.y ?? 0 },\n data: { elementType: \"Lane\", ...(label ? { label } : {}) },\n width: shape?.width ?? 570,\n height: shape?.height ?? 120,\n parentId: poolId,\n });\n\n const child = lane.childLaneSet as ModdleElement | undefined;\n if (child) addLaneNodes(child, poolId, ctx, nodes);\n }\n}\n\n// ─── Public: parseBpmnXml ─────────────────────────────────────────────────────\n\nexport async function parseBpmnXml(xml: string): Promise<BpmnImportResult> {\n const moddle = new BpmnModdle();\n const warnings: string[] = [];\n\n let rootElement: ModdleElement;\n try {\n const result = await moddle.fromXML(xml);\n rootElement = result.rootElement;\n for (const w of result.warnings) warnings.push(w.message);\n } catch (err) {\n throw new Error(`Failed to parse BPMN XML: ${String(err)}`);\n }\n\n const nodes: BpmnRFNode[] = [];\n const edges: BpmnRFEdge[] = [];\n\n const { shapes, waypoints } = extractDiagramInfo(rootElement);\n const ctx: WalkContext = {\n shapes,\n waypoints,\n laneMembership: new Map(),\n warnings,\n autoX: { value: 50 },\n };\n\n for (const rootEl of asElements(rootElement.rootElements)) {\n if (rootEl.$type === \"bpmn:Collaboration\") {\n handleCollaboration(rootEl, ctx, nodes, edges);\n } else if (rootEl.$type === \"bpmn:Process\") {\n const laneMembership = extractLaneMembership(rootEl);\n const laneSet = rootEl.laneSet as ModdleElement | undefined;\n if (laneSet) addLaneNodes(laneSet, \"\", ctx, nodes);\n walkFlowElements(\n asElements(rootEl.flowElements),\n undefined,\n { ...ctx, laneMembership },\n nodes,\n edges,\n );\n }\n }\n\n return { nodes, edges, warnings };\n}\n","import { BpmnModdle, type ModdleElement } from \"bpmn-moddle\";\nimport { BPMN_ELEMENT_CATALOG } from \"../elements/catalog\";\nimport type { BpmnRFNode, BpmnRFEdge, BpmnExportOptions } from \"./types\";\nimport {\n ELEMENT_TYPE_TO_MODDLE,\n EDGE_TYPE_TO_MODDLE,\n TRIGGER_TO_EVENT_DEF,\n} from \"./mapper\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction uid(prefix: string, id: string): string {\n return `${prefix}_${id}`;\n}\n\nfunction asNodes(nodes: BpmnRFNode[], types: string[]): BpmnRFNode[] {\n return nodes.filter((n) => types.includes(n.data.elementType));\n}\n\n// ─── Flowable extension attributes ───────────────────────────────────────────\n\nfunction buildFlowableAttrs(data: BpmnRFNode[\"data\"]): Record<string, string> {\n const attrs: Record<string, string> = {};\n if (data.flowableAssignee) attrs[\"flowable:assignee\"] = data.flowableAssignee;\n if (data.flowableCandidateGroups) attrs[\"flowable:candidateGroups\"] = data.flowableCandidateGroups;\n if (data.flowableCandidateUsers) attrs[\"flowable:candidateUsers\"] = data.flowableCandidateUsers;\n if (data.flowableFormKey) attrs[\"flowable:formKey\"] = data.flowableFormKey;\n if (data.flowableDueDate) attrs[\"flowable:dueDate\"] = data.flowableDueDate;\n if (data.flowableType) attrs[\"flowable:type\"] = data.flowableType;\n if (data.flowableExpression) attrs[\"flowable:expression\"] = data.flowableExpression;\n if (data.flowableClass) attrs[\"flowable:class\"] = data.flowableClass;\n if (data.flowableDelegateExpression) attrs[\"flowable:delegateExpression\"] = data.flowableDelegateExpression;\n return attrs;\n}\n\n// ─── Build BPMN semantic model ────────────────────────────────────────────────\n\nfunction buildSemanticModel(\n moddle: BpmnModdle,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions,\n): ModdleElement {\n const defId = opts.id ?? \"Definitions_1\";\n const defName = opts.name;\n\n // Collect pool nodes → Collaboration + Participants\n const poolNodes = asNodes(nodes, [\"Pool\"]);\n const laneNodes = asNodes(nodes, [\"Lane\"]);\n const isCollaboration = poolNodes.length > 0;\n\n const definitions = moddle.create(\"bpmn:Definitions\", {\n id: defId,\n targetNamespace: \"http://bpmn.io/schema/bpmn\",\n ...(defName ? { name: defName } : {}),\n });\n // Flowable namespace: bpmn-moddle serializes xmlns:* from the element's own namespace map.\n // Injected via the moddle descriptor when a full Flowable extension is loaded.\n // For now, individual elements declare their own flowable:* attributes via $attrs.\n\n const rootElements: ModdleElement[] = [];\n\n if (isCollaboration) {\n const participants: ModdleElement[] = [];\n const processes: ModdleElement[] = [];\n\n for (const pool of poolNodes) {\n const processId = `Process_${pool.id}`;\n const process = buildProcess(moddle, nodes, edges, pool.id, laneNodes, processId);\n processes.push(process);\n\n const participant = moddle.create(\"bpmn:Participant\", {\n id: pool.id,\n name: pool.data.label ?? \"\",\n processRef: process,\n });\n participants.push(participant);\n }\n\n // Message flows and conversation links belong to collaboration\n const messageFlowEdges = edges.filter((e) => e.data?.edgeType === \"messageFlow\");\n const conversationLinkEdges = edges.filter((e) => e.data?.edgeType === \"conversationLink\");\n\n const messageFlows = messageFlowEdges.map((e) =>\n moddle.create(\"bpmn:MessageFlow\", {\n id: e.id,\n name: e.data?.label ?? \"\",\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const conversationLinks = conversationLinkEdges.map((e) =>\n moddle.create(\"bpmn:ConversationLink\", {\n id: e.id,\n sourceRef: { id: e.source },\n targetRef: { id: e.target },\n }),\n );\n\n const collaboration = moddle.create(\"bpmn:Collaboration\", {\n id: `Collaboration_${defId}`,\n participants,\n messageFlows,\n conversationLinks,\n });\n\n rootElements.push(collaboration, ...processes);\n } else {\n // Single process — no collaboration\n const process = buildProcess(moddle, nodes, edges, undefined, laneNodes, \"Process_1\");\n rootElements.push(process);\n }\n\n (definitions as Record<string, unknown>).rootElements = rootElements;\n return definitions;\n}\n\n// Build a bpmn:Process element containing flow nodes and sequence flows\nfunction buildProcess(\n moddle: BpmnModdle,\n allNodes: BpmnRFNode[],\n allEdges: BpmnRFEdge[],\n poolId: string | undefined,\n laneNodes: BpmnRFNode[],\n processId: string,\n): ModdleElement {\n // Collect flow nodes that belong to this pool (or all if no pools)\n const myNodes = poolId\n ? allNodes.filter(\n (n) =>\n n.parentId === poolId ||\n laneNodes.some((l) => l.id === n.parentId && l.parentId === poolId),\n )\n : allNodes.filter((n) => n.data.elementType !== \"Pool\" && n.data.elementType !== \"Lane\");\n\n const myLanes = laneNodes.filter((l) => (poolId ? l.parentId === poolId : true));\n\n // Build flow elements\n const flowElements: ModdleElement[] = [];\n\n for (const node of myNodes) {\n const el = buildFlowElement(moddle, node, allNodes, allEdges);\n if (el) flowElements.push(el);\n }\n\n // Sequence flows and associations\n const myNodeIds = new Set(myNodes.map((n) => n.id));\n const myEdges = allEdges.filter(\n (e) =>\n (e.data?.edgeType === \"sequenceFlow\" ||\n e.data?.edgeType === \"association\" ||\n e.data?.edgeType === \"dataAssociation\") &&\n myNodeIds.has(e.source) &&\n myNodeIds.has(e.target),\n );\n\n for (const edge of myEdges) {\n const edgeMeta = buildEdgeElement(moddle, edge);\n if (edgeMeta) flowElements.push(edgeMeta);\n }\n\n const process = moddle.create(\"bpmn:Process\", {\n id: processId,\n isExecutable: true,\n flowElements,\n });\n\n // Lane set\n if (myLanes.length > 0) {\n const laneElements = myLanes.map((l) =>\n moddle.create(\"bpmn:Lane\", {\n id: l.id,\n name: l.data.label ?? \"\",\n flowNodeRef: myNodes\n .filter((n) => n.parentId === l.id)\n .map((n) => ({ id: n.id })),\n }),\n );\n (process as Record<string, unknown>).laneSet = moddle.create(\"bpmn:LaneSet\", {\n id: `LaneSet_${processId}`,\n lanes: laneElements,\n });\n }\n\n return process;\n}\n\nfunction buildFlowElement(\n moddle: BpmnModdle,\n node: BpmnRFNode,\n _allNodes: BpmnRFNode[],\n _allEdges: BpmnRFEdge[],\n): ModdleElement | null {\n const { elementType, label, trigger } = node.data;\n\n // Pools and Lanes are handled in buildProcess / collaboration\n if (elementType === \"Pool\" || elementType === \"Lane\") return null;\n\n const moddleType = ELEMENT_TYPE_TO_MODDLE[elementType];\n if (!moddleType) return null;\n\n const attrs: Record<string, unknown> = {\n id: node.id,\n name: label ?? \"\",\n };\n\n // Event definitions\n if (trigger && trigger !== \"none\") {\n const defType = TRIGGER_TO_EVENT_DEF[trigger];\n if (defType) {\n attrs.eventDefinitions = [moddle.create(defType, { id: uid(\"EventDef\", node.id) })];\n }\n }\n\n // SubProcess variant\n if (elementType === \"SubProcess\" && node.data.subProcessVariant === \"transaction\") {\n return moddle.create(\"bpmn:Transaction\", attrs);\n }\n if (elementType === \"SubProcess\" && node.data.subProcessVariant === \"adhoc\") {\n return moddle.create(\"bpmn:AdHocSubProcess\", attrs);\n }\n\n const element = moddle.create(moddleType, attrs);\n\n // Flowable extension attributes\n const flowableAttrs = buildFlowableAttrs(node.data);\n if (Object.keys(flowableAttrs).length > 0) {\n (element as Record<string, unknown>).$attrs = flowableAttrs;\n }\n\n return element;\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.conditionExpression) {\n attrs.conditionExpression = moddle.create(\"bpmn:FormalExpression\", {\n body: edge.data.conditionExpression,\n });\n }\n\n return moddle.create(moddleType, attrs);\n}\n\n// ─── Build BPMNDI (diagram interchange / layout) ─────────────────────────────\n\nfunction buildBpmnDI(\n moddle: BpmnModdle,\n definitions: ModdleElement,\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n): void {\n const shapes: ModdleElement[] = [];\n const edgeShapes: ModdleElement[] = [];\n\n 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: node.position.x,\n 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 =\n edge.data?.routingPoints?.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\n// ─── Public: serializeBpmnXml ─────────────────────────────────────────────────\n\nexport async function serializeBpmnXml(\n nodes: BpmnRFNode[],\n edges: BpmnRFEdge[],\n opts: BpmnExportOptions = {},\n): Promise<string> {\n const moddle = new BpmnModdle();\n\n const definitions = buildSemanticModel(moddle, nodes, edges, opts);\n buildBpmnDI(moddle, definitions, nodes, edges);\n\n const { xml } = await moddle.toXML(definitions, {\n format: opts.format ?? true,\n });\n\n return xml;\n}\n","export type SimVariables = Record<string, string | number | boolean>;\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n if ((raw.startsWith(\"'\") && raw.endsWith(\"'\")) || (raw.startsWith('\"') && raw.endsWith('\"')))\n return raw.slice(1, -1);\n const n = Number(raw);\n return isNaN(n) ? raw : n;\n}\n\n/**\n * Evaluates a BPMN condition expression (${...}) against a variables map.\n * Supports: bare variable (truthy), ==, !=, >, >=, <, <=, !var\n */\nexport function evalCondition(expr: string, variables: SimVariables): boolean {\n const body = expr.trim().replace(/^\\$\\{|\\}$/g, \"\").trim();\n if (!body) return false;\n\n // Logical NOT: !varName\n if (body.startsWith(\"!\")) {\n const inner = body.slice(1).trim();\n return !Boolean(variables[inner]);\n }\n\n // != comparison\n const neq = body.match(/^(\\w+)\\s*!=\\s*(.+)$/);\n if (neq) return String(variables[neq[1].trim()]) !== String(parseValue(neq[2].trim()));\n\n // == comparison\n const eq = body.match(/^(\\w+)\\s*==\\s*(.+)$/);\n if (eq) {\n const lhs = variables[eq[1].trim()];\n const rhs = parseValue(eq[2].trim());\n // eslint-disable-next-line eqeqeq\n return lhs == rhs;\n }\n\n // >= comparison\n const gte = body.match(/^(\\w+)\\s*>=\\s*(-?\\d+\\.?\\d*)$/);\n if (gte) return Number(variables[gte[1].trim()]) >= Number(gte[2]);\n\n // <= comparison\n const lte = body.match(/^(\\w+)\\s*<=\\s*(-?\\d+\\.?\\d*)$/);\n if (lte) return Number(variables[lte[1].trim()]) <= Number(lte[2]);\n\n // > comparison\n const gt = body.match(/^(\\w+)\\s*>\\s*(-?\\d+\\.?\\d*)$/);\n if (gt) return Number(variables[gt[1].trim()]) > Number(gt[2]);\n\n // < comparison\n const lt = body.match(/^(\\w+)\\s*<\\s*(-?\\d+\\.?\\d*)$/);\n if (lt) return Number(variables[lt[1].trim()]) < Number(lt[2]);\n\n // Bare variable → truthy\n return Boolean(variables[body]);\n}\n","import { evalCondition } from \"./evaluator\";\nexport type { SimVariables } from \"./evaluator\";\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface SimNode {\n id: string;\n type: string;\n name?: string;\n parentId?: string;\n /** BoundaryEvent only — the task/subprocess this event is attached to. */\n attachedToRef?: string;\n /** BoundaryEvent: true = interrupting (default), false = non-interrupting. */\n isInterrupting?: boolean;\n}\n\nexport interface SimEdge {\n id: string;\n type: string;\n source: string;\n target: string;\n conditionExpression?: string;\n isDefault?: boolean;\n}\n\nexport interface SimDiagram {\n nodes: SimNode[];\n edges: SimEdge[];\n}\n\nexport interface SimToken {\n id: string;\n /** The element the token currently occupies. */\n elementId: string;\n /**\n * The subprocess scope this token belongs to.\n * \"root\" for top-level tokens; the subprocess node id for child tokens.\n */\n scopeId: string;\n}\n\nexport type SimStatus = \"idle\" | \"running\" | \"completed\" | \"deadlocked\";\n\nexport type SimLogType =\n | \"created\"\n | \"fired\"\n | \"split\"\n | \"joined\"\n | \"consumed\"\n | \"blocked\"\n | \"deadlocked\"\n | \"interrupted\";\n\nexport interface SimLogEntry {\n step: number;\n type: SimLogType;\n elementId: string;\n tokenId?: string;\n message: string;\n}\n\nexport interface SimulationState {\n tokens: SimToken[];\n step: number;\n status: SimStatus;\n log: SimLogEntry[];\n /** Process-level variables used for gateway condition evaluation. */\n variables: Record<string, string | number | boolean>;\n /** IDs of subprocess nodes whose internal execution has started. */\n enteredScopes: string[];\n}\n\n// ─── Diagram query helpers ────────────────────────────────────────────────────\n\nfunction seqOut(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.source === nodeId);\n}\n\nfunction seqIn(diagram: SimDiagram, nodeId: string): SimEdge[] {\n return diagram.edges.filter((e) => e.type === \"sequenceFlow\" && e.target === nodeId);\n}\n\nfunction nodeById(diagram: SimDiagram, id: string): SimNode | undefined {\n return diagram.nodes.find((n) => n.id === id);\n}\n\n/** Returns boundary events attached to the given host element. */\nfunction boundaryEventsOf(diagram: SimDiagram, hostId: string): SimNode[] {\n return diagram.nodes.filter((n) => n.type === \"BoundaryEvent\" && n.attachedToRef === hostId);\n}\n\nlet _tokenCounter = 0;\nfunction nextTokenId(): string {\n return `tok_${++_tokenCounter}`;\n}\n\n// ─── Element classification ───────────────────────────────────────────────────\n\nconst GATEWAY_TYPES = new Set([\n \"ExclusiveGateway\",\n \"InclusiveGateway\",\n \"ParallelGateway\",\n \"ComplexGateway\",\n \"EventBasedGateway\",\n]);\n\nconst TASK_TYPES = new Set([\n \"Task\",\n \"UserTask\",\n \"ServiceTask\",\n \"ScriptTask\",\n \"ManualTask\",\n \"BusinessRuleTask\",\n \"ReceiveTask\",\n \"SendTask\",\n \"CallActivity\",\n]);\n\nfunction isAutomatic(nodeType: string): boolean {\n return (\n nodeType === \"StartEvent\" ||\n nodeType === \"EndEvent\" ||\n nodeType === \"IntermediateThrowEvent\" ||\n GATEWAY_TYPES.has(nodeType)\n );\n}\n\nfunction isManual(nodeType: string): boolean {\n return (\n TASK_TYPES.has(nodeType) ||\n nodeType === \"IntermediateCatchEvent\" ||\n nodeType === \"BoundaryEvent\"\n );\n}\n\nfunction isSubProcess(nodeType: string): boolean {\n return (\n nodeType === \"SubProcess\" ||\n nodeType === \"Transaction\" ||\n nodeType === \"AdHocSubProcess\"\n );\n}\n\n// ─── Scope resolution ─────────────────────────────────────────────────────────\n\n/**\n * Determines the scope of a node by checking whether its parent is a SubProcess.\n * Returns \"root\" for top-level nodes or children of Pools/Lanes.\n */\nfunction getScopeId(diagram: SimDiagram, nodeId: string): string {\n const node = nodeById(diagram, nodeId);\n if (!node?.parentId) return \"root\";\n const parent = nodeById(diagram, node.parentId);\n return parent && isSubProcess(parent.type) ? node.parentId : \"root\";\n}\n\n// ─── Core token helpers ───────────────────────────────────────────────────────\n\nfunction withLog(\n state: SimulationState,\n entry: Omit<SimLogEntry, \"step\">,\n): SimulationState {\n return { ...state, log: [...state.log, { ...entry, step: state.step }] };\n}\n\n/**\n * Removes the consumed token and creates new tokens at each outgoing\n * sequence-flow target of sourceId. Each new token inherits the scope\n * determined by the target node's position in the diagram.\n */\nfunction disperseToTargets(\n diagram: SimDiagram,\n state: SimulationState,\n sourceId: string,\n consumedTokenId: string | null,\n): SimulationState {\n const outEdges = seqOut(diagram, sourceId);\n if (outEdges.length === 0) return state;\n\n let next: SimulationState = {\n ...state,\n tokens:\n consumedTokenId !== null\n ? state.tokens.filter((t) => t.id !== consumedTokenId)\n : state.tokens,\n };\n\n for (const edge of outEdges) {\n const target = nodeById(diagram, edge.target);\n if (!target) continue;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${target.name ?? edge.target}\".`,\n });\n }\n\n return next;\n}\n\n// ─── SubProcess scope management ─────────────────────────────────────────────\n\nfunction enterSubProcess(\n diagram: SimDiagram,\n state: SimulationState,\n subProcNode: SimNode,\n): SimulationState {\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === subProcNode.id,\n );\n\n let next: SimulationState = {\n ...state,\n enteredScopes: [...state.enteredScopes, subProcNode.id],\n };\n\n for (const startNode of childStarts) {\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: startNode.id,\n scopeId: subProcNode.id,\n };\n next = {\n ...next,\n tokens: [...next.tokens, newToken],\n };\n next = withLog(next, {\n type: \"created\",\n elementId: startNode.id,\n tokenId: newToken.id,\n message: `SubProcess \"${subProcNode.name ?? subProcNode.id}\" entered — token at \"${startNode.name ?? startNode.id}\".`,\n });\n }\n\n return next;\n}\n\n// ─── Automatic element execution ──────────────────────────────────────────────\n\nfunction fireAutomatic(\n diagram: SimDiagram,\n state: SimulationState,\n token: SimToken,\n): SimulationState {\n const node = nodeById(diagram, token.elementId);\n if (!node) return state;\n const { type } = node;\n const vars = state.variables;\n\n // EndEvent ─────────────────────────────────────────────────────────────────\n if (type === \"EndEvent\") {\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => t.id !== token.id),\n };\n next = withLog(next, {\n type: \"consumed\",\n elementId: node.id,\n tokenId: token.id,\n message: `Token consumed at end event \"${node.name ?? node.id}\".`,\n });\n return next;\n }\n\n // StartEvent / IntermediateThrowEvent ──────────────────────────────────────\n if (type === \"StartEvent\" || type === \"IntermediateThrowEvent\") {\n let next = withLog(state, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `\"${node.name ?? node.id}\" (${type}) fired.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ExclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"ExclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // XOR join: pass through immediately\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" join — token passes through.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Evaluate conditions; fall back to default, then first\n const chosen =\n outEdges.find(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n ) ??\n outEdges.find((e) => e.isDefault) ??\n outEdges[0];\n\n if (!chosen) return state;\n const target = nodeById(diagram, chosen.target);\n if (!target) return state;\n\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ExclusiveGateway \"${node.name ?? node.id}\" split → \"${target.name ?? chosen.target}\".`,\n });\n return next;\n }\n\n // InclusiveGateway ─────────────────────────────────────────────────────────\n if (type === \"InclusiveGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n // OR join: pass through (simplified — full semantics require tracking active paths)\n let next = withLog(state, {\n type: \"joined\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" join.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n const outEdges = seqOut(diagram, node.id);\n // Take all paths whose condition is true; if none match → take default\n const matching = outEdges.filter(\n (e) => e.conditionExpression && !e.isDefault && evalCondition(e.conditionExpression, vars),\n );\n const activePaths = matching.length > 0 ? matching : outEdges.filter((e) => e.isDefault);\n const paths = activePaths.length > 0 ? activePaths : outEdges; // all if no conditions defined\n\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `InclusiveGateway \"${node.name ?? node.id}\" split → ${paths.length} path(s).`,\n });\n\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== token.id) };\n for (const edge of paths) {\n const tgt = nodeById(diagram, edge.target);\n if (!tgt) continue;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: edge.target,\n scopeId: getScopeId(diagram, edge.target),\n };\n next = { ...next, tokens: [...next.tokens, newToken] };\n next = withLog(next, {\n type: \"created\",\n elementId: edge.target,\n tokenId: newToken.id,\n message: `Token created at \"${tgt.name ?? edge.target}\".`,\n });\n }\n return next;\n }\n\n // ParallelGateway ──────────────────────────────────────────────────────────\n if (type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n if (incoming.length >= 2) {\n const atGateway = state.tokens.filter((t) => t.elementId === node.id);\n if (atGateway.length < incoming.length) {\n return withLog(state, {\n type: \"blocked\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" waiting for ${incoming.length - atGateway.length} more token(s).`,\n });\n }\n const consumeIds = new Set(atGateway.map((t) => t.id));\n let next: SimulationState = {\n ...state,\n tokens: state.tokens.filter((t) => !consumeIds.has(t.id)),\n };\n next = withLog(next, {\n type: \"joined\",\n elementId: node.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" join fired — all paths synchronized.`,\n });\n return disperseToTargets(diagram, next, node.id, null);\n }\n // AND split\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `ParallelGateway \"${node.name ?? node.id}\" split → ${seqOut(diagram, node.id).length} paths.`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // EventBasedGateway ────────────────────────────────────────────────────────\n // Disperses to ALL outgoing catch events; first one fired wins (race).\n if (type === \"EventBasedGateway\") {\n let next = withLog(state, {\n type: \"split\",\n elementId: node.id,\n tokenId: token.id,\n message: `EventBasedGateway \"${node.name ?? node.id}\" waiting — ${seqOut(diagram, node.id).length} competing event(s).`,\n });\n return disperseToTargets(diagram, next, node.id, token.id);\n }\n\n // ComplexGateway (simplified: first path) ─────────────────────────────────\n if (type === \"ComplexGateway\") {\n const outEdges = seqOut(diagram, node.id);\n const chosen = outEdges[0];\n if (!chosen) return state;\n const newToken: SimToken = {\n id: nextTokenId(),\n elementId: chosen.target,\n scopeId: getScopeId(diagram, chosen.target),\n };\n let next: SimulationState = {\n ...state,\n tokens: [...state.tokens.filter((t) => t.id !== token.id), newToken],\n };\n next = withLog(next, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `ComplexGateway \"${node.name ?? node.id}\" fired → \"${chosen.target}\".`,\n });\n return next;\n }\n\n return state;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport function createSimulation(\n diagram: SimDiagram,\n initialVariables: Record<string, string | number | boolean> = {},\n): SimulationState {\n _tokenCounter = 0;\n\n const startEvents = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && !n.parentId,\n );\n\n const tokens: SimToken[] = startEvents.map((n) => ({\n id: nextTokenId(),\n elementId: n.id,\n scopeId: \"root\",\n }));\n\n const log: SimLogEntry[] = startEvents.map((n, i) => ({\n step: 0,\n type: \"created\" as SimLogType,\n elementId: n.id,\n tokenId: tokens[i]?.id,\n message: `Simulation started — token placed at \"${n.name ?? n.id}\".`,\n }));\n\n return {\n tokens,\n step: 0,\n status: startEvents.length > 0 ? \"running\" : \"idle\",\n log,\n variables: initialVariables,\n enteredScopes: [],\n };\n}\n\nexport function tick(diagram: SimDiagram, state: SimulationState): SimulationState {\n if (state.status !== \"running\") return state;\n\n let current: SimulationState = { ...state, step: state.step + 1 };\n let changed = true;\n let guard = 0;\n\n while (changed && guard < 1000) {\n guard++;\n changed = false;\n\n for (const token of current.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n // ── SubProcess enter / wait / complete ─────────────────────────────────\n if (isSubProcess(node.type)) {\n if (!current.enteredScopes.includes(node.id)) {\n // Enter: spawn child tokens at internal start events\n const childStarts = diagram.nodes.filter(\n (n) => n.type === \"StartEvent\" && n.parentId === node.id,\n );\n if (childStarts.length > 0) {\n current = enterSubProcess(diagram, current, node);\n changed = true;\n break;\n }\n // No internal structure → treat as manual task (don't advance)\n } else {\n // Check if scope completed\n const scopeTokens = current.tokens.filter((t) => t.scopeId === node.id);\n if (scopeTokens.length === 0) {\n let next = withLog(current, {\n type: \"fired\",\n elementId: node.id,\n tokenId: token.id,\n message: `SubProcess \"${node.name ?? node.id}\" completed.`,\n });\n current = disperseToTargets(diagram, next, node.id, token.id);\n changed = true;\n break;\n }\n }\n continue;\n }\n\n // ── ParallelGateway join: only fire when all tokens are present ─────────\n if (node.type === \"ParallelGateway\") {\n const incoming = seqIn(diagram, node.id);\n const atGateway = current.tokens.filter((t) => t.elementId === node.id);\n if (incoming.length >= 2 && atGateway.length < incoming.length) continue;\n }\n\n if (!isAutomatic(node.type)) continue;\n\n const prevLen = current.tokens.length;\n const prevIds = new Set(current.tokens.map((t) => t.id));\n current = fireAutomatic(diagram, current, token);\n\n const same =\n current.tokens.length === prevLen &&\n [...prevIds].every((id) => current.tokens.some((t) => t.id === id));\n\n if (!same) {\n changed = true;\n break;\n }\n }\n }\n\n // Determine final status\n if (current.tokens.length === 0) {\n current = { ...current, status: \"completed\" };\n }\n\n return current;\n}\n\nexport function fire(\n diagram: SimDiagram,\n state: SimulationState,\n elementId: string,\n variables?: Record<string, string | number | boolean>,\n): SimulationState {\n if (state.status !== \"running\") return state;\n\n const node = nodeById(diagram, elementId);\n if (!node) return state;\n\n const mergedVars = variables ? { ...state.variables, ...variables } : state.variables;\n\n // ── BoundaryEvent: fired from the host task context, no token at the event ─\n if (node.type === \"BoundaryEvent\") {\n const hostId = node.attachedToRef;\n if (!hostId) return state;\n\n // The boundary event is activated relative to a token at the host task\n const hostToken = state.tokens.find((t) => t.elementId === hostId);\n if (!hostToken) return state;\n\n const isInterrupting = node.isInterrupting !== false;\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: isInterrupting ? \"interrupted\" : \"fired\",\n elementId,\n tokenId: hostToken.id,\n message: `BoundaryEvent \"${node.name ?? elementId}\" fired (${isInterrupting ? \"interrupting\" : \"non-interrupting\"}).`,\n });\n\n if (isInterrupting) {\n // Remove the host task token (interrupts the task)\n next = { ...next, tokens: next.tokens.filter((t) => t.id !== hostToken.id) };\n }\n // Non-interrupting: host token stays; a new parallel token follows the boundary path\n\n next = disperseToTargets(diagram, next, elementId, null);\n return tick(diagram, { ...next, step: next.step - 1 });\n }\n\n const token = state.tokens.find((t) => t.elementId === elementId);\n if (!token) return state;\n\n // ── IntermediateCatchEvent following an EventBasedGateway: cancel race ────\n if (node.type === \"IntermediateCatchEvent\") {\n const gwEdge = seqIn(diagram, elementId).find((e) => {\n const src = nodeById(diagram, e.source);\n return src?.type === \"EventBasedGateway\";\n });\n if (gwEdge) {\n // Cancel all sibling catch events in the race\n const gw = nodeById(diagram, gwEdge.source);\n if (gw) {\n const siblingTargets = new Set(\n seqOut(diagram, gw.id)\n .map((e) => e.target)\n .filter((id) => id !== elementId),\n );\n state = {\n ...state,\n tokens: state.tokens.filter((t) => !siblingTargets.has(t.elementId)),\n };\n }\n }\n }\n\n let next: SimulationState = { ...state, variables: mergedVars, step: state.step + 1 };\n next = withLog(next, {\n type: \"fired\",\n elementId,\n tokenId: token.id,\n message: `\"${node.name ?? elementId}\" (${node.type}) manually fired.`,\n });\n next = disperseToTargets(diagram, next, elementId, token.id);\n return tick(diagram, { ...next, step: next.step - 1 });\n}\n\nexport function getFireable(diagram: SimDiagram, state: SimulationState): string[] {\n if (state.status !== \"running\") return [];\n\n const fireable = new Set<string>();\n\n for (const token of state.tokens) {\n const node = nodeById(diagram, token.elementId);\n if (!node) continue;\n\n if (isManual(node.type)) {\n fireable.add(node.id);\n }\n\n // Expose boundary events attached to tasks that have tokens\n if (TASK_TYPES.has(node.type)) {\n for (const be of boundaryEventsOf(diagram, node.id)) {\n fireable.add(be.id);\n }\n }\n }\n\n return [...fireable];\n}\n\nexport function isCompleted(state: SimulationState): boolean {\n return state.status === \"completed\";\n}\n\n/** Set or update a process variable without advancing the simulation. */\nexport function setVariable(\n state: SimulationState,\n key: string,\n value: string | number | boolean,\n): SimulationState {\n return { ...state, variables: { ...state.variables, [key]: value } };\n}\n","import {\n createSimulation,\n tick,\n fire,\n getFireable,\n isCompleted,\n type SimDiagram,\n type SimulationState,\n} from \"../simulation/index\";\n\nexport type SimMode = \"preview\" | \"live\";\n\nexport type SimVariables = Record<string, string | number | boolean>;\n\n// ─── SimulationAdapter ────────────────────────────────────────────────────────\n//\n// Contract between the UI and whatever drives process execution.\n//\n// The webapp implements this interface for \"live\" mode by calling its own\n// backend API (which in turn calls Flowable). The library provides only the\n// \"preview\" implementation for offline design-time simulation.\n//\n// Example live adapter in the webapp:\n//\n// function createBackendAdapter(apiBase: string): SimulationAdapter {\n// let lastState = /* idle SimulationState */;\n// return {\n// mode: \"live\",\n// async start(vars) {\n// lastState = await post(`${apiBase}/process/start`, vars);\n// return lastState;\n// },\n// async tick() {\n// lastState = await get(`${apiBase}/process/state`);\n// return lastState;\n// },\n// async fire(elementId, vars) {\n// lastState = await post(`${apiBase}/process/fire/${elementId}`, vars);\n// return lastState;\n// },\n// async getFireable() {\n// return get(`${apiBase}/process/fireable`);\n// },\n// getState() { return lastState; },\n// isCompleted() { return lastState.status === \"completed\"; },\n// };\n// }\n\nexport interface SimulationAdapter {\n readonly mode: SimMode;\n\n /** Initialize the simulation. Places tokens (preview) or starts the process instance (live). */\n start(variables?: SimVariables): Promise<SimulationState>;\n\n /** Advance automatic elements. No-op in live mode — the engine drives execution. */\n tick(): Promise<SimulationState>;\n\n /**\n * Manually fire an element (complete a task, trigger a catch event).\n * In live mode: delegates to the backend, which completes the Flowable task.\n */\n fire(elementId: string, variables?: SimVariables): Promise<SimulationState>;\n\n /** Returns element IDs that can be manually fired right now. */\n getFireable(): Promise<string[]>;\n\n /** Returns the last known SimulationState snapshot without a network call. */\n getState(): SimulationState;\n\n isCompleted(): boolean;\n}\n\n// ─── Preview adapter — offline, uses the token simulator ─────────────────────\n\nclass PreviewAdapter implements SimulationAdapter {\n readonly mode: SimMode = \"preview\";\n private state: SimulationState;\n\n constructor(\n private readonly diagram: SimDiagram,\n initialVariables: SimVariables = {},\n ) {\n this.state = createSimulation(diagram, initialVariables);\n }\n\n async start(variables?: SimVariables): Promise<SimulationState> {\n this.state = tick(this.diagram, createSimulation(this.diagram, variables ?? {}));\n return this.state;\n }\n\n async tick(): Promise<SimulationState> {\n this.state = tick(this.diagram, this.state);\n return this.state;\n }\n\n async fire(elementId: string, variables?: SimVariables): Promise<SimulationState> {\n this.state = fire(this.diagram, this.state, elementId, variables);\n return this.state;\n }\n\n async getFireable(): Promise<string[]> {\n return getFireable(this.diagram, this.state);\n }\n\n getState(): SimulationState {\n return this.state;\n }\n\n isCompleted(): boolean {\n return isCompleted(this.state);\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createPreviewAdapter(\n diagram: SimDiagram,\n initialVariables?: SimVariables,\n): SimulationAdapter {\n return new PreviewAdapter(diagram, initialVariables);\n}\n"]}