import * as React from "react"; export type ChatMessageStatus = "sending" | "sent" | "delivered" | "read" | "failed"; export type ChatAttachmentData = { key: string; name: string; size?: React.ReactNode; type?: React.ReactNode; href?: string; preview?: string; }; export type ChatParticipant = { name: string; avatar?: string; fallback?: React.ReactNode; status?: "online" | "offline" | "busy" | "away"; }; export type ChatShellProps = React.ComponentProps<"section"> & { sidebar?: React.ReactNode; details?: React.ReactNode; }; declare function ChatShell({ sidebar, details, children, className, ...props }: ChatShellProps): React.JSX.Element; export type ChatHeaderProps = React.ComponentProps<"header"> & { participant: ChatParticipant; description?: React.ReactNode; actions?: React.ReactNode; }; declare function ChatHeader({ participant, description, actions, className, ...props }: ChatHeaderProps): React.JSX.Element; export type ConversationItem = { key: string; participant: ChatParticipant; preview?: React.ReactNode; time?: React.ReactNode; unread?: number; muted?: boolean; pinned?: boolean; }; export type ConversationListProps = Omit, "onSelect"> & { items: ConversationItem[]; selectedKey?: string; defaultSelectedKey?: string; onSelect?: (item: ConversationItem) => void; searchable?: boolean; searchPlaceholder?: string; empty?: React.ReactNode; }; declare function ConversationList({ items, selectedKey, defaultSelectedKey, onSelect, searchable, searchPlaceholder, empty, className, ...props }: ConversationListProps): React.JSX.Element; export type ChatMessageListProps = React.ComponentProps<"div"> & { autoScroll?: boolean; empty?: React.ReactNode; }; declare function ChatMessageList({ autoScroll, empty, children, className, ...props }: ChatMessageListProps): React.JSX.Element; export type ChatAttachmentProps = React.ComponentProps<"div"> & Omit & { attachmentKey?: string; onRemove?: () => void; }; declare function ChatAttachment({ name, size, type, href, preview, onRemove, attachmentKey: _attachmentKey, className, ...props }: ChatAttachmentProps): React.JSX.Element; export type ChatMessageProps = React.ComponentProps<"article"> & { participant?: ChatParticipant; outgoing?: boolean; time?: React.ReactNode; status?: ChatMessageStatus; replyTo?: React.ReactNode; attachments?: ChatAttachmentData[]; reactions?: Array<{ key: string; label: React.ReactNode; count?: number; active?: boolean; }>; onReaction?: (key: string) => void; actions?: React.ReactNode; }; declare function ChatMessage({ participant, outgoing, time, status, replyTo, attachments, reactions, onReaction, actions, children, className, ...props }: ChatMessageProps): React.JSX.Element; declare function ChatTypingIndicator({ participant, className, ...props }: React.ComponentProps<"div"> & { participant?: ChatParticipant; }): React.JSX.Element; export type ChatComposerProps = Omit, "onSubmit"> & { value?: string; defaultValue?: string; onValueChange?: (value: string) => void; onSend: (value: string) => void | Promise; placeholder?: string; disabled?: boolean; sending?: boolean; attachments?: ChatAttachmentData[]; onRemoveAttachment?: (key: string) => void; onAttachmentClick?: () => void; onEmojiClick?: () => void; maxLength?: number; submitLabel?: string; }; declare function ChatComposer({ value, defaultValue, onValueChange, onSend, placeholder, disabled, sending, attachments, onRemoveAttachment, onAttachmentClick, onEmojiClick, maxLength, submitLabel, className, ...props }: ChatComposerProps): React.JSX.Element; declare function ChatHeaderActions(): React.JSX.Element; export { ChatAttachment, ChatComposer, ChatHeader, ChatHeaderActions, ChatMessage, ChatMessageList, ChatShell, ChatTypingIndicator, ConversationList, };