Message
Avatar, ad, balonlar ve durum içeren bir sohbet mesajı satırı; yeni mesajlar göndericinin tarafından yukarı doğru belirir.
pnpm dlx shadcn@latest add https://hextaui.com/r/message.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @base-ui/react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/message.tsx components/ui/bubble.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Bir mesaj; bir avatarı, bir adı, bir veya daha fazla <Bubble />'i ve bir durum satırını dizer. Balonlar mesajın align değerini devralır, böylece bir kez ayarlarsınız.
Hizalama
align="end" kendi mesajlarınız için avatarı ve balonları diğer tarafa koyar.
Üst ve alt bilgi
<MessageHeader /> ad ve zamanı, <MessageFooter /> ise tek satırlık bir durumu tutar. Avatar, alt bilgi olsa da olmasa da her zaman son balonla hizalanır.
Asistan
ghost balon uzun cevaplar için tam genişliği kaplar, <MessageAvatar /> içindeki bir simge ise yuvarlak bir kutucuğa dönüşür.
Uzun içerik
Balonlar uzun bağlantıları sarar; üst ve alt bilgi metni avatarı itmeden kısaltılabilir.
Sağdan sola
Başlangıç ve bitiş taraf değiştirir, yeni mesajlar eşleşen köşeden büyür.
- Mesajlar düz içeriktir. Canlı bir sohbet için listeyi bir
role="log"öğesiyle sarın; böylece ekran okuyucular yeni mesajları geldikçe okur. - Hizalama tek başına mesajı kimin yazdığını söylemediği için gönderenin adını bir başlığa veya görsel olarak gizli metne koyun.
- Giriş animasyonu yalnızca liste ilk işlendikten sonra eklenen mesajlar için oynar. Azaltılmış harekette solarak girerler.
Her parça bir <div> işler ve render kabul eder.
Konuşma. İlk işlemeden sonra eklenen mesajlar animasyonla girer.
| Öznitelik | Açıklama |
|---|---|
data-slot="message-group" | CSS'te konuşmayı hedefler. |
| Prop | Tür | Varsayılan |
|---|---|---|
alignKonuşmanın tarafı. Balonlar bunu devralır. | "start" | "end" | "start" |
animatedİlk işlemeden sonra bir MessageGroup'a eklendiğinde yukarı doğru belirir. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="message" | CSS'te mesajları hedefler. |
data-align | Taraf. |
data-entering | Animasyonla giren mesajlarda bulunur. |
| Öznitelik | Açıklama |
|---|---|
data-slot="message-avatar" | Son balonla hizalanır. Çıplak bir simge veya görsel 32px'e boyutlandırılır. |
| Öznitelik | Açıklama |
|---|---|
data-slot="message-content" | Başlığı, balonları ve alt bilgiyi üst üste dizer. |
| Öznitelik | Açıklama |
|---|---|
data-slot="message-header" | Balonların üstünde ad ve zaman. |
data-slot="message-footer" | Altta tek satırlık durum. Avatar hizalı kalsın diye tek satırda tutun. |
- BubbleVaryantlı, köşeleri gruplanmış, tepkileri olan ve etkileşimli içeriğe yer açan sohbet mesajı balonları.
- AvatarBaş harf yedekli kullanıcı fotoğrafları, durum rozetleri ve sayıya daralan yığılmış gruplar.
- AttachmentYüklemeler için dosya ve görsel kartları; ilerleme, durumlar, eylemler, tüm kartı kaplayan bir tetikleyici ve uzantısını koruyan adlar içerir.
- Markerİçerik arasında tarih ayırıcıları ve sistem olayları gibi sessiz notlar; Bugün ya da Dün olarak okunan yapışkan tarih ve saatler içerir.
- Message scrollerYeni mesajları takip eden, geriye doğru okurken yerinizi koruyan ve kaçırdıklarınızı atlama düğmesinde sayan bir sohbet kaydırma alanı.
Kullanıldığı bloklar
Message üzerine kurulan bloklar.
- Prompt InputTek sakin bir satır olarak başlayan, yazdıkça karta dönüşen ve konuşma başladığında aşağı inen bir sohbet yazma alanı. Enter gönderir; Japonca ve Çince girişle de güvenle çalışır. Dosyaları yapıştırın, bırakın ya da seçin; önizleme, ilerleme ve yeniden deneme desteği vardır. @ dosya ekler, / ise imleçte açılan bir menüden komut çalıştırır. Sayı tuşlarıyla çalışan bir model seçici, Max'ta canlanan bir efor kaydırıcısı, bir bağlam halkası, canlı dalga biçimli dikte, araç çipleri, yanıt akarken yazılan mesajlar için bir kuyruk ve yeniden yüklemeden sağ çıkan taslaklar.
- Agent TodosBir ajanın planını çalışırken gösterin. Her adım backlog'dan yapılacak, devam eden ve tamamlanana ilerler; canlı süreler, başarısızlıklar ve arkasındaki araç çağrıları ile birlikte. Yazma alanının üstü için bir durum hapı, görebildiğiniz plan değişiklikleri ve çalışmadan önce planı düzenlemek için bir gözden geçirme adımı.
- Chat SidebarBir sohbet uygulaması için kenar çubuğu. Üstte logo, arama ve Yeni sohbet, altında kendi bağlantılarınız, sabitlenmiş sohbetler, sohbetlerini göstermek için genişleyen projeler, güne göre gruplanmış son sohbetler ve hover ile sağ tık menüleri, satır içi yeniden adlandırma, geri alınabilir silme ve canlı yanıt durumları olan satırlar.
- Chat ThreadYazma alanının çevresindeki tüm konuşma. Yanıt akarken sorunuz üstte sabitlenir, yandaki kontrol noktaları mesajlar arasında atlar ve her yanıt kopyalanabilir, düzenlenebilir, yeniden denenebilir, puanlanabilir ve sürümler arasında değiştirilebilir. Yanıtlar kod blokları, tablolar ve alıntılarla Markdown olarak render edilir; düşünme, araç çağrıları ve Prompt Input doğrudan yerine oturur.