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.
@@ -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/index6.js";
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/index5.js";
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/index5.js";
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/index5.js";
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/index5.js";
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/index5.js";
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/index7.js";
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";
@@ -1,6 +1,8 @@
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();
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
- i as d
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":";;;;"}
@@ -1,7 +1,7 @@
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);
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
  };
@@ -1,8 +1,6 @@
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);
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
- a as default
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 B = /<(script|style|link|iframe|html|head|body|meta|title|base|template|div|section|article|main)[\s>]/i, E = [
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
- ], k = /<\/[a-z][^>]*>/gi, O = (t, e, c) => {
7
- if (c) {
8
- const r = t.toLowerCase(), i = `</${c.toLowerCase()}>`, u = r.indexOf(i, e);
9
- if (u !== -1) {
10
- let o = u + i.length;
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 n;
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
- let e = null;
25
- return E.forEach((c) => {
26
- const n = c.exec(t);
27
- if (!n || typeof n.index != "number") return;
28
- const s = n.index, r = n.index + n[0].length;
29
- (!e || s < e.start) && (e = { start: s, end: r });
30
- }), e;
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 i = r.join(`
31
+ const r = d.join(`
41
32
  `);
42
- return { start: n, block: i, end: n + i.length };
43
- }, b = (t, e = !1) => {
44
- const c = t.search(B), n = t.indexOf("```");
45
- if (n !== -1 && t.indexOf("```", n + 3) === -1) {
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 s = t.search(/<svg\b/i), r = s !== -1 && (c === -1 || s <= c);
53
- if (e && r) {
54
- const l = t.slice(0, s), a = t.indexOf("</svg>", s), d = a === -1 ? `${t.slice(s)}</svg>` : t.slice(s, a + 6), h = a === -1 ? "" : t.slice(a + 6), m = [];
55
- return l.trim() && m.push({ type: "text", value: l }), m.push({ type: "markdown", value: d }), h.trim() && m.push(...b(h, !0)), m;
56
- }
57
- if (r && t.indexOf("</svg>", s) === -1)
58
- return [{ type: "markdown", value: `${t}</svg>` }];
59
- const i = N(t);
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 v = [], x = t.slice(0, g), I = t.slice(g, p), y = t.slice(p);
86
- return e && x.trim() && v.push({ type: "text", value: x }), v.push({
87
- type: f ? "markdown" : "sandbox",
88
- value: I
89
- }), y.trim() && v.push(...b(y, e)), v;
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
- b as splitContentSegments
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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"}
package/package.json CHANGED
@@ -149,7 +149,7 @@
149
149
  "storybook": "storybook dev -p 6006",
150
150
  "test": "echo \"No tests specified\" && exit 0"
151
151
  },
152
- "version": "0.1.83-beta.20",
152
+ "version": "0.1.83-beta.22",
153
153
  "type": "module",
154
154
  "exports": {
155
155
  ".": {