N/A

ChatMessage

Render an individual chat message bubble with AI SDK parts, actions, and layout control.

Hello! How can I help you today?

Can you explain what Vue composables are?

Installation

pnpm dlx shadcn-vue@latest add "https://ui.stackhacker.io/r/chat-message.json"

Usage

<script setup lang="ts">
import { Copy } from '@lucide/vue'
import { ChatMessage } from '@/components/chat-message'

const actions = [
  { label: 'Copy message', icon: Copy }
]
</script>

<template>
  <ChatMessage
    id="1"
    role="assistant"
    :parts="[{ type: 'text', text: 'Hello!' }]"
    side="left"
    :actions="actions"
  />
</template>

Examples

Default

Hello! How can I help you today?

Can you explain what Vue composables are?

API Reference

Props

PropTypeDefaultDescription
idstringMessage ID.
role'user' | 'assistant' | 'system'Message role.
partsUIMessage['parts']Message parts from AI SDK.
side'left' | 'right''left'Which side to render the message.
actionsChatMessageAction[][]Action buttons shown on hover. Each icon is a Vue component and each label is used for the tooltip and accessible button name.
classstringAdditional CSS classes.

Slots

SlotPropsDescription
leadingContent rendered before the message (e.g., avatar).
content{ id, role, parts }Custom message content renderer.

Types

interface ChatMessageAction {
  label: string
  icon: Component
  onClick?: (e: MouseEvent, message: UIMessage) => void
}