Skip to content

Commit 756bb33

Browse files
committed
fix(ChatMessage): prevent content leak and guard content wrapper
1 parent 50930c4 commit 756bb33

3 files changed

Lines changed: 5 additions & 9 deletions

File tree

src/runtime/components/ChatMessage.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ const uiProp = useComponentUI('chatMessage', props)
7979
const fileParts = computed(() => props.parts?.filter((part): part is FileUIPart => part.type === 'file') ?? [])
8080
const textParts = computed(() => props.parts?.filter((part): part is TextUIPart => part.type === 'text') ?? [])
8181
82-
const messageProps = computed(() => omit(props, ['as', 'icon', 'avatar', 'variant', 'side', 'actions', 'compact', 'class', 'ui']))
82+
const messageProps = computed(() => omit(props, ['as', 'icon', 'avatar', 'variant', 'side', 'actions', 'compact', 'class', 'ui', 'content']))
8383
8484
const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.chatMessage || {}) })({
8585
variant: props.variant,
@@ -104,8 +104,8 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.chatMessage
104104
</slot>
105105
</div>
106106

107-
<div v-if="content || parts.length || !!slots.content" data-slot="content" :class="ui.content({ class: uiProp?.content })">
108-
<slot name="content" v-bind="messageProps">
107+
<div v-if="content || textParts.length || !!slots.content" data-slot="content" :class="ui.content({ class: uiProp?.content })">
108+
<slot name="content" v-bind="{ ...messageProps, content }">
109109
<template v-if="content">
110110
{{ content }}
111111
</template>

test/components/__snapshots__/ChatMessage-vue.spec.ts.snap

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,7 @@ exports[`ChatMessage > renders with files slot correctly 1`] = `
8282
<div data-slot="files" class="flex items-center gap-1.5 mb-1.5">Files slot</div>
8383
<div data-slot="container" class="relative flex items-start gap-3 pb-8">
8484
<!--v-if-->
85-
<div data-slot="content" class="relative text-pretty min-w-0 *:first:mt-0 *:last:mb-0 space-y-4">Hello, how are you?
86-
<!--v-if-->
87-
</div>
85+
<div data-slot="content" class="relative text-pretty min-w-0 *:first:mt-0 *:last:mb-0 space-y-4">Hello, how are you?</div>
8886
<!--v-if-->
8987
</div>
9088
</article>"

test/components/__snapshots__/ChatMessage.spec.ts.snap

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,7 @@ exports[`ChatMessage > renders with files slot correctly 1`] = `
8282
<div data-slot="files" class="flex items-center gap-1.5 mb-1.5">Files slot</div>
8383
<div data-slot="container" class="relative flex items-start gap-3 pb-8">
8484
<!--v-if-->
85-
<div data-slot="content" class="relative text-pretty min-w-0 *:first:mt-0 *:last:mb-0 space-y-4">Hello, how are you?
86-
<!--v-if-->
87-
</div>
85+
<div data-slot="content" class="relative text-pretty min-w-0 *:first:mt-0 *:last:mb-0 space-y-4">Hello, how are you?</div>
8886
<!--v-if-->
8987
</div>
9088
</article>"

0 commit comments

Comments
 (0)