@core-pilot/client-vue 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client-vue.css +1 -1
- package/dist/cjs/components/core-card/index.js +1 -1
- package/dist/cjs/components/core-card/index.js.map +1 -1
- package/dist/cjs/components/core-upload/assets/delete.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/delete.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/assets/temp.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/temp.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/assets/upload.svg.js +2 -0
- package/dist/cjs/components/core-upload/assets/upload.svg.js.map +1 -0
- package/dist/cjs/components/core-upload/index.js +2 -0
- package/dist/cjs/components/core-upload/index.js.map +1 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js.map +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/core-card/index.js +9 -4
- package/dist/es/components/core-card/index.js.map +1 -1
- package/dist/es/components/core-upload/assets/delete.svg.js +5 -0
- package/dist/es/components/core-upload/assets/delete.svg.js.map +1 -0
- package/dist/es/components/core-upload/assets/temp.svg.js +5 -0
- package/dist/es/components/core-upload/assets/temp.svg.js.map +1 -0
- package/dist/es/components/core-upload/assets/upload.svg.js +5 -0
- package/dist/es/components/core-upload/assets/upload.svg.js.map +1 -0
- package/dist/es/components/core-upload/index.js +258 -0
- package/dist/es/components/core-upload/index.js.map +1 -0
- package/dist/es/components/index.js +2 -0
- package/dist/es/components/index.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +22 -11
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +10 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/es/index.js +2 -0
- package/dist/es/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),s=require("element-plus");/* empty css *//* empty css */;/* empty css */const l=e.defineComponent({name:"CoreCard",props:{header:{type:String,default:""},shadow:{type:String,default:"always"},collapsible:{type:Boolean,default:!0},defaultCollapsed:{type:Boolean,default:!1}},setup(s,{slots:l}){const a=e.ref(s.defaultCollapsed),o=e.computed(()=>a.value?"core-card__collapse-icon--collapsed":"core-card__collapse-icon--expanded");return{isCollapsed:a,toggleCollapse:()=>{s.collapsible&&(a.value=!a.value)},collapseIconClass:o}},render(){const l=this.header||this.$slots.header;return e.createVNode(s.ElCard,{class:"core-card",shadow:this.shadow},{header:l?()=>e.createVNode("div",{class:"core-card__header",onClick:this.toggleCollapse,style:this.collapsible?{cursor:"pointer"}:{}},[e.createVNode("span",{class:"core-card__header-text"
|
|
1
|
+
"use strict";const e=require("vue"),s=require("element-plus");/* empty css *//* empty css */;/* empty css */const l=e.defineComponent({name:"CoreCard",props:{header:{type:String,default:""},shadow:{type:String,default:"always"},collapsible:{type:Boolean,default:!0},defaultCollapsed:{type:Boolean,default:!1}},setup(s,{slots:l}){const a=e.ref(s.defaultCollapsed),o=e.computed(()=>a.value?"core-card__collapse-icon--collapsed":"core-card__collapse-icon--expanded");return{isCollapsed:a,toggleCollapse:()=>{s.collapsible&&(a.value=!a.value)},collapseIconClass:o}},render(){const l=this.header||this.$slots.header;return e.createVNode(s.ElCard,{class:"core-card",shadow:this.shadow},{header:l?()=>e.createVNode("div",{class:"core-card__header"},[e.createVNode("div",{class:"core-card__header-left",onClick:this.toggleCollapse,style:this.collapsible?{cursor:"pointer"}:{}},[e.createVNode("span",{class:"core-card__header-text",title:this.header},[this.header]),this.collapsible&&e.createVNode("i",{class:`core-card__collapse-icon ${this.collapseIconClass}`},null)]),this.$slots.header&&e.createVNode("div",{class:"core-card__header-right"},[this.$slots.header()])]):void 0,default:()=>{var s,l;return e.createVNode("div",{class:{"core-card__body":!0,"core-card__body--collapsed":this.isCollapsed}},[null==(l=(s=this.$slots).default)?void 0:l.call(s)])}})}});module.exports=l;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/core-card/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed } from 'vue';\nimport { ElCard } from 'element-plus';\nimport './style.less';\n\nexport default defineComponent({\n name: 'CoreCard',\n props: {\n header: {\n type: String,\n default: '',\n },\n shadow: {\n type: String as PropType<'always' | 'never' | 'hover'>,\n default: 'always',\n },\n collapsible: {\n type: Boolean,\n default: true,\n },\n defaultCollapsed: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const isCollapsed = ref(props.defaultCollapsed);\n\n const toggleCollapse = () => {\n if (props.collapsible) {\n isCollapsed.value = !isCollapsed.value;\n }\n };\n\n const collapseIconClass = computed(() => {\n return isCollapsed.value ? 'core-card__collapse-icon--collapsed' : 'core-card__collapse-icon--expanded';\n });\n\n return {\n isCollapsed,\n toggleCollapse,\n collapseIconClass,\n };\n },\n render() {\n const hasHeader = this.header || this.$slots.header;\n \n return (\n <ElCard\n class=\"core-card\"\n shadow={this.shadow}\n >\n {{\n header: hasHeader ? () => (\n <div \n class=\"core-card__header\"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/core-card/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed } from 'vue';\nimport { ElCard } from 'element-plus';\nimport './style.less';\n\nexport default defineComponent({\n name: 'CoreCard',\n props: {\n header: {\n type: String,\n default: '',\n },\n shadow: {\n type: String as PropType<'always' | 'never' | 'hover'>,\n default: 'always',\n },\n collapsible: {\n type: Boolean,\n default: true,\n },\n defaultCollapsed: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const isCollapsed = ref(props.defaultCollapsed);\n\n const toggleCollapse = () => {\n if (props.collapsible) {\n isCollapsed.value = !isCollapsed.value;\n }\n };\n\n const collapseIconClass = computed(() => {\n return isCollapsed.value ? 'core-card__collapse-icon--collapsed' : 'core-card__collapse-icon--expanded';\n });\n\n return {\n isCollapsed,\n toggleCollapse,\n collapseIconClass,\n };\n },\n render() {\n const hasHeader = this.header || this.$slots.header;\n \n return (\n <ElCard\n class=\"core-card\"\n shadow={this.shadow}\n >\n {{\n header: hasHeader ? () => (\n <div class=\"core-card__header\">\n <div \n class=\"core-card__header-left\"\n onClick={this.toggleCollapse}\n style={this.collapsible ? { cursor: 'pointer' } : {}}\n >\n <span \n class=\"core-card__header-text\"\n title={this.header}\n >\n {this.header}\n </span>\n {this.collapsible && (\n <i class={`core-card__collapse-icon ${this.collapseIconClass}`}></i>\n )}\n </div>\n {this.$slots.header && (\n <div class=\"core-card__header-right\">\n {this.$slots.header()}\n </div>\n )}\n </div>\n ) : undefined,\n default: () => (\n <div\n class={{\n 'core-card__body': true,\n 'core-card__body--collapsed': this.isCollapsed,\n }}\n >\n {this.$slots.default?.()}\n </div>\n ),\n }}\n </ElCard>\n );\n },\n});\n\n"],"names":["CoreCard","name","props","header","type","String","default","shadow","collapsible","Boolean","defaultCollapsed","setup","slots","isCollapsed","ref","collapseIconClass","computed","value","toggleCollapse","render","hasHeader","this","$slots","_createVNode","ElCard","class","onClick","style","cursor","title","undefined","_b","_a"],"mappings":"iXAIA,MAAAA,oBAA+B,CAC7BC,KAAM,WACNC,MAAO,CACLC,OAAQ,CACNC,KAAMC,OACNC,QAAS,IAEXC,OAAQ,CACNH,KAAMC,OACNC,QAAS,UAEXE,YAAa,CACXJ,KAAMK,QACNH,SAAS,GAEXI,iBAAkB,CAChBN,KAAMK,QACNH,SAAS,IAGbK,KAAAA,CAAMT,GAAOU,MAAEA,IACb,MAAMC,EAAcC,EAAAA,IAAIZ,EAAMQ,kBAQxBK,EAAoBC,EAAAA,SAAS,IAC1BH,EAAYI,MAAQ,sCAAwC,sCAGrE,MAAO,CACLJ,cACAK,eAZqBA,KACjBhB,EAAMM,cACRK,EAAYI,OAASJ,EAAYI,QAWnCF,oBAEJ,EACAI,MAAAA,GACE,MAAMC,EAAYC,KAAKlB,QAAUkB,KAAKC,OAAOnB,OAE7C,OAAAoB,EAAAA,YAAAC,EAAAA,OAAA,CAAAC,MAAA,YAAAlB,OAGYc,KAAKd,QAAM,CAGjBJ,OAAQiB,EAAY,IAAAG,EAAAA,YAAA,MAAA,CAAAE,MAAA,qBAAA,CAAAF,EAAAA,YAAA,MAAA,CAAAE,MAAA,yBAAAC,QAILL,KAAKH,eAAcS,MACrBN,KAAKb,YAAc,CAAEoB,OAAQ,WAAc,CAAA,GAAE,CAAAL,EAAAA,YAAA,OAAA,CAAAE,MAAA,yBAAAI,MAI3CR,KAAKlB,QAAM,CAEjBkB,KAAKlB,SAEPkB,KAAKb,aAAWe,EAAAA,YAAA,IAAA,CAAAE,MACL,4BAA4BJ,KAAKN,qBAAmB,QAGjEM,KAAKC,OAAOnB,QAAMoB,EAAAA,YAAA,MAAA,CAAAE,MAAA,2BAAA,CAEdJ,KAAKC,OAAOnB,kBAIjB2B,EACJxB,QAASA,aAAAiB,OAAAA,EAAAA,YAAA,MAAA,CAAAE,MAEE,CACL,mBAAmB,EACnB,6BAA8BJ,KAAKR,cACpC,CAEA,OAAAkB,GAAAC,EAAAX,KAAKC,QAAOhB,8BAMzB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";module.exports="data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M2.66602%203.66666H13.3327'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M6%201.66666H10'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4%205.66666H12V13.3333C12%2013.8856%2011.5523%2014.3333%2011%2014.3333H5C4.4477%2014.3333%204%2013.8856%204%2013.3333V5.66666Z'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
//# sourceMappingURL=delete.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.svg.js","sources":["../../../../../src/components/core-upload/assets/delete.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M2.66602%203.66666H13.3327'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M6%201.66666H10'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4%205.66666H12V13.3333C12%2013.8856%2011.5523%2014.3333%2011%2014.3333H5C4.4477%2014.3333%204%2013.8856%204%2013.3333V5.66666Z'%20stroke='%23ADB0BB'%20stroke-width='1.33333'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"names":[],"mappings":"4BAAe"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";module.exports="data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M13%202H3C2.44772%202%202%202.44772%202%203V13C2%2013.5523%202.44772%2014%203%2014H13C13.5523%2014%2014%2013.5523%2014%2013V3C14%202.44772%2013.5523%202%2013%202Z'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M2%204.66666H13.3333'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%207.58334H11'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2010.25H11'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4.66602%202V14'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
//# sourceMappingURL=temp.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temp.svg.js","sources":["../../../../../src/components/core-upload/assets/temp.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M13%202H3C2.44772%202%202%202.44772%202%203V13C2%2013.5523%202.44772%2014%203%2014H13C13.5523%2014%2014%2013.5523%2014%2013V3C14%202.44772%2013.5523%202%2013%202Z'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M2%204.66666H13.3333'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%207.58334H11'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2010.25H11'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M4.66602%202V14'%20stroke='%2353576A'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"names":[],"mappings":"4BAAe"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";module.exports="data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3.89322%206.75699C2.42557%207.10602%201.33398%208.42552%201.33398%209.99999C1.33398%2011.8409%202.82637%2013.3333%204.66732%2013.3333C4.98312%2013.3333%205.28865%2013.2894%205.57815%2013.2074'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M12.0189%206.75699C13.4866%207.10602%2014.5782%208.42552%2014.5782%209.99999C14.5782%2011.8409%2013.0858%2013.3333%2011.2448%2013.3333C10.929%2013.3333%2010.6235%2013.2894%2010.334%2013.2074'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M12%206.66666C12%204.45752%2010.2091%202.66666%208%202.66666C5.79087%202.66666%204%204.45752%204%206.66666'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M5.6875%209.29374L7.999%206.97461L10.3763%209.33341'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2012.6667V8.15396'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
//# sourceMappingURL=upload.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.svg.js","sources":["../../../../../src/components/core-upload/assets/upload.svg"],"sourcesContent":["export default \"data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M3.89322%206.75699C2.42557%207.10602%201.33398%208.42552%201.33398%209.99999C1.33398%2011.8409%202.82637%2013.3333%204.66732%2013.3333C4.98312%2013.3333%205.28865%2013.2894%205.57815%2013.2074'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M12.0189%206.75699C13.4866%207.10602%2014.5782%208.42552%2014.5782%209.99999C14.5782%2011.8409%2013.0858%2013.3333%2011.2448%2013.3333C10.929%2013.3333%2010.6235%2013.2894%2010.334%2013.2074'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M12%206.66666C12%204.45752%2010.2091%202.66666%208%202.66666C5.79087%202.66666%204%204.45752%204%206.66666'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M5.6875%209.29374L7.999%206.97461L10.3763%209.33341'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M8%2012.6667V8.15396'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e\""],"names":[],"mappings":"4BAAe"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),t=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */;/* empty css */const s=require("./assets/upload.svg.js"),l=require("./assets/temp.svg.js"),a=require("./assets/delete.svg.js");;/* empty css */const i=e.defineComponent({name:"CoreUpload",props:{action:{type:String,default:""},accept:{type:String,default:".xlsx,.xls,.csv"},maxSize:{type:Number,default:10},multiple:{type:Boolean,default:!0},fileList:{type:Array,default:()=>[]},templateUrl:{type:String,default:""},templateFileName:{type:String,default:"模板文件"},tips:{type:String,default:""},disabled:{type:Boolean,default:!1},httpRequest:{type:Function,default:void 0}},emits:["update:fileList","change","remove","download-template","error"],setup(s,{emit:l}){const a=e.ref(),i=e.ref(s.fileList||[]);e.watch(()=>s.fileList,e=>{e&&JSON.stringify(e)!==JSON.stringify(i.value)&&(i.value=[...e||[]])},{deep:!0,immediate:!0});const o=e.computed(()=>{if(s.tips)return s.tips;return`支持 ${s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ")} 格式。文件大小不超过 ${s.maxSize}MB。`});return{uploadRef:a,fileList:i,tipsText:o,formatFileSize:e=>e<1024?e+" B":e<1048576?(e/1024).toFixed(2)+" KB":(e/1048576).toFixed(2)+" MB",beforeUpload:e=>!!(e=>{const l=s.accept.split(",").map(e=>e.trim().toLowerCase()),a=(e=>{const t=e.lastIndexOf(".");return-1!==t?e.substring(t).toLowerCase():""})(e.name);if(!l.some(t=>t.startsWith(".")?t===a:e.type&&e.type.includes(t.replace(".","")))){const e=s.accept.split(",").map(e=>e.replace(".","").toUpperCase()).join(" 或 ");return t.ElMessage.error(`只能上传 ${e} 格式的文件!`),!1}return!0})(e)&&!!(e=>{const l=1024*s.maxSize*1024;return!(e.size>l&&(t.ElMessage.error(`文件大小不能超过 ${s.maxSize}MB!`),1))})(e),handleChange:(e,t)=>{i.value=t.map(e=>({name:e.name,url:e.url,uid:e.uid,status:e.status,response:e.response})),l("update:fileList",i.value),l("change",e,t)},handleRemove:(e,t)=>{i.value=t.map(e=>({name:e.name,url:e.url,uid:e.uid,status:e.status,response:e.response})),l("update:fileList",i.value),l("remove",e,t)},handleError:(e,s)=>{t.ElMessage.error(`文件 ${s.name} 上传失败:${e.message}`),l("error",e,s)},handleDownloadTemplate:()=>{if(!s.templateUrl)return void t.ElMessage.warning("模板文件地址未配置");l("download-template",s.templateUrl);const e=document.createElement("a");e.href=s.templateUrl,e.download=s.templateFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)},handleDelete:e=>{const t=i.value.findIndex(t=>t.uid===e.uid);-1!==t&&(i.value.splice(t,1),l("update:fileList",i.value),l("remove",e,i.value))}}},render(){return e.createVNode("div",{class:"core-upload"},[e.createVNode("div",{class:"core-upload__actions"},[e.createVNode(t.ElUpload,{ref:"uploadRef",class:"core-upload__upload",action:this.action,accept:this.accept,multiple:this.multiple,fileList:this.fileList,beforeUpload:this.beforeUpload,onChange:this.handleChange,onRemove:this.handleRemove,onError:this.handleError,httpRequest:this.httpRequest,disabled:this.disabled,showFileList:!1},{trigger:()=>e.createVNode(t.ElButton,{type:"primary",icon:e.createVNode("img",{src:s,alt:"upload"},null),disabled:this.disabled},{default:()=>[e.createTextVNode("上传文件")]})}),e.createVNode(t.ElButton,{icon:e.createVNode("img",{src:l,alt:"download"},null),onClick:this.handleDownloadTemplate,disabled:this.disabled},{default:()=>[e.createTextVNode("下载模板")]})]),this.tipsText&&e.createVNode("div",{class:"core-upload__tips"},[this.tipsText]),this.fileList&&this.fileList.length>0&&e.createVNode("div",{class:"core-upload__file-list"},[this.fileList.map(t=>e.createVNode("div",{key:t.uid,class:"core-upload__file-item"},[e.createVNode("div",{class:"core-upload__file-info"},[e.createVNode("span",{class:"core-upload__file-icon"},[e.createTextVNode("📄")]),e.createVNode("span",{class:"core-upload__file-name",title:t.name},[t.name])]),e.createVNode("img",{onClick:()=>this.handleDelete(t),src:a,alt:"delete",class:"core-upload__file-delete"},null)]))])])}});module.exports=i;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/core-upload/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed, watch } from 'vue';\nimport { ElUpload, ElButton, ElMessage, ElIcon } from 'element-plus';\nimport type { UploadFile, UploadFiles, UploadRequestOptions } from 'element-plus';\n// @ts-ignore\nimport uploadIcon from './assets/upload.svg';\n// @ts-ignore\nimport tempIcon from './assets/temp.svg';\n// @ts-ignore\nimport deleteIcon from './assets/delete.svg';\nimport './style.less';\n\nexport interface UploadFileItem {\n name: string;\n url?: string;\n uid?: number;\n status?: 'ready' | 'uploading' | 'success' | 'fail';\n response?: any;\n [key: string]: any;\n}\n\nexport default defineComponent({\n name: 'CoreUpload',\n props: {\n // 上传地址\n action: {\n type: String,\n default: '',\n },\n // 允许上传的文件类型\n accept: {\n type: String,\n default: '.xlsx,.xls,.csv',\n },\n // 文件大小限制(单位:MB)\n maxSize: {\n type: Number,\n default: 10,\n },\n // 是否支持多文件上传\n multiple: {\n type: Boolean,\n default: true,\n },\n // 文件列表\n fileList: {\n type: Array as PropType<UploadFileItem[]>,\n default: () => [],\n },\n // 下载模板的URL\n templateUrl: {\n type: String,\n default: '',\n },\n // 下载模板的文件名\n templateFileName: {\n type: String,\n default: '模板文件',\n },\n // 提示文本\n tips: {\n type: String,\n default: '',\n },\n // 是否禁用\n disabled: {\n type: Boolean,\n default: false,\n },\n // 自定义上传请求\n httpRequest: {\n type: Function as PropType<(options: UploadRequestOptions) => void>,\n default: undefined,\n },\n },\n emits: ['update:fileList', 'change', 'remove', 'download-template', 'error'],\n setup(props, { emit }) {\n const uploadRef = ref<InstanceType<typeof ElUpload>>();\n const fileList = ref<UploadFileItem[]>(props.fileList || []);\n\n // 监听外部 fileList 变化\n watch(\n () => props.fileList,\n (newFileList) => {\n if (newFileList && JSON.stringify(newFileList) !== JSON.stringify(fileList.value)) {\n fileList.value = [...(newFileList || [])];\n }\n },\n { deep: true, immediate: true }\n );\n\n // 生成提示文本\n const tipsText = computed(() => {\n if (props.tips) {\n return props.tips;\n }\n const acceptTypes = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n return `支持 ${acceptTypes} 格式。文件大小不超过 ${props.maxSize}MB。`;\n });\n\n // 格式化文件大小\n const formatFileSize = (size: number): string => {\n if (size < 1024) {\n return size + ' B';\n } else if (size < 1024 * 1024) {\n return (size / 1024).toFixed(2) + ' KB';\n } else {\n return (size / (1024 * 1024)).toFixed(2) + ' MB';\n }\n };\n\n // 获取文件扩展名\n const getFileExtension = (filename: string): string => {\n const lastDot = filename.lastIndexOf('.');\n return lastDot !== -1 ? filename.substring(lastDot).toLowerCase() : '';\n };\n\n // 验证文件类型\n const validateFileType = (file: File): boolean => {\n const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());\n const fileExt = getFileExtension(file.name);\n const isValid = acceptTypes.some((type) => {\n if (type.startsWith('.')) {\n return type === fileExt;\n }\n // 支持 MIME 类型\n return file.type && file.type.includes(type.replace('.', ''));\n });\n\n if (!isValid) {\n const acceptTypesText = props.accept\n .split(',')\n .map((type) => type.replace('.', '').toUpperCase())\n .join(' 或 ');\n ElMessage.error(`只能上传 ${acceptTypesText} 格式的文件!`);\n return false;\n }\n return true;\n };\n\n // 验证文件大小\n const validateFileSize = (file: File): boolean => {\n const maxSizeBytes = props.maxSize * 1024 * 1024;\n if (file.size > maxSizeBytes) {\n ElMessage.error(`文件大小不能超过 ${props.maxSize}MB!`);\n return false;\n }\n return true;\n };\n\n // 上传前的校验\n const beforeUpload = (file: File): boolean => {\n // 类型校验\n if (!validateFileType(file)) {\n return false;\n }\n // 大小校验\n if (!validateFileSize(file)) {\n return false;\n }\n return true;\n };\n\n // 文件状态改变时的钩子\n const handleChange = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n url: file.url,\n uid: file.uid,\n status: file.status,\n response: file.response,\n }));\n emit('update:fileList', fileList.value);\n emit('change', uploadFile, uploadFiles);\n };\n\n // 文件移除时的钩子\n const handleRemove = (uploadFile: UploadFile, uploadFiles: UploadFiles) => {\n fileList.value = uploadFiles.map((file) => ({\n name: file.name,\n url: file.url,\n uid: file.uid,\n status: file.status,\n response: file.response,\n }));\n emit('update:fileList', fileList.value);\n emit('remove', uploadFile, uploadFiles);\n };\n\n // 上传失败时的钩子\n const handleError = (error: Error, uploadFile: UploadFile) => {\n ElMessage.error(`文件 ${uploadFile.name} 上传失败:${error.message}`);\n emit('error', error, uploadFile);\n };\n\n // 下载模板\n const handleDownloadTemplate = () => {\n if (!props.templateUrl) {\n ElMessage.warning('模板文件地址未配置');\n return;\n }\n emit('download-template', props.templateUrl);\n \n // 如果没有自定义下载处理,则使用默认下载方式\n const link = document.createElement('a');\n link.href = props.templateUrl;\n link.download = props.templateFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n\n // 删除文件\n const handleDelete = (file: UploadFileItem) => {\n const index = fileList.value.findIndex((item) => item.uid === file.uid);\n if (index !== -1) {\n fileList.value.splice(index, 1);\n emit('update:fileList', fileList.value);\n emit('remove', file, fileList.value);\n }\n };\n\n return {\n uploadRef,\n fileList,\n tipsText,\n formatFileSize,\n beforeUpload,\n handleChange,\n handleRemove,\n handleError,\n handleDownloadTemplate,\n handleDelete,\n };\n },\n render() {\n return (\n <div class=\"core-upload\">\n {/* 第一层:上传文件、下载模板按钮 */}\n <div class=\"core-upload__actions\">\n <ElUpload\n ref=\"uploadRef\"\n class=\"core-upload__upload\"\n action={this.action}\n accept={this.accept}\n multiple={this.multiple}\n fileList={this.fileList}\n beforeUpload={this.beforeUpload}\n onChange={this.handleChange}\n onRemove={this.handleRemove}\n onError={this.handleError}\n httpRequest={this.httpRequest}\n disabled={this.disabled}\n showFileList={false}\n >\n {{\n trigger: () => (\n <ElButton\n type=\"primary\"\n icon={<img src={uploadIcon} alt=\"upload\" />}\n disabled={this.disabled}\n >\n 上传文件\n </ElButton>\n ),\n }}\n </ElUpload>\n <ElButton\n icon={<img src={tempIcon} alt=\"download\" />}\n onClick={this.handleDownloadTemplate}\n disabled={this.disabled}\n >\n 下载模板\n </ElButton>\n </div>\n\n {/* 第二层:tips 简要描述当前上传限制 */}\n {this.tipsText && (\n <div class=\"core-upload__tips\">\n {this.tipsText}\n </div>\n )}\n\n {/* 第三层:已经上传的列表,支持删除 */}\n {this.fileList && this.fileList.length > 0 && (\n <div class=\"core-upload__file-list\">\n {this.fileList.map((file) => (\n <div key={file.uid} class=\"core-upload__file-item\">\n <div class=\"core-upload__file-info\">\n <span class=\"core-upload__file-icon\">📄</span>\n <span\n class=\"core-upload__file-name\"\n title={file.name}\n >\n {file.name}\n </span>\n </div>\n <img onClick={() => this.handleDelete(file)} src={deleteIcon} alt=\"delete\" class=\"core-upload__file-delete\" />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n});\n\n"],"names":["index","name","props","action","type","String","default","accept","maxSize","Number","multiple","Boolean","fileList","Array","templateUrl","templateFileName","tips","disabled","httpRequest","Function","undefined","emits","setup","emit","uploadRef","ref","watch","newFileList","JSON","stringify","value","deep","immediate","tipsText","computed","split","map","replace","toUpperCase","join","formatFileSize","size","toFixed","beforeUpload","file","acceptTypes","trim","toLowerCase","fileExt","filename","lastDot","lastIndexOf","substring","getFileExtension","some","startsWith","includes","acceptTypesText","ElMessage","error","validateFileType","maxSizeBytes","validateFileSize","handleChange","uploadFile","uploadFiles","url","uid","status","response","handleRemove","handleError","message","handleDownloadTemplate","warning","link","document","createElement","href","download","body","appendChild","click","removeChild","handleDelete","findIndex","item","splice","render","_createVNode","class","ElUpload","this","onChange","onRemove","onError","showFileList","trigger","ElButton","icon","src","uploadIcon","alt","_createTextVNode","tempIcon","onClick","length","key","title","deleteIcon"],"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"),o=require("./editor-sender/index.js"),s=require("./file-card/index.js"),t=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),
|
|
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"),o=require("./editor-sender/index.js"),s=require("./file-card/index.js"),t=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),u=require("./core-table/index.js"),n=require("./core-chart/index.js"),p=require("./core-card/index.js"),l=require("./core-upload/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=o,exports.FileCard=s,exports.CoreText=t,exports.CoreTips=x,exports.CoreResult=d,exports.CoreTable=u,exports.CoreChart=n,exports.CoreCard=p,exports.CoreUpload=l;
|
|
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"),s=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 l=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"),m=require("../core-card/index.js");;/* empty css */const c=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"),v=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),h=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),_=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),f=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),g=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),y=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),k=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),x=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),q=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),j=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},historyInputs:{type:Object,default:()=>({})}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(j,{emit:N}){const E=e.useTemplateRef("x-markdown-container"),w=e.ref(Date.now()),A=e.ref(-1/0),C=e.ref(""),S=new Set,T=e.ref(!1),P=e.ref(!1),R=e.ref([]),L=t.useTemplateRefsList(),F=e.ref(0);let V=0;const $=e.ref(null),D=e.ref(!1),H=e.ref(l.createStreamGenerator(e=>{C.value=C.value+e},j.speed)),U=e.computed(()=>{if(!j.autoHideThinking)return C.value;let e=C.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,s,l)=>{const n="</div>"===l;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${s}${l}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){A.value===-1/0&&(A.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(s){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 s=((A.value-w.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${s>"0"?s+"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}),I=e=>{const{properties:r={},parentScope:t}=e,{disabled:s}=r;return!!s||"form"===t&&(j.isHistoryMessage&&!D.value)};e.watch(()=>[j.text,j.typing],(e,r)=>{var t,s,l,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=H.value)||t.reset(),C.value=""),o){if(null==(s=H.value)||s.update(o),!i)return void(null==(l=H.value)||l.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!P.value&&e.test(o))return P.value=!0,void(null==(n=H.value)||n.setSpeed(500))}},{immediate:!0});const O=e.ref([]),W=r(()=>{(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("div[hidden]");O.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),N("refConfigUpdate",O.value)})()},100),B=e.ref(null);e.watch(()=>C.value,W,{immediate:!0}),e.watch(B,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=O.value.find(e=>e.link===r);N("hoverActiveRefTrigger",t)}else N("hoverActiveRefTrigger","")});const J=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}},M=e=>{const r=J(e);B.value=r||null},G=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),l=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();l?(s.ElMessage("文件下载中..."),N("downloadFile",{title:n,id:l,ext:o,href:t})):window.open(t,"_blank")})(e);const r=J(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),s=Number(r.getAttribute("datanumber")),l=r.getAttribute("id"),n={...O.value.find(r=>r.link===e),highlight:t,page:s,id:l};N("clickActiveRefTrigger",n)}};e.onMounted(()=>{E.value.addEventListener("mouseover",M),E.value.addEventListener("click",G)}),e.onBeforeUnmount(()=>{E.value.removeEventListener("mouseover",M),E.value.addEventListener("click",G)});const z=()=>{if(!E.value)return;E.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{S.has(e)||(S.add(e),X(e),e.complete?K(e):(e.addEventListener("load",()=>K(e)),e.addEventListener("error",()=>Q(e))))})},X=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`}},K=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Q=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Y=v.unified().use(h).use(_).use(f,{singleTilde:!1}).use(g).use(y).use(k,{allowDangerousHtml:!0}).use(b).use(x).use(q),Z=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const s={...(null==(t=e.properties)?void 0:t.data)||{},...j.historyInputs||{}};return void r.push(s)}Array.isArray(e.children)&&e.children.forEach(e=>{Z(e,r)})}};e.watch(()=>U.value,async r=>{V=0;const t=await Y.run(Y.parse(r)),s=(e=>{const r=[],t=[],s=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(s))};return Array.isArray(e.children)&&e.children.forEach(s),t.forEach(e=>{var t,s,l,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(l=null==(s=null==i?void 0:i.properties)?void 0:s.className)?void 0:l.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);Z(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);R.value=s,await e.nextTick(),$.value=t,e.nextTick(z),e.nextTick(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!T.value&&(T.value=!0,new o.Accordion(r))})},{immediate:!0});const ee=()=>e.h("div",{class:"hitl-skeleton"},[e.h("div",{class:"skeleton-header"},[e.h("div",{class:"skeleton-avatar"}),e.h("div",{class:"skeleton-title"})]),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"}),e.h("div",{class:"skeleton-item skeleton-item-short"}),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"})]),re=(r,t,l)=>{var o,v,h,_,f,g,y,k,b,x,q,j,E,w;if(!r)return null;let A=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(A=(null==(v=null==(o=r.children)?void 0:o.map)?void 0:v.call(o,e=>re(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(s.ElConfigProvider,{locale:c},A));case"element":if("sub"===r.tagName){const s=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],l=null==s?void 0:s.map(e=>re(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},l)}if("span"===r.tagName)return e.h("span",{...r.properties},A);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(h=r.properties)?void 0:h.href)||"",s=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":s},A)}if("ElTimeline"===r.tagName)return e.h(s.ElTimeline,{...r.properties},A);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",A)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[A[F.value]]);if("ElRow"===r.tagName)return e.h(s.ElRow,{...r.properties},A);if("ElCol"===r.tagName)return e.h(s.ElCol,{...r.properties},A);if("ElCard"===r.tagName)return e.h(s.ElCard,{...r.properties},A);if("CoreCard"===r.tagName)return e.h(m,{...r.properties},A);if("ElForm"===r.tagName){const l=null==(_=r.children)?void 0:_.map(e=>re(e,V));return V++,e.h(s.ElForm,{ref:L.value.set,model:R.value[t],...r.properties,disabled:I(r)},l)}if("ElFormItem"===r.tagName)return e.h(s.ElFormItem,{...r.properties},A);if("ElButton"===r.tagName){let n=null==(f=r.properties)?void 0:f.payload;return"table"===r.parentScope&&(n=l),e.h(s.ElButton,{...r.properties,disabled:I(r),onClick:()=>{var e;(async(e,r,t,s)=>{var l;if("inner_next"===r)return void(F.value+=1);if("inner_prev"===r)return void(F.value-=1);if("inner_rewrite"===r)return D.value=!0,void console.log("isRewrite",D.value);let n={action:r,payload:{}};t&&"form"!==s?n={action:r,payload:t}:(await(null==(l=L.value[e])?void 0:l.validate()),n={action:r,payload:{...R.value[e],...t}}),D.value&&r.startsWith("core_")&&(D.value=!1),N("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},A)}if("ElSelect"===r.tagName)return e.h(s.ElSelect,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(g=r.properties)?void 0:g.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElDatePicker"===r.tagName)return e.h(s.ElDatePicker,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElInput"===r.tagName)return e.h(s.ElInput,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(k=r.properties)?void 0:k.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElRadioGroup"===r.tagName)return e.h(s.ElRadioGroup,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(b=r.properties)?void 0:b.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElRadio"===r.tagName)return e.h(s.ElRadio,{...r.properties,disabled:I(r)},A);if("ElTable"===r.tagName)return e.h(d,{...r.properties},A);if("ElTableColumn"===r.tagName)return e.h(s.ElTableColumn,{...r.properties},{default:e=>{var t,s;const l=null==(t=r.children)?void 0:t.map(r=>re(r,V,e.row)),n=null==(s=r.children)?void 0:s.findIndex(t=>{var s;return t.value===e.row[null==(s=r.properties)?void 0:s.prop]});return-1===n?l:null==l?void 0:l[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==(x=r.children)?void 0:x.find(e=>"code"===e.tagName);if(t&&(null==(j=null==(q=t.properties)?void 0:q.className)?void 0:j.includes("language-CorePilot"))){const r=(null==(w=null==(E=t.children)?void 0:E[0])?void 0:w.value)||"";if(!(e=>{if(!e||0===e.trim().length)return!1;const r=e.trim(),t=r[0];if("{"!==t&&"["!==t)return!1;try{return JSON.parse(r),!0}catch(s){return!1}})(r))return ee();try{const t=JSON.parse(r),s=n.parseCorePilot(t),l=re(s,V);return e.h("div",{class:"hitl-wrapper"},[l])}catch(C){return ee()}}}return e.h(r.tagName,r.properties,A);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{V=0}),{hastToVNode:re,ast:$,container:E,renderComplete:W,isRewrite:D,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=j;
|
|
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"),s=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 l=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"),m=require("../core-card/index.js");;/* empty css */const c=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"),v=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),h=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),_=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),f=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),g=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),y=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),k=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),x=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),q=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),j=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},historyInputs:{type:Object,default:()=>({})}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(j,{emit:N}){const E=e.useTemplateRef("x-markdown-container"),w=e.ref(Date.now()),A=e.ref(-1/0),C=e.ref(""),S=new Set,T=e.ref(!1),P=e.ref(!1),R=e.ref([]),L=t.useTemplateRefsList(),F=e.ref(0);let V=0;const $=e.ref(null),D=e.ref(!1),H=e.ref(l.createStreamGenerator(e=>{C.value=C.value+e},j.speed)),U=e.computed(()=>{if(!j.autoHideThinking)return C.value;let e=C.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,s,l)=>{const n="</div>"===l;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${s}${l}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){A.value===-1/0&&(A.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(s){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 s=((A.value-w.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${s>"0"?s+"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}),I=e=>{const{properties:r={},parentScope:t}=e,{disabled:s}=r;return!!s||"form"===t&&(j.isHistoryMessage&&!D.value)};e.watch(()=>[j.text,j.typing],(e,r)=>{var t,s,l,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=H.value)||t.reset(),C.value=""),o){if(null==(s=H.value)||s.update(o),!i)return void(null==(l=H.value)||l.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!P.value&&e.test(o))return P.value=!0,void(null==(n=H.value)||n.setSpeed(500))}},{immediate:!0});const O=e.ref([]),W=r(()=>{(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("div[hidden]");O.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),N("refConfigUpdate",O.value)})()},100),B=e.ref(null);e.watch(()=>C.value,W,{immediate:!0}),e.watch(B,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=O.value.find(e=>e.link===r);N("hoverActiveRefTrigger",t)}else N("hoverActiveRefTrigger","")});const J=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}},M=e=>{const r=J(e);B.value=r||null},G=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),l=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();l?(s.ElMessage("文件下载中..."),N("downloadFile",{title:n,id:l,ext:o,href:t})):window.open(t,"_blank")})(e);const r=J(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),s=Number(r.getAttribute("datanumber")),l=r.getAttribute("id"),n={...O.value.find(r=>r.link===e),highlight:t,page:s,id:l};N("clickActiveRefTrigger",n)}};e.onMounted(()=>{E.value.addEventListener("mouseover",M),E.value.addEventListener("click",G)}),e.onBeforeUnmount(()=>{E.value.removeEventListener("mouseover",M),E.value.addEventListener("click",G)});const z=()=>{if(!E.value)return;E.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{S.has(e)||(S.add(e),X(e),e.complete?K(e):(e.addEventListener("load",()=>K(e)),e.addEventListener("error",()=>Q(e))))})},X=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`}},K=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Q=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Y=v.unified().use(h).use(_).use(f,{singleTilde:!1}).use(g).use(y).use(k,{allowDangerousHtml:!0}).use(b).use(x).use(q),Z=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const s={...(null==(t=e.properties)?void 0:t.data)||{},...j.historyInputs||{}};return void r.push(s)}Array.isArray(e.children)&&e.children.forEach(e=>{Z(e,r)})}};e.watch(()=>U.value,async r=>{V=0;const t=await Y.run(Y.parse(r)),s=(e=>{const r=[],t=[],s=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(s))};return Array.isArray(e.children)&&e.children.forEach(s),t.forEach(e=>{var t,s,l,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(l=null==(s=null==i?void 0:i.properties)?void 0:s.className)?void 0:l.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);Z(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);R.value=s,await e.nextTick(),$.value=t,e.nextTick(z),e.nextTick(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!T.value&&(T.value=!0,new o.Accordion(r))})},{immediate:!0});const ee=()=>e.h("div",{class:"hitl-skeleton"},[e.h("div",{class:"skeleton-header"},[e.h("div",{class:"skeleton-avatar"}),e.h("div",{class:"skeleton-title"})]),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"}),e.h("div",{class:"skeleton-item skeleton-item-short"}),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"})]),re=(r,t,l)=>{var o,v,h,_,f,g,y,k,b,x,q,j,E,w,A;if(!r)return null;let C=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(C=(null==(v=null==(o=r.children)?void 0:o.map)?void 0:v.call(o,e=>re(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(s.ElConfigProvider,{locale:c},C));case"element":if("sub"===r.tagName){const s=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],l=null==s?void 0:s.map(e=>re(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},l)}if("span"===r.tagName)return e.h("span",{...r.properties},C);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(h=r.properties)?void 0:h.href)||"",s=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":s},C)}if("ElTimeline"===r.tagName)return e.h(s.ElTimeline,{...r.properties},C);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",C)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[C[F.value]]);if("ElRow"===r.tagName)return e.h(s.ElRow,{...r.properties},C);if("ElCol"===r.tagName)return e.h(s.ElCol,{...r.properties},C);if("ElCard"===r.tagName)return e.h(s.ElCard,{...r.properties},C);if("CoreCard"===r.tagName){const s={};return(null==(_=r.slots)?void 0:_.header)&&(s.header=()=>r.slots.header.map(e=>re(e,t))),C&&C.length>0&&(s.default=()=>C),e.h(m,{...r.properties},s)}if("ElForm"===r.tagName){const l=null==(f=r.children)?void 0:f.map(e=>re(e,V));return V++,e.h(s.ElForm,{ref:L.value.set,model:R.value[t],...r.properties,disabled:I(r)},l)}if("ElFormItem"===r.tagName)return e.h(s.ElFormItem,{...r.properties},C);if("ElButton"===r.tagName){let n=null==(g=r.properties)?void 0:g.payload;return"table"===r.parentScope&&(n=l),e.h(s.ElButton,{...r.properties,disabled:I(r),onClick:()=>{var e;(async(e,r,t,s)=>{var l;if("inner_next"===r)return void(F.value+=1);if("inner_prev"===r)return void(F.value-=1);if("inner_rewrite"===r)return D.value=!0,void console.log("isRewrite",D.value);let n={action:r,payload:{}};t&&"form"!==s?n={action:r,payload:t}:(await(null==(l=L.value[e])?void 0:l.validate()),n={action:r,payload:{...R.value[e],...t}}),D.value&&r.startsWith("core_")&&(D.value=!1),N("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},C)}if("ElSelect"===r.tagName)return e.h(s.ElSelect,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},C);if("ElDatePicker"===r.tagName)return e.h(s.ElDatePicker,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(k=r.properties)?void 0:k.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},C);if("ElInput"===r.tagName)return e.h(s.ElInput,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(b=r.properties)?void 0:b.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},C);if("ElRadioGroup"===r.tagName)return e.h(s.ElRadioGroup,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(x=r.properties)?void 0:x.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},C);if("ElRadio"===r.tagName)return e.h(s.ElRadio,{...r.properties,disabled:I(r)},C);if("ElTable"===r.tagName)return e.h(d,{...r.properties},C);if("ElTableColumn"===r.tagName)return e.h(s.ElTableColumn,{...r.properties},{default:e=>{var t,s;const l=null==(t=r.children)?void 0:t.map(r=>re(r,V,e.row)),n=null==(s=r.children)?void 0:s.findIndex(t=>{var s;return t.value===e.row[null==(s=r.properties)?void 0:s.prop]});return-1===n?l:null==l?void 0:l[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==(q=r.children)?void 0:q.find(e=>"code"===e.tagName);if(t&&(null==(E=null==(j=t.properties)?void 0:j.className)?void 0:E.includes("language-CorePilot"))){const r=(null==(A=null==(w=t.children)?void 0:w[0])?void 0:A.value)||"";if(!(e=>{if(!e||0===e.trim().length)return!1;const r=e.trim(),t=r[0];if("{"!==t&&"["!==t)return!1;try{return JSON.parse(r),!0}catch(s){return!1}})(r))return ee();try{const t=JSON.parse(r),s=n.parseCorePilot(t),l=re(s,V);return e.h("div",{class:"hitl-wrapper"},[l])}catch(S){return ee()}}}return e.h(r.tagName,r.properties,C);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{V=0}),{hastToVNode:re,ast:$,container:E,renderComplete:W,isRewrite:D,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=j;
|
|
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 CoreChart from '../core-chart';\nimport CoreCard from '../core-card';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport { InputSchema } from '@/types/index.ts';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\n/**\n * 检测 JSON 字符串是否完整\n * 使用最高效的方式:快速检查基本结构后直接尝试解析\n */\nconst isCompleteJSON = (jsonStr: string): boolean => {\n if (!jsonStr || jsonStr.trim().length === 0) {\n return false;\n }\n \n const trimmed = jsonStr.trim();\n \n // 快速检查:必须以 { 或 [ 开头\n const firstChar = trimmed[0];\n if (firstChar !== '{' && firstChar !== '[') {\n return false;\n }\n \n // 直接尝试解析,如果成功就是完整的 JSON\n try {\n JSON.parse(trimmed);\n return true;\n } catch (error) {\n // 解析失败,说明 JSON 不完整或格式错误\n return false;\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n historyInputs: {\n type: Object,\n default: () => ({}),\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null);\n const isRewrite = ref(false);\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // TODO 后续需要规范相关定义\n // 如果当前是历史消息, 且父级作用域为form,则禁用点击事件\n const checkDisabled = (node: InputSchema) => {\n const { properties = {}, parentScope } = node;\n const { disabled } = properties;\n if (disabled) {\n return true;\n }\n if (parentScope === 'form') {\n return props.isHistoryMessage && !isRewrite.value;\n }\n return false;\n }\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n console.log('isRewrite', isRewrite.value);\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = {\n ...schema.properties?.data || {},\n // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景\n ...props.historyInputs || {},\n };\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 渲染骨架屏组件\n * @returns {VNode} 骨架屏虚拟节点\n */\n const renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n };\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'CoreCard') {\n return h(\n CoreCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n isRewrite,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","isRewrite","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","checkDisabled","node","properties","parentScope","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","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","renderSkeleton","h","class","hastToVNode","index","row","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","CoreCard","ElForm","set","model","ElFormItem","payload","ElButton","onClick","action","log","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","jsonStr","trim","trimmed","firstChar","isCompleteJSON","viewTree","parseCorePilot","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 CoreCard from '../core-card';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport { InputSchema } from '@/types/index.ts';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\n/**\n * 检测 JSON 字符串是否完整\n * 使用最高效的方式:快速检查基本结构后直接尝试解析\n */\nconst isCompleteJSON = (jsonStr: string): boolean => {\n if (!jsonStr || jsonStr.trim().length === 0) {\n return false;\n }\n \n const trimmed = jsonStr.trim();\n \n // 快速检查:必须以 { 或 [ 开头\n const firstChar = trimmed[0];\n if (firstChar !== '{' && firstChar !== '[') {\n return false;\n }\n \n // 直接尝试解析,如果成功就是完整的 JSON\n try {\n JSON.parse(trimmed);\n return true;\n } catch (error) {\n // 解析失败,说明 JSON 不完整或格式错误\n return false;\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n historyInputs: {\n type: Object,\n default: () => ({}),\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null);\n const isRewrite = ref(false);\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // TODO 后续需要规范相关定义\n // 如果当前是历史消息, 且父级作用域为form,则禁用点击事件\n const checkDisabled = (node: InputSchema) => {\n const { properties = {}, parentScope } = node;\n const { disabled } = properties;\n if (disabled) {\n return true;\n }\n if (parentScope === 'form') {\n return props.isHistoryMessage && !isRewrite.value;\n }\n return false;\n }\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n console.log('isRewrite', isRewrite.value);\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = {\n ...schema.properties?.data || {},\n // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景\n ...props.historyInputs || {},\n };\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 渲染骨架屏组件\n * @returns {VNode} 骨架屏虚拟节点\n */\n const renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n };\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'CoreCard') {\n const slots: any = {};\n \n // 处理 header 插槽\n if (node.slots?.header) {\n slots.header = () => {\n return node.slots.header.map((slotItem: any) => {\n return hastToVNode(slotItem, index);\n });\n };\n }\n \n // 处理默认插槽\n if (children && children.length > 0) {\n slots.default = () => children;\n }\n \n return h(\n CoreCard,\n {\n ...node.properties,\n },\n slots\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n isRewrite,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","isRewrite","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","checkDisabled","node","properties","parentScope","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","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","renderSkeleton","h","class","hastToVNode","index","row","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","slots","header","slotItem","CoreCard","ElForm","set","model","ElFormItem","payload","ElButton","onClick","action","log","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","jsonStr","trim","trimmed","firstChar","isCompleteJSON","viewTree","parseCorePilot","onUpdated","getContentText","innerText","render","_createVNode","this"],"mappings":"gpKAsGAA,oBAA+B,CAC7BC,KAAM,YACNC,MAAO,CACLC,KAAM,CACJC,KAAMC,OACNC,QAAS,IAEXC,iBAAkB,CAChBH,KAAMI,QACNF,SAAS,GAEXG,OAAQ,CACNL,KAAMI,QACNF,SAAS,GAEXI,MAAO,CACLN,KAAMO,OACNL,QAAS,KAEXM,iBAAkB,CAChBR,KAAMI,QACNF,SAAS,GAEXO,cAAe,CACbT,KAAMU,OACNR,QAASA,MAAO,KAGpBS,OAAQ,CACN,kBAEFC,MAAO,CAAC,wBAAyB,wBAAyB,kBAAmB,eAAgB,cAC7FC,KAAAA,CAAMf,GAAOgB,KAAEA,IACb,MAAMC,EAAYC,EAAAA,eAA4B,wBACxCC,EAAYC,EAAAA,IAAYC,KAAKC,OAC7BC,EAAUH,OAAYI,KACtBC,EAAUL,EAAAA,IAAI,IACdM,MAAoBC,IACpBC,EAAkBR,EAAAA,KAAI,GACtBS,EAAcT,EAAAA,KAAI,GAClBU,EAAWV,EAAAA,IAAmC,IAC9CW,EAAWC,EAAAA,sBACXC,EAAWb,EAAAA,IAAI,GACrB,IAAIc,EAAU,EACd,MAAMC,EAAMf,EAAAA,IAAS,MACfgB,EAAYhB,EAAAA,KAAI,GAMhBiB,EAAcjB,EAAAA,IAA8CkB,EAAAA,sBAJ9CC,IAClBd,EAAQe,MAAQf,EAAQe,MAAQD,GAGkEvC,EAAMQ,QAsBpGiC,EAAaC,EAAAA,SAAS,KAC1B,IAAK1C,EAAMK,iBAAkB,OAAOoB,EAAQe,MAC5C,IAAIG,EAAUlB,EAAQe,MAGtB,GAFAG,EAvB4BC,CAAAA,IAE5B,IAAIC,GAAiB,EAErB,OAAOD,EAAOE,QAHQ,oEAGe,CAACC,EAAOC,EAAYC,EAAYC,KACnE,MAAMC,EAA2B,WAAXD,EAWtB,MAAO,GAVgBF,EAAWF,QAChC,cACCC,GACKF,GACFA,GAAiB,EACVE,GAEF,mBAAmBI,EAAgB,SAAW,kBAG5BF,IAAaC,OAOlCE,CAAqBT,GAC/BA,EAAUA,EAAQG,QAAQ,iDAAkD,KACxEH,EAAQU,SAAS,cAAe,CAC9B9B,EAAQiB,SAAUhB,MACpBD,EAAQiB,MAAQnB,KAAKC,OAGvB,MAAMgC,EApIiBrD,CAAAA,IAC7B,MACM8C,EADM,iCACMQ,KAAKtD,GACvB,IAAK8C,EACH,MAAO,GAET,MAAMS,EAAaT,EAAM,GACzB,IAEE,OADgBU,KAAKC,MAAMF,EAE7B,OAASG,GACP,MAAO,EACT,GAwHkBC,CAAsBjB,GAgBlC,OAdWA,EAAQG,QAAQ,uCAAwC,CAACC,EAAOJ,IAWlE,YAFPA,GAPAA,EAAUA,EAAQG,QAAQ,iCAAkC,CAACC,EAAOJ,KAClE,MAAMkB,IAAatC,EAAQiB,MAAQrB,EAAUqB,OAAS,KAAMsB,QAAQ,GACpE,MAAO,4FACGD,EAAW,IAAMA,EAAW,IAAM,MAAMP,EAAIS,OAAS,0HAA0HT,MAAAA,OAAAA,EAAAA,EAAKS,WAAa,gCAI3LjB,QAAQ,yBAA0B,oDAMxD,CACA,OAAOH,IAKHqB,EAAiBC,IACrB,MAAMC,WAAEA,EAAa,CAAA,EAAAC,YAAIA,GAAgBF,GACnCG,SAAEA,GAAaF,EACrB,QAAIE,GAGgB,SAAhBD,IACKnE,EAAMU,mBAAqB0B,EAAUI,QAKhD6B,QAAM,IAAM,CAACrE,EAAMC,KAAMD,EAAMO,QAAS,CAAC+D,EAAGC,iBAC1C,MAAOtE,EAAMM,GAAU+D,GAChBE,GAAWD,GAAK,GAKvB,GAJMtE,EAAgBwE,WAAWD,KAC/BnC,OAAAA,EAAAA,EAAYG,QAAZH,EAAmBqC,QACnBjD,EAAQe,MAAQ,IAEdvC,EAAM,CAER,GADAoC,OAAAA,EAAAA,EAAYG,UAAOmC,OAAO1E,IACrBM,EAEH,YADA8B,OAAAA,EAAAA,EAAYG,QAAZH,EAAmBuC,QAIrB,MAAMC,EAAW,wCACjB,IAAKhD,EAAYW,OAASqC,EAASC,KAAK7E,GAGtC,OAFA4B,EAAYW,OAAQ,OACpBH,OAAAA,EAAAA,EAAYG,UAAOuC,SAAS,KAGhC,GACC,CACDC,WAAW,IAIb,MAAMC,EAAY7D,EAAAA,IAAsB,IAOlC8D,EAAiBC,EAAS,KALXC,YACnB,MAAMC,EAAgBpE,OAAAA,EAAAA,EAAUuB,YAAVvB,EAAAA,EAAiCqE,cAAc,eACrEL,EAAUzC,MAAQiB,KAAKC,OAAM2B,MAAAA,OAAAA,EAAAA,EAAcE,cAAe,MAC1DvE,EAAK,kBAAmBiE,EAAUzC,QAGlC4C,IACC,KAGGI,EAAYpE,EAAAA,IAAwB,MAE1CiD,EAAAA,MAAM,IAAM5C,EAAQe,MAAO0C,EAAgB,CACzCF,WAAW,IAGbX,EAAAA,MAAMmB,EAAW,CAACC,EAAQC,KACxB,GAAID,IAAWC,EACb,GAAID,EAAQ,CACV,MAAMxF,EAAOwF,EAAOE,aAAa,YAC3BC,EAASX,EAAUzC,MAAMqD,KAAMC,GAC5BA,EAAKC,OAAS9F,GAEvBe,EAAK,wBAAyB4E,EAChC,MACE5E,EAAK,wBAAyB,MAKpC,MAAMgF,EAAmBC,IACvB,MAAML,EAASK,EAAEL,OACjB,GAAuB,SAAnBA,EAAOM,QAAoB,CAC7B,MAAMC,EAAmBP,EAAOQ,UAAUC,SAAS,oBAC7CC,EAAiBV,EAAOQ,UAAUC,SAAS,kBACjD,GAAIF,GAAoBG,EACtB,OAAKA,EAGEV,EAFEA,EAAOW,aAIpB,GAGIC,EAAmBP,IACvB,MAAML,EAASI,EAAgBC,GAE7BT,EAAUhD,MADRoD,GAIc,MA0Eda,EAAeR,IAEnB,GAA0C,MAArCA,EAAEL,OAAuBM,QAE5B,WA3EiBQ,OAAOT,IAC1BA,EAAEU,kBACFV,EAAEW,iBACF,MAAMhB,EAASK,EAAEL,OACXiB,EAAOjB,EAAOD,aAAa,QAC3BmB,EAAKlB,EAAOD,aAAa,YAAcC,EAAOD,aAAa,UAC3DoB,EAAQnB,EAAOD,aAAa,cAAgBC,EAAOD,aAAa,YACtE,IAAKkB,EACH,OAGF,MAAMG,EAAMH,EAAKI,MAAM,KAAKC,MAEvBJ,GAILK,EAAAA,UAAU,YAEVnG,EAAK,eAAgB,CACnB+F,QACAD,KACAE,MACAH,UATAO,OAAOC,KAAKR,EAAM,WA4DlBS,CAAarB,GAIf,MAAML,EAASI,EAAgBC,GAC/B,GAAIL,EAAQ,CACV,MAAM3F,EAAO2F,EAAOD,aAAa,YAC3B4B,EAAY9D,KAAKC,MAAMkC,EAAOD,aAAa,kBAAoB,MAC/D6B,EAAO/G,OAAOmF,EAAOD,aAAa,eAClCmB,EAAKlB,EAAOD,aAAa,MAIzB8B,EAAO,IAHExC,EAAUzC,MAAMqD,KAAMC,GAC5BA,EAAKC,OAAS9F,GAIrBsH,YACAC,OACAV,MAEF9F,EAAK,wBAAyByG,EAChC,GAOFC,EAAAA,UAAU,KACPzG,EAAUuB,MAAsBmF,iBAAiB,YAAanB,GAC9DvF,EAAUuB,MAAsBmF,iBAAiB,QAASlB,KAG7DmB,EAAAA,gBAAgB,KACb3G,EAAUuB,MAAsBqF,oBAAoB,YAAarB,GACjEvF,EAAUuB,MAAsBmF,iBAAiB,QAASlB,KAO7D,MAAMqB,EAAmBA,KACvB,IAAK7G,EAAUuB,MAAO,OAEJvB,EAAUuB,MAAMuF,iBAChC,oCAGQC,QAASC,IACbvG,EAAcwG,IAAID,KACtBvG,EAAcyG,IAAIF,GAGlBG,EAAyBH,GAGrBA,EAAII,SACNC,EAAgBL,IAEhBA,EAAIN,iBAAiB,OAAQ,IAAMW,EAAgBL,IACnDA,EAAIN,iBAAiB,QAAS,IAAMY,EAAiBN,SAMrDG,EAA4BH,IAChC,MAAMO,EAAiBP,EAAI1B,cAAckC,YAKzC,GAJIR,EAAIS,aAAeF,IACrBP,EAAIU,MAAMC,SAAW,QAGnBX,EAAIS,cAAgBT,EAAIY,cAAe,CACzC,MAAMC,EAAQb,EAAIY,cAAgBZ,EAAIS,aACtCT,EAAIU,MAAMI,UAAY,GAAGC,KAAKC,IAAI,IAAKT,EAAiBM,MAC1D,GAIIR,EAAmBL,IACvBvG,EAAcwH,OAAOjB,GACrBA,EAAIkB,aAAa,iBAAkB,QACnClB,EAAI7B,UAAU+B,IAAI,UAClBF,EAAIU,MAAMS,QAAU,IACpBnB,EAAIJ,oBAAoB,OAAQS,GAChCL,EAAIJ,oBAAoB,QAASU,IAI7BA,EAAoBN,IACxBvG,EAAcwH,OAAOjB,GACrBA,EAAIkB,aAAa,iBAAkB,QACnClB,EAAI7B,UAAU+B,IAAI,cAClBF,EAAIU,MAAMI,UAAY,QACtBd,EAAIJ,oBAAoB,OAAQS,GAChCL,EAAIJ,oBAAoB,QAASU,IAI7Bc,EAAKC,EAAAA,UACRC,IAAIC,GACJD,IAAIE,GACJF,IAAIG,EAAW,CAAEC,aAAa,IAC9BJ,IAAIK,GACJL,IAAIM,GACJN,IAAIO,EAAc,CAAEC,oBAAoB,IACxCR,IAAIS,GACJT,IAAIU,GACJV,IAAIW,GAQDC,EAAyBA,CAACC,EAAaC,WAC3C,GAAKD,GAA4B,iBAAXA,EAAtB,CAGA,GAAoB,SAAhBA,EAAOlK,KAAiB,CAC1B,MAAMoK,EAAW,KACZF,OAAAA,EAAAA,EAAOlG,iBAAPkG,EAAAA,EAAmB3C,OAAQ,MAE3BzH,EAAMW,eAAiB,CAAA,GAG5B,YADA0J,EAAaE,KAAKD,EAEpB,CAGIE,MAAMC,QAAQL,EAAOM,WACvBN,EAAOM,SAAS1C,QAAS2C,IACvBR,EAAuBQ,EAAON,IAhBS,GAkE7ChG,EAAAA,MACE,IAAM5B,EAAWD,MACjBkE,MAAOzG,IAELiC,EAAU,EACV,MAAM0I,QAAcvB,EAAGwB,IAAIxB,EAAG3F,MAAMzD,IAE9BoK,EA/CYO,CAAAA,IACpB,MAAMP,EAA2C,GAG3CS,EAAkB,GAClBC,EAAgB9G,IACfA,IACgB,QAAjBA,EAAKiC,SACP4E,EAASP,KAAKtG,GAEZuG,MAAMC,QAAQxG,EAAKyG,WACrBzG,EAAKyG,SAAS1C,QAAQ+C,KA0B1B,OArBIP,MAAMC,QAAQG,EAAMF,WACtBE,EAAMF,SAAS1C,QAAQ+C,GAIzBD,EAAS9C,QAASgD,kBAChB,MAAMC,EAAWD,OAAAA,EAAAA,EAAQN,mBAAU7E,KAAM8E,GAAiC,SAAlBA,EAAMzE,SAC9D,GAAI+E,OAAAA,EAAAA,0BAAU/G,iBAAV+G,EAAAA,EAAsBC,gBAAtBD,EAAAA,EAAiC5H,SAAS,sBAC5C,IACE,MAAM8H,GAAOF,OAAAA,EAAAA,OAAAA,EAAAA,EAASP,eAATO,EAAAA,EAAoB,aAAIzI,QAAS,GAC9C,GAAI2I,EAAM,CACR,MAAMf,EAAS3G,KAAKC,MAAMyH,GAE1BhB,EAAuBC,EAAQC,EACjC,CACF,OAAS1G,GACPyH,QAAQzH,MAAM,oCAAqCA,EACrD,IAIG0G,GAUgBgB,CAAaT,GAClC9I,EAASU,MAAQ6H,QAEXiB,aACNnJ,EAAIK,MAAQoI,EAGZU,EAAAA,SAASxD,GACTwD,EAAAA,SAAS,WACP,MAAMC,EAAUtK,OAAAA,EAAAA,EAAUuB,YAAVvB,EAAAA,EAAiBqE,cAAc,kBAC/BiG,WAASjG,cAAc,cACvB1D,EAAgBY,QAC9BZ,EAAgBY,OAAQ,EACxB,IAAIgJ,EAAAA,UAAUD,OAIpB,CAAEvG,WAAW,IAOf,MAAMyG,GAAiBA,IACdC,EAAAA,EAAE,MAAO,CACdC,MAAO,iBACN,CAEDD,EAAAA,EAAE,MAAO,CACPC,MAAO,mBACN,CACDD,EAAAA,EAAE,MAAO,CAAEC,MAAO,oBAClBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,qBAGpBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,qCAClBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,uCAClBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,sCAClBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,qCAClBD,EAAAA,EAAE,MAAO,CAAEC,MAAO,yCAUhBC,GAAcA,CAAC3H,EAAM4H,EAAgBC,uCACzC,IAAK7H,EAAM,OAAO,KAClB,IAAIyG,EAAkB,GAMtB,OALsB,CAAC,MAAO,MAAO,OAAQ,UAE1BrH,SAASY,EAAKiC,WAC/BwE,GAAWzG,OAAAA,EAAAA,OAAAA,EAAAA,EAAKyG,eAALzG,EAAAA,EAAe8H,UAAf9H,EAAAA,EAAAA,KAAAA,KAA8B2H,GAAYjB,EAAOkB,MAAW,IAEjE5H,EAAK/D,MACX,IAAK,OACH,OAAOwL,EAAAA,EACL,MACA,CAAEC,MAAO,iBACTD,EAAAA,EAAEM,EAAAA,iBAAkB,CAClBC,OAAQC,GACPxB,IAGP,IAAK,UACH,GAAqB,QAAjBzG,EAAKiC,QAAmB,CAC1B,MAAMiG,EAAiB,CACrB,CACEjM,KAAM,UACNgG,QAAS,OACThC,WAAY,CACVyH,MAAO,wBAGR1H,EAAKyG,UAEJA,EAAWyB,MAAAA,OAAAA,EAAAA,EAAgBJ,IAAIpB,GAASiB,GAAYjB,EAAOkB,IACjE,OAAOH,EAAAA,EAAE,OAAQ,IACZzH,EAAKC,WACRyH,MAAO,kBACNjB,EACL,CACA,GAAqB,SAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EAAE,OAAQ,IACVzH,EAAKC,YAEVwG,GAIJ,GAAqB,QAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EAAE,MAAO,IACXzH,EAAKC,WACRyH,MAAO,iBACP,iBAAkB,UAItB,GAAqB,MAAjB1H,EAAKiC,QAAiB,CACxB,MAAMW,GAAO5C,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiB4C,OAAQ,GAChCuF,EAAWvF,EAAOA,EAAKI,MAAM,KAAKC,MAAQ,KAChD,OAAOwE,EAAAA,EACL,IACA,IACKzH,EAAKC,WACRyH,MAAO,YACP,iBAAkBS,GAEpB1B,EAEJ,CACA,GAAqB,eAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLW,EAAAA,WACA,IACKpI,EAAKC,YAEVwG,GAGJ,GAAqB,UAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACL,MACA,CACEC,MAAO,0BAET,CACED,EAAAA,EACE,QACAhB,KAMR,GAAqB,SAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACL,MACA,CACEC,MAAO,yBAET,CAACjB,EAASzI,EAASO,SAIvB,GAAqB,UAAjByB,EAAKiC,QACP,OAAOwF,EAAAA,EACLY,EAAAA,MACA,IACGrI,EAAKC,YAERwG,GAIJ,GAAqB,UAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLa,EAAAA,MACA,IACEtI,EAAKC,YAEPwG,GAIJ,GAAqB,WAAjBzG,EAAKiC,QAEP,OAAOwF,EAAAA,EACLc,EAAAA,OACA,IACKvI,EAAKC,YAEVwG,GAIJ,GAAqB,aAAjBzG,EAAKiC,QAAwB,CAC/B,MAAMuG,EAAa,CAAA,EAgBnB,OAbIxI,OAAAA,EAAAA,EAAKwI,YAALxI,EAAAA,EAAYyI,UACdD,EAAMC,OAAS,IACNzI,EAAKwI,MAAMC,OAAOX,IAAKY,GACrBf,GAAYe,EAAUd,KAM/BnB,GAAYA,EAAS3G,OAAS,IAChC0I,EAAMrM,QAAU,IAAMsK,GAGjBgB,EAAAA,EACLkB,EACA,IACK3I,EAAKC,YAEVuI,EAEJ,CAEA,GAAqB,WAAjBxI,EAAKiC,QAAsB,CAC7B,MAAMwE,EAAWzG,OAAAA,IAAKyG,eAALzG,EAAAA,EAAe8H,IAAIpB,GAASiB,GAAYjB,EAAOzI,IAEhE,OADAA,IACOwJ,EAAAA,EACLmB,EAAAA,OACA,CACEzL,IAAKW,EAASS,MAAMsK,IACpBC,MAAOjL,EAASU,MAAMqJ,MACnB5H,EAAKC,WACRE,SAAUJ,EAAcC,IAE1ByG,EAEJ,CAEA,GAAqB,eAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLsB,EAAAA,WACA,IACK/I,EAAKC,YAEVwG,GAIJ,GAAqB,aAAjBzG,EAAKiC,QAAwB,CAC/B,IAAI+G,EAAUhJ,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiBgJ,QAI/B,MAHyB,UAArBhJ,EAAKE,cACP8I,EAAUnB,GAELJ,EAAAA,EACLwB,EAAAA,SACA,IACIjJ,EAAKC,WACRE,SAAUJ,EAAcC,GACvBkJ,QAASA,WA3dJzG,OAAOmF,EAAeuB,EAAgBH,EAAc9I,WACnE,GAAe,eAAXiJ,EAEF,YADAnL,EAASO,OAAS,GAGpB,GAAe,eAAX4K,EAEF,YADAnL,EAASO,OAAS,GAGpB,GAAe,kBAAX4K,EAGF,OAFAhL,EAAUI,OAAQ,OAClB4I,QAAQiC,IAAI,YAAajL,EAAUI,OAIrC,IAAIc,EAAM,CACR8J,SACAH,QAAS,CAAA,GAGPA,GAA2B,SAAhB9I,EACbb,EAAM,CACJ8J,SACAH,kBAGIlL,OAAAA,EAAAA,EAASS,MAAMqJ,SAAf9J,EAAAA,EAAuBuL,YAC7BhK,EAAM,CACJ8J,SACAH,QAAS,IACJnL,EAASU,MAAMqJ,MACfoB,KAIL7K,EAAUI,OAAS4K,EAAO3I,WAAW,WACvCrC,EAAUI,OAAQ,GAEpBxB,EAAK,aAAcsC,IAsbPiK,CAAS1B,EAAQ5H,OAAAA,EAAAA,EAAKC,mBAALD,EAAiBmJ,OAAQH,EAAShJ,EAAKE,eAG5DuG,EAEJ,CAEA,GAAqB,aAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACL8B,EAAAA,SACA,IACGvJ,EAAKC,WACRE,SAAUJ,EAAcC,GACtBwJ,WAAY3L,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,qBAAYwJ,UACpD,sBAAwBlL,UACtBV,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiByJ,UAAYlL,IAGxDkI,GAIJ,GAAqB,iBAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLiC,EAAAA,aACA,IACG1J,EAAKC,WACNE,SAAUJ,EAAcC,GACxBwJ,WAAY3L,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,qBAAYwJ,UACpD,sBAAwBlL,UACtBV,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiByJ,UAAYlL,IAGxDkI,GAIJ,GAAqB,YAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLkC,EAAAA,QACA,IACK3J,EAAKC,WACRE,SAAUJ,EAAcC,GACxBwJ,WAAY3L,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,qBAAYwJ,UACpD,sBAAwBlL,UACtBV,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiByJ,UAAYlL,IAGxDkI,GAIJ,GAAqB,iBAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLmC,EAAAA,aACA,IACK5J,EAAKC,WACRE,SAAUJ,EAAcC,GACxBwJ,WAAY3L,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,qBAAYwJ,UACpD,sBAAwBlL,UACtBV,EAASU,MAAMqJ,GAAQ5H,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiByJ,UAAYlL,IAGxDkI,GAIJ,GAAqB,YAAjBzG,EAAKiC,QAEP,OAAOwF,EAAAA,EACLoC,EAAAA,QACA,IACK7J,EAAKC,WACRE,SAAUJ,EAAcC,IAE1ByG,GAIJ,GAAqB,YAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLqC,EACA,IACI9J,EAAKC,YAETwG,GAIJ,GAAqB,kBAAjBzG,EAAKiC,QACP,OAAOwF,EAAAA,EACLsC,EAAAA,cACA,IACG/J,EAAKC,YAER,CACE9D,QAAU6N,YACR,MAAMvD,EAAWzG,OAAAA,EAAAA,EAAKyG,eAALzG,EAAAA,EAAe8H,IAAIpB,GAASiB,GAAYjB,EAAOzI,EAAS+L,EAAMnC,MACzED,EAAQ5H,OAAAA,EAAAA,EAAKyG,eAALzG,EAAAA,EAAeiK,UAAUvD,UAASA,OAAAA,EAAMnI,QAAUyL,EAAMnC,IAAI7H,OAAAA,EAAAA,EAAKC,iBAALD,EAAAA,EAAiBkK,QAC3F,OAAc,IAAVtC,EACKnB,EAEFA,MAAAA,SAAAA,EAAWmB,MAM1B,GAAqB,aAAjB5H,EAAKiC,QACP,OAAOwF,EAAAA,EACL0C,EACA,IACKnK,EAAKC,aAKd,GAAqB,aAAjBD,EAAKiC,QACP,OAAOwF,EAAAA,EACL2C,EACA,IACIpK,EAAKC,aAKb,GAAqB,eAAjBD,EAAKiC,QACP,OAAOwF,EAAAA,EACL4C,EACA,IACKrK,EAAKC,aAKd,GAAqB,cAAjBD,EAAKiC,QACP,OAAOwF,EAAAA,EACL6C,EACA,IACKtK,EAAKC,aAMd,GAAqB,QAAjBD,EAAKiC,QAAmB,CAC1B,MAAM+E,EAAWhH,OAAAA,EAAAA,EAAKyG,mBAAU7E,KAAK8E,GAA2B,SAAlBA,EAAMzE,SACpD,GAAI+E,IACEA,OAAAA,EAAAA,WAAS/G,iBAAT+G,EAAAA,EAAqBC,gBAArBD,EAAAA,EAAgC5H,SAAS,uBAAuB,CAClE,MAAM8H,GAAOF,OAAAA,EAAAA,OAAAA,EAAAA,EAASP,eAATO,EAAAA,EAAoB,aAAIzI,QAAS,GAE9C,IAt3BQgM,CAAAA,IACtB,IAAKA,GAAqC,IAA1BA,EAAQC,OAAO1K,OAC7B,OAAO,EAGT,MAAM2K,EAAUF,EAAQC,OAGlBE,EAAYD,EAAQ,GAC1B,GAAkB,MAAdC,GAAmC,MAAdA,EACvB,OAAO,EAIT,IAEE,OADAlL,KAAKC,MAAMgL,IACJ,CACT,OAAS/K,GAEP,OAAO,CACT,GAk2BmBiL,CAAezD,GAElB,OAAOM,KAET,IACE,MAAMrB,EAAS3G,KAAKC,MAAMyH,GACpB0D,EAAWC,EAAAA,eAAe1E,GAC1BM,EAAWkB,GAAYiD,EAAU3M,GACvC,OAAOwJ,EAAAA,EAAE,MAAO,CACdC,MAAO,gBACN,CAACjB,GACN,OAAS/G,GAEP,OAAO8H,IACT,CACF,CAEJ,CAGA,OAAOC,EAAAA,EACLzH,EAAKiC,QACLjC,EAAKC,WACLwG,GAGJ,IAAK,OACH,OAAOzG,EAAKzB,MAAMiM,OAEpB,QACE,OAAO,OAQb,OAJAM,EAAAA,UAAU,KACR7M,EAAU,IAGL,CACL0J,eACAzJ,MACAlB,YACAiE,iBACA9C,YACA4M,eA5lBqBA,WACrB,OAAO/N,OAAAA,EAAAA,EAAUuB,YAAVvB,EAAAA,EAAiBgO,WA6lB5B,EACAC,MAAAA,GACE,OAAAC,EAAAA,YAAA,MAAA,CAAA/N,IAAA,uBAAAuK,MAAA,cAAA,CAMMyD,KAAKxD,YAAYwD,KAAKjN,MAI9B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,E)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,E)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return s(e);case"table":return c(e);case"input":return a(e,E);case"select":return o(e,E);case"dateTimePicker":return n(e,E);case"button":return i(e,E);case"tips":return m(e,E);case"text":return u(e,E);case"formfield":return d(e,E);case"column":return l(e,E);case"row":return g(e,E);case"col":return h(e,E);case"result":return r(e,E);case"tag":return v(e,E);case"radioGroup":return y(e,E);case"radio":return N(e,E);case"echart":return S(e,E);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))}},s=r=>{var t;const p={tagName:"CoreCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))};return(null==(t=r.slots)?void 0:t.header)&&(p.slots={header:r.slots.header.map(r=>e(r))}),p},l=(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=>(r.properties.tableProps||(r.properties.tableProps={data:[],...r.properties}),{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}),v=(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},S=(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 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: 'CoreCard',\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 // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\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","tableProps","data","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 const result: any = {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n };\n \n // 处理 header 插槽\n if (schema.slots?.header) {\n result.slots = {\n header: schema.slots.header.map((item) => {\n return parseSchema(item);\n })\n };\n }\n \n return result;\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 // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\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","result","slots","header","tableProps","data","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}
|