mind-elixir 3.0.1 → 3.0.2

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.
@@ -8,4 +8,4 @@ var MindElixir=function(){"use strict";const Nt="";(function(e){var t,n,i,o,s,r,
8
8
  `;function n(i,o){for(let s=0;s<i.length;s++)o<=6?t+="".padStart(o,"#")+" "+i[s].topic+`
9
9
 
10
10
  `:t+="".padStart(o-7," ")+"- "+i[s].topic+`
11
- `,i[s].children&&n(i[s].children||[],o+1)}return n(e.children||[],2),t},getDataString:function(){const e=pe(this);return JSON.stringify(e,(t,n)=>{if(t!=="parent")return t==="from"||t==="to"?n.nodeObj.id:n})},initLeft:function(){this.direction=0,this.refresh()},initRight:function(){this.direction=1,this.refresh()},initSide:function(){this.direction=2,this.refresh()},install:function(e){e(this)},refresh:function(e){e=JSON.parse(JSON.stringify(e)),e&&(this.nodeData=e.nodeData,this.linkData=e.linkData||{}),$(this.nodeData),this.layout(),this.linkDiv()},scale:function(e){this.scaleVal=e,this.map.style.transform="scale("+e+")"},selectFirstChild:function(){if(!this.currentNode)return;const e=this.currentNode.parentElement.nextSibling;if(e&&e.firstChild){const t=e.firstChild.firstChild.firstChild;this.selectNode(t)}},selectNextSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const e=this.currentNode.parentElement.parentElement.nextSibling;let t;if(e)t=e.firstChild.firstChild;else return!1;return this.selectNode(t),!0},selectNode:function(e,t,n){if(e){if(console.time("selectNode"),typeof e=="string"){const i=k(e);return i?this.selectNode(i):void 0}this.currentNode&&(this.currentNode.className=""),e.className="selected",e.scrollIntoView({block:"nearest",inline:"nearest"}),this.currentNode=e,t?this.bus.fire("selectNewNode",e.nodeObj):this.bus.fire("selectNode",e.nodeObj,n),console.timeEnd("selectNode")}},selectParent:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return;const e=this.currentNode.parentElement.parentElement.parentElement.previousSibling;if(e){const t=e.firstChild;this.selectNode(t)}},selectPrevSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const e=this.currentNode.parentElement.parentElement.previousSibling;let t;if(e)t=e.firstChild.firstChild;else return!1;return this.selectNode(t),!0},setLocale:function(e){this.locale=e,this.refresh()},toCenter:function(){this.container.scrollTo(1e4-this.container.offsetWidth/2,1e4-this.container.offsetHeight/2)},unselectNode:function(){this.currentNode&&(this.currentNode.className=""),this.currentNode=null,this.bus.fire("unselectNode")}},Symbol.toStringTag,{value:"Module"})),Y=function(e){const n=e.parentElement.parentElement.lastElementChild;(n==null?void 0:n.tagName)==="svg"&&(n==null||n.remove())},me=function(e,t){var n,i;if(e===x)return x;if(e===P)return P;if(e===H){const o=((n=document.querySelector(".lhs"))==null?void 0:n.childElementCount)||0,s=((i=document.querySelector(".rhs"))==null?void 0:i.childElementCount)||0;return o<=s?(t.direction=x,x):(t.direction=P,P)}},ut=function(e,t){console.log(t);const n=e.nodeObj,i=oe(n);i.style&&t.style&&(t.style=Object.assign(i.style,t.style));const o=Object.assign(n,t);K(e,o),this.linkDiv(),this.bus.fire("operation",{name:"reshapeNode",obj:o,origin:i})},ft=function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(i.root===!0){this.addChild();return}const o=t||this.generateNewObj();Le(i,o),$(this.nodeData);const s=n.parentElement;console.time("insertSibling_DOM");const{grp:r,top:a}=this.createWrapper(o);s.parentNode.parentNode.insertBefore(r,s.parentNode.nextSibling),this.linkDiv(r.offsetParent),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertSibling_DOM"),this.bus.fire("operation",{name:"insertSibling",obj:o})},pt=function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(i.root===!0){this.addChild();return}const o=t||this.generateNewObj();$e(i,o),$(this.nodeData);const s=n.parentElement;console.time("insertSibling_DOM");const{grp:r,top:a}=this.createWrapper(o);s.parentNode.parentNode.insertBefore(r,s.parentNode),this.linkDiv(r.offsetParent),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertSibling_DOM"),this.bus.fire("operation",{name:"insertBefore",obj:o})},mt=function(e,t){const n=e||this.currentNode;if(!n)return;Y(n);const i=n.nodeObj;if(i.root===!0)return;const o=t||this.generateNewObj();Se(i,o),$(this.nodeData);const s=n.parentElement.parentElement;console.time("insertParent_DOM");const{grp:r,top:a}=this.createWrapper(o,!0);a.appendChild(R(!0)),s.insertAdjacentElement("afterend",r);const l=this.createChildren([s]);a.insertAdjacentElement("afterend",l),this.linkDiv(),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertParent_DOM"),this.bus.fire("operation",{name:"insertParent",obj:o})},ge=function(e,t){var a,l;if(!e)return null;const n=e.nodeObj;n.expanded===!1&&(this.expandNode(e,!0),e=k(n.id));const i=t||this.generateNewObj();n.children?n.children.push(i):n.children=[i],$(this.nodeData);const o=e.parentElement,{grp:s,top:r}=this.createWrapper(i);if(o.tagName==="ME-PARENT"){if(o.children[1])o.nextSibling.appendChild(s);else{const u=this.createChildren([s]);o.appendChild(R(!0)),o.insertAdjacentElement("afterend",u)}this.linkDiv(s.offsetParent)}else o.tagName==="ME-ROOT"&&(me(this.direction,i)===x?(a=document.querySelector(".lhs"))==null||a.appendChild(s):(l=document.querySelector(".rhs"))==null||l.appendChild(s),this.linkDiv());return{newTop:r,newNodeObj:i}},be=Object.freeze(Object.defineProperty({__proto__:null,addChild:function(e,t){console.time("addChild");const n=e||this.currentNode;if(!n)return;const i=ge.call(this,n,t);if(!i)return;const{newTop:o,newNodeObj:s}=i;this.bus.fire("operation",{name:"addChild",obj:s}),console.timeEnd("addChild"),t||this.createInputDiv(o.firstChild),this.selectNode(o.firstChild,!0)},beginEdit:function(e){const t=e||this.currentNode;t&&this.createInputDiv(t)},copyNode:function(e,t){console.time("copyNode");const n=oe(e.nodeObj);ne(n);const i=ge.call(this,t,n);if(!i)return;const{newNodeObj:o}=i;console.timeEnd("copyNode"),this.bus.fire("operation",{name:"copyNode",obj:o})},insertBefore:pt,insertParent:mt,insertSibling:ft,moveDownNode:function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;Me(i),n.nextSibling?n.nextSibling.insertAdjacentElement("afterend",n):n.parentNode.prepend(n),this.linkDiv(),this.bus.fire("operation",{name:"moveDownNode",obj:i})},moveNode:function(e,t){var a;const n=e.nodeObj,i=t.nodeObj,o=(a=n==null?void 0:n.parent)==null?void 0:a.id;if(i.expanded===!1&&(this.expandNode(t,!0),e=k(n.id),t=k(i.id)),!xe(n,i)){console.warn("Invalid move");return}console.time("moveNode"),Te(n,i),$(this.nodeData);const s=e.parentElement,r=t.parentElement;if(r.tagName==="ME-PARENT")if(Y(e),r.children[1])r.nextSibling.appendChild(s.parentElement);else{const l=this.createChildren([s.parentElement]);r.appendChild(R(!0)),r.parentElement.insertBefore(l,r.nextSibling)}else r.tagName==="ME-ROOT"&&(me(this.direction,n),r.nextSibling.appendChild(s.parentElement));this.linkDiv(),this.bus.fire("operation",{name:"moveNode",obj:n,toObj:i,originParentId:o}),console.timeEnd("moveNode")},moveNodeAfter:function(e,t){var u;const n=e.nodeObj,i=t.nodeObj,o=(u=n.parent)==null?void 0:u.id;De(n,i),$(this.nodeData),Y(e);const r=e.parentElement.parentElement;t.parentElement.parentElement.insertAdjacentElement("afterend",r),this.linkDiv(),this.bus.fire("operation",{name:"moveNodeAfter",obj:n,toObj:i,originParentId:o})},moveNodeBefore:function(e,t){var u;const n=e.nodeObj,i=t.nodeObj,o=(u=n.parent)==null?void 0:u.id;Pe(n,i),$(this.nodeData),Y(e);const r=e.parentElement.parentNode;t.parentElement.parentNode.insertAdjacentElement("beforebegin",r),this.linkDiv(),this.bus.fire("operation",{name:"moveNodeBefore",obj:n,toObj:i,originParentId:o})},moveUpNode:function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;we(i),n.parentNode.insertBefore(n,n.previousSibling),this.linkDiv(),this.bus.fire("operation",{name:"moveUpNode",obj:i})},removeNode:function(e){var u;const t=e||this.currentNode;if(!t)return;console.log("removeNode",t);const n=t.nodeObj;if(n.root===!0)throw new Error("Can not remove root node");const i=n.parent.children,o=i.findIndex(c=>c===n),s=i[o+1],r=s&&s.id,a=F(n),l=t.parentNode;if(a===0){const c=l.parentNode.parentNode;c.tagName!=="ME-MAIN"&&c.previousSibling.children[1].remove(),this.selectParent()}else this.selectPrevSibling()||this.selectNextSibling();for(const c in this.linkData){const h=this.linkData[c];if(h.from===n.id||h.to===n.id){const d=this.mindElixirBox.querySelector(`[data-linkid=${this.linkData[c].id}]`);this.removeLink(d)}}l.parentNode.remove(),this.linkDiv(),this.bus.fire("operation",{name:"removeNode",obj:n,originSiblingId:r,originParentId:(u=n==null?void 0:n.parent)==null?void 0:u.id})},reshapeNode:ut,setNodeTopic:function(e,t){e.childNodes[0].textContent=t,e.nodeObj.topic=t,this.linkDiv()}},Symbol.toStringTag,{value:"Module"})),ve={create:function(e){return{dom:e,mousedown:!1,lastX:0,lastY:0,handleMouseMove(t){if(t.stopPropagation(),this.mousedown){if(!this.lastX){this.lastX=t.pageX,this.lastY=t.pageY;return}const n=this.lastX-t.pageX,i=this.lastY-t.pageY;this.cb&&this.cb(n,i),this.lastX=t.pageX,this.lastY=t.pageY}},handleMouseDown(t){t.stopPropagation(),this.mousedown=!0},handleClear(t){t.stopPropagation(),this.clear()},cb:null,init(t,n){this.cb=n,this.handleClear=this.handleClear.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseDown=this.handleMouseDown.bind(this),t.addEventListener("mousemove",this.handleMouseMove),t.addEventListener("mouseleave",this.handleClear),t.addEventListener("mouseup",this.handleClear),this.dom.addEventListener("mousedown",this.handleMouseDown)},destory(t){t.removeEventListener("mousemove",this.handleMouseMove),t.removeEventListener("mouseleave",this.handleClear),t.removeEventListener("mouseup",this.handleClear),this.dom.removeEventListener("mousedown",this.handleMouseDown)},clear(){this.mousedown=!1,this.lastX=0,this.lastY=0}}}},gt=Object.freeze(Object.defineProperty({__proto__:null,createLink:function(e,t,n,i){const o=this.map.getBoundingClientRect();if(!e||!t)return;const s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),a=(s.x+s.width/2-o.x)/this.scaleVal,l=(s.y+s.height/2-o.y)/this.scaleVal,u=(r.x+r.width/2-o.x)/this.scaleVal,c=(r.y+r.height/2-o.y)/this.scaleVal;let h,d,p,g;n&&i?(h=a+i.delta1.x,d=l+i.delta1.y,p=u+i.delta2.x,g=c+i.delta2.y):(l+c)/2-l<=s.height/2?(h=(s.x+s.width-o.x)/this.scaleVal+100,d=l,p=(r.x+r.width-o.x)/this.scaleVal+100,g=c):(h=(a+u)/2,d=(l+c)/2,p=(a+u)/2,g=(l+c)/2);const f={cx:a,cy:l,w:s.width,h:s.height},m={cx:u,cy:c,w:r.width,h:r.height},b=U(f,h,d),v=b.x,N=b.y,y=G(m,p,g),C=y.x,_=y.y,X=ie(p,g,C,_),T={id:"",label:"",from:e.nodeObj.id,to:t.nodeObj.id,delta1:{x:h-a,y:d-l},delta2:{x:p-u,y:g-c}},W=Xe(`M ${v} ${N} C ${h} ${d} ${p} ${g} ${C} ${_}`,`M ${X.x1} ${X.y1} L ${C} ${_} L ${X.x2} ${X.y2}`);n&&i?(T.id=i.id,this.linkData[i.id]=T):(T.id=V(),this.linkData[T.id]=T,this.currentLink=W),W.linkObj=T,W.dataset.linkid=T.id,this.linkSvgGroup.appendChild(W),n||this.showLinkController(h,d,p,g,T,f,m)},hideLinkController:function(){this.linkController.style.display="none",this.P2.style.display="none",this.P3.style.display="none"},removeLink:function(e){let t;if(e?t=e:t=this.currentLink,!t)return;console.log(t),this.hideLinkController();const n=t.linkObj.id;console.log(n),delete this.linkData[n],t.remove(),t=null},selectLink:function(e){this.currentLink=e;const t=e.linkObj;if(!t)return;const n=t.from,i=t.to,o=this.map.getBoundingClientRect(),s=k(n).getBoundingClientRect(),r=k(i).getBoundingClientRect(),a=(s.x+s.width/2-o.x)/this.scaleVal,l=(s.y+s.height/2-o.y)/this.scaleVal,u=(r.x+r.width/2-o.x)/this.scaleVal,c=(r.y+r.height/2-o.y)/this.scaleVal,h={cx:a,cy:l,w:s.width,h:s.height},d={cx:u,cy:c,w:r.width,h:r.height},p=a+t.delta1.x,g=l+t.delta1.y,f=u+t.delta2.x,m=c+t.delta2.y;this.showLinkController(p,g,f,m,t,h,d)},showLinkController:function(e,t,n,i,o,s,r){this.linkController.style.display="initial",this.P2.style.display="initial",this.P3.style.display="initial";const a=U(s,e,t);let l=a.x,u=a.y;const c=G(r,n,i);let h=c.x,d=c.y;this.P2.style.cssText=`top:${t}px;left:${e}px;`,this.P3.style.cssText=`top:${i}px;left:${n}px;`,this.line1.setAttribute("x1",l),this.line1.setAttribute("y1",u),this.line1.setAttribute("x2",e),this.line1.setAttribute("y2",t),this.line2.setAttribute("x1",n),this.line2.setAttribute("y1",i),this.line2.setAttribute("x2",h),this.line2.setAttribute("y2",d),this.helper1&&(this.helper1.destory(this.map),this.helper2.destory(this.map)),this.helper1=ve.create(this.P2),this.helper2=ve.create(this.P3),this.helper1.init(this.map,(p,g)=>{var m;e=e-p/this.scaleVal,t=t-g/this.scaleVal;const f=U(s,e,t);l=f.x,u=f.y,this.P2.style.top=t+"px",this.P2.style.left=e+"px",(m=this.currentLink)==null||m.children[0].setAttribute("d",`M ${l} ${u} C ${e} ${t} ${n} ${i} ${h} ${d}`),this.line1.setAttribute("x1",l),this.line1.setAttribute("y1",u),this.line1.setAttribute("x2",e),this.line1.setAttribute("y2",t),o.delta1.x=e-s.cx,o.delta1.y=t-s.cy}),this.helper2.init(this.map,(p,g)=>{var b,v;n=n-p/this.scaleVal,i=i-g/this.scaleVal;const f=G(r,n,i);h=f.x,d=f.y;const m=ie(n,i,h,d);this.P3.style.top=i+"px",this.P3.style.left=n+"px",(b=this.currentLink)==null||b.children[0].setAttribute("d",`M ${l} ${u} C ${e} ${t} ${n} ${i} ${h} ${d}`),(v=this.currentLink)==null||v.children[1].setAttribute("d",`M ${m.x1} ${m.y1} L ${h} ${d} L ${m.x2} ${m.y2}`),this.line2.setAttribute("x1",n),this.line2.setAttribute("y1",i),this.line2.setAttribute("x2",h),this.line2.setAttribute("y2",d),o.delta2.x=n-r.cx,o.delta2.y=i-r.cy})}},Symbol.toStringTag,{value:"Module"}));function bt(e,t){return async function(...n){const i=this.before[t];i&&!await i.apply(this,n)||e.apply(this,n)}}const Ne=Object.keys(be),ye={};for(let e=0;e<Ne.length;e++){const t=Ne[e];ye[t]=bt(be[t],t)}const vt={getObjById:te,generateNewObj:Ee,layout:je,linkDiv:Ue,createInputDiv:Re,createWrapper:_e,createParent:ze,createChildren:Ve,createTopic:Fe,findEle:k,changeTheme:dt,...ht,...ye,...gt,init(e){if(!e||!e.nodeData)return new Error("MindElixir: `data` is required");e.direction!==void 0&&(this.direction=e.direction),this.changeTheme(e.theme||this.theme,!1),this.nodeData=e.nodeData,$(this.nodeData),this.linkData=e.linkData||{},this.toolBar&&at(this),this.keypress&&tt(this),Ce()&&this.mobileMenu?nt(this):this.contextMenu&&Qe(this,this.contextMenuOption),this.draggable&&st(this),this.allowUndo&&rt(this),this.toCenter(),this.layout(),this.linkDiv()}},B=document;function w({el:e,direction:t,locale:n,draggable:i,editable:o,contextMenu:s,contextMenuOption:r,toolBar:a,keypress:l,before:u,newTopicName:c,allowUndo:h,mainLinkStyle:d,subLinkStyle:p,overflowHidden:g,mobileMenu:f,theme:m}){console.log("ME_version "+w.version,this);let b=null;const v=Object.prototype.toString.call(e);if(v==="[object HTMLDivElement]"?b=e:v==="[object String]"&&(b=document.querySelector(e)),!b)throw new Error("MindElixir: el is not a valid element");b.className+=" mind-elixir",b.innerHTML="",b.style.setProperty("--gap",M+"px"),this.mindElixirBox=b,this.before=u||{},this.locale=n||"en",this.contextMenuOption=r,this.contextMenu=s===void 0?!0:s,this.toolBar=a===void 0?!0:a,this.keypress=l===void 0?!0:l,this.mobileMenu=f||!1,this.direction=typeof t=="number"?t:1,this.draggable=i===void 0?!0:i,this.newTopicName=c||"new node",this.editable=o===void 0?!0:o,this.allowUndo=h===void 0?!1:h,this.currentNode=null,this.currentLink=null,this.inputDiv=null,this.scaleVal=1,this.tempDirection=null,this.mainLinkStyle=d||0,this.subLinkStyle=p||0,this.overflowHidden=g||!1,this.bus=Ae.create(),this.container=B.createElement("div"),this.container.className="map-container";const N=window.matchMedia("(prefers-color-scheme: dark)");this.theme=m||(N.matches?ee:Z);const y=B.createElement("div");y.className="map-canvas",this.map=y,this.map.setAttribute("tabindex","0"),this.container.appendChild(this.map),this.mindElixirBox.appendChild(this.container),this.nodes=B.createElement("me-nodes"),this.nodes.className="main-node-container",this.lines=I("lines"),this.linkController=I("linkcontroller"),this.P2=B.createElement("div"),this.P3=B.createElement("div"),this.P2.className=this.P3.className="circle",this.P2.style.display=this.P3.style.display="none",this.line1=re(0,0,0,0),this.line2=re(0,0,0,0),this.linkController.appendChild(this.line1),this.linkController.appendChild(this.line2),this.linkSvgGroup=I("topiclinks"),this.map.appendChild(this.nodes),this.map.appendChild(this.linkController),this.map.appendChild(this.linkSvgGroup),this.map.appendChild(this.P2),this.map.appendChild(this.P3),this.overflowHidden?this.container.style.overflow="hidden":Oe(this)}return w.prototype=vt,w.LEFT=x,w.RIGHT=P,w.SIDE=H,w.THEME=Z,w.DARK_THEME=ee,w.version="3.0.1",w.E=k,w.new=e=>({nodeData:{id:V(),topic:e||"new topic",root:!0,children:[]},linkData:{}}),w}();
11
+ `,i[s].children&&n(i[s].children||[],o+1)}return n(e.children||[],2),t},getDataString:function(){const e=pe(this);return JSON.stringify(e,(t,n)=>{if(t!=="parent")return t==="from"||t==="to"?n.nodeObj.id:n})},initLeft:function(){this.direction=0,this.refresh()},initRight:function(){this.direction=1,this.refresh()},initSide:function(){this.direction=2,this.refresh()},install:function(e){e(this)},refresh:function(e){e&&(e=JSON.parse(JSON.stringify(e)),this.nodeData=e.nodeData,this.linkData=e.linkData||{}),$(this.nodeData),this.layout(),this.linkDiv()},scale:function(e){this.scaleVal=e,this.map.style.transform="scale("+e+")"},selectFirstChild:function(){if(!this.currentNode)return;const e=this.currentNode.parentElement.nextSibling;if(e&&e.firstChild){const t=e.firstChild.firstChild.firstChild;this.selectNode(t)}},selectNextSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const e=this.currentNode.parentElement.parentElement.nextSibling;let t;if(e)t=e.firstChild.firstChild;else return!1;return this.selectNode(t),!0},selectNode:function(e,t,n){if(e){if(console.time("selectNode"),typeof e=="string"){const i=k(e);return i?this.selectNode(i):void 0}this.currentNode&&(this.currentNode.className=""),e.className="selected",e.scrollIntoView({block:"nearest",inline:"nearest"}),this.currentNode=e,t?this.bus.fire("selectNewNode",e.nodeObj):this.bus.fire("selectNode",e.nodeObj,n),console.timeEnd("selectNode")}},selectParent:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return;const e=this.currentNode.parentElement.parentElement.parentElement.previousSibling;if(e){const t=e.firstChild;this.selectNode(t)}},selectPrevSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const e=this.currentNode.parentElement.parentElement.previousSibling;let t;if(e)t=e.firstChild.firstChild;else return!1;return this.selectNode(t),!0},setLocale:function(e){this.locale=e,this.refresh()},toCenter:function(){this.container.scrollTo(1e4-this.container.offsetWidth/2,1e4-this.container.offsetHeight/2)},unselectNode:function(){this.currentNode&&(this.currentNode.className=""),this.currentNode=null,this.bus.fire("unselectNode")}},Symbol.toStringTag,{value:"Module"})),Y=function(e){const n=e.parentElement.parentElement.lastElementChild;(n==null?void 0:n.tagName)==="svg"&&(n==null||n.remove())},me=function(e,t){var n,i;if(e===x)return x;if(e===P)return P;if(e===H){const o=((n=document.querySelector(".lhs"))==null?void 0:n.childElementCount)||0,s=((i=document.querySelector(".rhs"))==null?void 0:i.childElementCount)||0;return o<=s?(t.direction=x,x):(t.direction=P,P)}},ut=function(e,t){console.log(t);const n=e.nodeObj,i=oe(n);i.style&&t.style&&(t.style=Object.assign(i.style,t.style));const o=Object.assign(n,t);K(e,o),this.linkDiv(),this.bus.fire("operation",{name:"reshapeNode",obj:o,origin:i})},ft=function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(i.root===!0){this.addChild();return}const o=t||this.generateNewObj();Le(i,o),$(this.nodeData);const s=n.parentElement;console.time("insertSibling_DOM");const{grp:r,top:a}=this.createWrapper(o);s.parentNode.parentNode.insertBefore(r,s.parentNode.nextSibling),this.linkDiv(r.offsetParent),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertSibling_DOM"),this.bus.fire("operation",{name:"insertSibling",obj:o})},pt=function(e,t){const n=e||this.currentNode;if(!n)return;const i=n.nodeObj;if(i.root===!0){this.addChild();return}const o=t||this.generateNewObj();$e(i,o),$(this.nodeData);const s=n.parentElement;console.time("insertSibling_DOM");const{grp:r,top:a}=this.createWrapper(o);s.parentNode.parentNode.insertBefore(r,s.parentNode),this.linkDiv(r.offsetParent),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertSibling_DOM"),this.bus.fire("operation",{name:"insertBefore",obj:o})},mt=function(e,t){const n=e||this.currentNode;if(!n)return;Y(n);const i=n.nodeObj;if(i.root===!0)return;const o=t||this.generateNewObj();Se(i,o),$(this.nodeData);const s=n.parentElement.parentElement;console.time("insertParent_DOM");const{grp:r,top:a}=this.createWrapper(o,!0);a.appendChild(R(!0)),s.insertAdjacentElement("afterend",r);const l=this.createChildren([s]);a.insertAdjacentElement("afterend",l),this.linkDiv(),t||this.createInputDiv(a.firstChild),this.selectNode(a.firstChild,!0),console.timeEnd("insertParent_DOM"),this.bus.fire("operation",{name:"insertParent",obj:o})},ge=function(e,t){var a,l;if(!e)return null;const n=e.nodeObj;n.expanded===!1&&(this.expandNode(e,!0),e=k(n.id));const i=t||this.generateNewObj();n.children?n.children.push(i):n.children=[i],$(this.nodeData);const o=e.parentElement,{grp:s,top:r}=this.createWrapper(i);if(o.tagName==="ME-PARENT"){if(o.children[1])o.nextSibling.appendChild(s);else{const u=this.createChildren([s]);o.appendChild(R(!0)),o.insertAdjacentElement("afterend",u)}this.linkDiv(s.offsetParent)}else o.tagName==="ME-ROOT"&&(me(this.direction,i)===x?(a=document.querySelector(".lhs"))==null||a.appendChild(s):(l=document.querySelector(".rhs"))==null||l.appendChild(s),this.linkDiv());return{newTop:r,newNodeObj:i}},be=Object.freeze(Object.defineProperty({__proto__:null,addChild:function(e,t){console.time("addChild");const n=e||this.currentNode;if(!n)return;const i=ge.call(this,n,t);if(!i)return;const{newTop:o,newNodeObj:s}=i;this.bus.fire("operation",{name:"addChild",obj:s}),console.timeEnd("addChild"),t||this.createInputDiv(o.firstChild),this.selectNode(o.firstChild,!0)},beginEdit:function(e){const t=e||this.currentNode;t&&this.createInputDiv(t)},copyNode:function(e,t){console.time("copyNode");const n=oe(e.nodeObj);ne(n);const i=ge.call(this,t,n);if(!i)return;const{newNodeObj:o}=i;console.timeEnd("copyNode"),this.bus.fire("operation",{name:"copyNode",obj:o})},insertBefore:pt,insertParent:mt,insertSibling:ft,moveDownNode:function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;Me(i),n.nextSibling?n.nextSibling.insertAdjacentElement("afterend",n):n.parentNode.prepend(n),this.linkDiv(),this.bus.fire("operation",{name:"moveDownNode",obj:i})},moveNode:function(e,t){var a;const n=e.nodeObj,i=t.nodeObj,o=(a=n==null?void 0:n.parent)==null?void 0:a.id;if(i.expanded===!1&&(this.expandNode(t,!0),e=k(n.id),t=k(i.id)),!xe(n,i)){console.warn("Invalid move");return}console.time("moveNode"),Te(n,i),$(this.nodeData);const s=e.parentElement,r=t.parentElement;if(r.tagName==="ME-PARENT")if(Y(e),r.children[1])r.nextSibling.appendChild(s.parentElement);else{const l=this.createChildren([s.parentElement]);r.appendChild(R(!0)),r.parentElement.insertBefore(l,r.nextSibling)}else r.tagName==="ME-ROOT"&&(me(this.direction,n),r.nextSibling.appendChild(s.parentElement));this.linkDiv(),this.bus.fire("operation",{name:"moveNode",obj:n,toObj:i,originParentId:o}),console.timeEnd("moveNode")},moveNodeAfter:function(e,t){var u;const n=e.nodeObj,i=t.nodeObj,o=(u=n.parent)==null?void 0:u.id;De(n,i),$(this.nodeData),Y(e);const r=e.parentElement.parentElement;t.parentElement.parentElement.insertAdjacentElement("afterend",r),this.linkDiv(),this.bus.fire("operation",{name:"moveNodeAfter",obj:n,toObj:i,originParentId:o})},moveNodeBefore:function(e,t){var u;const n=e.nodeObj,i=t.nodeObj,o=(u=n.parent)==null?void 0:u.id;Pe(n,i),$(this.nodeData),Y(e);const r=e.parentElement.parentNode;t.parentElement.parentNode.insertAdjacentElement("beforebegin",r),this.linkDiv(),this.bus.fire("operation",{name:"moveNodeBefore",obj:n,toObj:i,originParentId:o})},moveUpNode:function(e){const t=e||this.currentNode;if(!t)return;const n=t.parentNode.parentNode,i=t.nodeObj;we(i),n.parentNode.insertBefore(n,n.previousSibling),this.linkDiv(),this.bus.fire("operation",{name:"moveUpNode",obj:i})},removeNode:function(e){var u;const t=e||this.currentNode;if(!t)return;console.log("removeNode",t);const n=t.nodeObj;if(n.root===!0)throw new Error("Can not remove root node");const i=n.parent.children,o=i.findIndex(c=>c===n),s=i[o+1],r=s&&s.id,a=F(n),l=t.parentNode;if(a===0){const c=l.parentNode.parentNode;c.tagName!=="ME-MAIN"&&c.previousSibling.children[1].remove(),this.selectParent()}else this.selectPrevSibling()||this.selectNextSibling();for(const c in this.linkData){const h=this.linkData[c];if(h.from===n.id||h.to===n.id){const d=this.mindElixirBox.querySelector(`[data-linkid=${this.linkData[c].id}]`);this.removeLink(d)}}l.parentNode.remove(),this.linkDiv(),this.bus.fire("operation",{name:"removeNode",obj:n,originSiblingId:r,originParentId:(u=n==null?void 0:n.parent)==null?void 0:u.id})},reshapeNode:ut,setNodeTopic:function(e,t){e.childNodes[0].textContent=t,e.nodeObj.topic=t,this.linkDiv()}},Symbol.toStringTag,{value:"Module"})),ve={create:function(e){return{dom:e,mousedown:!1,lastX:0,lastY:0,handleMouseMove(t){if(t.stopPropagation(),this.mousedown){if(!this.lastX){this.lastX=t.pageX,this.lastY=t.pageY;return}const n=this.lastX-t.pageX,i=this.lastY-t.pageY;this.cb&&this.cb(n,i),this.lastX=t.pageX,this.lastY=t.pageY}},handleMouseDown(t){t.stopPropagation(),this.mousedown=!0},handleClear(t){t.stopPropagation(),this.clear()},cb:null,init(t,n){this.cb=n,this.handleClear=this.handleClear.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseDown=this.handleMouseDown.bind(this),t.addEventListener("mousemove",this.handleMouseMove),t.addEventListener("mouseleave",this.handleClear),t.addEventListener("mouseup",this.handleClear),this.dom.addEventListener("mousedown",this.handleMouseDown)},destory(t){t.removeEventListener("mousemove",this.handleMouseMove),t.removeEventListener("mouseleave",this.handleClear),t.removeEventListener("mouseup",this.handleClear),this.dom.removeEventListener("mousedown",this.handleMouseDown)},clear(){this.mousedown=!1,this.lastX=0,this.lastY=0}}}},gt=Object.freeze(Object.defineProperty({__proto__:null,createLink:function(e,t,n,i){const o=this.map.getBoundingClientRect();if(!e||!t)return;const s=e.getBoundingClientRect(),r=t.getBoundingClientRect(),a=(s.x+s.width/2-o.x)/this.scaleVal,l=(s.y+s.height/2-o.y)/this.scaleVal,u=(r.x+r.width/2-o.x)/this.scaleVal,c=(r.y+r.height/2-o.y)/this.scaleVal;let h,d,p,g;n&&i?(h=a+i.delta1.x,d=l+i.delta1.y,p=u+i.delta2.x,g=c+i.delta2.y):(l+c)/2-l<=s.height/2?(h=(s.x+s.width-o.x)/this.scaleVal+100,d=l,p=(r.x+r.width-o.x)/this.scaleVal+100,g=c):(h=(a+u)/2,d=(l+c)/2,p=(a+u)/2,g=(l+c)/2);const f={cx:a,cy:l,w:s.width,h:s.height},m={cx:u,cy:c,w:r.width,h:r.height},b=U(f,h,d),v=b.x,N=b.y,y=G(m,p,g),C=y.x,_=y.y,X=ie(p,g,C,_),T={id:"",label:"",from:e.nodeObj.id,to:t.nodeObj.id,delta1:{x:h-a,y:d-l},delta2:{x:p-u,y:g-c}},W=Xe(`M ${v} ${N} C ${h} ${d} ${p} ${g} ${C} ${_}`,`M ${X.x1} ${X.y1} L ${C} ${_} L ${X.x2} ${X.y2}`);n&&i?(T.id=i.id,this.linkData[i.id]=T):(T.id=V(),this.linkData[T.id]=T,this.currentLink=W),W.linkObj=T,W.dataset.linkid=T.id,this.linkSvgGroup.appendChild(W),n||this.showLinkController(h,d,p,g,T,f,m)},hideLinkController:function(){this.linkController.style.display="none",this.P2.style.display="none",this.P3.style.display="none"},removeLink:function(e){let t;if(e?t=e:t=this.currentLink,!t)return;console.log(t),this.hideLinkController();const n=t.linkObj.id;console.log(n),delete this.linkData[n],t.remove(),t=null},selectLink:function(e){this.currentLink=e;const t=e.linkObj;if(!t)return;const n=t.from,i=t.to,o=this.map.getBoundingClientRect(),s=k(n).getBoundingClientRect(),r=k(i).getBoundingClientRect(),a=(s.x+s.width/2-o.x)/this.scaleVal,l=(s.y+s.height/2-o.y)/this.scaleVal,u=(r.x+r.width/2-o.x)/this.scaleVal,c=(r.y+r.height/2-o.y)/this.scaleVal,h={cx:a,cy:l,w:s.width,h:s.height},d={cx:u,cy:c,w:r.width,h:r.height},p=a+t.delta1.x,g=l+t.delta1.y,f=u+t.delta2.x,m=c+t.delta2.y;this.showLinkController(p,g,f,m,t,h,d)},showLinkController:function(e,t,n,i,o,s,r){this.linkController.style.display="initial",this.P2.style.display="initial",this.P3.style.display="initial";const a=U(s,e,t);let l=a.x,u=a.y;const c=G(r,n,i);let h=c.x,d=c.y;this.P2.style.cssText=`top:${t}px;left:${e}px;`,this.P3.style.cssText=`top:${i}px;left:${n}px;`,this.line1.setAttribute("x1",l),this.line1.setAttribute("y1",u),this.line1.setAttribute("x2",e),this.line1.setAttribute("y2",t),this.line2.setAttribute("x1",n),this.line2.setAttribute("y1",i),this.line2.setAttribute("x2",h),this.line2.setAttribute("y2",d),this.helper1&&(this.helper1.destory(this.map),this.helper2.destory(this.map)),this.helper1=ve.create(this.P2),this.helper2=ve.create(this.P3),this.helper1.init(this.map,(p,g)=>{var m;e=e-p/this.scaleVal,t=t-g/this.scaleVal;const f=U(s,e,t);l=f.x,u=f.y,this.P2.style.top=t+"px",this.P2.style.left=e+"px",(m=this.currentLink)==null||m.children[0].setAttribute("d",`M ${l} ${u} C ${e} ${t} ${n} ${i} ${h} ${d}`),this.line1.setAttribute("x1",l),this.line1.setAttribute("y1",u),this.line1.setAttribute("x2",e),this.line1.setAttribute("y2",t),o.delta1.x=e-s.cx,o.delta1.y=t-s.cy}),this.helper2.init(this.map,(p,g)=>{var b,v;n=n-p/this.scaleVal,i=i-g/this.scaleVal;const f=G(r,n,i);h=f.x,d=f.y;const m=ie(n,i,h,d);this.P3.style.top=i+"px",this.P3.style.left=n+"px",(b=this.currentLink)==null||b.children[0].setAttribute("d",`M ${l} ${u} C ${e} ${t} ${n} ${i} ${h} ${d}`),(v=this.currentLink)==null||v.children[1].setAttribute("d",`M ${m.x1} ${m.y1} L ${h} ${d} L ${m.x2} ${m.y2}`),this.line2.setAttribute("x1",n),this.line2.setAttribute("y1",i),this.line2.setAttribute("x2",h),this.line2.setAttribute("y2",d),o.delta2.x=n-r.cx,o.delta2.y=i-r.cy})}},Symbol.toStringTag,{value:"Module"}));function bt(e,t){return async function(...n){const i=this.before[t];i&&!await i.apply(this,n)||e.apply(this,n)}}const Ne=Object.keys(be),ye={};for(let e=0;e<Ne.length;e++){const t=Ne[e];ye[t]=bt(be[t],t)}const vt={getObjById:te,generateNewObj:Ee,layout:je,linkDiv:Ue,createInputDiv:Re,createWrapper:_e,createParent:ze,createChildren:Ve,createTopic:Fe,findEle:k,changeTheme:dt,...ht,...ye,...gt,init(e){if(!e||!e.nodeData)return new Error("MindElixir: `data` is required");e.direction!==void 0&&(this.direction=e.direction),this.changeTheme(e.theme||this.theme,!1),this.nodeData=e.nodeData,$(this.nodeData),this.linkData=e.linkData||{},this.toolBar&&at(this),this.keypress&&tt(this),Ce()&&this.mobileMenu?nt(this):this.contextMenu&&Qe(this,this.contextMenuOption),this.draggable&&st(this),this.allowUndo&&rt(this),this.toCenter(),this.layout(),this.linkDiv()}},B=document;function w({el:e,direction:t,locale:n,draggable:i,editable:o,contextMenu:s,contextMenuOption:r,toolBar:a,keypress:l,before:u,newTopicName:c,allowUndo:h,mainLinkStyle:d,subLinkStyle:p,overflowHidden:g,mobileMenu:f,theme:m}){console.log("ME_version "+w.version,this);let b=null;const v=Object.prototype.toString.call(e);if(v==="[object HTMLDivElement]"?b=e:v==="[object String]"&&(b=document.querySelector(e)),!b)throw new Error("MindElixir: el is not a valid element");b.className+=" mind-elixir",b.innerHTML="",b.style.setProperty("--gap",M+"px"),this.mindElixirBox=b,this.before=u||{},this.locale=n||"en",this.contextMenuOption=r,this.contextMenu=s===void 0?!0:s,this.toolBar=a===void 0?!0:a,this.keypress=l===void 0?!0:l,this.mobileMenu=f||!1,this.direction=typeof t=="number"?t:1,this.draggable=i===void 0?!0:i,this.newTopicName=c||"new node",this.editable=o===void 0?!0:o,this.allowUndo=h===void 0?!1:h,this.currentNode=null,this.currentLink=null,this.inputDiv=null,this.scaleVal=1,this.tempDirection=null,this.mainLinkStyle=d||0,this.subLinkStyle=p||0,this.overflowHidden=g||!1,this.bus=Ae.create(),this.container=B.createElement("div"),this.container.className="map-container";const N=window.matchMedia("(prefers-color-scheme: dark)");this.theme=m||(N.matches?ee:Z);const y=B.createElement("div");y.className="map-canvas",this.map=y,this.map.setAttribute("tabindex","0"),this.container.appendChild(this.map),this.mindElixirBox.appendChild(this.container),this.nodes=B.createElement("me-nodes"),this.nodes.className="main-node-container",this.lines=I("lines"),this.linkController=I("linkcontroller"),this.P2=B.createElement("div"),this.P3=B.createElement("div"),this.P2.className=this.P3.className="circle",this.P2.style.display=this.P3.style.display="none",this.line1=re(0,0,0,0),this.line2=re(0,0,0,0),this.linkController.appendChild(this.line1),this.linkController.appendChild(this.line2),this.linkSvgGroup=I("topiclinks"),this.map.appendChild(this.nodes),this.map.appendChild(this.linkController),this.map.appendChild(this.linkSvgGroup),this.map.appendChild(this.P2),this.map.appendChild(this.P3),this.overflowHidden?this.container.style.overflow="hidden":Oe(this)}return w.prototype=vt,w.LEFT=x,w.RIGHT=P,w.SIDE=H,w.THEME=Z,w.DARK_THEME=ee,w.version="3.0.2",w.E=k,w.new=e=>({nodeData:{id:V(),topic:e||"new topic",root:!0,children:[]},linkData:{}}),w}();
@@ -950,7 +950,7 @@ const ht = function(e, t, n) {
950
950
  const n = e.nodeObj;
951
951
  typeof t == "boolean" ? n.expanded = t : n.expanded !== !1 ? n.expanded = !1 : n.expanded = !0, this.layout(), this.linkDiv(), this.bus.fire("expandNode", n);
952
952
  }, Ot = function(e) {
953
- e = JSON.parse(JSON.stringify(e)), e && (this.nodeData = e.nodeData, this.linkData = e.linkData || {}), L(this.nodeData), this.layout(), this.linkDiv();
953
+ e && (e = JSON.parse(JSON.stringify(e)), this.nodeData = e.nodeData, this.linkData = e.linkData || {}), L(this.nodeData), this.layout(), this.linkDiv();
954
954
  }, At = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
