@axiom-lattice/react-sdk 4.3.0 → 4.4.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 (65) hide show
  1. package/dist/{AgentDetailSideApp-TI7723CK.mjs → AgentDetailSideApp-RW6B3BGT.mjs} +7 -7
  2. package/dist/AgentGovernanceWorkbench-OXGHJNFL.mjs +19 -0
  3. package/dist/{MessageGraph-ES3P4VLY.mjs → MessageGraph-BVP2M3TM.mjs} +3 -3
  4. package/dist/{ReactChart-6AYFMCMD.mjs → ReactChart-3XHMWXL6.mjs} +3 -3
  5. package/dist/{TasksSideApp-7R42CIFG.mjs → TasksSideApp-MLG7XUQA.mjs} +4 -4
  6. package/dist/{TeamWorkspace-JQ762PEX.mjs → TeamWorkspace-IENL2T4X.mjs} +3 -3
  7. package/dist/{TopologyRuntimeView-OJ35YYVM.mjs → TopologyRuntimeView-B5TVUTAB.mjs} +4 -4
  8. package/dist/{WorkflowAutomationView-3AS77NKN.mjs → WorkflowAutomationView-ZKTUYMPU.mjs} +6 -6
  9. package/dist/{chunk-4FI66ZJ3.mjs → chunk-2NCNDHTI.mjs} +2 -2
  10. package/dist/{chunk-ENLK3ODS.mjs → chunk-3JNBTKKB.mjs} +2 -2
  11. package/dist/{chunk-2ZK7AUQW.mjs → chunk-ADZRYRP6.mjs} +9 -5
  12. package/dist/chunk-ADZRYRP6.mjs.map +1 -0
  13. package/dist/{chunk-4SVLWYLW.mjs → chunk-AJLGOGUB.mjs} +2 -2
  14. package/dist/{chunk-NSGSGYM7.mjs → chunk-HLVE2SB7.mjs} +48 -1
  15. package/dist/chunk-HLVE2SB7.mjs.map +1 -0
  16. package/dist/{chunk-YUV4WO25.mjs → chunk-N5VEHSQU.mjs} +160 -69
  17. package/dist/chunk-N5VEHSQU.mjs.map +1 -0
  18. package/dist/{chunk-3NR7UAPT.mjs → chunk-ORTSDZD4.mjs} +26 -44
  19. package/dist/chunk-ORTSDZD4.mjs.map +1 -0
  20. package/dist/{chunk-DBTFQUSQ.mjs → chunk-XE2ZIE2L.mjs} +4 -4
  21. package/dist/{embed-page-AgentDetailSideApp-PSRQVFNR.js → embed-page-AgentDetailSideApp-2BDEWFQ6.js} +1 -1
  22. package/dist/embed-page-AgentGovernanceWorkbench-WG7E3G5T.js +5 -0
  23. package/dist/{embed-page-MessageGraph-PDNQ67T4.js → embed-page-MessageGraph-5SWPEQ4V.js} +1 -1
  24. package/dist/{embed-page-ReactChart-25KAFLQ3.js → embed-page-ReactChart-ZYWRXIMC.js} +1 -1
  25. package/dist/{embed-page-TasksSideApp-DLH5LRMS.js → embed-page-TasksSideApp-X6255GEF.js} +1 -1
  26. package/dist/{embed-page-TeamWorkspace-2WJJWF25.js → embed-page-TeamWorkspace-XNZM7AV7.js} +1 -1
  27. package/dist/{embed-page-TopologyRuntimeView-WDQRHDMO.js → embed-page-TopologyRuntimeView-DGSHSTIU.js} +1 -1
  28. package/dist/{embed-page-WorkflowAutomationView-BAMJ2WVB.js → embed-page-WorkflowAutomationView-BHIRIWV3.js} +1 -1
  29. package/dist/embed-page-chunk-DEDTYRZE.js +245 -0
  30. package/dist/{embed-page-chunk-XVUA7UHE.js → embed-page-chunk-HEO7X7LH.js} +1 -1
  31. package/dist/{embed-page-chunk-TL2AYM76.js → embed-page-chunk-JMZ7OODN.js} +1 -1
  32. package/dist/{embed-page-chunk-OBM5EUWZ.js → embed-page-chunk-SPC4BYNU.js} +192 -192
  33. package/dist/{embed-page-chunk-LOXLXZNP.js → embed-page-chunk-XUXEGF3S.js} +1 -1
  34. package/dist/{embed-page-chunk-MQDYZS3S.js → embed-page-chunk-YCX5YZRP.js} +1 -1
  35. package/dist/embed-page.js +1 -1
  36. package/dist/index.d.mts +27 -1
  37. package/dist/index.d.ts +27 -1
  38. package/dist/index.js +2029 -1890
  39. package/dist/index.js.map +1 -1
  40. package/dist/index.mjs +13 -8
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/web-app.js +48 -3
  43. package/dist/web-app.js.map +1 -1
  44. package/dist/web-app.mjs +5 -4
  45. package/dist/web-app.mjs.map +1 -1
  46. package/package.json +3 -3
  47. package/dist/AgentGovernanceWorkbench-2MPAB6UF.mjs +0 -19
  48. package/dist/chunk-2ZK7AUQW.mjs.map +0 -1
  49. package/dist/chunk-3NR7UAPT.mjs.map +0 -1
  50. package/dist/chunk-NSGSGYM7.mjs.map +0 -1
  51. package/dist/chunk-YUV4WO25.mjs.map +0 -1
  52. package/dist/embed-page-AgentGovernanceWorkbench-UPQHJZD7.js +0 -5
  53. package/dist/embed-page-chunk-SSC7ANWV.js +0 -245
  54. /package/dist/{AgentDetailSideApp-TI7723CK.mjs.map → AgentDetailSideApp-RW6B3BGT.mjs.map} +0 -0
  55. /package/dist/{AgentGovernanceWorkbench-2MPAB6UF.mjs.map → AgentGovernanceWorkbench-OXGHJNFL.mjs.map} +0 -0
  56. /package/dist/{MessageGraph-ES3P4VLY.mjs.map → MessageGraph-BVP2M3TM.mjs.map} +0 -0
  57. /package/dist/{ReactChart-6AYFMCMD.mjs.map → ReactChart-3XHMWXL6.mjs.map} +0 -0
  58. /package/dist/{TasksSideApp-7R42CIFG.mjs.map → TasksSideApp-MLG7XUQA.mjs.map} +0 -0
  59. /package/dist/{TeamWorkspace-JQ762PEX.mjs.map → TeamWorkspace-IENL2T4X.mjs.map} +0 -0
  60. /package/dist/{TopologyRuntimeView-OJ35YYVM.mjs.map → TopologyRuntimeView-B5TVUTAB.mjs.map} +0 -0
  61. /package/dist/{WorkflowAutomationView-3AS77NKN.mjs.map → WorkflowAutomationView-ZKTUYMPU.mjs.map} +0 -0
  62. /package/dist/{chunk-4FI66ZJ3.mjs.map → chunk-2NCNDHTI.mjs.map} +0 -0
  63. /package/dist/{chunk-ENLK3ODS.mjs.map → chunk-3JNBTKKB.mjs.map} +0 -0
  64. /package/dist/{chunk-4SVLWYLW.mjs.map → chunk-AJLGOGUB.mjs.map} +0 -0
  65. /package/dist/{chunk-DBTFQUSQ.mjs.map → chunk-XE2ZIE2L.mjs.map} +0 -0
