mind-elixir
Version:
Mind elixir is a free open source mind map core.
104 lines (103 loc) • 3.94 kB
JavaScript
//#region src/types/index.ts
var e = {
LHS: "lhs",
RHS: "rhs",
DOWN: "down"
}, t = (e) => `<div class="map-container"><div class="map-canvas">${e}</div></div>`, n = function(e, t = {}) {
let { direction: n = 2 } = t, r = (e) => {
let t = {
id: e.id,
topic: e.topic,
direction: e.direction,
style: e.style,
tags: e.tags,
icons: e.icons,
hyperLink: e.hyperLink,
expanded: e.expanded,
image: e.image,
branchColor: e.branchColor,
dangerouslySetInnerHTML: e.dangerouslySetInnerHTML,
note: e.note
};
return e.children && e.children.length > 0 && (t.children = e.children.map(r)), t;
}, i = r(e), a = e.children || [], o = [], s = [];
if (n === 2) {
let e = 0, t = 0;
a.forEach((n) => {
let i = r(n);
n.direction === 0 ? (i.direction = 0, o.push(i), e += 1) : n.direction === 1 ? (i.direction = 1, s.push(i), t += 1) : e <= t ? (i.direction = 0, o.push(i), e += 1) : (i.direction = 1, s.push(i), t += 1);
});
} else n === 0 ? a.forEach((e) => {
let t = r(e);
t.direction = 0, o.push(t);
}) : a.forEach((e) => {
let t = r(e);
t.direction = 1, s.push(t);
});
return {
root: i,
leftNodes: o,
rightNodes: s,
direction: n
};
}, r = function(n, r = {}) {
let { className: a = "" } = r, o = (e, t = !1) => {
let n = `me${e.id}`, a = "";
if (e.style) {
let t = [];
e.style.color && t.push(`color: ${e.style.color}`), e.style.background && t.push(`background: ${e.style.background}`), e.style.fontSize && t.push(`font-size: ${e.style.fontSize}px`), e.style.fontWeight && t.push(`font-weight: ${e.style.fontWeight}`), t.length > 0 && (a = ` style="${t.join("; ")}"`);
}
let o = "";
if (e.dangerouslySetInnerHTML) o = e.dangerouslySetInnerHTML;
else {
if (o = i(e.topic), e.tags && e.tags.length > 0) {
let t = e.tags.map((e) => {
if (typeof e == "string") return `<span class="me-tag">${i(e)}</span>`;
{
let t = "me-tag";
e.className && (t += ` ${e.className}`);
let n = "";
if (e.style) {
let t = Object.entries(e.style).filter(([e, t]) => t != null && t !== "").map(([e, t]) => `${e.replace(/([A-Z])/g, "-$1").toLowerCase()}: ${t}`);
t.length > 0 && (n = ` style="${t.join("; ")}"`);
}
return `<span class="${t}"${n}>${i(e.text)}</span>`;
}
}).join("");
o += t;
}
if (e.icons && e.icons.length > 0) {
let t = e.icons.map((e) => `<span class="me-icon">${e}</span>`).join("");
o += t;
}
if (e.image) {
let { url: t, width: n, height: a, fit: s = "cover" } = e.image, c = r.imageProxy ? r.imageProxy(t) : t;
o += `<img src="${i(c)}" width="${n}" height="${a}" style="object-fit: ${s}" alt="" />`;
}
}
let c = `<div class="me-tpc" data-nodeid="${n}"${a}>${o}</div>`;
if (t) return `<div class="me-root">${c}</div>`;
let l = "";
return e.children && e.children.length > 0 && e.expanded !== !1 && (l = `<div class="me-children">${e.children.map((e) => s(e)).join("")}</div>`), `<div class="me-wrapper">${`<div class="me-parent">${c}</div>`}${l}</div>`;
}, s = (e) => o(e, !1), c = o(n.root, !0), l = n.leftNodes.map((e) => s(e)).join(""), u = n.rightNodes.map((e) => s(e)).join(""), d = `<div class="me-main ${e.LHS}">${l}</div>`, f = `<div class="me-main ${e.RHS}">${u}</div>`;
return t(`<div class="${["me-nodes", a].filter(Boolean).join(" ")}">${d}${c}${f}</div>`);
};
function i(e) {
let t = typeof document < "u" ? document.createElement("div") : null;
return t ? (t.textContent = e, t.innerHTML) : e.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
var a = function(e) {
return JSON.stringify(e, null, 2);
}, o = function(e, t, n = {}) {
return {
nodeData: e,
layoutResult: t,
options: {
direction: t.direction,
...n
},
timestamp: Date.now()
};
};
//#endregion
export { o as getHydrationData, a as getSSRData, n as layoutSSR, r as renderSSRHTML };