@core-pilot/client-vue 0.0.8 → 0.0.10
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-card/index.js +1 -1
- package/dist/cjs/components/core-card/index.js.map +1 -1
- package/dist/cjs/components/core-upload/assets/delete.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/delete.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/assets/temp.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/temp.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/assets/upload.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/upload.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/index.js +2 -0
- package/dist/cjs/components/core-upload/index.js.map +1 -0
- 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/index.js +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/cjs/components/x-markdown/utils/parseCorePilotSchema.js +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/bubble-list/index.js +3 -0
- package/dist/es/components/bubble-list/index.js.map +1 -1
- package/dist/es/components/core-card/index.js +9 -4
- package/dist/es/components/core-card/index.js.map +1 -1
- package/dist/es/components/core-upload/assets/delete.svg.js +5 -0
- package/dist/es/components/core-upload/assets/delete.svg.js.map +1 -0
- package/dist/es/components/core-upload/assets/temp.svg.js +5 -0
- package/dist/es/components/core-upload/assets/temp.svg.js.map +1 -0
- package/dist/es/components/core-upload/assets/upload.svg.js +5 -0
- package/dist/es/components/core-upload/assets/upload.svg.js.map +1 -0
- package/dist/es/components/core-upload/index.js +267 -0
- package/dist/es/components/core-upload/index.js.map +1 -0
- package/dist/es/components/editor-sender/index.js +39 -16
- package/dist/es/components/editor-sender/index.js.map +1 -1
- package/dist/es/components/index.js +2 -0
- package/dist/es/components/index.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +75 -17
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +20 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/es/index.js +2 -0
- package/dist/es/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n scene: {\n type: String,\n default: undefined,\n },\n },\n emits: ['cancel', 'submit', 'sceneChange', 'update:scene'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n \n // 初始化 activeScene:优先使用传入的 scene prop,否则使用 sceneList 的第一个\n const getInitialScene = () => {\n if (props.scene) {\n const found = props.sceneList.find(item => item.id === props.scene);\n if (found) return found;\n }\n return props.sceneList[0];\n };\n const activeScene = ref(getInitialScene());\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n // 监听外部传入的 scene prop 变化\n watch(() => props.scene, (val) => {\n if (val) {\n const found = props.sceneList.find(item => item.id === val);\n if (found) {\n activeScene.value = found;\n }\n }\n });\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n // 如果当前 scene prop 存在,优先使用它;否则使用第一个\n if (props.scene) {\n const found = val.find(item => item.id === props.scene);\n if (found) {\n activeScene.value = found;\n return;\n }\n }\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n emit('update:scene', scene.id);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={props.extendData}\n beforeUpload={handleUploadBefore}\n headers={props.headers}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","props","loading","type","Boolean","default","actionUrl","String","extendData","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","getInitialScene","found","find","item","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","initSender","clearFiles","submitHandler","res","text","file","map","response","changeHandler","chatState","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","isValidMimeType","mimeType","validTypes","Set","has","trim","toLowerCase","handleUploadBefore","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","triggerSceneChange","getSlots","slots","action-list","_createVNode","ElUpload","ElIcon","Paperclip","_Fragment","onClick","LoadingBtn","FilesCard","render","_slot","EditorSender"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n // extendData: {\n // type: Object,\n // default: () => ({\n // \"user\": \"abc-123\",\n // }),\n // },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n // headers: {\n // type: Object,\n // default: () => ({\n // Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n // appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n // }),\n // },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n scene: {\n type: String,\n default: undefined,\n },\n user: {\n type: String,\n default: '',\n },\n authToken: {\n type: String,\n default: '',\n },\n appId: {\n type: String,\n default: '',\n },\n },\n emits: ['cancel', 'submit', 'sceneChange', 'update:scene'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n const headers = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n const extendData = computed(() => {\n return {\n user: props.user,\n }\n })\n \n // 初始化 activeScene:优先使用传入的 scene prop,否则使用 sceneList 的第一个\n const getInitialScene = () => {\n if (props.scene) {\n const found = props.sceneList.find(item => item.id === props.scene);\n if (found) return found;\n }\n return props.sceneList[0];\n };\n const activeScene = ref(getInitialScene());\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n // 监听外部传入的 scene prop 变化\n watch(() => props.scene, (val) => {\n if (val) {\n const found = props.sceneList.find(item => item.id === val);\n if (found) {\n activeScene.value = found;\n }\n }\n });\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n // 如果当前 scene prop 存在,优先使用它;否则使用第一个\n if (props.scene) {\n const found = val.find(item => item.id === props.scene);\n if (found) {\n activeScene.value = found;\n return;\n }\n }\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n emit('update:scene', scene.id);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={extendData.value}\n beforeUpload={handleUploadBefore}\n headers={headers.value}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","props","loading","type","Boolean","default","actionUrl","String","acceptFileType","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","user","authToken","appId","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","headers","computed","Authorization","extendData","getInitialScene","found","find","item","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","initSender","clearFiles","submitHandler","res","text","file","map","response","changeHandler","chatState","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","isValidMimeType","mimeType","validTypes","Set","has","trim","toLowerCase","handleUploadBefore","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","triggerSceneChange","getSlots","slots","action-list","_createVNode","ElUpload","ElIcon","Paperclip","_Fragment","onClick","LoadingBtn","FilesCard","render","_slot","EditorSender"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { default as default9 } from "./core-result/index.js";
|
|
|
9
9
|
import { default as default10 } from "./core-table/index.js";
|
|
10
10
|
import { default as default11 } from "./core-chart/index.js";
|
|
11
11
|
import { default as default12 } from "./core-card/index.js";
|
|
12
|
+
import { default as default13 } from "./core-upload/index.js";
|
|
12
13
|
export {
|
|
13
14
|
default2 as BubbleList,
|
|
14
15
|
default12 as CoreCard,
|
|
@@ -17,6 +18,7 @@ export {
|
|
|
17
18
|
default10 as CoreTable,
|
|
18
19
|
default7 as CoreText,
|
|
19
20
|
default8 as CoreTips,
|
|
21
|
+
default13 as CoreUpload,
|
|
20
22
|
default5 as EditorSender,
|
|
21
23
|
default6 as FileCard,
|
|
22
24
|
default4 as FilePreview,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -37,6 +37,7 @@ import CoreResult from "../core-result/index.js";
|
|
|
37
37
|
import CoreTable from "../core-table/index.js";
|
|
38
38
|
import CoreChart from "../core-chart/index.js";
|
|
39
39
|
import CoreCard from "../core-card/index.js";
|
|
40
|
+
import CoreUpload from "../core-upload/index.js";
|
|
40
41
|
/* empty css */
|
|
41
42
|
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";
|
|
42
43
|
import { unified } from "../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js";
|
|
@@ -105,6 +106,18 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
|
|
|
105
106
|
historyInputs: {
|
|
106
107
|
type: Object,
|
|
107
108
|
default: () => ({})
|
|
109
|
+
},
|
|
110
|
+
user: {
|
|
111
|
+
type: String,
|
|
112
|
+
default: "default"
|
|
113
|
+
},
|
|
114
|
+
authToken: {
|
|
115
|
+
type: String,
|
|
116
|
+
default: "ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf"
|
|
117
|
+
},
|
|
118
|
+
appId: {
|
|
119
|
+
type: String,
|
|
120
|
+
default: "9a673565-d4f6-4382-bc67-f1beb07df435"
|
|
108
121
|
}
|
|
109
122
|
},
|
|
110
123
|
expose: ["getContentText"],
|
|
@@ -128,6 +141,17 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
|
|
|
128
141
|
const streamCall = (stream) => {
|
|
129
142
|
context.value = context.value + stream;
|
|
130
143
|
};
|
|
144
|
+
const uploadHeaders = computed(() => {
|
|
145
|
+
return {
|
|
146
|
+
Authorization: `Bearer ${props.authToken}`,
|
|
147
|
+
appId: props.appId
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
const uploadExtendData = computed(() => {
|
|
151
|
+
return {
|
|
152
|
+
user: props.user
|
|
153
|
+
};
|
|
154
|
+
});
|
|
131
155
|
const streamGener = ref(createStreamGenerator(streamCall, props.speed));
|
|
132
156
|
const updateSummaryClasses = (mdText) => {
|
|
133
157
|
const summaryDivReg = /(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g;
|
|
@@ -293,7 +317,6 @@ ${divContent}${divEnd}`;
|
|
|
293
317
|
}
|
|
294
318
|
if (action === "inner_rewrite") {
|
|
295
319
|
isRewrite.value = true;
|
|
296
|
-
console.log("isRewrite", isRewrite.value);
|
|
297
320
|
return;
|
|
298
321
|
}
|
|
299
322
|
let res = {
|
|
@@ -502,7 +525,7 @@ ${divContent}${divEnd}`;
|
|
|
502
525
|
]);
|
|
503
526
|
};
|
|
504
527
|
const hastToVNode = (node, index, row) => {
|
|
505
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
528
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
506
529
|
if (!node) return null;
|
|
507
530
|
let children = [];
|
|
508
531
|
const blackTagNames = ["sub", "pre", "text", "ElForm"];
|
|
@@ -584,12 +607,23 @@ ${divContent}${divEnd}`;
|
|
|
584
607
|
}, children);
|
|
585
608
|
}
|
|
586
609
|
if (node.tagName === "CoreCard") {
|
|
610
|
+
const slots = {};
|
|
611
|
+
if ((_d = node.slots) == null ? void 0 : _d.header) {
|
|
612
|
+
slots.header = () => {
|
|
613
|
+
return node.slots.header.map((slotItem) => {
|
|
614
|
+
return hastToVNode(slotItem, index);
|
|
615
|
+
});
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
if (children && children.length > 0) {
|
|
619
|
+
slots.default = () => children;
|
|
620
|
+
}
|
|
587
621
|
return h(CoreCard, {
|
|
588
622
|
...node.properties
|
|
589
|
-
},
|
|
623
|
+
}, slots);
|
|
590
624
|
}
|
|
591
625
|
if (node.tagName === "ElForm") {
|
|
592
|
-
const children2 = (
|
|
626
|
+
const children2 = (_e = node.children) == null ? void 0 : _e.map((child) => hastToVNode(child, curInit));
|
|
593
627
|
curInit++;
|
|
594
628
|
return h(ElForm, {
|
|
595
629
|
ref: formRefs.value.set,
|
|
@@ -604,7 +638,7 @@ ${divContent}${divEnd}`;
|
|
|
604
638
|
}, children);
|
|
605
639
|
}
|
|
606
640
|
if (node.tagName === "ElButton") {
|
|
607
|
-
let payload = (
|
|
641
|
+
let payload = (_f = node.properties) == null ? void 0 : _f.payload;
|
|
608
642
|
if (node.parentScope === "table") {
|
|
609
643
|
payload = row;
|
|
610
644
|
}
|
|
@@ -621,7 +655,7 @@ ${divContent}${divEnd}`;
|
|
|
621
655
|
return h(ElSelect, {
|
|
622
656
|
...node.properties,
|
|
623
657
|
disabled: checkDisabled(node),
|
|
624
|
-
modelValue: hitlData.value[index][(
|
|
658
|
+
modelValue: hitlData.value[index][(_g = node.properties) == null ? void 0 : _g.formProp],
|
|
625
659
|
"onUpdate:modelValue": (value) => {
|
|
626
660
|
var _a2;
|
|
627
661
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -632,7 +666,7 @@ ${divContent}${divEnd}`;
|
|
|
632
666
|
return h(ElDatePicker, {
|
|
633
667
|
...node.properties,
|
|
634
668
|
disabled: checkDisabled(node),
|
|
635
|
-
modelValue: hitlData.value[index][(
|
|
669
|
+
modelValue: hitlData.value[index][(_h = node.properties) == null ? void 0 : _h.formProp],
|
|
636
670
|
"onUpdate:modelValue": (value) => {
|
|
637
671
|
var _a2;
|
|
638
672
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -643,7 +677,7 @@ ${divContent}${divEnd}`;
|
|
|
643
677
|
return h(ElInput, {
|
|
644
678
|
...node.properties,
|
|
645
679
|
disabled: checkDisabled(node),
|
|
646
|
-
modelValue: hitlData.value[index][(
|
|
680
|
+
modelValue: hitlData.value[index][(_i = node.properties) == null ? void 0 : _i.formProp],
|
|
647
681
|
"onUpdate:modelValue": (value) => {
|
|
648
682
|
var _a2;
|
|
649
683
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -654,7 +688,7 @@ ${divContent}${divEnd}`;
|
|
|
654
688
|
return h(ElRadioGroup, {
|
|
655
689
|
...node.properties,
|
|
656
690
|
disabled: checkDisabled(node),
|
|
657
|
-
modelValue: hitlData.value[index][(
|
|
691
|
+
modelValue: hitlData.value[index][(_j = node.properties) == null ? void 0 : _j.formProp],
|
|
658
692
|
"onUpdate:modelValue": (value) => {
|
|
659
693
|
var _a2;
|
|
660
694
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -679,14 +713,12 @@ ${divContent}${divEnd}`;
|
|
|
679
713
|
default: (scope) => {
|
|
680
714
|
var _a2, _b2;
|
|
681
715
|
const children2 = (_a2 = node.children) == null ? void 0 : _a2.map((child) => hastToVNode(child, curInit, scope.row));
|
|
716
|
+
console.log("children", children2, node.children);
|
|
682
717
|
const index2 = (_b2 = node.children) == null ? void 0 : _b2.findIndex((child) => {
|
|
683
718
|
var _a3;
|
|
684
|
-
return child.value === scope.row[(_a3 = node.properties) == null ? void 0 : _a3.prop];
|
|
719
|
+
return child.value === scope.row[(_a3 = node.properties) == null ? void 0 : _a3.prop] && child.value !== void 0;
|
|
685
720
|
});
|
|
686
|
-
|
|
687
|
-
return children2;
|
|
688
|
-
}
|
|
689
|
-
return children2 == null ? void 0 : children2[index2];
|
|
721
|
+
return index2 === -1 ? children2 : children2 == null ? void 0 : children2[index2];
|
|
690
722
|
}
|
|
691
723
|
});
|
|
692
724
|
}
|
|
@@ -710,11 +742,37 @@ ${divContent}${divEnd}`;
|
|
|
710
742
|
...node.properties
|
|
711
743
|
});
|
|
712
744
|
}
|
|
745
|
+
if (node.tagName === "CoreUpload") {
|
|
746
|
+
if (node.parentScope === "form" && ((_k = node.properties) == null ? void 0 : _k.formProp)) {
|
|
747
|
+
const formProp = node.properties.formProp;
|
|
748
|
+
return h(CoreUpload, {
|
|
749
|
+
headers: uploadHeaders.value,
|
|
750
|
+
extendData: uploadExtendData.value,
|
|
751
|
+
...node.properties,
|
|
752
|
+
disabled: checkDisabled(node),
|
|
753
|
+
fileList: ((_l = hitlData.value[index]) == null ? void 0 : _l[formProp]) || [],
|
|
754
|
+
"onUpdate:fileList": (value) => {
|
|
755
|
+
if (!hitlData.value[index]) {
|
|
756
|
+
hitlData.value[index] = {};
|
|
757
|
+
}
|
|
758
|
+
if (!hitlData.value[index].__files__) {
|
|
759
|
+
hitlData.value[index].__files__ = {};
|
|
760
|
+
}
|
|
761
|
+
hitlData.value[index].__files__[formProp] = value;
|
|
762
|
+
hitlData.value[index][formProp] = value;
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
return h(CoreUpload, {
|
|
767
|
+
...node.properties,
|
|
768
|
+
disabled: checkDisabled(node)
|
|
769
|
+
});
|
|
770
|
+
}
|
|
713
771
|
if (node.tagName === "pre") {
|
|
714
|
-
const codeNode = (
|
|
772
|
+
const codeNode = (_m = node.children) == null ? void 0 : _m.find((child) => child.tagName === "code");
|
|
715
773
|
if (codeNode) {
|
|
716
|
-
if ((
|
|
717
|
-
const code = ((
|
|
774
|
+
if ((_o = (_n = codeNode.properties) == null ? void 0 : _n.className) == null ? void 0 : _o.includes("language-CorePilot")) {
|
|
775
|
+
const code = ((_q = (_p = codeNode.children) == null ? void 0 : _p[0]) == null ? void 0 : _q.value) || "";
|
|
718
776
|
if (!isCompleteJSON(code)) {
|
|
719
777
|
return renderSkeleton();
|
|
720
778
|
}
|
|
@@ -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 '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 },\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 const isRewrite = ref(false);\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 // 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 console.log('isRewrite', isRewrite.value);\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 return h(\n CoreCard,\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: 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 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 if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\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","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","streamGener","createStreamGenerator","updateSummaryClasses","mdText","summaryDivReg","isFirstSummary","replace","summaryTag","divContent","divEnd","isDivComplete","updatedSummary","formatText","computed","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","console","log","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","run","nextTick","details","summary","Accordion","renderSkeleton","h","class","hastToVNode","row","blackTagNames","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","CoreCard","ElForm","set","model","ElFormItem","ElButton","onClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","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, 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,MAAMA,wBAAyBC,UAAiB;AAC9C,QAAMC,MAAM;AACZ,QAAMC,QAAQD,IAAIE,KAAKH,IAAI;AAC3B,MAAI,CAACE,OAAO;AACV,WAAO,CAAA;AAAA,EACT;AACA,QAAME,aAAaF,MAAM,CAAC;AAC1B,MAAI;AACF,UAAMG,UAAUC,KAAKC,MAAMH,UAAU;AACrC,WAAOC;AAAAA,EACT,SAASG,OAAO;AACd,WAAO,CAAA;AAAA,EACT;AACF;AAMA,MAAMC,iBAAkBC,aAA6B;AACnD,MAAI,CAACA,WAAWA,QAAQC,KAAI,EAAGC,WAAW,GAAG;AAC3C,WAAO;AAAA,EACT;AAEA,QAAMC,UAAUH,QAAQC,KAAI;AAG5B,QAAMG,YAAYD,QAAQ,CAAC;AAC3B,MAAIC,cAAc,OAAOA,cAAc,KAAK;AAC1C,WAAO;AAAA,EACT;AAGA,MAAI;AACFR,SAAKC,MAAMM,OAAO;AAClB,WAAO;AAAA,EACT,SAASL,OAAO;AAEd,WAAO;AAAA,EACT;AACF;AASA,MAAA,4CAA+B;AAAA,EAC7BO,MAAM;AAAA,EACNC,OAAO;AAAA,IACLhB,MAAM;AAAA,MACJiB,MAAMC;AAAAA,MACNC,SAAS;AAAA;IAEXC,kBAAkB;AAAA,MAChBH,MAAMI;AAAAA,MACNF,SAAS;AAAA;IAEXG,QAAQ;AAAA,MACNL,MAAMI;AAAAA,MACNF,SAAS;AAAA;IAEXI,OAAO;AAAA,MACLN,MAAMO;AAAAA,MACNL,SAAS;AAAA;IAEXM,kBAAkB;AAAA,MAChBR,MAAMI;AAAAA,MACNF,SAAS;AAAA;IAEXO,eAAe;AAAA,MACbT,MAAMU;AAAAA,MACNR,SAASA,OAAO,CAAA;AAAA;IAElBS,MAAM;AAAA,MACJX,MAAMC;AAAAA,MACNC,SAAS;AAAA;IAEXU,WAAW;AAAA,MACTZ,MAAMC;AAAAA,MACNC,SAAS;AAAA;IAEXW,OAAO;AAAA,MACLb,MAAMC;AAAAA,MACNC,SAAS;AAAA,IACX;AAAA;EAEFY,QAAQ,CACN,gBAAgB;AAAA,EAElBC,OAAO,CAAC,yBAAyB,yBAAyB,mBAAmB,gBAAgB,YAAY;AAAA,EACzGC,MAAMjB,OAAO;AAAA,IAAEkB;AAAAA,EAAK,GAAG;AACrB,UAAMC,YAAYC,eAA4B,sBAAsB;AACpE,UAAMC,YAAYC,IAAYC,KAAKC,IAAG,CAAE;AACxC,UAAMC,UAAUH,IAAY,SAAS;AACrC,UAAMI,UAAUJ,IAAI,EAAE;AACtB,UAAMK,gBAAgB,oBAAIC;AAC1B,UAAMC,kBAAkBP,IAAI,KAAK;AACjC,UAAMQ,cAAcR,IAAI,KAAK;AAC7B,UAAMS,WAAWT,IAAgC,EAAE;AACnD,UAAMU,WAAWC,oBAAmB;AACpC,UAAMC,WAAWZ,IAAI,CAAC;AACtB,QAAIa,UAAU;AACd,UAAMC,MAAMd,IAAS,IAAI;AACzB,UAAMe,YAAYf,IAAI,KAAK;AAE3B,UAAMgB,aAAcC,YAAmB;AACrCb,cAAQc,QAAQd,QAAQc,QAAQD;AAAAA,IAClC;AAEA,UAAME,gBAAgBC,SAAS,MAAM;AACnC,aAAO;AAAA,QACLC,eAAe,UAAU3C,MAAMa,SAAS;AAAA,QACxCC,OAAOd,MAAMc;AAAAA;IAEjB,CAAC;AAED,UAAM8B,mBAAmBF,SAAS,MAAM;AACtC,aAAO;AAAA,QACL9B,MAAMZ,MAAMY;AAAAA;IAEhB,CAAC;AAED,UAAMiC,cAAcvB,IAA8CwB,sBAAsBR,YAAYtC,MAAMO,KAAK,CAAC;AAEhH,UAAMwC,uBAAwBC,YAAmB;AAC/C,YAAMC,gBAAgB;AACtB,UAAIC,iBAAiB;AAErB,aAAOF,OAAOG,QAAQF,eAAe,CAAC/D,OAAOkE,YAAYC,YAAYC,WAAW;AAC9E,cAAMC,gBAAgBD,WAAW;AACjC,cAAME,iBAAiBJ,WAAWD,QAChC,eACCjE,CAAAA,WAAU;AACT,cAAIgE,gBAAgB;AAClBA,6BAAiB;AACjB,mBAAOhE;AAAAA,UACT;AACA,iBAAO,mBAAmBqE,gBAAgB,WAAW,SAAS;AAAA,QAChE,CACF;AACA,eAAO,GAAGC,cAAc;AAAA,EAAKH,UAAU,GAAGC,MAAM;AAAA,MAClD,CAAC;AAAA,IACH;AAEA,UAAMG,aAAaf,SAAS,MAAM;AAChC,UAAI,CAAC1C,MAAMI,iBAAkB,QAAOsB,QAAQc;AAC5C,UAAIkB,UAAUhC,QAAQc;AACtBkB,gBAAUX,qBAAqBW,OAAO;AACtCA,gBAAUA,QAAQP,QAAQ,kDAAkD,GAAG;AAC/E,UAAIO,QAAQC,SAAS,YAAY,GAAG;AAClC,YAAIlC,QAAQe,UAAU,WAAW;AAC/Bf,kBAAQe,QAAQjB,KAAKC,IAAG;AAAA,QAC1B;AAEA,cAAMoC,MAAM7E,sBAAsB2E,OAAO;AAEzC,YAAI1E,OAAO0E,QAAQP,QAAQ,wCAAwC,CAACjE,OAAOwE,aAAY;AAErFA,UAAAA,WAAUA,SAAQP,QAAQ,kCAAkC,CAACjE,QAAOwE,aAAY;AAC9E,kBAAMG,aAAapC,QAAQe,QAAQnB,UAAUmB,SAAS,KAAMsB,QAAQ,CAAC;AACrE,mBAAO;AAAA,sBACGD,WAAW,MAAMA,WAAW,MAAM,EAAE,IAAID,IAAIhE,SAAS,0HAA0HgE,2BAAKhE,MAAM,OAAO,EAAE;AAAA;AAAA,UAE/M,CAAC;AAED8D,UAAAA,WAAUA,SAAQP,QAAQ,0BAA0B,sCAAsC;AAE1F,iBAAO,YAAYO,QAAO;AAAA,QAC5B,CAAC;AAED,eAAO1E;AAAAA,MACT;AACA,aAAO0E;AAAAA,IACT,CAAC;AAID,UAAMK,gBAAiBC,UAAsB;AAC3C,YAAM;AAAA,QAAEC,aAAa,CAAA;AAAA,QAAIC;AAAAA,MAAY,IAAIF;AACzC,YAAM;AAAA,QAAEG;AAAAA,MAAS,IAAIF;AACrB,UAAIE,UAAU;AACZ,eAAO;AAAA,MACT;AACA,UAAID,gBAAgB,QAAQ;AAC1B,eAAOlE,MAAMS,oBAAoB,CAAC4B,UAAUG;AAAAA,MAC9C;AACA,aAAO;AAAA,IACT;AAEA4B,UAAM,MAAM,CAACpE,MAAMhB,MAAMgB,MAAMM,MAAM,GAAG,CAAC+D,GAAGC,MAAM;;AAChD,YAAM,CAACtF,MAAMsB,MAAM,IAAI+D;AACvB,YAAM,CAACE,OAAO,IAAID,KAAK,CAAA;AACvB,UAAI,CAAEtF,KAAgBwF,WAAWD,OAAiB,GAAG;AACnD1B,0BAAYL,UAAZK,mBAAmB4B;AACnB/C,gBAAQc,QAAQ;AAAA,MAClB;AACA,UAAIxD,MAAM;AACR6D,0BAAYL,UAAZK,mBAAmB6B,OAAO1F;AAC1B,YAAI,CAACsB,QAAQ;AACXuC,4BAAYL,UAAZK,mBAAmB8B;AACnB;AAAA,QACF;AAEA,cAAMC,WAAW;AACjB,YAAI,CAAC9C,YAAYU,SAASoC,SAASC,KAAK7F,IAAc,GAAG;AACvD8C,sBAAYU,QAAQ;AACpBK,4BAAYL,UAAZK,mBAAmBiC,SAAS;AAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG;AAAA,MACDC,WAAW;AAAA,IACb,CAAC;AAGD,UAAMC,YAAY1D,IAAsB,EAAE;AAE1C,UAAM2D,eAAeA,MAAM;;AACzB,YAAMC,gBAAgB/D,eAAUqB,UAAVrB,mBAAiCgE,cAAc;AACrEH,gBAAUxC,QAAQlD,KAAKC,OAAM2F,6CAAcE,gBAAe,IAAI;AAC9DlE,WAAK,mBAAmB8D,UAAUxC,KAAK;AAAA,IACzC;AACA,UAAM6C,iBAAiBC,SAAS,MAAM;AACpCL,mBAAY;AAAA,IACd,GAAG,GAAG;AAGN,UAAMM,YAAYjE,IAAwB,IAAI;AAE9C8C,UAAM,MAAM1C,QAAQc,OAAO6C,gBAAgB;AAAA,MACzCN,WAAW;AAAA,IACb,CAAC;AAEDX,UAAMmB,WAAW,CAACC,QAAQC,WAAW;AACnC,UAAID,WAAWC,QAAQ;AACrB,YAAID,QAAQ;AACV,gBAAMxG,OAAOwG,OAAOE,aAAa,UAAU;AAC3C,gBAAMC,SAASX,UAAUxC,MAAMoD,KAAMC,UAAS;AAC5C,mBAAOA,KAAKC,SAAS9G;AAAAA,UACvB,CAAC;AACDkC,eAAK,yBAAyByE,MAAM;AAAA,QACtC,OAAO;AACLzE,eAAK,yBAAyB,EAAE;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM6E,kBAAmBC,OAAkB;AACzC,YAAML,SAASK,EAAEL;AACjB,UAAIA,OAAOM,YAAY,QAAQ;AAC7B,cAAMC,mBAAmBP,OAAOQ,UAAUC,SAAS,kBAAkB;AACrE,cAAMC,iBAAiBV,OAAOQ,UAAUC,SAAS,gBAAgB;AACjE,YAAIF,oBAAoBG,gBAAgB;AACtC,cAAI,CAACA,gBAAgB;AACnB,mBAAOV,OAAOW;AAAAA,UAChB;AACA,iBAAOX;AAAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,UAAMY,kBAAmBP,OAAkB;AACzC,YAAML,SAASI,gBAAgBC,CAAC;AAChC,UAAIL,QAAQ;AACVJ,kBAAU/C,QAAQmD;AAClB;AAAA,MACF;AACAJ,gBAAU/C,QAAQ;AAAA,IACpB;AAEA,UAAMgE,eAAe,OAAOR,MAAkB;AAC5CA,QAAES,gBAAe;AACjBT,QAAEU,eAAc;AAChB,YAAMf,SAASK,EAAEL;AACjB,YAAMgB,OAAOhB,OAAOD,aAAa,MAAM;AACvC,YAAMkB,KAAKjB,OAAOD,aAAa,SAAS,KAAKC,OAAOD,aAAa,QAAQ;AACzE,YAAMmB,QAAQlB,OAAOD,aAAa,WAAW,KAAKC,OAAOD,aAAa,UAAU;AAChF,UAAI,CAACiB,MAAM;AACT;AAAA,MACF;AAEA,YAAMG,MAAMH,KAAKI,MAAM,GAAG,EAAEC,IAAG;AAE/B,UAAI,CAACJ,IAAI;AACPK,eAAOC,KAAKP,MAAM,QAAQ;AAC1B;AAAA,MACF;AACAQ,gBAAU,UAAU;AAEpBjG,WAAK,gBAAgB;AAAA,QACnB2F;AAAAA,QACAD;AAAAA,QACAE;AAAAA,QACAH;AAAAA,MACF,CAAC;AAGD;AAAA,IACF;AAEA,UAAMS,WAAW,OAAOC,OAAeC,QAAgBC,SAAcrD,gBAAmC;;AACtG,UAAIoD,WAAW,cAAc;AAC3BpF,iBAASM,SAAS;AAClB;AAAA,MACF;AACA,UAAI8E,WAAW,cAAc;AAC3BpF,iBAASM,SAAS;AAClB;AAAA,MACF;AACA,UAAI8E,WAAW,iBAAiB;AAC9BjF,kBAAUG,QAAQ;AAClB;AAAA,MACF;AAEA,UAAIoB,MAAM;AAAA,QACR0D;AAAAA,QACAC,SAAS,CAAA;AAAA;AAGX,UAAIA,WAAWrD,gBAAgB,QAAQ;AACrCN,cAAM;AAAA,UACJ0D;AAAAA,UACAC;AAAAA;MAEJ,OAAO;AACL,gBAAMvF,cAASQ,MAAM6E,KAAK,MAApBrF,mBAAuBwF;AAC7B5D,cAAM;AAAA,UACJ0D;AAAAA,UACAC,SAAS;AAAA,YACP,GAAGxF,SAASS,MAAM6E,KAAK;AAAA,YACvB,GAAGE;AAAAA,UACL;AAAA;MAEJ;AACA,UAAIlF,UAAUG,SAAS8E,OAAO9C,WAAW,OAAO,GAAG;AACjDnC,kBAAUG,QAAQ;AAAA,MACpB;AACAtB,WAAK,cAAc0C,GAAG;AAAA,IACxB;AAEA,UAAM6D,cAAezB,OAAkB;AAErC,UAAKA,EAAEL,OAAuBM,YAAY,KAAK;AAC7CO,qBAAaR,CAAC;AACd;AAAA,MACF;AAEA,YAAML,SAASI,gBAAgBC,CAAC;AAChC,UAAIL,QAAQ;AACV,cAAM3G,OAAO2G,OAAOD,aAAa,UAAU;AAC3C,cAAMgC,YAAYpI,KAAKC,MAAMoG,OAAOD,aAAa,eAAe,KAAK,IAAI;AACzE,cAAMiC,OAAOnH,OAAOmF,OAAOD,aAAa,YAAY,CAAC;AACrD,cAAMkB,KAAKjB,OAAOD,aAAa,IAAI;AACnC,cAAMkC,SAAS5C,UAAUxC,MAAMoD,KAAMC,UAAS;AAC5C,iBAAOA,KAAKC,SAAS9G;AAAAA,QACvB,CAAC;AACD,cAAM6I,OAAO;AAAA,UACX,GAAGD;AAAAA,UACHF;AAAAA,UACAC;AAAAA,UACAf;AAAAA;AAEF1F,aAAK,yBAAyB2G,IAAI;AAAA,MACpC;AAAA,IACF;AAEA,UAAMC,iBAAiBA,MAAM;;AAC3B,cAAO3G,eAAUqB,UAAVrB,mBAAiB4G;AAAAA,IAC1B;AAEAC,cAAU,MAAM;AACb7G,gBAAUqB,MAAsByF,iBAAiB,aAAa1B,eAAe;AAC7EpF,gBAAUqB,MAAsByF,iBAAiB,SAASR,WAAW;AAAA,IACxE,CAAC;AAEDS,oBAAgB,MAAM;AACnB/G,gBAAUqB,MAAsB2F,oBAAoB,aAAa5B,eAAe;AAChFpF,gBAAUqB,MAAsByF,iBAAiB,SAASR,WAAW;AAAA,IACxE,CAAC;AAMD,UAAMW,mBAAmBA,MAAM;AAC7B,UAAI,CAACjH,UAAUqB,MAAO;AAEtB,YAAM6F,YAAYlH,UAAUqB,MAAM8F,iBAChC,kCACF;AAEAD,gBAAUE,QAASC,SAAQ;AACzB,YAAI7G,cAAc8G,IAAID,GAAG,EAAG;AAC5B7G,sBAAc+G,IAAIF,GAAG;AAGrBG,iCAAyBH,GAAG;AAG5B,YAAIA,IAAII,UAAU;AAChBC,0BAAgBL,GAAG;AAAA,QACrB,OAAO;AACLA,cAAIP,iBAAiB,QAAQ,MAAMY,gBAAgBL,GAAG,CAAC;AACvDA,cAAIP,iBAAiB,SAAS,MAAMa,iBAAiBN,GAAG,CAAC;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAMG,2BAA4BH,SAAQ;AACxC,YAAMO,iBAAiBP,IAAIlC,cAAc0C;AACzC,UAAIR,IAAIS,eAAeF,gBAAgB;AACrCP,YAAIU,MAAMC,WAAW;AAAA,MACvB;AAEA,UAAIX,IAAIS,gBAAgBT,IAAIY,eAAe;AACzC,cAAMC,QAAQb,IAAIY,gBAAgBZ,IAAIS;AACtCT,YAAIU,MAAMI,YAAY,GAAGC,KAAKC,IAAI,KAAKT,iBAAiBM,KAAK,CAAC;AAAA,MAChE;AAAA,IACF;AAGA,UAAMR,kBAAmBL,SAAQ;AAC/B7G,oBAAc8H,OAAOjB,GAAG;AACxBA,UAAIkB,aAAa,kBAAkB,MAAM;AACzClB,UAAIrC,UAAUuC,IAAI,QAAQ;AAC1BF,UAAIU,MAAMS,UAAU;AACpBnB,UAAIL,oBAAoB,QAAQU,eAAe;AAC/CL,UAAIL,oBAAoB,SAASW,gBAAgB;AAAA,IACnD;AAGA,UAAMA,mBAAoBN,SAAQ;AAChC7G,oBAAc8H,OAAOjB,GAAG;AACxBA,UAAIkB,aAAa,kBAAkB,MAAM;AACzClB,UAAIrC,UAAUuC,IAAI,YAAY;AAC9BF,UAAIU,MAAMI,YAAY;AACtBd,UAAIL,oBAAoB,QAAQU,eAAe;AAC/CL,UAAIL,oBAAoB,SAASW,gBAAgB;AAAA,IACnD;AAGA,UAAMc,KAAKC,UACRC,IAAIC,WAAW,EACfD,IAAIE,YAAY,EAChBF,IAAIG,WAAW;AAAA,MAAEC,aAAa;AAAA,IAAM,CAAC,EACrCJ,IAAIK,UAAU,EACdL,IAAIM,YAAY,EAChBN,IAAIO,cAAc;AAAA,MAAEC,oBAAoB;AAAA,IAAK,CAAC,EAC9CR,IAAIS,SAAS,EACbT,IAAIU,WAAW,EACfV,IAAIW,eAAe;AAQtB,UAAMC,yBAAyBA,CAACC,QAAaC,iBAA6C;;AACxF,UAAI,CAACD,UAAU,OAAOA,WAAW,SAAU;AAG3C,UAAIA,OAAO1K,SAAS,QAAQ;AAC1B,cAAM4K,WAAW;AAAA,UACf,KAAGF,YAAO1G,eAAP0G,mBAAmB9C,SAAQ;;UAE9B,GAAG7H,MAAMU,iBAAiB,CAAA;AAAA;AAE5BkK,qBAAaE,KAAKD,QAAQ;AAC1B;AAAA,MACF;AAGA,UAAIE,MAAMC,QAAQL,OAAOM,QAAQ,GAAG;AAClCN,eAAOM,SAAS1C,QAAS2C,WAAU;AACjCR,iCAAuBQ,OAAON,YAAY;AAAA,QAC5C,CAAC;AAAA,MACH;AAAA,IACF;AAOA,UAAMO,eAAgBC,WAAe;AACnC,YAAMR,eAA2C,CAAA;AAGjD,YAAMS,WAAkB,CAAA;AACxB,YAAMC,eAAgBtH,UAAc;AAClC,YAAI,CAACA,KAAM;AACX,YAAIA,KAAKiC,YAAY,OAAO;AAC1BoF,mBAASP,KAAK9G,IAAI;AAAA,QACpB;AACA,YAAI+G,MAAMC,QAAQhH,KAAKiH,QAAQ,GAAG;AAChCjH,eAAKiH,SAAS1C,QAAQ+C,YAAY;AAAA,QACpC;AAAA,MACF;AAGA,UAAIP,MAAMC,QAAQI,MAAMH,QAAQ,GAAG;AACjCG,cAAMH,SAAS1C,QAAQ+C,YAAY;AAAA,MACrC;AAGAD,eAAS9C,QAASgD,aAAiB;;AACjC,cAAMC,YAAWD,aAAQN,aAARM,mBAAkB3F,KAAMsF,WAAeA,MAAMjF,YAAY;AAC1E,aAAIuF,gDAAUvH,eAAVuH,mBAAsBC,cAAtBD,mBAAiC7H,SAAS,uBAAuB;AACnE,cAAI;AACF,kBAAM+H,SAAOF,oBAASP,aAATO,mBAAoB,OAApBA,mBAAwBhJ,UAAS;AAC9C,gBAAIkJ,MAAM;AACR,oBAAMf,SAASrL,KAAKC,MAAMmM,IAAI;AAE9BhB,qCAAuBC,QAAQC,YAAY;AAAA,YAC7C;AAAA,UACF,SAASpL,OAAO;AACdmM,oBAAQnM,MAAM,qCAAqCA,KAAK;AAAA,UAC1D;AAAA,QACF;AAAA,MACF,CAAC;AAED,aAAOoL;AAAAA,IACT;AAEAxG,UACE,MAAMX,WAAWjB,OACjB,OAAOxD,SAAS;AAEdmD,gBAAU;AACV,YAAMiJ,QAAQ,MAAMxB,GAAGgC,IAAIhC,GAAGrK,MAAMP,IAAI,CAAC;AAEzC,YAAM4L,eAAeO,aAAaC,KAAK;AACvCrJ,eAASS,QAAQoI;AAEjB,YAAMiB,SAAQ;AACdzJ,UAAII,QAAQ4I;AAGZS,eAASzD,gBAAgB;AACzByD,eAAS,MAAM;;AACb,cAAMC,WAAU3K,eAAUqB,UAAVrB,mBAAiBgE,cAAc;AAC/C,cAAM4G,UAAUD,mCAAS3G,cAAc;AACvC,YAAI4G,WAAW,CAAClK,gBAAgBW,OAAO;AACrCX,0BAAgBW,QAAQ;AACxB,cAAIwJ,UAAUF,OAAQ;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH,GACA;AAAA,MAAE/G,WAAW;AAAA,IAAK,CACpB;AAMA,UAAMkH,iBAAiBA,MAAM;AAC3B,aAAOC,EAAE,OAAO;AAAA,QACdC,OAAO;AAAA,MACT,GAAG;AAAA;AAAA,QAEDD,EAAE,OAAO;AAAA,UACPC,OAAO;AAAA,QACT,GAAG,CACDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,QAAkB,CAAC,GACrCD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,SAAkB,CAAC,CACtC;AAAA;AAAA,QAEDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,QAAmC,CAAC;AAAA,QACtDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,QAAqC,CAAC;AAAA,QACxDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,QAAoC,CAAC;AAAA,QACvDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,QAAmC,CAAC;AAAA,QACtDD,EAAE,OAAO;AAAA,UAAEC,OAAO;AAAA,SAAsC;AAAA,MAAC,CAC1D;AAAA,IACH;AAQA,UAAMC,cAAcA,CAACpI,MAAMqD,OAAgBgF,QAAc;;AACvD,UAAI,CAACrI,KAAM,QAAO;AAClB,UAAIiH,WAAkB,CAAA;AACtB,YAAMqB,gBAAgB,CAAC,OAAO,OAAO,QAAQ,QAAQ;AAErD,UAAI,CAACA,cAAc3I,SAASK,KAAKiC,OAAO,GAAG;AACzCgF,qBAAWjH,gBAAKiH,aAALjH,mBAAeuI,QAAfvI,4BAAqBkH,WAASkB,YAAYlB,OAAO7D,KAAK,OAAM,CAAA;AAAA,MACzE;AACA,cAAQrD,KAAK/D,MAAI;AAAA,QACf,KAAK;AACH,iBAAOiM,EACL,OACA;AAAA,YAAEC,OAAO;AAAA,UAAgB,GACzBD,EAAEM,kBAAkB;AAAA,YAClBC,QAAQC;AAAAA,aACPzB,QAAQ,CACb;AAAA,QAEF,KAAK;AACH,cAAIjH,KAAKiC,YAAY,OAAO;AAC1B,kBAAM0G,iBAAiB,CACrB;AAAA,cACE1M,MAAM;AAAA,cACNgG,SAAS;AAAA,cACThC,YAAY;AAAA,gBACVkI,OAAO;AAAA,cACT;AAAA,YACF,GACA,GAAGnI,KAAKiH,QAAQ;AAElB,kBAAMA,YAAW0B,iDAAgBJ,IAAIrB,WAASkB,YAAYlB,OAAO7D,KAAK;AACtE,mBAAO6E,EAAE,QAAQ;AAAA,cACf,GAAGlI,KAAKC;AAAAA,cACRkI,OAAO;AAAA,eACNlB,SAAQ;AAAA,UACb;AACA,cAAIjH,KAAKiC,YAAY,QAAQ;AAC3B,mBAAOiG,EAAE,QAAQ;AAAA,cACb,GAAGlI,KAAKC;AAAAA,eAEVgH,QACJ;AAAA,UACA;AAEA,cAAIjH,KAAKiC,YAAY,OAAO;AAC1B,mBAAOiG,EAAE,OAAO;AAAA,cACd,GAAGlI,KAAKC;AAAAA,cACRkI,OAAO;AAAA,cACP,kBAAkB;AAAA;AAAA,YACpB,CAAC;AAAA,UACH;AAEA,cAAInI,KAAKiC,YAAY,KAAK;AACxB,kBAAMU,SAAO3C,UAAKC,eAALD,mBAAiB2C,SAAQ;AACtC,kBAAMiG,WAAWjG,OAAOA,KAAKI,MAAM,GAAG,EAAEC,IAAG,IAAK;AAChD,mBAAOkF,EACL,KACA;AAAA,cACE,GAAGlI,KAAKC;AAAAA,cACRkI,OAAO;AAAA,cACP,kBAAkBS;AAAAA,eAEpB3B,QACF;AAAA,UACF;AACA,cAAIjH,KAAKiC,YAAY,cAAc;AACjC,mBAAOiG,EACLW,YACA;AAAA,cACE,GAAG7I,KAAKC;AAAAA,eAEVgH,QACF;AAAA,UACF;AACA,cAAIjH,KAAKiC,YAAY,SAAS;AAC5B,mBAAOiG,EACL,OACA;AAAA,cACEC,OAAO;AAAA,eAET,CACED,EACE,SACAjB,QACF,CAAC,CAEL;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,QAAQ;AAC3B,mBAAOiG,EACL,OACA;AAAA,cACEC,OAAO;AAAA,eAET,CAAClB,SAAS/I,SAASM,KAAK,CAAC,CAC3B;AAAA,UACF;AAEA,cAAIwB,KAAKiC,YAAY,SAAS;AAC5B,mBAAOiG,EACLY,OACA;AAAA,cACA,GAAG9I,KAAKC;AAAAA,eAERgH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,SAAS;AAC5B,mBAAOiG,EACLa,OACA;AAAA,cACD,GAAG/I,KAAKC;AAAAA,eAEPgH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,UAAU;AAE7B,mBAAOiG,EACLc,QACA;AAAA,cACE,GAAGhJ,KAAKC;AAAAA,eAEVgH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,YAAY;AAC/B,kBAAMgH,QAAa,CAAA;AAGnB,iBAAIjJ,UAAKiJ,UAALjJ,mBAAYkJ,QAAQ;AACtBD,oBAAMC,SAAS,MAAM;AACnB,uBAAOlJ,KAAKiJ,MAAMC,OAAOX,IAAKY,cAAkB;AAC9C,yBAAOf,YAAYe,UAAU9F,KAAK;AAAA,gBACpC,CAAC;AAAA,cACH;AAAA,YACF;AAGA,gBAAI4D,YAAYA,SAASrL,SAAS,GAAG;AACnCqN,oBAAM9M,UAAU,MAAM8K;AAAAA,YACxB;AAEA,mBAAOiB,EACLkB,UACA;AAAA,cACE,GAAGpJ,KAAKC;AAAAA,eAEVgJ,KACF;AAAA,UACF;AAEA,cAAIjJ,KAAKiC,YAAY,UAAU;AAC7B,kBAAMgF,aAAWjH,UAAKiH,aAALjH,mBAAeuI,IAAIrB,WAASkB,YAAYlB,OAAO/I,OAAO;AACvEA;AACA,mBAAO+J,EACLmB,QACA;AAAA,cACE/L,KAAKU,SAASQ,MAAM8K;AAAAA,cACpBC,OAAOxL,SAASS,MAAM6E,KAAK;AAAA,cAC3B,GAAGrD,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,eAE9BiH,SACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,cAAc;AACjC,mBAAOiG,EACLsB,YACA;AAAA,cACE,GAAGxJ,KAAKC;AAAAA,eAEVgH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,YAAY;AAC/B,gBAAIsB,WAAUvD,UAAKC,eAALD,mBAAiBuD;AAC/B,gBAAIvD,KAAKE,gBAAgB,SAAS;AAChCqD,wBAAU8E;AAAAA,YACZ;AACA,mBAAOH,EACLuB,UACA;AAAA,cACC,GAAGzJ,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,cAC3B0J,SAASA,MAAM;;AACbtG,yBAASC,QAAQrD,MAAAA,KAAKC,eAALD,gBAAAA,IAAiBsD,QAAQC,SAASvD,KAAKE,WAAW;AAAA,cACrE;AAAA,eAEF+G,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,YAAY;AAC/B,mBAAOiG,EACLyB,UACA;AAAA,cACA,GAAG3J,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,cAC1B4J,YAAY7L,SAASS,MAAM6E,KAAK,GAAGrD,UAAKC,eAALD,mBAAiB6J,QAAQ;AAAA,cAC5D,uBAAwBrL,WAAU;;AAChCT,yBAASS,MAAM6E,KAAK,GAAGrD,MAAAA,KAAKC,eAALD,gBAAAA,IAAiB6J,QAAQ,IAAIrL;AAAAA,cACtD;AAAA,eAEFyI,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,gBAAgB;AACnC,mBAAOiG,EACL4B,cACA;AAAA,cACA,GAAG9J,KAAKC;AAAAA,cACNE,UAAUJ,cAAcC,IAAI;AAAA,cAC5B4J,YAAY7L,SAASS,MAAM6E,KAAK,GAAGrD,UAAKC,eAALD,mBAAiB6J,QAAQ;AAAA,cAC5D,uBAAwBrL,WAAU;;AAChCT,yBAASS,MAAM6E,KAAK,GAAGrD,MAAAA,KAAKC,eAALD,gBAAAA,IAAiB6J,QAAQ,IAAIrL;AAAAA,cACtD;AAAA,eAEFyI,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,WAAW;AAC9B,mBAAOiG,EACL6B,SACA;AAAA,cACE,GAAG/J,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,cAC5B4J,YAAY7L,SAASS,MAAM6E,KAAK,GAAGrD,UAAKC,eAALD,mBAAiB6J,QAAQ;AAAA,cAC5D,uBAAwBrL,WAAU;;AAChCT,yBAASS,MAAM6E,KAAK,GAAGrD,MAAAA,KAAKC,eAALD,gBAAAA,IAAiB6J,QAAQ,IAAIrL;AAAAA,cACtD;AAAA,eAEFyI,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,gBAAgB;AACnC,mBAAOiG,EACL8B,cACA;AAAA,cACE,GAAGhK,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,cAC5B4J,YAAY7L,SAASS,MAAM6E,KAAK,GAAGrD,UAAKC,eAALD,mBAAiB6J,QAAQ;AAAA,cAC5D,uBAAwBrL,WAAU;;AAChCT,yBAASS,MAAM6E,KAAK,GAAGrD,MAAAA,KAAKC,eAALD,gBAAAA,IAAiB6J,QAAQ,IAAIrL;AAAAA,cACtD;AAAA,eAEFyI,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,WAAW;AAE9B,mBAAOiG,EACL+B,SACA;AAAA,cACE,GAAGjK,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,eAE9BiH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,WAAW;AAC9B,mBAAOiG,EACLgC,WACA;AAAA,cACC,GAAGlK,KAAKC;AAAAA,eAETgH,QACF;AAAA,UACF;AAEA,cAAIjH,KAAKiC,YAAY,iBAAiB;AACpC,mBAAOiG,EACLiC,eACA;AAAA,cACA,GAAGnK,KAAKC;AAAAA,YACR,GACA;AAAA,cACE9D,SAAUiO,WAAU;;AAClB,sBAAMnD,aAAWjH,MAAAA,KAAKiH,aAALjH,gBAAAA,IAAeuI,IAAIrB,WAASkB,YAAYlB,OAAO/I,SAASiM,MAAM/B,GAAG;AAClFV,wBAAQ0C,IAAI,YAAYpD,WAAUjH,KAAKiH,QAAQ;AAC/C,sBAAM5D,UAAQrD,MAAAA,KAAKiH,aAALjH,gBAAAA,IAAesK,UAAUpD,WAAK;;AAAIA,+BAAM1I,UAAU4L,MAAM/B,KAAIrI,MAAAA,KAAKC,eAALD,gBAAAA,IAAiBuK,IAAI,KAAKrD,MAAM1I,UAAUgM;AAAAA;AACpH,uBAAOnH,WAAU,KAAK4D,YAAWA,aAAAA,gBAAAA,UAAW5D;AAAAA,cAC9C;AAAA,YACF,CACF;AAAA,UACF;AAEA,cAAIrD,KAAKiC,YAAY,YAAY;AAC/B,mBAAOiG,EACLuC,UACA;AAAA,cACE,GAAGzK,KAAKC;AAAAA,YACV,CACF;AAAA,UACF;AAEA,cAAID,KAAKiC,YAAY,YAAY;AAC/B,mBAAOiG,EACLwC,UACA;AAAA,cACC,GAAG1K,KAAKC;AAAAA,YACT,CACF;AAAA,UACF;AAEA,cAAID,KAAKiC,YAAY,cAAc;AACjC,mBAAOiG,EACLyC,YACA;AAAA,cACE,GAAG3K,KAAKC;AAAAA,YACV,CACF;AAAA,UACF;AAEA,cAAID,KAAKiC,YAAY,aAAa;AAChC,mBAAOiG,EACL0C,WACA;AAAA,cACE,GAAG5K,KAAKC;AAAAA,YACV,CACF;AAAA,UACF;AAEA,cAAID,KAAKiC,YAAY,cAAc;AAEjC,gBAAIjC,KAAKE,gBAAgB,YAAUF,UAAKC,eAALD,mBAAiB6J,WAAU;AAC5D,oBAAMA,WAAW7J,KAAKC,WAAW4J;AACjC,qBAAO3B,EACL2C,YACA;AAAA,gBACEC,SAASrM,cAAcD;AAAAA,gBACvBuM,YAAYnM,iBAAiBJ;AAAAA,gBAC7B,GAAGwB,KAAKC;AAAAA,gBACRE,UAAUJ,cAAcC,IAAI;AAAA,gBAC5BgL,YAAUjN,cAASS,MAAM6E,KAAK,MAApBtF,mBAAyB8L,cAAa,CAAA;AAAA,gBAChD,qBAAsBrL,WAAe;AACnC,sBAAI,CAACT,SAASS,MAAM6E,KAAK,GAAI;AAC3BtF,6BAASS,MAAM6E,KAAK,IAAK,CAAA;AAAA,kBAC3B;AAGA,sBAAI,CAACtF,SAASS,MAAM6E,KAAK,EAAG4H,WAAW;AACrClN,6BAASS,MAAM6E,KAAK,EAAG4H,YAAY,CAAA;AAAA,kBACrC;AACAlN,2BAASS,MAAM6E,KAAK,EAAG4H,UAAUpB,QAAQ,IAAIrL;AAC7CT,2BAASS,MAAM6E,KAAK,EAAGwG,QAAQ,IAAIrL;AAAAA,gBACrC;AAAA,cACF,CACF;AAAA,YACF;AAEA,mBAAO0J,EACL2C,YACA;AAAA,cACE,GAAG7K,KAAKC;AAAAA,cACRE,UAAUJ,cAAcC,IAAI;AAAA,YAC9B,CACF;AAAA,UACF;AAGA,cAAIA,KAAKiC,YAAY,OAAO;AAC1B,kBAAMuF,YAAWxH,UAAKiH,aAALjH,mBAAe4B,KAAKsF,WAASA,MAAMjF,YAAY;AAChE,gBAAIuF,UAAU;AACZ,mBAAIA,oBAASvH,eAATuH,mBAAqBC,cAArBD,mBAAgC7H,SAAS,uBAAuB;AAClE,sBAAM+H,SAAOF,oBAASP,aAATO,mBAAoB,OAApBA,mBAAwBhJ,UAAS;AAE9C,oBAAI,CAAC/C,eAAeiM,IAAI,GAAG;AAEzB,yBAAOO,eAAc;AAAA,gBACvB;AACA,oBAAI;AACF,wBAAMtB,SAASrL,KAAKC,MAAMmM,IAAI;AAC9B,wBAAMwD,WAAWC,eAAexE,MAAM;AACtC,wBAAMM,YAAWmB,YAAY8C,UAAU/M,OAAO;AAC9C,yBAAO+J,EAAE,OAAO;AAAA,oBACdC,OAAO;AAAA,kBACT,GAAG,CAAClB,SAAQ,CAAC;AAAA,gBACf,SAASzL,OAAO;AAEd,yBAAOyM,eAAc;AAAA,gBACvB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAGA,iBAAOC,EACLlI,KAAKiC,SACLjC,KAAKC,YACLgH,QACF;AAAA,QAEF,KAAK;AACH,iBAAOjH,KAAKxB,MAAM7C,KAAI;AAAA,QAExB;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEAyP,cAAU,MAAM;AACdjN,gBAAU;AAAA,IACZ,CAAC;AAED,WAAO;AAAA,MACLiK;AAAAA,MACAhK;AAAAA,MACAjB;AAAAA,MACAkE;AAAAA,MACAhD;AAAAA,MACAyF;AAAAA;EAEJ;AAAA,EACAuH,SAAS;AACP,WAAAC,YAAA,OAAA;AAAA,MAAA,OAAA;AAAA,MAAA,SAAA;AAAA,IAAA,GAAA,CAMM,KAAKlD,YAAY,KAAKhK,GAAG,CAAC,CAAA;AAAA,EAIlC;AACF,CAAC;"}
|