@@ -16,7 +16,7 @@ import { GeneratingStatus, STATUS } from '@opentiny/tiny-robot-kit';
1616import type { ChatMessage } from ' @opentiny/tiny-robot-kit' ;
1717import { IconAi , IconUser , IconArrowDown } from ' @opentiny/tiny-robot-svgs' ;
1818import type { BubbleRoleConfig } from ' @opentiny/tiny-robot' ;
19- import { requiredCompleteFieldSelectors , scrollEnd , throttle } from ' @opentiny/genui-sdk-vue' ;
19+ import { requiredCompleteFieldSelectors , scrollEnd , throttle , GENUI_CONFIG } from ' @opentiny/genui-sdk-vue' ;
2020import type { IMessage } from ' @opentiny/genui-sdk-vue' ;
2121import copy from ' clipboard-copy' ;
2222import type { INotificationPayload , IMessageItem , IJsonPatchMessageItem , ISchemaCardMessageItem } from ' ./chat.types' ;
@@ -37,15 +37,15 @@ import { emitter } from './template-chat-event-emitter';
3737import useIcon from ' ../../use-icon' ;
3838
3939const { addIcons } = useIcon ();
40- addIcons (IconAi , IconUser );
40+ addIcons (IconAi , IconUser , IconArrowDown );
4141
4242const props = defineProps <{
4343 messages? : IMessage [];
4444}>();
4545
4646const emit = defineEmits ([' schema-version-toggle' ]);
4747
48- const TinyGenuiConfig: any = inject (' TinyGenuiConfig ' );
48+ const TinyGenuiConfig: any = inject (GENUI_CONFIG , null );
4949const { setColorMode } = useTheme ();
5050const prevSchema = ref <string >(' ' );
5151const errorMessagesMap = ref <Map <string , string >>(new Map ());
@@ -141,7 +141,6 @@ const schemaCardRenderer = async (props: any) => {
141141 // 给每个组件添加 id
142142 const schemaWithId = generateIdForComponents (target );
143143 setCurrentPreviewSchema (schemaWithId );
144-
145144 } catch (error ) {
146145 console .error (' schemaCardRenderer error ===>' , error );
147146 errorMessagesMap .value .set (props .cardId , error .message );
@@ -261,7 +260,8 @@ const messageRenderers = {
261260 prevSchema: prevSchema .value ,
262261 errorMessagesMap: errorMessagesMap .value ,
263262 messages: messages .value ,
264- onSchemaVersionToggle : (schema : Record <string , unknown >, cardId : string ) => emit (' schema-version-toggle' , schema , cardId ),
263+ onSchemaVersionToggle : (schema : Record <string , unknown >, cardId : string ) =>
264+ emit (' schema-version-toggle' , schema , cardId ),
265265 });
266266 },
267267 ' schema-card' : (props ) => {
@@ -273,7 +273,8 @@ const messageRenderers = {
273273 prevSchema: prevSchema .value ,
274274 errorMessagesMap: errorMessagesMap .value ,
275275 messages: messages .value ,
276- onSchemaVersionToggle : (schema : Record <string , unknown >, cardId : string ) => emit (' schema-version-toggle' , schema , cardId ),
276+ onSchemaVersionToggle : (schema : Record <string , unknown >, cardId : string ) =>
277+ emit (' schema-version-toggle' , schema , cardId ),
277278 });
278279 },
279280};
@@ -399,21 +400,45 @@ onUnmounted(() => {
399400 </script >
400401
401402<template >
402- <div class =" tg-chat-container" :class =" { 'dark': TinyGenuiConfig?.theme === 'dark' }" >
403- <div class =" messages-container" ref =" messagesContainer" >
403+ <div
404+ class =" tg-chat-container"
405+ :class =" { 'dark': TinyGenuiConfig?.theme === 'dark' }"
406+ >
407+ <div
408+ class =" messages-container"
409+ ref =" messagesContainer"
410+ >
404411 <tr-bubble-provider :content-renderers =" messageRenderers" >
405- <tr-bubble-list v-if =" showMessages.length" :items =" showMessages" :roles =" roles" auto-scroll > </tr-bubble-list >
412+ <tr-bubble-list
413+ v-if =" showMessages.length"
414+ :items =" showMessages"
415+ :roles =" roles"
416+ auto-scroll
417+ >
418+ </tr-bubble-list >
406419 </tr-bubble-provider >
407420 </div >
408421 <div class =" sender-container" >
409- <div :class =" ['scroll-to-bottom-button', { 'is-generating': generating }]" v-show =" !isLastMessageInBottom"
410- @click =" scrollToBottom" >
422+ <div
423+ :class =" ['scroll-to-bottom-button', { 'is-generating': generating }]"
424+ v-show =" !isLastMessageInBottom"
425+ @click =" scrollToBottom"
426+ >
411427 <IconArrowDown class="icon-arrow-down" />
412428 </div >
413- <tr-sender v-model =" inputMessage"
414- :placeholder =" GeneratingStatus.includes(messageManager.messageState.status) ? '正在思考中...' : '请输入您的问题~'"
415- :clearable =" true" :loading =" GeneratingStatus.includes(messageManager.messageState.status)" :showWordLimit =" true"
416- :maxLength =" 5000" @clear =" clearInputMessage" @submit =" handleSendMessage" @cancel =" messageManager.abortRequest" >
429+ <tr-sender
430+ v-model =" inputMessage"
431+ :placeholder ="
432+ GeneratingStatus.includes(messageManager.messageState.status) ? '正在思考中...' : '请输入您的问题~'
433+ "
434+ :clearable =" true"
435+ :loading =" GeneratingStatus.includes(messageManager.messageState.status)"
436+ :showWordLimit =" true"
437+ :maxLength =" 5000"
438+ @clear =" clearInputMessage"
439+ @submit =" handleSendMessage"
440+ @cancel =" messageManager.abortRequest"
441+ >
417442 </tr-sender >
418443 </div >
419444 </div >
@@ -423,6 +448,10 @@ onUnmounted(() => {
423448.tg-chat-container {
424449 --ti-gen-chat-container-bg-color : #f0f0f0 ;
425450 --thinking-display : initial ;
451+ --sender-bg : url(' ./assets/sender-light.svg' ) no-repeat center ;
452+ --sender-border-color : #e5e5e5 ;
453+ --generating-bg-before : linear-gradient (90deg , #fff , #a2c7f4 );
454+ --generating-bg-after : #fff ;
426455 box-sizing : border-box ;
427456 height : 100% ;
428457 color : var (--tr-text-primary );
@@ -431,9 +460,12 @@ onUnmounted(() => {
431460 display : flex ;
432461 flex-direction : column ;
433462 overflow : auto ;
434-
435463 & .dark {
436464 --ti-gen-chat-container-bg-color : #191919 ;
465+ --sender-bg : url(' ./assets/sender-dark.svg' ) no-repeat center ;
466+ --sender-border-color : #333 ;
467+ --generating-bg-before : linear-gradient (90deg , #262626 , #808080 );
468+ --generating-bg-after : #191919 ;
437469 }
438470}
439471
@@ -464,15 +496,14 @@ onUnmounted(() => {
464496}
465497
466498:deep(.tr-bubble [data- role= ' assistant' ] .tr-bubble__content-items ) {
467-
468499 // 匹配:type非空 + 排除 schema-card/loading-text 这两个值
469- > [type]:not ([type= ' ' ]):not ([type= ' schema-card' ]):not ([type= ' loading-text' ]) {
500+ > [type]:not ([type= ' ' ]):not ([type= ' schema-card' ]):not ([type= ' loading-text' ]) {
470501 display : var (--thinking-display , initial );
471502 }
472503}
473504
474505:deep(.tr-bubble__step-tool ) {
475- & + .tr-bubble__step-tool {
506+ & + .tr-bubble__step-tool {
476507 margin-top : 16px ;
477508 }
478509}
@@ -531,13 +562,15 @@ onUnmounted(() => {
531562 border : 1px solid var (--sender-border-color );
532563 z-index : 1000 ;
533564
534- & > svg {
565+ & > svg {
535566 width : 20px ;
536567 height : 20px ;
537568 }
538569
539570 & :hover {
540- box-shadow : 0px 10px 20px 0px #0000001a , 0px 0px 1px 0px #00000026 ;
571+ box-shadow :
572+ 0px 10px 20px 0px #0000001a ,
573+ 0px 0px 1px 0px #00000026 ;
541574 }
542575
543576 & .is-generating {
@@ -571,7 +604,7 @@ onUnmounted(() => {
571604 z-index : 1 ;
572605 }
573606
574- & > svg {
607+ & > svg {
575608 z-index : 2 ;
576609 }
577610 }
0 commit comments