UNPKG

mind-elixir

Version:

Mind elixir is a free open source mind map core.

1,058 lines 67.9 kB
const ft = { name: "Latte", type: "light", palette: ["#dd7878", "#ea76cb", "#8839ef", "#e64553", "#fe640b", "#df8e1d", "#40a02b", "#209fb5", "#1e66f5", "#7287fd"], cssVar: { "--node-gap-x": "30px", "--node-gap-y": "10px", "--main-gap-x": "65px", "--main-gap-y": "45px", "--root-radius": "30px", "--main-radius": "20px", "--root-color": "#ffffff", "--root-bgcolor": "#4c4f69", "--root-border-color": "rgba(0, 0, 0, 0)", "--main-color": "#444446", "--main-bgcolor": "#ffffff", "--topic-padding": "3px", "--color": "#777777", "--bgcolor": "#f6f6f6", "--selected": "#4dc4ff", "--accent-color": "#e64553", "--panel-color": "#444446", "--panel-bgcolor": "#ffffff", "--panel-border-color": "#eaeaea", "--map-padding": "50px" } }, ut = { name: "Dark", type: "dark", palette: ["#848FA0", "#748BE9", "#D2F9FE", "#4145A5", "#789AFA", "#706CF4", "#EF987F", "#775DD5", "#FCEECF", "#DA7FBC"], cssVar: { "--node-gap-x": "30px", "--node-gap-y": "10px", "--main-gap-x": "65px", "--main-gap-y": "45px", "--root-radius": "30px", "--main-radius": "20px", "--root-color": "#ffffff", "--root-bgcolor": "#2d3748", "--root-border-color": "rgba(255, 255, 255, 0.1)", "--main-color": "#ffffff", "--main-bgcolor": "#4c4f69", "--topic-padding": "3px", "--color": "#cccccc", "--bgcolor": "#252526", "--selected": "#4dc4ff", "--accent-color": "#789AFA", "--panel-color": "#ffffff", "--panel-bgcolor": "#2d3748", "--panel-border-color": "#696969", "--map-padding": "50px 80px" } }; function Yt(t) { return t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;"); } const tt = function(t, e) { if (e.id === t) return e; if (e.children && e.children.length) { for (let n = 0; n < e.children.length; n++) { const o = tt(t, e.children[n]); if (o) return o; } return null; } else return null; }, pt = (t, e) => { if (t.parent = e, t.children) for (let n = 0; n < t.children.length; n++) pt(t.children[n], t); }, Tt = (t, e, n) => { t.expanded = e, t.children && t.children.forEach((o) => { Tt(o, e); }); }; function et(t, e, n, o) { const s = o - e, i = t - n; let r = Math.atan(Math.abs(s) / Math.abs(i)) / 3.14 * 180; if (isNaN(r)) return; i < 0 && s > 0 && (r = 180 - r), i < 0 && s < 0 && (r = 180 + r), i > 0 && s < 0 && (r = 360 - r); const l = 12, a = 30, d = r + a, h = r - a; return { x1: n + Math.cos(Math.PI * d / 180) * l, y1: o - Math.sin(Math.PI * d / 180) * l, x2: n + Math.cos(Math.PI * h / 180) * l, y2: o - Math.sin(Math.PI * h / 180) * l }; } function _() { return ((/* @__PURE__ */ new Date()).getTime().toString(16) + Math.random().toString(16).substr(2)).substr(2, 16); } const Wt = function() { const t = _(); return { topic: this.newTopicName, id: t }; }, O = (t, e) => { let n = 0, o = 0; for (; e && e !== t; ) n += e.offsetLeft, o += e.offsetTop, e = e.offsetParent; return { offsetLeft: n, offsetTop: o }; }, k = (t, e) => { for (const n in e) t.setAttribute(n, e[n]); }, lt = (t) => t ? t.tagName === "ME-TPC" : !1, Lt = (t) => { const e = /translate3d\(([^,]+),\s*([^,]+)/, n = t.match(e); return n ? { x: parseFloat(n[1]), y: parseFloat(n[2]) } : { x: 0, y: 0 }; }, kt = function(t) { for (let e = 0; e < t.length; e++) { const { dom: n, evt: o, func: s } = t[e]; n.addEventListener(o, s); } return function() { for (let n = 0; n < t.length; n++) { const { dom: o, evt: s, func: i } = t[n]; o.removeEventListener(s, i); } }; }, vt = (t, e) => { const n = t.x - e.x, o = t.y - e.y; return Math.sqrt(n * n + o * o); }, F = { LHS: "lhs", RHS: "rhs" }, K = function(t, e, n) { const { scaleVal: o, scaleSensitivity: s } = t; switch (e) { case "in": t.scale(o + s, n); break; case "out": t.scale(o - s, n); } }, dt = document, Gt = function(t, e) { if (!e) return st(t), t; let n = t.querySelector(".insert-preview"); const o = `insert-preview ${e} show`; return n || (n = dt.createElement("div"), t.appendChild(n)), n.className = o, t; }, st = function(t) { if (!t) return; const e = t.querySelectorAll(".insert-preview"); for (const n of e || []) n.remove(); }, wt = function(t, e) { for (const n of e) { const o = n.parentElement.parentElement.contains(t); if (!(t && t.tagName === "ME-TPC" && t !== n && !o && t.nodeObj.parent)) return !1; } return !0; }, Rt = function(t) { const e = document.createElement("div"); return e.className = "mind-elixir-ghost", t.container.appendChild(e), e; }; class zt { mind; isMoving = !1; interval = null; speed = 20; constructor(e) { this.mind = e; } move(e, n) { this.isMoving || (this.isMoving = !0, this.interval = setInterval(() => { this.mind.move(e * this.speed * this.mind.scaleVal, n * this.speed * this.mind.scaleVal); }, 100)); } stop() { this.isMoving = !1, this.interval && (clearInterval(this.interval), this.interval = null); } } function Vt(t) { return { isDragging: !1, insertType: null, meet: null, ghost: Rt(t), edgeMoveController: new zt(t), startX: 0, startY: 0, pointerId: null }; } const Xt = 5; function bt(t, e, n, o = !1) { if (t.spacePressed) return !1; const s = n.target; if (s?.tagName !== "ME-TPC" || !s.nodeObj.parent) return !1; e.startX = n.clientX, e.startY = n.clientY, e.pointerId = n.pointerId, t.selection.cancel(); let i = t.currentNodes; return i?.includes(s) || (t.selectNode(s), i = t.currentNodes), t.dragged = i, o && Mt(t, e), !0; } function Dt(t, e, n) { t.style.transform = `translate(${e + 10}px, ${n + 10}px)`, t.style.display = "block"; } function Mt(t, e) { const { dragged: n } = t; if (!n) return; const o = document.activeElement; o && o.isContentEditable && o.blur(), e.isDragging = !0, n.length > 1 ? e.ghost.innerHTML = n.length + "" : e.ghost.innerHTML = n[0].innerHTML; for (const s of n) s.parentElement.parentElement.style.opacity = "0.5"; t.dragMoveHelper.clear(); } function Ft(t, e, n) { const { dragged: o } = t; if (!o || e.pointerId !== n.pointerId) return; const s = n.clientX - e.startX, i = n.clientY - e.startY, r = Math.sqrt(s * s + i * i); if (!e.isDragging && r > Xt && Mt(t, e), !e.isDragging) return; Dt(e.ghost, n.clientX, n.clientY); const l = t.container.getBoundingClientRect(); n.clientX < l.x + 50 ? e.edgeMoveController.move(1, 0) : n.clientX > l.x + l.width - 50 ? e.edgeMoveController.move(-1, 0) : n.clientY < l.y + 50 ? e.edgeMoveController.move(0, 1) : n.clientY > l.y + l.height - 50 ? e.edgeMoveController.move(0, -1) : e.edgeMoveController.stop(), st(e.meet); const a = 12 * t.scaleVal, d = dt.elementFromPoint(n.clientX, n.clientY - a); if (wt(d, o)) { e.meet = d; const h = d.getBoundingClientRect(), f = h.y; n.clientY > f + h.height ? e.insertType = "after" : e.insertType = "in"; } else { const h = dt.elementFromPoint(n.clientX, n.clientY + a); if (wt(h, o)) { e.meet = h; const p = h.getBoundingClientRect().y; n.clientY < p ? e.insertType = "before" : e.insertType = "in"; } else e.insertType = null, e.meet = null; } e.meet && Gt(e.meet, e.insertType); } function jt(t, e, n) { const { dragged: o } = t; if (!(!o || e.pointerId !== n.pointerId)) { e.edgeMoveController.stop(); for (const s of o) s.parentElement.parentElement.style.opacity = "1"; e.ghost.style.display = "none", e.ghost.innerHTML = "", e.isDragging && e.meet && (st(e.meet), e.insertType === "before" ? t.moveNodeBefore(o, e.meet) : e.insertType === "after" ? t.moveNodeAfter(o, e.meet) : e.insertType === "in" && t.moveNodeIn(o, e.meet)), t.dragged = null, e.isDragging = !1, e.insertType = null, e.meet = null, e.pointerId = null; } } function ct(t, e) { const { dragged: n } = t; if (n) { e.edgeMoveController.stop(); for (const o of n) o.parentElement.parentElement.style.opacity = "1"; e.meet && st(e.meet), e.ghost.style.display = "none", e.ghost.innerHTML = "", t.dragged = null, e.isDragging = !1, e.insertType = null, e.meet = null, e.pointerId = null; } } function qt(t) { const { dragMoveHelper: e } = t; let n = 0; t.spacePressed = !1; let o = null; const s = /* @__PURE__ */ new Map(), i = t.draggable ? Vt(t) : null; let r = null, l = null, a = null, d = null; const h = 500, f = 10, p = () => { r !== null && (clearTimeout(r), r = null, l = null, a = null, d = null); }, v = (c, g) => { c.hasPointerCapture && c.hasPointerCapture(g) && c.releasePointerCapture(g); }, y = (c, g) => { const x = c.closest(".svg-label"); if (x) { const $ = x.dataset.svgId, U = x.dataset.type, j = document.getElementById($); if (j) { if (U === "arrow") return g ? t.editArrowLabel(j) : t.selectArrow(j), !0; if (U === "summary") return g ? t.editSummary(j) : t.selectSummary(j), !0; } } if (c.closest(".topiclinks")) { const $ = c.closest("g"); if ($) return g ? t.editArrowLabel($) : t.selectArrow($), !0; } if (c.closest(".summary")) { const $ = c.closest("g"); if ($) return g ? t.editSummary($) : t.selectSummary($), !0; } return !1; }, u = (c) => { if (c.button !== 0) return; if (t.helper1?.moved) { t.helper1.clear(); return; } if (t.helper2?.moved) { t.helper2.clear(); return; } if (e.moved) { e.clear(); return; } if (i?.isDragging) return; const g = c.target; if (g.tagName === "ME-EPD") c.ctrlKey || c.metaKey ? t.expandNodeAll(g.previousSibling) : t.expandNode(g.previousSibling); else if (g.tagName === "ME-TPC" && t.currentNodes.length > 1) t.selectNode(g); else if (!t.editable) return; y(g, !1); }, m = (c) => { if (!t.editable) return; const g = c.target; lt(g) && t.beginEdit(g), y(g, !0); }, w = (c) => { if (c.pointerType === "mouse" || s.size > 1) return; const g = (/* @__PURE__ */ new Date()).getTime(), x = g - n; x < 300 && x > 0 && m(c), n = g; }, b = (c) => { c.code === "Space" && (t.spacePressed = !0, t.container.classList.add("space-pressed")); }, C = (c) => { c.code === "Space" && (t.spacePressed = !1, t.container.classList.remove("space-pressed")); }, S = (c) => { if (c.pointerType === "touch" && (s.set(c.pointerId, { x: c.clientX, y: c.clientY }), s.size === 2)) { const [$, U] = Array.from(s.values()); o = vt($, U), p(); } e.moved = !1; const g = c.target, x = t.mouseSelectionButton === 0 ? 2 : 0; if (i && (c.button === 0 || c.pointerType === "touch")) { if (c.pointerType === "touch" && s.size > 1) (i.isDragging || i.pointerId !== null) && ct(t, i); else if (c.pointerType === "touch" && s.size === 1) (lt(g) || g.closest("me-tpc")) && (l = { x: c.clientX, y: c.clientY }, a = g, d = c.pointerId, r = window.setTimeout(() => { bt(t, i, c, !0) && (a && a.setPointerCapture(c.pointerId), Dt(i.ghost, c.clientX, c.clientY)), r = null, l = null, a = null, d = null; }, h)); else if (c.pointerType === "mouse" && bt(t, i, c, !1)) { g.setPointerCapture(c.pointerId); return; } } const H = t.spacePressed && c.button === 0 && c.pointerType === "mouse", Y = c.button === x && c.pointerType === "mouse" || c.pointerType === "touch"; !H && !Y || (e.x = c.clientX, e.y = c.clientY, g.className !== "circle" && g.contentEditable !== "plaintext-only" && (e.mousedown = !0, g.setPointerCapture(c.pointerId))); }, T = (c) => { if (c.pointerType === "touch" && s.has(c.pointerId)) { if (s.set(c.pointerId, { x: c.clientX, y: c.clientY }), r !== null && l !== null && c.pointerId === d) { const g = c.clientX - l.x, x = c.clientY - l.y; Math.sqrt(g * g + x * x) > f && p(); } if (s.size >= 2) { const [g, x] = Array.from(s.values()), H = vt(g, x); if (o == null) o = H; else { const Y = H - o; Math.abs(Y) > 8 && (Y > 0 ? K(t, "in", { x: (g.x + x.x) / 2, y: (g.y + x.y) / 2 }) : K(t, "out", { x: (g.x + x.x) / 2, y: (g.y + x.y) / 2 }), o = H); } return; } } if (!(i && i.pointerId !== null && (Ft(t, i, c), i.isDragging))) { if (c.target.contentEditable !== "plaintext-only" || t.spacePressed && e.mousedown) { const g = c.clientX - e.x, x = c.clientY - e.y; e.onMove(g, x); } e.x = c.clientX, e.y = c.clientY; } }, D = (c) => { if (c.pointerType === "touch" && (s.delete(c.pointerId), s.size < 2 && (o = null), p()), i && i.pointerId !== null) { const g = i.isDragging; if (jt(t, i, c), v(c.target, c.pointerId), g) return; } e.mousedown && (v(c.target, c.pointerId), e.clear()); }, L = () => { p(), e.mousedown && e.clear(), i && (i.isDragging || i.pointerId !== null) && ct(t, i); }, M = (c) => { c.pointerType === "touch" && (s.delete(c.pointerId), s.size < 2 && (o = null), p()), i && i.pointerId === c.pointerId && ct(t, i), D(c); }, N = (c) => { if (c.preventDefault(), c.button !== 2 || !t.editable) return; const g = c.target; lt(g) && !g.classList.contains("selected") && t.selectNode(g), setTimeout(() => { t.dragMoveHelper.moved || t.bus.fire("showContextMenu", c); }, 200); }, W = (c) => { c.stopPropagation(), c.preventDefault(), c.ctrlKey || c.metaKey ? c.deltaY < 0 ? K(t, "in", t.dragMoveHelper) : t.scaleVal - t.scaleSensitivity > 0 && K(t, "out", t.dragMoveHelper) : c.shiftKey ? t.move(-c.deltaY, 0) : t.move(-c.deltaX, -c.deltaY); }, { container: E } = t; return kt([ { dom: E, evt: "pointerdown", func: S }, { dom: E, evt: "pointermove", func: T }, { dom: E, evt: "pointerup", func: D }, { dom: E, evt: "pointercancel", func: M }, { dom: E, evt: "pointerdown", func: w }, { dom: E, evt: "click", func: u }, { dom: E, evt: "dblclick", func: m }, { dom: E, evt: "contextmenu", func: N }, { dom: E, evt: "wheel", func: typeof t.handleWheel == "function" ? t.handleWheel : W }, { dom: E, evt: "blur", func: L }, { dom: E, evt: "keydown", func: b }, { dom: E, evt: "keyup", func: C } ]); } function _t() { return { handlers: {}, addListener: function(t, e) { this.handlers[t] === void 0 && (this.handlers[t] = []), this.handlers[t].push(e); }, fire: function(t, ...e) { if (this.handlers[t] instanceof Array) { const n = this.handlers[t]; for (let o = 0; o < n.length; o++) n[o](...e); } }, removeListener: function(t, e) { if (!this.handlers[t]) return; const n = this.handlers[t]; if (!e) n.length = 0; else if (n.length) for (let o = 0; o < n.length; o++) n[o] === e && this.handlers[t].splice(o, 1); } }; } const nt = document, Ut = function() { this.nodes.innerHTML = ""; const t = this.createTopic(this.nodeData); Nt.call(this, t, this.nodeData), t.draggable = !1; const e = nt.createElement("me-root"); e.appendChild(t); const n = this.nodeData.children || []; if (this.direction === 2) { let o = 0, s = 0; n.map((i) => { i.direction === 0 ? o += 1 : i.direction === 1 ? s += 1 : o <= s ? (i.direction = 0, o += 1) : (i.direction = 1, s += 1); }); } Kt(this, n, e); }, Kt = function(t, e, n) { const o = nt.createElement("me-main"); o.className = F.LHS; const s = nt.createElement("me-main"); s.className = F.RHS; for (let i = 0; i < e.length; i++) { const r = e[i], { grp: l } = t.createWrapper(r); t.direction === 2 ? r.direction === 0 ? o.appendChild(l) : s.appendChild(l) : t.direction === 0 ? o.appendChild(l) : s.appendChild(l); } t.nodes.appendChild(o), t.nodes.appendChild(n), t.nodes.appendChild(s), t.nodes.appendChild(t.lines), t.nodes.appendChild(t.labelContainer); }, Jt = function(t, e) { const n = nt.createElement("me-children"); for (let o = 0; o < e.length; o++) { const s = e[o], { grp: i } = t.createWrapper(s); n.appendChild(i); } return n; }, P = document, $t = function(t, e) { const o = (this?.el ? this.el : e || document).querySelector(`[data-nodeid="me${t}"]`); if (!o) throw new Error(`FindEle: Node ${t} not found, maybe it's collapsed.`); return o; }, Nt = function(t, e) { if (t.innerHTML = "", e.style) { const n = e.style; for (const o in n) t.style[o] = n[o]; } if (e.dangerouslySetInnerHTML) { t.innerHTML = e.dangerouslySetInnerHTML; return; } if (e.image) { const n = e.image; if (n.url && n.width && n.height) { const o = P.createElement("img"); o.src = this.imageProxy ? this.imageProxy(n.url) : n.url, o.style.width = n.width + "px", o.style.height = n.height + "px", n.fit && (o.style.objectFit = n.fit), t.appendChild(o), t.image = o; } } else t.image && (t.image = void 0); { const n = P.createElement("span"); n.className = "text", this.markdown ? n.innerHTML = this.markdown(e.topic, e) : n.textContent = e.topic, t.appendChild(n), t.text = n; } if (e.hyperLink) { const n = P.createElement("a"); n.className = "hyper-link", n.target = "_blank", n.innerText = "🔗", n.href = e.hyperLink, t.appendChild(n), t.link = n; } else t.link && (t.link = void 0); if (e.icons && e.icons.length) { const n = P.createElement("span"); n.className = "icons", n.innerHTML = e.icons.map((o) => `<span>${Yt(o)}</span>`).join(""), t.appendChild(n), t.icons = n; } else t.icons && (t.icons = void 0); if (e.tags && e.tags.length) { const n = P.createElement("div"); n.className = "tags", e.tags.forEach((o) => { const s = P.createElement("span"); typeof o == "string" ? s.textContent = o : (s.textContent = o.text, o.className && (s.className = o.className), o.style && Object.assign(s.style, o.style)), n.appendChild(s); }), t.appendChild(n), t.tags = n; } else t.tags && (t.tags = void 0); }, Qt = function(t, e) { const n = P.createElement("me-wrapper"), { p: o, tpc: s } = this.createParent(t); if (n.appendChild(o), !e && t.children && t.children.length > 0) { const i = oe(t.expanded); if (o.appendChild(i), t.expanded !== !1) { const r = Jt(this, t.children); n.appendChild(r); } } return { grp: n, top: o, tpc: s }; }, Zt = function(t) { const e = P.createElement("me-parent"), n = this.createTopic(t); return Nt.call(this, n, t), e.appendChild(n), { p: e, tpc: n }; }, te = function(t) { const e = P.createElement("me-children"); return e.append(...t), e; }, ee = function(t) { const e = P.createElement("me-tpc"); return e.nodeObj = t, e.dataset.nodeid = "me" + t.id, e; }; function Pt(t) { const e = P.createRange(); e.selectNodeContents(t); const n = window.getSelection(); n && (n.removeAllRanges(), n.addRange(e)); } const ne = function(t) { if (!t) return; const e = P.createElement("div"), n = t.nodeObj, o = n.topic, { offsetLeft: s, offsetTop: i } = O(this.nodes, t); this.nodes.appendChild(e), e.id = "input-box", e.textContent = o, e.contentEditable = "plaintext-only", e.spellcheck = !1; const r = getComputedStyle(t); e.style.cssText = ` left: ${s}px; top: ${i}px; min-width:${t.offsetWidth - 8}px; color:${r.color}; font-size:${r.fontSize}; padding:${r.padding}; margin:${r.margin}; background-color:${r.backgroundColor !== "rgba(0, 0, 0, 0)" && r.backgroundColor}; border: ${r.border}; border-radius:${r.borderRadius}; `, this.direction === 0 && (e.style.right = "0"), Pt(e), this.bus.fire("operation", { name: "beginEdit", obj: t.nodeObj }), e.addEventListener("keydown", (l) => { l.stopPropagation(); const a = l.key; if (a === "Enter" || a === "Tab") { if (l.shiftKey) return; l.preventDefault(), e.blur(), this.container.focus(); } }), e.addEventListener("blur", () => { if (!e) return; e.remove(); const l = e.textContent?.trim() || ""; l === o || l === "" || (n.topic = l, this.markdown ? t.text.innerHTML = this.markdown(n.topic, n) : t.text.textContent = l, this.linkDiv(), this.bus.fire("operation", { name: "finishEdit", obj: n, origin: o })); }); }, oe = function(t) { const e = P.createElement("me-epd"); return e.expanded = t !== !1, e.className = t !== !1 ? "minus" : "", e; }, X = document, I = "http://www.w3.org/2000/svg", it = function(t) { const e = t.clientWidth, n = t.clientHeight, o = t.dataset, s = Number(o.x), i = Number(o.y), r = o.anchor; let l = s; r === "middle" ? l = s - e / 2 : r === "end" && (l = s - e), t.style.left = `${l}px`, t.style.top = `${i - n / 2}px`, t.style.visibility = "visible"; }, ht = function(t, e, n, o) { const { anchor: s = "middle", color: i, dataType: r, svgId: l } = o, a = document.createElement("div"); a.className = "svg-label", a.style.color = i || "#666"; const d = "label-" + l; return a.id = d, a.innerHTML = t, a.dataset.type = r, a.dataset.svgId = l, a.dataset.x = e.toString(), a.dataset.y = n.toString(), a.dataset.anchor = s, a; }, At = function(t, e, n) { const o = X.createElementNS(I, "path"); return k(o, { d: t, stroke: e || "#666", fill: "none", "stroke-width": n }), o; }, q = function(t) { const e = X.createElementNS(I, "svg"); return e.setAttribute("class", t), e.setAttribute("overflow", "visible"), e; }, xt = function() { const t = X.createElementNS(I, "line"); return t.setAttribute("stroke", "#4dc4ff"), t.setAttribute("fill", "none"), t.setAttribute("stroke-width", "2"), t.setAttribute("opacity", "0.45"), t; }, se = function(t, e, n, o) { const s = X.createElementNS(I, "g"); return [ { name: "line", d: t }, { name: "arrow1", d: e }, { name: "arrow2", d: n } ].forEach((r, l) => { const a = r.d, d = X.createElementNS(I, "path"), h = { d: a, stroke: o?.stroke || "rgb(227, 125, 116)", fill: "none", "stroke-linecap": o?.strokeLinecap || "cap", "stroke-width": String(o?.strokeWidth || "2") }; o?.opacity !== void 0 && (h.opacity = String(o.opacity)), k(d, h), l === 0 && d.setAttribute("stroke-dasharray", o?.strokeDasharray || "8,2"); const f = X.createElementNS(I, "path"); k(f, { d: a, stroke: "transparent", fill: "none", "stroke-width": "15" }), s.appendChild(f), s.appendChild(d), s[r.name] = d; }), s; }, Ht = function(t, e, n) { if (!e) return; const o = n.label, s = e.cloneNode(!0); t.nodes.appendChild(s), s.id = "input-box", s.textContent = o, s.contentEditable = "plaintext-only", s.spellcheck = !1, s.style.cssText = ` left:${e.style.left}; top:${e.style.top}; max-width: 200px; `, Pt(s), t.scrollIntoView(s), s.addEventListener("keydown", (i) => { i.stopPropagation(); const r = i.key; if (r === "Enter" || r === "Tab") { if (i.shiftKey) return; i.preventDefault(), s.blur(), t.container.focus(); } }), s.addEventListener("blur", () => { if (!s) return; const i = s.textContent?.trim() || ""; i === "" ? n.label = o : n.label = i, s.remove(), i !== o && (t.markdown ? e.innerHTML = t.markdown(n.label, n) : e.textContent = n.label, it(e), "parent" in n ? t.bus.fire("operation", { name: "finishEditSummary", obj: n }) : t.bus.fire("operation", { name: "finishEditArrowLabel", obj: n })); }); }, ie = function(t) { const e = this.map.querySelector("me-root"), n = e.offsetTop, o = e.offsetLeft, s = e.offsetWidth, i = e.offsetHeight, r = this.map.querySelectorAll("me-main > me-wrapper"); this.lines.innerHTML = ""; for (let l = 0; l < r.length; l++) { const a = r[l], d = a.querySelector("me-tpc"), { offsetLeft: h, offsetTop: f } = O(this.nodes, d), p = d.offsetWidth, v = d.offsetHeight, y = a.parentNode.className, u = this.generateMainBranch({ pT: n, pL: o, pW: s, pH: i, cT: f, cL: h, cW: p, cH: v, direction: y, containerHeight: this.nodes.offsetHeight }), m = this.theme.palette, w = d.nodeObj.branchColor || m[l % m.length]; if (d.style.borderColor = w, this.lines.appendChild(At(u, w, "3")), t && t !== a) continue; const b = q("subLines"), C = a.lastChild; C.tagName === "svg" && C.remove(), a.appendChild(b), It(this, b, w, a, y, !0); } this.labelContainer.innerHTML = "", this.renderArrow(), this.renderSummary(), this.bus.fire("linkDiv"); }, It = function(t, e, n, o, s, i) { const r = o.firstChild, l = o.children[1].children; if (l.length === 0) return; const a = r.offsetTop, d = r.offsetLeft, h = r.offsetWidth, f = r.offsetHeight; for (let p = 0; p < l.length; p++) { const v = l[p], y = v.firstChild, u = y.offsetTop, m = y.offsetLeft, w = y.offsetWidth, b = y.offsetHeight, C = y.firstChild.nodeObj.branchColor || n, S = t.generateSubBranch({ pT: a, pL: d, pW: h, pH: f, cT: u, cL: m, cW: w, cH: b, direction: s, isFirst: i }); e.appendChild(At(S, C, "2")); const T = y.children[1]; if (T) { if (!T.expanded) continue; } else continue; It(t, e, C, v, s); } }, re = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169394918" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2021" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M851.91168 328.45312c-59.97056 0-108.6208 48.47104-108.91264 108.36992l-137.92768 38.4a109.14304 109.14304 0 0 0-63.46752-46.58688l1.39264-137.11872c47.29344-11.86816 82.31936-54.66624 82.31936-105.64096 0-60.15488-48.76288-108.91776-108.91776-108.91776s-108.91776 48.76288-108.91776 108.91776c0 49.18784 32.60928 90.75712 77.38368 104.27392l-1.41312 138.87488a109.19936 109.19936 0 0 0-63.50336 48.55808l-138.93632-39.48544 0.01024-0.72704c0-60.15488-48.76288-108.91776-108.91776-108.91776s-108.91776 48.75776-108.91776 108.91776c0 60.15488 48.76288 108.91264 108.91776 108.91264 39.3984 0 73.91232-20.92032 93.03552-52.2496l139.19232 39.552-0.00512 0.2304c0 25.8304 9.00096 49.5616 24.02816 68.23424l-90.14272 132.63872a108.7488 108.7488 0 0 0-34.2528-5.504c-60.15488 0-108.91776 48.768-108.91776 108.91776 0 60.16 48.76288 108.91776 108.91776 108.91776 60.16 0 108.92288-48.75776 108.92288-108.91776 0-27.14624-9.9328-51.968-26.36288-71.04l89.04704-131.03104a108.544 108.544 0 0 0 37.6832 6.70208 108.672 108.672 0 0 0 36.48512-6.272l93.13792 132.57216a108.48256 108.48256 0 0 0-24.69888 69.0688c0 60.16 48.768 108.92288 108.91776 108.92288 60.16 0 108.91776-48.76288 108.91776-108.92288 0-60.14976-48.75776-108.91776-108.91776-108.91776a108.80512 108.80512 0 0 0-36.69504 6.3488l-93.07136-132.48a108.48768 108.48768 0 0 0 24.79616-72.22784l136.09984-37.888c18.99008 31.93856 53.84192 53.3504 93.69088 53.3504 60.16 0 108.92288-48.75776 108.92288-108.91264-0.00512-60.15488-48.77312-108.92288-108.92288-108.92288z" p-id="2022"></path></svg>', le = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169375313" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1775" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M639 463.30000001L639 285.1c0-36.90000001-26.4-68.5-61.3-68.5l-150.2 0c-1.5 0-3 0.1-4.5 0.3-10.2-38.7-45.5-67.3-87.5-67.3-50 0-90.5 40.5-90.5 90.5s40.5 90.5 90.5 90.5c42 0 77.3-28.6 87.5-67.39999999 1.4 0.3 2.9 0.4 4.5 0.39999999L577.7 263.6c6.8 0 14.3 8.9 14.3 21.49999999l0 427.00000001c0 12.7-7.40000001 21.5-14.30000001 21.5l-150.19999999 0c-1.5 0-3 0.2-4.5 0.4-10.2-38.8-45.5-67.3-87.5-67.3-50 0-90.5 40.5-90.5 90.4 0 49.9 40.5 90.6 90.5 90.59999999 42 0 77.3-28.6 87.5-67.39999999 1.4 0.2 2.9 0.4 4.49999999 0.4L577.7 780.7c34.80000001 0 61.3-31.6 61.3-68.50000001L639 510.3l79.1 0c10.4 38.5 45.49999999 67 87.4 67 50 0 90.5-40.5 90.5-90.5s-40.5-90.5-90.5-90.5c-41.79999999 0-77.00000001 28.4-87.4 67L639 463.30000001z" fill="currentColor" p-id="1776"></path></svg>', ce = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169667709" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3037" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M385 560.69999999L385 738.9c0 36.90000001 26.4 68.5 61.3 68.5l150.2 0c1.5 0 3-0.1 4.5-0.3 10.2 38.7 45.5 67.3 87.5 67.3 50 0 90.5-40.5 90.5-90.5s-40.5-90.5-90.5-90.5c-42 0-77.3 28.6-87.5 67.39999999-1.4-0.3-2.9-0.4-4.5-0.39999999L446.3 760.4c-6.8 0-14.3-8.9-14.3-21.49999999l0-427.00000001c0-12.7 7.40000001-21.5 14.30000001-21.5l150.19999999 0c1.5 0 3-0.2 4.5-0.4 10.2 38.8 45.5 67.3 87.5 67.3 50 0 90.5-40.5 90.5-90.4 0-49.9-40.5-90.6-90.5-90.59999999-42 0-77.3 28.6-87.5 67.39999999-1.4-0.2-2.9-0.4-4.49999999-0.4L446.3 243.3c-34.80000001 0-61.3 31.6-61.3 68.50000001L385 513.7l-79.1 0c-10.4-38.5-45.49999999-67-87.4-67-50 0-90.5 40.5-90.5 90.5s40.5 90.5 90.5 90.5c41.79999999 0 77.00000001-28.4 87.4-67L385 560.69999999z" fill="currentColor" p-id="3038"></path></svg>', ae = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169402629" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2170" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M639.328 416c8.032 0 16.096-3.008 22.304-9.056l202.624-197.184-0.8 143.808c-0.096 17.696 14.144 32.096 31.808 32.192 0.064 0 0.128 0 0.192 0 17.6 0 31.904-14.208 32-31.808l1.248-222.208c0-0.672-0.352-1.248-0.384-1.92 0.032-0.512 0.288-0.896 0.288-1.408 0.032-17.664-14.272-32-31.968-32.032L671.552 96l-0.032 0c-17.664 0-31.968 14.304-32 31.968C639.488 145.632 653.824 160 671.488 160l151.872 0.224-206.368 200.8c-12.672 12.32-12.928 32.608-0.64 45.248C622.656 412.736 630.976 416 639.328 416z" p-id="2171"></path><path d="M896.032 639.552 896.032 639.552c-17.696 0-32 14.304-32.032 31.968l-0.224 151.872-200.832-206.4c-12.32-12.64-32.576-12.96-45.248-0.64-12.672 12.352-12.928 32.608-0.64 45.248l197.184 202.624-143.808-0.8c-0.064 0-0.128 0-0.192 0-17.6 0-31.904 14.208-32 31.808-0.096 17.696 14.144 32.096 31.808 32.192l222.24 1.248c0.064 0 0.128 0 0.192 0 0.64 0 1.12-0.32 1.76-0.352 0.512 0.032 0.896 0.288 1.408 0.288l0.032 0c17.664 0 31.968-14.304 32-31.968L928 671.584C928.032 653.952 913.728 639.584 896.032 639.552z" p-id="2172"></path><path d="M209.76 159.744l143.808 0.8c0.064 0 0.128 0 0.192 0 17.6 0 31.904-14.208 32-31.808 0.096-17.696-14.144-32.096-31.808-32.192L131.68 95.328c-0.064 0-0.128 0-0.192 0-0.672 0-1.248 0.352-1.888 0.384-0.448 0-0.8-0.256-1.248-0.256 0 0-0.032 0-0.032 0-17.664 0-31.968 14.304-32 31.968L96 352.448c-0.032 17.664 14.272 32 31.968 32.032 0 0 0.032 0 0.032 0 17.664 0 31.968-14.304 32-31.968l0.224-151.936 200.832 206.4c6.272 6.464 14.624 9.696 22.944 9.696 8.032 0 16.096-3.008 22.304-9.056 12.672-12.32 12.96-32.608 0.64-45.248L209.76 159.744z" p-id="2173"></path><path d="M362.368 617.056l-202.624 197.184 0.8-143.808c0.096-17.696-14.144-32.096-31.808-32.192-0.064 0-0.128 0-0.192 0-17.6 0-31.904 14.208-32 31.808l-1.248 222.24c0 0.704 0.352 1.312 0.384 2.016 0 0.448-0.256 0.832-0.256 1.312-0.032 17.664 14.272 32 31.968 32.032L352.448 928c0 0 0.032 0 0.032 0 17.664 0 31.968-14.304 32-31.968s-14.272-32-31.968-32.032l-151.936-0.224 206.4-200.832c12.672-12.352 12.96-32.608 0.64-45.248S375.008 604.704 362.368 617.056z" p-id="2174"></path></svg>', de = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169573443" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2883" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M514.133333 488.533333m-106.666666 0a106.666667 106.666667 0 1 0 213.333333 0 106.666667 106.666667 0 1 0-213.333333 0Z" fill="currentColor" p-id="2884"></path><path d="M512 64C264.533333 64 64 264.533333 64 512c0 236.8 183.466667 428.8 416 445.866667v-134.4c-53.333333-59.733333-200.533333-230.4-200.533333-334.933334 0-130.133333 104.533333-234.666667 234.666666-234.666666s234.666667 104.533333 234.666667 234.666666c0 61.866667-49.066667 153.6-145.066667 270.933334l-59.733333 68.266666V960C776.533333 942.933333 960 748.8 960 512c0-247.466667-200.533333-448-448-448z" fill="currentColor" p-id="2885"></path></svg>', he = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169419447" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2480" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M863.328 482.56l-317.344-1.12L545.984 162.816c0-17.664-14.336-32-32-32s-32 14.336-32 32l0 318.4L159.616 480.064c-0.032 0-0.064 0-0.096 0-17.632 0-31.936 14.24-32 31.904C127.424 529.632 141.728 544 159.392 544.064l322.592 1.152 0 319.168c0 17.696 14.336 32 32 32s32-14.304 32-32l0-318.944 317.088 1.12c0.064 0 0.096 0 0.128 0 17.632 0 31.936-14.24 32-31.904C895.264 496.992 880.96 482.624 863.328 482.56z" p-id="2481"></path></svg>', fe = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750169426515" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2730" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M863.744 544 163.424 544c-17.664 0-32-14.336-32-32s14.336-32 32-32l700.32 0c17.696 0 32 14.336 32 32S881.44 544 863.744 544z" p-id="2731"></path></svg>', ue = { side: re, left: le, right: ce, full: ae, living: de, zoomin: he, zoomout: fe }, G = (t, e) => { const n = document.createElement("span"); return n.id = t, n.innerHTML = ue[e], n; }; function pe(t) { const e = document.createElement("div"), n = G("fullscreen", "full"), o = G("toCenter", "living"), s = G("zoomout", "zoomout"), i = G("zoomin", "zoomin"), r = document.createElement("span"); return r.innerText = "100%", e.appendChild(n), e.appendChild(o), e.appendChild(s), e.appendChild(i), e.className = "mind-elixir-toolbar rb", n.onclick = () => { document.fullscreenElement === t.el ? document.exitFullscreen() : t.el.requestFullscreen(); }, o.onclick = () => { t.toCenter(); }, s.onclick = () => { t.scale(t.scaleVal - t.scaleSensitivity); }, i.onclick = () => { t.scale(t.scaleVal + t.scaleSensitivity); }, e; } function ge(t) { const e = document.createElement("div"), n = G("tbltl", "left"), o = G("tbltr", "right"), s = G("tblts", "side"); return e.appendChild(n), e.appendChild(o), e.appendChild(s), e.className = "mind-elixir-toolbar lt", n.onclick = () => { t.initLeft(); }, o.onclick = () => { t.initRight(); }, s.onclick = () => { t.initSide(); }, e; } function me(t) { t.container.append(pe(t)), t.container.append(ge(t)); } const ye = function(t, e = !0) { this.theme = t; const o = { ...(t.type === "dark" ? ut : ft).cssVar, ...t.cssVar }, s = Object.keys(o); for (let i = 0; i < s.length; i++) { const r = s[i]; this.container.style.setProperty(r, o[r]); } e && this.refresh(); }, ve = function(t) { const n = t.parentElement.parentElement.lastElementChild; n?.tagName === "svg" && n?.remove(); }; function we(t) { return { nodeData: t.isFocusMode ? t.nodeDataBackup : t.nodeData, arrows: t.arrows, summaries: t.summaries, direction: t.direction, theme: t.theme }; } const be = function(t) { const e = this.container, n = t.getBoundingClientRect(), o = e.getBoundingClientRect(); if (n.top > o.bottom - 50 || n.bottom < o.top + 50 || n.left > o.right - 50 || n.right < o.left + 50) { const i = n.left + n.width / 2, r = n.top + n.height / 2, l = o.left + o.width / 2, a = o.top + o.height / 2, d = i - l, h = r - a; this.move(-d, -h, !0); } }, xe = function(t, e, n) { this.clearSelection(), this.scrollIntoView(t), this.selection.select(t), e && this.bus.fire("selectNewNode", t.nodeObj); }, Ce = function(t) { this.selection.select(t); }, Ee = function(t) { this.selection?.deselect(t); }, Se = function() { this.unselectNodes(this.currentNodes), this.unselectSummary(), this.unselectArrow(); }, Te = function() { const t = we(this); return JSON.stringify(t, (e, n) => { if (!(e === "parent" && typeof n != "string")) return n; }); }, Le = function() { return JSON.parse(this.getDataString()); }, ke = function() { this.editable = !0; }, De = function() { this.editable = !1; }, Me = function(t, e = { x: 0, y: 0 }) { if (t < this.scaleMin || t > this.scaleMax) return; const n = this.container.getBoundingClientRect(), o = e.x ? e.x - n.left - n.width / 2 : 0, s = e.y ? e.y - n.top - n.height / 2 : 0, { dx: i, dy: r } = gt(this), l = this.map.style.transform, { x: a, y: d } = Lt(l), h = a - i, f = d - r, p = this.scaleVal, v = (-o + h) * (1 - t / p), y = (-s + f) * (1 - t / p); this.map.style.transform = `translate3d(${a - v}px, ${d - y}px, 0) scale(${t})`, this.scaleVal = t, this.bus.fire("scale", t); }, $e = function() { const t = this.nodes.offsetHeight / this.container.offsetHeight, e = this.nodes.offsetWidth / this.container.offsetWidth, n = 1 / Math.max(1, Math.max(t, e)); this.scaleVal = n; const { dx: o, dy: s } = gt(this); this.map.style.transform = `translate3d(${o}px, ${s}px, 0) scale(${n})`, this.bus.fire("scale", n); }, Ne = function(t, e, n = !1) { const { map: o, scaleVal: s, bus: i } = this; if (n && o.style.transition === "transform 0.3s") return; const r = o.style.transform; let { x: l, y: a } = Lt(r); l += t, a += e, n && (o.style.transition = "transform 0.3s", setTimeout(() => { o.style.transition = "none"; }, 300)), o.style.transform = `translate3d(${l}px, ${a}px, 0) scale(${s})`, i.fire("move", { dx: t, dy: e }); }, gt = (t) => { const { container: e, map: n, nodes: o } = t, s = n.querySelector("me-root"), i = s.offsetTop, r = s.offsetLeft, l = s.offsetWidth, a = s.offsetHeight; let d, h; return t.alignment === "root" ? (d = e.offsetWidth / 2 - r - l / 2, h = e.offsetHeight / 2 - i - a / 2, n.style.transformOrigin = `${r + l / 2}px 50%`) : (d = (e.offsetWidth - o.offsetWidth) / 2, h = (e.offsetHeight - o.offsetHeight) / 2, n.style.transformOrigin = "50% 50%"), { dx: d, dy: h }; }, Pe = function() { const { map: t, container: e } = this, { dx: n, dy: o } = gt(this); e.scrollTop = 0, e.scrollLeft = 0, t.style.transform = `translate3d(${n}px, ${o}px, 0) scale(${this.scaleVal})`; }, Ae = function(t) { t(this); }, He = function(t) { t.nodeObj.parent && (this.clearSelection(), this.tempDirection === null && (this.tempDirection = this.direction), this.isFocusMode || (this.nodeDataBackup = this.nodeData, this.isFocusMode = !0), this.nodeData = t.nodeObj, this.initRight(), this.toCenter()); }, Ie = function() { this.isFocusMode = !1, this.tempDirection !== null && (this.nodeData = this.nodeDataBackup, this.direction = this.tempDirection, this.tempDirection = null, this.refresh(), this.toCenter()); }, Oe = function() { this.direction = 0, this.refresh(), this.toCenter(), this.bus.fire("changeDirection", this.direction); }, Be = function() { this.direction = 1, this.refresh(), this.toCenter(), this.bus.fire("changeDirection", this.direction); }, Ye = function() { this.direction = 2, this.refresh(), this.toCenter(), this.bus.fire("changeDirection", this.direction); }, We = function(t) { this.locale = t, this.refresh(); }, Ge = function(t, e) { const n = t.nodeObj; typeof e == "boolean" ? n.expanded = e : n.expanded !== !1 ? n.expanded = !1 : n.expanded = !0; const o = t.getBoundingClientRect(), s = { x: o.left, y: o.top }, i = t.parentNode, r = i.children[1]; if (r.expanded = n.expanded, r.className = n.expanded ? "minus" : "", ve(t), n.expanded) { const f = this.createChildren( n.children.map((p) => this.createWrapper(p).grp) ); i.parentNode.appendChild(f); } else i.parentNode.children[1].remove(); this.linkDiv(t.closest("me-main > me-wrapper")); const l = t.getBoundingClientRect(), a = { x: l.left, y: l.top }, d = s.x - a.x, h = s.y - a.y; this.move(d, h), this.bus.fire("expandNode", n); }, Re = function(t, e) { const n = t.nodeObj, o = t.getBoundingClientRect(), s = { x: o.left, y: o.top }; Tt(n, e ?? !n.expanded), this.refresh(); const i = this.findEle(n.id).getBoundingClientRect(), r = { x: i.left, y: i.top }, l = s.x - r.x, a = s.y - r.y; this.move(l, a); }, ze = function(t) { this.clearSelection(), t && (t = JSON.parse(JSON.stringify(t)), this.nodeData = t.nodeData, this.arrows = t.arrows || [], this.summaries = t.summaries || [], t.theme && this.changeTheme(t.theme)), pt(this.nodeData), this.layout(), this.linkDiv(); }, Ve = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, cancelFocus: Ie, clearSelection: Se, disableEdit: De, enableEdit: ke, expandNode: Ge, expandNodeAll: Re, focusNode: He, getData: Le, getDataString: Te, initLeft: Oe, initRight: Be, initSide: Ye, install: Ae, move: Ne, refresh: ze, scale: Me, scaleFit: $e, scrollIntoView: be, selectNode: xe, selectNodes: Ce, setLocale: We, toCenter: Pe, unselectNodes: Ee }, Symbol.toStringTag, { value: "Module" })), Xe = function(t) { return { dom: t, moved: !1, // differentiate click and move pointerdown: !1, lastX: 0, lastY: 0, handlePointerMove(e) { if (this.pointerdown) { this.moved = !0; const n = e.clientX - this.lastX, o = e.clientY - this.lastY; this.lastX = e.clientX, this.lastY = e.clientY, this.cb && this.cb(n, o); } }, handlePointerDown(e) { e.button === 0 && (this.pointerdown = !0, this.lastX = e.clientX, this.lastY = e.clientY, this.dom.setPointerCapture(e.pointerId)); }, handleClear(e) { this.pointerdown = !1, e.pointerId !== void 0 && this.dom.releasePointerCapture(e.pointerId); }, cb: null, init(e, n) { this.cb = n, this.handleClear = this.handleClear.bind(this), this.handlePointerMove = this.handlePointerMove.bind(this), this.handlePointerDown = this.handlePointerDown.bind(this), this.destroy = kt([ { dom: e, evt: "pointermove", func: this.handlePointerMove }, { dom: e, evt: "pointerleave", func: this.handleClear }, { dom: e, evt: "pointerup", func: this.handleClear }, { dom: this.dom, evt: "pointerdown", func: this.handlePointerDown } ]); }, destroy: null, clear() { this.moved = !1, this.pointerdown = !1; } }; }, Ct = { create: Xe }, Fe = "#4dc4ff"; function Ot(t, e, n, o, s, i, r, l) { return { x: t / 8 + n * 3 / 8 + s * 3 / 8 + r / 8, y: e / 8 + o * 3 / 8 + i * 3 / 8 + l / 8 }; } function je(t, e, n) { t && (t.dataset.x = e.toString(), t.dataset.y = n.toString(), it(t)); } function J(t, e, n, o, s) { k(t, { x1: e + "", y1: n + "", x2: o + "", y2: s + "" }); } function Et(t, e, n, o, s, i, r, l, a, d) { const h = `M ${e} ${n} C ${o} ${s} ${i} ${r} ${l} ${a}`; if (t.line.setAttribute("d", h), d.style) { const u = d.style; u.stroke && t.line.setAttribute("stroke", u.stroke), u.strokeWidth && t.line.setAttribute("stroke-width", String(u.strokeWidth)), u.strokeDasharray && t.line.setAttribute("stroke-dasharray", u.strokeDasharray), u.strokeLinecap && t.line.setAttribute("stroke-linecap", u.strokeLinecap), u.opacity !== void 0 && t.line.setAttribute("opacity", String(u.opacity)); } const f = t.querySelectorAll('path[stroke="transparent"]'); f.length > 0 && f[0].setAttribute("d", h); const p = et(i, r, l, a); if (p) { const u = `M ${p.x1} ${p.y1} L ${l} ${a} L ${p.x2} ${p.y2}`; if (t.arrow1.setAttribute("d", u), f.length > 1 && f[1].setAttribute("d", u), d.style) { const m = d.style; m.stroke && t.arrow1.setAttribute("stroke", m.stroke), m.strokeWidth && t.arrow1.setAttribute("stroke-width", String(m.strokeWidth)), m.strokeLinecap && t.arrow1.setAttribute("stroke-linecap", m.strokeLinecap), m.opacity !== void 0 && t.arrow1.setAttribute("opacity", String(m.opacity)); } } if (d.bidirectional) { const u = et(o, s, e, n); if (u) { const m = `M ${u.x1} ${u.y1} L ${e} ${n} L ${u.x2} ${u.y2}`; if (t.arrow2.setAttribute("d", m), f.length > 2 && f[2].setAttribute("d", m), d.style) { const w = d.style; w.stroke && t.arrow2.setAttribute("stroke", w.stroke), w.strokeWidth && t.arrow2.setAttribute("stroke-width", String(w.strokeWidth)), w.strokeLinecap && t.arrow2.setAttribute("stroke-linecap", w.strokeLinecap), w.opacity !== void 0 && t.arrow2.setAttribute("opacity", String(w.opacity)); } } } const { x: v, y } = Ot(e, n, o, s, i, r, l, a); if (t.labelEl && je(t.labelEl, v, y), d.style?.labelColor) { const u = t.labelEl; u && (u.style.color = d.style.labelColor); } tn(t); } function ot(t, e, n) { const { offsetLeft: o, offsetTop: s } = O(t.nodes, e), i = e.offsetWidth, r = e.offsetHeight, l = o + i / 2, a = s + r / 2, d = l + n.x, h = a + n.y; return { w: i, h: r, cx: l, cy: a, ctrlX: d, ctrlY: h }; } function V(t) { let e, n; const o = (t.cy - t.ctrlY) / (t.ctrlX - t.cx); return o > t.h / t.w || o < -t.h / t.w ? t.cy - t.ctrlY < 0 ? (e = t.cx - t.h / 2 / o, n = t.cy + t.h / 2) : (e = t.cx + t.h / 2 / o, n = t.cy - t.h / 2) : t.cx - t.ctrlX < 0 ? (e = t.cx + t.w / 2, n = t.cy - t.w * o / 2) : (e = t.cx - t.w / 2, n = t.cy + t.w * o / 2), { x: e, y: n }; } const mt = function(t, e, n, o, s) { if (!e || !n) return; const i = ot(t, e, o.delta1), r = ot(t, n, o.delta2), { x: l, y: a } = V(i), { ctrlX: d, ctrlY: h } = i, { ctrlX: f, ctrlY: p } = r, { x: v, y } = V(r), u = et(f, p, v, y); if (!u) return; const m = `M ${u.x1} ${u.y1} L ${v} ${y} L ${u.x2} ${u.y2}`; let w = ""; if (o.bidirectional) { const N = et(d, h, l, a); if (!N) return; w = `M ${N.x1} ${N.y1} L ${l} ${a} L ${N.x2} ${N.y2}`; } const b = se(`M ${l} ${a} C ${d} ${h} ${f} ${p} ${v} ${y}`, m, w, o.style), { x: C, y: S } = Ot(l, a, d, h, f, p, v, y), T = o.style?.labelColor || "rgb(235, 95, 82)", D = "arrow-" + o.id; b.id = D; const L = t.markdown ? t.markdown(o.label, o) : o.label, M = ht(L, C, S, { anchor: "middle", color: T, dataType: "arrow", svgId: D }); b.labelEl = M, b.arrowObj = o, b.dataset.linkid = o.id, t.labelContainer.appendChild(M), t.linkSvgGroup.appendChild(b), it(M), s || (t.arrows.push(o), t.currentArrow = b, Bt(t, o, i, r)); }, qe = function(t, e, n = {}) { const o = { id: _(), label: "Custom Link", from: t.nodeObj.id, to: e.nodeObj.id, delta1: { x: t.offsetWidth / 2 + 100, y: 0 }, delta2: { x: e.offsetWidth / 2 + 100, y: 0 }, ...n }; mt(this, t, e, o), this.bus.fire("operation", { name: "createArrow", obj: o }); }, _e = function(t) { rt(this); const e = { ...t, id: _() }; mt(this, this.findEle(e.from), this.findEle(e.to), e), this.bus.fire("operation", { name: "createArrow", obj: e }); }, Ue = function(t) { let e; if (t ? e = t : e = this.currentArrow, !e) return; rt(this); const n = e.arrowObj.id; this.arrows = this.arrows.filter((o) => o.id !== n), e.labelEl?.remove(), e.remove(), this.bus.fire("operation", { name: "removeArrow", obj: { id: n } }); }, Ke = function(t) { this.currentArrow = t; const e = t.arrowObj, n = this.findEle(e.from), o = this.findEle(e.to), s = ot(this, n, e.delta1), i = ot(this, o, e.delta2); Bt(this, e, s, i); }, Je = function() { rt(this), this.currentArrow = null; }, at = function(t, e) { const n = document.createElementNS(I, "path"); return k(n, { d: t, stroke: e, fill: "none", "stroke-width": "6", "stroke-linecap": "round", "stroke-linejoin": "round" }), n; }, Qe = function(t, e) { const n = document.createElementNS(I, "g"); n.setAttribute("class", "arrow-highlight"), n.setAttribute("opacity", "0.45"); const o = at(t.line.getAttribute("d"), e); n.appendChild(o); const s = at(t.arrow1.getAttribute("d"), e); if (n.appendChild(s), t.arrow2.getAttribute("d")) { const i = at(t.arrow2.getAttribute("d"), e); n.appendChild(i); } t.insertBefore(n, t.firstChild); }, Ze = function(t) { const e = t.querySelector(".arrow-highlight"); e && e.remove(); }, tn = function(t) { const e = t.querySelector(".arrow-highlight"); if (!e) return; const n = e.querySelectorAll("path"); n.length >= 1 && n[0].setAttribute("d", t.line.getAttribute("d")), n.length >= 2 && n[1].setAttribute("d", t.arrow1.getAttribute("d")), n.length >= 3 && t.arrow2.getAttribute("d") && n[2].setAttribute("d", t.arrow2.getAttribute("d")); }, rt = function(t) { t.helper1?.destroy(), t.helper2?.destroy(), t.linkController.style.display = "none", t.P2.style.display = "none", t.P3.style.display = "none", t.currentArrow && Ze(t.currentArrow); }, Bt = function(t, e, n, o) { const { linkController: s, P2: i, P3: r, line1: l, line2: a, nodes: d, map: h, currentArrow: f, bus: p } = t; if (!f) return; s.style.display = "initial", i.st