import React from 'react';
import { GestureResponderEvent, StyleProp, ViewStyle } from 'react-native';
import type { Attachment, LocalMessage, UserResponse } from 'stream-chat';
import { ChannelContextValue } from '../../contexts/channelContext/ChannelContext';
import { ChatContextValue } from '../../contexts/chatContext/ChatContext';
import { KeyboardContextValue } from '../../contexts/keyboardContext/KeyboardContext';
import { MessageContextValue } from '../../contexts/messageContext/MessageContext';
import { MessagesContextValue } from '../../contexts/messagesContext/MessagesContext';
import { ThreadContextValue } from '../../contexts/threadContext/ThreadContext';
import { TranslationContextValue } from '../../contexts/translationContext/TranslationContext';
import type { Thumbnail } from '../Attachment/utils/buildGallery/types';
export type TouchableEmitter = 'fileAttachment' | 'gallery' | 'giphy' | 'message' | 'messageContent' | 'messageReplies' | 'reactionList';
export type TextMentionTouchableHandlerAdditionalInfo = {
    user?: UserResponse;
};
export type TextMentionTouchableHandlerPayload = {
    emitter: 'textMention';
    additionalInfo?: TextMentionTouchableHandlerAdditionalInfo;
};
export type UrlTouchableHandlerAdditionalInfo = {
    url?: string;
};
export type UrlTouchableHandlerPayload = {
    emitter: 'textLink' | 'card';
    additionalInfo?: UrlTouchableHandlerAdditionalInfo;
};
export type FileAttachmentTouchableHandlerAdditionalInfo = {
    attachment?: Attachment;
};
export type FileAttachmentTouchableHandlerPayload = {
    emitter: 'fileAttachment';
    additionalInfo?: FileAttachmentTouchableHandlerAdditionalInfo;
};
export type GalleryThumbnailTouchableHandlerAdditionalInfo = {
    thumbnail?: Thumbnail;
};
export type GalleryThumbnailTouchableHandlerPayload = {
    emitter: 'gallery';
    additionalInfo?: GalleryThumbnailTouchableHandlerAdditionalInfo;
};
export type PressableHandlerPayload = {
    defaultHandler?: () => void;
    event?: GestureResponderEvent;
} & ({
    emitter?: Exclude<TouchableEmitter, 'textMention' | 'textLink' | 'card' | 'fileAttachment' | 'gallery'>;
} | TextMentionTouchableHandlerPayload | UrlTouchableHandlerPayload | FileAttachmentTouchableHandlerPayload | GalleryThumbnailTouchableHandlerPayload);
export type MessagePressableHandlerPayload = PressableHandlerPayload & {
    /**
     * Set of action handler functions for various message actions. You can use these functions to perform any action when give interaction occurs.
     */
    actionHandlers?: MessageActionHandlers;
    /**
     * Additional message touchable handler info.
     */
    additionalInfo?: Record<string, unknown>;
    /**
     * Message object, on which interaction occurred.
     */
    message?: LocalMessage;
};
export type MessageActionHandlers = {
    copyMessage: () => void;
    deleteMessage: () => void;
    editMessage: () => void;
    flagMessage: () => void;
    markUnread: () => Promise<void>;
    pinMessage: () => Promise<void>;
    quotedReply: () => void;
    resendMessage: () => Promise<void>;
    toggleBanUser: () => Promise<void>;
    toggleMuteUser: () => Promise<void>;
    toggleReaction: (reactionType: string) => Promise<void>;
    unpinMessage: () => Promise<void>;
    threadReply?: (message: LocalMessage) => Promise<void>;
};
export type MessagePropsWithContext = Pick<ChannelContextValue, 'channel' | 'enforceUniqueReaction' | 'members'> & Pick<KeyboardContextValue, 'dismissKeyboard'> & Partial<Omit<MessageContextValue, 'groupStyles' | 'handleReaction' | 'message' | 'isMessageAIGenerated' | 'readBy'>> & Pick<MessageContextValue, 'groupStyles' | 'message' | 'isMessageAIGenerated' | 'readBy'> & Pick<MessagesContextValue, 'sendReaction' | 'deleteMessage' | 'dismissKeyboardOnMessageTouch' | 'forceAlignMessages' | 'handleBan' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMarkUnread' | 'handleMute' | 'handlePinMessage' | 'handleQuotedReply' | 'handleReaction' | 'handleRetry' | 'handleThreadReply' | 'isAttachmentEqual' | 'MessageMenu' | 'messageActions' | 'messageContentOrder' | 'MessageBounce' | 'MessageSimple' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'removeMessage' | 'deleteReaction' | 'retrySendMessage' | 'selectReaction' | 'setEditingState' | 'setQuotedMessageState' | 'supportedReactions' | 'updateMessage' | 'PollContent'> & Pick<ThreadContextValue, 'openThread'> & Pick<TranslationContextValue, 't'> & {
    chatContext: ChatContextValue;
    messagesContext: MessagesContextValue;
    /**
     * Whether or not users are able to long press messages.
     */
    enableLongPress?: boolean;
    goToMessage?: (messageId: string) => void;
    isTargetedMessage?: boolean;
    /**
     * Handler to open the thread on message. This is callback for touch event for replies button.
     *
     * @param message A message object to open the thread upon.
     */
    onThreadSelect?: (message: LocalMessage) => void;
    showUnreadUnderlay?: boolean;
    style?: StyleProp<ViewStyle>;
};
export type MessageProps = Partial<Omit<MessagePropsWithContext, 'groupStyles' | 'handleReaction' | 'message'>> & Pick<MessagePropsWithContext, 'groupStyles' | 'message'>;
/**
 * Message - A high level component which implements all the logic required for a message.
 * The actual rendering of the message is delegated via the "Message" property
 *
 * @example ./Message.md
 */
export declare const Message: (props: MessageProps) => React.JSX.Element;
//# sourceMappingURL=Message.d.ts.map