import React, { PropsWithChildren } from 'react';
import { KeyboardAvoidingViewProps } from 'react-native';
import { Channel as ChannelType, LocalMessage, SendMessageAPIResponse, StreamChat, Message as StreamMessage } from 'stream-chat';
import { MessageContextValue } from '../../contexts';
import { ChannelContextValue } from '../../contexts/channelContext/ChannelContext';
import type { UseChannelStateValue } from '../../contexts/channelsStateContext/useChannelState';
import { ChatContextValue } from '../../contexts/chatContext/ChatContext';
import { InputMessageInputContextValue } from '../../contexts/messageInputContext/MessageInputContext';
import { MessagesContextValue } from '../../contexts/messagesContext/MessagesContext';
import { OwnCapabilitiesContextValue } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';
import { PaginatedMessageListContextValue } from '../../contexts/paginatedMessageListContext/PaginatedMessageListContext';
import { SuggestionsContextValue } from '../../contexts/suggestionsContext/SuggestionsContext';
import { ThreadContextValue, ThreadType } from '../../contexts/threadContext/ThreadContext';
import { TranslationContextValue } from '../../contexts/translationContext/TranslationContext';
import { ChannelUnreadState } from '../../types/types';
import { ReactionData } from '../../utils/utils';
import { LoadingErrorProps } from '../Indicators/LoadingErrorIndicator';
export type MarkReadFunctionOptions = {
    /**
     * Signal, whether the `channelUnreadUiState` should be updated.
     * By default, the local state update is prevented when the Channel component is mounted.
     * This is in order to keep the UI indicating the original unread state, when the user opens a channel.
     */
    updateChannelUnreadState?: boolean;
};
export declare const reactionData: ReactionData[];
export type ChannelPropsWithContext = Pick<ChannelContextValue, 'channel'> & Partial<Pick<ChannelContextValue, 'EmptyStateIndicator' | 'enableMessageGroupingByUser' | 'enforceUniqueReaction' | 'giphyEnabled' | 'hideStickyDateHeader' | 'hideDateSeparators' | 'LoadingIndicator' | 'maxTimeBetweenGroupedMessages' | 'NetworkDownIndicator' | 'StickyHeader'>> & Pick<ChatContextValue, 'client' | 'enableOfflineSupport' | 'isOnline'> & Partial<Omit<InputMessageInputContextValue, 'quotedMessage' | 'editing' | 'clearEditingState' | 'clearQuotedMessageState' | 'sendMessage'>> & Partial<Pick<SuggestionsContextValue, 'AutoCompleteSuggestionHeader' | 'AutoCompleteSuggestionItem' | 'AutoCompleteSuggestionList'>> & Pick<TranslationContextValue, 't'> & Partial<Pick<PaginatedMessageListContextValue, 'messages' | 'loadingMore' | 'loadingMoreRecent'>> & Pick<UseChannelStateValue, 'threadMessages' | 'setThreadMessages'> & Partial<Pick<MessagesContextValue, 'additionalPressableProps' | 'Attachment' | 'AttachmentActions' | 'AudioAttachment' | 'Card' | 'CardCover' | 'CardFooter' | 'CardHeader' | 'DateHeader' | 'deletedMessagesVisibilityType' | 'disableTypingIndicator' | 'dismissKeyboardOnMessageTouch' | 'enableSwipeToReply' | 'FileAttachment' | 'FileAttachmentIcon' | 'FileAttachmentGroup' | 'FlatList' | 'forceAlignMessages' | 'Gallery' | 'getMessagesGroupStyles' | 'Giphy' | 'giphyVersion' | 'handleBan' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMarkUnread' | 'handleMute' | 'handlePinMessage' | 'handleReaction' | 'handleQuotedReply' | 'handleRetry' | 'handleThreadReply' | 'InlineDateSeparator' | 'InlineUnreadIndicator' | 'isAttachmentEqual' | 'legacyImageViewerSwipeBehaviour' | 'ImageLoadingFailedIndicator' | 'ImageLoadingIndicator' | 'ImageReloadIndicator' | 'markdownRules' | 'Message' | 'MessageActionList' | 'MessageActionListItem' | 'messageActions' | 'MessageAvatar' | 'MessageBounce' | 'MessageContent' | 'messageContentOrder' | 'MessageDeleted' | 'MessageEditedTimestamp' | 'MessageError' | 'MessageFooter' | 'MessageHeader' | 'MessageList' | 'MessageMenu' | 'MessagePinnedHeader' | 'MessageReplies' | 'MessageRepliesAvatars' | 'MessageSimple' | 'MessageStatus' | 'MessageSystem' | 'MessageText' | 'messageTextNumberOfLines' | 'MessageTimestamp' | 'MessageUserReactions' | 'MessageSwipeContent' | 'messageSwipeToReplyHitSlop' | 'myMessageTheme' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'MessageReactionPicker' | 'MessageUserReactionsAvatar' | 'MessageUserReactionsItem' | 'ReactionListBottom' | 'reactionListPosition' | 'ReactionListTop' | 'Reply' | 'shouldShowUnreadUnderlay' | 'ScrollToBottomButton' | 'selectReaction' | 'supportedReactions' | 'TypingIndicator' | 'TypingIndicatorContainer' | 'UrlPreview' | 'VideoThumbnail' | 'PollContent' | 'hasCreatePoll' | 'UnreadMessagesNotification' | 'StreamingMessageView'>> & Partial<Pick<MessageContextValue, 'isMessageAIGenerated'>> & Partial<Pick<ThreadContextValue, 'allowThreadMessagesInChannel'>> & {
    shouldSyncChannel: boolean;
    thread: ThreadType;
    /**
     * Additional props passed to keyboard avoiding view
     */
    additionalKeyboardAvoidingViewProps?: Partial<KeyboardAvoidingViewProps>;
    /**
     * When true, disables the KeyboardCompatibleView wrapper
     *
     * Channel internally uses the [KeyboardCompatibleView](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx)
     * component to adjust the height of Channel when the keyboard is opened or dismissed. This prop provides the ability to disable this functionality in case you
     * want to use [KeyboardAvoidingView](https://facebook.github.io/react-native/docs/keyboardavoidingview) or handle dismissal yourself.
     * KeyboardAvoidingView works well when your component occupies 100% of screen height, otherwise it may raise some issues.
     */
    disableKeyboardCompatibleView?: boolean;
    /**
     * Overrides the Stream default mark channel read request (Advanced usage only)
     * @param channel Channel object
     */
    doMarkReadRequest?: (channel: ChannelType, setChannelUnreadUiState?: (state: ChannelUnreadState) => void) => void;
    /**
     * Overrides the Stream default send message request (Advanced usage only)
     * @param channelId
     * @param messageData Message object
     */
    doSendMessageRequest?: (channelId: string, messageData: StreamMessage) => Promise<SendMessageAPIResponse>;
    /**
     * Overrides the Stream default update message request (Advanced usage only)
     * @param channelId
     * @param updatedMessage UpdatedMessage object
     */
    doUpdateMessageRequest?: (channelId: string, updatedMessage: Parameters<StreamChat['updateMessage']>[0]) => ReturnType<StreamChat['updateMessage']>;
    /**
     * When true, messageList will be scrolled at first unread message, when opened.
     */
    initialScrollToFirstUnreadMessage?: boolean;
    keyboardBehavior?: KeyboardAvoidingViewProps['behavior'];
    /**
     * Custom wrapper component that handles height adjustment of Channel component when keyboard is opened or dismissed
     * Default component (accepts the same props): [KeyboardCompatibleView](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx)
     *
     * **Example:**
     *
     * ```
     * <Channel
     *  channel={channel}
     *  KeyboardCompatibleView={(props) => {
     *    return (
     *      <KeyboardCompatibleView>
     *        {props.children}
     *      </KeyboardCompatibleView>
     *    )
     *  }}
     * />
     * ```
     */
    KeyboardCompatibleView?: React.ComponentType<KeyboardAvoidingViewProps>;
    keyboardVerticalOffset?: number;
    /**
     * Custom loading error indicator to override the Stream default
     */
    LoadingErrorIndicator?: React.ComponentType<LoadingErrorProps>;
    /**
     * Boolean flag to enable/disable marking the channel as read on mount
     */
    markReadOnMount?: boolean;
    maxMessageLength?: number;
    /**
     * Load the channel at a specified message instead of the most recent message.
     */
    messageId?: string;
    /**
     * @deprecated
     * The time interval for throttling while updating the message state
     */
    newMessageStateUpdateThrottleInterval?: number;
    overrideOwnCapabilities?: Partial<OwnCapabilitiesContextValue>;
    stateUpdateThrottleInterval?: number;
    /**
     * Tells if channel is rendering a thread list
     */
    threadList?: boolean;
} & Partial<Pick<InputMessageInputContextValue, 'openPollCreationDialog' | 'CreatePollContent' | 'StopMessageStreamingButton'>>;
export type ChannelProps = Partial<Omit<ChannelPropsWithContext, 'channel' | 'thread'>> & Pick<ChannelPropsWithContext, 'channel'> & {
    thread?: LocalMessage | ThreadType | null;
};
/**
 *
 * The wrapper component for a chat channel. Channel needs to be placed inside a Chat component
 * to receive the StreamChat client instance. MessageList, Thread, and MessageInput must be
 * children of the Channel component to receive the ChannelContext.
 *
 * @example ./Channel.md
 */
export declare const Channel: (props: PropsWithChildren<ChannelProps>) => React.JSX.Element;
//# sourceMappingURL=Channel.d.ts.map