@xiangfa/mindmap 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +534 -0
  2. package/README.zh-CN.md +534 -0
  3. package/dist/MindMap.d.ts +3 -0
  4. package/dist/components/MindMapContextMenu.d.ts +20 -0
  5. package/dist/components/MindMapControls.d.ts +16 -0
  6. package/dist/components/MindMapNode.d.ts +32 -0
  7. package/dist/components/icons.d.ts +8 -0
  8. package/dist/esm/MindMap2.js +713 -0
  9. package/dist/esm/components/MindMapContextMenu.js +123 -0
  10. package/dist/esm/components/MindMapControls.js +114 -0
  11. package/dist/esm/components/MindMapNode.js +588 -0
  12. package/dist/esm/components/icons.js +45 -0
  13. package/dist/esm/hooks/useDrag.js +346 -0
  14. package/dist/esm/hooks/useNewNodeAnimation.js +20 -0
  15. package/dist/esm/hooks/useNodeEdit.js +57 -0
  16. package/dist/esm/hooks/usePanZoom.js +85 -0
  17. package/dist/esm/hooks/useTheme.js +16 -0
  18. package/dist/esm/index.js +14 -0
  19. package/dist/esm/logo.svg +9 -0
  20. package/dist/esm/plugins/cross-link.js +65 -0
  21. package/dist/esm/plugins/dotted-line.js +23 -0
  22. package/dist/esm/plugins/folding.js +20 -0
  23. package/dist/esm/plugins/front-matter.js +19 -0
  24. package/dist/esm/plugins/index.js +19 -0
  25. package/dist/esm/plugins/latex.js +132 -0
  26. package/dist/esm/plugins/multi-line.js +39 -0
  27. package/dist/esm/plugins/runner.js +128 -0
  28. package/dist/esm/plugins/tags.js +55 -0
  29. package/dist/esm/style.css +2 -0
  30. package/dist/esm/utils/export.js +50 -0
  31. package/dist/esm/utils/i18n.js +61 -0
  32. package/dist/esm/utils/inline-markdown.js +189 -0
  33. package/dist/esm/utils/layout.js +208 -0
  34. package/dist/esm/utils/markdown.js +288 -0
  35. package/dist/esm/utils/theme.js +119 -0
  36. package/dist/esm/utils/tree-ops.js +136 -0
  37. package/dist/hooks/useDrag.d.ts +40 -0
  38. package/dist/hooks/useNewNodeAnimation.d.ts +2 -0
  39. package/dist/hooks/useNodeEdit.d.ts +17 -0
  40. package/dist/hooks/usePanZoom.d.ts +26 -0
  41. package/dist/hooks/useTheme.d.ts +3 -0
  42. package/dist/index.d.ts +16 -0
  43. package/dist/logo.svg +9 -0
  44. package/dist/mindmap.umd.cjs +24 -0
  45. package/dist/plugins/cross-link.d.ts +2 -0
  46. package/dist/plugins/dotted-line.d.ts +2 -0
  47. package/dist/plugins/folding.d.ts +2 -0
  48. package/dist/plugins/front-matter.d.ts +2 -0
  49. package/dist/plugins/index.d.ts +11 -0
  50. package/dist/plugins/latex.d.ts +20 -0
  51. package/dist/plugins/multi-line.d.ts +2 -0
  52. package/dist/plugins/runner.d.ts +30 -0
  53. package/dist/plugins/tags.d.ts +2 -0
  54. package/dist/plugins/types.d.ts +78 -0
  55. package/dist/style.css +2 -0
  56. package/dist/types.d.ts +105 -0
  57. package/dist/utils/export.d.ts +18 -0
  58. package/dist/utils/i18n.d.ts +22 -0
  59. package/dist/utils/inline-markdown.d.ts +66 -0
  60. package/dist/utils/layout.d.ts +14 -0
  61. package/dist/utils/markdown.d.ts +20 -0
  62. package/dist/utils/theme.d.ts +62 -0
  63. package/dist/utils/tree-ops.d.ts +36 -0
  64. package/package.json +65 -0
