import React, { ReactNode } from 'react';
import { AlertProps, AvatarProps, LabelGroupProps } from '@patternfly/react-core';
import { ActionProps } from '../ResponseActions/ResponseActions';
import { SourcesCardProps } from '../SourcesCard';
import { QuickStart, QuickstartAction } from './QuickStarts/types';
import QuickResponse from './QuickResponse/QuickResponse';
import { UserFeedbackProps } from './UserFeedback/UserFeedback';
import { UserFeedbackCompleteProps } from './UserFeedback/UserFeedbackComplete';
import { TableProps } from '@patternfly/react-table';
import { PluggableList } from 'react-markdown/lib';
export interface MessageAttachment {
    /** Name of file attached to the message */
    name: string;
    /** Unique identifier of file attached to the message */
    id?: string | number;
    /** Callback for when attachment label is clicked */
    onClick?: (event: React.MouseEvent, name: string, id?: string | number) => void;
    /** Callback for when attachment label is closed */
    onClose?: (event: React.MouseEvent, name: string, id?: string | number) => void;
    /** Whether file is loading */
    isLoading?: boolean;
    /** Aria label for attachment close button */
    closeButtonAriaLabel?: string;
    /** Custom test id for the language in the attachment component */
    languageTestId?: string;
    /** Custom test id for the loading spinner in the attachment component */
    spinnerTestId?: string;
}
export interface MessageExtraContent {
    /** Content to display before the main content */
    beforeMainContent?: ReactNode;
    /** Content to display after the main content */
    afterMainContent?: ReactNode;
    /** Content to display at the end */
    endContent?: ReactNode;
}
export interface MessageProps extends Omit<React.HTMLProps<HTMLDivElement>, 'role'> {
    /** Unique id for message */
    id?: string;
    /** Role of the user sending the message */
    role: 'user' | 'bot';
    /** Message content */
    content?: string;
    /** Extra Message content */
    extraContent?: MessageExtraContent;
    /** Name of the user */
    name?: string;
    /** Avatar src for the user */
    avatar: string;
    /** Timestamp for the message */
    timestamp?: string;
    /** Set this to true if message is being loaded */
    isLoading?: boolean;
    /** Array of attachments attached to a message */
    attachments?: MessageAttachment[];
    /** Props for message actions, such as feedback (positive or negative), copy button, share, and listen */
    actions?: {
        [key: string]: ActionProps;
    };
    /** Sources for message */
    sources?: SourcesCardProps;
    /** Label for the English word "AI," used to tag messages with role "bot" */
    botWord?: string;
    /** Label for the English "Loading message," displayed to screenreaders when loading a message */
    loadingWord?: string;
    codeBlockProps?: {
        'aria-label'?: string;
        className?: string;
    };
    /** Props for quick responses */
    quickResponses?: QuickResponse[];
    /** Props for quick responses container */
    quickResponseContainerProps?: Omit<LabelGroupProps, 'ref'>;
    /** Props for user feedback card */
    userFeedbackForm?: Omit<UserFeedbackProps, 'ref'>;
    /** Props for user feedback response */
    userFeedbackComplete?: Omit<UserFeedbackCompleteProps, 'ref'>;
    /** Whether avatar is round */
    hasRoundAvatar?: boolean;
    /** Any additional props applied to the avatar, for additional customization  */
    avatarProps?: Omit<AvatarProps, 'alt'>;
    /** Props for QuickStart card */
    quickStarts?: {
        quickStart: QuickStart;
        onSelectQuickStart: (id?: string) => void;
        minuteWord?: string;
        minuteWordPlural?: string;
        prerequisiteWord?: string;
        prerequisiteWordPlural?: string;
        quickStartButtonAriaLabel?: string;
        className?: string;
        onClick?: () => void;
        action?: QuickstartAction;
    };
    /** Turns the container into a live region so that changes to content within the Message, such as appending a feedback card, are reliably announced to assistive technology. */
    isLiveRegion?: boolean;
    /** Ref applied to message  */
    innerRef?: React.Ref<HTMLDivElement>;
    /** Props for table message. It is important to include a detailed aria-label that describes the purpose of the table. */
    tableProps?: Required<Pick<TableProps, 'aria-label'>> & TableProps;
    /** Additional rehype plugins passed from the consumer */
    additionalRehypePlugins?: PluggableList;
    /** Whether to open links in message in new tab. */
    openLinkInNewTab?: boolean;
    /** Optional inline error message that can be displayed in the message */
    error?: AlertProps;
}
export declare const MessageBase: React.FunctionComponent<MessageProps>;
declare const Message: React.ForwardRefExoticComponent<Omit<MessageProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export default Message;
