import { IconElement } from '../common';
import { EllipsisCommonProps } from '../common/Ellipsis';
import { ValuesOf } from '../utils/typeUtils';
import { SIZE, SKIN } from './ListItemAction.constants';
export type ListItemActionWithAsProp = ListItemActionAsButtonProps | ListItemActionAsAnchorProps | ListItemActionGenericProps | ListItemActionAsComponentProps;
type ListItemActionHanders<T> = {
    /** Click event handler. */
    onClick?: React.MouseEventHandler<T>;
    /** Mouse enter event handler. */
    onMouseEnter?: React.MouseEventHandler<T>;
    /** Mouse leave event handler. */
    onMouseLeave?: React.MouseEventHandler<T>;
};
type ListItemActionAsButtonProps = {
    /** Render as 'button' element. */
    as?: 'button';
} & ListItemActionHanders<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement>;
type ListItemActionAsAnchorProps = {
    /** Render as 'a' element. */
    as?: 'a';
} & ListItemActionHanders<HTMLAnchorElement> & React.AnchorHTMLAttributes<HTMLAnchorElement>;
type ListItemActionGenericProps = {
    /**
     * Render as some other element.
     * @default button
     */
    as?: keyof Omit<HTMLElementTagNameMap, 'a' | 'button'>;
    [additionalProps: string]: any;
} & ListItemActionHanders<HTMLElement>;
type ListItemActionAsComponentProps = {
    /**
     * Render as some other element.
     * @default button
     */
    as?: React.ComponentType<any>;
    [additionalProps: string]: any;
} & ListItemActionHanders<HTMLElement>;
export type ListItemActionSkin = ValuesOf<typeof SKIN>;
export type ListItemActionSize = ValuesOf<typeof SIZE>;
export type ListItemActionProps = ListItemActionWithAsProp & {
    /** Title. */
    title: React.ReactNode;
    /** Data attribute for testing purposes. */
    dataHook?: string;
    /**
     * Item theme (standard, dark, destructive, premium, primary).
     * @default standard
     */
    skin?: ListItemActionSkin;
    /**
     * Text Size (small, medium).
     * @default medium
     */
    size?: ListItemActionSize;
    /** Prefix Icon. */
    prefixIcon?: IconElement;
    /** Suffix Icon. */
    suffixIcon?: IconElement;
    /** Suffix Node. */
    suffix?: React.ReactNode;
    /** When present, it specifies that a button should automatically get focus when the page loads. */
    autoFocus?: boolean;
    /** Should the text get ellipsed with tooltip, or should it get broken into lines when it reaches the end of its container. */
    ellipsis?: boolean;
    /** Disabled. */
    disabled?: boolean;
    /** Tooltip description if item is disabled. */
    disabledDescription?: string;
    /** Tooltip floating modifiers. */
    tooltipModifiers?: EllipsisCommonProps;
    /** If true, the item is highlighted, if false - highlighted styles are not automatically applied on item hover. */
    highlighted?: boolean;
    /** Text of the list item subtitle. */
    subtitle?: string;
    /** Specifies whether page should be scrolled to the focused item. */
    shouldFocusWithoutScroll?: boolean;
};
export type ListItemActionRefProps = {
    focus: () => void;
};
export type ListItemActionBuilderParams = Pick<ListItemActionProps, 'title' | 'prefixIcon' | 'suffixIcon' | 'onClick' | 'onMouseEnter' | 'onMouseLeave' | 'disabled' | 'disabledDescription' | 'skin' | 'size' | 'dataHook' | 'as' | 'tabIndex' | 'autoFocus' | 'className' | 'ellipsis' | 'subtitle' | 'suffix' | 'shouldFocusWithoutScroll' | 'role'> & {
    id: string | number;
    ref?: React.ForwardedRef<ListItemActionRefProps>;
};
export {};
//# sourceMappingURL=ListItemAction.types.d.ts.map