import * as react_jsx_runtime from 'react/jsx-runtime'; import { i as AiConvListItemData, h as AiConvFilterTab, c as AiConvChannelFilter, n as AiConvStatus, k as AiConvMessage, b as AiConvChannel, l as AiConvMessageRole, e as AiConvDataField, d as AiConvContact, a as AiConvAppointmentData, A as AiConvAdvisor, m as AiConvMode, f as AiConvEmailPayload } from '../../../thread-C6KOGQPu.js'; export { r as AiConvAttachment, g as AiConvFieldConfidence, s as AiConvMeetingActionItem, j as AiConvMeetingType, C as ChatComposer, o as ChatComposerProps, p as ChatThread, q as ChatThreadProps } from '../../../thread-C6KOGQPu.js'; interface ConversationStatusChipProps { status: AiConvStatus; showDot?: boolean; className?: string; } declare function ConversationStatusChip({ status, showDot, className, }: ConversationStatusChipProps): react_jsx_runtime.JSX.Element; interface ConversationListItemProps { data: AiConvListItemData; isActive?: boolean; /** * Visual variant: "panel" (default) is the 3-row sidebar card used by the * Conversations inbox; "row" is a single-line, Gmail-style row (name · * subject · snippet · timestamp) for full-width embedded lists where the * user drills into a thread instead of using a side panel. */ variant?: "panel" | "row"; onClick?: (id: string) => void; onRead?: (id: string) => void; } declare function ConversationListItem({ data, isActive, variant, onClick, onRead, }: ConversationListItemProps): react_jsx_runtime.JSX.Element; interface ConversationListProps { conversations: AiConvListItemData[]; activeId?: string; /** * Embedded mode for contexts scoped to a handful of conversations (e.g. * one opportunity's applicants): swaps the search + filter-tab chrome for * a slim labelled header (overline label + count badge) and lists every * conversation unfiltered. Defaults to false. */ compact?: boolean; /** Header label shown in compact mode. Defaults to "Conversations". */ compactLabel?: string; /** * Shows a "New Email" button in the compact header when set. For scoped * contexts (e.g. one opportunity's applicants) where the broker may need * to start a new thread instead of only replying to existing ones. */ onCompose?: () => void; /** * Visual variant applied to every list item — "panel" (default, sidebar * card) or "row" (single-line, Gmail-style; pair with `compact` for * full-width embedded lists). */ itemVariant?: "panel" | "row"; searchQuery?: string; activeFilter?: AiConvFilterTab; channelFilter?: AiConvChannelFilter; hasMore?: boolean; isLoadingMore?: boolean; onSearchChange?: (v: string) => void; onFilterChange?: (f: AiConvFilterTab) => void; onChannelFilterChange?: (f: AiConvChannelFilter) => void; onSelect?: (id: string) => void; onRead?: (id: string) => void; onLoadMore?: () => void; className?: string; } declare function ConversationList({ conversations, activeId, compact, compactLabel, onCompose, itemVariant, searchQuery, activeFilter, channelFilter, hasMore, isLoadingMore, onSearchChange, onFilterChange, onSelect, onRead, onLoadMore, className, }: ConversationListProps): react_jsx_runtime.JSX.Element; declare function BubbleAvatar({ role, senderName, }: { role: AiConvMessageRole; senderName?: string; }): react_jsx_runtime.JSX.Element; interface ChatBubbleProps { message: AiConvMessage; /** Channel the conversation is using — determines chat vs email rendering. */ channel?: AiConvChannel; className?: string; } /** Routes to ChatMessageBubble, EmailMessageBubble, or SystemDivider. */ declare function ChatBubble({ message, channel, className }: ChatBubbleProps): react_jsx_runtime.JSX.Element; interface AICollectedDataSectionProps { fields: AiConvDataField[]; className?: string; } declare function AICollectedDataSection({ fields, className, }: AICollectedDataSectionProps): react_jsx_runtime.JSX.Element; interface LeadInfoPanelProps { contact: AiConvContact; firstSeen?: string; source?: string; /** Conversation topic tag — e.g. "Buy a Home", "Refinance", "Investment". */ topic?: string; aiFields?: AiConvDataField[]; appointment?: AiConvAppointmentData; internalNotes?: string; notesSaveStatus?: "idle" | "saving" | "saved"; isCollapsed?: boolean; /** True when this lead's contact info already exists in the system. Disables Add to Clients. */ isKnownContact?: boolean; onAddToContacts?: () => void; onCreateOpportunity?: () => void; onBookAppointment?: () => void; onApproveAppointment?: () => void; onDeclineAppointment?: () => void; onRescheduleAppointment?: (contactId: string) => void; onNotesChange?: (v: string) => void; onToggleCollapse?: () => void; /** Mobile only — back to chat thread. */ onBack?: () => void; className?: string; } declare function LeadInfoPanel({ contact, firstSeen, source, topic, aiFields, appointment, internalNotes, notesSaveStatus, isCollapsed, isKnownContact, onAddToContacts, onCreateOpportunity, onBookAppointment, onApproveAppointment, onDeclineAppointment, onRescheduleAppointment, onNotesChange, onToggleCollapse, onBack, className, }: LeadInfoPanelProps): react_jsx_runtime.JSX.Element; interface ConversationsPageProps { conversations: AiConvListItemData[]; activeConversationId?: string; /** Contact for the currently-selected conversation. */ contact?: AiConvContact; status?: AiConvStatus; mode?: AiConvMode; messages?: AiConvMessage[]; aiFields?: AiConvDataField[]; appointment?: AiConvAppointmentData; /** When the lead first contacted via the chatbot. */ leadFirstSeen?: string; /** Traffic source label (e.g. "Website Chatbot"). */ leadSource?: string; /** Conversation topic tag — e.g. "Buy a Home", "Refinance", "Investment". */ leadTopic?: string; searchQuery?: string; activeFilter?: AiConvFilterTab; /** Filter conversation list by channel type. */ channelFilter?: AiConvChannelFilter; /** Active reply channel — "chat" (default) or "email". */ channel?: AiConvChannel; onChannelChange?: (channel: AiConvChannel) => void; /** When true, the Email tab is shown in the composer. Defaults to false. */ isEmailIntegrated?: boolean; inputValue?: string; internalNotes?: string; showLeadPanel?: boolean; hasMore?: boolean; isLoadingMore?: boolean; /** True when older messages can be loaded for the active conversation. */ hasMoreMessages?: boolean; /** True while a `onLoadMoreMessages` request is in-flight. */ isLoadingMoreMessages?: boolean; /** Fired when the consumer should fetch older messages for the active conversation. */ onLoadMoreMessages?: () => void; onSelectConversation?: (id: string) => void; onRead?: (id: string) => void; onSearchChange?: (v: string) => void; onFilterChange?: (f: AiConvFilterTab) => void; onChannelFilterChange?: (f: AiConvChannelFilter) => void; onInputChange?: (v: string) => void; /** Fired when the user sends a chat message. */ onSend?: (content: string) => void; /** Fired when the user sends an email. */ onSendEmail?: (payload: AiConvEmailPayload) => void; onTakeOver?: () => void; onLetAiHandle?: () => void; /** Called when the user selects files via the attachment button in the composer. */ onAttachFile?: (files: FileList) => void; /** Called when the user selects images via the image upload button in the composer. */ onAttachImage?: (files: FileList) => void; /** Pre-fills the email Subject field with "Re: [emailReplySubject]" for reply threads. */ emailReplySubject?: string; onReopen?: () => void; onMarkUrgent?: () => void; onUnmarkUrgent?: () => void; onArchive?: () => void; onAssignToAdvisor?: () => void; /** True when this lead is already a client in the system. Disables Add to Clients. */ isKnownContact?: boolean; onAddToContacts?: () => void; onCreateOpportunity?: () => void; onBookAppointment?: () => void; onApproveAppointment?: () => void; onDeclineAppointment?: () => void; onRescheduleAppointment?: (contactId: string) => void; onNotesChange?: (v: string) => void; onToggleLeadPanel?: () => void; onLoadMore?: () => void; isAiTyping?: boolean; notesSaveStatus?: "idle" | "saving" | "saved"; className?: string; } declare function ConversationsPage({ conversations, activeConversationId, contact, status, mode, messages, aiFields, appointment, leadFirstSeen, leadSource, leadTopic, searchQuery, activeFilter, channelFilter, onChannelFilterChange, channel, onChannelChange, isEmailIntegrated, inputValue, internalNotes, showLeadPanel, hasMore, isLoadingMore, hasMoreMessages, isLoadingMoreMessages, onLoadMoreMessages, isAiTyping, notesSaveStatus, onSelectConversation, onRead, onSearchChange, onFilterChange, onInputChange, onSend, onSendEmail, onTakeOver, onLetAiHandle, onAttachFile, onAttachImage, emailReplySubject, onReopen, onMarkUrgent, onUnmarkUrgent, onArchive, onAssignToAdvisor, isKnownContact, onAddToContacts, onCreateOpportunity, onBookAppointment, onApproveAppointment, onDeclineAppointment, onRescheduleAppointment, onNotesChange, onToggleLeadPanel, onLoadMore, className, }: ConversationsPageProps): react_jsx_runtime.JSX.Element; interface AiConvAssignAdvisorDialogProps { open: boolean; onOpenChange: (open: boolean) => void; advisors: AiConvAdvisor[]; /** Currently selected advisor id */ value: string; onValueChange: (id: string) => void; onConfirm: () => void; } declare function AiConvAssignAdvisorDialog({ open, onOpenChange, advisors, value, onValueChange, onConfirm, }: AiConvAssignAdvisorDialogProps): react_jsx_runtime.JSX.Element; export { AICollectedDataSection, type AICollectedDataSectionProps, AiConvAdvisor, AiConvAppointmentData, AiConvAssignAdvisorDialog, type AiConvAssignAdvisorDialogProps, AiConvChannel, AiConvChannelFilter, AiConvContact, AiConvDataField, AiConvEmailPayload, AiConvFilterTab, AiConvListItemData, AiConvMessage, AiConvMessageRole, AiConvMode, AiConvStatus, BubbleAvatar, ChatBubble, type ChatBubbleProps, ConversationList, ConversationListItem, type ConversationListItemProps, type ConversationListProps, ConversationStatusChip, type ConversationStatusChipProps, ConversationsPage, type ConversationsPageProps, LeadInfoPanel, type LeadInfoPanelProps };