@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 +0,0 @@
1
- {"version":3,"sources":["../../../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":["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"]}