mind-elixir
Version:
Mind elixir is a free open source mind map core.
1,137 lines • 114 kB
JavaScript
const Se = {
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"
}
}, Ne = {
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 we(e) {
return e.replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """);
}
const he = function(e, t) {
if (t.id === e)
return t;
if (t.children && t.children.length) {
for (let n = 0; n < t.children.length; n++) {
const o = he(e, t.children[n]);
if (o) return o;
}
return null;
} else
return null;
}, X = (e, t) => {
if (e.parent = t, e.children)
for (let n = 0; n < e.children.length; n++)
X(e.children[n], e);
}, Q = (e, t, n) => {
if (e.expanded = t, e.children)
if (n === void 0 || n > 0) {
const o = n !== void 0 ? n - 1 : void 0;
e.children.forEach((i) => {
Q(i, t, o);
});
} else
e.children.forEach((o) => {
Q(o, !1);
});
};
function ke(e) {
if (e.id = q(), e.children)
for (let t = 0; t < e.children.length; t++)
ke(e.children[t]);
}
function ue(e, t, n, o) {
const i = o - t, s = e - n;
let l = Math.atan(Math.abs(i) / Math.abs(s)) / 3.14 * 180;
if (isNaN(l)) return;
s < 0 && i > 0 && (l = 180 - l), s < 0 && i < 0 && (l = 180 + l), s > 0 && i < 0 && (l = 360 - l);
const r = 12, c = 30, a = l + c, d = l - c;
return {
x1: n + Math.cos(Math.PI * a / 180) * r,
y1: o - Math.sin(Math.PI * a / 180) * r,
x2: n + Math.cos(Math.PI * d / 180) * r,
y2: o - Math.sin(Math.PI * d / 180) * r
};
}
function q() {
return ((/* @__PURE__ */ new Date()).getTime().toString(16) + Math.random().toString(16).substr(2)).substr(2, 16);
}
const vt = function() {
const e = q();
return {
topic: this.newTopicName,
id: e
};
};
function Te(e) {
return JSON.parse(
JSON.stringify(e, (n, o) => {
if (n !== "parent")
return o;
})
);
}
const F = (e, t) => {
let n = 0, o = 0;
for (; t && t !== e; )
n += t.offsetLeft, o += t.offsetTop, t = t.offsetParent;
return { offsetLeft: n, offsetTop: o };
}, A = (e, t) => {
for (const n in t)
e.setAttribute(n, t[n]);
}, de = (e) => e ? e.tagName === "ME-TPC" : !1, _e = (e) => e.filter((t) => t.nodeObj.parent).filter((t, n, o) => {
for (let i = 0; i < o.length; i++) {
if (t === o[i]) continue;
const { parent: s } = t.nodeObj;
if (s === o[i].nodeObj)
return !1;
}
return !0;
}), tt = (e) => {
const t = /translate3d\(([^,]+),\s*([^,]+)/, n = e.match(t);
return n ? { x: parseFloat(n[1]), y: parseFloat(n[2]) } : { x: 0, y: 0 };
}, nt = function(e) {
for (let t = 0; t < e.length; t++) {
const { dom: n, evt: o, func: i } = e[t];
n.addEventListener(o, i);
}
return function() {
for (let n = 0; n < e.length; n++) {
const { dom: o, evt: i, func: s } = e[n];
o.removeEventListener(i, s);
}
};
}, je = (e, t) => {
const n = e.x - t.x, o = e.y - t.y;
return Math.sqrt(n * n + o * o);
}, I = {
LHS: "lhs",
RHS: "rhs"
}, bt = (e) => {
const t = e.map.querySelectorAll(".lhs>me-wrapper>me-parent>me-tpc");
e.selectNode(t[Math.ceil(t.length / 2) - 1]);
}, wt = (e) => {
const t = e.map.querySelectorAll(".rhs>me-wrapper>me-parent>me-tpc");
e.selectNode(t[Math.ceil(t.length / 2) - 1]);
}, xt = (e) => {
e.selectNode(e.map.querySelector("me-root>me-tpc"));
}, Et = function(e, t) {
const n = t.parentElement.parentElement.parentElement.previousSibling;
if (n) {
const o = n.firstChild;
e.selectNode(o);
}
}, Ct = function(e, t) {
const n = t.parentElement.nextSibling;
if (n && n.firstChild) {
const o = n.firstChild.firstChild.firstChild;
e.selectNode(o);
}
}, He = function(e, t) {
const n = e.currentNode || e.currentNodes?.[0];
if (!n) return;
const o = n.nodeObj, i = n.offsetParent.offsetParent.parentElement;
o.parent ? i.className === t ? Ct(e, n) : o.parent?.parent ? Et(e, n) : xt(e) : t === I.LHS ? bt(e) : wt(e);
}, Ie = function(e, t) {
const n = e.currentNode;
if (!n || !n.nodeObj.parent) return;
const i = t + "Sibling", s = n.parentElement.parentElement[i];
s ? e.selectNode(s.firstChild.firstChild) : e.selectNode(n);
}, J = function(e, t, n) {
const { scaleVal: o, scaleSensitivity: i } = e;
switch (t) {
case "in":
e.scale(o + i, n);
break;
case "out":
e.scale(o - i, n);
}
};
function St(e, t) {
t = t === !0 ? {} : t;
const n = () => {
e.currentArrow ? e.removeArrow() : e.currentSummary ? e.removeSummary(e.currentSummary.summaryObj.id) : e.currentNodes && e.removeNodes(e.currentNodes);
};
let o = !1, i = null;
const s = (r) => {
const c = e.nodeData;
if (r.key === "0")
for (const a of c.children)
Q(a, !1);
if (r.key === "=")
for (const a of c.children)
Q(a, !0);
if (["1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(r.key))
for (const a of c.children)
Q(a, !0, Number(r.key) - 1);
e.refresh(), e.toCenter(), o = !1, i && (clearTimeout(i), i = null, e.container.removeEventListener("keydown", s));
}, l = {
Enter: (r) => {
r.shiftKey ? e.insertSibling("before") : r.ctrlKey || r.metaKey ? e.insertParent() : e.insertSibling("after");
},
Tab: () => {
e.addChild();
},
F1: () => {
e.toCenter();
},
F2: () => {
e.currentSummary ? e.editSummary(e.currentSummary) : e.currentArrow ? e.editArrowLabel(e.currentArrow) : e.beginEdit();
},
ArrowUp: (r) => {
if (r.altKey)
e.moveUpNode();
else {
if (r.metaKey || r.ctrlKey)
return e.initSide();
Ie(e, "previous");
}
},
ArrowDown: (r) => {
r.altKey ? e.moveDownNode() : Ie(e, "next");
},
ArrowLeft: (r) => {
if (r.metaKey || r.ctrlKey)
return e.initLeft();
He(e, I.LHS);
},
ArrowRight: (r) => {
if (r.metaKey || r.ctrlKey)
return e.initRight();
He(e, I.RHS);
},
PageUp: () => e.moveUpNode(),
PageDown: () => {
e.moveDownNode();
},
c: (r) => {
(r.metaKey || r.ctrlKey) && (e.waitCopy = e.currentNodes);
},
x: (r) => {
(r.metaKey || r.ctrlKey) && (e.waitCopy = e.currentNodes, n());
},
v: (r) => {
!e.waitCopy || !e.currentNode || (r.metaKey || r.ctrlKey) && (e.waitCopy.length === 1 ? e.copyNode(e.waitCopy[0], e.currentNode) : e.copyNodes(e.waitCopy, e.currentNode));
},
"=": (r) => {
(r.metaKey || r.ctrlKey) && J(e, "in");
},
"-": (r) => {
(r.metaKey || r.ctrlKey) && J(e, "out");
},
0: (r) => {
if (r.metaKey || r.ctrlKey) {
if (o)
return;
e.scale(1);
}
},
k: (r) => {
(r.metaKey || r.ctrlKey) && (o = !0, i && (clearTimeout(i), e.container.removeEventListener("keydown", s)), i = window.setTimeout(() => {
o = !1, i = null;
}, 2e3), e.container.addEventListener("keydown", s));
},
Delete: n,
Backspace: n,
...t
};
e.container.onkeydown = (r) => {
if (r.preventDefault(), !e.editable) return;
const c = l[r.key];
c && c(r);
};
}
const xe = document, Nt = function(e, t) {
if (!t)
return ge(e), e;
let n = e.querySelector(".insert-preview");
const o = `insert-preview ${t} show`;
return n || (n = xe.createElement("div"), e.appendChild(n)), n.className = o, e;
}, ge = function(e) {
if (!e) return;
const t = e.querySelectorAll(".insert-preview");
for (const n of t || [])
n.remove();
}, Be = function(e, t) {
for (const n of t) {
const o = n.parentElement.parentElement.contains(e);
if (!(e && e.tagName === "ME-TPC" && e !== n && !o && e.nodeObj.parent)) return !1;
}
return !0;
}, kt = function(e) {
const t = document.createElement("div");
return t.className = "mind-elixir-ghost", e.container.appendChild(t), t;
};
class Tt {
mind;
isMoving = !1;
interval = null;
speed = 20;
constructor(t) {
this.mind = t;
}
move(t, n) {
this.isMoving || (this.isMoving = !0, this.interval = setInterval(() => {
this.mind.move(t * 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 _t(e) {
return {
isDragging: !1,
insertType: null,
meet: null,
ghost: kt(e),
edgeMoveController: new Tt(e),
startX: 0,
startY: 0,
pointerId: null
};
}
const Lt = 5;
function Re(e, t, n, o = !1) {
if (e.spacePressed) return !1;
const i = n.target;
if (i?.tagName !== "ME-TPC" || !i.nodeObj.parent) return !1;
t.startX = n.clientX, t.startY = n.clientY, t.pointerId = n.pointerId, e.selection.cancel();
let s = e.currentNodes;
return s?.includes(i) || (e.selectNode(i), s = e.currentNodes), e.dragged = s, o && it(e, t), !0;
}
function ot(e, t, n) {
e.style.transform = `translate(${t + 10}px, ${n + 10}px)`, e.style.display = "block";
}
function it(e, t) {
const { dragged: n } = e;
if (!n) return;
const o = document.activeElement;
o && o.isContentEditable && o.blur(), t.isDragging = !0, n.length > 1 ? t.ghost.innerHTML = n.length + "" : t.ghost.innerHTML = n[0].innerHTML;
for (const i of n)
i.parentElement.parentElement.style.opacity = "0.5";
e.dragMoveHelper.clear();
}
function At(e, t, n) {
const { dragged: o } = e;
if (!o || t.pointerId !== n.pointerId) return;
const i = n.clientX - t.startX, s = n.clientY - t.startY, l = Math.sqrt(i * i + s * s);
if (!t.isDragging && l > Lt && it(e, t), !t.isDragging) return;
ot(t.ghost, n.clientX, n.clientY);
const r = e.container.getBoundingClientRect();
n.clientX < r.x + 50 ? t.edgeMoveController.move(1, 0) : n.clientX > r.x + r.width - 50 ? t.edgeMoveController.move(-1, 0) : n.clientY < r.y + 50 ? t.edgeMoveController.move(0, 1) : n.clientY > r.y + r.height - 50 ? t.edgeMoveController.move(0, -1) : t.edgeMoveController.stop(), ge(t.meet);
const c = 12 * e.scaleVal, a = xe.elementFromPoint(n.clientX, n.clientY - c);
if (Be(a, o)) {
t.meet = a;
const d = a.getBoundingClientRect(), u = d.y;
n.clientY > u + d.height ? t.insertType = "after" : t.insertType = "in";
} else {
const d = xe.elementFromPoint(n.clientX, n.clientY + c);
if (Be(d, o)) {
t.meet = d;
const g = d.getBoundingClientRect().y;
n.clientY < g ? t.insertType = "before" : t.insertType = "in";
} else
t.insertType = null, t.meet = null;
}
t.meet && Nt(t.meet, t.insertType);
}
function Mt(e, t, n) {
const { dragged: o } = e;
if (!(!o || t.pointerId !== n.pointerId)) {
t.edgeMoveController.stop();
for (const i of o)
i.parentElement.parentElement.style.opacity = "1";
t.ghost.style.display = "none", t.ghost.innerHTML = "", t.isDragging && t.meet && (ge(t.meet), t.insertType === "before" ? e.moveNodeBefore(o, t.meet) : t.insertType === "after" ? e.moveNodeAfter(o, t.meet) : t.insertType === "in" && e.moveNodeIn(o, t.meet)), e.dragged = null, t.isDragging = !1, t.insertType = null, t.meet = null, t.pointerId = null;
}
}
function ve(e, t) {
const { dragged: n } = e;
if (n) {
t.edgeMoveController.stop();
for (const o of n)
o.parentElement.parentElement.style.opacity = "1";
t.meet && ge(t.meet), t.ghost.style.display = "none", t.ghost.innerHTML = "", e.dragged = null, t.isDragging = !1, t.insertType = null, t.meet = null, t.pointerId = null;
}
}
function Dt(e) {
return () => {
};
}
function Pt(e) {
const { dragMoveHelper: t } = e;
let n = 0;
e.spacePressed = !1;
let o = null;
const i = /* @__PURE__ */ new Map(), s = e.draggable ? _t(e) : null;
let l = null, r = null, c = null, a = null;
const d = 500, u = 10, g = () => {
l !== null && (clearTimeout(l), l = null, r = null, c = null, a = null);
}, y = (h, w) => {
h.hasPointerCapture && h.hasPointerCapture(w) && h.releasePointerCapture(w);
}, v = (h, w) => {
const k = h.closest(".svg-label");
if (k) {
const M = k.dataset.svgId, se = k.dataset.type, ne = document.getElementById(M);
if (ne) {
if (se === "arrow")
return w ? e.editArrowLabel(ne) : e.selectArrow(ne), !0;
if (se === "summary")
return w ? e.editSummary(ne) : e.selectSummary(ne), !0;
}
}
if (h.closest(".topiclinks")) {
const M = h.closest("g");
if (M)
return w ? e.editArrowLabel(M) : e.selectArrow(M), !0;
}
if (h.closest(".summary")) {
const M = h.closest("g");
if (M)
return w ? e.editSummary(M) : e.selectSummary(M), !0;
}
return !1;
}, f = (h) => {
if (h.button !== 0) return;
if (e.helper1?.moved) {
e.helper1.clear();
return;
}
if (e.helper2?.moved) {
e.helper2.clear();
return;
}
if (t.moved) {
t.clear();
return;
}
if (s?.isDragging)
return;
const w = h.target;
if (w.tagName === "ME-EPD")
h.ctrlKey || h.metaKey ? e.expandNodeAll(w.previousSibling) : e.expandNode(w.previousSibling);
else if (w.tagName === "ME-TPC" && e.currentNodes.length > 1)
e.selectNode(w);
else if (!e.editable)
return;
v(w, !1);
}, m = (h) => {
if (!e.editable) return;
const w = h.target;
de(w) && e.beginEdit(w), v(w, !0);
}, p = (h) => {
if (h.pointerType === "mouse" || i.size > 1) return;
const w = (/* @__PURE__ */ new Date()).getTime(), k = w - n;
k < 300 && k > 0 && m(h), n = w;
}, b = (h) => {
h.code === "Space" && (e.spacePressed = !0, e.container.classList.add("space-pressed"));
}, x = (h) => {
h.code === "Space" && (e.spacePressed = !1, e.container.classList.remove("space-pressed"));
}, L = (h) => {
if (h.pointerType === "touch" && (i.set(h.pointerId, { x: h.clientX, y: h.clientY }), i.size === 2)) {
const [M, se] = Array.from(i.values());
o = je(M, se), g();
}
t.moved = !1;
const w = h.target, k = e.mouseSelectionButton === 0 ? 2 : 0;
if (s && (h.button === 0 || h.pointerType === "touch")) {
if (h.pointerType === "touch" && i.size > 1)
(s.isDragging || s.pointerId !== null) && ve(e, s);
else if (h.pointerType === "touch" && i.size === 1)
(de(w) || w.closest("me-tpc")) && (r = { x: h.clientX, y: h.clientY }, c = w, a = h.pointerId, l = window.setTimeout(() => {
Re(e, s, h, !0) && (c && c.setPointerCapture(h.pointerId), ot(s.ghost, h.clientX, h.clientY)), l = null, r = null, c = null, a = null;
}, d));
else if (h.pointerType === "mouse" && Re(e, s, h, !1)) {
w.setPointerCapture(h.pointerId);
return;
}
}
const O = e.spacePressed && h.button === 0 && h.pointerType === "mouse", Y = h.button === k && h.pointerType === "mouse" || h.pointerType === "touch";
!O && !Y || (t.x = h.clientX, t.y = h.clientY, w.className !== "circle" && w.contentEditable !== "plaintext-only" && (t.mousedown = !0, w.setPointerCapture(h.pointerId)));
}, _ = (h) => {
if (h.pointerType === "touch" && i.has(h.pointerId)) {
if (i.set(h.pointerId, { x: h.clientX, y: h.clientY }), l !== null && r !== null && h.pointerId === a) {
const w = h.clientX - r.x, k = h.clientY - r.y;
Math.sqrt(w * w + k * k) > u && g();
}
if (i.size >= 2) {
const [w, k] = Array.from(i.values()), O = je(w, k);
if (o == null)
o = O;
else {
const Y = O - o;
Math.abs(Y) > 8 && (Y > 0 ? J(e, "in", {
x: (w.x + k.x) / 2,
y: (w.y + k.y) / 2
}) : J(e, "out", {
x: (w.x + k.x) / 2,
y: (w.y + k.y) / 2
}), o = O);
}
return;
}
}
if (!(s && s.pointerId !== null && (At(e, s, h), s.isDragging))) {
if (h.target.contentEditable !== "plaintext-only" || e.spacePressed && t.mousedown) {
const w = h.clientX - t.x, k = h.clientY - t.y;
t.onMove(w, k);
}
t.x = h.clientX, t.y = h.clientY;
}
}, C = (h) => {
if (h.pointerType === "touch" && (i.delete(h.pointerId), i.size < 2 && (o = null), g()), s && s.pointerId !== null) {
const w = s.isDragging;
if (Mt(e, s, h), y(h.target, h.pointerId), w)
return;
}
t.mousedown && (y(h.target, h.pointerId), t.clear());
}, E = () => {
g(), t.mousedown && t.clear(), s && (s.isDragging || s.pointerId !== null) && ve(e, s);
}, S = (h) => {
h.pointerType === "touch" && (i.delete(h.pointerId), i.size < 2 && (o = null), g()), s && s.pointerId === h.pointerId && ve(e, s), C(h);
}, N = (h) => {
if (h.preventDefault(), h.button !== 2 || !e.editable) return;
const w = h.target;
de(w) && !w.classList.contains("selected") && e.selectNode(w), setTimeout(() => {
e.dragMoveHelper.moved || e.bus.fire("showContextMenu", h);
}, 200);
}, D = (h) => {
h.stopPropagation(), h.preventDefault(), h.ctrlKey || h.metaKey ? h.deltaY < 0 ? J(e, "in", e.dragMoveHelper) : e.scaleVal - e.scaleSensitivity > 0 && J(e, "out", e.dragMoveHelper) : h.shiftKey ? e.move(-h.deltaY, 0) : e.move(-h.deltaX, -h.deltaY);
}, { container: T } = e;
return nt([
{ dom: T, evt: "pointerdown", func: L },
{ dom: T, evt: "pointermove", func: _ },
{ dom: T, evt: "pointerup", func: C },
{ dom: T, evt: "pointercancel", func: S },
{ dom: T, evt: "pointerdown", func: p },
{ dom: T, evt: "click", func: f },
{ dom: T, evt: "dblclick", func: m },
{ dom: T, evt: "contextmenu", func: N },
{ dom: T, evt: "wheel", func: typeof e.handleWheel == "function" ? e.handleWheel : D },
{ dom: T, evt: "blur", func: E },
{ dom: T, evt: "keydown", func: b },
{ dom: T, evt: "keyup", func: x }
]);
}
function $t() {
return {
handlers: {},
addListener: function(e, t) {
this.handlers[e] === void 0 && (this.handlers[e] = []), this.handlers[e].push(t);
},
fire: function(e, ...t) {
if (this.handlers[e] instanceof Array) {
const n = this.handlers[e];
for (let o = 0; o < n.length; o++)
n[o](...t);
}
},
removeListener: function(e, t) {
if (!this.handlers[e]) return;
const n = this.handlers[e];
if (!t)
n.length = 0;
else if (n.length)
for (let o = 0; o < n.length; o++)
n[o] === t && this.handlers[e].splice(o, 1);
}
};
}
const fe = document, Ot = function() {
this.nodes.innerHTML = "";
const e = this.createTopic(this.nodeData);
Le.call(this, e, this.nodeData), e.draggable = !1;
const t = fe.createElement("me-root");
t.appendChild(e);
const n = this.nodeData.children || [];
if (this.direction === 2) {
let o = 0, i = 0;
n.map((s) => {
s.direction === 0 ? o += 1 : s.direction === 1 ? i += 1 : o <= i ? (s.direction = 0, o += 1) : (s.direction = 1, i += 1);
});
}
jt(this, n, t);
}, jt = function(e, t, n) {
const o = fe.createElement("me-main");
o.className = I.LHS;
const i = fe.createElement("me-main");
i.className = I.RHS;
for (let s = 0; s < t.length; s++) {
const l = t[s], { grp: r } = e.createWrapper(l);
e.direction === 2 ? l.direction === 0 ? o.appendChild(r) : i.appendChild(r) : e.direction === 0 ? o.appendChild(r) : i.appendChild(r);
}
e.nodes.appendChild(o), e.nodes.appendChild(n), e.nodes.appendChild(i), e.nodes.appendChild(e.lines), e.nodes.appendChild(e.labelContainer);
}, Ht = function(e, t) {
const n = fe.createElement("me-children");
for (let o = 0; o < t.length; o++) {
const i = t[o], { grp: s } = e.createWrapper(i);
n.appendChild(s);
}
return n;
}, P = document, st = function(e, t) {
const o = (this?.el ? this.el : t || document).querySelector(`[data-nodeid="me${e}"]`);
if (!o) throw new Error(`FindEle: Node ${e} not found, maybe it's collapsed.`);
return o;
}, Le = function(e, t) {
if (e.innerHTML = "", t.style) {
const n = t.style;
for (const o in n)
e.style[o] = n[o];
}
if (t.dangerouslySetInnerHTML) {
e.innerHTML = t.dangerouslySetInnerHTML;
return;
}
if (t.image) {
const n = t.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), e.appendChild(o), e.image = o;
}
} else e.image && (e.image = void 0);
{
const n = P.createElement("span");
n.className = "text", this.markdown ? n.innerHTML = this.markdown(t.topic, t) : n.textContent = t.topic, e.appendChild(n), e.text = n;
}
if (t.hyperLink) {
const n = P.createElement("a");
n.className = "hyper-link", n.target = "_blank", n.innerText = "🔗", n.href = t.hyperLink, e.appendChild(n), e.link = n;
} else e.link && (e.link = void 0);
if (t.icons && t.icons.length) {
const n = P.createElement("span");
n.className = "icons", n.innerHTML = t.icons.map((o) => `<span>${we(o)}</span>`).join(""), e.appendChild(n), e.icons = n;
} else e.icons && (e.icons = void 0);
if (t.tags && t.tags.length) {
const n = P.createElement("div");
n.className = "tags", t.tags.forEach((o) => {
const i = P.createElement("span");
typeof o == "string" ? i.textContent = o : (i.textContent = o.text, o.className && (i.className = o.className), o.style && Object.assign(i.style, o.style)), n.appendChild(i);
}), e.appendChild(n), e.tags = n;
} else e.tags && (e.tags = void 0);
}, It = function(e, t) {
const n = P.createElement("me-wrapper"), { p: o, tpc: i } = this.createParent(e);
if (n.appendChild(o), !t && e.children && e.children.length > 0) {
const s = Ae(e.expanded);
if (o.appendChild(s), e.expanded !== !1) {
const l = Ht(this, e.children);
n.appendChild(l);
}
}
return { grp: n, top: o, tpc: i };
}, Bt = function(e) {
const t = P.createElement("me-parent"), n = this.createTopic(e);
return Le.call(this, n, e), t.appendChild(n), { p: t, tpc: n };
}, Rt = function(e) {
const t = P.createElement("me-children");
return t.append(...e), t;
}, Ft = function(e) {
const t = P.createElement("me-tpc");
return t.nodeObj = e, t.dataset.nodeid = "me" + e.id, t;
};
function rt(e) {
const t = P.createRange();
t.selectNodeContents(e);
const n = window.getSelection();
n && (n.removeAllRanges(), n.addRange(t));
}
const Yt = function(e) {
if (!e) return;
const t = P.createElement("div"), n = e.nodeObj, o = n.topic, { offsetLeft: i, offsetTop: s } = F(this.nodes, e);
this.nodes.appendChild(t), t.id = "input-box", t.textContent = o, t.contentEditable = "plaintext-only", t.spellcheck = !1;
const l = getComputedStyle(e);
t.style.cssText = `
left: ${i}px;
top: ${s}px;
min-width:${e.offsetWidth - 8}px;
color:${l.color};
font-size:${l.fontSize};
padding:${l.padding};
margin:${l.margin};
background-color:${l.backgroundColor !== "rgba(0, 0, 0, 0)" && l.backgroundColor};
border: ${l.border};
border-radius:${l.borderRadius}; `, this.direction === 0 && (t.style.right = "0"), rt(t), this.bus.fire("operation", {
name: "beginEdit",
obj: e.nodeObj
}), t.addEventListener("keydown", (r) => {
r.stopPropagation();
const c = r.key;
if (c === "Enter" || c === "Tab") {
if (r.shiftKey) return;
r.preventDefault(), t.blur(), this.container.focus();
}
}), t.addEventListener("blur", () => {
if (!t) return;
t.remove();
const r = t.textContent?.trim() || "";
r === o || r === "" || (n.topic = r, this.markdown ? e.text.innerHTML = this.markdown(n.topic, n) : e.text.textContent = r, this.linkDiv(), this.bus.fire("operation", {
name: "finishEdit",
obj: n,
origin: o
}));
});
}, Ae = function(e) {
const t = P.createElement("me-epd");
return t.expanded = e !== !1, t.className = e !== !1 ? "minus" : "", t;
}, ee = document, H = "http://www.w3.org/2000/svg", me = function(e) {
const t = e.clientWidth, n = e.clientHeight, o = e.dataset, i = Number(o.x), s = Number(o.y), l = o.anchor;
let r = i;
l === "middle" ? r = i - t / 2 : l === "end" && (r = i - t), e.style.left = `${r}px`, e.style.top = `${s - n / 2}px`, e.style.visibility = "visible";
}, Ee = function(e, t, n, o) {
const { anchor: i = "middle", color: s, dataType: l, svgId: r } = o, c = document.createElement("div");
c.className = "svg-label", c.style.color = s || "#666";
const a = "label-" + r;
return c.id = a, c.innerHTML = e, c.dataset.type = l, c.dataset.svgId = r, c.dataset.x = t.toString(), c.dataset.y = n.toString(), c.dataset.anchor = i, c;
}, lt = function(e, t, n) {
const o = ee.createElementNS(H, "path");
return A(o, {
d: e,
stroke: t || "#666",
fill: "none",
"stroke-width": n
}), o;
}, oe = function(e) {
const t = ee.createElementNS(H, "svg");
return t.setAttribute("class", e), t.setAttribute("overflow", "visible"), t;
}, Fe = function() {
const e = ee.createElementNS(H, "line");
return e.setAttribute("stroke", "#4dc4ff"), e.setAttribute("fill", "none"), e.setAttribute("stroke-width", "2"), e.setAttribute("opacity", "0.45"), e;
}, Wt = function(e, t, n, o) {
const i = ee.createElementNS(H, "g");
return [
{
name: "line",
d: e
},
{
name: "arrow1",
d: t
},
{
name: "arrow2",
d: n
}
].forEach((l, r) => {
const c = l.d, a = ee.createElementNS(H, "path"), d = {
d: c,
stroke: o?.stroke || "rgb(227, 125, 116)",
fill: "none",
"stroke-linecap": o?.strokeLinecap || "cap",
"stroke-width": String(o?.strokeWidth || "2")
};
o?.opacity !== void 0 && (d.opacity = String(o.opacity)), A(a, d), r === 0 && a.setAttribute("stroke-dasharray", o?.strokeDasharray || "8,2");
const u = ee.createElementNS(H, "path");
A(u, {
d: c,
stroke: "transparent",
fill: "none",
"stroke-width": "15"
}), i.appendChild(u), i.appendChild(a), i[l.name] = a;
}), i;
}, ct = function(e, t, n) {
if (!t) return;
const o = n.label, i = t.cloneNode(!0);
e.nodes.appendChild(i), i.id = "input-box", i.textContent = o, i.contentEditable = "plaintext-only", i.spellcheck = !1, i.style.cssText = `
left:${t.style.left};
top:${t.style.top};
max-width: 200px;
`, rt(i), e.scrollIntoView(i), i.addEventListener("keydown", (s) => {
s.stopPropagation();
const l = s.key;
if (l === "Enter" || l === "Tab") {
if (s.shiftKey) return;
s.preventDefault(), i.blur(), e.container.focus();
}
}), i.addEventListener("blur", () => {
if (!i) return;
const s = i.textContent?.trim() || "";
s === "" ? n.label = o : n.label = s, i.remove(), s !== o && (e.markdown ? t.innerHTML = e.markdown(n.label, n) : t.textContent = n.label, me(t), "parent" in n ? e.bus.fire("operation", {
name: "finishEditSummary",
obj: n
}) : e.bus.fire("operation", {
name: "finishEditArrowLabel",
obj: n
}));
});
}, zt = function(e) {
const t = this.map.querySelector("me-root"), n = t.offsetTop, o = t.offsetLeft, i = t.offsetWidth, s = t.offsetHeight, l = this.map.querySelectorAll("me-main > me-wrapper");
this.lines.innerHTML = "";
for (let r = 0; r < l.length; r++) {
const c = l[r], a = c.querySelector("me-tpc"), { offsetLeft: d, offsetTop: u } = F(this.nodes, a), g = a.offsetWidth, y = a.offsetHeight, v = c.parentNode.className, f = this.generateMainBranch({ pT: n, pL: o, pW: i, pH: s, cT: u, cL: d, cW: g, cH: y, direction: v, containerHeight: this.nodes.offsetHeight }), m = this.theme.palette, p = a.nodeObj.branchColor || m[r % m.length];
if (a.style.borderColor = p, this.lines.appendChild(lt(f, p, "3")), e && e !== c)
continue;
const b = oe("subLines"), x = c.lastChild;
x.tagName === "svg" && x.remove(), c.appendChild(b), at(this, b, p, c, v, !0);
}
this.labelContainer.innerHTML = "", this.renderArrow(), this.renderSummary(), this.bus.fire("linkDiv");
}, at = function(e, t, n, o, i, s) {
const l = o.firstChild, r = o.children[1].children;
if (r.length === 0) return;
const c = l.offsetTop, a = l.offsetLeft, d = l.offsetWidth, u = l.offsetHeight;
for (let g = 0; g < r.length; g++) {
const y = r[g], v = y.firstChild, f = v.offsetTop, m = v.offsetLeft, p = v.offsetWidth, b = v.offsetHeight, x = v.firstChild.nodeObj.branchColor || n, L = e.generateSubBranch({ pT: c, pL: a, pW: d, pH: u, cT: f, cL: m, cW: p, cH: b, direction: i, isFirst: s });
t.appendChild(lt(L, x, "2"));
const _ = v.children[1];
if (_) {
if (!_.expanded) continue;
} else
continue;
at(e, t, x, y, i);
}
}, Ye = {
addChild: "插入子节点",
addParent: "插入父节点",
addSibling: "插入同级节点",
removeNode: "删除节点",
focus: "专注",
cancelFocus: "取消专注",
moveUp: "上移",
moveDown: "下移",
link: "连接",
linkBidirectional: "双向连接",
clickTips: "请点击目标节点",
summary: "摘要"
}, We = {
cn: Ye,
zh_CN: Ye,
zh_TW: {
addChild: "插入子節點",
addParent: "插入父節點",
addSibling: "插入同級節點",
removeNode: "刪除節點",
focus: "專注",
cancelFocus: "取消專注",
moveUp: "上移",
moveDown: "下移",
link: "連接",
linkBidirectional: "雙向連接",
clickTips: "請點擊目標節點",
summary: "摘要"
},
en: {
addChild: "Add child",
addParent: "Add parent",
addSibling: "Add sibling",
removeNode: "Remove node",
focus: "Focus Mode",
cancelFocus: "Cancel Focus Mode",
moveUp: "Move up",
moveDown: "Move down",
link: "Link",
linkBidirectional: "Bidirectional Link",
clickTips: "Please click the target node",
summary: "Summary"
},
ru: {
addChild: "Добавить дочерний элемент",
addParent: "Добавить родительский элемент",
addSibling: "Добавить на этом уровне",
removeNode: "Удалить узел",
focus: "Режим фокусировки",
cancelFocus: "Отменить режим фокусировки",
moveUp: "Поднять выше",
moveDown: "Опустить ниже",
link: "Ссылка",
linkBidirectional: "Двунаправленная ссылка",
clickTips: "Пожалуйста, нажмите на целевой узел",
summary: "Описание"
},
ja: {
addChild: "子ノードを追加する",
addParent: "親ノードを追加します",
addSibling: "兄弟ノードを追加する",
removeNode: "ノードを削除",
focus: "集中",
cancelFocus: "集中解除",
moveUp: "上へ移動",
moveDown: "下へ移動",
link: "コネクト",
linkBidirectional: "双方向リンク",
clickTips: "ターゲットノードをクリックしてください",
summary: "概要"
},
pt: {
addChild: "Adicionar item filho",
addParent: "Adicionar item pai",
addSibling: "Adicionar item irmao",
removeNode: "Remover item",
focus: "Modo Foco",
cancelFocus: "Cancelar Modo Foco",
moveUp: "Mover para cima",
moveDown: "Mover para baixo",
link: "Link",
linkBidirectional: "Link bidirecional",
clickTips: "Favor clicar no item alvo",
summary: "Resumo"
},
it: {
addChild: "Aggiungi figlio",
addParent: "Aggiungi genitore",
addSibling: "Aggiungi fratello",
removeNode: "Rimuovi nodo",
focus: "Modalità Focus",
cancelFocus: "Annulla Modalità Focus",
moveUp: "Sposta su",
moveDown: "Sposta giù",
link: "Collega",
linkBidirectional: "Collegamento bidirezionale",
clickTips: "Si prega di fare clic sul nodo di destinazione",
summary: "Unisci nodi"
},
es: {
addChild: "Agregar hijo",
addParent: "Agregar padre",
addSibling: "Agregar hermano",
removeNode: "Eliminar nodo",
focus: "Modo Enfoque",
cancelFocus: "Cancelar Modo Enfoque",
moveUp: "Mover hacia arriba",
moveDown: "Mover hacia abajo",
link: "Enlace",
linkBidirectional: "Enlace bidireccional",
clickTips: "Por favor haga clic en el nodo de destino",
summary: "Resumen"
},
fr: {
addChild: "Ajout enfant",
addParent: "Ajout parent",
addSibling: "Ajout voisin",
removeNode: "Supprimer",
focus: "Cibler",
cancelFocus: "Retour",
moveUp: "Monter",
moveDown: "Descendre",
link: "Lier",
linkBidirectional: "Lien bidirectionnel",
clickTips: "Cliquer sur le noeud cible",
summary: "Annoter"
},
ko: {
addChild: "자식 추가",
addParent: "부모 추가",
addSibling: "형제 추가",
removeNode: "노드 삭제",
focus: "포커스 모드",
cancelFocus: "포커스 모드 취소",
moveUp: "위로 이동",
moveDown: "아래로 이동",
link: "연결",
linkBidirectional: "양방향 연결",
clickTips: "대상 노드를 클릭하십시오",
summary: "요약"
},
ro: {
addChild: "Adaugă sub-nod",
addParent: "Adaugă nod părinte",
addSibling: "Adaugă nod la același nivel",
removeNode: "Șterge nodul",
focus: "Focalizare",
cancelFocus: "Anulează focalizarea",
moveUp: "Mută în sus",
moveDown: "Mută în jos",
link: "Creează legătură",
linkBidirectional: "Creează legătură bidirecțională",
clickTips: "Click pe nodul țintă",
summary: "Rezumat"
}
};
function Gt(e, t) {
t = t === !0 ? {
focus: !0,
link: !0
} : t;
const n = (C) => {
const E = document.createElement("div");
return E.innerText = C, E.className = "tips", E;
}, o = (C, E, S) => {
const N = document.createElement("li");
return N.id = C, N.innerHTML = `<span>${we(E)}</span><span ${S ? 'class="key"' : ""}>${we(S)}</span>`, N;
}, i = We[e.locale] ? e.locale : "en", s = We[i], l = o("cm-add_child", s.addChild, "Tab"), r = o("cm-add_parent", s.addParent, "Ctrl + Enter"), c = o("cm-add_sibling", s.addSibling, "Enter"), a = o("cm-remove_child", s.removeNode, "Delete"), d = o("cm-fucus", s.focus, ""), u = o("cm-unfucus", s.cancelFocus, ""), g = o("cm-up", s.moveUp, "PgUp"), y = o("cm-down", s.moveDown, "Pgdn"), v = o("cm-link", s.link, ""), f = o("cm-link-bidirectional", s.linkBidirectional, ""), m = o("cm-summary", s.summary, ""), p = document.createElement("ul");
if (p.className = "menu-list", p.appendChild(l), p.appendChild(r), p.appendChild(c), p.appendChild(a), t.focus && (p.appendChild(d), p.appendChild(u)), p.appendChild(g), p.appendChild(y), p.appendChild(m), t.link && (p.appendChild(v), p.appendChild(f)), t && t.extend)
for (let C = 0; C < t.extend.length; C++) {
const E = t.extend[C], S = o(E.name, E.name, E.key || "");
p.appendChild(S), S.onclick = (N) => {
E.onclick(N);
};
}
const b = document.createElement("div");
b.className = "context-menu", b.appendChild(p), b.hidden = !0, e.container.append(b);
let x = !0;
const L = (C) => {
const E = C.target;
if (de(E)) {
E.parentElement.tagName === "ME-ROOT" ? x = !0 : x = !1, x ? (d.className = "disabled", g.className = "disabled", y.className = "disabled", r.className = "disabled", c.className = "disabled", a.className = "disabled") : (d.className = "", g.className = "", y.className = "", r.className = "", c.className = "", a.className = ""), b.hidden = !1, p.style.top = "", p.style.bottom = "", p.style.left = "", p.style.right = "";
const S = p.getBoundingClientRect(), N = p.offsetHeight, D = p.offsetWidth, T = C.clientY - S.top, R = C.clientX - S.left;
N + T > window.innerHeight ? (p.style.top = "", p.style.bottom = "0px") : (p.style.bottom = "", p.style.top = T + 15 + "px"), D + R > window.innerWidth ? (p.style.left = "", p.style.right = "0px") : (p.style.right = "", p.style.left = R + 10 + "px");
}
};
e.bus.addListener("showContextMenu", L), b.onclick = (C) => {
C.target === b && (b.hidden = !0);
}, l.onclick = () => {
e.addChild(), b.hidden = !0;
}, r.onclick = () => {
e.insertParent(), b.hidden = !0;
}, c.onclick = () => {
x || (e.insertSibling("after"), b.hidden = !0);
}, a.onclick = () => {
x || (e.removeNodes(e.currentNodes || []), b.hidden = !0);
}, d.onclick = () => {
x || (e.focusNode(e.currentNode), b.hidden = !0);
}, u.onclick = () => {
e.cancelFocus(), b.hidden = !0;
}, g.onclick = () => {
x || (e.moveUpNode(), b.hidden = !0);
}, y.onclick = () => {
x || (e.moveDownNode(), b.hidden = !0);
};
const _ = (C) => {
b.hidden = !0;
const E = e.currentNode, S = n(s.clickTips);
e.container.appendChild(S), e.map.addEventListener(
"click",
(N) => {
N.preventDefault(), S.remove();
const D = N.target;
(D.parentElement.tagName === "ME-PARENT" || D.parentElement.tagName === "ME-ROOT") && e.createArrow(E, D, C);
},
{
once: !0
}
);
};
return v.onclick = () => _(), f.onclick = () => _({ bidirectional: !0 }), m.onclick = () => {
b.hidden = !0, e.createSummary(), e.unselectNodes(e.currentNodes);
}, () => {
l.onclick = null, r.onclick = null, c.onclick = null, a.onclick = null, d.onclick = null, u.onclick = null, g.onclick = null, y.onclick = null, v.onclick = null, m.onclick = null, b.onclick = null, e.container.oncontextmenu = null;
};
}
const Kt = function(e) {
return ["createSummary", "removeSummary", "finishEditSummary"].includes(e.name) ? {
type: "summary",
value: e.obj.id
} : ["createArrow", "removeArrow", "finishEditArrowLabel"].includes(e.name) ? {
type: "arrow",
value: e.obj.id
} : ["removeNodes", "copyNodes", "moveNodeBefore", "moveNodeAfter", "moveNodeIn"].includes(e.name) ? {
type: "nodes",
value: e.objs.map((t) => t.id)
} : {
type: "nodes",
value: [e.obj.id]
};
};
function Xt(e) {
let t = [], n = -1, o = e.getData(), i = [];
e.undo = function() {
if (n > -1) {
const c = t[n];
o = c.prev, e.refresh(c.prev);
try {
c.currentTarget.type === "nodes" && (c.operation === "removeNodes" ? e.selectNodes(c.currentTarget.value.map((a) => this.findEle(a))) : e.selectNodes(c.currentSelected.map((a) => this.findEle(a))));
} catch {
} finally {
n--;
}
}
}, e.redo = function() {
if (n < t.length - 1) {
n++;
const c = t[n];
o = c.next, e.refresh(c.next);
try {
c.currentTarget.type === "nodes" && (c.operation === "removeNodes" ? e.selectNodes(c.currentSelected.map((a) => this.findEle(a))) : e.selectNodes(c.currentTarget.value.map((a) => this.findEle(a))));
} catch {
}
}
};
const s = function(c) {
if (c.name === "beginEdit") return;
t = t.slice(0, n + 1);
const a = e.getData(), d = {
prev: o,
operation: c.name,
currentSelected: i.map((u) => u.id),
currentTarget: Kt(c),
next: a
};
t.push(d), o = a, n = t.length - 1;
}, l = function(c) {
(c.metaKey || c.ctrlKey) && (c.shiftKey && c.key === "Z" || c.key === "y") ? e.redo() : (c.metaKey || c.ctrlKey) && c.key === "z" && e.undo();
}, r = function() {
i = e.currentNodes.map((c) => c.nodeObj);
};
return e.bus.addListener("operation", s), e.bus.addListener("selectNodes", r), e.container.addEventListener("keydown", l), () => {
e.bus.removeListener("operation", s), e.bus.removeListener("selectNodes", r), e.container.removeEventListener("keydown", l);
};
}
const qt = '<?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>', Vt = '<?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>', Ut = '<?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>', Jt = '<?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>', Zt = '<?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>', Qt = '<?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>', en = '<?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>', tn = {
side: qt,
left: Vt,
right: Ut,
full: Jt,
living: Zt,
zoomin: Qt,
zoomout: en
}, K = (e, t) => {
const n = document.createElement("span");
return n.id = e, n.innerHTML = tn[t], n;
};
function nn(e) {
const t = document.createElement("div"), n = K("fullscreen", "full"), o = K("toCenter", "living"), i = K("zoomout", "zoomout"), s = K("zoomin", "zoomin"), l = document.createElement("span");
return l.innerText = "100%", t.appendChild(n), t.appendChild(o), t.appendChild(i), t.appendChild(s), t.className = "mind-elixir-toolbar rb", n.onclick = () => {
document.fullscreenElement === e.el ? document.exitFullscreen() : e.el.requestFullscreen();
}, o.onclick = () => {
e.toCenter();
}, i.onclick = () => {
e.scale(e.scaleVal - e.scaleSensitivity);
}, s.onclick = () => {
e.scale(e.scaleVal + e.scaleSensitivity);
}, t;
}
function on(e) {
const t = docum