markdown-flow-ui 0.1.83-beta.20 → 0.1.83-beta.22
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.
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/hast-util-to-jsx-runtime@2.3.6/node_modules/hast-util-to-jsx-runtime/lib/index.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js +1 -1
- package/dist/_virtual/index5.js +5 -3
- package/dist/_virtual/index5.js.map +1 -1
- package/dist/_virtual/index6.js +4 -4
- package/dist/_virtual/index7.js +3 -5
- package/dist/_virtual/index7.js.map +1 -1
- package/dist/components/ContentRender/utils/split-content.js +53 -78
- package/dist/components/ContentRender/utils/split-content.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { stringify as w } from "../../../../comma-separated-tokens@2.0.3/node_mo
|
|
|
2
2
|
import { ok as u } from "../../../../devlop@1.1.0/node_modules/devlop/lib/default.js";
|
|
3
3
|
import { svg as m, html as C } from "../../../../property-information@7.1.0/node_modules/property-information/index.js";
|
|
4
4
|
import { stringify as N } from "../../../../space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js";
|
|
5
|
-
import S from "../../../../../../../../../_virtual/
|
|
5
|
+
import S from "../../../../../../../../../_virtual/index5.js";
|
|
6
6
|
import { whitespace as j } from "../../../../hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js";
|
|
7
7
|
import { name as x } from "../../../../estree-util-is-identifier-name@3.0.0/node_modules/estree-util-is-identifier-name/lib/index.js";
|
|
8
8
|
import { VFileMessage as h } from "../../../../vfile-message@4.0.3/node_modules/vfile-message/lib/index.js";
|
|
@@ -4,7 +4,7 @@ import { setAccDescription as Be, getAccDescription as Ie, getAccTitle as Me, se
|
|
|
4
4
|
import { __name as g, log as fe } from "./chunk-AGHRB4JF.js";
|
|
5
5
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js";
|
|
6
6
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js";
|
|
7
|
-
import { d as je } from "../../../../../../../../../../../_virtual/
|
|
7
|
+
import { d as je } from "../../../../../../../../../../../_virtual/index7.js";
|
|
8
8
|
import jt from "../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.js";
|
|
9
9
|
var Ft = (function() {
|
|
10
10
|
var e = /* @__PURE__ */ g(function(_t, x, m, v) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { common_default as b, assignWithDepth_default as E, directiveRegex as $, sanitizeDirective as X, detectType as Y } from "./chunk-ABZYJK2D.js";
|
|
2
2
|
import { __name as s, log as g } from "./chunk-AGHRB4JF.js";
|
|
3
|
-
import { d as G } from "../../../../../../../../../../../_virtual/
|
|
3
|
+
import { d as G } from "../../../../../../../../../../../_virtual/index7.js";
|
|
4
4
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js";
|
|
5
5
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js";
|
|
6
6
|
import w from "../../../../../../lodash-es@4.17.21/node_modules/lodash-es/memoize.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { lineBreakRegex as o } from "./chunk-ABZYJK2D.js";
|
|
2
2
|
import { __name as n } from "./chunk-AGHRB4JF.js";
|
|
3
|
-
import { d as l } from "../../../../../../../../../../../_virtual/
|
|
3
|
+
import { d as l } from "../../../../../../../../../../../_virtual/index7.js";
|
|
4
4
|
var x = /* @__PURE__ */ n((s, t) => {
|
|
5
5
|
const r = s.append("rect");
|
|
6
6
|
if (r.attr("x", t.x), r.attr("y", t.y), r.attr("fill", t.fill), r.attr("stroke", t.stroke), r.attr("width", t.width), r.attr("height", t.height), t.name && r.attr("name", t.name), t.rx && r.attr("rx", t.rx), t.ry && r.attr("ry", t.ry), t.attrs !== void 0)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { utils_default as ie } from "./chunk-S3R3BYOJ.js";
|
|
2
2
|
import { getAccDescription as se, setAccDescription as ne, getDiagramTitle as ae, setDiagramTitle as oe, getAccTitle as ce, setAccTitle as le, getConfig2 as K, configureSvgSize as ue, common_default as de, clear as fe } from "./chunk-ABZYJK2D.js";
|
|
3
3
|
import { __name as c, log as mt } from "./chunk-AGHRB4JF.js";
|
|
4
|
-
import { d as he } from "../../../../../../../../../../../_virtual/
|
|
4
|
+
import { d as he } from "../../../../../../../../../../../_virtual/index7.js";
|
|
5
5
|
import L from "../../../../../../../../../../../_virtual/dayjs.min.js";
|
|
6
6
|
import me from "../../../../../../../../../../../_virtual/isoWeek.js";
|
|
7
7
|
import ke from "../../../../../../../../../../../_virtual/customParseFormat.js";
|
|
@@ -6,7 +6,7 @@ import { setConfig2 as ke, getConfig2 as st, configureSvgSize as Pe, assignWithD
|
|
|
6
6
|
import { __name as f, log as Q } from "./chunk-AGHRB4JF.js";
|
|
7
7
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js";
|
|
8
8
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js";
|
|
9
|
-
import { d as ne } from "../../../../../../../../../../../_virtual/
|
|
9
|
+
import { d as ne } from "../../../../../../../../../../../_virtual/index7.js";
|
|
10
10
|
import Mt from "../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.js";
|
|
11
11
|
var Ut = (function() {
|
|
12
12
|
var e = /* @__PURE__ */ f(function(pt, v, A, L) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { bail as P } from "../../../../bail@2.0.2/node_modules/bail/index.js";
|
|
2
|
-
import y from "../../../../../../../../../_virtual/
|
|
2
|
+
import y from "../../../../../../../../../_virtual/index6.js";
|
|
3
3
|
import z from "../../../../is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js";
|
|
4
4
|
import { CallableInstance as C } from "./callable-instance.js";
|
|
5
5
|
import { trough as A } from "../../../../trough@2.2.0/node_modules/trough/lib/index.js";
|
package/dist/_virtual/index5.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.js";
|
|
2
|
+
import { __require as o } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-js@1.1.18/node_modules/style-to-js/cjs/index.js";
|
|
3
|
+
var t = o();
|
|
4
|
+
const a = /* @__PURE__ */ r(t);
|
|
3
5
|
export {
|
|
4
|
-
|
|
6
|
+
a as default
|
|
5
7
|
};
|
|
6
8
|
//# sourceMappingURL=index5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index5.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index5.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/_virtual/index6.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getDefaultExportFromCjs as
|
|
2
|
-
import { __require as
|
|
3
|
-
var t =
|
|
4
|
-
const a = /* @__PURE__ */
|
|
1
|
+
import { getDefaultExportFromCjs as e } from "./_commonjsHelpers.js";
|
|
2
|
+
import { __require as r } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js";
|
|
3
|
+
var t = r();
|
|
4
|
+
const a = /* @__PURE__ */ e(t);
|
|
5
5
|
export {
|
|
6
6
|
a as default
|
|
7
7
|
};
|
package/dist/_virtual/index7.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
var t = r();
|
|
4
|
-
const a = /* @__PURE__ */ e(t);
|
|
1
|
+
import { __require as r } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.js";
|
|
2
|
+
var i = r();
|
|
5
3
|
export {
|
|
6
|
-
|
|
4
|
+
i as d
|
|
7
5
|
};
|
|
8
6
|
//# sourceMappingURL=index7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index7.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index7.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,94 +1,69 @@
|
|
|
1
|
-
const
|
|
1
|
+
const k = /<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\s>]/i, B = [
|
|
2
2
|
/<svg[\s\S]*?<\/svg>/i,
|
|
3
3
|
/<img\b[^>]*?>/i,
|
|
4
4
|
/```mermaid[\s\S]*?```/i,
|
|
5
5
|
/```[a-zA-Z0-9]+[\s\S]*?```/i
|
|
6
|
-
],
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
if (
|
|
10
|
-
|
|
11
|
-
for (; o < t.length && /\s/.test(t[o]); )
|
|
12
|
-
o += 1;
|
|
13
|
-
return o;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
let n = t.length, s;
|
|
17
|
-
for (k.lastIndex = 0; s = k.exec(t); )
|
|
18
|
-
if (!(s.index <= e)) {
|
|
19
|
-
n = s.index + s[0].length;
|
|
6
|
+
], S = /<\/[a-z][^>]*>\s*\n(?=[^\s<])/gi, I = (t, n) => {
|
|
7
|
+
let c = t.length, e;
|
|
8
|
+
for (S.lastIndex = 0; e = S.exec(t); )
|
|
9
|
+
if (!(e.index <= n)) {
|
|
10
|
+
c = e.index + e[0].length;
|
|
20
11
|
break;
|
|
21
12
|
}
|
|
22
|
-
return
|
|
13
|
+
return c;
|
|
14
|
+
}, E = (t) => {
|
|
15
|
+
let n = null;
|
|
16
|
+
return B.forEach((c) => {
|
|
17
|
+
const e = c.exec(t);
|
|
18
|
+
if (!e || typeof e.index != "number") return;
|
|
19
|
+
const s = e.index, d = e.index + e[0].length;
|
|
20
|
+
(!n || s < n.start) && (n = { start: s, end: d });
|
|
21
|
+
}), n;
|
|
23
22
|
}, A = (t) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(!
|
|
30
|
-
|
|
31
|
-
}, N = (t) => {
|
|
32
|
-
const e = t.match(/^\s*\|.+\|\s*$/m);
|
|
33
|
-
if (!e || typeof e.index != "number") return null;
|
|
34
|
-
const c = e[0].match(/^\s*/)?.[0].length ?? 0, n = e.index + c, s = t.slice(n).split(`
|
|
35
|
-
`), r = [];
|
|
36
|
-
for (const u of s) {
|
|
37
|
-
if (!u.trim().startsWith("|")) break;
|
|
38
|
-
r.push(u);
|
|
23
|
+
const n = t.match(/^\s*\|.+\|\s*$/m);
|
|
24
|
+
if (!n || typeof n.index != "number") return null;
|
|
25
|
+
const c = n[0].match(/^\s*/)?.[0].length ?? 0, e = n.index + c, s = t.slice(e).split(`
|
|
26
|
+
`), d = [];
|
|
27
|
+
for (const i of s) {
|
|
28
|
+
if (!i.trim().startsWith("|")) break;
|
|
29
|
+
d.push(i);
|
|
39
30
|
}
|
|
40
|
-
const
|
|
31
|
+
const r = d.join(`
|
|
41
32
|
`);
|
|
42
|
-
return { start:
|
|
43
|
-
},
|
|
44
|
-
const c = t.
|
|
45
|
-
if (n !== -1 && t.indexOf("```",
|
|
46
|
-
if (e) {
|
|
47
|
-
const d = t.slice(0, n).trimEnd(), h = t.slice(n), m = [];
|
|
48
|
-
return d && m.push({ type: "text", value: d }), m.push({ type: "markdown", value: h }), m;
|
|
49
|
-
}
|
|
33
|
+
return { start: e, block: r, end: e + r.length };
|
|
34
|
+
}, g = (t, n = !1) => {
|
|
35
|
+
const c = t.indexOf("```");
|
|
36
|
+
if (n && c !== -1 && t.indexOf("```", c + 3) === -1)
|
|
50
37
|
return [{ type: "markdown", value: t }];
|
|
38
|
+
const e = t.search(k), s = t.search(/<svg\b/i), d = e !== -1 && s !== -1 && e < s;
|
|
39
|
+
if (s !== -1 && !d) {
|
|
40
|
+
const o = t.slice(0, s), l = t.indexOf("</svg>", s), a = l === -1 ? `${t.slice(s)}</svg>` : t.slice(s, l + 6), m = l === -1 ? "" : t.slice(l + 6);
|
|
41
|
+
if (n) {
|
|
42
|
+
const h = [];
|
|
43
|
+
return o.trim() && h.push({ type: "text", value: o }), h.push({ type: "markdown", value: a }), m.trim() && h.push(...g(m, !0)), h;
|
|
44
|
+
}
|
|
45
|
+
if (l === -1)
|
|
46
|
+
return [{ type: "markdown", value: a }];
|
|
51
47
|
}
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (i) {
|
|
61
|
-
if (!e)
|
|
62
|
-
return [{ type: "markdown", value: i.block }];
|
|
63
|
-
const l = [], a = t.slice(0, i.start);
|
|
64
|
-
a.trim() && l.push({ type: "text", value: a }), l.push({ type: "markdown", value: i.block });
|
|
65
|
-
const d = t.slice(i.end), h = d.length < t.length;
|
|
66
|
-
return d.trim() && h && l.push(...b(d, !0)), l;
|
|
67
|
-
}
|
|
68
|
-
if (t.match(/<svg[\s\S]*?<\/svg>/i) && e && c === -1)
|
|
69
|
-
return t.trim().toLowerCase().endsWith("</svg>") ? [{ type: "markdown", value: t }] : [{ type: "markdown", value: `${t}</svg>` }];
|
|
70
|
-
const o = A(t);
|
|
71
|
-
if (c === -1 && !o)
|
|
72
|
-
return e && t.trim() ? [{ type: "text", value: t }] : [];
|
|
73
|
-
const f = !!o && (c === -1 || o.start < c), g = f ? o.start : c, S = f ? void 0 : t.slice(g).match(
|
|
74
|
-
/^<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\s>]/i
|
|
75
|
-
)?.[1], p = f ? o.end : O(t, g, S);
|
|
76
|
-
if (!e) {
|
|
77
|
-
const l = f ? t : t.slice(g, p);
|
|
78
|
-
return [
|
|
79
|
-
{
|
|
80
|
-
type: f ? "markdown" : "sandbox",
|
|
81
|
-
value: l
|
|
82
|
-
}
|
|
83
|
-
];
|
|
48
|
+
const r = A(t);
|
|
49
|
+
if (r) {
|
|
50
|
+
const o = [], l = t.slice(0, r.start);
|
|
51
|
+
n && l.trim() && o.push({ type: "text", value: l }), o.push({ type: "markdown", value: r.block });
|
|
52
|
+
const a = t.slice(r.end), m = a.length < t.length;
|
|
53
|
+
return a.trim() && m && o.push(
|
|
54
|
+
...n ? g(a, !0) : g(a)
|
|
55
|
+
), o;
|
|
84
56
|
}
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
57
|
+
const i = E(t);
|
|
58
|
+
if (e === -1 && !i)
|
|
59
|
+
return n && t.trim() ? [{ type: "text", value: t }] : [];
|
|
60
|
+
const u = !!i && (e === -1 || i.start < e), b = u ? i.start : e, p = u ? i.end : I(t, b), f = [], x = t.slice(0, b), y = t.slice(b, p), v = t.slice(p);
|
|
61
|
+
return n && x.trim() && f.push({ type: "text", value: x }), f.push({
|
|
62
|
+
type: u ? "markdown" : "sandbox",
|
|
63
|
+
value: y
|
|
64
|
+
}), v.trim() && f.push(...g(v, n)), f;
|
|
90
65
|
};
|
|
91
66
|
export {
|
|
92
|
-
|
|
67
|
+
g as splitContentSegments
|
|
93
68
|
};
|
|
94
69
|
//# sourceMappingURL=split-content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-content.js","sources":["../../../../src/components/ContentRender/utils/split-content.ts"],"sourcesContent":["export type RenderSegment =\n | { type: \"markdown\"; value: string }\n | { type: \"sandbox\"; value: string }\n | { type: \"text\"; value: string };\n\nconst SANDBOX_START_PATTERN =\n /<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\\s>]/i;\n\nconst INLINE_SANDBOX_PATTERNS: RegExp[] = [\n /<svg[\\s\\S]*?<\\/svg>/i,\n /<img\\b[^>]*?>/i,\n /```mermaid[\\s\\S]*?```/i,\n /```[a-zA-Z0-9]+[\\s\\S]*?```/i,\n];\n\nconst closingBoundary = /<\\/[a-z][^>]*>/gi;\n\ntype MatchResult = { start: number; end: number };\n\nconst findHtmlBlockEnd = (\n raw: string,\n startIndex: number,\n tagName?: string\n) => {\n if (tagName) {\n const lower = raw.toLowerCase();\n const endTag = `</${tagName.toLowerCase()}>`;\n const closeIdx = lower.indexOf(endTag, startIndex);\n if (closeIdx !== -1) {\n let blockEnd = closeIdx + endTag.length;\n while (blockEnd < raw.length && /\\s/.test(raw[blockEnd])) {\n blockEnd += 1;\n }\n return blockEnd;\n }\n }\n\n let blockEnd = raw.length;\n let match: RegExpExecArray | null;\n closingBoundary.lastIndex = 0;\n\n while ((match = closingBoundary.exec(raw))) {\n if (match.index <= startIndex) continue;\n blockEnd = match.index + match[0].length;\n break;\n }\n\n return blockEnd;\n};\n\nconst findInlineSandboxMatch = (raw: string): MatchResult | null => {\n let earliest: MatchResult | null = null;\n\n INLINE_SANDBOX_PATTERNS.forEach((pattern) => {\n const match = pattern.exec(raw);\n if (!match || typeof match.index !== \"number\") return;\n const start = match.index;\n const end = match.index + match[0].length;\n\n if (!earliest || start < earliest.start) {\n earliest = { start, end };\n }\n });\n\n return earliest;\n};\n\nconst extractTableBlock = (\n raw: string\n): { start: number; block: string; end: number } | null => {\n const tableMatch = raw.match(/^\\s*\\|.+\\|\\s*$/m);\n if (!tableMatch || typeof tableMatch.index !== \"number\") return null;\n\n const leadingSpaces = tableMatch[0].match(/^\\s*/)?.[0].length ?? 0;\n const tableStart = tableMatch.index + leadingSpaces;\n\n const lines = raw.slice(tableStart).split(\"\\n\");\n const tableLines: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"|\")) break;\n tableLines.push(line);\n }\n\n const block = tableLines.join(\"\\n\");\n return { start: tableStart, block, end: tableStart + block.length };\n};\n\n// Split incoming markdown content into markdown and sandbox HTML segments\nexport const splitContentSegments = (\n raw: string,\n keepText = false\n): RenderSegment[] => {\n const sandboxStartIndex = raw.search(SANDBOX_START_PATTERN);\n const fenceStart = raw.indexOf(\"```\");\n if (fenceStart !== -1) {\n const closingFence = raw.indexOf(\"```\", fenceStart + 3);\n if (closingFence === -1) {\n if (keepText) {\n const before = raw.slice(0, fenceStart);\n const beforeText = before.trimEnd();\n const fenceBlock = raw.slice(fenceStart);\n const segments: RenderSegment[] = [];\n if (beforeText) {\n segments.push({ type: \"text\", value: beforeText });\n }\n segments.push({ type: \"markdown\", value: fenceBlock });\n return segments;\n }\n return [{ type: \"markdown\", value: raw }];\n }\n }\n\n const svgOpenIndex = raw.search(/<svg\\b/i);\n const canHandleInlineSvg =\n svgOpenIndex !== -1 &&\n (sandboxStartIndex === -1 || svgOpenIndex <= sandboxStartIndex);\n\n if (keepText && canHandleInlineSvg) {\n const before = raw.slice(0, svgOpenIndex);\n const closeIdx = raw.indexOf(\"</svg>\", svgOpenIndex);\n const svgBlock =\n closeIdx === -1\n ? `${raw.slice(svgOpenIndex)}</svg>`\n : raw.slice(svgOpenIndex, closeIdx + \"</svg>\".length);\n const after = closeIdx === -1 ? \"\" : raw.slice(closeIdx + \"</svg>\".length);\n\n const segments: RenderSegment[] = [];\n if (before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n segments.push({ type: \"markdown\", value: svgBlock });\n if (after.trim()) {\n segments.push(...splitContentSegments(after, true));\n }\n return segments;\n }\n if (canHandleInlineSvg && raw.indexOf(\"</svg>\", svgOpenIndex) === -1) {\n return [{ type: \"markdown\", value: `${raw}</svg>` }];\n }\n\n const tableBlock = extractTableBlock(raw);\n if (tableBlock) {\n if (!keepText) {\n return [{ type: \"markdown\", value: tableBlock.block }];\n }\n\n const segments: RenderSegment[] = [];\n const before = raw.slice(0, tableBlock.start);\n if (before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n segments.push({ type: \"markdown\", value: tableBlock.block });\n const after = raw.slice(tableBlock.end);\n const hasProgress = after.length < raw.length;\n if (after.trim() && hasProgress) {\n segments.push(...splitContentSegments(after, true));\n }\n return segments;\n }\n\n const completeSvgMatch = raw.match(/<svg[\\s\\S]*?<\\/svg>/i);\n if (completeSvgMatch && keepText && sandboxStartIndex === -1) {\n if (!raw.trim().toLowerCase().endsWith(\"</svg>\")) {\n return [{ type: \"markdown\", value: `${raw}</svg>` }];\n }\n return [{ type: \"markdown\", value: raw }];\n }\n\n const inlineMatch = findInlineSandboxMatch(raw);\n\n if (sandboxStartIndex === -1 && !inlineMatch) {\n if (keepText && raw.trim()) {\n return [{ type: \"text\", value: raw }];\n }\n return [];\n }\n\n const shouldUseInline =\n !!inlineMatch &&\n (sandboxStartIndex === -1 || inlineMatch.start < sandboxStartIndex);\n\n const startIndex = shouldUseInline ? inlineMatch!.start : sandboxStartIndex;\n const tagName = shouldUseInline\n ? undefined\n : raw\n .slice(startIndex)\n .match(\n /^<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\\s>]/i\n )?.[1];\n const blockEnd = shouldUseInline\n ? inlineMatch!.end\n : findHtmlBlockEnd(raw, startIndex, tagName);\n\n if (!keepText) {\n const segmentValue = shouldUseInline\n ? raw\n : raw.slice(startIndex, blockEnd);\n return [\n {\n type: shouldUseInline ? \"markdown\" : \"sandbox\",\n value: segmentValue,\n },\n ];\n }\n\n const segments: RenderSegment[] = [];\n const before = raw.slice(0, startIndex);\n const matchedBlock = raw.slice(startIndex, blockEnd);\n const after = raw.slice(blockEnd);\n\n if (keepText && before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n\n segments.push({\n type: shouldUseInline ? \"markdown\" : \"sandbox\",\n value: matchedBlock,\n });\n\n if (after.trim()) {\n segments.push(...splitContentSegments(after, keepText));\n }\n\n return segments;\n};\n"],"names":["SANDBOX_START_PATTERN","INLINE_SANDBOX_PATTERNS","closingBoundary","findHtmlBlockEnd","raw","startIndex","tagName","lower","endTag","closeIdx","blockEnd","match","findInlineSandboxMatch","earliest","pattern","start","end","extractTableBlock","tableMatch","leadingSpaces","tableStart","lines","tableLines","line","block","splitContentSegments","keepText","sandboxStartIndex","fenceStart","beforeText","fenceBlock","segments","svgOpenIndex","canHandleInlineSvg","before","svgBlock","after","tableBlock","hasProgress","inlineMatch","shouldUseInline","segmentValue","matchedBlock"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"split-content.js","sources":["../../../../src/components/ContentRender/utils/split-content.ts"],"sourcesContent":["export type RenderSegment =\n | { type: \"markdown\"; value: string }\n | { type: \"sandbox\"; value: string }\n | { type: \"text\"; value: string };\n\nconst SANDBOX_START_PATTERN =\n /<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\\s>]/i;\n\nconst INLINE_SANDBOX_PATTERNS: RegExp[] = [\n /<svg[\\s\\S]*?<\\/svg>/i,\n /<img\\b[^>]*?>/i,\n /```mermaid[\\s\\S]*?```/i,\n /```[a-zA-Z0-9]+[\\s\\S]*?```/i,\n];\n\nconst closingBoundary = /<\\/[a-z][^>]*>\\s*\\n(?=[^\\s<])/gi;\n\ntype MatchResult = { start: number; end: number };\n\nconst findHtmlBlockEnd = (raw: string, startIndex: number) => {\n let blockEnd = raw.length;\n let match: RegExpExecArray | null;\n closingBoundary.lastIndex = 0;\n\n while ((match = closingBoundary.exec(raw))) {\n if (match.index <= startIndex) continue;\n blockEnd = match.index + match[0].length;\n break;\n }\n\n return blockEnd;\n};\n\nconst findInlineSandboxMatch = (raw: string): MatchResult | null => {\n let earliest: MatchResult | null = null;\n\n INLINE_SANDBOX_PATTERNS.forEach((pattern) => {\n const match = pattern.exec(raw);\n if (!match || typeof match.index !== \"number\") return;\n const start = match.index;\n const end = match.index + match[0].length;\n\n if (!earliest || start < earliest.start) {\n earliest = { start, end };\n }\n });\n\n return earliest;\n};\n\nconst extractTableBlock = (\n raw: string\n): { start: number; block: string; end: number } | null => {\n const tableMatch = raw.match(/^\\s*\\|.+\\|\\s*$/m);\n if (!tableMatch || typeof tableMatch.index !== \"number\") return null;\n\n const leadingSpaces = tableMatch[0].match(/^\\s*/)?.[0].length ?? 0;\n const tableStart = tableMatch.index + leadingSpaces;\n\n const lines = raw.slice(tableStart).split(\"\\n\");\n const tableLines: string[] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"|\")) break;\n tableLines.push(line);\n }\n\n const block = tableLines.join(\"\\n\");\n return { start: tableStart, block, end: tableStart + block.length };\n};\n\n// Split incoming markdown content into markdown and sandbox HTML segments\nexport const splitContentSegments = (\n raw: string,\n keepText = false\n): RenderSegment[] => {\n const fenceStart = raw.indexOf(\"```\");\n if (keepText && fenceStart !== -1) {\n const closingFence = raw.indexOf(\"```\", fenceStart + 3);\n if (closingFence === -1) {\n return [{ type: \"markdown\", value: raw }];\n }\n }\n\n const sandboxStartIndex = raw.search(SANDBOX_START_PATTERN);\n const svgOpenIndex = raw.search(/<svg\\b/i);\n const hasSandboxBeforeSvg =\n sandboxStartIndex !== -1 &&\n svgOpenIndex !== -1 &&\n sandboxStartIndex < svgOpenIndex;\n if (svgOpenIndex !== -1 && !hasSandboxBeforeSvg) {\n const before = raw.slice(0, svgOpenIndex);\n const closeIdx = raw.indexOf(\"</svg>\", svgOpenIndex);\n const svgBlock =\n closeIdx === -1\n ? `${raw.slice(svgOpenIndex)}</svg>`\n : raw.slice(svgOpenIndex, closeIdx + \"</svg>\".length);\n const after = closeIdx === -1 ? \"\" : raw.slice(closeIdx + \"</svg>\".length);\n\n if (keepText) {\n const segments: RenderSegment[] = [];\n if (before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n segments.push({ type: \"markdown\", value: svgBlock });\n if (after.trim()) {\n segments.push(...splitContentSegments(after, true));\n }\n return segments;\n }\n\n if (closeIdx === -1) {\n return [{ type: \"markdown\", value: svgBlock }];\n }\n }\n\n const tableBlock = extractTableBlock(raw);\n if (tableBlock) {\n const segments: RenderSegment[] = [];\n const before = raw.slice(0, tableBlock.start);\n if (keepText && before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n segments.push({ type: \"markdown\", value: tableBlock.block });\n const after = raw.slice(tableBlock.end);\n const hasProgress = after.length < raw.length;\n if (after.trim() && hasProgress) {\n segments.push(\n ...(keepText\n ? splitContentSegments(after, true)\n : splitContentSegments(after))\n );\n }\n return segments;\n }\n\n const inlineMatch = findInlineSandboxMatch(raw);\n\n if (sandboxStartIndex === -1 && !inlineMatch) {\n if (keepText && raw.trim()) {\n return [{ type: \"text\", value: raw }];\n }\n return [];\n }\n\n const shouldUseInline =\n !!inlineMatch &&\n (sandboxStartIndex === -1 || inlineMatch.start < sandboxStartIndex);\n\n const startIndex = shouldUseInline ? inlineMatch!.start : sandboxStartIndex;\n const blockEnd = shouldUseInline\n ? inlineMatch!.end\n : findHtmlBlockEnd(raw, startIndex);\n\n const segments: RenderSegment[] = [];\n const before = raw.slice(0, startIndex);\n const matchedBlock = raw.slice(startIndex, blockEnd);\n const after = raw.slice(blockEnd);\n\n if (keepText && before.trim()) {\n segments.push({ type: \"text\", value: before });\n }\n\n segments.push({\n type: shouldUseInline ? \"markdown\" : \"sandbox\",\n value: matchedBlock,\n });\n\n if (after.trim()) {\n segments.push(...splitContentSegments(after, keepText));\n }\n\n return segments;\n};\n"],"names":["SANDBOX_START_PATTERN","INLINE_SANDBOX_PATTERNS","closingBoundary","findHtmlBlockEnd","raw","startIndex","blockEnd","match","findInlineSandboxMatch","earliest","pattern","start","end","extractTableBlock","tableMatch","leadingSpaces","tableStart","lines","tableLines","line","block","splitContentSegments","keepText","fenceStart","sandboxStartIndex","svgOpenIndex","hasSandboxBeforeSvg","before","closeIdx","svgBlock","after","segments","tableBlock","hasProgress","inlineMatch","shouldUseInline","matchedBlock"],"mappings":"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"}
|