@matdata/yasgui-graph-plugin 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/yasgui-graph-plugin.cjs.js +3 -1
- package/dist/yasgui-graph-plugin.cjs.js.map +2 -2
- package/dist/yasgui-graph-plugin.esm.js +3 -1
- package/dist/yasgui-graph-plugin.esm.js.map +2 -2
- package/dist/yasgui-graph-plugin.min.js +1 -1
- package/dist/yasgui-graph-plugin.min.js.map +2 -2
- package/package.json +1 -1
|
@@ -905,7 +905,7 @@ div.network-navigation_wrapper {
|
|
|
905
905
|
height: 100%;
|
|
906
906
|
}
|
|
907
907
|
*/
|
|
908
|
-
`;_g(zM);var _n=class{constructor(e,g,t,A){var C,i;this.body=e,this.canvas=g,this.selectionHandler=t,this.interactionHandler=A,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},q(this.options,this.defaultOptions),this.body.emitter.on("destroy",()=>{this._clean()}),this.body.emitter.on("_dataChanged",b(C=this._restore).call(C,this)),this.body.emitter.on("_resetData",b(i=this._restore).call(i,this))}_restore(){this.inMode!==!1&&(this.options.initiallyActive===!0?this.enableEditMode():this.disableEditMode())}setOptions(e,g,t){g!==void 0&&(g.locale!==void 0?this.options.locale=g.locale:this.options.locale=t.locale,g.locales!==void 0?this.options.locales=g.locales:this.options.locales=t.locales),e!==void 0&&(typeof e=="boolean"?this.options.enabled=e:(this.options.enabled=!0,_(this.options,e)),this.options.initiallyActive===!0&&(this.editMode=!0),this._setup())}toggleEditMode(){this.editMode===!0?this.disableEditMode():this.enableEditMode()}enableEditMode(){this.editMode=!0,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}disableEditMode(){this.editMode=!1,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}showManipulatorToolbar(){if(this._clean(),this.manipulationDOM={},this.guiEnabled===!0){var e,g;this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";let t=this.selectionHandler.getSelectedNodeCount(),A=this.selectionHandler.getSelectedEdgeCount(),C=t+A,i=this.options.locales[this.options.locale],n=!1;this.options.addNode!==!1&&(this._createAddNodeButton(i),n=!0),this.options.addEdge!==!1&&(n===!0?this._createSeperator(1):n=!0,this._createAddEdgeButton(i)),t===1&&typeof this.options.editNode=="function"?(n===!0?this._createSeperator(2):n=!0,this._createEditNodeButton(i)):A===1&&t===0&&this.options.editEdge!==!1&&(n===!0?this._createSeperator(3):n=!0,this._createEditEdgeButton(i)),C!==0&&(t>0&&this.options.deleteNode!==!1?(n===!0&&this._createSeperator(4),this._createDeleteButton(i)):t===0&&this.options.deleteEdge!==!1&&(n===!0&&this._createSeperator(4),this._createDeleteButton(i))),this._bindElementEvents(this.closeDiv,b(e=this.toggleEditMode).call(e,this)),this._temporaryBindEvent("select",b(g=this.showManipulatorToolbar).call(g,this))}this.body.emitter.emit("_redraw")}addNodeMode(){var e;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var g;let t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,b(g=this.toggleEditMode).call(g,this))}this._temporaryBindEvent("click",b(e=this._performAddNode).call(e,this))}editNode(){this.editMode!==!0&&this.enableEditMode(),this._clean();let e=this.selectionHandler.getSelectedNodes()[0];if(e!==void 0)if(this.inMode="editNode",typeof this.options.editNode=="function")if(e.isCluster!==!0){let g=_({},e.options,!1);if(g.x=e.x,g.y=e.y,this.options.editNode.length===2)this.options.editNode(g,t=>{t!=null&&this.inMode==="editNode"&&this.body.data.nodes.getDataSet().update(t),this.showManipulatorToolbar()});else throw new Error("The function for edit does not support two arguments (data, callback)")}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError);else throw new Error("No function has been configured to handle the editing of nodes.");else this.showManipulatorToolbar()}addEdgeMode(){var e,g,t,A,C;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var i;let n=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(n),this._createSeperator(),this._createDescription(n.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,b(i=this.toggleEditMode).call(i,this))}this._temporaryBindUI("onTouch",b(e=this._handleConnect).call(e,this)),this._temporaryBindUI("onDragEnd",b(g=this._finishConnect).call(g,this)),this._temporaryBindUI("onDrag",b(t=this._dragControlNode).call(t,this)),this._temporaryBindUI("onRelease",b(A=this._finishConnect).call(A,this)),this._temporaryBindUI("onDragStart",b(C=this._dragStartEdge).call(C,this)),this._temporaryBindUI("onHold",()=>{})}editEdgeMode(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",typeof this.options.editEdge=="object"&&typeof this.options.editEdge.editWithoutDrag=="function"&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0)){let i=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(i.from.id,i.to.id);return}if(this.guiEnabled===!0){var e;let i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,b(e=this.toggleEditMode).call(e,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var g,t,A,C;let i=this.body.edges[this.edgeBeingEditedId],n=this._getNewTargetNode(i.from.x,i.from.y),o=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(n.id),this.temporaryIds.nodes.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this._temporaryBindUI("onTouch",b(g=this._controlNodeTouch).call(g,this)),this._temporaryBindUI("onTap",()=>{}),this._temporaryBindUI("onHold",()=>{}),this._temporaryBindUI("onDragStart",b(t=this._controlNodeDragStart).call(t,this)),this._temporaryBindUI("onDrag",b(A=this._controlNodeDrag).call(A,this)),this._temporaryBindUI("onDragEnd",b(C=this._controlNodeDragEnd).call(C,this)),this._temporaryBindUI("onMouseMove",()=>{}),this._temporaryBindEvent("beforeDrawing",s=>{let r=i.edgeType.findBorderPositions(s);n.selected===!1&&(n.x=r.from.x,n.y=r.from.y),o.selected===!1&&(o.x=r.to.x,o.y=r.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}deleteSelected(){this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";let e=this.selectionHandler.getSelectedNodeIds(),g=this.selectionHandler.getSelectedEdgeIds(),t;if(e.length>0){for(let A=0;A<e.length;A++)if(this.body.nodes[e[A]].isCluster===!0){alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);return}typeof this.options.deleteNode=="function"&&(t=this.options.deleteNode)}else g.length>0&&typeof this.options.deleteEdge=="function"&&(t=this.options.deleteEdge);if(typeof t=="function"){let A={nodes:e,edges:g};if(t.length===2)t(A,C=>{C!=null&&this.inMode==="delete"?(this.body.data.edges.getDataSet().remove(C.edges),this.body.data.nodes.getDataSet().remove(C.nodes),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()):(this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar())});else throw new Error("The function for delete does not support two arguments (data, callback)")}else this.body.data.edges.getDataSet().remove(g),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}_setup(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}_createWrappers(){if(this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0){var e,g;this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(e=(g=this.options.locales[this.options.locale])===null||g===void 0?void 0:g.close)!==null&&e!==void 0?e:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv)}}_getNewTargetNode(e,g){let t=_({},this.options.controlNodeStyle);t.id="targetNode"+st(),t.hidden=!1,t.physics=!1,t.x=e,t.y=g;let A=this.body.functions.createNode(t);return A.shape.boundingBox={left:e,right:e,top:g,bottom:g},A}_createEditButton(){var e;this._clean(),this.manipulationDOM={},ug(this.editModeDiv);let g=this.options.locales[this.options.locale],t=this._createButton("editMode","vis-edit vis-edit-mode",g.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(t),this._bindElementEvents(t,b(e=this.toggleEditMode).call(e,this))}_clean(){this.inMode=!1,this.guiEnabled===!0&&(ug(this.editModeDiv),ug(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}_cleanupDOMEventListeners(){for(let g of Ue(e=this._domEventListenerCleanupQueue).call(e,0)){var e;g()}}_removeManipulationDOM(){this._clean(),ug(this.manipulationDiv),ug(this.editModeDiv),ug(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}_createSeperator(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+e]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+e].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+e])}_createAddNodeButton(e){var g;let t=this._createButton("addNode","vis-add",e.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.addNodeMode).call(g,this))}_createAddEdgeButton(e){var g;let t=this._createButton("addEdge","vis-connect",e.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.addEdgeMode).call(g,this))}_createEditNodeButton(e){var g;let t=this._createButton("editNode","vis-edit",e.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.editNode).call(g,this))}_createEditEdgeButton(e){var g;let t=this._createButton("editEdge","vis-edit",e.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.editEdgeMode).call(g,this))}_createDeleteButton(e){var g;let t;this.options.rtl?t="vis-delete-rtl":t="vis-delete";let A=this._createButton("delete",t,e.del||this.options.locales.en.del);this.manipulationDiv.appendChild(A),this._bindElementEvents(A,b(g=this.deleteSelected).call(g,this))}_createBackButton(e){var g;let t=this._createButton("back","vis-back",e.back||this.options.locales.en.back);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.showManipulatorToolbar).call(g,this))}_createButton(e,g,t){let A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[e+"Div"]=document.createElement("button"),this.manipulationDOM[e+"Div"].className="vis-button "+g,this.manipulationDOM[e+"Label"]=document.createElement("div"),this.manipulationDOM[e+"Label"].className=A,this.manipulationDOM[e+"Label"].innerText=t,this.manipulationDOM[e+"Div"].appendChild(this.manipulationDOM[e+"Label"]),this.manipulationDOM[e+"Div"]}_createDescription(e){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=e,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}_temporaryBindEvent(e,g){this.temporaryEventFunctions.push({event:e,boundFunction:g}),this.body.emitter.on(e,g)}_temporaryBindUI(e,g){if(this.body.eventListeners[e]!==void 0)this.temporaryUIFunctions[e]=this.body.eventListeners[e],this.body.eventListeners[e]=g;else throw new Error("This UI function does not exist. Typo? You tried: "+e+" possible are: "+Et(U(this.body.eventListeners)))}_unbindTemporaryUIs(){for(let e in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,e)&&(this.body.eventListeners[e]=this.temporaryUIFunctions[e],delete this.temporaryUIFunctions[e]);this.temporaryUIFunctions={}}_unbindTemporaryEvents(){for(let e=0;e<this.temporaryEventFunctions.length;e++){let g=this.temporaryEventFunctions[e].event,t=this.temporaryEventFunctions[e].boundFunction;this.body.emitter.off(g,t)}this.temporaryEventFunctions=[]}_bindElementEvents(e,g){let t=new ot(e,{});ZI(t,g),this._domEventListenerCleanupQueue.push(()=>{t.destroy()});let A=C=>{let{keyCode:i,key:n}=C;(n==="Enter"||n===" "||i===13||i===32)&&g()};e.addEventListener("keyup",A,!1),this._domEventListenerCleanupQueue.push(()=>{e.removeEventListener("keyup",A,!1)})}_cleanupTemporaryNodesAndEdges(){for(let C=0;C<this.temporaryIds.edges.length;C++){var e;this.body.edges[this.temporaryIds.edges[C]].disconnect(),delete this.body.edges[this.temporaryIds.edges[C]];let i=G(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[C]);if(i!==-1){var g;Ue(g=this.body.edgeIndices).call(g,i,1)}}for(let C=0;C<this.temporaryIds.nodes.length;C++){var t;delete this.body.nodes[this.temporaryIds.nodes[C]];let i=G(t=this.body.nodeIndices).call(t,this.temporaryIds.nodes[C]);if(i!==-1){var A;Ue(A=this.body.nodeIndices).call(A,i,1)}}this.temporaryIds={nodes:[],edges:[]}}_controlNodeTouch(e){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=q({},this.body.view.translation)}_controlNodeDragStart(){let e=this.lastTouch,g=this.selectionHandler._pointerToPositionObject(e),t=this.body.nodes[this.temporaryIds.nodes[0]],A=this.body.nodes[this.temporaryIds.nodes[1]],C=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;let i=t.isOverlappingWith(g),n=A.isOverlappingWith(g);i===!0?(this.selectedControlNode=t,C.edgeType.from=t):n===!0&&(this.selectedControlNode=A,C.edgeType.to=A),this.selectedControlNode!==void 0&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit("_redraw")}_controlNodeDrag(e){this.body.emitter.emit("disablePhysics");let g=this.body.functions.getPointer(e.center),t=this.canvas.DOMtoCanvas(g);this.selectedControlNode!==void 0?(this.selectedControlNode.x=t.x,this.selectedControlNode.y=t.y):this.interactionHandler.onDrag(e),this.body.emitter.emit("_redraw")}_controlNodeDragEnd(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A=this.body.edges[this.edgeBeingEditedId];if(this.selectedControlNode===void 0)return;this.selectionHandler.unselectAll();let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let n=C.length-1;n>=0;n--)if(C[n]!==this.selectedControlNode.id){i=this.body.nodes[C[n]];break}if(i!==void 0&&this.selectedControlNode!==void 0)if(i.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{let n=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===n.id?this._performEditEdge(i.id,A.to.id):this._performEditEdge(A.from.id,i.id)}else A.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}_handleConnect(e){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=q({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;let g=this.lastTouch,t=this.selectionHandler.getNodeAt(g);if(t!==void 0)if(t.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{let A=this._getNewTargetNode(t.x,t.y);this.body.nodes[A.id]=A,this.body.nodeIndices.push(A.id);let C=this.body.functions.createEdge({id:"connectionEdge"+st(),from:t.id,to:A.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[C.id]=C,this.body.edgeIndices.push(C.id),this.temporaryIds.nodes.push(A.id),this.temporaryIds.edges.push(C.id)}this.touchTime=new Date().valueOf()}}_dragControlNode(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A;this.temporaryIds.edges[0]!==void 0&&(A=this.body.edges[this.temporaryIds.edges[0]].fromId);let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let o=C.length-1;o>=0;o--){var n;if(G(n=this.temporaryIds.nodes).call(n,C[o])===-1){i=this.body.nodes[C[o]];break}}if(e.controlEdge={from:A,to:i?i.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",e,g),this.temporaryIds.nodes[0]!==void 0){let o=this.body.nodes[this.temporaryIds.nodes[0]];o.x=this.canvas._XconvertDOMtoCanvas(g.x),o.y=this.canvas._YconvertDOMtoCanvas(g.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(e)}_finishConnect(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A;this.temporaryIds.edges[0]!==void 0&&(A=this.body.edges[this.temporaryIds.edges[0]].fromId);let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let o=C.length-1;o>=0;o--){var n;if(G(n=this.temporaryIds.nodes).call(n,C[o])===-1){i=this.body.nodes[C[o]];break}}this._cleanupTemporaryNodesAndEdges(),i!==void 0&&(i.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[A]!==void 0&&this.body.nodes[i.id]!==void 0&&this._performAddEdge(A,i.id)),e.controlEdge={from:A,to:i?i.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",e,g),this.body.emitter.emit("_redraw")}_dragStartEdge(e){let g=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",e,g,void 0,!0)}_performAddNode(e){let g={id:st(),x:e.pointer.canvas.x,y:e.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function")if(this.options.addNode.length===2)this.options.addNode(g,t=>{t!=null&&this.inMode==="addNode"&&this.body.data.nodes.getDataSet().add(t),this.showManipulatorToolbar()});else throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");else this.body.data.nodes.getDataSet().add(g),this.showManipulatorToolbar()}_performAddEdge(e,g){let t={from:e,to:g};if(typeof this.options.addEdge=="function")if(this.options.addEdge.length===2)this.options.addEdge(t,A=>{A!=null&&this.inMode==="addEdge"&&(this.body.data.edges.getDataSet().add(A),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())});else throw new Error("The function for connect does not support two arguments (data,callback)");else this.body.data.edges.getDataSet().add(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}_performEditEdge(e,g){let t={id:this.edgeBeingEditedId,from:e,to:g,label:this.body.data.edges.get(this.edgeBeingEditedId).label},A=this.options.editEdge;if(typeof A=="object"&&(A=A.editWithoutDrag),typeof A=="function")if(A.length===2)A(t,C=>{C==null||this.inMode!=="editEdge"?(this.body.edges[t.id].updateEdgeType(),this.body.emitter.emit("_redraw"),this.showManipulatorToolbar()):(this.body.data.edges.getDataSet().update(C),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())});else throw new Error("The function for edit does not support two arguments (data, callback)");else this.body.data.edges.getDataSet().update(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},y="string",v="boolean",f="number",zt="array",x="object",Lh="dom",ZM="any",ui=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],fi={borderWidth:{number:f},borderWidthSelected:{number:f,undefined:"undefined"},brokenImage:{string:y,undefined:"undefined"},chosen:{label:{boolean:v,function:"function"},node:{boolean:v,function:"function"},__type__:{object:x,boolean:v}},color:{border:{string:y},background:{string:y},highlight:{border:{string:y},background:{string:y},__type__:{object:x,string:y}},hover:{border:{string:y},background:{string:y},__type__:{object:x,string:y}},__type__:{object:x,string:y}},opacity:{number:f,undefined:"undefined"},fixed:{x:{boolean:v},y:{boolean:v},__type__:{object:x,boolean:v}},font:{align:{string:y},color:{string:y},size:{number:f},face:{string:y},background:{string:y},strokeWidth:{number:f},strokeColor:{string:y},vadjust:{number:f},multi:{boolean:v,string:y},bold:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},boldital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},ital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},mono:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},__type__:{object:x,string:y}},group:{string:y,number:f,undefined:"undefined"},heightConstraint:{minimum:{number:f},valign:{string:y},__type__:{object:x,boolean:v,number:f}},hidden:{boolean:v},icon:{face:{string:y},code:{string:y},size:{number:f},color:{string:y},weight:{string:y,number:f},__type__:{object:x}},id:{string:y,number:f},image:{selected:{string:y,undefined:"undefined"},unselected:{string:y,undefined:"undefined"},__type__:{object:x,string:y}},imagePadding:{top:{number:f},right:{number:f},bottom:{number:f},left:{number:f},__type__:{object:x,number:f}},label:{string:y,undefined:"undefined"},labelHighlightBold:{boolean:v},level:{number:f,undefined:"undefined"},margin:{top:{number:f},right:{number:f},bottom:{number:f},left:{number:f},__type__:{object:x,number:f}},mass:{number:f},physics:{boolean:v},scaling:{min:{number:f},max:{number:f},label:{enabled:{boolean:v},min:{number:f},max:{number:f},maxVisible:{number:f},drawThreshold:{number:f},__type__:{object:x,boolean:v}},customScalingFunction:{function:"function"},__type__:{object:x}},shadow:{enabled:{boolean:v},color:{string:y},size:{number:f},x:{number:f},y:{number:f},__type__:{object:x,boolean:v}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:v,array:zt},borderRadius:{number:f},interpolation:{boolean:v},useImageSize:{boolean:v},useBorderWithImage:{boolean:v},coordinateOrigin:{string:["center","top-left"]},__type__:{object:x}},size:{number:f},title:{string:y,dom:Lh,undefined:"undefined"},value:{number:f,undefined:"undefined"},widthConstraint:{minimum:{number:f},maximum:{number:f},__type__:{object:x,boolean:v,number:f}},x:{number:f},y:{number:f},__type__:{object:x}},LM={configure:{enabled:{boolean:v},filter:{boolean:v,string:y,array:zt,function:"function"},container:{dom:Lh},showButton:{boolean:v},__type__:{object:x,boolean:v,string:y,array:zt,function:"function"}},edges:{arrows:{to:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageHeight:{number:f},imageWidth:{number:f},src:{string:y},__type__:{object:x,boolean:v}},middle:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageWidth:{number:f},imageHeight:{number:f},src:{string:y},__type__:{object:x,boolean:v}},from:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageWidth:{number:f},imageHeight:{number:f},src:{string:y},__type__:{object:x,boolean:v}},__type__:{string:["from","to","middle"],object:x}},endPointOffset:{from:{number:f},to:{number:f},__type__:{object:x,number:f}},arrowStrikethrough:{boolean:v},background:{enabled:{boolean:v},color:{string:y},size:{number:f},dashes:{boolean:v,array:zt},__type__:{object:x,boolean:v}},chosen:{label:{boolean:v,function:"function"},edge:{boolean:v,function:"function"},__type__:{object:x,boolean:v}},color:{color:{string:y},highlight:{string:y},hover:{string:y},inherit:{string:["from","to","both"],boolean:v},opacity:{number:f},__type__:{object:x,string:y}},dashes:{boolean:v,array:zt},font:{color:{string:y},size:{number:f},face:{string:y},background:{string:y},strokeWidth:{number:f},strokeColor:{string:y},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:f},multi:{boolean:v,string:y},bold:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},boldital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},ital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},mono:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},__type__:{object:x,string:y}},hidden:{boolean:v},hoverWidth:{function:"function",number:f},label:{string:y,undefined:"undefined"},labelHighlightBold:{boolean:v},length:{number:f,undefined:"undefined"},physics:{boolean:v},scaling:{min:{number:f},max:{number:f},label:{enabled:{boolean:v},min:{number:f},max:{number:f},maxVisible:{number:f},drawThreshold:{number:f},__type__:{object:x,boolean:v}},customScalingFunction:{function:"function"},__type__:{object:x}},selectionWidth:{function:"function",number:f},selfReferenceSize:{number:f},selfReference:{size:{number:f},angle:{number:f},renderBehindTheNode:{boolean:v},__type__:{object:x}},shadow:{enabled:{boolean:v},color:{string:y},size:{number:f},x:{number:f},y:{number:f},__type__:{object:x,boolean:v}},smooth:{enabled:{boolean:v},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:f},forceDirection:{string:["horizontal","vertical","none"],boolean:v},__type__:{object:x,boolean:v}},title:{string:y,undefined:"undefined"},width:{number:f},widthConstraint:{maximum:{number:f},__type__:{object:x,boolean:v,number:f}},value:{number:f,undefined:"undefined"},__type__:{object:x}},groups:{useDefaultGroups:{boolean:v},__any__:fi,__type__:{object:x}},interaction:{dragNodes:{boolean:v},dragView:{boolean:v},hideEdgesOnDrag:{boolean:v},hideEdgesOnZoom:{boolean:v},hideNodesOnDrag:{boolean:v},hover:{boolean:v},keyboard:{enabled:{boolean:v},speed:{x:{number:f},y:{number:f},zoom:{number:f},__type__:{object:x}},bindToWindow:{boolean:v},autoFocus:{boolean:v},__type__:{object:x,boolean:v}},multiselect:{boolean:v},navigationButtons:{boolean:v},selectable:{boolean:v},selectConnectedEdges:{boolean:v},hoverConnectedEdges:{boolean:v},tooltipDelay:{number:f},zoomView:{boolean:v},zoomSpeed:{number:f},__type__:{object:x}},layout:{randomSeed:{undefined:"undefined",number:f,string:y},improvedLayout:{boolean:v},clusterThreshold:{number:f},hierarchical:{enabled:{boolean:v},levelSeparation:{number:f},nodeSpacing:{number:f},treeSpacing:{number:f},blockShifting:{boolean:v},edgeMinimization:{boolean:v},parentCentralization:{boolean:v},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:x,boolean:v}},__type__:{object:x}},manipulation:{enabled:{boolean:v},initiallyActive:{boolean:v},addNode:{boolean:v,function:"function"},addEdge:{boolean:v,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:x,boolean:v,function:"function"}},deleteNode:{boolean:v,function:"function"},deleteEdge:{boolean:v,function:"function"},controlNodeStyle:fi,__type__:{object:x,boolean:v}},nodes:fi,physics:{enabled:{boolean:v},barnesHut:{theta:{number:f},gravitationalConstant:{number:f},centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},forceAtlas2Based:{theta:{number:f},gravitationalConstant:{number:f},centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},repulsion:{centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},nodeDistance:{number:f},damping:{number:f},__type__:{object:x}},hierarchicalRepulsion:{centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},nodeDistance:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},maxVelocity:{number:f},minVelocity:{number:f},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:v},iterations:{number:f},updateInterval:{number:f},onlyDynamicEdges:{boolean:v},fit:{boolean:v},__type__:{object:x,boolean:v}},timestep:{number:f},adaptiveTimestep:{boolean:v},wind:{x:{number:f},y:{number:f},__type__:{object:x}},__type__:{object:x,boolean:v}},autoResize:{boolean:v},clickToUse:{boolean:v},locale:{string:y},locales:{__any__:{any:ZM},__type__:{object:x}},height:{string:y},width:{string:y},__type__:{object:x}},Gh={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},GM=(I,e,g)=>{var t;return!!(yg(I).call(I,"physics")&&yg(t=Gh.physics.solver).call(t,e)&&g.physics.solver!==e&&e!=="wind")};var Kn=class{constructor(){}getDistances(e,g,t){let A={},C=e.edges;for(let n=0;n<g.length;n++){let o=g[n],s={};A[o]=s;for(let r=0;r<g.length;r++)s[g[r]]=n==r?0:1e9}for(let n=0;n<t.length;n++){let o=C[t[n]];o.connected===!0&&A[o.fromId]!==void 0&&A[o.toId]!==void 0&&(A[o.fromId][o.toId]=1,A[o.toId][o.fromId]=1)}let i=g.length;for(let n=0;n<i;n++){let o=g[n],s=A[o];for(let r=0;r<i-1;r++){let a=g[r],d=A[a];for(let l=r+1;l<i;l++){let h=g[l],c=A[h],p=Math.min(d[h],d[o]+s[h]);d[h]=p,c[a]=p}}}return A}},Un=class{constructor(e,g,t){this.body=e,this.springLength=g,this.springConstant=t,this.distanceSolver=new Kn}setOptions(e){e&&(e.springLength&&(this.springLength=e.springLength),e.springConstant&&(this.springConstant=e.springConstant))}solve(e,g){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,A=this.distanceSolver.getDistances(this.body,e,g);this._createL_matrix(A),this._createK_matrix(A),this._createE_matrix();let C=.01,i=1,n=0,o=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),s=5,r=1e9,a=0,d=0,l=0,h=0,c=0;for(;r>C&&n<o;)for(n+=1,[a,r,d,l]=this._getHighestEnergyNode(t),h=r,c=0;h>i&&c<s;)c+=1,this._moveNode(a,d,l),[h,d,l]=this._getEnergy(a)}_getHighestEnergyNode(e){let g=this.body.nodeIndices,t=this.body.nodes,A=0,C=g[0],i=0,n=0;for(let o=0;o<g.length;o++){let s=g[o];if(t[s].predefinedPosition!==!0||t[s].isCluster===!0&&e===!0||t[s].options.fixed.x!==!0||t[s].options.fixed.y!==!0){let[r,a,d]=this._getEnergy(s);A<r&&(A=r,C=s,i=a,n=d)}}return[C,A,i,n]}_getEnergy(e){let[g,t]=this.E_sums[e];return[Math.sqrt(g**2+t**2),g,t]}_moveNode(e,g,t){let A=this.body.nodeIndices,C=this.body.nodes,i=0,n=0,o=0,s=C[e].x,r=C[e].y,a=this.K_matrix[e],d=this.L_matrix[e];for(let w=0;w<A.length;w++){let O=A[w];if(O!==e){let M=C[O].x,k=C[O].y,V=a[O],ye=d[O],ue=1/((s-M)**2+(r-k)**2)**1.5;i+=V*(1-ye*(r-k)**2*ue),n+=V*(ye*(s-M)*(r-k)*ue),o+=V*(1-ye*(s-M)**2*ue)}}let l=i,h=n,c=g,p=o,u=t,m=(c/l+u/h)/(h/l-p/h),E=-(h*m+c)/l;C[e].x+=E,C[e].y+=m,this._updateE_matrix(e)}_createL_matrix(e){let g=this.body.nodeIndices,t=this.springLength;this.L_matrix=[];for(let A=0;A<g.length;A++){this.L_matrix[g[A]]={};for(let C=0;C<g.length;C++)this.L_matrix[g[A]][g[C]]=t*e[g[A]][g[C]]}}_createK_matrix(e){let g=this.body.nodeIndices,t=this.springConstant;this.K_matrix=[];for(let A=0;A<g.length;A++){this.K_matrix[g[A]]={};for(let C=0;C<g.length;C++)this.K_matrix[g[A]][g[C]]=t*e[g[A]][g[C]]**-2}}_createE_matrix(){let e=this.body.nodeIndices,g=this.body.nodes;this.E_matrix={},this.E_sums={};for(let t=0;t<e.length;t++)this.E_matrix[e[t]]=[];for(let t=0;t<e.length;t++){let A=e[t],C=g[A].x,i=g[A].y,n=0,o=0;for(let s=t;s<e.length;s++){let r=e[s];if(r!==A){let a=g[r].x,d=g[r].y,l=1/Math.sqrt((C-a)**2+(i-d)**2);this.E_matrix[A][s]=[this.K_matrix[A][r]*(C-a-this.L_matrix[A][r]*(C-a)*l),this.K_matrix[A][r]*(i-d-this.L_matrix[A][r]*(i-d)*l)],this.E_matrix[r][t]=this.E_matrix[A][s],n+=this.E_matrix[A][s][0],o+=this.E_matrix[A][s][1]}}this.E_sums[A]=[n,o]}}_updateE_matrix(e){let g=this.body.nodeIndices,t=this.body.nodes,A=this.E_matrix[e],C=this.K_matrix[e],i=this.L_matrix[e],n=t[e].x,o=t[e].y,s=0,r=0;for(let a=0;a<g.length;a++){let d=g[a];if(d!==e){let l=A[a],h=l[0],c=l[1],p=t[d].x,u=t[d].y,m=1/Math.sqrt((n-p)**2+(o-u)**2),E=C[d]*(n-p-i[d]*(n-p)*m),w=C[d]*(o-u-i[d]*(o-u)*m);A[a]=[E,w],s+=E,r+=w;let O=this.E_sums[d];O[0]+=E-h,O[1]+=w-c}}this.E_sums[e]=[s,r]}};function T(I,e,g){var t,A,C,i;if(!(this instanceof T))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:E1,clickToUse:!1},q(this.options,this.defaultOptions),this.body={container:I,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:b(t=this.on).call(t,this),off:b(A=this.off).call(A,this),emit:b(C=this.emit).call(C,this),once:b(i=this.once).call(i,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new _i(()=>this.body.emitter.emit("_requestRedraw")),this.groups=new Ki,this.canvas=new Mn(this.body),this.selectionHandler=new Gn(this.body,this.canvas),this.interactionHandler=new zn(this.body,this.canvas,this.selectionHandler),this.view=new Fn(this.body,this.canvas),this.renderer=new kn(this.body,this.canvas),this.physics=new Nn(this.body),this.layoutEngine=new Yn(this.body),this.clustering=new Sn(this.body),this.manipulation=new _n(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new an(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new En(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new Un(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(g),this.setData(e)}ed(T.prototype);T.prototype.setOptions=function(I){if(I===null&&(I=void 0),I!==void 0){if(g1.validate(I,LM)===!0&&console.error("%cErrors have been found in the supplied options object.",jl),xt(["locale","locales","clickToUse"],this.options,I),I.locale!==void 0&&(I.locale=T1(I.locales||this.options.locales,I.locale)),I=this.layoutEngine.setOptions(I.layout,I),this.canvas.setOptions(I),this.groups.setOptions(I.groups),this.nodesHandler.setOptions(I.nodes),this.edgesHandler.setOptions(I.edges),this.physics.setOptions(I.physics),this.manipulation.setOptions(I.manipulation,I,this.options),this.interactionHandler.setOptions(I.interaction),this.renderer.setOptions(I.interaction),this.selectionHandler.setOptions(I.interaction),I.groups!==void 0&&this.body.emitter.emit("refreshNodes"),"configure"in I&&(this.configurator||(this.configurator=new qO(this,this.body.container,Gh,this.canvas.pixelRatio,GM)),this.configurator.setOptions(I.configure)),this.configurator&&this.configurator.options.enabled===!0){let t={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};_(t.nodes,this.nodesHandler.options),_(t.edges,this.edgesHandler.options),_(t.layout,this.layoutEngine.options),_(t.interaction,this.selectionHandler.options),_(t.interaction,this.renderer.options),_(t.interaction,this.interactionHandler.options),_(t.manipulation,this.manipulation.options),_(t.physics,this.physics.options),_(t.global,this.canvas.options),_(t.global,this.options),this.configurator.setModuleOptions(t)}I.clickToUse!==void 0?I.clickToUse===!0?this.activator===void 0&&(this.activator=new $O(this.canvas.frame),this.activator.on("change",()=>{this.body.emitter.emit("activate")})):(this.activator!==void 0&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}};T.prototype._updateVisibleIndices=function(){let I=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(let g in I)Object.prototype.hasOwnProperty.call(I,g)&&!this.clustering._isClusteredNode(g)&&I[g].options.hidden===!1&&this.body.nodeIndices.push(I[g].id);for(let g in e)if(Object.prototype.hasOwnProperty.call(e,g)){let t=e[g],A=I[t.fromId],C=I[t.toId],i=A!==void 0&&C!==void 0;!this.clustering._isClusteredEdge(g)&&t.options.hidden===!1&&i&&A.options.hidden===!1&&C.options.hidden===!1&&this.body.edgeIndices.push(t.id)}};T.prototype.bindEventListeners=function(){this.body.emitter.on("_dataChanged",()=>{this.edgesHandler._updateState(),this.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",()=>{this.clustering._updateState(),this._updateVisibleIndices(),this._updateValueRange(this.body.nodes),this._updateValueRange(this.body.edges),this.body.emitter.emit("startSimulation"),this.body.emitter.emit("_requestRedraw")})};T.prototype.setData=function(I){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),I&&I.dot&&(I.nodes||I.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(I&&I.options),I&&I.dot){console.warn("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");let e=a1(I.dot);this.setData(e);return}else if(I&&I.gephi){console.warn("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");let e=d1(I.gephi);this.setData(e);return}else this.nodesHandler.setData(I&&I.nodes,!0),this.edgesHandler.setData(I&&I.edges,!0);this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")};T.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(let I in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,I)&&delete this.body.nodes[I];for(let I in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,I)&&delete this.body.edges[I];ug(this.body.container)};T.prototype._updateValueRange=function(I){let e,g,t,A=0;for(e in I)if(Object.prototype.hasOwnProperty.call(I,e)){let C=I[e].getValue();C!==void 0&&(g=g===void 0?C:Math.min(C,g),t=t===void 0?C:Math.max(C,t),A+=C)}if(g!==void 0&&t!==void 0)for(e in I)Object.prototype.hasOwnProperty.call(I,e)&&I[e].setValueRange(g,t,A)};T.prototype.isActive=function(){return!this.activator||this.activator.active};T.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)};T.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)};T.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)};T.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)};T.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)};T.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)};T.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)};T.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)};T.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)};T.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)};T.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)};T.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)};T.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)};T.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)};T.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)};T.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)};T.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)};T.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)};T.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)};T.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)};T.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)};T.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)};T.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)};T.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)};T.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)};T.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)};T.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)};T.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)};T.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)};T.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)};T.prototype.getConnectedNodes=function(I){return this.body.nodes[I]!==void 0?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)};T.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)};T.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)};T.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)};T.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)};T.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)};T.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)};T.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)};T.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)};T.prototype.getNodeAt=function(){let I=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return I!==void 0&&I.id!==void 0?I.id:I};T.prototype.getEdgeAt=function(){let I=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return I!==void 0&&I.id!==void 0?I.id:I};T.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)};T.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)};T.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()};T.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)};T.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)};T.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)};T.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)};T.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)};T.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)};T.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)};T.prototype.getOptionsFromConfigurator=function(){let I={};return this.configurator&&(I=this.configurator.getOptions.apply(this.configurator)),I};function oC(){return document.documentElement.getAttribute("data-theme")||"light"}function Fo(I){return I==="dark"?{uri:"#97C2FC",literal:"#a6c8a6ff",blankNode:"#888888",typeObject:"#e15b13ff",text:"#e0e0e0",edge:"#666666",edgeLabel:"#cccccc",edgeLabelBackground:"rgba(30, 30, 30, 0.8)"}:{uri:"#97C2FC",literal:"#a6c8a6ff",blankNode:"#c5c5c5ff",typeObject:"#e15b13ff",text:"#000000",edge:"#cccccc",edgeLabel:"#666666",edgeLabelBackground:"rgba(255, 255, 255, 0.8)"}}function Vh(I){let e=new MutationObserver(g=>{g.forEach(t=>{if(t.attributeName==="data-theme"){let A=oC();I(A)}})});return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),e}function VM(){return{Network:T,DataSet:Pg}}var Bo=class{constructor(e){this.yasr=e,this.network=null,this.currentTheme=oC(),this.themeObserver=null}static get priority(){return 20}static get label(){return"Graph"}canHandleResults(){if(!this.yasr||!this.yasr.results)return!1;let e=this.yasr.results;if(e.getBindings&&typeof e.getBindings=="function"){let g=e.getBindings();if(g&&g.length>0){let t=g[0];return t.subject!==void 0&&t.predicate!==void 0&&t.object!==void 0}}return!1}draw(){this.yasr.resultsEl.innerHTML="";try{let e=Lo(this.yasr.results);if(!e||e.length===0){this.yasr.resultsEl.innerHTML='<div style="padding: 20px; text-align: center; color: #666;">No graph data to visualize</div>';return}let g=Zo(this.yasr);this.currentTheme=oC();let t=Fo(this.currentTheme),{nodes:A,edges:C}=dC(e,g,t),i=document.createElement("div");i.style.width="100%",i.style.height="600px",i.style.position="relative",i.style.overflow="hidden",this.yasr.resultsEl.appendChild(i);let{Network:n,DataSet:o}=VM(),s=new o(A),r=new o(C),a=rC(t);this.nodesDataSet=s,this.edgesDataSet=r,this.triples=e,this.prefixMap=g,this.network=new n(i,{nodes:s,edges:r},a),this.networkReady=!1,this.network.on("stabilizationIterationsDone",()=>{this.network.setOptions({physics:{enabled:!0}}),this.networkReady=!0}),this.themeObserver||(this.themeObserver=Vh(h=>{this.applyTheme(h)}));let d=document.createElement("div");d.style.position="absolute",d.style.top="10px",d.style.right="10px",d.style.zIndex="10000",d.style.display="flex",d.style.gap="10px",d.style.pointerEvents="auto",i.appendChild(d);let l=document.createElement("button");l.textContent="Zoom to Fit",l.style.padding="8px 12px",l.style.background="#4CAF50",l.style.color="white",l.style.border="none",l.style.borderRadius="4px",l.style.cursor="pointer",l.style.fontSize="14px",l.style.boxShadow="0 2px 4px rgba(0,0,0,0.2)",l.onmouseover=()=>l.style.background="#45a049",l.onmouseout=()=>l.style.background="#4CAF50",l.onclick=()=>{this.network&&this.network.fit({animation:{duration:300,easingFunction:"easeInOutQuad"}})},d.appendChild(l),e.length>1e3&&console.warn("Large graph detected (>1000 triples). Rendering may be slow.")}catch(e){console.error("Error rendering graph:",e),this.yasr.resultsEl.innerHTML='<div style="padding: 20px; color: red;">Error rendering graph. See console for details.</div>'}}applyTheme(e){if(!this.network||!this.nodesDataSet||!this.triples||!this.prefixMap)return;this.currentTheme=e;let g=Fo(e),{nodes:t,edges:A}=dC(this.triples,this.prefixMap,g);this.nodesDataSet.clear(),this.nodesDataSet.add(t),this.edgesDataSet.clear(),this.edgesDataSet.add(A);let C=rC(g);this.network.setOptions(C)}getIcon(){let e=document.createElement("div");return e.setAttribute("aria-label","Graph visualization"),e.style.display="inline-flex",e.style.alignItems="center",e.style.justifyContent="center",e.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
908
|
+
`;_g(zM);var _n=class{constructor(e,g,t,A){var C,i;this.body=e,this.canvas=g,this.selectionHandler=t,this.interactionHandler=A,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this._domEventListenerCleanupQueue=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},q(this.options,this.defaultOptions),this.body.emitter.on("destroy",()=>{this._clean()}),this.body.emitter.on("_dataChanged",b(C=this._restore).call(C,this)),this.body.emitter.on("_resetData",b(i=this._restore).call(i,this))}_restore(){this.inMode!==!1&&(this.options.initiallyActive===!0?this.enableEditMode():this.disableEditMode())}setOptions(e,g,t){g!==void 0&&(g.locale!==void 0?this.options.locale=g.locale:this.options.locale=t.locale,g.locales!==void 0?this.options.locales=g.locales:this.options.locales=t.locales),e!==void 0&&(typeof e=="boolean"?this.options.enabled=e:(this.options.enabled=!0,_(this.options,e)),this.options.initiallyActive===!0&&(this.editMode=!0),this._setup())}toggleEditMode(){this.editMode===!0?this.disableEditMode():this.enableEditMode()}enableEditMode(){this.editMode=!0,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}disableEditMode(){this.editMode=!1,this._clean(),this.guiEnabled===!0&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}showManipulatorToolbar(){if(this._clean(),this.manipulationDOM={},this.guiEnabled===!0){var e,g;this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";let t=this.selectionHandler.getSelectedNodeCount(),A=this.selectionHandler.getSelectedEdgeCount(),C=t+A,i=this.options.locales[this.options.locale],n=!1;this.options.addNode!==!1&&(this._createAddNodeButton(i),n=!0),this.options.addEdge!==!1&&(n===!0?this._createSeperator(1):n=!0,this._createAddEdgeButton(i)),t===1&&typeof this.options.editNode=="function"?(n===!0?this._createSeperator(2):n=!0,this._createEditNodeButton(i)):A===1&&t===0&&this.options.editEdge!==!1&&(n===!0?this._createSeperator(3):n=!0,this._createEditEdgeButton(i)),C!==0&&(t>0&&this.options.deleteNode!==!1?(n===!0&&this._createSeperator(4),this._createDeleteButton(i)):t===0&&this.options.deleteEdge!==!1&&(n===!0&&this._createSeperator(4),this._createDeleteButton(i))),this._bindElementEvents(this.closeDiv,b(e=this.toggleEditMode).call(e,this)),this._temporaryBindEvent("select",b(g=this.showManipulatorToolbar).call(g,this))}this.body.emitter.emit("_redraw")}addNodeMode(){var e;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var g;let t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,b(g=this.toggleEditMode).call(g,this))}this._temporaryBindEvent("click",b(e=this._performAddNode).call(e,this))}editNode(){this.editMode!==!0&&this.enableEditMode(),this._clean();let e=this.selectionHandler.getSelectedNodes()[0];if(e!==void 0)if(this.inMode="editNode",typeof this.options.editNode=="function")if(e.isCluster!==!0){let g=_({},e.options,!1);if(g.x=e.x,g.y=e.y,this.options.editNode.length===2)this.options.editNode(g,t=>{t!=null&&this.inMode==="editNode"&&this.body.data.nodes.getDataSet().update(t),this.showManipulatorToolbar()});else throw new Error("The function for edit does not support two arguments (data, callback)")}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError);else throw new Error("No function has been configured to handle the editing of nodes.");else this.showManipulatorToolbar()}addEdgeMode(){var e,g,t,A,C;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var i;let n=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(n),this._createSeperator(),this._createDescription(n.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,b(i=this.toggleEditMode).call(i,this))}this._temporaryBindUI("onTouch",b(e=this._handleConnect).call(e,this)),this._temporaryBindUI("onDragEnd",b(g=this._finishConnect).call(g,this)),this._temporaryBindUI("onDrag",b(t=this._dragControlNode).call(t,this)),this._temporaryBindUI("onRelease",b(A=this._finishConnect).call(A,this)),this._temporaryBindUI("onDragStart",b(C=this._dragStartEdge).call(C,this)),this._temporaryBindUI("onHold",()=>{})}editEdgeMode(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",typeof this.options.editEdge=="object"&&typeof this.options.editEdge.editWithoutDrag=="function"&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0)){let i=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(i.from.id,i.to.id);return}if(this.guiEnabled===!0){var e;let i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,b(e=this.toggleEditMode).call(e,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var g,t,A,C;let i=this.body.edges[this.edgeBeingEditedId],n=this._getNewTargetNode(i.from.x,i.from.y),o=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(n.id),this.temporaryIds.nodes.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this._temporaryBindUI("onTouch",b(g=this._controlNodeTouch).call(g,this)),this._temporaryBindUI("onTap",()=>{}),this._temporaryBindUI("onHold",()=>{}),this._temporaryBindUI("onDragStart",b(t=this._controlNodeDragStart).call(t,this)),this._temporaryBindUI("onDrag",b(A=this._controlNodeDrag).call(A,this)),this._temporaryBindUI("onDragEnd",b(C=this._controlNodeDragEnd).call(C,this)),this._temporaryBindUI("onMouseMove",()=>{}),this._temporaryBindEvent("beforeDrawing",s=>{let r=i.edgeType.findBorderPositions(s);n.selected===!1&&(n.x=r.from.x,n.y=r.from.y),o.selected===!1&&(o.x=r.to.x,o.y=r.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}deleteSelected(){this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";let e=this.selectionHandler.getSelectedNodeIds(),g=this.selectionHandler.getSelectedEdgeIds(),t;if(e.length>0){for(let A=0;A<e.length;A++)if(this.body.nodes[e[A]].isCluster===!0){alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);return}typeof this.options.deleteNode=="function"&&(t=this.options.deleteNode)}else g.length>0&&typeof this.options.deleteEdge=="function"&&(t=this.options.deleteEdge);if(typeof t=="function"){let A={nodes:e,edges:g};if(t.length===2)t(A,C=>{C!=null&&this.inMode==="delete"?(this.body.data.edges.getDataSet().remove(C.edges),this.body.data.nodes.getDataSet().remove(C.nodes),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()):(this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar())});else throw new Error("The function for delete does not support two arguments (data, callback)")}else this.body.data.edges.getDataSet().remove(g),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}_setup(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}_createWrappers(){if(this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0){var e,g;this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(e=(g=this.options.locales[this.options.locale])===null||g===void 0?void 0:g.close)!==null&&e!==void 0?e:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv)}}_getNewTargetNode(e,g){let t=_({},this.options.controlNodeStyle);t.id="targetNode"+st(),t.hidden=!1,t.physics=!1,t.x=e,t.y=g;let A=this.body.functions.createNode(t);return A.shape.boundingBox={left:e,right:e,top:g,bottom:g},A}_createEditButton(){var e;this._clean(),this.manipulationDOM={},ug(this.editModeDiv);let g=this.options.locales[this.options.locale],t=this._createButton("editMode","vis-edit vis-edit-mode",g.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(t),this._bindElementEvents(t,b(e=this.toggleEditMode).call(e,this))}_clean(){this.inMode=!1,this.guiEnabled===!0&&(ug(this.editModeDiv),ug(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}_cleanupDOMEventListeners(){for(let g of Ue(e=this._domEventListenerCleanupQueue).call(e,0)){var e;g()}}_removeManipulationDOM(){this._clean(),ug(this.manipulationDiv),ug(this.editModeDiv),ug(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}_createSeperator(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+e]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+e].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+e])}_createAddNodeButton(e){var g;let t=this._createButton("addNode","vis-add",e.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.addNodeMode).call(g,this))}_createAddEdgeButton(e){var g;let t=this._createButton("addEdge","vis-connect",e.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.addEdgeMode).call(g,this))}_createEditNodeButton(e){var g;let t=this._createButton("editNode","vis-edit",e.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.editNode).call(g,this))}_createEditEdgeButton(e){var g;let t=this._createButton("editEdge","vis-edit",e.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.editEdgeMode).call(g,this))}_createDeleteButton(e){var g;let t;this.options.rtl?t="vis-delete-rtl":t="vis-delete";let A=this._createButton("delete",t,e.del||this.options.locales.en.del);this.manipulationDiv.appendChild(A),this._bindElementEvents(A,b(g=this.deleteSelected).call(g,this))}_createBackButton(e){var g;let t=this._createButton("back","vis-back",e.back||this.options.locales.en.back);this.manipulationDiv.appendChild(t),this._bindElementEvents(t,b(g=this.showManipulatorToolbar).call(g,this))}_createButton(e,g,t){let A=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[e+"Div"]=document.createElement("button"),this.manipulationDOM[e+"Div"].className="vis-button "+g,this.manipulationDOM[e+"Label"]=document.createElement("div"),this.manipulationDOM[e+"Label"].className=A,this.manipulationDOM[e+"Label"].innerText=t,this.manipulationDOM[e+"Div"].appendChild(this.manipulationDOM[e+"Label"]),this.manipulationDOM[e+"Div"]}_createDescription(e){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=e,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}_temporaryBindEvent(e,g){this.temporaryEventFunctions.push({event:e,boundFunction:g}),this.body.emitter.on(e,g)}_temporaryBindUI(e,g){if(this.body.eventListeners[e]!==void 0)this.temporaryUIFunctions[e]=this.body.eventListeners[e],this.body.eventListeners[e]=g;else throw new Error("This UI function does not exist. Typo? You tried: "+e+" possible are: "+Et(U(this.body.eventListeners)))}_unbindTemporaryUIs(){for(let e in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,e)&&(this.body.eventListeners[e]=this.temporaryUIFunctions[e],delete this.temporaryUIFunctions[e]);this.temporaryUIFunctions={}}_unbindTemporaryEvents(){for(let e=0;e<this.temporaryEventFunctions.length;e++){let g=this.temporaryEventFunctions[e].event,t=this.temporaryEventFunctions[e].boundFunction;this.body.emitter.off(g,t)}this.temporaryEventFunctions=[]}_bindElementEvents(e,g){let t=new ot(e,{});ZI(t,g),this._domEventListenerCleanupQueue.push(()=>{t.destroy()});let A=C=>{let{keyCode:i,key:n}=C;(n==="Enter"||n===" "||i===13||i===32)&&g()};e.addEventListener("keyup",A,!1),this._domEventListenerCleanupQueue.push(()=>{e.removeEventListener("keyup",A,!1)})}_cleanupTemporaryNodesAndEdges(){for(let C=0;C<this.temporaryIds.edges.length;C++){var e;this.body.edges[this.temporaryIds.edges[C]].disconnect(),delete this.body.edges[this.temporaryIds.edges[C]];let i=G(e=this.body.edgeIndices).call(e,this.temporaryIds.edges[C]);if(i!==-1){var g;Ue(g=this.body.edgeIndices).call(g,i,1)}}for(let C=0;C<this.temporaryIds.nodes.length;C++){var t;delete this.body.nodes[this.temporaryIds.nodes[C]];let i=G(t=this.body.nodeIndices).call(t,this.temporaryIds.nodes[C]);if(i!==-1){var A;Ue(A=this.body.nodeIndices).call(A,i,1)}}this.temporaryIds={nodes:[],edges:[]}}_controlNodeTouch(e){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=q({},this.body.view.translation)}_controlNodeDragStart(){let e=this.lastTouch,g=this.selectionHandler._pointerToPositionObject(e),t=this.body.nodes[this.temporaryIds.nodes[0]],A=this.body.nodes[this.temporaryIds.nodes[1]],C=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;let i=t.isOverlappingWith(g),n=A.isOverlappingWith(g);i===!0?(this.selectedControlNode=t,C.edgeType.from=t):n===!0&&(this.selectedControlNode=A,C.edgeType.to=A),this.selectedControlNode!==void 0&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit("_redraw")}_controlNodeDrag(e){this.body.emitter.emit("disablePhysics");let g=this.body.functions.getPointer(e.center),t=this.canvas.DOMtoCanvas(g);this.selectedControlNode!==void 0?(this.selectedControlNode.x=t.x,this.selectedControlNode.y=t.y):this.interactionHandler.onDrag(e),this.body.emitter.emit("_redraw")}_controlNodeDragEnd(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A=this.body.edges[this.edgeBeingEditedId];if(this.selectedControlNode===void 0)return;this.selectionHandler.unselectAll();let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let n=C.length-1;n>=0;n--)if(C[n]!==this.selectedControlNode.id){i=this.body.nodes[C[n]];break}if(i!==void 0&&this.selectedControlNode!==void 0)if(i.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{let n=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===n.id?this._performEditEdge(i.id,A.to.id):this._performEditEdge(A.from.id,i.id)}else A.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}_handleConnect(e){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=q({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;let g=this.lastTouch,t=this.selectionHandler.getNodeAt(g);if(t!==void 0)if(t.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{let A=this._getNewTargetNode(t.x,t.y);this.body.nodes[A.id]=A,this.body.nodeIndices.push(A.id);let C=this.body.functions.createEdge({id:"connectionEdge"+st(),from:t.id,to:A.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[C.id]=C,this.body.edgeIndices.push(C.id),this.temporaryIds.nodes.push(A.id),this.temporaryIds.edges.push(C.id)}this.touchTime=new Date().valueOf()}}_dragControlNode(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A;this.temporaryIds.edges[0]!==void 0&&(A=this.body.edges[this.temporaryIds.edges[0]].fromId);let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let o=C.length-1;o>=0;o--){var n;if(G(n=this.temporaryIds.nodes).call(n,C[o])===-1){i=this.body.nodes[C[o]];break}}if(e.controlEdge={from:A,to:i?i.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",e,g),this.temporaryIds.nodes[0]!==void 0){let o=this.body.nodes[this.temporaryIds.nodes[0]];o.x=this.canvas._XconvertDOMtoCanvas(g.x),o.y=this.canvas._YconvertDOMtoCanvas(g.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(e)}_finishConnect(e){let g=this.body.functions.getPointer(e.center),t=this.selectionHandler._pointerToPositionObject(g),A;this.temporaryIds.edges[0]!==void 0&&(A=this.body.edges[this.temporaryIds.edges[0]].fromId);let C=this.selectionHandler._getAllNodesOverlappingWith(t),i;for(let o=C.length-1;o>=0;o--){var n;if(G(n=this.temporaryIds.nodes).call(n,C[o])===-1){i=this.body.nodes[C[o]];break}}this._cleanupTemporaryNodesAndEdges(),i!==void 0&&(i.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[A]!==void 0&&this.body.nodes[i.id]!==void 0&&this._performAddEdge(A,i.id)),e.controlEdge={from:A,to:i?i.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",e,g),this.body.emitter.emit("_redraw")}_dragStartEdge(e){let g=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",e,g,void 0,!0)}_performAddNode(e){let g={id:st(),x:e.pointer.canvas.x,y:e.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function")if(this.options.addNode.length===2)this.options.addNode(g,t=>{t!=null&&this.inMode==="addNode"&&this.body.data.nodes.getDataSet().add(t),this.showManipulatorToolbar()});else throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");else this.body.data.nodes.getDataSet().add(g),this.showManipulatorToolbar()}_performAddEdge(e,g){let t={from:e,to:g};if(typeof this.options.addEdge=="function")if(this.options.addEdge.length===2)this.options.addEdge(t,A=>{A!=null&&this.inMode==="addEdge"&&(this.body.data.edges.getDataSet().add(A),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())});else throw new Error("The function for connect does not support two arguments (data,callback)");else this.body.data.edges.getDataSet().add(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}_performEditEdge(e,g){let t={id:this.edgeBeingEditedId,from:e,to:g,label:this.body.data.edges.get(this.edgeBeingEditedId).label},A=this.options.editEdge;if(typeof A=="object"&&(A=A.editWithoutDrag),typeof A=="function")if(A.length===2)A(t,C=>{C==null||this.inMode!=="editEdge"?(this.body.edges[t.id].updateEdgeType(),this.body.emitter.emit("_redraw"),this.showManipulatorToolbar()):(this.body.data.edges.getDataSet().update(C),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())});else throw new Error("The function for edit does not support two arguments (data, callback)");else this.body.data.edges.getDataSet().update(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},y="string",v="boolean",f="number",zt="array",x="object",Lh="dom",ZM="any",ui=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],fi={borderWidth:{number:f},borderWidthSelected:{number:f,undefined:"undefined"},brokenImage:{string:y,undefined:"undefined"},chosen:{label:{boolean:v,function:"function"},node:{boolean:v,function:"function"},__type__:{object:x,boolean:v}},color:{border:{string:y},background:{string:y},highlight:{border:{string:y},background:{string:y},__type__:{object:x,string:y}},hover:{border:{string:y},background:{string:y},__type__:{object:x,string:y}},__type__:{object:x,string:y}},opacity:{number:f,undefined:"undefined"},fixed:{x:{boolean:v},y:{boolean:v},__type__:{object:x,boolean:v}},font:{align:{string:y},color:{string:y},size:{number:f},face:{string:y},background:{string:y},strokeWidth:{number:f},strokeColor:{string:y},vadjust:{number:f},multi:{boolean:v,string:y},bold:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},boldital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},ital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},mono:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},__type__:{object:x,string:y}},group:{string:y,number:f,undefined:"undefined"},heightConstraint:{minimum:{number:f},valign:{string:y},__type__:{object:x,boolean:v,number:f}},hidden:{boolean:v},icon:{face:{string:y},code:{string:y},size:{number:f},color:{string:y},weight:{string:y,number:f},__type__:{object:x}},id:{string:y,number:f},image:{selected:{string:y,undefined:"undefined"},unselected:{string:y,undefined:"undefined"},__type__:{object:x,string:y}},imagePadding:{top:{number:f},right:{number:f},bottom:{number:f},left:{number:f},__type__:{object:x,number:f}},label:{string:y,undefined:"undefined"},labelHighlightBold:{boolean:v},level:{number:f,undefined:"undefined"},margin:{top:{number:f},right:{number:f},bottom:{number:f},left:{number:f},__type__:{object:x,number:f}},mass:{number:f},physics:{boolean:v},scaling:{min:{number:f},max:{number:f},label:{enabled:{boolean:v},min:{number:f},max:{number:f},maxVisible:{number:f},drawThreshold:{number:f},__type__:{object:x,boolean:v}},customScalingFunction:{function:"function"},__type__:{object:x}},shadow:{enabled:{boolean:v},color:{string:y},size:{number:f},x:{number:f},y:{number:f},__type__:{object:x,boolean:v}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:v,array:zt},borderRadius:{number:f},interpolation:{boolean:v},useImageSize:{boolean:v},useBorderWithImage:{boolean:v},coordinateOrigin:{string:["center","top-left"]},__type__:{object:x}},size:{number:f},title:{string:y,dom:Lh,undefined:"undefined"},value:{number:f,undefined:"undefined"},widthConstraint:{minimum:{number:f},maximum:{number:f},__type__:{object:x,boolean:v,number:f}},x:{number:f},y:{number:f},__type__:{object:x}},LM={configure:{enabled:{boolean:v},filter:{boolean:v,string:y,array:zt,function:"function"},container:{dom:Lh},showButton:{boolean:v},__type__:{object:x,boolean:v,string:y,array:zt,function:"function"}},edges:{arrows:{to:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageHeight:{number:f},imageWidth:{number:f},src:{string:y},__type__:{object:x,boolean:v}},middle:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageWidth:{number:f},imageHeight:{number:f},src:{string:y},__type__:{object:x,boolean:v}},from:{enabled:{boolean:v},scaleFactor:{number:f},type:{string:ui},imageWidth:{number:f},imageHeight:{number:f},src:{string:y},__type__:{object:x,boolean:v}},__type__:{string:["from","to","middle"],object:x}},endPointOffset:{from:{number:f},to:{number:f},__type__:{object:x,number:f}},arrowStrikethrough:{boolean:v},background:{enabled:{boolean:v},color:{string:y},size:{number:f},dashes:{boolean:v,array:zt},__type__:{object:x,boolean:v}},chosen:{label:{boolean:v,function:"function"},edge:{boolean:v,function:"function"},__type__:{object:x,boolean:v}},color:{color:{string:y},highlight:{string:y},hover:{string:y},inherit:{string:["from","to","both"],boolean:v},opacity:{number:f},__type__:{object:x,string:y}},dashes:{boolean:v,array:zt},font:{color:{string:y},size:{number:f},face:{string:y},background:{string:y},strokeWidth:{number:f},strokeColor:{string:y},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:f},multi:{boolean:v,string:y},bold:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},boldital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},ital:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},mono:{color:{string:y},size:{number:f},face:{string:y},mod:{string:y},vadjust:{number:f},__type__:{object:x,string:y}},__type__:{object:x,string:y}},hidden:{boolean:v},hoverWidth:{function:"function",number:f},label:{string:y,undefined:"undefined"},labelHighlightBold:{boolean:v},length:{number:f,undefined:"undefined"},physics:{boolean:v},scaling:{min:{number:f},max:{number:f},label:{enabled:{boolean:v},min:{number:f},max:{number:f},maxVisible:{number:f},drawThreshold:{number:f},__type__:{object:x,boolean:v}},customScalingFunction:{function:"function"},__type__:{object:x}},selectionWidth:{function:"function",number:f},selfReferenceSize:{number:f},selfReference:{size:{number:f},angle:{number:f},renderBehindTheNode:{boolean:v},__type__:{object:x}},shadow:{enabled:{boolean:v},color:{string:y},size:{number:f},x:{number:f},y:{number:f},__type__:{object:x,boolean:v}},smooth:{enabled:{boolean:v},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:f},forceDirection:{string:["horizontal","vertical","none"],boolean:v},__type__:{object:x,boolean:v}},title:{string:y,undefined:"undefined"},width:{number:f},widthConstraint:{maximum:{number:f},__type__:{object:x,boolean:v,number:f}},value:{number:f,undefined:"undefined"},__type__:{object:x}},groups:{useDefaultGroups:{boolean:v},__any__:fi,__type__:{object:x}},interaction:{dragNodes:{boolean:v},dragView:{boolean:v},hideEdgesOnDrag:{boolean:v},hideEdgesOnZoom:{boolean:v},hideNodesOnDrag:{boolean:v},hover:{boolean:v},keyboard:{enabled:{boolean:v},speed:{x:{number:f},y:{number:f},zoom:{number:f},__type__:{object:x}},bindToWindow:{boolean:v},autoFocus:{boolean:v},__type__:{object:x,boolean:v}},multiselect:{boolean:v},navigationButtons:{boolean:v},selectable:{boolean:v},selectConnectedEdges:{boolean:v},hoverConnectedEdges:{boolean:v},tooltipDelay:{number:f},zoomView:{boolean:v},zoomSpeed:{number:f},__type__:{object:x}},layout:{randomSeed:{undefined:"undefined",number:f,string:y},improvedLayout:{boolean:v},clusterThreshold:{number:f},hierarchical:{enabled:{boolean:v},levelSeparation:{number:f},nodeSpacing:{number:f},treeSpacing:{number:f},blockShifting:{boolean:v},edgeMinimization:{boolean:v},parentCentralization:{boolean:v},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:x,boolean:v}},__type__:{object:x}},manipulation:{enabled:{boolean:v},initiallyActive:{boolean:v},addNode:{boolean:v,function:"function"},addEdge:{boolean:v,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:x,boolean:v,function:"function"}},deleteNode:{boolean:v,function:"function"},deleteEdge:{boolean:v,function:"function"},controlNodeStyle:fi,__type__:{object:x,boolean:v}},nodes:fi,physics:{enabled:{boolean:v},barnesHut:{theta:{number:f},gravitationalConstant:{number:f},centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},forceAtlas2Based:{theta:{number:f},gravitationalConstant:{number:f},centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},repulsion:{centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},nodeDistance:{number:f},damping:{number:f},__type__:{object:x}},hierarchicalRepulsion:{centralGravity:{number:f},springLength:{number:f},springConstant:{number:f},nodeDistance:{number:f},damping:{number:f},avoidOverlap:{number:f},__type__:{object:x}},maxVelocity:{number:f},minVelocity:{number:f},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:v},iterations:{number:f},updateInterval:{number:f},onlyDynamicEdges:{boolean:v},fit:{boolean:v},__type__:{object:x,boolean:v}},timestep:{number:f},adaptiveTimestep:{boolean:v},wind:{x:{number:f},y:{number:f},__type__:{object:x}},__type__:{object:x,boolean:v}},autoResize:{boolean:v},clickToUse:{boolean:v},locale:{string:y},locales:{__any__:{any:ZM},__type__:{object:x}},height:{string:y},width:{string:y},__type__:{object:x}},Gh={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},GM=(I,e,g)=>{var t;return!!(yg(I).call(I,"physics")&&yg(t=Gh.physics.solver).call(t,e)&&g.physics.solver!==e&&e!=="wind")};var Kn=class{constructor(){}getDistances(e,g,t){let A={},C=e.edges;for(let n=0;n<g.length;n++){let o=g[n],s={};A[o]=s;for(let r=0;r<g.length;r++)s[g[r]]=n==r?0:1e9}for(let n=0;n<t.length;n++){let o=C[t[n]];o.connected===!0&&A[o.fromId]!==void 0&&A[o.toId]!==void 0&&(A[o.fromId][o.toId]=1,A[o.toId][o.fromId]=1)}let i=g.length;for(let n=0;n<i;n++){let o=g[n],s=A[o];for(let r=0;r<i-1;r++){let a=g[r],d=A[a];for(let l=r+1;l<i;l++){let h=g[l],c=A[h],p=Math.min(d[h],d[o]+s[h]);d[h]=p,c[a]=p}}}return A}},Un=class{constructor(e,g,t){this.body=e,this.springLength=g,this.springConstant=t,this.distanceSolver=new Kn}setOptions(e){e&&(e.springLength&&(this.springLength=e.springLength),e.springConstant&&(this.springConstant=e.springConstant))}solve(e,g){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,A=this.distanceSolver.getDistances(this.body,e,g);this._createL_matrix(A),this._createK_matrix(A),this._createE_matrix();let C=.01,i=1,n=0,o=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),s=5,r=1e9,a=0,d=0,l=0,h=0,c=0;for(;r>C&&n<o;)for(n+=1,[a,r,d,l]=this._getHighestEnergyNode(t),h=r,c=0;h>i&&c<s;)c+=1,this._moveNode(a,d,l),[h,d,l]=this._getEnergy(a)}_getHighestEnergyNode(e){let g=this.body.nodeIndices,t=this.body.nodes,A=0,C=g[0],i=0,n=0;for(let o=0;o<g.length;o++){let s=g[o];if(t[s].predefinedPosition!==!0||t[s].isCluster===!0&&e===!0||t[s].options.fixed.x!==!0||t[s].options.fixed.y!==!0){let[r,a,d]=this._getEnergy(s);A<r&&(A=r,C=s,i=a,n=d)}}return[C,A,i,n]}_getEnergy(e){let[g,t]=this.E_sums[e];return[Math.sqrt(g**2+t**2),g,t]}_moveNode(e,g,t){let A=this.body.nodeIndices,C=this.body.nodes,i=0,n=0,o=0,s=C[e].x,r=C[e].y,a=this.K_matrix[e],d=this.L_matrix[e];for(let w=0;w<A.length;w++){let O=A[w];if(O!==e){let M=C[O].x,k=C[O].y,V=a[O],ye=d[O],ue=1/((s-M)**2+(r-k)**2)**1.5;i+=V*(1-ye*(r-k)**2*ue),n+=V*(ye*(s-M)*(r-k)*ue),o+=V*(1-ye*(s-M)**2*ue)}}let l=i,h=n,c=g,p=o,u=t,m=(c/l+u/h)/(h/l-p/h),E=-(h*m+c)/l;C[e].x+=E,C[e].y+=m,this._updateE_matrix(e)}_createL_matrix(e){let g=this.body.nodeIndices,t=this.springLength;this.L_matrix=[];for(let A=0;A<g.length;A++){this.L_matrix[g[A]]={};for(let C=0;C<g.length;C++)this.L_matrix[g[A]][g[C]]=t*e[g[A]][g[C]]}}_createK_matrix(e){let g=this.body.nodeIndices,t=this.springConstant;this.K_matrix=[];for(let A=0;A<g.length;A++){this.K_matrix[g[A]]={};for(let C=0;C<g.length;C++)this.K_matrix[g[A]][g[C]]=t*e[g[A]][g[C]]**-2}}_createE_matrix(){let e=this.body.nodeIndices,g=this.body.nodes;this.E_matrix={},this.E_sums={};for(let t=0;t<e.length;t++)this.E_matrix[e[t]]=[];for(let t=0;t<e.length;t++){let A=e[t],C=g[A].x,i=g[A].y,n=0,o=0;for(let s=t;s<e.length;s++){let r=e[s];if(r!==A){let a=g[r].x,d=g[r].y,l=1/Math.sqrt((C-a)**2+(i-d)**2);this.E_matrix[A][s]=[this.K_matrix[A][r]*(C-a-this.L_matrix[A][r]*(C-a)*l),this.K_matrix[A][r]*(i-d-this.L_matrix[A][r]*(i-d)*l)],this.E_matrix[r][t]=this.E_matrix[A][s],n+=this.E_matrix[A][s][0],o+=this.E_matrix[A][s][1]}}this.E_sums[A]=[n,o]}}_updateE_matrix(e){let g=this.body.nodeIndices,t=this.body.nodes,A=this.E_matrix[e],C=this.K_matrix[e],i=this.L_matrix[e],n=t[e].x,o=t[e].y,s=0,r=0;for(let a=0;a<g.length;a++){let d=g[a];if(d!==e){let l=A[a],h=l[0],c=l[1],p=t[d].x,u=t[d].y,m=1/Math.sqrt((n-p)**2+(o-u)**2),E=C[d]*(n-p-i[d]*(n-p)*m),w=C[d]*(o-u-i[d]*(o-u)*m);A[a]=[E,w],s+=E,r+=w;let O=this.E_sums[d];O[0]+=E-h,O[1]+=w-c}}this.E_sums[e]=[s,r]}};function T(I,e,g){var t,A,C,i;if(!(this instanceof T))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:E1,clickToUse:!1},q(this.options,this.defaultOptions),this.body={container:I,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:b(t=this.on).call(t,this),off:b(A=this.off).call(A,this),emit:b(C=this.emit).call(C,this),once:b(i=this.once).call(i,this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}},selectionBox:{show:!1,position:{start:{x:0,y:0},end:{x:0,y:0}}}},this.bindEventListeners(),this.images=new _i(()=>this.body.emitter.emit("_requestRedraw")),this.groups=new Ki,this.canvas=new Mn(this.body),this.selectionHandler=new Gn(this.body,this.canvas),this.interactionHandler=new zn(this.body,this.canvas,this.selectionHandler),this.view=new Fn(this.body,this.canvas),this.renderer=new kn(this.body,this.canvas),this.physics=new Nn(this.body),this.layoutEngine=new Yn(this.body),this.clustering=new Sn(this.body),this.manipulation=new _n(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new an(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new En(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new Un(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(g),this.setData(e)}ed(T.prototype);T.prototype.setOptions=function(I){if(I===null&&(I=void 0),I!==void 0){if(g1.validate(I,LM)===!0&&console.error("%cErrors have been found in the supplied options object.",jl),xt(["locale","locales","clickToUse"],this.options,I),I.locale!==void 0&&(I.locale=T1(I.locales||this.options.locales,I.locale)),I=this.layoutEngine.setOptions(I.layout,I),this.canvas.setOptions(I),this.groups.setOptions(I.groups),this.nodesHandler.setOptions(I.nodes),this.edgesHandler.setOptions(I.edges),this.physics.setOptions(I.physics),this.manipulation.setOptions(I.manipulation,I,this.options),this.interactionHandler.setOptions(I.interaction),this.renderer.setOptions(I.interaction),this.selectionHandler.setOptions(I.interaction),I.groups!==void 0&&this.body.emitter.emit("refreshNodes"),"configure"in I&&(this.configurator||(this.configurator=new qO(this,this.body.container,Gh,this.canvas.pixelRatio,GM)),this.configurator.setOptions(I.configure)),this.configurator&&this.configurator.options.enabled===!0){let t={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};_(t.nodes,this.nodesHandler.options),_(t.edges,this.edgesHandler.options),_(t.layout,this.layoutEngine.options),_(t.interaction,this.selectionHandler.options),_(t.interaction,this.renderer.options),_(t.interaction,this.interactionHandler.options),_(t.manipulation,this.manipulation.options),_(t.physics,this.physics.options),_(t.global,this.canvas.options),_(t.global,this.options),this.configurator.setModuleOptions(t)}I.clickToUse!==void 0?I.clickToUse===!0?this.activator===void 0&&(this.activator=new $O(this.canvas.frame),this.activator.on("change",()=>{this.body.emitter.emit("activate")})):(this.activator!==void 0&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}};T.prototype._updateVisibleIndices=function(){let I=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(let g in I)Object.prototype.hasOwnProperty.call(I,g)&&!this.clustering._isClusteredNode(g)&&I[g].options.hidden===!1&&this.body.nodeIndices.push(I[g].id);for(let g in e)if(Object.prototype.hasOwnProperty.call(e,g)){let t=e[g],A=I[t.fromId],C=I[t.toId],i=A!==void 0&&C!==void 0;!this.clustering._isClusteredEdge(g)&&t.options.hidden===!1&&i&&A.options.hidden===!1&&C.options.hidden===!1&&this.body.edgeIndices.push(t.id)}};T.prototype.bindEventListeners=function(){this.body.emitter.on("_dataChanged",()=>{this.edgesHandler._updateState(),this.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",()=>{this.clustering._updateState(),this._updateVisibleIndices(),this._updateValueRange(this.body.nodes),this._updateValueRange(this.body.edges),this.body.emitter.emit("startSimulation"),this.body.emitter.emit("_requestRedraw")})};T.prototype.setData=function(I){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),I&&I.dot&&(I.nodes||I.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(I&&I.options),I&&I.dot){console.warn("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");let e=a1(I.dot);this.setData(e);return}else if(I&&I.gephi){console.warn("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");let e=d1(I.gephi);this.setData(e);return}else this.nodesHandler.setData(I&&I.nodes,!0),this.edgesHandler.setData(I&&I.edges,!0);this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")};T.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(let I in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,I)&&delete this.body.nodes[I];for(let I in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,I)&&delete this.body.edges[I];ug(this.body.container)};T.prototype._updateValueRange=function(I){let e,g,t,A=0;for(e in I)if(Object.prototype.hasOwnProperty.call(I,e)){let C=I[e].getValue();C!==void 0&&(g=g===void 0?C:Math.min(C,g),t=t===void 0?C:Math.max(C,t),A+=C)}if(g!==void 0&&t!==void 0)for(e in I)Object.prototype.hasOwnProperty.call(I,e)&&I[e].setValueRange(g,t,A)};T.prototype.isActive=function(){return!this.activator||this.activator.active};T.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)};T.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)};T.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)};T.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)};T.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)};T.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)};T.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)};T.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)};T.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)};T.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)};T.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)};T.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)};T.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)};T.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)};T.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)};T.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)};T.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)};T.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)};T.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)};T.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)};T.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)};T.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)};T.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)};T.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)};T.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)};T.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)};T.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)};T.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)};T.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)};T.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)};T.prototype.getConnectedNodes=function(I){return this.body.nodes[I]!==void 0?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)};T.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)};T.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)};T.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)};T.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)};T.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)};T.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)};T.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)};T.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)};T.prototype.getNodeAt=function(){let I=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return I!==void 0&&I.id!==void 0?I.id:I};T.prototype.getEdgeAt=function(){let I=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return I!==void 0&&I.id!==void 0?I.id:I};T.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)};T.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)};T.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()};T.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)};T.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)};T.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)};T.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)};T.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)};T.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)};T.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)};T.prototype.getOptionsFromConfigurator=function(){let I={};return this.configurator&&(I=this.configurator.getOptions.apply(this.configurator)),I};function oC(){return document.documentElement.getAttribute("data-theme")||"light"}function Fo(I){return I==="dark"?{uri:"#97C2FC",literal:"#a6c8a6ff",blankNode:"#888888",typeObject:"#e15b13ff",text:"#e0e0e0",edge:"#666666",edgeLabel:"#cccccc",edgeLabelBackground:"rgba(30, 30, 30, 0.8)"}:{uri:"#97C2FC",literal:"#a6c8a6ff",blankNode:"#c5c5c5ff",typeObject:"#e15b13ff",text:"#000000",edge:"#cccccc",edgeLabel:"#666666",edgeLabelBackground:"rgba(255, 255, 255, 0.8)"}}function Vh(I){let e=new MutationObserver(g=>{g.forEach(t=>{if(t.attributeName==="data-theme"){let A=oC();I(A)}})});return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),e}function VM(){return{Network:T,DataSet:Pg}}var Bo=class{constructor(e){this.yasr=e,this.network=null,this.currentTheme=oC(),this.themeObserver=null}static get priority(){return 20}static get label(){return"Graph"}canHandleResults(){if(!this.yasr||!this.yasr.results)return!1;let e=this.yasr.results;if(e.getBindings&&typeof e.getBindings=="function"){let g=e.getBindings();if(g&&g.length>0){let t=g[0];return t.subject!==void 0&&t.predicate!==void 0&&t.object!==void 0}}return!1}draw(){this.yasr.resultsEl.innerHTML="";try{let e=Lo(this.yasr.results);if(!e||e.length===0){this.yasr.resultsEl.innerHTML='<div style="padding: 20px; text-align: center; color: #666;">No graph data to visualize</div>';return}let g=Zo(this.yasr);this.currentTheme=oC();let t=Fo(this.currentTheme),{nodes:A,edges:C}=dC(e,g,t),i=document.createElement("div");i.id="yasgui-graph-plugin-container",i.style.width="100%",i.style.minHeight="500px",i.style.height="100%",i.style.position="relative",i.style.overflow="hidden",this.yasr.resultsEl.appendChild(i);let{Network:n,DataSet:o}=VM(),s=new o(A),r=new o(C),a=rC(t);this.nodesDataSet=s,this.edgesDataSet=r,this.triples=e,this.prefixMap=g,this.network=new n(i,{nodes:s,edges:r},a),this.networkReady=!1,this.network.on("stabilizationIterationsDone",()=>{this.network.setOptions({physics:{enabled:!0}}),this.networkReady=!0}),this.themeObserver||(this.themeObserver=Vh(h=>{this.applyTheme(h)}));let d=document.createElement("div");d.style.position="absolute",d.style.top="10px",d.style.right="10px",d.style.zIndex="10000",d.style.display="flex",d.style.gap="10px",d.style.pointerEvents="auto",i.appendChild(d);let l=document.createElement("button");l.textContent="Zoom to Fit",l.style.padding="8px 12px",l.style.background="#4CAF50",l.style.color="white",l.style.border="none",l.style.borderRadius="4px",l.style.cursor="pointer",l.style.fontSize="14px",l.style.boxShadow="0 2px 4px rgba(0,0,0,0.2)",l.onmouseover=()=>l.style.background="#45a049",l.onmouseout=()=>l.style.background="#4CAF50",l.onclick=()=>{this.network&&this.network.fit({animation:{duration:300,easingFunction:"easeInOutQuad"}})},d.appendChild(l),e.length>1e3&&console.warn("Large graph detected (>1000 triples). Rendering may be slow.")}catch(e){console.error("Error rendering graph:",e),this.yasr.resultsEl.innerHTML='<div style="padding: 20px; color: red;">Error rendering graph. See console for details.</div>'}}applyTheme(e){if(!this.network||!this.nodesDataSet||!this.triples||!this.prefixMap)return;this.currentTheme=e;let g=Fo(e),{nodes:t,edges:A}=dC(this.triples,this.prefixMap,g);this.nodesDataSet.clear(),this.nodesDataSet.add(t),this.edgesDataSet.clear(),this.edgesDataSet.add(A);let C=rC(g);this.network.setOptions(C)}getIcon(){let e=document.createElement("div");return e.setAttribute("aria-label","Graph visualization"),e.style.display="inline-flex",e.style.alignItems="center",e.style.justifyContent="center",e.innerHTML=`<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
909
909
|
<circle cx="3" cy="3" r="2" />
|
|
910
910
|
<circle cx="13" cy="3" r="2" />
|
|
911
911
|
<circle cx="8" cy="13" r="2" />
|