@core-pilot/client-vue 0.0.5 → 0.0.7

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.
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue");require("../../node_modules/.pnpm/echarts@5.6.0/node_modules/echarts/index.js");/* empty css */const t=require("../../node_modules/.pnpm/echarts@5.6.0/node_modules/echarts/lib/core/echarts.js"),o=e.defineComponent({name:"CoreChart",props:{autoResize:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},style:{type:Object,default:()=>({})},option:{type:Object,default:()=>({})},theme:{type:String,default:void 0}},setup(o){const n=e.ref(null),i=e.ref(null);let l=null;const s=()=>{i.value&&i.value.resize()};e.onMounted(()=>{(()=>{if(!n.value)return;const{theme:e,option:l}=o||{};i.value=t.init(n.value,"string"==typeof e?e:void 0,{renderer:"canvas"}),e&&"object"==typeof e&&(t.registerTheme("custom",e),i.value.dispose(),i.value=t.init(n.value,"custom")),l&&i.value.setOption(l),o.loading?i.value.showLoading():i.value.hideLoading()})(),n.value&&o.autoResize&&(l=new ResizeObserver(()=>{s()}),l.observe(n.value)),!1!==o.autoResize&&window.addEventListener("resize",s)}),e.onUnmounted(()=>{l&&n.value&&(l.unobserve(n.value),l.disconnect()),!1!==o.autoResize&&window.removeEventListener("resize",s),i.value&&(i.value.dispose(),i.value=null)}),e.watch(()=>o.option,()=>{(()=>{if(!i.value)return;const{option:e,loading:t}=o;e&&i.value.setOption(e,!0),t?i.value.showLoading():i.value.hideLoading()})()},{immediate:!0,deep:!0});const u=()=>{const e=o.style||{};return{width:(null==e?void 0:e.width)||"100%",height:(null==e?void 0:e.height)||"400px",minHeight:(null==e?void 0:e.minHeight)||"300px",...e}};return()=>e.createVNode("div",{class:"core-chart-container"},[e.createVNode("div",{ref:n,class:"core-chart",style:u()},null)])}});module.exports=o;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/core-chart/index.tsx"],"sourcesContent":["import { defineComponent, ref, onMounted, onUnmounted, watch, PropType, CSSProperties } from 'vue';\nimport * as echarts from 'echarts';\nimport type { EChartsOption, EChartsType } from 'echarts';\nimport './style.less';\n\nexport default defineComponent({\n name: 'CoreChart',\n props: {\n autoResize: {\n type: Boolean,\n default: true,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n style: {\n type: Object as PropType<CSSProperties>,\n default: () => ({}),\n },\n option: {\n type: Object as PropType<EChartsOption>,\n default: () => ({}),\n },\n theme: {\n type: String,\n default: undefined,\n },\n },\n setup(props) {\n const chartRef = ref<HTMLDivElement | null>(null);\n const chartInstance = ref<EChartsType | null>(null);\n let resizeObserver: ResizeObserver | null = null;\n\n // 初始化图表\n const initChart = () => {\n if (!chartRef.value) return;\n const { theme, option } = props || {};\n\n // 创建图表实例\n chartInstance.value = echarts.init(\n chartRef.value,\n typeof theme === 'string' ? theme : undefined,\n {\n renderer: 'canvas',\n }\n );\n\n // 设置主题(如果是对象形式)\n if (theme && typeof theme === 'object') {\n echarts.registerTheme('custom', theme);\n chartInstance.value.dispose();\n chartInstance.value = echarts.init(chartRef.value, 'custom');\n }\n\n // 设置配置项\n if (option) {\n chartInstance.value.setOption(option as EChartsOption);\n }\n\n // 处理加载状态\n if (props.loading) {\n chartInstance.value.showLoading();\n } else {\n chartInstance.value.hideLoading();\n }\n };\n\n // 更新图表\n const updateChart = () => {\n if (!chartInstance.value) return;\n const { option, loading } = props;\n\n if (option) {\n chartInstance.value.setOption(option as EChartsOption, true);\n }\n\n if (loading) {\n chartInstance.value.showLoading();\n } else {\n chartInstance.value.hideLoading();\n }\n };\n\n // 调整图表大小\n const resizeChart = () => {\n if (chartInstance.value) {\n chartInstance.value.resize();\n }\n };\n\n // 监听容器大小变化\n const observeResize = () => {\n if (!chartRef.value || !props.autoResize) return;\n\n resizeObserver = new ResizeObserver(() => {\n resizeChart();\n });\n\n resizeObserver.observe(chartRef.value);\n };\n\n // 组件挂载\n onMounted(() => {\n initChart();\n observeResize();\n\n // 监听窗口大小变化\n if (props.autoResize !== false) {\n window.addEventListener('resize', resizeChart);\n }\n });\n\n // 组件卸载\n onUnmounted(() => {\n if (resizeObserver && chartRef.value) {\n resizeObserver.unobserve(chartRef.value);\n resizeObserver.disconnect();\n }\n\n if (props.autoResize !== false) {\n window.removeEventListener('resize', resizeChart);\n }\n\n if (chartInstance.value) {\n chartInstance.value.dispose();\n chartInstance.value = null;\n }\n });\n\n // 监听配置变化\n watch(\n () => props.option,\n () => {\n // 支持异步/深度更新的场景(例如只修改 option 内部字段而不更换引用)\n updateChart();\n },\n {\n immediate: true,\n deep: true,\n }\n );\n\n // 获取容器样式\n const getContainerStyle = () => {\n const style = props.style || {};\n return {\n width: style?.width || '100%',\n height: style?.height || '400px',\n minHeight: style?.minHeight || '300px',\n ...style,\n };\n };\n\n return () => (\n <div class=\"core-chart-container\">\n <div\n ref={chartRef}\n class=\"core-chart\"\n style={getContainerStyle()}\n />\n </div>\n );\n },\n});\n\n\n"],"names":["CoreChart","name","props","autoResize","type","Boolean","default","loading","style","Object","option","theme","String","undefined","setup","chartRef","ref","chartInstance","resizeObserver","resizeChart","value","resize","onMounted","initChart","echarts","renderer","dispose","setOption","showLoading","hideLoading","ResizeObserver","observe","window","addEventListener","onUnmounted","unobserve","disconnect","removeEventListener","watch","updateChart","immediate","deep","getContainerStyle","width","height","minHeight","_createVNode","class"],"mappings":"kPAKAA,oBAA+B,CAC7BC,KAAM,YACNC,MAAO,CACLC,WAAY,CACVC,KAAMC,QACNC,SAAS,GAEXC,QAAS,CACPH,KAAMC,QACNC,SAAS,GAEXE,MAAO,CACLJ,KAAMK,OACNH,QAASA,MAAO,IAElBI,OAAQ,CACNN,KAAMK,OACNH,QAASA,MAAO,IAElBK,MAAO,CACLP,KAAMQ,OACNN,aAASO,IAGbC,KAAAA,CAAMZ,GACJ,MAAMa,EAAWC,EAAAA,IAA2B,MACtCC,EAAgBD,EAAAA,IAAwB,MAC9C,IAAIE,EAAwC,KAG5C,MAkDMC,EAAcA,KACdF,EAAcG,OAChBH,EAAcG,MAAMC,UAgBxBC,EAAAA,UAAU,KApEQC,MAChB,IAAKR,EAASK,MAAO,OACrB,MAAMT,MAAEA,EAAAA,OAAOD,GAAWR,GAAS,CAAA,EAGnCe,EAAcG,MAAQI,EAAAA,KACpBT,EAASK,MACQ,iBAAVT,EAAqBA,OAAQE,EACpC,CACEY,SAAU,WAKVd,GAA0B,iBAAVA,IAClBa,EAAAA,cAAsB,SAAUb,GAChCM,EAAcG,MAAMM,UACpBT,EAAcG,MAAQI,EAAAA,KAAaT,EAASK,MAAO,WAIjDV,GACFO,EAAcG,MAAMO,UAAUjB,GAI5BR,EAAMK,QACRU,EAAcG,MAAMQ,cAEpBX,EAAcG,MAAMS,eAwCtBN,GAXKR,EAASK,OAAUlB,EAAMC,aAE9Be,EAAiB,IAAIY,eAAe,KAClCX,MAGFD,EAAea,QAAQhB,EAASK,SASP,IAArBlB,EAAMC,YACR6B,OAAOC,iBAAiB,SAAUd,KAKtCe,EAAAA,YAAY,KACNhB,GAAkBH,EAASK,QAC7BF,EAAeiB,UAAUpB,EAASK,OAClCF,EAAekB,eAGQ,IAArBlC,EAAMC,YACR6B,OAAOK,oBAAoB,SAAUlB,GAGnCF,EAAcG,QAChBH,EAAcG,MAAMM,UACpBT,EAAcG,MAAQ,QAK1BkB,QACE,IAAMpC,EAAMQ,OACZ,KAhEkB6B,MAClB,IAAKtB,EAAcG,MAAO,OAC1B,MAAMV,OAAEA,EAAAA,QAAQH,GAAYL,EAExBQ,GACFO,EAAcG,MAAMO,UAAUjB,GAAyB,GAGrDH,EACFU,EAAcG,MAAMQ,cAEpBX,EAAcG,MAAMS,eAuDpBU,IAEF,CACEC,WAAW,EACXC,MAAM,IAKV,MAAMC,EAAoBA,KACxB,MAAMlC,EAAQN,EAAMM,OAAS,CAAA,EAC7B,MAAO,CACLmC,aAAOnC,WAAOmC,QAAS,OACvBC,cAAQpC,WAAOoC,SAAU,QACzBC,iBAAWrC,WAAOqC,YAAa,WAC5BrC,IAIP,MAAO,IAAAsC,EAAAA,YAAA,MAAA,CAAAC,MAAA,wBAAA,CAAAD,EAAAA,YAAA,MAAA,CAAA9B,IAGID,EAAQgC,MAAA,aAAAvC,MAENkC,KAAmB,OAIlC"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]}},emits:["cancel","submit","sceneChange"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref(a.sceneList[0]),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=r.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=o.value)||e.clear(),null==(a=o.value)||a.setText(t)})}),e.watch(()=>a.sceneList,e=>{e.length>0&&(c.value=e[0])},{immediate:!0});const v=()=>{s("cancel")},g=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},f=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=o.value)?void 0:e.getCurrentValue();g(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:g,changeHandler:()=>{var e,t;p.value=null==(t=null==(e=o.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:f,handleUploadSuccess:h,handleUploadBefore:y,handleUploadExceed:x,removeFile:N,handleUploadRemove:_,submitBtnClick:b,getSlots:()=>{const o={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:u.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-u.value.length,data:a.extendData,beforeUpload:y,headers:a.headers,onError:f,onSuccess:h,onExceed:x,onRemove:_,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}),a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"split-line"},null),e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:c.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,c.value=e,void s("sceneChange",e);var e}},[t.name]))])]):null]),a.loading?e.createVNode(i,{class:"sender-cancel",onCancel:v},null):e.createVNode("div",{class:{"sender-btn":!0,active:!p.value},onClick:b},null)])};return(u.value.length>0||a.tagList.length>0)&&(o.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[u.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:N},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:m.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{m.value=t}},[t.name]))])])),o}}},render(){let t;return e.createVNode("div",{class:"editor-sender-wrapper",ref:"editorSenderWrapper"},[e.createVNode(a,{ref:"editorSender",variant:"updown",loading:this.loading,placeholder:this.placeholder,activeTag:this.activeTag,onSubmit:this.submitHandler,onCancel:this.cancelHandler,onChange:this.changeHandler,"custom-style":this.customStyle},(l=t=this.getSlots(),"function"==typeof l||"[object Object]"===Object.prototype.toString.call(l)&&!e.isVNode(l)?t:{default:()=>[t]}))]);var l}});module.exports=s;
1
+ "use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]},scene:{type:String,default:void 0}},emits:["cancel","submit","sceneChange","update:scene"],setup(a,{emit:s}){const r=e.useTemplateRef("editorSender"),o=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref((()=>{if(a.scene){const e=a.sceneList.find(e=>e.id===a.scene);if(e)return e}return a.sceneList[0]})()),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=o.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=r.value)||e.clear(),null==(a=r.value)||a.setText(t)})}),e.watch(()=>a.scene,e=>{if(e){const t=a.sceneList.find(t=>t.id===e);t&&(c.value=t)}}),e.watch(()=>a.sceneList,e=>{if(e.length>0){if(a.scene){const t=e.find(e=>e.id===a.scene);if(t)return void(c.value=t)}c.value=e[0]}},{immediate:!0});const v=()=>{s("cancel")},f=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=r.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},g=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=r.value)?void 0:e.getCurrentValue();f(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:f,changeHandler:()=>{var e,t;p.value=null==(t=null==(e=r.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:g,handleUploadSuccess:h,handleUploadBefore:y,handleUploadExceed:x,removeFile:N,handleUploadRemove:_,submitBtnClick:b,getSlots:()=>{const r={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:u.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-u.value.length,data:a.extendData,beforeUpload:y,headers:a.headers,onError:g,onSuccess:h,onExceed:x,onRemove:_,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}),a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"split-line"},null),e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:c.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,c.value=e,s("sceneChange",e),void s("update:scene",e.id);var e}},[t.name]))])]):null]),a.loading?e.createVNode(i,{class:"sender-cancel",onCancel:v},null):e.createVNode("div",{class:{"sender-btn":!0,active:!p.value},onClick:b},null)])};return(u.value.length>0||a.tagList.length>0)&&(r.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[u.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:N},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:m.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{m.value=t}},[t.name]))])])),r}}},render(){let t;return e.createVNode("div",{class:"editor-sender-wrapper",ref:"editorSenderWrapper"},[e.createVNode(a,{ref:"editorSender",variant:"updown",loading:this.loading,placeholder:this.placeholder,activeTag:this.activeTag,onSubmit:this.submitHandler,onCancel:this.cancelHandler,onChange:this.changeHandler,"custom-style":this.customStyle},(l=t=this.getSlots(),"function"==typeof l||"[object Object]"===Object.prototype.toString.call(l)&&!e.isVNode(l)?t:{default:()=>[t]}))]);var l}});module.exports=s;
2
2
  //# sourceMappingURL=index.js.map