955
955
  __proto__: null,
956
956
  cancelFocus: Mt,
@@ -1402,7 +1402,7 @@ $.RIGHT = P;
1402
1402
  $.SIDE = _;
1403
1403
  $.THEME = le;
1404
1404
  $.DARK_THEME = ce;
1405
- $.version = "3.0.1";
1405
+ $.version = "3.0.2";
1406
1406
  $.E = E;
1407
1407
  $.new = (e) => ({
1408
1408
  nodeData: {
@@ -6,4 +6,4 @@ var MindElixirLite=function(){"use strict";const Tt="";(function(t){var e,i,n,s,
6
6
  `;function i(n,s){for(let o=0;o<n.length;o++)s<=6?e+="".padStart(s,"#")+" "+n[o].topic+`
7
7
 
8
8
  `:e+="".padStart(s-7," ")+"- "+n[o].topic+`
9
- `,n[o].children&&i(n[o].children||[],s+1)}return i(t.children||[],2),e},getDataString:function(){const t=it(this);return JSON.stringify(t,(e,i)=>{if(e!=="parent")return e==="from"||e==="to"?i.nodeObj.id:i})},initLeft:function(){this.direction=0,this.refresh()},initRight:function(){this.direction=1,this.refresh()},initSide:function(){this.direction=2,this.refresh()},install:function(t){t(this)},refresh:function(t){t=JSON.parse(JSON.stringify(t)),t&&(this.nodeData=t.nodeData,this.linkData=t.linkData||{}),Y(this.nodeData),this.layout(),this.linkDiv()},scale:function(t){this.scaleVal=t,this.map.style.transform="scale("+t+")"},selectFirstChild:function(){if(!this.currentNode)return;const t=this.currentNode.parentElement.nextSibling;if(t&&t.firstChild){const e=t.firstChild.firstChild.firstChild;this.selectNode(e)}},selectNextSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const t=this.currentNode.parentElement.parentElement.nextSibling;let e;if(t)e=t.firstChild.firstChild;else return!1;return this.selectNode(e),!0},selectNode:function(t,e,i){if(t){if(console.time("selectNode"),typeof t=="string"){const n=k(t);return n?this.selectNode(n):void 0}this.currentNode&&(this.currentNode.className=""),t.className="selected",t.scrollIntoView({block:"nearest",inline:"nearest"}),this.currentNode=t,e?this.bus.fire("selectNewNode",t.nodeObj):this.bus.fire("selectNode",t.nodeObj,i),console.timeEnd("selectNode")}},selectParent:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return;const t=this.currentNode.parentElement.parentElement.parentElement.previousSibling;if(t){const e=t.firstChild;this.selectNode(e)}},selectPrevSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const t=this.currentNode.parentElement.parentElement.previousSibling;let e;if(t)e=t.firstChild.firstChild;else return!1;return this.selectNode(e),!0},setLocale:function(t){this.locale=t,this.refresh()},toCenter:function(){this.container.scrollTo(1e4-this.container.offsetWidth/2,1e4-this.container.offsetHeight/2)},unselectNode:function(){this.currentNode&&(this.currentNode.className=""),this.currentNode=null,this.bus.fire("unselectNode")}},Symbol.toStringTag,{value:"Module"})),nt={create:function(t){return{dom:t,mousedown:!1,lastX:0,lastY:0,handleMouseMove(e){if(e.stopPropagation(),this.mousedown){if(!this.lastX){this.lastX=e.pageX,this.lastY=e.pageY;return}const i=this.lastX-e.pageX,n=this.lastY-e.pageY;this.cb&&this.cb(i,n),this.lastX=e.pageX,this.lastY=e.pageY}},handleMouseDown(e){e.stopPropagation(),this.mousedown=!0},handleClear(e){e.stopPropagation(),this.clear()},cb:null,init(e,i){this.cb=i,this.handleClear=this.handleClear.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseDown=this.handleMouseDown.bind(this),e.addEventListener("mousemove",this.handleMouseMove),e.addEventListener("mouseleave",this.handleClear),e.addEventListener("mouseup",this.handleClear),this.dom.addEventListener("mousedown",this.handleMouseDown)},destory(e){e.removeEventListener("mousemove",this.handleMouseMove),e.removeEventListener("mouseleave",this.handleClear),e.removeEventListener("mouseup",this.handleClear),this.dom.removeEventListener("mousedown",this.handleMouseDown)},clear(){this.mousedown=!1,this.lastX=0,this.lastY=0}}}},At={getObjById:j,generateNewObj:st,layout:ct,linkDiv:xt,createInputDiv:mt,createWrapper:ht,createParent:dt,createChildren:ut,createTopic:ft,findEle:k,changeTheme:Nt,...St,...{},...Object.freeze(Object.defineProperty({__proto__:null,createLink:function(t,e,i,n){const s=this.map.getBoundingClientRect();if(!t||!e)return;const o=t.getBoundingClientRect(),l=e.getBoundingClientRect(),u=(o.x+o.width/2-s.x)/this.scaleVal,h=(o.y+o.height/2-s.y)/this.scaleVal,p=(l.x+l.width/2-s.x)/this.scaleVal,c=(l.y+l.height/2-s.y)/this.scaleVal;let a,r,d,f;i&&n?(a=u+n.delta1.x,r=h+n.delta1.y,d=p+n.delta2.x,f=c+n.delta2.y):(h+c)/2-h<=o.height/2?(a=(o.x+o.width-s.x)/this.scaleVal+100,r=h,d=(l.x+l.width-s.x)/this.scaleVal+100,f=c):(a=(u+p)/2,r=(h+c)/2,d=(u+p)/2,f=(h+c)/2);const m={cx:u,cy:h,w:o.width,h:o.height},g={cx:p,cy:c,w:l.width,h:l.height},b=F(m,a,r),v=b.x,M=b.y,S=R(g,d,f),P=S.x,B=S.y,_=G(d,f,P,B),w={id:"",label:"",from:t.nodeObj.id,to:e.nodeObj.id,delta1:{x:a-u,y:r-h},delta2:{x:d-p,y:f-c}},q=vt(`M ${v} ${M} C ${a} ${r} ${d} ${f} ${P} ${B}`,`M ${_.x1} ${_.y1} L ${P} ${B} L ${_.x2} ${_.y2}`);i&&n?(w.id=n.id,this.linkData[n.id]=w):(w.id=J(),this.linkData[w.id]=w,this.currentLink=q),q.linkObj=w,q.dataset.linkid=w.id,this.linkSvgGroup.appendChild(q),i||this.showLinkController(a,r,d,f,w,m,g)},hideLinkController:function(){this.linkController.style.display="none",this.P2.style.display="none",this.P3.style.display="none"},removeLink:function(t){let e;if(t?e=t:e=this.currentLink,!e)return;console.log(e),this.hideLinkController();const i=e.linkObj.id;console.log(i),delete this.linkData[i],e.remove(),e=null},selectLink:function(t){this.currentLink=t;const e=t.linkObj;if(!e)return;const i=e.from,n=e.to,s=this.map.getBoundingClientRect(),o=k(i).getBoundingClientRect(),l=k(n).getBoundingClientRect(),u=(o.x+o.width/2-s.x)/this.scaleVal,h=(o.y+o.height/2-s.y)/this.scaleVal,p=(l.x+l.width/2-s.x)/this.scaleVal,c=(l.y+l.height/2-s.y)/this.scaleVal,a={cx:u,cy:h,w:o.width,h:o.height},r={cx:p,cy:c,w:l.width,h:l.height},d=u+e.delta1.x,f=h+e.delta1.y,m=p+e.delta2.x,g=c+e.delta2.y;this.showLinkController(d,f,m,g,e,a,r)},showLinkController:function(t,e,i,n,s,o,l){this.linkController.style.display="initial",this.P2.style.display="initial",this.P3.style.display="initial";const u=F(o,t,e);let h=u.x,p=u.y;const c=R(l,i,n);let a=c.x,r=c.y;this.P2.style.cssText=`top:${e}px;left:${t}px;`,this.P3.style.cssText=`top:${n}px;left:${i}px;`,this.line1.setAttribute("x1",h),this.line1.setAttribute("y1",p),this.line1.setAttribute("x2",t),this.line1.setAttribute("y2",e),this.line2.setAttribute("x1",i),this.line2.setAttribute("y1",n),this.line2.setAttribute("x2",a),this.line2.setAttribute("y2",r),this.helper1&&(this.helper1.destory(this.map),this.helper2.destory(this.map)),this.helper1=nt.create(this.P2),this.helper2=nt.create(this.P3),this.helper1.init(this.map,(d,f)=>{var g;t=t-d/this.scaleVal,e=e-f/this.scaleVal;const m=F(o,t,e);h=m.x,p=m.y,this.P2.style.top=e+"px",this.P2.style.left=t+"px",(g=this.currentLink)==null||g.children[0].setAttribute("d",`M ${h} ${p} C ${t} ${e} ${i} ${n} ${a} ${r}`),this.line1.setAttribute("x1",h),this.line1.setAttribute("y1",p),this.line1.setAttribute("x2",t),this.line1.setAttribute("y2",e),s.delta1.x=t-o.cx,s.delta1.y=e-o.cy}),this.helper2.init(this.map,(d,f)=>{var b,v;i=i-d/this.scaleVal,n=n-f/this.scaleVal;const m=R(l,i,n);a=m.x,r=m.y;const g=G(i,n,a,r);this.P3.style.top=n+"px",this.P3.style.left=i+"px",(b=this.currentLink)==null||b.children[0].setAttribute("d",`M ${h} ${p} C ${t} ${e} ${i} ${n} ${a} ${r}`),(v=this.currentLink)==null||v.children[1].setAttribute("d",`M ${g.x1} ${g.y1} L ${a} ${r} L ${g.x2} ${g.y2}`),this.line2.setAttribute("x1",i),this.line2.setAttribute("y1",n),this.line2.setAttribute("x2",a),this.line2.setAttribute("y2",r),s.delta2.x=i-l.cx,s.delta2.y=n-l.cy})}},Symbol.toStringTag,{value:"Module"})),init(t){if(!t||!t.nodeData)return new Error("MindElixir: `data` is required");t.direction!==void 0&&(this.direction=t.direction),this.changeTheme(t.theme||this.theme,!1),this.nodeData=t.nodeData,Y(this.nodeData),this.linkData=t.linkData||{},this.toolBar&&Et(this),this.toCenter(),this.layout(),this.linkDiv()}},H=document;function L({el:t,direction:e,locale:i,draggable:n,editable:s,contextMenu:o,contextMenuOption:l,toolBar:u,keypress:h,before:p,newTopicName:c,allowUndo:a,mainLinkStyle:r,subLinkStyle:d,overflowHidden:f,mobileMenu:m,theme:g}){console.log("ME_version "+L.version,this);let b=null;const v=Object.prototype.toString.call(t);if(v==="[object HTMLDivElement]"?b=t:v==="[object String]"&&(b=document.querySelector(t)),!b)throw new Error("MindElixir: el is not a valid element");b.className+=" mind-elixir",b.innerHTML="",b.style.setProperty("--gap",C+"px"),this.mindElixirBox=b,this.before=p||{},this.locale=i||"en",this.contextMenuOption=l,this.contextMenu=o===void 0?!0:o,this.toolBar=u===void 0?!0:u,this.keypress=h===void 0?!0:h,this.mobileMenu=m||!1,this.direction=typeof e=="number"?e:1,this.draggable=n===void 0?!0:n,this.newTopicName=c||"new node",this.editable=s===void 0?!0:s,this.allowUndo=a===void 0?!1:a,this.currentNode=null,this.currentLink=null,this.inputDiv=null,this.scaleVal=1,this.tempDirection=null,this.mainLinkStyle=r||0,this.subLinkStyle=d||0,this.overflowHidden=f||!1,this.bus=lt.create(),this.container=H.createElement("div"),this.container.className="map-container";const M=window.matchMedia("(prefers-color-scheme: dark)");this.theme=g||(M.matches?O:W);const S=H.createElement("div");S.className="map-canvas",this.map=S,this.map.setAttribute("tabindex","0"),this.container.appendChild(this.map),this.mindElixirBox.appendChild(this.container),this.nodes=H.createElement("me-nodes"),this.nodes.className="main-node-container",this.lines=D("lines"),this.linkController=D("linkcontroller"),this.P2=H.createElement("div"),this.P3=H.createElement("div"),this.P2.className=this.P3.className="circle",this.P2.style.display=this.P3.style.display="none",this.line1=Q(0,0,0,0),this.line2=Q(0,0,0,0),this.linkController.appendChild(this.line1),this.linkController.appendChild(this.line2),this.linkSvgGroup=D("topiclinks"),this.map.appendChild(this.nodes),this.map.appendChild(this.linkController),this.map.appendChild(this.linkSvgGroup),this.map.appendChild(this.P2),this.map.appendChild(this.P3),this.overflowHidden?this.container.style.overflow="hidden":ot(this)}return L.prototype=At,L.LEFT=A,L.RIGHT=X,L.SIDE=z,L.THEME=W,L.DARK_THEME=O,L.version="3.0.1",L.E=k,L}();
9
+ `,n[o].children&&i(n[o].children||[],s+1)}return i(t.children||[],2),e},getDataString:function(){const t=it(this);return JSON.stringify(t,(e,i)=>{if(e!=="parent")return e==="from"||e==="to"?i.nodeObj.id:i})},initLeft:function(){this.direction=0,this.refresh()},initRight:function(){this.direction=1,this.refresh()},initSide:function(){this.direction=2,this.refresh()},install:function(t){t(this)},refresh:function(t){t&&(t=JSON.parse(JSON.stringify(t)),this.nodeData=t.nodeData,this.linkData=t.linkData||{}),Y(this.nodeData),this.layout(),this.linkDiv()},scale:function(t){this.scaleVal=t,this.map.style.transform="scale("+t+")"},selectFirstChild:function(){if(!this.currentNode)return;const t=this.currentNode.parentElement.nextSibling;if(t&&t.firstChild){const e=t.firstChild.firstChild.firstChild;this.selectNode(e)}},selectNextSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const t=this.currentNode.parentElement.parentElement.nextSibling;let e;if(t)e=t.firstChild.firstChild;else return!1;return this.selectNode(e),!0},selectNode:function(t,e,i){if(t){if(console.time("selectNode"),typeof t=="string"){const n=k(t);return n?this.selectNode(n):void 0}this.currentNode&&(this.currentNode.className=""),t.className="selected",t.scrollIntoView({block:"nearest",inline:"nearest"}),this.currentNode=t,e?this.bus.fire("selectNewNode",t.nodeObj):this.bus.fire("selectNode",t.nodeObj,i),console.timeEnd("selectNode")}},selectParent:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return;const t=this.currentNode.parentElement.parentElement.parentElement.previousSibling;if(t){const e=t.firstChild;this.selectNode(e)}},selectPrevSibling:function(){if(!this.currentNode||this.currentNode.dataset.nodeid==="meroot")return!1;const t=this.currentNode.parentElement.parentElement.previousSibling;let e;if(t)e=t.firstChild.firstChild;else return!1;return this.selectNode(e),!0},setLocale:function(t){this.locale=t,this.refresh()},toCenter:function(){this.container.scrollTo(1e4-this.container.offsetWidth/2,1e4-this.container.offsetHeight/2)},unselectNode:function(){this.currentNode&&(this.currentNode.className=""),this.currentNode=null,this.bus.fire("unselectNode")}},Symbol.toStringTag,{value:"Module"})),nt={create:function(t){return{dom:t,mousedown:!1,lastX:0,lastY:0,handleMouseMove(e){if(e.stopPropagation(),this.mousedown){if(!this.lastX){this.lastX=e.pageX,this.lastY=e.pageY;return}const i=this.lastX-e.pageX,n=this.lastY-e.pageY;this.cb&&this.cb(i,n),this.lastX=e.pageX,this.lastY=e.pageY}},handleMouseDown(e){e.stopPropagation(),this.mousedown=!0},handleClear(e){e.stopPropagation(),this.clear()},cb:null,init(e,i){this.cb=i,this.handleClear=this.handleClear.bind(this),this.handleMouseMove=this.handleMouseMove.bind(this),this.handleMouseDown=this.handleMouseDown.bind(this),e.addEventListener("mousemove",this.handleMouseMove),e.addEventListener("mouseleave",this.handleClear),e.addEventListener("mouseup",this.handleClear),this.dom.addEventListener("mousedown",this.handleMouseDown)},destory(e){e.removeEventListener("mousemove",this.handleMouseMove),e.removeEventListener("mouseleave",this.handleClear),e.removeEventListener("mouseup",this.handleClear),this.dom.removeEventListener("mousedown",this.handleMouseDown)},clear(){this.mousedown=!1,this.lastX=0,this.lastY=0}}}},At={getObjById:j,generateNewObj:st,layout:ct,linkDiv:xt,createInputDiv:mt,createWrapper:ht,createParent:dt,createChildren:ut,createTopic:ft,findEle:k,changeTheme:Nt,...St,...{},...Object.freeze(Object.defineProperty({__proto__:null,createLink:function(t,e,i,n){const s=this.map.getBoundingClientRect();if(!t||!e)return;const o=t.getBoundingClientRect(),l=e.getBoundingClientRect(),u=(o.x+o.width/2-s.x)/this.scaleVal,h=(o.y+o.height/2-s.y)/this.scaleVal,p=(l.x+l.width/2-s.x)/this.scaleVal,c=(l.y+l.height/2-s.y)/this.scaleVal;let a,r,d,f;i&&n?(a=u+n.delta1.x,r=h+n.delta1.y,d=p+n.delta2.x,f=c+n.delta2.y):(h+c)/2-h<=o.height/2?(a=(o.x+o.width-s.x)/this.scaleVal+100,r=h,d=(l.x+l.width-s.x)/this.scaleVal+100,f=c):(a=(u+p)/2,r=(h+c)/2,d=(u+p)/2,f=(h+c)/2);const m={cx:u,cy:h,w:o.width,h:o.height},g={cx:p,cy:c,w:l.width,h:l.height},b=F(m,a,r),v=b.x,M=b.y,S=R(g,d,f),P=S.x,B=S.y,_=G(d,f,P,B),w={id:"",label:"",from:t.nodeObj.id,to:e.nodeObj.id,delta1:{x:a-u,y:r-h},delta2:{x:d-p,y:f-c}},q=vt(`M ${v} ${M} C ${a} ${r} ${d} ${f} ${P} ${B}`,`M ${_.x1} ${_.y1} L ${P} ${B} L ${_.x2} ${_.y2}`);i&&n?(w.id=n.id,this.linkData[n.id]=w):(w.id=J(),this.linkData[w.id]=w,this.currentLink=q),q.linkObj=w,q.dataset.linkid=w.id,this.linkSvgGroup.appendChild(q),i||this.showLinkController(a,r,d,f,w,m,g)},hideLinkController:function(){this.linkController.style.display="none",this.P2.style.display="none",this.P3.style.display="none"},removeLink:function(t){let e;if(t?e=t:e=this.currentLink,!e)return;console.log(e),this.hideLinkController();const i=e.linkObj.id;console.log(i),delete this.linkData[i],e.remove(),e=null},selectLink:function(t){this.currentLink=t;const e=t.linkObj;if(!e)return;const i=e.from,n=e.to,s=this.map.getBoundingClientRect(),o=k(i).getBoundingClientRect(),l=k(n).getBoundingClientRect(),u=(o.x+o.width/2-s.x)/this.scaleVal,h=(o.y+o.height/2-s.y)/this.scaleVal,p=(l.x+l.width/2-s.x)/this.scaleVal,c=(l.y+l.height/2-s.y)/this.scaleVal,a={cx:u,cy:h,w:o.width,h:o.height},r={cx:p,cy:c,w:l.width,h:l.height},d=u+e.delta1.x,f=h+e.delta1.y,m=p+e.delta2.x,g=c+e.delta2.y;this.showLinkController(d,f,m,g,e,a,r)},showLinkController:function(t,e,i,n,s,o,l){this.linkController.style.display="initial",this.P2.style.display="initial",this.P3.style.display="initial";const u=F(o,t,e);let h=u.x,p=u.y;const c=R(l,i,n);let a=c.x,r=c.y;this.P2.style.cssText=`top:${e}px;left:${t}px;`,this.P3.style.cssText=`top:${n}px;left:${i}px;`,this.line1.setAttribute("x1",h),this.line1.setAttribute("y1",p),this.line1.setAttribute("x2",t),this.line1.setAttribute("y2",e),this.line2.setAttribute("x1",i),this.line2.setAttribute("y1",n),this.line2.setAttribute("x2",a),this.line2.setAttribute("y2",r),this.helper1&&(this.helper1.destory(this.map),this.helper2.destory(this.map)),this.helper1=nt.create(this.P2),this.helper2=nt.create(this.P3),this.helper1.init(this.map,(d,f)=>{var g;t=t-d/this.scaleVal,e=e-f/this.scaleVal;const m=F(o,t,e);h=m.x,p=m.y,this.P2.style.top=e+"px",this.P2.style.left=t+"px",(g=this.currentLink)==null||g.children[0].setAttribute("d",`M ${h} ${p} C ${t} ${e} ${i} ${n} ${a} ${r}`),this.line1.setAttribute("x1",h),this.line1.setAttribute("y1",p),this.line1.setAttribute("x2",t),this.line1.setAttribute("y2",e),s.delta1.x=t-o.cx,s.delta1.y=e-o.cy}),this.helper2.init(this.map,(d,f)=>{var b,v;i=i-d/this.scaleVal,n=n-f/this.scaleVal;const m=R(l,i,n);a=m.x,r=m.y;const g=G(i,n,a,r);this.P3.style.top=n+"px",this.P3.style.left=i+"px",(b=this.currentLink)==null||b.children[0].setAttribute("d",`M ${h} ${p} C ${t} ${e} ${i} ${n} ${a} ${r}`),(v=this.currentLink)==null||v.children[1].setAttribute("d",`M ${g.x1} ${g.y1} L ${a} ${r} L ${g.x2} ${g.y2}`),this.line2.setAttribute("x1",i),this.line2.setAttribute("y1",n),this.line2.setAttribute("x2",a),this.line2.setAttribute("y2",r),s.delta2.x=i-l.cx,s.delta2.y=n-l.cy})}},Symbol.toStringTag,{value:"Module"})),init(t){if(!t||!t.nodeData)return new Error("MindElixir: `data` is required");t.direction!==void 0&&(this.direction=t.direction),this.changeTheme(t.theme||this.theme,!1),this.nodeData=t.nodeData,Y(this.nodeData),this.linkData=t.linkData||{},this.toolBar&&Et(this),this.toCenter(),this.layout(),this.linkDiv()}},H=document;function L({el:t,direction:e,locale:i,draggable:n,editable:s,contextMenu:o,contextMenuOption:l,toolBar:u,keypress:h,before:p,newTopicName:c,allowUndo:a,mainLinkStyle:r,subLinkStyle:d,overflowHidden:f,mobileMenu:m,theme:g}){console.log("ME_version "+L.version,this);let b=null;const v=Object.prototype.toString.call(t);if(v==="[object HTMLDivElement]"?b=t:v==="[object String]"&&(b=document.querySelector(t)),!b)throw new Error("MindElixir: el is not a valid element");b.className+=" mind-elixir",b.innerHTML="",b.style.setProperty("--gap",C+"px"),this.mindElixirBox=b,this.before=p||{},this.locale=i||"en",this.contextMenuOption=l,this.contextMenu=o===void 0?!0:o,this.toolBar=u===void 0?!0:u,this.keypress=h===void 0?!0:h,this.mobileMenu=m||!1,this.direction=typeof e=="number"?e:1,this.draggable=n===void 0?!0:n,this.newTopicName=c||"new node",this.editable=s===void 0?!0:s,this.allowUndo=a===void 0?!1:a,this.currentNode=null,this.currentLink=null,this.inputDiv=null,this.scaleVal=1,this.tempDirection=null,this.mainLinkStyle=r||0,this.subLinkStyle=d||0,this.overflowHidden=f||!1,this.bus=lt.create(),this.container=H.createElement("div"),this.container.className="map-container";const M=window.matchMedia("(prefers-color-scheme: dark)");this.theme=g||(M.matches?O:W);const S=H.createElement("div");S.className="map-canvas",this.map=S,this.map.setAttribute("tabindex","0"),this.container.appendChild(this.map),this.mindElixirBox.appendChild(this.container),this.nodes=H.createElement("me-nodes"),this.nodes.className="main-node-container",this.lines=D("lines"),this.linkController=D("linkcontroller"),this.P2=H.createElement("div"),this.P3=H.createElement("div"),this.P2.className=this.P3.className="circle",this.P2.style.display=this.P3.style.display="none",this.line1=Q(0,0,0,0),this.line2=Q(0,0,0,0),this.linkController.appendChild(this.line1),this.linkController.appendChild(this.line2),this.linkSvgGroup=D("topiclinks"),this.map.appendChild(this.nodes),this.map.appendChild(this.linkController),this.map.appendChild(this.linkSvgGroup),this.map.appendChild(this.P2),this.map.appendChild(this.P3),this.overflowHidden?this.container.style.overflow="hidden":ot(this)}return L.prototype=At,L.LEFT=A,L.RIGHT=X,L.SIDE=z,L.THEME=W,L.DARK_THEME=O,L.version="3.0.2",L.E=k,L}();
@@ -527,7 +527,7 @@ const St = function(t, e, i) {
527
527
  const i = t.nodeObj;
528
528
  typeof e == "boolean" ? i.expanded = e : i.expanded !== !1 ? i.expanded = !1 : i.expanded = !0, this.layout(), this.linkDiv(), this.bus.fire("expandNode", i);
529
529
  }, Kt = function(t) {
530
- t = JSON.parse(JSON.stringify(t)), t && (this.nodeData = t.nodeData, this.linkData = t.linkData || {}), F(this.nodeData), this.layout(), this.linkDiv();
530
+ t && (t = JSON.parse(JSON.stringify(t)), this.nodeData = t.nodeData, this.linkData = t.linkData || {}), F(this.nodeData), this.layout(), this.linkDiv();
531
531
  }, Ut = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
532
532
  __proto__: null,
533
533
  cancelFocus: Wt,
@@ -731,7 +731,7 @@ M.RIGHT = X;
731
731
  M.SIDE = q;
732
732
  M.THEME = G;
733
733
  M.DARK_THEME = J;
734
- M.version = "3.0.1";
734
+ M.version = "3.0.2";
735
735
  M.E = S;
736
736
  export {
737
737
  M as default
@@ -3,6 +3,9 @@ import type { NodeObj, MindElixirInstance, NodeObjExport } from '../types/index'
3
3
  export declare function encodeHTML(s: string): string;
4
4
  export declare const isMobile: () => boolean;
5
5
  export declare const getObjById: (id: string, data: NodeObj) => NodeObj | null;
6
+ /**
7
+ * Add parent property to every node
8
+ */
6
9
  export declare const fillParent: (data: NodeObj, parent?: NodeObj) => void;
7
10
  export declare function refreshIds(data: NodeObj): void;
8
11
  export declare const throttle: (fn: (...args: any[]) => void, wait: number) => (...args: any[]) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mind-elixir",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "type": "module",
5
5
  "description": "Mind elixir is a free open source mind map core.",
6
6
  "keywords": [