@core-pilot/client-vue 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client-vue.css +1 -1
- package/dist/cjs/components/bubble-list/index.js +1 -1
- package/dist/cjs/components/bubble-list/index.js.map +1 -1
- package/dist/cjs/components/core-tips/index.js.map +1 -1
- package/dist/cjs/components/editor-sender/index.js +1 -1
- package/dist/cjs/components/editor-sender/index.js.map +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue.js +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue2.js +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue2.js.map +1 -1
- package/dist/cjs/components/x-markdown/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js.map +1 -1
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/bubble-list/index.js +1 -0
- package/dist/es/components/bubble-list/index.js.map +1 -1
- package/dist/es/components/core-tips/index.js.map +1 -1
- package/dist/es/components/editor-sender/index.js +37 -5
- package/dist/es/components/editor-sender/index.js.map +1 -1
- package/dist/es/components/editor-sender/source/index.vue.js +1 -1
- package/dist/es/components/editor-sender/source/index.vue2.js +1 -0
- package/dist/es/components/editor-sender/source/index.vue2.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +25 -11
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport 'katex/dist/katex.min.css'\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n }\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n watch(() => [props.text, props.typing], ([text, typing]) => {\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index, action, payload: any) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload) {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n children\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n ElTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["checkAndReturnRefList","text","reg","match","exec","refListStr","refList","JSON","parse","error","name","props","type","String","default","autoHideThinking","Boolean","typing","speed","Number","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamCall","stream","value","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","computed","content","includes","res","duration","toFixed","length","watch","update","stop","checkReg","test","setSpeed","immediate","refConfig","getRefConfig","refContainer","querySelector","textContent","renderComplete","debounce","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleAClick","stopPropagation","preventDefault","href","id","title","ext","split","pop","window","open","ElMessage","btnClick","index","action","payload","validate","handleClick","highlight","page","source","data","getContentText","innerText","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","newImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","computedForm","mdAst","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","run","nextTick","details","summary","Accordion","hastToVNode","row","blackTagNames","map","h","class","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","parentScope","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","ElTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","viewTree","parseCorePilot","trim","onUpdated","render","_createVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport 'katex/dist/katex.min.css'\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // 如果当前是历史消息,则禁用点击事件\n const disabled = computed(() => {\n return props.isHistoryMessage;\n })\n\n watch(() => [props.text, props.typing], ([text, typing]) => {\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index, action, payload: any) => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload) {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n children\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n ElTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["checkAndReturnRefList","text","reg","match","exec","refListStr","refList","JSON","parse","error","name","props","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamCall","stream","value","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","computed","content","includes","res","duration","toFixed","length","disabled","watch","update","stop","checkReg","test","setSpeed","immediate","refConfig","getRefConfig","refContainer","querySelector","textContent","renderComplete","debounce","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleAClick","stopPropagation","preventDefault","href","id","title","ext","split","pop","window","open","ElMessage","btnClick","index","action","payload","validate","handleClick","highlight","page","source","data","getContentText","innerText","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","newImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","computedForm","mdAst","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","run","nextTick","details","summary","Accordion","hastToVNode","row","blackTagNames","map","h","class","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","parentScope","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","ElTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","viewTree","parseCorePilot","trim","onUpdated","render","_createVNode"],"mappings":"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"}
|