@touchvue/chat 1.0.0-beta.43 → 1.0.0-beta.44
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/README.md +25 -25
- package/es/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.mjs +4816 -0
- package/es/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.mjs.map +1 -0
- package/es/package.json.css +1 -1
- package/es/package.json.mjs +2 -2
- package/es/packages/components/resolver.mjs.map +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue.mjs +1 -1
- package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/component/QuoteContent.vue.mjs +7 -0
- package/es/packages/components/touchchat/component/QuoteContent.vue.mjs.map +1 -0
- package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs +29 -0
- package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -0
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +70 -13
- package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs +1 -0
- package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +21 -5
- package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +34 -1
- package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +20 -2
- package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs +51 -11
- package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +6 -3
- package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +21 -5
- package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +9 -5
- package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs +22 -9
- package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/src/index.vue2.mjs +20 -2
- package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
- package/es/packages/components/touchchat/utils/fetchStream.mjs.map +1 -1
- package/lib/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.js +4819 -0
- package/lib/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.js.map +1 -0
- package/lib/package.json.css +1 -1
- package/lib/package.json.js +2 -2
- package/lib/packages/components/resolver.js.map +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue.js +1 -1
- package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/component/QuoteContent.vue.js +11 -0
- package/lib/packages/components/touchchat/component/QuoteContent.vue.js.map +1 -0
- package/lib/packages/components/touchchat/component/QuoteContent.vue2.js +33 -0
- package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -0
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +69 -12
- package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/types.js +1 -0
- package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +21 -5
- package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +34 -1
- package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +20 -2
- package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js +51 -11
- package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +6 -3
- package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +21 -5
- package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +8 -4
- package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js +22 -9
- package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/src/index.vue2.js +20 -2
- package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
- package/lib/packages/components/touchchat/utils/fetchStream.js.map +1 -1
- package/package.json +2 -2
- package/theme/components/index.css +51 -0
- package/theme/font/iconfont.woff +0 -0
- package/theme/font/iconfont.woff2 +0 -0
- package/theme/index.css +51 -0
- package/theme/skin/default.css +51 -0
package/lib/package.json.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.typewriter-container[data-v-
|
|
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}
|
package/lib/package.json.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@touchvue/chat";
|
|
6
|
-
var version = "1.0.0-beta.
|
|
7
|
-
var description = "TouchVue
|
|
6
|
+
var version = "1.0.0-beta.44";
|
|
7
|
+
var description = "TouchVue Chat Component Library";
|
|
8
8
|
var main = "lib/index.js";
|
|
9
9
|
var module$1 = "es/index.mjs";
|
|
10
10
|
var types = "types/index.d.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sources":["../../../../packages/components/resolver.ts"],"sourcesContent":["/**\n * TouchVue
|
|
1
|
+
{"version":3,"file":"resolver.js","sources":["../../../../packages/components/resolver.ts"],"sourcesContent":["/**\n * TouchVue Chat 组件解析器\n * 用于支持 unplugin-auto-import 和 unplugin-vue-components 插件\n */\n\n// 组件库名称\nconst LIBRARY_NAME = '@touchvue/chat'\n// 组件前缀\nconst PREFIX = 'To'\n\n/**\n * 检查组件名称是否符合规则\n * @param name 组件名称\n * @returns 是否符合规则\n */\nconst isValidComponentName = (name: string): boolean => {\n\treturn name.startsWith(PREFIX)\n}\n\n/**\n * 获取组件名称(不带前缀)\n * @param name 组件名称\n * @returns 不带前缀的组件名称\n */\nconst getComponentName = (name: string): string => {\n\treturn name.slice(PREFIX.length)\n}\n\nconst getSideEffectsPath = (name: string, prefix: string = LIBRARY_NAME): string => {\n\treturn `${prefix}/theme/components/${getComponentName(name).toLowerCase()}/index.css`\n}\n\n/**\n * 组件解析器\n * 用于 unplugin-vue-components 插件\n */\nexport function TouchVueResolver() {\n\treturn {\n\t\ttype: 'component',\n\t\tresolve: (name: string) => {\n\t\t\tif (!isValidComponentName(name)) return\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tfrom: LIBRARY_NAME,\n\t\t\t\tsideEffects: getSideEffectsPath(name)\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * 默认导出所有解析器\n */\nexport default {\n\tTouchVueResolver\n}\n"],"names":[],"mappings":";;;;AAMA,MAAM,YAAe,GAAA,gBAAA,CAAA;AAErB,MAAM,MAAS,GAAA,IAAA,CAAA;AAOf,MAAM,oBAAA,GAAuB,CAAC,IAA0B,KAAA;AACvD,EAAO,OAAA,IAAA,CAAK,WAAW,MAAM,CAAA,CAAA;AAC9B,CAAA,CAAA;AAOA,MAAM,gBAAA,GAAmB,CAAC,IAAyB,KAAA;AAClD,EAAO,OAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAChC,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,CAAC,IAAc,EAAA,MAAA,GAAiB,YAAyB,KAAA;AACnF,EAAA,OAAO,CAAG,EAAA,MAAA,CAAA,kBAAA,EAA2B,gBAAiB,CAAA,IAAI,EAAE,WAAY,EAAA,CAAA,UAAA,CAAA,CAAA;AACzE,CAAA,CAAA;AAMO,SAAS,gBAAmB,GAAA;AAClC,EAAO,OAAA;AAAA,IACN,IAAM,EAAA,WAAA;AAAA,IACN,OAAA,EAAS,CAAC,IAAiB,KAAA;AAC1B,MAAI,IAAA,CAAC,qBAAqB,IAAI,CAAA;AAAG,QAAA,OAAA;AACjC,MAAO,OAAA;AAAA,QACN,IAAA;AAAA,QACA,IAAM,EAAA,YAAA;AAAA,QACN,WAAA,EAAa,mBAAmB,IAAI,CAAA;AAAA,OACrC,CAAA;AAAA,KACD;AAAA,GACD,CAAA;AACD,CAAA;AAKA,eAAe;AAAA,EACd,gBAAA;AACD,CAAA;;;;;"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var letter_vue_vue_type_script_setup_true_lang = require('./letter.vue2.js');
|
|
6
6
|
var _pluginVue_exportHelper = require('../../../../../_virtual/_plugin-vue_export-helper.js');
|
|
7
7
|
|
|
8
|
-
var Letter = /* @__PURE__ */ _pluginVue_exportHelper.default(letter_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-
|
|
8
|
+
var Letter = /* @__PURE__ */ _pluginVue_exportHelper.default(letter_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-5bee9536"], ["__file", "letter.vue"]]);
|
|
9
9
|
|
|
10
10
|
exports.default = Letter;
|
|
11
11
|
//# sourceMappingURL=letter.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"letter.vue2.js","sources":["../../../../../../../packages/components/touchchat/component/AiRobot/letter.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'Touchletter' });\n</script>\n<template>\n\t<div class=\"typewriter-container\" :class=\"isTyping ? 'loading-container' : ''\">\n\t\t<div\n\t\t\tclass=\"typewriter-content\"\n\t\t\t:class=\"{\n\t\t\t\t'markdown-content': currentType === 'markdown',\n\t\t\t\t'html-content': currentType === 'html'\n\t\t\t}\"\n\t\t\tv-html=\"displayContent\"\n\t\t/>\n\t\t<!-- 条件显示loading,仅在HTML模式且正在打字时显示 -->\n\t\t<!-- <div v-if=\"isTyping\" class=\"typewriter-loading\">\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '0ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '200ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '400ms' }\"></span>\n\t\t\t<span class=\"loading-text\">{{ loadingText ?? '正在渲染内容' }}</span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '0ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '200ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '400ms' }\"></span>\n\t\t</div> -->\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch, Ref, onUnmounted, inject } from 'vue'\n// import { marked } from 'marked';\n\n// DOMPurify 模块缓存\nlet DOMPurifyModule: any = null\n\n// 动态加载 DOMPurify\nconst loadDOMPurify = async () => {\n\tif (!DOMPurifyModule) {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tDOMPurifyModule = await import('dompurify')\n\t\t}\n\t}\n\treturn DOMPurifyModule?.default || null\n}\n\n\n\ntype ContentType = 'text' | 'markdown' | 'html'\n\nconst props = defineProps<{\n\tdata: string\n\tspeed?: number\n\tcontentType?: ContentType | 'auto'\n\t// onComplete?: () => void\n\tsanitizeHtml?: boolean\n\tloadingText?: string\n}>()\n\nconst emits = defineEmits<{\n\t(e: 'complete'): void\n\t(e: 'start'): void\n}>()\n\nconst injectSpeed = inject<number>('speed', 10)\n\n// 默认值处理\nconst speed = computed(() => Math.max(1, props.speed || injectSpeed || 10))\nconst sanitizeHtml = computed(() => props.sanitizeHtml !== false)\n// const loadingText = computed(() => props.loadingText || '正在渲染内容...')\n\n// 内部状态\nconst currentIndex = ref(0)\nconst validContent = ref('')\nconst isTyping = ref(false)\nconst timer: Ref<number | null> = ref(null)\nconst tagStack = ref<string[]>([])\n\n// 内容类型检测与处理\nconst detectContentType = (content: string): ContentType => {\n\tif (/<\\/?[a-z][\\s\\S]*>/i.test(content)) {\n\t\treturn 'html'\n\t}\n\tif (/^#{1,6}\\s+/.test(content) || /\\*\\*.*\\*\\*/.test(content) || /```/.test(content)) {\n\t\treturn 'markdown'\n\t}\n\treturn 'text'\n}\n\nconst currentType = computed<ContentType>(() => {\n\tif (props.contentType && props.contentType !== 'auto') {\n\t\treturn props.contentType\n\t}\n\treturn detectContentType(props.data)\n})\n\n// 显示内容处理\nconst displayContent = computed(() => {\n\tlet content = validContent.value\n\tswitch (currentType.value) {\n\t\tcase 'html':\n\t\t\tif (sanitizeHtml.value && typeof window !== 'undefined') {\n\t\t\t\t// 动态加载并使用 DOMPurify\n\t\t\t\treturn DOMPurifyModule ? DOMPurifyModule.sanitize(content) : content\n\t\t\t}\n\t\t\treturn content\n\t\t// case 'markdown':\n\t\t// \treturn marked.parse(content);\n\t\tcase 'text':\n\t\t\treturn content.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\\n/g, '<br>').replace(/ {2}/g, ' ')\n\t\tdefault:\n\t\t\treturn content\n\t}\n})\n\n// 打字间隔计算\nconst getInterval = (isTag: boolean) => {\n\tconst baseInterval = 1000 / speed.value\n\treturn baseInterval * (isTag ? 1.2 : 0.8 + Math.random() * 0.4)\n}\n\n// 标签处理工具函数\nconst isSelfClosingTag = (tag: string) => {\n\tconst selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']\n\tconst tagNameMatch = tag.match(/<\\/?([a-z0-9]+)/i)\n\tif (tagNameMatch && tagNameMatch[1]) {\n\t\tconst tagName = tagNameMatch[1].toLowerCase()\n\t\treturn selfClosingTags.includes(tagName) || tag.endsWith('/>')\n\t}\n\treturn false\n}\n\nconst processTag = (tag: string) => {\n\tif (tag.startsWith('</')) {\n\t\tconst tagName = tag.match(/<\\/([a-z0-9]+)/i)?.[1]?.toLowerCase()\n\t\tif (tagName && tagStack.value.at(-1) === tagName) {\n\t\t\ttagStack.value.pop()\n\t\t}\n\t} else if (tag.startsWith('<') && !isSelfClosingTag(tag)) {\n\t\tconst tagName = tag.match(/<([a-z0-9]+)/i)?.[1]?.toLowerCase()\n\t\tif (tagName) {\n\t\t\ttagStack.value.push(tagName)\n\t\t}\n\t}\n}\n\n// 核心打字逻辑\nconst typeNext = () => {\n\tif (currentIndex.value >= props.data.length) {\n\t\twhile (tagStack.value.length > 0) {\n\t\t\tconst tag = tagStack.value.pop()\n\t\t\tvalidContent.value += `</${tag}>`\n\t\t}\n\t\tcompleteTyping()\n\t\treturn\n\t}\n\n\tconst currentChar = props.data[currentIndex.value]\n\tlet nextIndex = currentIndex.value\n\tlet newContent = ''\n\tlet isTag = false\n\n\tif (currentChar === '<') {\n\t\tisTag = true\n\t\tconst endIndex = props.data.indexOf('>', currentIndex.value)\n\t\tif (endIndex === -1) {\n\t\t\tnextIndex = currentIndex.value + 1\n\t\t\tnewContent = currentChar\n\t\t} else {\n\t\t\tnextIndex = endIndex + 1\n\t\t\tnewContent = props.data.substring(currentIndex.value, nextIndex)\n\t\t\tprocessTag(newContent)\n\t\t}\n\t} else {\n\t\tnextIndex = currentIndex.value + 1\n\t\tnewContent = currentChar\n\t}\n\n\tcurrentIndex.value = nextIndex\n\tvalidContent.value += newContent\n\ttimer.value = window.setTimeout(typeNext, getInterval(isTag))\n}\n\n// 控制方法\nconst startTyping = () => {\n\tif (isTyping.value || currentIndex.value >= props.data.length) return\n\tisTyping.value = true\n\temits('start')\n\ttypeNext()\n}\n\nconst stopTyping = () => {\n\tif (timer.value) {\n\t\tclearTimeout(timer.value)\n\t\ttimer.value = null\n\t\tisTyping.value = false\n\t}\n}\n\nconst resetTyping = () => {\n\tstopTyping()\n\tcurrentIndex.value = 0\n\tvalidContent.value = ''\n\ttagStack.value = []\n}\n\nconst completeTyping = () => {\n\tstopTyping()\n\t// props.onComplete?.()\n\t// complete\n\temits('complete')\n}\n\n// 监听内容变化\nwatch(\n\t() => props.data,\n\t() => {\n\t\tresetTyping()\n\t\tstartTyping()\n\t},\n\t{ immediate: true }\n)\n\nwatch(\n\t() => props.contentType,\n\t() => {\n\t\tvalidContent.value = props.data.substring(0, currentIndex.value)\n\t}\n)\n\nonMounted(async () => {\n\tif (currentIndex.value === 0) {\n\t\tstartTyping()\n\t}\n\tawait loadDOMPurify()\n})\n\nonUnmounted(() => stopTyping())\n\ndefineExpose({ startTyping, stopTyping, resetTyping, currentIndex, isTyping })\n</script>\n\n<style scoped>\n.typewriter-container {\n\tposition: relative;\n}\n.loading-container {\n\tmin-height: 40px;\n}\n\n/* .typewriter-content {\n\twhite-space: pre-wrap;\n\tword-break: break-word;\n\tline-height: 1.6;\n\tfont-family: 'Courier New', Courier, monospace;\n} */\n\n/* loading样式 */\n.typewriter-loading {\n\tmargin-top: 12px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tcolor: #666;\n\tfont-size: 14px;\n\tline-height: 1;\n\tpadding: 8px 0;\n}\n\n.loading-dot {\n\tdisplay: inline-block;\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground-color: #666;\n\tanimation: bounce 1.4s infinite ease-in-out both;\n}\n\n.loading-text {\n\tuser-select: none;\n}\n\n@keyframes bounce {\n\t0%,\n\t80%,\n\t100% {\n\t\ttransform: scale(0);\n\t}\n\n\t40% {\n\t\ttransform: scale(1);\n\t}\n}\n\n/* 内容样式 */\n.markdown-content {\n\tcolor: #333;\n}\n\n.markdown-content h1,\n.markdown-content h2 {\n\tmargin: 1em 0 0.5em;\n}\n\n.markdown-content p {\n\tmargin: 0.5em 0;\n}\n\n.markdown-content code {\n\tbackground: #f0f0f0;\n\tpadding: 0.2em 0.4em;\n\tborder-radius: 4px;\n}\n\n/* .html-content {\n\t\n} */\n</style>\n"],"names":["DO_defineComponent","inject","computed","ref","watch","onMounted","onUnmounted","_createElementBlock","_normalizeClass","_createElementVNode","_createCommentVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"letter.vue2.js","sources":["../../../../../../../packages/components/touchchat/component/AiRobot/letter.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({ name: 'Touchletter' });\n</script>\n<template>\n\t<div class=\"typewriter-container\" :class=\"isTyping ? 'loading-container' : ''\">\n\t\t<div\n\t\t\tclass=\"typewriter-content\"\n\t\t\t:class=\"{\n\t\t\t\t'markdown-content': currentType === 'markdown',\n\t\t\t\t'html-content': currentType === 'html'\n\t\t\t}\"\n\t\t\tv-html=\"displayContent\"\n\t\t/>\n\t\t<!-- 条件显示loading,仅在HTML模式且正在打字时显示 -->\n\t\t<!-- <div v-if=\"isTyping\" class=\"typewriter-loading\">\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '0ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '200ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '400ms' }\"></span>\n\t\t\t<span class=\"loading-text\">{{ loadingText ?? '正在渲染内容' }}</span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '0ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '200ms' }\"></span>\n\t\t\t<span class=\"loading-dot\" :style=\"{ animationDelay: '400ms' }\"></span>\n\t\t</div> -->\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, watch, Ref, onUnmounted, inject } from 'vue'\n// import { marked } from 'marked';\n\n// DOMPurify 模块缓存\nlet DOMPurifyModule: any = null\n\n// 动态加载 DOMPurify\nconst loadDOMPurify = async () => {\n\tif (!DOMPurifyModule) {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tDOMPurifyModule = await import('dompurify')\n\t\t}\n\t}\n\treturn DOMPurifyModule?.default || null\n}\n\n\n\ntype ContentType = 'text' | 'markdown' | 'html'\n\nconst props = defineProps<{\n\tdata: any\n\tspeed?: number\n\tcontentType?: ContentType | 'auto'\n\t// onComplete?: () => void\n\tsanitizeHtml?: boolean\n\tloadingText?: string\n}>()\n\nconst emits = defineEmits<{\n\t(e: 'complete'): void\n\t(e: 'start'): void\n}>()\n\nconst injectSpeed = inject<number>('speed', 10)\n\n// 默认值处理\nconst speed = computed(() => Math.max(1, props.speed || injectSpeed || 10))\nconst sanitizeHtml = computed(() => props.sanitizeHtml !== false)\n// const loadingText = computed(() => props.loadingText || '正在渲染内容...')\n\n// 内部状态\nconst currentIndex = ref(0)\nconst validContent = ref('')\nconst isTyping = ref(false)\nconst timer: Ref<number | null> = ref(null)\nconst tagStack = ref<string[]>([])\n\n// 内容类型检测与处理\nconst detectContentType = (content: string): ContentType => {\n\tif (/<\\/?[a-z][\\s\\S]*>/i.test(content)) {\n\t\treturn 'html'\n\t}\n\tif (/^#{1,6}\\s+/.test(content) || /\\*\\*.*\\*\\*/.test(content) || /```/.test(content)) {\n\t\treturn 'markdown'\n\t}\n\treturn 'text'\n}\n\nconst currentType = computed<ContentType>(() => {\n\tif (props.contentType && props.contentType !== 'auto') {\n\t\treturn props.contentType\n\t}\n\treturn detectContentType(props.data)\n})\n\n// 显示内容处理\nconst displayContent = computed(() => {\n\tlet content = validContent.value\n\tswitch (currentType.value) {\n\t\tcase 'html':\n\t\t\tif (sanitizeHtml.value && typeof window !== 'undefined') {\n\t\t\t\t// 动态加载并使用 DOMPurify\n\t\t\t\treturn DOMPurifyModule ? DOMPurifyModule.sanitize(content) : content\n\t\t\t}\n\t\t\treturn content\n\t\t// case 'markdown':\n\t\t// \treturn marked.parse(content);\n\t\tcase 'text':\n\t\t\treturn content.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\\n/g, '<br>').replace(/ {2}/g, ' ')\n\t\tdefault:\n\t\t\treturn content\n\t}\n})\n\n// 打字间隔计算\nconst getInterval = (isTag: boolean) => {\n\tconst baseInterval = 1000 / speed.value\n\treturn baseInterval * (isTag ? 1.2 : 0.8 + Math.random() * 0.4)\n}\n\n// 标签处理工具函数\nconst isSelfClosingTag = (tag: string) => {\n\tconst selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']\n\tconst tagNameMatch = tag.match(/<\\/?([a-z0-9]+)/i)\n\tif (tagNameMatch && tagNameMatch[1]) {\n\t\tconst tagName = tagNameMatch[1].toLowerCase()\n\t\treturn selfClosingTags.includes(tagName) || tag.endsWith('/>')\n\t}\n\treturn false\n}\n\nconst processTag = (tag: string) => {\n\tif (tag.startsWith('</')) {\n\t\tconst tagName = tag.match(/<\\/([a-z0-9]+)/i)?.[1]?.toLowerCase()\n\t\tif (tagName && tagStack.value.at(-1) === tagName) {\n\t\t\ttagStack.value.pop()\n\t\t}\n\t} else if (tag.startsWith('<') && !isSelfClosingTag(tag)) {\n\t\tconst tagName = tag.match(/<([a-z0-9]+)/i)?.[1]?.toLowerCase()\n\t\tif (tagName) {\n\t\t\ttagStack.value.push(tagName)\n\t\t}\n\t}\n}\n\n// 核心打字逻辑\nconst typeNext = () => {\n\tif (currentIndex.value >= props.data.length) {\n\t\twhile (tagStack.value.length > 0) {\n\t\t\tconst tag = tagStack.value.pop()\n\t\t\tvalidContent.value += `</${tag}>`\n\t\t}\n\t\tcompleteTyping()\n\t\treturn\n\t}\n\n\tconst currentChar = props.data[currentIndex.value]\n\tlet nextIndex = currentIndex.value\n\tlet newContent = ''\n\tlet isTag = false\n\n\tif (currentChar === '<') {\n\t\tisTag = true\n\t\tconst endIndex = props.data.indexOf('>', currentIndex.value)\n\t\tif (endIndex === -1) {\n\t\t\tnextIndex = currentIndex.value + 1\n\t\t\tnewContent = currentChar\n\t\t} else {\n\t\t\tnextIndex = endIndex + 1\n\t\t\tnewContent = props.data.substring(currentIndex.value, nextIndex)\n\t\t\tprocessTag(newContent)\n\t\t}\n\t} else {\n\t\tnextIndex = currentIndex.value + 1\n\t\tnewContent = currentChar\n\t}\n\n\tcurrentIndex.value = nextIndex\n\tvalidContent.value += newContent\n\ttimer.value = window.setTimeout(typeNext, getInterval(isTag))\n}\n\n// 控制方法\nconst startTyping = () => {\n\tif (isTyping.value || currentIndex.value >= props.data.length) return\n\tisTyping.value = true\n\temits('start')\n\ttypeNext()\n}\n\nconst stopTyping = () => {\n\tif (timer.value) {\n\t\tclearTimeout(timer.value)\n\t\ttimer.value = null\n\t\tisTyping.value = false\n\t}\n}\n\nconst resetTyping = () => {\n\tstopTyping()\n\tcurrentIndex.value = 0\n\tvalidContent.value = ''\n\ttagStack.value = []\n}\n\nconst completeTyping = () => {\n\tstopTyping()\n\t// props.onComplete?.()\n\t// complete\n\temits('complete')\n}\n\n// 监听内容变化\nwatch(\n\t() => props.data,\n\t() => {\n\t\tresetTyping()\n\t\tstartTyping()\n\t},\n\t{ immediate: true }\n)\n\nwatch(\n\t() => props.contentType,\n\t() => {\n\t\tvalidContent.value = props.data.substring(0, currentIndex.value)\n\t}\n)\n\nonMounted(async () => {\n\tif (currentIndex.value === 0) {\n\t\tstartTyping()\n\t}\n\tawait loadDOMPurify()\n})\n\nonUnmounted(() => stopTyping())\n\ndefineExpose({ startTyping, stopTyping, resetTyping, currentIndex, isTyping })\n</script>\n\n<style scoped>\n.typewriter-container {\n\tposition: relative;\n}\n.loading-container {\n\tmin-height: 40px;\n}\n\n/* .typewriter-content {\n\twhite-space: pre-wrap;\n\tword-break: break-word;\n\tline-height: 1.6;\n\tfont-family: 'Courier New', Courier, monospace;\n} */\n\n/* loading样式 */\n.typewriter-loading {\n\tmargin-top: 12px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tcolor: #666;\n\tfont-size: 14px;\n\tline-height: 1;\n\tpadding: 8px 0;\n}\n\n.loading-dot {\n\tdisplay: inline-block;\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground-color: #666;\n\tanimation: bounce 1.4s infinite ease-in-out both;\n}\n\n.loading-text {\n\tuser-select: none;\n}\n\n@keyframes bounce {\n\t0%,\n\t80%,\n\t100% {\n\t\ttransform: scale(0);\n\t}\n\n\t40% {\n\t\ttransform: scale(1);\n\t}\n}\n\n/* 内容样式 */\n.markdown-content {\n\tcolor: #333;\n}\n\n.markdown-content h1,\n.markdown-content h2 {\n\tmargin: 1em 0 0.5em;\n}\n\n.markdown-content p {\n\tmargin: 0.5em 0;\n}\n\n.markdown-content code {\n\tbackground: #f0f0f0;\n\tpadding: 0.2em 0.4em;\n\tborder-radius: 4px;\n}\n\n/* .html-content {\n\t\n} */\n</style>\n"],"names":["DO_defineComponent","inject","computed","ref","watch","onMounted","onUnmounted","_createElementBlock","_normalizeClass","_createElementVNode","_createCommentVNode"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var QuoteContent_vue_vue_type_script_setup_true_lang = require('./QuoteContent.vue2.js');
|
|
6
|
+
var _pluginVue_exportHelper = require('../../../../_virtual/_plugin-vue_export-helper.js');
|
|
7
|
+
|
|
8
|
+
var QuoteContent = /* @__PURE__ */ _pluginVue_exportHelper.default(QuoteContent_vue_vue_type_script_setup_true_lang.default, [["__file", "QuoteContent.vue"]]);
|
|
9
|
+
|
|
10
|
+
exports.default = QuoteContent;
|
|
11
|
+
//# sourceMappingURL=QuoteContent.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteContent.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var vue = require('vue');
|
|
6
|
+
|
|
7
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
8
|
+
__name: "QuoteContent",
|
|
9
|
+
props: ["quoteObj"],
|
|
10
|
+
emits: ["close"],
|
|
11
|
+
setup(__props, { emit: __emit }) {
|
|
12
|
+
const props = __props;
|
|
13
|
+
const emits = __emit;
|
|
14
|
+
return (_ctx, _cache) => {
|
|
15
|
+
return vue.openBlock(), vue.createElementBlock("div", { class: "quote-content" }, [
|
|
16
|
+
vue.createElementVNode(
|
|
17
|
+
"div",
|
|
18
|
+
{ class: "quote-content-text" },
|
|
19
|
+
vue.toDisplayString(props.quoteObj.content),
|
|
20
|
+
1
|
|
21
|
+
/* TEXT */
|
|
22
|
+
),
|
|
23
|
+
vue.createElementVNode("div", {
|
|
24
|
+
class: "touchchat-action-item value-close-fill",
|
|
25
|
+
onClick: ($event) => emits("close")
|
|
26
|
+
}, null, 8, ["onClick"])
|
|
27
|
+
]);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
exports.default = _sfc_main;
|
|
33
|
+
//# sourceMappingURL=QuoteContent.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteContent.vue2.js","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;;4BAPb,EAAAA,sBAAA,CAGM,OAAA,EAHD,KAAA,EAAM,iBAAe,EAAA;AAAA,QACzBC,sBAAA;AAAA,UAAkE,KAAA;AAAA,UAAA,EAA7D,OAAM;8BAAwB,KAAM,CAAA,QAAA,CAAS,OAAO,CAAA;AAAA,UAAA,CAAA;AAAA;AAAA,SAAA;AAAA,QACzDA,uBAAkF,KAAA,EAAA;AAAA,UAA7E,KAAM,EAAA,wCAAA;AAAA,UAA0C,gBAAO,KAAA,KAAA,CAAK,OAAA,CAAA;AAAA;;;;;;;;"}
|
|
@@ -14,6 +14,7 @@ var face = require('../../component/AiRobot/face.vue.js');
|
|
|
14
14
|
var meterialPrepare = require('../../component/AiRobot/meterialPrepare.vue.js');
|
|
15
15
|
var letter = require('../../component/AiRobot/letter.vue.js');
|
|
16
16
|
var ThoughtChain = require('../../component/ThoughtChain.vue.js');
|
|
17
|
+
var index = require('../../../../../node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.js');
|
|
17
18
|
|
|
18
19
|
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
19
20
|
__name: "AiMessage",
|
|
@@ -22,7 +23,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
22
23
|
index: {},
|
|
23
24
|
hasRetry: { type: Boolean, default: true }
|
|
24
25
|
},
|
|
25
|
-
emits: ["copy", "retry", "like", "dislike", "contentRendered", "completeRendered", "toggle-sidebar"],
|
|
26
|
+
emits: ["copy", "retry", "like", "dislike", "quote", "contentRendered", "completeRendered", "toggle-sidebar", "openSideBar"],
|
|
26
27
|
setup(__props, { emit: __emit }) {
|
|
27
28
|
const componentMap = {
|
|
28
29
|
FileView: FileView.default,
|
|
@@ -33,11 +34,28 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
33
34
|
MeterialPrepare: meterialPrepare.default
|
|
34
35
|
};
|
|
35
36
|
const props = __props;
|
|
37
|
+
vue.watch(
|
|
38
|
+
() => props.item,
|
|
39
|
+
(val) => {
|
|
40
|
+
var _a;
|
|
41
|
+
let arr = [];
|
|
42
|
+
if (val.msgList) {
|
|
43
|
+
arr = (_a = val.msgList) == null ? void 0 : _a.filter((item) => item.type === "component" && (item.displayMode === "drawer" || item.displayMode === "tip") || item.type === "iframe" && item.url);
|
|
44
|
+
}
|
|
45
|
+
if (arr.length) {
|
|
46
|
+
emits("openSideBar", arr[0], props.index);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
deep: true
|
|
51
|
+
}
|
|
52
|
+
);
|
|
36
53
|
const emits = __emit;
|
|
37
54
|
const collapse = vue.ref(true);
|
|
38
55
|
const isShowAvatar = vue.ref(true);
|
|
39
56
|
const aiAvatarPath = vue.ref(aiAvatar.default);
|
|
40
57
|
const components = vue.inject("components", {});
|
|
58
|
+
const a2uiProps = vue.inject("a2uiProps", {});
|
|
41
59
|
const avatar = vue.inject("avatar", true);
|
|
42
60
|
const scripts = vue.inject("scripts", []);
|
|
43
61
|
const layout = vue.inject("layout", "side, think, upload, chain");
|
|
@@ -61,10 +79,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
61
79
|
const reasoningContentShow = vue.computed(() => {
|
|
62
80
|
return props.item.reasoningContent;
|
|
63
81
|
});
|
|
64
|
-
const
|
|
82
|
+
const getProcessedContent = (node) => {
|
|
65
83
|
var _a;
|
|
66
|
-
return
|
|
67
|
-
}
|
|
84
|
+
return node.content ? ((_a = markdown.default) == null ? void 0 : _a.render(node.content, { isReasoning: false })) || "" : "";
|
|
85
|
+
};
|
|
68
86
|
const processedThinkContent = vue.computed(() => {
|
|
69
87
|
var _a;
|
|
70
88
|
return props.item.thinkContent ? ((_a = markdown.default) == null ? void 0 : _a.render(props.item.thinkContent, { isReasoning: true })) || "" : "";
|
|
@@ -74,7 +92,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
74
92
|
return props.item.reasoningContent ? ((_a = markdown.default) == null ? void 0 : _a.render(props.item.reasoningContent, { isReasoning: true })) || "" : "";
|
|
75
93
|
});
|
|
76
94
|
const contentShow = vue.computed(() => {
|
|
77
|
-
|
|
95
|
+
var _a;
|
|
96
|
+
return props.item.content || ((_a = props.item.msgList) == null ? void 0 : _a.length);
|
|
78
97
|
});
|
|
79
98
|
const toggleSidebarClick = (item, index) => {
|
|
80
99
|
emits("toggle-sidebar", item, index);
|
|
@@ -106,6 +125,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
106
125
|
const onRetry = () => emits("retry", props.index);
|
|
107
126
|
const onLike = () => emits("like", props.index);
|
|
108
127
|
const onDislike = () => emits("dislike", props.index);
|
|
128
|
+
const onQuote = () => emits("quote", props.item, props.index);
|
|
109
129
|
return (_ctx, _cache) => {
|
|
110
130
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
111
131
|
class: "touchchat-ai touchchat-item",
|
|
@@ -208,14 +228,51 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
208
228
|
item: _ctx.item,
|
|
209
229
|
index: _ctx.index
|
|
210
230
|
}, () => [
|
|
211
|
-
contentShow.value && vue.unref(scripts) && vue.unref(scripts).length === 0 ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
231
|
+
contentShow.value && vue.unref(scripts) && vue.unref(scripts).length === 0 && _ctx.item.msgList ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
212
232
|
key: 0,
|
|
213
|
-
class: "touchchat-ai-bubble-text touchchat-markdown"
|
|
214
|
-
|
|
215
|
-
|
|
233
|
+
class: "touchchat-ai-bubble-text touchchat-markdown"
|
|
234
|
+
}, [
|
|
235
|
+
(vue.openBlock(true), vue.createElementBlock(
|
|
236
|
+
vue.Fragment,
|
|
237
|
+
null,
|
|
238
|
+
vue.renderList(_ctx.item.msgList, (node) => {
|
|
239
|
+
return vue.openBlock(), vue.createElementBlock(
|
|
240
|
+
vue.Fragment,
|
|
241
|
+
{
|
|
242
|
+
key: node.id
|
|
243
|
+
},
|
|
244
|
+
[
|
|
245
|
+
node.type === "markdown" && node.content ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
246
|
+
key: 0,
|
|
247
|
+
innerHTML: getProcessedContent(node)
|
|
248
|
+
}, null, 8, ["innerHTML"])) : vue.createCommentVNode("v-if", true),
|
|
249
|
+
node.type === "component" && node.displayMode === "inline" ? (vue.openBlock(), vue.createBlock(
|
|
250
|
+
vue.resolveDynamicComponent(vue.unref(components)[node.componentName]),
|
|
251
|
+
vue.mergeProps({
|
|
252
|
+
key: 1,
|
|
253
|
+
ref_for: true
|
|
254
|
+
}, _ctx.item.props),
|
|
255
|
+
null,
|
|
256
|
+
16
|
|
257
|
+
/* FULL_PROPS */
|
|
258
|
+
)) : vue.createCommentVNode("v-if", true),
|
|
259
|
+
node.type === "a2ui" ? (vue.openBlock(), vue.createBlock(vue.unref(index.TouchA2ui), {
|
|
260
|
+
key: 2,
|
|
261
|
+
messages: node.msgs,
|
|
262
|
+
components: vue.unref(a2uiProps).components,
|
|
263
|
+
"surface-id": node.surfaceId
|
|
264
|
+
}, null, 8, ["messages", "components", "surface-id"])) : vue.createCommentVNode("v-if", true)
|
|
265
|
+
],
|
|
266
|
+
64
|
|
267
|
+
/* STABLE_FRAGMENT */
|
|
268
|
+
);
|
|
269
|
+
}),
|
|
270
|
+
128
|
|
271
|
+
/* KEYED_FRAGMENT */
|
|
272
|
+
))
|
|
273
|
+
])) : vue.createCommentVNode("v-if", true)
|
|
216
274
|
]),
|
|
217
275
|
vue.createCommentVNode(" && !item.componentName "),
|
|
218
|
-
vue.createCommentVNode(" <span>letter111{{item}}</span> "),
|
|
219
276
|
vue.unref(scripts) && vue.unref(scripts).length > 0 ? (vue.openBlock(), vue.createBlock(letter.default, {
|
|
220
277
|
key: 2,
|
|
221
278
|
"auto-start": "",
|
|
@@ -223,7 +280,6 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
223
280
|
onStart: startLetter,
|
|
224
281
|
onComplete: completeLetter
|
|
225
282
|
}, null, 8, ["data"])) : vue.createCommentVNode("v-if", true),
|
|
226
|
-
vue.createCommentVNode(" <span>letter222</span> "),
|
|
227
283
|
vue.unref(scripts).length > 0 && (showComponent.value || !_ctx.item.content) || !vue.unref(scripts).length && !_ctx.item.isChating ? vue.renderSlot(_ctx.$slots, "msg", {
|
|
228
284
|
key: 3,
|
|
229
285
|
item: _ctx.item,
|
|
@@ -259,7 +315,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
259
315
|
onCopy,
|
|
260
316
|
onRetry,
|
|
261
317
|
onLike,
|
|
262
|
-
onDislike
|
|
318
|
+
onDislike,
|
|
319
|
+
onQuote
|
|
263
320
|
}, {
|
|
264
321
|
extendsFn: vue.withCtx(() => [
|
|
265
322
|
vue.renderSlot(_ctx.$slots, "extendsFn", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiMessage.vue2.js","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\" 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<!-- <span>letter111{{item}}</span> -->\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<!-- <span>letter222</span> -->\n\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\">\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 } from 'vue'\nimport type { ChatMessage } 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'\n\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\n\t\tindex: number\n\t\thasRetry: boolean\n\t}>(),\n\t{\n\t\thasRetry: 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: 'contentRendered', element: HTMLElement): void\n\t(e: 'completeRendered', chatId: string): void\n\t(e: 'toggle-sidebar', 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 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 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\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)\n</script>\n"],"names":["FileView","ImageView","LinkView","CardView","Face","MeterialPrepare","ref","aiAvatarBase","inject","computed","markdown","onMounted","_createElementBlock","item","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_Fragment","_createTextVNode","_createVNode","_Transition","_vShow","_unref","ThoughtChain","index","_createBlock","Letter","_openBlock","_resolveDynamicComponent","MessageActions","hasRetry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AiMessage.vue2.js","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\" 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</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\n// const 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":["FileView","ImageView","LinkView","CardView","Face","MeterialPrepare","watch","ref","aiAvatarBase","inject","computed","markdown","onMounted","_createElementBlock","item","_createCommentVNode","_createElementVNode","_renderSlot","_normalizeClass","_Fragment","_createTextVNode","_createVNode","_Transition","_vShow","_unref","ThoughtChain","index","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","TouchA2ui","Letter","MessageActions","hasRetry"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ var MessageAction = /* @__PURE__ */ ((MessageAction2) => {
|
|
|
13
13
|
MessageAction2["RETRY"] = "retry";
|
|
14
14
|
MessageAction2["LIKE"] = "like";
|
|
15
15
|
MessageAction2["DISLIKE"] = "dislike";
|
|
16
|
+
MessageAction2["WITHDRAW"] = "withDraw";
|
|
16
17
|
return MessageAction2;
|
|
17
18
|
})(MessageAction || {});
|
|
18
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/types.ts"],"sourcesContent":["/**\n * TouchChat 类型定义\n */\n\nexport enum ThinkStatus {\n\tTHINKING = 'thinking',\n\tCOMPLETED = 'completed',\n\tSTOPPED = 'stopped'\n}\n\nexport interface ChatMessage {\n\tchatId?: string\n\tuser: 'u' | 'ai' | string\n\ttype: string\n\tcontent: string\n\tisChating?: boolean\n\tthinkContent?: string\n\treasoningContent?: string\n\tisLiked?: boolean\n\tisDisliked?: boolean\n\tisEditing?: boolean\n\teditContent?: string\n\tthinkStatus?: ThinkStatus\n\tthinkStartTime?: number\n\tthinkTime?: number\n\tthinkEndTime?: number\n\tisShowLike?: boolean\n\tisShowCopy?: boolean\n\tcomponentName?: string\n\ttypeFlag?: string\n\tfiles?: FileItem[]\n\thtml?: string\n\tisError?: boolean\n\tauto?: boolean\n\tneedSequenceProcessing?: boolean\n\tneedSequenceType?: string\n\tstop?: boolean\n}\n\nexport interface AgentsItem {\n\tname: string\n\tintro: string\n\t[key: string]: any\n}\n\nexport interface ScriptContentItem {\n\tuser: 'i' | 'ai'\n\tdata?: string\n\ttype?: string\n\tagents?: string\n\tfile?: string\n\talias?: string | string[]\n\t[key: string]: any\n}\n\nexport interface Script {\n\tcontent: ScriptContentItem[]\n\t[key: string]: any\n}\n\nexport interface ModuleConfig {\n\taction?: () => string\n\theaders?: () => Record<string, string>\n\tbody?: () => Record<string, any>\n\trespoKey?: () => RespoKeyConfig\n\tname?: string\n}\n\nexport interface RespoKeyConfig {\n\tcontent: string\n\tcategory: string\n\tcontentCategory?: string\n\tall?: string\n\tallCategory?: string\n}\n\nexport interface ModuleItem {\n\tname?: string\n\tconfig?: ModuleConfig\n\t[key: string]: any\n}\n\nexport interface FileItem {\n\tid?: string\n\tfile?: File\n\tname: string\n\tfileType: string\n\tfileSize: string\n\tlastModified: number\n\tpreview?: string\n\tbase64?: string\n\t// 文件上传相关字段\n\tisUploading?: boolean\n\tuploadProgress?: number\n\tuploadSuccess?: boolean\n\tuploadError?: boolean\n\t[key: string]: any\n}\n\nexport interface RenderData {\n\tmainContent: string\n\tthinkContent: string\n\treasoningContent: string\n}\n\nexport enum MessageAction {\n\tCOPY = 'copy',\n\tEDIT = 'edit',\n\tDELETE = 'delete',\n\tRETRY = 'retry',\n\tLIKE = 'like',\n\tDISLIKE = 'dislike'\n}\n\nexport interface ResultItem {\n\tallAiContent?: string\n\t[key: string]: any\n}\n\nexport interface MessageProcessor {\n\tmessageQueue: ChatMessage[]\n\tisProcessing: boolean\n\tcurrentMessage: ChatMessage | null\n\tprocessNextMessage: () => void\n\thandleMessageComplete: (chatId: string) => void\n}\n\nexport interface ScriptMatchResult {\n\tresponses: any[]\n\tnextIndex: number\n}\n"],"names":["ThinkStatus","MessageAction"],"mappings":";;AAIY,IAAA,WAAA,qBAAAA,YAAL,KAAA;AACN,EAAAA,aAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AACX,EAAAA,aAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZ,EAAAA,aAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AAHC,EAAAA,OAAAA,YAAAA,CAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA,EAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/types.ts"],"sourcesContent":["/**\n * TouchChat 类型定义\n */\n\nexport enum ThinkStatus {\n\tTHINKING = 'thinking',\n\tCOMPLETED = 'completed',\n\tSTOPPED = 'stopped'\n}\n\nexport interface ChatMessage {\n\tchatId?: string\n\tuser: 'u' | 'ai' | string\n\ttype: string\n\tcontent: string\n\tisChating?: boolean\n\tthinkContent?: string\n\treasoningContent?: string\n\tisLiked?: boolean\n\tisDisliked?: boolean\n\tisEditing?: boolean\n\teditContent?: string\n\tthinkStatus?: ThinkStatus\n\tthinkStartTime?: number\n\tthinkTime?: number\n\tthinkEndTime?: number\n\tisShowLike?: boolean\n\tisShowCopy?: boolean\n\tisWithDraw?: boolean\n\tcomponentName?: string\n\ttypeFlag?: string\n\tfiles?: FileItem[]\n\thtml?: string\n\tisError?: boolean\n\tauto?: boolean\n\tneedSequenceProcessing?: boolean\n\tneedSequenceType?: string\n\tstop?: boolean\n\tmsgList: any[]\n}\n\nexport interface ChatMsgList {\n\t[key: string]: any\n}\n\nexport interface AgentsItem {\n\tname: string\n\tintro: string\n\t[key: string]: any\n}\n\nexport interface ScriptContentItem {\n\tuser: 'i' | 'ai'\n\tdata?: string\n\ttype?: string\n\tagents?: string\n\tfile?: string\n\talias?: string | string[]\n\t[key: string]: any\n}\n\nexport interface Script {\n\tcontent: ScriptContentItem[]\n\t[key: string]: any\n}\n\nexport interface ModuleConfig {\n\taction?: () => string\n\theaders?: () => Record<string, string>\n\tbody?: () => Record<string, any>\n\trespoKey?: () => RespoKeyConfig\n\tname?: string\n}\n\nexport interface RespoKeyConfig {\n\tcontent: string\n\tcategory: string\n\tcontentCategory?: string\n\tall?: string\n\tallCategory?: string\n}\n\nexport interface ModuleItem {\n\tname?: string\n\tconfig?: ModuleConfig\n\t[key: string]: any\n}\n\nexport interface FileItem {\n\tid?: string\n\tfile?: File\n\tname: string\n\tfileType: string\n\tfileSize: string\n\tlastModified: number\n\tpreview?: string\n\tbase64?: string\n\t// 文件上传相关字段\n\tisUploading?: boolean\n\tuploadProgress?: number\n\tuploadSuccess?: boolean\n\tuploadError?: boolean\n\t[key: string]: any\n}\n\nexport interface RenderData {\n\tmainContent: string\n\tthinkContent: string\n\treasoningContent: string\n}\n\nexport enum MessageAction {\n\tCOPY = 'copy',\n\tEDIT = 'edit',\n\tDELETE = 'delete',\n\tRETRY = 'retry',\n\tLIKE = 'like',\n\tDISLIKE = 'dislike',\n\tWITHDRAW = 'withDraw'\n}\n\nexport interface ResultItem {\n\tallAiContent?: string\n\t[key: string]: any\n}\n\nexport interface MessageProcessor {\n\tmessageQueue: ChatMessage[]\n\tisProcessing: boolean\n\tcurrentMessage: ChatMessage | null\n\tprocessNextMessage: () => void\n\thandleMessageComplete: (chatId: string) => void\n}\n\nexport interface ScriptMatchResult {\n\tresponses: any[]\n\tnextIndex: number\n}\n\nexport interface MessageActions {\n\tuser: string[]\n\tai: string[]\n}\n"],"names":["ThinkStatus","MessageAction"],"mappings":";;AAIY,IAAA,WAAA,qBAAAA,YAAL,KAAA;AACN,EAAAA,aAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AACX,EAAAA,aAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZ,EAAAA,aAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AAHC,EAAAA,OAAAA,YAAAA,CAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA,EAAA;AA2GA,IAAA,aAAA,qBAAAC,cAAL,KAAA;AACN,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACT,EAAAA,eAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AACR,EAAAA,eAAA,MAAO,CAAA,GAAA,MAAA,CAAA;AACP,EAAAA,eAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACV,EAAAA,eAAA,UAAW,CAAA,GAAA,UAAA,CAAA;AAPA,EAAAA,OAAAA,cAAAA,CAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;;;;"}
|
|
@@ -119,7 +119,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
119
119
|
isLiked: (_b = data.isLiked) != null ? _b : false,
|
|
120
120
|
isDisliked: (_c = data.isDisliked) != null ? _c : false,
|
|
121
121
|
isEditing: (_d = data.isEditing) != null ? _d : false,
|
|
122
|
-
editContent: (_e = data.editContent) != null ? _e : ""
|
|
122
|
+
editContent: (_e = data.editContent) != null ? _e : "",
|
|
123
|
+
msgList: []
|
|
123
124
|
};
|
|
124
125
|
}
|
|
125
126
|
};
|
|
@@ -298,9 +299,12 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
298
299
|
content: userInput,
|
|
299
300
|
isShowLike: false,
|
|
300
301
|
isShowCopy: true,
|
|
302
|
+
isWithDraw: false,
|
|
303
|
+
isRead: false,
|
|
301
304
|
files: fileList || [],
|
|
302
305
|
typeFlag: type,
|
|
303
|
-
auto: auto || false
|
|
306
|
+
auto: auto || false,
|
|
307
|
+
msgList: []
|
|
304
308
|
};
|
|
305
309
|
chatList.value.push(userMessage);
|
|
306
310
|
emit("sendMessage", [...chatList.value]);
|
|
@@ -327,7 +331,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
327
331
|
isShowCopy: true,
|
|
328
332
|
needSequenceType: response.type || "",
|
|
329
333
|
needSequenceProcessing: response.needSequenceProcessing || false,
|
|
330
|
-
typeFlag: type
|
|
334
|
+
typeFlag: type,
|
|
335
|
+
msgList: []
|
|
331
336
|
};
|
|
332
337
|
newAiMessages.push(aiMessage);
|
|
333
338
|
});
|
|
@@ -383,7 +388,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
383
388
|
type: "text",
|
|
384
389
|
content: unmatchText,
|
|
385
390
|
isShowLike: true,
|
|
386
|
-
isShowCopy: true
|
|
391
|
+
isShowCopy: true,
|
|
392
|
+
msgList: []
|
|
387
393
|
};
|
|
388
394
|
chatList.value.push(defaultAiMessage);
|
|
389
395
|
emit("sendMessage", [...chatList.value]);
|
|
@@ -410,7 +416,9 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
410
416
|
user: "u",
|
|
411
417
|
type: "text",
|
|
412
418
|
content: inputValue.value,
|
|
413
|
-
files: fileList || []
|
|
419
|
+
files: fileList || [],
|
|
420
|
+
msgList: [],
|
|
421
|
+
isRead: false
|
|
414
422
|
};
|
|
415
423
|
chatList.value.push(userMessage);
|
|
416
424
|
const index = chatList.value.length - 1;
|
|
@@ -488,6 +496,7 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
488
496
|
isLiked: false,
|
|
489
497
|
isDisliked: false,
|
|
490
498
|
isChating: true,
|
|
499
|
+
isRead: false,
|
|
491
500
|
chatId: aiMessage.chatId,
|
|
492
501
|
user: aiMessage.user,
|
|
493
502
|
type: aiMessage.type,
|
|
@@ -522,6 +531,13 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
|
|
|
522
531
|
isDisliked: true
|
|
523
532
|
});
|
|
524
533
|
break;
|
|
534
|
+
case types.MessageAction.WITHDRAW:
|
|
535
|
+
console.log("withDraw");
|
|
536
|
+
messageUtils.updateMessage(index, {
|
|
537
|
+
isWithDraw: true,
|
|
538
|
+
user: "withDraw"
|
|
539
|
+
});
|
|
540
|
+
break;
|
|
525
541
|
}
|
|
526
542
|
};
|
|
527
543
|
const saveEdit = (index, newContent) => {
|