MindeesUI
Blocks

Social blocks

Thirteen accessible social blocks for chat, comments, and engagement — bubbles, composer, voice messages, reactions, follow and like buttons. Pure UI, no sockets.

Messaging and engagement blocks composed from MindeesUI primitives. Blocks never open sockets, fetch, or store — conversation data and interactions flow through props and callbacks.

Import

import {
  ChatList,
  ChatBubble,
  MessageComposer,
  VoiceMessage,
  TypingIndicator,
  ReadReceipt,
  NotificationItem,
  CommentBox,
  CommentsList,
  LikeButton,
  ReactionButton,
  FollowButton,
  ReportContentModal,
} from '@mindees/blocks';

Usage

<>
  <ChatBubble text="On my way" mine time="09:41" status="read" />
  <ChatBubble text="See you soon!" time="09:42" />
  <MessageComposer onSend={(text) => send(text)} onAttach={pickFile} />
</>

Blocks

ChatList

FlatList of conversation rows (avatar, name, preview, unread badge).

PropTypeDescription
conversationsreadonly Conversation[]Conversations to render.
onPressConversation(id: string) => voidCalled with the conversation id on press.
ListEmptyComponentFlatList['ListEmptyComponent']Rendered when empty.
scrollEnabledbooleanDisable internal scrolling when nested.

ChatBubble

A single message bubble, aligned by ownership with an optional delivery status.

PropTypeDescription
textstringMessage body text.
minebooleanAligns right with the accent surface (own message).
timestringPre-formatted timestamp, e.g. "09:41".
statusChatBubbleStatusDelivery status; only meaningful for own messages.

MessageComposer

Text input row with send and an optional attach button.

PropTypeDescription
onSend(text: string) => voidCalled with the trimmed text on send.
onAttach() => voidShows an attach button when provided.
placeholderstringInput placeholder. Defaults to "Message".
disabledbooleanDisable the whole composer.
sendLabelstringSend button a11y label. Defaults to "Send message".
attachLabelstringAttach button a11y label. Defaults to "Add attachment".

VoiceMessage

Voice-note player with play/pause and a progress bar.

PropTypeDescription
durationstringPre-formatted total duration, e.g. "0:42".
playingbooleanWhether playback is active.
onTogglePlay() => voidCalled when play/pause is pressed.
progressnumberPlayback progress 0–1; omit for an idle bar.
disabledbooleanDisable the control.

TypingIndicator

Animated dots with an optional "{name} is typing…" label.

PropTypeDescription
namestringName shown as "{name} is typing…"; dots only when omitted.

ReadReceipt

Compact delivery-state glyph for a message.

PropTypeDescription
statusReadReceiptStatusCurrent delivery state.

NotificationItem

Single notification row with icon, text, and timestamp.

PropTypeDescription
notificationNotificationDataNotification to render.
onPress(id: string) => voidCalled with the notification id on press.

CommentBox

Composer for posting a comment with an avatar.

PropTypeDescription
onPost(text: string) => voidCalled with the trimmed comment text.
avatarUristringAvatar of the commenting user.
namestringDisplay name for fallback initials.
placeholderstringInput placeholder. Defaults to "Add a comment…".
disabledbooleanDisable the whole box.
postLabelstringPost button label. Defaults to "Post".

CommentsList

FlatList of comments with a per-comment like toggle.

PropTypeDescription
commentsreadonly Comment[]Comments to render.
onLike(id: string, next: boolean) => voidCalled when a comment's like is toggled.
ListEmptyComponentFlatList['ListEmptyComponent']Rendered when empty.
scrollEnabledbooleanDisable internal scrolling when nested.

LikeButton

Toggleable like with an optional count.

PropTypeDescription
likedbooleanWhether the viewer has liked.
countnumberTotal like count; hidden when undefined.
onToggle(next: boolean) => voidCalled with the next liked state.
disabledbooleanDisable interaction.

ReactionButton

Trigger that opens a reaction picker and reflects the selected reaction.

PropTypeDescription
reactionsreadonly ReactionOption[]Available reactions to choose from.
valuestringCurrently selected reaction key.
onReact(key: string) => voidCalled with the chosen reaction key.
triggerLabelstringLabel when nothing is selected. Defaults to "React".
disabledbooleanDisable interaction.

FollowButton

Follow/following toggle with a loading state.

PropTypeDescription
followingbooleanWhether the viewer currently follows.
onToggle(next: boolean) => voidCalled with the next following state.
loadingbooleanShows a spinner while a request is in flight.
disabledbooleanDisable interaction.
followLabelstringLabel when not following. Defaults to "Follow".
followingLabelstringLabel when following. Defaults to "Following".

ReportContentModal

Dialog for choosing a report reason and submitting.

PropTypeDescription
visiblebooleanControls visibility.
reasonsreadonly ReportReason[]Available reasons to choose from.
onSubmit(key: string) => voidCalled with the selected reason key.
onClose() => voidCalled on dismiss without submitting.
titlestringDialog title. Defaults to "Report content".
descriptionstringSupporting line under the title.
submitLabelstringSubmit label. Defaults to "Submit report".
cancelLabelstringCancel label. Defaults to "Cancel".

All blocks also accept a style prop spread onto the root container.

On this page