@@ -1,3 +1,48 @@
1
+ // src/utils/errorMessage.ts
2
+ var WRAPPER_PREFIXES = [
3
+ /^Error in middleware\s+(?:"[^"]*"|'[^']*'|[^:]+)\s*:\s*/,
4
+ /^Caused by:\s*/i,
5
+ /^Error:\s*/i
6
+ ];
7
+ function isMessageCarrier(value) {
8
+ return typeof value === "object" && value !== null && typeof value.message === "string";
9
+ }
10
+ function rootErrorMessage(message) {
11
+ if (typeof message !== "string" || message.length === 0) {
12
+ return message;
13
+ }
14
+ const trimmed = message.trim();
15
+ let current = trimmed;
16
+ let stripped = true;
17
+ while (stripped) {
18
+ stripped = false;
19
+ for (const prefix of WRAPPER_PREFIXES) {
20
+ const next = current.replace(prefix, "");
21
+ if (next !== current) {
22
+ current = next.trim();
23
+ stripped = true;
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ return current.length > 0 ? current : trimmed;
29
+ }
30
+ function formatErrorMessage(error, fallback = "") {
31
+ let raw;
32
+ if (error instanceof Error) {
33
+ raw = error.message;
34
+ } else if (typeof error === "string") {
35
+ raw = error;
36
+ } else if (isMessageCarrier(error)) {
37
+ raw = error.message;
38
+ } else if (error === null || error === void 0) {
39
+ raw = "";
40
+ } else {
41
+ raw = String(error);
42
+ }
43
+ return rootErrorMessage(raw) || fallback;
44
+ }
45
+
1
46
  // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
2
47
  function r(e) {
3
48
  var t, f, n = "";
@@ -1101,7 +1146,9 @@ function useReviewDecision(onSubmit) {
1101
1146
  }
1102
1147
 
1103
1148
  export {
1149
+ rootErrorMessage,
1150
+ formatErrorMessage,
1104
1151
  XMarkdown_default,
1105
1152
  useReviewDecision
1106
1153
  };
1107
- //# sourceMappingURL=chunk-NSGSGYM7.mjs.map
1154
+ //# sourceMappingURL=chunk-HLVE2SB7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/errorMessage.ts","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/index.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Parser.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/core/Renderer.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/AnimationText.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/DebugPanel/DebugPanel.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/hooks/useStreaming.js","../../../node_modules/.pnpm/@ant-design+x-markdown@2.3.0_@types+react@18.3.24_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@ant-design/x-markdown/es/XMarkdown/interface.js","../src/components/shared/useReviewDecision.ts"],"sourcesContent":["const WRAPPER_PREFIXES: RegExp[] = [\n /^Error in middleware\\s+(?:\"[^\"]*\"|'[^']*'|[^:]+)\\s*:\\s*/,\n /^Caused by:\\s*/i,\n /^Error:\\s*/i,\n];\n\nfunction isMessageCarrier(value: unknown): value is { message: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { message?: unknown }).message === \"string\"\n );\n}\n\n/**\n * Unwrap a nested error chain to its root cause.\n *\n * LangChain's `wrapToolCall` prepends `Error in middleware \"<name>\": ` to\n * `error.message` at every middleware layer, so an upstream provider failure\n * arrives as a long chain such as\n * `Error in middleware \"A\": Error in middleware \"B\": 402 Insufficient Balance`.\n * For display we want only the innermost message.\n */\nexport function rootErrorMessage(message: string): string {\n if (typeof message !== \"string\" || message.length === 0) {\n return message;\n }\n\n const trimmed = message.trim();\n let current = trimmed;\n let stripped = true;\n while (stripped) {\n stripped = false;\n for (const prefix of WRAPPER_PREFIXES) {\n const next = current.replace(prefix, \"\");\n if (next !== current) {\n current = next.trim();\n stripped = true;\n break;\n }\n }\n }\n\n return current.length > 0 ? current : trimmed;\n}\n\n/**\n * Normalize any thrown value into a single display-ready root-cause string.\n */\nexport function formatErrorMessage(error: unknown, fallback = \"\"): string {\n let raw: string;\n if (error instanceof Error) {\n raw = error.message;\n } else if (typeof error === \"string\") {\n raw = error;\n } else if (isMessageCarrier(error)) {\n raw = error.message;\n } else if (error === null || error === undefined) {\n raw = \"\";\n } else {\n raw = String(error);\n }\n\n return rootErrorMessage(raw) || fallback;\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx } from 'clsx';\nimport React, { useMemo } from 'react';\nimport { Parser, Renderer } from \"./core\";\nimport DebugPanel from \"./DebugPanel\";\nimport { useStreaming } from \"./hooks\";\nimport \"./index.css\";\nconst XMarkdown = /*#__PURE__*/React.memo(props => {\n const {\n streaming,\n config,\n components,\n paragraphTag,\n content,\n children,\n rootClassName,\n className,\n style,\n openLinksInNewTab,\n dompurifyConfig,\n protectCustomTagNewlines,\n escapeRawHtml,\n debug\n } = props;\n\n // ============================ style ============================\n const mergedCls = clsx('x-markdown', rootClassName, className);\n\n // ============================ Streaming ============================\n const displayContent = useStreaming(content || children || '', {\n streaming,\n components\n });\n // ============================ Render ============================\n const parser = useMemo(() => new Parser({\n markedConfig: config,\n paragraphTag,\n openLinksInNewTab,\n components,\n protectCustomTagNewlines,\n escapeRawHtml\n }), [config, paragraphTag, openLinksInNewTab, components, protectCustomTagNewlines, escapeRawHtml]);\n const renderer = useMemo(() => new Renderer({\n components: components,\n dompurifyConfig,\n streaming\n }), [components, dompurifyConfig, streaming]);\n const htmlString = useMemo(() => {\n if (!displayContent) return '';\n return parser.parse(displayContent);\n }, [displayContent, parser]);\n if (!displayContent) return null;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: mergedCls,\n style: style\n }, renderer.render(htmlString)), debug ? /*#__PURE__*/React.createElement(DebugPanel, null) : null);\n});\nif (process.env.NODE_ENV !== 'production') {\n XMarkdown.displayName = 'XMarkdown';\n}\nexport default XMarkdown;","import { Marked } from 'marked';\nexport const other = {\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeTest: /[&<>\"'/]/,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n escapeReplace: /[&<>\"'/]/g,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n completeFencedCode: /^ {0,3}(`{3,}|~{3,})([\\s\\S]*?)\\n {0,3}\\1[ \\n\\t]*$/\n};\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nconst getEscapeReplacement = ch => escapeReplacements[ch];\nexport function escapeHtml(html, encode) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nclass Parser {\n options;\n markdownInstance;\n constructor(options = {}) {\n const {\n markedConfig = {}\n } = options;\n this.options = options;\n this.markdownInstance = new Marked();\n this.configureLinkRenderer();\n this.configureParagraphRenderer();\n this.configureCodeRenderer();\n this.configureHtmlEscapeRenderer();\n // user config at last\n this.markdownInstance.use(markedConfig);\n }\n configureHtmlEscapeRenderer() {\n if (!this.options.escapeRawHtml) return;\n const renderer = {\n html(token) {\n const {\n raw = '',\n text = ''\n } = token;\n return escapeHtml(raw || text, true);\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureLinkRenderer() {\n if (!this.options.openLinksInNewTab) return;\n const renderer = {\n link({\n href,\n title,\n tokens\n }) {\n const text = this.parser.parseInline(tokens);\n const titleAttr = title ? ` title=\"${title}\"` : '';\n return `<a href=\"${href}\"${titleAttr} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureParagraphRenderer() {\n const {\n paragraphTag\n } = this.options;\n if (!paragraphTag) return;\n const renderer = {\n paragraph({\n tokens\n }) {\n return `<${paragraphTag}>${this.parser.parseInline(tokens)}</${paragraphTag}>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n configureCodeRenderer() {\n const renderer = {\n code({\n text,\n raw,\n lang,\n escaped,\n codeBlockStyle\n }) {\n const infoString = (lang || '').trim();\n const langString = infoString.match(other.notSpaceStart)?.[0];\n const code = `${text.replace(other.endingNewline, '')}\\n`;\n const isIndentedCode = codeBlockStyle === 'indented';\n // if code is indented, it's done because it has no end tag\n const streamStatus = isIndentedCode || other.completeFencedCode.test(raw) ? 'done' : 'loading';\n const escapedCode = escaped ? code : escapeHtml(code, true);\n const classAttr = langString ? ` class=\"language-${escapeHtml(langString)}\"` : '';\n const dataAttrs = ` data-block=\"true\" data-state=\"${streamStatus}\"` + (infoString ? ` data-lang=\"${escapeHtml(infoString)}\"` : '');\n return `<pre><code${dataAttrs}${classAttr}>${escapedCode}</code></pre>\\n`;\n }\n };\n this.markdownInstance.use({\n renderer\n });\n }\n protectCustomTags(content) {\n const placeholders = new Map();\n const customTagNames = Object.keys(this.options.components || {});\n if (customTagNames.length === 0) {\n return {\n protected: content,\n placeholders\n };\n }\n let placeholderIndex = 0;\n const tagNamePattern = customTagNames.map(name => name.toLowerCase().replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|');\n const openTagRegex = new RegExp(`<(${tagNamePattern})(?:\\\\s[^>]*)?>`, 'gi');\n const closeTagRegex = new RegExp(`</(${tagNamePattern})>`, 'gi');\n const positions = [];\n let match;\n openTagRegex.lastIndex = 0;\n match = openTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'open',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = openTagRegex.exec(content);\n }\n closeTagRegex.lastIndex = 0;\n match = closeTagRegex.exec(content);\n while (match !== null) {\n positions.push({\n index: match.index,\n type: 'close',\n tagName: match[1].toLowerCase(),\n match: match[0]\n });\n match = closeTagRegex.exec(content);\n }\n positions.sort((a, b) => a.index - b.index);\n const stack = [];\n const result = [];\n let lastIndex = 0;\n positions.forEach(pos => {\n if (pos.type === 'open') {\n // Self-closing tags don't have inner content, so they shouldn't be pushed to the stack.\n if (!pos.match.endsWith('/>')) {\n stack.push({\n tagName: pos.tagName,\n start: pos.index,\n openTag: pos.match\n });\n }\n } else if (pos.type === 'close' && stack.length > 0 && stack[stack.length - 1].tagName === pos.tagName) {\n const open = stack.pop();\n if (stack.length === 0) {\n const startPos = open.start;\n const endPos = pos.index + pos.match.length;\n const openTag = open.openTag;\n const closeTag = pos.match;\n const innerContent = content.slice(startPos + openTag.length, pos.index);\n if (lastIndex < startPos) {\n result.push(content.slice(lastIndex, startPos));\n }\n if (innerContent.includes('\\n\\n')) {\n const protectedInner = innerContent.replace(/\\n\\n/g, () => {\n const ph = `__X_MD_PLACEHOLDER_${placeholderIndex++}__`;\n placeholders.set(ph, '\\n\\n');\n return ph;\n });\n result.push(openTag + protectedInner + closeTag);\n } else {\n result.push(openTag + innerContent + closeTag);\n }\n lastIndex = endPos;\n }\n }\n });\n if (lastIndex < content.length) {\n result.push(content.slice(lastIndex));\n }\n return {\n protected: result.join(''),\n placeholders\n };\n }\n restorePlaceholders(content, placeholders) {\n if (placeholders.size === 0) {\n return content;\n }\n return content.replace(/__X_MD_PLACEHOLDER_\\d+__/g, match => placeholders.get(match) ?? match);\n }\n parse(content) {\n if (this.options.protectCustomTagNewlines) {\n const {\n protected: protectedContent,\n placeholders\n } = this.protectCustomTags(content);\n const parsed = this.markdownInstance.parse(protectedContent);\n return this.restorePlaceholders(parsed, placeholders);\n }\n return this.markdownInstance.parse(content);\n }\n}\nexport default Parser;","import DOMPurify from 'dompurify';\nimport parseHtml, { domToReact } from 'html-react-parser';\nimport React from 'react';\nimport AnimationText from \"../AnimationText\";\nclass Renderer {\n options;\n static NON_WHITESPACE_REGEX = /[^\\r\\n\\s]+/;\n constructor(options) {\n this.options = options;\n }\n\n /**\n * Detect unclosed tags using regular expressions\n */\n detectUnclosedTags(htmlString) {\n const unclosedTags = new Set();\n const stack = [];\n const tagRegex = /<\\/?([a-zA-Z][a-zA-Z0-9-]*)(?:\\s[^>]*)?>/g;\n let match = tagRegex.exec(htmlString);\n while (match !== null) {\n const [fullMatch, tagName] = match;\n const isClosing = fullMatch.startsWith('</');\n const isSelfClosing = fullMatch.endsWith('/>');\n if (this.options.components?.[tagName.toLowerCase()]) {\n if (isClosing) {\n // Found closing tag, pop from stack\n const lastIndex = stack.lastIndexOf(tagName.toLowerCase());\n if (lastIndex !== -1) {\n stack.splice(lastIndex, 1);\n }\n } else if (!isSelfClosing) {\n // Found opening tag, push to stack\n stack.push(tagName.toLowerCase());\n }\n }\n match = tagRegex.exec(htmlString);\n }\n\n // Remaining tags in stack are unclosed\n stack.forEach(tag => {\n unclosedTags.add(tag);\n });\n return unclosedTags;\n }\n\n /**\n * Configure DOMPurify to preserve components and target attributes, filter everything else\n */\n configureDOMPurify() {\n const customComponents = Object.keys(this.options.components || {});\n const userConfig = this.options.dompurifyConfig || {};\n const allowedTags = Array.isArray(userConfig.ADD_TAGS) ? userConfig.ADD_TAGS : [];\n const addAttr = Array.isArray(userConfig.ADD_ATTR) ? userConfig.ADD_ATTR : [];\n return {\n ...userConfig,\n ADD_TAGS: Array.from(new Set([...customComponents, ...allowedTags])),\n ADD_ATTR: Array.from(new Set(['target', 'rel', ...addAttr]))\n };\n }\n createReplaceElement(unclosedTags, cidRef) {\n const {\n enableAnimation,\n animationConfig\n } = this.options.streaming || {};\n return domNode => {\n const key = `x-markdown-component-${cidRef.current++}`;\n\n // Check if it's a text node with data\n const isValidTextNode = domNode.type === 'text' && domNode.data && Renderer.NON_WHITESPACE_REGEX.test(domNode.data);\n // Skip animation for text nodes inside custom components to preserve their internal structure\n const parentTagName = domNode.parent?.name;\n const isParentCustomComponent = parentTagName && this.options.components?.[parentTagName];\n const shouldReplaceText = enableAnimation && isValidTextNode && !isParentCustomComponent;\n if (shouldReplaceText) {\n return /*#__PURE__*/React.createElement(AnimationText, {\n text: domNode.data,\n key,\n animationConfig\n });\n }\n if (!('name' in domNode)) return;\n const {\n name,\n attribs,\n children\n } = domNode;\n const renderElement = this.options.components?.[name];\n if (renderElement) {\n const streamStatus = unclosedTags?.has(name) ? 'loading' : 'done';\n const props = {\n domNode,\n streamStatus,\n key,\n ...attribs,\n ...(attribs.disabled !== undefined && {\n disabled: true\n }),\n ...(attribs.checked !== undefined && {\n checked: true\n })\n };\n\n // Handle class and className merging\n const classes = [props.className, props.classname, props.class].filter(Boolean).join(' ').trim();\n props.className = classes || '';\n if (name === 'code') {\n const {\n 'data-block': block = 'false',\n 'data-state': codeStreamStatus = 'done'\n } = attribs || {};\n props.block = block === 'true';\n props.streamStatus = codeStreamStatus === 'loading' ? 'loading' : 'done';\n const langFromData = attribs?.['data-lang'];\n const langFromClass = attribs?.class?.match(/(?:^|\\s)language-([^\\s]+)/)?.[1] ?? attribs?.class?.match(/(?:^|\\s)lang-([^\\s]+)/)?.[1];\n const lang = langFromData || langFromClass;\n if (lang) {\n props.lang = lang;\n }\n }\n if (children) {\n props.children = this.processChildren(children, unclosedTags, cidRef);\n }\n return /*#__PURE__*/React.createElement(renderElement, props);\n }\n };\n }\n processChildren(children, unclosedTags, cidRef) {\n return domToReact(children, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n processHtml(htmlString) {\n const unclosedTags = this.detectUnclosedTags(htmlString);\n const cidRef = {\n current: 0\n };\n\n // Use DOMPurify to clean HTML while preserving custom components and target attributes\n const purifyConfig = this.configureDOMPurify();\n const cleanHtml = DOMPurify.sanitize(htmlString, purifyConfig);\n return parseHtml(cleanHtml, {\n replace: this.createReplaceElement(unclosedTags, cidRef)\n });\n }\n render(html) {\n return this.processHtml(html);\n }\n}\nexport default Renderer;","import React, { useEffect, useMemo, useRef, useState } from 'react';\nconst AnimationText = /*#__PURE__*/React.memo(props => {\n const {\n text,\n animationConfig\n } = props;\n const {\n fadeDuration = 200,\n easing = 'ease-in-out'\n } = animationConfig || {};\n const [chunks, setChunks] = useState([]);\n const prevTextRef = useRef('');\n useEffect(() => {\n if (text === prevTextRef.current) return;\n if (!(prevTextRef.current && text.indexOf(prevTextRef.current) === 0)) {\n setChunks([text]);\n prevTextRef.current = text;\n return;\n }\n const newText = text.slice(prevTextRef.current.length);\n if (!newText) return;\n setChunks(prev => [...prev, newText]);\n prevTextRef.current = text;\n }, [text]);\n const animationStyle = useMemo(() => ({\n animation: `x-markdown-fade-in ${fadeDuration}ms ${easing} forwards`,\n color: 'inherit'\n }), [fadeDuration, easing]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, chunks.map((text, index) => /*#__PURE__*/React.createElement(\"span\", {\n style: animationStyle,\n key: `animation-text-${index}`\n }, text)));\n});\nexport default AnimationText;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport \"./DebugPanel.css\";\nconst CONSTANTS = {\n FPS_THRESHOLD: {\n GOOD: 55,\n WARNING: 40\n },\n COLORS: {\n GOOD: '#52c41a',\n WARNING: '#faad14',\n DANGER: '#ff4d4f'\n },\n CHART: {\n WIDTH: 750,\n HEIGHT: 400,\n PADDING: 80\n }\n};\nconst getInitialPosition = () => {\n if (typeof window === 'undefined') {\n return {\n x: 12,\n y: 12\n };\n }\n return {\n x: window.innerWidth - 220,\n y: window.innerHeight / 2 - 100\n };\n};\nconst DebugPanel = () => {\n const [fps, setFps] = useState(0);\n const [memory, setMemory] = useState(0);\n const [isRecording, setIsRecording] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [records, setRecords] = useState([]);\n const [position, setPosition] = useState(getInitialPosition());\n const [isMounted, setIsMounted] = useState(false);\n const recordingRef = useRef([]);\n const frameTimesRef = useRef([]);\n const lastTimeRef = useRef(0);\n const frameCountRef = useRef(0);\n const animationRef = useRef(undefined);\n const dragRef = useRef({\n isDragging: false,\n startX: 0,\n startY: 0,\n initialX: 0,\n initialY: 0\n });\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n\n // 仅在客户端初始化\n if (!isMounted) {\n setIsMounted(true);\n lastTimeRef.current = performance.now();\n }\n const update = () => {\n const now = performance.now();\n const delta = now - lastTimeRef.current;\n frameTimesRef.current.push(delta);\n if (frameTimesRef.current.length > 60) frameTimesRef.current.shift();\n frameCountRef.current++;\n if (delta >= 1000) {\n const currentFps = Math.round(frameCountRef.current * 1000 / delta);\n const currentMemory = getMemoryUsage();\n setFps(currentFps);\n setMemory(currentMemory);\n if (isRecording) {\n recordingRef.current.push({\n timestamp: Date.now(),\n fps: currentFps,\n memory: currentMemory\n });\n }\n frameCountRef.current = 0;\n lastTimeRef.current = now;\n }\n animationRef.current = requestAnimationFrame(update);\n };\n animationRef.current = requestAnimationFrame(update);\n return () => {\n if (animationRef.current !== undefined) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, [isRecording, isMounted]);\n const getMemoryUsage = () => {\n const perf = performance;\n return perf.memory ? Math.round(perf.memory.usedJSHeapSize / 1024 / 1024) : 0;\n };\n const formatMemory = mb => {\n if (mb < 1) return `${Math.round(mb * 1024)} KB`;\n if (mb >= 1024) return `${(mb / 1024).toFixed(2)} GB`;\n return `${mb.toFixed(2)} MB`;\n };\n const getFpsColor = value => {\n if (value >= CONSTANTS.FPS_THRESHOLD.GOOD) return CONSTANTS.COLORS.GOOD;\n if (value >= CONSTANTS.FPS_THRESHOLD.WARNING) return CONSTANTS.COLORS.WARNING;\n return CONSTANTS.COLORS.DANGER;\n };\n const toggleRecording = useCallback(() => {\n if (isRecording) {\n setIsRecording(false);\n setRecords([...recordingRef.current]);\n setShowModal(true);\n } else {\n recordingRef.current = [];\n setIsRecording(true);\n }\n }, [isRecording]);\n const handleMouseDown = useCallback(e => {\n if (e.target.closest('.x-markdown-debug-action')) return;\n dragRef.current = {\n isDragging: true,\n startX: e.clientX,\n startY: e.clientY,\n initialX: position.x,\n initialY: position.y\n };\n }, [position]);\n const handleMouseMove = useCallback(e => {\n if (!dragRef.current.isDragging) return;\n const dx = e.clientX - dragRef.current.startX;\n const dy = e.clientY - dragRef.current.startY;\n setPosition({\n x: dragRef.current.initialX + dx,\n y: dragRef.current.initialY + dy\n });\n }, []);\n const handleMouseUp = useCallback(() => {\n dragRef.current.isDragging = false;\n }, []);\n useEffect(() => {\n // 仅在客户端运行\n if (typeof window === 'undefined') return;\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n const PerformanceChart = () => {\n if (!records.length) return null;\n const {\n WIDTH,\n HEIGHT,\n PADDING\n } = CONSTANTS.CHART;\n const chartWidth = WIDTH - PADDING * 2;\n const chartHeight = HEIGHT - PADDING * 2;\n const startTime = records[0]?.timestamp ?? 0;\n const endTime = records[records.length - 1]?.timestamp ?? 0;\n const duration = endTime - startTime || 1;\n const maxFps = Math.max(...records.map(r => r.fps), 60);\n const maxMemory = Math.max(...records.map(r => r.memory), 0) * 1.1;\n const avgFps = records.length > 0 ? records.reduce((sum, r) => sum + r.fps, 0) / records.length : 0;\n const avgMemory = records.length > 0 ? records.reduce((sum, r) => sum + r.memory, 0) / records.length : 0;\n const minFps = records.length > 0 ? Math.min(...records.map(r => r.fps)) : 0;\n const maxFpsValue = records.length > 0 ? Math.max(...records.map(r => r.fps)) : 0;\n const createPoints = (key, max) => records.map(r => {\n const x = PADDING + (r.timestamp - startTime) / duration * chartWidth;\n const y = PADDING + chartHeight - r[key] / max * chartHeight;\n return `${x},${y}`;\n }).join(' ');\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-content\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stats-summary\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Duration\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, (duration / 1000).toFixed(2), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\",\n style: {\n color: getFpsColor(avgFps)\n }\n }, avgFps.toFixed(1))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"FPS Range\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, minFps, \" - \", maxFpsValue)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-item\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-label\"\n }, \"Memory Avg\"), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-stat-value\"\n }, formatMemory(avgMemory)))), /*#__PURE__*/React.createElement(\"svg\", {\n width: WIDTH,\n height: HEIGHT,\n className: \"x-markdown-debug-chart-full\",\n role: \"img\",\n \"aria-label\": \"Performance chart showing FPS and memory usage over time\"\n }, /*#__PURE__*/React.createElement(\"title\", null, \"Performance Chart\"), [0, 0.25, 0.5, 0.75, 1].map(ratio => /*#__PURE__*/React.createElement(\"g\", {\n key: ratio\n }, /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING,\n y1: PADDING + chartHeight * ratio,\n x2: WIDTH - PADDING,\n y2: PADDING + chartHeight * ratio,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }), /*#__PURE__*/React.createElement(\"line\", {\n x1: PADDING + chartWidth * ratio,\n y1: PADDING,\n x2: PADDING + chartWidth * ratio,\n y2: HEIGHT - PADDING,\n stroke: \"rgba(255,255,255,0.1)\",\n strokeWidth: \"1\"\n }))), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('fps', maxFps),\n fill: \"none\",\n stroke: CONSTANTS.COLORS.GOOD,\n strokeWidth: \"2\",\n className: \"fps-line\"\n }), /*#__PURE__*/React.createElement(\"polyline\", {\n points: createPoints('memory', maxMemory),\n fill: \"none\",\n stroke: \"#1890ff\",\n strokeWidth: \"2\",\n className: \"memory-line\"\n }), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, maxFps.toFixed(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: HEIGHT - PADDING,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"12\",\n textAnchor: \"end\"\n }, \"0\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING - 10,\n y: PADDING - 15,\n fill: CONSTANTS.COLORS.GOOD,\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"end\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 20,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(maxMemory)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: HEIGHT - PADDING,\n fill: \"#1890ff\",\n fontSize: \"12\",\n textAnchor: \"start\"\n }, formatMemory(0)), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING + 10,\n y: PADDING + 5,\n fill: \"#1890ff\",\n fontSize: \"14\",\n fontWeight: \"bold\",\n textAnchor: \"start\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"text\", {\n x: PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, \"0s\"), /*#__PURE__*/React.createElement(\"text\", {\n x: WIDTH - PADDING,\n y: HEIGHT - PADDING + 20,\n fill: \"rgba(255,255,255,0.6)\",\n fontSize: \"12\",\n textAnchor: \"middle\"\n }, (duration / 1000).toFixed(1), \"s\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: CONSTANTS.COLORS.GOOD\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"FPS\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-legend-item\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-legend-color\",\n style: {\n backgroundColor: '#1890ff'\n }\n }), /*#__PURE__*/React.createElement(\"span\", null, \"Memory\"))));\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-panel\",\n style: {\n left: position.x,\n top: position.y,\n cursor: dragRef.current.isDragging ? 'grabbing' : 'grab'\n },\n onMouseDown: handleMouseDown\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"FPS\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\",\n style: {\n color: getFpsColor(fps)\n }\n }, fps)), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-row\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-label\"\n }, \"Memory\"), /*#__PURE__*/React.createElement(\"span\", {\n className: \"x-markdown-debug-value\"\n }, formatMemory(memory))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-actions\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: `x-markdown-debug-action x-markdown-debug-record-btn ${isRecording ? 'recording' : ''}`,\n onClick: toggleRecording\n }, isRecording ? '⏹ Stop' : '⏺ Record'), records.length > 0 && !isRecording && /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-action\",\n onClick: () => setShowModal(true)\n }, \"\\uD83D\\uDCCA View\"))), showModal && records.length > 0 ? /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-overlay\",\n onClick: () => setShowModal(false)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal\",\n onClick: e => e.stopPropagation()\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"x-markdown-debug-modal-header\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n style: {\n color: '#fff',\n fontSize: 18,\n fontWeight: '600'\n }\n }, \"Performance Recording\"), /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n className: \"x-markdown-debug-close-btn\",\n onClick: () => setShowModal(false)\n }, \"\\u2715\")), /*#__PURE__*/React.createElement(PerformanceChart, null))) : null);\n};\nexport default DebugPanel;","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { StreamCacheTokenType } from \"../interface\";\n\n/* ------------ Type ------------ */\n\n/**\n * When a token is about to be committed, if a non-empty string is returned,\n * only that prefix is committed and the rest of the pending content is left\n * for subsequent recognition (used for handover scenarios like list followed by `).\n * Returns null to commit the entire pending content by default.\n */\n\n/* ------------ Constants ------------ */\n// Validates whether a token is still incomplete in the streaming context.\n// Returns true if the token is syntactically incomplete; false if it is complete or invalid.\nconst STREAM_INCOMPLETE_REGEX = {\n image: [/^!\\[[^\\]\\r\\n]{0,1000}$/, /^!\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n link: [/^\\[[^\\]\\r\\n]{0,1000}$/, /^\\[[^\\r\\n]{0,1000}\\]\\(*[^)\\r\\n]{0,1000}$/],\n html: [/^<\\/$/, /^<\\/?[a-zA-Z][a-zA-Z0-9-]{0,100}[^>\\r\\n]{0,1000}$/],\n commonEmphasis: [/^(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n // regex2 matches cases like \"- **\" (list item with emphasis start).\n list: [/^[-+*]\\s{0,3}$/, /^[-+*]\\s{1,3}(\\*{1,3}|_{1,3})(?!\\s)(?!.*\\1$)[^\\r\\n]{0,1000}$/],\n 'inline-code': [/^`[^`\\r\\n]{0,300}$/]\n};\nconst isTableInComplete = markdown => {\n if (markdown.includes('\\n\\n')) return false;\n const lines = markdown.split('\\n');\n if (lines.length <= 1) return true;\n const [header, separator] = lines;\n const trimmedHeader = header.trim();\n if (!/^\\|.*\\|$/.test(trimmedHeader)) return false;\n const trimmedSeparator = separator.trim();\n const columns = trimmedSeparator.split('|').map(col => col.trim()).filter(Boolean);\n const separatorRegex = /^:?-+:?$/;\n return columns.every((col, index) => index === columns.length - 1 ? col === ':' || separatorRegex.test(col) : separatorRegex.test(col));\n};\nconst tokenRecognizerMap = {\n [StreamCacheTokenType.Link]: {\n tokenType: StreamCacheTokenType.Link,\n isStartOfToken: markdown => markdown.startsWith('['),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.link.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Image]: {\n tokenType: StreamCacheTokenType.Image,\n isStartOfToken: markdown => markdown.startsWith('!'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.image.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Html]: {\n tokenType: StreamCacheTokenType.Html,\n isStartOfToken: markdown => markdown.startsWith('<'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.html.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.Emphasis]: {\n tokenType: StreamCacheTokenType.Emphasis,\n isStartOfToken: markdown => markdown.startsWith('*') || markdown.startsWith('_'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.commonEmphasis.some(re => re.test(markdown))\n },\n [StreamCacheTokenType.List]: {\n tokenType: StreamCacheTokenType.List,\n isStartOfToken: markdown => /^[-+*]/.test(markdown),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX.list.some(re => re.test(markdown)),\n // On backtick after list, commit only the prefix; treat the rest as inline code.\n getCommitPrefix: pending => {\n const listPrefix = pending.match(/^([-+*]\\s{0,3})/)?.[1];\n const rest = listPrefix ? pending.slice(listPrefix.length) : '';\n return listPrefix && rest.startsWith('`') ? listPrefix : null;\n }\n },\n [StreamCacheTokenType.Table]: {\n tokenType: StreamCacheTokenType.Table,\n isStartOfToken: markdown => markdown.startsWith('|'),\n isStreamingValid: isTableInComplete\n },\n [StreamCacheTokenType.InlineCode]: {\n tokenType: StreamCacheTokenType.InlineCode,\n isStartOfToken: markdown => markdown.startsWith('`'),\n isStreamingValid: markdown => STREAM_INCOMPLETE_REGEX['inline-code'].some(re => re.test(markdown))\n }\n};\nconst recognize = (cache, tokenType) => {\n const recognizer = tokenRecognizerMap[tokenType];\n if (!recognizer) return;\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text && recognizer.isStartOfToken(pending)) {\n cache.token = tokenType;\n return;\n }\n if (token === tokenType && !recognizer.isStreamingValid(pending)) {\n const prefix = recognizer.getCommitPrefix?.(pending);\n if (prefix) {\n cache.completeMarkdown += prefix;\n cache.pending = pending.slice(prefix.length);\n cache.token = StreamCacheTokenType.Text;\n return;\n }\n commitCache(cache);\n }\n};\nconst recognizeHandlers = Object.values(tokenRecognizerMap).map(rec => ({\n tokenType: rec.tokenType,\n recognize: cache => recognize(cache, rec.tokenType)\n}));\n\n/* ------------ Utils ------------ */\nconst getInitialCache = () => ({\n pending: '',\n token: StreamCacheTokenType.Text,\n processedLength: 0,\n completeMarkdown: ''\n});\nconst commitCache = cache => {\n if (cache.pending) {\n cache.completeMarkdown += cache.pending;\n cache.pending = '';\n }\n cache.token = StreamCacheTokenType.Text;\n};\nconst isInCodeBlock = (text, isFinalChunk = false) => {\n const lines = text.split('\\n');\n let inFenced = false;\n let fenceChar = '';\n let fenceLen = 0;\n for (let i = 0; i < lines.length; i++) {\n const rawLine = lines[i];\n const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n const match = line.match(/^(`{3,}|~{3,})(.*)$/);\n if (match) {\n const fence = match[1];\n const after = match[2];\n const char = fence[0];\n const len = fence.length;\n if (!inFenced) {\n inFenced = true;\n fenceChar = char;\n fenceLen = len;\n } else {\n // Check if this is a valid closing fence\n const isValidEnd = char === fenceChar && len >= fenceLen && /^\\s*$/.test(after);\n if (isValidEnd) {\n // In streaming context, only close if this is the final chunk\n // or if there are more lines after this fence\n if (isFinalChunk || i < lines.length - 1) {\n inFenced = false;\n fenceChar = '';\n fenceLen = 0;\n }\n // Otherwise, keep the fence open for potential streaming continuation\n }\n }\n }\n }\n return inFenced;\n};\nconst sanitizeForURIComponent = input => {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n const charCode = input.charCodeAt(i);\n\n // 处理代理对:保留合法,跳过孤立\n if (charCode >= 0xd800 && charCode <= 0xdbff) {\n // High surrogate\n // Check for a following low surrogate to form a valid pair\n if (i + 1 < input.length && input.charCodeAt(i + 1) >= 0xdc00 && input.charCodeAt(i + 1) <= 0xdfff) {\n result += input[i] + input[i + 1];\n i++; // Skip the low surrogate as it's already processed\n }\n // Lone high surrogates are otherwise skipped\n } else if (charCode < 0xdc00 || charCode > 0xdfff) {\n // Append characters that are not lone low surrogates\n result += input[i];\n }\n // Lone low surrogates are otherwise skipped\n }\n return result;\n};\nconst safeEncodeURIComponent = str => {\n try {\n return encodeURIComponent(str);\n } catch (e) {\n if (e instanceof URIError) {\n return encodeURIComponent(sanitizeForURIComponent(str));\n }\n return '';\n }\n};\n\n/* ------------ Main Hook ------------ */\nconst useStreaming = (input, config) => {\n const {\n streaming,\n components = {}\n } = config || {};\n const {\n hasNextChunk: enableCache = false,\n incompleteMarkdownComponentMap\n } = streaming || {};\n const [output, setOutput] = useState('');\n const cacheRef = useRef(getInitialCache());\n const handleIncompleteMarkdown = useCallback(cache => {\n const {\n token,\n pending\n } = cache;\n if (token === StreamCacheTokenType.Text) return;\n /**\n * An image tag starts with '!', if it's the only character, it's incomplete and should be stripped.\n * !\n * ^\n */\n if (token === StreamCacheTokenType.Image && pending === '!') return undefined;\n\n /**\n * If a table has more than two lines (header, separator, and at least one row),\n * it's considered complete enough to not be replaced by a placeholder.\n * | column1 | column2 |\\n| -- | --|\\n\n * ^\n */\n if (token === StreamCacheTokenType.Table && pending.split('\\n').length > 2) {\n return pending;\n }\n const componentMap = incompleteMarkdownComponentMap || {};\n const componentName = componentMap[token] || `incomplete-${token}`;\n const encodedPending = safeEncodeURIComponent(pending);\n return components?.[componentName] ? `<${componentName} data-raw=\"${encodedPending}\" />` : undefined;\n }, [incompleteMarkdownComponentMap, components]);\n const processStreaming = useCallback(text => {\n if (!text) {\n setOutput('');\n cacheRef.current = getInitialCache();\n return;\n }\n const expectedPrefix = cacheRef.current.completeMarkdown + cacheRef.current.pending;\n // Reset cache if input doesn't continue from previous state\n if (!text.startsWith(expectedPrefix)) {\n cacheRef.current = getInitialCache();\n }\n const cache = cacheRef.current;\n const chunk = text.slice(cache.processedLength);\n if (!chunk) return;\n cache.processedLength += chunk.length;\n for (const char of chunk) {\n cache.pending += char;\n const isContentInCodeBlock = isInCodeBlock(cache.completeMarkdown + cache.pending);\n if (isContentInCodeBlock) {\n commitCache(cache);\n continue;\n }\n if (cache.token === StreamCacheTokenType.Text) {\n for (const handler of recognizeHandlers) handler.recognize(cache);\n } else {\n const handler = recognizeHandlers.find(handler => handler.tokenType === cache.token);\n handler?.recognize(cache);\n // After commit (e.g. list → Text), re-run all recognizers so pending (e.g. \"`\") becomes the new token (e.g. inline-code)\n const tokenAfterRecognize = cache.token;\n if (tokenAfterRecognize === StreamCacheTokenType.Text) {\n for (const h of recognizeHandlers) h.recognize(cache);\n }\n }\n if (cache.token === StreamCacheTokenType.Text) {\n commitCache(cache);\n }\n }\n const incompletePlaceholder = handleIncompleteMarkdown(cache);\n setOutput(cache.completeMarkdown + (incompletePlaceholder || ''));\n }, [handleIncompleteMarkdown]);\n useEffect(() => {\n if (typeof input !== 'string') {\n console.error(`X-Markdown: input must be string, not ${typeof input}.`);\n setOutput('');\n return;\n }\n enableCache ? processStreaming(input) : setOutput(input);\n }, [input, enableCache, processStreaming]);\n return output;\n};\nexport default useStreaming;","export let StreamCacheTokenType = /*#__PURE__*/function (StreamCacheTokenType) {\n StreamCacheTokenType[\"Text\"] = \"text\";\n StreamCacheTokenType[\"Link\"] = \"link\";\n StreamCacheTokenType[\"Image\"] = \"image\";\n StreamCacheTokenType[\"Html\"] = \"html\";\n StreamCacheTokenType[\"Emphasis\"] = \"emphasis\";\n StreamCacheTokenType[\"List\"] = \"list\";\n StreamCacheTokenType[\"Table\"] = \"table\";\n StreamCacheTokenType[\"InlineCode\"] = \"inline-code\";\n return StreamCacheTokenType;\n}({});","import { useRef, useState } from \"react\";\n\nexport type ReviewDecision = \"approve\" | \"reject\";\n\nexport interface ReviewDecisionState {\n feedback: string;\n setFeedback(value: string): void;\n pending: ReviewDecision | null;\n submitted: boolean;\n error: unknown;\n submit(decision: ReviewDecision): Promise<boolean>;\n}\n\n/** Shared decision state for Console and WebApp review adapters. */\nexport function useReviewDecision(\n onSubmit: (decision: ReviewDecision, trimmedFeedback: string) => void | Promise<void>,\n): ReviewDecisionState {\n const submittingRef = useRef(false);\n const [feedback, setFeedback] = useState(\"\");\n const [pending, setPending] = useState<ReviewDecision | null>(null);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState<unknown>(null);\n\n const submit = async (decision: ReviewDecision): Promise<boolean> => {\n if (submittingRef.current) return false;\n submittingRef.current = true;\n setPending(decision);\n setError(null);\n try {\n await Promise.resolve(onSubmit(decision, feedback.trim()));\n setSubmitted(true);\n return true;\n } catch (submitError) {\n setError(submitError);\n return false;\n } finally {\n submittingRef.current = false;\n setPending(null);\n }\n };\n\n return { feedback, setFeedback, pending, submitted, error, submit };\n}\n"],"mappings":"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","names":["React","useMemo","React","text","React","React","useEffect","useRef","useState","useState","useRef","useEffect","r","React","useCallback","useEffect","useRef","useState","StreamCacheTokenType","useState","useRef","useCallback","handler","useEffect","React","useMemo","useRef","useState"]}