@touchvue/chat 1.0.0-beta.47 → 1.0.0-beta.49

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.
Files changed (74) hide show
  1. package/es/package.json.css +1 -1
  2. package/es/package.json.mjs +1 -1
  3. package/es/packages/components/touchchat/component/FileContent.vue2.mjs +6 -1
  4. package/es/packages/components/touchchat/component/FileContent.vue2.mjs.map +1 -1
  5. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs +7 -1
  6. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs.map +1 -1
  7. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs +19 -8
  8. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -1
  9. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +51 -14
  10. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  11. package/es/packages/components/touchchat/component/VideoFile.vue.mjs +7 -0
  12. package/es/packages/components/touchchat/component/VideoFile.vue.mjs.map +1 -0
  13. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs +33 -0
  14. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs.map +1 -0
  15. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +39 -1
  16. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
  17. package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
  18. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +10 -5
  19. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  20. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +50 -88
  21. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  22. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +10 -1
  23. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  24. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +41 -0
  25. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  26. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +47 -13
  27. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  28. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +6 -0
  29. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
  30. package/es/packages/components/touchchat/src/index.vue2.mjs +17 -3
  31. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  32. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  33. package/es/packages/components/touchchat/utils/a2aService.mjs +18 -12
  34. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
  35. package/lib/package.json.css +1 -1
  36. package/lib/package.json.js +1 -1
  37. package/lib/packages/components/touchchat/component/FileContent.vue2.js +6 -1
  38. package/lib/packages/components/touchchat/component/FileContent.vue2.js.map +1 -1
  39. package/lib/packages/components/touchchat/component/PDFFile.vue2.js +7 -1
  40. package/lib/packages/components/touchchat/component/PDFFile.vue2.js.map +1 -1
  41. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js +18 -7
  42. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -1
  43. package/lib/packages/components/touchchat/component/UploadView.vue2.js +50 -13
  44. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  45. package/lib/packages/components/touchchat/component/VideoFile.vue.js +11 -0
  46. package/lib/packages/components/touchchat/component/VideoFile.vue.js.map +1 -0
  47. package/lib/packages/components/touchchat/component/VideoFile.vue2.js +37 -0
  48. package/lib/packages/components/touchchat/component/VideoFile.vue2.js.map +1 -0
  49. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +39 -1
  50. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
  51. package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
  52. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +10 -5
  53. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  54. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +50 -88
  55. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  56. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +10 -1
  57. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  58. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +41 -0
  59. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  60. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +46 -12
  61. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  62. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +6 -0
  63. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
  64. package/lib/packages/components/touchchat/src/index.vue2.js +16 -2
  65. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  66. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  67. package/lib/packages/components/touchchat/utils/a2aService.js +18 -12
  68. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
  69. package/package.json +1 -1
  70. package/theme/components/index.css +67 -0
  71. package/theme/font/iconfont.woff +0 -0
  72. package/theme/font/iconfont.woff2 +0 -0
  73. package/theme/index.css +67 -0
  74. package/theme/skin/default.css +67 -0
