@@ -59,17 +59,23 @@ export interface ChatMessagesProps {
5959 ui? : ChatMessages [' slots' ]
6060}
6161
62+ type ChatSlotMessageProps = ChatMessageProps & {
63+ message? : UIMessage
64+ slots? : {
65+ [K in keyof ChatMessageSlots ]? : ExtendSlotWithVersion <K >
66+ }
67+ }
68+
6269type ExtendSlotWithVersion <K extends keyof ChatMessageSlots >
6370 = ChatMessageSlots [K ] extends (props : infer P ) => any
6471 ? (props : P & { message: UIMessage }) => any
6572 : ChatMessageSlots [K ]
6673
67- export type ChatMessagesSlots = {
68- [K in keyof ChatMessageSlots ]: ExtendSlotWithVersion <K >
69- } & {
70- default(props ? : {}): any
71- indicator(props : { ui: ChatMessages [' ui' ] }): any
72- viewport(props : { ui: ChatMessages [' ui' ], onClick: () => void }): any
74+ export type ChatMessagesSlots = ChatSlotMessageProps [' slots' ] & {
75+ default? (): any
76+ indicator? (props : { ui: ChatMessages [' ui' ] }): any
77+ viewport? (props : { ui: ChatMessages [' ui' ], onClick: () => void }): any
78+ message? (props : ChatSlotMessageProps ): any
7379}
7480
7581 </script >
@@ -293,19 +299,18 @@ onMounted(() => {
293299 :style =" { '--last-message-height': `${lastMessageHeight}px` }"
294300 >
295301 <slot >
296- <UChatMessage
297- v-for = " message in messages "
298- :key = " message.id "
299- v-bind =" { ...message, ...(message.role === 'user' ? userProps : assistantProps) }"
300- :ref =" (el) => registerMessageRef(message.id, el as ComponentPublicInstance )"
301- :compact = " compact "
302- >
303- < template v-for = " ( _ , name ) in getProxySlots () " #[ name ] =" slotData " >
304- <slot :name = " name " v-bind = " (slotData as any) " :message = " message " / >
305- </template >
306- </UChatMessage >
302+ <template v-for = " message in messages " : key = " message . id " >
303+ < component
304+ :is = " $slots. message ? $slots.message : UChatMessage "
305+ v-bind =" { ...message, ...(message.role === 'user' ? userProps : assistantProps), compact, message, slots: getProxySlots( ) }"
306+ :ref =" (el: ComponentPublicInstance ) => registerMessageRef(message.id, el)"
307+ >
308+ < template v-for = " ( _ , name ) in getProxySlots () " #[ name ]= " slotData " >
309+ < slot :name = " name" v-bind =" slotData" :message = " message " / >
310+ </ template >
311+ </component >
312+ </template >
307313 </slot >
308-
309314 <UChatMessage
310315 v-if =" status === 'submitted'"
311316 id =" indicator"
0 commit comments