import React from 'react';
import { type EmojiCategory, EmojiContainer } from '@sendbird/chat';
import { GroupChannel, Member } from '@sendbird/chat/groupChannel';
import type { FileMessageCreateParams, MultipleFilesMessageCreateParams, UserMessageCreateParams } from '@sendbird/chat/message';
import { UserProfileProviderProps } from '../../../lib/UserProfileContext';
import type { OnBeforeDownloadFileMessageType } from '../../GroupChannel/context/types';
import { CoreMessageType, SendableMessageType } from '../../../utils';
import { ChannelStateTypes, ParentMessageStateTypes, ThreadListStateTypes } from '../types';
export interface ThreadProviderProps extends Pick<UserProfileProviderProps, 'disableUserProfile' | 'renderUserProfile'> {
    children?: React.ReactElement;
    channelUrl: string;
    message: SendableMessageType | null;
    onHeaderActionClick?: () => void;
    onMoveToParentMessage?: (props: {
        message: SendableMessageType;
        channel: GroupChannel;
    }) => void;
    onBeforeSendUserMessage?: (message: string, quotedMessage?: SendableMessageType) => UserMessageCreateParams;
    onBeforeSendFileMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams;
    onBeforeSendVoiceMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams;
    onBeforeSendMultipleFilesMessage?: (files: Array<File>, quotedMessage?: SendableMessageType) => MultipleFilesMessageCreateParams;
    onBeforeDownloadFileMessage?: OnBeforeDownloadFileMessageType;
    isMultipleFilesMessageEnabled?: boolean;
    filterEmojiCategoryIds?: (message: SendableMessageType) => EmojiCategory['id'][];
}
export interface ThreadState extends ThreadProviderProps {
    currentChannel: GroupChannel;
    allThreadMessages: Array<CoreMessageType>;
    localThreadMessages: Array<CoreMessageType>;
    parentMessage: SendableMessageType;
    channelState: ChannelStateTypes;
    parentMessageState: ParentMessageStateTypes;
    threadListState: ThreadListStateTypes;
    hasMorePrev: boolean;
    hasMoreNext: boolean;
    emojiContainer: EmojiContainer;
    isMuted: boolean;
    isChannelFrozen: boolean;
    currentUserId: string;
    typingMembers: Member[];
    nicknamesMap: Map<string, string>;
}
export declare const ThreadContext: React.Context<import("../../../utils/storeManager").Store<ThreadState>>;
export declare const InternalThreadProvider: React.FC<React.PropsWithChildren<unknown>>;
export declare const ThreadManager: React.FC<React.PropsWithChildren<ThreadProviderProps>>;
export declare const ThreadProvider: (props: ThreadProviderProps) => React.JSX.Element;
export declare const useThreadContext: () => {
    initializeThreadFetcher: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>;
    fetchPrevThreads: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>;
    fetchNextThreads: (callback?: (messages: import("@sendbird/chat/message").BaseMessage[]) => void) => Promise<void>;
    initializeThreadListStart: () => void;
    initializeThreadListSuccess: (parentMessage: import("@sendbird/chat/message").BaseMessage, anchorMessage: SendableMessageType, threadedMessages: import("@sendbird/chat/message").BaseMessage[]) => void;
    initializeThreadListFailure: () => void;
    getPrevMessagesStart: () => void;
    getPrevMessagesSuccess: (threadedMessages: CoreMessageType[]) => void;
    getPrevMessagesFailure: () => void;
    getNextMessagesStart: () => void;
    getNextMessagesSuccess: (threadedMessages: CoreMessageType[]) => void;
    getNextMessagesFailure: () => void;
    updateMessage: (props: {
        messageId: number;
        message: string;
        mentionedUsers?: import("@sendbird/chat").User[];
        mentionedUserIds?: string[];
        mentionTemplate?: string;
    }) => void;
    deleteMessage: (message: SendableMessageType) => Promise<void>;
    onMessageUpdated: (channel: GroupChannel, message: SendableMessageType) => void;
    onMessageDeleted: (channel: GroupChannel, messageId: number) => void;
    onMessageDeletedByReqId: (reqId: string | number) => void;
    sendMessage: (props: import("./hooks/useSendUserMessageCallback").SendMessageParams) => void;
    sendFileMessage: import("./hooks/useSendFileMessage").SendFileMessageFunctionType;
    sendVoiceMessage: (file: File, duration: number, quoteMessage: SendableMessageType) => void;
    sendMultipleFilesMessage: import("./hooks/useSendMultipleFilesMessage").SendMFMFunctionType;
    resendMessage: (failedMessage: SendableMessageType) => void;
    sendMessageStart: (message: SendableMessageType) => void;
    sendMessageSuccess: (message: SendableMessageType) => void;
    sendMessageFailure: (message: SendableMessageType) => void;
    resendMessageStart: (message: SendableMessageType) => void;
    toggleReaction: (message: import("@sendbird/chat/message").BaseMessage, key: string, isReacted: boolean) => void;
    setCurrentUserId: (currentUserId: string) => void;
    getChannelStart: () => void;
    getChannelSuccess: (groupChannel: GroupChannel) => void;
    getChannelFailure: () => void;
    getParentMessageStart: () => void;
    getParentMessageSuccess: (parentMessage: SendableMessageType) => void;
    getParentMessageFailure: () => void;
    setEmojiContainer: (emojiContainer: EmojiContainer) => void;
    onMessageReceived: (channel: GroupChannel, message: SendableMessageType) => void;
    onReactionUpdated: (reactionEvent: import("@sendbird/chat/message").ReactionEvent) => void;
    onUserMuted: (channel: GroupChannel, user: import("@sendbird/chat").User) => void;
    onUserUnmuted: (channel: GroupChannel, user: import("@sendbird/chat").User) => void;
    onUserBanned: (channel: GroupChannel, user: import("@sendbird/chat").User) => void;
    onUserUnbanned: () => void;
    onUserLeft: (channel: GroupChannel, user: import("@sendbird/chat").User) => void;
    onChannelFrozen: () => void;
    onChannelUnfrozen: () => void;
    onOperatorUpdated: (channel: GroupChannel) => void;
    onTypingStatusUpdated: (channel: GroupChannel, typingMembers: Member[]) => void;
    onFileInfoUpdated: ({ channelUrl, requestId, index, uploadableFileInfo, error, }: import("../types").FileUploadInfoParams) => void;
    currentChannel: GroupChannel;
    allThreadMessages: Array<CoreMessageType>;
    localThreadMessages: Array<CoreMessageType>;
    parentMessage: SendableMessageType;
    channelState: ChannelStateTypes;
    parentMessageState: ParentMessageStateTypes;
    threadListState: ThreadListStateTypes;
    hasMorePrev: boolean;
    hasMoreNext: boolean;
    emojiContainer: EmojiContainer;
    isMuted: boolean;
    isChannelFrozen: boolean;
    currentUserId: string;
    typingMembers: Member[];
    nicknamesMap: Map<string, string>;
    children?: React.ReactElement;
    channelUrl: string;
    message: SendableMessageType | null;
    onHeaderActionClick?: () => void;
    onMoveToParentMessage?: (props: {
        message: SendableMessageType;
        channel: GroupChannel;
    }) => void;
    onBeforeSendUserMessage?: (message: string, quotedMessage?: SendableMessageType) => UserMessageCreateParams;
    onBeforeSendFileMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams;
    onBeforeSendVoiceMessage?: (file: File, quotedMessage?: SendableMessageType) => FileMessageCreateParams;
    onBeforeSendMultipleFilesMessage?: (files: Array<File>, quotedMessage?: SendableMessageType) => MultipleFilesMessageCreateParams;
    onBeforeDownloadFileMessage?: OnBeforeDownloadFileMessageType;
    isMultipleFilesMessageEnabled?: boolean;
    filterEmojiCategoryIds?: (message: SendableMessageType) => EmojiCategory['id'][];
    renderUserProfile?: ((props: import("../../../types").RenderUserProfileProps) => React.ReactElement<any, string | React.JSXElementConstructor<any>>) & ((props: import("../../../types").RenderUserProfileProps) => React.ReactElement<any, string | React.JSXElementConstructor<any>>);
    disableUserProfile?: boolean;
};
