← All @molecule/* packages · App templates
@molecule/app-message-preview-reactFeature · message-preview · App (browser) · v1.0.1 · Apache-2.0
Conversation row with avatar + unread pip + presence dot
npm install @molecule/app-message-preview-react@molecule/app-message-preview-react is a ready-made message-preview feature for the app (browser) side. It composes the core interfaces it needs, so it works with whichever providers your app has bonded.
import { MessagePreview } from '@molecule/app-message-preview-react'
;<MessagePreview
name="Maya Patel"
preview="Thanks! That fixed it."
timestamp="2m"
unread={3}
presence="online"
channelIcon="mail"
active={activeThreadId === 't1'}
to="/conversation/t1"
/>Works with: @molecule/app-react, @molecule/app-ui, @molecule/app-ui-react
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
@molecule/app-message-preview-react — conversation / thread row for chat /
inbox sidebars. Initials avatar with presence dot, name + preview + timestamp
Exports <MessagePreview> and the MessagePreviewPresence type. Props:
name, preview, timestamp, unread? (0 hides the pip), presence?
('online' | 'away' | 'offline'), active?, channelIcon? (Material Symbols
ligature name), initials? (override the initials derived from name),
to? (render as a router <Link>), onClick?, unreadAriaLabel?,
className?.
Extracted from the customer-support-chat ConversationListItem and its near-identical siblings in ai-customer-service-bot, ai-voice-assistant, and team-chat.
import { MessagePreview } from '@molecule/app-message-preview-react'
;<MessagePreview
name="Maya Patel"
preview="Thanks! That fixed it."
timestamp="2m"
unread={3}
presence="online"
channelIcon="mail"
active={activeThreadId === 't1'}
to="/conversation/t1"
/>
feature
npm install @molecule/app-message-preview-react @molecule/app-react @molecule/app-ui @molecule/app-ui-react react react-router
npm install -D @types/react
MessagePreviewPropsProps for {@link MessagePreview}.
interface MessagePreviewProps {
name: ReactNode
preview: ReactNode
timestamp: ReactNode
/** Unread count — 0 hides the pip. */
unread?: number
presence?: MessagePreviewPresence | null
active?: boolean
/** Material-symbols icon name (e.g. mail / chat / phone) shown ahead of the preview. */
channelIcon?: string
/** Override the initials computed from `name`. */
initials?: string
/** Optional href; when set, the row renders as a router link. */
to?: string
onClick?: () => void
unreadAriaLabel?: string
className?: string
}
MessagePreviewPresencePresence state of the contact shown in the avatar dot.
type MessagePreviewPresence = 'online' | 'away' | 'offline'
MessagePreview(props)Conversation / thread preview row. Renders as a <Link> when to is
provided (requires a react-router <Router> ancestor), otherwise as a
<div>.
function MessagePreview({
name,
preview,
timestamp,
unread = 0,
presence,
active = false,
channelIcon,
initials,
to,
onClick,
unreadAriaLabel,
className,
}: MessagePreviewProps): JSX.Element
props — Component props (see {@link MessagePreviewProps}).Peer dependencies:
@molecule/app-react ^1.0.1@molecule/app-ui ^1.0.1@molecule/app-ui-react ^1.0.1react ^18.0.0 || ^19.0.0react-router ^7.0.0 || ^8.0.0@molecule/app-react
@molecule/app-ui
@molecule/app-ui-react
react
react-router
channelIcon renders a material-symbols-outlined glyph: the Material
Symbols font must be loaded by the app (molecule scaffolds include it) or
the icon shows as literal text like "mail".
to renders a react-router-dom <Link> — it requires a <Router> ancestor
and the react-router-dom peer; omit to (use onClick) in router-less apps.
The avatar is initials-only (no image URL prop). Initials are derived from
name only when it is a plain string — pass initials when name is a
ReactNode.
Styling uses Tailwind utility classes + molecule theme tokens (primary,
surface, --color-border-secondary) — it only looks right under the
Tailwind ClassMap bond with the molecule base theme; presence dots are fixed
green/amber/grey hex colors.
The unread pip's accessible label defaults to English "N unread" — pass
unreadAriaLabel (via t()) in localized apps; the component has no
companion locale bond.
timestamp renders verbatim — pre-format ("2m", "Yesterday") yourself.