import { Descendant } from 'slate';
import { RenderElementProps } from 'slate-react';
import { AccentType } from '../button';
import { DropdownMenuOption } from '../dropdown-menu';
export type CustomElement = {
    type: string;
    mention: string;
    children: CustomElement[];
};
export type TextNode = {
    text: string;
};
export type ExtendedRenderElementProps = RenderElementProps & {
    element: CustomElement;
};
export type Key = string | number;
export type MentionItem = {
    key: Key;
    username: string;
};
export type Action = {
    key: Key;
    label: string;
    accentType: AccentType;
    testId?: string;
    isDisabled?: boolean;
};
export type ChangeParams = {
    key?: Key;
    value: Descendant[];
};
export type SubmitParams = {
    key?: Key;
    value: Descendant[];
};
export type SelectParams = {
    itemKey: Key;
    optionKey: Key;
};
export type ActionParams = {
    itemKey: Key;
    actionKey: Key;
};
export type MentionParams = {
    key: Key;
    value: string;
};
export type ChatMessageItem = {
    key: Key;
    username: string;
    timestamp?: string;
    avatarUrl?: string;
    value?: Descendant[];
    options?: DropdownMenuOption[];
    textBoxAriaLabel?: string;
};
export type NewChatMessageItem = {
    mentions?: MentionItem[];
    actions?: Action[];
    value?: Descendant[];
    textBoxAriaLabel?: string;
    autoFocus?: boolean;
};
export type ActiveItem = {
    value: Descendant[];
    actions?: Action[];
    isInEditMode?: boolean;
    autoFocus?: boolean;
};
export type ActiveItems = {
    [key: Key]: ActiveItem;
};
export type ChatMessageProps = {
    username: string;
    avatarUrl?: string;
    onChange: (params: ChangeParams) => void;
    onSubmit: (params: SubmitParams) => void;
    onMention?: (params: MentionParams) => void;
    onBlur?: () => void;
    value?: Descendant[];
    initialValue?: Descendant[];
    maxLength: number;
    getCharactersCounterString: (count: number) => string;
    itemKey: Key;
    timestamp?: string;
    mentions?: MentionItem[];
    options?: DropdownMenuOption[];
    actions?: Action[];
    onSelect?: (params: SelectParams) => void;
    isInEditMode?: boolean;
    onActionBtnClick?: (params: ActionParams) => void;
    optionsTriggerAriaLabel?: string;
    textBoxAriaLabel?: string;
    mentionsPropmptText: string;
    autoFocus: boolean;
};
export type ChatMessageBodyProps = {
    itemKey: Key;
    onChange: (params: ChangeParams) => void;
    onSubmit: (params: SubmitParams) => void;
    onMention?: (params: MentionParams) => void;
    onBlur?: () => void;
    value?: Descendant[];
    readOnly: boolean;
    maxLength: number;
    getCharactersCounterString: (count: number) => string;
    mentions?: MentionItem[];
    actions?: Action[];
    onActionBtnClick?: (params: ActionParams) => void;
    editableContentClassName?: string;
    textBoxAriaLabel?: string;
    mentionsPropmptText: string;
    autoFocus: boolean;
};
export type CharactersCounterProps = {
    currLength: number;
    maxLength: number;
    getCharactersCounterString: (count: number) => string;
};
export type ChatMessageHeaderProps = {
    itemKey: Key;
    timestamp?: string;
    username: string;
    avatarUrl?: string;
    options?: DropdownMenuOption[];
    onSelect?: (params: SelectParams) => void;
    optionsTriggerAriaLabel?: string;
};
