ZuzJS UI

ZuzJS

UI

v1.0.71

⌃K

Concepts

Overview

Composition

Layout

Accordion

Alert

Auto Complete

Avatar

Badge

Box

Button

Calendar

Chart

ChatBubble

ChatList

Checkbox

ColorScheme

ContextMenu

CookiesConsent

Cover

Cropper

Crumb

DatePicker

Dialog

Drawer

Fab

Filters

Form

Group

Icon

Image

Input

KeyboardKeys

Label

List

NetworkStatus

Overlay

Pagination

Password

PinInput

ProgressBar

Radio

ScrollView

Slider

Search

SelectTabs

Select

Sheet

Slider

Span

Spinner

Switch

Table

TabView

Text

TextArea

TextWheel

Toast

Tooltip

Treeview

On this page

  • Overview
  • Basic Anatomy

ChatList

Documentation for ChatList component

ChatList

1 <ChatList messages={messages} />

Usage

import { ChatList } from "@zuzjs/ui"
<ChatList messages={messages} />

Props

Prop
Type
Required
Description
messages
ChatMessage[]
Yes
Chat message list (Bubble props shape)
autoScroll
boolean
—
Auto-scroll to bottom on new messages
onScrollTop
() => void
—
Triggered when user reaches top
typing
boolean | string
—
Typing indicator text/flag
dateLabels
{ today?: ReactNode, yesterday?: ReactNode }
—
Localized date labels
locale
string
—
Locale used for older date formatting
formatDateLabel
(timestamp, context) => ReactNode
—
Custom date-group label formatter

Examples

Basic Chat List

<ChatList
messages={[
{ id: 1, side: "you", text: "Hey" },
{ id: 2, side: "me", text: "Hello" }
]}
/>

Typing Indicator

<ChatList messages={messages} typing />
<ChatList messages={messages} typing="Ali is typing..." />

Date Labels (English + Urdu)

<ChatList
messages={messages}
dateLabels={{
today: "Today",
yesterday: "Yesterday"
}}
/>
<ChatList
messages={messages}
locale="ur-PK"
dateLabels={{
today: "آج",
yesterday: "کل"
}}
/>

Custom Date Formatter

<ChatList
messages={messages}
locale="en-US"
formatDateLabel={(ts, { dayDiff, date, labels, locale }) => {
if (dayDiff === 0) return labels.today;
if (dayDiff === 1) return labels.yesterday;
return new Intl.DateTimeFormat(locale || "en-US", {
weekday: "short",
month: "short",
day: "numeric",
year: "numeric"
}).format(date);
}}
/>