@@ -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 },\n emits: ['cancel', 'submit', 'sceneChange'],\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 activeScene = ref(props.sceneList[0]);\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 watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\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 }\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":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","submitHandler","res","text","file","map","item","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","find","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","scene","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"mappings":"o6BAWA,MAAAA,oBAA+B,CAC7BC,MAAO,CACLC,QAAS,CACPC,KAAMC,QACNC,SAAS,GAEXC,UAAW,CACTH,KAAMI,OACNF,QAAS,gCAEXG,WAAY,CACVL,KAAMM,OACNJ,QAASA,KAAAA,CACPK,KAAQ,aAGZC,eAAgB,CACdR,KAAMI,OACNF,QAAS,iIAEXO,QAAS,CACPT,KAAMM,OACNJ,QAASA,KAAAA,CACPQ,cAAe,uDACfC,MAAO,0CAGXC,UAAW,CACTZ,KAAMI,OACNF,QAAS,WAEXW,MAAO,CACLb,KAAMc,OACNZ,QAAS,GAEXa,YAAa,CACXf,KAAMM,OACNJ,QAASA,KAAAA,CACPc,UAAW,UAGfC,UAAW,CACTjB,KAAMI,OACNF,QAAS,IAEXgB,YAAa,CACXlB,KAAMI,OACNF,QAAS,wBAEXiB,QAAS,CACPnB,KAAMoB,MACNlB,QAASA,IAAO,CACd,CACEmB,GAAI,IACJC,KAAM,OAER,CACED,GAAI,IACJC,KAAM,OAER,CACED,GAAI,IACJC,KAAM,OAER,CACED,GAAI,IACJC,KAAM,OAER,CACED,GAAI,IACJC,KAAM,OAER,CACED,GAAI,IACJC,KAAM,SAIZC,UAAW,CACTvB,KAAMoB,MAINlB,QAASA,IAAO,CACd,CACEmB,GAAI,MACJC,KAAM,OAER,CACED,GAAI,MACJC,KAAM,UAKdE,MAAO,CAAC,SAAU,SAAU,eAC5BC,KAAAA,CAAM3B,GAAO4B,KAAEA,IACb,MAAMC,EAAeC,EAAAA,eAAoC,gBACnDC,EAAsBD,EAAAA,eAA4B,uBAClDE,EAAaF,EAAAA,eAAgC,cAC7CG,EAAcC,EAAAA,IAAIlC,EAAMyB,UAAU,IAElCU,EAAUD,EAAAA,KAAI,GACdE,EAAWF,EAAAA,IAAiB,IAC5BG,EAAYH,EAAAA,IAAIlC,EAAMqB,QAAQ,IAEpCiB,EAAAA,MAAM,IAAMtC,EAAMc,UAAYyB,IAC5BC,EAAAA,SAAS,WACP,MAAMC,EAASV,OAAAA,EAAAA,EAAoBW,YAApBX,EAAAA,EAA2BY,cAAc,+BACxDF,MAAAA,GAAAA,EAAQG,aAAa,WAAYL,MAElC,CACDM,WAAW,IAGbP,EAAAA,MAAM,IAAMtC,EAAMmB,UAAYoB,IAC5BC,EAAAA,SAAS,aACPX,OAAAA,EAAAA,EAAaa,QAAbb,EAAoBiB,QACpBjB,OAAAA,EAAAA,EAAaa,UAAOK,QAAQR,OAIhCD,EAAAA,MAAM,IAAMtC,EAAMyB,UAAYc,IACxBA,EAAIS,OAAS,IACff,EAAYS,MAAQH,EAAI,KAEzB,CACDM,WAAW,IAGb,MAAMI,EAAgBA,KACpBrB,EAAK,WASDsB,EAAiBX,IACrB,GAAIJ,EAAQO,OAAS1C,EAAMC,QAAS,OACpC,MAAMkD,EAAM,CACVC,KAAMb,EAAIa,KACVC,KAAMjB,EAASM,MAAMY,IAAKC,GAASA,EAAKC,WAVzBC,QAYjB7B,EAAK,SAAUuB,GAXftB,OAAAA,EAAAA,EAAaa,QAAbb,EAAoBiB,QACpBV,EAASM,MAAQ,GACjBV,OAAAA,EAAAA,EAAWU,QAAXV,EAAkB0B,cAiBdC,EAAoBA,KACxBC,iBAAe,CACbC,MAAO,GACPC,QAAS,SACT5D,KAAM,WAIJ6D,EAAsBA,CAACP,EAAUH,EAAMW,KAC3C5B,EAASM,MAAQsB,GAiCbC,EAAsBZ,IAC1B,GA/BuBa,EA+BFb,EAAKnD,UA7BHiE,IAAI,CACzB,aACA,gBACA,kBACA,YACA,oEACA,2BACA,qBACA,0EACA,WACA,iBACA,6BACA,4EACA,gCACA,kBACA,WACA,uBACA,aACA,YACA,YACA,aACA,kBAIgBC,IAAIF,MAAAA,OAAAA,EAAAA,EAAUG,OAAOC,eAUrC,OALAV,iBAAe,CACbC,MAAO,GACPC,QAAS,SACT5D,KAAM,aAED,EArCcgE,IAAAA,EAuCvB,MAAMK,EAAQlB,EAAKnD,KAAKsE,SAAS,SAC3BC,GAASF,EACTG,EAAUrB,EAAKsB,KAAO,KAAO,KAAO,GACpCC,EAAUvB,EAAKsB,KAAO,KAAO,KAAO,GAC1C,OAAIF,IAAUC,GACZd,iBAAe,CACbC,MAAO,GACPC,QAAS,mBACT5D,KAAM,aAED,KAELqE,IAAUK,KACZhB,iBAAe,CACbC,MAAO,GACPC,QAAS,mBACT5D,KAAM,aAED,IAKL2E,EAAqBA,KACzBjB,iBAAe,CACbC,MAAO,GACPC,QAAS,WACT5D,KAAM,aAKJ4E,EAAaA,EAAGtD,iBACpB,MAAMiB,EAASL,EAASM,MAAMqC,KAAMxB,GAASA,EAAK/B,OAASA,GACvDiB,IACFT,OAAAA,EAAAA,EAAWU,UAAOsC,aAAavC,KAI7BwC,EAAqBA,CAAC5B,EAAM6B,KAChC9C,EAASM,MAAQwC,GAGbC,EAAiBA,WACrB,MAAMC,EAAUvD,OAAAA,EAAAA,EAAaa,YAAbb,EAAAA,EAAoBwD,kBACpCnC,EAAckC,IAiHhB,MAAO,CACLjD,UACAC,WACAC,YACAY,gBACAC,gBACAoC,cA3NoBA,aACpBnD,EAAQO,MAAQb,OAAAA,EAAAA,OAAAA,EAAAA,EAAaa,YAAbb,EAAAA,EAAoB0D,gBAApB1D,EAAAA,EAA+BM,SA2N/CwB,oBACAI,sBACAE,qBACAY,qBACAC,aACAG,qBACAE,iBACAK,SApHeA,KACf,MAAMC,EAAQ,CACZ,cAAeC,IAAAC,EAAAA,YAAA,MAAA,CAAAC,MAAA,yBAAA,CAAAD,EAAAA,YAAA,MAAA,CAAAC,MAAA,sBAAA,CAAAD,EAAAA,YAAAE,WAAA,CAAA3D,IAAA,aAAA4D,SAKG1D,EAASM,MAAMM,OAAS,EAAC+C,OAC3B/F,EAAMK,UAAS,kBACP,EAAK2F,UAAA,EAAAjF,MAEdf,EAAMe,MAAQqB,EAASM,MAAMM,OAAMiD,KACpCjG,EAAMO,WAAU2F,aACRjC,EAAkBtD,QACvBX,EAAMW,QAAOwF,QACbxC,EAAiByC,UACfrC,EAAmBsC,SACpBxB,EAAkByB,SAClBrB,EAAkBsB,OACpBvG,EAAMU,gBAAc,CAAAN,QAAAA,IAAA,CAAAuF,EAAAA,YAAAa,SAAA,CAAAZ,MAAA,oBAAA,CAAAxF,QAAAA,IAAA,CAAAuF,EAAAA,YAAAc,EAAAA,UAAA,KAAA,YAS5BzG,EAAMyB,UAAUuB,OAAS,EAAC2C,cAAAe,EAAAA,SAAA,KAAA,CAAAf,EAAAA,YAAA,MAAA,CAAAC,MAAA,cAAA,MAAAD,EAAAA,YAAA,MAAA,CAAAC,MAAA,cAAA,CAKlB5F,EAAMyB,UAAU6B,IAAKC,GAAIoC,EAAAA,YAAA,OAAA,CAAAC,MAEhB3D,EAAYS,MAAMnB,KAAOgC,EAAKhC,GAAK,oBAAsB,aAAYoF,QACnEA,KAAMC,OA5CTC,EA4C4BtD,EAxCtDtB,EAAYS,MAAQmE,OACpBjF,EAAK,cAAeiF,GALMA,IAAAA,IA4CiC,CAEpCtD,EAAK/B,YAMd,OAINxB,EAAMC,QAAO0F,EAAAA,YAAAmB,EAAA,CAAAlB,MAAA,gBAAAmB,SAGC9D,GAAa,MAAA0C,EAAAA,YAAA,MAAA,CAAAC,MAGhB,CAAE,cAAc,EAAMoB,QAAW7E,EAAQO,OAAOiE,QAC9CxB,GAAc,SA4CnC,OArCI/C,EAASM,MAAMM,OAAS,GAAKhD,EAAMqB,QAAQ2B,OAAS,KACtDyC,EAAc,OAAI,IAChBE,EAAAA,YAAA,MAAA,CAAAC,MAAA,yBAAA,CAAAD,EAAAA,YAAA,MAAA,CAAAC,MAAA,oBAAA,CAMQxD,EAASM,MAAMY,IAAKC,GAAIoC,EAAAA,YAAAsB,YAAA,CAAAzF,KAEd+B,EAAK/B,KAAI,iBAAA,EAAA0F,OAAA,OAAAC,SAGLrC,GAAU,SAEtBa,EAAAA,YAAA,MAAA,CAAAC,MAAA,oBAAA,CAKF5F,EAAMqB,QAAQiC,IAAKC,GAAIoC,EAAAA,YAAA,OAAA,CAAAC,MAEZvD,EAAUK,MAAMnB,KAAOgC,EAAKhC,GAAK,kBAAoB,WAAUoF,QAC7DA,KACPtE,EAAUK,MAAQa,IACnB,CAEAA,EAAK/B,aAUfiE,GAmBX,EAEA2B,MAAAA,GAAS,IAAAC,EACP,OAAA1B,EAAAA,YAAA,MAAA,CAAAC,MAAA,wBAAA1D,IAAA,uBAAA,CAAAyD,EAAAA,YAAA2B,EAAA,CAAApF,IAAA,eAAAqF,QAAA,SAAAtH,QAQeuH,KAAKvH,QAAOmB,YACRoG,KAAKpG,YAAWiB,UAClBmF,KAAKnF,UAASoF,SACfD,KAAKtE,cAAa6D,SAClBS,KAAKvE,cAAayE,SAClBF,KAAKlC,cAAa,eACdkC,KAAKvG,cAhZF0G,EAgZaN,EAG5BG,KAAKhC,WAnZU,mBAAAmC,GAAA,oBAAAnH,OAAAoH,UAAAC,SAAAC,KAAAH,KAAAI,EAAAA,QAAAJ,GAmZAN,EAAA,CAAAjH,QAAAA,IAAA,CAAAiH,QAnZA,IAAAM,CAyZzB"}
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":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","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","activeScene","ref","getInitialScene","found","find","item","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","submitHandler","res","text","file","map","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./bubble-list/index.js"),r=require("./x-markdown/index.js"),i=require("./file-preview/index.js"),s=require("./editor-sender/index.js"),t=require("./file-card/index.js"),o=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),n=require("./core-table/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=s,exports.FileCard=t,exports.CoreText=o,exports.CoreTips=x,exports.CoreResult=d,exports.CoreTable=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./bubble-list/index.js"),r=require("./x-markdown/index.js"),i=require("./file-preview/index.js"),s=require("./editor-sender/index.js"),t=require("./file-card/index.js"),o=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),n=require("./core-table/index.js"),u=require("./core-chart/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=s,exports.FileCard=t,exports.CoreText=o,exports.CoreTips=x,exports.CoreResult=d,exports.CoreTable=n,exports.CoreChart=u;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),l=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js"),/* empty css */;/* empty css */const s=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js"),d=require("../core-table/index.js");;/* empty css */const p=require("../../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"),m=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),c=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),v=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),h=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),_=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),f=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),g=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),y=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),k=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),x=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(x,{emit:q}){const j=e.useTemplateRef("x-markdown-container"),E=e.ref(Date.now()),N=e.ref(-1/0),w=e.ref(""),A=new Set,S=e.ref(!1),C=e.ref(!1),T=e.ref([]),P=t.useTemplateRefsList(),L=e.ref(0);let R=0;const F=e.ref(null),V=e.ref(s.createStreamGenerator(e=>{w.value=w.value+e},x.speed)),$=e.computed(()=>{if(!x.autoHideThinking)return w.value;let e=w.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,l,s)=>{const n="</div>"===s;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${l}${s}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){N.value===-1/0&&(N.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(l){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const l=((N.value-E.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${l>"0"?l+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),D=e.computed(()=>x.isHistoryMessage);e.watch(()=>[x.text,x.typing],(e,r)=>{var t,l,s,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=V.value)||t.reset(),w.value=""),o){if(null==(l=V.value)||l.update(o),!i)return void(null==(s=V.value)||s.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!C.value&&e.test(o))return C.value=!0,void(null==(n=V.value)||n.setSpeed(500))}},{immediate:!0});const H=e.ref([]),U=r(()=>{(()=>{var e;const r=null==(e=j.value)?void 0:e.querySelector("div[hidden]");H.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),q("refConfigUpdate",H.value)})()},100),B=e.ref(null);e.watch(()=>w.value,U,{immediate:!0}),e.watch(B,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=H.value.find(e=>e.link===r);q("hoverActiveRefTrigger",t)}else q("hoverActiveRefTrigger","")});const M=e=>{const r=e.target;if("SPAN"===r.tagName){const e=r.classList.contains("x-markdown-split"),t=r.classList.contains("x-markdown-sub");if(e||t)return t?r:r.parentElement}},W=e=>{const r=M(e);B.value=r||null},I=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),s=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();s?(l.ElMessage("文件下载中..."),q("downloadFile",{title:n,id:s,ext:o,href:t})):window.open(t,"_blank")})(e);const r=M(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),l=Number(r.getAttribute("datanumber")),s=r.getAttribute("id"),n={...H.value.find(r=>r.link===e),highlight:t,page:l,id:s};q("clickActiveRefTrigger",n)}};e.onMounted(()=>{j.value.addEventListener("mouseover",W),j.value.addEventListener("click",I)}),e.onBeforeUnmount(()=>{j.value.removeEventListener("mouseover",W),j.value.addEventListener("click",I)});const J=()=>{if(!j.value)return;j.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{A.has(e)||(A.add(e),O(e),e.complete?G(e):(e.addEventListener("load",()=>G(e)),e.addEventListener("error",()=>z(e))))})},O=e=>{const r=e.parentElement.offsetWidth;if(e.naturalWidth>r&&(e.style.maxWidth="100%"),e.naturalWidth&&e.naturalHeight){const t=e.naturalHeight/e.naturalWidth;e.style.maxHeight=`${Math.min(500,r*t)}px`}},G=e=>{A.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",G),e.removeEventListener("error",z)},z=e=>{A.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",G),e.removeEventListener("error",z)},X=m.unified().use(c).use(v).use(h,{singleTilde:!1}).use(_).use(f).use(g,{allowDangerousHtml:!0}).use(y).use(k).use(b),K=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const l=(null==(t=e.properties)?void 0:t.data)||{};return void r.push(l)}Array.isArray(e.children)&&e.children.forEach(e=>{K(e,r)})}};e.watch(()=>$.value,async r=>{R=0;const t=await X.run(X.parse(r)),l=(e=>{const r=[],t=[],l=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(l))};return Array.isArray(e.children)&&e.children.forEach(l),t.forEach(e=>{var t,l,s,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(s=null==(l=null==i?void 0:i.properties)?void 0:l.className)?void 0:s.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);K(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);T.value=l,await e.nextTick(),F.value=t,e.nextTick(J),e.nextTick(()=>{var e;const r=null==(e=j.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!S.value&&(S.value=!0,new o.Accordion(r))})},{immediate:!0});const Q=(r,t,s)=>{var o,m,c,v,h,_,f,g,y,k,b,x,j,E,N,w,A,S,C,F,V;if(!r)return null;let $=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||($=(null==(m=null==(o=r.children)?void 0:o.map)?void 0:m.call(o,e=>Q(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(l.ElConfigProvider,{locale:p},$));case"element":if("sub"===r.tagName){const l=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],s=null==l?void 0:l.map(e=>Q(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},s)}if("span"===r.tagName)return e.h("span",{...r.properties},$);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(c=r.properties)?void 0:c.href)||"",l=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":l},$)}if("ElTimeline"===r.tagName)return e.h(l.ElTimeline,{...r.properties},$);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",$)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[$[L.value]]);if("ElRow"===r.tagName)return e.h(l.ElRow,{...r.properties},$);if("ElCol"===r.tagName)return e.h(l.ElCol,{...r.properties},$);if("ElCard"===r.tagName)return e.h(l.ElCard,{...r.properties},$);if("ElForm"===r.tagName){const s=null==(v=r.children)?void 0:v.map(e=>Q(e,R));return R++,e.h(l.ElForm,{ref:P.value.set,model:T.value[t],...r.properties,disabled:(null==(h=r.properties)?void 0:h.disabled)||D.value},s)}if("ElFormItem"===r.tagName)return e.h(l.ElFormItem,{...r.properties},$);if("ElButton"===r.tagName){let n=null==(_=r.properties)?void 0:_.payload;return"table"===r.parentScope&&(n=s),e.h(l.ElButton,{...r.properties,disabled:(null==(f=r.properties)?void 0:f.disabled)||D.value,onClick:()=>{var e;(async(e,r,t,l)=>{var s;if("inner_next"===r)return void(L.value+=1);if("inner_prev"===r)return void(L.value-=1);let n={action:r,payload:{}};t&&"form"!==l?n={action:r,payload:t}:(await(null==(s=P.value[e])?void 0:s.validate()),n={action:r,payload:{...T.value[e],...t}}),q("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},$)}if("ElSelect"===r.tagName)return e.h(l.ElSelect,{...r.properties,disabled:(null==(g=r.properties)?void 0:g.disabled)||D.value,modelValue:T.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElDatePicker"===r.tagName)return e.h(l.ElDatePicker,{...r.properties,disabled:(null==(k=r.properties)?void 0:k.disabled)||D.value,modelValue:T.value[t][null==(b=r.properties)?void 0:b.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElInput"===r.tagName)return e.h(l.ElInput,{...r.properties,disabled:(null==(x=r.properties)?void 0:x.disabled)||D.value,modelValue:T.value[t][null==(j=r.properties)?void 0:j.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElRadioGroup"===r.tagName)return e.h(l.ElRadioGroup,{...r.properties,disabled:(null==(E=r.properties)?void 0:E.disabled)||D.value,modelValue:T.value[t][null==(N=r.properties)?void 0:N.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElRadio"===r.tagName)return e.h(l.ElRadio,{...r.properties,disabled:(null==(w=r.properties)?void 0:w.disabled)||D.value},$);if("ElTable"===r.tagName)return e.h(d,{...r.properties},$);if("ElTableColumn"===r.tagName)return e.h(l.ElTableColumn,{...r.properties},{default:e=>{var t,l;const s=null==(t=r.children)?void 0:t.map(r=>Q(r,R,e.row)),n=null==(l=r.children)?void 0:l.findIndex(t=>{var l;return t.value===e.row[null==(l=r.properties)?void 0:l.prop]});return-1===n?s:null==s?void 0:s[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("pre"===r.tagName){const t=null==(A=r.children)?void 0:A.find(e=>"code"===e.tagName);if(t&&(null==(C=null==(S=t.properties)?void 0:S.className)?void 0:C.includes("language-CorePilot"))){const r=(null==(V=null==(F=t.children)?void 0:F[0])?void 0:V.value)||"",l=JSON.parse(r),s=n.parseCorePilot(l),o=Q(s,R);return e.h("div",{class:"hitl-wrapper"},[o])}}return e.h(r.tagName,r.properties,$);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{R=0}),{hastToVNode:Q,ast:F,container:j,renderComplete:U,getContentText:()=>{var e;return null==(e=j.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=x;
1
+ "use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),l=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js"),/* empty css */;/* empty css */const s=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js"),d=require("../core-table/index.js"),p=require("../core-chart/index.js");;/* empty css */const m=require("../../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"),c=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),v=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),h=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),_=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),f=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),g=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),y=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),k=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),x=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),q=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(q,{emit:j}){const E=e.useTemplateRef("x-markdown-container"),N=e.ref(Date.now()),w=e.ref(-1/0),A=e.ref(""),C=new Set,S=e.ref(!1),T=e.ref(!1),P=e.ref([]),L=t.useTemplateRefsList(),R=e.ref(0);let F=0;const V=e.ref(null),$=e.ref(s.createStreamGenerator(e=>{A.value=A.value+e},q.speed)),D=e.computed(()=>{if(!q.autoHideThinking)return A.value;let e=A.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,l,s)=>{const n="</div>"===s;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${l}${s}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){w.value===-1/0&&(w.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(l){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const l=((w.value-N.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${l>"0"?l+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),H=e.computed(()=>q.isHistoryMessage);e.watch(()=>[q.text,q.typing],(e,r)=>{var t,l,s,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=$.value)||t.reset(),A.value=""),o){if(null==(l=$.value)||l.update(o),!i)return void(null==(s=$.value)||s.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!T.value&&e.test(o))return T.value=!0,void(null==(n=$.value)||n.setSpeed(500))}},{immediate:!0});const U=e.ref([]),B=r(()=>{(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("div[hidden]");U.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),j("refConfigUpdate",U.value)})()},100),M=e.ref(null);e.watch(()=>A.value,B,{immediate:!0}),e.watch(M,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=U.value.find(e=>e.link===r);j("hoverActiveRefTrigger",t)}else j("hoverActiveRefTrigger","")});const W=e=>{const r=e.target;if("SPAN"===r.tagName){const e=r.classList.contains("x-markdown-split"),t=r.classList.contains("x-markdown-sub");if(e||t)return t?r:r.parentElement}},I=e=>{const r=W(e);M.value=r||null},J=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),s=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();s?(l.ElMessage("文件下载中..."),j("downloadFile",{title:n,id:s,ext:o,href:t})):window.open(t,"_blank")})(e);const r=W(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),l=Number(r.getAttribute("datanumber")),s=r.getAttribute("id"),n={...U.value.find(r=>r.link===e),highlight:t,page:l,id:s};j("clickActiveRefTrigger",n)}};e.onMounted(()=>{E.value.addEventListener("mouseover",I),E.value.addEventListener("click",J)}),e.onBeforeUnmount(()=>{E.value.removeEventListener("mouseover",I),E.value.addEventListener("click",J)});const O=()=>{if(!E.value)return;E.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{C.has(e)||(C.add(e),G(e),e.complete?z(e):(e.addEventListener("load",()=>z(e)),e.addEventListener("error",()=>X(e))))})},G=e=>{const r=e.parentElement.offsetWidth;if(e.naturalWidth>r&&(e.style.maxWidth="100%"),e.naturalWidth&&e.naturalHeight){const t=e.naturalHeight/e.naturalWidth;e.style.maxHeight=`${Math.min(500,r*t)}px`}},z=e=>{C.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",z),e.removeEventListener("error",X)},X=e=>{C.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",z),e.removeEventListener("error",X)},K=c.unified().use(v).use(h).use(_,{singleTilde:!1}).use(f).use(g).use(y,{allowDangerousHtml:!0}).use(k).use(b).use(x),Q=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const l=(null==(t=e.properties)?void 0:t.data)||{};return void r.push(l)}Array.isArray(e.children)&&e.children.forEach(e=>{Q(e,r)})}};e.watch(()=>D.value,async r=>{F=0;const t=await K.run(K.parse(r)),l=(e=>{const r=[],t=[],l=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(l))};return Array.isArray(e.children)&&e.children.forEach(l),t.forEach(e=>{var t,l,s,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(s=null==(l=null==i?void 0:i.properties)?void 0:l.className)?void 0:s.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);Q(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);P.value=l,await e.nextTick(),V.value=t,e.nextTick(O),e.nextTick(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!S.value&&(S.value=!0,new o.Accordion(r))})},{immediate:!0});const Y=(r,t,s)=>{var o,c,v,h,_,f,g,y,k,b,x,q,E,N,w,A,C,S,T,V,$;if(!r)return null;let D=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(D=(null==(c=null==(o=r.children)?void 0:o.map)?void 0:c.call(o,e=>Y(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(l.ElConfigProvider,{locale:m},D));case"element":if("sub"===r.tagName){const l=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],s=null==l?void 0:l.map(e=>Y(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},s)}if("span"===r.tagName)return e.h("span",{...r.properties},D);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(v=r.properties)?void 0:v.href)||"",l=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":l},D)}if("ElTimeline"===r.tagName)return e.h(l.ElTimeline,{...r.properties},D);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",D)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[D[R.value]]);if("ElRow"===r.tagName)return e.h(l.ElRow,{...r.properties},D);if("ElCol"===r.tagName)return e.h(l.ElCol,{...r.properties},D);if("ElCard"===r.tagName)return e.h(l.ElCard,{...r.properties},D);if("ElForm"===r.tagName){const s=null==(h=r.children)?void 0:h.map(e=>Y(e,F));return F++,e.h(l.ElForm,{ref:L.value.set,model:P.value[t],...r.properties,disabled:(null==(_=r.properties)?void 0:_.disabled)||H.value},s)}if("ElFormItem"===r.tagName)return e.h(l.ElFormItem,{...r.properties},D);if("ElButton"===r.tagName){let n=null==(f=r.properties)?void 0:f.payload;return"table"===r.parentScope&&(n=s),e.h(l.ElButton,{...r.properties,disabled:(null==(g=r.properties)?void 0:g.disabled)||H.value,onClick:()=>{var e;(async(e,r,t,l)=>{var s;if("inner_next"===r)return void(R.value+=1);if("inner_prev"===r)return void(R.value-=1);let n={action:r,payload:{}};t&&"form"!==l?n={action:r,payload:t}:(await(null==(s=L.value[e])?void 0:s.validate()),n={action:r,payload:{...P.value[e],...t}}),j("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},D)}if("ElSelect"===r.tagName)return e.h(l.ElSelect,{...r.properties,disabled:(null==(y=r.properties)?void 0:y.disabled)||H.value,modelValue:P.value[t][null==(k=r.properties)?void 0:k.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElDatePicker"===r.tagName)return e.h(l.ElDatePicker,{...r.properties,disabled:(null==(b=r.properties)?void 0:b.disabled)||H.value,modelValue:P.value[t][null==(x=r.properties)?void 0:x.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElInput"===r.tagName)return e.h(l.ElInput,{...r.properties,disabled:(null==(q=r.properties)?void 0:q.disabled)||H.value,modelValue:P.value[t][null==(E=r.properties)?void 0:E.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElRadioGroup"===r.tagName)return e.h(l.ElRadioGroup,{...r.properties,disabled:(null==(N=r.properties)?void 0:N.disabled)||H.value,modelValue:P.value[t][null==(w=r.properties)?void 0:w.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElRadio"===r.tagName)return e.h(l.ElRadio,{...r.properties,disabled:(null==(A=r.properties)?void 0:A.disabled)||H.value},D);if("ElTable"===r.tagName)return e.h(d,{...r.properties},D);if("ElTableColumn"===r.tagName)return e.h(l.ElTableColumn,{...r.properties},{default:e=>{var t,l;const s=null==(t=r.children)?void 0:t.map(r=>Y(r,F,e.row)),n=null==(l=r.children)?void 0:l.findIndex(t=>{var l;return t.value===e.row[null==(l=r.properties)?void 0:l.prop]});return-1===n?s:null==s?void 0:s[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("CoreChart"===r.tagName)return e.h(p,{...r.properties});if("pre"===r.tagName){const t=null==(C=r.children)?void 0:C.find(e=>"code"===e.tagName);if(t&&(null==(T=null==(S=t.properties)?void 0:S.className)?void 0:T.includes("language-CorePilot"))){const r=(null==($=null==(V=t.children)?void 0:V[0])?void 0:$.value)||"";try{const t=JSON.parse(r),l=n.parseCorePilot(t),s=Y(l,F);return e.h("div",{class:"hitl-wrapper"},[s])}catch(U){return null}}}return e.h(r.tagName,r.properties,D);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{F=0}),{hastToVNode:Y,ast:V,container:E,renderComplete:B,getContentText:()=>{var e;return null==(e=E.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=q;
2
2
  //# sourceMappingURL=index.js.map
@@ -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 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // 如果当前是历史消息,则禁用点击事件\n const disabled = computed(() => {\n return props.isHistoryMessage;\n })\n\n watch(() => [props.text, props.typing], (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 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 \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n 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 === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, 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: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n 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 // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamGener","createStreamGenerator","stream","value","formatText","computed","content","mdText","isFirstSummary","replace","match","summaryTag","divContent","divEnd","isDivComplete","updateSummaryClasses","includes","res","exec","refListStr","JSON","parse","error","checkAndReturnRefList","duration","toFixed","length","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","renderComplete","debounce","getRefConfig","refContainer","querySelector","textContent","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleClick","async","stopPropagation","preventDefault","href","id","title","ext","split","pop","ElMessage","window","open","handleAClick","highlight","page","data","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","hastToVNode","index","row","map","h","class","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","payload","parentScope","ElButton","onClick","action","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","viewTree","parseCorePilot","trim","onUpdated","getContentText","innerText","render","_createVNode","this"],"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 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // 如果当前是历史消息,则禁用点击事件\n const disabled = computed(() => {\n return props.isHistoryMessage;\n })\n\n watch(() => [props.text, props.typing], (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 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 \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n 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 === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, 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: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n 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 // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n 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 return null;\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 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":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamGener","createStreamGenerator","stream","value","formatText","computed","content","mdText","isFirstSummary","replace","match","summaryTag","divContent","divEnd","isDivComplete","updateSummaryClasses","includes","res","exec","refListStr","JSON","parse","error","checkAndReturnRefList","duration","toFixed","length","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","renderComplete","debounce","getRefConfig","refContainer","querySelector","textContent","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleClick","async","stopPropagation","preventDefault","href","id","title","ext","split","pop","ElMessage","window","open","handleAClick","highlight","page","data","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","hastToVNode","index","row","map","h","class","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","payload","parentScope","ElButton","onClick","action","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","viewTree","parseCorePilot","trim","onUpdated","getContentText","innerText","render","_createVNode","this"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,S)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return l(e);case"table":return c(e);case"input":return a(e,S);case"select":return o(e,S);case"dateTimePicker":return n(e,S);case"button":return i(e,S);case"tips":return m(e,S);case"text":return u(e,S);case"formfield":return d(e,S);case"column":return s(e,S);case"row":return g(e,S);case"col":return h(e,S);case"result":return r(e,S);case"tag":return E(e,S);case"radioGroup":return y(e,S);case"radio":return N(e,S);default:const v=e;console.error(v)}},r=(e,r)=>({tagName:"CoreResult",type:"element",properties:e.properties,parentScope:r}),t=r=>({tagName:"view",type:"element",properties:{title:r.title},children:r.children.map(r=>e(r))}),p=r=>{const t=[];r.fields.forEach(r=>{t.push(e(r,"form"))});const p={tagName:"div",type:"element",properties:{class:"hitl-btn-list"},children:r.actions.map(r=>e(r,"form"))};return t.push(p),{tagName:"ElForm",type:"element",properties:{labelPosition:"right",...r.properties},children:t}},a=(e,r)=>({tagName:"ElInput",type:"element",properties:e.properties,parentScope:r}),o=(e,r)=>({tagName:"ElSelect",type:"element",properties:e.properties,parentScope:r}),n=(e,r)=>({tagName:"ElDatePicker",type:"element",properties:e.properties,parentScope:r}),i=(r,t)=>{var p,a;return{tagName:"ElButton",type:"element",properties:{...r.properties,action:r.action,payload:r.payload},parentScope:t,children:null==(a=null==(p=r.children)?void 0:p.map)?void 0:a.call(p,r=>e(r,t))}},l=r=>({tagName:"ElCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))}),s=(r,t)=>{var p;return{tagName:"ElTableColumn",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.children)?void 0:p.map(r=>e(r,t))}},c=r=>({tagName:"ElTable",type:"element",properties:r.properties,children:r.children.map(r=>e(r,"table"))}),m=(e,r)=>({tagName:"CoreTips",type:"element",properties:e.properties,parentScope:r}),u=(e,r)=>({tagName:"CoreText",type:"element",properties:e.properties,parentScope:r}),d=(r,t)=>{const p=r.properties.prop,a=((e,r)=>e.map(e=>({...e,properties:{...e.properties,formProp:r}})))(r.children,p);return{tagName:"ElFormItem",type:"element",properties:{...r.properties,rules:(o=r.properties.rules,null==o?void 0:o.map(e=>"pattern"in e&&e.pattern?{pattern:new RegExp(e.pattern),message:e.message,trigger:e.trigger}:e))},parentScope:t,children:[e(a[0],t)]};var o},g=(r,t)=>({tagName:"ElRow",type:"element",properties:r.properties,children:r.children.map(r=>e(r,t))}),h=(r,t)=>({tagName:"ElCol",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))}),y=(r,t)=>{var p;return{tagName:"ElRadioGroup",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.properties.options)?void 0:p.map(r=>e({type:"radio",properties:r},t))}},N=(e,r)=>({tagName:"ElRadio",type:"element",properties:e.properties,parentScope:r}),E=(r,t)=>{const p={tagName:"ElTag",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))};return"table"===t&&(p.value=r.value),p};exports.parseCorePilot=r=>e(r);
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,v)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return l(e);case"table":return c(e);case"input":return a(e,v);case"select":return o(e,v);case"dateTimePicker":return n(e,v);case"button":return i(e,v);case"tips":return m(e,v);case"text":return u(e,v);case"formfield":return d(e,v);case"column":return s(e,v);case"row":return g(e,v);case"col":return h(e,v);case"result":return r(e,v);case"tag":return S(e,v);case"radioGroup":return y(e,v);case"radio":return N(e,v);case"echart":return E(e,v);default:const b=e;console.error(b)}},r=(e,r)=>({tagName:"CoreResult",type:"element",properties:e.properties,parentScope:r}),t=r=>({tagName:"view",type:"element",properties:{title:r.title},children:r.children.map(r=>e(r))}),p=r=>{const t=[];r.fields.forEach(r=>{t.push(e(r,"form"))});const p={tagName:"div",type:"element",properties:{class:"hitl-btn-list"},children:r.actions.map(r=>e(r,"form"))};return t.push(p),{tagName:"ElForm",type:"element",properties:{labelPosition:"right",...r.properties},children:t}},a=(e,r)=>({tagName:"ElInput",type:"element",properties:e.properties,parentScope:r}),o=(e,r)=>({tagName:"ElSelect",type:"element",properties:e.properties,parentScope:r}),n=(e,r)=>({tagName:"ElDatePicker",type:"element",properties:e.properties,parentScope:r}),i=(r,t)=>{var p,a;return{tagName:"ElButton",type:"element",properties:{...r.properties,action:r.action,payload:r.payload},parentScope:t,children:null==(a=null==(p=r.children)?void 0:p.map)?void 0:a.call(p,r=>e(r,t))}},l=r=>({tagName:"ElCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))}),s=(r,t)=>{var p;return{tagName:"ElTableColumn",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.children)?void 0:p.map(r=>e(r,t))}},c=r=>({tagName:"ElTable",type:"element",properties:r.properties,children:r.children.map(r=>e(r,"table"))}),m=(e,r)=>({tagName:"CoreTips",type:"element",properties:e.properties,parentScope:r}),u=(e,r)=>({tagName:"CoreText",type:"element",properties:e.properties,parentScope:r}),d=(r,t)=>{const p=r.properties.prop,a=((e,r)=>e.map(e=>({...e,properties:{...e.properties,formProp:r}})))(r.children,p);return{tagName:"ElFormItem",type:"element",properties:{...r.properties,rules:(o=r.properties.rules,null==o?void 0:o.map(e=>"pattern"in e&&e.pattern?{pattern:new RegExp(e.pattern),message:e.message,trigger:e.trigger}:e))},parentScope:t,children:[e(a[0],t)]};var o},g=(r,t)=>({tagName:"ElRow",type:"element",properties:r.properties,children:r.children.map(r=>e(r,t))}),h=(r,t)=>({tagName:"ElCol",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))}),y=(r,t)=>{var p;return{tagName:"ElRadioGroup",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.properties.options)?void 0:p.map(r=>e({type:"radio",properties:r},t))}},N=(e,r)=>({tagName:"ElRadio",type:"element",properties:e.properties,parentScope:r}),S=(r,t)=>{const p={tagName:"ElTag",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))};return"table"===t&&(p.value=r.value),p},E=(e,r)=>({tagName:"CoreChart",type:"element",properties:e.properties,parentScope:r});exports.parseCorePilot=r=>e(r);
2
2
  //# sourceMappingURL=parseCorePilotSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema\n} from '@/types/index';\n\ntype ElementSchema = ViewSchema<any> | FormSchema | FormFieldSchema | CardSchema | ButtonSchema | TableSchema | TipsSchema | TextSchema | InputSchema | SelectSchema | DateTimePickerSchema | TableColumnSchema | RowSchema | ColSchema | ResultSchema | TagSchema | RadioGroupSchema | RadioSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n return {\n tagName: 'ElCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","action","payload","_b","_a","call","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}
1
+ {"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n return {\n tagName: 'ElCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","parseECharts","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","action","payload","_b","_a","call","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}