import { IconComponent, IconProps } from '@consta/icons/Icon';
import React from 'react';
import { AsTagAttribute, AsTags } from '../../utils/types/AsTags';
import { TagBase } from '../TagBase/TagBase';
type TagBaseProps = React.ComponentProps<typeof TagBase>;
export declare const tagPropMode: readonly ["button", "check", "cancel", "link", "info"];
export declare const tagPropModeDefault: "button";
type TagPropMode = typeof tagPropMode[number];
type CommonProps = {
    size?: TagBaseProps['size'];
    label: TagBaseProps['label'];
    group?: TagBaseProps['group'];
    icon?: IconComponent;
    iconSize?: IconProps['size'];
    children?: never;
    disabled?: boolean;
};
type PropsWithModeButton = CommonProps & {
    mode?: 'button';
    onClick: React.MouseEventHandler<HTMLButtonElement>;
    checked?: never;
    onChange?: never;
    onCancel?: never;
    cancelButtonTabIndex?: never;
};
type PropsWithModeLink = CommonProps & {
    mode: 'link';
    checked?: never;
    onChange?: never;
    onCancel?: never;
    cancelButtonTabIndex?: never;
};
type PropsWithModeCheck = CommonProps & {
    mode: 'check';
    onChange: (checked: boolean, params: {
        e?: React.MouseEvent;
        checked: boolean;
    }) => void;
    checked: boolean;
    onClick?: never;
    onCancel?: never;
    cancelButtonTabIndex?: never;
};
type PropsWithModeCancel = CommonProps & {
    mode: 'cancel';
    onCancel: React.MouseEventHandler<HTMLButtonElement>;
    cancelButtonTabIndex?: number;
    onClick?: never;
    onChange?: never;
    checked?: never;
};
type PropsWithModeInfo = CommonProps & {
    mode: 'info';
    onCancel?: never;
    onClick?: never;
    onChange?: never;
    checked?: never;
    cancelButtonTabIndex?: never;
};
type Props<ROLE extends TagPropMode = 'button'> = ROLE extends 'button' ? PropsWithModeButton & Omit<AsTagAttribute<'button'>, keyof PropsWithModeButton> : {} & ROLE extends 'check' ? PropsWithModeCheck & Omit<AsTagAttribute<'button'>, keyof PropsWithModeCheck> : {} & ROLE extends 'cancel' ? PropsWithModeCancel & Omit<AsTagAttribute<'span'>, keyof PropsWithModeCancel> : {} & ROLE extends 'link' ? PropsWithModeLink & Omit<AsTagAttribute<'a'>, keyof PropsWithModeLink> : {} & ROLE extends 'info' ? PropsWithModeInfo & Omit<AsTagAttribute<'span'>, keyof PropsWithModeInfo> : {};
type TagComponent = <ROLE extends TagPropMode>(props: Props<ROLE> & React.RefAttributes<HTMLElement>) => React.ReactElement | null;
export declare function getParams(mode: TagPropMode, checked?: PropsWithModeCheck['checked'], onClick?: React.MouseEventHandler, onChange?: PropsWithModeCheck['onChange'], onCancel?: PropsWithModeCancel['onCancel']): {
    view?: TagBaseProps['view'];
    onClick?: TagBaseProps['onClick'];
    onCancel?: TagBaseProps['onCancel'];
    withAction?: TagBaseProps['withAction'];
    as: AsTags;
};
export declare const COMPONENT_NAME: "Tag";
export declare const Tag: TagComponent;
export {};
