@core-pilot/client-vue 0.0.10 → 0.0.11

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 (51) hide show
  1. package/dist/cjs/client-vue.css +1 -1
  2. package/dist/cjs/components/x-markdown/composables/useFormHandler.js +2 -0
  3. package/dist/cjs/components/x-markdown/composables/useFormHandler.js.map +1 -0
  4. package/dist/cjs/components/x-markdown/composables/useImageLoader.js +2 -0
  5. package/dist/cjs/components/x-markdown/composables/useImageLoader.js.map +1 -0
  6. package/dist/cjs/components/x-markdown/composables/useMarkdownProcessor.js +2 -0
  7. package/dist/cjs/components/x-markdown/composables/useMarkdownProcessor.js.map +1 -0
  8. package/dist/cjs/components/x-markdown/composables/useRefHandler.js +2 -0
  9. package/dist/cjs/components/x-markdown/composables/useRefHandler.js.map +1 -0
  10. package/dist/cjs/components/x-markdown/composables/useStreamHandler.js +2 -0
  11. package/dist/cjs/components/x-markdown/composables/useStreamHandler.js.map +1 -0
  12. package/dist/cjs/components/x-markdown/index.js +1 -1
  13. package/dist/cjs/components/x-markdown/index.js.map +1 -1
  14. package/dist/cjs/components/x-markdown/renderers/hastRenderer.js +2 -0
  15. package/dist/cjs/components/x-markdown/renderers/hastRenderer.js.map +1 -0
  16. package/dist/cjs/components/x-markdown/utils/disabledUtils.js +2 -0
  17. package/dist/cjs/components/x-markdown/utils/disabledUtils.js.map +1 -0
  18. package/dist/cjs/components/x-markdown/utils/formUtils.js +2 -0
  19. package/dist/cjs/components/x-markdown/utils/formUtils.js.map +1 -0
  20. package/dist/cjs/components/x-markdown/utils/jsonUtils.js +2 -0
  21. package/dist/cjs/components/x-markdown/utils/jsonUtils.js.map +1 -0
  22. package/dist/cjs/components/x-markdown/utils/refUtils.js +2 -0
  23. package/dist/cjs/components/x-markdown/utils/refUtils.js.map +1 -0
  24. package/dist/cjs/components/x-markdown/utils/textFormatUtils.js +2 -0
  25. package/dist/cjs/components/x-markdown/utils/textFormatUtils.js.map +1 -0
  26. package/dist/es/client-vue.css +1 -1
  27. package/dist/es/components/x-markdown/composables/useFormHandler.js +66 -0
  28. package/dist/es/components/x-markdown/composables/useFormHandler.js.map +1 -0
  29. package/dist/es/components/x-markdown/composables/useImageLoader.js +58 -0
  30. package/dist/es/components/x-markdown/composables/useImageLoader.js.map +1 -0
  31. package/dist/es/components/x-markdown/composables/useMarkdownProcessor.js +48 -0
  32. package/dist/es/components/x-markdown/composables/useMarkdownProcessor.js.map +1 -0
  33. package/dist/es/components/x-markdown/composables/useRefHandler.js +80 -0
  34. package/dist/es/components/x-markdown/composables/useRefHandler.js.map +1 -0
  35. package/dist/es/components/x-markdown/composables/useStreamHandler.js +45 -0
  36. package/dist/es/components/x-markdown/composables/useStreamHandler.js.map +1 -0
  37. package/dist/es/components/x-markdown/index.js +73 -681
  38. package/dist/es/components/x-markdown/index.js.map +1 -1
  39. package/dist/es/components/x-markdown/renderers/hastRenderer.js +427 -0
  40. package/dist/es/components/x-markdown/renderers/hastRenderer.js.map +1 -0
  41. package/dist/es/components/x-markdown/utils/disabledUtils.js +15 -0
  42. package/dist/es/components/x-markdown/utils/disabledUtils.js.map +1 -0
  43. package/dist/es/components/x-markdown/utils/formUtils.js +82 -0
  44. package/dist/es/components/x-markdown/utils/formUtils.js.map +1 -0
  45. package/dist/es/components/x-markdown/utils/jsonUtils.js +20 -0
  46. package/dist/es/components/x-markdown/utils/jsonUtils.js.map +1 -0
  47. package/dist/es/components/x-markdown/utils/refUtils.js +18 -0
  48. package/dist/es/components/x-markdown/utils/refUtils.js.map +1 -0
  49. package/dist/es/components/x-markdown/utils/textFormatUtils.js +46 -0
  50. package/dist/es/components/x-markdown/utils/textFormatUtils.js.map +1 -0
  51. 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 ElConfigProvider\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 CoreTable from '../core-table';\nimport CoreChart from '../core-chart';\nimport CoreCard from '../core-card';\nimport CoreUpload from '../core-upload';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport { InputSchema } from '@/types/index.ts';\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\n/**\n * 检测 JSON 字符串是否完整\n * 使用最高效的方式:快速检查基本结构后直接尝试解析\n */\nconst isCompleteJSON = (jsonStr: string): boolean => {\n if (!jsonStr || jsonStr.trim().length === 0) {\n return false;\n }\n \n const trimmed = jsonStr.trim();\n \n // 快速检查:必须以 { 或 [ 开头\n const firstChar = trimmed[0];\n if (firstChar !== '{' && firstChar !== '[') {\n return false;\n }\n \n // 直接尝试解析,如果成功就是完整的 JSON\n try {\n JSON.parse(trimmed);\n return true;\n } catch (error) {\n // 解析失败,说明 JSON 不完整或格式错误\n return false;\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 historyInputs: {\n type: Object,\n default: () => ({}),\n },\n user: {\n type: String,\n default: 'default',\n },\n authToken: {\n type: String,\n default: 'ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n },\n appId: {\n type: String,\n default: '9a673565-d4f6-4382-bc67-f1beb07df435',\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, any>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null);\n const isRewrite = ref(false);\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const uploadHeaders = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n\n const uploadExtendData = computed(() => {\n return {\n user: props.user,\n }\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 // TODO 后续需要规范相关定义\n // 如果当前是历史消息, 且父级作用域为form,则禁用点击事件\n const checkDisabled = (node: InputSchema) => {\n const { properties = {}, parentScope } = node;\n const { disabled } = properties;\n if (disabled) {\n return true;\n }\n if (parentScope === 'form') {\n return props.isHistoryMessage && !isRewrite.value;\n }\n return false;\n }\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\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: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\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 if (action === 'inner_rewrite') {\n isRewrite.value = true;\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\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 if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\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 = {\n ...schema.properties?.data || {},\n // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景\n ...props.historyInputs || {},\n };\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 * 渲染骨架屏组件\n * @returns {VNode} 骨架屏虚拟节点\n */\n const renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\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 h(ElConfigProvider, {\n locale: zhCN,\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 === 'CoreCard') {\n const slots: any = {};\n \n // 处理 header 插槽\n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, index);\n });\n };\n }\n \n // 处理默认插槽\n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(\n CoreCard,\n {\n ...node.properties,\n },\n slots\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: checkDisabled(node),\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: checkDisabled(node),\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node),\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: checkDisabled(node),\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: checkDisabled(node),\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: checkDisabled(node),\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: checkDisabled(node),\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\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 console.log('children', children, node.children);\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop] && child.value !== undefined);\n return index === -1 ? children : 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 if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreUpload') {\n // 如果在表单中,需要处理 formProp 和双向绑定\n if (node.parentScope === 'form' && node.properties?.formProp) {\n const formProp = node.properties.formProp;\n return h(\n CoreUpload,\n {\n headers: uploadHeaders.value,\n extendData: uploadExtendData.value,\n ...node.properties,\n disabled: checkDisabled(node),\n fileList: hitlData.value[index!]?.[formProp] || [],\n 'onUpdate:fileList': (value: any) => {\n if (!hitlData.value[index!]) {\n hitlData.value[index!] = {};\n }\n // 针对目前上传的文件解析,CA 这边必须得放在files 属性中,故被迫需要进行兼容\n // 这里将基于 __files__ 去识别,后续在coreagent 的 adapter 中进行处理\n if (!hitlData.value[index!].__files__) {\n hitlData.value[index!].__files__ = {};\n }\n hitlData.value[index!].__files__[formProp] = value;\n hitlData.value[index!][formProp] = value;\n },\n }\n );\n }\n // 非表单场景,直接渲染\n return h(\n CoreUpload,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n }\n );\n }\n \n // 处理CorePilot代码块\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 // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\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 } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\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 isRewrite,\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","isCompleteJSON","jsonStr","trim","length","trimmed","firstChar","name","props","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","user","authToken","appId","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","isRewrite","streamCall","stream","value","uploadHeaders","computed","Authorization","uploadExtendData","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","content","includes","res","duration","toFixed","checkDisabled","node","properties","parentScope","disabled","watch","v","o","oldText","startsWith","reset","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","push","Array","isArray","children","child","computedForm","mdAst","preNodes","findPreNodes","preNode","codeNode","className","code","console","run","nextTick","details","summary","Accordion","renderSkeleton","h","class","hastToVNode","row","blackTagNames","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","slots","header","slotItem","CoreCard","ElForm","set","model","ElFormItem","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","log","findIndex","prop","undefined","CoreText","CoreTips","CoreResult","CoreChart","CoreUpload","headers","extendData","fileList","__files__","viewTree","parseCorePilot","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, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { ElMessage } from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport 'katex/dist/katex.min.css';\nimport { Accordion } from './utils/animation.ts';\nimport { formatMarkdownText } from './utils/textFormatUtils';\nimport { useImageLoader } from './composables/useImageLoader';\nimport { useRefHandler } from './composables/useRefHandler';\nimport { useStreamHandler } from './composables/useStreamHandler';\nimport { useMarkdownProcessor } from './composables/useMarkdownProcessor';\nimport { useFormHandler } from './composables/useFormHandler';\nimport { hastToVNode, RendererConfig } from './renderers/hastRenderer';\nimport { checkDisabled, DisabledCheckContext } from './utils/disabledUtils';\nimport { normalizeHistoryInputs, FormDataMap } from './utils/formUtils';\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 historyInputs: {\n type: Object,\n default: () => ({}),\n },\n user: {\n type: String,\n default: 'default',\n },\n authToken: {\n type: String,\n default: 'ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n },\n appId: {\n type: String,\n default: '9a673565-d4f6-4382-bc67-f1beb07df435',\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 isInitAnimation = ref(false);\n\n // 流式渲染处理\n const { context, tagComplete } = useStreamHandler(\n computed(() => props.text),\n computed(() => props.typing),\n computed(() => props.speed)\n );\n\n // 格式化文本\n const formatText = computed(() => {\n if (context.value.includes('</details>') && endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n return formatMarkdownText(\n context.value,\n props.autoHideThinking,\n startTime.value,\n endTime.value === -Infinity ? Date.now() : endTime.value\n );\n });\n\n // Markdown 处理\n const historyInputsRef = computed(() => props.historyInputs as Record<string, any> | FormDataMap | undefined);\n const { ast, hitlData } = useMarkdownProcessor(formatText, historyInputsRef);\n\n // 表单处理\n const {\n formRefs,\n curIndex,\n isRewrite,\n btnClick,\n resetCurInit,\n getCurInit,\n } = useFormHandler(hitlData, emit);\n\n // 图片加载处理\n const { processNewImages } = useImageLoader(container);\n\n // 引用处理\n const {\n getRefConfig,\n handleMouseOver,\n handleClick: handleRefClick,\n } = useRefHandler(container, emit);\n\n // 渲染完成回调\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 监听 context 变化,更新引用配置\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\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 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\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 // 处理引用点击\n handleRefClick(e);\n };\n\n // 获取内容文本\n const getContentText = () => {\n return container.value?.innerText;\n };\n\n // 上传相关配置\n const uploadHeaders = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n };\n });\n\n const uploadExtendData = computed(() => {\n return {\n user: props.user,\n };\n });\n\n // 创建渲染器配置的工厂函数,确保每次获取最新值\n const createRendererConfig = (): RendererConfig => {\n return {\n hitlData: hitlData.value,\n formRefs: formRefs.value,\n curIndex: curIndex.value,\n getCurInit,\n btnClick,\n uploadHeaders: uploadHeaders.value,\n uploadExtendData: uploadExtendData.value,\n disabledContext: {\n isHistoryMessage: props.isHistoryMessage,\n isRewrite: isRewrite.value,\n },\n };\n };\n\n // 监听 AST 变化,处理图片和动画\n watch(\n () => ast.value,\n async () => {\n if (!ast.value) return;\n\n await nextTick();\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n \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 onMounted(() => {\n if (container.value) {\n container.value.addEventListener('mouseover', handleMouseOver);\n container.value.addEventListener('click', handleClick);\n }\n });\n\n onBeforeUnmount(() => {\n if (container.value) {\n container.value.removeEventListener('mouseover', handleMouseOver);\n container.value.removeEventListener('click', handleClick);\n }\n });\n\n onUpdated(() => {\n resetCurInit();\n });\n\n return {\n hastToVNode: (node: any) => hastToVNode(node, createRendererConfig()),\n ast,\n container,\n renderComplete,\n isRewrite,\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});\n"],"names":["name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","user","authToken","appId","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","isInitAnimation","context","useStreamHandler","computed","formatText","value","includes","formatMarkdownText","historyInputsRef","ast","hitlData","useMarkdownProcessor","formRefs","curIndex","isRewrite","btnClick","resetCurInit","getCurInit","useFormHandler","processNewImages","useImageLoader","getRefConfig","handleMouseOver","handleClick","handleRefClick","useRefHandler","renderComplete","debounce","watch","immediate","handleAClick","e","stopPropagation","preventDefault","target","href","getAttribute","id","title","ext","split","pop","window","open","ElMessage","tagName","getContentText","innerText","uploadHeaders","Authorization","uploadExtendData","createRendererConfig","disabledContext","nextTick","details","querySelector","summary","Accordion","onMounted","addEventListener","onBeforeUnmount","removeEventListener","onUpdated","hastToVNode","node","render","_createVNode"],"mappings":"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"}
@@ -0,0 +1,427 @@
1
+ import { h } from "vue";
2
+ import { ElTimeline, ElRow, ElCol, ElCard, ElTag, ElForm, ElFormItem, ElButton, ElSelect, ElDatePicker, ElInput, ElRadioGroup, ElRadio, ElTableColumn, ElConfigProvider } from "element-plus";
3
+ /* empty css */
4
+ /* empty css */
5
+ import "../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js";
6
+ /* empty css */
7
+ /* empty css */
8
+ /* empty css */
9
+ /* empty css */
10
+ /* empty css */
11
+ /* empty css */
12
+ /* empty css */
13
+ /* empty css */
14
+ /* empty css */
15
+ import "../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js";
16
+ /* empty css */
17
+ /* empty css */
18
+ /* empty css */
19
+ /* empty css */
20
+ /* empty css */
21
+ /* empty css */
22
+ /* empty css */
23
+ /* empty css */
24
+ import "../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js";
25
+ import zhCn from "../../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js";
26
+ import CoreText from "../../core-text/index.js";
27
+ import CoreTips from "../../core-tips/index.js";
28
+ import CoreResult from "../../core-result/index.js";
29
+ import CoreTable from "../../core-table/index.js";
30
+ import CoreChart from "../../core-chart/index.js";
31
+ import CoreCard from "../../core-card/index.js";
32
+ import CoreUpload from "../../core-upload/index.js";
33
+ import { parseCorePilot } from "../utils/parseCorePilotSchema.js";
34
+ import { isCompleteJSON } from "../utils/jsonUtils.js";
35
+ import { checkDisabled } from "../utils/disabledUtils.js";
36
+ const renderSkeleton = () => {
37
+ return h("div", {
38
+ class: "hitl-skeleton"
39
+ }, [
40
+ // 头部骨架
41
+ h("div", {
42
+ class: "skeleton-header"
43
+ }, [
44
+ h("div", { class: "skeleton-avatar" }),
45
+ h("div", { class: "skeleton-title" })
46
+ ]),
47
+ // 内容骨架
48
+ h("div", { class: "skeleton-item skeleton-item-long" }),
49
+ h("div", { class: "skeleton-item skeleton-item-medium" }),
50
+ h("div", { class: "skeleton-item skeleton-item-short" }),
51
+ h("div", { class: "skeleton-item skeleton-item-long" }),
52
+ h("div", { class: "skeleton-item skeleton-item-medium" })
53
+ ]);
54
+ };
55
+ const hastToVNode = (node, config, index, row) => {
56
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
57
+ if (!node) return null;
58
+ const {
59
+ hitlData,
60
+ formRefs,
61
+ curIndex,
62
+ getCurInit,
63
+ btnClick,
64
+ uploadHeaders,
65
+ uploadExtendData,
66
+ disabledContext
67
+ } = config;
68
+ const renderChildren = (children2, formIndex) => {
69
+ if (!children2 || children2.length === 0) return [];
70
+ return children2.map((child, idx) => {
71
+ return hastToVNode(child, config, formIndex !== void 0 ? formIndex : index, row);
72
+ });
73
+ };
74
+ const blackTagNames = ["sub", "pre", "text", "ElForm"];
75
+ let children = [];
76
+ if (!blackTagNames.includes(node.tagName)) {
77
+ children = renderChildren(node.children || [], index);
78
+ }
79
+ switch (node.type) {
80
+ case "root":
81
+ return h(
82
+ "div",
83
+ { class: "markdown-body" },
84
+ h(ElConfigProvider, {
85
+ locale: zhCn
86
+ }, children)
87
+ );
88
+ case "element":
89
+ if (node.tagName === "sub") {
90
+ const formatChildren = [
91
+ {
92
+ type: "element",
93
+ tagName: "span",
94
+ properties: {
95
+ class: "x-markdown-split"
96
+ }
97
+ },
98
+ ...node.children || []
99
+ ];
100
+ const subChildren = formatChildren.map((child) => hastToVNode(child, config, index));
101
+ return h("span", {
102
+ ...node.properties,
103
+ class: "x-markdown-sub"
104
+ }, subChildren);
105
+ }
106
+ if (node.tagName === "span") {
107
+ return h("span", {
108
+ ...node.properties
109
+ }, children);
110
+ }
111
+ if (node.tagName === "img") {
112
+ return h("img", {
113
+ ...node.properties,
114
+ class: "markdown-image",
115
+ "data-processed": "false"
116
+ });
117
+ }
118
+ if (node.tagName === "a") {
119
+ const href = ((_a = node.properties) == null ? void 0 : _a.href) || "";
120
+ const fileType = href ? href.split(".").pop() : null;
121
+ return h(
122
+ "a",
123
+ {
124
+ ...node.properties,
125
+ class: "file-link",
126
+ "data-file-type": fileType
127
+ },
128
+ children
129
+ );
130
+ }
131
+ if (node.tagName === "ElTimeline") {
132
+ return h(ElTimeline, {
133
+ ...node.properties
134
+ }, children);
135
+ }
136
+ if (node.tagName === "table") {
137
+ return h(
138
+ "div",
139
+ { class: "custom-table-container" },
140
+ [h("table", children)]
141
+ );
142
+ }
143
+ if (node.tagName === "view") {
144
+ return h(
145
+ "div",
146
+ { class: "custom-view-container" },
147
+ [children[curIndex]]
148
+ );
149
+ }
150
+ if (node.tagName === "ElRow") {
151
+ return h(ElRow, {
152
+ ...node.properties
153
+ }, children);
154
+ }
155
+ if (node.tagName === "ElCol") {
156
+ return h(ElCol, {
157
+ ...node.properties
158
+ }, children);
159
+ }
160
+ if (node.tagName === "ElCard") {
161
+ return h(ElCard, {
162
+ ...node.properties
163
+ }, children);
164
+ }
165
+ if (node.tagName === "ElTag") {
166
+ return h(
167
+ ElTag,
168
+ {
169
+ ...node.properties
170
+ },
171
+ children
172
+ );
173
+ }
174
+ if (node.tagName === "CoreCard") {
175
+ const slots = {};
176
+ if ((_b = node.slots) == null ? void 0 : _b.header) {
177
+ slots.header = () => {
178
+ return node.slots.header.map((slotItem) => {
179
+ return hastToVNode(slotItem, config, index);
180
+ });
181
+ };
182
+ }
183
+ if (children && children.length > 0) {
184
+ slots.default = () => children;
185
+ }
186
+ return h(CoreCard, {
187
+ ...node.properties
188
+ }, slots);
189
+ }
190
+ if (node.tagName === "ElForm") {
191
+ const formIndex = getCurInit();
192
+ const formChildren = (node.children || []).map(
193
+ (child) => hastToVNode(child, config, formIndex)
194
+ );
195
+ return h(
196
+ ElForm,
197
+ {
198
+ ref: formRefs.set,
199
+ model: hitlData[formIndex],
200
+ ...node.properties,
201
+ disabled: checkDisabled(node, disabledContext)
202
+ },
203
+ formChildren
204
+ );
205
+ }
206
+ if (node.tagName === "ElFormItem") {
207
+ return h(ElFormItem, {
208
+ ...node.properties
209
+ }, children);
210
+ }
211
+ if (node.tagName === "ElButton") {
212
+ let payload = (_c = node.properties) == null ? void 0 : _c.payload;
213
+ if (node.parentScope === "table") {
214
+ payload = row;
215
+ }
216
+ const buttonFormIndex = node.parentScope === "form" ? index : void 0;
217
+ return h(
218
+ ElButton,
219
+ {
220
+ ...node.properties,
221
+ disabled: checkDisabled(node, disabledContext),
222
+ onClick: () => {
223
+ var _a2;
224
+ const validateIndex = buttonFormIndex !== void 0 ? buttonFormIndex : index !== void 0 ? index : 0;
225
+ btnClick(validateIndex, (_a2 = node.properties) == null ? void 0 : _a2.action, payload, node.parentScope);
226
+ }
227
+ },
228
+ children
229
+ );
230
+ }
231
+ if (node.tagName === "ElSelect") {
232
+ return h(
233
+ ElSelect,
234
+ {
235
+ ...node.properties,
236
+ disabled: checkDisabled(node, disabledContext),
237
+ modelValue: (_e = hitlData[index]) == null ? void 0 : _e[(_d = node.properties) == null ? void 0 : _d.formProp],
238
+ "onUpdate:modelValue": (value) => {
239
+ var _a2;
240
+ if (hitlData[index]) {
241
+ hitlData[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
242
+ }
243
+ }
244
+ },
245
+ children
246
+ );
247
+ }
248
+ if (node.tagName === "ElDatePicker") {
249
+ return h(
250
+ ElDatePicker,
251
+ {
252
+ ...node.properties,
253
+ disabled: checkDisabled(node, disabledContext),
254
+ modelValue: (_g = hitlData[index]) == null ? void 0 : _g[(_f = node.properties) == null ? void 0 : _f.formProp],
255
+ "onUpdate:modelValue": (value) => {
256
+ var _a2;
257
+ if (hitlData[index]) {
258
+ hitlData[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
259
+ }
260
+ }
261
+ },
262
+ children
263
+ );
264
+ }
265
+ if (node.tagName === "ElInput") {
266
+ return h(
267
+ ElInput,
268
+ {
269
+ ...node.properties,
270
+ disabled: checkDisabled(node, disabledContext),
271
+ modelValue: (_i = hitlData[index]) == null ? void 0 : _i[(_h = node.properties) == null ? void 0 : _h.formProp],
272
+ "onUpdate:modelValue": (value) => {
273
+ var _a2;
274
+ if (hitlData[index]) {
275
+ hitlData[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
276
+ }
277
+ }
278
+ },
279
+ children
280
+ );
281
+ }
282
+ if (node.tagName === "ElRadioGroup") {
283
+ return h(
284
+ ElRadioGroup,
285
+ {
286
+ ...node.properties,
287
+ disabled: checkDisabled(node, disabledContext),
288
+ modelValue: (_k = hitlData[index]) == null ? void 0 : _k[(_j = node.properties) == null ? void 0 : _j.formProp],
289
+ "onUpdate:modelValue": (value) => {
290
+ var _a2;
291
+ if (hitlData[index]) {
292
+ hitlData[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
293
+ }
294
+ }
295
+ },
296
+ children
297
+ );
298
+ }
299
+ if (node.tagName === "ElRadio") {
300
+ return h(
301
+ ElRadio,
302
+ {
303
+ ...node.properties,
304
+ disabled: checkDisabled(node, disabledContext)
305
+ },
306
+ children
307
+ );
308
+ }
309
+ if (node.tagName === "ElTable") {
310
+ return h(
311
+ CoreTable,
312
+ {
313
+ ...node.properties
314
+ },
315
+ children
316
+ );
317
+ }
318
+ if (node.tagName === "ElTableColumn") {
319
+ return h(
320
+ ElTableColumn,
321
+ {
322
+ ...node.properties
323
+ },
324
+ {
325
+ default: (scope) => {
326
+ const columnChildren = (node.children || []).map(
327
+ (child) => hastToVNode(child, config, -Infinity, scope.row)
328
+ );
329
+ const childIndex = (node.children || []).findIndex(
330
+ (child) => {
331
+ var _a2;
332
+ return child.value === scope.row[(_a2 = node.properties) == null ? void 0 : _a2.prop] && child.value !== void 0;
333
+ }
334
+ );
335
+ return childIndex === -1 ? columnChildren : columnChildren == null ? void 0 : columnChildren[childIndex];
336
+ }
337
+ }
338
+ );
339
+ }
340
+ if (node.tagName === "CoreText") {
341
+ return h(CoreText, {
342
+ ...node.properties
343
+ });
344
+ }
345
+ if (node.tagName === "CoreTips") {
346
+ return h(CoreTips, {
347
+ ...node.properties
348
+ });
349
+ }
350
+ if (node.tagName === "CoreResult") {
351
+ return h(CoreResult, {
352
+ ...node.properties
353
+ });
354
+ }
355
+ if (node.tagName === "CoreChart") {
356
+ return h(CoreChart, {
357
+ ...node.properties
358
+ });
359
+ }
360
+ if (node.tagName === "CoreUpload") {
361
+ if (node.parentScope === "form" && ((_l = node.properties) == null ? void 0 : _l.formProp)) {
362
+ const formProp = node.properties.formProp;
363
+ return h(
364
+ CoreUpload,
365
+ {
366
+ headers: uploadHeaders,
367
+ extendData: uploadExtendData,
368
+ ...node.properties,
369
+ disabled: checkDisabled(node, disabledContext),
370
+ fileList: ((_m = hitlData[index]) == null ? void 0 : _m[formProp]) || [],
371
+ "onUpdate:fileList": (value) => {
372
+ if (!hitlData[index]) {
373
+ hitlData[index] = {};
374
+ }
375
+ if (!hitlData[index].__files__) {
376
+ hitlData[index].__files__ = {};
377
+ }
378
+ hitlData[index].__files__[formProp] = value;
379
+ hitlData[index][formProp] = value;
380
+ }
381
+ }
382
+ );
383
+ }
384
+ return h(
385
+ CoreUpload,
386
+ {
387
+ ...node.properties,
388
+ disabled: checkDisabled(node, disabledContext)
389
+ }
390
+ );
391
+ }
392
+ if (node.tagName === "pre") {
393
+ const codeNode = (_n = node.children) == null ? void 0 : _n.find((child) => child.tagName === "code");
394
+ if (codeNode) {
395
+ if ((_p = (_o = codeNode.properties) == null ? void 0 : _o.className) == null ? void 0 : _p.includes("language-CorePilot")) {
396
+ const code = ((_r = (_q = codeNode.children) == null ? void 0 : _q[0]) == null ? void 0 : _r.value) || "";
397
+ if (!isCompleteJSON(code)) {
398
+ return renderSkeleton();
399
+ }
400
+ try {
401
+ const schema = JSON.parse(code);
402
+ const viewTree = parseCorePilot(schema);
403
+ const corePilotChildren = hastToVNode(viewTree, config);
404
+ return h("div", {
405
+ class: "hitl-wrapper"
406
+ }, [corePilotChildren]);
407
+ } catch (error) {
408
+ return renderSkeleton();
409
+ }
410
+ }
411
+ }
412
+ }
413
+ return h(
414
+ node.tagName,
415
+ node.properties,
416
+ children
417
+ );
418
+ case "text":
419
+ return node.value.trim();
420
+ default:
421
+ return null;
422
+ }
423
+ };
424
+ export {
425
+ hastToVNode
426
+ };
427
+ //# sourceMappingURL=hastRenderer.js.map