@core-pilot/client-vue 0.0.3 → 0.0.5
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-table/index.js +2 -0
- package/dist/cjs/components/core-table/index.js.map +1 -0
- package/dist/cjs/components/editor-sender/index.js +1 -1
- package/dist/cjs/components/editor-sender/index.js.map +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue.js +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue2.js +1 -1
- package/dist/cjs/components/editor-sender/source/index.vue2.js.map +1 -1
- package/dist/cjs/components/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/cjs/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 +2 -0
- package/dist/cjs/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.map +1 -0
- package/dist/cjs/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 +2 -0
- package/dist/cjs/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.map +1 -0
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/core-table/index.js +107 -0
- package/dist/es/components/core-table/index.js.map +1 -0
- package/dist/es/components/editor-sender/index.js +2 -3
- package/dist/es/components/editor-sender/index.js.map +1 -1
- package/dist/es/components/editor-sender/source/index.vue.js +1 -1
- package/dist/es/components/editor-sender/source/index.vue2.js +0 -1
- package/dist/es/components/editor-sender/source/index.vue2.js.map +1 -1
- package/dist/es/components/index.js +2 -0
- package/dist/es/components/index.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +23 -14
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +65 -54
- 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/dist/es/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 +189 -0
- package/dist/es/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.map +1 -0
- package/dist/es/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 +2 -0
- package/dist/es/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.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),s=require("element-plus");/* 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/tooltip.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */;/* empty css */const l=e.defineComponent({props:{tableProps:{type:Object,default:()=>({})},showPagination:{type:Boolean,default:!0},paginationProps:{type:Object,default:()=>({})}},setup(s){var l,t;const u=e.ref([]),n=e.computed(()=>{var e;return(null==(e=s.tableProps)?void 0:e.data)||[]}),a=e.ref((null==(l=s.paginationProps)?void 0:l.currentPage)||1),o=e.ref((null==(t=s.paginationProps)?void 0:t.pageSize)||10);e.watch(()=>[n.value,s.showPagination],([e,s])=>{var l;u.value=s?null==(l=n.value)?void 0:l.slice((a.value-1)*o.value,a.value*o.value):n.value},{immediate:!0}),e.watch(()=>a.value,e=>{var s;u.value=null==(s=n.value)?void 0:s.slice((e-1)*o.value,e*o.value)},{immediate:!0}),e.watch(()=>o.value,e=>{var s;u.value=null==(s=n.value)?void 0:s.slice((a.value-1)*e,a.value*e)},{immediate:!0});return{data:u,onSizeChange:e=>{o.value=e,a.value=1},onCurrentChange:e=>{a.value=e},curPage:a,pageSize:o}},render(){var l,t,u,n;return e.createVNode("div",{class:"core-table"},[e.createVNode(s.ElTable,{...this.tableProps,data:this.data},{default:()=>{var e,s;return[null==(s=(e=this.$slots).default)?void 0:s.call(e)]}}),this.showPagination?e.createVNode(s.ElPagination,{class:"core-table-pagination","current-page":this.curPage,"onUpdate:current-page":e=>this.curPage=e,"page-size":this.pageSize,"onUpdate:page-size":e=>this.pageSize=e,"page-sizes":(null==(l=this.paginationProps)?void 0:l.pageSizes)||[10,20,30,40],layout:(null==(t=this.paginationProps)?void 0:t.layout)||"total, sizes, prev, pager, next, jumper",total:null==(n=null==(u=this.tableProps)?void 0:u.data)?void 0:n.length,"onSize-change":this.onSizeChange,"onCurrent-change":this.onCurrentChange},null):null])}});module.exports=l;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/core-table/index.tsx"],"sourcesContent":["import { computed, defineComponent, PropType, ref, watch } from 'vue';\nimport { ElTable, ElPagination, PaginationProps, TableProps } from 'element-plus';\nimport './style.less';\n\nexport default defineComponent({\n // 取ElTable 对应的定义\n props: {\n tableProps: {\n type: Object as PropType<TableProps<any>>,\n default: () => ({}),\n },\n showPagination: {\n type: Boolean,\n default: true,\n },\n paginationProps: {\n type: Object as PropType<PaginationProps>,\n default: () => ({}),\n },\n },\n setup(props) {\n const data = ref<any[]>([]);\n const dataSource = computed(() => {\n return props.tableProps?.data || [];\n });\n const curPage = ref(props.paginationProps?.currentPage || 1);\n const pageSize = ref(props.paginationProps?.pageSize || 10);\n\n watch(() => [dataSource.value, props.showPagination], ([newVal, showPagination]) => {\n if (!showPagination) {\n data.value = dataSource.value;\n return;\n }\n data.value = dataSource.value?.slice((curPage.value - 1) * pageSize.value, curPage.value * pageSize.value);\n }, {\n immediate: true,\n });\n\n watch(() => curPage.value, (newVal) => {\n data.value = dataSource.value?.slice((newVal - 1) * pageSize.value, newVal * pageSize.value);\n }, {\n immediate: true,\n });\n\n watch(() => pageSize.value, (newVal) => {\n data.value = dataSource.value?.slice((curPage.value - 1) * newVal, curPage.value * newVal);\n }, {\n immediate: true,\n });\n\n const onSizeChange = (size: number) => {\n pageSize.value = size;\n curPage.value = 1;\n };\n\n const onCurrentChange = (current: number) => {\n curPage.value = current;\n };\n\n return {\n data,\n onSizeChange,\n onCurrentChange,\n curPage,\n pageSize,\n }\n },\n render() {\n return (\n <div\n class=\"core-table\"\n >\n <ElTable \n {...{\n ...this.tableProps,\n data: this.data,\n }}\n >\n {this.$slots.default?.()}\n </ElTable>\n {\n this.showPagination ? (\n <ElPagination\n class=\"core-table-pagination\"\n v-model:current-page={this.curPage}\n v-model:page-size={this.pageSize}\n page-sizes={this.paginationProps?.pageSizes || [10, 20, 30, 40]}\n layout={this.paginationProps?.layout || 'total, sizes, prev, pager, next, jumper' }\n total={this.tableProps?.data?.length}\n onSize-change={this.onSizeChange}\n onCurrent-change={this.onCurrentChange}\n />\n ) : null\n }\n </div>\n );\n }\n});\n"],"names":["CoreTable","props","tableProps","type","Object","default","showPagination","Boolean","paginationProps","setup","data","ref","dataSource","computed","curPage","currentPage","pageSize","watch","value","newVal","slice","immediate","onSizeChange","size","onCurrentChange","current","render","_createVNode","class","ElTable","this","_b","_a","$slots","call","ElPagination","$event","pageSizes","layout","total","_d","_c","length"],"mappings":"0wDAIA,MAAAA,oBAA+B,CAE7BC,MAAO,CACLC,WAAY,CACVC,KAAMC,OACNC,QAASA,MAAO,IAElBC,eAAgB,CACdH,KAAMI,QACNF,SAAS,GAEXG,gBAAiB,CACfL,KAAMC,OACNC,QAASA,MAAO,KAGpBI,KAAAA,CAAMR,WACJ,MAAMS,EAAOC,EAAAA,IAAW,IAClBC,EAAaC,EAAAA,SAAS,WAC1B,OAAOZ,OAAAA,EAAAA,EAAMC,iBAAND,EAAAA,EAAkBS,OAAQ,KAE7BI,EAAUH,EAAAA,KAAIV,OAAAA,IAAMO,sBAANP,EAAAA,EAAuBc,cAAe,GACpDC,EAAWL,EAAAA,KAAIV,OAAAA,IAAMO,sBAANP,EAAAA,EAAuBe,WAAY,IAExDC,QAAM,IAAM,CAACL,EAAWM,MAAOjB,EAAMK,gBAAiB,EAAEa,EAAQb,YAK9DI,EAAKQ,MAJAZ,EAIQM,OAAAA,EAAAA,EAAWM,cAAXN,EAAkBQ,OAAON,EAAQI,MAAQ,GAAKF,EAASE,MAAOJ,EAAQI,MAAQF,EAASE,OAHrFN,EAAWM,OAIzB,CACDG,WAAW,IAGbJ,EAAAA,MAAM,IAAMH,EAAQI,MAAQC,UAC1BT,EAAKQ,MAAQN,OAAAA,EAAAA,EAAWM,YAAXN,EAAAA,EAAkBQ,OAAOD,EAAS,GAAKH,EAASE,MAAOC,EAASH,EAASE,QACrF,CACDG,WAAW,IAGbJ,EAAAA,MAAM,IAAMD,EAASE,MAAQC,UAC3BT,EAAKQ,MAAQN,OAAAA,EAAAA,EAAWM,YAAXN,EAAAA,EAAkBQ,OAAON,EAAQI,MAAQ,GAAKC,EAAQL,EAAQI,MAAQC,IAClF,CACDE,WAAW,IAYb,MAAO,CACLX,OACAY,aAXoBC,IACpBP,EAASE,MAAQK,EACjBT,EAAQI,MAAQ,GAUhBM,gBAPuBC,IACvBX,EAAQI,MAAQO,GAOhBX,UACAE,WAEJ,EACAU,MAAAA,eACE,OAAAC,EAAAA,YAAA,MAAA,CAAAC,MAAA,cAAA,CAAAD,EAAAA,YAAAE,UAAA,IAMWC,KAAK5B,WACRQ,KAAMoB,KAAKpB,MAAI,CAAAL,QAAAA,aAAA,MAAA,CAGhB,OAAA0B,GAAAC,EAAAF,KAAKG,QAAO5B,cAAZ,EAAA0B,EAAAG,KAAAF,OAGDF,KAAKxB,eAAcqB,EAAAA,YAAAQ,EAAAA,aAAA,CAAAP,MAAA,wBAAA,eAGOE,KAAKhB,QAAO,wBAAAsB,GAAZN,KAAKhB,QAAOsB,EAAA,YACfN,KAAKd,SAAQ,qBAAAoB,GAAbN,KAAKd,SAAQoB,EAAA,cACpB,OAAAJ,OAAKxB,sBAAL,EAAAwB,EAAsBK,YAAa,CAAC,GAAI,GAAI,GAAI,IAAGC,QACvD,OAAAP,EAAAD,KAAKtB,sBAAL,EAAAuB,EAAsBO,SAAU,0CAAyCC,MAC1E,OAAAC,EAAA,OAAAC,EAAAX,KAAK5B,iBAAL,EAAAuC,EAAiB/B,WAAjB,EAAA8B,EAAuBE,OAAM,gBACrBZ,KAAKR,aAAY,mBACdQ,KAAKN,iBAAe,MAEtC,MAIZ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]}},emits:["cancel","submit","sceneChange"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref(a.sceneList[0]),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=r.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=o.value)||e.clear(),null==(a=o.value)||a.setText(t)})}),e.watch(()=>a.sceneList,e=>{e.length>0&&(c.value=e[0])},{immediate:!0});const v=()=>{s("cancel")},g=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},f=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=o.value)?void 0:e.getCurrentValue();g(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:g,changeHandler:()=>{var e,t
|
|
1
|
+
"use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]}},emits:["cancel","submit","sceneChange"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref(a.sceneList[0]),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=r.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=o.value)||e.clear(),null==(a=o.value)||a.setText(t)})}),e.watch(()=>a.sceneList,e=>{e.length>0&&(c.value=e[0])},{immediate:!0});const v=()=>{s("cancel")},g=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},f=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=o.value)?void 0:e.getCurrentValue();g(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:g,changeHandler:()=>{var e,t;p.value=null==(t=null==(e=o.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:f,handleUploadSuccess:h,handleUploadBefore:y,handleUploadExceed:x,removeFile:N,handleUploadRemove:_,submitBtnClick:b,getSlots:()=>{const o={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:u.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-u.value.length,data:a.extendData,beforeUpload:y,headers:a.headers,onError:f,onSuccess:h,onExceed:x,onRemove:_,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}),a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"split-line"},null),e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:c.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,c.value=e,void s("sceneChange",e);var e}},[t.name]))])]):null]),a.loading?e.createVNode(i,{class:"sender-cancel",onCancel:v},null):e.createVNode("div",{class:{"sender-btn":!0,active:!p.value},onClick:b},null)])};return(u.value.length>0||a.tagList.length>0)&&(o.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[u.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:N},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:m.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{m.value=t}},[t.name]))])])),o}}},render(){let t;return e.createVNode("div",{class:"editor-sender-wrapper",ref:"editorSenderWrapper"},[e.createVNode(a,{ref:"editorSender",variant:"updown",loading:this.loading,placeholder:this.placeholder,activeTag:this.activeTag,onSubmit:this.submitHandler,onCancel:this.cancelHandler,onChange:this.changeHandler,"custom-style":this.customStyle},(l=t=this.getSlots(),"function"==typeof l||"[object Object]"===Object.prototype.toString.call(l)&&!e.isVNode(l)?t:{default:()=>[t]}))]);var l}});module.exports=s;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n },\n emits: ['cancel', 'submit', 'sceneChange'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n const activeScene = ref(props.sceneList[0]);\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n console.log('changeHandler', editorSender.value?.chatState?.isEmpty);\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={props.extendData}\n beforeUpload={handleUploadBefore}\n headers={props.headers}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","submitHandler","res","text","file","map","item","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","find","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","console","log","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","scene","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n },\n emits: ['cancel', 'submit', 'sceneChange'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n const activeScene = ref(props.sceneList[0]);\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={props.extendData}\n beforeUpload={handleUploadBefore}\n headers={props.headers}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","submitHandler","res","text","file","map","item","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","find","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","scene","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("./index.vue2.js");;/* empty css */const s=require("../../../_virtual/_plugin-vue_export-helper.js")(e,[["__scopeId","data-v-
|
|
1
|
+
"use strict";const e=require("./index.vue2.js");;/* empty css */const s=require("../../../_virtual/_plugin-vue_export-helper.js")(e,[["__scopeId","data-v-5619e038"]]);module.exports=s;
|
|
2
2
|
//# sourceMappingURL=index.vue.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),t=require("../../../node_modules/.pnpm/chatarea@6.0.6/node_modules/chatarea/lib/ChatArea.js"),a=require("./components/ClearButton/index.vue.js"),l=require("./components/LoadingButton/index.vue.js"),n=require("./components/SendButton/index.vue.js");;/* empty css */const o={key:0,class:"el-editor-sender-header"},s={class:"el-editor-sender-header-container"},i={key:0,class:"el-editor-sender-prefix"},r={key:1,class:"el-editor-sender-active-tag"},u={key:0,class:"el-editor-sender-action-list"},d={class:"el-editor-sender-action-list-presets"},c={key:1,class:"el-editor-sender-updown-action-list"},v={class:"el-editor-sender-action-list"},p={class:"el-editor-sender-action-list-presets"},g={key:0,class:"el-editor-sender-footer"},m=e.defineComponent({__name:"index",props:{placeholder:{default:"请输入内容"},device:{default:"pc"},autoFocus:{type:Boolean,default:!1},variant:{default:"default"},userList:{default:()=>[]},customTrigger:{default:()=>[]},selectList:{default:()=>[]},maxLength:{default:void 0},submitType:{default:"enter"},customStyle:{default:()=>({})},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},headerAnimationTimer:{default:300},asyncMatchFun:{type:Function,default:void 0},customDialog:{type:Boolean,default:!1},activeTag:{default:null}},emits:["submit","change","cancel","showAtDialog","showSelectDialog","showTagDialog","pasteFile"],setup(m,{expose:f,emit:y}){const h=m,T=y,k=e.getCurrentInstance(),C=e.computed(()=>{var e;return!!(null==(e=null==k?void 0:k.vnode.props)?void 0:e.onPasteFile)}),E=e.ref(),b=e.ref(),x=e.ref(),w=e.reactive({isEmpty:!0,textLength:0,lastFocusNode:null,lastOffset:0,wrapCallSelectDialog:!1,beforeText:"",afterText:""});function B(){return{text:E.value.getText(),html:E.value.getHtml(),inputTags:E.value.getInputTagList(),userTags:h.userList.length>0?E.value.getCallUserTagList():void 0,selectTags:h.selectList.length>0?E.value.getSelectTagList():void 0,customTags:h.customTrigger.length>0?E.value.getCustomTagList():void 0}}function L(){w.isEmpty||T("submit",B())}function S(){T("cancel")}function N(e){E.value.clear(e),V()}function D(){requestAnimationFrame(()=>{var e;const t=null==(e=w.lastFocusNode)?void 0:e.parentElement,a=E.value.chatInput;t&&t.classList.contains("input-write")?a.setInputTagRange(w.lastFocusNode,w.lastOffset):a.restCursorPos(a.vnode,a.cursorIndex)})}function V(){E.value&&b.value&&b.value.setCursorNode(b.value.getNodeByRank(b.value.getRank(-1)+b.value.getRank(-1)))}function F(e){var t,a,l,n,o,s,i,r;const{type:u,value:d,key:c}=e;switch(u){case"userTag":return(null==(a=null==(t=h.userList)?void 0:t.find(e=>e.id===d))?void 0:a.name)||"";case"selectTag":return(null==(o=null==(n=null==(l=h.selectList)?void 0:l.find(e=>e.key===c))?void 0:n.options.find(e=>e.id===d))?void 0:o.name)||"";case"customTag":return(null==(r=null==(i=null==(s=h.customTrigger)?void 0:s.find(e=>e.prefix===c))?void 0:i.tagList.find(e=>e.id===d))?void 0:r.name)||"";default:return""}}function R(){var e;null==(e=E.value)||e.closeTipTag()}function K(e){"Escape"===e.key&&R()}function M(e){var t;const a=null==(t=e.clipboardData)?void 0:t.files;(null==a?void 0:a.length)&&C.value&&(T("pasteFile",a[0],a),e.preventDefault())}return e.watch(()=>h.disabled,()=>{var e,t;h.disabled?null==(e=E.value)||e.disabled():null==(t=E.value)||t.enable()}),e.watch(()=>h.placeholder,()=>{var e;null==(e=E.value)||e.updateConfig({placeholder:h.placeholder})}),e.watch(()=>h.maxLength,()=>{var e;null==(e=E.value)||e.updateConfig({maxLength:h.maxLength})}),e.watch(()=>h.submitType,()=>{var e;null==(e=E.value)||e.updateConfig({sendKeyFun:"enter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key,wrapKeyFun:"shiftEnter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key})}),e.watch(()=>h.userList,()=>{var e;null==(e=E.value)||e.updateConfig({userList:h.userList})},{deep:!0}),e.watch(()=>h.selectList,()=>{var e;null==(e=E.value)||e.updateConfig({selectList:h.selectList})},{deep:!0}),e.watch(()=>h.customTrigger,()=>{var e;null==(e=E.value)||e.updateConfig({customTrigger:h.customTrigger})},{deep:!0}),e.onMounted(()=>{E.value=new t({elm:x.value,...h,userList:JSON.parse(JSON.stringify(h.userList)),needDialog:!h.customDialog&&"pc"===h.device,copyType:["text"],asyncMatch:Boolean(h.asyncMatchFun),needDebounce:!0,needCallSpace:!1,sendKeyFun:"enter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key,wrapKeyFun:"shiftEnter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key}),b.value=E.value.createOperateNode(),E.value.addEventListener("enterSend",L),E.value.addEventListener("operate",()=>{console.log("operate"),w.isEmpty=E.value.isEmpty(!0),w.textLength=E.value.textLength,T("change")}),E.value.richText.addEventListener("blur",()=>{const e=getSelection();w.lastFocusNode=e.focusNode,w.lastOffset=e.focusOffset},!0),E.value.addEventListener("selectCheck",()=>{var e;w.wrapCallSelectDialog&&w.beforeText&&(null==(e=E.value)||e.insertText(w.beforeText),w.beforeText="")}),E.value.addEventListener("afterSelectCheck",()=>{var e;w.wrapCallSelectDialog&&w.afterText&&(null==(e=E.value)||e.insertText(w.afterText),w.afterText="",w.wrapCallSelectDialog=!1)}),h.asyncMatchFun&&E.value.addEventListener("atMatch",h.asyncMatchFun),E.value.addEventListener("showAtDialog",()=>{T("showAtDialog")}),E.value.addEventListener("showSelectDialog",(e,t)=>{T("showSelectDialog",e,t)}),E.value.addEventListener("showTagDialog",e=>{T("showTagDialog",e)}),h.disabled&&E.value.disabled(),window.addEventListener("keydown",K)}),e.onBeforeUnmount(()=>{E.value&&(E.value.dispose(),E.value=void 0,b.value=void 0,window.removeEventListener("keydown",K))}),f({getCurrentValue:B,focusToStart:function(){E.value&&b.value&&b.value.setCursorNode(b.value.getNodeByRank(b.value.getRank(0)+b.value.getRank(0)),0)},focusToEnd:V,blur:function(){if(E.value){getSelection().removeAllRanges(),E.value.richText.blur()}},selectAll:function(){if(E.value&&b.value){const e=b.value.getNodeByRank(b.value.getRank(0)+b.value.getRank(0)),t=b.value.getNodeByRank(b.value.getRank(-1)+b.value.getRank(-1));b.value.setSelectNodes(e,t)}},clear:N,setSelectTag:function(e,t){var a,l,n;w.wrapCallSelectDialog=!1;const o=null==(l=null==(a=h.selectList)?void 0:a.find(t=>t.key===e))?void 0:l.options.find(e=>e.id===t);o&&(null==(n=E.value)||n.setSelectTag(o,e))},setInputTag:function(e,t,a){var l;null==(l=E.value)||l.setInputTag(e,t,a)},setUserTag:function(e){var t,a;const l=null==(t=h.userList)?void 0:t.find(t=>t.id===e);l&&(null==(a=E.value)||a.setUserTag(l))},setCustomTag:function(e,t){var a,l,n;const o=null==(l=null==(a=h.customTrigger)?void 0:a.find(t=>t.prefix===e))?void 0:l.tagList.find(e=>e.id===t);o&&(null==(n=E.value)||n.setCustomTag(o,e))},setMixTags:function(e){var t;const a=e.map((e,t)=>{var a;return{type:"gridBox",rank:null==(a=b.value)?void 0:a.getRank(t),children:e.map(e=>({type:e.type,text:e.value,html:e.value,dataset:{id:e.value,name:F(e),prefix:e.key,key:e.key,placeholder:e.placeholder,value:e.value}}))}});null==(t=b.value)||t.coverNodes(a)},setHtml:function(e){var t;null==(t=E.value)||t.insertHtml(e)},setText:function(e){var t;null==(t=E.value)||t.insertText(e)},openSelectDialog:function(e){var t;w.beforeText=e.beforeText||"",w.afterText=e.afterText||"",w.wrapCallSelectDialog=!0,null==(t=E.value)||t.showPCSelectDialog(e.key,e.elm)},customSetUser:function(e){E.value.onceSetTag(e)},customSetTag:function(e,t){E.value.onceSetCustomTag(t,e)},updateSelectTag:function(e,t){var a,l,n;const o=null==(a=b.value)?void 0:a.getRankByElm(e.parentElement);if(!o)return;const s=null==(l=b.value)?void 0:l.getNodeByRank(o);if(!s)return;const i=s.dataset;i.id=t.id,i.name=t.name,null==(n=b.value)||n.updateNode(s)},openTipTag:function(e){var t;null==(t=E.value)||t.openTipTag({...e,codeLabel:"ESC"})},closeTipTag:R,chat:E,opNode:b,chatState:w}),(t,f)=>(e.openBlock(),e.createElementBlock("div",{class:"el-editor-sender-wrap",style:e.normalizeStyle({"--el-editor-sender-header-duration":`${m.headerAnimationTimer}ms`})},[e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[t.$slots.header?(e.openBlock(),e.createElementBlock("div",o,[e.createElementVNode("div",s,[e.renderSlot(t.$slots,"header",{},void 0,!0)])])):e.createCommentVNode("",!0)]),_:3}),e.createElementVNode("div",{class:e.normalizeClass(["el-editor-sender-content",{"content-variant-updown":"updown"===h.variant}]),onMousedown:D},[e.createElementVNode("div",{class:"el-editor-sender-chat-room",onMousedown:e.withModifiers(()=>{},["stop"])},[t.$slots.prefix?(e.openBlock(),e.createElementBlock("div",i,[e.renderSlot(t.$slots,"prefix",{},void 0,!0)])):e.createCommentVNode("",!0),h.activeTag?(e.openBlock(),e.createElementBlock("span",r,e.toDisplayString(h.activeTag.name),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"container",ref:x,style:e.normalizeStyle({...m.customStyle}),class:"el-editor-sender-chat",onPaste:M},null,36)],32),"default"===h.variant?(e.openBlock(),e.createElementBlock("div",u,[e.renderSlot(t.$slots,"action-list",{},()=>[e.createElementVNode("div",d,[h.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(n,{key:0,disabled:w.isEmpty||h.disabled,onSubmit:L},null,8,["disabled"])),h.loading?(e.openBlock(),e.createBlock(l,{key:1,onCancel:S})):e.createCommentVNode("",!0),h.clearable?(e.openBlock(),e.createBlock(a,{key:2,disabled:w.isEmpty||h.disabled,onClear:N},null,8,["disabled"])):e.createCommentVNode("",!0)])],!0)])):"updown"===h.variant?(e.openBlock(),e.createElementBlock("div",c,[e.createElementVNode("div",v,[e.renderSlot(t.$slots,"action-list",{},()=>[e.createElementVNode("div",p,[h.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(n,{key:0,disabled:w.isEmpty||h.disabled,onSubmit:L},null,8,["disabled"])),h.loading?(e.openBlock(),e.createBlock(l,{key:1,onCancel:S})):e.createCommentVNode("",!0),h.clearable?(e.openBlock(),e.createBlock(a,{key:2,disabled:w.isEmpty||h.disabled,onClear:N},null,8,["disabled"])):e.createCommentVNode("",!0)])],!0)])])):e.createCommentVNode("",!0)],34),e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[t.$slots.footer?(e.openBlock(),e.createElementBlock("div",g,[e.renderSlot(t.$slots,"footer",{},void 0,!0)])):e.createCommentVNode("",!0)]),_:3})],4))}});module.exports=m;
|
|
1
|
+
"use strict";const e=require("vue"),t=require("../../../node_modules/.pnpm/chatarea@6.0.6/node_modules/chatarea/lib/ChatArea.js"),a=require("./components/ClearButton/index.vue.js"),l=require("./components/LoadingButton/index.vue.js"),n=require("./components/SendButton/index.vue.js");;/* empty css */const o={key:0,class:"el-editor-sender-header"},s={class:"el-editor-sender-header-container"},i={key:0,class:"el-editor-sender-prefix"},r={key:1,class:"el-editor-sender-active-tag"},u={key:0,class:"el-editor-sender-action-list"},d={class:"el-editor-sender-action-list-presets"},c={key:1,class:"el-editor-sender-updown-action-list"},v={class:"el-editor-sender-action-list"},p={class:"el-editor-sender-action-list-presets"},g={key:0,class:"el-editor-sender-footer"},m=e.defineComponent({__name:"index",props:{placeholder:{default:"请输入内容"},device:{default:"pc"},autoFocus:{type:Boolean,default:!1},variant:{default:"default"},userList:{default:()=>[]},customTrigger:{default:()=>[]},selectList:{default:()=>[]},maxLength:{default:void 0},submitType:{default:"enter"},customStyle:{default:()=>({})},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},headerAnimationTimer:{default:300},asyncMatchFun:{type:Function,default:void 0},customDialog:{type:Boolean,default:!1},activeTag:{default:null}},emits:["submit","change","cancel","showAtDialog","showSelectDialog","showTagDialog","pasteFile"],setup(m,{expose:f,emit:y}){const h=m,T=y,k=e.getCurrentInstance(),C=e.computed(()=>{var e;return!!(null==(e=null==k?void 0:k.vnode.props)?void 0:e.onPasteFile)}),E=e.ref(),b=e.ref(),x=e.ref(),w=e.reactive({isEmpty:!0,textLength:0,lastFocusNode:null,lastOffset:0,wrapCallSelectDialog:!1,beforeText:"",afterText:""});function B(){return{text:E.value.getText(),html:E.value.getHtml(),inputTags:E.value.getInputTagList(),userTags:h.userList.length>0?E.value.getCallUserTagList():void 0,selectTags:h.selectList.length>0?E.value.getSelectTagList():void 0,customTags:h.customTrigger.length>0?E.value.getCustomTagList():void 0}}function L(){w.isEmpty||T("submit",B())}function S(){T("cancel")}function N(e){E.value.clear(e),V()}function D(){requestAnimationFrame(()=>{var e;const t=null==(e=w.lastFocusNode)?void 0:e.parentElement,a=E.value.chatInput;t&&t.classList.contains("input-write")?a.setInputTagRange(w.lastFocusNode,w.lastOffset):a.restCursorPos(a.vnode,a.cursorIndex)})}function V(){E.value&&b.value&&b.value.setCursorNode(b.value.getNodeByRank(b.value.getRank(-1)+b.value.getRank(-1)))}function F(e){var t,a,l,n,o,s,i,r;const{type:u,value:d,key:c}=e;switch(u){case"userTag":return(null==(a=null==(t=h.userList)?void 0:t.find(e=>e.id===d))?void 0:a.name)||"";case"selectTag":return(null==(o=null==(n=null==(l=h.selectList)?void 0:l.find(e=>e.key===c))?void 0:n.options.find(e=>e.id===d))?void 0:o.name)||"";case"customTag":return(null==(r=null==(i=null==(s=h.customTrigger)?void 0:s.find(e=>e.prefix===c))?void 0:i.tagList.find(e=>e.id===d))?void 0:r.name)||"";default:return""}}function R(){var e;null==(e=E.value)||e.closeTipTag()}function K(e){"Escape"===e.key&&R()}function M(e){var t;const a=null==(t=e.clipboardData)?void 0:t.files;(null==a?void 0:a.length)&&C.value&&(T("pasteFile",a[0],a),e.preventDefault())}return e.watch(()=>h.disabled,()=>{var e,t;h.disabled?null==(e=E.value)||e.disabled():null==(t=E.value)||t.enable()}),e.watch(()=>h.placeholder,()=>{var e;null==(e=E.value)||e.updateConfig({placeholder:h.placeholder})}),e.watch(()=>h.maxLength,()=>{var e;null==(e=E.value)||e.updateConfig({maxLength:h.maxLength})}),e.watch(()=>h.submitType,()=>{var e;null==(e=E.value)||e.updateConfig({sendKeyFun:"enter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key,wrapKeyFun:"shiftEnter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key})}),e.watch(()=>h.userList,()=>{var e;null==(e=E.value)||e.updateConfig({userList:h.userList})},{deep:!0}),e.watch(()=>h.selectList,()=>{var e;null==(e=E.value)||e.updateConfig({selectList:h.selectList})},{deep:!0}),e.watch(()=>h.customTrigger,()=>{var e;null==(e=E.value)||e.updateConfig({customTrigger:h.customTrigger})},{deep:!0}),e.onMounted(()=>{E.value=new t({elm:x.value,...h,userList:JSON.parse(JSON.stringify(h.userList)),needDialog:!h.customDialog&&"pc"===h.device,copyType:["text"],asyncMatch:Boolean(h.asyncMatchFun),needDebounce:!0,needCallSpace:!1,sendKeyFun:"enter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key,wrapKeyFun:"shiftEnter"===h.submitType?e=>!e.shiftKey&&"Enter"===e.key:e=>e.shiftKey&&"Enter"===e.key}),b.value=E.value.createOperateNode(),E.value.addEventListener("enterSend",L),E.value.addEventListener("operate",()=>{w.isEmpty=E.value.isEmpty(!0),w.textLength=E.value.textLength,T("change")}),E.value.richText.addEventListener("blur",()=>{const e=getSelection();w.lastFocusNode=e.focusNode,w.lastOffset=e.focusOffset},!0),E.value.addEventListener("selectCheck",()=>{var e;w.wrapCallSelectDialog&&w.beforeText&&(null==(e=E.value)||e.insertText(w.beforeText),w.beforeText="")}),E.value.addEventListener("afterSelectCheck",()=>{var e;w.wrapCallSelectDialog&&w.afterText&&(null==(e=E.value)||e.insertText(w.afterText),w.afterText="",w.wrapCallSelectDialog=!1)}),h.asyncMatchFun&&E.value.addEventListener("atMatch",h.asyncMatchFun),E.value.addEventListener("showAtDialog",()=>{T("showAtDialog")}),E.value.addEventListener("showSelectDialog",(e,t)=>{T("showSelectDialog",e,t)}),E.value.addEventListener("showTagDialog",e=>{T("showTagDialog",e)}),h.disabled&&E.value.disabled(),window.addEventListener("keydown",K)}),e.onBeforeUnmount(()=>{E.value&&(E.value.dispose(),E.value=void 0,b.value=void 0,window.removeEventListener("keydown",K))}),f({getCurrentValue:B,focusToStart:function(){E.value&&b.value&&b.value.setCursorNode(b.value.getNodeByRank(b.value.getRank(0)+b.value.getRank(0)),0)},focusToEnd:V,blur:function(){if(E.value){getSelection().removeAllRanges(),E.value.richText.blur()}},selectAll:function(){if(E.value&&b.value){const e=b.value.getNodeByRank(b.value.getRank(0)+b.value.getRank(0)),t=b.value.getNodeByRank(b.value.getRank(-1)+b.value.getRank(-1));b.value.setSelectNodes(e,t)}},clear:N,setSelectTag:function(e,t){var a,l,n;w.wrapCallSelectDialog=!1;const o=null==(l=null==(a=h.selectList)?void 0:a.find(t=>t.key===e))?void 0:l.options.find(e=>e.id===t);o&&(null==(n=E.value)||n.setSelectTag(o,e))},setInputTag:function(e,t,a){var l;null==(l=E.value)||l.setInputTag(e,t,a)},setUserTag:function(e){var t,a;const l=null==(t=h.userList)?void 0:t.find(t=>t.id===e);l&&(null==(a=E.value)||a.setUserTag(l))},setCustomTag:function(e,t){var a,l,n;const o=null==(l=null==(a=h.customTrigger)?void 0:a.find(t=>t.prefix===e))?void 0:l.tagList.find(e=>e.id===t);o&&(null==(n=E.value)||n.setCustomTag(o,e))},setMixTags:function(e){var t;const a=e.map((e,t)=>{var a;return{type:"gridBox",rank:null==(a=b.value)?void 0:a.getRank(t),children:e.map(e=>({type:e.type,text:e.value,html:e.value,dataset:{id:e.value,name:F(e),prefix:e.key,key:e.key,placeholder:e.placeholder,value:e.value}}))}});null==(t=b.value)||t.coverNodes(a)},setHtml:function(e){var t;null==(t=E.value)||t.insertHtml(e)},setText:function(e){var t;null==(t=E.value)||t.insertText(e)},openSelectDialog:function(e){var t;w.beforeText=e.beforeText||"",w.afterText=e.afterText||"",w.wrapCallSelectDialog=!0,null==(t=E.value)||t.showPCSelectDialog(e.key,e.elm)},customSetUser:function(e){E.value.onceSetTag(e)},customSetTag:function(e,t){E.value.onceSetCustomTag(t,e)},updateSelectTag:function(e,t){var a,l,n;const o=null==(a=b.value)?void 0:a.getRankByElm(e.parentElement);if(!o)return;const s=null==(l=b.value)?void 0:l.getNodeByRank(o);if(!s)return;const i=s.dataset;i.id=t.id,i.name=t.name,null==(n=b.value)||n.updateNode(s)},openTipTag:function(e){var t;null==(t=E.value)||t.openTipTag({...e,codeLabel:"ESC"})},closeTipTag:R,chat:E,opNode:b,chatState:w}),(t,f)=>(e.openBlock(),e.createElementBlock("div",{class:"el-editor-sender-wrap",style:e.normalizeStyle({"--el-editor-sender-header-duration":`${m.headerAnimationTimer}ms`})},[e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[t.$slots.header?(e.openBlock(),e.createElementBlock("div",o,[e.createElementVNode("div",s,[e.renderSlot(t.$slots,"header",{},void 0,!0)])])):e.createCommentVNode("",!0)]),_:3}),e.createElementVNode("div",{class:e.normalizeClass(["el-editor-sender-content",{"content-variant-updown":"updown"===h.variant}]),onMousedown:D},[e.createElementVNode("div",{class:"el-editor-sender-chat-room",onMousedown:e.withModifiers(()=>{},["stop"])},[t.$slots.prefix?(e.openBlock(),e.createElementBlock("div",i,[e.renderSlot(t.$slots,"prefix",{},void 0,!0)])):e.createCommentVNode("",!0),h.activeTag?(e.openBlock(),e.createElementBlock("span",r,e.toDisplayString(h.activeTag.name),1)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"container",ref:x,style:e.normalizeStyle({...m.customStyle}),class:"el-editor-sender-chat",onPaste:M},null,36)],32),"default"===h.variant?(e.openBlock(),e.createElementBlock("div",u,[e.renderSlot(t.$slots,"action-list",{},()=>[e.createElementVNode("div",d,[h.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(n,{key:0,disabled:w.isEmpty||h.disabled,onSubmit:L},null,8,["disabled"])),h.loading?(e.openBlock(),e.createBlock(l,{key:1,onCancel:S})):e.createCommentVNode("",!0),h.clearable?(e.openBlock(),e.createBlock(a,{key:2,disabled:w.isEmpty||h.disabled,onClear:N},null,8,["disabled"])):e.createCommentVNode("",!0)])],!0)])):"updown"===h.variant?(e.openBlock(),e.createElementBlock("div",c,[e.createElementVNode("div",v,[e.renderSlot(t.$slots,"action-list",{},()=>[e.createElementVNode("div",p,[h.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(n,{key:0,disabled:w.isEmpty||h.disabled,onSubmit:L},null,8,["disabled"])),h.loading?(e.openBlock(),e.createBlock(l,{key:1,onCancel:S})):e.createCommentVNode("",!0),h.clearable?(e.openBlock(),e.createBlock(a,{key:2,disabled:w.isEmpty||h.disabled,onClear:N},null,8,["disabled"])):e.createCommentVNode("",!0)])],!0)])])):e.createCommentVNode("",!0)],34),e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[t.$slots.footer?(e.openBlock(),e.createElementBlock("div",g,[e.renderSlot(t.$slots,"footer",{},void 0,!0)])):e.createCommentVNode("",!0)]),_:3})],4))}});module.exports=m;
|
|
2
2
|
//# sourceMappingURL=index.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.js","sources":["../../../../../src/components/editor-sender/source/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ChatNode,\n ChatNodeType,\n ChatOperateNode,\n DatasetByType,\n TagInfo,\n TipOptions,\n UserInfo\n} from 'chatarea';\nimport {\n ChatState,\n EditorProps,\n EditorSenderEmits,\n MixTag,\n SelectDialogOption,\n SubmitResult\n} from 'vue-element-plus-x/types/EditorSender';\nimport ChatArea from 'chatarea';\nimport { \n onBeforeUnmount, \n onMounted, \n reactive, \n ref,\n watch,\n getCurrentInstance,\n computed\n} from 'vue';\nimport ClearButton from './components/ClearButton/index.vue';\nimport LoadingButton from './components/LoadingButton/index.vue';\nimport SendButton from './components/SendButton/index.vue';\nimport 'chatarea/lib/ChatArea.css';\n\n/**\n * 支持的配置属性\n */\nconst props = withDefaults(defineProps<EditorProps&{\n activeTag: TagInfo | null\n}>(), {\n placeholder: '请输入内容', // 输入框提示占位语\n device: 'pc', // 使用编辑器设备类型 pc内置了很多丰富的弹出选择功能,如果用户传入了h5,弹出交互需要参考自定义弹出去支持\n autoFocus: false, // 是否在聊天框生成后自动聚焦\n variant: 'default', // 输入框的变体类型\n selectList: () => [], // 配置标签下拉选择的选项\n userList: () => [], // @研讨群成员列表\n customTrigger: () => [], // 扩展自定义弹窗列表\n maxLength: undefined, // 限制输入框最大字数 *注 该配置项性能开销较大 非必要情况请别设置(像豆包和文心一言都不对这块做限制,不应因小失大)\n submitType: 'enter', // 控制换行与提交模式\n customStyle: () => ({}), // 修改输入样式\n loading: false, // 发送按钮加载状态\n disabled: false, // 是否禁用输入框\n clearable: false, // 是否显示清空按钮\n headerAnimationTimer: 300, // 展开动画\n asyncMatchFun: undefined, // 异步加载群成员方法\n customDialog: false, // 是否需要自定义弹窗 开启后内部弹窗将不会再创建了\n activeTag: null\n});\n/**\n * 暴露的事件\n */\nconst emits = defineEmits<EditorSenderEmits & {\n(event: 'pasteFile', firstFile: File, fileList: FileList): void;\n}>();\n\nconst instance = getCurrentInstance();\n\n// 判断是否存在 pasteFile 监听器\nconst hasOnPasteFileListener = computed(() => {\n return !!instance?.vnode.props?.onPasteFile;\n});\n\n/**\n * 输入框相关\n */\nconst chat = ref<ChatArea>();\nconst opNode = ref<ChatOperateNode>();\nconst container = ref<HTMLElement>();\nconst chatState = reactive<ChatState>({\n isEmpty: true,\n textLength: 0, // 该属性值只会在配置了maxLength情况下才拥有赋值\n lastFocusNode: null,\n lastOffset: 0,\n wrapCallSelectDialog: false, // 记录是否是外部调用了选择弹窗进行插值行为操作\n beforeText: '',\n afterText: ''\n});\n// 创建输入框\nfunction createChat() {\n chat.value = new ChatArea({\n elm: container.value!,\n ...props,\n userList: JSON.parse(JSON.stringify(props.userList)),\n needDialog: !props.customDialog && props.device === 'pc',\n copyType: ['text'],\n asyncMatch: Boolean(props.asyncMatchFun),\n needDebounce: true,\n needCallSpace: false,\n sendKeyFun:\n props.submitType === 'enter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter',\n wrapKeyFun:\n props.submitType === 'shiftEnter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter'\n });\n opNode.value = chat.value.createOperateNode();\n // 订阅发送事件\n chat.value.addEventListener('enterSend', onSubmit);\n // 对输入框进行操作事件\n chat.value.addEventListener('operate', () => {\n console.log('operate');\n chatState.isEmpty = chat.value!.isEmpty(true);\n chatState.textLength = chat.value!.textLength;\n emits('change');\n });\n // 失去焦点记录最后一次光标Node节点\n chat.value.richText.addEventListener(\n 'blur',\n () => {\n const sel = getSelection()!;\n chatState.lastFocusNode = sel.focusNode;\n chatState.lastOffset = sel.focusOffset;\n },\n true\n );\n // 订阅标签选择事件\n chat.value.addEventListener('selectCheck', () => {\n if (chatState.wrapCallSelectDialog && chatState.beforeText) {\n chat.value?.insertText(chatState.beforeText);\n chatState.beforeText = '';\n }\n });\n chat.value.addEventListener('afterSelectCheck', () => {\n if (chatState.wrapCallSelectDialog && chatState.afterText) {\n chat.value?.insertText(chatState.afterText);\n chatState.afterText = '';\n chatState.wrapCallSelectDialog = false;\n }\n });\n // 接管异步匹配\n if (props.asyncMatchFun) {\n chat.value.addEventListener('atMatch', props.asyncMatchFun);\n }\n // 检测多种弹窗唤起事件\n chat.value.addEventListener('showAtDialog', () => {\n emits('showAtDialog');\n });\n chat.value.addEventListener(\n 'showSelectDialog',\n (key: string, elm: HTMLElement) => {\n emits('showSelectDialog', key, elm);\n }\n );\n chat.value.addEventListener('showTagDialog', (prefix: string) => {\n emits('showTagDialog', prefix);\n });\n // 禁用编辑器\n if (props.disabled) {\n chat.value.disabled();\n }\n // 绑定ESC按键关闭提示标签\n window.addEventListener('keydown', keydownESC);\n}\n// 获取输入框当前内容\nfunction getCurrentValue(): SubmitResult {\n const text = chat.value!.getText();\n const html = chat.value!.getHtml();\n const inputTags = chat.value!.getInputTagList();\n const userTags =\n props.userList.length > 0 ? chat.value!.getCallUserTagList() : undefined;\n const selectTags =\n props.selectList.length > 0 ? chat.value!.getSelectTagList() : undefined;\n const customTags =\n props.customTrigger.length > 0 ? chat.value!.getCustomTagList() : undefined;\n return {\n text,\n html,\n inputTags,\n userTags,\n selectTags,\n customTags\n };\n}\n// 提交发送方法\nfunction onSubmit() {\n // 内容纯空 拦截发送\n if (chatState.isEmpty) {\n return;\n }\n emits('submit', getCurrentValue());\n}\n// 取消发送方法\nfunction onCancel() {\n emits('cancel');\n}\n// 清空输入框方法\nfunction onClear(txt?: string) {\n chat.value!.clear(txt);\n // 将光标移动到末尾\n focusToEnd();\n}\n// 点击内容区域聚焦输入框\nfunction onContentMouseDown() {\n requestAnimationFrame(() => {\n const focusElm = chatState.lastFocusNode?.parentElement;\n // chatInput不是暴露给用户操作的对象 因此没有写入ts类型\n const chatInput = (chat.value as any).chatInput;\n if (focusElm && focusElm.classList.contains('input-write')) {\n chatInput.setInputTagRange(chatState.lastFocusNode, chatState.lastOffset);\n } else {\n chatInput.restCursorPos(chatInput.vnode, chatInput.cursorIndex);\n }\n });\n}\n// 聚焦到文本最前方\nfunction focusToStart() {\n if (chat.value && opNode.value) {\n opNode.value.setCursorNode(\n opNode.value.getNodeByRank(\n opNode.value.getRank(0) + opNode.value.getRank(0)\n )!,\n 0\n );\n }\n}\n// 聚焦到文本最后方\nfunction focusToEnd() {\n if (chat.value && opNode.value) {\n opNode.value.setCursorNode(\n opNode.value.getNodeByRank(\n opNode.value.getRank(-1) + opNode.value.getRank(-1)\n )!\n );\n }\n}\n// 失去焦点\nfunction blur() {\n if (chat.value) {\n const selection = getSelection()!;\n selection.removeAllRanges();\n chat.value.richText.blur();\n }\n}\n// 内容全选\nfunction selectAll() {\n if (chat.value && opNode.value) {\n const firstNode = opNode.value.getNodeByRank(\n opNode.value.getRank(0) + opNode.value.getRank(0)\n );\n const lastNode = opNode.value.getNodeByRank(\n opNode.value.getRank(-1) + opNode.value.getRank(-1)\n );\n opNode.value.setSelectNodes(firstNode!, lastNode!);\n }\n}\n// 插入一个选择标签\nfunction setSelectTag(key: string, tagId: string) {\n chatState.wrapCallSelectDialog = false;\n const tag = props.selectList\n ?.find(option => option.key === key)\n ?.options.find(tag => tag.id === tagId);\n if (tag) {\n chat.value?.setSelectTag(tag, key);\n }\n}\n// 插入一个输入标签\nfunction setInputTag(key: string, placeholder: string, defaultValue?: string) {\n chat.value?.setInputTag(key, placeholder, defaultValue);\n}\n// 插入一个@提及标签\nfunction setUserTag(userId: string) {\n const user = props.userList?.find(user => user.id === userId);\n if (user) {\n chat.value?.setUserTag(user);\n }\n}\n// 插入一个自定义触发符标签\nfunction setCustomTag(prefix: string, id: string) {\n const custom = props.customTrigger\n ?.find(option => option.prefix === prefix)\n ?.tagList.find(tag => tag.id === id);\n if (custom) {\n chat.value?.setCustomTag(custom, prefix);\n }\n}\n// 混合式插入\nfunction setMixTags(tags: MixTag[][]) {\n // 整合ChatNode\n const chatNodes = tags.map((row: MixTag[], index) => {\n return {\n type: 'gridBox',\n rank: opNode.value?.getRank(index),\n children: row.map((cRow: MixTag) => {\n return {\n type: cRow.type,\n text: cRow.value,\n html: cRow.value,\n dataset: {\n id: cRow.value,\n name: getNameByTypeId(cRow),\n prefix: cRow.key,\n key: cRow.key,\n placeholder: cRow.placeholder,\n value: cRow.value\n }\n };\n })\n };\n });\n opNode.value?.coverNodes(chatNodes as ChatNode<ChatNodeType>[]);\n}\n// 根据id和类型捕获目标name\nfunction getNameByTypeId(mixTag: MixTag): string {\n const { type, value, key } = mixTag;\n switch (type) {\n case 'userTag':\n return props.userList?.find(user => user.id === value)?.name || '';\n case 'selectTag':\n return (\n props.selectList\n ?.find(row => row.key === key)\n ?.options.find(select => select.id === value)?.name || ''\n );\n case 'customTag':\n return (\n props.customTrigger\n ?.find(row => row.prefix === key)\n ?.tagList.find(custom => custom.id === value)?.name || ''\n );\n default:\n return '';\n }\n}\n// 在当前光标处插入html片段\nfunction setHtml(html: string) {\n // 注* 插入的html标签必须是 行内 或 行内块元素,如果需要块级元素标签 请自行插入行内元素然后修改其css属性为块级元素\n chat.value?.insertHtml(html);\n}\n// 在当前光标处插入text内容\nfunction setText(txt: string) {\n chat.value?.insertText(txt);\n}\n// 外部调用唤起标签选择弹窗\nfunction openSelectDialog(option: SelectDialogOption) {\n chatState.beforeText = option.beforeText || '';\n chatState.afterText = option.afterText || '';\n chatState.wrapCallSelectDialog = true;\n chat.value?.showPCSelectDialog(option.key, option.elm);\n}\n// 打开前置提示标签\nfunction openTipTag(options: TipOptions) {\n chat.value?.openTipTag({\n ...options,\n codeLabel: 'ESC'\n });\n}\n// 关闭前置提示标签\nfunction closeTipTag() {\n chat.value?.closeTipTag();\n}\n// 绑定ESC按键关闭提示标签\nfunction keydownESC(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n closeTipTag();\n }\n}\n// 用户自定义弹窗写入@提及标签\nfunction customSetUser(user: UserInfo) {\n // 该方法并未写入ts 因为是一个私有api没暴露给用户 其区别 setUserTag 相比会去向前截取掉触发符\n (chat.value as any).onceSetTag(user);\n}\n// 用户自定义弹窗写入自定义触发符号标签\nfunction customSetTag(prefix: string, tag: TagInfo) {\n // 该方法并未写入ts 因为是一个私有api没暴露给用户 其区别 setCustomTag 相比会去向前截取掉触发符\n (chat.value as any).onceSetCustomTag(tag, prefix);\n}\n// 用户自定义弹窗更新选择标签\nfunction updateSelectTag(elm: HTMLElement, tag: TagInfo) {\n const rank = opNode.value?.getRankByElm(elm.parentElement!);\n if (!rank) {\n return;\n }\n const chatNode = opNode.value?.getNodeByRank(rank);\n if (!chatNode) {\n return;\n }\n const dataset = chatNode.dataset as Pick<\n DatasetByType,\n 'selectTag'\n >['selectTag'];\n dataset.id = tag.id;\n dataset.name = tag.name;\n opNode.value?.updateNode(chatNode);\n}\n\nfunction handleInternalPaste(e: ClipboardEvent) {\n const files = e.clipboardData?.files;\n if (files?.length && hasOnPasteFileListener.value) {\n emits('pasteFile', files[0], files);\n e.preventDefault();\n }\n}\n\n/**\n * 监听响应props的响应式修改 去更新chat示例对象对应的配置\n */\nwatch(\n () => props.disabled,\n () => {\n props.disabled ? chat.value?.disabled() : chat.value?.enable();\n }\n);\nwatch(\n () => props.placeholder,\n () => {\n chat.value?.updateConfig({\n placeholder: props.placeholder\n });\n }\n);\nwatch(\n () => props.maxLength,\n () => {\n chat.value?.updateConfig({\n maxLength: props.maxLength\n });\n }\n);\nwatch(\n () => props.submitType,\n () => {\n chat.value?.updateConfig({\n sendKeyFun:\n props.submitType === 'enter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter',\n wrapKeyFun:\n props.submitType === 'shiftEnter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter'\n });\n }\n);\nwatch(\n () => props.userList,\n () => {\n chat.value?.updateConfig({\n userList: props.userList\n });\n },\n { deep: true }\n);\nwatch(\n () => props.selectList,\n () => {\n chat.value?.updateConfig({\n selectList: props.selectList\n });\n },\n { deep: true }\n);\nwatch(\n () => props.customTrigger,\n () => {\n chat.value?.updateConfig({\n customTrigger: props.customTrigger\n });\n },\n { deep: true }\n);\n\nonMounted(() => {\n createChat();\n});\n\nonBeforeUnmount(() => {\n if (chat.value) {\n chat.value.dispose();\n chat.value = undefined;\n opNode.value = undefined;\n window.removeEventListener('keydown', keydownESC);\n }\n});\n\n/** 暴露方法 */\ndefineExpose({\n getCurrentValue,\n focusToStart,\n focusToEnd,\n blur,\n selectAll,\n clear: onClear,\n setSelectTag,\n setInputTag,\n setUserTag,\n setCustomTag,\n setMixTags,\n setHtml,\n setText,\n openSelectDialog,\n customSetUser,\n customSetTag,\n updateSelectTag,\n openTipTag,\n closeTipTag,\n chat, // 暴露chat实例对象\n opNode, // 暴露ChatNode操作对象\n chatState\n});\n</script>\n\n<template>\n <div\n class=\"el-editor-sender-wrap\"\n :style=\"{\n '--el-editor-sender-header-duration': `${headerAnimationTimer}ms`\n }\"\n >\n <!-- 头部容器 -->\n <Transition name=\"slide\">\n <div v-if=\"$slots.header\" class=\"el-editor-sender-header\">\n <div class=\"el-editor-sender-header-container\">\n <slot name=\"header\" />\n </div>\n </div>\n </Transition>\n <!-- 内容容器 -->\n <div\n class=\"el-editor-sender-content\"\n :class=\"{ 'content-variant-updown': props.variant === 'updown' }\"\n @mousedown=\"onContentMouseDown\"\n >\n <!-- 输入区域 -->\n <div class=\"el-editor-sender-chat-room\" @mousedown.stop=\"() => {}\">\n <!-- 变体 updown: Prefix 前缀 -->\n <div v-if=\"$slots.prefix\" class=\"el-editor-sender-prefix\">\n <slot name=\"prefix\" />\n </div>\n <span\n v-if=\"props.activeTag\"\n class=\"el-editor-sender-active-tag\"\n >\n {{ props.activeTag.name }}\n </span>\n <!-- 输入框载体 这里多嵌套一层是为了存放渲染后的弹窗元素 -->\n <div\n ref=\"container\"\n :style=\"{ ...customStyle }\"\n class=\"el-editor-sender-chat\"\n @paste=\"handleInternalPaste\"\n />\n </div>\n <!-- 默认操作列表 -->\n <div\n v-if=\"props.variant === 'default'\"\n class=\"el-editor-sender-action-list\"\n >\n <slot name=\"action-list\">\n <div class=\"el-editor-sender-action-list-presets\">\n <SendButton\n v-if=\"!props.loading\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @submit=\"onSubmit\"\n />\n\n <LoadingButton v-if=\"props.loading\" @cancel=\"onCancel\" />\n\n <ClearButton\n v-if=\"props.clearable\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @clear=\"onClear\"\n />\n </div>\n </slot>\n </div>\n <!-- 变体操作列表 -->\n <div\n v-else-if=\"props.variant === 'updown'\"\n class=\"el-editor-sender-updown-action-list\"\n >\n <!-- 变体 updown:操作列表 -->\n <div class=\"el-editor-sender-action-list\">\n <slot name=\"action-list\">\n <div class=\"el-editor-sender-action-list-presets\">\n <SendButton\n v-if=\"!props.loading\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @submit=\"onSubmit\"\n />\n\n <LoadingButton v-if=\"props.loading\" @cancel=\"onCancel\" />\n\n <ClearButton\n v-if=\"props.clearable\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @clear=\"onClear\"\n />\n </div>\n </slot>\n </div>\n </div>\n </div>\n <!-- 底部容器 -->\n <Transition name=\"slide\">\n <div v-if=\"$slots.footer\" class=\"el-editor-sender-footer\">\n <slot name=\"footer\" />\n </div>\n </Transition>\n </div>\n</template>\n\n<style scoped lang=\"scss\" src=\"./style.scss\"></style>\n"],"names":["props","__props","emits","__emit","instance","getCurrentInstance","hasOnPasteFileListener","computed","_a","vnode","onPasteFile","chat","ref","opNode","container","chatState","reactive","isEmpty","textLength","lastFocusNode","lastOffset","wrapCallSelectDialog","beforeText","afterText","getCurrentValue","text","value","getText","html","getHtml","inputTags","getInputTagList","userTags","userList","length","getCallUserTagList","selectTags","selectList","getSelectTagList","customTags","customTrigger","getCustomTagList","onSubmit","onCancel","onClear","txt","clear","focusToEnd","onContentMouseDown","requestAnimationFrame","focusElm","parentElement","chatInput","classList","contains","setInputTagRange","restCursorPos","cursorIndex","setCursorNode","getNodeByRank","getRank","getNameByTypeId","mixTag","type","key","_b","find","user","id","name","_e","_c","row","_d","options","select","_h","_f","prefix","_g","tagList","custom","closeTipTag","keydownESC","event","handleInternalPaste","e","files","clipboardData","preventDefault","watch","disabled","enable","placeholder","updateConfig","maxLength","submitType","sendKeyFun","shiftKey","wrapKeyFun","deep","onMounted","ChatArea","elm","JSON","parse","stringify","needDialog","customDialog","device","copyType","asyncMatch","Boolean","asyncMatchFun","needDebounce","needCallSpace","createOperateNode","addEventListener","console","log","richText","sel","getSelection","focusNode","focusOffset","insertText","window","onBeforeUnmount","dispose","removeEventListener","__expose","focusToStart","blur","removeAllRanges","selectAll","firstNode","lastNode","setSelectNodes","setSelectTag","tagId","tag","option","setInputTag","defaultValue","setUserTag","userId","setCustomTag","setMixTags","tags","chatNodes","map","index","rank","children","cRow","dataset","coverNodes","setHtml","insertHtml","setText","openSelectDialog","showPCSelectDialog","customSetUser","onceSetTag","customSetTag","onceSetCustomTag","updateSelectTag","getRankByElm","chatNode","updateNode","openTipTag","codeLabel","_createElementBlock","class","style","_normalizeStyle","headerAnimationTimer","_createVNode","_Transition","$slots","header","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_normalizeClass","variant","onMousedown","_hoisted_3","activeTag","_hoisted_4","_toDisplayString","customStyle","onPaste","_hoisted_5","_hoisted_6","loading","_createBlock","SendButton","LoadingButton","clearable","ClearButton","_hoisted_7","_hoisted_8","_hoisted_9","footer","_hoisted_10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.js","sources":["../../../../../src/components/editor-sender/source/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ChatNode,\n ChatNodeType,\n ChatOperateNode,\n DatasetByType,\n TagInfo,\n TipOptions,\n UserInfo\n} from 'chatarea';\nimport {\n ChatState,\n EditorProps,\n EditorSenderEmits,\n MixTag,\n SelectDialogOption,\n SubmitResult\n} from 'vue-element-plus-x/types/EditorSender';\nimport ChatArea from 'chatarea';\nimport { \n onBeforeUnmount, \n onMounted, \n reactive, \n ref,\n watch,\n getCurrentInstance,\n computed\n} from 'vue';\nimport ClearButton from './components/ClearButton/index.vue';\nimport LoadingButton from './components/LoadingButton/index.vue';\nimport SendButton from './components/SendButton/index.vue';\nimport 'chatarea/lib/ChatArea.css';\n\n/**\n * 支持的配置属性\n */\nconst props = withDefaults(defineProps<EditorProps&{\n activeTag: TagInfo | null\n}>(), {\n placeholder: '请输入内容', // 输入框提示占位语\n device: 'pc', // 使用编辑器设备类型 pc内置了很多丰富的弹出选择功能,如果用户传入了h5,弹出交互需要参考自定义弹出去支持\n autoFocus: false, // 是否在聊天框生成后自动聚焦\n variant: 'default', // 输入框的变体类型\n selectList: () => [], // 配置标签下拉选择的选项\n userList: () => [], // @研讨群成员列表\n customTrigger: () => [], // 扩展自定义弹窗列表\n maxLength: undefined, // 限制输入框最大字数 *注 该配置项性能开销较大 非必要情况请别设置(像豆包和文心一言都不对这块做限制,不应因小失大)\n submitType: 'enter', // 控制换行与提交模式\n customStyle: () => ({}), // 修改输入样式\n loading: false, // 发送按钮加载状态\n disabled: false, // 是否禁用输入框\n clearable: false, // 是否显示清空按钮\n headerAnimationTimer: 300, // 展开动画\n asyncMatchFun: undefined, // 异步加载群成员方法\n customDialog: false, // 是否需要自定义弹窗 开启后内部弹窗将不会再创建了\n activeTag: null\n});\n/**\n * 暴露的事件\n */\nconst emits = defineEmits<EditorSenderEmits & {\n(event: 'pasteFile', firstFile: File, fileList: FileList): void;\n}>();\n\nconst instance = getCurrentInstance();\n\n// 判断是否存在 pasteFile 监听器\nconst hasOnPasteFileListener = computed(() => {\n return !!instance?.vnode.props?.onPasteFile;\n});\n\n/**\n * 输入框相关\n */\nconst chat = ref<ChatArea>();\nconst opNode = ref<ChatOperateNode>();\nconst container = ref<HTMLElement>();\nconst chatState = reactive<ChatState>({\n isEmpty: true,\n textLength: 0, // 该属性值只会在配置了maxLength情况下才拥有赋值\n lastFocusNode: null,\n lastOffset: 0,\n wrapCallSelectDialog: false, // 记录是否是外部调用了选择弹窗进行插值行为操作\n beforeText: '',\n afterText: ''\n});\n// 创建输入框\nfunction createChat() {\n chat.value = new ChatArea({\n elm: container.value!,\n ...props,\n userList: JSON.parse(JSON.stringify(props.userList)),\n needDialog: !props.customDialog && props.device === 'pc',\n copyType: ['text'],\n asyncMatch: Boolean(props.asyncMatchFun),\n needDebounce: true,\n needCallSpace: false,\n sendKeyFun:\n props.submitType === 'enter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter',\n wrapKeyFun:\n props.submitType === 'shiftEnter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter'\n });\n opNode.value = chat.value.createOperateNode();\n // 订阅发送事件\n chat.value.addEventListener('enterSend', onSubmit);\n // 对输入框进行操作事件\n chat.value.addEventListener('operate', () => {\n chatState.isEmpty = chat.value!.isEmpty(true);\n chatState.textLength = chat.value!.textLength;\n emits('change');\n });\n // 失去焦点记录最后一次光标Node节点\n chat.value.richText.addEventListener(\n 'blur',\n () => {\n const sel = getSelection()!;\n chatState.lastFocusNode = sel.focusNode;\n chatState.lastOffset = sel.focusOffset;\n },\n true\n );\n // 订阅标签选择事件\n chat.value.addEventListener('selectCheck', () => {\n if (chatState.wrapCallSelectDialog && chatState.beforeText) {\n chat.value?.insertText(chatState.beforeText);\n chatState.beforeText = '';\n }\n });\n chat.value.addEventListener('afterSelectCheck', () => {\n if (chatState.wrapCallSelectDialog && chatState.afterText) {\n chat.value?.insertText(chatState.afterText);\n chatState.afterText = '';\n chatState.wrapCallSelectDialog = false;\n }\n });\n // 接管异步匹配\n if (props.asyncMatchFun) {\n chat.value.addEventListener('atMatch', props.asyncMatchFun);\n }\n // 检测多种弹窗唤起事件\n chat.value.addEventListener('showAtDialog', () => {\n emits('showAtDialog');\n });\n chat.value.addEventListener(\n 'showSelectDialog',\n (key: string, elm: HTMLElement) => {\n emits('showSelectDialog', key, elm);\n }\n );\n chat.value.addEventListener('showTagDialog', (prefix: string) => {\n emits('showTagDialog', prefix);\n });\n // 禁用编辑器\n if (props.disabled) {\n chat.value.disabled();\n }\n // 绑定ESC按键关闭提示标签\n window.addEventListener('keydown', keydownESC);\n}\n// 获取输入框当前内容\nfunction getCurrentValue(): SubmitResult {\n const text = chat.value!.getText();\n const html = chat.value!.getHtml();\n const inputTags = chat.value!.getInputTagList();\n const userTags =\n props.userList.length > 0 ? chat.value!.getCallUserTagList() : undefined;\n const selectTags =\n props.selectList.length > 0 ? chat.value!.getSelectTagList() : undefined;\n const customTags =\n props.customTrigger.length > 0 ? chat.value!.getCustomTagList() : undefined;\n return {\n text,\n html,\n inputTags,\n userTags,\n selectTags,\n customTags\n };\n}\n// 提交发送方法\nfunction onSubmit() {\n // 内容纯空 拦截发送\n if (chatState.isEmpty) {\n return;\n }\n emits('submit', getCurrentValue());\n}\n// 取消发送方法\nfunction onCancel() {\n emits('cancel');\n}\n// 清空输入框方法\nfunction onClear(txt?: string) {\n chat.value!.clear(txt);\n // 将光标移动到末尾\n focusToEnd();\n}\n// 点击内容区域聚焦输入框\nfunction onContentMouseDown() {\n requestAnimationFrame(() => {\n const focusElm = chatState.lastFocusNode?.parentElement;\n // chatInput不是暴露给用户操作的对象 因此没有写入ts类型\n const chatInput = (chat.value as any).chatInput;\n if (focusElm && focusElm.classList.contains('input-write')) {\n chatInput.setInputTagRange(chatState.lastFocusNode, chatState.lastOffset);\n } else {\n chatInput.restCursorPos(chatInput.vnode, chatInput.cursorIndex);\n }\n });\n}\n// 聚焦到文本最前方\nfunction focusToStart() {\n if (chat.value && opNode.value) {\n opNode.value.setCursorNode(\n opNode.value.getNodeByRank(\n opNode.value.getRank(0) + opNode.value.getRank(0)\n )!,\n 0\n );\n }\n}\n// 聚焦到文本最后方\nfunction focusToEnd() {\n if (chat.value && opNode.value) {\n opNode.value.setCursorNode(\n opNode.value.getNodeByRank(\n opNode.value.getRank(-1) + opNode.value.getRank(-1)\n )!\n );\n }\n}\n// 失去焦点\nfunction blur() {\n if (chat.value) {\n const selection = getSelection()!;\n selection.removeAllRanges();\n chat.value.richText.blur();\n }\n}\n// 内容全选\nfunction selectAll() {\n if (chat.value && opNode.value) {\n const firstNode = opNode.value.getNodeByRank(\n opNode.value.getRank(0) + opNode.value.getRank(0)\n );\n const lastNode = opNode.value.getNodeByRank(\n opNode.value.getRank(-1) + opNode.value.getRank(-1)\n );\n opNode.value.setSelectNodes(firstNode!, lastNode!);\n }\n}\n// 插入一个选择标签\nfunction setSelectTag(key: string, tagId: string) {\n chatState.wrapCallSelectDialog = false;\n const tag = props.selectList\n ?.find(option => option.key === key)\n ?.options.find(tag => tag.id === tagId);\n if (tag) {\n chat.value?.setSelectTag(tag, key);\n }\n}\n// 插入一个输入标签\nfunction setInputTag(key: string, placeholder: string, defaultValue?: string) {\n chat.value?.setInputTag(key, placeholder, defaultValue);\n}\n// 插入一个@提及标签\nfunction setUserTag(userId: string) {\n const user = props.userList?.find(user => user.id === userId);\n if (user) {\n chat.value?.setUserTag(user);\n }\n}\n// 插入一个自定义触发符标签\nfunction setCustomTag(prefix: string, id: string) {\n const custom = props.customTrigger\n ?.find(option => option.prefix === prefix)\n ?.tagList.find(tag => tag.id === id);\n if (custom) {\n chat.value?.setCustomTag(custom, prefix);\n }\n}\n// 混合式插入\nfunction setMixTags(tags: MixTag[][]) {\n // 整合ChatNode\n const chatNodes = tags.map((row: MixTag[], index) => {\n return {\n type: 'gridBox',\n rank: opNode.value?.getRank(index),\n children: row.map((cRow: MixTag) => {\n return {\n type: cRow.type,\n text: cRow.value,\n html: cRow.value,\n dataset: {\n id: cRow.value,\n name: getNameByTypeId(cRow),\n prefix: cRow.key,\n key: cRow.key,\n placeholder: cRow.placeholder,\n value: cRow.value\n }\n };\n })\n };\n });\n opNode.value?.coverNodes(chatNodes as ChatNode<ChatNodeType>[]);\n}\n// 根据id和类型捕获目标name\nfunction getNameByTypeId(mixTag: MixTag): string {\n const { type, value, key } = mixTag;\n switch (type) {\n case 'userTag':\n return props.userList?.find(user => user.id === value)?.name || '';\n case 'selectTag':\n return (\n props.selectList\n ?.find(row => row.key === key)\n ?.options.find(select => select.id === value)?.name || ''\n );\n case 'customTag':\n return (\n props.customTrigger\n ?.find(row => row.prefix === key)\n ?.tagList.find(custom => custom.id === value)?.name || ''\n );\n default:\n return '';\n }\n}\n// 在当前光标处插入html片段\nfunction setHtml(html: string) {\n // 注* 插入的html标签必须是 行内 或 行内块元素,如果需要块级元素标签 请自行插入行内元素然后修改其css属性为块级元素\n chat.value?.insertHtml(html);\n}\n// 在当前光标处插入text内容\nfunction setText(txt: string) {\n chat.value?.insertText(txt);\n}\n// 外部调用唤起标签选择弹窗\nfunction openSelectDialog(option: SelectDialogOption) {\n chatState.beforeText = option.beforeText || '';\n chatState.afterText = option.afterText || '';\n chatState.wrapCallSelectDialog = true;\n chat.value?.showPCSelectDialog(option.key, option.elm);\n}\n// 打开前置提示标签\nfunction openTipTag(options: TipOptions) {\n chat.value?.openTipTag({\n ...options,\n codeLabel: 'ESC'\n });\n}\n// 关闭前置提示标签\nfunction closeTipTag() {\n chat.value?.closeTipTag();\n}\n// 绑定ESC按键关闭提示标签\nfunction keydownESC(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n closeTipTag();\n }\n}\n// 用户自定义弹窗写入@提及标签\nfunction customSetUser(user: UserInfo) {\n // 该方法并未写入ts 因为是一个私有api没暴露给用户 其区别 setUserTag 相比会去向前截取掉触发符\n (chat.value as any).onceSetTag(user);\n}\n// 用户自定义弹窗写入自定义触发符号标签\nfunction customSetTag(prefix: string, tag: TagInfo) {\n // 该方法并未写入ts 因为是一个私有api没暴露给用户 其区别 setCustomTag 相比会去向前截取掉触发符\n (chat.value as any).onceSetCustomTag(tag, prefix);\n}\n// 用户自定义弹窗更新选择标签\nfunction updateSelectTag(elm: HTMLElement, tag: TagInfo) {\n const rank = opNode.value?.getRankByElm(elm.parentElement!);\n if (!rank) {\n return;\n }\n const chatNode = opNode.value?.getNodeByRank(rank);\n if (!chatNode) {\n return;\n }\n const dataset = chatNode.dataset as Pick<\n DatasetByType,\n 'selectTag'\n >['selectTag'];\n dataset.id = tag.id;\n dataset.name = tag.name;\n opNode.value?.updateNode(chatNode);\n}\n\nfunction handleInternalPaste(e: ClipboardEvent) {\n const files = e.clipboardData?.files;\n if (files?.length && hasOnPasteFileListener.value) {\n emits('pasteFile', files[0], files);\n e.preventDefault();\n }\n}\n\n/**\n * 监听响应props的响应式修改 去更新chat示例对象对应的配置\n */\nwatch(\n () => props.disabled,\n () => {\n props.disabled ? chat.value?.disabled() : chat.value?.enable();\n }\n);\nwatch(\n () => props.placeholder,\n () => {\n chat.value?.updateConfig({\n placeholder: props.placeholder\n });\n }\n);\nwatch(\n () => props.maxLength,\n () => {\n chat.value?.updateConfig({\n maxLength: props.maxLength\n });\n }\n);\nwatch(\n () => props.submitType,\n () => {\n chat.value?.updateConfig({\n sendKeyFun:\n props.submitType === 'enter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter',\n wrapKeyFun:\n props.submitType === 'shiftEnter'\n ? event => !event.shiftKey && event.key === 'Enter'\n : event => event.shiftKey && event.key === 'Enter'\n });\n }\n);\nwatch(\n () => props.userList,\n () => {\n chat.value?.updateConfig({\n userList: props.userList\n });\n },\n { deep: true }\n);\nwatch(\n () => props.selectList,\n () => {\n chat.value?.updateConfig({\n selectList: props.selectList\n });\n },\n { deep: true }\n);\nwatch(\n () => props.customTrigger,\n () => {\n chat.value?.updateConfig({\n customTrigger: props.customTrigger\n });\n },\n { deep: true }\n);\n\nonMounted(() => {\n createChat();\n});\n\nonBeforeUnmount(() => {\n if (chat.value) {\n chat.value.dispose();\n chat.value = undefined;\n opNode.value = undefined;\n window.removeEventListener('keydown', keydownESC);\n }\n});\n\n/** 暴露方法 */\ndefineExpose({\n getCurrentValue,\n focusToStart,\n focusToEnd,\n blur,\n selectAll,\n clear: onClear,\n setSelectTag,\n setInputTag,\n setUserTag,\n setCustomTag,\n setMixTags,\n setHtml,\n setText,\n openSelectDialog,\n customSetUser,\n customSetTag,\n updateSelectTag,\n openTipTag,\n closeTipTag,\n chat, // 暴露chat实例对象\n opNode, // 暴露ChatNode操作对象\n chatState\n});\n</script>\n\n<template>\n <div\n class=\"el-editor-sender-wrap\"\n :style=\"{\n '--el-editor-sender-header-duration': `${headerAnimationTimer}ms`\n }\"\n >\n <!-- 头部容器 -->\n <Transition name=\"slide\">\n <div v-if=\"$slots.header\" class=\"el-editor-sender-header\">\n <div class=\"el-editor-sender-header-container\">\n <slot name=\"header\" />\n </div>\n </div>\n </Transition>\n <!-- 内容容器 -->\n <div\n class=\"el-editor-sender-content\"\n :class=\"{ 'content-variant-updown': props.variant === 'updown' }\"\n @mousedown=\"onContentMouseDown\"\n >\n <!-- 输入区域 -->\n <div class=\"el-editor-sender-chat-room\" @mousedown.stop=\"() => {}\">\n <!-- 变体 updown: Prefix 前缀 -->\n <div v-if=\"$slots.prefix\" class=\"el-editor-sender-prefix\">\n <slot name=\"prefix\" />\n </div>\n <span\n v-if=\"props.activeTag\"\n class=\"el-editor-sender-active-tag\"\n >\n {{ props.activeTag.name }}\n </span>\n <!-- 输入框载体 这里多嵌套一层是为了存放渲染后的弹窗元素 -->\n <div\n ref=\"container\"\n :style=\"{ ...customStyle }\"\n class=\"el-editor-sender-chat\"\n @paste=\"handleInternalPaste\"\n />\n </div>\n <!-- 默认操作列表 -->\n <div\n v-if=\"props.variant === 'default'\"\n class=\"el-editor-sender-action-list\"\n >\n <slot name=\"action-list\">\n <div class=\"el-editor-sender-action-list-presets\">\n <SendButton\n v-if=\"!props.loading\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @submit=\"onSubmit\"\n />\n\n <LoadingButton v-if=\"props.loading\" @cancel=\"onCancel\" />\n\n <ClearButton\n v-if=\"props.clearable\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @clear=\"onClear\"\n />\n </div>\n </slot>\n </div>\n <!-- 变体操作列表 -->\n <div\n v-else-if=\"props.variant === 'updown'\"\n class=\"el-editor-sender-updown-action-list\"\n >\n <!-- 变体 updown:操作列表 -->\n <div class=\"el-editor-sender-action-list\">\n <slot name=\"action-list\">\n <div class=\"el-editor-sender-action-list-presets\">\n <SendButton\n v-if=\"!props.loading\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @submit=\"onSubmit\"\n />\n\n <LoadingButton v-if=\"props.loading\" @cancel=\"onCancel\" />\n\n <ClearButton\n v-if=\"props.clearable\"\n :disabled=\"chatState.isEmpty || props.disabled\"\n @clear=\"onClear\"\n />\n </div>\n </slot>\n </div>\n </div>\n </div>\n <!-- 底部容器 -->\n <Transition name=\"slide\">\n <div v-if=\"$slots.footer\" class=\"el-editor-sender-footer\">\n <slot name=\"footer\" />\n </div>\n </Transition>\n </div>\n</template>\n\n<style scoped lang=\"scss\" src=\"./style.scss\"></style>\n"],"names":["props","__props","emits","__emit","instance","getCurrentInstance","hasOnPasteFileListener","computed","_a","vnode","onPasteFile","chat","ref","opNode","container","chatState","reactive","isEmpty","textLength","lastFocusNode","lastOffset","wrapCallSelectDialog","beforeText","afterText","getCurrentValue","text","value","getText","html","getHtml","inputTags","getInputTagList","userTags","userList","length","getCallUserTagList","selectTags","selectList","getSelectTagList","customTags","customTrigger","getCustomTagList","onSubmit","onCancel","onClear","txt","clear","focusToEnd","onContentMouseDown","requestAnimationFrame","focusElm","parentElement","chatInput","classList","contains","setInputTagRange","restCursorPos","cursorIndex","setCursorNode","getNodeByRank","getRank","getNameByTypeId","mixTag","type","key","_b","find","user","id","name","_e","_c","row","_d","options","select","_h","_f","prefix","_g","tagList","custom","closeTipTag","keydownESC","event","handleInternalPaste","e","files","clipboardData","preventDefault","watch","disabled","enable","placeholder","updateConfig","maxLength","submitType","sendKeyFun","shiftKey","wrapKeyFun","deep","onMounted","ChatArea","elm","JSON","parse","stringify","needDialog","customDialog","device","copyType","asyncMatch","Boolean","asyncMatchFun","needDebounce","needCallSpace","createOperateNode","addEventListener","richText","sel","getSelection","focusNode","focusOffset","insertText","window","onBeforeUnmount","dispose","removeEventListener","__expose","focusToStart","blur","removeAllRanges","selectAll","firstNode","lastNode","setSelectNodes","setSelectTag","tagId","tag","option","setInputTag","defaultValue","setUserTag","userId","setCustomTag","setMixTags","tags","chatNodes","map","index","rank","children","cRow","dataset","coverNodes","setHtml","insertHtml","setText","openSelectDialog","showPCSelectDialog","customSetUser","onceSetTag","customSetTag","onceSetCustomTag","updateSelectTag","getRankByElm","chatNode","updateNode","openTipTag","codeLabel","_createElementBlock","class","style","_normalizeStyle","headerAnimationTimer","_createVNode","_Transition","$slots","header","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_normalizeClass","variant","onMousedown","_hoisted_3","activeTag","_hoisted_4","_toDisplayString","customStyle","onPaste","_hoisted_5","_hoisted_6","loading","_createBlock","SendButton","LoadingButton","clearable","ClearButton","_hoisted_7","_hoisted_8","_hoisted_9","footer","_hoisted_10"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./bubble-list/index.js"),r=require("./x-markdown/index.js"),i=require("./file-preview/index.js"),s=require("./editor-sender/index.js"),t=require("./file-card/index.js"),o=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=s,exports.FileCard=t,exports.CoreText=o,exports.CoreTips=x,exports.CoreResult=d;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./bubble-list/index.js"),r=require("./x-markdown/index.js"),i=require("./file-preview/index.js"),s=require("./editor-sender/index.js"),t=require("./file-card/index.js"),o=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),n=require("./core-table/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=s,exports.FileCard=t,exports.CoreText=o,exports.CoreTips=x,exports.CoreResult=d,exports.CoreTable=n;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),l=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/tooltip.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */;/* empty css */const s=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js");;/* empty css */const d=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),p=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),m=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),c=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),v=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),h=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),_=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),f=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),g=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),y=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),k=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(k,{emit:b}){const x=e.useTemplateRef("x-markdown-container"),q=e.ref(Date.now()),j=e.ref(-1/0),E=e.ref(""),N=new Set,w=e.ref(!1),A=e.ref(!1),S=e.ref([]),T=t.useTemplateRefsList(),C=e.ref(0);let P=0;const L=e.ref(null),R=e.ref(s.createStreamGenerator(e=>{E.value=E.value+e},k.speed)),F=e.computed(()=>{if(!k.autoHideThinking)return E.value;let e=E.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,l,s)=>{const n="</div>"===s;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${l}${s}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){j.value===-1/0&&(j.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(l){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const l=((j.value-q.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${l>"0"?l+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),V=e.computed(()=>k.isHistoryMessage);e.watch(()=>[k.text,k.typing],([e,r])=>{var t,l,s;if(e){if(null==(t=R.value)||t.update(e),!r)return void(null==(l=R.value)||l.stop());const n=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!A.value&&n.test(e))return A.value=!0,void(null==(s=R.value)||s.setSpeed(500))}},{immediate:!0});const $=e.ref([]),D=r(()=>{(()=>{var e;const r=null==(e=x.value)?void 0:e.querySelector("div[hidden]");$.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),b("refConfigUpdate",$.value)})()},100),H=e.ref(null);e.watch(()=>E.value,D,{immediate:!0}),e.watch(H,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=$.value.find(e=>e.link===r);b("hoverActiveRefTrigger",t)}else b("hoverActiveRefTrigger","")});const U=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}},B=e=>{const r=U(e);H.value=r||null},M=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),s=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();s?(l.ElMessage("文件下载中..."),b("downloadFile",{title:n,id:s,ext:o,href:t})):window.open(t,"_blank")})(e);const r=U(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),l=Number(r.getAttribute("datanumber")),s=r.getAttribute("id"),n={...$.value.find(r=>r.link===e),highlight:t,page:l,id:s};b("clickActiveRefTrigger",n)}};e.onMounted(()=>{x.value.addEventListener("mouseover",B),x.value.addEventListener("click",M)}),e.onBeforeUnmount(()=>{x.value.removeEventListener("mouseover",B),x.value.addEventListener("click",M)});const I=()=>{if(!x.value)return;x.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{N.has(e)||(N.add(e),J(e),e.complete?O(e):(e.addEventListener("load",()=>O(e)),e.addEventListener("error",()=>W(e))))})},J=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`}},O=e=>{N.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",O),e.removeEventListener("error",W)},W=e=>{N.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",O),e.removeEventListener("error",W)},G=d.unified().use(p).use(m).use(c,{singleTilde:!1}).use(v).use(h).use(_,{allowDangerousHtml:!0}).use(f).use(g).use(y),z=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const l=(null==(t=e.properties)?void 0:t.data)||{};return void r.push(l)}Array.isArray(e.children)&&e.children.forEach(e=>{z(e,r)})}};e.watch(()=>F.value,async r=>{P=0;const t=await G.run(G.parse(r)),l=(e=>{const r=[],t=[],l=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(l))};return Array.isArray(e.children)&&e.children.forEach(l),t.forEach(e=>{var t,l,s,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(s=null==(l=null==i?void 0:i.properties)?void 0:l.className)?void 0:s.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);z(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);S.value=l,await e.nextTick(),L.value=t,e.nextTick(I),e.nextTick(()=>{var e;const r=null==(e=x.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!w.value&&(w.value=!0,new o.Accordion(r))})},{immediate:!0});const X=(r,t,s)=>{var o,d,p,m,c,v,h,_,f,g,y,k,x,q,j,E,N,w,A,L,R;if(!r)return null;let F=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(F=(null==(d=null==(o=r.children)?void 0:o.map)?void 0:d.call(o,e=>X(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},F);case"element":if("sub"===r.tagName){const l=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],s=null==l?void 0:l.map(e=>X(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},s)}if("span"===r.tagName)return e.h("span",{...r.properties},F);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(p=r.properties)?void 0:p.href)||"",l=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":l},F)}if("ElTimeline"===r.tagName)return e.h(l.ElTimeline,{...r.properties},F);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",F)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[F[C.value]]);if("ElRow"===r.tagName)return e.h(l.ElRow,{...r.properties},F);if("ElCol"===r.tagName)return e.h(l.ElCol,{...r.properties},F);if("ElCard"===r.tagName)return e.h(l.ElCard,{...r.properties},F);if("ElForm"===r.tagName){const s=null==(m=r.children)?void 0:m.map(e=>X(e,P));return P++,e.h(l.ElForm,{ref:T.value.set,model:S.value[t],...r.properties,disabled:(null==(c=r.properties)?void 0:c.disabled)||V.value},s)}if("ElFormItem"===r.tagName)return e.h(l.ElFormItem,{...r.properties},F);if("ElButton"===r.tagName){let n=null==(v=r.properties)?void 0:v.payload;return"table"===r.parentScope&&(n=s),e.h(l.ElButton,{...r.properties,disabled:(null==(h=r.properties)?void 0:h.disabled)||V.value,onClick:()=>{var e;(async(e,r,t)=>{var l;if("inner_next"===r)return void(C.value+=1);if("inner_prev"===r)return void(C.value-=1);let s={action:r,payload:{}};t?s={action:r,payload:t}:(await(null==(l=T.value[e])?void 0:l.validate()),s={action:r,payload:{...S.value[e],...t}}),b("coreSubmit",s)})(t,null==(e=r.properties)?void 0:e.action,n)}},F)}if("ElSelect"===r.tagName)return e.h(l.ElSelect,{...r.properties,disabled:(null==(_=r.properties)?void 0:_.disabled)||V.value,modelValue:S.value[t][null==(f=r.properties)?void 0:f.formProp],"onUpdate:modelValue":e=>{var l;S.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},F);if("ElDatePicker"===r.tagName)return e.h(l.ElDatePicker,{...r.properties,disabled:(null==(g=r.properties)?void 0:g.disabled)||V.value,modelValue:S.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var l;S.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},F);if("ElInput"===r.tagName)return e.h(l.ElInput,{...r.properties,disabled:(null==(k=r.properties)?void 0:k.disabled)||V.value,modelValue:S.value[t][null==(x=r.properties)?void 0:x.formProp],"onUpdate:modelValue":e=>{var l;S.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},F);if("ElRadioGroup"===r.tagName)return e.h(l.ElRadioGroup,{...r.properties,disabled:(null==(q=r.properties)?void 0:q.disabled)||V.value,modelValue:S.value[t][null==(j=r.properties)?void 0:j.formProp],"onUpdate:modelValue":e=>{var l;S.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},F);if("ElRadio"===r.tagName)return e.h(l.ElRadio,{...r.properties,disabled:(null==(E=r.properties)?void 0:E.disabled)||V.value},F);if("ElTable"===r.tagName)return e.h(l.ElTable,{...r.properties},F);if("ElTableColumn"===r.tagName)return e.h(l.ElTableColumn,{...r.properties},{default:e=>{var t,l;const s=null==(t=r.children)?void 0:t.map(r=>X(r,P,e.row)),n=null==(l=r.children)?void 0:l.findIndex(t=>{var l;return t.value===e.row[null==(l=r.properties)?void 0:l.prop]});return-1===n?s:null==s?void 0:s[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("pre"===r.tagName){const t=null==(N=r.children)?void 0:N.find(e=>"code"===e.tagName);if(t&&(null==(A=null==(w=t.properties)?void 0:w.className)?void 0:A.includes("language-CorePilot"))){const r=(null==(R=null==(L=t.children)?void 0:L[0])?void 0:R.value)||"",l=JSON.parse(r),s=n.parseCorePilot(l),o=X(s,P);return e.h("div",{class:"hitl-wrapper"},[o])}}return e.h(r.tagName,r.properties,F);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{P=0}),{hastToVNode:X,ast:L,container:x,renderComplete:D,getContentText:()=>{var e;return null==(e=x.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=k;
|
|
1
|
+
"use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),l=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js"),/* empty css */;/* empty css */const s=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js"),d=require("../core-table/index.js");;/* empty css */const p=require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js"),m=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),c=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),v=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),h=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),_=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),f=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),g=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),y=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),k=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),x=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(x,{emit:q}){const j=e.useTemplateRef("x-markdown-container"),E=e.ref(Date.now()),N=e.ref(-1/0),w=e.ref(""),A=new Set,S=e.ref(!1),C=e.ref(!1),T=e.ref([]),P=t.useTemplateRefsList(),L=e.ref(0);let R=0;const F=e.ref(null),V=e.ref(s.createStreamGenerator(e=>{w.value=w.value+e},x.speed)),$=e.computed(()=>{if(!x.autoHideThinking)return w.value;let e=w.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,l,s)=>{const n="</div>"===s;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${l}${s}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){N.value===-1/0&&(N.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(l){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const l=((N.value-E.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${l>"0"?l+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),D=e.computed(()=>x.isHistoryMessage);e.watch(()=>[x.text,x.typing],(e,r)=>{var t,l,s,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=V.value)||t.reset(),w.value=""),o){if(null==(l=V.value)||l.update(o),!i)return void(null==(s=V.value)||s.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!C.value&&e.test(o))return C.value=!0,void(null==(n=V.value)||n.setSpeed(500))}},{immediate:!0});const H=e.ref([]),U=r(()=>{(()=>{var e;const r=null==(e=j.value)?void 0:e.querySelector("div[hidden]");H.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),q("refConfigUpdate",H.value)})()},100),B=e.ref(null);e.watch(()=>w.value,U,{immediate:!0}),e.watch(B,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=H.value.find(e=>e.link===r);q("hoverActiveRefTrigger",t)}else q("hoverActiveRefTrigger","")});const M=e=>{const r=e.target;if("SPAN"===r.tagName){const e=r.classList.contains("x-markdown-split"),t=r.classList.contains("x-markdown-sub");if(e||t)return t?r:r.parentElement}},W=e=>{const r=M(e);B.value=r||null},I=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),s=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();s?(l.ElMessage("文件下载中..."),q("downloadFile",{title:n,id:s,ext:o,href:t})):window.open(t,"_blank")})(e);const r=M(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),l=Number(r.getAttribute("datanumber")),s=r.getAttribute("id"),n={...H.value.find(r=>r.link===e),highlight:t,page:l,id:s};q("clickActiveRefTrigger",n)}};e.onMounted(()=>{j.value.addEventListener("mouseover",W),j.value.addEventListener("click",I)}),e.onBeforeUnmount(()=>{j.value.removeEventListener("mouseover",W),j.value.addEventListener("click",I)});const J=()=>{if(!j.value)return;j.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{A.has(e)||(A.add(e),O(e),e.complete?G(e):(e.addEventListener("load",()=>G(e)),e.addEventListener("error",()=>z(e))))})},O=e=>{const r=e.parentElement.offsetWidth;if(e.naturalWidth>r&&(e.style.maxWidth="100%"),e.naturalWidth&&e.naturalHeight){const t=e.naturalHeight/e.naturalWidth;e.style.maxHeight=`${Math.min(500,r*t)}px`}},G=e=>{A.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",G),e.removeEventListener("error",z)},z=e=>{A.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",G),e.removeEventListener("error",z)},X=m.unified().use(c).use(v).use(h,{singleTilde:!1}).use(_).use(f).use(g,{allowDangerousHtml:!0}).use(y).use(k).use(b),K=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const l=(null==(t=e.properties)?void 0:t.data)||{};return void r.push(l)}Array.isArray(e.children)&&e.children.forEach(e=>{K(e,r)})}};e.watch(()=>$.value,async r=>{R=0;const t=await X.run(X.parse(r)),l=(e=>{const r=[],t=[],l=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(l))};return Array.isArray(e.children)&&e.children.forEach(l),t.forEach(e=>{var t,l,s,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(s=null==(l=null==i?void 0:i.properties)?void 0:l.className)?void 0:s.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);K(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);T.value=l,await e.nextTick(),F.value=t,e.nextTick(J),e.nextTick(()=>{var e;const r=null==(e=j.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!S.value&&(S.value=!0,new o.Accordion(r))})},{immediate:!0});const Q=(r,t,s)=>{var o,m,c,v,h,_,f,g,y,k,b,x,j,E,N,w,A,S,C,F,V;if(!r)return null;let $=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||($=(null==(m=null==(o=r.children)?void 0:o.map)?void 0:m.call(o,e=>Q(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(l.ElConfigProvider,{locale:p},$));case"element":if("sub"===r.tagName){const l=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],s=null==l?void 0:l.map(e=>Q(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},s)}if("span"===r.tagName)return e.h("span",{...r.properties},$);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(c=r.properties)?void 0:c.href)||"",l=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":l},$)}if("ElTimeline"===r.tagName)return e.h(l.ElTimeline,{...r.properties},$);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",$)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[$[L.value]]);if("ElRow"===r.tagName)return e.h(l.ElRow,{...r.properties},$);if("ElCol"===r.tagName)return e.h(l.ElCol,{...r.properties},$);if("ElCard"===r.tagName)return e.h(l.ElCard,{...r.properties},$);if("ElForm"===r.tagName){const s=null==(v=r.children)?void 0:v.map(e=>Q(e,R));return R++,e.h(l.ElForm,{ref:P.value.set,model:T.value[t],...r.properties,disabled:(null==(h=r.properties)?void 0:h.disabled)||D.value},s)}if("ElFormItem"===r.tagName)return e.h(l.ElFormItem,{...r.properties},$);if("ElButton"===r.tagName){let n=null==(_=r.properties)?void 0:_.payload;return"table"===r.parentScope&&(n=s),e.h(l.ElButton,{...r.properties,disabled:(null==(f=r.properties)?void 0:f.disabled)||D.value,onClick:()=>{var e;(async(e,r,t,l)=>{var s;if("inner_next"===r)return void(L.value+=1);if("inner_prev"===r)return void(L.value-=1);let n={action:r,payload:{}};t&&"form"!==l?n={action:r,payload:t}:(await(null==(s=P.value[e])?void 0:s.validate()),n={action:r,payload:{...T.value[e],...t}}),q("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},$)}if("ElSelect"===r.tagName)return e.h(l.ElSelect,{...r.properties,disabled:(null==(g=r.properties)?void 0:g.disabled)||D.value,modelValue:T.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElDatePicker"===r.tagName)return e.h(l.ElDatePicker,{...r.properties,disabled:(null==(k=r.properties)?void 0:k.disabled)||D.value,modelValue:T.value[t][null==(b=r.properties)?void 0:b.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElInput"===r.tagName)return e.h(l.ElInput,{...r.properties,disabled:(null==(x=r.properties)?void 0:x.disabled)||D.value,modelValue:T.value[t][null==(j=r.properties)?void 0:j.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElRadioGroup"===r.tagName)return e.h(l.ElRadioGroup,{...r.properties,disabled:(null==(E=r.properties)?void 0:E.disabled)||D.value,modelValue:T.value[t][null==(N=r.properties)?void 0:N.formProp],"onUpdate:modelValue":e=>{var l;T.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},$);if("ElRadio"===r.tagName)return e.h(l.ElRadio,{...r.properties,disabled:(null==(w=r.properties)?void 0:w.disabled)||D.value},$);if("ElTable"===r.tagName)return e.h(d,{...r.properties},$);if("ElTableColumn"===r.tagName)return e.h(l.ElTableColumn,{...r.properties},{default:e=>{var t,l;const s=null==(t=r.children)?void 0:t.map(r=>Q(r,R,e.row)),n=null==(l=r.children)?void 0:l.findIndex(t=>{var l;return t.value===e.row[null==(l=r.properties)?void 0:l.prop]});return-1===n?s:null==s?void 0:s[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("pre"===r.tagName){const t=null==(A=r.children)?void 0:A.find(e=>"code"===e.tagName);if(t&&(null==(C=null==(S=t.properties)?void 0:S.className)?void 0:C.includes("language-CorePilot"))){const r=(null==(V=null==(F=t.children)?void 0:F[0])?void 0:V.value)||"",l=JSON.parse(r),s=n.parseCorePilot(l),o=Q(s,R);return e.h("div",{class:"hitl-wrapper"},[o])}}return e.h(r.tagName,r.properties,$);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{R=0}),{hastToVNode:Q,ast:F,container:j,renderComplete:U,getContentText:()=>{var e;return null==(e=j.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=x;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|