@focus.matters/diagrams 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/{DirectedPoint-HRgiLZeU.js → DirectedPoint-aLZ8iXbb.js} +2 -2
  2. package/dist/DirectedPoint-aLZ8iXbb.js.map +1 -0
  3. package/dist/diagrams.css +1 -1
  4. package/dist/{index-DZNvKq1b.js → index-B_tKoJcy.js} +2535 -1963
  5. package/dist/{index-DZNvKq1b.js.map → index-B_tKoJcy.js.map} +1 -1
  6. package/dist/index.d.ts +1 -8
  7. package/dist/index.es.js +1 -1
  8. package/dist/index.umd.js +4 -4
  9. package/dist/index.umd.js.map +1 -1
  10. package/dist/src/Diagrams/components/objects/CustomRenderers.d.ts +4 -0
  11. package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/debugEdges.d.ts +4 -4
  12. package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/types.d.ts +1 -1
  13. package/dist/src/Diagrams/components/objects/ScreenRenderers.d.ts +4 -0
  14. package/dist/{Diagrams → src/Diagrams}/components/objects/Shape.d.ts +3 -3
  15. package/dist/{Diagrams → src/Diagrams}/components/objects/customRendererProps.d.ts +1 -1
  16. package/dist/src/Diagrams/components/objects/screenRendererProps.d.ts +18 -0
  17. package/dist/{Diagrams → src/Diagrams}/custom/agent/edges/AgentEdge.d.ts +1 -1
  18. package/dist/{Diagrams → src/Diagrams}/custom/agent/nodes/ActionNode.d.ts +1 -1
  19. package/dist/{Diagrams → src/Diagrams}/custom/agent/nodes/AgentNode.d.ts +1 -1
  20. package/dist/{Diagrams → src/Diagrams}/custom/agent/nodes/ConditionNode.d.ts +1 -1
  21. package/dist/{Diagrams → src/Diagrams}/custom/agent/nodes/OutcomeNode.d.ts +1 -1
  22. package/dist/{Diagrams → src/Diagrams}/custom/agent/nodes/TriggerNode.d.ts +1 -1
  23. package/dist/{Diagrams → src/Diagrams}/custom/agent/types.d.ts +6 -6
  24. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNGridSnap.d.ts +21 -0
  25. package/dist/src/Diagrams/custom/bpmn/extensions/BPMNLaneResizer.d.ts +20 -0
  26. package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/EventNode.d.ts +4 -2
  27. package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/GateNode.d.ts +4 -2
  28. package/dist/src/Diagrams/custom/bpmn/nodes/Lanes/LaneScreenRenderer.d.ts +6 -0
  29. package/dist/src/Diagrams/custom/bpmn/nodes/Lanes/index.d.ts +107 -0
  30. package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/TaskNode.d.ts +1 -1
  31. package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/UnknownBPMNNode.d.ts +2 -2
  32. package/dist/{Diagrams → src/Diagrams}/custom/communication/edges/CommunicationEdge.d.ts +1 -1
  33. package/dist/{Diagrams → src/Diagrams}/custom/communication/nodes/CommunicationActorNode.d.ts +1 -1
  34. package/dist/{Diagrams → src/Diagrams}/custom/communication/nodes/CommunicationControllerNode.d.ts +1 -1
  35. package/dist/{Diagrams → src/Diagrams}/custom/communication/nodes/CommunicationObjectNode.d.ts +1 -1
  36. package/dist/src/Diagrams/custom/communication/types.d.ts +1 -0
  37. package/dist/src/Diagrams/custom/editable/EditableLabel.d.ts +8 -0
  38. package/dist/{Diagrams → src/Diagrams}/custom/editable/EditableNode.d.ts +2 -2
  39. package/dist/{Diagrams → src/Diagrams}/store/elements/Edge.d.ts +2 -2
  40. package/dist/{Diagrams → src/Diagrams}/store/elements/EdgePoint.d.ts +4 -4
  41. package/dist/{Diagrams → src/Diagrams}/store/elements/Events.d.ts +6 -6
  42. package/dist/{Diagrams → src/Diagrams}/store/elements/Gateway.d.ts +3 -3
  43. package/dist/{Diagrams → src/Diagrams}/store/elements/Node.d.ts +11 -3
  44. package/dist/{Diagrams → src/Diagrams}/store/extensions/Creator.d.ts +1 -1
  45. package/dist/{Diagrams → src/Diagrams}/store/extensions/Dragger.d.ts +1 -1
  46. package/dist/{Diagrams → src/Diagrams}/store/extensions/EdgesDragger.d.ts +23 -23
  47. package/dist/src/Diagrams/store/extensions/NodesAligner.d.ts +39 -0
  48. package/dist/{Diagrams → src/Diagrams}/store/extensions/Selector.d.ts +1 -1
  49. package/dist/{Diagrams → src/Diagrams}/store/primitives/Coordinates.d.ts +1 -1
  50. package/dist/{Diagrams → src/Diagrams}/store/types.d.ts +4 -4
  51. package/dist/src/Diagrams/util/Autopan.d.ts +14 -0
  52. package/dist/{Diagrams → src/Diagrams}/util/bpmn/types.d.ts +1 -1
  53. package/dist/src/index.d.ts +8 -0
  54. package/package.json +1 -1
  55. package/dist/Diagrams/components/objects/CustomRenderers.d.ts +0 -6
  56. package/dist/Diagrams/custom/bpmn/nodes/Lanes/LanesResizer.d.ts +0 -6
  57. package/dist/Diagrams/custom/bpmn/nodes/Lanes/index.d.ts +0 -66
  58. package/dist/Diagrams/custom/communication/types.d.ts +0 -1
  59. package/dist/Diagrams/custom/editable/EditableLabel.d.ts +0 -3
  60. package/dist/Diagrams/custom/editable/EditableNodeContext.d.ts +0 -3
  61. package/dist/Diagrams/store/extensions/NodesAligner.d.ts +0 -19
  62. package/dist/DirectedPoint-HRgiLZeU.js.map +0 -1
  63. /package/dist/{Diagrams → src/Diagrams}/DiagramEditor.d.ts +0 -0
  64. /package/dist/{Diagrams → src/Diagrams}/components/Canvas.d.ts +0 -0
  65. /package/dist/{Diagrams → src/Diagrams}/components/extra/AlignmentSuggestions.d.ts +0 -0
  66. /package/dist/{Diagrams → src/Diagrams}/components/extra/GatewayRender.d.ts +0 -0
  67. /package/dist/{Diagrams → src/Diagrams}/components/extra/Measurement.d.ts +0 -0
  68. /package/dist/{Diagrams → src/Diagrams}/components/extra/MouseTracker.d.ts +0 -0
  69. /package/dist/{Diagrams → src/Diagrams}/components/extra/NodesConnectorRenderer.d.ts +0 -0
  70. /package/dist/{Diagrams → src/Diagrams}/components/extra/PathFindingRenderer.d.ts +0 -0
  71. /package/dist/{Diagrams → src/Diagrams}/components/extra/Selection.d.ts +0 -0
  72. /package/dist/{Diagrams → src/Diagrams}/components/extra/Stats.d.ts +0 -0
  73. /package/dist/{Diagrams → src/Diagrams}/components/extra/Svg.d.ts +0 -0
  74. /package/dist/{Diagrams → src/Diagrams}/components/extra/Theme.d.ts +0 -0
  75. /package/dist/{Diagrams → src/Diagrams}/components/extra/ToolsState.d.ts +0 -0
  76. /package/dist/{Diagrams → src/Diagrams}/components/nodes/NodeTools.d.ts +0 -0
  77. /package/dist/{Diagrams → src/Diagrams}/components/objects/Cross.d.ts +0 -0
  78. /package/dist/{Diagrams → src/Diagrams}/components/objects/Grid.d.ts +0 -0
  79. /package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/EdgeMarker.d.ts +0 -0
  80. /package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/EdgeMidpoints.d.ts +0 -0
  81. /package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/index.d.ts +0 -0
  82. /package/dist/{Diagrams → src/Diagrams}/components/objects/RenderEdge/util.d.ts +0 -0
  83. /package/dist/{Diagrams → src/Diagrams}/components/objects/Shapes.d.ts +0 -0
  84. /package/dist/{Diagrams → src/Diagrams}/components/objects/makeScalableComponent.d.ts +0 -0
  85. /package/dist/{Diagrams → src/Diagrams}/context-menu/ContextMenu.d.ts +0 -0
  86. /package/dist/{Diagrams → src/Diagrams}/context-menu/buildDiagramContextMenu.d.ts +0 -0
  87. /package/dist/{Diagrams → src/Diagrams}/context-menu/index.d.ts +0 -0
  88. /package/dist/{Diagrams → src/Diagrams}/context-menu/types.d.ts +0 -0
  89. /package/dist/{Diagrams → src/Diagrams}/custom/agent/AgentDiagram.d.ts +0 -0
  90. /package/dist/{Diagrams → src/Diagrams}/custom/agent/index.d.ts +0 -0
  91. /package/dist/{Diagrams → src/Diagrams}/custom/bpmn/BPMDiagram.d.ts +0 -0
  92. /package/dist/{Diagrams → src/Diagrams}/custom/bpmn/bpmnEvents.d.ts +0 -0
  93. /package/dist/{Diagrams → src/Diagrams}/custom/bpmn/edges/EdgeWithLoad.d.ts +0 -0
  94. /package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/BPMNNodeContext.d.ts +0 -0
  95. /package/dist/{Diagrams → src/Diagrams}/custom/bpmn/nodes/BPMNode.d.ts +0 -0
  96. /package/dist/{Diagrams → src/Diagrams}/custom/communication/CommunicationDiagram.d.ts +0 -0
  97. /package/dist/{Diagrams → src/Diagrams}/custom/communication/CommunicationNode.d.ts +0 -0
  98. /package/dist/{Diagrams → src/Diagrams}/custom/editable/EditableDiagram.d.ts +0 -0
  99. /package/dist/{Diagrams → src/Diagrams}/custom/editable/EditionMode.d.ts +0 -0
  100. /package/dist/{Diagrams → src/Diagrams}/custom/editable/events.d.ts +0 -0
  101. /package/dist/{Diagrams → src/Diagrams}/layout/HStack.d.ts +0 -0
  102. /package/dist/{Diagrams → src/Diagrams}/store/Canvas.d.ts +0 -0
  103. /package/dist/{Diagrams → src/Diagrams}/store/Diagram.d.ts +0 -0
  104. /package/dist/{Diagrams → src/Diagrams}/store/elements/Element.d.ts +0 -0
  105. /package/dist/{Diagrams → src/Diagrams}/store/elements/EventsMouseInformation.d.ts +0 -0
  106. /package/dist/{Diagrams → src/Diagrams}/store/elements/TextNode.d.ts +0 -0
  107. /package/dist/{Diagrams → src/Diagrams}/store/extensions/Debugger.d.ts +0 -0
  108. /package/dist/{Diagrams → src/Diagrams}/store/extensions/DiagramExtension.d.ts +0 -0
  109. /package/dist/{Diagrams → src/Diagrams}/store/extensions/DistancesBalancer.d.ts +0 -0
  110. /package/dist/{Diagrams → src/Diagrams}/store/extensions/GridSnap.d.ts +0 -0
  111. /package/dist/{Diagrams → src/Diagrams}/store/extensions/History.d.ts +0 -0
  112. /package/dist/{Diagrams → src/Diagrams}/store/extensions/Hotkeys.d.ts +0 -0
  113. /package/dist/{Diagrams → src/Diagrams}/store/extensions/Measurer.d.ts +0 -0
  114. /package/dist/{Diagrams → src/Diagrams}/store/extensions/NodesConnector.d.ts +0 -0
  115. /package/dist/{Diagrams → src/Diagrams}/store/extensions/NodesResizer.d.ts +0 -0
  116. /package/dist/{Diagrams → src/Diagrams}/store/extensions/PathFindingRenderer.d.ts +0 -0
  117. /package/dist/{Diagrams → src/Diagrams}/store/extensions/Priorities.d.ts +0 -0
  118. /package/dist/{Diagrams → src/Diagrams}/store/extensions/Rules.d.ts +0 -0
  119. /package/dist/{Diagrams → src/Diagrams}/store/extensions/StraightDrag.d.ts +0 -0
  120. /package/dist/{Diagrams → src/Diagrams}/store/primitives/Dimensions.d.ts +0 -0
  121. /package/dist/{Diagrams → src/Diagrams}/store/primitives/DirectedPoint.d.ts +0 -0
  122. /package/dist/{Diagrams → src/Diagrams}/util/ClassList.d.ts +0 -0
  123. /package/dist/{Diagrams → src/Diagrams}/util/Mouse.d.ts +0 -0
  124. /package/dist/{Diagrams → src/Diagrams}/util/Mutex.d.ts +0 -0
  125. /package/dist/{Diagrams → src/Diagrams}/util/PriorityQueue.d.ts +0 -0
  126. /package/dist/{Diagrams → src/Diagrams}/util/Semaphore.d.ts +0 -0
  127. /package/dist/{Diagrams → src/Diagrams}/util/TasksQueue.d.ts +0 -0
  128. /package/dist/{Diagrams → src/Diagrams}/util/arrayOrArray.d.ts +0 -0
  129. /package/dist/{Diagrams → src/Diagrams}/util/awaitTime.d.ts +0 -0
  130. /package/dist/{Diagrams → src/Diagrams}/util/binders.d.ts +0 -0
  131. /package/dist/{Diagrams → src/Diagrams}/util/bpmn/applyBPMNImportPlan.d.ts +0 -0
  132. /package/dist/{Diagrams → src/Diagrams}/util/bpmn/buildBPMNImportPlan.d.ts +0 -0
  133. /package/dist/{Diagrams → src/Diagrams}/util/bpmn/importBPMNXmlIntoDiagram.d.ts +0 -0
  134. /package/dist/{Diagrams → src/Diagrams}/util/bpmn/index.d.ts +0 -0
  135. /package/dist/{Diagrams → src/Diagrams}/util/bpmn/parseBPMNXml.d.ts +0 -0
  136. /package/dist/{Diagrams → src/Diagrams}/util/cloneDeep.d.ts +0 -0
  137. /package/dist/{Diagrams → src/Diagrams}/util/downloadFile.d.ts +0 -0
  138. /package/dist/{Diagrams → src/Diagrams}/util/getEnumStr.d.ts +0 -0
  139. /package/dist/{Diagrams → src/Diagrams}/util/getIdForNode.d.ts +0 -0
  140. /package/dist/{Diagrams → src/Diagrams}/util/getUniqueId.d.ts +0 -0
  141. /package/dist/{Diagrams → src/Diagrams}/util/insertSorted.d.ts +0 -0
  142. /package/dist/{Diagrams → src/Diagrams}/util/paths/PathsGrid.d.ts +0 -0
  143. /package/dist/{Diagrams → src/Diagrams}/util/paths/findBestPathBetweenNodes.d.ts +0 -0
  144. /package/dist/{Diagrams → src/Diagrams}/util/paths/orthogonalRouter.d.ts +0 -0
  145. /package/dist/{Diagrams → src/Diagrams}/util/paths/stepBackFromGateway.d.ts +0 -0
  146. /package/dist/{Diagrams → src/Diagrams}/util/readFile.d.ts +0 -0
  147. /package/dist/{Diagrams → src/Diagrams}/util/shapes.d.ts +0 -0
  148. /package/dist/{Diagrams → src/Diagrams}/util/throttle.d.ts +0 -0
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
- (function(C,y){typeof exports=="object"&&typeof module<"u"?y(exports,require("mobx-react-lite"),require("mobx"),require("react"),require("svg-path-bbox")):typeof define=="function"&&define.amd?define(["exports","mobx-react-lite","mobx","react","svg-path-bbox"],y):(C=typeof globalThis<"u"?globalThis:C||self,y(C.FocusMattersDiagrams={},C.mobxReactLite,C.mobx,C.React))})(this,(function(C,y,u,b){"use strict";var Tn=Object.defineProperty;var wr=(C,y,u)=>y in C?Tn(C,y,{enumerable:!0,configurable:!0,writable:!0,value:u}):C[y]=u;var o=(C,y)=>Tn(C,"name",{value:y,configurable:!0});var ct=(C,y,u)=>wr(C,typeof y!="symbol"?y+"":y,u);var St,It,At,Ct;var Te={exports:{}},jt={};var nn;function Fn(){if(nn)return jt;nn=1;var i=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function e(s,n,a){var r=null;if(a!==void 0&&(r=""+a),n.key!==void 0&&(r=""+n.key),"key"in n){a={};for(var l in n)l!=="key"&&(a[l]=n[l])}else a=n;return n=a.ref,{$$typeof:i,type:s,key:r,ref:n!==void 0?n:null,props:a}}return o(e,"jsxProd"),jt.Fragment=t,jt.jsx=e,jt.jsxs=e,jt}o(Fn,"requireReactJsxRuntime_production");var an;function zn(){return an||(an=1,Te.exports=Fn()),Te.exports}o(zn,"requireJsxRuntime");var h=zn();const V=class V{_data=[];constructor(t,e=!0){if(t||(t=[0,0,0,0]),Array.isArray(t)){if(t.length!==4)throw new Error("Invalid coordinates length");this._data=[...t]}else this._data=[...t._data];if(this.width<0){const s=this.width;this.x+=s,this.width=-s}if(this.height<0){const s=this.height;this.y+=s,this.height=-s}e&&u.makeAutoObservable(this)}get coordinates(){return new p(this.raw.slice(0,2))}get bottomLeft(){return new p([this.x,this.y+this.height])}get bottomMiddle(){return new p([this.x+this.width/2,this.y+this.height])}get bottomRight(){return new p([this.x+this.width,this.y+this.height])}get leftMiddle(){return new p([this.x,this.y+this.height/2])}get middle(){return new p([this.x+this.width/2,this.y+this.height/2])}get rightMiddle(){return new p([this.x+this.width,this.y+this.height/2])}get topLeft(){return this.coordinates}get topMiddle(){return new p([this.x+this.width/2,this.y])}get topRight(){return new p([this.x+this.width,this.y])}get size(){return new p(this.raw.slice(2,4))}get x(){return this.get(0)}get y(){return this.get(1)}get height(){return this.get(3)}get width(){return this.get(2)}set x(t){this.set(0,t)}set y(t){this.set(1,t)}set height(t){this.set(3,t)}set width(t){this.set(2,t)}get norm(){return this.size.substract(this.coordinates).norm}get length(){return this._data.length}get raw(){return u.toJS([...this._data])}get round(){return new V([Math.round(this.x),Math.round(this.y),Math.round(this.width),Math.round(this.height)])}get style(){return{width:this.width,height:this.height,left:this.x,top:this.y}}assign(t){if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof V?t:new V(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this.set(2,e.get(2)),this.set(3,e.get(3)),this}assignCoordinates(t){if(t.length!==2)throw new Error("Invalid number of Coordinates");const e=t instanceof p?t:new p(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this}assignDimensions(t){if(t.length!==2)throw new Error("Invalid number of Coordinates");const e=t instanceof p?t:new p(t);return this.set(2,e.get(0)),this.set(3,e.get(1)),this}bound(t){this.x=Math.min(t.x+t.width-this.width,Math.max(t.x,this.x)),this.y=Math.min(t.y+t.height-this.height,Math.max(t.y,this.y))}collides(t,e=!1){if(t instanceof V){const s=this.x-(e?1:0),n=this.x+this.width+(e?1:0),a=this.y-(e?1:0),r=this.y+this.height+(e?1:0),l=t.x,c=t.x+t.width,d=t.y,g=t.y+t.height;return!(n<=l||c<=s||r<=d||g<=a)}else{const s=this.x,n=this.x+this.width,a=this.y,r=this.y+this.height;return t.x>=s&&t.x<=n&&t.y>=a&&t.y<=r}}copy(){return new V([this.x,this.y,this.width,this.height])}divide(t){return this.set(0,this.get(0)/t),this.set(1,this.get(1)/t),this.set(2,this.get(2)/t),this.set(3,this.get(3)/t),this}edgeDistanceX(t){return this.x>t.x+t.width?-(this.x-t.x-t.width):t.x>this.x+this.width?t.x-this.x-this.width:0}edgeDistanceY(t){return this.y>t.y+t.height?-(this.y-t.y-t.height):t.y>this.y+this.height?t.y-this.y-this.height:0}get(t){return this._data[t]}inflate(t){return this.copy().translate(new p([-t,-t])).assignDimensions(this.size.sum(new p([2*t,2*t])))}multiply(t){return this.set(0,this.get(0)*t),this.set(1,this.get(1)*t),this.set(2,this.get(2)*t),this.set(3,this.get(3)*t),this}scale(t){return this.set(2,this.get(2)+t.get(0)),this.set(3,this.get(3)+t.get(1)),this}set(t,e){this._data[t]=e}substract(t){if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof V?t:new V(t);return this.set(0,this.get(0)-e.get(0)),this.set(1,this.get(1)-e.get(1)),this.set(2,this.get(2)-e.get(2)),this.set(3,this.get(3)-e.get(3)),this}sum(t){if(t instanceof p)this.set(0,this.get(0)+t.get(0)),this.set(1,this.get(1)+t.get(1));else{if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof V?t:new V(t);this.set(0,this.get(0)+e.get(0)),this.set(1,this.get(1)+e.get(1)),this.set(2,this.get(2)+e.get(2)),this.set(3,this.get(3)+e.get(3))}return this}toString(){return`(${this.x}, ${this.y}, ${this.width}, ${this.height})`}translate(t){return this.set(0,this.get(0)+t.get(0)),this.set(1,this.get(1)+t.get(1)),this}};o(V,"Dimensions");let w=V;const As=class As{constructor(t){this.originalEvent=t}originalEvent;get button(){switch(this.originalEvent.button){case 1:return"left";case 2:return"right";case 4:return"middle";case 8:return"back";case 16:return"forward"}return"none"}get position(){return new p(this.originalEvent,!1)}get x(){return this.originalEvent.clientX}get y(){return this.originalEvent.clientY}};o(As,"MouseInformation");let Fe=As;const Cs=class Cs{constructor(t){this.src=t}src;_cancellable=!0;_cancelled=!1;_bubbles=!0;_spreads=!0;get bubbles(){return this._bubbles}get cancelled(){return this._cancelled}get spreads(){return this._spreads}cancellable(t){return this._cancellable=t,this}cancel(){this._cancellable&&(this._cancelled=!0)}stopPropagation(){this._bubbles=!1}stopImmediatePropagation(){this._spreads=!1,this.stopPropagation()}};o(Cs,"DEvent");let re=Cs;const js=class js extends re{};o(js,"DUIEvent");let bt=js;const $s=class $s extends bt{constructor(t,e){super(t),this.src=t,this.originalEvent=e,this.mouse=new Fe(e)}src;originalEvent;mouse;get ctrl(){return this.originalEvent.ctrlKey}get edge(){return this.src.diagram?.getEdgeById(this.originalEvent.target?.closest(".edge")?.dataset.id||"")}get node(){const t=this.originalEvent.target,e=t instanceof globalThis.Element?t.closest(".diagram__node")?.dataset.id:void 0;if(e)return this.src.diagram?.getNodeById(e);if(t instanceof globalThis.Element&&t.closest(".edge")&&"clientX"in this.originalEvent&&"clientY"in this.originalEvent){const s=document.elementsFromPoint(this.originalEvent.clientX,this.originalEvent.clientY).find(n=>n.closest(".diagram__node"))?.closest(".diagram__node");return this.src.diagram?.getNodeById(s?.dataset.id||"")}}get shift(){return this.originalEvent.shiftKey}get target(){return this.originalEvent.target}};o($s,"DMouseEvent");let K=$s;const Bs=class Bs extends K{};o(Bs,"DClickEvent");let oe=Bs;const Ns=class Ns extends K{};o(Ns,"DDoubleClickEvent");let le=Ns;const Ls=class Ls extends K{};o(Ls,"DMouseDownEvent");let dt=Ls;const Ds=class Ds extends K{};o(Ds,"DMouseUpEvent");let Z=Ds;const Os=class Os extends K{};o(Os,"DMouseMoveEvent");let ht=Os;const Ts=class Ts extends K{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent;get directionX(){return this.originalEvent.deltaX<0?"left":this.originalEvent.deltaX>0?"right":"none"}get directionY(){return this.originalEvent.deltaY<0?"up":this.originalEvent.deltaY>0?"down":"none"}};o(Ts,"DWheelEvent");let ze=Ts;const Fs=class Fs extends bt{constructor(t,e){super(t),this.originalEvent=e}originalEvent;get code(){return this.originalEvent.code}get alt(){return this.originalEvent.altKey}get ctrl(){return this.originalEvent.ctrlKey}get shift(){return this.originalEvent.shiftKey}};o(Fs,"DKeyboardEvent");let $t=Fs;const zs=class zs extends $t{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent};o(zs,"DKeyDownEvent");let vt=zs;const Hs=class Hs extends $t{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent};o(Hs,"DKeyUpEvent");let ce=Hs;const Gs=class Gs extends $t{constructor(t,e){super(t,e),this.orignalEvent=e}orignalEvent};o(Gs,"DKeyPressEvent");let He=Gs;const Rs=class Rs extends bt{};o(Rs,"DCanvasEvent");let Bt=Rs;const Ys=class Ys extends Bt{constructor(t,e,s,n){super(t),this.displacement=e,this.newScale=s,this.previousScale=n}displacement;newScale;previousScale};o(Ys,"DScaleEvent");let Nt=Ys;const Ws=class Ws extends Bt{constructor(t,e,s){super(t),this.previousDisplacement=e,this.displacement=s}previousDisplacement;displacement};o(Ws,"DDisplaceEvent");let Ge=Ws;const Xs=class Xs extends re{};o(Xs,"DChangeEvent");let Y=Xs;const Vs=class Vs extends Y{constructor(t,e){super(t),e(this.resolve.bind(this))}callbacks=[];defer(t){this.callbacks.push(t)}async resolve(){return(await Promise.all(this.callbacks.map(t=>t()))).every(t=>t)}};o(Vs,"DResetGraphEvent");let Re=Vs;const Us=class Us extends Y{};o(Us,"DNodesConnectionEvent");let Lt=Us;const qs=class qs extends Lt{constructor(t,e){super(t),this.origin=e}origin};o(qs,"DNodeConnectionIntentEvent");let Ye=qs;const Ks=class Ks extends Lt{constructor(t,e,s){super(t),this.origin=e,this.target=s}origin;target};o(Ks,"DNodesConnectActionEvent");let We=Ks;const Zs=class Zs extends Y{};o(Zs,"DNodeChangeTypeEvent");let de=Zs;const Js=class Js extends Y{constructor(t,e){super(t),this.src=t,this.node=e}src;node};o(Js,"DDeleteNodeEvent");let Dt=Js;const Qs=class Qs extends Y{constructor(t,e){super(t),this.src=t,this.edge=e}src;edge};o(Qs,"DDeleteEdgeEvent");let he=Qs;const ti=class ti extends bt{constructor(t,e){super(t),this.src=t,this.selected=e}src;selected};o(ti,"DSelectionEvent");let Ot=ti;const ei=class ei extends Ot{constructor(t,e){super(t,e),this.src=t}src};o(ei,"DNodeSelectionEvent");let Tt=ei;const si=class si extends Ot{constructor(t,e){super(t,e),this.src=t}src};o(si,"DEdgeSelectionEvent");let ue=si;const ii=class ii extends Y{constructor(t,e){super(t),this.src=t,this.originalEvent=e}src;originalEvent};o(ii,"DDragEvent");let st=ii;const ni=class ni extends st{constructor(t,e,s){super(t,s),this.src=t,this.midPoint=e,this.originalEvent=s}src;midPoint;originalEvent};o(ni,"DEdgeDragStartEvent");let ge=ni;const ai=class ai extends st{constructor(t,e,s){super(t,s),this.src=t,this.endpoint=e,this.originalEvent=s}src;endpoint;originalEvent};o(ai,"DEdgeEndpointDragStartEvent");let pe=ai;const ri=class ri{constructor(t,e){this.node=t,this.newBox=e,this._updated=e.copy()}node;newBox;_cancelled=!1;_updated;_lockX=null;_lockY=null;cancel(){this._cancelled=!0}get current(){return this._updated.copy()}get cancelled(){return this._cancelled}get(){return this._updated}lockX(){this._lockX=this._updated.x}lockY(){this._lockY=this._updated.y}update(t){this._updated=t,this._lockX!==null&&(this._updated.x=this._lockX),this._lockY!==null&&(this._updated.y=this._lockY)}updateX(t){this._lockX===null&&(this._updated.x=t)}updateY(t){this._lockY===null&&(this._updated.y=t)}};o(ri,"NodePositionProposal");let fe=ri;const oi=class oi extends st{constructor(t,e,s){super(t,s),this.src=t,this.proposals=e}src;proposals};o(oi,"DDragNodeEvent");let ut=oi;const li=class li{constructor(t,e){this.point=t,this.movedAxis=e,this._updated=t.copy()}point;movedAxis;_updated;_lockX=null;_lockY=null;get current(){return this._updated.copy()}get(){return this._updated}lockX(){this._lockX=this._updated.x}lockY(){this._lockY=this._updated.y}update(t){this._updated=t.copy(),this._lockX!==null&&(this._updated.x=this._lockX),this._lockY!==null&&(this._updated.y=this._lockY)}updateX(t){this._lockX===null&&(this._updated.x=t)}updateY(t){this._lockY===null&&(this._updated.y=t)}};o(li,"EdgePointPositionProposal");let me=li;const ci=class ci extends st{constructor(t,e,s,n){super(t,n),this.src=t,this.proposals=e,this.movedAxis=s}src;proposals;movedAxis};o(ci,"DDragEdgeSegmentEvent");let xe=ci;async function Hn(){return(await Promise.resolve().then(()=>xr)).DirectedPoint}o(Hn,"getDirectedClass");let Xe=null;const L=class L{_data=[];constructor(t,e=!0){if(t||(t=[0,0]),Array.isArray(t)){if(t.length!==2)throw new Error("Invalid coordinates length");this._data=[...t]}else t instanceof L?this._data=[...t._data]:t instanceof K||t instanceof st?this._data=[t.originalEvent.clientX,t.originalEvent.clientY]:t.clientX!==void 0?this._data=[t.clientX,t.clientY]:this._data=[0,0];e&&u.makeObservable(this,{_data:u.observable,set:u.action})}bound(t){return this.x=Math.min(t.get(2),Math.max(t.get(0),this.x)),this.y=Math.min(t.get(3),Math.max(t.get(1),this.y)),this}get abs(){return new L([Math.abs(this.x),Math.abs(this.y)])}assign(t){if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof L?t:new L(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this}copy(t=!0){return new L(this,t)}distance(t){return this.copy().substract(t).norm}distanceManhattan(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}divide(t){const e=t instanceof L?t.x:t,s=t instanceof L?t.y:t;return this.set(0,this.get(0)/e),this.set(1,this.get(1)/s),this}equals(t){return this.copy().substract(t).norm===0}get(t){return this._data[t]}get length(){return this._data.length}max(t){return new L([Math.max(t,this.x),Math.max(t,this.y)])}get nonObserved(){return new L(this,!1)}get raw(){return u.toJS([...this._data])}get round(){return new L([Math.round(this.x),Math.round(this.y)])}get half(){return this.copy().multiply(.5)}get norm(){return Math.sqrt(this.x**2+this.y**2)}get style(){return{left:this.x,top:this.y}}multiply(t){return typeof t=="number"?(this.set(0,this.get(0)*t),this.set(1,this.get(1)*t)):t instanceof L&&(this.set(0,this.get(0)*t.get(0)),this.set(1,this.get(1)*t.get(1))),this}set(t,e){return this._data[t]=e,this}snapToGrid(t,e="both"){return e!=="y"&&(this.x=Math.round(this.x/t)*t),e!=="x"&&(this.y=Math.round(this.y/t)*t),this}substract(t){if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof L?t:new L(t);return this.set(0,this.get(0)-e.get(0)),this.set(1,this.get(1)-e.get(1)),this}sum(t){if(typeof t=="number")this.set(0,this.get(0)+t),this.set(1,this.get(1)+t);else{if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof L?t:new L(t);this.set(0,this.get(0)+e.get(0)),this.set(1,this.get(1)+e.get(1))}return this}toDirectedPoint(t){if(Xe===null){Hn().then(n=>{Xe=n});const s=this.copy(!1);return s.direction=t,s}const e=new Xe(this);return e.direction=t,e}toDimensions(t){return new w([...this.raw,...t.raw])}get x(){return this.get(0)}get y(){return this.get(1)}set x(t){this.set(0,t)}set y(t){this.set(1,t)}toString(){return`(${this.x}, ${this.y})`}};o(L,"Coordinates");let p=L;function Gn(i){const t=[];let e=i;for(;e&&e!==Object;)t.push(e),e=Object.getPrototypeOf(e);return t}o(Gn,"getClassHierarchy");let Et=(St=class{constructor(t){this.parent=t,u.makeObservable(this,{parent:u.observable,diagram:u.computed})}parent;callbacks=new Map;emit(t){const e=[];for(const s of Gn(t.constructor)){const n=this.callbacks.get(s);n&&e.push(...n)}e.sort((s,n)=>n.priority-s.priority);for(const{cb:s}of e)if(s(t),!t.spreads)return t;return t.bubbles&&this.parent?.emit(t),t}get diagram(){let t=this.parent;for(;t!==null&&!(t instanceof T);)t=t.parent;return t}onEvent(t,e,s=0){let n=this.callbacks.get(t);return n||(n=[],this.callbacks.set(t,n)),n.push({cb:e,priority:s}),()=>this.offEvent(t,e)}offEvent(t,e){const s=this.callbacks.get(t);s&&this.callbacks.set(t,s.filter(n=>n.cb!==e))}},o(St,"Element"),St);const di=class di extends Et{constructor(t){super(t),u.makeObservable(this,{_enable:u.observable,toggle:u.action}),this._enable=localStorage.getItem(`enable_${this.constructor.name}`)!=="false"}get diagram(){return this.parent}_enable=!0;get enabled(){return this._enable}disable(){this._enable=!1}enable(){this._enable=!0}toggle(t=!this._enable){this._enable=t,localStorage.setItem(`enable_${this.constructor.name}`,String(this._enable))}};o(di,"DiagramExtension");let O=di;const hi=class hi extends O{init(){u.makeObservable(this,{_enabled:u.observable,endPoint:u.observable,startPoint:u.observable}),this.diagram.canvas.onEvent(dt,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Measurer)}_enabled=!1;toggle(){this._enabled=!this._enabled}get enabled(){return this._enabled}endPoint=null;startPoint=null;get(){return this.startPoint?[this.startPoint,this.endPoint]:[]}getMeassurement(){return this.endPoint?.copy().substract(this.startPoint).norm}u=o(()=>{},"u");handleMouseDown(t){this._enabled&&(t.cancel(),t.stopImmediatePropagation(),this.u(),this.u=at(N(this,"mousemove",this.handleMouseMove),N(this,"mouseup",this.handleMouseUp)),this.startPoint=this.diagram.canvas.inverseFit(new p(t)),this.endPoint=this.diagram.canvas.inverseFit(new p(t)))}handleMouseMove(t){this.startPoint&&this._enabled&&(this.endPoint=this.diagram.canvas.inverseFit(new p(t)))}handleMouseUp(){this.endPoint=null,this.startPoint=null}};o(hi,"Measurer");let Ft=hi;const ee=class ee extends p{constructor(t,e){super(Array.isArray(e)?e.slice(0,2):e),this.parent=t,u.makeObservable(this,{manualAxes:u.observable,mode:u.observable}),e instanceof ee?(this.mode=e.mode,this.manualAxes=e.manualAxes):Array.isArray(e)&&e.length===3?(this.mode=e[2],this.manualAxes=this.mode==="manual"||this.mode==="static"?"both":"none"):Array.isArray(e)&&e.length>=4&&(this.mode=e[2],this.manualAxes=e[3])}parent;mode="auto";manualAxes="none";get manualX(){return this.mode==="manual"&&["x","both"].includes(this.manualAxes)}get manualY(){return this.mode==="manual"&&["y","both"].includes(this.manualAxes)}addManualAxis(t){return this.mode==="static"?this:(this.mode="manual",t==="both"||this.manualAxes==="both"?this.manualAxes="both":this.manualAxes==="none"?this.manualAxes=t:this.manualAxes!==t&&(this.manualAxes="both"),this)}hasManualAxis(t){return t==="x"?this.manualX:this.manualY}markStatic(){return this.mode="static",this.manualAxes="both",this}copy(){return new ee(this.parent,[this.x,this.y,this.mode,this.manualAxes])}toString(t=!1){return t?`(${this.x}, ${this.y}): ${this.mode}/${this.manualAxes}`:super.toString()}};o(ee,"EdgePoint");let S=ee;const ui=class ui extends O{gridSize=50;init(){u.makeObservable(this,{gridSize:u.observable}),this.diagram.onEvent(ut,t=>{if(this._enable)for(const e of t.proposals){const s=new p([Math.round(e.newBox.coordinates.x/this.gridSize)*this.gridSize,Math.round(e.newBox.coordinates.y/this.gridSize)*this.gridSize]);e.update(new w([...s.raw,...e.newBox.size.raw])),e.lockX(),e.lockY()}},this.diagram.priorities.Drag_Node_Snap_To_Grid),this.diagram.onEvent(xe,t=>{if(this._enable)for(const e of t.proposals){const s=e.get().copy();s.snapToGrid(this.gridSize,t.movedAxis),e.update(s),t.movedAxis==="x"?e.lockY():e.lockX()}},this.diagram.priorities.Drag_Edge_Snap_To_Grid)}};o(ui,"GridSnap");let it=ui;const _=.001,Rn=3,Yn=1e6,Wn=5e5;function j(i,t,e=Rn){return Math.abs(i-t)<=e}o(j,"almostEqual");function ye(i,t){return Math.abs(i-t)<=_}o(ye,"strictlyEqual");function gt(i,t){return j(i.x,t.x)&&j(i.y,t.y)}o(gt,"samePoint");function R(i,t){return j(i.x,t.x)||j(i.y,t.y)}o(R,"axisAligned");function Xn(i,t){return ye(i.x,t.x)&&ye(i.y,t.y)}o(Xn,"strictlySamePoint");function Ve(i,t){return ye(i.x,t.x)||ye(i.y,t.y)}o(Ve,"strictlyAxisAligned");function nt(i,t){return gt(i,t)||!R(i,t)?null:j(i.y,t.y)?"horizontal":"vertical"}o(nt,"segmentDirection");function Ue(i,t,e){if(j(i.x,t.x)&&j(t.x,e.x)||j(i.y,t.y)&&j(t.y,e.y))return!0;const s=(t.x-i.x)*(e.y-t.y)-(t.y-i.y)*(e.x-t.x);return Math.abs(s)<_}o(Ue,"collinear");function Vn(i){return i instanceof S?i.mode:"auto"}o(Vn,"pointMode");function z(i,t){return new p([i,t],!1)}o(z,"rawPoint");function rn(i){switch(i){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"up":return{x:0,y:-1};case"down":return{x:0,y:1}}}o(rn,"vectorFor");function Mt(i,t){const e=rn(t);return i.x*e.x+i.y*e.y}o(Mt,"dot");function Un(i,t,e=Vn(t)){return t instanceof S?(t.mode=e,t):new S(i,[t.x,t.y,e])}o(Un,"asEdgePoint");function pt(i,t,e,s="auto"){return new S(i,[t,e,s])}o(pt,"makePoint");function on(i){return i.getExtension(it)?.gridSize??50}o(on,"getGridSize");function zt(i,t){const e=i.parent.state.box,s=i.state.position;return z(e.x+s.x*e.width+(t?.x??0),e.y+s.y*e.height+(t?.y??0))}o(zt,"endpointPoint");function W(i,t){const e=i.parent.state.box;return new w([e.x-t,e.y-t,e.width+t*2,e.height+t*2],!1)}o(W,"routingBox");function ln(i,t,e){return i>=t-_&&i<=e+_}o(ln,"coordinateWithinSpan");function qn(i,t,e,s){let n=Number.POSITIVE_INFINITY;for(const a of e){if(t==="right"||t==="left"){if(!ln(i.y,a.y-s,a.y+a.height+s))continue;const l=t==="right"?a.x-i.x:i.x-(a.x+a.width);l>_&&l<n&&(n=l);continue}if(!ln(i.x,a.x-s,a.x+a.width+s))continue;const r=t==="down"?a.y-i.y:i.y-(a.y+a.height);r>_&&r<n&&(n=r)}return Number.isFinite(n)?n:null}o(qn,"blockingDistance");function we(i,t,e,s,n){const a=qn(t,e,n,s),r=a!==null&&a<s*2?a/2:s,l=rn(e);return pt(i,t.x+l.x*r,t.y+l.y*r)}o(we,"adaptiveLeadPoint");function Kn(i,t,e,s){if(!Ve(i,t)||Xn(i,t))return!1;const n={x:t.x-i.x,y:t.y-i.y};return Mt(n,e)>_&&Mt(n,s)<-_}o(Kn,"directRouteIsValid");function cn(i){const t=[],e=new Set;for(const s of i){const n=s.toFixed(3);e.has(n)||(e.add(n),t.push(s))}return t}o(cn,"uniqueNumbers");function Zn(i){const t=[];for(const e of i){const s=t.at(-1);s&&gt(s,e)||t.push(e)}return t}o(Zn,"compactRawPoints");function dn(i,t,e){if(!R(i,t))return 1;if(j(i.x,t.x)){const c=i.x,d=Math.min(i.y,t.y),g=Math.max(i.y,t.y),x=c>e.x+_&&c<e.x+e.width-_,m=g>e.y+_&&d<e.y+e.height-_;return x&&m?1:0}const s=i.y,n=Math.min(i.x,t.x),a=Math.max(i.x,t.x),r=s>e.y+_&&s<e.y+e.height-_,l=a>e.x+_&&n<e.x+e.width-_;return r&&l?1:0}o(dn,"segmentCollisionPenalty");function Jn(i,t,e){if(!R(i,t))return 1;if(j(i.x,t.x)){const c=i.x,d=Math.min(i.y,t.y),g=Math.max(i.y,t.y),x=j(c,e.x)||j(c,e.x+e.width),m=Math.min(g,e.y+e.height)-Math.max(d,e.y);return x&&m>_?1:0}const s=i.y,n=Math.min(i.x,t.x),a=Math.max(i.x,t.x),r=j(s,e.y)||j(s,e.y+e.height),l=Math.min(a,e.x+e.width)-Math.max(n,e.x);return r&&l>_?1:0}o(Jn,"segmentBorderOverlapPenalty");function Qn(i,t,e={}){let s=i.length,n=null;for(let a=0;a<i.length-1;a++){const r=i[a],l=i[a+1];if(!R(r,l))return Number.POSITIVE_INFINITY;const c=nt(r,l);if(a===0&&e.avoidFirstDirection&&c===e.avoidFirstDirection&&(s+=t.gridSize*10),a===0&&e.avoidFirstBacktrack){const g={x:l.x-r.x,y:l.y-r.y};if(Mt(g,e.avoidFirstBacktrack)<-_)return Number.POSITIVE_INFINITY}if(a===i.length-2&&e.avoidLastDirection&&c===e.avoidLastDirection&&(s+=t.gridSize*10),a===i.length-2&&e.avoidLastBacktrack){const g={x:r.x-l.x,y:r.y-l.y};if(Mt(g,e.avoidLastBacktrack)<-_)return Number.POSITIVE_INFINITY}s+=Math.abs(r.x-l.x)+Math.abs(r.y-l.y);const d=j(r.x,l.x)?"x":"y";n&&n!==d&&(s+=t.gridSize/4),n=d;for(const g of t.obstacleBoxes)s+=dn(r,l,g)*Yn,s+=Jn(r,l,g)*Wn}return s}o(Qn,"routeScore");function be(i,t,e){return e.obstacleBoxes.some(s=>dn(i,t,s)>0)}o(be,"segmentHitsAnyBox");function hn(i,t,e){return Ve(i,t)&&!be(i,t,e)}o(hn,"canCollapseToSegment");function ve(i,t,e,s={}){if(gt(i,t))return[i];let n=null,a=Number.POSITIVE_INFINITY;const r=o(d=>{const g=Zn(d),x=Qn(g,e,s);x<a&&(n=g,a=x)},"push");R(i,t)&&r([i,t]),r([i,z(t.x,i.y),t]),r([i,z(i.x,t.y),t]);const l=cn([i.x,t.x,(i.x+t.x)/2,...e.laneBoxes.flatMap(d=>[d.x,d.x-e.gridSize,d.x+d.width,d.x+d.width+e.gridSize])]),c=cn([i.y,t.y,(i.y+t.y)/2,...e.laneBoxes.flatMap(d=>[d.y,d.y-e.gridSize,d.y+d.height,d.y+d.height+e.gridSize])]);for(const d of l)r([i,z(d,i.y),z(d,t.y),t]);for(const d of c)r([i,z(i.x,d),z(t.x,d),t]);for(const d of l)for(const g of c)r([i,z(d,i.y),z(d,g),z(t.x,g),t]),r([i,z(i.x,g),z(d,g),z(d,t.y),t]);return n??[i,t]}o(ve,"routeBridge");function ta(i){const t=[];for(let e=0;e<i.length;e++){const s=i[e],n=i[e+1];if(s.manualAxes==="x"){const a=n?.manualAxes==="x"&&j(s.x,n.x)?[s,n]:[s];t.push({type:"line",direction:"vertical",coordinate:s.x,points:a}),e+=a.length-1;continue}if(s.manualAxes==="y"){const a=n?.manualAxes==="y"&&j(s.y,n.y)?[s,n]:[s];t.push({type:"line",direction:"horizontal",coordinate:s.y,points:a}),e+=a.length-1;continue}t.push({type:"point",point:s})}return t}o(ta,"manualRouteConstraints");function ea(i,t){return i?i.type==="point"?i.point:i.direction==="vertical"?z(i.coordinate,t.y):z(t.x,i.coordinate):t}o(ea,"constraintReferencePoint");function un(i,t,e){return i>t+_&&i<e-_}o(un,"valueInside");function Ee(i,t,e,s,n,a){let r=e;const l=i==="x"?"y":"x",c=a.gridSize/2;for(const d of a.obstacleBoxes){const g=l==="x"?d.x:d.y,x=l==="x"?d.x+d.width:d.y+d.height,m=i==="x"?d.x:d.y,f=i==="x"?d.x+d.width:d.y+d.height;if(!un(t,g,x)||!un(r,m,f))continue;const v=n!==void 0?n-r:0,k=s-r,A=(m+f)/2;r=(Math.abs(v)>_?Math.sign(v):Math.abs(k)>_?Math.sign(k):r<A?-1:1)<0?m-c:f+c}return r}o(Ee,"safeLineEndpointCoordinate");function sa(i,t,e,s,n){const a=i.points[0],r=i.points.at(-1),l=a?.copy()??pt(s,0,0),c=r?.copy()??pt(s,0,0);return l.parent=s,c.parent=s,i.direction==="vertical"?(l.addManualAxis("x"),c.addManualAxis("x"),l.x=i.coordinate,l.y=t.y,c.x=i.coordinate,c.y=e.y,n&&(l.y=Ee("y",i.coordinate,l.y,e.y,a?.y,n),c.y=Ee("y",i.coordinate,c.y,t.y,r?.y,n))):(l.addManualAxis("y"),c.addManualAxis("y"),l.x=t.x,l.y=i.coordinate,c.x=e.x,c.y=i.coordinate,n&&(l.x=Ee("x",i.coordinate,l.x,e.x,a?.x,n),c.x=Ee("x",i.coordinate,c.x,t.x,r?.x,n))),[l,c]}o(sa,"lineConstraintEndpoints");function ia(i,t){const e=new Map;return{copies:i.map(n=>{const a=n.copy();return a.parent=t,e.set(n,a),a}),copiesByOriginal:e}}o(ia,"copyRouteManualPoints");function na(i,t,e){const s=t.get(i);if(s)return s;const n=i.copy();return n.parent=e,n}o(na,"routePointCopy");function aa(i,t){return i.find(e=>e.mode==="static")??i.find(e=>t.has(e)&&e.mode==="manual")??i.find(e=>t.has(e))??i.find(e=>e.mode==="manual")??i[0]}o(aa,"pickPointFromDuplicateRun");function qe(i,t){const e=[];for(let s=0;s<i.length;){let n=s+1;for(;n<i.length&&gt(i[s],i[n]);)n+=1;e.push(aa(i.slice(s,n),t)),s=n}return e}o(qe,"removeAdjacentDuplicates");function gn(i,t,e,s){return i.mode==="static"?i[e]:t.mode==="static"?t[e]:s.has(i)?i[e]:s.has(t)?t[e]:i[e]}o(gn,"coordinateAnchor");function Ht(i,t){for(let e=0;e<i.length-1;e++){const s=i[e],n=i[e+1];if(j(s.x,n.x)){const a=gn(s,n,"x",t);s.x=a,n.x=a}if(j(s.y,n.y)){const a=gn(s,n,"y",t);s.y=a,n.y=a}}return i}o(Ht,"snapNearlyAlignedPairs");function pn(i,t,e){const s=[...i];let n=s.filter(a=>a.mode==="manual").length;for(let a=1;a<s.length-1;){const r=s[a],l=Ue(s[a-1],r,s[a+1]),c=r.mode==="manual"&&t.has(r)&&n>e;if(r.mode==="manual"&&l&&n<=e){const d=s[a+1];if(a+2<s.length&&d.mode==="auto"&&!t.has(d)){s.splice(a+1,1);continue}const g=s[a-1];if(a-2>=0&&g.mode==="auto"&&!t.has(g)){s.splice(a-1,1),a=Math.max(1,a-1);continue}}if(r.mode==="static"||t.has(r)&&!c||!l){a+=1;continue}if(r.mode==="manual"&&n<=e){a+=1;continue}r.mode==="manual"&&(n-=1),s.splice(a,1)}return s}o(pn,"removeRedundantCollinearPoints");function Ke(i,t,e){const s=[...i];for(let n=0;n<s.length-3;){const a=s[n],r=s[n+1],l=s[n+2],c=s[n+3];if(!(R(a,r)&&R(r,l)&&R(l,c))||!hn(a,c,t)){n+=1;continue}if(r.mode!=="auto"||l.mode!=="auto"||e.has(r)||e.has(l)){n+=1;continue}s.splice(n+1,2)}return s}o(Ke,"collapseAutoDetours");function fn(i,t,e){const s=[...i];for(let n=!0;n;){n=!1;for(let a=0;a<s.length-3;a++){const r=s[a],l=s[a+1],c=s[a+2],d=s[a+3];if(l.mode==="auto"&&c.mode==="auto"&&!e.has(l)&&!e.has(c)&&R(r,l)&&R(l,c)&&R(c,d)&&hn(r,d,t)){s.splice(a+1,2),n=!0;break}}}return s}o(fn,"collapseAnyAutoRectangles");function ra(i,t,e,s){const n=new S(null,[t.x,i.y,"auto"]),a=new S(null,[i.x,t.y,"auto"]),r=o(l=>{let c=0;return e&&R(e,l)&&(c+=1),s&&R(l,s)&&(c+=1),i.mode==="manual"&&e&&nt(e,i)===nt(i,l)&&(c-=2),t.mode==="manual"&&s&&nt(l,t)===nt(t,s)&&(c-=2),c},"score");return r(n)>=r(a)?n:a}o(ra,"chooseCorner");function Ze(i,t){if(i.length<2)return i;const e=[i[0]];for(let s=1;s<i.length;s++){const n=e.at(-1),a=i[s];if(!Ve(n,a)){const r=e.length>=2?e[e.length-2]:void 0,l=s+1<i.length?i[s+1]:void 0,c=ra(n,a,r,l);c.parent=t,e.push(c)}e.push(a)}return e}o(Ze,"ensureOrthogonalAdjacency");function mn(i,t,e=new Set){let s=i.map(a=>Un(t.parent,a));const n=s.some(a=>a.mode==="manual"&&a.manualAxes==="both")?1:0;for(let a=0;a<4;a++){const r=s.length;if(s=Ht(s,e),s=Ze(s,t.parent),s=Ht(s,e),s=qe(s,e),s=pn(s,e,n),s=Ke(s,t,e),s.length===r)break}return s=Ht(s,e),s=Ze(s,t.parent),s=qe(s,e),s=Ke(s,t,e),s=fn(s,t,e),s=pn(s,e,n),s.length>0&&(s[0].markStatic(),s.at(-1).markStatic()),s}o(mn,"normalizeEdgePoints");function xn(i,t){const e=i.findIndex((s,n)=>n>0&&n<i.length-1&&gt(s,t));e>=0&&i.splice(e,1)}o(xn,"removeSameCoordinateInteriorPoint");function yn(i,t,e,s){let n=[...i];if(n.length<2)return n;gt(n[1],e)?n[1]=e:(xn(n,e),n.splice(1,0,e));const a=n.length-2;if(a<1)return n;gt(n[a],s)?n[a]=s:(xn(n,s),n.splice(n.length-1,0,s));const r=new Set([e,s]);return n=Ht(n,r),n=Ze(n,t.parent),n=Ht(n,r),n=qe(n,r),n=Ke(n,t,r),n=fn(n,t,r),n.length>0&&(n[0].markStatic(),n.at(-1).markStatic()),n}o(yn,"ensureEndpointLeadPresence");function oa(i,t,e,s,n){if(!e||!Ue(i,t,e))return!1;const a={x:e.x-i.x,y:e.y-i.y};return Mt(a,s)>_&&!be(i,e,n)}o(oa,"canRemoveSourceLead");function la(i,t,e,s,n){if(!i||!Ue(i,t,e))return!1;const a={x:e.x-i.x,y:e.y-i.y};return Mt(a,s)<-_&&!be(i,e,n)}o(la,"canRemoveTargetLead");function wn(i,t,e,s){const n=[...i];return n.length>2&&oa(n[0],n[1],n[2],t,s)&&n.splice(1,1),n.length>2&&la(n.at(-3),n.at(-2),n.at(-1),e,s)&&n.splice(n.length-2,1),n.length>0&&(n[0].markStatic(),n.at(-1).markStatic()),n}o(wn,"compactRedundantEndpointLeads");function Je(i,t,e,s,n){const a=pt(n.parent,zt(i,e).x,zt(i,e).y,"static"),r=zt(t,s),l=pt(n.parent,r.x,r.y,"static");if(Kn(a,l,i.orientation,t.orientation))return[a,l];const c=we(n.parent,a,i.orientation,n.gridSize,[W(t,0)]),d=we(n.parent,l,t.orientation,n.gridSize,[W(i,0)]),g=new Set([c,d]),x=ve(c,d,n,{avoidFirstBacktrack:i.orientation,avoidLastBacktrack:t.orientation}),m=mn([a,...x,l],n,g);return wn(yn(m,n,c,d),i.orientation,t.orientation,n)}o(Je,"routeAuto");function ca(i,t,e,s,n,a=null){const r=on(i),l={gridSize:r,obstacleBoxes:[W(t,0),W(e,0)],laneBoxes:[W(t,r/2),W(e,r/2)],parent:a};return Je(t,e,s,n,l)}o(ca,"routeOrthogonalBetweenGateways");function bn(i,t,e=[],s){const n=on(i),a={gridSize:n,obstacleBoxes:[W(t.from,0),W(t.to,0)],laneBoxes:[W(t.from,n/2),W(t.to,n/2)],parent:t},r=t.steps.filter((G,et)=>et>0&&et<t.steps.length-1&&G.mode==="manual");if(r.length===0)return Je(t.from,t.to,t.state.displacementStart,t.state.displacementEnd,a);const l=zt(t.from,t.state.displacementStart),c=zt(t.to,t.state.displacementEnd),d=pt(a.parent,l.x,l.y,"static"),g=pt(a.parent,c.x,c.y,"static"),x=we(a.parent,d,t.from.orientation,n,[W(t.to,0)]),m=we(a.parent,g,t.to.orientation,n,[W(t.from,0)]),{copies:f,copiesByOriginal:v}=ia(r,a.parent),k=e.map(G=>na(G,v,a.parent)),A=new Set([x,m,...k]),B=ta(f),E=[d,x];let M=x;for(let G=0;G<B.length;G++){const et=B[G],ne=M instanceof S&&M.mode==="manual"?nt(E.at(-2),M)??void 0:void 0;if(et.type==="point"){const sn=ve(M,et.point,a,{avoidFirstDirection:ne,avoidFirstBacktrack:G===0?t.from.orientation:void 0});E.push(...sn.slice(1)),M=et.point;continue}const ot=ea(B[G+1],m);let[lt,ae]=sa(et,M,ot,a.parent,a);if(be(lt,ae,a))continue;const Oe=ve(M,lt,a,{avoidFirstDirection:ne,avoidFirstBacktrack:G===0?t.from.orientation:void 0});E.push(...Oe.slice(1),ae),M=ae}const H=M instanceof S&&M.mode==="manual"?nt(E.at(-2),M)??void 0:void 0,P=ve(M,m,a,{avoidFirstDirection:H,avoidLastDirection:nt(m,g)??void 0,avoidLastBacktrack:t.to.orientation});E.push(...P.slice(1),g);const D=mn(E,a,A),$=wn(yn(D,a,x,m),t.from.orientation,t.to.orientation,a);return $.some(G=>G.mode==="manual")?$:Je(t.from,t.to,t.state.displacementStart,t.state.displacementEnd,a)}o(bn,"routeOrthogonalEdge");const gi=class gi extends Et{state;constructor(t,e){super(t),this.state={allowDisplace:!0,stroke:"transparent",strokeWidth:10,radius:5,incomingEdges:[],outgoingEdges:[],position:new p,...e},u.makeObservable(this,{addIncomingEdge:u.action,addOutgoingEdge:u.action,state:u.observable,removeIncomingEdge:u.action,removeOutgoingEdge:u.action})}addIncomingEdge(t){this.state.incomingEdges.find(e=>e.id===t.id)||this.state.incomingEdges.push(t)}addOutgoingEdge(t){this.state.outgoingEdges.find(e=>e.id===t.id)||(this.state.outgoingEdges.push(t),t.steps.length===0&&this.updateEdges())}canConnect(t){return(this.state.maxIncomingConnections===void 0||this.state.maxIncomingConnections>this.state.incomingEdges.length)&&!this.state.incomingEdges.find(e=>e.from===t)}connectionDisplacement(t){return this.direction==="horizontal"&&Math.abs(t.y-this.coordinates.y)>10?new p([0,t.y-this.coordinates.y]):this.direction==="vertical"&&Math.abs(t.x-this.coordinates.x)>10?new p([t.x-this.coordinates.x,0]):new p([0,0])}connectionDistance(t){if(this.direction==="vertical"){const s=Math.abs(this.coordinates.y-t.y);return s<20?Math.abs(this.coordinates.x-t.x)+s**5:1/0}const e=Math.abs(this.coordinates.x-t.x);return e<20?Math.abs(this.coordinates.y-t.y)+e**5:1/0}removeIncomingEdge(t){for(let e=this.state.incomingEdges.length-1;e>=0;e--)this.state.incomingEdges[e].id===t.id&&this.state.incomingEdges.splice(e,1)}removeOutgoingEdge(t){for(let e=this.state.outgoingEdges.length-1;e>=0;e--)this.state.outgoingEdges[e].id===t.id&&this.state.outgoingEdges.splice(e,1)}get coordinates(){return this.state.position.copy().multiply(this.parent.box.size).sum(this.parent.coordinates)}get fill(){return this.state.fill}get diagram(){return this.parent.diagram}get incomingEdges(){return[...this.state.incomingEdges]}get outgoingEdges(){return[...this.state.outgoingEdges]}get radius(){return this.state.radius}get relativePosition(){return this.state.position.copy()}get stroke(){return this.state.stroke}get strokeWidth(){return this.state.strokeWidth}get id(){return this.state.id}get direction(){return["down","up"].includes(this.state.orientation)?"vertical":"horizontal"}get orientation(){return this.state.orientation}recomputeConnectedEdge(t,e){t.setSteps(bn(this.diagram,t))}updateEdges(){for(const t of this.state.incomingEdges)this.recomputeConnectedEdge(t,"to");for(const t of this.state.outgoingEdges)this.recomputeConnectedEdge(t,"from")}get remainingSlots(){return this.state.maxOutgoingConnections-this.state.outgoingEdges.length}deserialize(t){this.state.fill=t.fill,this.state.id=t.id,this.state.orientation=t.orientation,this.state.radius=t.radius,this.state.stroke=t.stroke,this.state.strokeWidth=t.strokeWidth,this.state.position.assign(t.coordinates),t.outEdges.forEach(e=>{const s=this.diagram.getClass(e.class);if(!s)throw new Error(`Unknown edge class '${e.class}' on gateway '${this.id}'.`);const n=new s(this,{from:this});this.diagram.getNodeById(e.toParentId)&&n.deserialize(e)})}serialize(){const{fill:t,id:e,orientation:s,radius:n,stroke:a,strokeWidth:r,state:{position:{raw:l}}}=this,c=this.outgoingEdges.map(d=>d.serialize());return{coordinates:l,fill:t,id:e,orientation:s,radius:n,stroke:a,strokeWidth:r,outEdges:c,class:this.constructor.name}}};o(gi,"Gateway");let ft=gi;const pi=class pi{_data=new Set;constructor(){u.makeAutoObservable(this)}add(...t){for(const e of t)this._data.add(e)}delete(t){this._data.delete(t)}toggle(t){this._data.has(t)?this.delete(t):this.add(t)}get string(){return[...this._data].join(" ")}};o(pi,"ClassList");let Qe=pi,Me=(It=class extends Et{_gateways=new Map;state;classList=new Qe;get selected(){return this.state.selected}constructor(t,e){super(t),this.state={...e,box:e.box??new w([0,0,100,80]),zIndex:e.zIndex??100},this.classList.add("diagram__node"),u.makeObservable(this,{state:u.observable,selected:u.computed,_gateways:u.observable,setState:u.action}),this.initializeGateways()}canSelect(){return!this.state.selected&&this.state.selectable!==!1}canUnselect(){return!!this.state.selected}setDiagram(t){this.parent=t}setState(t,e){this.state[t]=e}initializeGateways(){this._gateways.set("left",new ft(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"left",orientation:"left",position:new p([0,.5])})),this._gateways.set("right",new ft(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"right",orientation:"right",position:new p([1,.5])})),this._gateways.set("up",new ft(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"up",orientation:"up",position:new p([.5,0])})),this._gateways.set("down",new ft(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"down",orientation:"down",position:new p([.5,1])}))}get box(){return this.state.box.copy()}get coordinates(){return this.box.coordinates}displace(t){this.state.box.sum([...t.raw,0,0])}get id(){return this.state.id}get gateways(){return[...this._gateways.values()]}dragEventMouseStartPosition=null;dragEventStartPosition=null;getGateway(t){return this._gateways.get(t)}setDimentions(t){this.state.box.assignDimensions(t)}updateConnectedEdges(){const t=new Set;for(const e of this._gateways.values())e.incomingEdges.forEach(s=>t.add(s)),e.outgoingEdges.forEach(s=>t.add(s));t.forEach(e=>e.from.recomputeConnectedEdge(e,"from"))}setPosition(t,e){const s=new w(this.state.box.raw,!1);this.state.box.assignCoordinates(t).bound(new w([0,0,...this.diagram.canvas.size.raw],!1)),e?.updateConnectedEdges!==!1&&s.substract(this.state.box).norm&&this.updateConnectedEdges()}deserialize(t){this.state.box.assign(t.box),this.state.id=t.id,this.state.label=t.label,this.state.movable=t.movable,this.state.selectable=t.selectable,this.state.fill=t.fill,this.state.labelFontSize=t.labelFontSize,this.state.stroke=t.stroke,this.state.strokewWidth=t.strokewWidth,t.gateways.forEach(e=>{const s=this._gateways.get(e.id)?.incomingEdges||[],n=this.diagram?.getClass(e.class);if(!n)throw new Error(`Unknown gateway class '${e.class}' on node '${this.id}'.`);this._gateways.set(e.id,new n(this,{id:e.id}));for(const a of s)this._gateways.get(e.id)?.addIncomingEdge(a)}),t.gateways.forEach(e=>{this._gateways.get(e.id)?.deserialize(e)}),this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>{this.diagram?.connectWithEdge(s.from,s.to,s)}))}serialize(){const{box:{raw:t},id:e,label:s,movable:n,selectable:a,fill:r,labelFontSize:l,selected:c,stroke:d,strokewWidth:g}=this.state,x=this.gateways.map(m=>m.serialize());return{box:t,id:e,label:s,movable:n,selectable:a,selected:c,gateways:x,fill:r,labelFontSize:l,stroke:d,strokewWidth:g,class:this.constructor.name}}Renderer=null},o(It,"Node"),It);const se=class se{static getInstance(){return this.instance||(this.instance=new se),this.instance}x=0;y=0;get coordinates(){return new p([this.x,this.y])}constructor(){u.makeAutoObservable(this),document.addEventListener("mousemove",t=>{u.runInAction(()=>{this.x=t.clientX,this.y=t.clientY})})}};o(se,"Mouse"),ct(se,"instance",null);let mt=se,da=Number.MIN_SAFE_INTEGER;const fi=class fi extends Et{constructor(t,e){super(t),this.state=e,u.makeObservable(this,{state:u.observable,setSteps:u.action,arrowHeadEnd:u.computed,arrowHeadStart:u.computed,from:u.computed,hasManualSteps:u.computed,pathType:u.computed,steps:u.computed,stroke:u.computed,strokeWidth:u.computed,setState:u.action})}state;id=String(da++);get arrowHeadEnd(){return this.state.arrowHeadEnd}get arrowHeadStart(){return this.state.arrowHeadStart}get from(){return this.state.from}get hasManualSteps(){return this.state.steps.find(t=>t.mode==="manual")}get lineStyle(){return this.state.lineStyle}get pathType(){return this.state.pathType}get steps(){return this.state.steps}get stroke(){return this.state.stroke}get strokeWidth(){return this.state.strokeWidth}collides(t){for(let e=0;e<this.steps.length-1;e++){const s=this.steps[e],n=this.steps[e+1];if(new w([...s.raw,...n.copy().substract(s).raw]).collides(t))return!0}return!1}setState(t,e){this.state[t]=e}setSteps(t){this.state.steps=t.map(e=>e instanceof S?e:new S(this,e)),this.state.steps[0].markStatic(),this.state.steps.at(-1).markStatic()}get to(){return this.state.to}deserialize(t){this.state.arrowHeadEnd=t.arrowHeadEnd,this.state.arrowHeadStart=t.arrowHeadStart,this.state.lineStyle=t.lineStyle,this.state.pathType=t.pathType,this.state.stroke=t.stroke,this.state.strokeWidth=t.strokeWidth,this.state.displacementEnd=t.displacementEnd?new p(t.displacementEnd):void 0,this.state.displacementStart=t.displacementStart?new p(t.displacementStart):void 0,this.state.steps=t.steps.map(e=>new S(this,e)),this.state.to=this.state.from.diagram.getNodeById(t.toParentId).getGateway(t.to),this.state.from.diagram.addEdge(this)}serialize(){const{arrowHeadEnd:t,arrowHeadStart:e,lineStyle:s,pathType:n,steps:a,stroke:r,strokeWidth:l,to:{id:c,parent:{id:d}}}=this;return{arrowHeadEnd:t,arrowHeadStart:e,displacementEnd:this.state.displacementEnd?.raw,displacementStart:this.state.displacementStart?.raw,lineStyle:s,pathType:n,steps:a.map(g=>[...g.raw,g.mode,g.manualAxes]),stroke:r,strokeWidth:l,to:c,toParentId:d,class:this.constructor.name}}dragStart(t,e){e.nativeEvent.stopImmediatePropagation(),this.emit(new ge(this,t,e))}dragEndpoint(t,e){e.nativeEvent.stopImmediatePropagation(),this.emit(new pe(this,t,e))}};o(fi,"Edge");let kt=fi;const vn={};function ts(i,t,e=[]){let s=vn[t]||0;for(;e.includes(`${t}${s}`)||i.getNodeById(`${t}${s}`);)s++;return vn[t]=s+1,`${t}${s}`}o(ts,"getIdForNode");const mi=class mi extends O{selectionMode="element";_selection=new Set;_edgesSelection=new Set;endPoint=null;startPoint=null;copy(){const t=[],e=new Map,s=[];for(const n of this._selection){const a=ts(this.diagram,"node",s);e.set(n.id,a),s.push(a)}for(const n of this._selection){const a=n.serialize();a.id=e.get(a.id),a.gateways.forEach(r=>{r.outEdges.forEach(l=>{l.toParentId=e.get(l.toParentId)})}),t.push(a)}return JSON.stringify({nodes:t})}init(){u.makeObservable(this,{_selection:u.observable,box:u.computed,endPoint:u.observable,selectedNodes:u.computed,selectedEdges:u.computed,selectionMode:u.observable,selectNode:u.action,startPoint:u.observable,toggleSelectionMode:u.action,unselectNode:u.action,handleMouseUp:u.action}),this.diagram.onEvent(dt,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Selector),this.diagram.onEvent(Dt,t=>{this._selection.delete(t.node)}),this.diagram.onEvent(he,t=>{this._edgesSelection.delete(t.edge)});for(const t of this.diagram.nodes)t.selected&&this._selection.add(t)}toggleSelectionMode(t=this.selectionMode==="area"?"element":"area"){this.selectionMode=t}get selectedNodes(){return[...this._selection]}get selectedEdges(){return[...this._edgesSelection]}get box(){return!this.startPoint||!this.endPoint?new w:this.diagram.canvas.inverseFit(new w([...this.startPoint.raw,...this.endPoint.copy().substract(this.startPoint).raw]))}clearSelection(t=()=>!0){for(const e of this._selection)t(e)&&this.unselectNode(e);for(const e of this._edgesSelection)this.unselectEdge(e)}selectEdge(t){this.emit(new ue(t,!0)).cancelled||(t.setState("selected",!0),this._edgesSelection.add(t))}selectNode(t){t.canSelect()&&!this.emit(new Tt(t,!0)).cancelled&&(t.setState("selected",!0),this._selection.add(t))}unselectEdge(t){this.emit(new ue(t,!1)).cancelled||(t.setState("selected",!1),this._edgesSelection.delete(t))}unselectNode(t){t.canUnselect()&&!this.emit(new Tt(t,!1)).cancelled&&(t.setState("selected",!1),this._selection.delete(t))}unbind=o(()=>{},"unbind");handleMouseDown=o(t=>{this.unbind(),u.runInAction(()=>{this.startPoint=new p(t)}),this.selectionMode==="area"?(t.cancel(),this.unbind=at(Wt(this,Z,this.handleMouseUp),Wt(this,ht,this.handleMouseMove))):(!t.ctrl&&!t.shift&&!t.node?.selected&&this.clearSelection(),t.node||t.edge?(t.node&&this.selectNode(t.node),t.edge&&this.selectEdge(t.edge)):this.clearSelection())},"handleMouseDown");handleMouseMove=o(t=>{u.runInAction(()=>{this.endPoint=mt.getInstance().coordinates});for(const e of this.diagram.nodes){e.box.collides(this.box)?this.selectNode(e):this.unselectNode(e);for(const s of e.gateways)for(const n of s.outgoingEdges)if(n.collides(this.box)){this.selectEdge(n);break}else this.unselectEdge(n)}},"handleMouseMove");handleMouseUp=o(t=>{this.unbind(),this.endPoint=null,this.startPoint=null},"handleMouseUp")};o(mi,"Selector");let F=mi;const ke=new Map;function En(i){ke.has(i)||ke.set(i,Number.MIN_SAFE_INTEGER);const t=ke.get(i);return ke.set(i,t+1),`${i}_${t}`}o(En,"getUniqueId");function _t(i,t){return Math.abs(i-t)}o(_t,"d");const xi=class xi extends O{gridSize=50;proposals=[];clear(){this.proposals=[]}init(){u.makeObservable(this,{clear:u.action,proposals:u.observable}),N(this,"keydown",t=>{t.ctrlKey&&this.clear()}),this.diagram.onEvent(Z,()=>{this.clear()}),this.diagram.onEvent(ut,t=>{if(this.clear(),this.enabled){const e=this.diagram.canvas.frameDimensions.norm/2,s=this.gridSize/5*2,n=this.gridSize/3;if(t.proposals.length>=1){const a={HC:[],HL:[],HR:[],VB:[],VM:[],VT:[]},r=t.proposals[0],l={H:1/0,V:1/0};let c=!1,d=!1;for(const g of this.diagram.nodes)if(g.id!==r.node.id&&!t.proposals.find(x=>x.node.id===g.id)){const x=Math.abs(r.newBox.edgeDistanceX(g.box)),m=Math.abs(r.newBox.edgeDistanceY(g.box));if(x<e){{const f=_t(g.box.middle.y,r.newBox.middle.y);f<s&&(a.VM.push({distance:f,element:r.node,position:g.box.middle.y,range:[g.box.rightMiddle.x,r.newBox.x]}),f<n&&f<l.V&&(l.V=f,d=!0,r.update(new w([r.current.x,g.box.middle.y-r.newBox.height/2,...r.newBox.size.raw]))))}{const f=_t(g.box.y,r.newBox.y);f<s&&(a.VT.push({distance:f,element:r.node,position:g.box.y,range:[g.box.rightMiddle.x,r.newBox.x]}),f<n&&f<l.V&&(l.V=f,d=!0,r.update(new w([r.current.x,g.box.y,...r.newBox.size.raw]))))}{const f=_t(g.box.bottomMiddle.y,r.newBox.bottomMiddle.y);f<s&&(a.VB.push({distance:f,element:r.node,position:g.box.bottomMiddle.y,range:[g.box.rightMiddle.x,r.newBox.x]}),f<n&&f<l.V&&(l.V=f,d=!0,r.update(new w([r.current.x,g.box.bottomMiddle.y-r.newBox.height,...r.newBox.size.raw]))))}}if(m<e){{const f=_t(g.box.x,r.newBox.x);f<s&&(a.HL.push({distance:f,element:r.node,position:g.box.x,range:[g.box.bottomMiddle.y,r.newBox.y]}),f<n&&f<l.H&&(l.H=f,c=!0,r.update(new w([g.box.x,r.current.y,...r.newBox.size.raw]))))}{const f=_t(g.box.middle.x,r.newBox.middle.x);f<s&&(a.HC.push({distance:f,element:r.node,position:g.box.middle.x,range:[g.box.bottomMiddle.y,r.newBox.y]}),f<n&&f<l.H&&(l.H=f,c=!0,r.update(new w([g.box.middle.x-r.newBox.width/2,r.current.y,...r.newBox.size.raw]))))}{const f=_t(g.box.rightMiddle.x,r.newBox.rightMiddle.x);f<s&&(a.HR.push({distance:f,element:r.node,position:g.box.rightMiddle.x,range:[g.box.bottomMiddle.y,r.newBox.y]}),f<n&&f<l.H&&(l.H=f,c=!0,r.update(new w([g.box.rightMiddle.x-r.newBox.width,r.current.y,...r.newBox.size.raw]))))}}}Object.entries(a).forEach(([g,x])=>{u.runInAction(()=>{x.forEach(m=>{g.startsWith("H")?this.proposals.push({x:m.position,type:"h",range:m.range,id:En("alignment-proposal")}):this.proposals.push({y:m.position,type:"v",range:m.range,id:En("alignment-proposal")})})})}),c&&r.lockX(),d&&r.lockY()}}},this.diagram.priorities.Drag_Node_Aligner)}};o(xi,"NodesAligner");let Gt=xi;const yi=class yi extends O{gridSize=25;proposals=[];clear(){this.proposals=[]}init(){u.makeObservable(this,{clear:u.action,proposals:u.observable}),this.diagram.onEvent(Z,()=>{this.clear()}),this.diagram.onEvent(ut,t=>{if(this.clear(),this.enabled){const e=this.diagram.canvas.frameDimensions.norm/2;if(t.proposals.length>=1){const s=t.proposals[0];let n=null,a=1/0,r=null,l=1/0,c=null,d=1/0,g=null,x=1/0;for(const m of this.diagram.nodes){const f=s.newBox.edgeDistanceX(m.box),v=s.newBox.edgeDistanceY(m.box);m.id!==s.node.id&&Math.min(f,v)<e&&(v===0&&(f<0?d>-f&&(d=-f,c=m):x>f&&(x=f,g=m)),f===0&&(v<0?a>-v&&(a=-v,n=m):l>v&&(l=v,r=m)))}if(n&&r){const m=-s.newBox.edgeDistanceY(n.box),f=s.newBox.edgeDistanceY(r.box);Math.abs(m-f)<this.gridSize&&(this.proposals.push({from:s.node.box.topMiddle,to:new p([s.node.box.topMiddle.x,n.box.bottomMiddle.y])}),this.proposals.push({from:s.node.box.bottomMiddle,to:new p([s.node.box.bottomMiddle.x,r.box.topMiddle.y])}),s.updateY((n.box.bottomMiddle.y+r.box.topMiddle.y)/2-s.newBox.height/2),s.lockY())}if(c&&g){const m=-s.newBox.edgeDistanceX(c.box),f=s.newBox.edgeDistanceX(g.box);Math.abs(f-m)<this.gridSize&&(this.proposals.push({from:s.node.box.rightMiddle,to:new p([g.box.leftMiddle.x,s.node.box.rightMiddle.y])}),this.proposals.push({from:s.node.box.leftMiddle,to:new p([c.box.rightMiddle.x,s.node.box.leftMiddle.y])}),s.updateX((g.box.leftMiddle.x+c.box.rightMiddle.x)/2-s.newBox.width/2),s.lockX())}}}},this.diagram.priorities.Drag_Node_Distances_Balancer)}};o(yi,"DistancesBalancer");let Rt=yi;const wi=class wi extends O{windowTime=100;maxSize=50;index=-1;snapshots=[];async avoidEvents(t){this.disable();try{await t()}finally{this.enable()}}unbind=o(()=>{},"unbind");window(){this.enabled&&(this.unbind(),this.unbind=at(ua(()=>{u.runInAction(()=>{this.snapshots.splice(this.index+1),this.snapshots.push(this.diagram.export()),this.snapshots.splice(0,Math.max(0,this.snapshots.length-this.maxSize)),this.index=this.snapshots.length-1})},this.windowTime)))}redo(){this.hasNext&&this.avoidEvents(async()=>{this.index=Math.min(this.snapshots.length-1,this.index+1),await this.diagram.reset(),this.diagram.import(this.snapshots[this.index])})}undo(){this.hasPrevious&&this.avoidEvents(async()=>{this.index=Math.max(-1,this.index-1),await this.diagram.reset(),this.diagram.import(this.snapshots[this.index]||"{}")})}get hasNext(){return this.index<this.snapshots.length-1}get hasPrevious(){return this.index>-1}init(){u.makeObservable(this,{index:u.observable,hasNext:u.computed,hasPrevious:u.computed,redo:u.action,undo:u.action}),this.diagram.onEvent(Y,t=>{t.cancelled||this.window()},this.diagram.priorities.Change_History),this.window()}};o(wi,"History");let Yt=wi;const bi=class bi extends O{hotkeys=[];isEditableTarget(t){return t instanceof HTMLElement?t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement||t instanceof HTMLButtonElement||t.isContentEditable:!1}shouldIgnoreHotkeys(t){return this.isEditableTarget(t.originalEvent.target)||this.isEditableTarget(document.activeElement)}get measurer(){return this.diagram.getExtension(Ft)}get selector(){return this.diagram.getExtension(F)}match(t,e){return!(e.ctrl!==void 0&&t.ctrl!==e.ctrl||e.shift!==void 0&&t.shift!==e.shift||e.alt!==void 0&&t.alt!==e.alt||e.code!==void 0&&t.code!==e.code)}init(){this.diagram.onEvent(vt,async t=>{if(!this.shouldIgnoreHotkeys(t)&&!this.revertHotkey.has(t.code)){for(const e of this.hotkeys)if(this.match(t,e)&&(e.cb(t),!t.spreads))return;switch(t.code){case"Space":{const e=this.measurer.enabled,s=!e&&this.selector.selectionMode==="area";e||this.selector.toggleSelectionMode(s?"element":"area"),this.revertHotkey.set(t.code,()=>{e?this.measurer.toggle():this.selector.toggleSelectionMode(s?"area":"element")});break}case"KeyC":t.ctrl&&navigator.clipboard.writeText(this.selector.copy());break;case"KeyV":t.ctrl&&this.diagram.paste(await navigator.clipboard.readText());break;case"KeyM":this.selector.toggleSelectionMode("element");break;case"KeyS":t.ctrl||this.selector.toggleSelectionMode("area");break;case"KeyZ":t.ctrl&&this.diagram.getExtension(Yt).undo();break;case"KeyY":t.ctrl&&this.diagram.getExtension(Yt).redo();break;case"KeyR":this.measurer.toggle();break;case"ControlLeft":case"ControlRight":t.cancel();{const e=this.diagram.getExtension(it);e?.toggle();const s=this.diagram.getExtension(Gt);s?.toggle();const n=this.diagram.getExtension(Rt);n?.toggle(),this.revertHotkey.set(t.code,()=>{e?.toggle(),s?.toggle(),n?.toggle()})}break;case"Delete":this.diagram.getExtension(F).selectedNodes.forEach(e=>{this.diagram.delete(e)}),this.diagram.getExtension(F).selectedEdges.forEach(e=>{this.diagram.disconnect(e)})}}}),document.addEventListener("keyup",()=>{for(const t of this.revertHotkey.keys())this.revertHotkey.get(t)?.(),this.revertHotkey.delete(t)})}register(t){return this.hotkeys.push(t),()=>{this.hotkeys=this.hotkeys.filter(e=>e!==t)}}revertHotkey=new Map};o(bi,"Hotkeys");let es=bi;function Wt(i,t,e,s){if(i.diagram){const n=e.bind(i);return i.diagram.onEvent(t,n,s),()=>{i.diagram?.offEvent(t,n)}}throw new Error("Cannot bind to unexistent diagram")}o(Wt,"bindDiagram");function N(i,t,e,s){const n=e.bind(i);return document.addEventListener(t,n,s),()=>{document.removeEventListener(t,n,s)}}o(N,"bindDocument");function ha(i,t){const e=setInterval(i,t);return()=>{clearInterval(e)}}o(ha,"bindInterval");function ua(i,t){const e=setTimeout(i,t);return()=>{clearTimeout(e)}}o(ua,"bindTimeout");function at(...i){return()=>{i.forEach(t=>t())}}o(at,"bind");let ga=(At=class extends Et{unbindDocumentEvents=[];mouseSessionStartedInFrame=!1;_displacement=new p([-5e3,-5e3]);_scale=1;gridSize=50;size=new p([1e6,1e6]);get scale(){return this._scale}element=null;get elementPosition(){if(!this.element)return new p([0,0]);const t=this.element.getBoundingClientRect();return new p([t.x,t.y])}get elementDimensions(){if(!this.element)return new w([0,0,0,0]);const t=this.element.getBoundingClientRect();return new w([t.x,t.y,t.width,t.height])}get displacement(){return this._displacement.copy()}get framePosition(){if(!this.element)return new p([0,0]);const t=this.element.parentElement.getBoundingClientRect();return new p([t.x,t.y])}get frameDimensions(){if(!this.element)return new w([0,0,0,0]);const t=this.element.parentElement.getBoundingClientRect();return new w([t.x,t.y,t.width,t.height])}constructor(t){super(t),u.makeObservable(this,{_scale:u.observable}),this.unbindDocumentEvents.push(N(this,"click",this.handleClick),N(this,"dblclick",this.handleDoubleClick),N(this,"wheel",this.handleWheel),N(this,"mouseup",this.handleMouseUp),N(this,"mousedown",this.handleMouseDown),N(this,"mousemove",this.handleMouseMove),N(this,"keyup",this.handleKeyUp),N(this,"keypress",this.handleKeyPress),N(this,"keydown",this.handleKeyDown))}dispose(){for(const t of this.unbindDocumentEvents.splice(0))t()}markMouseSessionStartedInFrame(){this.mouseSessionStartedInFrame=!0}get dragging(){return this._dragging}_dragging=!1;displacementStart=null;eventStart=null;bound(){const t=this.element?.parentElement?.getBoundingClientRect(),e=t?new p([t.width,t.height]).divide(this.scale):new p,s=new w([...this.size.copy().multiply(-1).raw,...e.raw]).multiply(.9);this._displacement.bound(s)}centerOnPoint(t){const e=this.frameDimensions.multiply(1/this.scale);this.setDisplacement(t.copy().substract(e.middle).multiply(-1))}displace(t){this._displacement.sum(t);const e=this._displacement.copy();return this.bound(),this.setDisplacementStyles(),t.copy().substract(this._displacement.copy().substract(e))}setDisplacement(t){this._displacement.assign(t),this.bound(),this.setDisplacementStyles()}setScale(t,e=new p([0,0])){const s=this.inverseFit(e),n=s.copy(),a=this.displacement,r=Math.max(.3,Math.min(3,t));if(r!==this.scale){const l=s.copy().multiply(this.scale).sum(a.copy().multiply(this.scale)).substract(n.copy().multiply(r)).divide(r);this.emit(new Nt(this,l.copy().substract(this.displacement),r,this.scale)).cancelled||(this._scale=r,this._displacement.assign(l),this.bound(),this.setDisplacementStyles())}}fit(t){return t instanceof p?this._displacement.copy().sum([t.x,t.y]).multiply(this.scale):t instanceof w?new w([...this._displacement.copy().sum([t.x,t.y]).multiply(this.scale).raw,...t.size.multiply(this.scale).raw]):t*this.scale}inverseFit(t){return t instanceof p?t.copy().substract(this.framePosition).divide(this.scale).substract([this._displacement.x,this._displacement.y]):t.copy().substract(this.framePosition.toDimensions(new p([0,0]))).divide(this.scale).substract([this._displacement.x,this._displacement.y,0,0])}getDisplacementStyles(){const t=this._displacement.copy(!1).multiply(this.scale);return{position:"relative",width:`${this.size.x}px`,height:`${this.size.y}px`,transform:`translate(${t.x}px, ${t.y}px) scale(${this.scale})`,transformOrigin:"0 0",willChange:"transform"}}setDisplacementStyles(t=this.element){if(t){const e=this._displacement.copy(!1).multiply(this.scale),s=t.parentElement;if(t.dataset.setStyles="true",t.style.position="relative",t.style.width=`${this.size.x}px`,t.style.height=`${this.size.y}px`,t.style.transform=`translate(${e.x}px, ${e.y}px) scale(${this.scale})`,t.style.transformOrigin="0 0",t.style.zoom="",t.style.willChange="transform",s){const n=this.gridSize*this.scale,a=n*10,l=(Math.max(.3,Math.min(1,this.scale))-.3)/.7;s.style.setProperty("--diagram-canvas-scale",String(this.scale)),s.style.setProperty("--diagram-canvas-translate-x",`${e.x}px`),s.style.setProperty("--diagram-canvas-translate-y",`${e.y}px`),s.style.setProperty("--diagram-grid-zoom-ratio",String(l)),s.style.setProperty("--diagram-grid-size",`${n}px`),s.style.setProperty("--diagram-major-grid-size",`${a}px`),s.style.setProperty("--diagram-grid-offset-x",`${e.x}px`),s.style.setProperty("--diagram-grid-offset-y",`${e.y}px`)}}}setGridSize(t){this.gridSize=t,this.setDisplacementStyles()}useRef=o(t=>{this.element=t,t instanceof HTMLElement&&this.setDisplacementStyles()},"useRef");isInsideFrameFromTarget(t){const e=this.element?.parentElement;return!!(e&&t instanceof Node&&(e===t||e.contains(t)))}isInsideFrameEvent(t){const e=this.element?.parentElement;if(!e)return!1;const s=typeof t.composedPath=="function"?t.composedPath():[];if(s.length>0&&s.some(n=>n===e||n instanceof Node&&e.contains(n))||this.isInsideFrameFromTarget(t.target)||t.type==="wheel"&&e.matches(":hover"))return!0;if("clientX"in t&&"clientY"in t){const n=e.getBoundingClientRect(),a=Number(t.clientX),r=Number(t.clientY);return a>=n.left&&a<=n.right&&r>=n.top&&r<=n.bottom}return!1}handleMouseMove(t){if(!this.isInsideFrameEvent(t)&&!this.eventStart&&!this.mouseSessionStartedInFrame)return;if(!this.emit(new ht(this,t)).cancelled&&this.displacementStart&&this.eventStart){const s=this.displacement.substract(new p(t));this.emit(new Ge(this,this.displacement,s)).cancelled||(this._dragging=!0,this._displacement.assign(this.displacementStart.copy().substract(this.eventStart.copy().substract([t.clientX,t.clientY]).divide(this.scale))),this.bound(),this.setDisplacementStyles())}}handleDoubleClick(t){this.isInsideFrameEvent(t)&&this.emit(new le(this,t))}handleClick(t){this.isInsideFrameEvent(t)&&this.emit(new oe(this,t))}handleMouseUp(t){!this.isInsideFrameEvent(t)&&!this.eventStart&&!this.mouseSessionStartedInFrame||(this.emit(new Z(this,t)),this._dragging=!1,this.eventStart=null,this.mouseSessionStartedInFrame=!1)}handleMouseDown(t){if(!this.isInsideFrameEvent(t))return;this.mouseSessionStartedInFrame=!0,!this.emit(new dt(this,t)).cancelled&&(t.button===1||t.button===0)&&(this.displacementStart=this._displacement.copy(),this.eventStart=new p(t))}handleKeyDown(t){this.emit(new vt(this,t))}handleKeyUp(t){this.emit(new ce(this,t))}handleKeyPress(t){this.emit(new He(this,t))}handleWheel(t){if(!this.isInsideFrameEvent(t))return;if(!this.emit(new ze(this,t)).cancelled){const s=t.deltaY<0,n=Math.floor(this.scale*100)/100;this.setScale(this.scale-t.deltaY/(n>=.2&&s||n>.21?1e3:1e4),new p(t))}}},o(At,"Canvas"),At);const vi=class vi extends Me{initializeGateways(){}};o(vi,"TextNode");let _e=vi;const Xt=1e3,Ei=class Ei{Canvas_Rules=Xt;Change_History=0;Click_Node=100;Drag_Rules=Xt;Drag_Node_Distances_Balancer=400;Drag_Node_Straight_Drag=300;Drag_Node_Aligner=200;Drag_Node_Snap_To_Grid=100;Drag_Edge_Snap_To_Grid=100;Mouse_Down_Rules=Xt;Mouse_Down_Measurer=400;Mouse_Down_Selector=300;Mouse_Down_Node=200;Mouse_Down_Dragger=100;Mouse_Move_Straight_Drag=500;Mouse_Move_Selector=100;Mouse_Up_Straight_Drag=500;Mouse_Up_Dragger=200;Mouse_Up_Selector=100;Nodes_Connection_Rules=Xt;Node_Selection_Nodes_Resizer=200;Node_Selection_Selector=200;Scale_Dragger=100;Selection_Rules=Xt};o(Ei,"Priorities");let ss=Ei;const Mi=class Mi{constructor(t){this.d=t,t.onEvent(Y,this.check(()=>this.allowEdition),t.priorities.Mouse_Down_Rules),t.onEvent(Ot,this.check(()=>this.allowSelection),t.priorities.Selection_Rules),t.onEvent(st,this.check(()=>this.allowEdition),t.priorities.Drag_Rules),t.onEvent(Lt,this.check(()=>this.allowEdition),t.priorities.Nodes_Connection_Rules),t.onEvent(Bt,this.check(()=>this.allowZoom),t.priorities.Drag_Rules),u.makeAutoObservable(this)}d;allowEdition=!0;allowSelection=!0;allowZoom=!0;displaceWhenDragOnEdges=!0;toggleGrid=!0;check=o(t=>e=>{t()||(e.cancel(),e.stopImmediatePropagation())},"check")};o(Mi,"Rules");let is=Mi;const ki=class ki extends O{creationMode="none";init(){this.diagram.onEvent(oe,t=>{this.handleClick(t)}),u.makeObservable(this,{creationMode:u.observable})}getId(){let t=String(Date.now()),e=0;for(;this.diagram.getNodeById(t);)t=String(Date.now())+String(e++);return t}handleClick(t){if(!t.cancelled&&this.creationMode!=="none"&&(t.cancel(),this.creationMode==="text")){const e=this.diagram.add(new _e(null,{id:this.getId(),label:"No label",box:new w([...this.diagram.canvas.inverseFit(new p(t.originalEvent)).raw,100,100])}));this.diagram.getExtension(F).selectNode(e)}u.runInAction(()=>{this.creationMode="none"})}};o(ki,"Creator");let ns=ki;const Vt=.001,J=3,_i=class _i extends O{drag=null;endpointDrag=null;uns=o(()=>{},"uns");init(){document.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.diagram.onEvent(ge,this.startDrag.bind(this)),this.diagram.onEvent(pe,this.startEndpointDrag.bind(this))}almostEqual(t,e){return Math.abs(t-e)<Vt}pointMatches(t,e){return this.almostEqual(t.x,e.x)&&this.almostEqual(t.y,e.y)}axisAligned(t,e){return this.almostEqual(t.x,e.x)||this.almostEqual(t.y,e.y)}pointsNear(t,e,s=J){return Math.abs(t.x-e.x)<=s&&Math.abs(t.y-e.y)<=s}isActivePoint(t){return!!(this.drag&&(t===this.drag.pointA||t===this.drag.pointB))}getGridSize(){return this.diagram.getExtension(it)?.gridSize??50}orientationVector(t){switch(t){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"up":return{x:0,y:-1};case"down":return{x:0,y:1}}}axisPerpendicularToGateway(t){return t==="left"||t==="right"?"y":"x"}expectedLeadPoint(t,e){const s=e==="from"?t.steps[0]:t.steps.at(-1),n=e==="from"?t.from.orientation:t.to.orientation,a=this.orientationVector(n),r=this.getGridSize();return new p([s.x+a.x*r,s.y+a.y*r])}leadMatchesGatewaySide(t,e,s){const n=this.orientationVector(s),a=(e.x-t.x)*n.x+(e.y-t.y)*n.y;return Math.abs(s==="left"||s==="right"?e.y-t.y:e.x-t.x)<=J&&a>Vt&&a<=this.getGridSize()+J}endpointLeadPoint(t,e){const s=e==="from"?t.steps[0]:t.steps.at(-1),n=e==="from"?t.from.orientation:t.to.orientation,a=e==="from"?1:t.steps.length-2,r=t.steps[a];return r&&r.mode!=="manual"&&!this.isActivePoint(r)&&this.leadMatchesGatewaySide(s,r,n)?r:this.expectedLeadPoint(t,e)}ensureEndpointLeadPoint(t,e){const s=this.expectedLeadPoint(t,e),n=e==="from",a=n?1:t.steps.length-2,r=t.steps[a];if(r&&this.leadMatchesGatewaySide(n?t.steps[0]:t.steps.at(-1),r,n?t.from.orientation:t.to.orientation))return a;const l=new S(t,[s.x,s.y,"auto"]);return n?(t.state.steps.splice(1,0,l),1):(t.state.steps.splice(t.steps.length-1,0,l),t.steps.length-2)}ensureEndpointLeads(t){this.ensureEndpointLeadPoint(t,"from"),this.ensureEndpointLeadPoint(t,"to")}isProtectedLeadPoint(t,e){return e<=0||e>=t.steps.length-1?!1:e===1&&t.steps[e].mode!=="manual"&&this.leadMatchesGatewaySide(t.steps[0],t.steps[e],t.from.orientation)||e===t.steps.length-2&&t.steps[e].mode!=="manual"&&this.leadMatchesGatewaySide(t.steps.at(-1),t.steps[e],t.to.orientation)}segmentMovedAxis(t,e){return this.almostEqual(t.y,e.y)?"y":this.almostEqual(t.x,e.x)?"x":Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"y":"x"}segmentDirection(t,e){return!this.axisAligned(t,e)||this.pointMatches(t,e)?null:this.almostEqual(t.y,e.y)?"horizontal":"vertical"}segmentIsParallelToDraggedAxis(t,e){return this.drag?this.drag.movedAxis==="y"?Math.abs(t.y-e.y)<=J:Math.abs(t.x-e.x)<=J:!1}perpendicularAxis(t){return t==="x"?"y":"x"}pointAxis(t,e){return e==="x"?t.x:t.y}setPointAxis(t,e,s){e==="x"?t.x=s:t.y=s}crossesStaticBoundary(t,e,s,n,a=J){const r=this.pointAxis(s,e),l=this.pointAxis(n,e);switch(t){case"right":case"down":return r<l-a;case"left":case"up":return r>l+a}}copyAsManual(t,e="both"){const s=t.copy();return s.parent=t.parent,s.addManualAxis(e),s}markManual(t,e="both"){t.mode!=="static"&&t.addManualAxis(e)}clampPointPastLead(t,e,s){switch(s){case"left":t.x=Math.min(t.x,e.x);break;case"right":t.x=Math.max(t.x,e.x);break;case"up":t.y=Math.min(t.y,e.y);break;case"down":t.y=Math.max(t.y,e.y);break}}movedAxisMatchesOrientation(t,e){return(e==="left"||e==="right")&&t==="x"||(e==="up"||e==="down")&&t==="y"}edgePointAt(t,e,s,n="auto"){return new S(t,[e,s,n])}guardCoordinate(t,e,s,n,a){const r=this.pointAxis(n,a)-this.pointAxis(s,a),l=Math.abs(r)>Vt?Math.sign(r):1,c=e==="from"?t.from.parent.box:t.to.parent.box,d=a==="y"?c.height:c.width,g=Math.max(this.getGridSize(),d/2+this.getGridSize()/2);return this.pointAxis(s,a)+l*g}makeGuardCorner(t,e,s,n){const a=this.perpendicularAxis(n),r=this.edgePointAt(t,e.x,e.y,"auto");return this.setPointAxis(r,n,this.pointAxis(e,n)),this.setPointAxis(r,a,s),r}insertStaticBoundaryGuard(t){if(!this.drag)return!1;const{edge:e,movedAxis:s}=this.drag,n=t==="from"?e.from.orientation:e.to.orientation;if(!this.movedAxisMatchesOrientation(s,n))return!1;const a=e.state.steps,r=a.findIndex($=>$===this.drag.pointA),l=a.findIndex($=>$===this.drag.pointB);if(r<0||l<0)return!1;const c=t==="from"?r<=l?"pointA":"pointB":r>=l?"pointA":"pointB",d=c==="pointA"?"pointB":"pointA",g=this.drag[c],x=this.drag[d],m=a.findIndex($=>$===g),f=this.endpointLeadPoint(e,t),v=t==="from"?1:a.length-2,k=a[v],A=!!(k&&this.pointMatches(k,f)),B=t==="from"?m===1:m===a.length-2,E=t==="from"?m===2&&A:m===a.length-3&&A,M=this.crossesStaticBoundary(n,s,g,f,J);if(m<0||!B&&!E||!M)return!1;const H=this.perpendicularAxis(s),P=this.guardCoordinate(e,t,f,x,H);this.setPointAxis(g,H,P),this.markManual(g,s),this.rebaseDraggedEndpointFixedAxis(c,g);const D=this.makeGuardCorner(e,f,P,s);if(t==="from"){if(B){const $=this.edgePointAt(e,f.x,f.y,"auto");a.splice(m,0,$,D)}else a.splice(m,0,D);return this.drag.sourceLeadAdjacent=!1,this.drag.staticBoundaryGuarded=!0,!0}if(B){const $=this.edgePointAt(e,f.x,f.y,"auto");a.splice(m+1,0,D,$)}else a.splice(m+1,0,D);return this.drag.targetLeadAdjacent=!1,this.drag.staticBoundaryGuarded=!0,!0}insertStaticBoundaryGuards(){const t=this.insertStaticBoundaryGuard("from"),e=this.insertStaticBoundaryGuard("to");return t||e}clampDraggedSegmentAgainstEndpointLeads(){if(!this.drag)return;const{edge:t,pointA:e,pointB:s,movedAxis:n,sourceLeadAdjacent:a,targetLeadAdjacent:r}=this.drag,l=t.steps.findIndex(d=>d===e),c=t.steps.findIndex(d=>d===s);if(this.movedAxisMatchesOrientation(n,t.from.orientation)){const g=t.steps[1]??this.expectedLeadPoint(t,"from");g&&(a||l>=0&&c>=0&&this.isProtectedLeadPoint(t,1)&&(l===2||c===2))&&(this.clampPointPastLead(e,g,t.from.orientation),this.clampPointPastLead(s,g,t.from.orientation))}if(this.movedAxisMatchesOrientation(n,t.to.orientation)){const d=t.steps.length-2,g=t.steps[d]??this.expectedLeadPoint(t,"to");g&&(r||l>=0&&c>=0&&this.isProtectedLeadPoint(t,d)&&(l===d-1||c===d-1))&&(this.clampPointPastLead(e,g,t.to.orientation),this.clampPointPastLead(s,g,t.to.orientation))}}mergeDraggedSegmentWithManualNeighbors(){if(!this.drag)return!1;let t=!1;const e=o((s,n)=>{if(!this.drag)return;const a=this.drag[s],r=this.drag.edge.state.steps,l=r.findIndex(g=>g===a),c=l+n;if(l<0||c<0||c>=r.length)return;const d=r[c];d.mode==="manual"&&this.pointsNear(a,d)&&(d.assign(a),r.splice(l,1),this.drag[s]=d,t=!0)},"mergePoint");return e("pointA",-1),e("pointB",1),t}rebaseDraggedEndpointFixedAxis(t,e){if(!this.drag)return;const s=t==="pointA"?this.drag.startPointA:this.drag.startPointB;this.drag.movedAxis==="y"?s.x=e.x:s.y=e.y}replaceDraggedEndpointWithProtectedLeadDuplicate(t,e,s){if(!this.drag)return;const n=this.drag[t],a=this.copyAsManual(e,this.drag.movedAxis);this.drag.movedAxis==="y"?a.y=n.y:a.x=n.x,this.drag.edge.state.steps[s]=a,this.drag[t]=a,this.rebaseDraggedEndpointFixedAxis(t,a)}absorbCollinearSegmentsIntoDraggedSegment(){if(!this.drag)return!1;let t=!1;const e=o((s,n)=>{if(!this.drag)return;const a=this.drag.edge.state.steps;for(;;){const r=this.drag[s],l=a.findIndex(g=>g===r),c=l+n;if(l<0||c<=0||c>=a.length-1)return;const d=a[c];if(!this.segmentIsParallelToDraggedAxis(r,d))return;if(this.isProtectedLeadPoint(this.drag.edge,c)){this.replaceDraggedEndpointWithProtectedLeadDuplicate(s,d,l),t=!0;return}if(d.mode==="static")return;a.splice(l,1),this.drag[s]=d,this.rebaseDraggedEndpointFixedAxis(s,d),t=!0}},"absorbSide");return e("pointA",-1),e("pointB",1),t}removeAdjacentDuplicates(t){if(!this.drag)return!1;const e=this.drag.edge.state.steps;let s=!1;for(let n=0;n<e.length-1;){const a=e[n],r=e[n+1];if(!this.pointsNear(a,r)){n+=1;continue}const l=this.isActivePoint(a)||a.mode==="static"||this.isProtectedLeadPoint(this.drag.edge,n)?n+1:n;if(l<=0||l>=e.length-1||t&&this.isActivePoint(e[l])){n+=1;continue}e.splice(l,1),s=!0,n=Math.max(0,n-1)}return s}coordinateAnchorForPair(t,e,s,n){return this.drag?t.mode==="static"?this.pointAxis(t,s):e.mode==="static"?this.pointAxis(e,s):this.isProtectedLeadPoint(this.drag.edge,n)?this.pointAxis(t,s):this.isProtectedLeadPoint(this.drag.edge,n+1)?this.pointAxis(e,s):this.isActivePoint(t)?this.pointAxis(t,s):this.isActivePoint(e)?this.pointAxis(e,s):t.mode==="manual"?this.pointAxis(t,s):e.mode==="manual"?this.pointAxis(e,s):this.pointAxis(t,s):this.pointAxis(t,s)}snapNearlyAlignedDraggedPairs(){if(!this.drag)return!1;const t=this.drag.edge.state.steps;let e=!1;for(let s=0;s<t.length-1;s++){const n=t[s],a=t[s+1];if(Math.abs(n.x-a.x)>Vt&&Math.abs(n.x-a.x)<=J){const r=this.coordinateAnchorForPair(n,a,"x",s);n.x=r,a.x=r,e=!0}if(Math.abs(n.y-a.y)>Vt&&Math.abs(n.y-a.y)<=J){const r=this.coordinateAnchorForPair(n,a,"y",s);n.y=r,a.y=r,e=!0}}return e}chooseOrthogonalCorner(t,e,s,n){const a=new S(this.drag?.edge??null,[e.x,t.y,"auto"]),r=new S(this.drag?.edge??null,[t.x,e.y,"auto"]),l=o(c=>{let d=0;const g=s?this.segmentDirection(s,t):null,x=this.segmentDirection(t,c),m=n?this.segmentDirection(e,n):null,f=this.segmentDirection(c,e);return g&&x!==g&&(d+=2),m&&f!==m&&(d+=2),this.axisAligned(s??t,c)&&(d+=1),this.axisAligned(c,n??e)&&(d+=1),d},"score");return l(a)>=l(r)?a:r}ensureOrthogonalAdjacency(){if(!this.drag)return!1;const t=this.drag.edge.state.steps;let e=!1;for(let s=0;s<t.length-1;s++){const n=t[s],a=t[s+1];if(this.axisAligned(n,a))continue;const r=s>0?t[s-1]:void 0,l=s+2<t.length?t[s+2]:void 0;t.splice(s+1,0,this.chooseOrthogonalCorner(n,a,r,l)),e=!0,s+=1}return e}normalizeDraggedEdge(){if(!this.drag)return!1;const t=this.snapNearlyAlignedDraggedPairs(),e=this.mergeDraggedSegmentWithManualNeighbors(),s=this.absorbCollinearSegmentsIntoDraggedSegment(),n=this.snapNearlyAlignedDraggedPairs(),a=this.ensureOrthogonalAdjacency(),r=this.snapNearlyAlignedDraggedPairs(),l=this.removeAdjacentDuplicates(!0),c=this.drag.edge.state.steps;return c.length>0&&(c[0].markStatic(),c.at(-1).markStatic()),t||e||s||n||a||r||l}finalizeDraggedEdge(){this.drag&&(this.normalizeDraggedEdge(),this.ensureOrthogonalAdjacency(),this.removeAdjacentDuplicates(!1),this.drag.staticBoundaryGuarded||this.drag.edge.setSteps(bn(this.diagram,this.drag.edge)))}prepareStraightLeadSegment(t,e){const s=this.copyAsManual(t.steps[1],e),n=this.copyAsManual(t.steps[2],e);return t.state.steps.splice(2,0,s,n),{pointA:s,pointB:n,movedAxis:e}}prepareSourceSegment(t){this.ensureEndpointLeads(t);const e=this.axisPerpendicularToGateway(t.from.orientation);if(t.steps.length===4&&this.isProtectedLeadPoint(t,1)&&this.isProtectedLeadPoint(t,2))return this.prepareStraightLeadSegment(t,e);const s=this.copyAsManual(t.steps[1],e);t.state.steps.splice(2,0,s);const n=t.steps[3];return n instanceof S?(this.markManual(n,e),{pointA:s,pointB:n,movedAxis:e}):null}prepareTargetSegment(t){this.ensureEndpointLeads(t);const e=this.axisPerpendicularToGateway(t.to.orientation);if(t.steps.length===4&&this.isProtectedLeadPoint(t,1)&&this.isProtectedLeadPoint(t,2))return this.prepareStraightLeadSegment(t,e);const s=t.steps.length-2,n=this.copyAsManual(t.steps[s],e);t.state.steps.splice(s,0,n);const a=t.steps[s-1];return a instanceof S?(this.markManual(a,e),{pointA:a,pointB:n,movedAxis:e}):null}prepareSegmentAfterProtectedSourceLead(t,e){const s=this.segmentMovedAxis(t.steps[e],t.steps[e+1]),n=this.copyAsManual(t.steps[e],s);t.state.steps.splice(e+1,0,n);const a=t.steps[e+2];return a instanceof S?(this.markManual(a,s),{pointA:n,pointB:a,movedAxis:s}):null}prepareSegmentBeforeProtectedTargetLead(t,e){const s=this.segmentMovedAxis(t.steps[e-1],t.steps[e]),n=this.copyAsManual(t.steps[e],s);t.state.steps.splice(e,0,n);const a=t.steps[e-1];return a instanceof S?(this.markManual(a,s),{pointA:a,pointB:n,movedAxis:s}):null}prepareInteriorSegment(t,e,s,n){this.ensureEndpointLeads(t);let a=t.steps.findIndex(g=>g===e),r=t.steps.findIndex(g=>g===s);if((a<0||r<0||Math.abs(a-r)!==1)&&(a=Math.max(0,Math.min(n,t.steps.length-2)),r=a+1),a>r&&([a,r]=[r,a]),a===0)return this.prepareSourceSegment(t);if(r===t.steps.length-1)return this.prepareTargetSegment(t);if(this.isProtectedLeadPoint(t,a))return this.prepareSegmentAfterProtectedSourceLead(t,a);if(this.isProtectedLeadPoint(t,r))return this.prepareSegmentBeforeProtectedTargetLead(t,r);const l=t.steps[a],c=t.steps[r],d=this.segmentMovedAxis(l,c);return this.markManual(l,d),this.markManual(c,d),{pointA:l,pointB:c,movedAxis:d}}restoreOriginalSteps(t,e){t.setSteps(e.map(s=>s.copy()))}startDrag(t){if(t.cancelled)return;t.stopImmediatePropagation(),this.uns();const e=t.src,s=e.steps.map(k=>k.copy()),n=e.steps.length-1,a=Number(t.midPoint.id),r=a===0,l=a===n-1,c=t.midPoint.points[0],d=t.midPoint.points[1],g=u.runInAction(()=>{e.state.dragging=!0;const k=r?this.prepareSourceSegment(e):l?this.prepareTargetSegment(e):this.prepareInteriorSegment(e,c,d,a);return k||(e.state.dragging=!1),k});if(!g)return;const x=e.steps.findIndex(k=>k===g.pointA),m=e.steps.findIndex(k=>k===g.pointB),f=x===2||m===2,v=x===e.steps.length-3||m===e.steps.length-3;this.drag={edge:e,midpoint:t.midPoint,pointA:g.pointA,pointB:g.pointB,movedAxis:g.movedAxis,startMouseCanvas:this.diagram.canvas.inverseFit(new p(t)),startPointA:g.pointA.copy().nonObserved,startPointB:g.pointB.copy().nonObserved,originalSteps:s,sourceLeadAdjacent:f,targetLeadAdjacent:v,staticBoundaryGuarded:!1,changed:!1},this.uns=at(N(this,"mousemove",this.handleMouseMove),N(this,"pointermove",this.handleMouseMove))}startEndpointDrag(t){t.cancelled||(t.stopImmediatePropagation(),this.uns(),u.runInAction(()=>{t.src.state.dragging=!0}),this.drag=null,this.endpointDrag={edge:t.src,endpoint:t.endpoint},this.uns=at(N(this,"mousemove",this.handleMouseMove),N(this,"pointermove",this.handleMouseMove)))}scheduleEndpointRecompute(){if(!this.endpointDrag)return;const{edge:t,endpoint:e}=this.endpointDrag;(e==="from"?t.from:t.to).recomputeConnectedEdge(t,e)}handleEndpointMouseMove(t){if(!this.endpointDrag)return;const{edge:e,endpoint:s}=this.endpointDrag,n=s==="from"?e.from:e.to;if(n.state.allowDisplace===!1)return;const a=this.diagram.canvas.inverseFit(new p(t)),r=n.connectionDisplacement(a);u.runInAction(()=>{s==="from"?e.state.displacementStart=r:e.state.displacementEnd=r,this.scheduleEndpointRecompute()})}moveDraggedSegment(t){if(!this.drag)return;const{pointA:e,pointB:s}=this.drag,a=this.diagram.canvas.inverseFit(new p(t)).nonObserved.substract(this.drag.startMouseCanvas);this.drag.movedAxis==="x"?a.y=0:a.x=0,u.runInAction(()=>{if(!this.drag)return;e.assign(this.drag.startPointA.copy().sum(a)),s.assign(this.drag.startPointB.copy().sum(a));const r=[new me(e,this.drag.movedAxis),new me(s,this.drag.movedAxis)];this.emit(new xe(this,r,this.drag.movedAxis,t));for(const g of r)g.point.assign(g.get());const l=this.insertStaticBoundaryGuards();this.clampDraggedSegmentAgainstEndpointLeads();const c=this.normalizeDraggedEdge();(l||c||!this.pointMatches(this.drag.pointA,this.drag.startPointA)||!this.pointMatches(this.drag.pointB,this.drag.startPointB))&&(this.drag.changed=!0)})}handleMouseMove(t){if(this.endpointDrag){this.handleEndpointMouseMove(t);return}this.moveDraggedSegment(t)}handleMouseUp(){!this.drag&&!this.endpointDrag||(u.runInAction(()=>{this.drag&&(this.drag.changed?this.finalizeDraggedEdge():this.restoreOriginalSteps(this.drag.edge,this.drag.originalSteps),this.drag.edge.state.dragging=!1),this.endpointDrag&&(this.endpointDrag.edge.state.dragging=!1),this.drag=null,this.endpointDrag=null}),this.uns())}};o(_i,"EdgesDragger");let as=_i;function Mn(i,t,e,s=new p([0,0]),n=new p([0,0])){return ca(i,t,e,s,n)}o(Mn,"findBestPathBetweenNodes");function pa(i,t,e){switch(e){case"down":return t.copy().sum([0,i]);case"left":return t.copy().sum([-i,0]);case"up":return t.copy().sum([0,-i]);case"right":return t.copy().sum([+i,0])}}o(pa,"stepFromGateway");const Pi=class Pi extends O{hasRoutedPreview=!1;previewRequestVersion=0;previewRafId=null;init(){u.makeObservable(this,{_arrowSteps:u.observable,arrowTo:u.observable,candidateGateway:u.observable,startConnectionFrom:u.action,handleMouseMove:u.action,startGateway:u.observable,handleMouseUp:u.action})}arrowTo=null;startGateway=null;candidateGateway=null;_arrowSteps=[];get arrowSteps(){return this._arrowSteps}get snap(){return this.diagram.getExtension(it)}calculateArrowSteps(){if(!this.startGateway||!this.arrowTo)return;const t=this.startGateway,e=this.candidateGateway,s=this.arrowTo?.copy(),n=this.previewRequestVersion;if(!t||!s){u.runInAction(()=>{this._arrowSteps=[]});return}try{const a=this.diagram.canvas.inverseFit(s),r=this.snap.gridSize/2,l=a.copy().divide(r).round.multiply(r);let c=[];if(e)c=Mn(this.diagram,t,e,new p([0,0]),e.connectionDisplacement(a));else{const d=new Me(null,{id:"fake",label:"",box:new w([...l.raw,0,0])}),g=t.coordinates.substract(d.getGateway("down").coordinates).x,x=t.coordinates.substract(d.getGateway("down").coordinates).y,m=Math.abs(g)>Math.abs(x)?g>=0?"right":"left":x>=0?"down":"up";c=Mn(this.diagram,t,d.getGateway(m))}u.runInAction(()=>{this.startGateway===t&&n===this.previewRequestVersion&&(this._arrowSteps=c.map(d=>new p([d.x,d.y])),this.hasRoutedPreview=this._arrowSteps.length>1)})}catch{}}orthogonalMousePreview(t,e){const s=this.snap.gridSize/2,n=e.copy().divide(s).round.multiply(s),a=t.coordinates.copy(),r=pa(this.snap.gridSize,a,t.orientation),l=[a,r];if(Math.abs(r.x-n.x)<.001||Math.abs(r.y-n.y)<.001)return l.push(n),this.compactPreviewPoints(l);const c=new p([r.x,n.y]),d=new p([n.x,r.y]),g=Math.abs(n.x-r.x),x=Math.abs(n.y-r.y);return l.push(g>=x?d:c,n),this.compactPreviewPoints(l)}compactPreviewPoints(t){const e=[];for(const s of t){const n=e.at(-1);if(!(n&&Math.abs(n.x-s.x)<.001&&Math.abs(n.y-s.y)<.001))for(e.push(s);e.length>=3;){const a=e.at(-3),r=e.at(-2),l=e.at(-1),c=Math.abs(a.x-r.x)<.001&&Math.abs(r.x-l.x)<.001,d=Math.abs(a.y-r.y)<.001&&Math.abs(r.y-l.y)<.001;if(c||d)e.splice(e.length-2,1);else break}}return e}cancelScheduledPreview(){this.previewRafId!==null&&(cancelAnimationFrame(this.previewRafId),this.previewRafId=null)}scheduleCalculateArrowSteps(){this.previewRafId===null&&(this.previewRafId=requestAnimationFrame(()=>{this.previewRafId=null,this.calculateArrowSteps()}))}u=o(()=>{},"u");startConnectionFrom(t,e){this.emit(new Ye(this,t.parent)).cancelled||(e.nativeEvent.stopImmediatePropagation(),this.diagram.canvas.markMouseSessionStartedInFrame(),this.startGateway=t,this.arrowTo=new p(e),this.hasRoutedPreview=!1,this.previewRequestVersion=0,this._arrowSteps=[t.coordinates.copy(),t.coordinates.copy()],this.u(),this.u=at(Wt(this,ht,this.handleMouseMove),Wt(this,Z,this.handleMouseUp)))}handleMouseMove(t){this.previewRequestVersion+=1;const e=this.diagram.canvas.frameDimensions;this.arrowTo=new p(t);const s=this.arrowTo.copy().substract(this.diagram.canvas.framePosition),n=new p([0,0]);s.x<100?n.sum([(100-s.x)*.1,0]):s.x>e.width-100?n.substract([(100-Math.abs(s.x-e.width))*.1,0]):s.y<100?n.sum([0,(100-s.y)*.1]):s.y>e.height-100&&n.substract([0,(100-Math.abs(s.y-e.height))*.1]),n.norm>0&&this.diagram.canvas.displace(n);const a=this.diagram.canvas.inverseFit(this.arrowTo),c=this.diagram.nodes.filter(d=>{const g=this.snap.gridSize/2;return d.box.translate(new p([-g,-g])).sum([0,0,g*2,g*2]).collides(a)}).flatMap(d=>d.gateways).filter(d=>d!==this.startGateway).reduce((d,g)=>{if(!d)return g;const x=g.connectionDistance(a),m=d.connectionDistance(a);return x<m?g:d},null);if(c?this.candidateGateway=c:this.candidateGateway=null,!this.candidateGateway){this.hasRoutedPreview=!1,this._arrowSteps=this.orthogonalMousePreview(this.startGateway,a),this.scheduleCalculateArrowSteps();return}this.calculateArrowSteps()}handleMouseUp(){try{if(this.candidateGateway&&this.startGateway&&this.candidateGateway.canConnect(this.startGateway)&&!this.emit(new We(this,this.startGateway.parent,this.candidateGateway.parent)).cancelled){this._arrowSteps=[];const t=this.arrowTo?this.diagram.canvas.inverseFit(this.arrowTo):this.candidateGateway.coordinates;this.diagram.connect(this.startGateway,this.candidateGateway,{toDisplacement:this.candidateGateway.connectionDisplacement(t)})}}finally{this._arrowSteps=[],this.hasRoutedPreview=!1,this.startGateway=null,this.arrowTo=null,this.candidateGateway=null,this.previewRequestVersion=0,this.cancelScheduledPreview(),this.u()}}};o(Pi,"NodesConnector");let Ut=Pi;const Si=class Si extends O{straight="none";startCoordinates=null;startProposals=[];reset(){this.straight="none",this.startCoordinates=null,this.startProposals=[]}init(){this.diagram.onEvent(vt,t=>{t.shift&&(this.startCoordinates=mt.getInstance().coordinates)}),this.diagram.onEvent(ce,t=>{t.shift||this.reset()}),this.diagram.onEvent(ht,t=>{if(this.startCoordinates){const e=Math.abs(this.startCoordinates.x-t.mouse.x),s=Math.abs(this.startCoordinates.y-t.mouse.y);(e>15||s>15)&&(e>s?this.straight="x":e<s&&(this.straight="y"))}},this.diagram.priorities.Mouse_Move_Straight_Drag),this.diagram.onEvent(Z,()=>{this.reset()},this.diagram.priorities.Mouse_Up_Straight_Drag),this.diagram.onEvent(ut,t=>{if(this.straight!=="none")if(this.startProposals.length===0)this.startProposals=t.proposals.map(e=>new fe(e.node,e.newBox.copy()));else for(const e of t.proposals){const s=this.startProposals.find(n=>n.node.id===e.node.id);switch(this.straight){case"x":e.updateY(s.newBox.y),e.lockY();break;case"y":e.updateX(s.newBox.x),e.lockX();break}}},this.diagram.priorities.Drag_Node_Straight_Drag)}};o(Si,"StraightDrag");let rs=Si;const Ii=class Ii extends O{init(){this.diagram.onEvent(Tt,t=>{t.selected&&console.log(t)},this.diagram.priorities.Node_Selection_Nodes_Resizer)}};o(Ii,"NodesResizer");let os=Ii;const Ai=class Ai extends O{dragThreshold=10;groupedChildren=new Map;init(){this.diagram.onEvent(dt,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Dragger),this.diagram.onEvent(Z,this.handleMouseUp.bind(this),this.diagram.priorities.Mouse_Up_Dragger),this.diagram.onEvent(ht,this.handleMouseMove.bind(this),this.diagram.priorities.Mouse_Move_Selector-1),this.diagram.onEvent(Nt,this.handleScale.bind(this),this.diagram.priorities.Scale_Dragger),this.diagram.onEvent(Dt,t=>{this.draggingNodes.delete(t.node.id)})}constructor(t){super(t)}draggingNodes=new Map;startPoint=new p;startPointScaled=new p;mousePoint=new p;unsubscribe=o(()=>{},"unsubscribe");startDrag(t,e=mt.getInstance().coordinates){this.draggingNodes.clear(),this.groupedChildren.clear(),this.draggingNodes.set(t.id,{node:t,startPoint:t.box.middle}),this.mousePoint=e.copy(),this.startPoint=e.copy().sum(t.box.size.divide(2)),this.startPointScaled=this.diagram.canvas.inverseFit(this.startPoint),this.handleDragAction()}originalEvent=null;handleMouseDown(t){this.originalEvent=t;const e=t.node;!t.cancelled&&e&&e.selected&&(t.cancel(),this.draggingNodes.clear(),this.groupedChildren.clear(),this.mousePoint=new p(t.originalEvent),this.startPoint=this.mousePoint.copy(),this.startPointScaled=this.diagram.canvas.inverseFit(this.mousePoint),this.handleDragAction())}handleMouseMove(t){this.mousePoint=new p(t.originalEvent)}handleDragAction(){this.unsubscribe(),this.unsubscribe=at(Wt(this,Nt,({newScale:t,previousScale:e})=>{this.startPoint.divide(e).multiply(t)}),ha(this.handleDragInterval.bind(this),30))}calcDisplacement(t){return this.diagram.rules.displaceWhenDragOnEdges?((100-t)/10)**2:0}isFullyContained(t,e){return e.x>=t.x&&e.y>=t.y&&e.x+e.width<=t.x+t.width&&e.y+e.height<=t.y+t.height}collectConnectedEdges(t){const e=new Set;return t.forEach(s=>{s.gateways.forEach(n=>{n.incomingEdges.forEach(a=>e.add(a)),n.outgoingEdges.forEach(a=>e.add(a))})}),e}translateEdge(t,e){t.steps.forEach(s=>{s.sum(e)})}updateEdgesAfterBatchMove(t,e){const s=new Map,n=[];e.forEach(a=>{const r=t.get(a.id);if(!r)return;const l=a.coordinates.copy().substract(r);s.set(a.id,l),l.norm>0&&n.push(a)}),n.length&&this.collectConnectedEdges(n).forEach(a=>{const r=s.get(a.from.parent.id),l=s.get(a.to.parent.id);if(r&&l&&r.norm>0&&l.norm>0&&r.copy(!1).substract(l).norm===0){this.translateEdge(a,r);return}a.from.recomputeConnectedEdge(a,"from")})}applyNodePositionProposals(t){const e=new Map(t.map(l=>[l.node.id,l])),s=new Set(this.groupedChildren.keys()),n=new Map;t.forEach(l=>{!l.cancelled&&!s.has(l.node.id)&&n.set(l.node.id,l.node)}),this.groupedChildren.forEach((l,c)=>{const d=this.draggingNodes.get(c);d&&n.set(c,d.node)});const a=[...n.values()],r=new Map(a.map(l=>[l.id,l.coordinates.copy()]));t.forEach(l=>{!l.cancelled&&!s.has(l.node.id)&&l.node.setPosition(l.get().coordinates,{updateConnectedEdges:!1})}),this.groupedChildren.size&&this.groupedChildren.forEach((l,c)=>{const d=e.get(l),g=this.draggingNodes.get(c),x=this.draggingNodes.get(l);if(!g||!x)return;const f=(d?.cancelled?x.startPoint:d?.node.coordinates??x.startPoint).copy().substract(x.startPoint),v=g.startPoint.copy().sum(f);g.node.setPosition(v,{updateConnectedEdges:!1})}),this.updateEdgesAfterBatchMove(r,a)}includeGroupedChildren(){const t=[...this.draggingNodes.values()].filter(({node:s})=>s.state.groupChildren);if(!t.length)return;const e=new Set(this.draggingNodes.keys());this.diagram.nodes.forEach(s=>{if(e.has(s.id)||s.state.movable===!1)return;let n=null,a=Number.POSITIVE_INFINITY;const r=s.box;t.forEach(({node:l})=>{if(this.isFullyContained(l.box,r)){const c=l.box.width*l.box.height;c<a&&(a=c,n=l.id)}}),n!==null&&(this.draggingNodes.set(s.id,{node:s,startPoint:s.coordinates.copy()}),this.groupedChildren.set(s.id,n))})}handleDragInterval(){const t=this.mousePoint;if(this.draggingNodes.size||(this.diagram.getExtension(F).selectedNodes.forEach(e=>{this.draggingNodes.set(e.id,{node:e,startPoint:e.coordinates.copy()})}),this.includeGroupedChildren(),this.draggingNodes.size||this.unsubscribe()),this.draggingNodes.size&&t.copy().substract(this.startPoint).norm>this.dragThreshold){if(t.x<this.diagram.canvas.frameDimensions.x+100){const a=this.calcDisplacement(t.x-this.diagram.canvas.frameDimensions.x);this.diagram.canvas.displace(new p([a,0]))}else if(t.x>this.diagram.canvas.frameDimensions.x+this.diagram.canvas.frameDimensions.width-100){const a=this.calcDisplacement(this.diagram.canvas.frameDimensions.x+this.diagram.canvas.frameDimensions.width-t.x);this.diagram.canvas.displace(new p([-a,0]))}if(t.y<this.diagram.canvas.frameDimensions.y+100){const a=this.calcDisplacement(t.y-this.diagram.canvas.frameDimensions.y);this.diagram.canvas.displace(new p([0,a]))}else if(t.y>this.diagram.canvas.frameDimensions.y+this.diagram.canvas.frameDimensions.height-100){const a=this.calcDisplacement(this.diagram.canvas.frameDimensions.y+this.diagram.canvas.frameDimensions.height-t.y);this.diagram.canvas.displace(new p([0,-a]))}const e=this.diagram.canvas.inverseFit(this.startPoint),s=this.startPointScaled.copy().substract(e),n=[...this.draggingNodes.values()].map(a=>new fe(a.node,new w([...a.startPoint.copy().sum(t.copy().substract(this.startPoint).divide(this.diagram.canvas.scale).substract(s)).raw,...a.node.box.size.raw])));this.emit(new ut(this,n,this.originalEvent?.originalEvent)).cancelled||this.applyNodePositionProposals(n)}}handleMouseUp(){this.draggingNodes.clear(),this.groupedChildren.clear(),this.unsubscribe()}handleScale(t){this.draggingNodes.size}};o(Ai,"Dragger");let ls=Ai,kn=(Ct=class extends O{grid=null;points=null;highlighted=new Set;init(){u.makeObservable(this,{grid:u.observable,setGrid:u.action,points:u.observable,highlighted:u.observable})}setGrid(t,e){this.grid=t,this.points=e}},o(Ct,"PathFindingRenderer"),Ct);const _n=b.createContext(null),fa=Object.freeze({Creator:ns,DistancesBalancer:Rt,Dragger:ls,EdgesDragger:as,GridSnap:it,History:Yt,Hotkeys:es,Measurer:Ft,NodesAligner:Gt,NodesConnector:Ut,NodesResizer:os,PathFindingRenderer:kn,Selector:F,StraightDrag:rs}),Le=class Le extends Et{priorities=new ss;rules=new is(this);focusContentTimer=null;knownClasses=new Map;getClass(t){return this.knownClasses.get(t)}registerClass(t,e=t.name){this.knownClasses.set(e,t)}edgeClass=kt;setDefaultEdge(t){this.edgeClass=t}_extensions=new Map;_nodes=new Map;_edges=new Map;canvas=new ga(this);constructor(t){super(null),this.registerClass(Me),this.registerClass(kt),this.registerClass(ft),this.registerClass(_e),Object.entries(fa).forEach(([e,s])=>{t?.extensions?.[e]!==!1&&this.registerExtension(s)}),u.makeObservable(this,{edges:u.computed,_edges:u.observable,_nodes:u.observable,toggleGrid:u.action})}get edges(){return[...this._edges.values()]}get nodes(){return[...this._nodes.values()]}getUniqueNodeId(t){if(!this._nodes.has(t))return t;let e=1,s=`${t}-${e}`;for(;this._nodes.has(s);)e++,s=`${t}-${e}`;return s}add(t){return u.runInAction(()=>{const e=this.getUniqueNodeId(t.id);e!==t.id&&t.setState("id",e),t.setDiagram(this),this._nodes.set(t.id,t)}),t}addEdge(t){t.from.addOutgoingEdge(t),t.to.addIncomingEdge(t)}connect(t,e,s){const n=new this.edgeClass(this,{hover:!1,dragging:!1,selected:!1,from:t,to:e,label:"",labelPositioning:new p([0,0]),steps:[]});return n.state.displacementStart=s?.fromDisplacement,n.state.displacementEnd=s?.toDisplacement,this.connectWithEdge(t,e,n)}connectWithEdge(t,e,s){const n=s;return t.addOutgoingEdge(n),e.addIncomingEdge(n),this._edges.set(n.id,n),n}delete(t){this.emit(new Dt(this,t)).cancelled||u.runInAction(()=>{t.gateways.forEach(e=>{e.incomingEdges.forEach(this.disconnect.bind(this)),e.outgoingEdges.forEach(this.disconnect.bind(this))}),this._nodes.delete(t.id),t.parent=null})}disconnect(t){this.emit(new he(this,t)).cancelled||u.runInAction(()=>{for(const e of this.nodes)for(const s of e.gateways)s.removeIncomingEdge(t),s.removeOutgoingEdge(t);this._edges.delete(t.id),t.parent=null})}Context=o(({children:t})=>h.jsx(_n.Provider,{value:this,children:t}),"Context");getEdgeById(t){return this._edges.get(t)}getNodeById(t){return this._nodes.get(t)}get showGrid(){return this.rules.toggleGrid}getExtension(t){return this._extensions.get(t)}registerExtension(t){const e=new t(this);e.init(),this._extensions.set(t,e)}toggleGrid(){this.rules.toggleGrid=!this.rules.toggleGrid}export(){return JSON.stringify(this.serialize())}async reset(){let t=this._nodes.size===0;if(!t){let e=null;const s=this.emit(new Re(this,n=>{e=n}));t=await e()&&!s.cancelled}if(t){for(const e of this._nodes.values())this.delete(e);return!0}return!1}serialize(){return{position:{x:this.canvas.displacement.x,y:this.canvas.displacement.y,scale:this.canvas.scale},nodes:this.nodes.map(t=>t.serialize())}}import(t){u.runInAction(()=>{const e=JSON.parse(t),s=e.position,n=!!s&&Number.isFinite(s.x)&&Number.isFinite(s.y)&&Number.isFinite(s.scale);if(n&&(this.canvas.setScale(s.scale),this.canvas.setDisplacement(new p([s.x,s.y]))),e.nodes){const a=new Map;e.nodes.forEach(r=>{const l=this.getClass(r.class);if(!l)throw new Error(`Unable to import node: unknown class '${r.class}'.`);const c=new l(this,{id:r.id}),d=this.add(c);a.set(r.id,d.id)}),e.nodes.forEach(r=>{const l=a.get(r.id);this.getNodeById(l).deserialize({...r,id:l,gateways:r.gateways.map(c=>({...c,outEdges:c.outEdges.map(d=>({...d,toParentId:a.get(d.toParentId)||d.toParentId}))}))})})}n||this.focusContentInViewportWithRetry()})}paste(t){u.runInAction(()=>{const e=JSON.parse(t);if(e.position&&(this.canvas.setScale(e.position.scale),this.canvas.setDisplacement(new p([e.position.x,e.position.y]))),e.nodes?.length){const s=new Map,n=[];e.nodes.forEach(c=>{const d=ts(this,"node",n);s.set(c.id,d),n.push(d)});let a=new p([1/0,1/0]);e.nodes.forEach(c=>{const d=new p([c.box[0],c.box[1]]);d.norm<a.norm&&(a=d)});const l=this.canvas.inverseFit(mt.getInstance().coordinates).substract(a);e.nodes.forEach(c=>{const d=this.getClass(c.class);if(!d)throw new Error(`Unable to paste node: unknown class '${c.class}'.`);const g=new d(this,{id:s.get(c.id)});this.add(g)}),e.nodes.forEach(c=>{const d=s.get(c.id);this.getNodeById(d).deserialize({...c,id:d,gateways:c.gateways.map(g=>({...g,outEdges:g.outEdges.map(x=>({...x,toParentId:s.get(x.toParentId)||x.toParentId}))})),box:[c.box[0]+l.x,c.box[1]+l.y,c.box[2],c.box[3]]})})}})}focusContentInViewport(t=80){if(!this.nodes.length)return!1;const e=this.canvas.frameDimensions;if(e.width<=0||e.height<=0)return!1;let s=1/0,n=1/0,a=-1/0,r=-1/0;for(const g of this.nodes){const x=g.box;s=Math.min(s,x.x),n=Math.min(n,x.y),a=Math.max(a,x.x+x.width),r=Math.max(r,x.y+x.height)}if(!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(a)||!Number.isFinite(r))return!1;const l=Math.max(1,a-s+t*2),c=Math.max(1,r-n+t*2),d=Math.max(.3,Math.min(3,Math.min(e.width/l,e.height/c)));return this.canvas.setScale(d),this.canvas.centerOnPoint(new p([(s+a)/2,(n+r)/2])),!0}focusContentInViewportWithRetry(t=8,e=32){this.focusContentInViewport()||t<=0||(this.focusContentTimer&&clearTimeout(this.focusContentTimer),this.focusContentTimer=setTimeout(()=>{this.focusContentInViewportWithRetry(t-1,e)},e))}};o(Le,"Diagram"),ct(Le,"use",o(()=>b.useContext(_n),"use"));let T=Le;const Pn=o(({id:i,color:t,type:e,width:s,arrowSize:n,flip:a=!1})=>{const r=a?"180":"auto",l="white";switch(e){case"arrow":return h.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:a?0:n*.9,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:t,className:"edge_marker_path"})});case"triangle":return h.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:a?0:n,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:l,stroke:t,strokeWidth:s/2})});case"triangle-filled":return h.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:a?0:n,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:t,className:"edge_marker_path"})});case"diamond":return h.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:a?0:n*.9,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:`M0,${n/2} L${n/2},0 L${n},${n/2} L${n/2},${n} Z`,fill:"white",stroke:t,strokeWidth:s/2})});case"circle-small":return h.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:n/2,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("circle",{cx:n/2,cy:n/2,r:n/4,fill:"white",stroke:t,strokeWidth:s/2})});case"circle-medium":return h.jsx("marker",{id:i,markerWidth:n*1.5,markerHeight:n*1.5,refX:n*1.5/2,refY:n*1.5/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("circle",{cx:n*1.5/2,cy:n*1.5/2,r:n/2,fill:"white",stroke:t,strokeWidth:s/2})});case"measure":return h.jsx("marker",{id:i,markerWidth:n*5,markerHeight:n*5,refX:0,refY:n/2,orient:r,markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:`M0,0 L0,${n/2}`,stroke:t,strokeWidth:3,strokeLinecap:"round"})});default:return null}},"EdgeMarker"),De=class De extends p{constructor(t,e,s,n){super(n),this.id=t,this.edge=e,this.points=s,this.assign(s[0].copy().sum(s[1]).divide(2)),u.makeObservable(this,{points:u.observable})}id;edge;points;copy(){return new De(this.id,this.edge,this.points,super.copy())}};o(De,"Midpoint");let cs=De;function ma(i,t){const e=[];for(let s=0;s<t.length-1;s++){const n=[t[s],t[s+1]],a=n.filter(l=>l instanceof S&&l.mode==="static").length,r=i.steps.length===2&&t.length===2;a===2&&!r||e.push(new cs(String(s),i,n))}return e}o(ma,"getSegmentMidpoints");function xa(i,t){const e=i instanceof S?i.mode:"coordinate",s=i instanceof S?i.manualAxes:"none";return`${t}: x=${i.x}, y=${i.y}, mode=${e}, manualAxes=${s}`}o(xa,"formatPoint");function ya(i,t){const e=t.points[0],s=t.points[1],n=i.steps.findIndex((r,l)=>r===e&&i.steps[l+1]===s);if(n>=0)return n;const a=Number(t.id);return Number.isFinite(a)?a:null}o(ya,"segmentIndexFor");function wa(i,t){if(t.type==="edge")return"clicked: edge path";if(t.type==="endpoint")return`clicked: endpoint ${t.endpoint}`;const e=ya(i,t.midpoint),s=e===null?"unknown":`${e} -> ${e+1}`;return["clicked: drag point",`dragPoint.midpointId=${t.midpoint.id}`,`dragPoint.renderedIndex=${t.renderedIndex}`,`dragPoint.segment=${s}`,`dragPoint.x=${t.midpoint.x}`,`dragPoint.y=${t.midpoint.y}`].join(`
2
- `)}o(wa,"formatClickedTarget");function ba(i,t){return[`edge.id=${i.id}`,`from=${i.from.parent.id}.${i.from.id} orientation=${i.from.orientation}`,`to=${i.to.parent.id}.${i.to.id} orientation=${i.to.orientation}`,wa(i,t),"points:",...i.steps.map(xa)].join(`
3
- `)}o(ba,"formatEdgeDebug");async function va(i){if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(i);return}const t=document.createElement("textarea");t.value=i,t.style.position="fixed",t.style.left="-9999px",document.body.appendChild(t),t.focus(),t.select(),document.execCommand("copy"),t.remove()}o(va,"writeClipboard");function br(i,t){}o(br,"copyEdgeDebugToClipboard");const Ea=o(({edge:i,onMouseDown:t,points:e})=>{const s=ma(i,e);return h.jsx(h.Fragment,{children:s.map((n,a)=>{const r=n.x,l=n.y;return h.jsx("rect",{x:r-6,y:l-6,width:12,height:12,rx:4,className:"edge_drag_point","data-edge-id":i.id,"data-midpoint-id":n.id,"data-midpoint-index":a,onMouseDownCapture:o(c=>{t(n,c)},"onMouseDownCapture")},n.id)})})},"EdgeMidpoints");function xt(i){return i&&(Object.assign(i,{__scalable:!0}),i)}o(xt,"makeScalableComponent");function Ma(i){return i&&(Object.assign(i,{__scalableBack:!0}),i)}o(Ma,"makeBackScalableComponent");const Sn=xt(({coordinates:i,size:t=20,strokeWidth:e=2,rounded:s=!0,stroke:n="#ff0000"})=>{const a=t/2,r=s?"round":"butt";return h.jsxs(h.Fragment,{children:[h.jsx("line",{x1:i.x-a,y1:i.y,x2:i.x+a,y2:i.y,stroke:n,strokeWidth:e,strokeLinecap:r}),h.jsx("line",{x1:i.x,y1:i.y-a,x2:i.x,y2:i.y+a,stroke:n,strokeWidth:e,strokeLinecap:r})]})}),ie=class ie{showDragHints=!1;constructor(){u.makeAutoObservable(this)}};o(ie,"ToolsStates"),ct(ie,"instance",new ie);let Pe=ie;function ka(i){if(i instanceof S)switch(i.mode){case"auto":return"red";case"manual":return"green";case"static":return"yellow"}}o(ka,"crossColor");function _a(i){if(i.length<2)return null;const t=Math.max(0,Math.floor((i.length-2)/2)),e=i[t],s=i[t+1];return e.copy().sum(s).divide(2)}o(_a,"getLabelAnchor");const Pa=y.observer(({edge:i,points:t})=>{const e=i?.state?.label??"",s=_a(t);if(!i||!s)return null;const n=i.state.labelPositioning??new p([0,0]),a=s.x+n.x,r=s.y+n.y;return i.isEditingLabel?h.jsx("foreignObject",{x:a-90,y:r-18,width:180,height:36,children:h.jsx("input",{className:"edge-label-input",value:i.labelDraft??e,autoFocus:!0,onChange:o(c=>{u.runInAction(()=>{i.labelDraft=c.target.value})},"onChange"),onBlur:o(()=>i.confirmLabelEdit?.(),"onBlur"),onKeyDown:o(c=>{c.key==="Enter"&&(c.preventDefault(),i.confirmLabelEdit?.()),c.key==="Escape"&&(c.preventDefault(),i.cancelLabelEdit?.()),c.stopPropagation()},"onKeyDown")})}):e?h.jsxs("g",{className:"edge-label",onDoubleClick:o(c=>{c.stopPropagation(),i.beginLabelEdit?.()},"onDoubleClick"),children:[h.jsx("rect",{x:a-44,y:r-12,width:88,height:24,rx:6,ry:6}),h.jsx("text",{x:a,y:r,textAnchor:"middle",dominantBaseline:"middle",children:e})]}):null}),qt=y.observer(({edge:i,points:t,color:e,width:s=2,arrowSize:n=8,startType:a="none",endType:r="arrow",lineStyle:l="solid",endStroke:c=e,startStroke:d=e,onMidpointMouseDown:g,onEndpointMouseDown:x,className:m,draggable:f})=>{const v=o(P=>b.useMemo(()=>`marker-${P}-${Math.random().toString(36).slice(2)}`,[]),"makeId"),k=v("start"),A=v("end");if(!t||t.length<2)return null;const B="M "+t.map(P=>`${P.x} ${P.y}`).join(" L "),E=l==="dashed"?`${s*3},${s*2}`:l==="dotted"?`${s},${s*2}`:"none",M=!!(i&&f&&(i.state.hover||i.state.dragging||i.state.selected)),H=!!(i&&f&&(i.state.selected||i.state.dragging));return h.jsxs("g",{"data-id":i?.id,className:["edge",i?.state.dragging&&"dragging",i?.state.selected&&"selected",i?.state.hover&&"hover",m].filter(Boolean).join(" "),onMouseEnter:o(()=>{u.runInAction(()=>{i&&(i.state.hover=!0)})},"onMouseEnter"),onMouseLeave:o(()=>{u.runInAction(()=>{i&&(i.state.hover=!1)})},"onMouseLeave"),children:[h.jsxs("defs",{children:[h.jsx(Pn,{id:k,color:d,type:a,width:s,arrowSize:n,flip:!1}),h.jsx(Pn,{id:A,color:c,type:r,width:s,arrowSize:n,flip:!1})]}),h.jsx("path",{d:B,strokeWidth:s+8,fill:"none",className:"edge-hover-area",onClickCapture:o(()=>{},"onClickCapture")}),h.jsx("path",{d:B,fill:"none",className:"edge-path",style:{"--edge-hover-stroke-width":`${Math.max(s+4,6)}px`},stroke:e,strokeWidth:s,strokeDasharray:E,markerStart:a!=="none"?`url(#${k})`:void 0,markerEnd:r!=="none"?`url(#${A})`:void 0,onClickCapture:o(()=>{},"onClickCapture")}),i&&h.jsx(Pa,{edge:i,points:t}),Pe.instance.showDragHints&&t.map((P,D)=>h.jsx(Sn,{coordinates:P,size:15,stroke:ka(P)},D)),M&&h.jsx(Ea,{edge:i,points:t,onMouseDown:o((P,D)=>{g?.(P,D)},"onMouseDown")}),H&&h.jsxs(h.Fragment,{children:[h.jsx("circle",{cx:t[0].x,cy:t[0].y,r:6,className:"edge_endpoint_drag_point","data-edge-id":i?.id,"data-endpoint":"from",onMouseDownCapture:o(P=>{x?.("from",P)},"onMouseDownCapture")}),h.jsx("circle",{cx:t.at(-1).x,cy:t.at(-1).y,r:6,className:"edge_endpoint_drag_point","data-edge-id":i?.id,"data-endpoint":"to",onMouseDownCapture:o(P=>{x?.("to",P)},"onMouseDownCapture")})]})]})}),Sa=xt(y.observer(()=>{const i=T.use(),t=i.getExtension(Ut),e=t.arrowSteps;return e.length?h.jsxs(h.Fragment,{children:[t?.candidateGateway&&h.jsx(Sn,{coordinates:t.candidateGateway.coordinates,stroke:"yellow"}),h.jsx(qt,{points:e,width:2*i.canvas.scale,arrowSize:8*i.canvas.scale})]}):null})),Ia=xt(y.observer(()=>{const t=T.use().getExtension(Ft);return t?.enabled?h.jsx(h.Fragment,{children:h.jsx(qt,{points:t.get(),startType:"measure",endType:"measure",width:2,arrowSize:12,lineStyle:"dotted",startStroke:"red",endStroke:"red",className:"measurement"})}):null})),Aa=b.forwardRef(({children:i,paths:t,transform:e,selected:s,onClick:n,className:a,roundedBorders:r=!1,label:l,labelColor:c,labelFontSize:d,labelFontFamily:g="sans-serif",labelOffset:x,"data-id":m,...f},v)=>{const k=T.use();return h.jsxs("g",{...f,"data-id":m,className:`${a||""} ${s?"selected":""} base_shape`,transform:e,onClick:n,ref:v,children:[h.jsx("defs",{children:t.map((A,B)=>{if(!A.arrow)return null;const E=6,{size:M=E,color:H=A.stroke??"#111"}=A.arrow,P=`arrow-${B}`;return h.jsx("marker",{id:P,viewBox:"0 0 10 10",refX:E*1.5,refY:"5",markerWidth:M,markerHeight:M,orient:"auto-start-reverse",markerUnits:"userSpaceOnUse",children:h.jsx("path",{d:"M 0 0 L 10 5 L 0 10",fill:"none",stroke:H,strokeWidth:Math.max(1,E*.9),strokeLinecap:"round",strokeLinejoin:"round"})},B)})}),t.map((A,B)=>{const{d:E,fill:M="none",stroke:H="#111",strokeWidth:P=3,strokeStyle:D="solid",animated:$=!1,animationDuration:G=1,nonScalingStroke:et=!0,roundedBorders:ne=r,arrow:ot}=A;let lt;switch(D){case"dashed":lt="10 5";break;case"dotted":lt="2 6";break}const ae=$?h.jsx("animate",{attributeName:"stroke-dashoffset",from:"0",to:lt?`-${lt.split(" ").reduce((sn,yr)=>+sn+ +yr,0)}`:"-15",dur:`${G}s`,repeatCount:"indefinite"}):null,Oe=ot?`url(#arrow-${B})`:void 0;return h.jsx("path",{d:E,fill:M,stroke:H,strokeWidth:P,strokeDasharray:lt,strokeLinecap:ne?"round":"butt",strokeLinejoin:ne?"round":"miter",vectorEffect:et?"non-scaling-stroke":void 0,markerStart:ot?.position==="start"||ot?.position==="both"?Oe:void 0,markerEnd:!ot||ot.position==="end"||ot.position==="both"?Oe:void 0,children:ae},B)}),l&&h.jsx("text",{x:x?.x??0,y:x?.y??0,textAnchor:"middle",dominantBaseline:"middle",fontFamily:g,fontSize:d,fill:c,pointerEvents:"none",...k.canvas.scale>1?{shapeRendering:"geometricPrecision",style:{paintOrder:"stroke",stroke:"transparent",strokeWidth:.5,WebkitFontSmoothing:"antialiased",transform:"translateZ(0)"}}:{},children:l}),i]})}),Kt=y.observer(Aa),In=o((i,t=0)=>{const{x:e,y:s,width:n,height:a}=i;if(t<=0)return`M${e},${s} h${n} v${a} h${-n}Z`;const r=Math.min(t,n/2,a/2);return[`M${e+r},${s}`,`h${n-2*r}`,`a${r},${r} 0 0 1 ${r},${r}`,`v${a-2*r}`,`a${r},${r} 0 0 1 ${-r},${r}`,`h${-(n-2*r)}`,`a${r},${r} 0 0 1 ${-r},${-r}`,`v${-(a-2*r)}`,`a${r},${r} 0 0 1 ${r},${-r}`,"Z"].join(" ")},"getRectPath"),Ca=o((i,t)=>`M ${i.x-t}, ${i.y}
1
+ (function(I,w){typeof exports=="object"&&typeof module<"u"?w(exports,require("mobx-react-lite"),require("mobx"),require("react"),require("svg-path-bbox")):typeof define=="function"&&define.amd?define(["exports","mobx-react-lite","mobx","react","svg-path-bbox"],w):(I=typeof globalThis<"u"?globalThis:I||self,w(I.FocusMattersDiagrams={},I.mobxReactLite,I.mobx,I.React))})(this,(function(I,w,g,E){"use strict";var Kn=Object.defineProperty;var $a=(I,w,g)=>w in I?Kn(I,w,{enumerable:!0,configurable:!0,writable:!0,value:g}):I[w]=g;var o=(I,w)=>Kn(I,"name",{value:w,configurable:!0});var K=(I,w,g)=>$a(I,typeof w!="symbol"?w+"":w,g);var jt,$t,Bt,Nt;var Ue={exports:{}},Ot={};var pn;function Jn(){if(pn)return Ot;pn=1;var i=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function e(s,n,r){var a=null;if(r!==void 0&&(a=""+r),n.key!==void 0&&(a=""+n.key),"key"in n){r={};for(var c in n)c!=="key"&&(r[c]=n[c])}else r=n;return n=r.ref,{$$typeof:i,type:s,key:a,ref:n!==void 0?n:null,props:r}}return o(e,"jsxProd"),Ot.Fragment=t,Ot.jsx=e,Ot.jsxs=e,Ot}o(Jn,"requireReactJsxRuntime_production");var fn;function Qn(){return fn||(fn=1,Ue.exports=Jn()),Ue.exports}o(Qn,"requireJsxRuntime");var u=Qn();const X=class X{_data=[];constructor(t,e=!0){if(t||(t=[0,0,0,0]),Array.isArray(t)){if(t.length!==4)throw new Error("Invalid coordinates length");this._data=[...t]}else this._data=[...t._data];if(this.width<0){const s=this.width;this.x+=s,this.width=-s}if(this.height<0){const s=this.height;this.y+=s,this.height=-s}e&&g.makeAutoObservable(this)}get coordinates(){return new m(this.raw.slice(0,2))}get bottomLeft(){return new m([this.x,this.y+this.height])}get bottomMiddle(){return new m([this.x+this.width/2,this.y+this.height])}get bottomRight(){return new m([this.x+this.width,this.y+this.height])}get leftMiddle(){return new m([this.x,this.y+this.height/2])}get middle(){return new m([this.x+this.width/2,this.y+this.height/2])}get rightMiddle(){return new m([this.x+this.width,this.y+this.height/2])}get topLeft(){return this.coordinates}get topMiddle(){return new m([this.x+this.width/2,this.y])}get topRight(){return new m([this.x+this.width,this.y])}get size(){return new m(this.raw.slice(2,4))}get x(){return this.get(0)}get y(){return this.get(1)}get height(){return this.get(3)}get width(){return this.get(2)}set x(t){this.set(0,t)}set y(t){this.set(1,t)}set height(t){this.set(3,t)}set width(t){this.set(2,t)}get norm(){return this.size.substract(this.coordinates).norm}get length(){return this._data.length}get raw(){return g.toJS([...this._data])}get round(){return new X([Math.round(this.x),Math.round(this.y),Math.round(this.width),Math.round(this.height)])}get style(){return{width:this.width,height:this.height,left:this.x,top:this.y}}assign(t){if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof X?t:new X(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this.set(2,e.get(2)),this.set(3,e.get(3)),this}assignCoordinates(t){if(t.length!==2)throw new Error("Invalid number of Coordinates");const e=t instanceof m?t:new m(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this}assignDimensions(t){if(t.length!==2)throw new Error("Invalid number of Coordinates");const e=t instanceof m?t:new m(t);return this.set(2,e.get(0)),this.set(3,e.get(1)),this}bound(t){this.x=Math.min(t.x+t.width-this.width,Math.max(t.x,this.x)),this.y=Math.min(t.y+t.height-this.height,Math.max(t.y,this.y))}collides(t,e=!1){if(t instanceof X){const s=this.x-(e?1:0),n=this.x+this.width+(e?1:0),r=this.y-(e?1:0),a=this.y+this.height+(e?1:0),c=t.x,l=t.x+t.width,d=t.y,h=t.y+t.height;return!(n<=c||l<=s||a<=d||h<=r)}else{const s=this.x,n=this.x+this.width,r=this.y,a=this.y+this.height;return t.x>=s&&t.x<=n&&t.y>=r&&t.y<=a}}copy(){return new X([this.x,this.y,this.width,this.height])}divide(t){return this.set(0,this.get(0)/t),this.set(1,this.get(1)/t),this.set(2,this.get(2)/t),this.set(3,this.get(3)/t),this}edgeDistanceX(t){return this.x>t.x+t.width?-(this.x-t.x-t.width):t.x>this.x+this.width?t.x-this.x-this.width:0}edgeDistanceY(t){return this.y>t.y+t.height?-(this.y-t.y-t.height):t.y>this.y+this.height?t.y-this.y-this.height:0}get(t){return this._data[t]}inflate(t){return this.copy().translate(new m([-t,-t])).assignDimensions(this.size.sum(new m([2*t,2*t])))}multiply(t){return this.set(0,this.get(0)*t),this.set(1,this.get(1)*t),this.set(2,this.get(2)*t),this.set(3,this.get(3)*t),this}scale(t){return this.set(2,this.get(2)+t.get(0)),this.set(3,this.get(3)+t.get(1)),this}set(t,e){this._data[t]=e}substract(t){if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof X?t:new X(t);return this.set(0,this.get(0)-e.get(0)),this.set(1,this.get(1)-e.get(1)),this.set(2,this.get(2)-e.get(2)),this.set(3,this.get(3)-e.get(3)),this}sum(t){if(t instanceof m)this.set(0,this.get(0)+t.get(0)),this.set(1,this.get(1)+t.get(1));else{if(t.length!==4)throw new Error("Invalid number of Dimensions");const e=t instanceof X?t:new X(t);this.set(0,this.get(0)+e.get(0)),this.set(1,this.get(1)+e.get(1)),this.set(2,this.get(2)+e.get(2)),this.set(3,this.get(3)+e.get(3))}return this}toString(){return`(${this.x}, ${this.y}, ${this.width}, ${this.height})`}translate(t){return this.set(0,this.get(0)+t.get(0)),this.set(1,this.get(1)+t.get(1)),this}};o(X,"Dimensions");let b=X;const Ds=class Ds{constructor(t){this.originalEvent=t}originalEvent;get button(){switch(this.originalEvent.button){case 1:return"left";case 2:return"right";case 4:return"middle";case 8:return"back";case 16:return"forward"}return"none"}get position(){return new m(this.originalEvent,!1)}get x(){return this.originalEvent.clientX}get y(){return this.originalEvent.clientY}};o(Ds,"MouseInformation");let qe=Ds;const zs=class zs{constructor(t){this.src=t}src;_cancellable=!0;_cancelled=!1;_bubbles=!0;_spreads=!0;get bubbles(){return this._bubbles}get cancelled(){return this._cancelled}get spreads(){return this._spreads}cancellable(t){return this._cancellable=t,this}cancel(){this._cancellable&&(this._cancelled=!0)}stopPropagation(){this._bubbles=!1}stopImmediatePropagation(){this._spreads=!1,this.stopPropagation()}};o(zs,"DEvent");let fe=zs;const Ts=class Ts extends fe{};o(Ts,"DUIEvent");let Mt=Ts;const Fs=class Fs extends Mt{constructor(t,e){super(t),this.src=t,this.originalEvent=e,this.mouse=new qe(e)}src;originalEvent;mouse;get ctrl(){return this.originalEvent.ctrlKey}get edge(){return this.src.diagram?.getEdgeById(this.originalEvent.target?.closest(".edge")?.dataset.id||"")}get node(){const t=this.originalEvent.target,e=t instanceof globalThis.Element?t.closest(".diagram__node, .node__screenHitArea")?.dataset.id:void 0;if(e)return this.src.diagram?.getNodeById(e);if(t instanceof globalThis.Element&&t.closest(".edge")&&"clientX"in this.originalEvent&&"clientY"in this.originalEvent){const s=document.elementsFromPoint(this.originalEvent.clientX,this.originalEvent.clientY).find(n=>n.closest(".diagram__node"))?.closest(".diagram__node");return this.src.diagram?.getNodeById(s?.dataset.id||"")}}get shift(){return this.originalEvent.shiftKey}get target(){return this.originalEvent.target}};o(Fs,"DMouseEvent");let J=Fs;const Hs=class Hs extends J{};o(Hs,"DClickEvent");let me=Hs;const Gs=class Gs extends J{};o(Gs,"DDoubleClickEvent");let xe=Gs;const Rs=class Rs extends J{};o(Rs,"DMouseDownEvent");let ut=Rs;const Ys=class Ys extends J{};o(Ys,"DMouseUpEvent");let Q=Ys;const Ws=class Ws extends J{};o(Ws,"DMouseMoveEvent");let gt=Ws;const Vs=class Vs extends J{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent;get directionX(){return this.originalEvent.deltaX<0?"left":this.originalEvent.deltaX>0?"right":"none"}get directionY(){return this.originalEvent.deltaY<0?"up":this.originalEvent.deltaY>0?"down":"none"}};o(Vs,"DWheelEvent");let Ze=Vs;const Xs=class Xs extends Mt{constructor(t,e){super(t),this.originalEvent=e}originalEvent;get code(){return this.originalEvent.code}get alt(){return this.originalEvent.altKey}get ctrl(){return this.originalEvent.ctrlKey}get shift(){return this.originalEvent.shiftKey}};o(Xs,"DKeyboardEvent");let Dt=Xs;const Us=class Us extends Dt{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent};o(Us,"DKeyDownEvent");let kt=Us;const qs=class qs extends Dt{constructor(t,e){super(t,e),this.originalEvent=e}originalEvent};o(qs,"DKeyUpEvent");let ye=qs;const Zs=class Zs extends Dt{constructor(t,e){super(t,e),this.orignalEvent=e}orignalEvent};o(Zs,"DKeyPressEvent");let Ke=Zs;const Ks=class Ks extends Mt{};o(Ks,"DCanvasEvent");let zt=Ks;const Js=class Js extends zt{constructor(t,e,s,n){super(t),this.displacement=e,this.newScale=s,this.previousScale=n}displacement;newScale;previousScale};o(Js,"DScaleEvent");let Tt=Js;const Qs=class Qs extends zt{constructor(t,e,s){super(t),this.previousDisplacement=e,this.displacement=s}previousDisplacement;displacement};o(Qs,"DDisplaceEvent");let Je=Qs;const ti=class ti extends fe{};o(ti,"DChangeEvent");let Y=ti;const ei=class ei extends Y{constructor(t,e){super(t),e(this.resolve.bind(this))}callbacks=[];defer(t){this.callbacks.push(t)}async resolve(){return(await Promise.all(this.callbacks.map(t=>t()))).every(t=>t)}};o(ei,"DResetGraphEvent");let Qe=ei;const si=class si extends Y{};o(si,"DNodesConnectionEvent");let Ft=si;const ii=class ii extends Ft{constructor(t,e){super(t),this.origin=e}origin};o(ii,"DNodeConnectionIntentEvent");let ts=ii;const ni=class ni extends Ft{constructor(t,e,s){super(t),this.origin=e,this.target=s}origin;target};o(ni,"DNodesConnectActionEvent");let es=ni;const ri=class ri extends Y{};o(ri,"DNodeChangeTypeEvent");let we=ri;const ai=class ai extends Y{constructor(t,e){super(t),this.src=t,this.node=e}src;node};o(ai,"DDeleteNodeEvent");let Ht=ai;const oi=class oi extends Y{constructor(t,e){super(t),this.src=t,this.edge=e}src;edge};o(oi,"DDeleteEdgeEvent");let be=oi;const ci=class ci extends Mt{constructor(t,e){super(t),this.src=t,this.selected=e}src;selected};o(ci,"DSelectionEvent");let Gt=ci;const li=class li extends Gt{constructor(t,e){super(t,e),this.src=t}src};o(li,"DNodeSelectionEvent");let Rt=li;const di=class di extends Gt{constructor(t,e){super(t,e),this.src=t}src};o(di,"DEdgeSelectionEvent");let ve=di;const hi=class hi extends Y{constructor(t,e){super(t),this.src=t,this.originalEvent=e}src;originalEvent};o(hi,"DDragEvent");let nt=hi;const ui=class ui extends nt{constructor(t,e,s){super(t,s),this.src=t,this.midPoint=e,this.originalEvent=s}src;midPoint;originalEvent};o(ui,"DEdgeDragStartEvent");let Ee=ui;const gi=class gi extends nt{constructor(t,e,s){super(t,s),this.src=t,this.endpoint=e,this.originalEvent=s}src;endpoint;originalEvent};o(gi,"DEdgeEndpointDragStartEvent");let Me=gi;const pi=class pi{constructor(t,e){this.node=t,this.newBox=e,this._updated=e.copy()}node;newBox;_cancelled=!1;_updated;_lockX=null;_lockY=null;cancel(){this._cancelled=!0}get current(){return this._updated.copy()}get cancelled(){return this._cancelled}get(){return this._updated}lockX(){this._lockX=this._updated.x}lockY(){this._lockY=this._updated.y}update(t){this._updated=t,this._lockX!==null&&(this._updated.x=this._lockX),this._lockY!==null&&(this._updated.y=this._lockY)}updateX(t){this._lockX===null&&(this._updated.x=t)}updateY(t){this._lockY===null&&(this._updated.y=t)}};o(pi,"NodePositionProposal");let ke=pi;const fi=class fi extends nt{constructor(t,e,s){super(t,s),this.src=t,this.proposals=e}src;proposals};o(fi,"DDragNodeEvent");let pt=fi;const mi=class mi{constructor(t,e){this.point=t,this.movedAxis=e,this._updated=t.copy()}point;movedAxis;_updated;_lockX=null;_lockY=null;get current(){return this._updated.copy()}get(){return this._updated}lockX(){this._lockX=this._updated.x}lockY(){this._lockY=this._updated.y}update(t){this._updated=t.copy(),this._lockX!==null&&(this._updated.x=this._lockX),this._lockY!==null&&(this._updated.y=this._lockY)}updateX(t){this._lockX===null&&(this._updated.x=t)}updateY(t){this._lockY===null&&(this._updated.y=t)}};o(mi,"EdgePointPositionProposal");let _e=mi;const xi=class xi extends nt{constructor(t,e,s,n){super(t,n),this.src=t,this.proposals=e,this.movedAxis=s}src;proposals;movedAxis};o(xi,"DDragEdgeSegmentEvent");let Se=xi;async function tr(){return(await Promise.resolve().then(()=>La)).DirectedPoint}o(tr,"getDirectedClass");let ss=null;const N=class N{_data=[];constructor(t,e=!0){if(t||(t=[0,0]),Array.isArray(t)){if(t.length!==2)throw new Error("Invalid coordinates length");this._data=[...t]}else t instanceof N?this._data=[...t._data]:t instanceof J||t instanceof nt?this._data=[t.originalEvent.clientX,t.originalEvent.clientY]:t.clientX!==void 0?this._data=[t.clientX,t.clientY]:this._data=[0,0];e&&g.makeObservable(this,{_data:g.observable,set:g.action})}bound(t){return this.x=Math.min(t.get(2),Math.max(t.get(0),this.x)),this.y=Math.min(t.get(3),Math.max(t.get(1),this.y)),this}get abs(){return new N([Math.abs(this.x),Math.abs(this.y)])}assign(t){if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof N?t:new N(t);return this.set(0,e.get(0)),this.set(1,e.get(1)),this}copy(t=!0){return new N(this,t)}distance(t){return this.copy().substract(t).norm}distanceManhattan(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}divide(t){const e=t instanceof N?t.x:t,s=t instanceof N?t.y:t;return this.set(0,this.get(0)/e),this.set(1,this.get(1)/s),this}equals(t){return this.copy().substract(t).norm===0}get(t){return this._data[t]}get length(){return this._data.length}max(t){return new N([Math.max(t,this.x),Math.max(t,this.y)])}get nonObserved(){return new N(this,!1)}get raw(){return g.toJS([...this._data])}get round(){return new N([Math.round(this.x),Math.round(this.y)])}get half(){return this.copy().multiply(.5)}get norm(){return Math.sqrt(this.x**2+this.y**2)}get style(){return{left:this.x,top:this.y}}multiply(t){return typeof t=="number"?(this.set(0,this.get(0)*t),this.set(1,this.get(1)*t)):t instanceof N&&(this.set(0,this.get(0)*t.get(0)),this.set(1,this.get(1)*t.get(1))),this}set(t,e){return this._data[t]=e,this}snapToGrid(t,e="both"){return e!=="y"&&(this.x=Math.round(this.x/t)*t),e!=="x"&&(this.y=Math.round(this.y/t)*t),this}substract(t){if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof N?t:new N(t);return this.set(0,this.get(0)-e.get(0)),this.set(1,this.get(1)-e.get(1)),this}sum(t){if(typeof t=="number")this.set(0,this.get(0)+t),this.set(1,this.get(1)+t);else{if(t.length!==2)throw new Error("Invalid number of coordinates");const e=t instanceof N?t:new N(t);this.set(0,this.get(0)+e.get(0)),this.set(1,this.get(1)+e.get(1))}return this}toDirectedPoint(t){if(ss===null){tr().then(n=>{ss=n});const s=this.copy(!1);return s.direction=t,s}const e=new ss(this);return e.direction=t,e}toDimensions(t){return new b([...this.raw,...t.raw])}get x(){return this.get(0)}get y(){return this.get(1)}set x(t){this.set(0,t)}set y(t){this.set(1,t)}toString(){return`(${this.x}, ${this.y})`}};o(N,"Coordinates");let m=N;function er(i){const t=[];let e=i;for(;e&&e!==Object;)t.push(e),e=Object.getPrototypeOf(e);return t}o(er,"getClassHierarchy");let _t=(jt=class{constructor(t){this.parent=t,g.makeObservable(this,{parent:g.observable,diagram:g.computed})}parent;callbacks=new Map;emit(t){const e=[];for(const s of er(t.constructor)){const n=this.callbacks.get(s);n&&e.push(...n)}e.sort((s,n)=>n.priority-s.priority);for(const{cb:s}of e)if(s(t),!t.spreads)return t;return t.bubbles&&this.parent?.emit(t),t}get diagram(){let t=this.parent;for(;t!==null&&!(t instanceof z);)t=t.parent;return t}onEvent(t,e,s=0){let n=this.callbacks.get(t);return n||(n=[],this.callbacks.set(t,n)),n.push({cb:e,priority:s}),()=>this.offEvent(t,e)}offEvent(t,e){const s=this.callbacks.get(t);s&&this.callbacks.set(t,s.filter(n=>n.cb!==e))}},o(jt,"Element"),jt);const yi=class yi extends _t{constructor(t){super(t),g.makeObservable(this,{_enable:g.observable,toggle:g.action}),this._enable=localStorage.getItem(`enable_${this.constructor.name}`)!=="false"}get diagram(){return this.parent}_enable=!0;get enabled(){return this._enable}disable(){this._enable=!1}enable(){this._enable=!0}toggle(t=!this._enable){this._enable=t,localStorage.setItem(`enable_${this.constructor.name}`,String(this._enable))}};o(yi,"DiagramExtension");let j=yi;const wi=class wi extends j{init(){g.makeObservable(this,{_enabled:g.observable,endPoint:g.observable,startPoint:g.observable}),this.diagram.canvas.onEvent(ut,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Measurer)}_enabled=!1;toggle(){this._enabled=!this._enabled}get enabled(){return this._enabled}endPoint=null;startPoint=null;get(){return this.startPoint?[this.startPoint,this.endPoint]:[]}getMeassurement(){return this.endPoint?.copy().substract(this.startPoint).norm}u=o(()=>{},"u");handleMouseDown(t){this._enabled&&(t.cancel(),t.stopImmediatePropagation(),this.u(),this.u=ot(B(this,"mousemove",this.handleMouseMove),B(this,"mouseup",this.handleMouseUp)),this.startPoint=this.diagram.canvas.inverseFit(new m(t)),this.endPoint=this.diagram.canvas.inverseFit(new m(t)))}handleMouseMove(t){this.startPoint&&this._enabled&&(this.endPoint=this.diagram.canvas.inverseFit(new m(t)))}handleMouseUp(){this.endPoint=null,this.startPoint=null}};o(wi,"Measurer");let Yt=wi;const de=class de extends m{constructor(t,e){super(Array.isArray(e)?e.slice(0,2):e),this.parent=t,g.makeObservable(this,{manualAxes:g.observable,mode:g.observable}),e instanceof de?(this.mode=e.mode,this.manualAxes=e.manualAxes):Array.isArray(e)&&e.length===3?(this.mode=e[2],this.manualAxes=this.mode==="manual"||this.mode==="static"?"both":"none"):Array.isArray(e)&&e.length>=4&&(this.mode=e[2],this.manualAxes=e[3])}parent;mode="auto";manualAxes="none";get manualX(){return this.mode==="manual"&&["x","both"].includes(this.manualAxes)}get manualY(){return this.mode==="manual"&&["y","both"].includes(this.manualAxes)}addManualAxis(t){return this.mode==="static"?this:(this.mode="manual",t==="both"||this.manualAxes==="both"?this.manualAxes="both":this.manualAxes==="none"?this.manualAxes=t:this.manualAxes!==t&&(this.manualAxes="both"),this)}hasManualAxis(t){return t==="x"?this.manualX:this.manualY}markStatic(){return this.mode="static",this.manualAxes="both",this}copy(){return new de(this.parent,[this.x,this.y,this.mode,this.manualAxes])}toString(t=!1){return t?`(${this.x}, ${this.y}): ${this.mode}/${this.manualAxes}`:super.toString()}};o(de,"EdgePoint");let A=de;const bi=class bi extends j{gridSize=50;init(){g.makeObservable(this,{gridSize:g.observable}),this.diagram.onEvent(pt,t=>{if(this._enable)for(const e of t.proposals){const s=new m([Math.round(e.newBox.coordinates.x/this.gridSize)*this.gridSize,Math.round(e.newBox.coordinates.y/this.gridSize)*this.gridSize]);e.update(new b([...s.raw,...e.newBox.size.raw])),e.lockX(),e.lockY()}},this.diagram.priorities.Drag_Node_Snap_To_Grid),this.diagram.onEvent(Se,t=>{if(this._enable)for(const e of t.proposals){const s=e.get().copy();s.snapToGrid(this.gridSize,t.movedAxis),e.update(s),t.movedAxis==="x"?e.lockY():e.lockX()}},this.diagram.priorities.Drag_Edge_Snap_To_Grid)}};o(bi,"GridSnap");let U=bi;const S=.001,sr=3,ir=1e6,nr=5e5;function C(i,t,e=sr){return Math.abs(i-t)<=e}o(C,"almostEqual");function Pe(i,t){return Math.abs(i-t)<=S}o(Pe,"strictlyEqual");function ft(i,t){return C(i.x,t.x)&&C(i.y,t.y)}o(ft,"samePoint");function R(i,t){return C(i.x,t.x)||C(i.y,t.y)}o(R,"axisAligned");function rr(i,t){return Pe(i.x,t.x)&&Pe(i.y,t.y)}o(rr,"strictlySamePoint");function is(i,t){return Pe(i.x,t.x)||Pe(i.y,t.y)}o(is,"strictlyAxisAligned");function rt(i,t){return ft(i,t)||!R(i,t)?null:C(i.y,t.y)?"horizontal":"vertical"}o(rt,"segmentDirection");function ns(i,t,e){if(C(i.x,t.x)&&C(t.x,e.x)||C(i.y,t.y)&&C(t.y,e.y))return!0;const s=(t.x-i.x)*(e.y-t.y)-(t.y-i.y)*(e.x-t.x);return Math.abs(s)<S}o(ns,"collinear");function ar(i){return i instanceof A?i.mode:"auto"}o(ar,"pointMode");function T(i,t){return new m([i,t],!1)}o(T,"rawPoint");function mn(i){switch(i){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"up":return{x:0,y:-1};case"down":return{x:0,y:1}}}o(mn,"vectorFor");function St(i,t){const e=mn(t);return i.x*e.x+i.y*e.y}o(St,"dot");function or(i,t,e=ar(t)){return t instanceof A?(t.mode=e,t):new A(i,[t.x,t.y,e])}o(or,"asEdgePoint");function q(i,t,e,s="auto"){return new A(i,[t,e,s])}o(q,"makePoint");function xn(i){return i.getExtension(U)?.gridSize??50}o(xn,"getGridSize");function Wt(i,t){const e=i.parent.state.box,s=i.state.position;return T(e.x+s.x*e.width+(t?.x??0),e.y+s.y*e.height+(t?.y??0))}o(Wt,"endpointPoint");function W(i,t){const e=i.parent.state.box;return new b([e.x-t,e.y-t,e.width+t*2,e.height+t*2],!1)}o(W,"routingBox");function yn(i,t,e){return i>=t-S&&i<=e+S}o(yn,"coordinateWithinSpan");function cr(i,t,e,s){let n=Number.POSITIVE_INFINITY;for(const r of e){if(t==="right"||t==="left"){if(!yn(i.y,r.y-s,r.y+r.height+s))continue;const c=t==="right"?r.x-i.x:i.x-(r.x+r.width);c>S&&c<n&&(n=c);continue}if(!yn(i.x,r.x-s,r.x+r.width+s))continue;const a=t==="down"?r.y-i.y:i.y-(r.y+r.height);a>S&&a<n&&(n=a)}return Number.isFinite(n)?n:null}o(cr,"blockingDistance");function Ae(i,t,e,s,n){const r=cr(t,e,n,s),a=r!==null&&r<s*2?r/2:s,c=mn(e);return q(i,t.x+c.x*a,t.y+c.y*a)}o(Ae,"adaptiveLeadPoint");function lr(i,t,e,s,n){if(s.orientation==="right"&&n.orientation==="left"&&e.x>t.x||s.orientation==="left"&&n.orientation==="right"&&e.x<t.x){const r=(t.x+e.x)/2;return[q(i,r,t.y),q(i,r,e.y)]}if(s.orientation==="down"&&n.orientation==="up"&&e.y>t.y||s.orientation==="up"&&n.orientation==="down"&&e.y<t.y){const r=(t.y+e.y)/2;return[q(i,t.x,r),q(i,e.x,r)]}return null}o(lr,"facingLeadPoints");function dr(i,t,e,s){if(!is(i,t)||rr(i,t))return!1;const n={x:t.x-i.x,y:t.y-i.y};return St(n,e)>S&&St(n,s)<-S}o(dr,"directRouteIsValid");function wn(i){const t=[],e=new Set;for(const s of i){const n=s.toFixed(3);e.has(n)||(e.add(n),t.push(s))}return t}o(wn,"uniqueNumbers");function hr(i){const t=[];for(const e of i){const s=t.at(-1);s&&ft(s,e)||t.push(e)}return t}o(hr,"compactRawPoints");function bn(i,t,e){if(!R(i,t))return 1;if(C(i.x,t.x)){const l=i.x,d=Math.min(i.y,t.y),h=Math.max(i.y,t.y),x=l>e.x+S&&l<e.x+e.width-S,p=h>e.y+S&&d<e.y+e.height-S;return x&&p?1:0}const s=i.y,n=Math.min(i.x,t.x),r=Math.max(i.x,t.x),a=s>e.y+S&&s<e.y+e.height-S,c=r>e.x+S&&n<e.x+e.width-S;return a&&c?1:0}o(bn,"segmentCollisionPenalty");function ur(i,t,e){if(!R(i,t))return 1;if(C(i.x,t.x)){const l=i.x,d=Math.min(i.y,t.y),h=Math.max(i.y,t.y),x=C(l,e.x)||C(l,e.x+e.width),p=Math.min(h,e.y+e.height)-Math.max(d,e.y);return x&&p>S?1:0}const s=i.y,n=Math.min(i.x,t.x),r=Math.max(i.x,t.x),a=C(s,e.y)||C(s,e.y+e.height),c=Math.min(r,e.x+e.width)-Math.max(n,e.x);return a&&c>S?1:0}o(ur,"segmentBorderOverlapPenalty");function gr(i,t,e={}){let s=i.length,n=null;for(let r=0;r<i.length-1;r++){const a=i[r],c=i[r+1];if(!R(a,c))return Number.POSITIVE_INFINITY;const l=rt(a,c);if(r===0&&e.avoidFirstDirection&&l===e.avoidFirstDirection&&(s+=t.gridSize*10),r===0&&e.avoidFirstBacktrack){const h={x:c.x-a.x,y:c.y-a.y};if(St(h,e.avoidFirstBacktrack)<-S)return Number.POSITIVE_INFINITY}if(r===i.length-2&&e.avoidLastDirection&&l===e.avoidLastDirection&&(s+=t.gridSize*10),r===i.length-2&&e.avoidLastBacktrack){const h={x:a.x-c.x,y:a.y-c.y};if(St(h,e.avoidLastBacktrack)<-S)return Number.POSITIVE_INFINITY}s+=Math.abs(a.x-c.x)+Math.abs(a.y-c.y);const d=C(a.x,c.x)?"x":"y";n&&n!==d&&(s+=t.gridSize/4),n=d;for(const h of t.obstacleBoxes)s+=bn(a,c,h)*ir,s+=ur(a,c,h)*nr}return s}o(gr,"routeScore");function Ie(i,t,e){return e.obstacleBoxes.some(s=>bn(i,t,s)>0)}o(Ie,"segmentHitsAnyBox");function vn(i,t,e){return is(i,t)&&!Ie(i,t,e)}o(vn,"canCollapseToSegment");function Ce(i,t,e,s={}){if(ft(i,t))return[i];let n=null,r=Number.POSITIVE_INFINITY;const a=o(d=>{const h=hr(d),x=gr(h,e,s);x<r&&(n=h,r=x)},"push");R(i,t)&&a([i,t]),a([i,T(t.x,i.y),t]),a([i,T(i.x,t.y),t]);const c=wn([i.x,t.x,(i.x+t.x)/2,...e.laneBoxes.flatMap(d=>[d.x,d.x-e.gridSize,d.x+d.width,d.x+d.width+e.gridSize])]),l=wn([i.y,t.y,(i.y+t.y)/2,...e.laneBoxes.flatMap(d=>[d.y,d.y-e.gridSize,d.y+d.height,d.y+d.height+e.gridSize])]);for(const d of c)a([i,T(d,i.y),T(d,t.y),t]);for(const d of l)a([i,T(i.x,d),T(t.x,d),t]);for(const d of c)for(const h of l)a([i,T(d,i.y),T(d,h),T(t.x,h),t]),a([i,T(i.x,h),T(d,h),T(d,t.y),t]);return n??[i,t]}o(Ce,"routeBridge");function pr(i){const t=[];for(let e=0;e<i.length;e++){const s=i[e],n=i[e+1];if(s.manualAxes==="x"){const r=n?.manualAxes==="x"&&C(s.x,n.x)?[s,n]:[s];t.push({type:"line",direction:"vertical",coordinate:s.x,points:r}),e+=r.length-1;continue}if(s.manualAxes==="y"){const r=n?.manualAxes==="y"&&C(s.y,n.y)?[s,n]:[s];t.push({type:"line",direction:"horizontal",coordinate:s.y,points:r}),e+=r.length-1;continue}t.push({type:"point",point:s})}return t}o(pr,"manualRouteConstraints");function fr(i,t){return i?i.type==="point"?i.point:i.direction==="vertical"?T(i.coordinate,t.y):T(t.x,i.coordinate):t}o(fr,"constraintReferencePoint");function En(i,t,e){return i>t+S&&i<e-S}o(En,"valueInside");function Le(i,t,e,s,n,r){let a=e;const c=i==="x"?"y":"x",l=r.gridSize/2;for(const d of r.obstacleBoxes){const h=c==="x"?d.x:d.y,x=c==="x"?d.x+d.width:d.y+d.height,p=i==="x"?d.x:d.y,f=i==="x"?d.x+d.width:d.y+d.height;if(!En(t,h,x)||!En(a,p,f))continue;const y=n!==void 0?n-a:0,v=s-a,k=(p+f)/2;a=(Math.abs(y)>S?Math.sign(y):Math.abs(v)>S?Math.sign(v):a<k?-1:1)<0?p-l:f+l}return a}o(Le,"safeLineEndpointCoordinate");function mr(i,t,e,s,n){const r=i.points[0],a=i.points.at(-1),c=r?.copy()??q(s,0,0),l=a?.copy()??q(s,0,0);return c.parent=s,l.parent=s,i.direction==="vertical"?(c.addManualAxis("x"),l.addManualAxis("x"),c.x=i.coordinate,c.y=t.y,l.x=i.coordinate,l.y=e.y,n&&(c.y=Le("y",i.coordinate,c.y,e.y,r?.y,n),l.y=Le("y",i.coordinate,l.y,t.y,a?.y,n))):(c.addManualAxis("y"),l.addManualAxis("y"),c.x=t.x,c.y=i.coordinate,l.x=e.x,l.y=i.coordinate,n&&(c.x=Le("x",i.coordinate,c.x,e.x,r?.x,n),l.x=Le("x",i.coordinate,l.x,t.x,a?.x,n))),[c,l]}o(mr,"lineConstraintEndpoints");function xr(i,t){const e=new Map;return{copies:i.map(n=>{const r=n.copy();return r.parent=t,e.set(n,r),r}),copiesByOriginal:e}}o(xr,"copyRouteManualPoints");function yr(i,t,e){const s=t.get(i);if(s)return s;const n=i.copy();return n.parent=e,n}o(yr,"routePointCopy");function wr(i,t){return i.find(e=>e.mode==="static")??i.find(e=>t.has(e)&&e.mode==="manual")??i.find(e=>t.has(e))??i.find(e=>e.mode==="manual")??i[0]}o(wr,"pickPointFromDuplicateRun");function rs(i,t){const e=[];for(let s=0;s<i.length;){let n=s+1;for(;n<i.length&&ft(i[s],i[n]);)n+=1;e.push(wr(i.slice(s,n),t)),s=n}return e}o(rs,"removeAdjacentDuplicates");function Mn(i,t,e,s){return i.mode==="static"?i[e]:t.mode==="static"?t[e]:s.has(i)?i[e]:s.has(t)?t[e]:i[e]}o(Mn,"coordinateAnchor");function Vt(i,t){for(let e=0;e<i.length-1;e++){const s=i[e],n=i[e+1];if(C(s.x,n.x)){const r=Mn(s,n,"x",t);s.x=r,n.x=r}if(C(s.y,n.y)){const r=Mn(s,n,"y",t);s.y=r,n.y=r}}return i}o(Vt,"snapNearlyAlignedPairs");function kn(i,t,e){const s=[...i];let n=s.filter(r=>r.mode==="manual").length;for(let r=1;r<s.length-1;){const a=s[r],c=ns(s[r-1],a,s[r+1]),l=a.mode==="manual"&&t.has(a)&&n>e;if(a.mode==="manual"&&c&&n<=e){const d=s[r+1];if(r+2<s.length&&d.mode==="auto"&&!t.has(d)){s.splice(r+1,1);continue}const h=s[r-1];if(r-2>=0&&h.mode==="auto"&&!t.has(h)){s.splice(r-1,1),r=Math.max(1,r-1);continue}}if(a.mode==="static"||t.has(a)&&!l||!c){r+=1;continue}if(a.mode==="manual"&&n<=e){r+=1;continue}a.mode==="manual"&&(n-=1),s.splice(r,1)}return s}o(kn,"removeRedundantCollinearPoints");function as(i,t,e){const s=[...i];for(let n=0;n<s.length-3;){const r=s[n],a=s[n+1],c=s[n+2],l=s[n+3];if(!(R(r,a)&&R(a,c)&&R(c,l))||!vn(r,l,t)){n+=1;continue}if(a.mode!=="auto"||c.mode!=="auto"||e.has(a)||e.has(c)){n+=1;continue}s.splice(n+1,2)}return s}o(as,"collapseAutoDetours");function _n(i,t,e){const s=[...i];for(let n=!0;n;){n=!1;for(let r=0;r<s.length-3;r++){const a=s[r],c=s[r+1],l=s[r+2],d=s[r+3];if(c.mode==="auto"&&l.mode==="auto"&&!e.has(c)&&!e.has(l)&&R(a,c)&&R(c,l)&&R(l,d)&&vn(a,d,t)){s.splice(r+1,2),n=!0;break}}}return s}o(_n,"collapseAnyAutoRectangles");function br(i,t,e,s){const n=new A(null,[t.x,i.y,"auto"]),r=new A(null,[i.x,t.y,"auto"]),a=o(c=>{let l=0;return e&&R(e,c)&&(l+=1),s&&R(c,s)&&(l+=1),i.mode==="manual"&&e&&rt(e,i)===rt(i,c)&&(l-=2),t.mode==="manual"&&s&&rt(c,t)===rt(t,s)&&(l-=2),l},"score");return a(n)>=a(r)?n:r}o(br,"chooseCorner");function os(i,t){if(i.length<2)return i;const e=[i[0]];for(let s=1;s<i.length;s++){const n=e.at(-1),r=i[s];if(!is(n,r)){const a=e.length>=2?e[e.length-2]:void 0,c=s+1<i.length?i[s+1]:void 0,l=br(n,r,a,c);l.parent=t,e.push(l)}e.push(r)}return e}o(os,"ensureOrthogonalAdjacency");function Sn(i,t,e=new Set){let s=i.map(r=>or(t.parent,r));const n=s.some(r=>r.mode==="manual"&&r.manualAxes==="both")?1:0;for(let r=0;r<4;r++){const a=s.length;if(s=Vt(s,e),s=os(s,t.parent),s=Vt(s,e),s=rs(s,e),s=kn(s,e,n),s=as(s,t,e),s.length===a)break}return s=Vt(s,e),s=os(s,t.parent),s=rs(s,e),s=as(s,t,e),s=_n(s,t,e),s=kn(s,e,n),s.length>0&&(s[0].markStatic(),s.at(-1).markStatic()),s}o(Sn,"normalizeEdgePoints");function Pn(i,t){const e=i.findIndex((s,n)=>n>0&&n<i.length-1&&ft(s,t));e>=0&&i.splice(e,1)}o(Pn,"removeSameCoordinateInteriorPoint");function An(i,t,e,s){let n=[...i];if(n.length<2)return n;ft(n[1],e)?n[1]=e:(Pn(n,e),n.splice(1,0,e));const r=n.length-2;if(r<1)return n;ft(n[r],s)?n[r]=s:(Pn(n,s),n.splice(n.length-1,0,s));const a=new Set([e,s]);return n=Vt(n,a),n=os(n,t.parent),n=Vt(n,a),n=rs(n,a),n=as(n,t,a),n=_n(n,t,a),n.length>0&&(n[0].markStatic(),n.at(-1).markStatic()),n}o(An,"ensureEndpointLeadPresence");function vr(i,t,e,s,n){if(!e||!ns(i,t,e))return!1;const r={x:e.x-i.x,y:e.y-i.y};return St(r,s)>S&&!Ie(i,e,n)}o(vr,"canRemoveSourceLead");function Er(i,t,e,s,n){if(!i||!ns(i,t,e))return!1;const r={x:e.x-i.x,y:e.y-i.y};return St(r,s)<-S&&!Ie(i,e,n)}o(Er,"canRemoveTargetLead");function In(i,t,e,s){const n=[...i];return n.length>2&&vr(n[0],n[1],n[2],t,s)&&n.splice(1,1),n.length>2&&Er(n.at(-3),n.at(-2),n.at(-1),e,s)&&n.splice(n.length-2,1),n.length>0&&(n[0].markStatic(),n.at(-1).markStatic()),n}o(In,"compactRedundantEndpointLeads");function cs(i,t,e,s,n){const r=q(n.parent,Wt(i,e).x,Wt(i,e).y,"static"),a=Wt(t,s),c=q(n.parent,a.x,a.y,"static");if(dr(r,c,i.orientation,t.orientation))return[r,c];const l=lr(n.parent,r,c,i,t),d=l?.[0]??Ae(n.parent,r,i.orientation,n.gridSize,[W(t,0)]),h=l?.[1]??Ae(n.parent,c,t.orientation,n.gridSize,[W(i,0)]),x=new Set([d,h]),p=Ce(d,h,n,{avoidFirstBacktrack:i.orientation,avoidLastBacktrack:t.orientation}),f=Sn([r,...p,c],n,x);return In(An(f,n,d,h),i.orientation,t.orientation,n)}o(cs,"routeAuto");function Mr(i,t,e,s,n,r=null){const a=xn(i),c={gridSize:a,obstacleBoxes:[W(t,0),W(e,0)],laneBoxes:[W(t,a/2),W(e,a/2)],parent:r};return cs(t,e,s,n,c)}o(Mr,"routeOrthogonalBetweenGateways");function Cn(i,t,e=[],s){const n=xn(i),r={gridSize:n,obstacleBoxes:[W(t.from,0),W(t.to,0)],laneBoxes:[W(t.from,n/2),W(t.to,n/2)],parent:t},a=t.steps.filter((G,it)=>it>0&&it<t.steps.length-1&&G.mode==="manual");if(a.length===0)return cs(t.from,t.to,t.state.displacementStart,t.state.displacementEnd,r);const c=Wt(t.from,t.state.displacementStart),l=Wt(t.to,t.state.displacementEnd),d=q(r.parent,c.x,c.y,"static"),h=q(r.parent,l.x,l.y,"static"),x=Ae(r.parent,d,t.from.orientation,n,[W(t.to,0)]),p=Ae(r.parent,h,t.to.orientation,n,[W(t.from,0)]),{copies:f,copiesByOriginal:y}=xr(a,r.parent),v=e.map(G=>yr(G,y,r.parent)),k=new Set([x,p,...v]),$=pr(f),M=[d,x];let _=x;for(let G=0;G<$.length;G++){const it=$[G],ge=_ instanceof A&&_.mode==="manual"?rt(M.at(-2),_)??void 0:void 0;if(it.type==="point"){const gn=Ce(_,it.point,r,{avoidFirstDirection:ge,avoidFirstBacktrack:G===0?t.from.orientation:void 0});M.push(...gn.slice(1)),_=it.point;continue}const dt=fr($[G+1],p);let[ht,pe]=mr(it,_,dt,r.parent,r);if(Ie(ht,pe,r))continue;const Xe=Ce(_,ht,r,{avoidFirstDirection:ge,avoidFirstBacktrack:G===0?t.from.orientation:void 0});M.push(...Xe.slice(1),pe),_=pe}const H=_ instanceof A&&_.mode==="manual"?rt(M.at(-2),_)??void 0:void 0,P=Ce(_,p,r,{avoidFirstDirection:H,avoidLastDirection:rt(p,h)??void 0,avoidLastBacktrack:t.to.orientation});M.push(...P.slice(1),h);const O=Sn(M,r,k),L=In(An(O,r,x,p),t.from.orientation,t.to.orientation,r);return L.some(G=>G.mode==="manual")?L:cs(t.from,t.to,t.state.displacementStart,t.state.displacementEnd,r)}o(Cn,"routeOrthogonalEdge");const vi=class vi extends _t{state;constructor(t,e){super(t),this.state={allowDisplace:!0,stroke:"transparent",strokeWidth:10,radius:5,incomingEdges:[],outgoingEdges:[],position:new m,...e},g.makeObservable(this,{addIncomingEdge:g.action,addOutgoingEdge:g.action,state:g.observable,removeIncomingEdge:g.action,removeOutgoingEdge:g.action})}addIncomingEdge(t){this.state.incomingEdges.find(e=>e.id===t.id)||this.state.incomingEdges.push(t)}addOutgoingEdge(t){this.state.outgoingEdges.find(e=>e.id===t.id)||(this.state.outgoingEdges.push(t),t.steps.length===0&&this.updateEdges())}canConnect(t){return(this.state.maxIncomingConnections===void 0||this.state.maxIncomingConnections>this.state.incomingEdges.length)&&!this.state.incomingEdges.find(e=>e.from===t)}connectionDisplacement(t){return this.direction==="horizontal"&&Math.abs(t.y-this.coordinates.y)>10?new m([0,t.y-this.coordinates.y]):this.direction==="vertical"&&Math.abs(t.x-this.coordinates.x)>10?new m([t.x-this.coordinates.x,0]):new m([0,0])}connectionDistance(t){if(this.direction==="vertical"){const s=Math.abs(this.coordinates.y-t.y);return s<20?Math.abs(this.coordinates.x-t.x)+s**5:1/0}const e=Math.abs(this.coordinates.x-t.x);return e<20?Math.abs(this.coordinates.y-t.y)+e**5:1/0}removeIncomingEdge(t){for(let e=this.state.incomingEdges.length-1;e>=0;e--)this.state.incomingEdges[e].id===t.id&&this.state.incomingEdges.splice(e,1)}removeOutgoingEdge(t){for(let e=this.state.outgoingEdges.length-1;e>=0;e--)this.state.outgoingEdges[e].id===t.id&&this.state.outgoingEdges.splice(e,1)}get coordinates(){return this.state.position.copy().multiply(this.parent.box.size).sum(this.parent.coordinates)}get fill(){return this.state.fill}get diagram(){return this.parent.diagram}get incomingEdges(){return[...this.state.incomingEdges]}get outgoingEdges(){return[...this.state.outgoingEdges]}get radius(){return this.state.radius}get relativePosition(){return this.state.position.copy()}get stroke(){return this.state.stroke}get strokeWidth(){return this.state.strokeWidth}get id(){return this.state.id}get direction(){return["down","up"].includes(this.state.orientation)?"vertical":"horizontal"}get orientation(){return this.state.orientation}recomputeConnectedEdge(t,e){t.setSteps(Cn(this.diagram,t))}updateEdges(){for(const t of this.state.incomingEdges)this.recomputeConnectedEdge(t,"to");for(const t of this.state.outgoingEdges)this.recomputeConnectedEdge(t,"from")}get remainingSlots(){return this.state.maxOutgoingConnections-this.state.outgoingEdges.length}deserialize(t){this.state.fill=t.fill,this.state.id=t.id,this.state.orientation=t.orientation,this.state.radius=t.radius,this.state.stroke=t.stroke,this.state.strokeWidth=t.strokeWidth,this.state.position.assign(t.coordinates),t.outEdges.forEach(e=>{const s=this.diagram.getClass(e.class);if(!s)throw new Error(`Unknown edge class '${e.class}' on gateway '${this.id}'.`);const n=new s(this,{from:this});this.diagram.getNodeById(e.toParentId)&&n.deserialize(e)})}serialize(){const{fill:t,id:e,orientation:s,radius:n,stroke:r,strokeWidth:a,state:{position:{raw:c}}}=this,l=this.outgoingEdges.map(d=>d.serialize());return{coordinates:c,fill:t,id:e,orientation:s,radius:n,stroke:r,strokeWidth:a,outEdges:l,class:this.constructor.name}}};o(vi,"Gateway");let mt=vi;const Ei=class Ei{_data=new Set;constructor(){g.makeAutoObservable(this)}add(...t){for(const e of t)this._data.add(e)}delete(t){this._data.delete(t)}toggle(t){this._data.has(t)?this.delete(t):this.add(t)}get string(){return[...this._data].join(" ")}};o(Ei,"ClassList");let ls=Ei,je=($t=class extends _t{_gateways=new Map;state;classList=new ls;get selected(){return this.state.selected}constructor(t,e){super(t),this.state={...e,box:e.box??new b([0,0,100,80]),zIndex:e.zIndex??100},this.classList.add("diagram__node"),g.makeObservable(this,{state:g.observable,selected:g.computed,_gateways:g.observable,setState:g.action}),this.initializeGateways()}canSelect(){return!this.state.selected&&this.state.selectable!==!1}canUnselect(){return!!this.state.selected}setDiagram(t){this.parent=t}setState(t,e){this.state[t]=e}initializeGateways(){this._gateways.set("left",new mt(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"left",orientation:"left",position:new m([0,.5])})),this._gateways.set("right",new mt(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"right",orientation:"right",position:new m([1,.5])})),this._gateways.set("up",new mt(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"up",orientation:"up",position:new m([.5,0])})),this._gateways.set("down",new mt(this,{maxIncomingConnections:1/0,maxOutgoingConnections:1/0,id:"down",orientation:"down",position:new m([.5,1])}))}get box(){return this.state.box.copy()}get coordinates(){return this.box.coordinates}displace(t){this.state.box.sum([...t.raw,0,0])}get id(){return this.state.id}get gateways(){return[...this._gateways.values()]}dragEventMouseStartPosition=null;dragEventStartPosition=null;getGateway(t){return this._gateways.get(t)}setDimentions(t){this.state.box.assignDimensions(t)}updateConnectedEdges(){const t=new Set;for(const e of this._gateways.values())e.incomingEdges.forEach(s=>t.add(s)),e.outgoingEdges.forEach(s=>t.add(s));t.forEach(e=>e.from.recomputeConnectedEdge(e,"from"))}setPosition(t,e){const s=new b(this.state.box.raw,!1);this.state.box.assignCoordinates(t).bound(new b([0,0,...this.diagram.canvas.size.raw],!1)),e?.updateConnectedEdges!==!1&&s.substract(this.state.box).norm&&this.updateConnectedEdges()}deserialize(t){this.state.box.assign(t.box),this.state.id=t.id,this.state.label=t.label,this.state.movable=t.movable,this.state.selectable=t.selectable,this.state.fill=t.fill,this.state.labelFontSize=t.labelFontSize,this.state.stroke=t.stroke,this.state.strokewWidth=t.strokewWidth,t.gateways.forEach(e=>{const s=this._gateways.get(e.id)?.incomingEdges||[],n=this.diagram?.getClass(e.class);if(!n)throw new Error(`Unknown gateway class '${e.class}' on node '${this.id}'.`);this._gateways.set(e.id,new n(this,{id:e.id}));for(const r of s)this._gateways.get(e.id)?.addIncomingEdge(r)}),t.gateways.forEach(e=>{this._gateways.get(e.id)?.deserialize(e)}),this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>{this.diagram?.connectWithEdge(s.from,s.to,s)}))}serialize(){const{box:{raw:t},id:e,label:s,movable:n,selectable:r,fill:a,labelFontSize:c,selected:l,stroke:d,strokewWidth:h}=this.state,x=this.gateways.map(p=>p.serialize());return{box:t,id:e,label:s,movable:n,selectable:r,selected:l,gateways:x,fill:a,labelFontSize:c,stroke:d,strokewWidth:h,class:this.constructor.name}}RenderOverlay=null;RenderScreen=null},o($t,"Node"),$t);const he=class he{static getInstance(){return this.instance||(this.instance=new he),this.instance}x=0;y=0;get coordinates(){return new m([this.x,this.y])}constructor(){g.makeAutoObservable(this),document.addEventListener("mousemove",t=>{g.runInAction(()=>{this.x=t.clientX,this.y=t.clientY})})}};o(he,"Mouse"),K(he,"instance",null);let xt=he,kr=Number.MIN_SAFE_INTEGER;const Mi=class Mi extends _t{constructor(t,e){super(t),this.state=e,g.makeObservable(this,{state:g.observable,setSteps:g.action,arrowHeadEnd:g.computed,arrowHeadStart:g.computed,from:g.computed,hasManualSteps:g.computed,pathType:g.computed,steps:g.computed,stroke:g.computed,strokeWidth:g.computed,setState:g.action})}state;id=String(kr++);get arrowHeadEnd(){return this.state.arrowHeadEnd}get arrowHeadStart(){return this.state.arrowHeadStart}get from(){return this.state.from}get hasManualSteps(){return this.state.steps.find(t=>t.mode==="manual")}get lineStyle(){return this.state.lineStyle}get pathType(){return this.state.pathType}get steps(){return this.state.steps}get stroke(){return this.state.stroke}get strokeWidth(){return this.state.strokeWidth}collides(t){for(let e=0;e<this.steps.length-1;e++){const s=this.steps[e],n=this.steps[e+1];if(new b([...s.raw,...n.copy().substract(s).raw]).collides(t))return!0}return!1}setState(t,e){this.state[t]=e}setSteps(t){this.state.steps=t.map(e=>e instanceof A?e:new A(this,e)),this.state.steps[0].markStatic(),this.state.steps.at(-1).markStatic()}get to(){return this.state.to}deserialize(t){this.state.arrowHeadEnd=t.arrowHeadEnd,this.state.arrowHeadStart=t.arrowHeadStart,this.state.lineStyle=t.lineStyle,this.state.pathType=t.pathType,this.state.stroke=t.stroke,this.state.strokeWidth=t.strokeWidth,this.state.displacementEnd=t.displacementEnd?new m(t.displacementEnd):void 0,this.state.displacementStart=t.displacementStart?new m(t.displacementStart):void 0,this.state.steps=t.steps.map(e=>new A(this,e)),this.state.to=this.state.from.diagram.getNodeById(t.toParentId).getGateway(t.to),this.state.from.diagram.addEdge(this)}serialize(){const{arrowHeadEnd:t,arrowHeadStart:e,lineStyle:s,pathType:n,steps:r,stroke:a,strokeWidth:c,to:{id:l,parent:{id:d}}}=this;return{arrowHeadEnd:t,arrowHeadStart:e,displacementEnd:this.state.displacementEnd?.raw,displacementStart:this.state.displacementStart?.raw,lineStyle:s,pathType:n,steps:r.map(h=>[...h.raw,h.mode,h.manualAxes]),stroke:a,strokeWidth:c,to:l,toParentId:d,class:this.constructor.name}}dragStart(t,e){e.nativeEvent.stopImmediatePropagation(),this.emit(new Ee(this,t,e))}dragEndpoint(t,e){e.nativeEvent.stopImmediatePropagation(),this.emit(new Me(this,t,e))}};o(Mi,"Edge");let Pt=Mi;const Ln={};function ds(i,t,e=[]){let s=Ln[t]||0;for(;e.includes(`${t}${s}`)||i.getNodeById(`${t}${s}`);)s++;return Ln[t]=s+1,`${t}${s}`}o(ds,"getIdForNode");const ki=class ki extends j{selectionMode="element";_selection=new Set;_edgesSelection=new Set;endPoint=null;startPoint=null;copy(){const t=[],e=new Map,s=[];for(const n of this._selection){const r=ds(this.diagram,"node",s);e.set(n.id,r),s.push(r)}for(const n of this._selection){const r=n.serialize();r.id=e.get(r.id),r.gateways.forEach(a=>{a.outEdges.forEach(c=>{c.toParentId=e.get(c.toParentId)})}),t.push(r)}return JSON.stringify({nodes:t})}init(){g.makeObservable(this,{_selection:g.observable,box:g.computed,endPoint:g.observable,selectedNodes:g.computed,selectedEdges:g.computed,selectionMode:g.observable,selectNode:g.action,startPoint:g.observable,toggleSelectionMode:g.action,unselectNode:g.action,handleMouseUp:g.action}),this.diagram.onEvent(ut,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Selector),this.diagram.onEvent(Ht,t=>{this._selection.delete(t.node)}),this.diagram.onEvent(be,t=>{this._edgesSelection.delete(t.edge)});for(const t of this.diagram.nodes)t.selected&&this._selection.add(t)}toggleSelectionMode(t=this.selectionMode==="area"?"element":"area"){this.selectionMode=t}get selectedNodes(){return[...this._selection]}get selectedEdges(){return[...this._edgesSelection]}get box(){return!this.startPoint||!this.endPoint?new b:this.diagram.canvas.inverseFit(new b([...this.startPoint.raw,...this.endPoint.copy().substract(this.startPoint).raw]))}clearSelection(t=()=>!0){for(const e of this._selection)t(e)&&this.unselectNode(e);for(const e of this._edgesSelection)this.unselectEdge(e)}selectEdge(t){this.emit(new ve(t,!0)).cancelled||(t.setState("selected",!0),this._edgesSelection.add(t))}selectNode(t){t.canSelect()&&!this.emit(new Rt(t,!0)).cancelled&&(t.setState("selected",!0),this._selection.add(t))}unselectEdge(t){this.emit(new ve(t,!1)).cancelled||(t.setState("selected",!1),this._edgesSelection.delete(t))}unselectNode(t){t.canUnselect()&&!this.emit(new Rt(t,!1)).cancelled&&(t.setState("selected",!1),this._selection.delete(t))}unbind=o(()=>{},"unbind");handleMouseDown=o(t=>{if(this.unbind(),g.runInAction(()=>{this.startPoint=new m(t)}),this.selectionMode==="area")t.cancel(),this.unbind=ot(qt(this,Q,this.handleMouseUp),qt(this,gt,this.handleMouseMove));else{const e=t.edge?.state.selected??t.node?.selected;!t.ctrl&&!t.shift&&!e&&this.clearSelection(),t.edge?this.selectEdge(t.edge):t.node?this.selectNode(t.node):this.clearSelection()}},"handleMouseDown");handleMouseMove=o(t=>{g.runInAction(()=>{this.endPoint=xt.getInstance().coordinates});for(const e of this.diagram.nodes){e.box.collides(this.box)?this.selectNode(e):this.unselectNode(e);for(const s of e.gateways)for(const n of s.outgoingEdges)if(n.collides(this.box)){this.selectEdge(n);break}else this.unselectEdge(n)}},"handleMouseMove");handleMouseUp=o(t=>{this.unbind(),this.endPoint=null,this.startPoint=null},"handleMouseUp")};o(ki,"Selector");let D=ki;const $e=new Map;function jn(i){$e.has(i)||$e.set(i,Number.MIN_SAFE_INTEGER);const t=$e.get(i);return $e.set(i,t+1),`${i}_${t}`}o(jn,"getUniqueId");function at(i,t){return Math.abs(i-t)}o(at,"d");const _i=class _i extends j{gridSize=50;horizontalSuggestionProviders=[];verticalSuggestionProviders=[];proposals=[];registerHorizontalSuggestionProvider(t){return this.horizontalSuggestionProviders.push(t),()=>{this.horizontalSuggestionProviders=this.horizontalSuggestionProviders.filter(e=>e!==t)}}registerVerticalSuggestionProvider(t){return this.verticalSuggestionProviders.push(t),()=>{this.verticalSuggestionProviders=this.verticalSuggestionProviders.filter(e=>e!==t)}}clear(){this.proposals=[]}init(){g.makeObservable(this,{clear:g.action,proposals:g.observable}),B(this,"keydown",t=>{t.ctrlKey&&this.clear()}),this.diagram.onEvent(Q,()=>{this.clear()}),this.diagram.onEvent(pt,t=>{if(this.clear(),this.enabled){const e=this.diagram.canvas.frameDimensions.norm/2,s=this.gridSize/5*2,n=this.gridSize/3;if(t.proposals.length>=1){const r={HC:[],HL:[],HR:[],VB:[],VM:[],VT:[]},a=t.proposals[0],c={H:1/0,V:1/0};let l=!1,d=!1;for(const h of this.diagram.nodes)if(h.id!==a.node.id&&!t.proposals.find(x=>x.node.id===h.id)){const x=Math.abs(a.newBox.edgeDistanceX(h.box)),p=Math.abs(a.newBox.edgeDistanceY(h.box));if(x<e){{const f=at(h.box.middle.y,a.newBox.middle.y);f<s&&(r.VM.push({distance:f,element:a.node,position:h.box.middle.y,range:[h.box.rightMiddle.x,a.newBox.x]}),f<n&&f<c.V&&(c.V=f,d=!0,a.update(new b([a.current.x,h.box.middle.y-a.newBox.height/2,...a.newBox.size.raw]))))}{const f=at(h.box.y,a.newBox.y);f<s&&(r.VT.push({distance:f,element:a.node,position:h.box.y,range:[h.box.rightMiddle.x,a.newBox.x]}),f<n&&f<c.V&&(c.V=f,d=!0,a.update(new b([a.current.x,h.box.y,...a.newBox.size.raw]))))}{const f=at(h.box.bottomMiddle.y,a.newBox.bottomMiddle.y);f<s&&(r.VB.push({distance:f,element:a.node,position:h.box.bottomMiddle.y,range:[h.box.rightMiddle.x,a.newBox.x]}),f<n&&f<c.V&&(c.V=f,d=!0,a.update(new b([a.current.x,h.box.bottomMiddle.y-a.newBox.height,...a.newBox.size.raw]))))}}if(p<e){{const f=at(h.box.x,a.newBox.x);f<s&&(r.HL.push({distance:f,element:a.node,position:h.box.x,range:[h.box.bottomMiddle.y,a.newBox.y]}),f<n&&f<c.H&&(c.H=f,l=!0,a.update(new b([h.box.x,a.current.y,...a.newBox.size.raw]))))}{const f=at(h.box.middle.x,a.newBox.middle.x);f<s&&(r.HC.push({distance:f,element:a.node,position:h.box.middle.x,range:[h.box.bottomMiddle.y,a.newBox.y]}),f<n&&f<c.H&&(c.H=f,l=!0,a.update(new b([h.box.middle.x-a.newBox.width/2,a.current.y,...a.newBox.size.raw]))))}{const f=at(h.box.rightMiddle.x,a.newBox.rightMiddle.x);f<s&&(r.HR.push({distance:f,element:a.node,position:h.box.rightMiddle.x,range:[h.box.bottomMiddle.y,a.newBox.y]}),f<n&&f<c.H&&(c.H=f,l=!0,a.update(new b([h.box.rightMiddle.x-a.newBox.width,a.current.y,...a.newBox.size.raw]))))}}}for(const h of this.verticalSuggestionProviders)for(const x of h(a.node,a.newBox)){const p=at(x.nodeY,a.newBox.y);p>=s||(r.VM.push({distance:p,element:a.node,position:x.guideY,range:x.range}),p<n&&p<c.V&&(c.V=p,d=!0,a.update(new b([a.current.x,x.nodeY,...a.newBox.size.raw]))))}for(const h of this.horizontalSuggestionProviders)for(const x of h(a.node,a.newBox)){const p=at(x.nodeX,a.newBox.x);p>=s||(r.HL.push({distance:p,element:a.node,position:x.guideX,range:x.range}),p<n&&p<c.H&&(c.H=p,l=!0,a.update(new b([x.nodeX,a.current.y,...a.newBox.size.raw]))))}Object.entries(r).forEach(([h,x])=>{g.runInAction(()=>{x.forEach(p=>{h.startsWith("H")?this.proposals.push({x:p.position,type:"h",range:p.range,id:jn("alignment-proposal")}):this.proposals.push({y:p.position,type:"v",range:p.range,id:jn("alignment-proposal")})})})}),l&&a.lockX(),d&&a.lockY()}}},this.diagram.priorities.Drag_Node_Aligner)}};o(_i,"NodesAligner");let At=_i;const Si=class Si extends j{gridSize=25;proposals=[];clear(){this.proposals=[]}init(){g.makeObservable(this,{clear:g.action,proposals:g.observable}),this.diagram.onEvent(Q,()=>{this.clear()}),this.diagram.onEvent(pt,t=>{if(this.clear(),this.enabled){const e=this.diagram.canvas.frameDimensions.norm/2;if(t.proposals.length>=1){const s=t.proposals[0];let n=null,r=1/0,a=null,c=1/0,l=null,d=1/0,h=null,x=1/0;for(const p of this.diagram.nodes){const f=s.newBox.edgeDistanceX(p.box),y=s.newBox.edgeDistanceY(p.box);p.id!==s.node.id&&Math.min(f,y)<e&&(y===0&&(f<0?d>-f&&(d=-f,l=p):x>f&&(x=f,h=p)),f===0&&(y<0?r>-y&&(r=-y,n=p):c>y&&(c=y,a=p)))}if(n&&a){const p=-s.newBox.edgeDistanceY(n.box),f=s.newBox.edgeDistanceY(a.box);Math.abs(p-f)<this.gridSize&&(this.proposals.push({from:s.node.box.topMiddle,to:new m([s.node.box.topMiddle.x,n.box.bottomMiddle.y])}),this.proposals.push({from:s.node.box.bottomMiddle,to:new m([s.node.box.bottomMiddle.x,a.box.topMiddle.y])}),s.updateY((n.box.bottomMiddle.y+a.box.topMiddle.y)/2-s.newBox.height/2),s.lockY())}if(l&&h){const p=-s.newBox.edgeDistanceX(l.box),f=s.newBox.edgeDistanceX(h.box);Math.abs(f-p)<this.gridSize&&(this.proposals.push({from:s.node.box.rightMiddle,to:new m([h.box.leftMiddle.x,s.node.box.rightMiddle.y])}),this.proposals.push({from:s.node.box.leftMiddle,to:new m([l.box.rightMiddle.x,s.node.box.leftMiddle.y])}),s.updateX((h.box.leftMiddle.x+l.box.rightMiddle.x)/2-s.newBox.width/2),s.lockX())}}}},this.diagram.priorities.Drag_Node_Distances_Balancer)}};o(Si,"DistancesBalancer");let Xt=Si;const Pi=class Pi extends j{windowTime=100;maxSize=50;index=-1;snapshots=[];async avoidEvents(t){this.disable();try{await t()}finally{this.enable()}}unbind=o(()=>{},"unbind");window(){this.enabled&&(this.unbind(),this.unbind=ot(_r(()=>{g.runInAction(()=>{this.snapshots.splice(this.index+1),this.snapshots.push(this.diagram.export()),this.snapshots.splice(0,Math.max(0,this.snapshots.length-this.maxSize)),this.index=this.snapshots.length-1})},this.windowTime)))}redo(){this.hasNext&&this.avoidEvents(async()=>{this.index=Math.min(this.snapshots.length-1,this.index+1),await this.diagram.reset(),this.diagram.import(this.snapshots[this.index])})}undo(){this.hasPrevious&&this.avoidEvents(async()=>{this.index=Math.max(-1,this.index-1),await this.diagram.reset(),this.diagram.import(this.snapshots[this.index]||"{}")})}get hasNext(){return this.index<this.snapshots.length-1}get hasPrevious(){return this.index>-1}init(){g.makeObservable(this,{index:g.observable,hasNext:g.computed,hasPrevious:g.computed,redo:g.action,undo:g.action}),this.diagram.onEvent(Y,t=>{t.cancelled||this.window()},this.diagram.priorities.Change_History),this.window()}};o(Pi,"History");let Ut=Pi;const Ai=class Ai extends j{hotkeys=[];isEditableTarget(t){return t instanceof HTMLElement?t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement||t instanceof HTMLButtonElement||t.isContentEditable:!1}shouldIgnoreHotkeys(t){return this.isEditableTarget(t.originalEvent.target)||this.isEditableTarget(document.activeElement)}get measurer(){return this.diagram.getExtension(Yt)}get selector(){return this.diagram.getExtension(D)}match(t,e){return!(e.ctrl!==void 0&&t.ctrl!==e.ctrl||e.shift!==void 0&&t.shift!==e.shift||e.alt!==void 0&&t.alt!==e.alt||e.code!==void 0&&t.code!==e.code)}init(){this.diagram.onEvent(kt,async t=>{if(!this.shouldIgnoreHotkeys(t)&&!this.revertHotkey.has(t.code)){for(const e of this.hotkeys)if(this.match(t,e)&&(e.cb(t),!t.spreads))return;switch(t.code){case"Space":{const e=this.measurer.enabled,s=!e&&this.selector.selectionMode==="area";e||this.selector.toggleSelectionMode(s?"element":"area"),this.revertHotkey.set(t.code,()=>{e?this.measurer.toggle():this.selector.toggleSelectionMode(s?"area":"element")});break}case"KeyC":t.ctrl&&navigator.clipboard.writeText(this.selector.copy());break;case"KeyV":t.ctrl&&this.diagram.paste(await navigator.clipboard.readText());break;case"KeyM":this.selector.toggleSelectionMode("element");break;case"KeyS":t.ctrl||this.selector.toggleSelectionMode("area");break;case"KeyZ":t.ctrl&&this.diagram.getExtension(Ut).undo();break;case"KeyY":t.ctrl&&this.diagram.getExtension(Ut).redo();break;case"KeyR":this.measurer.toggle();break;case"ControlLeft":case"ControlRight":t.cancel();{const e=this.diagram.getExtension(U);e?.toggle();const s=this.diagram.getExtension(At);s?.toggle();const n=this.diagram.getExtension(Xt);n?.toggle(),this.revertHotkey.set(t.code,()=>{e?.toggle(),s?.toggle(),n?.toggle()})}break;case"Delete":this.diagram.getExtension(D).selectedNodes.forEach(e=>{this.diagram.delete(e)}),this.diagram.getExtension(D).selectedEdges.forEach(e=>{this.diagram.disconnect(e)})}}}),document.addEventListener("keyup",()=>{for(const t of this.revertHotkey.keys())this.revertHotkey.get(t)?.(),this.revertHotkey.delete(t)})}register(t){return this.hotkeys.push(t),()=>{this.hotkeys=this.hotkeys.filter(e=>e!==t)}}revertHotkey=new Map};o(Ai,"Hotkeys");let hs=Ai;function qt(i,t,e,s){if(i.diagram){const n=e.bind(i);return i.diagram.onEvent(t,n,s),()=>{i.diagram?.offEvent(t,n)}}throw new Error("Cannot bind to unexistent diagram")}o(qt,"bindDiagram");function B(i,t,e,s){const n=e.bind(i);return document.addEventListener(t,n,s),()=>{document.removeEventListener(t,n,s)}}o(B,"bindDocument");function $n(i,t){const e=setInterval(i,t);return()=>{clearInterval(e)}}o($n,"bindInterval");function _r(i,t){const e=setTimeout(i,t);return()=>{clearTimeout(e)}}o(_r,"bindTimeout");function ot(...i){return()=>{i.forEach(t=>t())}}o(ot,"bind");let Sr=(Bt=class extends _t{unbindDocumentEvents=[];mouseSessionStartedInFrame=!1;_displacement=new m([-5e3,-5e3]);_scale=1;gridSize=50;size=new m([1e6,1e6]);get scale(){return this._scale}element=null;get elementPosition(){if(!this.element)return new m([0,0]);const t=this.element.getBoundingClientRect();return new m([t.x,t.y])}get elementDimensions(){if(!this.element)return new b([0,0,0,0]);const t=this.element.getBoundingClientRect();return new b([t.x,t.y,t.width,t.height])}get displacement(){return this._displacement.copy()}get framePosition(){if(!this.element)return new m([0,0]);const t=this.element.parentElement.getBoundingClientRect();return new m([t.x,t.y])}get frameDimensions(){if(!this.element)return new b([0,0,0,0]);const t=this.element.parentElement.getBoundingClientRect();return new b([t.x,t.y,t.width,t.height])}constructor(t){super(t),g.makeObservable(this,{_scale:g.observable,setScale:g.action}),this.unbindDocumentEvents.push(B(this,"click",this.handleClick),B(this,"dblclick",this.handleDoubleClick),B(this,"wheel",this.handleWheel),B(this,"mouseup",this.handleMouseUp),B(this,"mousedown",this.handleMouseDown),B(this,"mousemove",this.handleMouseMove),B(this,"keyup",this.handleKeyUp),B(this,"keypress",this.handleKeyPress),B(this,"keydown",this.handleKeyDown))}dispose(){for(const t of this.unbindDocumentEvents.splice(0))t()}markMouseSessionStartedInFrame(){this.mouseSessionStartedInFrame=!0}get dragging(){return this._dragging}_dragging=!1;displacementStart=null;eventStart=null;bound(){const t=this.element?.parentElement?.getBoundingClientRect(),e=t?new m([t.width,t.height]).divide(this.scale):new m,s=new b([...this.size.copy().multiply(-1).raw,...e.raw]).multiply(.9);this._displacement.bound(s)}centerOnPoint(t){const e=this.frameDimensions.multiply(1/this.scale);this.setDisplacement(t.copy().substract(e.middle).multiply(-1))}displace(t){this._displacement.sum(t);const e=this._displacement.copy();return this.bound(),this.setDisplacementStyles(),t.copy().substract(this._displacement.copy().substract(e))}setDisplacement(t){this._displacement.assign(t),this.bound(),this.setDisplacementStyles()}setScale(t,e=new m([0,0])){const s=this.inverseFit(e),n=s.copy(),r=this.displacement,a=Math.max(.3,Math.min(3,t));if(a!==this.scale){const c=s.copy().multiply(this.scale).sum(r.copy().multiply(this.scale)).substract(n.copy().multiply(a)).divide(a);this.emit(new Tt(this,c.copy().substract(this.displacement),a,this.scale)).cancelled||(this._scale=a,this._displacement.assign(c),this.bound(),this.setDisplacementStyles())}}fit(t){return t instanceof m?this._displacement.copy().sum([t.x,t.y]).multiply(this.scale):t instanceof b?new b([...this._displacement.copy().sum([t.x,t.y]).multiply(this.scale).raw,...t.size.multiply(this.scale).raw]):t*this.scale}inverseFit(t){return t instanceof m?t.copy().substract(this.framePosition).divide(this.scale).substract([this._displacement.x,this._displacement.y]):t.copy().substract(this.framePosition.toDimensions(new m([0,0]))).divide(this.scale).substract([this._displacement.x,this._displacement.y,0,0])}getDisplacementStyles(){const t=this._displacement.copy(!1).multiply(this.scale);return{position:"relative",width:`${this.size.x}px`,height:`${this.size.y}px`,transform:`translate(${t.x}px, ${t.y}px) scale(${this.scale})`,transformOrigin:"0 0",willChange:"transform"}}setDisplacementStyles(t=this.element){if(t){const e=this._displacement.copy(!1).multiply(this.scale),s=t.parentElement;if(t.dataset.setStyles="true",t.style.position="relative",t.style.width=`${this.size.x}px`,t.style.height=`${this.size.y}px`,t.style.transform=`translate(${e.x}px, ${e.y}px) scale(${this.scale})`,t.style.transformOrigin="0 0",t.style.zoom="",t.style.willChange="transform",s){const n=this.gridSize*this.scale,r=n*10,c=(Math.max(.3,Math.min(1,this.scale))-.3)/.7;s.style.setProperty("--diagram-canvas-scale",String(this.scale)),s.style.setProperty("--diagram-canvas-translate-x",`${e.x}px`),s.style.setProperty("--diagram-canvas-translate-y",`${e.y}px`),s.style.setProperty("--diagram-grid-zoom-ratio",String(c)),s.style.setProperty("--diagram-grid-size",`${n}px`),s.style.setProperty("--diagram-major-grid-size",`${r}px`),s.style.setProperty("--diagram-grid-offset-x",`${e.x}px`),s.style.setProperty("--diagram-grid-offset-y",`${e.y}px`)}}}setGridSize(t){this.gridSize=t,this.setDisplacementStyles()}useRef=o(t=>{this.element=t,t instanceof HTMLElement&&this.setDisplacementStyles()},"useRef");isInsideFrameFromTarget(t){const e=this.element?.parentElement;return!!(e&&t instanceof Node&&(e===t||e.contains(t)))}isInsideFrameEvent(t){const e=this.element?.parentElement;if(!e)return!1;const s=typeof t.composedPath=="function"?t.composedPath():[];if(s.length>0&&s.some(n=>n===e||n instanceof Node&&e.contains(n))||this.isInsideFrameFromTarget(t.target)||t.type==="wheel"&&e.matches(":hover"))return!0;if("clientX"in t&&"clientY"in t){const n=e.getBoundingClientRect(),r=Number(t.clientX),a=Number(t.clientY);return r>=n.left&&r<=n.right&&a>=n.top&&a<=n.bottom}return!1}handleMouseMove(t){if(!this.isInsideFrameEvent(t)&&!this.eventStart&&!this.mouseSessionStartedInFrame)return;if(!this.emit(new gt(this,t)).cancelled&&this.displacementStart&&this.eventStart){const s=this.displacement.substract(new m(t));this.emit(new Je(this,this.displacement,s)).cancelled||(this._dragging=!0,this._displacement.assign(this.displacementStart.copy().substract(this.eventStart.copy().substract([t.clientX,t.clientY]).divide(this.scale))),this.bound(),this.setDisplacementStyles())}}handleDoubleClick(t){this.isInsideFrameEvent(t)&&this.emit(new xe(this,t))}handleClick(t){this.isInsideFrameEvent(t)&&this.emit(new me(this,t))}handleMouseUp(t){!this.isInsideFrameEvent(t)&&!this.eventStart&&!this.mouseSessionStartedInFrame||(this.emit(new Q(this,t)),this._dragging=!1,this.eventStart=null,this.mouseSessionStartedInFrame=!1)}handleMouseDown(t){if(!this.isInsideFrameEvent(t))return;this.mouseSessionStartedInFrame=!0,!this.emit(new ut(this,t)).cancelled&&(t.button===1||t.button===0)&&(this.displacementStart=this._displacement.copy(),this.eventStart=new m(t))}handleKeyDown(t){this.emit(new kt(this,t))}handleKeyUp(t){this.emit(new ye(this,t))}handleKeyPress(t){this.emit(new Ke(this,t))}handleWheel(t){if(!this.isInsideFrameEvent(t))return;if(!this.emit(new Ze(this,t)).cancelled){const s=t.deltaY<0,n=Math.floor(this.scale*100)/100;this.setScale(this.scale-t.deltaY/(n>=.2&&s||n>.21?1e3:1e4),new m(t))}}},o(Bt,"Canvas"),Bt);const Ii=class Ii extends je{initializeGateways(){}};o(Ii,"TextNode");let Be=Ii;const Zt=1e3,Ci=class Ci{Canvas_Rules=Zt;Change_History=0;Click_Node=100;Drag_Rules=Zt;Drag_Node_Distances_Balancer=400;Drag_Node_Straight_Drag=300;Drag_Node_Aligner=200;Drag_Node_Snap_To_Grid=100;Drag_Edge_Snap_To_Grid=100;Mouse_Down_Rules=Zt;Mouse_Down_Measurer=400;Mouse_Down_Selector=300;Mouse_Down_Node=200;Mouse_Down_Dragger=100;Mouse_Move_Straight_Drag=500;Mouse_Move_Selector=100;Mouse_Up_Straight_Drag=500;Mouse_Up_Dragger=200;Mouse_Up_Selector=100;Nodes_Connection_Rules=Zt;Node_Selection_Nodes_Resizer=200;Node_Selection_Selector=200;Scale_Dragger=100;Selection_Rules=Zt};o(Ci,"Priorities");let us=Ci;const Li=class Li{constructor(t){this.d=t,t.onEvent(Y,this.check(()=>this.allowEdition),t.priorities.Mouse_Down_Rules),t.onEvent(Gt,this.check(()=>this.allowSelection),t.priorities.Selection_Rules),t.onEvent(nt,this.check(()=>this.allowEdition),t.priorities.Drag_Rules),t.onEvent(Ft,this.check(()=>this.allowEdition),t.priorities.Nodes_Connection_Rules),t.onEvent(zt,this.check(()=>this.allowZoom),t.priorities.Drag_Rules),g.makeAutoObservable(this)}d;allowEdition=!0;allowSelection=!0;allowZoom=!0;displaceWhenDragOnEdges=!0;toggleGrid=!0;check=o(t=>e=>{t()||(e.cancel(),e.stopImmediatePropagation())},"check")};o(Li,"Rules");let gs=Li;const ji=class ji extends j{creationMode="none";init(){this.diagram.onEvent(me,t=>{this.handleClick(t)}),g.makeObservable(this,{creationMode:g.observable})}getId(){let t=String(Date.now()),e=0;for(;this.diagram.getNodeById(t);)t=String(Date.now())+String(e++);return t}handleClick(t){if(!t.cancelled&&this.creationMode!=="none"&&(t.cancel(),this.creationMode==="text")){const e=this.diagram.add(new Be(null,{id:this.getId(),label:"No label",box:new b([...this.diagram.canvas.inverseFit(new m(t.originalEvent)).raw,100,100])}));this.diagram.getExtension(D).selectNode(e)}g.runInAction(()=>{this.creationMode="none"})}};o(ji,"Creator");let ps=ji;const Kt=.001,tt=3,$i=class $i extends j{drag=null;endpointDrag=null;uns=o(()=>{},"uns");init(){document.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.diagram.onEvent(Ee,this.startDrag.bind(this)),this.diagram.onEvent(Me,this.startEndpointDrag.bind(this))}almostEqual(t,e){return Math.abs(t-e)<Kt}pointMatches(t,e){return this.almostEqual(t.x,e.x)&&this.almostEqual(t.y,e.y)}axisAligned(t,e){return this.almostEqual(t.x,e.x)||this.almostEqual(t.y,e.y)}pointsNear(t,e,s=tt){return Math.abs(t.x-e.x)<=s&&Math.abs(t.y-e.y)<=s}isActivePoint(t){return!!(this.drag&&(t===this.drag.pointA||t===this.drag.pointB))}getGridSize(){return this.diagram.getExtension(U)?.gridSize??50}orientationVector(t){switch(t){case"left":return{x:-1,y:0};case"right":return{x:1,y:0};case"up":return{x:0,y:-1};case"down":return{x:0,y:1}}}axisPerpendicularToGateway(t){return t==="left"||t==="right"?"y":"x"}expectedLeadPoint(t,e){const s=e==="from"?t.steps[0]:t.steps.at(-1),n=e==="from"?t.from.orientation:t.to.orientation,r=this.orientationVector(n),a=this.getGridSize();return new m([s.x+r.x*a,s.y+r.y*a])}leadMatchesGatewaySide(t,e,s){const n=this.orientationVector(s),r=(e.x-t.x)*n.x+(e.y-t.y)*n.y;return Math.abs(s==="left"||s==="right"?e.y-t.y:e.x-t.x)<=tt&&r>Kt&&r<=this.getGridSize()+tt}endpointLeadPoint(t,e){const s=e==="from"?t.steps[0]:t.steps.at(-1),n=e==="from"?t.from.orientation:t.to.orientation,r=e==="from"?1:t.steps.length-2,a=t.steps[r];return a&&a.mode!=="manual"&&!this.isActivePoint(a)&&this.leadMatchesGatewaySide(s,a,n)?a:this.expectedLeadPoint(t,e)}ensureEndpointLeadPoint(t,e){const s=this.expectedLeadPoint(t,e),n=e==="from",r=n?1:t.steps.length-2,a=t.steps[r];if(a&&this.leadMatchesGatewaySide(n?t.steps[0]:t.steps.at(-1),a,n?t.from.orientation:t.to.orientation))return r;const c=new A(t,[s.x,s.y,"auto"]);return n?(t.state.steps.splice(1,0,c),1):(t.state.steps.splice(t.steps.length-1,0,c),t.steps.length-2)}ensureEndpointLeads(t){this.ensureEndpointLeadPoint(t,"from"),this.ensureEndpointLeadPoint(t,"to")}isProtectedLeadPoint(t,e){return e<=0||e>=t.steps.length-1?!1:e===1&&t.steps[e].mode!=="manual"&&this.leadMatchesGatewaySide(t.steps[0],t.steps[e],t.from.orientation)||e===t.steps.length-2&&t.steps[e].mode!=="manual"&&this.leadMatchesGatewaySide(t.steps.at(-1),t.steps[e],t.to.orientation)}segmentMovedAxis(t,e){return this.almostEqual(t.y,e.y)?"y":this.almostEqual(t.x,e.x)?"x":Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)?"y":"x"}segmentDirection(t,e){return!this.axisAligned(t,e)||this.pointMatches(t,e)?null:this.almostEqual(t.y,e.y)?"horizontal":"vertical"}segmentIsParallelToDraggedAxis(t,e){return this.drag?this.drag.movedAxis==="y"?Math.abs(t.y-e.y)<=tt:Math.abs(t.x-e.x)<=tt:!1}perpendicularAxis(t){return t==="x"?"y":"x"}pointAxis(t,e){return e==="x"?t.x:t.y}setPointAxis(t,e,s){e==="x"?t.x=s:t.y=s}crossesStaticBoundary(t,e,s,n,r=tt){const a=this.pointAxis(s,e),c=this.pointAxis(n,e);switch(t){case"right":case"down":return a<c-r;case"left":case"up":return a>c+r}}copyAsManual(t,e="both"){const s=t.copy();return s.parent=t.parent,s.addManualAxis(e),s}markManual(t,e="both"){t.mode!=="static"&&t.addManualAxis(e)}clampPointPastLead(t,e,s){switch(s){case"left":t.x=Math.min(t.x,e.x);break;case"right":t.x=Math.max(t.x,e.x);break;case"up":t.y=Math.min(t.y,e.y);break;case"down":t.y=Math.max(t.y,e.y);break}}movedAxisMatchesOrientation(t,e){return(e==="left"||e==="right")&&t==="x"||(e==="up"||e==="down")&&t==="y"}edgePointAt(t,e,s,n="auto"){return new A(t,[e,s,n])}guardCoordinate(t,e,s,n,r){const a=this.pointAxis(n,r)-this.pointAxis(s,r),c=Math.abs(a)>Kt?Math.sign(a):1,l=e==="from"?t.from.parent.box:t.to.parent.box,d=r==="y"?l.height:l.width,h=Math.max(this.getGridSize(),d/2+this.getGridSize()/2);return this.pointAxis(s,r)+c*h}makeGuardCorner(t,e,s,n){const r=this.perpendicularAxis(n),a=this.edgePointAt(t,e.x,e.y,"auto");return this.setPointAxis(a,n,this.pointAxis(e,n)),this.setPointAxis(a,r,s),a}insertStaticBoundaryGuard(t){if(!this.drag)return!1;const{edge:e,movedAxis:s}=this.drag,n=t==="from"?e.from.orientation:e.to.orientation;if(!this.movedAxisMatchesOrientation(s,n))return!1;const r=e.state.steps,a=r.findIndex(L=>L===this.drag.pointA),c=r.findIndex(L=>L===this.drag.pointB);if(a<0||c<0)return!1;const l=t==="from"?a<=c?"pointA":"pointB":a>=c?"pointA":"pointB",d=l==="pointA"?"pointB":"pointA",h=this.drag[l],x=this.drag[d],p=r.findIndex(L=>L===h),f=this.endpointLeadPoint(e,t),y=t==="from"?1:r.length-2,v=r[y],k=!!(v&&this.pointMatches(v,f)),$=t==="from"?p===1:p===r.length-2,M=t==="from"?p===2&&k:p===r.length-3&&k,_=this.crossesStaticBoundary(n,s,h,f,tt);if(p<0||!$&&!M||!_)return!1;const H=this.perpendicularAxis(s),P=this.guardCoordinate(e,t,f,x,H);this.setPointAxis(h,H,P),this.markManual(h,s),this.rebaseDraggedEndpointFixedAxis(l,h);const O=this.makeGuardCorner(e,f,P,s);if(t==="from"){if($){const L=this.edgePointAt(e,f.x,f.y,"auto");r.splice(p,0,L,O)}else r.splice(p,0,O);return this.drag.sourceLeadAdjacent=!1,this.drag.staticBoundaryGuarded=!0,!0}if($){const L=this.edgePointAt(e,f.x,f.y,"auto");r.splice(p+1,0,O,L)}else r.splice(p+1,0,O);return this.drag.targetLeadAdjacent=!1,this.drag.staticBoundaryGuarded=!0,!0}insertStaticBoundaryGuards(){const t=this.insertStaticBoundaryGuard("from"),e=this.insertStaticBoundaryGuard("to");return t||e}clampDraggedSegmentAgainstEndpointLeads(){if(!this.drag)return;const{edge:t,pointA:e,pointB:s,movedAxis:n,sourceLeadAdjacent:r,targetLeadAdjacent:a}=this.drag,c=t.steps.findIndex(d=>d===e),l=t.steps.findIndex(d=>d===s);if(this.movedAxisMatchesOrientation(n,t.from.orientation)){const h=t.steps[1]??this.expectedLeadPoint(t,"from");h&&(r||c>=0&&l>=0&&this.isProtectedLeadPoint(t,1)&&(c===2||l===2))&&(this.clampPointPastLead(e,h,t.from.orientation),this.clampPointPastLead(s,h,t.from.orientation))}if(this.movedAxisMatchesOrientation(n,t.to.orientation)){const d=t.steps.length-2,h=t.steps[d]??this.expectedLeadPoint(t,"to");h&&(a||c>=0&&l>=0&&this.isProtectedLeadPoint(t,d)&&(c===d-1||l===d-1))&&(this.clampPointPastLead(e,h,t.to.orientation),this.clampPointPastLead(s,h,t.to.orientation))}}mergeDraggedSegmentWithManualNeighbors(){if(!this.drag)return!1;let t=!1;const e=o((s,n)=>{if(!this.drag)return;const r=this.drag[s],a=this.drag.edge.state.steps,c=a.findIndex(h=>h===r),l=c+n;if(c<0||l<0||l>=a.length)return;const d=a[l];d.mode==="manual"&&this.pointsNear(r,d)&&(d.assign(r),a.splice(c,1),this.drag[s]=d,t=!0)},"mergePoint");return e("pointA",-1),e("pointB",1),t}rebaseDraggedEndpointFixedAxis(t,e){if(!this.drag)return;const s=t==="pointA"?this.drag.startPointA:this.drag.startPointB;this.drag.movedAxis==="y"?s.x=e.x:s.y=e.y}replaceDraggedEndpointWithProtectedLeadDuplicate(t,e,s){if(!this.drag)return;const n=this.drag[t],r=this.copyAsManual(e,this.drag.movedAxis);this.drag.movedAxis==="y"?r.y=n.y:r.x=n.x,this.drag.edge.state.steps[s]=r,this.drag[t]=r,this.rebaseDraggedEndpointFixedAxis(t,r)}absorbCollinearSegmentsIntoDraggedSegment(){if(!this.drag)return!1;let t=!1;const e=o((s,n)=>{if(!this.drag)return;const r=this.drag.edge.state.steps;for(;;){const a=this.drag[s],c=r.findIndex(h=>h===a),l=c+n;if(c<0||l<=0||l>=r.length-1)return;const d=r[l];if(!this.segmentIsParallelToDraggedAxis(a,d))return;if(this.isProtectedLeadPoint(this.drag.edge,l)){this.replaceDraggedEndpointWithProtectedLeadDuplicate(s,d,c),t=!0;return}if(d.mode==="static")return;r.splice(c,1),this.drag[s]=d,this.rebaseDraggedEndpointFixedAxis(s,d),t=!0}},"absorbSide");return e("pointA",-1),e("pointB",1),t}removeAdjacentDuplicates(t){if(!this.drag)return!1;const e=this.drag.edge.state.steps;let s=!1;for(let n=0;n<e.length-1;){const r=e[n],a=e[n+1];if(!this.pointsNear(r,a)){n+=1;continue}const c=this.isActivePoint(r)||r.mode==="static"||this.isProtectedLeadPoint(this.drag.edge,n)?n+1:n;if(c<=0||c>=e.length-1||t&&this.isActivePoint(e[c])){n+=1;continue}e.splice(c,1),s=!0,n=Math.max(0,n-1)}return s}coordinateAnchorForPair(t,e,s,n){return this.drag?t.mode==="static"?this.pointAxis(t,s):e.mode==="static"?this.pointAxis(e,s):this.isProtectedLeadPoint(this.drag.edge,n)?this.pointAxis(t,s):this.isProtectedLeadPoint(this.drag.edge,n+1)?this.pointAxis(e,s):this.isActivePoint(t)?this.pointAxis(t,s):this.isActivePoint(e)?this.pointAxis(e,s):t.mode==="manual"?this.pointAxis(t,s):e.mode==="manual"?this.pointAxis(e,s):this.pointAxis(t,s):this.pointAxis(t,s)}snapNearlyAlignedDraggedPairs(){if(!this.drag)return!1;const t=this.drag.edge.state.steps;let e=!1;for(let s=0;s<t.length-1;s++){const n=t[s],r=t[s+1];if(Math.abs(n.x-r.x)>Kt&&Math.abs(n.x-r.x)<=tt){const a=this.coordinateAnchorForPair(n,r,"x",s);n.x=a,r.x=a,e=!0}if(Math.abs(n.y-r.y)>Kt&&Math.abs(n.y-r.y)<=tt){const a=this.coordinateAnchorForPair(n,r,"y",s);n.y=a,r.y=a,e=!0}}return e}chooseOrthogonalCorner(t,e,s,n){const r=new A(this.drag?.edge??null,[e.x,t.y,"auto"]),a=new A(this.drag?.edge??null,[t.x,e.y,"auto"]),c=o(l=>{let d=0;const h=s?this.segmentDirection(s,t):null,x=this.segmentDirection(t,l),p=n?this.segmentDirection(e,n):null,f=this.segmentDirection(l,e);return h&&x!==h&&(d+=2),p&&f!==p&&(d+=2),this.axisAligned(s??t,l)&&(d+=1),this.axisAligned(l,n??e)&&(d+=1),d},"score");return c(r)>=c(a)?r:a}ensureOrthogonalAdjacency(){if(!this.drag)return!1;const t=this.drag.edge.state.steps;let e=!1;for(let s=0;s<t.length-1;s++){const n=t[s],r=t[s+1];if(this.axisAligned(n,r))continue;const a=s>0?t[s-1]:void 0,c=s+2<t.length?t[s+2]:void 0;t.splice(s+1,0,this.chooseOrthogonalCorner(n,r,a,c)),e=!0,s+=1}return e}normalizeDraggedEdge(){if(!this.drag)return!1;const t=this.snapNearlyAlignedDraggedPairs(),e=this.mergeDraggedSegmentWithManualNeighbors(),s=this.absorbCollinearSegmentsIntoDraggedSegment(),n=this.snapNearlyAlignedDraggedPairs(),r=this.ensureOrthogonalAdjacency(),a=this.snapNearlyAlignedDraggedPairs(),c=this.removeAdjacentDuplicates(!0),l=this.drag.edge.state.steps;return l.length>0&&(l[0].markStatic(),l.at(-1).markStatic()),t||e||s||n||r||a||c}finalizeDraggedEdge(){this.drag&&(this.normalizeDraggedEdge(),this.ensureOrthogonalAdjacency(),this.removeAdjacentDuplicates(!1),this.drag.staticBoundaryGuarded||this.drag.edge.setSteps(Cn(this.diagram,this.drag.edge)))}prepareStraightLeadSegment(t,e){const s=this.copyAsManual(t.steps[1],e),n=this.copyAsManual(t.steps[2],e);return t.state.steps.splice(2,0,s,n),{pointA:s,pointB:n,movedAxis:e}}prepareSourceSegment(t){this.ensureEndpointLeads(t);const e=this.axisPerpendicularToGateway(t.from.orientation);if(t.steps.length===4&&this.isProtectedLeadPoint(t,1)&&this.isProtectedLeadPoint(t,2))return this.prepareStraightLeadSegment(t,e);const s=this.copyAsManual(t.steps[1],e);t.state.steps.splice(2,0,s);const n=t.steps[3];return n instanceof A?(this.markManual(n,e),{pointA:s,pointB:n,movedAxis:e}):null}prepareTargetSegment(t){this.ensureEndpointLeads(t);const e=this.axisPerpendicularToGateway(t.to.orientation);if(t.steps.length===4&&this.isProtectedLeadPoint(t,1)&&this.isProtectedLeadPoint(t,2))return this.prepareStraightLeadSegment(t,e);const s=t.steps.length-2,n=this.copyAsManual(t.steps[s],e);t.state.steps.splice(s,0,n);const r=t.steps[s-1];return r instanceof A?(this.markManual(r,e),{pointA:r,pointB:n,movedAxis:e}):null}prepareSegmentAfterProtectedSourceLead(t,e){const s=this.segmentMovedAxis(t.steps[e],t.steps[e+1]),n=this.copyAsManual(t.steps[e],s);t.state.steps.splice(e+1,0,n);const r=t.steps[e+2];return r instanceof A?(this.markManual(r,s),{pointA:n,pointB:r,movedAxis:s}):null}prepareSegmentBeforeProtectedTargetLead(t,e){const s=this.segmentMovedAxis(t.steps[e-1],t.steps[e]),n=this.copyAsManual(t.steps[e],s);t.state.steps.splice(e,0,n);const r=t.steps[e-1];return r instanceof A?(this.markManual(r,s),{pointA:r,pointB:n,movedAxis:s}):null}prepareInteriorSegment(t,e,s,n){this.ensureEndpointLeads(t);let r=t.steps.findIndex(h=>h===e),a=t.steps.findIndex(h=>h===s);if((r<0||a<0||Math.abs(r-a)!==1)&&(r=Math.max(0,Math.min(n,t.steps.length-2)),a=r+1),r>a&&([r,a]=[a,r]),r===0)return this.prepareSourceSegment(t);if(a===t.steps.length-1)return this.prepareTargetSegment(t);if(this.isProtectedLeadPoint(t,r))return this.prepareSegmentAfterProtectedSourceLead(t,r);if(this.isProtectedLeadPoint(t,a))return this.prepareSegmentBeforeProtectedTargetLead(t,a);const c=t.steps[r],l=t.steps[a],d=this.segmentMovedAxis(c,l);return this.markManual(c,d),this.markManual(l,d),{pointA:c,pointB:l,movedAxis:d}}restoreOriginalSteps(t,e){t.setSteps(e.map(s=>s.copy()))}startDrag(t){if(t.cancelled)return;t.stopImmediatePropagation(),this.uns();const e=t.src,s=e.steps.map(v=>v.copy()),n=e.steps.length-1,r=Number(t.midPoint.id),a=r===0,c=r===n-1,l=t.midPoint.points[0],d=t.midPoint.points[1],h=g.runInAction(()=>{e.state.dragging=!0;const v=a?this.prepareSourceSegment(e):c?this.prepareTargetSegment(e):this.prepareInteriorSegment(e,l,d,r);return v||(e.state.dragging=!1),v});if(!h)return;const x=e.steps.findIndex(v=>v===h.pointA),p=e.steps.findIndex(v=>v===h.pointB),f=x===2||p===2,y=x===e.steps.length-3||p===e.steps.length-3;this.drag={edge:e,midpoint:t.midPoint,pointA:h.pointA,pointB:h.pointB,movedAxis:h.movedAxis,startMouseCanvas:this.diagram.canvas.inverseFit(new m(t)),startPointA:h.pointA.copy().nonObserved,startPointB:h.pointB.copy().nonObserved,originalSteps:s,sourceLeadAdjacent:f,targetLeadAdjacent:y,staticBoundaryGuarded:!1,changed:!1},this.uns=ot(B(this,"mousemove",this.handleMouseMove),B(this,"pointermove",this.handleMouseMove))}startEndpointDrag(t){t.cancelled||(t.stopImmediatePropagation(),this.uns(),g.runInAction(()=>{t.src.state.dragging=!0}),this.drag=null,this.endpointDrag={edge:t.src,endpoint:t.endpoint},this.uns=ot(B(this,"mousemove",this.handleMouseMove),B(this,"pointermove",this.handleMouseMove)))}scheduleEndpointRecompute(){if(!this.endpointDrag)return;const{edge:t,endpoint:e}=this.endpointDrag;(e==="from"?t.from:t.to).recomputeConnectedEdge(t,e)}handleEndpointMouseMove(t){if(!this.endpointDrag)return;const{edge:e,endpoint:s}=this.endpointDrag,n=s==="from"?e.from:e.to;if(n.state.allowDisplace===!1)return;const r=this.diagram.canvas.inverseFit(new m(t)),a=n.connectionDisplacement(r);g.runInAction(()=>{s==="from"?e.state.displacementStart=a:e.state.displacementEnd=a,this.scheduleEndpointRecompute()})}moveDraggedSegment(t){if(!this.drag)return;const{pointA:e,pointB:s}=this.drag,r=this.diagram.canvas.inverseFit(new m(t)).nonObserved.substract(this.drag.startMouseCanvas);this.drag.movedAxis==="x"?r.y=0:r.x=0,g.runInAction(()=>{if(!this.drag)return;e.assign(this.drag.startPointA.copy().sum(r)),s.assign(this.drag.startPointB.copy().sum(r));const a=[new _e(e,this.drag.movedAxis),new _e(s,this.drag.movedAxis)];this.emit(new Se(this,a,this.drag.movedAxis,t));for(const h of a)h.point.assign(h.get());const c=this.insertStaticBoundaryGuards();this.clampDraggedSegmentAgainstEndpointLeads();const l=this.normalizeDraggedEdge();(c||l||!this.pointMatches(this.drag.pointA,this.drag.startPointA)||!this.pointMatches(this.drag.pointB,this.drag.startPointB))&&(this.drag.changed=!0)})}handleMouseMove(t){if(this.endpointDrag){this.handleEndpointMouseMove(t);return}this.moveDraggedSegment(t)}handleMouseUp(){!this.drag&&!this.endpointDrag||(g.runInAction(()=>{this.drag&&(this.drag.changed?this.finalizeDraggedEdge():this.restoreOriginalSteps(this.drag.edge,this.drag.originalSteps),this.drag.edge.state.dragging=!1),this.endpointDrag&&(this.endpointDrag.edge.state.dragging=!1),this.drag=null,this.endpointDrag=null}),this.uns())}};o($i,"EdgesDragger");let fs=$i;function Bn(i,t,e,s=new m([0,0]),n=new m([0,0])){return Mr(i,t,e,s,n)}o(Bn,"findBestPathBetweenNodes");function Pr(i,t,e){switch(e){case"down":return t.copy().sum([0,i]);case"left":return t.copy().sum([-i,0]);case"up":return t.copy().sum([0,-i]);case"right":return t.copy().sum([+i,0])}}o(Pr,"stepFromGateway");const Bi=class Bi extends j{hasRoutedPreview=!1;previewRequestVersion=0;previewRafId=null;init(){g.makeObservable(this,{_arrowSteps:g.observable,arrowTo:g.observable,candidateGateway:g.observable,startConnectionFrom:g.action,handleMouseMove:g.action,startGateway:g.observable,handleMouseUp:g.action})}arrowTo=null;startGateway=null;candidateGateway=null;_arrowSteps=[];get arrowSteps(){return this._arrowSteps}get snap(){return this.diagram.getExtension(U)}calculateArrowSteps(){if(!this.startGateway||!this.arrowTo)return;const t=this.startGateway,e=this.candidateGateway,s=this.arrowTo?.copy(),n=this.previewRequestVersion;if(!t||!s){g.runInAction(()=>{this._arrowSteps=[]});return}try{const r=this.diagram.canvas.inverseFit(s),a=this.snap.gridSize/2,c=r.copy().divide(a).round.multiply(a);let l=[];if(e)l=Bn(this.diagram,t,e,new m([0,0]),e.connectionDisplacement(r));else{const d=new je(null,{id:"fake",label:"",box:new b([...c.raw,0,0])}),h=t.coordinates.substract(d.getGateway("down").coordinates).x,x=t.coordinates.substract(d.getGateway("down").coordinates).y,p=Math.abs(h)>Math.abs(x)?h>=0?"right":"left":x>=0?"down":"up";l=Bn(this.diagram,t,d.getGateway(p))}g.runInAction(()=>{this.startGateway===t&&n===this.previewRequestVersion&&(this._arrowSteps=l.map(d=>new m([d.x,d.y])),this.hasRoutedPreview=this._arrowSteps.length>1)})}catch{}}orthogonalMousePreview(t,e){const s=this.snap.gridSize/2,n=e.copy().divide(s).round.multiply(s),r=t.coordinates.copy(),a=Pr(this.snap.gridSize,r,t.orientation),c=[r,a];if(Math.abs(a.x-n.x)<.001||Math.abs(a.y-n.y)<.001)return c.push(n),this.compactPreviewPoints(c);const l=new m([a.x,n.y]),d=new m([n.x,a.y]),h=Math.abs(n.x-a.x),x=Math.abs(n.y-a.y);return c.push(h>=x?d:l,n),this.compactPreviewPoints(c)}compactPreviewPoints(t){const e=[];for(const s of t){const n=e.at(-1);if(!(n&&Math.abs(n.x-s.x)<.001&&Math.abs(n.y-s.y)<.001))for(e.push(s);e.length>=3;){const r=e.at(-3),a=e.at(-2),c=e.at(-1),l=Math.abs(r.x-a.x)<.001&&Math.abs(a.x-c.x)<.001,d=Math.abs(r.y-a.y)<.001&&Math.abs(a.y-c.y)<.001;if(l||d)e.splice(e.length-2,1);else break}}return e}cancelScheduledPreview(){this.previewRafId!==null&&(cancelAnimationFrame(this.previewRafId),this.previewRafId=null)}scheduleCalculateArrowSteps(){this.previewRafId===null&&(this.previewRafId=requestAnimationFrame(()=>{this.previewRafId=null,this.calculateArrowSteps()}))}u=o(()=>{},"u");startConnectionFrom(t,e){this.emit(new ts(this,t.parent)).cancelled||(e.nativeEvent.stopImmediatePropagation(),this.diagram.canvas.markMouseSessionStartedInFrame(),this.startGateway=t,this.arrowTo=new m(e),this.hasRoutedPreview=!1,this.previewRequestVersion=0,this._arrowSteps=[t.coordinates.copy(),t.coordinates.copy()],this.u(),this.u=ot(qt(this,gt,this.handleMouseMove),qt(this,Q,this.handleMouseUp)))}handleMouseMove(t){this.previewRequestVersion+=1;const e=this.diagram.canvas.frameDimensions;this.arrowTo=new m(t);const s=this.arrowTo.copy().substract(this.diagram.canvas.framePosition),n=new m([0,0]);s.x<100?n.sum([(100-s.x)*.1,0]):s.x>e.width-100?n.substract([(100-Math.abs(s.x-e.width))*.1,0]):s.y<100?n.sum([0,(100-s.y)*.1]):s.y>e.height-100&&n.substract([0,(100-Math.abs(s.y-e.height))*.1]),n.norm>0&&this.diagram.canvas.displace(n);const r=this.diagram.canvas.inverseFit(this.arrowTo),l=this.diagram.nodes.filter(d=>{const h=this.snap.gridSize/2;return d.box.translate(new m([-h,-h])).sum([0,0,h*2,h*2]).collides(r)}).flatMap(d=>d.gateways).filter(d=>d!==this.startGateway).reduce((d,h)=>{if(!d)return h;const x=h.connectionDistance(r),p=d.connectionDistance(r);return x<p?h:d},null);if(l?this.candidateGateway=l:this.candidateGateway=null,!this.candidateGateway){this.hasRoutedPreview=!1,this._arrowSteps=this.orthogonalMousePreview(this.startGateway,r),this.scheduleCalculateArrowSteps();return}this.calculateArrowSteps()}handleMouseUp(){try{if(this.candidateGateway&&this.startGateway&&this.candidateGateway.canConnect(this.startGateway)&&!this.emit(new es(this,this.startGateway.parent,this.candidateGateway.parent)).cancelled){this._arrowSteps=[];const t=this.arrowTo?this.diagram.canvas.inverseFit(this.arrowTo):this.candidateGateway.coordinates;this.diagram.connect(this.startGateway,this.candidateGateway,{toDisplacement:this.candidateGateway.connectionDisplacement(t)})}}finally{this._arrowSteps=[],this.hasRoutedPreview=!1,this.startGateway=null,this.arrowTo=null,this.candidateGateway=null,this.previewRequestVersion=0,this.cancelScheduledPreview(),this.u()}}};o(Bi,"NodesConnector");let Jt=Bi;const Ni=class Ni extends j{straight="none";startCoordinates=null;startProposals=[];reset(){this.straight="none",this.startCoordinates=null,this.startProposals=[]}init(){this.diagram.onEvent(kt,t=>{t.shift&&(this.startCoordinates=xt.getInstance().coordinates)}),this.diagram.onEvent(ye,t=>{t.shift||this.reset()}),this.diagram.onEvent(gt,t=>{if(this.startCoordinates){const e=Math.abs(this.startCoordinates.x-t.mouse.x),s=Math.abs(this.startCoordinates.y-t.mouse.y);(e>15||s>15)&&(e>s?this.straight="x":e<s&&(this.straight="y"))}},this.diagram.priorities.Mouse_Move_Straight_Drag),this.diagram.onEvent(Q,()=>{this.reset()},this.diagram.priorities.Mouse_Up_Straight_Drag),this.diagram.onEvent(pt,t=>{if(this.straight!=="none")if(this.startProposals.length===0)this.startProposals=t.proposals.map(e=>new ke(e.node,e.newBox.copy()));else for(const e of t.proposals){const s=this.startProposals.find(n=>n.node.id===e.node.id);switch(this.straight){case"x":e.updateY(s.newBox.y),e.lockY();break;case"y":e.updateX(s.newBox.x),e.lockX();break}}},this.diagram.priorities.Drag_Node_Straight_Drag)}};o(Ni,"StraightDrag");let ms=Ni;const Oi=class Oi extends j{init(){this.diagram.onEvent(Rt,t=>{t.selected&&console.log(t)},this.diagram.priorities.Node_Selection_Nodes_Resizer)}};o(Oi,"NodesResizer");let xs=Oi;const Et=class Et{constructor(t){this.diagram=t}diagram;displace(t){if(!this.diagram.rules.displaceWhenDragOnEdges)return new m;const e=this.diagram.canvas.frameDimensions,s=new m([this.axisDisplacement(t.x,e.x,e.width),this.axisDisplacement(t.y,e.y,e.height)]);return s.norm>0&&this.diagram.canvas.displace(s),s}axisDisplacement(t,e,s){const n=t-e;if(n<Et.edgeThreshold)return this.step(n);const r=e+s-t;return r<Et.edgeThreshold?-this.step(r):0}step(t){return((Et.edgeThreshold-t)/10)**2}};o(Et,"Autopan"),K(Et,"edgeThreshold",100);let Ne=Et;const Di=class Di extends j{dragThreshold=10;autopan=new Ne(this.diagram);groupedChildren=new Map;init(){this.diagram.onEvent(ut,this.handleMouseDown.bind(this),this.diagram.priorities.Mouse_Down_Dragger),this.diagram.onEvent(Q,this.handleMouseUp.bind(this),this.diagram.priorities.Mouse_Up_Dragger),this.diagram.onEvent(gt,this.handleMouseMove.bind(this),this.diagram.priorities.Mouse_Move_Selector-1),this.diagram.onEvent(Tt,this.handleScale.bind(this),this.diagram.priorities.Scale_Dragger),this.diagram.onEvent(Ht,t=>{this.draggingNodes.delete(t.node.id)})}constructor(t){super(t)}draggingNodes=new Map;startPoint=new m;startPointScaled=new m;mousePoint=new m;unsubscribe=o(()=>{},"unsubscribe");startDrag(t,e=xt.getInstance().coordinates){this.draggingNodes.clear(),this.groupedChildren.clear(),this.draggingNodes.set(t.id,{node:t,startPoint:t.box.middle}),this.mousePoint=e.copy(),this.startPoint=e.copy().sum(t.box.size.divide(2)),this.startPointScaled=this.diagram.canvas.inverseFit(this.startPoint),this.handleDragAction()}originalEvent=null;handleMouseDown(t){this.originalEvent=t;const e=t.node;!t.cancelled&&e&&e.selected&&(t.cancel(),this.draggingNodes.clear(),this.groupedChildren.clear(),this.mousePoint=new m(t.originalEvent),this.startPoint=this.mousePoint.copy(),this.startPointScaled=this.diagram.canvas.inverseFit(this.mousePoint),this.handleDragAction())}handleMouseMove(t){this.mousePoint=new m(t.originalEvent)}handleDragAction(){this.unsubscribe(),this.unsubscribe=ot(qt(this,Tt,({newScale:t,previousScale:e})=>{this.startPoint.divide(e).multiply(t)}),$n(this.handleDragInterval.bind(this),30))}isFullyContained(t,e){return e.x>=t.x&&e.y>=t.y&&e.x+e.width<=t.x+t.width&&e.y+e.height<=t.y+t.height}collectConnectedEdges(t){const e=new Set;return t.forEach(s=>{s.gateways.forEach(n=>{n.incomingEdges.forEach(r=>e.add(r)),n.outgoingEdges.forEach(r=>e.add(r))})}),e}translateEdge(t,e){t.steps.forEach(s=>{s.sum(e)})}updateEdgesAfterBatchMove(t,e){const s=new Map,n=[];e.forEach(r=>{const a=t.get(r.id);if(!a)return;const c=r.coordinates.copy().substract(a);s.set(r.id,c),c.norm>0&&n.push(r)}),n.length&&this.collectConnectedEdges(n).forEach(r=>{const a=s.get(r.from.parent.id),c=s.get(r.to.parent.id);if(a&&c&&a.norm>0&&c.norm>0&&a.copy(!1).substract(c).norm===0){this.translateEdge(r,a);return}r.from.recomputeConnectedEdge(r,"from")})}applyNodePositionProposals(t){const e=new Map(t.map(c=>[c.node.id,c])),s=new Set(this.groupedChildren.keys()),n=new Map;t.forEach(c=>{!c.cancelled&&!s.has(c.node.id)&&n.set(c.node.id,c.node)}),this.groupedChildren.forEach((c,l)=>{const d=this.draggingNodes.get(l);d&&n.set(l,d.node)});const r=[...n.values()],a=new Map(r.map(c=>[c.id,c.coordinates.copy()]));t.forEach(c=>{!c.cancelled&&!s.has(c.node.id)&&c.node.setPosition(c.get().coordinates,{updateConnectedEdges:!1})}),this.groupedChildren.size&&this.groupedChildren.forEach((c,l)=>{const d=e.get(c),h=this.draggingNodes.get(l),x=this.draggingNodes.get(c);if(!h||!x)return;const f=(d?.cancelled?x.startPoint:d?.node.coordinates??x.startPoint).copy().substract(x.startPoint),y=h.startPoint.copy().sum(f);h.node.setPosition(y,{updateConnectedEdges:!1})}),this.updateEdgesAfterBatchMove(a,r)}includeGroupedChildren(){const t=[...this.draggingNodes.values()].filter(({node:s})=>s.state.groupChildren);if(!t.length)return;const e=new Set(this.draggingNodes.keys());this.diagram.nodes.forEach(s=>{if(e.has(s.id)||s.state.movable===!1)return;let n=null,r=Number.POSITIVE_INFINITY;const a=s.box;t.forEach(({node:c})=>{if(this.isFullyContained(c.box,a)){const l=c.box.width*c.box.height;l<r&&(r=l,n=c.id)}}),n!==null&&(this.draggingNodes.set(s.id,{node:s,startPoint:s.coordinates.copy()}),this.groupedChildren.set(s.id,n))})}handleDragInterval(){const t=this.mousePoint;if(this.draggingNodes.size||(this.diagram.getExtension(D).selectedNodes.forEach(e=>{this.draggingNodes.set(e.id,{node:e,startPoint:e.coordinates.copy()})}),this.includeGroupedChildren(),this.draggingNodes.size||this.unsubscribe()),this.draggingNodes.size&&t.copy().substract(this.startPoint).norm>this.dragThreshold){this.autopan.displace(t);const e=this.diagram.canvas.inverseFit(this.startPoint),s=this.startPointScaled.copy().substract(e),n=[...this.draggingNodes.values()].map(r=>new ke(r.node,new b([...r.startPoint.copy().sum(t.copy().substract(this.startPoint).divide(this.diagram.canvas.scale).substract(s)).raw,...r.node.box.size.raw])));this.emit(new pt(this,n,this.originalEvent?.originalEvent)).cancelled||this.applyNodePositionProposals(n)}}handleMouseUp(){this.draggingNodes.clear(),this.groupedChildren.clear(),this.unsubscribe()}handleScale(t){this.draggingNodes.size}};o(Di,"Dragger");let ys=Di,Nn=(Nt=class extends j{grid=null;points=null;highlighted=new Set;init(){g.makeObservable(this,{grid:g.observable,setGrid:g.action,points:g.observable,highlighted:g.observable})}setGrid(t,e){this.grid=t,this.points=e}},o(Nt,"PathFindingRenderer"),Nt);const On=E.createContext(null),Ar=Object.freeze({Creator:ps,DistancesBalancer:Xt,Dragger:ys,EdgesDragger:fs,GridSnap:U,History:Ut,Hotkeys:hs,Measurer:Yt,NodesAligner:At,NodesConnector:Jt,NodesResizer:xs,PathFindingRenderer:Nn,Selector:D,StraightDrag:ms}),We=class We extends _t{priorities=new us;rules=new gs(this);focusContentTimer=null;knownClasses=new Map;getClass(t){return this.knownClasses.get(t)}registerClass(t,e=t.name){this.knownClasses.set(e,t)}edgeClass=Pt;setDefaultEdge(t){this.edgeClass=t}_extensions=new Map;_nodes=new Map;_edges=new Map;canvas=new Sr(this);constructor(t){super(null),this.registerClass(je),this.registerClass(Pt),this.registerClass(mt),this.registerClass(Be),Object.entries(Ar).forEach(([e,s])=>{t?.extensions?.[e]!==!1&&this.registerExtension(s)}),g.makeObservable(this,{edges:g.computed,_edges:g.observable,_nodes:g.observable,toggleGrid:g.action})}get edges(){return[...this._edges.values()]}get nodes(){return[...this._nodes.values()]}getUniqueNodeId(t){if(!this._nodes.has(t))return t;let e=1,s=`${t}-${e}`;for(;this._nodes.has(s);)e++,s=`${t}-${e}`;return s}add(t){return g.runInAction(()=>{const e=this.getUniqueNodeId(t.id);e!==t.id&&t.setState("id",e),t.setDiagram(this),this._nodes.set(t.id,t)}),t}addEdge(t){t.from.addOutgoingEdge(t),t.to.addIncomingEdge(t)}connect(t,e,s){const n=new this.edgeClass(this,{hover:!1,dragging:!1,selected:!1,from:t,to:e,label:"",labelPositioning:new m([0,0]),steps:[]});return n.state.displacementStart=s?.fromDisplacement,n.state.displacementEnd=s?.toDisplacement,this.connectWithEdge(t,e,n)}connectWithEdge(t,e,s){const n=s;return t.addOutgoingEdge(n),e.addIncomingEdge(n),this._edges.set(n.id,n),n}delete(t){this.emit(new Ht(this,t)).cancelled||g.runInAction(()=>{t.gateways.forEach(e=>{e.incomingEdges.forEach(this.disconnect.bind(this)),e.outgoingEdges.forEach(this.disconnect.bind(this))}),this._nodes.delete(t.id),t.parent=null})}disconnect(t){this.emit(new be(this,t)).cancelled||g.runInAction(()=>{for(const e of this.nodes)for(const s of e.gateways)s.removeIncomingEdge(t),s.removeOutgoingEdge(t);this._edges.delete(t.id),t.parent=null})}Context=o(({children:t})=>u.jsx(On.Provider,{value:this,children:t}),"Context");getEdgeById(t){return this._edges.get(t)}getNodeById(t){return this._nodes.get(t)}get showGrid(){return this.rules.toggleGrid}getExtension(t){return this._extensions.get(t)}registerExtension(t){const e=new t(this);e.init(),this._extensions.set(t,e)}toggleGrid(){this.rules.toggleGrid=!this.rules.toggleGrid}export(){return JSON.stringify(this.serialize())}async reset(){let t=this._nodes.size===0;if(!t){let e=null;const s=this.emit(new Qe(this,n=>{e=n}));t=await e()&&!s.cancelled}if(t){for(const e of this._nodes.values())this.delete(e);return!0}return!1}serialize(){return{position:{x:this.canvas.displacement.x,y:this.canvas.displacement.y,scale:this.canvas.scale},nodes:this.nodes.map(t=>t.serialize())}}import(t){g.runInAction(()=>{const e=JSON.parse(t),s=e.position,n=!!s&&Number.isFinite(s.x)&&Number.isFinite(s.y)&&Number.isFinite(s.scale);if(n&&(this.canvas.setScale(s.scale),this.canvas.setDisplacement(new m([s.x,s.y]))),e.nodes){const r=new Map;e.nodes.forEach(a=>{const c=this.getClass(a.class);if(!c)throw new Error(`Unable to import node: unknown class '${a.class}'.`);const l=new c(this,{id:a.id}),d=this.add(l);r.set(a.id,d.id)}),e.nodes.forEach(a=>{const c=r.get(a.id);this.getNodeById(c).deserialize({...a,id:c,gateways:a.gateways.map(l=>({...l,outEdges:l.outEdges.map(d=>({...d,toParentId:r.get(d.toParentId)||d.toParentId}))}))})})}n||this.focusContentInViewportWithRetry()})}paste(t){g.runInAction(()=>{const e=JSON.parse(t);if(e.position&&(this.canvas.setScale(e.position.scale),this.canvas.setDisplacement(new m([e.position.x,e.position.y]))),e.nodes?.length){const s=new Map,n=[];e.nodes.forEach(l=>{const d=ds(this,"node",n);s.set(l.id,d),n.push(d)});let r=new m([1/0,1/0]);e.nodes.forEach(l=>{const d=new m([l.box[0],l.box[1]]);d.norm<r.norm&&(r=d)});const c=this.canvas.inverseFit(xt.getInstance().coordinates).substract(r);e.nodes.forEach(l=>{const d=this.getClass(l.class);if(!d)throw new Error(`Unable to paste node: unknown class '${l.class}'.`);const h=new d(this,{id:s.get(l.id)});this.add(h)}),e.nodes.forEach(l=>{const d=s.get(l.id);this.getNodeById(d).deserialize({...l,id:d,gateways:l.gateways.map(h=>({...h,outEdges:h.outEdges.map(x=>({...x,toParentId:s.get(x.toParentId)||x.toParentId}))})),box:[l.box[0]+c.x,l.box[1]+c.y,l.box[2],l.box[3]]})})}})}focusContentInViewport(t=80){if(!this.nodes.length)return!1;const e=this.canvas.frameDimensions;if(e.width<=0||e.height<=0)return!1;let s=1/0,n=1/0,r=-1/0,a=-1/0;for(const h of this.nodes){const x=h.box;s=Math.min(s,x.x),n=Math.min(n,x.y),r=Math.max(r,x.x+x.width),a=Math.max(a,x.y+x.height)}if(!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(a))return!1;const c=Math.max(1,r-s+t*2),l=Math.max(1,a-n+t*2),d=Math.max(.3,Math.min(3,Math.min(e.width/c,e.height/l)));return this.canvas.setScale(d),this.canvas.centerOnPoint(new m([(s+r)/2,(n+a)/2])),!0}focusContentInViewportWithRetry(t=8,e=32){this.focusContentInViewport()||t<=0||(this.focusContentTimer&&clearTimeout(this.focusContentTimer),this.focusContentTimer=setTimeout(()=>{this.focusContentInViewportWithRetry(t-1,e)},e))}};o(We,"Diagram"),K(We,"use",o(()=>E.useContext(On),"use"));let z=We;const Dn=o(({id:i,color:t,type:e,width:s,arrowSize:n,flip:r=!1})=>{const a=r?"180":"auto",c="white";switch(e){case"arrow":return u.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:r?0:n*.9,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:t,className:"edge_marker_path"})});case"triangle":return u.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:r?0:n,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:c,stroke:t,strokeWidth:s/2})});case"triangle-filled":return u.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:r?0:n,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:`M0,0 L${n},${n/2} L0,${n} Z`,fill:t,className:"edge_marker_path"})});case"diamond":return u.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:r?0:n*.9,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:`M0,${n/2} L${n/2},0 L${n},${n/2} L${n/2},${n} Z`,fill:"white",stroke:t,strokeWidth:s/2})});case"circle-small":return u.jsx("marker",{id:i,markerWidth:n,markerHeight:n,refX:n/2,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("circle",{cx:n/2,cy:n/2,r:n/4,fill:"white",stroke:t,strokeWidth:s/2})});case"circle-medium":return u.jsx("marker",{id:i,markerWidth:n*1.5,markerHeight:n*1.5,refX:n*1.5/2,refY:n*1.5/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("circle",{cx:n*1.5/2,cy:n*1.5/2,r:n/2,fill:"white",stroke:t,strokeWidth:s/2})});case"measure":return u.jsx("marker",{id:i,markerWidth:n*5,markerHeight:n*5,refX:0,refY:n/2,orient:a,markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:`M0,0 L0,${n/2}`,stroke:t,strokeWidth:3,strokeLinecap:"round"})});default:return null}},"EdgeMarker"),Ve=class Ve extends m{constructor(t,e,s,n){super(n),this.id=t,this.edge=e,this.points=s,this.assign(s[0].copy().sum(s[1]).divide(2)),g.makeObservable(this,{points:g.observable})}id;edge;points;copy(){return new Ve(this.id,this.edge,this.points,super.copy())}};o(Ve,"Midpoint");let ws=Ve;function Ir(i,t){const e=[];for(let s=0;s<t.length-1;s++){const n=[t[s],t[s+1]],r=n.filter(c=>c instanceof A&&c.mode==="static").length,a=i.steps.length===2&&t.length===2;r===2&&!a||e.push(new ws(String(s),i,n))}return e}o(Ir,"getSegmentMidpoints");const Cr={};function Lr(){const i=Cr;return i.DEBUG_EDGES===!0||i.DEBUG_EDGES==="true"}o(Lr,"debugEdgesEnabled");function jr(i,t){const e=i instanceof A?i.mode:"coordinate",s=i instanceof A?i.manualAxes:"none";return`${t}: x=${i.x}, y=${i.y}, mode=${e}, manualAxes=${s}`}o(jr,"formatPoint");function $r(i,t){const e=t.points[0],s=t.points[1],n=i.steps.findIndex((a,c)=>a===e&&i.steps[c+1]===s);if(n>=0)return n;const r=Number(t.id);return Number.isFinite(r)?r:null}o($r,"segmentIndexFor");function Br(i,t){if(t.type==="edge")return"clicked: edge path";if(t.type==="endpoint")return`clicked: endpoint ${t.endpoint}`;const e=$r(i,t.midpoint),s=e===null?"unknown":`${e} -> ${e+1}`;return["clicked: drag point",`dragPoint.midpointId=${t.midpoint.id}`,`dragPoint.renderedIndex=${t.renderedIndex}`,`dragPoint.segment=${s}`,`dragPoint.x=${t.midpoint.x}`,`dragPoint.y=${t.midpoint.y}`].join(`
2
+ `)}o(Br,"formatClickedTarget");function Nr(i,t){return[`edge.id=${i.id}`,`from=${i.from.parent.id}.${i.from.id} orientation=${i.from.orientation}`,`to=${i.to.parent.id}.${i.to.id} orientation=${i.to.orientation}`,Br(i,t),"points:",...i.steps.map(jr)].join(`
3
+ `)}o(Nr,"formatEdgeDebug");async function Or(i){if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(i);return}const t=document.createElement("textarea");t.value=i,t.style.position="fixed",t.style.left="-9999px",document.body.appendChild(t),t.focus(),t.select(),document.execCommand("copy"),t.remove()}o(Or,"writeClipboard");function Qt(i,t){if(!i||!Lr())return;const e=Nr(i,t);Or(e).then(()=>{console.info("[DEBUG_EDGES] copied edge debug to clipboard",e)}).catch(s=>{console.warn("[DEBUG_EDGES] failed to copy edge debug to clipboard",s,e)})}o(Qt,"copyEdgeDebugToClipboard");const Dr=o(({edge:i,onMouseDown:t,points:e})=>{const s=Ir(i,e);return u.jsx(u.Fragment,{children:s.map((n,r)=>{const a=n.x,c=n.y;return u.jsx("rect",{x:a-6,y:c-6,width:12,height:12,rx:4,className:"edge_drag_point","data-edge-id":i.id,"data-midpoint-id":n.id,"data-midpoint-index":r,onMouseDownCapture:o(l=>{Qt(i,{type:"drag-point",midpoint:n,renderedIndex:r}),t(n,l)},"onMouseDownCapture")},n.id)})})},"EdgeMidpoints");function yt(i){return i&&(Object.assign(i,{__scalable:!0}),i)}o(yt,"makeScalableComponent");function zr(i){return i&&(Object.assign(i,{__scalableBack:!0}),i)}o(zr,"makeBackScalableComponent");const zn=yt(({coordinates:i,size:t=20,strokeWidth:e=2,rounded:s=!0,stroke:n="#ff0000"})=>{const r=t/2,a=s?"round":"butt";return u.jsxs(u.Fragment,{children:[u.jsx("line",{x1:i.x-r,y1:i.y,x2:i.x+r,y2:i.y,stroke:n,strokeWidth:e,strokeLinecap:a}),u.jsx("line",{x1:i.x,y1:i.y-r,x2:i.x,y2:i.y+r,stroke:n,strokeWidth:e,strokeLinecap:a})]})}),ue=class ue{showDragHints=!1;constructor(){g.makeAutoObservable(this)}};o(ue,"ToolsStates"),K(ue,"instance",new ue);let Oe=ue;function Tr(i){if(i instanceof A)switch(i.mode){case"auto":return"red";case"manual":return"green";case"static":return"yellow"}}o(Tr,"crossColor");function Fr(i){if(i.length<2)return null;const t=Math.max(0,Math.floor((i.length-2)/2)),e=i[t],s=i[t+1];return e.copy().sum(s).divide(2)}o(Fr,"getLabelAnchor");const Hr=w.observer(({edge:i,points:t})=>{const e=i?.state?.label??"",s=Fr(t);if(!i||!s)return null;const n=i.state.labelPositioning??new m([0,0]),r=s.x+n.x,a=s.y+n.y;return i.isEditingLabel?u.jsx("foreignObject",{x:r-90,y:a-18,width:180,height:36,children:u.jsx("input",{className:"edge-label-input",value:i.labelDraft??e,autoFocus:!0,onChange:o(l=>{g.runInAction(()=>{i.labelDraft=l.target.value})},"onChange"),onBlur:o(()=>i.confirmLabelEdit?.(),"onBlur"),onKeyDown:o(l=>{l.key==="Enter"&&(l.preventDefault(),i.confirmLabelEdit?.()),l.key==="Escape"&&(l.preventDefault(),i.cancelLabelEdit?.()),l.stopPropagation()},"onKeyDown")})}):e?u.jsxs("g",{className:"edge-label",onDoubleClick:o(l=>{l.stopPropagation(),i.beginLabelEdit?.()},"onDoubleClick"),children:[u.jsx("rect",{x:r-44,y:a-12,width:88,height:24,rx:6,ry:6}),u.jsx("text",{x:r,y:a,textAnchor:"middle",dominantBaseline:"middle",children:e})]}):null}),te=w.observer(({edge:i,points:t,color:e,width:s=2,arrowSize:n=8,startType:r="none",endType:a="arrow",lineStyle:c="solid",endStroke:l=e,startStroke:d=e,onMidpointMouseDown:h,onEndpointMouseDown:x,className:p,draggable:f})=>{const y=o(P=>E.useMemo(()=>`marker-${P}-${Math.random().toString(36).slice(2)}`,[]),"makeId"),v=y("start"),k=y("end");if(!t||t.length<2)return null;const $="M "+t.map(P=>`${P.x} ${P.y}`).join(" L "),M=c==="dashed"?`${s*3},${s*2}`:c==="dotted"?`${s},${s*2}`:"none",_=!!(i&&f&&(i.state.hover||i.state.dragging||i.state.selected)),H=!!(i&&f&&(i.state.selected||i.state.dragging));return u.jsxs("g",{"data-id":i?.id,className:["edge",i?.state.dragging&&"dragging",i?.state.selected&&"selected",i?.state.hover&&"hover",p].filter(Boolean).join(" "),onMouseEnter:o(()=>{g.runInAction(()=>{i&&(i.state.hover=!0)})},"onMouseEnter"),onMouseLeave:o(()=>{g.runInAction(()=>{i&&(i.state.hover=!1)})},"onMouseLeave"),children:[u.jsxs("defs",{children:[u.jsx(Dn,{id:v,color:d,type:r,width:s,arrowSize:n,flip:!1}),u.jsx(Dn,{id:k,color:l,type:a,width:s,arrowSize:n,flip:!1})]}),u.jsx("path",{d:$,strokeWidth:s+8,fill:"none",className:"edge-hover-area",onClickCapture:o(()=>{Qt(i,{type:"edge"})},"onClickCapture")}),u.jsx("path",{d:$,fill:"none",className:"edge-path",style:{"--edge-hover-stroke-width":`${Math.max(s+4,6)}px`},stroke:e,strokeWidth:s,strokeDasharray:M,markerStart:r!=="none"?`url(#${v})`:void 0,markerEnd:a!=="none"?`url(#${k})`:void 0,onClickCapture:o(()=>{Qt(i,{type:"edge"})},"onClickCapture")}),i&&u.jsx(Hr,{edge:i,points:t}),Oe.instance.showDragHints&&t.map((P,O)=>u.jsx(zn,{coordinates:P,size:15,stroke:Tr(P)},O)),_&&u.jsx(Dr,{edge:i,points:t,onMouseDown:o((P,O)=>{h?.(P,O)},"onMouseDown")}),H&&u.jsxs(u.Fragment,{children:[u.jsx("circle",{cx:t[0].x,cy:t[0].y,r:6,className:"edge_endpoint_drag_point","data-edge-id":i?.id,"data-endpoint":"from",onMouseDownCapture:o(P=>{Qt(i,{type:"endpoint",endpoint:"from"}),x?.("from",P)},"onMouseDownCapture")}),u.jsx("circle",{cx:t.at(-1).x,cy:t.at(-1).y,r:6,className:"edge_endpoint_drag_point","data-edge-id":i?.id,"data-endpoint":"to",onMouseDownCapture:o(P=>{Qt(i,{type:"endpoint",endpoint:"to"}),x?.("to",P)},"onMouseDownCapture")})]})]})}),Gr=yt(w.observer(()=>{const i=z.use(),t=i.getExtension(Jt),e=t.arrowSteps;return e.length?u.jsxs(u.Fragment,{children:[t?.candidateGateway&&u.jsx(zn,{coordinates:t.candidateGateway.coordinates,stroke:"yellow"}),u.jsx(te,{points:e,width:2*i.canvas.scale,arrowSize:8*i.canvas.scale})]}):null})),Rr=yt(w.observer(()=>{const t=z.use().getExtension(Yt);return t?.enabled?u.jsx(u.Fragment,{children:u.jsx(te,{points:t.get(),startType:"measure",endType:"measure",width:2,arrowSize:12,lineStyle:"dotted",startStroke:"red",endStroke:"red",className:"measurement"})}):null})),Yr=E.forwardRef(({children:i,paths:t,transform:e,selected:s,onClick:n,className:r,roundedBorders:a=!1,label:c,labelColor:l,labelFontSize:d,labelFontFamily:h="sans-serif",labelOffset:x,"data-id":p,...f},y)=>{const v=z.use();return u.jsxs("g",{...f,"data-id":p,className:`${r||""} ${s?"selected":""} base_shape`,transform:e,onClick:n,ref:y,children:[u.jsx("defs",{children:t.map((k,$)=>{if(!k.arrow)return null;const M=6,{size:_=M,color:H=k.stroke??"#111"}=k.arrow,P=`arrow-${$}`;return u.jsx("marker",{id:P,viewBox:"0 0 10 10",refX:M*1.5,refY:"5",markerWidth:_,markerHeight:_,orient:"auto-start-reverse",markerUnits:"userSpaceOnUse",children:u.jsx("path",{d:"M 0 0 L 10 5 L 0 10",fill:"none",stroke:H,strokeWidth:Math.max(1,M*.9),strokeLinecap:"round",strokeLinejoin:"round"})},$)})}),t.map((k,$)=>{const{d:M,fill:_="none",stroke:H="#111",strokeWidth:P=3,strokeStyle:O="solid",animated:L=!1,animationDuration:G=1,nonScalingStroke:it=!0,roundedBorders:ge=a,arrow:dt}=k;let ht;switch(O){case"dashed":ht="10 5";break;case"dotted":ht="2 6";break}const pe=L?u.jsx("animate",{attributeName:"stroke-dashoffset",from:"0",to:ht?`-${ht.split(" ").reduce((gn,ja)=>+gn+ +ja,0)}`:"-15",dur:`${G}s`,repeatCount:"indefinite"}):null,Xe=dt?`url(#arrow-${$})`:void 0;return u.jsx("path",{d:M,fill:_,stroke:H,strokeWidth:P,strokeDasharray:ht,strokeLinecap:ge?"round":"butt",strokeLinejoin:ge?"round":"miter",vectorEffect:it?"non-scaling-stroke":void 0,markerStart:dt?.position==="start"||dt?.position==="both"?Xe:void 0,markerEnd:!dt||dt.position==="end"||dt.position==="both"?Xe:void 0,children:pe},$)}),c&&u.jsx("text",{x:x?.x??0,y:x?.y??0,textAnchor:"middle",dominantBaseline:"middle",fontFamily:h,fontSize:d,fill:l,pointerEvents:"none",...v.canvas.scale>1?{shapeRendering:"geometricPrecision",style:{paintOrder:"stroke",stroke:"transparent",strokeWidth:.5,WebkitFontSmoothing:"antialiased",transform:"translateZ(0)"}}:{},children:c}),i]})}),ee=w.observer(Yr),Tn=o((i,t=0)=>{const{x:e,y:s,width:n,height:r}=i;if(t<=0)return`M${e},${s} h${n} v${r} h${-n}Z`;const a=Math.min(t,n/2,r/2);return[`M${e+a},${s}`,`h${n-2*a}`,`a${a},${a} 0 0 1 ${a},${a}`,`v${r-2*a}`,`a${a},${a} 0 0 1 ${-a},${a}`,`h${-(n-2*a)}`,`a${a},${a} 0 0 1 ${-a},${-a}`,`v${-(r-2*a)}`,`a${a},${a} 0 0 1 ${a},${-a}`,"Z"].join(" ")},"getRectPath"),Wr=o((i,t)=>`M ${i.x-t}, ${i.y}
4
4
  a ${t},${t} 0 1,0 ${2*t},0
5
- a ${t},${t} 0 1,0 -${2*t},0`,"getCirclePath"),ja=xt(y.observer(()=>{const t=T.use().getExtension(F);return t.selectionMode?h.jsx(h.Fragment,{children:h.jsx(Kt,{paths:[{d:In(t.box,0),strokeWidth:1}],labelOffset:new p,className:"selection_square"})}):null})),$a=Ma(()=>null),An=b.forwardRef(({children:i,className:t,style:e},s)=>h.jsx("svg",{ref:s,className:t,width:"100%",height:"100%",style:{position:"absolute",top:0,left:0,pointerEvents:"none",...e},xmlns:"http://www.w3.org/2000/svg",children:i}));function Ba(i){return Array.isArray(i)?i:[i]}o(Ba,"arrayOrArray");const Na=y.observer(({gateway:i})=>{const e=T.use().getExtension(Ut);return h.jsx(Kt,{paths:[{d:Ca(i.coordinates,i.radius),fill:i.fill,stroke:i.stroke,strokeWidth:i.strokeWidth}],className:"diagram__node__gateway","data-gateway-parent":i.parent.id,"data-gateway-id":i.id,"data-gateway-orientation":i.orientation,onMouseOut:o(s=>{const n=s.relatedTarget;n instanceof Element&&n.closest(`[data-id="${i.parent.id}"], [data-gateway-parent="${i.parent.id}"]`)||i.parent.setState("hover",!1)},"onMouseOut"),onMouseDownCapture:e.startConnectionFrom.bind(e,i)},i.id)});function La(i){const t=i.classList.string,e=i.box;if(t.includes("bpmn__event")||t.includes("bpmn__gate")){const s=Math.max(e.width,120);return{x:e.x+e.width/2-s/2,y:e.y+70,width:s,height:Math.max(i.state.labelFontSize??14,14)*1.25}}return{x:e.x,y:e.y,width:e.width,height:e.height}}o(La,"getScreenLabelBox");function Da(i){const t=i.classList.string;return i.Renderer&&i.state.label&&!i.editionMode&&t.includes("bpm__node")&&!t.includes("bpm__lanes")}o(Da,"shouldRenderScreenLabel");const Oa=y.observer(({node:i})=>{const t=i.Renderer;return h.jsx(t,{})}),Ta=y.observer(({node:i})=>{if(!Da(i))return null;const t=La(i),e={"--screen-label-x":`${t.x}px`,"--screen-label-y":`${t.y}px`,"--screen-label-width":`${t.width}px`,"--screen-label-height":`${t.height}px`,"--screen-label-font-size":`${i.state.labelFontSize??14}px`,"--screen-label-z-index":i.state.hover?(i.state.zIndex??100)+1:i.state.zIndex??100};return h.jsx("pre",{className:"screen_label",style:e,children:i.state.label})}),Fa=y.observer(()=>{const i=T.use();return h.jsx(h.Fragment,{children:i.nodes.filter(t=>t.Renderer).map(t=>h.jsx(Oa,{node:t},t.id))})}),za=y.observer(()=>{const i=T.use();return h.jsx("div",{style:{width:`${i.canvas.size.x}px`,height:`${i.canvas.size.y}px`},children:h.jsx(Fa,{})})}),Ha=y.observer(()=>{const i=T.use();return h.jsx("div",{className:"screen_labels",children:i.nodes.map(t=>h.jsx(Ta,{node:t},t.id))})}),Ga=y.observer(({node:i})=>i.parent?h.jsx(h.Fragment,{children:!i.Renderer&&h.jsx(Kt,{paths:[{d:In(i.box,10),stroke:i.state.stroke,strokeWidth:i.state.strokewWidth??3,fill:i.state.fill}],onMouseOver:o(()=>{u.runInAction(()=>{i.state.hover=!0})},"onMouseOver"),onMouseOut:o(t=>{const e=t.relatedTarget;e instanceof Element&&e.closest(`[data-id="${i.id}"], [data-gateway-parent="${i.id}"]`)||u.runInAction(()=>{i.state.hover=!1})},"onMouseOut"),className:i.classList.string,label:i.state.label,labelOffset:i.coordinates.sum(i.box.size.half),labelFontSize:i.state.labelFontSize??14,selected:i.selected,"data-id":i.id},i.id)}):null),Ra=y.observer(({edge:i})=>h.jsx(qt,{edge:i,points:i.steps,endType:i.arrowHeadEnd??"arrow",startType:i.arrowHeadStart??"none",lineStyle:i.lineStyle??"solid",color:i.stroke,width:i.strokeWidth??2,draggable:!0,onMidpointMouseDown:o((t,e)=>{i.dragStart(t,e)},"onMidpointMouseDown"),onEndpointMouseDown:o((t,e)=>{i.dragEndpoint(t,e)},"onEndpointMouseDown")})),Ya=xt(y.observer(()=>{const i=T.use(),e=i.getExtension(F)?.selectedNodes??[],s=[...i.nodes.filter(a=>!e.includes(a)),...e],n=s.filter(a=>a.state.hover||a.selected).flatMap(a=>a.gateways);return h.jsxs(h.Fragment,{children:[s.map(a=>h.jsx(Ga,{node:a},a.id)),i.edges.map(a=>h.jsx(Ra,{edge:a},a.id)),n.map(a=>h.jsx(Na,{gateway:a},`${a.parent.id}-${a.id}`))]})}));function Wa(){return[h.jsx(Ya,{},"ScalableShapes"),h.jsx(za,{},"RenderCustomRenderers")]}o(Wa,"shapes");const Xa=y.observer(({children:i})=>{const t=T.use(),e=t.getExtension(it);t.canvas.setGridSize(e?.gridSize??50);const s=[],n=[],a=[];return b.Children.forEach([...Ba(i),...Wa()],r=>{r.type.__scalable?s.push(r):r.type.__scalableBack?a.push(r):n.push(r)}),h.jsxs("div",{className:`canvas__frame canvas__frame--screen-labels ${t.showGrid?"canvas__frame--grid":""}`,children:[h.jsxs("div",{ref:t.canvas.useRef,children:[a.length&&h.jsx(An,{className:"background",children:a}),n.length&&h.jsx("div",{className:"scalable_components",children:n}),s.length&&h.jsx(An,{className:"foreground",children:s})]}),h.jsx(Ha,{})]})});function Va({children:i,className:t,...e}){return h.jsx("div",{...e,className:["stage",t].filter(Boolean).join(" "),children:i})}o(Va,"Stage");const Ua=xt(y.observer(()=>{const i=T.use(),t=i.getExtension(Gt),e=i.getExtension(Rt);return h.jsxs(h.Fragment,{children:[t?.proposals.map(s=>{const n=s.type==="h"?`M ${s.x} ${s.range[0]} V ${s.range[1]}`:`M ${s.range[0]} ${s.y} H ${s.range[1]}`;return h.jsx(Kt,{className:"alignment_sugestion",paths:[{d:n}]},s.id)}),e?.proposals.map(s=>{const n=`M ${s.from.x} ${s.from.y} L ${s.to.x} ${s.to.y}`;return h.jsx(Kt,{className:"distance_balance_sugestion",paths:[{d:n,arrow:{position:"both",size:8}}]},n)})]})})),qa=xt(y.observer(()=>{const t=T.use().getExtension(kn);return t?.enabled?h.jsxs(h.Fragment,{children:[t.grid?.edges.map(e=>{const{from:s,to:n}=e,a=`M ${s.x} ${s.y} L ${n.x} ${n.y}`,r=t.highlighted.has(e);return h.jsx(qt,{className:`path_finding_grid_edge ${r?"highlighted":""}`,points:[s,n],endType:"none"},a)}),t.points?.length&&h.jsx(qt,{className:"path_finding_grid_edge_chosen",points:t.points})]}):null})),U=8,ds=2,Ka=120;function Za(i,t){const e=Math.max(U,Math.min(i.x,window.innerWidth-t.width-U)),s=Math.max(U,Math.min(i.y,window.innerHeight-t.height-U));return{x:e,y:s}}o(Za,"clampPosition");function Ja({item:i,onAction:t}){const e=!!i.submenu?.length,s=b.useRef(null),n=b.useRef(null),a=b.useRef(null),[r,l]=b.useState(!1),[c,d]=b.useState(!1),[g,x]=b.useState({left:0,top:-4,openToLeft:!1}),m=b.useCallback(()=>{if(!s.current||!n.current)return;const E=s.current.getBoundingClientRect(),M=n.current.getBoundingClientRect();let H=E.width-ds,P=!1;E.right-ds+M.width>window.innerWidth-U&&(H=-M.width+ds,P=!0),E.left+H<U&&(H=U-E.left,P=!1);let D=-4,$=E.top+D;$+M.height>window.innerHeight-U&&(D-=$+M.height-(window.innerHeight-U),$=E.top+D),$<U&&(D+=U-$),x({left:H,top:D,openToLeft:P}),d(!0)},[]);b.useEffect(()=>{r||d(!1)},[r]),b.useEffect(()=>()=>{a.current!==null&&window.clearTimeout(a.current)},[]),b.useLayoutEffect(()=>{r&&m()},[r,m]),b.useEffect(()=>{if(!r)return;const E=o(()=>{m()},"handleResize");return window.addEventListener("resize",E),()=>{window.removeEventListener("resize",E)}},[r,m]);const f=o(()=>{a.current!==null&&(window.clearTimeout(a.current),a.current=null)},"clearCloseTimeout"),v=o(()=>{e&&(f(),l(!0))},"openSubmenu"),k=o(()=>{f(),l(!1)},"closeSubmenu"),A=o(()=>{e&&(f(),a.current=window.setTimeout(()=>{l(!1),a.current=null},Ka))},"scheduleCloseSubmenu"),B=o(E=>{const M=E.relatedTarget;(!M||!E.currentTarget.contains(M))&&k()},"handleBlur");return h.jsxs("li",{ref:s,className:["diagram__context_menu_item",i.disabled&&"disabled",i.danger&&"danger",e&&"has_submenu",r&&"submenu_open"].filter(Boolean).join(" "),onMouseEnter:v,onMouseLeave:A,onFocusCapture:v,onBlurCapture:B,children:[h.jsxs("button",{type:"button",className:"diagram__context_menu_button",disabled:i.disabled,onClick:o(E=>{E.stopPropagation(),E.preventDefault(),t(i)},"onClick"),children:[h.jsx("span",{className:"diagram__context_menu_label",children:i.label}),e&&h.jsx("span",{className:"diagram__context_menu_chevron",children:g.openToLeft?"<":">"})]}),e&&r&&h.jsx("div",{ref:n,className:"diagram__context_menu_submenu",style:{left:g.left,top:g.top,opacity:c?1:0},children:h.jsx("div",{className:"diagram__context_menu diagram__context_menu--nested",children:h.jsx(Cn,{items:i.submenu,onAction:t})})})]})}o(Ja,"MenuItem");function Cn({items:i,onAction:t}){return h.jsx("ul",{className:"diagram__context_menu_list",children:i.map((e,s)=>h.jsx(Ja,{item:e,onAction:t},`${e.label}_${s}`))})}o(Cn,"MenuItems");const Qa=y.observer(({menu:i})=>{const t=b.useRef(null),[e,s]=b.useState(i.position);return b.useEffect(()=>{i.opened&&s(i.position)},[i.openVersion,i.opened,i.position]),b.useLayoutEffect(()=>{if(!i.opened||!t.current)return;const{width:n,height:a}=t.current.getBoundingClientRect(),{x:r,y:l}=Za(i.position,{width:n,height:a});(r!==e.x||l!==e.y)&&s({x:r,y:l})},[i.openVersion,i.opened,i.position,e.x,e.y]),b.useEffect(()=>{if(!i.opened)return;const n=o(c=>{c.code==="Escape"&&i.close()},"closeOnEscape"),a=o(c=>{const d=c.target;d&&t.current?.contains(d)||i.close()},"closeOnOutsideMouseDown"),r=o(c=>{const d=c.target;if(d&&t.current?.contains(d)){c.preventDefault();return}i.close()},"closeOnOutsideContextMenu"),l=o(()=>{i.close()},"closeOnResize");return document.addEventListener("keydown",n),document.addEventListener("mousedown",a,!0),document.addEventListener("contextmenu",r,!0),window.addEventListener("resize",l),()=>{document.removeEventListener("keydown",n),document.removeEventListener("mousedown",a,!0),document.removeEventListener("contextmenu",r,!0),window.removeEventListener("resize",l)}},[i,i.openVersion,i.opened]),!i.opened||!i.elements.length?null:h.jsx("div",{className:"diagram__context_menu_layer",children:h.jsx("div",{ref:t,className:"diagram__context_menu",style:{left:e.x,top:e.y},onMouseDown:o(n=>{n.stopPropagation()},"onMouseDown"),onContextMenu:o(n=>{n.preventDefault(),n.stopPropagation()},"onContextMenu"),children:h.jsx(Cn,{items:i.elements,onAction:o(n=>{i.execute(n)},"onAction")})})})}),Ci=class Ci{_elements=[];_opened=!1;_position={x:0,y:0};_openVersion=0;Component=o(()=>h.jsx(Qa,{menu:this}),"Component");constructor(){u.makeAutoObservable(this,{Component:!1},{autoBind:!0})}get elements(){return this._elements}get opened(){return this._opened}get position(){return this._position}get openVersion(){return this._openVersion}open(t,e={}){if(!t.length){this.close();return}const s=mt.getInstance().coordinates;this._elements=t,this._position={x:e.x??s.x,y:e.y??s.y},this._openVersion+=1,this._opened=!0}close(){this._opened&&(this._opened=!1,this._elements=[])}execute(t){if(!t.disabled){try{const e=t.onClick();e instanceof Promise&&e.catch(()=>{})}catch{}t.submenu?.length||this.close()}}};o(Ci,"ContextMenuStore");let hs=Ci;const us=new hs,Zt=o(()=>{},"noop");function tr(){return typeof navigator<"u"&&!!navigator.clipboard?.writeText&&!!navigator.clipboard?.readText}o(tr,"hasClipboardSupport");function jn(i){return()=>{i().catch(()=>{})}}o(jn,"runAsync");function er(i,t,e){const s=i.getExtension(F),n=t.closest(".diagram__node")?.dataset.id,a=t.closest(".edge")?.dataset.id,r=n?i.getNodeById(n):void 0,l=a?i.getEdgeById(a):void 0;r&&!r.selected?(s.clearSelection(),s.selectNode(r)):l&&!l.state.selected&&(s.clearSelection(),s.selectEdge(l));const c=s.selectedNodes,d=s.selectedEdges,g=c.length+d.length>0,x=tr(),m=x&&c.length>0,f=o(()=>{s.selectedNodes.forEach(A=>{i.delete(A)}),s.selectedEdges.forEach(A=>{i.disconnect(A)})},"deleteSelection"),v=[];r?v.push({label:`Node: ${r.state.label||r.id}`,onClick:Zt,submenu:[{label:"Center node",onClick:o(()=>{i.canvas.centerOnPoint(r.box.middle)},"onClick")},{label:"Delete node",onClick:o(()=>{i.delete(r)},"onClick"),danger:!0}]}):l&&v.push({label:"Edge",onClick:Zt,submenu:[{label:"Delete edge",onClick:o(()=>{i.disconnect(l)},"onClick"),danger:!0}]}),g&&v.push({label:"Delete selection",onClick:f,danger:!0}),v.push({label:"Selection",onClick:Zt,submenu:[{label:s.selectionMode==="element"?"Element mode (active)":"Element mode",onClick:o(()=>{s.toggleSelectionMode("element")},"onClick")},{label:s.selectionMode==="area"?"Area mode (active)":"Area mode",onClick:o(()=>{s.toggleSelectionMode("area")},"onClick")},{label:"Clear selection",onClick:o(()=>{s.clearSelection()},"onClick"),disabled:!g},{label:"Copy selection",onClick:jn(async()=>{await navigator.clipboard.writeText(s.copy())}),disabled:!m},{label:"Paste",onClick:jn(async()=>{const A=await navigator.clipboard.readText();A.trim().length&&i.paste(A)}),disabled:!x}]});const k=new p([e.x,e.y]);return v.push({label:"View",onClick:Zt,submenu:[{label:i.showGrid?"Hide grid":"Show grid",onClick:o(()=>{i.toggleGrid()},"onClick")},{label:`Zoom (${Math.round(i.canvas.scale*100)}%)`,onClick:Zt,submenu:[{label:"Zoom in",onClick:o(()=>{i.canvas.setScale(i.canvas.scale+.1,k)},"onClick")},{label:"Zoom out",onClick:o(()=>{i.canvas.setScale(i.canvas.scale-.1,k)},"onClick")},{label:"Reset zoom",onClick:o(()=>{i.canvas.setScale(1,k)},"onClick")}]}]}),v}o(er,"buildDiagramContextMenu");const sr=y.observer(({diagram:i,leftPanel:t,toolbar:e})=>{const s=o(n=>{const a=n.target;if(a instanceof HTMLElement){if(a.closest('input, textarea, [contenteditable="true"]')){us.close();return}n.preventDefault(),us.open(er(i,a,{x:n.clientX,y:n.clientY}),{x:n.clientX,y:n.clientY})}},"handleContextMenu");return h.jsxs(i.Context,{children:[h.jsxs(Va,{onContextMenu:s,children:[t,h.jsxs(Xa,{children:[h.jsx($a,{}),h.jsx(Sa,{}),h.jsx(Ia,{}),h.jsx(Ua,{}),h.jsx(ja,{}),h.jsx(qa,{})]})]}),h.jsx(us.Component,{}),e]})}),$n=b.createContext(null);function ir(){return b.useContext($n)}o(ir,"useEditableNode");const ji=class ji extends Y{constructor(t,e,s){super(t),this.src=t,this.previousLabel=e,this.nextLabel=s}src;previousLabel;nextLabel};o(ji,"DEditNodeEvent");let gs=ji;const $i=class $i extends Me{editionMode=!1;constructor(t,e){super(t,e),u.makeObservable(this,{editionMode:u.observable,edit:u.action,cancel:u.action,confirm:u.action})}get label(){return this.state.label}previous=null;edit(){this.previous=this.state.label,this.editionMode=!0}cancel(){this.state.label=this.previous,this.editionMode=!1}confirm(){return this.emit(new gs(this,this.previous,this.state.label)).cancelled?(this.cancel(),!1):(this.editionMode=!1,!0)}get isChanged(){return this.previous!==this.state.label}Renderer=o(()=>h.jsx($n.Provider,{value:this,children:h.jsx(this.Render,{})}),"Renderer")};o($i,"EditableNode");let Q=$i;function Bn(i){return["Enter","Escape"].includes(i.code)}o(Bn,"allowEventInEdition");const Bi=class Bi extends O{inEdition=new Set;cancel(){this.inEdition.forEach(t=>t.cancel()),this.inEdition.clear()}confirm(){this.inEdition.forEach(t=>t.confirm()),this.inEdition.clear()}editNode(t){t.edit(),this.inEdition.add(t)}init(){this.diagram.onEvent(vt,t=>{switch(t.code){case"F2":{const e=this.diagram.getExtension(F).selectedNodes[0];e instanceof Q&&this.editNode(e);break}case"Escape":{this.cancel();break}case"Enter":t.shift||this.confirm()}}),this.diagram.onEvent(dt,t=>{(!t.node||t.node instanceof Q&&!this.inEdition.has(t.node))&&this.confirm()},this.diagram.priorities.Mouse_Down_Dragger+1),this.diagram.onEvent(le,t=>{t.node instanceof Q&&!this.inEdition.has(t.node)&&(this.confirm(),this.editNode(t.node))})}};o(Bi,"EditionMode");let ps=Bi;const Ni=class Ni extends T{constructor(t){super(t),this.registerClass(Q),this.registerExtension(ps)}};o(Ni,"EditableDiagram");let Jt=Ni;const Li=class Li extends Q{constructor(t,e){super(t,e),this.classList.add("bpm__node","diagram__node")}};o(Li,"BPMNode");let rt=Li;function nr(i){return{position:"absolute",left:`${i.box.x}px`,top:`${i.box.y}px`,zIndex:i.state.hover?i.state.zIndex+1:i.state.zIndex,width:`${i.box.width}px`,height:`${i.box.height}px`}}o(nr,"customRendererStyles");function X(i){const t=nr(i);return i.state.fill&&(t["--node-fill"]=i.state.fill),i.state.stroke&&(t["--node-stroke"]=i.state.stroke),{onMouseOver:o(()=>i.setState("hover",!0),"onMouseOver"),onMouseOut:o(e=>{const s=e.relatedTarget;s instanceof Element&&s.closest(`[data-id="${i.id}"], [data-gateway-parent="${i.id}"]`)||i.setState("hover",!1)},"onMouseOut"),"data-id":i.id,style:t,className:`${i.classList.string} ${i.selected?"selected":""}`}}o(X,"customRendererProps");const q=y.observer(()=>{const i=ir(),t=b.useRef(!1);return i.editionMode?h.jsx("textarea",{className:"editable__label",autoFocus:!0,value:i.state.label,onChange:o(e=>{u.runInAction(()=>{i.state.label=e.target.value})},"onChange"),onKeyDownCapture:o(e=>{i.editionMode&&!Bn(e.nativeEvent)&&e.nativeEvent.stopImmediatePropagation()},"onKeyDownCapture"),ref:o(e=>{e instanceof HTMLTextAreaElement&&!t.current&&(t.current=!0,e.select())},"ref")}):(t.current=!1,h.jsx("pre",{className:"editable__label",children:i.state.label}))});function tt(i,t){return`bpmn__event__${i[t]}`}o(tt,"getEnumStr");var Pt=(i=>(i[i.start=0]="start",i[i.end=1]="end",i[i.intermediate=2]="intermediate",i))(Pt||{});const Di=class Di extends rt{type;constructor(t,e){super(t,e),this.setType(e.type??0),this.state.box.assignDimensions(new p([80,80])),this.classList.add("bpmn__event")}setType(t){if(this.type!==t&&!this.emit(new de(this)).cancelled){this.type=t;for(const e of Object.values(Pt))this.classList.delete(tt(Pt,e));switch(t){case 1:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(Pt,1));break;case 0:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(Pt,0));break;case 2:this.classList.add(tt(Pt,2));break}}}serialize(){return{...super.serialize(),type:this.type}}deserialize(t){this.setType(t.type??0),super.deserialize(t)}Render=y.observer(()=>h.jsx("div",{...X(this),children:h.jsx(q,{})}))};o(Di,"EventNode");let fs=Di;var yt=(i=>(i[i.inclusive=0]="inclusive",i[i.exclusive=1]="exclusive",i[i.parallel=2]="parallel",i[i.eventBased=3]="eventBased",i))(yt||{});const Oi=class Oi extends rt{type;constructor(t,e){super(t,e),this.setType(e.type??1),this.state.box.assignDimensions(new p([80,80])),this.classList.add("bpmn__gate")}setType(t){if(this.type!==t&&!this.emit(new de(this)).cancelled){this.type=t;for(const e of Object.values(yt))this.classList.delete(tt(yt,e));switch(t){case 1:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(yt,1));break;case 0:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(yt,0));break;case 2:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(yt,2));break;case 3:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(tt(yt,3));break}}}serialize(){return{...super.serialize(),type:this.type}}deserialize(t){this.setType(t.type??1),super.deserialize(t)}Render=y.observer(()=>{const t=this.state.box.width,e=this.state.box.height;return h.jsxs("div",{...X(this),children:[h.jsx("svg",{viewBox:`0 0 ${t} ${e}`,style:{width:`${t}px`,height:`${e}px`},children:h.jsx("polygon",{points:`${t/2} 0 ${t} ${e/2} ${t/2} ${e} 0 ${e/2}`})}),h.jsx(q,{})]})})};o(Oi,"GateNode");let ms=Oi;const Ti=class Ti extends rt{constructor(t,e){super(t,{...e,box:e.box||new w([0,0,200,100])}),this.classList.add("bpmn__task")}Render=y.observer(()=>h.jsx("div",{...X(this),children:h.jsx(q,{})}))};o(Ti,"TaskNode");let xs=Ti;const Fi=class Fi extends rt{sourceType="unknown";constructor(t,e){super(t,{...e,box:e.box||new w([0,0,200,100])}),this.sourceType=e.sourceType||"unknown",this.classList.add("bpmn__unknown")}serialize(){return{...super.serialize(),sourceType:this.sourceType}}deserialize(t){super.deserialize(t),this.sourceType=t.sourceType||"unknown"}Render=y.observer(()=>h.jsxs("div",{...X(this),children:[h.jsx("div",{className:"bpmn__unknown__marker",children:"?"}),h.jsx(q,{})]}))};o(Fi,"UnknownBPMNNode");let ys=Fi;var Nn={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Ln=b.createContext&&b.createContext(Nn),ar=["attr","size","title"];function rr(i,t){if(i==null)return{};var e,s,n=or(i,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(i);for(s=0;s<a.length;s++)e=a[s],t.indexOf(e)===-1&&{}.propertyIsEnumerable.call(i,e)&&(n[e]=i[e])}return n}o(rr,"_objectWithoutProperties");function or(i,t){if(i==null)return{};var e={};for(var s in i)if({}.hasOwnProperty.call(i,s)){if(t.indexOf(s)!==-1)continue;e[s]=i[s]}return e}o(or,"_objectWithoutPropertiesLoose");function Se(){return Se=Object.assign?Object.assign.bind():function(i){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var s in e)({}).hasOwnProperty.call(e,s)&&(i[s]=e[s])}return i},Se.apply(null,arguments)}o(Se,"_extends");function Dn(i,t){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);t&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(i,n).enumerable})),e.push.apply(e,s)}return e}o(Dn,"ownKeys");function Ie(i){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?Dn(Object(e),!0).forEach(function(s){lr(i,s,e[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(e)):Dn(Object(e)).forEach(function(s){Object.defineProperty(i,s,Object.getOwnPropertyDescriptor(e,s))})}return i}o(Ie,"_objectSpread");function lr(i,t,e){return(t=cr(t))in i?Object.defineProperty(i,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[t]=e,i}o(lr,"_defineProperty");function cr(i){var t=dr(i,"string");return typeof t=="symbol"?t:t+""}o(cr,"_toPropertyKey");function dr(i,t){if(typeof i!="object"||!i)return i;var e=i[Symbol.toPrimitive];if(e!==void 0){var s=e.call(i,t);if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(i)}o(dr,"_toPrimitive");function On(i){return i&&i.map((t,e)=>b.createElement(t.tag,Ie({key:e},t.attr),On(t.child)))}o(On,"Tree2Element");function hr(i){return t=>b.createElement(ur,Se({attr:Ie({},i.attr)},t),On(i.child))}o(hr,"GenIcon");function ur(i){var t=o(e=>{var s=i.attr,n=i.size,a=i.title,r=rr(i,ar),l=n||e.size||"1em",c;return e.className&&(c=e.className),i.className&&(c=(c?c+" ":"")+i.className),b.createElement("svg",Se({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},e.attr,s,r,{className:c,style:Ie(Ie({color:i.color||e.color},e.style),i.style),height:l,width:l,xmlns:"http://www.w3.org/2000/svg"}),a&&b.createElement("title",null,a),i.children)},"elem");return Ln!==void 0?b.createElement(Ln.Consumer,null,e=>t(e)):t(Nn)}o(ur,"IconBase");function gr(i){return hr({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M128,24A104,104,0,1,0,232,128,104.13,104.13,0,0,0,128,24Zm40,112H136v32a8,8,0,0,1-16,0V136H88a8,8,0,0,1,0-16h32V88a8,8,0,0,1,16,0v32h32a8,8,0,0,1,0,16Z"},child:[]}]})(i)}o(gr,"PiPlusCircleFill");const pr=o(({children:i})=>h.jsx("div",{className:"node__tools",children:i}),"NodeTools");function Qt(i){return typeof i=="object"&&i?Array.isArray(i)?i.map(t=>Qt(t)):Object.fromEntries(Object.entries(i).map(([t,e])=>[t,Qt(e)])):i}o(Qt,"cloneDeep");function Ae(i,t){t.nativeEvent.stopImmediatePropagation();const e=i.diagram,s=e.canvas.inverseFit(new p(t)),n=i.state.box.width,a=at(N({},"mousemove",r=>{const c=e.canvas.inverseFit(new p(r)).x-s.x;i.state.box.width=Math.max(300,n+c)}),N({},"mouseup",()=>{a()}))}o(Ae,"resizeLane");const fr=y.observer(({lanes:i})=>i.selected?h.jsxs(h.Fragment,{children:[h.jsx("div",{onMouseDown:Ae.bind(Ae,i),className:"lane__resizeBar"}),h.jsx("div",{onMouseDown:Ae.bind(Ae,i),className:"lane__resize"})]}):null),zi=class zi extends Y{};o(zi,"AddLaneEvent");let ws=zi;const I=class I extends rt{constructor(t,e){super(t,{...e,label:"",zIndex:50,groupChildren:!0}),u.makeObservable(this,{pools:u.observable,addPool:u.action,editionIndex:u.observable}),this.classList.add("bpm__lanes"),this.state.box.width=250,this._gateways.clear()}get box(){const t=this.pools.length*I.laneHeight;return new w([this.state.box.x,this.state.box.y,this.state.box.width,t+I.lanePadding*2])}addPool(){if(!this.emit(new ws(this)).cancelled){let t=0;for(;this.pools.some(s=>s.name===`pool${t}`);)t++;const e={label:`Pool ${t}`,name:`pool${t}`};this.pools.push(e)}return this.pools.at(-1)}editionIndex=0;previousPools=[];cancel(){this.editionIndex=0,this.pools=this.previousPools,this.previousPools=[],super.cancel()}confirm(){return super.confirm()?(this.editionIndex=0,this.previousPools=[],!0):!1}edit(){super.edit(),this.previousPools=Qt(this.pools)}resetPools(){this.pools=[]}deserialize(t){super.deserialize(t),this.pools=t.pools}serialize(){return{...super.serialize(),pools:Qt(this.pools)}}pools=[{label:"Default",name:"default"}];Render=y.observer(()=>{const t=b.useRef(-1),e=this.pools.length*I.laneHeight;return h.jsxs("div",{...X(this),children:[h.jsxs("svg",{className:"lane__svg",viewBox:`0 0 ${this.state.box.width} ${e}`,preserveAspectRatio:"none",children:[h.jsx("rect",{className:"lane__background",x:0,y:0,width:this.state.box.width,height:e}),this.pools.map((s,n)=>{const a=n*I.laneHeight;return h.jsxs("g",{children:[h.jsx("rect",{className:"lane__head",x:0,y:a,width:I.laneHeaderWidth,height:I.laneHeight,onDoubleClick:o(()=>{this.edit(),u.runInAction(()=>{this.editionIndex=n})},"onDoubleClick")}),h.jsx("rect",{className:"lane__content",x:I.laneHeaderWidth,y:a,width:Math.max(0,this.state.box.width-I.laneHeaderWidth-5),height:I.laneHeight}),(!this.editionMode||this.editionIndex!==n)&&h.jsx("text",{className:"lane__label",x:I.laneHeaderWidth/2,y:a+I.laneHeight/2,fontSize:I.laneHeaderFontSize,textAnchor:"middle",dominantBaseline:"middle",transform:`rotate(-90 ${I.laneHeaderWidth/2} ${a+I.laneHeight/2})`,children:s.label})]},s.name)})]}),this.pools.map((s,n)=>!this.editionMode||this.editionIndex!==n?null:h.jsx("input",{className:"lane__labelInput",autoFocus:!0,style:{top:`${n*I.laneHeight}px`,left:"0px",width:`${I.laneHeaderWidth}px`,height:`${I.laneHeight}px`,fontSize:`${I.laneHeaderFontSize}px`},onMouseDown:o(a=>{a.nativeEvent.stopImmediatePropagation()},"onMouseDown"),onKeyDownCapture:o(a=>{this.editionMode&&!Bn(a.nativeEvent)&&a.nativeEvent.stopImmediatePropagation()},"onKeyDownCapture"),onKeyDown:o(a=>{a.code==="Tab"&&(a.preventDefault(),u.runInAction(()=>{const r=a.shiftKey?-1:1;this.editionIndex=(this.editionIndex+r+this.pools.length)%this.pools.length}))},"onKeyDown"),value:s.label,onChange:o(a=>{u.runInAction(()=>{s.label=a.target.value})},"onChange"),ref:o(a=>{a instanceof HTMLInputElement&&t.current!==n&&(t.current=n,a.select())},"ref")},s.name)),h.jsx(pr,{children:h.jsx(gr,{className:"add_lane",onClick:o(()=>this.addPool(),"onClick")})}),h.jsx(fr,{lanes:this})]})})};o(I,"Lanes"),ct(I,"laneHeaderWidth",50),ct(I,"laneHeight",250),ct(I,"lanePadding",25),ct(I,"laneHeaderFontSize",14);let bs=I;const Hi=class Hi extends Jt{constructor(t){super(t),this.registerClass(rt),this.registerClass(xs),this.registerClass(fs),this.registerClass(ms),this.registerClass(bs),this.registerClass(ys)}};o(Hi,"BPMDiagram");let vs=Hi;const Gi=class Gi extends kt{kind="default";constructor(t,e){super(t,e),u.makeObservable(this,{kind:u.observable,setKind:u.action}),this.setKind(e.kind??"default")}setKind(t){switch(this.kind=t,t){case"trigger":this.state.stroke="#38bdf8",this.state.lineStyle="solid",this.state.arrowHeadEnd="triangle-filled";break;case"condition-true":this.state.stroke="#22c55e",this.state.lineStyle="solid",this.state.arrowHeadEnd="triangle-filled";break;case"condition-false":this.state.stroke="#ef4444",this.state.lineStyle="dashed",this.state.arrowHeadEnd="triangle-filled";break;default:this.state.stroke=void 0,this.state.lineStyle="solid",this.state.arrowHeadEnd="arrow";break}}serialize(){return{...super.serialize(),kind:this.kind}}deserialize(t){super.deserialize(t),this.setKind(t.kind??"default")}};o(Gi,"AgentEdge");let Ce=Gi;const Ri=class Ri extends Q{payload;constructor(t,e){super(t,e),this.classList.add("agent__node","diagram__node"),this.payload=this.mergePayload(e.payload),u.makeObservable(this,{payload:u.observable.ref,replacePayload:u.action,updatePayload:u.action})}mergePayload(t){return{...this.defaultPayload(),...t??{}}}replacePayload(t){this.payload=this.mergePayload(t)}updatePayload(t){this.payload={...this.payload,...t}}serialize(){return{...super.serialize(),kind:this.kind,payload:Qt(this.payload)}}deserialize(t){super.deserialize(t),this.payload=this.mergePayload(t.payload)}};o(Ri,"AgentNode");let wt=Ri;const Yi=class Yi extends wt{kind="action";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,220,110])}),this.classList.add("agent__action")}defaultPayload(){return{actionType:"task",operation:"",inputRef:"",outputRef:"",metadata:{}}}Render=y.observer(()=>h.jsx("div",{...X(this),children:h.jsx(q,{})}))};o(Yi,"ActionNode");let Es=Yi;const Wi=class Wi extends wt{kind="condition";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,180,120])}),this.classList.add("agent__condition")}defaultPayload(){return{expression:"",language:"rule",trueLabel:"True",falseLabel:"False",metadata:{}}}Render=y.observer(()=>h.jsxs("div",{...X(this),children:[h.jsx("svg",{viewBox:`0 0 ${this.state.box.width} ${this.state.box.height}`,preserveAspectRatio:"none",style:{width:"100%",height:"100%"},children:h.jsx("polygon",{points:`${this.state.box.width/2} 0 ${this.state.box.width} ${this.state.box.height/2} ${this.state.box.width/2} ${this.state.box.height} 0 ${this.state.box.height/2}`})}),h.jsx(q,{})]}))};o(Wi,"ConditionNode");let Ms=Wi;const Xi=class Xi extends wt{kind="outcome";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,180,90])}),this.classList.add("agent__outcome")}defaultPayload(){return{status:"success",code:"",summary:"",metadata:{}}}Render=y.observer(()=>h.jsx("div",{...X(this),children:h.jsx(q,{})}))};o(Xi,"OutcomeNode");let ks=Xi;const Vi=class Vi extends wt{kind="trigger";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,170,90])}),this.classList.add("agent__trigger")}defaultPayload(){return{triggerType:"manual",source:"",eventName:"",schedule:"",metadata:{}}}Render=y.observer(()=>h.jsx("div",{...X(this),children:h.jsx(q,{})}))};o(Vi,"TriggerNode");let _s=Vi;const Ui=class Ui extends Jt{constructor(t){super(t),this.registerClass(wt),this.registerClass(_s),this.registerClass(Es),this.registerClass(Ms),this.registerClass(ks),this.registerClass(Ce),this.setDefaultEdge(Ce)}};o(Ui,"AgentDiagram");let Ps=Ui;const qi=class qi extends kt{isEditingLabel=!1;labelDraft="";constructor(t,e){super(t,e),u.makeObservable(this,{isEditingLabel:u.observable,labelDraft:u.observable,setLabel:u.action,beginLabelEdit:u.action,cancelLabelEdit:u.action,confirmLabelEdit:u.action}),this.state.arrowHeadEnd=this.state.arrowHeadEnd??"arrow",this.state.arrowHeadStart=this.state.arrowHeadStart??"none",this.state.lineStyle=this.state.lineStyle??"solid",this.state.pathType=this.state.pathType??"angle",this.state.label=this.state.label??"",this.state.labelPositioning=this.state.labelPositioning??new p([0,0]),this.state.strokeWidth=this.state.strokeWidth??2,this.labelDraft=this.state.label}setLabel(t){this.state.label=t,this.labelDraft=t}beginLabelEdit(){this.labelDraft=this.state.label??"",this.isEditingLabel=!0}cancelLabelEdit(){this.labelDraft=this.state.label??"",this.isEditingLabel=!1}confirmLabelEdit(){this.state.label=this.labelDraft??"",this.isEditingLabel=!1}serialize(){return{...super.serialize(),label:this.state.label,labelPositioning:this.state.labelPositioning?.raw}}deserialize(t){super.deserialize(t),this.state.label=t.label??"",this.state.labelPositioning=new p(t.labelPositioning??[0,0]),this.labelDraft=this.state.label,this.isEditingLabel=!1}};o(qi,"CommunicationEdge");let je=qi;const Ki=class Ki extends Q{constructor(t,e){super(t,{...e,box:e.box??new w([0,0,180,96]),fill:e.fill,stroke:e.stroke,label:e.label??""}),this.classList.add("communication__node","diagram__node")}};o(Ki,"CommunicationNode");let te=Ki;const Zi=class Zi extends te{communicationNodeType="actor";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,170,90]),fill:e.fill??"#0f2230",stroke:e.stroke??"#7dd3fc",label:e.label??"Actor"}),this.classList.add("communication__node--actor")}Render=y.observer(()=>h.jsxs("div",{...X(this),children:[h.jsx("div",{className:"communication__node-badge",children:"Actor"}),h.jsx(q,{})]}))};o(Zi,"CommunicationActorNode");let $e=Zi;const Ji=class Ji extends te{communicationNodeType="object";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,190,96]),fill:e.fill??"#182412",stroke:e.stroke??"#bef264",label:e.label??"Object"}),this.classList.add("communication__node--object")}Render=y.observer(()=>h.jsxs("div",{...X(this),children:[h.jsx("div",{className:"communication__node-badge",children:"Object"}),h.jsx(q,{})]}))};o(Ji,"CommunicationObjectNode");let Be=Ji;const Qi=class Qi extends te{communicationNodeType="controller";constructor(t,e){super(t,{...e,box:e.box??new w([0,0,200,100]),fill:e.fill??"#2b1618",stroke:e.stroke??"#fda4af",label:e.label??"Controller"}),this.classList.add("communication__node--controller")}Render=y.observer(()=>h.jsxs("div",{...X(this),children:[h.jsx("div",{className:"communication__node-badge",children:"Controller"}),h.jsx(q,{})]}))};o(Qi,"CommunicationControllerNode");let Ne=Qi;const tn=class tn extends Jt{constructor(t){super(t),this.registerClass($e),this.registerClass(Be),this.registerClass(Ne),this.registerClass(je),this.setDefaultEdge(je)}get selectedNodes(){return this.getExtension(F).selectedNodes}get selectedEdges(){return this.getExtension(F).selectedEdges}createNodeFromClientPoint(t,e,s){const n=this.canvas.inverseFit(new p([e,s]));return this.createNodeAtCanvasPoint(t,n.x,n.y)}createNodeAtCanvasPoint(t,e,s){const n=this.instantiateNode(t);this.add(n);const a=new p([e-n.box.width/2,s-n.box.height/2]);return n.setPosition(a),this.getExtension(F).clearSelection(),this.getExtension(F).selectNode(n),n}createNodeInViewportCenter(t){const e=this.canvas.frameDimensions,s=new p([e.x+e.width/2,e.y+e.height/2]);return this.createNodeFromClientPoint(t,s.x,s.y)}instantiateNode(t){const e={id:ts(this,"node"),label:mr(t),box:new w([0,0,180,96])};return t==="actor"?new $e(this,e):t==="controller"?new Ne(this,e):new Be(this,e)}};o(tn,"CommunicationDiagram");let Ss=tn;function mr(i){return i==="actor"?"Actor":i==="controller"?"Controller":"Object"}o(mr,"defaultLabelForType");const en=class en extends p{direction="left";get rawDirectedPoint(){return{x:this.x,y:this.y,direction:this.direction}}stepBack(){switch(this.direction){case"down":this.y--;break;case"left":this.x++;break;case"right":this.x--;break;case"up":this.y++;break}return this}stepForward(){switch(this.direction){case"down":this.y++;break;case"left":this.x--;break;case"right":this.x++;break;case"up":this.y--;break}return this}};o(en,"DirectedPoint");let Is=en;const xr=Object.freeze(Object.defineProperty({__proto__:null,DirectedPoint:Is},Symbol.toStringTag,{value:"Module"}));C.AgentDiagram=Ps,C.BPMDiagram=vs,C.CommunicationDiagram=Ss,C.Diagram=T,C.DiagramEditor=sr,C.ToolsStates=Pe,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})}));
5
+ a ${t},${t} 0 1,0 -${2*t},0`,"getCirclePath"),Vr=yt(w.observer(()=>{const t=z.use().getExtension(D);return t.selectionMode?u.jsx(u.Fragment,{children:u.jsx(ee,{paths:[{d:Tn(t.box,0),strokeWidth:1}],labelOffset:new m,className:"selection_square"})}):null})),Xr=zr(()=>null),Fn=E.forwardRef(({children:i,className:t,style:e},s)=>u.jsx("svg",{ref:s,className:t,width:"100%",height:"100%",style:{position:"absolute",top:0,left:0,pointerEvents:"none",...e},xmlns:"http://www.w3.org/2000/svg",children:i}));function Ur(i){return Array.isArray(i)?i:[i]}o(Ur,"arrayOrArray");const qr=w.observer(({gateway:i})=>{const e=z.use().getExtension(Jt);return u.jsx(ee,{paths:[{d:Wr(i.coordinates,i.radius),fill:i.fill,stroke:i.stroke,strokeWidth:i.strokeWidth}],className:"diagram__node__gateway","data-gateway-parent":i.parent.id,"data-gateway-id":i.id,"data-gateway-orientation":i.orientation,onMouseOut:o(s=>{const n=s.relatedTarget;n instanceof Element&&n.closest(`[data-id="${i.parent.id}"], [data-gateway-parent="${i.parent.id}"]`)||i.parent.setState("hover",!1)},"onMouseOut"),onMouseDownCapture:e.startConnectionFrom.bind(e,i)},i.id)}),Zr=w.observer(({node:i})=>{const t=i.RenderOverlay;return t?u.jsx(t,{node:i,box:i.box}):null}),Kr=w.observer(()=>{const i=z.use();return u.jsx("div",{style:{width:`${i.canvas.size.x}px`,height:`${i.canvas.size.y}px`},children:i.nodes.map(t=>u.jsx(Zr,{node:t},t.id))})}),Jr=w.observer(({node:i})=>i.parent?u.jsx(u.Fragment,{children:!i.RenderOverlay&&u.jsx(ee,{paths:[{d:Tn(i.box,10),stroke:i.state.stroke,strokeWidth:i.state.strokewWidth??3,fill:i.state.fill}],onMouseOver:o(()=>{g.runInAction(()=>{i.state.hover=!0})},"onMouseOver"),onMouseOut:o(t=>{const e=t.relatedTarget;e instanceof Element&&e.closest(`[data-id="${i.id}"], [data-gateway-parent="${i.id}"]`)||g.runInAction(()=>{i.state.hover=!1})},"onMouseOut"),className:i.classList.string,label:i.state.label,labelOffset:i.coordinates.sum(i.box.size.half),labelFontSize:i.state.labelFontSize??14,selected:i.selected,"data-id":i.id},i.id)}):null),Qr=w.observer(({edge:i})=>u.jsx(te,{edge:i,points:i.steps,endType:i.arrowHeadEnd??"arrow",startType:i.arrowHeadStart??"none",lineStyle:i.lineStyle??"solid",color:i.stroke,width:i.strokeWidth??2,draggable:!0,onMidpointMouseDown:o((t,e)=>{i.dragStart(t,e)},"onMidpointMouseDown"),onEndpointMouseDown:o((t,e)=>{i.dragEndpoint(t,e)},"onEndpointMouseDown")})),ta=yt(w.observer(()=>{const i=z.use(),e=i.getExtension(D)?.selectedNodes??[],s=[...i.nodes.filter(r=>!e.includes(r)),...e],n=s.filter(r=>r.state.hover||r.selected).flatMap(r=>r.gateways);return u.jsxs(u.Fragment,{children:[s.map(r=>u.jsx(Jr,{node:r},r.id)),i.edges.map(r=>u.jsx(Qr,{edge:r},r.id)),n.map(r=>u.jsx(qr,{gateway:r},`${r.parent.id}-${r.id}`))]})}));function ea(){return[u.jsx(ta,{},"ScalableShapes"),u.jsx(Kr,{},"RenderNodeOverlays")]}o(ea,"shapes");const sa=w.observer(({node:i})=>{const t=i.RenderScreen;return t?u.jsx(t,{node:i,box:i.box,scale:i.diagram?.canvas.scale??1}):null}),ia=w.observer(()=>{const i=z.use();return u.jsx("div",{className:"screen_renderers",children:i.nodes.map(t=>u.jsx(sa,{node:t},t.id))})}),na=w.observer(({children:i})=>{const t=z.use(),e=t.getExtension(U);t.canvas.setGridSize(e?.gridSize??50);const s=[],n=[],r=[];return E.Children.forEach([...Ur(i),...ea()],a=>{a.type.__scalable?s.push(a):a.type.__scalableBack?r.push(a):n.push(a)}),u.jsxs("div",{className:`canvas__frame ${t.showGrid?"canvas__frame--grid":""}`,children:[u.jsxs("div",{ref:t.canvas.useRef,children:[r.length&&u.jsx(Fn,{className:"background",children:r}),n.length&&u.jsx("div",{className:"scalable_components",children:n}),s.length&&u.jsx(Fn,{className:"foreground",children:s})]}),u.jsx(ia,{})]})});function ra({children:i,className:t,...e}){return u.jsx("div",{...e,className:["stage",t].filter(Boolean).join(" "),children:i})}o(ra,"Stage");const aa=yt(w.observer(()=>{const i=z.use(),t=i.getExtension(At),e=i.getExtension(Xt);return u.jsxs(u.Fragment,{children:[t?.proposals.map(s=>{const n=s.type==="h"?`M ${s.x} ${s.range[0]} V ${s.range[1]}`:`M ${s.range[0]} ${s.y} H ${s.range[1]}`;return u.jsx(ee,{className:"alignment_sugestion",paths:[{d:n}]},s.id)}),e?.proposals.map(s=>{const n=`M ${s.from.x} ${s.from.y} L ${s.to.x} ${s.to.y}`;return u.jsx(ee,{className:"distance_balance_sugestion",paths:[{d:n,arrow:{position:"both",size:8}}]},n)})]})})),oa=yt(w.observer(()=>{const t=z.use().getExtension(Nn);return t?.enabled?u.jsxs(u.Fragment,{children:[t.grid?.edges.map(e=>{const{from:s,to:n}=e,r=`M ${s.x} ${s.y} L ${n.x} ${n.y}`,a=t.highlighted.has(e);return u.jsx(te,{className:`path_finding_grid_edge ${a?"highlighted":""}`,points:[s,n],endType:"none"},r)}),t.points?.length&&u.jsx(te,{className:"path_finding_grid_edge_chosen",points:t.points})]}):null})),Z=8,bs=2,ca=120;function la(i,t){const e=Math.max(Z,Math.min(i.x,window.innerWidth-t.width-Z)),s=Math.max(Z,Math.min(i.y,window.innerHeight-t.height-Z));return{x:e,y:s}}o(la,"clampPosition");function da({item:i,onAction:t}){const e=!!i.submenu?.length,s=E.useRef(null),n=E.useRef(null),r=E.useRef(null),[a,c]=E.useState(!1),[l,d]=E.useState(!1),[h,x]=E.useState({left:0,top:-4,openToLeft:!1}),p=E.useCallback(()=>{if(!s.current||!n.current)return;const M=s.current.getBoundingClientRect(),_=n.current.getBoundingClientRect();let H=M.width-bs,P=!1;M.right-bs+_.width>window.innerWidth-Z&&(H=-_.width+bs,P=!0),M.left+H<Z&&(H=Z-M.left,P=!1);let O=-4,L=M.top+O;L+_.height>window.innerHeight-Z&&(O-=L+_.height-(window.innerHeight-Z),L=M.top+O),L<Z&&(O+=Z-L),x({left:H,top:O,openToLeft:P}),d(!0)},[]);E.useEffect(()=>{a||d(!1)},[a]),E.useEffect(()=>()=>{r.current!==null&&window.clearTimeout(r.current)},[]),E.useLayoutEffect(()=>{a&&p()},[a,p]),E.useEffect(()=>{if(!a)return;const M=o(()=>{p()},"handleResize");return window.addEventListener("resize",M),()=>{window.removeEventListener("resize",M)}},[a,p]);const f=o(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},"clearCloseTimeout"),y=o(()=>{e&&(f(),c(!0))},"openSubmenu"),v=o(()=>{f(),c(!1)},"closeSubmenu"),k=o(()=>{e&&(f(),r.current=window.setTimeout(()=>{c(!1),r.current=null},ca))},"scheduleCloseSubmenu"),$=o(M=>{const _=M.relatedTarget;(!_||!M.currentTarget.contains(_))&&v()},"handleBlur");return u.jsxs("li",{ref:s,className:["diagram__context_menu_item",i.disabled&&"disabled",i.danger&&"danger",e&&"has_submenu",a&&"submenu_open"].filter(Boolean).join(" "),onMouseEnter:y,onMouseLeave:k,onFocusCapture:y,onBlurCapture:$,children:[u.jsxs("button",{type:"button",className:"diagram__context_menu_button",disabled:i.disabled,onClick:o(M=>{M.stopPropagation(),M.preventDefault(),t(i)},"onClick"),children:[u.jsx("span",{className:"diagram__context_menu_label",children:i.label}),e&&u.jsx("span",{className:"diagram__context_menu_chevron",children:h.openToLeft?"<":">"})]}),e&&a&&u.jsx("div",{ref:n,className:"diagram__context_menu_submenu",style:{left:h.left,top:h.top,opacity:l?1:0},children:u.jsx("div",{className:"diagram__context_menu diagram__context_menu--nested",children:u.jsx(Hn,{items:i.submenu,onAction:t})})})]})}o(da,"MenuItem");function Hn({items:i,onAction:t}){return u.jsx("ul",{className:"diagram__context_menu_list",children:i.map((e,s)=>u.jsx(da,{item:e,onAction:t},`${e.label}_${s}`))})}o(Hn,"MenuItems");const ha=w.observer(({menu:i})=>{const t=E.useRef(null),[e,s]=E.useState(i.position);return E.useEffect(()=>{i.opened&&s(i.position)},[i.openVersion,i.opened,i.position]),E.useLayoutEffect(()=>{if(!i.opened||!t.current)return;const{width:n,height:r}=t.current.getBoundingClientRect(),{x:a,y:c}=la(i.position,{width:n,height:r});(a!==e.x||c!==e.y)&&s({x:a,y:c})},[i.openVersion,i.opened,i.position,e.x,e.y]),E.useEffect(()=>{if(!i.opened)return;const n=o(l=>{l.code==="Escape"&&i.close()},"closeOnEscape"),r=o(l=>{const d=l.target;d&&t.current?.contains(d)||i.close()},"closeOnOutsideMouseDown"),a=o(l=>{const d=l.target;if(d&&t.current?.contains(d)){l.preventDefault();return}i.close()},"closeOnOutsideContextMenu"),c=o(()=>{i.close()},"closeOnResize");return document.addEventListener("keydown",n),document.addEventListener("mousedown",r,!0),document.addEventListener("contextmenu",a,!0),window.addEventListener("resize",c),()=>{document.removeEventListener("keydown",n),document.removeEventListener("mousedown",r,!0),document.removeEventListener("contextmenu",a,!0),window.removeEventListener("resize",c)}},[i,i.openVersion,i.opened]),!i.opened||!i.elements.length?null:u.jsx("div",{className:"diagram__context_menu_layer",children:u.jsx("div",{ref:t,className:"diagram__context_menu",style:{left:e.x,top:e.y},onMouseDown:o(n=>{n.stopPropagation()},"onMouseDown"),onContextMenu:o(n=>{n.preventDefault(),n.stopPropagation()},"onContextMenu"),children:u.jsx(Hn,{items:i.elements,onAction:o(n=>{i.execute(n)},"onAction")})})})}),zi=class zi{_elements=[];_opened=!1;_position={x:0,y:0};_openVersion=0;Component=o(()=>u.jsx(ha,{menu:this}),"Component");constructor(){g.makeAutoObservable(this,{Component:!1},{autoBind:!0})}get elements(){return this._elements}get opened(){return this._opened}get position(){return this._position}get openVersion(){return this._openVersion}open(t,e={}){if(!t.length){this.close();return}const s=xt.getInstance().coordinates;this._elements=t,this._position={x:e.x??s.x,y:e.y??s.y},this._openVersion+=1,this._opened=!0}close(){this._opened&&(this._opened=!1,this._elements=[])}execute(t){if(!t.disabled){try{const e=t.onClick();e instanceof Promise&&e.catch(()=>{})}catch{}t.submenu?.length||this.close()}}};o(zi,"ContextMenuStore");let vs=zi;const Es=new vs,se=o(()=>{},"noop");function ua(){return typeof navigator<"u"&&!!navigator.clipboard?.writeText&&!!navigator.clipboard?.readText}o(ua,"hasClipboardSupport");function Gn(i){return()=>{i().catch(()=>{})}}o(Gn,"runAsync");function ga(i,t,e){const s=i.getExtension(D),n=t.closest(".diagram__node")?.dataset.id,r=t.closest(".edge")?.dataset.id,a=n?i.getNodeById(n):void 0,c=r?i.getEdgeById(r):void 0;a&&!a.selected?(s.clearSelection(),s.selectNode(a)):c&&!c.state.selected&&(s.clearSelection(),s.selectEdge(c));const l=s.selectedNodes,d=s.selectedEdges,h=l.length+d.length>0,x=ua(),p=x&&l.length>0,f=o(()=>{s.selectedNodes.forEach(k=>{i.delete(k)}),s.selectedEdges.forEach(k=>{i.disconnect(k)})},"deleteSelection"),y=[];a?y.push({label:`Node: ${a.state.label||a.id}`,onClick:se,submenu:[{label:"Center node",onClick:o(()=>{i.canvas.centerOnPoint(a.box.middle)},"onClick")},{label:"Delete node",onClick:o(()=>{i.delete(a)},"onClick"),danger:!0}]}):c&&y.push({label:"Edge",onClick:se,submenu:[{label:"Delete edge",onClick:o(()=>{i.disconnect(c)},"onClick"),danger:!0}]}),h&&y.push({label:"Delete selection",onClick:f,danger:!0}),y.push({label:"Selection",onClick:se,submenu:[{label:s.selectionMode==="element"?"Element mode (active)":"Element mode",onClick:o(()=>{s.toggleSelectionMode("element")},"onClick")},{label:s.selectionMode==="area"?"Area mode (active)":"Area mode",onClick:o(()=>{s.toggleSelectionMode("area")},"onClick")},{label:"Clear selection",onClick:o(()=>{s.clearSelection()},"onClick"),disabled:!h},{label:"Copy selection",onClick:Gn(async()=>{await navigator.clipboard.writeText(s.copy())}),disabled:!p},{label:"Paste",onClick:Gn(async()=>{const k=await navigator.clipboard.readText();k.trim().length&&i.paste(k)}),disabled:!x}]});const v=new m([e.x,e.y]);return y.push({label:"View",onClick:se,submenu:[{label:i.showGrid?"Hide grid":"Show grid",onClick:o(()=>{i.toggleGrid()},"onClick")},{label:`Zoom (${Math.round(i.canvas.scale*100)}%)`,onClick:se,submenu:[{label:"Zoom in",onClick:o(()=>{i.canvas.setScale(i.canvas.scale+.1,v)},"onClick")},{label:"Zoom out",onClick:o(()=>{i.canvas.setScale(i.canvas.scale-.1,v)},"onClick")},{label:"Reset zoom",onClick:o(()=>{i.canvas.setScale(1,v)},"onClick")}]}]}),y}o(ga,"buildDiagramContextMenu");const pa=w.observer(({diagram:i,leftPanel:t,toolbar:e})=>{const s=o(n=>{const r=n.target;if(r instanceof HTMLElement){if(r.closest('input, textarea, [contenteditable="true"]')){Es.close();return}n.preventDefault(),Es.open(ga(i,r,{x:n.clientX,y:n.clientY}),{x:n.clientX,y:n.clientY})}},"handleContextMenu");return u.jsxs(i.Context,{children:[u.jsxs(ra,{onContextMenu:s,children:[t,u.jsxs(na,{children:[u.jsx(Xr,{}),u.jsx(Gr,{}),u.jsx(Rr,{}),u.jsx(aa,{}),u.jsx(Vr,{}),u.jsx(oa,{})]})]}),u.jsx(Es.Component,{}),e]})}),Ti=class Ti extends Y{constructor(t,e,s){super(t),this.src=t,this.previousLabel=e,this.nextLabel=s}src;previousLabel;nextLabel};o(Ti,"DEditNodeEvent");let Ms=Ti;function Rn(i){return["Enter","Escape"].includes(i.code)}o(Rn,"allowEventInEdition");const Fi=class Fi extends j{inEdition=new Set;cancel(){this.inEdition.forEach(t=>t.cancel()),this.inEdition.clear()}confirm(){this.inEdition.forEach(t=>t.confirm()),this.inEdition.clear()}editNode(t){t.edit(),this.inEdition.add(t)}init(){this.diagram.onEvent(kt,t=>{switch(t.code){case"F2":{const e=this.diagram.getExtension(D).selectedNodes[0];e instanceof et&&this.editNode(e);break}case"Escape":{this.cancel();break}case"Enter":t.shift||this.confirm()}}),this.diagram.onEvent(ut,t=>{(!t.node||t.node instanceof et&&!this.inEdition.has(t.node))&&this.confirm()},this.diagram.priorities.Mouse_Down_Dragger+1),this.diagram.onEvent(xe,t=>{t.node instanceof et&&!this.inEdition.has(t.node)&&(this.confirm(),this.editNode(t.node))})}};o(Fi,"EditionMode");let De=Fi;function ie(i,t){return{"data-id":i.id,style:{"--screen-renderer-x":`${t.x}px`,"--screen-renderer-y":`${t.y}px`,"--screen-renderer-width":`${t.width}px`,"--screen-renderer-height":`${t.height}px`,"--screen-renderer-z-index":i.state.hover?(i.state.zIndex??100)+1:i.state.zIndex??100}}}o(ie,"screenRendererProps");const fa=w.observer(({node:i,box:t})=>{const e=E.useRef(!1),s=ie(i,t);return s.style["--screen-label-font-size"]=`${i.state.labelFontSize??14}px`,i.editionMode?u.jsx("textarea",{...s,className:`node__screenLabel editable__label${i.selected?" selected":""}`,autoFocus:!0,value:i.state.label,onChange:o(n=>{g.runInAction(()=>{i.state.label=n.target.value})},"onChange"),onKeyDownCapture:o(n=>{i.editionMode&&!Rn(n.nativeEvent)&&n.nativeEvent.stopImmediatePropagation()},"onKeyDownCapture"),ref:o(n=>{n instanceof HTMLTextAreaElement&&!e.current&&(e.current=!0,n.select())},"ref")}):(e.current=!1,i.state.label?u.jsx("pre",{...s,className:`node__screenLabel${i.selected?" selected":""}`,children:i.state.label}):null)}),Hi=class Hi extends je{editionMode=!1;constructor(t,e){super(t,e),g.makeObservable(this,{editionMode:g.observable,edit:g.action,cancel:g.action,confirm:g.action})}get label(){return this.state.label}previous=null;edit(){this.previous=this.state.label,this.editionMode=!0}cancel(){this.state.label=this.previous,this.editionMode=!1}confirm(){return this.emit(new Ms(this,this.previous,this.state.label)).cancelled?(this.cancel(),!1):(this.editionMode=!1,!0)}get isChanged(){return this.previous!==this.state.label}get screenLabelBox(){return this.box}RenderScreen=w.observer(()=>u.jsx(fa,{node:this,box:this.screenLabelBox}))};o(Hi,"EditableNode");let et=Hi;const Gi=class Gi extends z{constructor(t){super(t),this.registerClass(et),this.registerExtension(De)}};o(Gi,"EditableDiagram");let ne=Gi;const Ri=class Ri extends et{constructor(t,e){super(t,e),this.classList.add("bpm__node","diagram__node")}};o(Ri,"BPMNode");let ct=Ri;function ma(i){return{position:"absolute",left:`${i.box.x}px`,top:`${i.box.y}px`,zIndex:i.state.hover?i.state.zIndex+1:i.state.zIndex,width:`${i.box.width}px`,height:`${i.box.height}px`}}o(ma,"customRendererStyles");function V(i){const t=ma(i);return i.state.fill&&(t["--node-fill"]=i.state.fill),i.state.stroke&&(t["--node-stroke"]=i.state.stroke),{onMouseOver:o(()=>i.setState("hover",!0),"onMouseOver"),onMouseOut:o(e=>{const s=e.relatedTarget;s instanceof Element&&s.closest(`[data-id="${i.id}"], [data-gateway-parent="${i.id}"]`)||i.setState("hover",!1)},"onMouseOut"),"data-id":i.id,style:t,className:`${i.classList.string} ${i.selected?"selected":""}`}}o(V,"customRendererProps");function st(i,t){return`bpmn__event__${i[t]}`}o(st,"getEnumStr");var It=(i=>(i[i.start=0]="start",i[i.end=1]="end",i[i.intermediate=2]="intermediate",i))(It||{});const Yi=class Yi extends ct{type;constructor(t,e){super(t,e),this.setType(e.type??0),this.state.box.assignDimensions(new m([80,80])),this.classList.add("bpmn__event")}setType(t){if(this.type!==t&&!this.emit(new we(this)).cancelled){this.type=t;for(const e of Object.values(It))this.classList.delete(st(It,e));switch(t){case 1:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(It,1));break;case 0:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(It,0));break;case 2:this.classList.add(st(It,2));break}}}serialize(){return{...super.serialize(),type:this.type}}deserialize(t){this.setType(t.type??0),super.deserialize(t)}get screenLabelBox(){const t=this.box,e=Math.max(t.width,120);return new b([t.x+t.width/2-e/2,t.y+70,e,Math.max(this.state.labelFontSize??14,14)*1.25])}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this)}))};o(Yi,"EventNode");let ks=Yi;var wt=(i=>(i[i.inclusive=0]="inclusive",i[i.exclusive=1]="exclusive",i[i.parallel=2]="parallel",i[i.eventBased=3]="eventBased",i))(wt||{});const Wi=class Wi extends ct{type;constructor(t,e){super(t,e),this.setType(e.type??1),this.state.box.assignDimensions(new m([80,80])),this.classList.add("bpmn__gate")}setType(t){if(this.type!==t&&!this.emit(new we(this)).cancelled){this.type=t;for(const e of Object.values(wt))this.classList.delete(st(wt,e));switch(t){case 1:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(wt,1));break;case 0:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(wt,0));break;case 2:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(wt,2));break;case 3:this._gateways.forEach(e=>e.outgoingEdges.forEach(s=>this.diagram?.disconnect(s))),this.classList.add(st(wt,3));break}}}serialize(){return{...super.serialize(),type:this.type}}deserialize(t){this.setType(t.type??1),super.deserialize(t)}get screenLabelBox(){const t=this.box,e=Math.max(t.width,120);return new b([t.x+t.width/2-e/2,t.y+70,e,Math.max(this.state.labelFontSize??14,14)*1.25])}RenderOverlay=w.observer(()=>{const t=this.state.box.width,e=this.state.box.height;return u.jsx("div",{...V(this),children:u.jsx("svg",{viewBox:`0 0 ${t} ${e}`,style:{width:`${t}px`,height:`${e}px`},children:u.jsx("polygon",{points:`${t/2} 0 ${t} ${e/2} ${t/2} ${e} 0 ${e/2}`})})})})};o(Wi,"GateNode");let _s=Wi;const Vi=class Vi extends ct{constructor(t,e){super(t,{...e,box:e.box||new b([0,0,200,100])}),this.classList.add("bpmn__task")}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this)}))};o(Vi,"TaskNode");let Ss=Vi;const Xi=class Xi extends ct{sourceType="unknown";constructor(t,e){super(t,{...e,box:e.box||new b([0,0,200,100])}),this.sourceType=e.sourceType||"unknown",this.classList.add("bpmn__unknown")}serialize(){return{...super.serialize(),sourceType:this.sourceType}}deserialize(t){super.deserialize(t),this.sourceType=t.sourceType||"unknown"}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this),children:u.jsx("div",{className:"bpmn__unknown__marker",children:"?"})}))};o(Xi,"UnknownBPMNNode");let Ps=Xi;function re(i){return typeof i=="object"&&i?Array.isArray(i)?i.map(t=>re(t)):Object.fromEntries(Object.entries(i).map(([t,e])=>[t,re(e)])):i}o(re,"cloneDeep");const Ui=class Ui extends Y{};o(Ui,"AddLaneEvent");let ae=Ui;var Yn={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Wn=E.createContext&&E.createContext(Yn),xa=["attr","size","title"];function ya(i,t){if(i==null)return{};var e,s,n=wa(i,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);for(s=0;s<r.length;s++)e=r[s],t.indexOf(e)===-1&&{}.propertyIsEnumerable.call(i,e)&&(n[e]=i[e])}return n}o(ya,"_objectWithoutProperties");function wa(i,t){if(i==null)return{};var e={};for(var s in i)if({}.hasOwnProperty.call(i,s)){if(t.indexOf(s)!==-1)continue;e[s]=i[s]}return e}o(wa,"_objectWithoutPropertiesLoose");function ze(){return ze=Object.assign?Object.assign.bind():function(i){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var s in e)({}).hasOwnProperty.call(e,s)&&(i[s]=e[s])}return i},ze.apply(null,arguments)}o(ze,"_extends");function Vn(i,t){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);t&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(i,n).enumerable})),e.push.apply(e,s)}return e}o(Vn,"ownKeys");function Te(i){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?Vn(Object(e),!0).forEach(function(s){ba(i,s,e[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(e)):Vn(Object(e)).forEach(function(s){Object.defineProperty(i,s,Object.getOwnPropertyDescriptor(e,s))})}return i}o(Te,"_objectSpread");function ba(i,t,e){return(t=va(t))in i?Object.defineProperty(i,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[t]=e,i}o(ba,"_defineProperty");function va(i){var t=Ea(i,"string");return typeof t=="symbol"?t:t+""}o(va,"_toPropertyKey");function Ea(i,t){if(typeof i!="object"||!i)return i;var e=i[Symbol.toPrimitive];if(e!==void 0){var s=e.call(i,t);if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(i)}o(Ea,"_toPrimitive");function Xn(i){return i&&i.map((t,e)=>E.createElement(t.tag,Te({key:e},t.attr),Xn(t.child)))}o(Xn,"Tree2Element");function oe(i){return t=>E.createElement(Ma,ze({attr:Te({},i.attr)},t),Xn(i.child))}o(oe,"GenIcon");function Ma(i){var t=o(e=>{var s=i.attr,n=i.size,r=i.title,a=ya(i,xa),c=n||e.size||"1em",l;return e.className&&(l=e.className),i.className&&(l=(l?l+" ":"")+i.className),E.createElement("svg",ze({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},e.attr,s,a,{className:l,style:Te(Te({color:i.color||e.color},e.style),i.style),height:c,width:c,xmlns:"http://www.w3.org/2000/svg"}),r&&E.createElement("title",null,r),i.children)},"elem");return Wn!==void 0?E.createElement(Wn.Consumer,null,e=>t(e)):t(Yn)}o(Ma,"IconBase");function ka(i){return oe({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M208,160H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V176A16,16,0,0,0,208,160Zm0,40H48V176H208v24Zm0-112H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104A16,16,0,0,0,208,88Zm0,40H48V104H208v24ZM96,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H136V64a8,8,0,0,1-16,0V48H104A8,8,0,0,1,96,40Z"},child:[]}]})(i)}o(ka,"PiRowsPlusTop");function _a(i){return oe({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M208,112H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V128A16,16,0,0,0,208,112Zm0,40H48V128H208v24Zm0-112H48A16,16,0,0,0,32,56V80A16,16,0,0,0,48,96H208a16,16,0,0,0,16-16V56A16,16,0,0,0,208,40Zm0,40H48V56H208V80ZM160,216a8,8,0,0,1-8,8H136v16a8,8,0,0,1-16,0V224H104a8,8,0,0,1,0-16h16V192a8,8,0,0,1,16,0v16h16A8,8,0,0,1,160,216Z"},child:[]}]})(i)}o(_a,"PiRowsPlusBottom");function Sa(i){return oe({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z"},child:[]}]})(i)}o(Sa,"PiPencilSimple");function Un(i){return oe({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M176,128a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,128Zm56,0A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"},child:[]}]})(i)}o(Un,"PiMinusCircle");function Pa(i){return oe({attr:{viewBox:"0 0 256 256",fill:"currentColor"},child:[{tag:"path",attr:{d:"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"},child:[]}]})(i)}o(Pa,"PiGitBranch");const qi=class qi extends j{init(){const t=this.diagram.getExtension(At);t?.registerVerticalSuggestionProvider((e,s)=>this.enabled&&t.enabled?this.getLaneSuggestions(e,s):[]),t?.registerHorizontalSuggestionProvider((e,s)=>this.enabled&&t.enabled?this.getHorizontalLaneSuggestions(e,s):[])}resize(t,e){const s=this.diagram.getExtension(U),n=s?.gridSize??50;if("width"in e){const r=t.constructor,a=n*r.minimumWidthInGrids;t.state.box.width=this.constrain(e.width,a,s?.enabled===!0?n:null);return}t.resizeLane(e.laneId,s?.enabled===!0?Math.round(e.height/n)*n:e.height,s?.enabled===!0?n:void 0)}constrain(t,e,s){const n=s?Math.ceil(e/s)*s:e,r=s?Math.round(t/s)*s:t;return Math.max(n,r)}getLaneSuggestions(t,e){const s=this.diagram.getClass("Lanes");if(!s||t instanceof s)return[];const n=this.diagram.nodes.filter(p=>p instanceof s).flatMap(p=>{const f=p.box;return p.laneLayouts.filter(({lane:y})=>y.children.length===0).map(y=>({lanes:p,laneBox:f,layout:y}))}).filter(({laneBox:p,layout:f})=>{const y=p.x+(f.depth+1)*s.laneHeaderWidth,v=p.y+f.y;return e.middle.x>=y&&e.middle.x<=p.x+p.width&&e.middle.y>=v&&e.middle.y<=v+f.height}).sort((p,f)=>f.layout.depth-p.layout.depth)[0];if(!n)return[];const r=this.diagram.getExtension(U)?.gridSize??50,{laneBox:a,layout:c}=n,l=a.y+c.y,h=[a.x+(c.depth+1)*s.laneHeaderWidth,a.x+a.width],x=[{nodeY:l+(c.height-e.height)/2,guideY:l+c.height/2,range:h}];if(c.height>r*3){const p=r/2;x.push({nodeY:l+p,guideY:l+p,range:h},{nodeY:l+c.height-p-e.height,guideY:l+c.height-p,range:h})}return x}getHorizontalLaneSuggestions(t,e){const s=this.diagram.getClass("Lanes");if(!s||t instanceof s)return[];const n=this.diagram.nodes.filter(f=>f instanceof s).flatMap(f=>{const y=f.box;return f.laneLayouts.filter(({lane:v})=>v.children.length===0).map(v=>({laneBox:y,layout:v}))}).filter(({laneBox:f,layout:y})=>{const v=f.x+(y.depth+1)*s.laneHeaderWidth,k=f.y+y.y;return e.middle.x>=v&&e.middle.x<=f.x+f.width&&e.middle.y>=k&&e.middle.y<=k+y.height}).sort((f,y)=>y.layout.depth-f.layout.depth)[0];if(!n)return[];const a=(this.diagram.getExtension(U)?.gridSize??50)/2,{laneBox:c,layout:l}=n,d=c.y+l.y,h=c.x+(l.depth+1)*s.laneHeaderWidth,x=c.x+c.width,p=[d,d+l.height];return[{nodeX:h+a,guideX:h+a,range:p},{nodeX:x-a-e.width,guideX:x-a,range:p}]}};o(qi,"BPMNGridSnap");let ce=qi;const Zi=class Zi extends j{autopan=new Ne(this.diagram);session=null;unbindSession=o(()=>{},"unbindSession");init(){}resizeWidth(t,e){e.stopImmediatePropagation();const s=this.diagram.canvas.inverseFit(new m(e)),n=t.state.box.width;this.startSession(e,r=>{const a=this.diagram.canvas.inverseFit(r);this.diagram.getExtension(ce).resize(t,{width:n+a.x-s.x})})}resizeHeight(t,e,s,n){n.stopImmediatePropagation();const r=this.diagram.canvas.inverseFit(new m(n));this.startSession(n,a=>{const c=this.diagram.canvas.inverseFit(a);this.diagram.getExtension(ce).resize(t,{laneId:e,height:s+c.y-r.y})})}startSession(t,e){this.endSession(),this.session={pointer:new m(t),resize:e},this.unbindSession=ot(B(this,"mousemove",this.handleMouseMove),B(this,"mouseup",this.endSession),$n(this.handleAutopan,30))}handleMouseMove(t){this.session&&(this.session.pointer=new m(t),this.session.resize(this.session.pointer))}handleAutopan=o(()=>{this.session&&(this.autopan.displace(this.session.pointer),this.session.resize(this.session.pointer))},"handleAutopan");endSession(){this.session=null;const t=this.unbindSession;this.unbindSession=()=>{},t()}};o(Zi,"BPMNLaneResizer");let Ct=Zi;function Aa(i){i.preventDefault(),i.stopPropagation(),i.nativeEvent.stopImmediatePropagation()}o(Aa,"stopToolEvent");const Ia=w.observer(({node:i})=>{const t=i.box,e=E.useRef(null),s=i.laneLayouts;return u.jsxs(u.Fragment,{children:[s.map(({lane:n,depth:r,y:a,height:c,siblingCount:l})=>{const d=new b([t.x+r*lt.laneHeaderWidth,t.y+a,lt.laneHeaderWidth,c]),h=ie(i,d),x=i.editingLaneId===n.name;return E.createElement("div",{...h,key:n.name,className:`node__screenHitArea lane__screenHeader${x?" lane__screenHeader--editing":""}${i.selected?" selected":""}`,onDoubleClick:o(()=>i.renameLane(n.name),"onDoubleClick")},!x&&u.jsx("span",{className:"lane__screenLabel",style:{fontSize:`calc(${lt.laneHeaderFontSize}px * var(--diagram-canvas-scale, 1))`},children:n.label}),x&&u.jsx("input",{className:"lane__screenLabelInput",autoFocus:!0,value:n.label,onMouseDown:o(p=>p.nativeEvent.stopImmediatePropagation(),"onMouseDown"),onKeyDownCapture:o(p=>{i.editionMode&&!Rn(p.nativeEvent)&&p.nativeEvent.stopImmediatePropagation()},"onKeyDownCapture"),onKeyDown:o(p=>{if(p.code!=="Tab")return;p.preventDefault();const f=s.findIndex(({lane:k})=>k.name===n.name),y=p.shiftKey?-1:1,v=s[(f+y+s.length)%s.length];i.renameLane(v.lane.name)},"onKeyDown"),onChange:o(p=>{g.runInAction(()=>{n.label=p.target.value})},"onChange"),ref:o(p=>{p&&e.current!==n.name&&(e.current=n.name,p.select())},"ref")}),u.jsxs("div",{className:"lane__headerTools",onMouseDown:Aa,children:[u.jsx("button",{title:"Rename lane","aria-label":"Rename lane",onClick:o(()=>i.renameLane(n.name),"onClick"),children:u.jsx(Sa,{})}),u.jsx("button",{title:"Insert lane before","aria-label":"Insert lane before",onClick:o(()=>i.insertLane(n.name,"before"),"onClick"),children:u.jsx(ka,{})}),u.jsx("button",{title:n.children.length?"Remove subdivision":"Subdivide lane","aria-label":n.children.length?"Remove subdivision":"Subdivide lane",onClick:o(()=>n.children.length?i.removeSubdivision(n.name):i.subdivideLane(n.name),"onClick"),children:n.children.length?u.jsx(Un,{}):u.jsx(Pa,{})}),l>1&&u.jsx("button",{title:"Remove lane","aria-label":"Remove lane",onClick:o(()=>i.removeLane(n.name),"onClick"),children:u.jsx(Un,{})}),u.jsx("button",{title:"Insert lane after","aria-label":"Insert lane after",onClick:o(()=>i.insertLane(n.name,"after"),"onClick"),children:u.jsx(_a,{})})]}))}),u.jsxs(u.Fragment,{children:[u.jsx("div",{...ie(i,new b([t.x+t.width-4,t.y,8,t.height])),className:"lane__screenWidthResizeBar",onMouseDown:o(n=>i.diagram.getExtension(Ct).resizeWidth(i,n.nativeEvent),"onMouseDown")}),u.jsx("div",{...ie(i,new b([t.x+t.width-5,t.y+t.height/2-5,10,10])),className:"lane__screenWidthResize",onMouseDown:o(n=>i.diagram.getExtension(Ct).resizeWidth(i,n.nativeEvent),"onMouseDown")}),s.map(({lane:n,y:r,height:a})=>E.createElement("div",{...ie(i,new b([t.x,t.y+r+a-3,t.width,6])),key:`resize-${n.name}`,className:"lane__screenHeightResize",onMouseDown:o(c=>i.diagram.getExtension(Ct).resizeHeight(i,n.name,a,c.nativeEvent),"onMouseDown")}))]})]})});function Lt(i){return i.children.length?i.children.reduce((t,e)=>t+Lt(e),0):i.height}o(Lt,"laneHeight");function As(i){return i.children.length?i.children.reduce((t,e)=>t+As(e),0):1}o(As,"leafCount");function qn(i,t=0,e=0){const s=[];let n=e;return i.forEach(r=>{const a=Lt(r);s.push({lane:r,depth:t,y:n,height:a,siblingCount:i.length}),r.children.length&&s.push(...qn(r.children,t+1,n)),n+=a}),s}o(qn,"flattenLanes");function bt(i,t){for(let e=0;e<i.length;e++){const s=i[e];if(s.name===t)return{lane:s,siblings:i,index:e};const n=bt(s.children,t);if(n)return n}return null}o(bt,"findLane");function Zn(i,t){if(!i.children.length){i.height=Math.max(lt.minimumLaneHeight,t);return}let e=t-Lt(i);for(let s=i.children.length-1;s>=0;s--){const n=i.children[s],r=Lt(n),a=As(n)*lt.minimumLaneHeight,c=Math.max(a-r,e);if(Zn(n,r+c),e-=c,e>=0)break}}o(Zn,"resizeLaneLeaves");const F=class F extends ct{constructor(t,e){super(t,{...e,label:"",zIndex:50,groupChildren:!0}),g.makeObservable(this,{pools:g.observable,laneLayouts:g.computed,addPool:g.action,insertLane:g.action,subdivideLane:g.action,removeSubdivision:g.action,removeLane:g.action,resizeLane:g.action,renameLane:g.action,editionLaneId:g.observable}),this.classList.add("bpm__lanes"),this.state.box.width=300,this._gateways.clear()}get box(){const t=this.pools.reduce((e,s)=>e+Lt(s),0);return new b([this.state.box.x,this.state.box.y,this.state.box.width,t])}get laneLayouts(){return qn(this.pools)}get editingLaneId(){return this.editionLaneId}nextPool(){const t=new Set(this.laneLayouts.map(({lane:s})=>s.name));let e=0;for(;t.has(`pool${e}`);)e++;return{label:`Pool ${e}`,name:`pool${e}`,height:F.laneHeight,children:[]}}addPool(){if(this.emit(new ae(this)).cancelled)return this.pools.at(-1);const t=this.nextPool();return this.pools.push(t),t}insertLane(t,e){const s=bt(this.pools,t);!s||this.emit(new ae(this)).cancelled||s.siblings.splice(s.index+(e==="after"?1:0),0,this.nextPool())}subdivideLane(t){const e=bt(this.pools,t);if(!e||e.lane.children.length||this.emit(new ae(this)).cancelled)return;const s=this.nextPool(),n=this.nextPool(),r=Math.max(e.lane.height,F.minimumLaneHeight*2);s.height=r/2,n.height=r/2,e.lane.children=[s,n]}removeSubdivision(t){const e=bt(this.pools,t);!e||!e.lane.children.length||(e.lane.height=Lt(e.lane),e.lane.children=[])}removeLane(t){const e=bt(this.pools,t);!e||e.siblings.length<=1||e.siblings.splice(e.index,1)}resizeLane(t,e,s){const n=bt(this.pools,t);if(!n)return;const r=As(n.lane)*F.minimumLaneHeight,a=s?Math.ceil(r/s)*s:r;Zn(n.lane,Math.max(e,a))}renameLane(t){if(bt(this.pools,t)){if(!this.editionMode){const e=this.diagram?.getExtension(De);e?e.editNode(this):this.edit()}this.editionLaneId=t}}editionLaneId=null;previousPools=[];cancel(){this.editionLaneId=null,this.pools=this.previousPools,this.previousPools=[],super.cancel()}confirm(){return super.confirm()?(this.editionLaneId=null,this.previousPools=[],!0):!1}edit(){super.edit(),this.previousPools=re(this.pools)}resetPools(){this.pools=[]}deserialize(t){super.deserialize(t),this.pools=t.pools}serialize(){return{...super.serialize(),pools:re(this.pools)}}pools=[{label:"Default",name:"default",height:F.laneHeight,children:[]}];RenderScreen=Ia;RenderOverlay=w.observer(()=>{const t=this.laneLayouts,e=this.box;return u.jsx("div",{...V(this),children:u.jsxs("svg",{className:"lane__svg",viewBox:`0 0 ${e.width} ${e.height}`,preserveAspectRatio:"none",children:[u.jsx("rect",{className:"lane__background",width:e.width,height:e.height}),t.map(({lane:s,depth:n,y:r,height:a})=>{const c=n*F.laneHeaderWidth,l=c+F.laneHeaderWidth,d=r;return u.jsxs("g",{children:[u.jsx("rect",{className:"lane__head",x:c,y:d,width:F.laneHeaderWidth,height:a,onDoubleClick:o(()=>this.renameLane(s.name),"onDoubleClick")}),u.jsx("rect",{className:"lane__content",x:l,y:d,width:Math.max(0,e.width-l),height:a})]},s.name)})]})})})};o(F,"Lanes"),K(F,"laneHeaderWidth",50),K(F,"laneHeight",250),K(F,"laneHeaderFontSize",14),K(F,"minimumLaneHeight",150),K(F,"minimumWidthInGrids",10);let lt=F;const Ki=class Ki extends ne{constructor(t){super(t),this.registerExtension(ce),this.registerExtension(Ct),this.registerClass(ct),this.registerClass(Ss),this.registerClass(ks),this.registerClass(_s),this.registerClass(lt),this.registerClass(Ps)}};o(Ki,"BPMDiagram");let Is=Ki;const Ji=class Ji extends Pt{kind="default";constructor(t,e){super(t,e),g.makeObservable(this,{kind:g.observable,setKind:g.action}),this.setKind(e.kind??"default")}setKind(t){switch(this.kind=t,t){case"trigger":this.state.stroke="#38bdf8",this.state.lineStyle="solid",this.state.arrowHeadEnd="triangle-filled";break;case"condition-true":this.state.stroke="#22c55e",this.state.lineStyle="solid",this.state.arrowHeadEnd="triangle-filled";break;case"condition-false":this.state.stroke="#ef4444",this.state.lineStyle="dashed",this.state.arrowHeadEnd="triangle-filled";break;default:this.state.stroke=void 0,this.state.lineStyle="solid",this.state.arrowHeadEnd="arrow";break}}serialize(){return{...super.serialize(),kind:this.kind}}deserialize(t){super.deserialize(t),this.setKind(t.kind??"default")}};o(Ji,"AgentEdge");let Fe=Ji;const Qi=class Qi extends et{payload;constructor(t,e){super(t,e),this.classList.add("agent__node","diagram__node"),this.payload=this.mergePayload(e.payload),g.makeObservable(this,{payload:g.observable.ref,replacePayload:g.action,updatePayload:g.action})}mergePayload(t){return{...this.defaultPayload(),...t??{}}}replacePayload(t){this.payload=this.mergePayload(t)}updatePayload(t){this.payload={...this.payload,...t}}serialize(){return{...super.serialize(),kind:this.kind,payload:re(this.payload)}}deserialize(t){super.deserialize(t),this.payload=this.mergePayload(t.payload)}};o(Qi,"AgentNode");let vt=Qi;const tn=class tn extends vt{kind="action";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,220,110])}),this.classList.add("agent__action")}defaultPayload(){return{actionType:"task",operation:"",inputRef:"",outputRef:"",metadata:{}}}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this)}))};o(tn,"ActionNode");let Cs=tn;const en=class en extends vt{kind="condition";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,180,120])}),this.classList.add("agent__condition")}defaultPayload(){return{expression:"",language:"rule",trueLabel:"True",falseLabel:"False",metadata:{}}}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this),children:u.jsx("svg",{viewBox:`0 0 ${this.state.box.width} ${this.state.box.height}`,preserveAspectRatio:"none",style:{width:"100%",height:"100%"},children:u.jsx("polygon",{points:`${this.state.box.width/2} 0 ${this.state.box.width} ${this.state.box.height/2} ${this.state.box.width/2} ${this.state.box.height} 0 ${this.state.box.height/2}`})})}))};o(en,"ConditionNode");let Ls=en;const sn=class sn extends vt{kind="outcome";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,180,90])}),this.classList.add("agent__outcome")}defaultPayload(){return{status:"success",code:"",summary:"",metadata:{}}}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this)}))};o(sn,"OutcomeNode");let js=sn;const nn=class nn extends vt{kind="trigger";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,170,90])}),this.classList.add("agent__trigger")}defaultPayload(){return{triggerType:"manual",source:"",eventName:"",schedule:"",metadata:{}}}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this)}))};o(nn,"TriggerNode");let $s=nn;const rn=class rn extends ne{constructor(t){super(t),this.registerClass(vt),this.registerClass($s),this.registerClass(Cs),this.registerClass(Ls),this.registerClass(js),this.registerClass(Fe),this.setDefaultEdge(Fe)}};o(rn,"AgentDiagram");let Bs=rn;const an=class an extends Pt{isEditingLabel=!1;labelDraft="";constructor(t,e){super(t,e),g.makeObservable(this,{isEditingLabel:g.observable,labelDraft:g.observable,setLabel:g.action,beginLabelEdit:g.action,cancelLabelEdit:g.action,confirmLabelEdit:g.action}),this.state.arrowHeadEnd=this.state.arrowHeadEnd??"arrow",this.state.arrowHeadStart=this.state.arrowHeadStart??"none",this.state.lineStyle=this.state.lineStyle??"solid",this.state.pathType=this.state.pathType??"angle",this.state.label=this.state.label??"",this.state.labelPositioning=this.state.labelPositioning??new m([0,0]),this.state.strokeWidth=this.state.strokeWidth??2,this.labelDraft=this.state.label}setLabel(t){this.state.label=t,this.labelDraft=t}beginLabelEdit(){this.labelDraft=this.state.label??"",this.isEditingLabel=!0}cancelLabelEdit(){this.labelDraft=this.state.label??"",this.isEditingLabel=!1}confirmLabelEdit(){this.state.label=this.labelDraft??"",this.isEditingLabel=!1}serialize(){return{...super.serialize(),label:this.state.label,labelPositioning:this.state.labelPositioning?.raw}}deserialize(t){super.deserialize(t),this.state.label=t.label??"",this.state.labelPositioning=new m(t.labelPositioning??[0,0]),this.labelDraft=this.state.label,this.isEditingLabel=!1}};o(an,"CommunicationEdge");let He=an;const on=class on extends et{constructor(t,e){super(t,{...e,box:e.box??new b([0,0,180,96]),fill:e.fill,stroke:e.stroke,label:e.label??""}),this.classList.add("communication__node","diagram__node")}};o(on,"CommunicationNode");let le=on;const cn=class cn extends le{communicationNodeType="actor";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,170,90]),fill:e.fill??"#0f2230",stroke:e.stroke??"#7dd3fc",label:e.label??"Actor"}),this.classList.add("communication__node--actor")}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this),children:u.jsx("div",{className:"communication__node-badge",children:"Actor"})}))};o(cn,"CommunicationActorNode");let Ge=cn;const ln=class ln extends le{communicationNodeType="object";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,190,96]),fill:e.fill??"#182412",stroke:e.stroke??"#bef264",label:e.label??"Object"}),this.classList.add("communication__node--object")}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this),children:u.jsx("div",{className:"communication__node-badge",children:"Object"})}))};o(ln,"CommunicationObjectNode");let Re=ln;const dn=class dn extends le{communicationNodeType="controller";constructor(t,e){super(t,{...e,box:e.box??new b([0,0,200,100]),fill:e.fill??"#2b1618",stroke:e.stroke??"#fda4af",label:e.label??"Controller"}),this.classList.add("communication__node--controller")}RenderOverlay=w.observer(()=>u.jsx("div",{...V(this),children:u.jsx("div",{className:"communication__node-badge",children:"Controller"})}))};o(dn,"CommunicationControllerNode");let Ye=dn;const hn=class hn extends ne{constructor(t){super(t),this.registerClass(Ge),this.registerClass(Re),this.registerClass(Ye),this.registerClass(He),this.setDefaultEdge(He)}get selectedNodes(){return this.getExtension(D).selectedNodes}get selectedEdges(){return this.getExtension(D).selectedEdges}createNodeFromClientPoint(t,e,s){const n=this.canvas.inverseFit(new m([e,s]));return this.createNodeAtCanvasPoint(t,n.x,n.y)}createNodeAtCanvasPoint(t,e,s){const n=this.instantiateNode(t);this.add(n);const r=new m([e-n.box.width/2,s-n.box.height/2]);return n.setPosition(r),this.getExtension(D).clearSelection(),this.getExtension(D).selectNode(n),n}createNodeInViewportCenter(t){const e=this.canvas.frameDimensions,s=new m([e.x+e.width/2,e.y+e.height/2]);return this.createNodeFromClientPoint(t,s.x,s.y)}instantiateNode(t){const e={id:ds(this,"node"),label:Ca(t),box:new b([0,0,180,96])};return t==="actor"?new Ge(this,e):t==="controller"?new Ye(this,e):new Re(this,e)}};o(hn,"CommunicationDiagram");let Ns=hn;function Ca(i){return i==="actor"?"Actor":i==="controller"?"Controller":"Object"}o(Ca,"defaultLabelForType");const un=class un extends m{direction="left";get rawDirectedPoint(){return{x:this.x,y:this.y,direction:this.direction}}stepBack(){switch(this.direction){case"down":this.y--;break;case"left":this.x++;break;case"right":this.x--;break;case"up":this.y++;break}return this}stepForward(){switch(this.direction){case"down":this.y++;break;case"left":this.x--;break;case"right":this.x++;break;case"up":this.y--;break}return this}};o(un,"DirectedPoint");let Os=un;const La=Object.freeze(Object.defineProperty({__proto__:null,DirectedPoint:Os},Symbol.toStringTag,{value:"Module"}));I.AgentDiagram=Bs,I.BPMDiagram=Is,I.CommunicationDiagram=Ns,I.Diagram=z,I.DiagramEditor=pa,I.ToolsStates=Oe,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})}));
6
6
  //# sourceMappingURL=index.umd.js.map