Chat Messagev1.0.0

ردیف یک پیام در گفتگو. پیام کاربر (role="user") حباب‌دار و سمت پایانِ صفحه می‌نشیند؛ پاسخ مدل (role="assistant") بدون حباب، سمت آغاز، مثل الگوی رایج Claude/ChatGPT، چون پاسخ‌ها معمولاً بلندند و حباب فقط شلوغش می‌کند.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API — هنوز برای این کامپوننت پورت نشدهSvelte ۵ با runes — هنوز برای این کامپوننت پورت نشدهانگولار با signals و دایرکتیوهای standalone — هنوز برای این کامپوننت پورت نشده

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

چطور می‌تونم توی Next.js یه API route برای آپلود فایل بسازم؟
د
یک Route Handler در app/api/upload/route.ts بسازید و request.formData() را بخوانید؛ فایل را از آن استخراج و در دیسک یا یک سرویس ذخیره‌سازی بنویسید.

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگی‌ها و فایل‌ها خودکار اضافه می‌شوند.

پکیج‌منیجر پیش‌فرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/chat-message.json
pnpm dlx digdesign@latest add https://docs.digdesign.ir/r/chat-message.json
yarn dlx digdesign@latest add https://docs.digdesign.ir/r/chat-message.json
bunx --bun digdesign@latest add https://docs.digdesign.ir/r/chat-message.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

استفاده

import {
  ChatMessage,
  ChatMessageAvatar,
  ChatMessageContent,
  ChatMessageBubble,
} from "@/components/ui/chat-message"

<ChatMessage role="user">
  <ChatMessageAvatar name={user.name} src={user.avatarUrl} />
  <ChatMessageContent>
    <ChatMessageBubble>{message.text}</ChatMessageBubble>
  </ChatMessageContent>
</ChatMessage>

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

ترکیب اجزا

ChatMessageAvatar رویِ خودِ Avatar است، پس همان props (name، src، icon) را می‌گیرد؛ رنگش خودکار از روی role پیام تنظیم می‌شود.

ChatMessageBubble فقط برای role="user" پس‌زمینه می‌گیرد؛ برای assistant متنِ ساده است؛ اگر پاسخِ مدل شامل استدلال هم هست، Thinking را قبل از آن داخل ChatMessageContent بگذارید.

ChatMessageActions پیش‌فرض نامرئی است و فقط با هاور روی کل ردیف پیام (یا فوکوس کیبورد) آشکار می‌شود؛ دقت صفحه را برای متنِ پیام نگه می‌دارد.

دسترس‌پذیری

  • هر دکمهٔ عمل با aria-label و Tooltip مشخص می‌شود، چون فقط آیکون دارد.
  • آشکارشدنِ دکمه‌های عمل با focus-within هم کار می‌کند، نه فقط هاور موس؛ کاربر کیبورد هم به آن‌ها می‌رسد.

مرجع API

ChatMessage

ویژگینوعپیش‌فرضتوضیح
role"user" | "assistant"—جهت و ظاهرِ کل ردیف را تعیین می‌کند.

ChatMessageActions

ویژگینوعپیش‌فرضتوضیح
reveal"hover" | "always""hover"hover: کنش‌ها فقط با هاور یا فوکوس دیده می‌شوند؛ always: همیشه، برای پاسخِ آخر.

ChatMessageAction

ویژگینوعپیش‌فرضتوضیح
labelstring—هم aria-label دکمه و هم متنِ Tooltip.

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.