@aranzatech/diagrams-bpmn 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{catalog-DNIyjHbl.d.ts → catalog-CYZHikuU.d.ts} +1 -1
- package/dist/{catalog-DG-sz0VM.d.cts → catalog-C_S9hyyn.d.cts} +1 -1
- package/dist/{chunk-CPFUQM6H.js → chunk-EMTO53AN.js} +54 -73
- package/dist/chunk-EMTO53AN.js.map +1 -0
- package/dist/chunk-G22XQD6H.js +64 -0
- package/dist/chunk-G22XQD6H.js.map +1 -0
- package/dist/{chunk-NYIYQUGX.js → chunk-OFOTX3LA.js} +124 -20
- package/dist/chunk-OFOTX3LA.js.map +1 -0
- package/dist/{chunk-YAYZW45I.js → chunk-SRUWPELT.js} +80 -3
- package/dist/chunk-SRUWPELT.js.map +1 -0
- package/dist/edges/index.cjs +75 -35
- package/dist/edges/index.cjs.map +1 -1
- package/dist/edges/index.js +2 -1
- package/dist/elements/index.d.cts +3 -3
- package/dist/elements/index.d.ts +3 -3
- package/dist/extensions/index.d.cts +2 -2
- package/dist/extensions/index.d.ts +2 -2
- package/dist/index.cjs +196 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/layout/index.cjs +1280 -889
- package/dist/layout/index.cjs.map +1 -1
- package/dist/layout/index.d.cts +4 -4
- package/dist/layout/index.d.ts +4 -4
- package/dist/layout/index.js +694 -106
- package/dist/layout/index.js.map +1 -1
- package/dist/modeling/index.cjs +78 -0
- package/dist/modeling/index.cjs.map +1 -1
- package/dist/modeling/index.d.cts +10 -5
- package/dist/modeling/index.d.ts +10 -5
- package/dist/modeling/index.js +1 -1
- package/dist/{types-nvF59RGF.d.cts → types--x9aoecw.d.cts} +5 -0
- package/dist/{types-nvF59RGF.d.ts → types--x9aoecw.d.ts} +5 -0
- package/dist/{types-dQUuSnV5.d.cts → types-CrFDTGo9.d.cts} +1 -1
- package/dist/{types-CuDL2YGL.d.ts → types-DoPv3m7u.d.ts} +2 -2
- package/dist/{types-X5FyP8oS.d.ts → types-DteJykQG.d.ts} +1 -1
- package/dist/{types-CDp9kWQ4.d.cts → types-YZ4sj3Ih.d.cts} +2 -2
- package/dist/validation/index.d.cts +3 -3
- package/dist/validation/index.d.ts +3 -3
- package/dist/xml/index.cjs +162 -18
- package/dist/xml/index.cjs.map +1 -1
- package/dist/xml/index.d.cts +4 -4
- package/dist/xml/index.d.ts +4 -4
- package/dist/xml/index.js +2 -1
- package/package.json +1 -1
- package/dist/chunk-CPFUQM6H.js.map +0 -1
- package/dist/chunk-FFWJA5BV.js +0 -163
- package/dist/chunk-FFWJA5BV.js.map +0 -1
- package/dist/chunk-NYIYQUGX.js.map +0 -1
- package/dist/chunk-YAYZW45I.js.map +0 -1
- package/dist/elk-QT7H4252.js +0 -6
- package/dist/elk-QT7H4252.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modeling/index.ts"],"names":["laneWidth","laneMap","lastLane","poolW","poolH"],"mappings":"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","file":"chunk-SRUWPELT.js","sourcesContent":["import {\n addNode,\n connectNodes,\n copyElements,\n createModelingRules,\n createSelectionState,\n createUniqueId,\n DiagramEventBus,\n createDiagramEventBus,\n executeCommand,\n executeCommands,\n findContainingNode,\n getNode,\n getNodeAbsolutePosition,\n getNodeCenterPosition,\n getNodeSize,\n getOutgoingEdges,\n getIncomingEdges,\n groupNodes,\n getNodeTabOrder,\n normalizeDiagramState,\n pasteElements,\n patchEdge,\n patchNode,\n moveNode,\n persistCommandHistory,\n removeElements,\n replaceNode,\n reparentNode,\n resizeNode,\n resizeNodeByHandle,\n restoreCommandHistory,\n setSelection,\n toRelativeNodePosition,\n computeSmartGuides,\n LayoutCache,\n createLayoutCache,\n withLayoutCache,\n getEdgeLabelLayout,\n type CommandStackState,\n type ClipboardState,\n type ConnectionValidator,\n type DiagramCommand,\n type DiagramSnapshot,\n type DiagramState,\n type EdgeLabelLayout,\n type EdgeLabelOffsetOptions,\n type LayoutCacheOptions,\n type LayoutFn,\n type ModelingRules,\n type ResizeHandlePosition,\n type SelectionState,\n type SmartGuideResult,\n type Viewport,\n} from \"@aranzatech/diagrams-core\";\nimport {\n createDiagramDocument,\n deserializeDiagram,\n deserializeDiagramSnapshot,\n parseDiagramDocument,\n serializeDiagram,\n serializeDiagramSnapshot,\n type CreateDiagramDocumentOptions,\n type DiagramDocument,\n} from \"@aranzatech/diagrams-core/serialization\";\nimport {\n BPMN_ELEMENT_CATALOG,\n getBpmnElementSize,\n isBpmnElementResizable,\n} from \"../elements/catalog\";\nimport {\n acceptsBoundaryEvents,\n getHandlePolicy,\n isDataType,\n isEventType,\n isGatewayType,\n} from \"../elements/guards\";\nimport type { BpmnElementType, BpmnEdgeData, BpmnEdgeType, BpmnNodeData } from \"../elements/types\";\nimport type { BpmnRFEdge, BpmnRFNode } from \"../xml/types\";\n\nexport { getBpmnElementSize, isBpmnElementResizable } from \"../elements/catalog\";\n\nexport type BpmnDiagramState = DiagramState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnClipboardState = ClipboardState<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnDiagramDocument = DiagramDocument<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnDiagramSnapshot = DiagramSnapshot<BpmnRFNode, BpmnRFEdge>;\nexport type BpmnEventBus = DiagramEventBus<BpmnRFNode, BpmnRFEdge>;\n\nexport interface CreateBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n position: { x: number; y: number };\n label?: string;\n parentId?: string;\n width?: number;\n height?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ConnectBpmnOptions {\n id?: string;\n source: string;\n target: string;\n edgeType?: BpmnEdgeType;\n label?: string;\n sourceHandle?: string | null;\n targetHandle?: string | null;\n data?: Partial<BpmnEdgeData>;\n}\n\nexport interface ReplaceBpmnNodeOptions {\n id: string;\n elementType: BpmnElementType;\n label?: string;\n data?: Partial<BpmnNodeData>;\n width?: number;\n height?: number;\n}\n\nexport interface ReparentBpmnNodeOptions {\n id: string;\n parentId?: string;\n position?: { x: number; y: number };\n}\n\nexport interface FindBpmnContainerAtOptions {\n position: { x: number; y: number };\n excludeId?: string;\n}\n\nexport interface ReparentBpmnNodeAtPositionOptions {\n id: string;\n position: { x: number; y: number };\n}\n\nexport interface ResolveBpmnDropTargetOptions {\n elementType: BpmnElementType;\n position: { x: number; y: number };\n excludeId?: string;\n}\n\nexport interface BpmnDropTargetResolution {\n container?: BpmnRFNode | undefined;\n highlightedContainerId: string | null;\n invalidContainerId: string | null;\n isValid: boolean;\n}\n\nexport interface BpmnEdgeLaneContext {\n edgeId: string;\n sourceLaneId?: string | undefined;\n targetLaneId?: string | undefined;\n sourcePoolId?: string | undefined;\n targetPoolId?: string | undefined;\n sameLane: boolean;\n samePool: boolean;\n crossesLanesWithinPool: boolean;\n crossesPools: boolean;\n}\n\nexport type BpmnConnectionResolution =\n | { ok: true; edgeType: BpmnEdgeType }\n | { ok: false; reason: string };\n\nexport interface BpmnBoundaryAttachment {\n hostId: string;\n position: { x: number; y: number };\n}\n\nexport interface ResizeBpmnNodeOptions {\n id: string;\n width?: number;\n height?: number;\n}\n\nexport interface ReorderBpmnLaneOptions {\n poolId: string;\n laneId: string;\n index: number;\n}\n\nexport interface MoveBpmnLaneOptions {\n poolId: string;\n laneId: string;\n position: { x: number; y: number };\n}\n\nexport interface RouteBpmnEdgeOptions {\n id: string;\n routingPoints: Array<{ x: number; y: number }>;\n}\n\nexport interface PasteBpmnOptions {\n offset?: { x: number; y: number };\n position?: { x: number; y: number };\n}\n\nexport interface GroupAsBpmnSubProcessOptions {\n groupId?: string;\n nodeIds: string[];\n label?: string;\n padding?: number;\n data?: Partial<BpmnNodeData>;\n}\n\nexport interface ResizeBpmnNodeByHandleOptions {\n id: string;\n handle: ResizeHandlePosition;\n dx: number;\n dy: number;\n}\n\nexport function createBpmnNode(options: CreateBpmnNodeOptions): BpmnRFNode {\n const size = getBpmnElementSize(options.elementType);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n const orientation = options.data?.orientation ?? meta.orientation;\n const dragHandle = getBpmnDragHandleSelector(options.elementType);\n return {\n id: options.id,\n type: options.elementType,\n position: options.position,\n data: {\n elementType: options.elementType,\n orientation,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n width: options.width ?? size.width,\n height: options.height ?? size.height,\n zIndex: getBpmnNodeZIndex(options.elementType),\n ...(options.parentId ? { parentId: options.parentId } : {}),\n // extent:\"parent\" is intentionally omitted for Lane — it blocks resize beyond\n // the Pool boundary before the Pool/Lane coupling can expand the Pool.\n // Lane containment during drag is handled programmatically in handleNodeDragStop.\n ...(dragHandle ? { dragHandle } : {}),\n };\n}\n\nexport function getBpmnNodeZIndex(elementType: BpmnElementType): number {\n if (elementType === \"Pool\") return 0;\n if (elementType === \"Lane\") return 1;\n if (elementType === \"BoundaryEvent\") return 4;\n return 3;\n}\n\nexport function withBpmnNodeZIndexes(\n nodes: BpmnRFNode[],\n): BpmnRFNode[] {\n return nodes.map((node) => {\n const zIndex = getBpmnNodeZIndex(node.data.elementType);\n return node.zIndex === zIndex ? node : { ...node, zIndex };\n });\n}\n\nexport const BPMN_POOL_LANE_LAYOUT = {\n // Pool inner padding on all sides (no left label strip).\n // 8px = pool border (2px) + 6px visible gap.\n poolPad: 8,\n /** @deprecated use poolPad */\n poolHeaderSize: 8,\n // Lane left label strip (vertical text).\n laneHeaderSize: 28,\n laneGap: 0,\n verticalPoolHeaderSize: 28,\n minLaneSize: 96,\n} as const;\n\nexport const BPMN_POOL_LANE_STACK_LAYOUT = {\n poolInnerPad: 8,\n laneGap: 8,\n minLaneWidth: 240,\n minLaneHeight: 80,\n defaultLaneHeight: 120,\n} as const;\n\nexport function getBpmnDragHandleSelector(\n elementType: BpmnElementType,\n): string | undefined {\n if (elementType === \"Pool\") return \".pool-drag-handle\";\n if (elementType === \"Lane\") return \".lane-drag-handle\";\n return undefined;\n}\n\nexport const BPMN_SELECTION_STYLE = {\n nodeOutline: \"#2563eb\",\n edgeStroke: \"#2563eb\",\n handleFill: \"#ffffff\",\n handleStroke: \"#2563eb\",\n resizeHandleSize: 8,\n routingPointRadius: 5,\n} as const;\n\nexport const BPMN_ROUTABLE_EDGE_TYPES = [\n \"sequenceFlow\",\n \"messageFlow\",\n \"association\",\n \"dataAssociation\",\n \"conversationLink\",\n] satisfies BpmnEdgeType[];\n\nexport interface BpmnConnectionRule {\n edgeType: BpmnEdgeType;\n sourceCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n targetCategories: Array<BpmnRFNode[\"data\"][\"elementType\"] | \"flowNode\" | \"data\" | \"artifact\" | \"conversation\">;\n allowSameParent?: boolean;\n allowDifferentParent?: boolean;\n}\n\nexport const BPMN_EDGE_CONNECTION_RULES: Record<BpmnEdgeType, BpmnConnectionRule> = {\n sequenceFlow: {\n edgeType: \"sequenceFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: false,\n },\n messageFlow: {\n edgeType: \"messageFlow\",\n sourceCategories: [\"flowNode\"],\n targetCategories: [\"flowNode\"],\n allowSameParent: false,\n allowDifferentParent: true,\n },\n association: {\n edgeType: \"association\",\n sourceCategories: [\"flowNode\", \"artifact\", \"data\"],\n targetCategories: [\"flowNode\", \"artifact\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n dataAssociation: {\n edgeType: \"dataAssociation\",\n sourceCategories: [\"flowNode\", \"data\"],\n targetCategories: [\"flowNode\", \"data\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n conversationLink: {\n edgeType: \"conversationLink\",\n sourceCategories: [\"conversation\", \"flowNode\"],\n targetCategories: [\"conversation\", \"flowNode\"],\n allowSameParent: true,\n allowDifferentParent: true,\n },\n};\n\nexport function inferBpmnEdgeType(\n state: BpmnDiagramState,\n sourceId: string,\n targetId: string,\n): BpmnEdgeType {\n const source = getNode(state, sourceId);\n const target = getNode(state, targetId);\n if (!source || !target) return \"sequenceFlow\";\n\n if (isDataType(source.data.elementType) || isDataType(target.data.elementType)) {\n return \"dataAssociation\";\n }\n if (\n source.data.elementType === \"Annotation\" ||\n target.data.elementType === \"Annotation\" ||\n source.data.elementType === \"Group\" ||\n target.data.elementType === \"Group\"\n ) {\n return \"association\";\n }\n if (\n source.data.elementType === \"Conversation\" ||\n source.data.elementType === \"SubConversation\" ||\n source.data.elementType === \"CallConversation\" ||\n target.data.elementType === \"Conversation\" ||\n target.data.elementType === \"SubConversation\" ||\n target.data.elementType === \"CallConversation\"\n ) {\n return \"conversationLink\";\n }\n const sourcePoolId = getAncestorContainerId(state, source, \"Pool\");\n const targetPoolId = getAncestorContainerId(state, target, \"Pool\");\n if (sourcePoolId && targetPoolId && sourcePoolId !== targetPoolId) {\n return \"messageFlow\";\n }\n return \"sequenceFlow\";\n}\n\nfunction canUseSequenceFlow(type: BpmnElementType): boolean {\n const meta = BPMN_ELEMENT_CATALOG[type];\n return (\n meta.handlePolicy !== \"none\" &&\n !isDataType(type) &&\n type !== \"Annotation\" &&\n type !== \"Group\" &&\n meta.category !== \"conversation\"\n );\n}\n\nfunction matchesConnectionCategory(\n type: BpmnElementType,\n categories: BpmnConnectionRule[\"sourceCategories\"],\n): boolean {\n return categories.some((category) => {\n if (category === type) return true;\n if (category === \"flowNode\") return canUseSequenceFlow(type);\n if (category === \"data\") return isDataType(type);\n if (category === \"artifact\") return type === \"Annotation\" || type === \"Group\";\n if (category === \"conversation\") return BPMN_ELEMENT_CATALOG[type].category === \"conversation\";\n return false;\n });\n}\n\nexport function isBpmnEdgeRoutingEditable(edgeType: BpmnEdgeType): boolean {\n return BPMN_ROUTABLE_EDGE_TYPES.includes(edgeType);\n}\n\nexport function isBpmnProcessNode(type: BpmnElementType): boolean {\n return (\n isEventType(type) ||\n isGatewayType(type) ||\n type.includes(\"Task\") ||\n type === \"CallActivity\" ||\n type === \"SubProcess\" ||\n type === \"Transaction\" ||\n type === \"EventSubProcess\" ||\n type === \"AdHocSubProcess\"\n );\n}\n\n/** Returns true for every element type that can be dragged into a Pool or Lane container. */\nexport function isBpmnDroppableInContainer(type: BpmnElementType): boolean {\n return (\n isBpmnProcessNode(type) ||\n type === \"Annotation\" ||\n type === \"Group\" ||\n type === \"DataObject\" ||\n type === \"DataObjectReference\" ||\n type === \"DataStore\" ||\n type === \"DataStoreReference\"\n );\n}\n\nexport function canContainBpmnElement(\n parentType: BpmnElementType | undefined,\n childType: BpmnElementType,\n): true | string {\n if (!parentType) return true;\n if (parentType === \"Pool\") {\n return childType === \"Lane\" || isBpmnDroppableInContainer(childType)\n ? true\n : \"Pools can contain lanes, BPMN process nodes, annotations, groups, and data elements.\";\n }\n if (parentType === \"Lane\") {\n return isBpmnDroppableInContainer(childType)\n ? true\n : \"Lanes can only contain BPMN process nodes, annotations, groups, and data elements.\";\n }\n if (\n parentType === \"SubProcess\" ||\n parentType === \"Transaction\" ||\n parentType === \"EventSubProcess\" ||\n parentType === \"AdHocSubProcess\"\n ) {\n return isBpmnProcessNode(childType)\n ? true\n : \"Subprocesses can only contain BPMN process nodes.\";\n }\n return `${parentType} cannot contain BPMN child elements.`;\n}\n\nfunction getDirectBpmnChildren(\n state: BpmnDiagramState,\n parentId: string,\n): BpmnRFNode[] {\n return state.nodes.filter((node) => node.parentId === parentId);\n}\n\nexport function getBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnRFNode[] {\n return getDirectBpmnChildren(state, poolId).filter(\n (node) => node.data.elementType === \"Lane\",\n );\n}\n\nfunction getBpmnNodeBounds(\n state: BpmnDiagramState,\n node: BpmnRFNode,\n): { x: number; y: number; width: number; height: number } {\n const position = getBpmnNodeAbsolutePosition(state, node) ?? node.position;\n const size = getBpmnNodeSize(node);\n return {\n ...position,\n width: size.width,\n height: size.height,\n };\n}\n\nconst BPMN_BOUNDARY_ATTACH_MARGIN = 32;\n\nfunction clampBoundaryCoordinate(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction isPointInsideExpandedBounds(\n point: { x: number; y: number },\n origin: { x: number; y: number },\n size: { width: number; height: number },\n): boolean {\n return (\n point.x >= origin.x - BPMN_BOUNDARY_ATTACH_MARGIN &&\n point.x <= origin.x + size.width + BPMN_BOUNDARY_ATTACH_MARGIN &&\n point.y >= origin.y - BPMN_BOUNDARY_ATTACH_MARGIN &&\n point.y <= origin.y + size.height + BPMN_BOUNDARY_ATTACH_MARGIN\n );\n}\n\nfunction snapBoundaryCenterToHostBorder(\n center: { x: number; y: number },\n hostOrigin: { x: number; y: number },\n hostSize: { width: number; height: number },\n): { x: number; y: number } {\n const distances = [\n { side: \"left\", value: Math.abs(center.x - hostOrigin.x) },\n { side: \"right\", value: Math.abs(center.x - (hostOrigin.x + hostSize.width)) },\n { side: \"top\", value: Math.abs(center.y - hostOrigin.y) },\n { side: \"bottom\", value: Math.abs(center.y - (hostOrigin.y + hostSize.height)) },\n ].sort((a, b) => a.value - b.value);\n\n const side = distances[0]?.side;\n if (side === \"left\") {\n return { x: hostOrigin.x, y: clampBoundaryCoordinate(center.y, hostOrigin.y, hostOrigin.y + hostSize.height) };\n }\n if (side === \"right\") {\n return { x: hostOrigin.x + hostSize.width, y: clampBoundaryCoordinate(center.y, hostOrigin.y, hostOrigin.y + hostSize.height) };\n }\n if (side === \"top\") {\n return { x: clampBoundaryCoordinate(center.x, hostOrigin.x, hostOrigin.x + hostSize.width), y: hostOrigin.y };\n }\n return {\n x: clampBoundaryCoordinate(center.x, hostOrigin.x, hostOrigin.x + hostSize.width),\n y: hostOrigin.y + hostSize.height,\n };\n}\n\nfunction findBpmnLaneAt(\n state: BpmnDiagramState,\n position: { x: number; y: number },\n): BpmnRFNode | undefined {\n return state.nodes.find((node) => {\n if (node.data.elementType !== \"Lane\") return false;\n const bounds = getBpmnNodeBounds(state, node);\n return (\n position.x >= bounds.x &&\n position.x <= bounds.x + bounds.width &&\n position.y >= bounds.y &&\n position.y <= bounds.y + bounds.height\n );\n });\n}\n\nfunction getAncestorLaneId(\n state: BpmnDiagramState,\n node: BpmnRFNode | undefined,\n): string | undefined {\n let current = node;\n while (current) {\n if (current.data.elementType === \"Lane\") return current.id;\n current = current.parentId ? getNode(state, current.parentId) : undefined;\n }\n return undefined;\n}\n\nfunction getAncestorContainerId(\n state: BpmnDiagramState,\n node: BpmnRFNode | undefined,\n elementType: BpmnElementType,\n): string | undefined {\n let current = node;\n while (current) {\n if (current.data.elementType === elementType) return current.id;\n current = current.parentId ? getNode(state, current.parentId) : undefined;\n }\n return undefined;\n}\n\nfunction getNodeDimension(node: BpmnRFNode, axis: \"width\" | \"height\"): number {\n return node[axis] ?? node.measured?.[axis] ?? getBpmnElementSize(node.data.elementType)[axis];\n}\n\nfunction getBpmnLaneOrderPosition(\n lane: BpmnRFNode,\n orientation: \"horizontal\" | \"vertical\",\n): number {\n const size = getBpmnNodeSize(lane);\n return orientation === \"vertical\"\n ? lane.position.x + size.width / 2\n : lane.position.y + size.height / 2;\n}\n\nexport function getBpmnPoolOrientation(pool: BpmnRFNode): \"horizontal\" | \"vertical\" {\n return pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n}\n\nfunction getBpmnPoolLanesOrderedByStack(\n nodes: BpmnRFNode[],\n poolId: string,\n orientation: \"horizontal\" | \"vertical\",\n): BpmnRFNode[] {\n return nodes\n .filter((node) => node.parentId === poolId && node.data.elementType === \"Lane\")\n .sort((a, b) => {\n const aIndex = typeof a.data.laneIndex === \"number\" ? a.data.laneIndex : undefined;\n const bIndex = typeof b.data.laneIndex === \"number\" ? b.data.laneIndex : undefined;\n if (aIndex !== undefined || bIndex !== undefined) return (aIndex ?? 0) - (bIndex ?? 0);\n return orientation === \"vertical\"\n ? (a.position?.x ?? 0) - (b.position?.x ?? 0)\n : (a.position?.y ?? 0) - (b.position?.y ?? 0);\n });\n}\n\nexport function layoutBpmnPoolLaneNodesPreservingHeights(\n nodes: BpmnRFNode[],\n poolId: string,\n): BpmnRFNode[] {\n const pool = nodes.find((node) => node.id === poolId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = getBpmnPoolOrientation(pool);\n const lanes = getBpmnPoolLanesOrderedByStack(nodes, pool.id, orientation);\n if (lanes.length === 0) return withBpmnNodeZIndexes(nodes);\n\n const poolW = pool.measured?.width ?? pool.width ?? 720;\n const poolH = pool.measured?.height ?? pool.height ?? 200;\n const pad = BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad;\n const gap = BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n const minLaneW = BPMN_POOL_LANE_STACK_LAYOUT.minLaneWidth;\n const minLaneH = BPMN_POOL_LANE_STACK_LAYOUT.minLaneHeight;\n const defaultLaneH = BPMN_POOL_LANE_STACK_LAYOUT.defaultLaneHeight;\n\n if (orientation === \"vertical\") {\n const laneWidth = Math.max(\n minLaneW,\n Math.floor((poolW - pad * 2 - gap * Math.max(0, lanes.length - 1)) / Math.max(1, lanes.length)),\n );\n const laneHeight = Math.max(minLaneH, poolH - pad * 2);\n let cumX = pad;\n const laneMap = new Map(\n lanes.map((lane, index) => {\n const nextLane: BpmnRFNode = {\n ...lane,\n position: { x: cumX, y: pad },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n data: { ...lane.data, orientation: \"vertical\", laneIndex: index },\n };\n cumX += laneWidth + gap;\n return [lane.id, nextLane] as const;\n }),\n );\n const requiredPoolW = cumX - gap + pad;\n return withBpmnNodeZIndexes(\n nodes.map((node) =>\n laneMap.get(node.id)\n ?? (node.id === pool.id ? { ...pool, width: Math.max(requiredPoolW, poolW) } : node),\n ),\n );\n }\n\n const laneWidth = Math.max(minLaneW, poolW - pad * 2);\n let cumY = pad;\n const laneMap = new Map(\n lanes.map((lane, index) => {\n const laneHeight = Math.max(minLaneH, lane.measured?.height ?? lane.height ?? defaultLaneH);\n const nextLane: BpmnRFNode = {\n ...lane,\n position: { x: pad, y: cumY },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n data: { ...lane.data, orientation: \"horizontal\", laneIndex: index },\n };\n cumY += laneHeight + gap;\n return [lane.id, nextLane] as const;\n }),\n );\n const requiredPoolH = cumY - gap + pad;\n\n return withBpmnNodeZIndexes(\n nodes.map((node) =>\n laneMap.get(node.id)\n ?? (node.id === pool.id ? { ...pool, height: Math.max(requiredPoolH, poolH) } : node),\n ),\n );\n}\n\nexport function reorderBpmnPoolLaneAfterDropPreservingHeights(\n nodes: BpmnRFNode[],\n laneId: string,\n): BpmnRFNode[] {\n const lane = nodes.find((node) => node.id === laneId && node.data.elementType === \"Lane\");\n if (!lane?.parentId) return nodes;\n const pool = nodes.find((node) => node.id === lane.parentId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = getBpmnPoolOrientation(pool);\n const lanes = getBpmnPoolLanesOrderedByStack(nodes, pool.id, orientation);\n const moved = lanes.find((candidate) => candidate.id === lane.id);\n if (!moved) return layoutBpmnPoolLaneNodesPreservingHeights(nodes, pool.id);\n\n const withoutMoved = lanes.filter((candidate) => candidate.id !== lane.id);\n const movedCenter = orientation === \"vertical\"\n ? (lane.position?.x ?? 0) + ((lane.width ?? 0) / 2)\n : (lane.position?.y ?? 0) + ((lane.height ?? 0) / 2);\n const insertIndex = withoutMoved.findIndex((candidate) => {\n const candidateCenter = orientation === \"vertical\"\n ? (candidate.position?.x ?? 0) + ((candidate.width ?? 0) / 2)\n : (candidate.position?.y ?? 0) + ((candidate.height ?? 0) / 2);\n return movedCenter < candidateCenter;\n });\n\n const ordered = [...withoutMoved];\n ordered.splice(insertIndex === -1 ? ordered.length : insertIndex, 0, moved);\n const orderedMap = new Map(ordered.map((candidate, index) => [candidate.id, index]));\n\n return layoutBpmnPoolLaneNodesPreservingHeights(\n nodes.map((node) =>\n node.parentId === pool.id && node.data.elementType === \"Lane\"\n ? { ...node, data: { ...node.data, laneIndex: orderedMap.get(node.id) ?? 0 } }\n : node,\n ),\n pool.id,\n );\n}\n\nexport function getAppendedBpmnLaneFrame(\n nodes: BpmnRFNode[],\n poolOrId: BpmnRFNode | string,\n): {\n position: { x: number; y: number };\n width: number;\n height: number;\n laneIndex: number;\n orientation: \"horizontal\" | \"vertical\";\n} | null {\n const pool = typeof poolOrId === \"string\"\n ? nodes.find((node) => node.id === poolOrId && node.data.elementType === \"Pool\")\n : poolOrId;\n if (!pool || pool.data.elementType !== \"Pool\") return null;\n\n const orientation = getBpmnPoolOrientation(pool);\n const existingLanes = getBpmnPoolLanesOrderedByStack(nodes, pool.id, orientation);\n const poolW = pool.measured?.width ?? pool.width ?? 600;\n const poolH = pool.measured?.height ?? pool.height ?? 400;\n const pad = BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad;\n const gap = BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n const minLaneW = BPMN_POOL_LANE_STACK_LAYOUT.minLaneWidth;\n const minLaneH = BPMN_POOL_LANE_STACK_LAYOUT.minLaneHeight;\n const defaultLaneH = BPMN_POOL_LANE_STACK_LAYOUT.defaultLaneHeight;\n\n if (orientation === \"horizontal\") {\n const lastLane = existingLanes[existingLanes.length - 1];\n return {\n position: {\n x: pad,\n y: lastLane\n ? (lastLane.position?.y ?? pad) + (lastLane.height ?? defaultLaneH) + gap\n : pad,\n },\n width: Math.max(minLaneW, poolW - pad * 2),\n height: existingLanes.length === 0 ? Math.max(minLaneH, poolH - pad * 2) : defaultLaneH,\n laneIndex: existingLanes.length,\n orientation,\n };\n }\n\n const lastLane = existingLanes[existingLanes.length - 1];\n return {\n position: {\n x: lastLane\n ? (lastLane.position?.x ?? pad) + (lastLane.width ?? defaultLaneH) + gap\n : pad,\n y: pad,\n },\n width: existingLanes.length === 0 ? Math.max(minLaneW, poolW - pad * 2) : defaultLaneH,\n height: Math.max(minLaneH, poolH - pad * 2),\n laneIndex: existingLanes.length,\n orientation,\n };\n}\n\nexport function getBpmnPoolLaneNodeMaxSize(\n state: BpmnDiagramState,\n nodeId: string,\n): { width: number; height: number } | undefined {\n const n = getNode(state, nodeId);\n if (n?.data.elementType === \"Lane\" && n.parentId) {\n const pool = getNode(state, n.parentId);\n if (pool) {\n const siblings = state.nodes.filter(\n (x) => x.parentId === n.parentId && x.data.elementType === \"Lane\" && x.id !== n.id,\n );\n const poolH = pool.measured?.height ?? pool.height ?? 500;\n const siblingsMinH = siblings.length * BPMN_POOL_LANE_STACK_LAYOUT.minLaneHeight;\n const siblingGaps = siblings.length * BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n const maxH = Math.max(\n BPMN_POOL_LANE_STACK_LAYOUT.minLaneHeight,\n poolH - BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad * 2 - siblingsMinH - siblingGaps,\n );\n return {\n width: (pool.width ?? 720) - BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad * 2,\n height: maxH,\n };\n }\n }\n return undefined;\n}\n\nexport function getBpmnPoolLaneNodeMinSize(\n state: BpmnDiagramState,\n nodeId: string,\n): { width: number; height: number } | undefined {\n const n = getNode(state, nodeId);\n if (n?.data.elementType === \"Pool\") {\n const lanes = state.nodes.filter((x) => x.parentId === nodeId && x.data.elementType === \"Lane\");\n if (lanes.length > 0) {\n const minW = Math.max(...lanes.map((l) => (l.width ?? 0) + BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad * 2));\n const minH = lanes.reduce((s, l) => s + (l.height ?? BPMN_POOL_LANE_STACK_LAYOUT.defaultLaneHeight), 0)\n + BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad * 2\n + Math.max(0, lanes.length - 1) * BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n return { width: minW, height: minH };\n }\n }\n return undefined;\n}\n\nexport function applyBpmnPoolLaneDimensionChange(\n nodes: BpmnRFNode[],\n previousNodes: BpmnRFNode[],\n nodeId: string,\n width: number,\n height: number,\n): BpmnRFNode[] {\n const node = nodes.find((candidate) => candidate.id === nodeId);\n const previousNode = previousNodes.find((candidate) => candidate.id === nodeId);\n if (!node) return nodes;\n const curW = previousNode?.measured?.width ?? previousNode?.width ?? 0;\n const curH = previousNode?.measured?.height ?? previousNode?.height ?? 0;\n if (Math.abs(width - curW) < 1 && Math.abs(height - curH) < 1) return nodes;\n\n const pad = BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad;\n const gap = BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n const minLaneW = BPMN_POOL_LANE_STACK_LAYOUT.minLaneWidth;\n const defaultLaneH = BPMN_POOL_LANE_STACK_LAYOUT.defaultLaneHeight;\n\n if (node.data.elementType === \"Pool\") {\n const targetLaneW = Math.max(minLaneW, width - pad * 2);\n return nodes.map((candidate) =>\n candidate.parentId === node.id && candidate.data.elementType === \"Lane\"\n ? {\n ...candidate,\n width: targetLaneW,\n measured: {\n width: targetLaneW,\n height: candidate.measured?.height ?? candidate.height ?? defaultLaneH,\n },\n position: { x: pad, y: candidate.position?.y ?? pad },\n }\n : candidate,\n );\n }\n\n if (node.data.elementType === \"Lane\" && node.parentId) {\n const pool = nodes.find((candidate) => candidate.id === node.parentId && candidate.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const poolW = Math.max(width + pad * 2, pool.measured?.width ?? pool.width ?? 720);\n const sortedLanes = getBpmnPoolLanesOrderedByStack(nodes, node.parentId, \"horizontal\");\n let cumY = pad;\n const laneMap = new Map<string, BpmnRFNode>();\n for (const lane of sortedLanes) {\n const laneH = lane.id === node.id ? height : (lane.measured?.height ?? lane.height ?? defaultLaneH);\n laneMap.set(lane.id, {\n ...lane,\n width,\n height: laneH,\n measured: { width, height: laneH },\n position: { x: pad, y: cumY },\n });\n cumY += laneH + gap;\n }\n const newPoolH = cumY - gap + pad;\n\n return nodes.map((candidate) => {\n if (candidate.id === pool.id) {\n return {\n ...candidate,\n width: poolW,\n height: newPoolH,\n measured: { width: poolW, height: newPoolH },\n };\n }\n return laneMap.get(candidate.id) ?? candidate;\n });\n }\n\n return nodes;\n}\n\n// ── Live containers: grow pools/lanes to fit their content ──────────────────\n//\n// Pure helper for \"contenedores vivos\": when a node is added, dropped or\n// dragged near/beyond its container border, the lane grows (right/bottom),\n// sibling lanes are pushed down, and the pool resizes to match.\n//\n// v1 semantics (deliberate):\n// - GROW only — containers never shrink (manual sizes are respected).\n// - Horizontal pools only; vertical pools are returned untouched.\n// - Growth happens toward the right/bottom edges. Content dragged past the\n// top/left borders is not rescued (that would shift every child's\n// relative coordinates — disruptive for collab/undo).\n// - Expanded SubProcess containers are out of scope (handled by auto-layout).\n//\n// Returns the SAME array reference when nothing needs to grow, so callers can\n// cheaply detect the no-op case and skip store updates.\n\n/** Padding kept between content and the container's right/bottom border. */\nconst BPMN_CONTAINER_GROW_PAD = 24;\n\nexport interface GrowBpmnContainersOptions {\n /** Clearance between content and container borders. Default 24. */\n growPad?: number;\n}\n\nexport function growBpmnContainersToFit(\n nodes: BpmnRFNode[],\n options: GrowBpmnContainersOptions = {},\n): BpmnRFNode[] {\n const growPad = options.growPad ?? BPMN_CONTAINER_GROW_PAD;\n const pad = BPMN_POOL_LANE_STACK_LAYOUT.poolInnerPad;\n const gap = BPMN_POOL_LANE_STACK_LAYOUT.laneGap;\n\n const updated = new Map<string, BpmnRFNode>();\n\n const contentExtent = (parentId: string): { right: number; bottom: number } => {\n let right = 0;\n let bottom = 0;\n for (const node of nodes) {\n if (node.parentId !== parentId) continue;\n if (node.data.elementType === \"Lane\") continue;\n const size = getBpmnNodeSize(node);\n right = Math.max(right, node.position.x + size.width);\n bottom = Math.max(bottom, node.position.y + size.height);\n }\n return { right, bottom };\n };\n\n for (const pool of nodes) {\n if (pool.data.elementType !== \"Pool\") continue;\n if (getBpmnPoolOrientation(pool) === \"vertical\") continue;\n\n const poolSize = getBpmnNodeSize(pool);\n const lanes = getBpmnPoolLanesOrderedByStack(nodes, pool.id, \"horizontal\");\n\n if (lanes.length === 0) {\n const extent = contentExtent(pool.id);\n if (extent.right === 0 && extent.bottom === 0) continue;\n const poolW = Math.max(poolSize.width, extent.right + growPad);\n const poolH = Math.max(poolSize.height, extent.bottom + growPad);\n if (poolW === poolSize.width && poolH === poolSize.height) continue;\n updated.set(pool.id, {\n ...pool,\n width: poolW,\n height: poolH,\n measured: { width: poolW, height: poolH },\n });\n continue;\n }\n\n // Required uniform lane width (lanes always span the pool's inner width)\n // and per-lane heights, growing only.\n let requiredLaneW = Math.max(...lanes.map((l) => getBpmnNodeSize(l).width));\n const laneHeights = new Map<string, number>();\n let anyLaneGrew = false;\n\n for (const laneNode of lanes) {\n const laneSize = getBpmnNodeSize(laneNode);\n const extent = contentExtent(laneNode.id);\n const newH = Math.max(laneSize.height, extent.bottom + growPad);\n laneHeights.set(laneNode.id, newH);\n requiredLaneW = Math.max(requiredLaneW, extent.right + growPad);\n if (newH !== laneSize.height) anyLaneGrew = true;\n }\n\n const laneW = requiredLaneW;\n const laneWGrew = lanes.some((l) => getBpmnNodeSize(l).width !== laneW);\n if (!anyLaneGrew && !laneWGrew) continue;\n\n // Restack lanes with the (possibly) new heights and uniform width.\n let cumY = pad;\n for (const laneNode of lanes) {\n const laneH = laneHeights.get(laneNode.id)!;\n updated.set(laneNode.id, {\n ...laneNode,\n position: { x: pad, y: cumY },\n width: laneW,\n height: laneH,\n measured: { width: laneW, height: laneH },\n });\n cumY += laneH + gap;\n }\n\n const poolW = Math.max(poolSize.width, laneW + pad * 2);\n const poolH = Math.max(poolSize.height, cumY - gap + pad);\n if (poolW !== poolSize.width || poolH !== poolSize.height) {\n updated.set(pool.id, {\n ...pool,\n width: poolW,\n height: poolH,\n measured: { width: poolW, height: poolH },\n });\n }\n }\n\n if (updated.size === 0) return nodes;\n return nodes.map((node) => updated.get(node.id) ?? node);\n}\n\nfunction resizeHorizontalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const pad = BPMN_POOL_LANE_LAYOUT.poolPad; // 5px pool inner padding on all sides\n const poolSize = getBpmnNodeSize(pool);\n // Lane fills pool minus padding on both horizontal sides.\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width - pad * 2);\n // Lanes stack vertically; each gets an equal share of pool height minus top+bottom padding.\n const availH = Math.max(0, poolSize.height - pad * 2);\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, availH / Math.max(1, lanes.length));\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: pad, y: pad + index * laneHeight },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n // extent:\"parent\" intentionally omitted — blocks resize→Pool coupling.\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"horizontal\", laneIndex: index },\n }));\n}\n\nfunction resizeVerticalBpmnLanes(lanes: BpmnRFNode[], pool: BpmnRFNode): BpmnRFNode[] {\n const poolSize = getBpmnNodeSize(pool);\n const laneWidth = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.width / Math.max(1, lanes.length));\n const laneHeight = Math.max(BPMN_POOL_LANE_LAYOUT.minLaneSize, poolSize.height - BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize);\n return lanes.map((lane, index) => ({\n ...lane,\n position: { x: index * laneWidth, y: BPMN_POOL_LANE_LAYOUT.verticalPoolHeaderSize },\n width: laneWidth,\n height: laneHeight,\n parentId: pool.id,\n extent: \"parent\" as const,\n zIndex: getBpmnNodeZIndex(\"Lane\"),\n data: { ...lane.data, orientation: \"vertical\", laneIndex: index },\n }));\n}\n\nexport function layoutBpmnPoolLaneNodes(\n nodes: BpmnRFNode[],\n poolId: string,\n): BpmnRFNode[] {\n const pool = nodes.find((node) => node.id === poolId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => {\n const aIndex = typeof a.data.laneIndex === \"number\" ? a.data.laneIndex : undefined;\n const bIndex = typeof b.data.laneIndex === \"number\" ? b.data.laneIndex : undefined;\n if (aIndex !== undefined || bIndex !== undefined) return (aIndex ?? 0) - (bIndex ?? 0);\n return getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation);\n });\n\n if (lanes.length === 0) return withBpmnNodeZIndexes(nodes);\n\n const resizedLanes = orientation === \"vertical\"\n ? resizeVerticalBpmnLanes(lanes, pool)\n : resizeHorizontalBpmnLanes(lanes, pool);\n\n const laneMap = new Map(resizedLanes.map((lane) => [lane.id, lane]));\n\n // Also update the Pool's height so it always wraps its lanes with the\n // correct inner padding on top and bottom (POOL_INNER_PAD = 5px each).\n const pad = BPMN_POOL_LANE_LAYOUT.poolPad;\n const totalLaneH = resizedLanes.reduce((sum, l) => sum + (l.height ?? 0), 0);\n const requiredPoolH = totalLaneH + pad * 2;\n const poolMap = new Map<string, BpmnRFNode>();\n if (orientation === \"horizontal\") {\n const currentH = getBpmnNodeSize(pool).height;\n poolMap.set(pool.id, {\n ...pool,\n height: Math.max(requiredPoolH, currentH),\n });\n }\n\n return withBpmnNodeZIndexes(\n nodes.map((node) => laneMap.get(node.id) ?? poolMap.get(node.id) ?? node),\n );\n}\n\nexport function reorderBpmnLaneAfterDrop(\n nodes: BpmnRFNode[],\n laneId: string,\n): BpmnRFNode[] {\n const lane = nodes.find((node) => node.id === laneId && node.data.elementType === \"Lane\");\n if (!lane?.parentId) return nodes;\n\n const pool = nodes.find((node) => node.id === lane.parentId && node.data.elementType === \"Pool\");\n if (!pool) return nodes;\n\n const orientation = pool.data.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const lanes = nodes\n .filter((node) => node.parentId === pool.id && node.data.elementType === \"Lane\")\n .sort((a, b) => getBpmnLaneOrderPosition(a, orientation) - getBpmnLaneOrderPosition(b, orientation));\n\n const moved = lanes.find((candidate) => candidate.id === lane.id);\n if (!moved) return layoutBpmnPoolLaneNodes(nodes, pool.id);\n\n const withoutMoved = lanes.filter((candidate) => candidate.id !== lane.id);\n const movedCenter = getBpmnLaneOrderPosition(lane, orientation);\n const insertIndex = withoutMoved.findIndex(\n (candidate) => movedCenter < getBpmnLaneOrderPosition(candidate, orientation),\n );\n const ordered = [...withoutMoved];\n ordered.splice(insertIndex === -1 ? ordered.length : insertIndex, 0, moved);\n\n const orderedMap = new Map(ordered.map((candidate, index) => [candidate.id, index]));\n const sortedByDrop = nodes.map((node) => {\n if (node.parentId !== pool.id || node.data.elementType !== \"Lane\") return node;\n return { ...node, data: { ...node.data, laneIndex: orderedMap.get(node.id) ?? 0 } };\n });\n\n return layoutBpmnPoolLaneNodes(sortedByDrop, pool.id);\n}\n\nexport function getBpmnNodeSize(node: BpmnRFNode): { width: number; height: number } {\n return getNodeSize(node, getBpmnElementSize(node.data.elementType));\n}\n\nexport function getBpmnNodeAbsolutePosition(\n state: BpmnDiagramState,\n nodeOrId: BpmnRFNode | string,\n): { x: number; y: number } | undefined {\n const nodeId = typeof nodeOrId === \"string\" ? nodeOrId : nodeOrId.id;\n return getNodeAbsolutePosition(state, nodeId);\n}\n\nexport function toBpmnRelativePosition(\n state: BpmnDiagramState,\n absolutePosition: { x: number; y: number },\n parentOrId: BpmnRFNode | string,\n): { x: number; y: number } {\n return toRelativeNodePosition(state, absolutePosition, parentOrId);\n}\n\nconst BPMN_CONTAINER_PRIORITY: BpmnElementType[] = [\n \"Lane\",\n \"SubProcess\",\n \"EventSubProcess\",\n \"Transaction\",\n \"AdHocSubProcess\",\n \"Pool\",\n];\n\nexport function findBpmnContainerAt(\n state: BpmnDiagramState,\n options: FindBpmnContainerAtOptions,\n): BpmnRFNode | undefined {\n return findContainingNode(state, {\n point: options.position,\n excludeId: options.excludeId,\n fallbackSize: (node) => getBpmnElementSize(node.data.elementType),\n predicate: (node) => BPMN_CONTAINER_PRIORITY.includes(node.data.elementType),\n sort: (a, b) => {\n const aPriority = BPMN_CONTAINER_PRIORITY.indexOf(a.data.elementType);\n const bPriority = BPMN_CONTAINER_PRIORITY.indexOf(b.data.elementType);\n if (aPriority !== bPriority) return aPriority - bPriority;\n const aSize = getBpmnNodeSize(a);\n const bSize = getBpmnNodeSize(b);\n return aSize.width * aSize.height - bSize.width * bSize.height;\n },\n });\n}\n\nexport function resolveBpmnDropTarget(\n state: BpmnDiagramState,\n options: ResolveBpmnDropTargetOptions,\n): BpmnDropTargetResolution {\n if (options.elementType === \"Pool\") {\n return { highlightedContainerId: null, invalidContainerId: null, isValid: true };\n }\n\n if (options.elementType === \"Lane\") {\n const pool = state.nodes.find((node) => {\n if (node.data.elementType !== \"Pool\") return false;\n const bounds = getBpmnNodeBounds(state, node);\n return (\n options.position.x >= bounds.x &&\n options.position.x <= bounds.x + bounds.width &&\n options.position.y >= bounds.y &&\n options.position.y <= bounds.y + bounds.height\n );\n });\n return {\n ...(pool ? { container: pool } : {}),\n highlightedContainerId: pool?.id ?? null,\n invalidContainerId: null,\n isValid: Boolean(pool),\n };\n }\n\n const lane = findBpmnLaneAt(state, options.position);\n if (lane) {\n return {\n container: lane,\n highlightedContainerId: lane.id,\n invalidContainerId: null,\n isValid: true,\n };\n }\n\n const container = findBpmnContainerAt(state, {\n position: options.position,\n ...(options.excludeId ? { excludeId: options.excludeId } : {}),\n });\n\n if (container?.data.elementType === \"Pool\") {\n const hasLanes = getBpmnPoolLanes(state, container.id).length > 0;\n if (hasLanes) {\n return {\n highlightedContainerId: null,\n invalidContainerId: container.id,\n isValid: false,\n };\n }\n }\n\n return {\n ...(container ? { container } : {}),\n highlightedContainerId: getAncestorLaneId(state, container) ?? container?.id ?? null,\n invalidContainerId: null,\n isValid: true,\n };\n}\n\nexport function getBpmnNodeCenter(\n node: BpmnRFNode,\n absolutePosition: { x: number; y: number },\n): { x: number; y: number } {\n return getNodeCenterPosition(absolutePosition, getBpmnNodeSize(node));\n}\n\nexport function getBoundaryEventAttachment(\n state: BpmnDiagramState,\n boundaryNode: BpmnRFNode,\n): BpmnBoundaryAttachment | null {\n if (boundaryNode.data.elementType !== \"BoundaryEvent\") return null;\n\n const boundaryOrigin = getBpmnNodeAbsolutePosition(state, boundaryNode) ?? boundaryNode.position;\n const boundarySize = getBpmnNodeSize(boundaryNode);\n const boundaryCenter = {\n x: boundaryOrigin.x + boundarySize.width / 2,\n y: boundaryOrigin.y + boundarySize.height / 2,\n };\n\n const candidates = state.nodes\n .filter((node) => node.id !== boundaryNode.id && acceptsBoundaryEvents(node.data.elementType))\n .map((node) => {\n const origin = getBpmnNodeAbsolutePosition(state, node) ?? node.position;\n const size = getBpmnNodeSize(node);\n const hostCenter = { x: origin.x + size.width / 2, y: origin.y + size.height / 2 };\n return {\n node,\n origin,\n size,\n distance: Math.hypot(boundaryCenter.x - hostCenter.x, boundaryCenter.y - hostCenter.y),\n };\n })\n .filter(({ origin, size }) => isPointInsideExpandedBounds(boundaryCenter, origin, size))\n .sort((a, b) => a.distance - b.distance);\n\n const host = candidates[0];\n if (!host) return null;\n\n const snappedCenter = snapBoundaryCenterToHostBorder(boundaryCenter, host.origin, host.size);\n return {\n hostId: host.node.id,\n position: {\n x: snappedCenter.x - host.origin.x - boundarySize.width / 2,\n y: snappedCenter.y - host.origin.y - boundarySize.height / 2,\n },\n };\n}\n\nexport function getBpmnEdgeLaneContext(\n state: BpmnDiagramState,\n edgeOrId: BpmnRFEdge | string,\n): BpmnEdgeLaneContext | undefined {\n const edge = typeof edgeOrId === \"string\"\n ? state.edges.find((candidate) => candidate.id === edgeOrId)\n : edgeOrId;\n if (!edge) return undefined;\n\n const source = getNode(state, edge.source);\n const target = getNode(state, edge.target);\n if (!source || !target) return undefined;\n\n const sourceLaneId = getAncestorLaneId(state, source);\n const targetLaneId = getAncestorLaneId(state, target);\n const sourcePoolId = getAncestorContainerId(state, source, \"Pool\");\n const targetPoolId = getAncestorContainerId(state, target, \"Pool\");\n const sameLane = Boolean(sourceLaneId) && sourceLaneId === targetLaneId;\n const samePool = Boolean(sourcePoolId) && sourcePoolId === targetPoolId;\n const crossesLanesWithinPool = Boolean(\n sourceLaneId &&\n targetLaneId &&\n sourceLaneId !== targetLaneId &&\n samePool,\n );\n const crossesPools = Boolean(\n sourcePoolId &&\n targetPoolId &&\n sourcePoolId !== targetPoolId,\n );\n\n return {\n edgeId: edge.id,\n ...(sourceLaneId ? { sourceLaneId } : {}),\n ...(targetLaneId ? { targetLaneId } : {}),\n ...(sourcePoolId ? { sourcePoolId } : {}),\n ...(targetPoolId ? { targetPoolId } : {}),\n sameLane,\n samePool,\n crossesLanesWithinPool,\n crossesPools,\n };\n}\n\nfunction resolvePoolLaneDirection(pool: BpmnRFNode): \"horizontal\" | \"vertical\" {\n return pool.data.orientation === \"vertical\" ? \"horizontal\" : \"vertical\";\n}\n\nexport function getBpmnLaneIndexAtPosition(\n state: BpmnDiagramState,\n poolId: string,\n position: { x: number; y: number },\n): number {\n const pool = getNode(state, poolId);\n if (!pool) return 0;\n const lanes = getBpmnPoolLanes(state, poolId);\n const direction = resolvePoolLaneDirection(pool);\n const axis = direction === \"vertical\" ? \"y\" : \"x\";\n const sizeKey = direction === \"vertical\" ? \"height\" : \"width\";\n\n for (let index = 0; index < lanes.length; index += 1) {\n const lane = lanes[index];\n const midpoint = lane.position[axis] + getNodeDimension(lane, sizeKey) / 2;\n if (position[axis] < midpoint) return index;\n }\n return lanes.length;\n}\n\nfunction sortBpmnLanes(\n state: BpmnDiagramState,\n poolId: string,\n laneId: string,\n index: number,\n): BpmnDiagramState {\n const lanes = getBpmnPoolLanes(state, poolId);\n const currentIndex = lanes.findIndex((lane) => lane.id === laneId);\n if (currentIndex < 0) return state;\n\n const orderedIds = lanes.map((lane) => lane.id);\n const [moved] = orderedIds.splice(currentIndex, 1);\n orderedIds.splice(Math.max(0, Math.min(index, orderedIds.length)), 0, moved);\n const order = new Map(orderedIds.map((id, laneIndex) => [id, laneIndex]));\n\n return {\n ...state,\n nodes: [...state.nodes].sort((a, b) => {\n const aOrder = order.get(a.id);\n const bOrder = order.get(b.id);\n if (aOrder === undefined && bOrder === undefined) return 0;\n if (aOrder === undefined) return -1;\n if (bOrder === undefined) return 1;\n return aOrder - bOrder;\n }),\n };\n}\n\nexport function layoutBpmnPoolLanes(\n state: BpmnDiagramState,\n poolId: string,\n): BpmnDiagramState {\n const pool = getNode(state, poolId);\n if (!pool) return state;\n const poolSize = getBpmnElementSize(\"Pool\");\n const direction = resolvePoolLaneDirection(pool);\n const lanes = getBpmnPoolLanes(state, poolId);\n let cursor = direction === \"vertical\" ? BPMN_POOL_LANE_LAYOUT.poolHeaderSize : 0;\n\n let next = state;\n for (const lane of lanes) {\n const laneSize = getBpmnElementSize(\"Lane\");\n const width =\n direction === \"vertical\"\n ? Math.max(poolSize.minWidth - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.width ?? laneSize.width)\n : lane.width ?? laneSize.width;\n const height =\n direction === \"vertical\"\n ? lane.height ?? laneSize.height\n : Math.max(poolSize.minHeight - BPMN_POOL_LANE_LAYOUT.poolHeaderSize, lane.height ?? laneSize.height);\n next = patchNode(next, lane.id, {\n position: direction === \"vertical\" ? { x: BPMN_POOL_LANE_LAYOUT.poolHeaderSize, y: cursor } : { x: cursor, y: BPMN_POOL_LANE_LAYOUT.poolHeaderSize },\n width,\n height,\n data: { orientation: pool.data.orientation ?? \"horizontal\" },\n });\n cursor += (direction === \"vertical\" ? height : width) + BPMN_POOL_LANE_LAYOUT.laneGap;\n }\n\n const minWidth =\n direction === \"vertical\"\n ? poolSize.minWidth\n : Math.max(poolSize.minWidth, cursor);\n const minHeight =\n direction === \"vertical\"\n ? Math.max(poolSize.minHeight, cursor)\n : poolSize.minHeight;\n return resizeNode(next, poolId, { width: minWidth, height: minHeight } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n}\n\nexport function reorderBpmnLane(\n state: BpmnDiagramState,\n options: ReorderBpmnLaneOptions,\n): BpmnDiagramState {\n return layoutBpmnPoolLanes(\n sortBpmnLanes(state, options.poolId, options.laneId, options.index),\n options.poolId,\n );\n}\n\nexport function validateBpmnConnectionForEdgeType(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n const rule = BPMN_EDGE_CONNECTION_RULES[edgeType];\n if (!matchesConnectionCategory(source.data.elementType, rule.sourceCategories)) {\n return `${edgeType} cannot start from ${source.data.elementType}.`;\n }\n if (!matchesConnectionCategory(target.data.elementType, rule.targetCategories)) {\n return `${edgeType} cannot target ${target.data.elementType}.`;\n }\n const sameParent = (source.parentId ?? null) === (target.parentId ?? null);\n if (sameParent && rule.allowSameParent === false) {\n return `${edgeType} must connect BPMN elements in different participants/scopes.`;\n }\n if (!sameParent && rule.allowDifferentParent === false) {\n return `${edgeType} must stay inside the same BPMN participant/scope.`;\n }\n if (edgeType === \"sequenceFlow\") {\n if (source.data.elementType === \"EndEvent\") return \"End events cannot have outgoing sequence flows.\";\n if (target.data.elementType === \"StartEvent\") return \"Start events cannot have incoming sequence flows.\";\n return validateEdgeCardinality(state, edgeType, source, target);\n }\n return true;\n}\n\nexport function resolveBpmnConnection(\n state: BpmnDiagramState,\n sourceId: string,\n targetId: string,\n requestedType: BpmnEdgeType,\n): BpmnConnectionResolution {\n const source = getNode(state, sourceId);\n const target = getNode(state, targetId);\n if (!source || !target) return { ok: false, reason: \"No se encontró el origen o destino.\" };\n\n const validation = validateBpmnConnectionForEdgeType(state, requestedType, source, target);\n if (validation !== true) return { ok: false, reason: validation };\n\n return { ok: true, edgeType: requestedType };\n}\n\nfunction validateEdgeCardinality(\n state: BpmnDiagramState,\n edgeType: BpmnEdgeType,\n source: BpmnRFNode,\n target: BpmnRFNode,\n): true | string {\n if (edgeType !== \"sequenceFlow\") return true;\n\n const sourceMax = BPMN_ELEMENT_CATALOG[source.data.elementType].maxOutgoing;\n const targetMax = BPMN_ELEMENT_CATALOG[target.data.elementType].maxIncoming;\n const outgoing = getOutgoingEdges(state, source.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n const incoming = getIncomingEdges(state, target.id).filter(\n (edge) => edge.data?.edgeType === \"sequenceFlow\",\n );\n\n if (sourceMax !== undefined && outgoing.length >= sourceMax) {\n return `${source.data.elementType} cannot have more than ${sourceMax} outgoing sequence flow(s).`;\n }\n if (targetMax !== undefined && incoming.length >= targetMax) {\n return `${target.data.elementType} cannot have more than ${targetMax} incoming sequence flow(s).`;\n }\n return true;\n}\n\nexport const bpmnConnectionValidators: Array<\n ConnectionValidator<BpmnRFNode, BpmnRFEdge>\n> = [\n ({ state, source, target }) => {\n if (source.id === target.id) return \"BPMN self-connections are not allowed.\";\n const edgeType = inferBpmnEdgeType(state, source.id, target.id);\n\n if (getHandlePolicy(source.data.elementType) === \"none\" || getHandlePolicy(target.data.elementType) === \"none\") {\n return \"Elements without BPMN connection handles cannot be directly connected.\";\n }\n\n if (edgeType === \"sequenceFlow\") {\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n }\n\n return validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n },\n];\n\nexport const BPMN_MODELING_RULES: ModelingRules<BpmnRFNode, BpmnRFEdge> =\n createModelingRules({\n connect: [\n ({ state, source, target }) => {\n if (!source || !target) return false;\n for (const validator of bpmnConnectionValidators) {\n const result = validator({\n state,\n source,\n target,\n existingEdges: state.edges,\n });\n if (result !== true) return result;\n }\n return true;\n },\n ],\n drop: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be attached to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent.data.elementType, node.data.elementType);\n },\n ],\n reparent: [\n ({ node, parent }) => {\n if (!node || !parent) return true;\n if (node.data.elementType === \"BoundaryEvent\") {\n return acceptsBoundaryEvents(parent.data.elementType)\n ? true\n : \"Boundary events can only be reparented to tasks or subprocesses.\";\n }\n return canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n },\n ],\n delete: [() => true],\n resize: [\n ({ node }) =>\n !node || isBpmnElementResizable(node.data.elementType)\n ? true\n : `${node.data.elementType} is not resizable in BPMN.`,\n ],\n });\n\n/**\n * Create a {@link DiagramCommand} that adds a new BPMN element to the diagram.\n *\n * @param options - Element type, id, position, label, and optional parent/data overrides.\n * @returns Undoable command to be executed by {@link runBpmnCommand}.\n */\nexport function createBpmnNodeCommand(\n options: CreateBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.createNode.${options.id}`,\n label: `Create ${options.elementType}`,\n execute: (state) => addNode(state, createBpmnNode(options)),\n };\n}\n\n/**\n * Create a {@link DiagramCommand} that connects two BPMN elements with the\n * most appropriate edge type (auto-inferred when `edgeType` is omitted).\n * Validates the connection against BPMN 2.0 rules before executing.\n *\n * @param options - Source/target ids, optional edge type, label, and data overrides.\n * @returns Undoable command, throws when the connection violates BPMN rules.\n */\nexport function connectBpmnCommand(\n options: ConnectBpmnOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.connect.${options.id ?? `${options.source}-${options.target}`}`,\n label: \"Connect BPMN elements\",\n execute: (state) => {\n const edgeType = options.edgeType ?? inferBpmnEdgeType(state, options.source, options.target);\n const source = getNode(state, options.source);\n const target = getNode(state, options.target);\n if (!source) throw new Error(`Source node \"${options.source}\" does not exist.`);\n if (!target) throw new Error(`Target node \"${options.target}\" does not exist.`);\n const validation = validateBpmnConnectionForEdgeType(state, edgeType, source, target);\n if (validation !== true) throw new Error(validation);\n return connectNodes(\n state,\n {\n source: options.source,\n target: options.target,\n type: edgeType,\n ...(options.sourceHandle !== undefined\n ? { sourceHandle: options.sourceHandle }\n : {}),\n ...(options.targetHandle !== undefined\n ? { targetHandle: options.targetHandle }\n : {}),\n ...(options.id ? { id: options.id } : {}),\n data: {\n edgeType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n },\n [],\n );\n },\n };\n}\n\nexport function attachBoundaryEventCommand(\n boundaryId: string,\n hostId: string,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.attachBoundary.${boundaryId}.${hostId}`,\n label: \"Attach boundary event\",\n execute: (state) => {\n const host = getNode(state, hostId);\n if (!host || !acceptsBoundaryEvents(host.data.elementType)) {\n throw new Error(`Element \"${hostId}\" cannot host boundary events.`);\n }\n const boundary = getNode(state, boundaryId);\n if (!boundary || boundary.data.elementType !== \"BoundaryEvent\") {\n throw new Error(`Element \"${boundaryId}\" is not a boundary event.`);\n }\n const reparented = reparentNode(state, boundaryId, { parentId: hostId });\n return patchNode(reparented, boundaryId, {\n data: { attachedToRef: hostId },\n });\n },\n };\n}\n\nexport function replaceBpmnNodeCommand(\n options: ReplaceBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.replaceNode.${options.id}.${options.elementType}`,\n label: `Replace with ${options.elementType}`,\n execute: (state) => {\n const current = getNode(state, options.id);\n if (!current) throw new Error(`Element \"${options.id}\" does not exist.`);\n const meta = BPMN_ELEMENT_CATALOG[options.elementType];\n return replaceNode(state, options.id, {\n ...current,\n type: options.elementType,\n width: options.width ?? current.width ?? meta.defaultWidth,\n height: options.height ?? current.height ?? meta.defaultHeight,\n data: {\n ...current.data,\n elementType: options.elementType,\n ...(options.label ? { label: options.label } : {}),\n ...(options.data ?? {}),\n },\n });\n },\n };\n}\n\nexport function reparentBpmnNodeCommand(\n options: ReparentBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reparent.${options.id}.${options.parentId ?? \"root\"}`,\n label: \"Reparent BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n const parent = options.parentId ? getNode(state, options.parentId) : undefined;\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n if (parent && node.data.elementType === \"BoundaryEvent\" && !acceptsBoundaryEvents(parent.data.elementType)) {\n throw new Error(\"Boundary events can only be reparented to tasks or subprocesses.\");\n }\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n const reparented = reparentNode(state, options.id, {\n ...(options.parentId !== undefined ? { parentId: options.parentId } : {}),\n ...(options.position ? { position: options.position } : {}),\n });\n return parent?.data.elementType === \"Pool\" && node.data.elementType === \"Lane\"\n ? layoutBpmnPoolLanes(reparented, parent.id)\n : reparented;\n },\n };\n}\n\nexport function reparentBpmnNodeAtPosition(\n state: BpmnDiagramState,\n options: ReparentBpmnNodeAtPositionOptions,\n): BpmnDiagramState {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n\n const hitPoint = getBpmnNodeCenter(node, options.position);\n const parent = isBpmnProcessNode(node.data.elementType)\n ? findBpmnContainerAt(state, { position: hitPoint, excludeId: node.id })\n : undefined;\n const containment = canContainBpmnElement(parent?.data.elementType, node.data.elementType);\n if (containment !== true) throw new Error(containment);\n\n const nextPosition = parent\n ? toBpmnRelativePosition(state, options.position, parent)\n : options.position;\n return reparentNode(state, node.id, {\n ...(parent ? { parentId: parent.id } : { parentId: undefined }),\n position: nextPosition,\n });\n}\n\n// Half-size of a BoundaryEvent (36×36) — used to convert center↔top-left coords.\nconst BE_HALF = 18;\n\ntype BoundarySide = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nfunction getBoundarySpanRatio(\n value: number,\n size: number,\n): number {\n const min = BE_HALF;\n const max = size - BE_HALF;\n if (max <= min) return 0.5;\n return (clampBoundaryCoordinate(value, min, max) - min) / (max - min);\n}\n\nfunction fromBoundarySpanRatio(\n ratio: number,\n size: number,\n): number {\n const min = BE_HALF;\n const max = size - BE_HALF;\n if (max <= min) return size / 2;\n return min + (max - min) * ratio;\n}\n\nfunction detectBoundarySide(\n center: { x: number; y: number },\n hostSize: { width: number; height: number },\n): BoundarySide {\n const distances: Array<{ side: BoundarySide; value: number }> = [\n { side: \"left\", value: Math.abs(center.x) },\n { side: \"right\", value: Math.abs(center.x - hostSize.width) },\n { side: \"top\", value: Math.abs(center.y) },\n { side: \"bottom\", value: Math.abs(center.y - hostSize.height) },\n ];\n distances.sort((a, b) => a.value - b.value);\n return distances[0]?.side ?? \"bottom\";\n}\n\nfunction clampBoundaryEventsAfterResize(\n state: Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0],\n hostId: string,\n oldW: number,\n oldH: number,\n newW: number,\n newH: number,\n): Parameters<DiagramCommand<BpmnRFNode, BpmnRFEdge>[\"execute\"]>[0] {\n const boundaryEvents = state.nodes.filter(\n (n) => n.data.elementType === \"BoundaryEvent\" && n.parentId === hostId,\n );\n\n let next = state;\n for (const be of boundaryEvents) {\n const px = be.position?.x ?? 0;\n const py = be.position?.y ?? 0;\n const cx = px + BE_HALF;\n const cy = py + BE_HALF;\n const side = detectBoundarySide({ x: cx, y: cy }, { width: oldW, height: oldH });\n\n let newCx: number;\n let newCy: number;\n\n if (side === \"bottom\") {\n newCy = newH;\n newCx = fromBoundarySpanRatio(getBoundarySpanRatio(cx, oldW), newW);\n } else if (side === \"right\") {\n newCx = newW;\n newCy = fromBoundarySpanRatio(getBoundarySpanRatio(cy, oldH), newH);\n } else if (side === \"top\") {\n newCy = 0;\n newCx = fromBoundarySpanRatio(getBoundarySpanRatio(cx, oldW), newW);\n } else {\n newCx = 0;\n newCy = fromBoundarySpanRatio(getBoundarySpanRatio(cy, oldH), newH);\n }\n\n next = moveNode(next, be.id, { x: newCx - BE_HALF, y: newCy - BE_HALF });\n }\n\n return next;\n}\n\n/**\n * Create a {@link DiagramCommand} that resizes a BPMN element, enforcing\n * minimum dimensions per spec. Boundary events attached to the resized element\n * are automatically repositioned to stay on the new border.\n *\n * @param options - Target element id, optional new width/height.\n * @returns Undoable command, throws when the element is not resizable.\n */\nexport function resizeBpmnNodeCommand(\n options: ResizeBpmnNodeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resize.${options.id}`,\n label: \"Resize BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n const size = getBpmnElementSize(node.data.elementType);\n if (!size.resizable) {\n throw new Error(`${node.data.elementType} is not resizable in BPMN.`);\n }\n\n const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const clampedW =\n options.width === undefined ? undefined : Math.max(size.minWidth, options.width);\n const clampedH =\n options.height === undefined ? undefined : Math.max(size.minHeight, options.height);\n\n const resized = resizeNode(state, options.id, {\n width: clampedW,\n height: clampedH,\n } as Parameters<typeof resizeNode<BpmnRFNode, BpmnRFEdge>>[2]);\n\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? clampedW ?? oldW;\n const newH = updatedNode?.height ?? clampedH ?? oldH;\n\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\n },\n };\n}\n\nexport function reorderBpmnLaneCommand(\n options: ReorderBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.reorderLane.${options.poolId}.${options.laneId}`,\n label: \"Reorder BPMN lane\",\n execute: (state) => {\n const pool = getNode(state, options.poolId);\n const lane = getNode(state, options.laneId);\n if (!pool || pool.data.elementType !== \"Pool\") {\n throw new Error(`Element \"${options.poolId}\" is not a pool.`);\n }\n if (!lane || lane.data.elementType !== \"Lane\" || lane.parentId !== options.poolId) {\n throw new Error(`Element \"${options.laneId}\" is not a lane in pool \"${options.poolId}\".`);\n }\n return reorderBpmnLane(state, options);\n },\n };\n}\n\nexport function moveBpmnLaneCommand(\n options: MoveBpmnLaneOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.moveLane.${options.poolId}.${options.laneId}`,\n label: \"Move BPMN lane\",\n execute: (state) =>\n reorderBpmnLane(state, {\n poolId: options.poolId,\n laneId: options.laneId,\n index: getBpmnLaneIndexAtPosition(state, options.poolId, options.position),\n }),\n };\n}\n\nexport function routeBpmnEdgeCommand(\n options: RouteBpmnEdgeOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.routeEdge.${options.id}`,\n label: \"Route BPMN edge\",\n execute: (state) => {\n const edge = state.edges.find((item) => item.id === options.id);\n if (!edge) throw new Error(`Edge \"${options.id}\" does not exist.`);\n const edgeType = edge.data?.edgeType;\n if (!edgeType || !isBpmnEdgeRoutingEditable(edgeType)) {\n throw new Error(`${edgeType ?? \"edge\"} routing points cannot be edited.`);\n }\n return patchEdge(state, options.id, {\n data: { routingPoints: options.routingPoints },\n } as Parameters<typeof patchEdge<BpmnRFNode, BpmnRFEdge>>[2]);\n },\n };\n}\n\nexport function deleteBpmnElementsCommand(\n ids: string[],\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.delete.${ids.join(\".\")}`,\n label: \"Delete BPMN elements\",\n execute: (state) => removeElements(state, ids),\n };\n}\n\nexport function copyBpmnElements(\n state: BpmnDiagramState,\n selection?: SelectionState,\n): BpmnClipboardState {\n return copyElements(state, selection);\n}\n\nexport function pasteBpmnElementsCommand(\n clipboard: BpmnClipboardState,\n options: PasteBpmnOptions = {},\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.paste\",\n label: \"Paste BPMN elements\",\n execute: (state) => pasteElements(state, clipboard, options),\n };\n}\n\nexport function selectBpmnElementsCommand(\n selection: SelectionState,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: \"bpmn.select\",\n label: \"Select BPMN elements\",\n execute: (state) => setSelection(state, createSelectionState(selection.nodeIds, selection.edgeIds)),\n };\n}\n\nexport function createBpmnDiagramDocument(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> = {},\n): BpmnDiagramDocument {\n return createDiagramDocument(normalizeDiagramState(state), {\n ...options,\n diagramType: \"bpmn\",\n });\n}\n\nexport function serializeBpmnDiagram(\n state: BpmnDiagramState,\n options: Omit<CreateDiagramDocumentOptions, \"diagramType\"> & { viewport?: Viewport } = {},\n): string {\n const { viewport, ...docOptions } = options;\n const normalized = normalizeDiagramState(state);\n if (viewport) {\n return serializeDiagramSnapshot(\n { nodes: normalized.nodes, edges: normalized.edges, viewport },\n { ...docOptions, diagramType: \"bpmn\" },\n );\n }\n return serializeDiagram(normalized, { ...docOptions, diagramType: \"bpmn\" });\n}\n\nexport function parseBpmnDiagramDocument(json: string): BpmnDiagramDocument {\n const document = parseDiagramDocument<BpmnRFNode, BpmnRFEdge>(json);\n if (document.diagramType && document.diagramType !== \"bpmn\") {\n throw new Error(`Expected a BPMN diagram document, received \"${document.diagramType}\".`);\n }\n return document;\n}\n\nexport function deserializeBpmnDiagram(json: string): BpmnDiagramState {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagram<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\n/**\n * Deserialize a BPMN diagram document to a snapshot that includes the persisted\n * viewport. Returns `viewport: { x:0, y:0, zoom:1 }` when none was saved.\n */\nexport function deserializeBpmnDiagramSnapshot(json: string): BpmnDiagramSnapshot {\n const document = parseBpmnDiagramDocument(json);\n return deserializeDiagramSnapshot<BpmnRFNode, BpmnRFEdge>(JSON.stringify(document));\n}\n\nexport function createBpmnEventBus(): BpmnEventBus {\n return createDiagramEventBus<BpmnRFNode, BpmnRFEdge>();\n}\n\nexport function runBpmnCommand(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n command: DiagramCommand<BpmnRFNode, BpmnRFEdge>,\n bus?: BpmnEventBus,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const next = executeCommand(stack, command);\n bus?.emit(\"command:executed\", {\n commandId: command.id,\n ...(command.label !== undefined ? { label: command.label } : {}),\n state: next.current,\n });\n return next;\n}\n\nexport function runBpmnCommands(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n commands: Array<DiagramCommand<BpmnRFNode, BpmnRFEdge>>,\n options: { id?: string; label?: string; bus?: BpmnEventBus } = {},\n): CommandStackState<BpmnRFNode, BpmnRFEdge> {\n const { bus, ...execOptions } = options;\n const next = executeCommands(stack, commands, execOptions);\n bus?.emit(\"command:executed\", {\n commandId: execOptions.id ?? \"bpmn.batch\",\n ...(execOptions.label !== undefined ? { label: execOptions.label } : {}),\n state: next.current,\n });\n return next;\n}\n\n/**\n * Persist BPMN command history to localStorage under a per-diagram key.\n * Safe to call in SSR environments — writes are silently skipped.\n */\nexport function persistBpmnHistory(\n stack: CommandStackState<BpmnRFNode, BpmnRFEdge>,\n diagramId: string,\n): void {\n persistCommandHistory(stack, `bpmn.history.${diagramId}`);\n}\n\n/**\n * Restore BPMN command history from localStorage. Returns `null` when no\n * history exists for the given diagram id or when called server-side.\n */\nexport function restoreBpmnHistory(\n diagramId: string,\n): CommandStackState<BpmnRFNode, BpmnRFEdge> | null {\n return restoreCommandHistory<BpmnRFNode, BpmnRFEdge>(`bpmn.history.${diagramId}`);\n}\n\n/**\n * Compute smart alignment guides for nodes being dragged on a BPMN canvas.\n * Excludes boundary events, lanes, and pools from guide sources.\n * When `poolId` is given, only considers nodes within that pool as static references.\n */\nexport function computeBpmnSmartGuides(\n movingNodes: BpmnRFNode[],\n state: BpmnDiagramState,\n poolId?: string,\n): SmartGuideResult {\n const movingIds = new Set(movingNodes.map((n) => n.id));\n const staticNodes = state.nodes.filter((n) => {\n if (movingIds.has(n.id)) return false;\n const et = n.data.elementType;\n if (et === \"BoundaryEvent\" || et === \"Lane\" || et === \"Pool\") return false;\n if (poolId) {\n const inPool =\n n.parentId === poolId ||\n (n.parentId !== undefined && getNode(state, n.parentId)?.parentId === poolId);\n if (!inPool) return false;\n }\n return true;\n });\n return computeSmartGuides(movingNodes, staticNodes);\n}\n\n/**\n * Create a command that groups selected BPMN nodes into a new SubProcess element.\n * Validates that every node can be contained by a SubProcess before executing.\n */\nexport function groupAsBpmnSubProcessCommand(\n options: GroupAsBpmnSubProcessOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.groupAsSubProcess.${options.groupId ?? options.nodeIds.join(\".\")}`,\n label: \"Group as SubProcess\",\n execute: (state) => {\n for (const nodeId of options.nodeIds) {\n const node = getNode(state, nodeId);\n if (!node) continue;\n const result = canContainBpmnElement(\"SubProcess\", node.data.elementType);\n if (result !== true) throw new Error(result);\n }\n const groupId = options.groupId ?? createUniqueId(\"subprocess\", state.nodes.map((n) => n.id));\n const groupNode = createBpmnNode({\n id: groupId,\n elementType: \"SubProcess\",\n position: { x: 0, y: 0 },\n ...(options.label !== undefined ? { label: options.label } : {}),\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n return groupNodes(state, {\n groupNode,\n nodeIds: options.nodeIds,\n padding: options.padding ?? 20,\n });\n },\n };\n}\n\n/**\n * Return node IDs in logical tab order for keyboard navigation.\n * When `poolId` is given, scopes the order to nodes within that pool and its lanes.\n */\nexport function getBpmnTabOrder(\n state: BpmnDiagramState,\n poolId?: string,\n): string[] {\n if (!poolId) return getNodeTabOrder(state);\n const pool = getNode(state, poolId);\n if (!pool) return [];\n const scopeIds = state.nodes\n .filter((n) => {\n if (n.id === poolId) return false;\n if (n.parentId === poolId) return true;\n const parent = getNode(state, n.parentId ?? \"\");\n return parent?.parentId === poolId;\n })\n .map((n) => n.id);\n return getNodeTabOrder(state, scopeIds);\n}\n\n/**\n * Compute the label layout (position + angle) for a BPMN edge.\n * Uses the edge's stored routing points when available; falls back to\n * the straight line between source and target centers.\n */\nexport function getBpmnEdgeLabelLayout(\n edgeId: string,\n state: BpmnDiagramState,\n options?: EdgeLabelOffsetOptions,\n): EdgeLabelLayout | null {\n const edge = state.edges.find((e) => e.id === edgeId);\n if (!edge) return null;\n const routingPoints = (edge.data?.routingPoints ?? []) as Array<{ x: number; y: number }>;\n if (routingPoints.length >= 2) {\n return getEdgeLabelLayout(routingPoints, options);\n }\n const sourceNode = getNode(state, edge.source);\n const targetNode = getNode(state, edge.target);\n if (!sourceNode || !targetNode) return null;\n const sourceAbsPos = getBpmnNodeAbsolutePosition(state, edge.source) ?? sourceNode.position;\n const targetAbsPos = getBpmnNodeAbsolutePosition(state, edge.target) ?? targetNode.position;\n const sourceCenter = getNodeCenterPosition(sourceAbsPos, getBpmnNodeSize(sourceNode));\n const targetCenter = getNodeCenterPosition(targetAbsPos, getBpmnNodeSize(targetNode));\n return getEdgeLabelLayout([sourceCenter, targetCenter], options);\n}\n\n/**\n * Create a command that resizes a BPMN element by dragging one of its 8 handles.\n * Boundary events attached to the resized element are automatically repositioned.\n *\n * @param options - Target element id, handle position, and pixel delta.\n * @returns Undoable command.\n */\nexport function resizeBpmnNodeByHandleCommand(\n options: ResizeBpmnNodeByHandleOptions,\n): DiagramCommand<BpmnRFNode, BpmnRFEdge> {\n return {\n id: `bpmn.resizeByHandle.${options.id}`,\n label: \"Resize BPMN element\",\n execute: (state) => {\n const node = getNode(state, options.id);\n if (!node) throw new Error(`Element \"${options.id}\" does not exist.`);\n const size = getBpmnElementSize(node.data.elementType);\n if (!size.resizable) {\n throw new Error(`${node.data.elementType} is not resizable in BPMN.`);\n }\n const oldW = node.width ?? size.width;\n const oldH = node.height ?? size.height;\n const resized = resizeNodeByHandle(state, {\n id: options.id,\n handle: options.handle,\n dx: options.dx,\n dy: options.dy,\n constraints: { minWidth: size.minWidth, minHeight: size.minHeight },\n });\n const updatedNode = getNode(resized, options.id);\n const newW = updatedNode?.width ?? oldW;\n const newH = updatedNode?.height ?? oldH;\n return clampBoundaryEventsAfterResize(resized, options.id, oldW, oldH, newW, newH);\n },\n };\n}\n\n/**\n * Create a layout cache for BPMN auto-layout calls.\n * Pass the returned cache to `withBpmnLayoutCache` to memoize identical topologies.\n */\nexport function createBpmnLayoutCache(options?: LayoutCacheOptions): LayoutCache {\n return createLayoutCache(options);\n}\n\n/**\n * Wrap an ELK-based layout function with BPMN topology caching so that diagrams\n * with unchanged node/edge structure are not re-laid-out unnecessarily.\n */\nexport function withBpmnLayoutCache(\n layoutFn: LayoutFn<BpmnRFNode, BpmnRFEdge>,\n cache?: LayoutCache,\n): LayoutFn<BpmnRFNode, BpmnRFEdge> {\n return withLayoutCache(layoutFn, cache ?? createLayoutCache());\n}\n"]}
|
package/dist/edges/index.cjs
CHANGED
|
@@ -8,32 +8,44 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
8
8
|
// src/edges/SequenceFlowEdge.tsx
|
|
9
9
|
|
|
10
10
|
// src/edges/path.ts
|
|
11
|
+
var LABEL_MIN_SEGMENT = 40;
|
|
12
|
+
var LABEL_EXIT_DISTANCE = 28;
|
|
11
13
|
function getPreferredLabelAnchor(points) {
|
|
12
14
|
if (points.length === 0) return { x: 0, y: 0 };
|
|
13
15
|
if (points.length === 1) return points[0];
|
|
14
|
-
let bestIndex = 1;
|
|
15
|
-
let bestLength = -1;
|
|
16
|
+
let bestIndex = -1;
|
|
16
17
|
for (let i = 1; i < points.length; i += 1) {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const length = Math.hypot(dx2, dy2);
|
|
20
|
-
if (length > bestLength) {
|
|
21
|
-
bestLength = length;
|
|
18
|
+
const length = Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y);
|
|
19
|
+
if (length >= LABEL_MIN_SEGMENT) {
|
|
22
20
|
bestIndex = i;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (bestIndex === -1) {
|
|
25
|
+
let bestLength = -1;
|
|
26
|
+
bestIndex = 1;
|
|
27
|
+
for (let i = 1; i < points.length; i += 1) {
|
|
28
|
+
const length = Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y);
|
|
29
|
+
if (length > bestLength) {
|
|
30
|
+
bestLength = length;
|
|
31
|
+
bestIndex = i;
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
}
|
|
25
35
|
const from = points[bestIndex - 1];
|
|
26
36
|
const to = points[bestIndex];
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
const segLength = Math.hypot(to.x - from.x, to.y - from.y);
|
|
38
|
+
const t = segLength > 0 ? Math.min(0.5, LABEL_EXIT_DISTANCE / segLength) : 0.5;
|
|
39
|
+
const anchor = {
|
|
40
|
+
x: from.x + (to.x - from.x) * t,
|
|
41
|
+
y: from.y + (to.y - from.y) * t
|
|
30
42
|
};
|
|
31
43
|
const dx = to.x - from.x;
|
|
32
44
|
const dy = to.y - from.y;
|
|
33
45
|
if (Math.abs(dx) >= Math.abs(dy)) {
|
|
34
|
-
return { x:
|
|
46
|
+
return { x: anchor.x, y: anchor.y - 12 };
|
|
35
47
|
}
|
|
36
|
-
return { x:
|
|
48
|
+
return { x: anchor.x + 12, y: anchor.y };
|
|
37
49
|
}
|
|
38
50
|
function getSegmentAngle(points) {
|
|
39
51
|
if (points.length < 2) return 0;
|
|
@@ -55,6 +67,7 @@ function getDefaultFlowMarkerPath(points) {
|
|
|
55
67
|
const y2 = anchorY - Math.sin(normalAngle) * half;
|
|
56
68
|
return `M ${x1} ${y1} L ${x2} ${y2}`;
|
|
57
69
|
}
|
|
70
|
+
var BPMN_EDGE_LABEL_Z_INDEX = 1e3;
|
|
58
71
|
function SequenceFlowEdge({
|
|
59
72
|
id,
|
|
60
73
|
sourceX,
|
|
@@ -77,7 +90,7 @@ function SequenceFlowEdge({
|
|
|
77
90
|
const defaultMarkerPath = d?.isDefault ? getDefaultFlowMarkerPath(polyline) : null;
|
|
78
91
|
const labelX = labelAnchor.x + (d?.labelOffsetX ?? 0);
|
|
79
92
|
const labelY = labelAnchor.y + (d?.labelOffsetY ?? 0);
|
|
80
|
-
const strokeColor = selected ? "#1a56db" : "#404040";
|
|
93
|
+
const strokeColor = d?.color?.stroke ?? (selected ? "#1a56db" : "#404040");
|
|
81
94
|
const strokeWidth = selected ? 2.25 : 1.5;
|
|
82
95
|
const haloWidth = selected ? 7 : 5;
|
|
83
96
|
const { updateEdgeData, getViewport } = react.useReactFlow();
|
|
@@ -125,9 +138,9 @@ function SequenceFlowEdge({
|
|
|
125
138
|
...d?.conditionExpression ? { markerStart: "url(#bpmn-diamond-open)" } : {},
|
|
126
139
|
markerEnd: markerEnd ?? "url(#bpmn-arrow)",
|
|
127
140
|
style: {
|
|
141
|
+
...style ?? {},
|
|
128
142
|
stroke: strokeColor,
|
|
129
|
-
strokeWidth
|
|
130
|
-
...style ?? {}
|
|
143
|
+
strokeWidth
|
|
131
144
|
}
|
|
132
145
|
}
|
|
133
146
|
),
|
|
@@ -153,16 +166,17 @@ function SequenceFlowEdge({
|
|
|
153
166
|
transform: `translate(-50%,-50%) translate(${labelX}px,${labelY}px)`,
|
|
154
167
|
fontSize: 11,
|
|
155
168
|
fontFamily: '"IBM Plex Sans", Inter, system-ui, sans-serif',
|
|
156
|
-
background: "rgba(255,255,255,0.96)",
|
|
157
|
-
color:
|
|
169
|
+
background: d?.color?.fill ?? "rgba(255,255,255,0.96)",
|
|
170
|
+
color: strokeColor,
|
|
158
171
|
padding: "2px 6px",
|
|
159
172
|
borderRadius: 999,
|
|
160
|
-
border:
|
|
173
|
+
border: `1px solid ${d?.color?.stroke ?? "rgba(148, 163, 184, 0.45)"}`,
|
|
161
174
|
boxShadow: "0 1px 2px rgba(15, 23, 42, 0.10)",
|
|
162
175
|
pointerEvents: "all",
|
|
163
176
|
cursor: "grab",
|
|
164
177
|
userSelect: "none",
|
|
165
|
-
whiteSpace: "nowrap"
|
|
178
|
+
whiteSpace: "nowrap",
|
|
179
|
+
zIndex: BPMN_EDGE_LABEL_Z_INDEX
|
|
166
180
|
},
|
|
167
181
|
className: "nodrag nopan",
|
|
168
182
|
children: label ?? d?.label
|
|
@@ -170,6 +184,7 @@ function SequenceFlowEdge({
|
|
|
170
184
|
) })
|
|
171
185
|
] });
|
|
172
186
|
}
|
|
187
|
+
var BPMN_EDGE_LABEL_Z_INDEX2 = 1e3;
|
|
173
188
|
function MessageFlowEdge({
|
|
174
189
|
id,
|
|
175
190
|
sourceX,
|
|
@@ -189,7 +204,7 @@ function MessageFlowEdge({
|
|
|
189
204
|
const polyline = points && points.length >= 2 ? [{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }] : [{ x: sourceX, y: sourceY }, { x: targetX, y: targetY }];
|
|
190
205
|
const path = points && points.length >= 2 ? routing.pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }]) : routing.getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);
|
|
191
206
|
const labelAnchor = getPreferredLabelAnchor(polyline);
|
|
192
|
-
const strokeColor = selected ? "#1a56db" : "#404040";
|
|
207
|
+
const strokeColor = d?.color?.stroke ?? (selected ? "#1a56db" : "#404040");
|
|
193
208
|
const strokeWidth = selected ? 2.25 : 1.5;
|
|
194
209
|
const haloWidth = selected ? 7 : 5;
|
|
195
210
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -212,10 +227,10 @@ function MessageFlowEdge({
|
|
|
212
227
|
markerStart: "url(#bpmn-circle-open)",
|
|
213
228
|
markerEnd: markerEnd ?? "url(#bpmn-arrow-open)",
|
|
214
229
|
style: {
|
|
215
|
-
stroke: strokeColor,
|
|
216
|
-
strokeWidth,
|
|
217
230
|
strokeDasharray: "6 3",
|
|
218
|
-
...style ?? {}
|
|
231
|
+
...style ?? {},
|
|
232
|
+
stroke: strokeColor,
|
|
233
|
+
strokeWidth
|
|
219
234
|
}
|
|
220
235
|
}
|
|
221
236
|
),
|
|
@@ -227,14 +242,15 @@ function MessageFlowEdge({
|
|
|
227
242
|
transform: `translate(-50%,-50%) translate(${labelAnchor.x}px,${labelAnchor.y}px)`,
|
|
228
243
|
fontSize: 11,
|
|
229
244
|
fontFamily: '"IBM Plex Sans", Inter, system-ui, sans-serif',
|
|
230
|
-
background: "rgba(255,255,255,0.96)",
|
|
231
|
-
color:
|
|
245
|
+
background: d?.color?.fill ?? "rgba(255,255,255,0.96)",
|
|
246
|
+
color: strokeColor,
|
|
232
247
|
padding: "2px 6px",
|
|
233
248
|
borderRadius: 999,
|
|
234
|
-
border:
|
|
249
|
+
border: `1px solid ${d?.color?.stroke ?? "rgba(148, 163, 184, 0.45)"}`,
|
|
235
250
|
boxShadow: "0 1px 2px rgba(15, 23, 42, 0.10)",
|
|
236
251
|
pointerEvents: "all",
|
|
237
|
-
whiteSpace: "nowrap"
|
|
252
|
+
whiteSpace: "nowrap",
|
|
253
|
+
zIndex: BPMN_EDGE_LABEL_Z_INDEX2
|
|
238
254
|
},
|
|
239
255
|
className: "nodrag nopan",
|
|
240
256
|
children: label ?? d?.label
|
|
@@ -257,6 +273,7 @@ function AssociationEdge({
|
|
|
257
273
|
const d = data;
|
|
258
274
|
const points = d?.routingPoints;
|
|
259
275
|
const direction = d?.associationDirection ?? "none";
|
|
276
|
+
const strokeColor = d?.color?.stroke ?? (selected ? "#1a56db" : "#888");
|
|
260
277
|
const path = points && points.length >= 2 ? routing.pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }]) : routing.getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);
|
|
261
278
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
262
279
|
react.BaseEdge,
|
|
@@ -266,10 +283,10 @@ function AssociationEdge({
|
|
|
266
283
|
...direction === "both" ? { markerStart: "url(#bpmn-arrow-open)" } : {},
|
|
267
284
|
...direction === "one" || direction === "both" ? { markerEnd: "url(#bpmn-arrow-open)" } : {},
|
|
268
285
|
style: {
|
|
269
|
-
|
|
286
|
+
...style ?? {},
|
|
287
|
+
stroke: strokeColor,
|
|
270
288
|
strokeWidth: 1,
|
|
271
|
-
strokeDasharray: "3 3"
|
|
272
|
-
...style ?? {}
|
|
289
|
+
strokeDasharray: "3 3"
|
|
273
290
|
}
|
|
274
291
|
}
|
|
275
292
|
);
|
|
@@ -288,6 +305,7 @@ function DataAssociationEdge({
|
|
|
288
305
|
}) {
|
|
289
306
|
const d = data;
|
|
290
307
|
const points = d?.routingPoints;
|
|
308
|
+
const strokeColor = d?.color?.stroke ?? (selected ? "#1a56db" : "#888");
|
|
291
309
|
const path = points && points.length >= 2 ? routing.pointsToSvgPath([{ x: sourceX, y: sourceY }, ...points.slice(1, -1), { x: targetX, y: targetY }]) : routing.getOrthogonalPath(sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition);
|
|
292
310
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
293
311
|
react.BaseEdge,
|
|
@@ -296,10 +314,10 @@ function DataAssociationEdge({
|
|
|
296
314
|
path,
|
|
297
315
|
markerEnd: "url(#bpmn-arrow-open)",
|
|
298
316
|
style: {
|
|
299
|
-
|
|
317
|
+
...style ?? {},
|
|
318
|
+
stroke: strokeColor,
|
|
300
319
|
strokeWidth: 1,
|
|
301
|
-
strokeDasharray: "3 3"
|
|
302
|
-
...style ?? {}
|
|
320
|
+
strokeDasharray: "3 3"
|
|
303
321
|
}
|
|
304
322
|
}
|
|
305
323
|
);
|
|
@@ -310,6 +328,7 @@ var BPMN_THEME = {
|
|
|
310
328
|
stroke: "#334155",
|
|
311
329
|
fontFamily: "Inter, system-ui, sans-serif",
|
|
312
330
|
fontSize: 11};
|
|
331
|
+
var BPMN_EDGE_LABEL_Z_INDEX3 = 1e3;
|
|
313
332
|
function ConversationLinkEdge({
|
|
314
333
|
sourceX,
|
|
315
334
|
sourceY,
|
|
@@ -319,7 +338,7 @@ function ConversationLinkEdge({
|
|
|
319
338
|
markerEnd
|
|
320
339
|
}) {
|
|
321
340
|
const d = data;
|
|
322
|
-
const stroke = BPMN_THEME.stroke;
|
|
341
|
+
const stroke = d?.color?.stroke ?? BPMN_THEME.stroke;
|
|
323
342
|
const [path] = react.getStraightPath({ sourceX, sourceY, targetX, targetY });
|
|
324
343
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
325
344
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -337,7 +356,28 @@ function ConversationLinkEdge({
|
|
|
337
356
|
style: { stroke: "#ffffff", strokeWidth: 2, fill: "none" }
|
|
338
357
|
}
|
|
339
358
|
),
|
|
340
|
-
d?.label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
359
|
+
d?.label && /* @__PURE__ */ jsxRuntime.jsx(react.EdgeLabelRenderer, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
360
|
+
"div",
|
|
361
|
+
{
|
|
362
|
+
style: {
|
|
363
|
+
position: "absolute",
|
|
364
|
+
transform: `translate(-50%,-50%) translate(${(sourceX + targetX) / 2}px,${(sourceY + targetY) / 2}px)`,
|
|
365
|
+
fontSize: BPMN_THEME.fontSize,
|
|
366
|
+
fontFamily: BPMN_THEME.fontFamily,
|
|
367
|
+
background: d?.color?.fill ?? "rgba(255,255,255,0.96)",
|
|
368
|
+
color: stroke,
|
|
369
|
+
padding: "2px 6px",
|
|
370
|
+
borderRadius: 999,
|
|
371
|
+
border: `1px solid ${d?.color?.stroke ?? "rgba(148, 163, 184, 0.45)"}`,
|
|
372
|
+
boxShadow: "0 1px 2px rgba(15, 23, 42, 0.10)",
|
|
373
|
+
pointerEvents: "all",
|
|
374
|
+
whiteSpace: "nowrap",
|
|
375
|
+
zIndex: BPMN_EDGE_LABEL_Z_INDEX3
|
|
376
|
+
},
|
|
377
|
+
className: "nodrag nopan",
|
|
378
|
+
children: d.label
|
|
379
|
+
}
|
|
380
|
+
) })
|
|
341
381
|
] });
|
|
342
382
|
}
|
|
343
383
|
|