@core-pilot/client-vue 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client-vue.css +1 -1
- package/dist/cjs/components/bubble-list/index.js +1 -1
- package/dist/cjs/components/bubble-list/index.js.map +1 -1
- package/dist/cjs/components/core-card/index.js +2 -0
- package/dist/cjs/components/core-card/index.js.map +1 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js.map +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/bubble-list/index.js +1 -0
- package/dist/es/components/bubble-list/index.js.map +1 -1
- package/dist/es/components/core-card/index.js +76 -0
- package/dist/es/components/core-card/index.js.map +1 -0
- package/dist/es/components/index.js +2 -0
- package/dist/es/components/index.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +107 -21
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +7 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/es/index.js +2 -0
- package/dist/es/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),t=require("vue-element-plus-x");;/* empty css */const i=require("./actionBar.js"),o=require("../x-markdown/index.js"),
|
|
1
|
+
"use strict";const e=require("vue"),t=require("vue-element-plus-x");;/* empty css */const i=require("./actionBar.js"),o=require("../x-markdown/index.js"),s=e.defineComponent({props:{list:{type:Array,default:()=>[]},btnLoading:{type:Boolean,default:!0},maxHeight:{type:String,default:"500px"},autoHideThinking:{type:Boolean,default:!0},speed:{type:Number,default:200},disLikeFeedbackList:{type:Array,default:()=>{}},likeFeedbackList:{type:Array,default:()=>{}}},expose:["showLastActionGroup","scrollToBottom","hideLastActionGroup"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","like","dislike","regenerate","copy","refConfigUpdate","questionClick","downloadFile","coreSubmit"],setup(t,{emit:o}){const s=e.useTemplateRef("bubbleList"),n=e.useTemplateRef("bubbleListContainer"),l=e.ref(!1),r=e.ref(null),a=e.ref(()=>{});e.watch(()=>r.value,(e,t)=>{var i;if(null===e)return;if(t===e)return;const s=null==(i=r.value)?void 0:i.querySelector("div[hidden]"),n=JSON.parse((null==s?void 0:s.textContent)||"[]");o("refConfigUpdate",n)}),e.watch(()=>t.list.length,()=>{console.log("props.list.length",t.list.length),e.nextTick(()=>{a.value(),a.value=g()})});const c=(e,t,i,s)=>{o(e,{content:t,message:s,cancel:i})},u=e=>{o("questionClick",e)},d=e=>t.list[t.list.length-1]===e,g=()=>{const e=n.value.querySelectorAll(".el-bubble-start"),t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const t=e.boundingClientRect.bottom,i=e.target.clientHeight,o=n.value.getBoundingClientRect().bottom;Math.abs(t-o)<i&&(r.value=e.target)}})},{root:n.value,threshold:[.1,.9]});return e.forEach(e=>{t.observe(e)}),()=>{t.disconnect()}};return e.onMounted(()=>{a.value=g()}),{hoverActiveRefTrigger:e=>{o("hoverActiveRefTrigger",e)},showLastActionGroup:()=>{l.value=!0},hideLastActionGroup:()=>{l.value=!1},showLastBubbleFooter:l,clickActiveRefTrigger:e=>{o("clickActiveRefTrigger",e)},clickAction:c,scrollToBottom:()=>{var e;null==(e=s.value)||e.scrollToBottom()},lastRefConfigUpdate:(e,i)=>{t.list[t.list.length-1]===i&&o("refConfigUpdate",e)},getQuestions:t=>t.questions&&t.questions.length>0?e.createVNode("div",{class:"question-list"},[t.questions.map((t,i)=>e.createVNode("span",{class:"question-item",key:i,onClick:()=>u(t)},[t,e.createVNode("span",{class:"icon"},null)]))]):null,questionClick:u,isLastItem:d,getActionBar:o=>{if("boolean"==typeof o.showActions&&!o.showActions)return null;const s=d(o);return s&&l.value?e.createVNode(i,{isLast:s,content:o.content,message:o,disLikeFeedbackList:t.disLikeFeedbackList,likeFeedbackList:t.likeFeedbackList,onClick:(e,t,i)=>c(e,t,i,o)},null):s?void 0:e.createVNode(i,{isLast:s,content:o.content,message:o,disLikeFeedbackList:t.disLikeFeedbackList,likeFeedbackList:t.likeFeedbackList,onClick:(e,t,i)=>c(e,t,i,o)},null)},onDownloadFile:e=>{o("downloadFile",e)},coreSubmit:(e,t)=>{o("coreSubmit",e,t)}}},render(){return e.createVNode("div",{ref:"bubbleListContainer",class:"bubble-list"},[e.createVNode(t.BubbleList,{ref:"bubbleList",list:this.list,btnLoading:this.btnLoading,maxHeight:this.maxHeight},{header:({item:i})=>{var o;return(null==(o=i.files)?void 0:o.length)?e.createVNode("div",{class:"bubble-item-header"},[i.files.map(i=>e.createVNode(t.FilesCard,{name:i.name,status:"done"},null))]):null},content:({item:t})=>e.createVNode(o,{key:t.id,typing:t.typing,speed:this.speed,text:t.content,historyInputs:t.historyInputs,isHistoryMessage:t.isHistoryMessage,autoHideThinking:this.autoHideThinking,onHoverActiveRefTrigger:this.hoverActiveRefTrigger,onClickActiveRefTrigger:this.clickActiveRefTrigger,onRefConfigUpdate:e=>this.lastRefConfigUpdate(e,t),onDownloadFile:this.onDownloadFile,onCoreSubmit:e=>this.coreSubmit(e,t)},null),footer:({item:t})=>"ai"===t.role?e.createVNode("div",null,[this.getActionBar(t),this.getQuestions(t)]):null})])}});module.exports=s;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/bubble-list/index.tsx"],"sourcesContent":["import { defineComponent, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { BubbleList, FilesCard } from 'vue-element-plus-x';\nimport type { BubbleListItemProps } from 'vue-element-plus-x/types/BubbleList';\nimport './style/index.less';\nimport ActionBar, { BtnItemConfig } from './actionBar';\nimport XMarkdown from '../x-markdown';\n\nexport interface FeedbackItem {\n title: string;\n content: string;\n checked: boolean;\n // showInput?: boolean; // 是否显示输入框\n}\n\nexport interface MessageItem extends BubbleListItemProps {\n role: 'user' | 'ai';\n questions?: Array<string>;\n speed?: number;\n id: string;\n showActions?: boolean;\n feedback?: 'like' | 'dislike';\n files?: Array<{\n id: string,\n extension: string,\n name: string,\n }>;\n isHistoryMessage?: boolean;\n}\n\nexport default defineComponent({\n props: {\n list: {\n type: Array as () => Array<MessageItem>,\n default: () => [],\n },\n btnLoading: {\n type: Boolean,\n default: true,\n },\n maxHeight: {\n type: String,\n default: '500px',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n speed: {\n type: Number,\n default: 200,\n },\n disLikeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n likeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n },\n expose: ['showLastActionGroup', 'scrollToBottom', 'hideLastActionGroup'],\n emits: [\n 'hoverActiveRefTrigger',\n 'clickActiveRefTrigger',\n 'like',\n 'dislike',\n 'regenerate',\n 'copy',\n 'refConfigUpdate',\n 'questionClick',\n 'downloadFile',\n 'coreSubmit',\n ],\n setup(props, { emit }) {\n const bubbleList = useTemplateRef<typeof BubbleList>('bubbleList');\n const bubbleListContainer = useTemplateRef<Element>('bubbleListContainer');\n const showLastBubbleFooter = ref(false);\n const curActiveItem = ref<Element | null>(null);\n const destoryObserver = ref<Function>(() => {});\n\n watch(() => curActiveItem.value, (newVal, oldVal) => {\n if (newVal === null) {\n return;\n }\n if (oldVal === newVal) {\n return;\n }\n const refContainer = (curActiveItem.value as HTMLElement)?.querySelector('div[hidden]');\n const curRefList = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', curRefList);\n })\n\n watch(() => props.list.length, () => {\n console.log('props.list.length', props.list.length);\n nextTick(() => {\n destoryObserver.value();\n destoryObserver.value = scrollTrigger();\n })\n })\n\n const hoverActiveRefTrigger = (item) => {\n emit('hoverActiveRefTrigger', item);\n }\n\n const clickActiveRefTrigger = (item) => {\n emit('clickActiveRefTrigger', item);\n }\n\n const showLastActionGroup = () => {\n showLastBubbleFooter.value = true;\n }\n\n const hideLastActionGroup = () => {\n showLastBubbleFooter.value = false;\n }\n\n const clickAction = (type: BtnItemConfig['type'], content, cancel, item) => {\n emit(type, { content, message: item, cancel })\n }\n\n const scrollToBottom = () => {\n (bubbleList.value as any)?.scrollToBottom();\n }\n\n const lastRefConfigUpdate = (refList, item) => {\n // 更新最后一条消息的引用列表\n if (props.list[props.list.length - 1] === item) {\n emit('refConfigUpdate', refList);\n }\n }\n\n const getQuestions = (item) => {\n if (item.questions && item.questions.length > 0) {\n return (\n <div class='question-list'>\n {\n item.questions.map((question, index) => {\n return (\n <span\n class='question-item'\n key={index}\n onClick={() => questionClick(question)}\n >\n {question}\n <span class='icon'></span>\n </span>\n )\n })\n }\n </div>\n )\n }\n return null;\n }\n\n const questionClick = (q) => {\n emit('questionClick', q)\n }\n\n const isLastItem = (item: MessageItem) => {\n return props.list[props.list.length - 1] === item;\n }\n\n const getActionBar = (item: MessageItem) => {\n // 如果当前项中明确指定不显示actionbar,则不显示\n if (typeof item.showActions === 'boolean' && !item.showActions) {\n return null;\n }\n const isLast = isLastItem(item);\n if (isLast && showLastBubbleFooter.value) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n )\n }\n if (!isLast) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n );\n }\n }\n\n const onDownloadFile = (payload) => {\n emit('downloadFile', payload);\n }\n\n const scrollTrigger = () => {\n const messageItems = bubbleListContainer.value!.querySelectorAll('.el-bubble-start');\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const itemBottom = entry.boundingClientRect.bottom;\n const height = entry.target.clientHeight;\n const listBottom = bubbleListContainer.value!.getBoundingClientRect().bottom;\n \n if (Math.abs(itemBottom - listBottom) < height) {\n curActiveItem.value = entry.target;\n }\n }\n });\n }, {\n root: bubbleListContainer.value!,\n threshold: [0.1, 0.9]\n });\n\n // 3. 为所有消息项添加监听\n messageItems.forEach(item => {\n observer.observe(item);\n });\n\n return () => {\n observer.disconnect();\n }\n }\n\n const coreSubmit = (payload, item) => {\n emit('coreSubmit', payload, item);\n }\n\n onMounted(() => {\n destoryObserver.value = scrollTrigger();\n })\n\n return {\n hoverActiveRefTrigger,\n showLastActionGroup,\n hideLastActionGroup,\n showLastBubbleFooter,\n clickActiveRefTrigger,\n clickAction,\n scrollToBottom,\n lastRefConfigUpdate,\n getQuestions,\n questionClick,\n isLastItem,\n getActionBar,\n onDownloadFile,\n coreSubmit,\n };\n },\n\n render() {\n return (\n <div\n ref=\"bubbleListContainer\"\n class=\"bubble-list\"\n >\n <BubbleList\n ref=\"bubbleList\"\n list={this.list}\n btnLoading={this.btnLoading}\n maxHeight={this.maxHeight}\n >\n {{\n header: ({ item }: { item: MessageItem }) => {\n if (!item.files?.length) {\n return null;\n }\n return (\n <div class=\"bubble-item-header\">\n {\n item.files.map((item) => (\n <FilesCard\n name={item.name}\n status=\"done\"\n />\n ))\n }\n </div>\n )\n },\n content: ({ item }: { item: MessageItem }) => (\n <XMarkdown\n key={item.id}\n typing={item.typing as boolean}\n speed={this.speed}\n text={item.content}\n isHistoryMessage={item.isHistoryMessage}\n autoHideThinking={this.autoHideThinking}\n onHoverActiveRefTrigger={this.hoverActiveRefTrigger}\n onClickActiveRefTrigger={this.clickActiveRefTrigger}\n onRefConfigUpdate={(refList) => this.lastRefConfigUpdate(refList, item)}\n onDownloadFile={this.onDownloadFile}\n onCoreSubmit={(payload) => this.coreSubmit(payload, item)}\n />\n ),\n footer: ({ item }: { item: MessageItem }) => {\n if (item.role === 'ai') {\n return (\n <div>\n {\n this.getActionBar(item)\n }\n {\n this.getQuestions(item)\n }\n </div>\n )\n }\n return null;\n }\n }}\n </BubbleList>\n </div>\n );\n }\n});"],"names":["index","props","list","type","Array","default","btnLoading","Boolean","maxHeight","String","autoHideThinking","speed","Number","disLikeFeedbackList","likeFeedbackList","expose","emits","setup","emit","bubbleList","useTemplateRef","bubbleListContainer","showLastBubbleFooter","ref","curActiveItem","destoryObserver","watch","value","newVal","oldVal","refContainer","querySelector","curRefList","JSON","parse","textContent","length","console","log","nextTick","scrollTrigger","clickAction","content","cancel","item","message","questionClick","q","isLastItem","messageItems","querySelectorAll","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","itemBottom","boundingClientRect","bottom","height","target","clientHeight","listBottom","getBoundingClientRect","Math","abs","root","threshold","observe","disconnect","onMounted","hoverActiveRefTrigger","showLastActionGroup","hideLastActionGroup","clickActiveRefTrigger","scrollToBottom","lastRefConfigUpdate","refList","getQuestions","questions","_createVNode","class","map","question","key","onClick","getActionBar","showActions","isLast","ActionBar","onDownloadFile","payload","coreSubmit","render","BubbleList","this","header","files","FilesCard","name","status","XMarkdown","id","typing","text","isHistoryMessage","onHoverActiveRefTrigger","onClickActiveRefTrigger","onRefConfigUpdate","onCoreSubmit","footer","role"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/bubble-list/index.tsx"],"sourcesContent":["import { defineComponent, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { BubbleList, FilesCard } from 'vue-element-plus-x';\nimport type { BubbleListItemProps } from 'vue-element-plus-x/types/BubbleList';\nimport './style/index.less';\nimport ActionBar, { BtnItemConfig } from './actionBar';\nimport XMarkdown from '../x-markdown';\n\nexport interface FeedbackItem {\n title: string;\n content: string;\n checked: boolean;\n // showInput?: boolean; // 是否显示输入框\n}\n\nexport interface MessageItem extends BubbleListItemProps {\n role: 'user' | 'ai';\n questions?: Array<string>;\n speed?: number;\n id: string;\n showActions?: boolean;\n feedback?: 'like' | 'dislike';\n files?: Array<{\n id: string,\n extension: string,\n name: string,\n }>;\n isHistoryMessage?: boolean;\n historyInputs?: Record<string, any>;\n}\n\nexport default defineComponent({\n props: {\n list: {\n type: Array as () => Array<MessageItem>,\n default: () => [],\n },\n btnLoading: {\n type: Boolean,\n default: true,\n },\n maxHeight: {\n type: String,\n default: '500px',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n speed: {\n type: Number,\n default: 200,\n },\n disLikeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n likeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n },\n expose: ['showLastActionGroup', 'scrollToBottom', 'hideLastActionGroup'],\n emits: [\n 'hoverActiveRefTrigger',\n 'clickActiveRefTrigger',\n 'like',\n 'dislike',\n 'regenerate',\n 'copy',\n 'refConfigUpdate',\n 'questionClick',\n 'downloadFile',\n 'coreSubmit',\n ],\n setup(props, { emit }) {\n const bubbleList = useTemplateRef<typeof BubbleList>('bubbleList');\n const bubbleListContainer = useTemplateRef<Element>('bubbleListContainer');\n const showLastBubbleFooter = ref(false);\n const curActiveItem = ref<Element | null>(null);\n const destoryObserver = ref<Function>(() => {});\n\n watch(() => curActiveItem.value, (newVal, oldVal) => {\n if (newVal === null) {\n return;\n }\n if (oldVal === newVal) {\n return;\n }\n const refContainer = (curActiveItem.value as HTMLElement)?.querySelector('div[hidden]');\n const curRefList = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', curRefList);\n })\n\n watch(() => props.list.length, () => {\n console.log('props.list.length', props.list.length);\n nextTick(() => {\n destoryObserver.value();\n destoryObserver.value = scrollTrigger();\n })\n })\n\n const hoverActiveRefTrigger = (item) => {\n emit('hoverActiveRefTrigger', item);\n }\n\n const clickActiveRefTrigger = (item) => {\n emit('clickActiveRefTrigger', item);\n }\n\n const showLastActionGroup = () => {\n showLastBubbleFooter.value = true;\n }\n\n const hideLastActionGroup = () => {\n showLastBubbleFooter.value = false;\n }\n\n const clickAction = (type: BtnItemConfig['type'], content, cancel, item) => {\n emit(type, { content, message: item, cancel })\n }\n\n const scrollToBottom = () => {\n (bubbleList.value as any)?.scrollToBottom();\n }\n\n const lastRefConfigUpdate = (refList, item) => {\n // 更新最后一条消息的引用列表\n if (props.list[props.list.length - 1] === item) {\n emit('refConfigUpdate', refList);\n }\n }\n\n const getQuestions = (item) => {\n if (item.questions && item.questions.length > 0) {\n return (\n <div class='question-list'>\n {\n item.questions.map((question, index) => {\n return (\n <span\n class='question-item'\n key={index}\n onClick={() => questionClick(question)}\n >\n {question}\n <span class='icon'></span>\n </span>\n )\n })\n }\n </div>\n )\n }\n return null;\n }\n\n const questionClick = (q) => {\n emit('questionClick', q)\n }\n\n const isLastItem = (item: MessageItem) => {\n return props.list[props.list.length - 1] === item;\n }\n\n const getActionBar = (item: MessageItem) => {\n // 如果当前项中明确指定不显示actionbar,则不显示\n if (typeof item.showActions === 'boolean' && !item.showActions) {\n return null;\n }\n const isLast = isLastItem(item);\n if (isLast && showLastBubbleFooter.value) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n )\n }\n if (!isLast) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n );\n }\n }\n\n const onDownloadFile = (payload) => {\n emit('downloadFile', payload);\n }\n\n const scrollTrigger = () => {\n const messageItems = bubbleListContainer.value!.querySelectorAll('.el-bubble-start');\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const itemBottom = entry.boundingClientRect.bottom;\n const height = entry.target.clientHeight;\n const listBottom = bubbleListContainer.value!.getBoundingClientRect().bottom;\n \n if (Math.abs(itemBottom - listBottom) < height) {\n curActiveItem.value = entry.target;\n }\n }\n });\n }, {\n root: bubbleListContainer.value!,\n threshold: [0.1, 0.9]\n });\n\n // 3. 为所有消息项添加监听\n messageItems.forEach(item => {\n observer.observe(item);\n });\n\n return () => {\n observer.disconnect();\n }\n }\n\n const coreSubmit = (payload, item) => {\n emit('coreSubmit', payload, item);\n }\n\n onMounted(() => {\n destoryObserver.value = scrollTrigger();\n })\n\n return {\n hoverActiveRefTrigger,\n showLastActionGroup,\n hideLastActionGroup,\n showLastBubbleFooter,\n clickActiveRefTrigger,\n clickAction,\n scrollToBottom,\n lastRefConfigUpdate,\n getQuestions,\n questionClick,\n isLastItem,\n getActionBar,\n onDownloadFile,\n coreSubmit,\n };\n },\n\n render() {\n return (\n <div\n ref=\"bubbleListContainer\"\n class=\"bubble-list\"\n >\n <BubbleList\n ref=\"bubbleList\"\n list={this.list}\n btnLoading={this.btnLoading}\n maxHeight={this.maxHeight}\n >\n {{\n header: ({ item }: { item: MessageItem }) => {\n if (!item.files?.length) {\n return null;\n }\n return (\n <div class=\"bubble-item-header\">\n {\n item.files.map((item) => (\n <FilesCard\n name={item.name}\n status=\"done\"\n />\n ))\n }\n </div>\n )\n },\n content: ({ item }: { item: MessageItem }) => (\n <XMarkdown\n key={item.id}\n typing={item.typing as boolean}\n speed={this.speed}\n text={item.content}\n historyInputs={item.historyInputs}\n isHistoryMessage={item.isHistoryMessage}\n autoHideThinking={this.autoHideThinking}\n onHoverActiveRefTrigger={this.hoverActiveRefTrigger}\n onClickActiveRefTrigger={this.clickActiveRefTrigger}\n onRefConfigUpdate={(refList) => this.lastRefConfigUpdate(refList, item)}\n onDownloadFile={this.onDownloadFile}\n onCoreSubmit={(payload) => this.coreSubmit(payload, item)}\n />\n ),\n footer: ({ item }: { item: MessageItem }) => {\n if (item.role === 'ai') {\n return (\n <div>\n {\n this.getActionBar(item)\n }\n {\n this.getQuestions(item)\n }\n </div>\n )\n }\n return null;\n }\n }}\n </BubbleList>\n </div>\n );\n }\n});"],"names":["index","props","list","type","Array","default","btnLoading","Boolean","maxHeight","String","autoHideThinking","speed","Number","disLikeFeedbackList","likeFeedbackList","expose","emits","setup","emit","bubbleList","useTemplateRef","bubbleListContainer","showLastBubbleFooter","ref","curActiveItem","destoryObserver","watch","value","newVal","oldVal","refContainer","querySelector","curRefList","JSON","parse","textContent","length","console","log","nextTick","scrollTrigger","clickAction","content","cancel","item","message","questionClick","q","isLastItem","messageItems","querySelectorAll","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","itemBottom","boundingClientRect","bottom","height","target","clientHeight","listBottom","getBoundingClientRect","Math","abs","root","threshold","observe","disconnect","onMounted","hoverActiveRefTrigger","showLastActionGroup","hideLastActionGroup","clickActiveRefTrigger","scrollToBottom","lastRefConfigUpdate","refList","getQuestions","questions","_createVNode","class","map","question","key","onClick","getActionBar","showActions","isLast","ActionBar","onDownloadFile","payload","coreSubmit","render","BubbleList","this","header","files","FilesCard","name","status","XMarkdown","id","typing","text","historyInputs","isHistoryMessage","onHoverActiveRefTrigger","onClickActiveRefTrigger","onRefConfigUpdate","onCoreSubmit","footer","role"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("vue"),s=require("element-plus");/* empty css *//* empty css */;/* empty css */const l=e.defineComponent({name:"CoreCard",props:{header:{type:String,default:""},shadow:{type:String,default:"always"},collapsible:{type:Boolean,default:!0},defaultCollapsed:{type:Boolean,default:!1}},setup(s,{slots:l}){const a=e.ref(s.defaultCollapsed),o=e.computed(()=>a.value?"core-card__collapse-icon--collapsed":"core-card__collapse-icon--expanded");return{isCollapsed:a,toggleCollapse:()=>{s.collapsible&&(a.value=!a.value)},collapseIconClass:o}},render(){const l=this.header||this.$slots.header;return e.createVNode(s.ElCard,{class:"core-card",shadow:this.shadow},{header:l?()=>e.createVNode("div",{class:"core-card__header",onClick:this.toggleCollapse,style:this.collapsible?{cursor:"pointer"}:{}},[e.createVNode("span",{class:"core-card__header-text"},[this.$slots.header?this.$slots.header():this.header]),this.collapsible&&e.createVNode("i",{class:`core-card__collapse-icon ${this.collapseIconClass}`},null)]):void 0,default:()=>{var s,l;return e.createVNode("div",{class:{"core-card__body":!0,"core-card__body--collapsed":this.isCollapsed}},[null==(l=(s=this.$slots).default)?void 0:l.call(s)])}})}});module.exports=l;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/core-card/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed } from 'vue';\nimport { ElCard } from 'element-plus';\nimport './style.less';\n\nexport default defineComponent({\n name: 'CoreCard',\n props: {\n header: {\n type: String,\n default: '',\n },\n shadow: {\n type: String as PropType<'always' | 'never' | 'hover'>,\n default: 'always',\n },\n collapsible: {\n type: Boolean,\n default: true,\n },\n defaultCollapsed: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const isCollapsed = ref(props.defaultCollapsed);\n\n const toggleCollapse = () => {\n if (props.collapsible) {\n isCollapsed.value = !isCollapsed.value;\n }\n };\n\n const collapseIconClass = computed(() => {\n return isCollapsed.value ? 'core-card__collapse-icon--collapsed' : 'core-card__collapse-icon--expanded';\n });\n\n return {\n isCollapsed,\n toggleCollapse,\n collapseIconClass,\n };\n },\n render() {\n const hasHeader = this.header || this.$slots.header;\n \n return (\n <ElCard\n class=\"core-card\"\n shadow={this.shadow}\n >\n {{\n header: hasHeader ? () => (\n <div \n class=\"core-card__header\" \n onClick={this.toggleCollapse}\n style={this.collapsible ? { cursor: 'pointer' } : {}}\n >\n <span class=\"core-card__header-text\">\n {this.$slots.header ? this.$slots.header() : this.header}\n </span>\n {this.collapsible && (\n <i class={`core-card__collapse-icon ${this.collapseIconClass}`}></i>\n )}\n </div>\n ) : undefined,\n default: () => (\n <div\n class={{\n 'core-card__body': true,\n 'core-card__body--collapsed': this.isCollapsed,\n }}\n >\n {this.$slots.default?.()}\n </div>\n ),\n }}\n </ElCard>\n );\n },\n});\n\n"],"names":["CoreCard","name","props","header","type","String","default","shadow","collapsible","Boolean","defaultCollapsed","setup","slots","isCollapsed","ref","collapseIconClass","computed","value","toggleCollapse","render","hasHeader","this","$slots","_createVNode","ElCard","class","onClick","style","cursor","undefined","_b","_a"],"mappings":"iXAIA,MAAAA,oBAA+B,CAC7BC,KAAM,WACNC,MAAO,CACLC,OAAQ,CACNC,KAAMC,OACNC,QAAS,IAEXC,OAAQ,CACNH,KAAMC,OACNC,QAAS,UAEXE,YAAa,CACXJ,KAAMK,QACNH,SAAS,GAEXI,iBAAkB,CAChBN,KAAMK,QACNH,SAAS,IAGbK,KAAAA,CAAMT,GAAOU,MAAEA,IACb,MAAMC,EAAcC,EAAAA,IAAIZ,EAAMQ,kBAQxBK,EAAoBC,EAAAA,SAAS,IAC1BH,EAAYI,MAAQ,sCAAwC,sCAGrE,MAAO,CACLJ,cACAK,eAZqBA,KACjBhB,EAAMM,cACRK,EAAYI,OAASJ,EAAYI,QAWnCF,oBAEJ,EACAI,MAAAA,GACE,MAAMC,EAAYC,KAAKlB,QAAUkB,KAAKC,OAAOnB,OAE7C,OAAAoB,EAAAA,YAAAC,EAAAA,OAAA,CAAAC,MAAA,YAAAlB,OAGYc,KAAKd,QAAM,CAGjBJ,OAAQiB,EAAY,IAAAG,EAAAA,YAAA,MAAA,CAAAE,MAAA,oBAAAC,QAGPL,KAAKH,eAAcS,MACrBN,KAAKb,YAAc,CAAEoB,OAAQ,WAAc,CAAA,GAAE,CAAAL,EAAAA,YAAA,OAAA,CAAAE,MAAA,0BAAA,CAGjDJ,KAAKC,OAAOnB,OAASkB,KAAKC,OAAOnB,SAAWkB,KAAKlB,SAEnDkB,KAAKb,aAAWe,EAAAA,YAAA,IAAA,CAAAE,MACL,4BAA4BJ,KAAKN,qBAAmB,aAGhEc,EACJvB,QAASA,aAAAiB,OAAAA,EAAAA,YAAA,MAAA,CAAAE,MAEE,CACL,mBAAmB,EACnB,6BAA8BJ,KAAKR,cACpC,CAEA,OAAAiB,GAAAC,EAAAV,KAAKC,QAAOhB,8BAMzB"}
|
|
@@ -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"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./bubble-list/index.js"),r=require("./x-markdown/index.js"),i=require("./file-preview/index.js"),o=require("./editor-sender/index.js"),s=require("./file-card/index.js"),t=require("./core-text/index.js"),x=require("./core-tips/index.js"),d=require("./core-result/index.js"),n=require("./core-table/index.js"),u=require("./core-chart/index.js"),p=require("./core-card/index.js");exports.BubbleList=e,exports.XMarkdown=r,exports.FilePreview=i,exports.EditorSender=o,exports.FileCard=s,exports.CoreText=t,exports.CoreTips=x,exports.CoreResult=d,exports.CoreTable=n,exports.CoreChart=u,exports.CoreCard=p;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),l=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js"),/* empty css */;/* empty css */const s=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js"),d=require("../core-table/index.js"),p=require("../core-chart/index.js");;/* empty css */const m=require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js"),c=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),v=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),h=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),_=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),f=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),g=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),y=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),k=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),x=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),q=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(q,{emit:j}){const E=e.useTemplateRef("x-markdown-container"),N=e.ref(Date.now()),w=e.ref(-1/0),A=e.ref(""),C=new Set,S=e.ref(!1),T=e.ref(!1),P=e.ref([]),L=t.useTemplateRefsList(),R=e.ref(0);let F=0;const V=e.ref(null),$=e.ref(s.createStreamGenerator(e=>{A.value=A.value+e},q.speed)),D=e.computed(()=>{if(!q.autoHideThinking)return A.value;let e=A.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,l,s)=>{const n="</div>"===s;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${l}${s}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){w.value===-1/0&&(w.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(l){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const l=((w.value-N.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${l>"0"?l+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),H=e.computed(()=>q.isHistoryMessage);e.watch(()=>[q.text,q.typing],(e,r)=>{var t,l,s,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=$.value)||t.reset(),A.value=""),o){if(null==(l=$.value)||l.update(o),!i)return void(null==(s=$.value)||s.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!T.value&&e.test(o))return T.value=!0,void(null==(n=$.value)||n.setSpeed(500))}},{immediate:!0});const U=e.ref([]),B=r(()=>{(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("div[hidden]");U.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),j("refConfigUpdate",U.value)})()},100),M=e.ref(null);e.watch(()=>A.value,B,{immediate:!0}),e.watch(M,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=U.value.find(e=>e.link===r);j("hoverActiveRefTrigger",t)}else j("hoverActiveRefTrigger","")});const W=e=>{const r=e.target;if("SPAN"===r.tagName){const e=r.classList.contains("x-markdown-split"),t=r.classList.contains("x-markdown-sub");if(e||t)return t?r:r.parentElement}},I=e=>{const r=W(e);M.value=r||null},J=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),s=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();s?(l.ElMessage("文件下载中..."),j("downloadFile",{title:n,id:s,ext:o,href:t})):window.open(t,"_blank")})(e);const r=W(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),l=Number(r.getAttribute("datanumber")),s=r.getAttribute("id"),n={...U.value.find(r=>r.link===e),highlight:t,page:l,id:s};j("clickActiveRefTrigger",n)}};e.onMounted(()=>{E.value.addEventListener("mouseover",I),E.value.addEventListener("click",J)}),e.onBeforeUnmount(()=>{E.value.removeEventListener("mouseover",I),E.value.addEventListener("click",J)});const O=()=>{if(!E.value)return;E.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{C.has(e)||(C.add(e),G(e),e.complete?z(e):(e.addEventListener("load",()=>z(e)),e.addEventListener("error",()=>X(e))))})},G=e=>{const r=e.parentElement.offsetWidth;if(e.naturalWidth>r&&(e.style.maxWidth="100%"),e.naturalWidth&&e.naturalHeight){const t=e.naturalHeight/e.naturalWidth;e.style.maxHeight=`${Math.min(500,r*t)}px`}},z=e=>{C.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",z),e.removeEventListener("error",X)},X=e=>{C.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",z),e.removeEventListener("error",X)},K=c.unified().use(v).use(h).use(_,{singleTilde:!1}).use(f).use(g).use(y,{allowDangerousHtml:!0}).use(k).use(b).use(x),Q=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const l=(null==(t=e.properties)?void 0:t.data)||{};return void r.push(l)}Array.isArray(e.children)&&e.children.forEach(e=>{Q(e,r)})}};e.watch(()=>D.value,async r=>{F=0;const t=await K.run(K.parse(r)),l=(e=>{const r=[],t=[],l=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(l))};return Array.isArray(e.children)&&e.children.forEach(l),t.forEach(e=>{var t,l,s,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(s=null==(l=null==i?void 0:i.properties)?void 0:l.className)?void 0:s.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);Q(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);P.value=l,await e.nextTick(),V.value=t,e.nextTick(O),e.nextTick(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!S.value&&(S.value=!0,new o.Accordion(r))})},{immediate:!0});const Y=(r,t,s)=>{var o,c,v,h,_,f,g,y,k,b,x,q,E,N,w,A,C,S,T,V,$;if(!r)return null;let D=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(D=(null==(c=null==(o=r.children)?void 0:o.map)?void 0:c.call(o,e=>Y(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(l.ElConfigProvider,{locale:m},D));case"element":if("sub"===r.tagName){const l=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],s=null==l?void 0:l.map(e=>Y(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},s)}if("span"===r.tagName)return e.h("span",{...r.properties},D);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(v=r.properties)?void 0:v.href)||"",l=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":l},D)}if("ElTimeline"===r.tagName)return e.h(l.ElTimeline,{...r.properties},D);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",D)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[D[R.value]]);if("ElRow"===r.tagName)return e.h(l.ElRow,{...r.properties},D);if("ElCol"===r.tagName)return e.h(l.ElCol,{...r.properties},D);if("ElCard"===r.tagName)return e.h(l.ElCard,{...r.properties},D);if("ElForm"===r.tagName){const s=null==(h=r.children)?void 0:h.map(e=>Y(e,F));return F++,e.h(l.ElForm,{ref:L.value.set,model:P.value[t],...r.properties,disabled:(null==(_=r.properties)?void 0:_.disabled)||H.value},s)}if("ElFormItem"===r.tagName)return e.h(l.ElFormItem,{...r.properties},D);if("ElButton"===r.tagName){let n=null==(f=r.properties)?void 0:f.payload;return"table"===r.parentScope&&(n=s),e.h(l.ElButton,{...r.properties,disabled:(null==(g=r.properties)?void 0:g.disabled)||H.value,onClick:()=>{var e;(async(e,r,t,l)=>{var s;if("inner_next"===r)return void(R.value+=1);if("inner_prev"===r)return void(R.value-=1);let n={action:r,payload:{}};t&&"form"!==l?n={action:r,payload:t}:(await(null==(s=L.value[e])?void 0:s.validate()),n={action:r,payload:{...P.value[e],...t}}),j("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},D)}if("ElSelect"===r.tagName)return e.h(l.ElSelect,{...r.properties,disabled:(null==(y=r.properties)?void 0:y.disabled)||H.value,modelValue:P.value[t][null==(k=r.properties)?void 0:k.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElDatePicker"===r.tagName)return e.h(l.ElDatePicker,{...r.properties,disabled:(null==(b=r.properties)?void 0:b.disabled)||H.value,modelValue:P.value[t][null==(x=r.properties)?void 0:x.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElInput"===r.tagName)return e.h(l.ElInput,{...r.properties,disabled:(null==(q=r.properties)?void 0:q.disabled)||H.value,modelValue:P.value[t][null==(E=r.properties)?void 0:E.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElRadioGroup"===r.tagName)return e.h(l.ElRadioGroup,{...r.properties,disabled:(null==(N=r.properties)?void 0:N.disabled)||H.value,modelValue:P.value[t][null==(w=r.properties)?void 0:w.formProp],"onUpdate:modelValue":e=>{var l;P.value[t][null==(l=r.properties)?void 0:l.formProp]=e}},D);if("ElRadio"===r.tagName)return e.h(l.ElRadio,{...r.properties,disabled:(null==(A=r.properties)?void 0:A.disabled)||H.value},D);if("ElTable"===r.tagName)return e.h(d,{...r.properties},D);if("ElTableColumn"===r.tagName)return e.h(l.ElTableColumn,{...r.properties},{default:e=>{var t,l;const s=null==(t=r.children)?void 0:t.map(r=>Y(r,F,e.row)),n=null==(l=r.children)?void 0:l.findIndex(t=>{var l;return t.value===e.row[null==(l=r.properties)?void 0:l.prop]});return-1===n?s:null==s?void 0:s[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("CoreChart"===r.tagName)return e.h(p,{...r.properties});if("pre"===r.tagName){const t=null==(C=r.children)?void 0:C.find(e=>"code"===e.tagName);if(t&&(null==(T=null==(S=t.properties)?void 0:S.className)?void 0:T.includes("language-CorePilot"))){const r=(null==($=null==(V=t.children)?void 0:V[0])?void 0:$.value)||"";try{const t=JSON.parse(r),l=n.parseCorePilot(t),s=Y(l,F);return e.h("div",{class:"hitl-wrapper"},[s])}catch(U){return null}}}return e.h(r.tagName,r.properties,D);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{F=0}),{hastToVNode:Y,ast:V,container:E,renderComplete:B,getContentText:()=>{var e;return null==(e=E.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=q;
|
|
1
|
+
"use strict";const e=require("vue"),r=require("../../_virtual/debounce.js"),t=require("../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.24_typescript@5.6.3_/node_modules/@vueuse/core/dist/index.js"),s=require("element-plus");/* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/form-item.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/date-picker.scss.js"),/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/theme-chalk/src/config-provider.scss.js"),/* empty css */;/* empty css */const l=require("./utils/mockStream.js"),n=require("./utils/parseCorePilotSchema.js"),o=require("./utils/animation.js"),i=require("../core-text/index.js"),a=require("../core-tips/index.js"),u=require("../core-result/index.js"),d=require("../core-table/index.js"),p=require("../core-chart/index.js"),m=require("../core-card/index.js");;/* empty css */const c=require("../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js"),v=require("../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"),h=require("../../node_modules/.pnpm/remark-parse@11.0.0/node_modules/remark-parse/lib/index.js"),_=require("../../node_modules/.pnpm/remark-breaks@4.0.0/node_modules/remark-breaks/lib/index.js"),f=require("../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js"),g=require("../../node_modules/.pnpm/remark-math@6.0.0/node_modules/remark-math/lib/index.js"),y=require("../../node_modules/.pnpm/remark-gemoji@8.0.0/node_modules/remark-gemoji/lib/index.js"),k=require("../../node_modules/.pnpm/remark-rehype@11.1.2/node_modules/remark-rehype/lib/index.js"),b=require("../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js"),x=require("../../node_modules/.pnpm/rehype-katex@7.0.1/node_modules/rehype-katex/lib/index.js"),q=require("../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js"),j=e.defineComponent({name:"XMarkdown",props:{text:{type:String,default:""},autoHideThinking:{type:Boolean,default:!0},typing:{type:Boolean,default:!1},speed:{type:Number,default:200},isHistoryMessage:{type:Boolean,default:!1},historyInputs:{type:Object,default:()=>({})}},expose:["getContentText"],emits:["hoverActiveRefTrigger","clickActiveRefTrigger","refConfigUpdate","downloadFile","coreSubmit"],setup(j,{emit:N}){const E=e.useTemplateRef("x-markdown-container"),w=e.ref(Date.now()),A=e.ref(-1/0),C=e.ref(""),S=new Set,T=e.ref(!1),P=e.ref(!1),R=e.ref([]),L=t.useTemplateRefsList(),F=e.ref(0);let V=0;const $=e.ref(null),D=e.ref(!1),H=e.ref(l.createStreamGenerator(e=>{C.value=C.value+e},j.speed)),U=e.computed(()=>{if(!j.autoHideThinking)return C.value;let e=C.value;if(e=(e=>{let r=!0;return e.replace(/(<summary[^>]*>[\s\S]*?<\/summary>)\s*(<div>[\s\S]*?)(<\/div>|$)/g,(e,t,s,l)=>{const n="</div>"===l;return`${t.replace(/(<summary)/g,e=>r?(r=!1,e):`<summary class="${n?"loaded":"loading"}"`)}\n${s}${l}`})})(e),e=e.replace(/[\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]/g," "),e.includes("</details>")){A.value===-1/0&&(A.value=Date.now());const r=(e=>{const r=/<div hidden>([\s\S]*?)<\/div>/g.exec(e);if(!r)return[];const t=r[1];try{return JSON.parse(t)}catch(s){return[]}})(e);return e.replace(/<details open>([\s\S]*?)<\/details>/g,(e,t)=>`<details>${t=(t=t.replace(/<summary>([\s\S]*?)<\/summary>/,(e,t)=>{const s=((A.value-w.value)/1e3).toFixed(0);return`<summary style="color: #8D90A0;font-weight: 300; font-size: 16px;">\n 已完成思考 ${s>"0"?s+"s":""} ${r.length?`<span style="display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;"></span> 引用文档:${null==r?void 0:r.length} 个`:""}\n </summary>`})).replace(/<summary>完成<\/summary>/,'<summary class="loaded">完成</summary>')}</details>`)}return e}),I=e=>{const{properties:r={},parentScope:t}=e,{disabled:s}=r;return!!s||"form"===t&&(j.isHistoryMessage&&!D.value)};e.watch(()=>[j.text,j.typing],(e,r)=>{var t,s,l,n;const[o,i]=e,[a]=r||[];if(o.startsWith(a)||(null==(t=H.value)||t.reset(),C.value=""),o){if(null==(s=H.value)||s.update(o),!i)return void(null==(l=H.value)||l.stop());const e=/<summary>资料整合<\/summary>\r?\n(.|\s)+?/;if(!P.value&&e.test(o))return P.value=!0,void(null==(n=H.value)||n.setSpeed(500))}},{immediate:!0});const O=e.ref([]),W=r(()=>{(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("div[hidden]");O.value=JSON.parse((null==r?void 0:r.textContent)||"[]"),N("refConfigUpdate",O.value)})()},100),B=e.ref(null);e.watch(()=>C.value,W,{immediate:!0}),e.watch(B,(e,r)=>{if(e!==r)if(e){const r=e.getAttribute("dataherf"),t=O.value.find(e=>e.link===r);N("hoverActiveRefTrigger",t)}else N("hoverActiveRefTrigger","")});const J=e=>{const r=e.target;if("SPAN"===r.tagName){const e=r.classList.contains("x-markdown-split"),t=r.classList.contains("x-markdown-sub");if(e||t)return t?r:r.parentElement}},M=e=>{const r=J(e);B.value=r||null},G=e=>{if("A"===e.target.tagName)return void(async e=>{e.stopPropagation(),e.preventDefault();const r=e.target,t=r.getAttribute("href"),l=r.getAttribute("data-id")||r.getAttribute("dataid"),n=r.getAttribute("data-name")||r.getAttribute("dataname");if(!t)return;const o=t.split(".").pop();l?(s.ElMessage("文件下载中..."),N("downloadFile",{title:n,id:l,ext:o,href:t})):window.open(t,"_blank")})(e);const r=J(e);if(r){const e=r.getAttribute("dataherf"),t=JSON.parse(r.getAttribute("datahighlight")||"[]"),s=Number(r.getAttribute("datanumber")),l=r.getAttribute("id"),n={...O.value.find(r=>r.link===e),highlight:t,page:s,id:l};N("clickActiveRefTrigger",n)}};e.onMounted(()=>{E.value.addEventListener("mouseover",M),E.value.addEventListener("click",G)}),e.onBeforeUnmount(()=>{E.value.removeEventListener("mouseover",M),E.value.addEventListener("click",G)});const z=()=>{if(!E.value)return;E.value.querySelectorAll("img:not([data-processed='true'])").forEach(e=>{S.has(e)||(S.add(e),X(e),e.complete?K(e):(e.addEventListener("load",()=>K(e)),e.addEventListener("error",()=>Q(e))))})},X=e=>{const r=e.parentElement.offsetWidth;if(e.naturalWidth>r&&(e.style.maxWidth="100%"),e.naturalWidth&&e.naturalHeight){const t=e.naturalHeight/e.naturalWidth;e.style.maxHeight=`${Math.min(500,r*t)}px`}},K=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("loaded"),e.style.opacity="1",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Q=e=>{S.delete(e),e.setAttribute("data-processed","true"),e.classList.add("load-error"),e.style.maxHeight="200px",e.removeEventListener("load",K),e.removeEventListener("error",Q)},Y=v.unified().use(h).use(_).use(f,{singleTilde:!1}).use(g).use(y).use(k,{allowDangerousHtml:!0}).use(b).use(x).use(q),Z=(e,r)=>{var t;if(e&&"object"==typeof e){if("form"===e.type){const s={...(null==(t=e.properties)?void 0:t.data)||{},...j.historyInputs||{}};return void r.push(s)}Array.isArray(e.children)&&e.children.forEach(e=>{Z(e,r)})}};e.watch(()=>U.value,async r=>{V=0;const t=await Y.run(Y.parse(r)),s=(e=>{const r=[],t=[],s=e=>{e&&("pre"===e.tagName&&t.push(e),Array.isArray(e.children)&&e.children.forEach(s))};return Array.isArray(e.children)&&e.children.forEach(s),t.forEach(e=>{var t,s,l,n,o;const i=null==(t=e.children)?void 0:t.find(e=>"code"===e.tagName);if(null==(l=null==(s=null==i?void 0:i.properties)?void 0:s.className)?void 0:l.includes("language-CorePilot"))try{const e=(null==(o=null==(n=i.children)?void 0:n[0])?void 0:o.value)||"";if(e){const t=JSON.parse(e);Z(t,r)}}catch(a){console.error("Failed to parse CorePilot schema:",a)}}),r})(t);R.value=s,await e.nextTick(),$.value=t,e.nextTick(z),e.nextTick(()=>{var e;const r=null==(e=E.value)?void 0:e.querySelector("details");(null==r?void 0:r.querySelector("summary"))&&!T.value&&(T.value=!0,new o.Accordion(r))})},{immediate:!0});const ee=()=>e.h("div",{class:"hitl-skeleton"},[e.h("div",{class:"skeleton-header"},[e.h("div",{class:"skeleton-avatar"}),e.h("div",{class:"skeleton-title"})]),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"}),e.h("div",{class:"skeleton-item skeleton-item-short"}),e.h("div",{class:"skeleton-item skeleton-item-long"}),e.h("div",{class:"skeleton-item skeleton-item-medium"})]),re=(r,t,l)=>{var o,v,h,_,f,g,y,k,b,x,q,j,E,w;if(!r)return null;let A=[];switch(["sub","pre","text","ElForm"].includes(r.tagName)||(A=(null==(v=null==(o=r.children)?void 0:o.map)?void 0:v.call(o,e=>re(e,t)))||[]),r.type){case"root":return e.h("div",{class:"markdown-body"},e.h(s.ElConfigProvider,{locale:c},A));case"element":if("sub"===r.tagName){const s=[{type:"element",tagName:"span",properties:{class:"x-markdown-split"}},...r.children],l=null==s?void 0:s.map(e=>re(e,t));return e.h("span",{...r.properties,class:"x-markdown-sub"},l)}if("span"===r.tagName)return e.h("span",{...r.properties},A);if("img"===r.tagName)return e.h("img",{...r.properties,class:"markdown-image","data-processed":"false"});if("a"===r.tagName){const t=(null==(h=r.properties)?void 0:h.href)||"",s=t?t.split(".").pop():null;return e.h("a",{...r.properties,class:"file-link","data-file-type":s},A)}if("ElTimeline"===r.tagName)return e.h(s.ElTimeline,{...r.properties},A);if("table"===r.tagName)return e.h("div",{class:"custom-table-container"},[e.h("table",A)]);if("view"===r.tagName)return e.h("div",{class:"custom-view-container"},[A[F.value]]);if("ElRow"===r.tagName)return e.h(s.ElRow,{...r.properties},A);if("ElCol"===r.tagName)return e.h(s.ElCol,{...r.properties},A);if("ElCard"===r.tagName)return e.h(s.ElCard,{...r.properties},A);if("CoreCard"===r.tagName)return e.h(m,{...r.properties},A);if("ElForm"===r.tagName){const l=null==(_=r.children)?void 0:_.map(e=>re(e,V));return V++,e.h(s.ElForm,{ref:L.value.set,model:R.value[t],...r.properties,disabled:I(r)},l)}if("ElFormItem"===r.tagName)return e.h(s.ElFormItem,{...r.properties},A);if("ElButton"===r.tagName){let n=null==(f=r.properties)?void 0:f.payload;return"table"===r.parentScope&&(n=l),e.h(s.ElButton,{...r.properties,disabled:I(r),onClick:()=>{var e;(async(e,r,t,s)=>{var l;if("inner_next"===r)return void(F.value+=1);if("inner_prev"===r)return void(F.value-=1);if("inner_rewrite"===r)return D.value=!0,void console.log("isRewrite",D.value);let n={action:r,payload:{}};t&&"form"!==s?n={action:r,payload:t}:(await(null==(l=L.value[e])?void 0:l.validate()),n={action:r,payload:{...R.value[e],...t}}),D.value&&r.startsWith("core_")&&(D.value=!1),N("coreSubmit",n)})(t,null==(e=r.properties)?void 0:e.action,n,r.parentScope)}},A)}if("ElSelect"===r.tagName)return e.h(s.ElSelect,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(g=r.properties)?void 0:g.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElDatePicker"===r.tagName)return e.h(s.ElDatePicker,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(y=r.properties)?void 0:y.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElInput"===r.tagName)return e.h(s.ElInput,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(k=r.properties)?void 0:k.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElRadioGroup"===r.tagName)return e.h(s.ElRadioGroup,{...r.properties,disabled:I(r),modelValue:R.value[t][null==(b=r.properties)?void 0:b.formProp],"onUpdate:modelValue":e=>{var s;R.value[t][null==(s=r.properties)?void 0:s.formProp]=e}},A);if("ElRadio"===r.tagName)return e.h(s.ElRadio,{...r.properties,disabled:I(r)},A);if("ElTable"===r.tagName)return e.h(d,{...r.properties},A);if("ElTableColumn"===r.tagName)return e.h(s.ElTableColumn,{...r.properties},{default:e=>{var t,s;const l=null==(t=r.children)?void 0:t.map(r=>re(r,V,e.row)),n=null==(s=r.children)?void 0:s.findIndex(t=>{var s;return t.value===e.row[null==(s=r.properties)?void 0:s.prop]});return-1===n?l:null==l?void 0:l[n]}});if("CoreText"===r.tagName)return e.h(i,{...r.properties});if("CoreTips"===r.tagName)return e.h(a,{...r.properties});if("CoreResult"===r.tagName)return e.h(u,{...r.properties});if("CoreChart"===r.tagName)return e.h(p,{...r.properties});if("pre"===r.tagName){const t=null==(x=r.children)?void 0:x.find(e=>"code"===e.tagName);if(t&&(null==(j=null==(q=t.properties)?void 0:q.className)?void 0:j.includes("language-CorePilot"))){const r=(null==(w=null==(E=t.children)?void 0:E[0])?void 0:w.value)||"";if(!(e=>{if(!e||0===e.trim().length)return!1;const r=e.trim(),t=r[0];if("{"!==t&&"["!==t)return!1;try{return JSON.parse(r),!0}catch(s){return!1}})(r))return ee();try{const t=JSON.parse(r),s=n.parseCorePilot(t),l=re(s,V);return e.h("div",{class:"hitl-wrapper"},[l])}catch(C){return ee()}}}return e.h(r.tagName,r.properties,A);case"text":return r.value.trim();default:return null}};return e.onUpdated(()=>{V=0}),{hastToVNode:re,ast:$,container:E,renderComplete:W,isRewrite:D,getContentText:()=>{var e;return null==(e=E.value)?void 0:e.innerText}}},render(){return e.createVNode("div",{ref:"x-markdown-container",class:"x-markdown"},[this.hastToVNode(this.ast)])}});module.exports=j;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport CoreTable from '../core-table';\nimport CoreChart from '../core-chart';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null)\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // 如果当前是历史消息,则禁用点击事件\n const disabled = computed(() => {\n return props.isHistoryMessage;\n })\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n \n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = schema.properties?.data || {};\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: node.properties?.disabled || disabled.value,\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理代码块(包含Mermaid图表和数学公式)\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n return null;\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","streamGener","createStreamGenerator","stream","value","formatText","computed","content","mdText","isFirstSummary","replace","match","summaryTag","divContent","divEnd","isDivComplete","updateSummaryClasses","includes","res","exec","refListStr","JSON","parse","error","checkAndReturnRefList","duration","toFixed","length","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","renderComplete","debounce","getRefConfig","refContainer","querySelector","textContent","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleClick","async","stopPropagation","preventDefault","href","id","title","ext","split","pop","ElMessage","window","open","handleAClick","highlight","page","data","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","properties","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","node","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","hastToVNode","index","row","map","h","class","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","ElForm","set","model","ElFormItem","payload","parentScope","ElButton","onClick","action","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","viewTree","parseCorePilot","trim","onUpdated","getContentText","innerText","render","_createVNode","this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/x-markdown/index.tsx"],"sourcesContent":["import { \n defineComponent, \n ref, computed, watch, \n onMounted, onBeforeUnmount, \n useTemplateRef, h, nextTick,\n onUpdated,\n} from 'vue';\nimport debounce from 'lodash/debounce';\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport remarkGemoji from \"remark-gemoji\";\nimport remarkRehype from \"remark-rehype\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeKatex from \"rehype-katex\";\nimport rehypeStringify from \"rehype-stringify\";\nimport { useTemplateRefsList } from '@vueuse/core'\n\nimport { \n ElMessage, \n ElForm,\n ElFormItem, \n ElInput, \n ElCard,\n ElButton,\n ElSelect,\n ElDatePicker,\n ElTable,\n ElTableColumn,\n ElTimeline,\n ElRow,\n ElCol,\n ElRadioGroup,\n ElRadio,\n ElConfigProvider\n} from 'element-plus';\nimport './style/index.less';\nimport './theme/index.less';\nimport { createStreamGenerator } from './utils/mockStream.ts';\nimport { parseCorePilot } from './utils/parseCorePilotSchema.ts';\nimport { Accordion } from './utils/animation.ts';\nimport CoreText from '../core-text';\nimport CoreTips from '../core-tips';\nimport CoreResult from '../core-result';\nimport CoreTable from '../core-table';\nimport CoreChart from '../core-chart';\nimport CoreCard from '../core-card';\nimport 'katex/dist/katex.min.css'\nimport zhCN from 'element-plus/es/locale/lang/zh-cn';\nimport { InputSchema } from '@/types/index.ts';\n\nconst checkAndReturnRefList = (text: string) => {\n const reg = /<div hidden>([\\s\\S]*?)<\\/div>/g;\n const match = reg.exec(text);\n if (!match) {\n return [];\n }\n const refListStr = match[1];\n try {\n const refList = JSON.parse(refListStr);\n return refList;\n } catch (error) {\n return [];\n }\n}\n\n/**\n * 检测 JSON 字符串是否完整\n * 使用最高效的方式:快速检查基本结构后直接尝试解析\n */\nconst isCompleteJSON = (jsonStr: string): boolean => {\n if (!jsonStr || jsonStr.trim().length === 0) {\n return false;\n }\n \n const trimmed = jsonStr.trim();\n \n // 快速检查:必须以 { 或 [ 开头\n const firstChar = trimmed[0];\n if (firstChar !== '{' && firstChar !== '[') {\n return false;\n }\n \n // 直接尝试解析,如果成功就是完整的 JSON\n try {\n JSON.parse(trimmed);\n return true;\n } catch (error) {\n // 解析失败,说明 JSON 不完整或格式错误\n return false;\n }\n}\n\ninterface RefConfig {\n title: string,\n link: string,\n time: string,\n author: string,\n}\n\nexport default defineComponent({\n name: 'XMarkdown',\n props: {\n text: {\n type: String,\n default: '',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n typing: {\n type: Boolean,\n default: false,\n },\n speed: {\n type: Number,\n default: 200,\n },\n isHistoryMessage: {\n type: Boolean,\n default: false,\n },\n historyInputs: {\n type: Object,\n default: () => ({}),\n },\n },\n expose: [\n 'getContentText'\n ],\n emits: ['hoverActiveRefTrigger', 'clickActiveRefTrigger', 'refConfigUpdate', 'downloadFile', 'coreSubmit'],\n setup(props, { emit }) {\n const container = useTemplateRef<HTMLElement>('x-markdown-container');\n const startTime = ref<number>(Date.now());\n const endTime = ref<number>(-Infinity);\n const context = ref('');\n const pendingImages = new Set(); // 存储待处理的图片\n const isInitAnimation = ref(false);\n const tagComplete = ref(false);\n const hitlData = ref<Array<Record<string, string>>>([]);\n const formRefs = useTemplateRefsList<typeof ElForm>();\n const curIndex = ref(0);\n let curInit = 0;\n const ast = ref<any>(null);\n const isRewrite = ref(false);\n\n const streamCall = (stream: string) => {\n context.value = context.value + stream;\n }\n\n const streamGener = ref<ReturnType<typeof createStreamGenerator>>(createStreamGenerator(streamCall, props.speed));\n\n const updateSummaryClasses = (mdText: string) => {\n const summaryDivReg = /(<summary[^>]*>[\\s\\S]*?<\\/summary>)\\s*(<div>[\\s\\S]*?)(<\\/div>|$)/g;\n let isFirstSummary = true;\n\n return mdText.replace(summaryDivReg, (match, summaryTag, divContent, divEnd) => {\n const isDivComplete = divEnd === '</div>'; // 直接判断闭合标签是否存在\n const updatedSummary = summaryTag.replace(\n /(<summary)/g,\n (match) => {\n if (isFirstSummary) {\n isFirstSummary = false;\n return match;\n }\n return `<summary class=\"${isDivComplete ? 'loaded' : 'loading'}\"`\n }\n );\n return `${updatedSummary}\\n${divContent}${divEnd}`; // 重组时拼接闭合部分\n });\n }\n\n const formatText = computed(() => {\n if (!props.autoHideThinking) return context.value;\n let content = context.value;\n content = updateSummaryClasses(content);\n content = content.replace(/[\\u00A0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/g, ' ');\n if (content.includes('</details>')) {\n if (endTime.value === -Infinity) {\n endTime.value = Date.now();\n }\n\n const res = checkAndReturnRefList(content);\n\n let text = content.replace(/<details open>([\\s\\S]*?)<\\/details>/g, (match, content) => {\n // 将 content 中的第一个 <summary> 中的内容替换为 具体的秒数\n content = content.replace(/<summary>([\\s\\S]*?)<\\/summary>/, (match, content) => {\n const duration = ((endTime.value - startTime.value) / 1000).toFixed(0);\n return `<summary style=\"color: #8D90A0;font-weight: 300; font-size: 16px;\">\n 已完成思考 ${duration > '0' ? duration + 's' : ''} ${res.length ? `<span style=\"display: inline-block;margin: 0 8px;border-left: 1px solid #CDCFD7;width: 1px;height: 16px;\"></span> 引用文档:${res?.length} 个` : ''}\n </summary>`;\n })\n\n content = content.replace(/<summary>完成<\\/summary>/, '<summary class=\"loaded\">完成</summary>')\n\n return `<details>${content}</details>`;\n });\n \n return text;\n }\n return content;\n })\n\n // TODO 后续需要规范相关定义\n // 如果当前是历史消息, 且父级作用域为form,则禁用点击事件\n const checkDisabled = (node: InputSchema) => {\n const { properties = {}, parentScope } = node;\n const { disabled } = properties;\n if (disabled) {\n return true;\n }\n if (parentScope === 'form') {\n return props.isHistoryMessage && !isRewrite.value;\n }\n return false;\n }\n\n watch(() => [props.text, props.typing], (v, o) => {\n const [text, typing] = v;\n const [oldText] = o || [];\n if (!(text as string).startsWith(oldText as string)) {\n streamGener.value?.reset();\n context.value = '';\n }\n if (text) {\n streamGener.value?.update(text);\n if (!typing) {\n streamGener.value?.stop();\n return;\n }\n // 资料整合 标签之后,采用服务端流式速度\n const checkReg = /<summary>资料整合<\\/summary>\\r?\\n(.|\\s)+?/;\n if (!tagComplete.value && checkReg.test(text as string)) {\n tagComplete.value = true;\n streamGener.value?.setSpeed(500);\n return;\n }\n }\n }, {\n immediate: true,\n })\n\n // 获取所有的ref配置\n const refConfig = ref<Array<RefConfig>>([]);\n\n const getRefConfig = () => {\n const refContainer = (container.value as HTMLElement)?.querySelector('div[hidden]');\n refConfig.value = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', refConfig.value);\n }\n const renderComplete = debounce(() => {\n getRefConfig();\n }, 100);\n\n // 获取当前激活的索引文件\n const activeRef = ref<HTMLElement | null>(null);\n\n watch(() => context.value, renderComplete, {\n immediate: true,\n });\n\n watch(activeRef, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal) {\n const text = newVal.getAttribute('dataherf');\n const target = refConfig.value.find((item) => {\n return item.link === text;\n });\n emit('hoverActiveRefTrigger', target);\n } else {\n emit('hoverActiveRefTrigger', '');\n }\n }\n });\n\n const getTargeElement = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'SPAN') {\n const isInRefContainer = target.classList.contains('x-markdown-split');\n const isRefContainer = target.classList.contains('x-markdown-sub')\n if (isInRefContainer || isRefContainer) {\n if (!isRefContainer) {\n return target.parentElement as HTMLElement;\n }\n return target;\n }\n }\n };\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = getTargeElement(e);\n if (target) {\n activeRef.value = target;\n return;\n }\n activeRef.value = null;\n }\n\n const handleAClick = async (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const target = e.target as HTMLElement;\n const href = target.getAttribute('href');\n const id = target.getAttribute('data-id') || target.getAttribute('dataid');\n const title = target.getAttribute('data-name') || target.getAttribute('dataname');\n if (!href) {\n return;\n }\n // const fileExt = ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'png', 'gif', 'jpg', 'jpeg', 'webp', 'svg'];\n const ext = href.split('.').pop();\n // 如果id不存在,则使用a标签新打开浏览器页面兜底\n if (!id) {\n window.open(href, '_blank');\n return;\n }\n ElMessage('文件下载中...');\n\n emit('downloadFile', {\n title,\n id,\n ext,\n href,\n });\n\n // downloadFile(href);\n return;\n }\n\n const btnClick = async (index: number, action: string, payload: any, parentScope?: 'form' | 'table') => {\n if (action === 'inner_next') {\n curIndex.value += 1;\n return;\n }\n if (action === 'inner_prev') {\n curIndex.value -= 1;\n return;\n }\n if (action === 'inner_rewrite') {\n isRewrite.value = true;\n console.log('isRewrite', isRewrite.value);\n return;\n }\n\n let res = {\n action,\n payload: {},\n };\n // 区分是否为form组件的按钮,如果带有payload 则约定为非form组件的按钮\n if (payload && parentScope !== 'form') {\n res = {\n action,\n payload,\n }\n } else {\n await formRefs.value[index]?.validate();\n res = {\n action,\n payload: {\n ...hitlData.value[index],\n ...payload,\n }\n }\n }\n if (isRewrite.value && action.startsWith('core_')) {\n isRewrite.value = false;\n }\n emit('coreSubmit', res)\n }\n\n const handleClick = (e: MouseEvent) => {\n // 如果当前点击的是a标签,则根据a标签的href属性直接下载文件\n if ((e.target as HTMLElement).tagName === 'A') {\n handleAClick(e);\n return;\n }\n\n const target = getTargeElement(e);\n if (target) {\n const text = target.getAttribute('dataherf');\n const highlight = JSON.parse(target.getAttribute('datahighlight') || '[]') as Array<string>;\n const page = Number(target.getAttribute('datanumber'));\n const id = target.getAttribute('id');\n const source = refConfig.value.find((item) => {\n return item.link === text;\n });\n const data = {\n ...source,\n highlight,\n page,\n id,\n }\n emit('clickActiveRefTrigger', data);\n }\n }\n\n const getContentText = () => {\n return container.value?.innerText;\n }\n\n onMounted(() => {\n (container.value as HTMLElement).addEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick);\n });\n\n onBeforeUnmount(() => {\n (container.value as HTMLElement).removeEventListener('mouseover', handleMouseOver);\n (container.value as HTMLElement).addEventListener('click', handleClick)\n })\n\n /**\n * 处理新加载的图片\n * 核心逻辑:设置占位尺寸,渐进式加载\n */\n const processNewImages = () => {\n if (!container.value) return;\n \n const newImages = container.value.querySelectorAll(\n \"img:not([data-processed='true'])\"\n ) as NodeListOf<HTMLImageElement>;\n \n newImages.forEach((img) => {\n if (pendingImages.has(img)) return;\n pendingImages.add(img);\n \n // 设置占位尺寸,避免布局重排\n setPlaceholderDimensions(img);\n \n // 处理已加载的图片\n if (img.complete) {\n handleImageLoad(img);\n } else {\n img.addEventListener(\"load\", () => handleImageLoad(img));\n img.addEventListener(\"error\", () => handleImageError(img));\n }\n });\n };\n \n // 设置图片占位尺寸\n const setPlaceholderDimensions = (img) => {\n const containerWidth = img.parentElement.offsetWidth;\n if (img.naturalWidth > containerWidth) {\n img.style.maxWidth = \"100%\";\n }\n \n if (img.naturalWidth && img.naturalHeight) {\n const ratio = img.naturalHeight / img.naturalWidth;\n img.style.maxHeight = `${Math.min(500, containerWidth * ratio)}px`;\n }\n };\n \n // 图片加载成功处理\n const handleImageLoad = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"loaded\");\n img.style.opacity = \"1\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n \n // 图片加载失败处理\n const handleImageError = (img) => {\n pendingImages.delete(img);\n img.setAttribute(\"data-processed\", \"true\");\n img.classList.add(\"load-error\");\n img.style.maxHeight = \"200px\";\n img.removeEventListener(\"load\", handleImageLoad);\n img.removeEventListener(\"error\", handleImageError);\n };\n\n // 初始化unified处理链\n const md = unified()\n .use(remarkParse) // 解析Markdown为AST\n .use(remarkBreaks) // 处理换行符\n .use(remarkGfm, { singleTilde: false }) // GitHub Flavored Markdown支持\n .use(remarkMath) // 数学公式支持\n .use(remarkGemoji) // Emoji支持\n .use(remarkRehype, { allowDangerousHtml: true }) // 转换为HTML AST\n .use(rehypeRaw)\n .use(rehypeKatex)\n .use(rehypeStringify)\n\n /**\n * 递归遍历 schema,收集所有 form 表单及其 data 属性\n * @param schema - CorePilot schema 对象\n * @param formDataList - 用于存储收集到的 form data 的数组\n * @returns void\n */\n const collectFormsFromSchema = (schema: any, formDataList: Array<Record<string, any>>) => {\n if (!schema || typeof schema !== 'object') return;\n \n // 如果当前节点是 form,收集其 data 属性并停止向下递归(form 内部不会嵌套 form)\n if (schema.type === 'form') {\n const formData = {\n ...schema.properties?.data || {},\n // FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景\n ...props.historyInputs || {},\n };\n formDataList.push(formData);\n return; // form 内部不会再嵌套 form,直接返回\n }\n \n // 递归遍历 children 数组\n if (Array.isArray(schema.children)) {\n schema.children.forEach((child) => {\n collectFormsFromSchema(child, formDataList);\n });\n }\n }\n\n /**\n * 计算 markdown AST 中所有 form 表单的数量,并提取每个 form 的预定义数据\n * @param mdAst - markdown AST 对象\n * @returns { length: number, formDataList: Array<Record<string, any>> } - form 数量和 form data 列表\n */\n const computedForm = (mdAst: any) => {\n const formDataList: Array<Record<string, any>> = [];\n \n // 高效检索:直接查找所有 pre 标签\n const preNodes: any[] = [];\n const findPreNodes = (node: any) => {\n if (!node) return;\n if (node.tagName === \"pre\") {\n preNodes.push(node);\n }\n if (Array.isArray(node.children)) {\n node.children.forEach(findPreNodes);\n }\n };\n \n // 遍历 mdAst 查找所有 pre 节点\n if (Array.isArray(mdAst.children)) {\n mdAst.children.forEach(findPreNodes);\n }\n \n // 处理每个 pre 节点中的 CorePilot 代码块\n preNodes.forEach((preNode: any) => {\n const codeNode = preNode.children?.find((child: any) => child.tagName === \"code\");\n if (codeNode?.properties?.className?.includes(\"language-CorePilot\")) {\n try {\n const code = codeNode.children?.[0]?.value || '';\n if (code) {\n const schema = JSON.parse(code);\n // 递归收集所有 form\n collectFormsFromSchema(schema, formDataList);\n }\n } catch (error) {\n console.error('Failed to parse CorePilot schema:', error);\n }\n }\n });\n \n return formDataList\n }\n\n watch(\n () => formatText.value!,\n async (text) => {\n // 处理Markdown到hast再到VNode的转换\n curInit = 0;\n const mdAst = await md.run(md.parse(text));\n // 递归遍历所有 CorePilot schema,收集 form 表单及其预定义数据\n const formDataList = computedForm(mdAst);\n hitlData.value = formDataList;\n\n await nextTick();\n ast.value = mdAst;\n \n // 等待DOM更新后处理图片\n nextTick(processNewImages);\n nextTick(() => {\n const details = container.value?.querySelector('details');\n const summary = details?.querySelector('summary');\n if (summary && !isInitAnimation.value) {\n isInitAnimation.value = true;\n new Accordion(details!);\n }\n })\n },\n { immediate: true }\n );\n\n /**\n * 渲染骨架屏组件\n * @returns {VNode} 骨架屏虚拟节点\n */\n const renderSkeleton = () => {\n return h(\"div\", {\n class: \"hitl-skeleton\",\n }, [\n // 头部骨架\n h(\"div\", {\n class: \"skeleton-header\",\n }, [\n h(\"div\", { class: \"skeleton-avatar\" }),\n h(\"div\", { class: \"skeleton-title\" }),\n ]),\n // 内容骨架\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-short\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-long\" }),\n h(\"div\", { class: \"skeleton-item skeleton-item-medium\" }),\n ]);\n };\n\n /**\n * 将hast(HTML AST)转换为Vue VNode\n * @param {Object} node hast节点\n * @returns {VNode} Vue虚拟节点\n */\n // FIXME ⚠️⚠️⚠️ 复杂表单存在性能问题 ⚠️⚠️⚠️\n const hastToVNode = (node, index?: number, row?: any) => {\n if (!node) return null;\n let children: any[] = [];\n const blackTagNames = ['sub', 'pre', 'text', 'ElForm'];\n\n if (!blackTagNames.includes(node.tagName)) {\n children = node.children?.map?.(child => hastToVNode(child, index)) || [];\n }\n switch (node.type) {\n case \"root\":\n return h(\n \"div\",\n { class: \"markdown-body\" },\n h(ElConfigProvider, {\n locale: zhCN,\n }, children)\n );\n \n case \"element\":\n if (node.tagName === \"sub\") {\n const formatChildren = [\n {\n type: \"element\",\n tagName: \"span\",\n properties: {\n class: \"x-markdown-split\",\n },\n }, \n ...node.children\n ]\n const children = formatChildren?.map(child => hastToVNode(child, index));\n return h(\"span\", {\n ...node.properties,\n class: \"x-markdown-sub\",\n }, children);\n }\n if (node.tagName === \"span\") {\n return h(\"span\", {\n ...node.properties,\n }, \n children\n );\n }\n // 处理特殊元素:图片、链接、代码块等\n if (node.tagName === \"img\") {\n return h(\"img\", {\n ...node.properties,\n class: \"markdown-image\",\n \"data-processed\": \"false\" // 标记未处理图片\n });\n }\n \n if (node.tagName === \"a\") {\n const href = node.properties?.href || ''; // 获取链接地址\n const fileType = href ? href.split('.').pop() : null; // 标记文件类型\n return h(\n \"a\",\n {\n ...node.properties,\n class: 'file-link',\n 'data-file-type': fileType,\n },\n children\n );\n }\n if (node.tagName === 'ElTimeline') {\n return h(\n ElTimeline,\n {\n ...node.properties,\n },\n children\n );\n }\n if (node.tagName === 'table') {\n return h(\n \"div\",\n {\n class: 'custom-table-container',\n },\n [\n h(\n \"table\",\n children\n ),\n ]\n );\n }\n\n if (node.tagName === 'view') {\n return h(\n 'div',\n {\n class: 'custom-view-container',\n },\n [children[curIndex.value]]\n );\n }\n\n if (node.tagName === 'ElRow') {\n return h(\n ElRow,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCol') {\n return h(\n ElCol,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElCard') {\n \n return h(\n ElCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'CoreCard') {\n return h(\n CoreCard,\n {\n ...node.properties,\n },\n children\n );\n }\n\n if (node.tagName === 'ElForm') {\n const children = node.children?.map(child => hastToVNode(child, curInit));\n curInit++;\n return h(\n ElForm,\n {\n ref: formRefs.value.set,\n model: hitlData.value[index!],\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n\n if (node.tagName === 'ElFormItem') {\n return h(\n ElFormItem,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElButton') {\n let payload = node.properties?.payload;\n if (node.parentScope === 'table') {\n payload = row;\n }\n return h(\n ElButton,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n onClick: () => {\n btnClick(index!, node.properties?.action, payload, node.parentScope);\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElSelect') {\n return h(\n ElSelect,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElDatePicker') {\n return h(\n ElDatePicker,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElInput') {\n return h(\n ElInput,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value;\n },\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadioGroup') {\n return h(\n ElRadioGroup,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n modelValue: hitlData.value[index!][node.properties?.formProp],\n 'onUpdate:modelValue': (value) => {\n hitlData.value[index!][node.properties?.formProp] = value as string;\n }\n },\n children\n )\n }\n\n if (node.tagName === 'ElRadio') {\n\n return h(\n ElRadio,\n {\n ...node.properties,\n disabled: checkDisabled(node),\n },\n children\n )\n }\n \n if (node.tagName === 'ElTable') {\n return h(\n CoreTable,\n {\n ...node.properties,\n },\n children\n )\n }\n\n if (node.tagName === 'ElTableColumn') {\n return h(\n ElTableColumn,\n {\n ...node.properties,\n },\n {\n default: (scope) => {\n const children = node.children?.map(child => hastToVNode(child, curInit, scope.row));\n const index = node.children?.findIndex(child => child.value === scope.row[node.properties?.prop]);\n if (index === -1) {\n return children;\n }\n return children?.[index];\n },\n }\n )\n }\n\n if (node.tagName === 'CoreText') {\n return h(\n CoreText,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreTips') {\n return h(\n CoreTips,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreResult') {\n return h(\n CoreResult,\n {\n ...node.properties,\n }\n )\n }\n\n if (node.tagName === 'CoreChart') {\n return h(\n CoreChart,\n {\n ...node.properties,\n }\n )\n }\n \n // 处理CorePilot代码块\n if (node.tagName === \"pre\") {\n const codeNode = node.children?.find(child => child.tagName === \"code\");\n if (codeNode) {\n if (codeNode.properties?.className?.includes(\"language-CorePilot\")) {\n const code = codeNode.children?.[0]?.value || '';\n // 检查 JSON 是否完整\n if (!isCompleteJSON(code)) {\n // JSON 不完整,显示骨架屏\n return renderSkeleton();\n }\n try {\n const schema = JSON.parse(code);\n const viewTree = parseCorePilot(schema);\n const children = hastToVNode(viewTree, curInit)\n return h(\"div\", {\n class: \"hitl-wrapper\",\n }, [children]);\n } catch (error) {\n // JSON 解析失败,可能是格式错误,显示骨架屏\n return renderSkeleton();\n }\n }\n }\n }\n \n // 其他普通元素\n return h(\n node.tagName,\n node.properties,\n children\n );\n \n case \"text\":\n return node.value.trim();\n \n default:\n return null;\n }\n };\n\n onUpdated(() => {\n curInit = 0;\n })\n\n return {\n hastToVNode,\n ast,\n container,\n renderComplete,\n isRewrite,\n getContentText,\n };\n },\n render() {\n return (\n <div\n ref=\"x-markdown-container\"\n class=\"x-markdown\"\n >\n {\n this.hastToVNode(this.ast)\n }\n </div>\n );\n },\n});"],"names":["XMarkdown","name","props","text","type","String","default","autoHideThinking","Boolean","typing","speed","Number","isHistoryMessage","historyInputs","Object","expose","emits","setup","emit","container","useTemplateRef","startTime","ref","Date","now","endTime","Infinity","context","pendingImages","Set","isInitAnimation","tagComplete","hitlData","formRefs","useTemplateRefsList","curIndex","curInit","ast","isRewrite","streamGener","createStreamGenerator","stream","value","formatText","computed","content","mdText","isFirstSummary","replace","match","summaryTag","divContent","divEnd","isDivComplete","updateSummaryClasses","includes","res","exec","refListStr","JSON","parse","error","checkAndReturnRefList","duration","toFixed","length","checkDisabled","node","properties","parentScope","disabled","watch","v","o","oldText","startsWith","reset","update","stop","checkReg","test","setSpeed","immediate","refConfig","renderComplete","debounce","getRefConfig","refContainer","querySelector","textContent","activeRef","newVal","oldVal","getAttribute","target","find","item","link","getTargeElement","e","tagName","isInRefContainer","classList","contains","isRefContainer","parentElement","handleMouseOver","handleClick","async","stopPropagation","preventDefault","href","id","title","ext","split","pop","ElMessage","window","open","handleAClick","highlight","page","data","onMounted","addEventListener","onBeforeUnmount","removeEventListener","processNewImages","querySelectorAll","forEach","img","has","add","setPlaceholderDimensions","complete","handleImageLoad","handleImageError","containerWidth","offsetWidth","naturalWidth","style","maxWidth","naturalHeight","ratio","maxHeight","Math","min","delete","setAttribute","opacity","md","unified","use","remarkParse","remarkBreaks","remarkGfm","singleTilde","remarkMath","remarkGemoji","remarkRehype","allowDangerousHtml","rehypeRaw","rehypeKatex","rehypeStringify","collectFormsFromSchema","schema","formDataList","formData","push","Array","isArray","children","child","mdAst","run","preNodes","findPreNodes","preNode","codeNode","className","code","console","computedForm","nextTick","details","Accordion","renderSkeleton","h","class","hastToVNode","index","row","map","ElConfigProvider","locale","zhCN","formatChildren","fileType","ElTimeline","ElRow","ElCol","ElCard","CoreCard","ElForm","set","model","ElFormItem","payload","ElButton","onClick","action","log","validate","btnClick","ElSelect","modelValue","formProp","ElDatePicker","ElInput","ElRadioGroup","ElRadio","CoreTable","ElTableColumn","scope","findIndex","prop","CoreText","CoreTips","CoreResult","CoreChart","jsonStr","trim","trimmed","firstChar","isCompleteJSON","viewTree","parseCorePilot","onUpdated","getContentText","innerText","render","_createVNode","this"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(e,E)=>{switch(e.type){case"view":return t(e);case"form":return p(e);case"card":return l(e);case"table":return c(e);case"input":return a(e,E);case"select":return o(e,E);case"dateTimePicker":return n(e,E);case"button":return i(e,E);case"tips":return m(e,E);case"text":return u(e,E);case"formfield":return d(e,E);case"column":return s(e,E);case"row":return g(e,E);case"col":return h(e,E);case"result":return r(e,E);case"tag":return S(e,E);case"radioGroup":return y(e,E);case"radio":return N(e,E);case"echart":return v(e,E);default:const b=e;console.error(b)}},r=(e,r)=>({tagName:"CoreResult",type:"element",properties:e.properties,parentScope:r}),t=r=>({tagName:"view",type:"element",properties:{title:r.title},children:r.children.map(r=>e(r))}),p=r=>{const t=[];r.fields.forEach(r=>{t.push(e(r,"form"))});const p={tagName:"div",type:"element",properties:{class:"hitl-btn-list"},children:r.actions.map(r=>e(r,"form"))};return t.push(p),{tagName:"ElForm",type:"element",properties:{labelPosition:"right",...r.properties},children:t}},a=(e,r)=>({tagName:"ElInput",type:"element",properties:e.properties,parentScope:r}),o=(e,r)=>({tagName:"ElSelect",type:"element",properties:e.properties,parentScope:r}),n=(e,r)=>({tagName:"ElDatePicker",type:"element",properties:e.properties,parentScope:r}),i=(r,t)=>{var p,a;return{tagName:"ElButton",type:"element",properties:{...r.properties,action:r.action,payload:r.payload},parentScope:t,children:null==(a=null==(p=r.children)?void 0:p.map)?void 0:a.call(p,r=>e(r,t))}},l=r=>({tagName:"CoreCard",type:"element",properties:r.properties,children:r.children.map(r=>e(r))}),s=(r,t)=>{var p;return{tagName:"ElTableColumn",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.children)?void 0:p.map(r=>e(r,t))}},c=r=>(r.properties.tableProps||(r.properties.tableProps={data:[],...r.properties}),{tagName:"ElTable",type:"element",properties:r.properties,children:r.children.map(r=>e(r,"table"))}),m=(e,r)=>({tagName:"CoreTips",type:"element",properties:e.properties,parentScope:r}),u=(e,r)=>({tagName:"CoreText",type:"element",properties:e.properties,parentScope:r}),d=(r,t)=>{const p=r.properties.prop,a=((e,r)=>e.map(e=>({...e,properties:{...e.properties,formProp:r}})))(r.children,p);return{tagName:"ElFormItem",type:"element",properties:{...r.properties,rules:(o=r.properties.rules,null==o?void 0:o.map(e=>"pattern"in e&&e.pattern?{pattern:new RegExp(e.pattern),message:e.message,trigger:e.trigger}:e))},parentScope:t,children:[e(a[0],t)]};var o},g=(r,t)=>({tagName:"ElRow",type:"element",properties:r.properties,children:r.children.map(r=>e(r,t))}),h=(r,t)=>({tagName:"ElCol",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))}),y=(r,t)=>{var p;return{tagName:"ElRadioGroup",type:"element",properties:r.properties,parentScope:t,children:null==(p=r.properties.options)?void 0:p.map(r=>e({type:"radio",properties:r},t))}},N=(e,r)=>({tagName:"ElRadio",type:"element",properties:e.properties,parentScope:r}),S=(r,t)=>{const p={tagName:"ElTag",type:"element",properties:r.properties,parentScope:t,children:r.children.map(r=>e(r,t))};return"table"===t&&(p.value=r.value),p},v=(e,r)=>({tagName:"CoreChart",type:"element",properties:e.properties,parentScope:r});exports.parseCorePilot=r=>e(r);
|
|
2
2
|
//# sourceMappingURL=parseCorePilotSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n return {\n tagName: 'ElCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","parseECharts","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","action","payload","_b","_a","call","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parseCorePilotSchema.js","sources":["../../../../../src/components/x-markdown/utils/parseCorePilotSchema.ts"],"sourcesContent":["import { \n FormSchema, \n ViewSchema,\n FormFieldSchema, \n CardSchema, \n ButtonSchema, \n TableSchema, \n TipsSchema, \n TextSchema, \n InputSchema, \n SelectSchema, \n DateTimePickerSchema, \n TableColumnSchema, \n RowSchema, \n ColSchema, \n ResultSchema, \n TagSchema,\n RadioGroupSchema,\n RadioSchema,\n EChartsSchema,\n} from '@/types/index';\n\ntype ElementSchema = \n | ViewSchema<any> \n | FormSchema \n | FormFieldSchema \n | CardSchema \n | ButtonSchema \n | TableSchema \n | TipsSchema \n | TextSchema \n | InputSchema \n | SelectSchema \n | DateTimePickerSchema \n | TableColumnSchema \n | RowSchema \n | ColSchema \n | ResultSchema \n | TagSchema \n | RadioGroupSchema \n | RadioSchema\n | EChartsSchema;\n\ntype ParentScopeType = 'form' | 'table';\n\nconst parseSchema = (schema: ElementSchema, type?: ParentScopeType) => {\n switch (schema.type) {\n case 'view':\n return parseView(schema);\n case 'form':\n return parseForm(schema);\n case 'card':\n return parseCard(schema);\n case 'table':\n return parseTable(schema);\n case 'input':\n return parseInput(schema, type);\n case 'select':\n return parseSelect(schema, type);\n case 'dateTimePicker':\n return parseDate(schema, type);\n case 'button':\n return parseButton(schema, type);\n case 'tips':\n return parseTips(schema, type);\n case 'text':\n return parseText(schema, type);\n case 'formfield':\n return parseFormItem(schema, type);\n case 'column':\n return parseTableColumn(schema, type);\n case 'row':\n return parseRow(schema, type);\n case 'col':\n return parseCol(schema, type);\n case 'result':\n return parseResult(schema, type);\n case 'tag':\n return parseTag(schema, type);\n case 'radioGroup':\n return parseRadioGroup(schema, type);\n case 'radio':\n return parseRadio(schema, type);\n case 'echart':\n return parseECharts(schema, type);\n default:\n const _: never = schema;\n console.error(_);\n }\n}\n\n// result组件解析\nconst parseResult = (schema: ResultSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreResult',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\n// view组件解析\nconst parseView = (schema: ViewSchema<any>) => {\n return {\n tagName: 'view',\n type: 'element',\n properties: {\n title: schema.title,\n },\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\n// form组件解析\nconst parseForm = (schema: FormSchema) => {\n const children: any[] = [] \n schema.fields.forEach((item) => {\n children.push(parseSchema(item, 'form'));\n });\n const actionChild = {\n tagName: 'div',\n type: 'element',\n properties: {\n class: 'hitl-btn-list',\n },\n children: schema.actions.map((item) => {\n return parseSchema(item, 'form');\n })\n }\n children.push(actionChild);\n return {\n tagName: 'ElForm',\n type: 'element',\n properties: {\n labelPosition: 'right',\n ...schema.properties,\n },\n children,\n }\n}\n\nconst parseInput = (schema: InputSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElInput',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseSelect = (schema: SelectSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElSelect',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseDate = (schema: DateTimePickerSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElDatePicker',\n type: 'element',\n properties: schema.properties,\n parentScope: type,\n }\n}\n\nconst parseButton = (schema: ButtonSchema, type?: ParentScopeType) => {\n return {\n tagName: 'ElButton',\n type: 'element',\n properties: {\n ...schema.properties,\n action: schema.action,\n payload: schema.payload,\n },\n // TODO 记录父级作用域,用于在form、table 组件中使用\n parentScope: type,\n children: schema.children?.map?.((item) => {\n return parseSchema(item, type);\n })\n }\n}\n\nconst parseCard = (schema: CardSchema) => {\n return {\n tagName: 'CoreCard',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item);\n })\n }\n}\n\nconst parseTableColumn = (schema: TableColumnSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElTableColumn',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children?.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseTable = (schema: TableSchema) => {\n // 兼容旧版本不存在tableProps属性\n if (!schema.properties.tableProps) {\n schema.properties.tableProps = {\n data: [],\n ...schema.properties,\n };\n }\n return {\n tagName: 'ElTable',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, 'table');\n })\n }\n}\n\n\nconst parseTips = (schema: TipsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreTips',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseText = (schema: TextSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreText',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\nconst injectFormProp = (schema: FormFieldSchema['children'], prop: string) => {\n return schema.map((item) => {\n return {\n ...item,\n properties: {\n ...item.properties,\n formProp: prop,\n },\n }\n })\n}\nconst parseFormItem = (schema: FormFieldSchema, parentType?: ParentScopeType) => {\n const prop = schema.properties.prop;\n const children = injectFormProp(schema.children, prop);\n const formatRules = (rules: FormFieldSchema['properties']['rules']) => {\n return rules?.map((item) => {\n if ('pattern' in item && item.pattern) {\n return {\n pattern: new RegExp(item.pattern),\n message: item.message,\n trigger: item.trigger,\n }\n }\n return item;\n })\n }\n return {\n tagName: 'ElFormItem',\n type: 'element',\n properties: {\n ...schema.properties,\n rules: formatRules(schema.properties.rules),\n },\n parentScope: parentType,\n children: [\n parseSchema(children[0] as InputSchema, parentType),\n ]\n }\n}\n\nconst parseRow = (schema: RowSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRow',\n type: 'element',\n properties: schema.properties,\n children: schema.children.map((item) => {\n return parseSchema(item, parentType);\n })\n }\n}\n\nconst parseCol = (schema: ColSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElCol',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as ElementSchema, parentType);\n })\n }\n}\n\nconst parseRadioGroup = (schema: RadioGroupSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadioGroup',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.properties.options?.map((item) => {\n return parseSchema({\n type: 'radio',\n properties: item,\n } as RadioSchema, parentType);\n })\n }\n}\n\nconst parseRadio = (schema: RadioSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'ElRadio',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n }\n}\n\nconst parseTag = (schema: TagSchema, parentType?: ParentScopeType) => {\n const formatSchema = {\n tagName: 'ElTag',\n type: 'element',\n properties: schema.properties,\n parentScope: parentType,\n children: schema.children.map((item) => {\n return parseSchema(item as TextSchema, parentType);\n })\n }\n if (parentType === 'table') {\n formatSchema.value = schema.value;\n }\n return formatSchema;\n}\n\n// ECharts 图表解析\nconst parseECharts = (schema: EChartsSchema, parentType?: ParentScopeType) => {\n return {\n tagName: 'CoreChart',\n type: 'element' as const,\n properties: schema.properties,\n parentScope: parentType,\n };\n}\n\nexport const parseCorePilot = (schema: ViewSchema<any>) => {\n return parseSchema(schema);\n}"],"names":["parseSchema","schema","type","parseView","parseForm","parseCard","parseTable","parseInput","parseSelect","parseDate","parseButton","parseTips","parseText","parseFormItem","parseTableColumn","parseRow","parseCol","parseResult","parseTag","parseRadioGroup","parseRadio","parseECharts","_","console","error","parentType","tagName","properties","parentScope","title","children","map","item","fields","forEach","push","actionChild","class","actions","labelPosition","action","payload","_b","_a","call","tableProps","data","prop","formProp","injectFormProp","rules","pattern","RegExp","message","trigger","options","formatSchema","value"],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./components/index.js"),r=require("./components/bubble-list/index.js"),o=require("./components/x-markdown/index.js"),s=require("./components/file-preview/index.js"),t=require("./components/editor-sender/index.js"),n=require("./components/file-card/index.js"),i=require("./components/core-text/index.js"),p=require("./components/core-tips/index.js"),x=require("./components/core-result/index.js"),c=require("./components/core-table/index.js"),d=require("./components/core-chart/index.js"),l=(r,o)=>{Object.keys(e).forEach(o=>{r.component(o,e[o])})},
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./components/index.js"),r=require("./components/bubble-list/index.js"),o=require("./components/x-markdown/index.js"),s=require("./components/file-preview/index.js"),t=require("./components/editor-sender/index.js"),n=require("./components/file-card/index.js"),i=require("./components/core-text/index.js"),p=require("./components/core-tips/index.js"),x=require("./components/core-result/index.js"),c=require("./components/core-table/index.js"),d=require("./components/core-chart/index.js"),u=require("./components/core-card/index.js"),l=(r,o)=>{Object.keys(e).forEach(o=>{r.component(o,e[o])})},a={install:l};exports.BubbleList=r,exports.XMarkdown=o,exports.FilePreview=s,exports.EditorSender=t,exports.FileCard=n,exports.CoreText=i,exports.CoreTips=p,exports.CoreResult=x,exports.CoreTable=c,exports.CoreChart=d,exports.CoreCard=u,exports.default=a,exports.install=l;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { type Plugin } from 'vue';\nimport * as Components from './components';\n\nexport * from './components';\n\nexport const install: Plugin = (app, options) => {\n Object.keys(Components).forEach((name) => {\n app.component(name, Components[name]);\n });\n};\n\nexport default {\n install,\n} as Plugin;\n"],"names":["install","app","options","Object","keys","Components","forEach","name","component","index"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { type Plugin } from 'vue';\nimport * as Components from './components';\n\nexport * from './components';\n\nexport const install: Plugin = (app, options) => {\n Object.keys(Components).forEach((name) => {\n app.component(name, Components[name]);\n });\n};\n\nexport default {\n install,\n} as Plugin;\n"],"names":["install","app","options","Object","keys","Components","forEach","name","component","index"],"mappings":"kpBAKaA,EAAkB,CAACC,EAAKC,KACnCC,OAAOC,KAAKC,GAAYC,QAASC,IAC/BN,EAAIO,UAAUD,EAAMF,EAAWE,OAInCE,EAAe,CACbT"}
|