@@ -0,0 +1,189 @@
1
+ //#region src/components/MindMap/utils/inline-markdown.ts
2
+ var e = "!\\[([^\\]]*)\\]\\(([^)]+)\\)|\\[([^\\]]+)\\]\\(([^)]+)\\)|`([^`]+)`|\\*\\*(.+?)\\*\\*|\\*(.+?)\\*|~~(.+?)~~|==(.+?)==";
3
+ function t(t, r) {
4
+ let i = [], a = e, o = [];
5
+ if (r && r.length > 0) {
6
+ let e = [];
7
+ for (let t of r) if (t.inlineTokenPattern) {
8
+ let { pattern: n, priority: r } = t.inlineTokenPattern();
9
+ e.push({
10
+ plugin: t,
11
+ pattern: n,
12
+ priority: r
13
+ });
14
+ }
15
+ e.sort((e, t) => e.priority - t.priority);
16
+ let t = 0;
17
+ for (let r of e) {
18
+ let e = n(r.pattern);
19
+ o.push({
20
+ plugin: r.plugin,
21
+ groupOffset: t,
22
+ pattern: r.pattern
23
+ }), t += e;
24
+ }
25
+ o.length > 0 && (a = o.map((e) => e.pattern).join("|") + "|!\\[([^\\]]*)\\]\\(([^)]+)\\)|\\[([^\\]]+)\\]\\(([^)]+)\\)|`([^`]+)`|\\*\\*(.+?)\\*\\*|\\*(.+?)\\*|~~(.+?)~~|==(.+?)==");
26
+ }
27
+ let s = new RegExp(a, "g"), c = o.reduce((e, t) => e + n(t.pattern), 0), l = 0, u;
28
+ for (; (u = s.exec(t)) !== null;) {
29
+ u.index > l && i.push({
30
+ type: "text",
31
+ content: t.slice(l, u.index)
32
+ });
33
+ let e = !1;
34
+ if (o.length > 0) for (let t of o) {
35
+ let r = t.groupOffset + 1, a = n(t.pattern), o = !1;
36
+ for (let e = r; e < r + a; e++) if (u[e] !== void 0) {
37
+ o = !0;
38
+ break;
39
+ }
40
+ if (o && t.plugin.createInlineToken) {
41
+ let n = t.plugin.createInlineToken(u, t.groupOffset);
42
+ if (n) {
43
+ i.push(n), e = !0;
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ if (!e) {
49
+ let e = c, t = (t) => u[e + t];
50
+ t(1) !== void 0 || t(2) !== void 0 ? i.push({
51
+ type: "image",
52
+ alt: t(1) ?? "",
53
+ url: t(2)
54
+ }) : t(3) === void 0 ? t(5) === void 0 ? t(6) === void 0 ? t(7) === void 0 ? t(8) === void 0 ? t(9) !== void 0 && i.push({
55
+ type: "highlight",
56
+ content: t(9)
57
+ }) : i.push({
58
+ type: "strikethrough",
59
+ content: t(8)
60
+ }) : i.push({
61
+ type: "italic",
62
+ content: t(7)
63
+ }) : i.push({
64
+ type: "bold",
65
+ content: t(6)
66
+ }) : i.push({
67
+ type: "code",
68
+ content: t(5)
69
+ }) : i.push({
70
+ type: "link",
71
+ text: t(3),
72
+ url: t(4)
73
+ });
74
+ }
75
+ l = u.index + u[0].length;
76
+ }
77
+ return l < t.length && i.push({
78
+ type: "text",
79
+ content: t.slice(l)
80
+ }), i.length === 0 && i.push({
81
+ type: "text",
82
+ content: t
83
+ }), i;
84
+ }
85
+ function n(e) {
86
+ let t = 0;
87
+ for (let n = 0; n < e.length; n++) {
88
+ if (e[n] === "\\") {
89
+ n++;
90
+ continue;
91
+ }
92
+ e[n] === "(" && e[n + 1] !== "?" && t++;
93
+ }
94
+ return t;
95
+ }
96
+ function r(e) {
97
+ return e.replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/\*\*(.+?)\*\*/g, "$1").replace(/\*(.+?)\*/g, "$1").replace(/~~(.+?)~~/g, "$1").replace(/==(.+?)==/g, "$1").replace(/\$\$(.+?)\$\$/g, "$1").replace(/\$([^$]+?)\$/g, "$1");
98
+ }
99
+ var i = "'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace", a = null;
100
+ function o() {
101
+ return a ||= document.createElement("canvas").getContext("2d"), a;
102
+ }
103
+ function s(e, t, n, r) {
104
+ let i = o();
105
+ return i.font = `${n} ${t}px ${r}`, i.measureText(e).width;
106
+ }
107
+ function c(e, t, n, r) {
108
+ let a = [], o = 0;
109
+ for (let c of e) {
110
+ let e;
111
+ switch (c.type) {
112
+ case "bold":
113
+ e = s(c.content, t, 700, r);
114
+ break;
115
+ case "code":
116
+ e = s(c.content, t * .88, 400, i);
117
+ break;
118
+ case "link":
119
+ e = s(c.text, t, n, r);
120
+ break;
121
+ case "image":
122
+ e = s(`[${c.alt || "image"}]`, t, n, r);
123
+ break;
124
+ case "latex-inline":
125
+ case "latex-block":
126
+ e = s(c.content, t * .9, n, i);
127
+ break;
128
+ default:
129
+ e = s("content" in c ? c.content : "", t, n, r);
130
+ break;
131
+ }
132
+ a.push({
133
+ token: c,
134
+ x: o,
135
+ width: e
136
+ }), o += e;
137
+ }
138
+ return a;
139
+ }
140
+ function l(e) {
141
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
142
+ }
143
+ function u(e, n, r, i, a, o, s, l, u, p, m) {
144
+ let h = c(t(e, l), n, r, i), g = h.length > 0 ? h[h.length - 1].x + h[h.length - 1].width : 0, _ = n * .85, v = o ? _ + (o ? 4 : 0) : 0, y = n * .7, b = s ? 4 : 0, x = s ? y + b : 0, S = -(v + g + x) / 2, C = S + v, w = [];
145
+ o && (w.push(`<g transform="translate(${S}, ${-_ / 2})">`), w.push(f(o, _)), w.push("</g>"));
146
+ let T = -n / 2 - 2, E = n + 4;
147
+ for (let e of h) e.token.type === "code" ? w.push(`<rect x="${C + e.x - 2}" y="${T}" width="${e.width + 4}" height="${E}" rx="3" fill="rgba(128,128,128,0.12)"/>`) : e.token.type === "highlight" && w.push(`<rect x="${C + e.x - 1}" y="${T}" width="${e.width + 2}" height="${E}" rx="2" fill="${p || "rgba(255,213,79,0.3)"}"/>`);
148
+ w.push(`<text text-anchor="start" dominant-baseline="central" x="${C}" fill="${a}" font-size="${n}" font-weight="${r}" font-family="${i}">`);
149
+ for (let e of h) w.push(d(e.token, l, u, m));
150
+ return w.push("</text>"), s && w.push(`<text x="${C + g + b}" text-anchor="start" dominant-baseline="central" font-size="${y}" opacity="0.5">💬</text>`), w.join("");
151
+ }
152
+ function d(e, t, n, r) {
153
+ switch (e.type) {
154
+ case "bold": return `<tspan font-weight="700">${l(e.content)}</tspan>`;
155
+ case "italic": return `<tspan font-style="italic">${l(e.content)}</tspan>`;
156
+ case "strikethrough": return `<tspan text-decoration="line-through" opacity="0.6">${l(e.content)}</tspan>`;
157
+ case "code": return `<tspan font-family="${i}" font-size="0.88em">${l(e.content)}</tspan>`;
158
+ case "highlight": return `<tspan fill="${n || "#FFEB3B"}">${l(e.content)}</tspan>`;
159
+ case "link": return `<a href="${l(e.url)}" target="_blank"><tspan fill="#2563EB" text-decoration="underline">${l(e.text)}</tspan></a>`;
160
+ case "image": return `<tspan font-style="italic">[${l(e.alt || "image")}]</tspan>`;
161
+ case "latex-inline":
162
+ case "latex-block":
163
+ if (t) {
164
+ for (let n of t) if (n.exportInlineToken) {
165
+ let t = n.exportInlineToken({
166
+ token: e,
167
+ x: 0,
168
+ width: 0
169
+ }, r);
170
+ if (t) return t;
171
+ }
172
+ }
173
+ return `<tspan font-family="${i}" font-style="italic" font-size="0.9em">${l(e.content)}</tspan>`;
174
+ default: return l(e.content);
175
+ }
176
+ }
177
+ function f(e, t) {
178
+ return e === "done" ? `<rect x="0" y="0" width="${t}" height="${t}" rx="${t * .2}" fill="#22C55E"/><path d="M${t * .28} ${t * .5}L${t * .44} ${t * .66}L${t * .72} ${t * .34}" stroke="white" stroke-width="${t * .13}" stroke-linecap="round" stroke-linejoin="round" fill="none"/>` : e === "doing" ? `<rect x="0" y="0" width="${t}" height="${t}" rx="${t * .2}" fill="none" stroke="#FBBF24" stroke-width="${t * .1}"/><rect x="${t * .25}" y="${t * .25}" width="${t * .5}" height="${t * .5}" rx="${t * .1}" fill="#FBBF24" opacity="0.6"/>` : `<rect x="0" y="0" width="${t}" height="${t}" rx="${t * .2}" fill="none" stroke="#999" stroke-width="${t * .1}" opacity="0.4"/>`;
179
+ }
180
+ function p(e, n, r, i, a, o, s, l, u, f) {
181
+ let p = c(t(e, s), n, r, i), m = -(p.length > 0 ? p[p.length - 1].x + p[p.length - 1].width : 0) / 2, h = [], g = o - n / 2 - 2, _ = n + 4;
182
+ for (let e of p) e.token.type === "code" ? h.push(`<rect x="${m + e.x - 2}" y="${g}" width="${e.width + 4}" height="${_}" rx="3" fill="rgba(128,128,128,0.12)"/>`) : e.token.type === "highlight" && h.push(`<rect x="${m + e.x - 1}" y="${g}" width="${e.width + 2}" height="${_}" rx="2" fill="${u || "rgba(255,213,79,0.3)"}"/>`);
183
+ let v = f === void 0 ? "" : ` opacity="${f}"`;
184
+ h.push(`<text x="${m}" y="${o}" text-anchor="start" dominant-baseline="central" fill="${a}" font-size="${n}" font-weight="${r}" font-family="${i}"${v}>`);
185
+ for (let e of p) h.push(d(e.token, s, l));
186
+ return h.push("</text>"), h.join("");
187
+ }
188
+ //#endregion
189
+ export { u as buildSvgNodeTextString, p as buildSvgTextLineString, c as computeTokenLayouts, l as escapeXml, t as parseInlineMarkdown, r as stripInlineMarkdown };
@@ -0,0 +1,208 @@
1
+ import { BRANCH_COLORS as e, THEME as t } from "./theme.js";
2
+ import { stripInlineMarkdown as n } from "./inline-markdown.js";
3
+ import { runAdjustNodeSize as r, runFilterChildren as i, runGenerateExtraEdges as a, runTransformEdge as o, runTransformNodeColor as s } from "../plugins/runner.js";
4
+ //#region src/components/MindMap/utils/layout.ts
5
+ var c = null;
6
+ function l() {
7
+ return c ||= document.createElement("canvas").getContext("2d"), c;
8
+ }
9
+ function u(e, n, r, i) {
10
+ let a = l();
11
+ return a.font = `${r} ${n}px ${i || t.root.fontFamily}`, a.measureText(e).width;
12
+ }
13
+ var d = 4, f = 20;
14
+ function p(e, t, r, i, a) {
15
+ let o = u(n(e), t, r);
16
+ return i && (o += t * .9 + d), a && (o += f), o;
17
+ }
18
+ function m(n, a, o, c, l, u, d) {
19
+ let f = a === 0, h = a === 1, g = f ? t.root.fontSize : h ? t.level1.fontSize : t.node.fontSize, _ = f ? t.root.fontWeight : h ? t.level1.fontWeight : t.node.fontWeight, v = f ? t.root.paddingH : t.node.paddingH, y = f ? t.root.paddingV : t.node.paddingV, b = p(n.text, g, _, n.taskStatus, !!n.remark) + v * 2, x = g + y * 2;
20
+ if (u && u.length > 0) {
21
+ let e = r(u, n, b, x, g);
22
+ b = e.width, x = e.height;
23
+ }
24
+ let S = n.children || [];
25
+ u && u.length > 0 && d && (S = i(u, n, S, d));
26
+ let C = c;
27
+ if (u && u.length > 0) {
28
+ let e = s(u, {
29
+ id: n.id,
30
+ text: n.text,
31
+ x: 0,
32
+ y: 0,
33
+ width: b,
34
+ height: x,
35
+ color: c,
36
+ depth: a,
37
+ side: o,
38
+ parentId: l
39
+ }, n, c);
40
+ e.color && (C = e.color);
41
+ }
42
+ let w = S.map((t, r) => {
43
+ let i = f ? e[r % e.length] : C;
44
+ return m(t, a + 1, o, i, n.id, u, d);
45
+ });
46
+ return {
47
+ id: n.id,
48
+ text: n.text,
49
+ children: w,
50
+ width: b,
51
+ height: x,
52
+ depth: a,
53
+ side: o,
54
+ color: C,
55
+ x: 0,
56
+ y: 0,
57
+ subtreeHeight: 0,
58
+ parentId: l,
59
+ remark: n.remark,
60
+ taskStatus: n.taskStatus,
61
+ dottedLine: n.dottedLine,
62
+ multiLineContent: n.multiLineContent,
63
+ tags: n.tags,
64
+ anchorId: n.anchorId,
65
+ crossLinks: n.crossLinks,
66
+ collapsed: n.collapsed
67
+ };
68
+ }
69
+ function h(e) {
70
+ if (e.children.length === 0) return e.subtreeHeight = e.height, e.height;
71
+ let n = e.children.reduce((e, t) => e + h(t), 0) + (e.children.length - 1) * t.layout.verticalGap;
72
+ return e.subtreeHeight = Math.max(e.height, n), e.subtreeHeight;
73
+ }
74
+ function g(e, n, r) {
75
+ if (e.x = n, e.y = r, e.children.length === 0) return;
76
+ let i = e.side === "left" ? -1 : 1, a = r - (e.children.reduce((e, t) => e + t.subtreeHeight, 0) + (e.children.length - 1) * t.layout.verticalGap) / 2;
77
+ for (let r of e.children) {
78
+ let o = a + r.subtreeHeight / 2;
79
+ g(r, n + i * (e.width / 2 + t.layout.horizontalGap + r.width / 2), o), a += r.subtreeHeight + t.layout.verticalGap;
80
+ }
81
+ }
82
+ function _(e, t) {
83
+ t.push({
84
+ id: e.id,
85
+ text: e.text,
86
+ x: e.x,
87
+ y: e.y,
88
+ width: e.width,
89
+ height: e.height,
90
+ color: e.color,
91
+ depth: e.depth,
92
+ side: e.side,
93
+ parentId: e.parentId,
94
+ remark: e.remark,
95
+ taskStatus: e.taskStatus,
96
+ dottedLine: e.dottedLine,
97
+ multiLineContent: e.multiLineContent,
98
+ tags: e.tags,
99
+ anchorId: e.anchorId,
100
+ crossLinks: e.crossLinks,
101
+ collapsed: e.collapsed
102
+ });
103
+ for (let n of e.children) _(n, t);
104
+ }
105
+ function v(e, t, n, r, i, a, o) {
106
+ let s = o === "left" ? -1 : 1, c = e + n / 2 * s, l = t, u = r - a / 2 * s, d = i, f = c + (u - c) * .5;
107
+ return `M ${c},${l} C ${f},${l} ${f},${d} ${u},${d}`;
108
+ }
109
+ function y(e, t, n, r) {
110
+ for (let i of e.children) {
111
+ let a = {
112
+ key: `${e.id}-${i.id}`,
113
+ path: v(e.x, e.y, e.width, i.x, i.y, i.width, i.side),
114
+ color: i.color,
115
+ fromId: e.id,
116
+ toId: i.id
117
+ };
118
+ if (r && r.length > 0) {
119
+ let t = n.find((t) => t.id === e.id), s = n.find((e) => e.id === i.id);
120
+ t && s && (a = o(r, a, t, s));
121
+ }
122
+ t.push(a), y(i, t, n, r);
123
+ }
124
+ }
125
+ function b(n, r = "both", i, o, s, c, l) {
126
+ let u = s && s.length > 0 ? {
127
+ direction: r,
128
+ theme: t,
129
+ readonly: !!c,
130
+ foldOverrides: l || {}
131
+ } : void 0, d = n.children || [], f, p, v;
132
+ r === "right" ? (f = d, p = [], v = d.length) : r === "left" ? (f = [], p = d, v = 0) : (v = o ?? Math.ceil(d.length / 2), v = Math.min(Math.max(v, 0), d.length), f = d.slice(0, v), p = d.slice(v));
133
+ let b = m({
134
+ ...n,
135
+ children: []
136
+ }, 0, "root", t.root.bgColor, void 0, s, u), x = f.map((t, r) => m(t, 1, "right", i?.[t.id] ?? e[r % e.length], n.id, s, u)), S = p.map((t, a) => m(t, 1, "left", i?.[t.id] ?? e[((r === "left" ? 0 : v) + a) % e.length], n.id, s, u));
137
+ b.children = [...x, ...S];
138
+ for (let e of b.children) h(e);
139
+ b.x = 0, b.y = 0;
140
+ let C = b.children.filter((e) => e.side === "right"), w = b.children.filter((e) => e.side === "left"), T = (e, n) => {
141
+ let r = -(e.reduce((e, t) => e + t.subtreeHeight, 0) + Math.max(0, e.length - 1) * t.layout.verticalGap) / 2;
142
+ for (let i of e) {
143
+ let e = r + i.subtreeHeight / 2;
144
+ g(i, n * (b.width / 2 + t.layout.horizontalGap + i.width / 2), e), r += i.subtreeHeight + t.layout.verticalGap;
145
+ }
146
+ };
147
+ T(C, 1), T(w, -1);
148
+ let E = [], D = [];
149
+ if (_(b, E), y(b, D, E, s), s && s.length > 0 && u) {
150
+ let e = a(s, E, [n], u);
151
+ D.push(...e);
152
+ }
153
+ return {
154
+ nodes: E,
155
+ edges: D
156
+ };
157
+ }
158
+ function x(e, t = "both", n, r, i, a, o) {
159
+ if (e.length === 0) return {
160
+ nodes: [],
161
+ edges: []
162
+ };
163
+ if (e.length === 1) return b(e[0], t, n, r?.[e[0].id], i, a, o);
164
+ let s = e.map((e) => b(e, t, n, r?.[e.id], i, a, o)), c = s.map((e) => {
165
+ let t = Infinity, n = -Infinity;
166
+ for (let r of e.nodes) t = Math.min(t, r.y - r.height / 2), n = Math.max(n, r.y + r.height / 2);
167
+ return {
168
+ minY: t,
169
+ maxY: n
170
+ };
171
+ }), l = [], u = [], d = c[0].maxY;
172
+ for (let e of s[0].nodes) l.push(e);
173
+ for (let e of s[0].edges) u.push(e);
174
+ for (let e = 1; e < s.length; e++) {
175
+ let t = d + 80 - c[e].minY, n = l.length;
176
+ for (let n of s[e].nodes) l.push({
177
+ ...n,
178
+ y: n.y + t
179
+ });
180
+ for (let t of s[e].edges) {
181
+ let e = l.slice(n).find((e) => e.id === t.fromId), r = l.slice(n).find((e) => e.id === t.toId);
182
+ e && r ? u.push({
183
+ ...t,
184
+ path: v(e.x, e.y, e.width, r.x, r.y, r.width, r.side)
185
+ }) : u.push(t);
186
+ }
187
+ d = d + 80 + (c[e].maxY - c[e].minY);
188
+ }
189
+ let f = -(Math.min(...l.map((e) => e.y - e.height / 2)) + Math.max(...l.map((e) => e.y + e.height / 2))) / 2;
190
+ if (Math.abs(f) > .1) {
191
+ for (let e of l) e.y += f;
192
+ for (let e = 0; e < u.length; e++) {
193
+ let t = u[e];
194
+ if (t.isCrossLink) continue;
195
+ let n = l.find((e) => e.id === t.fromId), r = l.find((e) => e.id === t.toId);
196
+ n && r && (u[e] = {
197
+ ...t,
198
+ path: v(n.x, n.y, n.width, r.x, r.y, r.width, r.side)
199
+ });
200
+ }
201
+ }
202
+ return {
203
+ nodes: l,
204
+ edges: u
205
+ };
206
+ }
207
+ //#endregion
208
+ export { v as computeEdgePath, x as layoutMultiRoot };
@@ -0,0 +1,288 @@
1
+ import { runCollectFollowLines as e, runParseLine as t, runPostParseTree as n, runPreParseMarkdown as r, runSerializeFollowLines as i, runSerializeListMarker as a, runSerializeNodeText as o, runSerializePreamble as s, runTransformNodeData as c } from "../plugins/runner.js";
2
+ //#region src/components/MindMap/utils/markdown.ts
3
+ function l(e) {
4
+ let t = e.match(/^\[([ x\-])\]\s+(.*)/);
5
+ if (!t) return { text: e };
6
+ let n = t[1], r = t[2];
7
+ return n === " " ? {
8
+ taskStatus: "todo",
9
+ text: r
10
+ } : n === "x" ? {
11
+ taskStatus: "done",
12
+ text: r
13
+ } : n === "-" ? {
14
+ taskStatus: "doing",
15
+ text: r
16
+ } : { text: e };
17
+ }
18
+ function u(i, a) {
19
+ let o = a && a.length > 0 ? a : void 0, s = o ? {
20
+ lines: [],
21
+ frontMatter: {}
22
+ } : void 0, u = i;
23
+ o && s && (u = r(o, u, s));
24
+ let f = u.split("\n");
25
+ s && (s.lines = f);
26
+ let p = [], m = null, h = [], g = 0;
27
+ for (; g < f.length;) {
28
+ let n = f[g], r = o && s ? t(o, n, g, s) : null;
29
+ if (r) {
30
+ let t = r.text.trim(), n = r.taskStatus, { taskStatus: i, text: a } = n ? {
31
+ taskStatus: n,
32
+ text: t
33
+ } : l(t);
34
+ if (a) {
35
+ let t = {
36
+ indent: r.indent,
37
+ text: a,
38
+ taskStatus: i,
39
+ remarkLines: [],
40
+ dottedLine: r.dottedLine,
41
+ collapsed: r.collapsed
42
+ }, n = g + 1;
43
+ for (; n < f.length;) {
44
+ let e = f[n].match(/^(\s*)>\s?(.*)$/);
45
+ if (e) t.remarkLines.push(e[2]), n++;
46
+ else break;
47
+ }
48
+ if (o && s) {
49
+ let r = {
50
+ id: "temp",
51
+ text: a
52
+ }, i = e(o, f, n, r, s);
53
+ Object.assign(t, { _pluginNode: r }), n += i;
54
+ }
55
+ p.push(t), g = n;
56
+ continue;
57
+ }
58
+ }
59
+ let i = n.match(/^(\s*)[*-]\s+(.+)/);
60
+ if (i) {
61
+ let t = i[1].replace(/\t/g, " ").length, { taskStatus: n, text: r } = l(i[2].trim());
62
+ if (r) {
63
+ let i = {
64
+ indent: t,
65
+ text: r,
66
+ taskStatus: n,
67
+ remarkLines: []
68
+ }, a = g + 1;
69
+ for (; a < f.length;) {
70
+ let e = f[a].match(/^(\s*)>\s?(.*)$/);
71
+ if (e) i.remarkLines.push(e[2]), a++;
72
+ else break;
73
+ }
74
+ if (o && s) {
75
+ let t = {
76
+ id: "temp",
77
+ text: r
78
+ }, n = e(o, f, a, t, s);
79
+ Object.assign(i, { _pluginNode: t }), a += n;
80
+ }
81
+ p.push(i), g = a;
82
+ continue;
83
+ }
84
+ }
85
+ if (m === null && p.length === 0) {
86
+ let e = n.trim();
87
+ if (e) {
88
+ m = e;
89
+ let t = g + 1;
90
+ for (; t < f.length;) {
91
+ let e = f[t].match(/^(\s*)>\s?(.*)$/);
92
+ if (e) h.push(e[2]), t++;
93
+ else break;
94
+ }
95
+ g = t;
96
+ continue;
97
+ }
98
+ }
99
+ g++;
100
+ }
101
+ if (p.length === 0 && m === null) return {
102
+ id: "md-0",
103
+ text: "Root"
104
+ };
105
+ let _ = (e, t) => {
106
+ t.dottedLine && (e = {
107
+ ...e,
108
+ dottedLine: !0
109
+ }), t.collapsed && (e = {
110
+ ...e,
111
+ collapsed: !0
112
+ });
113
+ let n = t._pluginNode;
114
+ return n && n.multiLineContent && (e = {
115
+ ...e,
116
+ multiLineContent: n.multiLineContent
117
+ }), o && s && (e = c(o, e, e.text, s)), e;
118
+ };
119
+ if (m !== null) {
120
+ let e = {
121
+ id: "md-0",
122
+ text: m,
123
+ children: [],
124
+ ...h.length > 0 ? { remark: h.join("\n") } : {}
125
+ };
126
+ if (o && s && (e = c(o, e, m, s)), p.length === 0) return delete e.children, e;
127
+ let t = 2;
128
+ for (let e of p) if (e.indent > 0) {
129
+ t = e.indent;
130
+ break;
131
+ }
132
+ let r = p.map((e) => ({
133
+ level: e.indent > 0 ? Math.round(e.indent / t) : 0,
134
+ text: e.text,
135
+ taskStatus: e.taskStatus,
136
+ remarkLines: e.remarkLines,
137
+ _item: e
138
+ })), i = [[e, -1]];
139
+ for (let e = 0; e < r.length; e++) {
140
+ let { level: t, text: n, taskStatus: a, remarkLines: o, _item: s } = r[e], c = {
141
+ id: "md-tmp",
142
+ text: n,
143
+ ...a ? { taskStatus: a } : {},
144
+ ...o.length > 0 ? { remark: o.join("\n") } : {}
145
+ };
146
+ for (; i.length > 1 && i[i.length - 1][1] >= t;) i.pop();
147
+ let l = i[i.length - 1][0];
148
+ l.children ||= [], c.id = `${l.id}-${l.children.length}`, c = _(c, s), l.children.push(c), i.push([c, t]);
149
+ }
150
+ if (d(e), o && s) {
151
+ let [t] = n(o, [e], s);
152
+ return t;
153
+ }
154
+ return e;
155
+ }
156
+ let v = 2;
157
+ for (let e of p) if (e.indent > 0) {
158
+ v = e.indent;
159
+ break;
160
+ }
161
+ let y = p.map((e) => ({
162
+ level: e.indent > 0 ? Math.round(e.indent / v) : 0,
163
+ text: e.text,
164
+ taskStatus: e.taskStatus,
165
+ remarkLines: e.remarkLines,
166
+ _item: e
167
+ })), b = {
168
+ id: "md-0",
169
+ text: y[0].text,
170
+ children: [],
171
+ ...y[0].taskStatus ? { taskStatus: y[0].taskStatus } : {},
172
+ ...y[0].remarkLines.length > 0 ? { remark: y[0].remarkLines.join("\n") } : {}
173
+ };
174
+ b = _(b, y[0]._item);
175
+ let x = [[b, 0]];
176
+ for (let e = 1; e < y.length; e++) {
177
+ let { level: t, text: n, taskStatus: r, remarkLines: i, _item: a } = y[e], o = t === 0 ? 1 : t, s = {
178
+ id: "md-tmp",
179
+ text: n,
180
+ ...r ? { taskStatus: r } : {},
181
+ ...i.length > 0 ? { remark: i.join("\n") } : {}
182
+ };
183
+ for (; x.length > 1 && x[x.length - 1][1] >= o;) x.pop();
184
+ let c = x[x.length - 1][0];
185
+ c.children ||= [];
186
+ let l = c.children.length;
187
+ s.id = `${c.id}-${l}`, s = _(s, a), c.children.push(s), x.push([s, o]);
188
+ }
189
+ if (d(b), o && s) {
190
+ let [e] = n(o, [b], s);
191
+ return e;
192
+ }
193
+ return b;
194
+ }
195
+ function d(e) {
196
+ if (e.children && e.children.length === 0) delete e.children;
197
+ else if (e.children) for (let t of e.children) d(t);
198
+ }
199
+ function f(e, t = 0, n) {
200
+ let r = n && n.length > 0 ? n : void 0, s;
201
+ if (t === 0) {
202
+ let t = e.text;
203
+ r && (t = o(r, e, t)), s = t + "\n";
204
+ } else {
205
+ let n = "";
206
+ e.taskStatus && (n = {
207
+ todo: "[ ]",
208
+ doing: "[-]",
209
+ done: "[x]"
210
+ }[e.taskStatus] + " ");
211
+ let i = "- ";
212
+ r && (i = a(r, e, i));
213
+ let c = e.text;
214
+ r && (c = o(r, e, c)), s = " ".repeat(t - 1) + i + n + c + "\n";
215
+ }
216
+ if (e.remark) {
217
+ let n = t === 0 ? " " : " ".repeat(t);
218
+ for (let t of e.remark.split("\n")) s += n + "> " + t + "\n";
219
+ }
220
+ if (r) {
221
+ let n = i(r, e, t), a = t === 0 ? " " : " ".repeat(t);
222
+ for (let e of n) s += a + e + "\n";
223
+ }
224
+ if (e.children) for (let r of e.children) s += f(r, t + 1, n);
225
+ return s;
226
+ }
227
+ function p(e, t) {
228
+ let i = t && t.length > 0 ? t : void 0, a = e, o = i ? {
229
+ lines: [],
230
+ frontMatter: {}
231
+ } : void 0;
232
+ i && o && (a = r(i, a, o)), a = a.split("\n").filter((e) => e.trim().length > 0).join("\n");
233
+ let s = a.split(/\n[ \t]*\n/).filter((e) => e.trim());
234
+ if (s.length === 0) return [{
235
+ id: "md-0",
236
+ text: "Root"
237
+ }];
238
+ let c = i ? i.map((e) => ({
239
+ ...e,
240
+ preParseMarkdown: void 0
241
+ })) : void 0;
242
+ if (s.length === 1) {
243
+ let e = [u(a, c)];
244
+ return i && o ? n(i, e, o) : e;
245
+ }
246
+ let l = s.map((e, t) => {
247
+ let n = u(e, c);
248
+ return m(n, `md-${t}`), n;
249
+ });
250
+ return i && o ? n(i, l, o) : l;
251
+ }
252
+ function m(e, t) {
253
+ if (e.id = t, e.children) for (let n = 0; n < e.children.length; n++) m(e.children[n], `${t}-${n}`);
254
+ }
255
+ function h(e, t) {
256
+ let n = t && t.length > 0 ? t : void 0, r = "";
257
+ n && (r = s(n, e));
258
+ let i = e.map((e) => f(e, 0, t)).join("\n");
259
+ return r + i;
260
+ }
261
+ function g(e, t) {
262
+ let i = {
263
+ lines: [],
264
+ frontMatter: {}
265
+ }, a = r(t, e, i);
266
+ a = a.split("\n").filter((e) => e.trim().length > 0).join("\n");
267
+ let o = t.map((e) => ({
268
+ ...e,
269
+ preParseMarkdown: void 0
270
+ })), s = a.split(/\n[ \t]*\n/).filter((e) => e.trim());
271
+ if (s.length === 0) return {
272
+ roots: [{
273
+ id: "md-0",
274
+ text: "Root"
275
+ }],
276
+ frontMatter: i.frontMatter
277
+ };
278
+ let c;
279
+ return c = s.length === 1 ? [u(a, o)] : s.map((e, t) => {
280
+ let n = u(e, o);
281
+ return m(n, `md-${t}`), n;
282
+ }), c = n(t, c, i), {
283
+ roots: c,
284
+ frontMatter: i.frontMatter
285
+ };
286
+ }
287
+ //#endregion
288
+ export { u as parseMarkdownList, p as parseMarkdownMultiRoot, g as parseMarkdownWithFrontMatter, f as toMarkdownList, h as toMarkdownMultiRoot };