Bubble
Varyantlı, köşeleri gruplanmış, tepkileri olan ve etkileşimli içeriğe yer açan sohbet mesajı balonları.
pnpm dlx shadcn@latest add https://hextaui.com/r/bubble.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/bubble.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Varyantlar
Güçlü bir primary balondan asistan yanıtları için çerçevesiz ghost içeriğe kadar yedi görünüm. destructive yüzeyi tonlar ve içindeki simgeleri renklendirir.
Hizalama
align="end" bir balonu, geçerli kullanıcının mesajları için satırın sonuna iter. Okuma yönünü izler.
Group
Aynı göndericinin ardışık mesajlarını <BubbleGroup /> içine sarın. Gönderen tarafındaki köşeler sıkılaşır; böylece dizi tek blok gibi okunur, tek başına bir balon ise tamamen yuvarlak kalır.
Şekiller
Bir grubun tüm balonlarını stillemek için grup üzerinde ya da tek bir balonda shape ayarlayın. Varsayılan joined'dır.
Kuyruk
shape="tail" bir dizinin son balonuna balon rengiyle eşleşen bir kuyruk çizer. Outline ve ghost balonlar bunu atlar.
Tepkiler
<BubbleReactions /> balon kenarıyla çakışır ve kendi alanını ayırır; bu yüzden sonraki satır için ek boşluk gerekmez. Statik bir satıra role="img" ve bir etiket verin veya etkileşimli tepkiler için düğmeler kullanın.
Daha fazla göster
Uzun mesajları katlamak için balon içeriği olarak bir <Collapsible /> oluşturun. Balon düzgünce büyür ve gizli metin aranabilir kalır.
Tooltip
Okunma zamanı gibi ayrıntıları göstermek için bir balonu tooltip trigger'ı olarak oluşturun. Klavye kullanıcılarının ulaşabilmesi için tabIndex ekleyin.
Popover
Tüm balonu bir popover trigger'ı yapmak için içeriği bir <button> olarak oluşturun; örneğin başarısız bir teslimatı açıklamak için.
Uzun içerik
Kırılmayan dizeler, URL'ler, emojiler ve CJK metni, dar bir sütunu aşmak yerine balonun içinde sarar.
İç içe yanıt
Başka bir balonun içindeki alıntılanmış bir balon, yarıçaplarını üst öğesiyle eş merkezli tutar.
Sağdan sola
Hizalama, birleşik köşeler, kuyruklar ve tepkilerin tümü sağdan sola düzenlerde yansıtılır.
- Balonlar düz kapsayıcılardır. Yeni mesajların duyurulmasını istiyorsanız bir konuşmayı bir listeye veya
role="log"bölgesine sarın. - Yalnızca emojiden oluşan tepki satırları
role="img"ve tepkileri tek tek belirten biraria-labelgerektirir. - Düğme veya bağlantı olarak oluşturulan etkileşimli içerik, balonun köşelerini izleyen bir odak halkası alır.
Her parça varsayılan olarak bir <div> oluşturur ve onun niteliklerini, ayrıca öğeyi değiştirmek için bir render prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
variant | "default" | "secondary" | "muted" | "tinted" | "outline" | "ghost" | "destructive" | "default" |
align | "start" | "end" | "start" |
shapeAyarlanmazsa BubbleGroup'tan devralınır. | "uniform" | "joined" | "tail" | "joined" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="bubble" | CSS'te balonları hedefleyin. |
data-variant | Geçerli varyant. |
data-align | Geçerli hizalama. |
data-shape | Çözümlenen şekil. |
--bubble-bg | Kuyruğun da kullandığı yüzey rengi. |
--bubble-fg | Metin rengi. |
--bubble-border | Halka rengi. |
--bubble-radius | Köşe yarıçapı. |
--bubble-radius-joined | Gruplanmış balonlar arasında kullanılan daha dar yarıçap. |
--bubble-accent | İçerik içindeki simge rengi. destructive tarafından ayarlanır. |
| Prop | Tür | Varsayılan |
|---|---|---|
renderEtkileşimli yapmak için bir <button> veya <a> oluşturun. | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="bubble-content" | CSS'te balon yüzeyini hedefleyin. |
| Prop | Tür | Varsayılan |
|---|---|---|
shapeGrubun içindeki her balona uygulanır. | "uniform" | "joined" | "tail" | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="bubble-group" | CSS'te grupları hedefleyin. |
data-shape | Ayarlanmışsa grubun şekli. |
| Prop | Tür | Varsayılan |
|---|---|---|
side | "top" | "bottom" | "bottom" |
align | "start" | "end" | "end" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="bubble-reactions" | CSS'te tepki satırlarını hedefleyin. |
data-side | Geçerli taraf. |
data-align | Geçerli hizalama. |
- 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.
- MessageAvatar, ad, balonlar ve durum içeren bir sohbet mesajı satırı; yeni mesajlar göndericinin tarafından yukarı doğru belirir.
- 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
Bubble ü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.