@@ -1 +1 @@
1
- .typewriter-container[data-v-5bee9536]{position:relative}.loading-container[data-v-5bee9536]{min-height:40px}.typewriter-loading[data-v-5bee9536]{align-items:center;color:#666;display:flex;font-size:14px;gap:8px;line-height:1;margin-top:12px;padding:8px 0}.loading-dot[data-v-5bee9536]{animation:bounce-5bee9536 1.4s ease-in-out infinite both;background-color:#666;border-radius:50%;display:inline-block;height:8px;width:8px}.loading-text[data-v-5bee9536]{user-select:none}@keyframes bounce-5bee9536{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.markdown-content[data-v-5bee9536]{color:#333}.markdown-content h1[data-v-5bee9536],.markdown-content h2[data-v-5bee9536]{margin:1em 0 .5em}.markdown-content p[data-v-5bee9536]{margin:.5em 0}.markdown-content code[data-v-5bee9536]{background:#f0f0f0;border-radius:4px;padding:.2em .4em}.hljs{background:#fafafa;color:#383a42;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-built_in,.hljs-class .hljs-title{color:#c18401}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}
1
+ .video-File[data-v-7305b796]{height:auto;width:5em}.video-play[data-v-7305b796]{width:100%}.typewriter-container[data-v-5bee9536]{position:relative}.loading-container[data-v-5bee9536]{min-height:40px}.typewriter-loading[data-v-5bee9536]{align-items:center;color:#666;display:flex;font-size:14px;gap:8px;line-height:1;margin-top:12px;padding:8px 0}.loading-dot[data-v-5bee9536]{animation:bounce-5bee9536 1.4s ease-in-out infinite both;background-color:#666;border-radius:50%;display:inline-block;height:8px;width:8px}.loading-text[data-v-5bee9536]{user-select:none}@keyframes bounce-5bee9536{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.markdown-content[data-v-5bee9536]{color:#333}.markdown-content h1[data-v-5bee9536],.markdown-content h2[data-v-5bee9536]{margin:1em 0 .5em}.markdown-content p[data-v-5bee9536]{margin:.5em 0}.markdown-content code[data-v-5bee9536]{background:#f0f0f0;border-radius:4px;padding:.2em .4em}.hljs{background:#fafafa;color:#383a42;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-built_in,.hljs-class .hljs-title{color:#c18401}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}
@@ -1,5 +1,5 @@
1
1
  var name = "@touchvue/chat";
2
- var version = "1.0.0-beta.47";
2
+ var version = "1.0.0-beta.49";
3
3
  var description = "TouchVue Chat Component Library";
4
4
  var main = "lib/index.js";
5
5
  var module = "es/index.mjs";
@@ -1,6 +1,7 @@
1
1
  import { defineComponent, ref, onMounted, onUnmounted, openBlock, createElementBlock, createElementVNode, Fragment, renderList, createBlock, withDirectives, vShow } from 'vue';
2
2
  import ImageFile from './ImageFile.vue.mjs';
3
3
  import PDFFile from './PDFFile.vue.mjs';
4
+ import VideoFile from './VideoFile.vue.mjs';
4
5
 
5
6
  var _sfc_main = /* @__PURE__ */ defineComponent({
6
7
  __name: "FileContent",
@@ -115,9 +116,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
115
116
  index,
116
117
  "has-colse": _ctx.hasColse,
117
118
  onColse: handleColse
118
- }, null, 8, ["item", "index", "has-colse"])) : (openBlock(), createBlock(PDFFile, {
119
+ }, null, 8, ["item", "index", "has-colse"])) : item.fileType.includes("mp4") ? (openBlock(), createBlock(VideoFile, {
119
120
  key: 1,
120
121
  item,
122
+ index
123
+ }, null, 8, ["item", "index"])) : (openBlock(), createBlock(PDFFile, {
124
+ key: 2,
125
+ item,
121
126
  index,
122
127
  "has-colse": _ctx.hasColse,
123
128
  onColse: handleColse
@@ -1 +1 @@
1
- {"version":3,"file":"FileContent.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/FileContent.vue"],"sourcesContent":["<template>\n\t<div class=\"file-content\">\n\t\t<div ref=\"scrollContainer\" class=\"file-content-scroll\">\n\t\t\t<template v-for=\"(item, index) in fileList\" :key=\"item.id\">\n\t\t\t\t<ImageFile v-if=\"item.fileType.includes('image')\" :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t\t<PDFFile v-else :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t</template>\n\t\t</div>\n\t\t<div v-show=\"showRightTip\" class=\"file-content-right-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollRightFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-show=\"showLeftTip\" class=\"file-content-left-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollLeftFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nimport ImageFile from './ImageFile.vue'\nimport PDFFile from './PDFFile.vue'\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst showRightTip = ref(false)\nconst showLeftTip = ref(false)\nconst scrollDistance = ref(256) // 每次滚动的距离\nconst scrollContainer = ref<HTMLDivElement | null>(null)\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n\thasColse: boolean\n\ttype: string\n}>()\nconst emits = defineEmits<{\n\t(e: 'colse', id: string): void\n\t(e: 'userMessageFileList', value: FileItem, index: number): void\n}>()\n\nlet edgeDetectionDebounce: NodeJS.Timeout | null = null\n\n// 处理鼠标滚轮事件,将纵向滚动转为横向滚动\nconst handleWheel = (e: WheelEvent) => {\n\tif (!scrollContainer.value) return\n\n\t// 阻止默认的纵向滚动\n\te.preventDefault()\n\tshowRightTip.value = true\n\tshowLeftTip.value = true\n\tconst { scrollLeft, clientWidth, scrollWidth } = scrollContainer.value\n\n\t// 左边缘检测(允许1px的误差)\n\tif (scrollLeft <= 1) {\n\t\tshowLeftTip.value = false\n\t}\n\n\t// 右边缘检测(允许1px的误差)\n\tif (scrollLeft + clientWidth >= scrollWidth - 1) {\n\t\tshowRightTip.value = false\n\t}\n\n\t// 计算滚动距离,添加一些乘数使滚动更自然\n\tconst scrollAmount = e.deltaY * 0.8\n\n\t// 平滑滚动\n\tscrollContainer.value.scrollBy({\n\t\tleft: scrollAmount,\n\t\tbehavior: 'smooth'\n\t})\n}\n\nconst handleScroll = (e: WheelEvent) => {\n\t// 防抖处理,避免滚动过程中频繁触发\n\tif (edgeDetectionDebounce) {\n\t\tclearTimeout(edgeDetectionDebounce)\n\t}\n\n\tedgeDetectionDebounce = setTimeout(() => {\n\t\thandleWheel(e)\n\t}, 50) // 50ms的防抖延迟\n}\n\n// 向左滚动(模拟向上滚轮事件)\nconst scrollLeftFn = () => {\n\tif (!showLeftTip.value || !scrollContainer.value) return\n\n\t// 模拟向上滚动的滚轮事件(deltaY 为负值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: -scrollDistance.value, // 负值表示向上滚动,我们将其转换为向左滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\n// 向右滚动(模拟向下滚轮事件)\nconst scrollRightFn = () => {\n\tif (!showRightTip.value || !scrollContainer.value) return\n\n\t// 模拟向下滚动的滚轮事件(deltaY 为正值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: scrollDistance.value, // 正值表示向下滚动,我们将其转换为向右滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\nconst handleColse = (id: string) => {\n\temits('colse', id)\n}\n\nconst init = () => {\n\tif (props.type === 'UserMessage' && props.fileList.length > 0) {\n\t\tconst list = props.fileList\n\t\tlist.forEach((item, index) => {\n\t\t\temits('userMessageFileList', item, index)\n\t\t})\n\t}\n}\n\nonMounted(() => {\n\tif (scrollContainer.value) {\n\t\t// 添加事件监听,passive: false 允许我们调用 preventDefault\n\t\tscrollContainer.value.addEventListener('wheel', handleScroll, { passive: false })\n\t}\n\tinit()\n})\n\nonUnmounted(() => {\n\tif (scrollContainer.value) {\n\t\tscrollContainer.value.removeEventListener('wheel', handleScroll)\n\t}\n})\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_openBlock","_Fragment","fileList","_createBlock","hasColse"],"mappings":"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"}
1
+ {"version":3,"file":"FileContent.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/FileContent.vue"],"sourcesContent":["<template>\n\t<div class=\"file-content\">\n\t\t<div ref=\"scrollContainer\" class=\"file-content-scroll\">\n\t\t\t<template v-for=\"(item, index) in fileList\" :key=\"item.id\">\n\t\t\t\t<ImageFile v-if=\"item.fileType.includes('image')\" :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t\t<VideoFile v-else-if=\"item.fileType.includes('mp4')\" :item=\"item\" :index=\"index\" />\n\t\t\t\t<PDFFile v-else :item=\"item\" :index=\"index\" :has-colse=\"hasColse\" @colse=\"handleColse\" />\n\t\t\t</template>\n\t\t</div>\n\t\t<div v-show=\"showRightTip\" class=\"file-content-right-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollRightFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-show=\"showLeftTip\" class=\"file-content-left-tip\">\n\t\t\t<div class=\"file-content-svg\" @click=\"scrollLeftFn\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"9\" viewBox=\"0 0 5 9\" fill=\"none\">\n\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.01036 0.877808L4.5968 4.46425C4.80562 4.67307 4.80562 5.01164 4.5968 5.22046L1.01036 8.8069L0.25415 8.05069L3.46248 4.84235L0.25415 1.63402L1.01036 0.877808Z\" fill=\"#1D2129\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nimport ImageFile from './ImageFile.vue'\nimport PDFFile from './PDFFile.vue'\nimport VideoFile from './VideoFile.vue'\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst showRightTip = ref(false)\nconst showLeftTip = ref(false)\nconst scrollDistance = ref(256) // 每次滚动的距离\nconst scrollContainer = ref<HTMLDivElement | null>(null)\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n\thasColse: boolean\n\ttype: string\n}>()\nconst emits = defineEmits<{\n\t(e: 'colse', id: string): void\n\t(e: 'userMessageFileList', value: FileItem, index: number): void\n}>()\n\nlet edgeDetectionDebounce: NodeJS.Timeout | null = null\n// 处理鼠标滚轮事件,将纵向滚动转为横向滚动\nconst handleWheel = (e: WheelEvent) => {\n\tif (!scrollContainer.value) return\n\n\t// 阻止默认的纵向滚动\n\te.preventDefault()\n\tshowRightTip.value = true\n\tshowLeftTip.value = true\n\tconst { scrollLeft, clientWidth, scrollWidth } = scrollContainer.value\n\n\t// 左边缘检测(允许1px的误差)\n\tif (scrollLeft <= 1) {\n\t\tshowLeftTip.value = false\n\t}\n\n\t// 右边缘检测(允许1px的误差)\n\tif (scrollLeft + clientWidth >= scrollWidth - 1) {\n\t\tshowRightTip.value = false\n\t}\n\n\t// 计算滚动距离,添加一些乘数使滚动更自然\n\tconst scrollAmount = e.deltaY * 0.8\n\n\t// 平滑滚动\n\tscrollContainer.value.scrollBy({\n\t\tleft: scrollAmount,\n\t\tbehavior: 'smooth'\n\t})\n}\n\nconst handleScroll = (e: WheelEvent) => {\n\t// 防抖处理,避免滚动过程中频繁触发\n\tif (edgeDetectionDebounce) {\n\t\tclearTimeout(edgeDetectionDebounce)\n\t}\n\n\tedgeDetectionDebounce = setTimeout(() => {\n\t\thandleWheel(e)\n\t}, 50) // 50ms的防抖延迟\n}\n\n// 向左滚动(模拟向上滚轮事件)\nconst scrollLeftFn = () => {\n\tif (!showLeftTip.value || !scrollContainer.value) return\n\n\t// 模拟向上滚动的滚轮事件(deltaY 为负值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: -scrollDistance.value, // 负值表示向上滚动,我们将其转换为向左滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\n// 向右滚动(模拟向下滚轮事件)\nconst scrollRightFn = () => {\n\tif (!showRightTip.value || !scrollContainer.value) return\n\n\t// 模拟向下滚动的滚轮事件(deltaY 为正值)\n\tconst mockEvent = new WheelEvent('wheel', {\n\t\tdeltaY: scrollDistance.value, // 正值表示向下滚动,我们将其转换为向右滚动\n\t\tbubbles: true,\n\t\tcancelable: true\n\t})\n\n\t// 复用 handleWheel 方法处理模拟事件\n\thandleWheel(mockEvent)\n}\n\nconst handleColse = (id: string) => {\n\temits('colse', id)\n}\n\nconst init = () => {\n\tif (props.type === 'UserMessage' && props.fileList.length > 0) {\n\t\tconst list = props.fileList\n\t\tlist.forEach((item, index) => {\n\t\t\temits('userMessageFileList', item, index)\n\t\t})\n\t}\n}\n\nonMounted(() => {\n\tif (scrollContainer.value) {\n\t\t// 添加事件监听,passive: false 允许我们调用 preventDefault\n\t\tscrollContainer.value.addEventListener('wheel', handleScroll, { passive: false })\n\t}\n\tinit()\n})\n\nonUnmounted(() => {\n\tif (scrollContainer.value) {\n\t\tscrollContainer.value.removeEventListener('wheel', handleScroll)\n\t}\n})\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_openBlock","_Fragment","fileList","_createBlock","hasColse"],"mappings":"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"}
@@ -89,6 +89,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
89
89
  onUnmounted(() => {
90
90
  window.removeEventListener("resize", handleResize);
91
91
  });
92
+ const fileAction = inject("fileAction", () => {
93
+ });
94
+ const fileClick = () => {
95
+ fileAction(props.item, props.index);
96
+ };
92
97
  return (_ctx, _cache) => {
93
98
  return openBlock(), createElementBlock(
94
99
  Fragment,
@@ -98,7 +103,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
98
103
  createElementVNode(
99
104
  "div",
100
105
  {
101
- class: normalizeClass(["pdf-file", _ctx.item.uploadError ? "pdf-error" : "pdf-success"])
106
+ class: normalizeClass(["pdf-file", _ctx.item.uploadError ? "pdf-error" : "pdf-success"]),
107
+ onClick: fileClick
102
108
  },
103
109
  [
104
110
  createCommentVNode(" <span>{{imgType}}</span> "),
@@ -1 +1 @@
1
- {"version":3,"file":"PDFFile.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/PDFFile.vue"],"sourcesContent":["<template>\n\t<!-- -->\n\t<div class=\"pdf-file\" :class=\"item.uploadError ? 'pdf-error' : 'pdf-success'\">\n\t\t<!-- <span>{{imgType}}</span> -->\n\t\t<img class=\"pdf-file-img\" :src=\"imgTypeInfo[imgType]\" :alt=\"imgType\" />\n\t\t<div ref=\"centerContainer\" class=\"pdf-file-center\">\n\t\t\t<p ref=\"titleElement\" class=\"pdf-file-title\" @mouseenter=\"handleMouseEnter\" @mouseleave=\"showTooltip = false\">\n\t\t\t\t{{ item.name }}\n\t\t\t</p>\n\t\t\t<p v-if=\"item.uploadError\" class=\"pdf-file-info\">错误</p>\n\t\t\t<p v-if=\"progress !== 100 && !item.uploadError\" class=\"pdf-file-info\">{{ progress }}%</p>\n\t\t\t<p v-if=\"progress === 100 && !item.uploadError\" class=\"pdf-file-info\">{{ item.fileSize }}</p>\n\t\t\t<!-- <p v-if=\"showTooltip\" ref=\"tooltipElement\" class=\"pdf-file-tooltip\" :style=\"{ top: tooltipTop + 'px' }\">\n\t\t\t\t{{ item.name }}\n\t\t\t</p> -->\n\t\t</div>\n\t\t<img class=\"pdf-file-reset\" src=\"../img/svg/reset.svg\" alt=\"reset\" @click=\"handleReset\" />\n\t\t<div v-if=\"progress !== 100\" :style=\"{ width: (progress * 2) / 3 + '%' }\" class=\"pdf-file-progress\"></div>\n\t\t<div v-show=\"hasColse\" class=\"pdf-file-colse\" @click=\"emits('colse', item.id)\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"6\" viewBox=\"0 0 5 6\" fill=\"none\">\n\t\t\t\t<path d=\"M4.42492 5.31718L4.97489 4.76721L3.05002 2.84233L4.97493 0.917422L4.42496 0.36745L2.50005 2.29236L0.575118 0.367432L0.0251465 0.917403L1.95008 2.84233L0.0251875 4.76722L0.575159 5.3172L2.50005 3.39231L4.42492 5.31718Z\" fill=\"white\" />\n\t\t\t</svg>\n\t\t</div>\n\t</div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, nextTick, onMounted, onUnmounted, computed, inject } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\nimport DOC from '../img/file/doc.png'\nimport DOCX from '../img/file/docx.png'\nimport HTML from '../img/file/html.png'\nimport JPG from '../img/file/jpg.png'\nimport MP3 from '../img/file/mp3.png'\nimport MP4 from '../img/file/mp4.png'\nimport MUSIC from '../img/file/music.png'\nimport PDF from '../img/file/pdf.png'\nimport PNG from '../img/file/png.png'\nimport XLS from '../img/file/xls.png'\nimport TXT from '../img/file/txt.png'\nimport GIF from '../img/file/gif.png'\nimport PPT from '../img/file/ppt.png'\nimport PPTX from '../img/file/pptx.png'\nimport XLSX from '../img/file/xlsx.png'\n\ntype ImgType = 'doc' | 'docx' | 'html' | 'jpg' | 'mp3' | 'mp4' | 'music' | 'pdf' | 'png' | 'xls' | 'txt' | 'gif' | 'ppt' | 'pptx' | 'xlsx' | ''\nconst imgTypeInfo: Record<ImgType, string> = {\n\tdoc: DOC,\n\tdocx: DOCX,\n\thtml: HTML,\n\tjpg: JPG,\n\tmp3: MP3,\n\tmp4: MP4,\n\tmusic: MUSIC,\n\tpdf: PDF,\n\tpng: PNG,\n\txls: XLS,\n\ttxt: TXT,\n\tgif: GIF,\n\tppt: PPT,\n\tpptx: PPTX,\n\txlsx: XLSX,\n\t'': ''\n}\nconst props = defineProps<{\n\titem: FileItem\n\tindex: number\n\thasColse: boolean\n}>()\n\nconst emits = defineEmits(['colse'])\n\nconst showTooltip = ref(false)\nconst titleElement = ref<HTMLElement | null>(null)\nconst tooltipElement = ref<HTMLElement | null>(null)\nconst centerContainer = ref<HTMLElement | null>(null)\nconst tooltipTop = ref(0)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\n})\n\nconst imgType = computed<ImgType>(() => {\n\tconst arr = props.item.name.split('.')\n\tconst type = arr[arr.length - 1].toLowerCase() as ImgType // 转换为小写并断言类型\n\t// 检查是否是有效类型,不是则返回空字符串\n\treturn (Object.keys(imgTypeInfo) as ImgType[]).includes(type) ? type : ''\n})\n\nconst updateTooltipPosition = () => {\n\tif (titleElement.value && tooltipElement.value && centerContainer.value) {\n\t\tconst titleRect = titleElement.value.getBoundingClientRect()\n\t\tconst containerRect = centerContainer.value.getBoundingClientRect()\n\t\t// 计算相对于容器的 top 值\n\t\tconst relativeTop = titleRect.top - containerRect.top\n\t\ttooltipTop.value = relativeTop - tooltipElement.value.offsetHeight - 6\n\t}\n}\n\nconst handleMouseEnter = async () => {\n\tshowTooltip.value = true\n\t// 等待 DOM 更新完成后再调用更新位置的方法\n\tawait nextTick()\n\tupdateTooltipPosition()\n}\n\nconst handleResize = () => {\n\tif (showTooltip.value) {\n\t\tupdateTooltipPosition()\n\t}\n}\n\nconst uploadFile = inject<(index: number, type?: string) => void>('uploadFile', () => {\n\tconsole.warn('未提供bottom函数')\n})\n\nconst handleReset = () => {\n\tuploadFile(props.index, 'PDF')\n}\nonMounted(() => {\n\twindow.addEventListener('resize', handleResize)\n})\nonUnmounted(() => {\n\twindow.removeEventListener('resize', handleResize)\n})\n</script>\n"],"names":["_createCommentVNode","_createElementVNode","_normalizeClass","item","_createElementBlock","_toDisplayString","hasColse"],"mappings":"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"}
1
+ {"version":3,"file":"PDFFile.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/PDFFile.vue"],"sourcesContent":["<template>\n\t<!-- -->\n\t<div class=\"pdf-file\" :class=\"item.uploadError ? 'pdf-error' : 'pdf-success'\" @click=\"fileClick\">\n\t\t<!-- <span>{{imgType}}</span> -->\n\t\t<img class=\"pdf-file-img\" :src=\"imgTypeInfo[imgType]\" :alt=\"imgType\" />\n\t\t<div ref=\"centerContainer\" class=\"pdf-file-center\">\n\t\t\t<p ref=\"titleElement\" class=\"pdf-file-title\" @mouseenter=\"handleMouseEnter\" @mouseleave=\"showTooltip = false\">\n\t\t\t\t{{ item.name }}\n\t\t\t</p>\n\t\t\t<p v-if=\"item.uploadError\" class=\"pdf-file-info\">错误</p>\n\t\t\t<p v-if=\"progress !== 100 && !item.uploadError\" class=\"pdf-file-info\">{{ progress }}%</p>\n\t\t\t<p v-if=\"progress === 100 && !item.uploadError\" class=\"pdf-file-info\">{{ item.fileSize }}</p>\n\t\t\t<!-- <p v-if=\"showTooltip\" ref=\"tooltipElement\" class=\"pdf-file-tooltip\" :style=\"{ top: tooltipTop + 'px' }\">\n\t\t\t\t{{ item.name }}\n\t\t\t</p> -->\n\t\t</div>\n\t\t<img class=\"pdf-file-reset\" src=\"../img/svg/reset.svg\" alt=\"reset\" @click=\"handleReset\" />\n\t\t<div v-if=\"progress !== 100\" :style=\"{ width: (progress * 2) / 3 + '%' }\" class=\"pdf-file-progress\"></div>\n\t\t<div v-show=\"hasColse\" class=\"pdf-file-colse\" @click=\"emits('colse', item.id)\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"5\" height=\"6\" viewBox=\"0 0 5 6\" fill=\"none\">\n\t\t\t\t<path d=\"M4.42492 5.31718L4.97489 4.76721L3.05002 2.84233L4.97493 0.917422L4.42496 0.36745L2.50005 2.29236L0.575118 0.367432L0.0251465 0.917403L1.95008 2.84233L0.0251875 4.76722L0.575159 5.3172L2.50005 3.39231L4.42492 5.31718Z\" fill=\"white\" />\n\t\t\t</svg>\n\t\t</div>\n\t</div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, nextTick, onMounted, onUnmounted, computed, inject } from 'vue'\nimport type { FileItem } from '../src/AiChat/Chat/types'\nimport DOC from '../img/file/doc.png'\nimport DOCX from '../img/file/docx.png'\nimport HTML from '../img/file/html.png'\nimport JPG from '../img/file/jpg.png'\nimport MP3 from '../img/file/mp3.png'\nimport MP4 from '../img/file/mp4.png'\nimport MUSIC from '../img/file/music.png'\nimport PDF from '../img/file/pdf.png'\nimport PNG from '../img/file/png.png'\nimport XLS from '../img/file/xls.png'\nimport TXT from '../img/file/txt.png'\nimport GIF from '../img/file/gif.png'\nimport PPT from '../img/file/ppt.png'\nimport PPTX from '../img/file/pptx.png'\nimport XLSX from '../img/file/xlsx.png'\n\ntype ImgType = 'doc' | 'docx' | 'html' | 'jpg' | 'mp3' | 'mp4' | 'music' | 'pdf' | 'png' | 'xls' | 'txt' | 'gif' | 'ppt' | 'pptx' | 'xlsx' | ''\nconst imgTypeInfo: Record<ImgType, string> = {\n\tdoc: DOC,\n\tdocx: DOCX,\n\thtml: HTML,\n\tjpg: JPG,\n\tmp3: MP3,\n\tmp4: MP4,\n\tmusic: MUSIC,\n\tpdf: PDF,\n\tpng: PNG,\n\txls: XLS,\n\ttxt: TXT,\n\tgif: GIF,\n\tppt: PPT,\n\tpptx: PPTX,\n\txlsx: XLSX,\n\t'': ''\n}\nconst props = defineProps<{\n\titem: FileItem\n\tindex: number\n\thasColse: boolean\n}>()\n\nconst emits = defineEmits(['colse'])\n\nconst showTooltip = ref(false)\nconst titleElement = ref<HTMLElement | null>(null)\nconst tooltipElement = ref<HTMLElement | null>(null)\nconst centerContainer = ref<HTMLElement | null>(null)\nconst tooltipTop = ref(0)\nconst progress = computed(() => {\n\treturn props.item.uploadProgress ?? 0\n})\n\nconst imgType = computed<ImgType>(() => {\n\tconst arr = props.item.name.split('.')\n\tconst type = arr[arr.length - 1].toLowerCase() as ImgType // 转换为小写并断言类型\n\t// 检查是否是有效类型,不是则返回空字符串\n\treturn (Object.keys(imgTypeInfo) as ImgType[]).includes(type) ? type : ''\n})\n\nconst updateTooltipPosition = () => {\n\tif (titleElement.value && tooltipElement.value && centerContainer.value) {\n\t\tconst titleRect = titleElement.value.getBoundingClientRect()\n\t\tconst containerRect = centerContainer.value.getBoundingClientRect()\n\t\t// 计算相对于容器的 top 值\n\t\tconst relativeTop = titleRect.top - containerRect.top\n\t\ttooltipTop.value = relativeTop - tooltipElement.value.offsetHeight - 6\n\t}\n}\n\nconst handleMouseEnter = async () => {\n\tshowTooltip.value = true\n\t// 等待 DOM 更新完成后再调用更新位置的方法\n\tawait nextTick()\n\tupdateTooltipPosition()\n}\n\nconst handleResize = () => {\n\tif (showTooltip.value) {\n\t\tupdateTooltipPosition()\n\t}\n}\n\nconst uploadFile = inject<(index: number, type?: string) => void>('uploadFile', () => {\n\tconsole.warn('未提供bottom函数')\n})\n\nconst handleReset = () => {\n\tuploadFile(props.index, 'PDF')\n}\nonMounted(() => {\n\twindow.addEventListener('resize', handleResize)\n})\nonUnmounted(() => {\n\twindow.removeEventListener('resize', handleResize)\n})\nconst fileAction = inject<(item: any, index: number) => void>('fileAction', () => {})\nconst fileClick = () => {\n\tfileAction(props.item, props.index)\n}\n</script>\n"],"names":["_createCommentVNode","_createElementVNode","_normalizeClass","item","_createElementBlock","_toDisplayString","hasColse"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString } from 'vue';
1
+ import { defineComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createCommentVNode } from 'vue';
2
2
 
3
3
  var _sfc_main = /* @__PURE__ */ defineComponent({
4
4
  __name: "QuoteContent",
@@ -8,14 +8,25 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  const props = __props;
9
9
  const emits = __emit;
10
10
  return (_ctx, _cache) => {
11
+ var _a, _b, _c, _d, _e, _f;
11
12
  return openBlock(), createElementBlock("div", { class: "quote-content" }, [
12
- createElementVNode(
13
- "div",
14
- { class: "quote-content-text" },
15
- toDisplayString(props.quoteObj.content),
16
- 1
17
- /* TEXT */
18
- ),
13
+ createElementVNode("div", { class: "quote-content-text" }, [
14
+ createElementVNode(
15
+ "span",
16
+ null,
17
+ toDisplayString(props.quoteObj.user) + "\uFF1A",
18
+ 1
19
+ /* TEXT */
20
+ ),
21
+ ((_a = props.quoteObj.msgList[0]) == null ? void 0 : _a.type) === "text" || ((_b = props.quoteObj.msgList[0]) == null ? void 0 : _b.type) === "markdown" ? (openBlock(), createElementBlock(
22
+ "span",
23
+ { key: 0 },
24
+ toDisplayString((_c = props.quoteObj.msgList[0]) == null ? void 0 : _c.content),
25
+ 1
26
+ /* TEXT */
27
+ )) : createCommentVNode("v-if", true),
28
+ ((_d = props.quoteObj.msgList[0]) == null ? void 0 : _d.type) === "a2ui" || ((_e = props.quoteObj.msgList[0]) == null ? void 0 : _e.type) === "component" && ((_f = props.quoteObj.msgList[0]) == null ? void 0 : _f.displayMode) === "inline" ? (openBlock(), createElementBlock("span", { key: 1 }, "[\u7EC4\u4EF6]")) : createCommentVNode("v-if", true)
29
+ ]),
19
30
  createElementVNode("div", {
20
31
  class: "touchchat-action-item value-close-fill",
21
32
  onClick: ($event) => emits("close")
@@ -1 +1 @@
1
- {"version":3,"file":"QuoteContent.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/QuoteContent.vue"],"sourcesContent":["<template>\n\t<div class=\"quote-content\">\n\t\t<div class=\"quote-content-text\">{{ props.quoteObj.content }}</div>\n\t\t<div class=\"touchchat-action-item value-close-fill\" @click=\"emits('close')\"></div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nconst props = defineProps(['quoteObj'])\nconst emits = defineEmits(['close'])\n</script>\n"],"names":["_createElementBlock","_createElementVNode"],"mappings":";;;;;;;AAOA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;;wBAPb,EAAAA,kBAAA,CAGM,OAAA,EAHD,KAAA,EAAM,iBAAe,EAAA;AAAA,QACzBC,kBAAA;AAAA,UAAkE,KAAA;AAAA,UAAA,EAA7D,OAAM;0BAAwB,KAAM,CAAA,QAAA,CAAS,OAAO,CAAA;AAAA,UAAA,CAAA;AAAA;AAAA,SAAA;AAAA,QACzDA,mBAAkF,KAAA,EAAA;AAAA,UAA7E,KAAM,EAAA,wCAAA;AAAA,UAA0C,gBAAO,KAAA,KAAA,CAAK,OAAA,CAAA;AAAA;;;;;;;;"}
1
+ {"version":3,"file":"QuoteContent.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/QuoteContent.vue"],"sourcesContent":["<template>\n\t<div class=\"quote-content\">\n\t\t<div class=\"quote-content-text\">\n\t\t\t<span>{{ props.quoteObj.user }}:</span>\n\t\t\t<span v-if=\"props.quoteObj.msgList[0]?.type === 'text' || props.quoteObj.msgList[0]?.type === 'markdown'\">{{ props.quoteObj.msgList[0]?.content }}</span>\n\t\t\t<span v-if=\"props.quoteObj.msgList[0]?.type === 'a2ui' || (props.quoteObj.msgList[0]?.type === 'component' && props.quoteObj.msgList[0]?.displayMode === 'inline')\">[组件]</span>\n\t\t</div>\n\t\t<div class=\"touchchat-action-item value-close-fill\" @click=\"emits('close')\"></div>\n\t</div>\n</template>\n<script lang=\"ts\" setup>\nconst props = defineProps(['quoteObj'])\nconst emits = defineEmits(['close'])\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_openBlock"],"mappings":";;;;;;;AAWA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;;;wBAXb,EAAAA,kBAAA,CAOM,OAAA,EAPD,KAAA,EAAM,iBAAe,EAAA;AAAA,QACzBC,kBAIM,CAAA,KAAA,EAAA,EAJD,KAAA,EAAM,sBAAoB,EAAA;AAAA,UAC9BA,kBAAA;AAAA,YAAuC,MAAA;AAAA;2BAA9B,CAAA,KAAA,CAAM,QAAS,CAAA,IAAI,CAAG,GAAA,QAAA;AAAA,YAAC,CAAA;AAAA;AAAA,WAAA;AAAA,UAAA,CAAA,CACpB,WAAM,QAAS,CAAA,OAAA,CAAY,CAAA,CAAA,KAA3B,mBAA2B,IAAmB,MAAA,MAAA,IAAA,CAAA,CAAA,EAAM,GAAA,KAAA,CAAA,QAAA,CAAS,eAAf,mBAA2B,IAAI,MAAA,UAAA,IAAzFC,WAAA,EAAAF,kBAAA;AAAA,YAAyJ,MAAA;AAAA;6BAA5C,EAAM,GAAA,KAAA,CAAA,QAAA,CAAS,eAAf,mBAA2B,OAAO,CAAA;AAAA,YAAA,CAAA;AAAA;AAAA,WAAA;YACnI,WAAM,QAAS,CAAA,OAAA,QAAf,mBAA2B,IAAI,MAAA,MAAA,IAAA,CAAA,CAAgB,EAAM,GAAA,KAAA,CAAA,QAAA,CAAS,QAAO,CAAA,CAAA,KAAtB,IAA2B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAwB,iBAAA,EAAM,GAAA,KAAA,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA,MAAtB,IAA2B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,MAAW,QAApJ,IAAAE,SAAA,IAAAF,kBAA+K,CAAA,MAAA,YAAX,EAAA,gBAAI;;QAEzKC,mBAAkF,KAAA,EAAA;AAAA,UAA7E,KAAM,EAAA,wCAAA;AAAA,UAA0C,gBAAO,KAAA,KAAA,CAAK,OAAA,CAAA;AAAA;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, inject, openBlock, createElementBlock, createCommentVNode, createElementVNode, renderSlot } from 'vue';
1
+ import { defineComponent, inject, ref, openBlock, createElementBlock, createCommentVNode, createElementVNode, renderSlot } from 'vue';
2
2
  import { showToast } from '../utils/tools.mjs';
3
3
 
4
4
  var _sfc_main = /* @__PURE__ */ defineComponent({
@@ -8,6 +8,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  },
9
9
  emits: ["upload-file"],
10
10
  setup(__props, { expose: __expose, emit: __emit }) {
11
+ const uploadAction = inject("uploadAction", null);
11
12
  const props = __props;
12
13
  const emit = __emit;
13
14
  const fileInput = ref(null);
@@ -24,6 +25,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
24
25
  if (input.files && input.files.length > 0) {
25
26
  for (let i = 0; i < input.files.length; i++) {
26
27
  const file = input.files[i];
28
+ const exists = fileInfos.value.some((f) => f.name === file.name && f.fileSize === formatFileSize(file.size));
29
+ if (exists) {
30
+ showToast(`\u6587\u4EF6"${file.name}"\u5DF2\u5B58\u5728`, "info", 3e3);
31
+ continue;
32
+ }
27
33
  if (!isFileTypeAllowed(file) && types.value.length > 0) {
28
34
  showToast(`\u6587\u4EF6\u7C7B\u578B${file.type}\u4E0D\u5141\u8BB8\u4E0A\u4F20\uFF0C\u8BF7\u4E0A\u4F20${types.value.join("\u3001")}\u7C7B\u578B\u6587\u4EF6`, "info", 3e3);
29
35
  continue;
@@ -66,15 +72,18 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
66
72
  uploadFile(fileInfos.value.length - 1);
67
73
  }
68
74
  }
75
+ if (fileInput.value) {
76
+ fileInput.value.value = "";
77
+ }
69
78
  }
70
- console.log(fileInfos.value, "fileInfos.value");
71
79
  };
72
80
  const isFileTypeAllowed = (file) => {
73
81
  var _a;
74
82
  const fileExtension = (_a = file.name.split(".").pop()) == null ? void 0 : _a.toLowerCase();
75
83
  return types.value.includes(fileExtension || "");
76
84
  };
77
- const uploadFile = (index, type) => {
85
+ const uploadFile = async (index, type) => {
86
+ var _a, _b;
78
87
  const fileInfo = fileInfos.value[index];
79
88
  if (!fileInfo || !fileInfo.file)
80
89
  return;
@@ -86,19 +95,47 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
86
95
  fileInfo.fileType = fileInfo.file.type;
87
96
  fileInfo.id = fileInfo.file.lastModified.toString();
88
97
  fileInfo.name = fileInfo.file.name;
89
- const interval = setInterval(() => {
90
- if (fileInfo.uploadProgress !== void 0) {
91
- fileInfo.uploadProgress += 10;
92
- }
93
- emit("upload-file", fileInfos.value);
94
- if (fileInfo.uploadProgress !== void 0 && fileInfo.uploadProgress >= 100) {
95
- clearInterval(interval);
96
- fileInfo.isUploading = false;
98
+ if (type)
99
+ return;
100
+ if (uploadAction) {
101
+ let progressCalled = false;
102
+ const progressTimer = setInterval(() => {
103
+ if (progressCalled)
104
+ return;
105
+ if (fileInfo.uploadProgress !== void 0 && fileInfo.uploadProgress < 90) {
106
+ fileInfo.uploadProgress += 10;
107
+ emit("upload-file", fileInfos.value);
108
+ }
109
+ }, 100);
110
+ try {
111
+ const res = await uploadAction(fileInfo.file, (percent) => {
112
+ progressCalled = true;
113
+ fileInfo.uploadProgress = percent;
114
+ emit("upload-file", fileInfos.value);
115
+ });
116
+ clearInterval(progressTimer);
97
117
  fileInfo.uploadSuccess = true;
118
+ fileInfo.uploadProgress = 100;
119
+ fileInfo.url = (res == null ? void 0 : res.url) || ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.url);
120
+ fileInfo.fileId = (res == null ? void 0 : res.id) || ((_b = res == null ? void 0 : res.data) == null ? void 0 : _b.id);
121
+ } catch (e) {
122
+ clearInterval(progressTimer);
123
+ fileInfo.uploadError = true;
98
124
  }
99
- }, 100);
100
- if (type) {
101
- return;
125
+ fileInfo.isUploading = false;
126
+ emit("upload-file", fileInfos.value);
127
+ } else {
128
+ const interval = setInterval(() => {
129
+ if (fileInfo.uploadProgress !== void 0) {
130
+ fileInfo.uploadProgress += 10;
131
+ }
132
+ emit("upload-file", fileInfos.value);
133
+ if (fileInfo.uploadProgress !== void 0 && fileInfo.uploadProgress >= 100) {
134
+ clearInterval(interval);
135
+ fileInfo.isUploading = false;
136
+ fileInfo.uploadSuccess = true;
137
+ }
138
+ }, 100);
102
139
  }
103
140
  };
104
141
  const formatFileSize = (bytes) => {
@@ -1 +1 @@
1
- {"version":3,"file":"UploadView.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/UploadView.vue"],"sourcesContent":["<template>\n\t<div class=\"upload-view\">\n\t\t<!-- <button class=\"upload-button\" @click=\"triggerFileInput\">点击选择文件</button> -->\n\t\t<div @click=\"triggerFileInput\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t\t<input ref=\"fileInput\" type=\"file\" class=\"file-input\" style=\"display: none\" multiple @change=\"handleFileChange\" />\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, inject } from 'vue'\nimport { showToast } from '../utils/tools'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'upload-file', value: FileItem[]): void\n}>()\n\nconst fileInput = ref<HTMLInputElement | null>(null)\nconst fileInfos = ref<FileItem[]>(props.fileList || [])\nconst allowedTypes = inject<string[]>('allowedTypes', [])\n// ['doc', 'docx','word','png']\nconst types = ref<string[]>(allowedTypes || [])\n\n// 触发文件选择框\nconst triggerFileInput = () => {\n\tif (fileInput.value) {\n\t\tfileInput.value.click()\n\t}\n}\n\n// 处理文件选择\nconst handleFileChange = (event: Event) => {\n\tconst input = event.target as HTMLInputElement\n\tif (input.files && input.files.length > 0) {\n\t\tfor (let i = 0; i < input.files.length; i++) {\n\t\t\tconst file = input.files[i]\n\t\t\t// 检查文件类型是否允许\n\t\t\tif (!isFileTypeAllowed(file) && types.value.length > 0) {\n\t\t\t\tshowToast(`文件类型${file.type}不允许上传,请上传${types.value.join('、')}类型文件`, 'info', 3000)\n\t\t\t\tcontinue // 跳过不允许的文件类型\n\t\t\t}\n\t\t\tif (file.type.startsWith('image/')) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = e => {\n\t\t\t\t\tconst base64 = e.target?.result as string\n\t\t\t\t\tfileInfos.value.push({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tisUploading: false,\n\t\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\t\tuploadError: false,\n\t\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\t\tfileType: file.type,\n\t\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tbase64, // 存储 Base64 数据\n\t\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t\t})\n\t\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t\t}\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t} else {\n\t\t\t\tfileInfos.value.push({\n\t\t\t\t\tfile,\n\t\t\t\t\tisUploading: false,\n\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\tuploadError: false,\n\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\tfileType: file.type,\n\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\tname: file.name,\n\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t})\n\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t}\n\t\t}\n\t}\n\tconsole.log(fileInfos.value, 'fileInfos.value')\n}\n// 检查文件类型是否允许\nconst isFileTypeAllowed = (file: File): boolean => {\n\tconst fileExtension = file.name.split('.').pop()?.toLowerCase()\n\treturn types.value.includes(fileExtension || '')\n}\n// 模拟文件上传\nconst uploadFile = (index: number, type?: string) => {\n\tconst fileInfo = fileInfos.value[index]\n\tif (!fileInfo || !fileInfo.file) return\n\n\tfileInfo.isUploading = true\n\tfileInfo.uploadSuccess = false\n\tfileInfo.uploadError = false\n\tfileInfo.uploadProgress = 0\n\tfileInfo.fileSize = formatFileSize(fileInfo.file.size)\n\tfileInfo.fileType = fileInfo.file.type\n\tfileInfo.id = fileInfo.file.lastModified.toString()\n\tfileInfo.name = fileInfo.file.name\n\n\tconst interval = setInterval(() => {\n\t\tif (fileInfo.uploadProgress !== undefined) {\n\t\t\tfileInfo.uploadProgress += 10\n\t\t}\n\t\t// emit('progressFn', fileInfo.uploadProgress)\n\t\temit('upload-file', fileInfos.value)\n\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress >= 100) {\n\t\t\tclearInterval(interval)\n\t\t\tfileInfo.isUploading = false\n\t\t\tfileInfo.uploadSuccess = true\n\t\t}\n\t}, 100)\n\n\t// 模拟上传失败的情况,可根据需求修改\n\tif (type) {\n\t\treturn\n\t}\n\t// setTimeout(() => {\n\t// \tclearInterval(interval)\n\t// \tfileInfo.isUploading = false\n\t// \tfileInfo.uploadError = true\n\t// }, 500)\n}\n\n// 格式化文件大小\nconst formatFileSize = (bytes: number) => {\n\tif (bytes === 0) return '0 Bytes'\n\tconst k = 1024\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB']\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]\n}\n\nconst resetFile = () => {\n\tfileInfos.value = []\n\tif (fileInput.value) {\n\t\tfileInput.value.value = ''\n\t}\n}\ndefineExpose({\n\tresetFile,\n\tuploadFile\n})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"UploadView.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/UploadView.vue"],"sourcesContent":["<template>\n\t<div class=\"upload-view\">\n\t\t<!-- <button class=\"upload-button\" @click=\"triggerFileInput\">点击选择文件</button> -->\n\t\t<div @click=\"triggerFileInput\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t\t<input ref=\"fileInput\" type=\"file\" class=\"file-input\" style=\"display: none\" multiple @change=\"handleFileChange\" />\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, inject } from 'vue'\nimport { showToast } from '../utils/tools'\nimport type { FileItem } from '../src/AiChat/Chat/types'\n\ntype UploadActionFn = (file: File, onProgress: (percent: number) => void) => Promise<any>\n\nconst uploadAction = inject<UploadActionFn | null>('uploadAction', null)\n\nconst props = defineProps<{\n\tfileList: FileItem[]\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'upload-file', value: FileItem[]): void\n}>()\n\nconst fileInput = ref<HTMLInputElement | null>(null)\nconst fileInfos = ref<FileItem[]>(props.fileList || [])\nconst allowedTypes = inject<string[]>('allowedTypes', [])\n// ['doc', 'docx','word','png']\nconst types = ref<string[]>(allowedTypes || [])\n\n// 触发文件选择框\nconst triggerFileInput = () => {\n\tif (fileInput.value) {\n\t\tfileInput.value.click()\n\t}\n}\n\n// 处理文件选择\nconst handleFileChange = (event: Event) => {\n\tconst input = event.target as HTMLInputElement\n\tif (input.files && input.files.length > 0) {\n\t\tfor (let i = 0; i < input.files.length; i++) {\n\t\t\tconst file = input.files[i]\n\t\t\t// 检查是否已存在相同文件(同名同大小)\n\t\t\tconst exists = fileInfos.value.some(f => f.name === file.name && f.fileSize === formatFileSize(file.size))\n\t\t\tif (exists) {\n\t\t\t\tshowToast(`文件\"${file.name}\"已存在`, 'info', 3000)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// 检查文件类型是否允许\n\t\t\tif (!isFileTypeAllowed(file) && types.value.length > 0) {\n\t\t\t\tshowToast(`文件类型${file.type}不允许上传,请上传${types.value.join('、')}类型文件`, 'info', 3000)\n\t\t\t\tcontinue // 跳过不允许的文件类型\n\t\t\t}\n\t\t\tif (file.type.startsWith('image/')) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = e => {\n\t\t\t\t\tconst base64 = e.target?.result as string\n\t\t\t\t\tfileInfos.value.push({\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tisUploading: false,\n\t\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\t\tuploadError: false,\n\t\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\t\tfileType: file.type,\n\t\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tbase64, // 存储 Base64 数据\n\t\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t\t})\n\t\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t\t}\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t} else {\n\t\t\t\tfileInfos.value.push({\n\t\t\t\t\tfile,\n\t\t\t\t\tisUploading: false,\n\t\t\t\t\tuploadProgress: 0,\n\t\t\t\t\tuploadSuccess: false,\n\t\t\t\t\tuploadError: false,\n\t\t\t\t\tfileSize: formatFileSize(file.size),\n\t\t\t\t\tfileType: file.type,\n\t\t\t\t\tid: file.lastModified.toString(),\n\t\t\t\t\tname: file.name,\n\t\t\t\t\tlastModified: file.lastModified\n\t\t\t\t})\n\t\t\t\tuploadFile(fileInfos.value.length - 1)\n\t\t\t}\n\t\t}\n\t\t// 清空 input value,允许重复选择同一文件\n\t\tif (fileInput.value) {\n\t\t\tfileInput.value.value = ''\n\t\t}\n\t}\n}\n// 检查文件类型是否允许\nconst isFileTypeAllowed = (file: File): boolean => {\n\tconst fileExtension = file.name.split('.').pop()?.toLowerCase()\n\treturn types.value.includes(fileExtension || '')\n}\n// 文件上传\nconst uploadFile = async (index: number, type?: string) => {\n\tconst fileInfo = fileInfos.value[index]\n\tif (!fileInfo || !fileInfo.file) return\n\n\tfileInfo.isUploading = true\n\tfileInfo.uploadSuccess = false\n\tfileInfo.uploadError = false\n\tfileInfo.uploadProgress = 0\n\tfileInfo.fileSize = formatFileSize(fileInfo.file.size)\n\tfileInfo.fileType = fileInfo.file.type\n\tfileInfo.id = fileInfo.file.lastModified.toString()\n\tfileInfo.name = fileInfo.file.name\n\n\tif (type) return\n\n\tif (uploadAction) {\n\t\t// 真实上传\n\t\tlet progressCalled = false\n\t\t// 保底进度:如果 onProgress 未被调用(如用 fetch),按时间递进补进度\n\t\tconst progressTimer = setInterval(() => {\n\t\t\tif (progressCalled) return\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress < 90) {\n\t\t\t\tfileInfo.uploadProgress += 10\n\t\t\t\temit('upload-file', fileInfos.value)\n\t\t\t}\n\t\t}, 100)\n\t\ttry {\n\t\t\tconst res = await uploadAction(fileInfo.file, percent => {\n\t\t\t\tprogressCalled = true\n\t\t\t\tfileInfo.uploadProgress = percent\n\t\t\t\temit('upload-file', fileInfos.value)\n\t\t\t})\n\t\t\tclearInterval(progressTimer)\n\t\t\tfileInfo.uploadSuccess = true\n\t\t\tfileInfo.uploadProgress = 100\n\t\t\tfileInfo.url = res?.url || res?.data?.url\n\t\t\tfileInfo.fileId = res?.id || res?.data?.id\n\t\t} catch {\n\t\t\tclearInterval(progressTimer)\n\t\t\tfileInfo.uploadError = true\n\t\t}\n\t\tfileInfo.isUploading = false\n\t\temit('upload-file', fileInfos.value)\n\t} else {\n\t\t// 无 uploadAction 时保持模拟上传(向后兼容)\n\t\tconst interval = setInterval(() => {\n\t\t\tif (fileInfo.uploadProgress !== undefined) {\n\t\t\t\tfileInfo.uploadProgress += 10\n\t\t\t}\n\t\t\temit('upload-file', fileInfos.value)\n\t\t\tif (fileInfo.uploadProgress !== undefined && fileInfo.uploadProgress >= 100) {\n\t\t\t\tclearInterval(interval)\n\t\t\t\tfileInfo.isUploading = false\n\t\t\t\tfileInfo.uploadSuccess = true\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n// 格式化文件大小\nconst formatFileSize = (bytes: number) => {\n\tif (bytes === 0) return '0 Bytes'\n\tconst k = 1024\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB']\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]\n}\n\nconst resetFile = () => {\n\tfileInfos.value = []\n\tif (fileInput.value) {\n\t\tfileInput.value.value = ''\n\t}\n}\ndefineExpose({\n\tresetFile,\n\tuploadFile\n})\n</script>\n"],"names":["_createElementBlock","_createCommentVNode","_createElementVNode","_renderSlot"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import _sfc_main from './VideoFile.vue2.mjs';
2
+ import _export_sfc from '../../../../_virtual/_plugin-vue_export-helper.mjs';
3
+
4
+ var VideoFile = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7305b796"], ["__file", "VideoFile.vue"]]);
5
+
6
+ export { VideoFile as default };
7
+ //# sourceMappingURL=VideoFile.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFile.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,33 @@
1
+ import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';
2
+
3
+ const __default__ = defineComponent({ name: "VideoFile" });
4
+ var _sfc_main = /* @__PURE__ */ defineComponent({
5
+ ...__default__,
6
+ props: {
7
+ item: {},
8
+ index: {}
9
+ },
10
+ setup(__props) {
11
+ const props = __props;
12
+ function createMp4LocalUrl(mp4File) {
13
+ console.log("object", mp4File);
14
+ if (!(mp4File instanceof File) && !(mp4File instanceof Blob)) {
15
+ return "";
16
+ }
17
+ const localUrl = URL.createObjectURL(mp4File);
18
+ return localUrl;
19
+ }
20
+ return (_ctx, _cache) => {
21
+ return openBlock(), createElementBlock("div", { class: "video-File" }, [
22
+ createElementVNode("video", {
23
+ class: "video-play",
24
+ controls: "",
25
+ src: createMp4LocalUrl(props.item.file)
26
+ }, null, 8, ["src"])
27
+ ]);
28
+ };
29
+ }
30
+ });
31
+
32
+ export { _sfc_main as default };
33
+ //# sourceMappingURL=VideoFile.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFile.vue2.mjs","sources":["../../../../../../packages/components/touchchat/component/VideoFile.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'VideoFile' });\n</script>\n<template>\n\t<div class=\"video-File\">\n\t\t<video class=\"video-play\" controls :src=\"createMp4LocalUrl(props.item.file)\"></video>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\n\n\nconst props = defineProps<{\n\titem: {\n\t\tfile?: File\n\t\t[key: string]: any\n\t}\n\tindex: number\n}>()\nfunction createMp4LocalUrl(mp4File: any) {\n\tconsole.log('object', mp4File)\n\t// 生成本地临时URL\n\tif (!(mp4File instanceof File) && !(mp4File instanceof Blob)) {\n\t\treturn ''\n\t}\n\tconst localUrl = URL.createObjectURL(mp4File)\n\treturn localUrl\n}\n</script>\n<style scoped>\n.video-File {\n\twidth: 5em;\n\theight: auto;\n}\n.video-play {\n\twidth: 100%;\n}\n</style>\n"],"names":["DO_defineComponent","_createElementBlock","_createElementVNode"],"mappings":";;AAEA,MAAA,WAA6B,GAAAA,eAAA,CAAmB,EAAE,IAAA,EAAM,aAAa,CAAA,CAAA;;;;;;;;AAWrE,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAOd,IAAA,SAAS,kBAAkB,OAAc,EAAA;AACxC,MAAQ,OAAA,CAAA,GAAA,CAAI,UAAU,OAAO,CAAA,CAAA;AAE7B,MAAA,IAAI,EAAE,OAAA,YAAmB,IAAS,CAAA,IAAA,EAAE,mBAAmB,IAAO,CAAA,EAAA;AAC7D,QAAO,OAAA,EAAA,CAAA;AAAA,OACR;AACA,MAAM,MAAA,QAAA,GAAW,GAAI,CAAA,eAAA,CAAgB,OAAO,CAAA,CAAA;AAC5C,MAAO,OAAA,QAAA,CAAA;AAAA,KACR;;wBAvBC,EAAAC,kBAAA,CAEM,OAAA,EAFD,KAAA,EAAM,cAAY,EAAA;AAAA,QACtBC,mBAAqF,OAAA,EAAA;AAAA,UAA9E,KAAM,EAAA,YAAA;AAAA,UAAa,QAAA,EAAA,EAAA;AAAA,UAAU,GAAK,EAAA,iBAAA,CAAkB,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;;;;;;;;"}
@@ -19,7 +19,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
19
19
  index: {},
20
20
  hasRetry: { type: Boolean, default: true }
21
21
  },
22
- emits: ["copy", "retry", "like", "dislike", "quote", "contentRendered", "completeRendered", "toggle-sidebar", "openSideBar"],
22
+ emits: ["copy", "retry", "like", "dislike", "quote", "contentRendered", "completeRendered", "toggle-sidebar", "openSideBar", "send"],
23
23
  setup(__props, { emit: __emit }) {
24
24
  const componentMap = {
25
25
  FileView,
@@ -95,6 +95,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
95
95
  var _a;
96
96
  return props.item.content || ((_a = props.item.msgList) == null ? void 0 : _a.length);
97
97
  });
98
+ const handleSend = (sendVal) => {
99
+ emits("send", sendVal);
100
+ };
98
101
  const toggleSidebarClick = (item, index) => {
99
102
  emits("toggle-sidebar", item, index);
100
103
  };
@@ -335,6 +338,41 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
335
338
  [vShow, showFn.value && unref(scripts).length > 0 || !unref(scripts).length && !_ctx.item.isChating]
336
339
  ])
337
340
  ]),
341
+ showFn.value && _ctx.item.likeList && _ctx.item.likeList.length && !_ctx.item.isChating ? (openBlock(), createElementBlock("div", {
342
+ key: 0,
343
+ class: "touchchat-ai-may-like"
344
+ }, [
345
+ renderSlot(_ctx.$slots, "mayLike", {
346
+ item: _ctx.item,
347
+ index: _ctx.index
348
+ }, () => [
349
+ (openBlock(true), createElementBlock(
350
+ Fragment,
351
+ null,
352
+ renderList(_ctx.item.likeList, (likeItem) => {
353
+ return openBlock(), createElementBlock("div", {
354
+ key: likeItem.id
355
+ }, [
356
+ createElementVNode("span", {
357
+ class: "touchchat-ai-may-like-item",
358
+ onClick: ($event) => handleSend(likeItem.name)
359
+ }, [
360
+ createElementVNode(
361
+ "span",
362
+ { class: "touchchat-ai-may-like-item-title" },
363
+ toDisplayString(likeItem.name),
364
+ 1
365
+ /* TEXT */
366
+ ),
367
+ createElementVNode("div", { class: "touchchat-action-item value-right-arrow" })
368
+ ], 8, ["onClick"])
369
+ ]);
370
+ }),
371
+ 128
372
+ /* KEYED_FRAGMENT */
373
+ ))
374
+ ])
375
+ ])) : createCommentVNode("v-if", true),
338
376
  createCommentVNode(" && !scripts.length ")
339
377
  ],
340
378
  2
@@ -1 +1 @@
1
- {"version":3,"file":"AiMessage.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AiMessage.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-ai touchchat-item\" :data-chat-id=\"item.chatId\">\n\t\t<!-- 头像区域 -->\n\t\t<div class=\"touchchat-ai-avatar\">\n\t\t\t<slot name=\"aiAvatar\">\n\t\t\t\t<img v-if=\"isShowAvatar\" :src=\"aiAvatarPath\" class=\"touchchat-ai-avatar-pic\" />\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<!-- 内容区域 -->\n\t\t<div class=\"touchchat-ai-content\" :class=\"{ 'is-full': !item.isChating && item.componentName }\">\n\t\t\t<!-- 气泡 -->\n\t\t\t<div class=\"touchchat-ai-bubble\">\n\t\t\t\t<!-- 思考内容 -->\n\t\t\t\t<div v-if=\"thinkContentShow\" class=\"touchchat-ai-think\" v-html=\"processedThinkContent\"></div>\n\n\t\t\t\t<!-- 推理内容 -->\n\t\t\t\t<div v-if=\"reasoningContentShow\" class=\"touchchat-ai-think\">\n\t\t\t\t\t<div class=\"touchchat-ai-think-header\">\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-state\">\n\t\t\t\t\t\t\t{{ item.thinkStatus === 'thinking' ? '深度思考中...' : item.thinkStatus === 'completed' ? '已深度思考' : '思考已停止' }}\n\t\t\t\t\t\t\t<template v-if=\"item.thinkStatus === 'completed'\">(用时{{ (item.thinkTime || 0) / 1000 }}秒)</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-toggle\" :class=\"collapse ? '' : 'is-expand'\" @click=\"collapse = !collapse\">\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-think-toggle-icon\"></span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<div v-show=\"collapse && !chainAble\" class=\"touchchat-ai-think-content\" v-html=\"processedReasoningContent\"></div>\n\t\t\t\t\t</transition>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<thought-chain v-show=\"collapse && chainAble\"></thought-chain>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- 主内容 -->\n\t\t\t\t<slot name=\"aimsg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && item.msgList && item.msgList.length\" class=\"touchchat-ai-bubble-text touchchat-markdown\">\n\t\t\t\t\t\t<template v-for=\"node in item.msgList\" :key=\"node.id\">\n\t\t\t\t\t\t\t<div v-if=\"node.type === 'markdown' && node.content\" v-html=\"getProcessedContent(node)\" />\n\t\t\t\t\t\t\t<component :is=\"components[node.componentName]\" v-if=\"node.type === 'component' && node.displayMode === 'inline'\" v-bind=\"item.props\" />\n\t\t\t\t\t\t\t<TouchA2ui v-if=\"node.type === 'a2ui'\" :messages=\"node.msgs\" :components=\"a2uiProps.components\" :surface-id=\"node.surfaceId\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && !(item.msgList && item.msgList.length)\" class=\"touchchat-ai-bubble-text touchchat-markdown\" v-html=\"processedContent\"></div>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- && !item.componentName -->\n\t\t\t\t<letter v-if=\"scripts && scripts.length > 0\" auto-start :data=\"item.content\" @start=\"startLetter\" @complete=\"completeLetter\"> </letter>\n\t\t\t\t<slot v-if=\"(scripts.length > 0 && (showComponent || !item.content)) || (!scripts.length && !item.isChating)\" name=\"msg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<component :is=\"componentName\" :index=\"index\" :item=\"item\" @start=\"startCompentent\" @complete=\"completeCompentent\" @toggle-sidebar=\"toggleSidebarClick\"></component>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- 新增加载状态区域 -->\n\t\t\t\t<div v-if=\"item.isChating\" class=\"touchchat-ai-loading\">\n\t\t\t\t\t<div class=\"touchchat-ai-loading-icon\"></div>\n\t\t\t\t\t<span class=\"touchchat-ai-loading-text\">加载中...</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<slot name=\"fn\" :item=\"item\" :index=\"index\">\n\t\t\t\t<MessageActions v-show=\"(showFn && scripts.length > 0) || (!scripts.length && !item.isChating)\" :item=\"item\" message-type=\"ai\" :index=\"index\" :has-retry=\"hasRetry\" :show-copy=\"true\" @copy=\"onCopy\" @retry=\"onRetry\" @like=\"onLike\" @dislike=\"onDislike\" @quote=\"onQuote\">\n\t\t\t\t\t<!-- <slot name=\"extendsFn\" :item=\"item\" :index=\"index\"></slot> -->\n\t\t\t\t\t<template #extendsFn>\n\t\t\t\t\t\t<slot name=\"extendsFn\" :item=\"item\" :index=\"index\" />\n\t\t\t\t\t</template>\n\t\t\t\t</MessageActions>\n\t\t\t</slot>\n\t\t\t<!-- && !scripts.length -->\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\n// useSlots, Comment, watch\nimport { ref, computed, inject, onMounted, watch } from 'vue'\nimport type { ChatMessage, ChatMsgList } from './Chat/types'\nimport aiAvatarBase from '../../img/aiAvatar.png'\nimport markdown from '../../utils/markdown.ts'\nimport FileView from '../../component/FileView.vue'\nimport ImageView from '../../component/ImageView.vue'\nimport LinkView from '../../component/LinkView.vue'\nimport CardView from '../../component/CardView.vue'\nimport MessageActions from './MessageActions.vue'\nimport Face from '../../component/AiRobot/face.vue'\nimport MeterialPrepare from '../../component/AiRobot/meterialPrepare.vue'\nimport Letter from '../../component/AiRobot/letter.vue'\nimport ThoughtChain from '../../component/ThoughtChain.vue'\nimport { TouchA2ui } from '@touchvue/a2ui'\n// 为组件映射表定义接口\ninterface ComponentMap {\n\t[key: string]: any // 允许任何字符串键\n\tFileView: typeof FileView\n\tImageView: typeof ImageView\n\tLinkView: typeof LinkView\n\tCardView: typeof CardView\n}\n\n// 创建组件映射表\nconst componentMap: ComponentMap = {\n\tFileView,\n\tImageView,\n\tLinkView,\n\tCardView,\n\tFace,\n\tMeterialPrepare\n}\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\titem: ChatMessage & ChatMsgList\n\t\tindex: number\n\t\thasRetry: boolean\n\t}>(),\n\t{\n\t\thasRetry: true\n\t}\n)\n\nwatch(\n\t() => props.item,\n\tval => {\n\t\tlet arr = []\n\t\tif (val.msgList) {\n\t\t\tarr = val.msgList?.filter(item => (item.type === 'component' && (item.displayMode === 'drawer' || item.displayMode === 'tip')) || (item.type === 'iframe' && item.url))\n\t\t}\n\t\tif (arr.length) {\n\t\t\temits('openSideBar', arr[0], props.index)\n\t\t}\n\t},\n\t{\n\t\tdeep: true\n\t}\n)\n\nconst emits = defineEmits<{\n\t(e: 'copy', index: number): void\n\t(e: 'retry', index: number): void\n\t(e: 'like', index: number): void\n\t(e: 'dislike', index: number): void\n\t(e: 'quote', item: any, index: number): void\n\t(e: 'contentRendered', element: HTMLElement): void\n\t(e: 'completeRendered', chatId: string): void\n\t(e: 'toggle-sidebar', item: any, index: number): void\n\t(e: 'openSideBar', item: any, index: number): void\n}>()\n\nconst collapse = ref(true)\nconst isShowAvatar = ref(true)\nconst aiAvatarPath = ref(aiAvatarBase)\nconst components = inject<Record<string, any>>('components', {}) // 指定类型并提供默认值 {}\nconst a2uiProps = inject<Record<string, any>>('a2uiProps', {}) // 指定类型并提供默认值 {}\nconst avatar = inject<boolean>('avatar', true)\nconst scripts = inject<any[]>('scripts', [])\nconst layout = inject<string>('layout', 'side, think, upload, chain')\nconst chainAble = layout.includes('chain')\nconst showComponent = ref(false)\nconst showFn = ref(false)\n\nconst init = () => {\n\tisShowAvatar.value = avatar\n}\n\nconst componentName = computed(() => {\n\tconst slotMap = components\n\n\t// 明确newMap的类型,允许字符串索引\n\tconst newMap: Record<string, any> = {\n\t\t...slotMap,\n\t\t...componentMap\n\t}\n\treturn newMap[props.item.componentName as string] || null\n})\n\nconst thinkContentShow = computed(() => {\n\treturn props.item.thinkContent\n\t// && !props.item.componentName;\n})\n\nconst reasoningContentShow = computed(() => {\n\treturn props.item.reasoningContent\n})\n\nconst processedContent = computed(() => {\n\treturn props.item.content ? markdown?.render(props.item.content, { isReasoning: false }) || '' : ''\n})\n\nconst getProcessedContent = (node: any) => {\n\treturn node.content ? markdown?.render(node.content, { isReasoning: false }) || '' : ''\n}\n\nconst processedThinkContent = computed(() => {\n\treturn props.item.thinkContent ? markdown?.render(props.item.thinkContent, { isReasoning: true }) || '' : ''\n})\n\nconst processedReasoningContent = computed(() => {\n\treturn props.item.reasoningContent ? markdown?.render(props.item.reasoningContent, { isReasoning: true }) || '' : ''\n})\n\nconst contentShow = computed(() => {\n\treturn props.item.content || props.item.msgList?.length\n})\n\nconst toggleSidebarClick = (item: ChatMessage, index: number) => {\n\temits('toggle-sidebar', item, index)\n}\n\nonMounted(() => {\n\tinit()\n})\n\nconst completeCompentent = () => {\n\temits('completeRendered', props.item?.chatId || '')\n\tshowFn.value = true\n}\nconst completeLetter = () => {\n\tshowComponent.value = true\n\tif (!props.item.componentName) {\n\t\temits('completeRendered', props.item?.chatId || '')\n\t\tshowFn.value = true\n\t}\n}\n\nconst startCompentent = () => {\n\tconsole.log('startCompentent')\n}\nconst startLetter = () => {\n\tshowComponent.value = false\n\tshowFn.value = false\n}\n\nconst onCopy = () => emits('copy', props.index)\nconst onRetry = () => emits('retry', props.index)\nconst onLike = () => emits('like', props.index)\nconst onDislike = () => emits('dislike', props.index)\nconst onQuote = () => emits('quote', props.item, props.index)\n</script>\n"],"names":["aiAvatarBase","_createElementBlock","item","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_Fragment","_createTextVNode","_createVNode","_Transition","_vShow","_unref","index","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","TouchA2ui","hasRetry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAkGA,IAAA,MAAM,YAA6B,GAAA;AAAA,MAClC,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,KACD,CAAA;AAEA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAWd,IAAA,KAAA;AAAA,MACC,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,CAAO,GAAA,KAAA;;AACN,QAAA,IAAI,MAAM,EAAC,CAAA;AACX,QAAA,IAAI,IAAI,OAAS,EAAA;AAChB,UAAA,GAAA,GAAA,CAAM,SAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,MAAO,CAAA,CAAA,IAAA,KAAS,KAAK,IAAS,KAAA,WAAA,KAAgB,IAAK,CAAA,WAAA,KAAgB,YAAY,IAAK,CAAA,WAAA,KAAgB,UAAY,IAAK,CAAA,IAAA,KAAS,YAAY,IAAK,CAAA,GAAA,CAAA,CAAA;AAAA,SACnK;AACA,QAAA,IAAI,IAAI,MAAQ,EAAA;AACf,UAAA,KAAA,CAAM,aAAe,EAAA,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA;AAAA,SACzC;AAAA,OACD;AAAA,MACA;AAAA,QACC,IAAM,EAAA,IAAA;AAAA,OACP;AAAA,KACD,CAAA;AAEA,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAYd,IAAM,MAAA,QAAA,GAAW,IAAI,IAAI,CAAA,CAAA;AACzB,IAAM,MAAA,YAAA,GAAe,IAAI,IAAI,CAAA,CAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,IAAIA,UAAY,CAAA,CAAA;AACrC,IAAA,MAAM,UAAa,GAAA,MAAA,CAA4B,YAAc,EAAA,EAAE,CAAA,CAAA;AAC/D,IAAA,MAAM,SAAY,GAAA,MAAA,CAA4B,WAAa,EAAA,EAAE,CAAA,CAAA;AAC7D,IAAM,MAAA,MAAA,GAAS,MAAgB,CAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AAC7C,IAAA,MAAM,OAAU,GAAA,MAAA,CAAc,SAAW,EAAA,EAAE,CAAA,CAAA;AAC3C,IAAM,MAAA,MAAA,GAAS,MAAe,CAAA,QAAA,EAAU,4BAA4B,CAAA,CAAA;AACpE,IAAM,MAAA,SAAA,GAAY,MAAO,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AACzC,IAAM,MAAA,aAAA,GAAgB,IAAI,KAAK,CAAA,CAAA;AAC/B,IAAM,MAAA,MAAA,GAAS,IAAI,KAAK,CAAA,CAAA;AAExB,IAAA,MAAM,OAAO,MAAM;AAClB,MAAA,YAAA,CAAa,KAAQ,GAAA,MAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACpC,MAAA,MAAM,OAAU,GAAA,UAAA,CAAA;AAGhB,MAAA,MAAM,MAA8B,GAAA;AAAA,QACnC,GAAG,OAAA;AAAA,QACH,GAAG,YAAA;AAAA,OACJ,CAAA;AACA,MAAA,OAAO,MAAO,CAAA,KAAA,CAAM,IAAK,CAAA,aAAuB,CAAK,IAAA,IAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmB,SAAS,MAAM;AACvC,MAAA,OAAO,MAAM,IAAK,CAAA,YAAA,CAAA;AAAA,KAElB,CAAA,CAAA;AAED,IAAM,MAAA,oBAAA,GAAuB,SAAS,MAAM;AAC3C,MAAA,OAAO,MAAM,IAAK,CAAA,gBAAA,CAAA;AAAA,KAClB,CAAA,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmB,SAAS,MAAM;;AACvC,MAAA,OAAO,KAAM,CAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA,EAAA,GAAA,QAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAK,CAAA,OAAA,EAAS,EAAE,WAAA,EAAa,KAAM,EAAA,CAAA,KAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KACjG,CAAA,CAAA;AAED,IAAM,MAAA,mBAAA,GAAsB,CAAC,IAAc,KAAA;;AAC1C,MAAO,OAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA,EAAA,GAAA,QAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAU,MAAO,CAAA,IAAA,CAAK,SAAS,EAAE,WAAA,EAAa,KAAM,EAAA,CAAA,KAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KACtF,CAAA;AAEA,IAAM,MAAA,qBAAA,GAAwB,SAAS,MAAM;;AAC5C,MAAA,OAAO,KAAM,CAAA,IAAA,CAAK,YAAe,GAAA,CAAA,CAAA,EAAA,GAAA,QAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAK,CAAA,YAAA,EAAc,EAAE,WAAA,EAAa,IAAK,EAAA,CAAA,KAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KAC1G,CAAA,CAAA;AAED,IAAM,MAAA,yBAAA,GAA4B,SAAS,MAAM;;AAChD,MAAA,OAAO,KAAM,CAAA,IAAA,CAAK,gBAAmB,GAAA,CAAA,CAAA,EAAA,GAAA,QAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAK,CAAA,gBAAA,EAAkB,EAAE,WAAA,EAAa,IAAK,EAAA,CAAA,KAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KAClH,CAAA,CAAA;AAED,IAAM,MAAA,WAAA,GAAc,SAAS,MAAM;;AAClC,MAAA,OAAO,MAAM,IAAK,CAAA,OAAA,KAAA,CAAW,EAAM,GAAA,KAAA,CAAA,IAAA,CAAK,YAAX,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAAA,KACjD,CAAA,CAAA;AAED,IAAM,MAAA,kBAAA,GAAqB,CAAC,IAAA,EAAmB,KAAkB,KAAA;AAChE,MAAM,KAAA,CAAA,gBAAA,EAAkB,MAAM,KAAK,CAAA,CAAA;AAAA,KACpC,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACf,MAAK,IAAA,EAAA,CAAA;AAAA,KACL,CAAA,CAAA;AAED,IAAA,MAAM,qBAAqB,MAAM;;AAChC,MAAA,KAAA,CAAM,kBAAoB,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,WAAU,EAAE,CAAA,CAAA;AAClD,MAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,KAChB,CAAA;AACA,IAAA,MAAM,iBAAiB,MAAM;;AAC5B,MAAA,aAAA,CAAc,KAAQ,GAAA,IAAA,CAAA;AACtB,MAAI,IAAA,CAAC,KAAM,CAAA,IAAA,CAAK,aAAe,EAAA;AAC9B,QAAA,KAAA,CAAM,kBAAoB,EAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,WAAU,EAAE,CAAA,CAAA;AAClD,QAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,OAChB;AAAA,KACD,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AAC7B,MAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA,CAAA;AAAA,KAC9B,CAAA;AACA,IAAA,MAAM,cAAc,MAAM;AACzB,MAAA,aAAA,CAAc,KAAQ,GAAA,KAAA,CAAA;AACtB,MAAA,MAAA,CAAO,KAAQ,GAAA,KAAA,CAAA;AAAA,KAChB,CAAA;AAEA,IAAA,MAAM,MAAS,GAAA,MAAM,KAAM,CAAA,MAAA,EAAQ,MAAM,KAAK,CAAA,CAAA;AAC9C,IAAA,MAAM,OAAU,GAAA,MAAM,KAAM,CAAA,OAAA,EAAS,MAAM,KAAK,CAAA,CAAA;AAChD,IAAA,MAAM,MAAS,GAAA,MAAM,KAAM,CAAA,MAAA,EAAQ,MAAM,KAAK,CAAA,CAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,MAAM,KAAM,CAAA,SAAA,EAAW,MAAM,KAAK,CAAA,CAAA;AACpD,IAAA,MAAM,UAAU,MAAM,KAAA,CAAM,SAAS,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA,CAAA;;wBAzO3D,EAAAC,kBAAA,CAoEM,KAAA,EAAA;AAAA,QApED,KAAM,EAAA,6BAAA;AAAA,QAA+B,cAAA,EAAcC,KAAI,IAAC,CAAA,MAAA;AAAA;QAC5DC,mBAAa,4BAAA,CAAA;AAAA,QACbC,kBAIM,CAAA,KAAA,EAAA,EAJD,KAAA,EAAM,uBAAqB,EAAA;AAAA,UAC/BC,WAEO,6BAFP,MAEO;AAAA,YADK,YAAY,CAAA,KAAA,iBAAvBJ,mBAA+E,KAAA,EAAA;AAAA;cAArD,KAAK,YAAY,CAAA,KAAA;AAAA,cAAE,KAAM,EAAA,yBAAA;AAAA;;;QAIrDE,mBAAa,4BAAA,CAAA;AAAA,QACbC,kBAAA;AAAA,UA0DM,KAAA;AAAA,UAAA;AAAA,YA1DD,KAAK,EAAAE,cAAA,CAAA,CAAC,sBAAA,EAA6CJ,EAAAA,SAAAA,EAAAA,CAAAA,IAAAA,CAAAA,IAAAA,CAAK,SAAaA,IAAAA,IAAAA,CAAI,IAAC,CAAA,aAAA,EAAa,CAAA,CAAA;AAAA;;YAC3FC,mBAAW,gBAAA,CAAA;AAAA,YACXC,kBA8CM,CAAA,KAAA,EAAA,EA9CD,KAAA,EAAM,uBAAqB,EAAA;AAAA,cAC/BD,mBAAa,4BAAA,CAAA;AAAA,cACF,gBAAgB,CAAA,KAAA,iBAA3BF,mBAA6F,KAAA,EAAA;AAAA;gBAAhE,KAAM,EAAA,oBAAA;AAAA,gBAAqB,WAAQ,qBAAqB,CAAA,KAAA;AAAA;cAErFE,mBAAa,4BAAA,CAAA;AAAA,cACF,oBAAoB,CAAA,KAAA,iBAA/BF,mBAgBM,KAAA,EAAA;AAAA;gBAhB2B,KAAM,EAAA,oBAAA;AAAA;gBACtCG,kBAQM,CAAA,KAAA,EAAA,EARD,KAAA,EAAM,6BAA2B,EAAA;AAAA,kBACrCA,kBAGM,CAAA,KAAA,EAAA,EAHD,KAAA,EAAM,4BAA0B,EAAA;AAAA,oBACjCF,eAAAA;AAAAA,sBAAAA,eAAAA,CAAAA,IAAAA,CAAAA,IAAK,CAAA,WAAA,KAAW,UAAA,GAAA,mCAAA,GAA+BA,UAAK,kGAAkD,GAAA,GAAA;AAAA,sBACzG,CAAA;AAAA;AAAA,qBAAA;AAAA,oBAAgBA,IAAAA,CAAAA,IAAAA,CAAK,WAAW,KAAA,WAAA,eAAhC,EAAAD,kBAAA;AAAA,sBAAoGM,QAAA;AAAA,sBAAA,EAAA,KAAA,CAAA,EAAA;AAAA,sBAAA;AAAA,wBAAlDC,eAAA;AAAA,0BAAA,uBAAON,eAAAA,CAAAA,CAAAA,IAAAA,CAAAA,KAAK,sBAAyB,GAAA,cAAA;AAAA,0BAAE,CAAA;AAAA;AAAA,yBAAA;AAAA;;;;;kBAE1FE,mBAEM,KAAA,EAAA;AAAA,oBAFD,KAAA,EAAKE,eAAA,CAAC,2BAAA,EAAoC,SAAQ,KAAA,GAAA,EAAA,GAAA,WAAA,CAAA,CAAA;AAAA,oBAAsB,SAAK,CAAA,MAAA,KAAE,QAAQ,CAAA,KAAA,GAAA,CAAI,QAAQ,CAAA,KAAA;AAAA;oBACvGF,kBAAoD,CAAA,MAAA,EAAA,EAA9C,KAAA,EAAM,kCAAgC,CAAA;AAAA;;gBAG9CK,YAEaC,UAAA,EAAA;AAAA,kBAFD,IAAK,EAAA,6BAAA;AAAA,kBAAjB,SAAA,EAAA,EAAA;AAAA;mCACC,MAAiH;AAAA,mCAAjHN,mBAAiH,KAAA,EAAA;AAAA,sBAA5E,KAAM,EAAA,4BAAA;AAAA,sBAA6B,WAAQ,yBAAyB,CAAA,KAAA;AAAA;sBAA5F,CAAAO,KAAA,EAAA,QAAA,CAAA,UAAaC,KAAA,CAAS,SAAA,CAAA,CAAA;AAAA;;;;;gBAEpCH,YAEaC,UAAA,EAAA;AAAA,kBAFD,IAAK,EAAA,6BAAA;AAAA,kBAAjB,SAAA,EAAA,EAAA;AAAA;mCACC,MAA8D;AAAA,kCAA9D,CAAAD,WAAA;AAAA,sBAA8D,YAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,GAAA;AAAA;AAAA,qBAAA,EAAA;AAAA,sBAAvC,CAAAE,KAAA,EAAA,QAAA,CAAA,KAAY,IAAAC,KAAA,CAAS,SAAA,CAAA,CAAA;AAAA;;;;;;cAI9CT,mBAAY,sBAAA,CAAA;AAAA,cACZE,UAAA,CASO,IAAA,CAAA,MAAA,EAAA,OAAA,EAAA;AAAA,gBATa,MAAMH,IAAI,CAAA,IAAA;AAAA,gBAAG,OAAOW,IAAK,CAAA,KAAA;AAAA,iBAA7C,MASO;AAAA,gBARK,WAAA,CAAA,SAAeD,KAAA,CAAA,OAAA,KAAWA,KAAA,CAAA,OAAA,EAAQ,MAAM,KAAA,CAAA,IAAUV,KAAI,IAAC,CAAA,OAAA,IAAWA,KAAAA,IAAK,CAAA,OAAA,CAAQ,uBAA1FD,mBAMM,KAAA,EAAA;AAAA;kBAN4F,KAAM,EAAA,6CAAA;AAAA;mBACvGa,SAAA,CAAA,IAAA,CAAA,EAAAb,kBAAA;AAAA,oBAIWM,QAAA;AAAA,oBAJcL,IAAAA;AAAAA,oBAAAA,UAAAA,CAAAA,IAAAA,CAAAA,IAAK,CAAA,OAAA,GAAb,IAAI,KAAA;;;;0BAAwB,KAAA,IAAK,CAAA,EAAA;AAAA;;0BACtC,IAAA,CAAK,SAAuB,UAAA,IAAA,IAAA,CAAK,wBAA5CD,mBAA0F,KAAA,EAAA;AAAA;4BAArC,SAAA,EAAQ,oBAAoB,IAAI,CAAA;AAAA;0BAC/B,KAAK,IAAwB,KAAA,WAAA,IAAA,KAAK,WAAW,KAAA,QAAA,IAAnGa,WAAA,EAAAC,WAAA;AAAA,4BAAwIC,wBAAxHJ,KAAU,CAAA,UAAA,CAAC,CAAA,IAAA,CAAK,aAAa;4BAA7CK,UAAwI,CAAA;AAAA;;6BAAdf,EAAAA,IAAAA,CAAAA,IAAAA,CAAK,KAAK,CAAA;AAAA,4BAAA,IAAA;AAAA,4BAAA,EAAA;AAAA;AAAA,2BAAA;0BACnH,IAAA,CAAK,SAAI,uBAA1Ba,WAA+H,CAAAH,KAAA,CAAAM,EAAA,CAAA,EAAA;AAAA;4BAAvF,UAAU,IAAK,CAAA,IAAA;AAAA,4BAAO,UAAA,EAAYN,KAAS,CAAA,SAAA,CAAC,CAAA,UAAA;AAAA,4BAAa,cAAY,IAAK,CAAA,SAAA;AAAA;;;;;;;;;;gBAGzG,WAAA,CAAA,SAAeA,KAAA,CAAA,OAAA,KAAWA,KAAA,CAAA,OAAA,EAAQ,MAAM,KAAA,CAAA,IAAA,EAAYV,IAAI,CAAA,IAAA,CAAC,WAAWA,IAAAA,CAAAA,IAAAA,CAAK,QAAQ,sBAA5F,EAAAD,kBAAA,CAAyL,KAAA,EAAA;AAAA;kBAApF,KAAM,EAAA,6CAAA;AAAA,kBAA8C,WAAQ,gBAAgB,CAAA,KAAA;AAAA;;cAGlLE,mBAA+B,0BAAA,CAAA;AAAA,cACjBS,KAAA,CAAO,OAAA,CAAA,IAAIA,KAAO,CAAA,OAAA,CAAC,CAAA,MAAA,GAAM,gBAAvC,EAAAG,WAAA,CAAuI,MAAA,EAAA;AAAA;gBAA1F,YAAA,EAAA,EAAA;AAAA,gBAAY,IAAA,EAAMb,KAAI,IAAC,CAAA,OAAA;AAAA,gBAAU,OAAO,EAAA,WAAA;AAAA,gBAAc,UAAU,EAAA,cAAA;AAAA;cAChGU,KAAA,CAAA,OAAA,CAAQ,CAAA,MAAA,GAAe,MAAA,aAAA,CAAA,KAAA,KAAkBV,IAAAA,CAAI,IAAC,CAAA,OAAA,CAAA,IAAO,CAAQU,cAAQ,CAAA,MAAA,IAAWV,CAAAA,IAAAA,CAAAA,KAAK,SAAlG,GAAAG,UAAA,CAEO,IAAA,CAAA,MAAA,EAAA,KAAA,EAAA;AAAA;gBAFmH,MAAMH,IAAI,CAAA,IAAA;AAAA,gBAAG,OAAOW,IAAK,CAAA,KAAA;AAAA,iBAAnJ,MAEO;AAAA,iBADNC,WAAA,EAAAC,WAAA,CAAoKC,uBAApJ,CAAA,aAAA,CAAa,KAAA,CAAA,EAAA;AAAA,kBAAG,OAAOH,IAAK,CAAA,KAAA;AAAA,kBAAG,MAAMX,IAAI,CAAA,IAAA;AAAA,kBAAG,OAAO,EAAA,eAAA;AAAA,kBAAkB,UAAU,EAAA,kBAAA;AAAA,kBAAqB,eAAgB,EAAA,kBAAA;AAAA;;cAGrIC,mBAAiB,oDAAA,CAAA;AAAA,cACND,KAAAA,IAAK,CAAA,SAAA,iBAAhBD,mBAGM,KAAA,EAAA;AAAA;gBAHqB,KAAM,EAAA,sBAAA;AAAA;gBAChCG,kBAA6C,CAAA,KAAA,EAAA,EAAxC,KAAA,EAAM,6BAA2B,CAAA;AAAA,gBACtCA,mBAAqD,MAA/C,EAAA,EAAA,KAAM,EAAA,2BAAA,IAA4B,uBAAM,CAAA;AAAA;;YAGhDC,UAAA,CAOO,IAAA,CAAA,MAAA,EAAA,IAAA,EAAA;AAAA,cAPU,MAAMH,IAAI,CAAA,IAAA;AAAA,cAAG,OAAOW,IAAK,CAAA,KAAA;AAAA,eAA1C,MAOO;AAAA,6BANNJ,YAKiB,cAAA,EAAA;AAAA,gBALgF,MAAMP,IAAI,CAAA,IAAA;AAAA,gBAAE,cAAa,EAAA,IAAA;AAAA,gBAAM,OAAOW,IAAK,CAAA,KAAA;AAAA,gBAAG,aAAWM,IAAQ,CAAA,QAAA;AAAA,gBAAG,WAAW,EAAA,IAAA;AAAA,gBAAO,MAAA;AAAA,gBAAe,OAAA;AAAA,gBAAiB,MAAA;AAAA,gBAAe,SAAA;AAAA,gBAAqB,OAAA;AAAA;gBAE/O,SAAA,UACV,MAAqD;AAAA,kBAArDd,UAAA,CAAqD,IAAA,CAAA,MAAA,EAAA,WAAA,EAAA;AAAA,oBAA7B,MAAMH,IAAI,CAAA,IAAA;AAAA,oBAAG,OAAOW,IAAK,CAAA,KAAA;AAAA;;;;;sBAH1B,EAAA,MAAA,CAAM,KAAI,IAAAD,KAAA,CAAO,OAAA,CAAC,CAAA,MAAA,GAAM,CAAA,IAAA,CAAWA,MAAO,OAAA,CAAA,CAAC,UAAM,CAAKV,IAAAA,CAAI,KAAC,SAAS,CAAA;AAAA;;YAO9FC,mBAA2B,sBAAA,CAAA;AAAA;;;;;;;;;;;"}
1
+ {"version":3,"file":"AiMessage.vue2.mjs","sources":["../../../../../../../packages/components/touchchat/src/AiChat/AiMessage.vue"],"sourcesContent":["<template>\n\t<div class=\"touchchat-ai touchchat-item\" :data-chat-id=\"item.chatId\">\n\t\t<!-- 头像区域 -->\n\t\t<div class=\"touchchat-ai-avatar\">\n\t\t\t<slot name=\"aiAvatar\">\n\t\t\t\t<img v-if=\"isShowAvatar\" :src=\"aiAvatarPath\" class=\"touchchat-ai-avatar-pic\" />\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<!-- 内容区域 -->\n\t\t<div class=\"touchchat-ai-content\" :class=\"{ 'is-full': !item.isChating && item.componentName }\">\n\t\t\t<!-- 气泡 -->\n\t\t\t<div class=\"touchchat-ai-bubble\">\n\t\t\t\t<!-- 思考内容 -->\n\t\t\t\t<div v-if=\"thinkContentShow\" class=\"touchchat-ai-think\" v-html=\"processedThinkContent\"></div>\n\n\t\t\t\t<!-- 推理内容 -->\n\t\t\t\t<div v-if=\"reasoningContentShow\" class=\"touchchat-ai-think\">\n\t\t\t\t\t<div class=\"touchchat-ai-think-header\">\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-state\">\n\t\t\t\t\t\t\t{{ item.thinkStatus === 'thinking' ? '深度思考中...' : item.thinkStatus === 'completed' ? '已深度思考' : '思考已停止' }}\n\t\t\t\t\t\t\t<template v-if=\"item.thinkStatus === 'completed'\">(用时{{ (item.thinkTime || 0) / 1000 }}秒)</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"touchchat-ai-think-toggle\" :class=\"collapse ? '' : 'is-expand'\" @click=\"collapse = !collapse\">\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-think-toggle-icon\"></span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<div v-show=\"collapse && !chainAble\" class=\"touchchat-ai-think-content\" v-html=\"processedReasoningContent\"></div>\n\t\t\t\t\t</transition>\n\t\t\t\t\t<transition name=\"touchchat-ai-think-collpase\">\n\t\t\t\t\t\t<thought-chain v-show=\"collapse && chainAble\"></thought-chain>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- 主内容 -->\n\t\t\t\t<slot name=\"aimsg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && item.msgList && item.msgList.length\" class=\"touchchat-ai-bubble-text touchchat-markdown\">\n\t\t\t\t\t\t<template v-for=\"node in item.msgList\" :key=\"node.id\">\n\t\t\t\t\t\t\t<div v-if=\"node.type === 'markdown' && node.content\" v-html=\"getProcessedContent(node)\" />\n\t\t\t\t\t\t\t<component :is=\"components[node.componentName]\" v-if=\"node.type === 'component' && node.displayMode === 'inline'\" v-bind=\"item.props\" />\n\t\t\t\t\t\t\t<TouchA2ui v-if=\"node.type === 'a2ui'\" :messages=\"node.msgs\" :components=\"a2uiProps.components\" :surface-id=\"node.surfaceId\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"contentShow && scripts && scripts.length === 0 && !(item.msgList && item.msgList.length)\" class=\"touchchat-ai-bubble-text touchchat-markdown\" v-html=\"processedContent\"></div>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- && !item.componentName -->\n\t\t\t\t<letter v-if=\"scripts && scripts.length > 0\" auto-start :data=\"item.content\" @start=\"startLetter\" @complete=\"completeLetter\"> </letter>\n\t\t\t\t<slot v-if=\"(scripts.length > 0 && (showComponent || !item.content)) || (!scripts.length && !item.isChating)\" name=\"msg\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<component :is=\"componentName\" :index=\"index\" :item=\"item\" @start=\"startCompentent\" @complete=\"completeCompentent\" @toggle-sidebar=\"toggleSidebarClick\"></component>\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- 新增加载状态区域 -->\n\t\t\t\t<div v-if=\"item.isChating\" class=\"touchchat-ai-loading\">\n\t\t\t\t\t<div class=\"touchchat-ai-loading-icon\"></div>\n\t\t\t\t\t<span class=\"touchchat-ai-loading-text\">加载中...</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<slot name=\"fn\" :item=\"item\" :index=\"index\">\n\t\t\t\t<MessageActions v-show=\"(showFn && scripts.length > 0) || (!scripts.length && !item.isChating)\" :item=\"item\" message-type=\"ai\" :index=\"index\" :has-retry=\"hasRetry\" :show-copy=\"true\" @copy=\"onCopy\" @retry=\"onRetry\" @like=\"onLike\" @dislike=\"onDislike\" @quote=\"onQuote\">\n\t\t\t\t\t<!-- <slot name=\"extendsFn\" :item=\"item\" :index=\"index\"></slot> -->\n\t\t\t\t\t<template #extendsFn>\n\t\t\t\t\t\t<slot name=\"extendsFn\" :item=\"item\" :index=\"index\" />\n\t\t\t\t\t</template>\n\t\t\t\t</MessageActions>\n\t\t\t</slot>\n\t\t\t<div v-if=\"showFn && item.likeList && item.likeList.length && !item.isChating\" class=\"touchchat-ai-may-like\">\n\t\t\t\t<slot name=\"mayLike\" :item=\"item\" :index=\"index\">\n\t\t\t\t\t<div v-for=\"likeItem in item.likeList\" :key=\"likeItem.id\">\n\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item\" @click=\"handleSend(likeItem.name)\">\n\t\t\t\t\t\t\t<span class=\"touchchat-ai-may-like-item-title\">{{ likeItem.name }}</span>\n\t\t\t\t\t\t\t<div class=\"touchchat-action-item value-right-arrow\"></div>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<!-- && !scripts.length -->\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\n// useSlots, Comment, watch\nimport { ref, computed, inject, onMounted, watch } from 'vue'\nimport type { ChatMessage, ChatMsgList } from './Chat/types'\nimport aiAvatarBase from '../../img/aiAvatar.png'\nimport markdown from '../../utils/markdown.ts'\nimport FileView from '../../component/FileView.vue'\nimport ImageView from '../../component/ImageView.vue'\nimport LinkView from '../../component/LinkView.vue'\nimport CardView from '../../component/CardView.vue'\nimport MessageActions from './MessageActions.vue'\nimport Face from '../../component/AiRobot/face.vue'\nimport MeterialPrepare from '../../component/AiRobot/meterialPrepare.vue'\nimport Letter from '../../component/AiRobot/letter.vue'\nimport ThoughtChain from '../../component/ThoughtChain.vue'\nimport { TouchA2ui } from '@touchvue/a2ui'\n// 为组件映射表定义接口\ninterface ComponentMap {\n\t[key: string]: any // 允许任何字符串键\n\tFileView: typeof FileView\n\tImageView: typeof ImageView\n\tLinkView: typeof LinkView\n\tCardView: typeof CardView\n}\n\n// 创建组件映射表\nconst componentMap: ComponentMap = {\n\tFileView,\n\tImageView,\n\tLinkView,\n\tCardView,\n\tFace,\n\tMeterialPrepare\n}\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\titem: ChatMessage & ChatMsgList\n\t\tindex: number\n\t\thasRetry: boolean\n\t}>(),\n\t{\n\t\thasRetry: true\n\t}\n)\n\nwatch(\n\t() => props.item,\n\tval => {\n\t\tlet arr = []\n\t\tif (val.msgList) {\n\t\t\tarr = val.msgList?.filter(item => (item.type === 'component' && (item.displayMode === 'drawer' || item.displayMode === 'tip')) || (item.type === 'iframe' && item.url))\n\t\t}\n\t\tif (arr.length) {\n\t\t\temits('openSideBar', arr[0], props.index)\n\t\t}\n\t},\n\t{\n\t\tdeep: true\n\t}\n)\n\nconst emits = defineEmits<{\n\t(e: 'copy', index: number): void\n\t(e: 'retry', index: number): void\n\t(e: 'like', index: number): void\n\t(e: 'dislike', index: number): void\n\t(e: 'quote', item: any, index: number): void\n\t(e: 'contentRendered', element: HTMLElement): void\n\t(e: 'completeRendered', chatId: string): void\n\t(e: 'toggle-sidebar', item: any, index: number): void\n\t(e: 'openSideBar', item: any, index: number): void\n\t(e: 'send', sendVal: string): void\n}>()\n\nconst collapse = ref(true)\nconst isShowAvatar = ref(true)\nconst aiAvatarPath = ref(aiAvatarBase)\nconst components = inject<Record<string, any>>('components', {}) // 指定类型并提供默认值 {}\nconst a2uiProps = inject<Record<string, any>>('a2uiProps', {}) // 指定类型并提供默认值 {}\nconst avatar = inject<boolean>('avatar', true)\nconst scripts = inject<any[]>('scripts', [])\nconst layout = inject<string>('layout', 'side, think, upload, chain')\nconst chainAble = layout.includes('chain')\nconst showComponent = ref(false)\nconst showFn = ref(false)\n\nconst init = () => {\n\tisShowAvatar.value = avatar\n}\n\nconst componentName = computed(() => {\n\tconst slotMap = components\n\n\t// 明确newMap的类型,允许字符串索引\n\tconst newMap: Record<string, any> = {\n\t\t...slotMap,\n\t\t...componentMap\n\t}\n\treturn newMap[props.item.componentName as string] || null\n})\n\nconst thinkContentShow = computed(() => {\n\treturn props.item.thinkContent\n\t// && !props.item.componentName;\n})\n\nconst reasoningContentShow = computed(() => {\n\treturn props.item.reasoningContent\n})\n\nconst processedContent = computed(() => {\n\treturn props.item.content ? markdown?.render(props.item.content, { isReasoning: false }) || '' : ''\n})\n\nconst getProcessedContent = (node: any) => {\n\treturn node.content ? markdown?.render(node.content, { isReasoning: false }) || '' : ''\n}\n\nconst processedThinkContent = computed(() => {\n\treturn props.item.thinkContent ? markdown?.render(props.item.thinkContent, { isReasoning: true }) || '' : ''\n})\n\nconst processedReasoningContent = computed(() => {\n\treturn props.item.reasoningContent ? markdown?.render(props.item.reasoningContent, { isReasoning: true }) || '' : ''\n})\n\nconst contentShow = computed(() => {\n\treturn props.item.content || props.item.msgList?.length\n})\n\nconst handleSend = (sendVal: string) => {\n\temits('send', sendVal)\n}\n\nconst toggleSidebarClick = (item: ChatMessage, index: number) => {\n\temits('toggle-sidebar', item, index)\n}\n\nonMounted(() => {\n\tinit()\n})\n\nconst completeCompentent = () => {\n\temits('completeRendered', props.item?.chatId || '')\n\tshowFn.value = true\n}\nconst completeLetter = () => {\n\tshowComponent.value = true\n\tif (!props.item.componentName) {\n\t\temits('completeRendered', props.item?.chatId || '')\n\t\tshowFn.value = true\n\t}\n}\n\nconst startCompentent = () => {\n\tconsole.log('startCompentent')\n}\nconst startLetter = () => {\n\tshowComponent.value = false\n\tshowFn.value = false\n}\n\nconst onCopy = () => emits('copy', props.index)\nconst onRetry = () => emits('retry', props.index)\nconst onLike = () => emits('like', props.index)\nconst onDislike = () => emits('dislike', props.index)\nconst onQuote = () => emits('quote', props.item, props.index)\n</script>\n"],"names":["aiAvatarBase","_createElementBlock","item","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_Fragment","_createTextVNode","_createVNode","_Transition","_vShow","_unref","index","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","TouchA2ui","hasRetry","_toDisplayString"],"mappings":"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"}