import { TimeSpan } from '@synnaxlabs/x';
import { ReactElement } from 'react';
import { Generic } from '../generic';
import { Text } from '../text';
import { Tooltip } from '../tooltip';
import { Triggers } from '../triggers';
export type ElementType = "button" | "a" | "div" | "label" | "textarea";
/** The variant of button */
export type Variant = "filled" | "outlined" | "text" | "suggestion" | "preview" | "shadow";
export interface ExtensionProps extends Omit<Text.ExtensionProps, "variant">, Tooltip.WrapProps {
    variant?: Variant;
    trigger?: Triggers.Trigger;
    triggerIndicator?: boolean | Triggers.Trigger;
    textColor?: Text.TextProps["color"];
    textVariant?: Text.Variant;
    contrast?: Text.Shade | false;
    disabled?: boolean;
    preventClick?: boolean;
    onClickDelay?: number | TimeSpan;
    ghost?: boolean;
}
/** The props for the {@link Button} component. */
export type ButtonProps<E extends ElementType = "button"> = Omit<Generic.OptionalElementProps<E>, "color"> & ExtensionProps;
/**
 * Use is a basic button component.
 *
 * @param props - Props for the component, which are passed down to the underlying button
 * element.
 * @param props.size - The size of button render.
 * @param props.variant - The variant to render for the button. Options are "filled"
 * (default), "outlined", and "text".
 * @param props.startIcon - An optional icon to render before the start of the button
 * text. This can be a single icon or an array of icons. The icons will be formatted
 * to match the color and size of the button.
 * @param props.endIcon - The same as {@link startIcon}, but renders after the button
 * text.
 * @param props.iconSpacing - The spacing between the optional start and end icons
 * and the button text. Can be "small", "medium", "large", or a number representing
 * the spacing in rem.
 * @param props.onClickDelay - An optional delay to wait before calling the `onClick`
 * handler. This will cause the button to render a progress bar that fills up over the
 * specified time before calling the handler.
 */
declare const Core: <E extends ElementType = "button">({ size, variant, className, disabled, preventClick, level, trigger, triggerIndicator, onClickDelay, onClick, color: colorVal, status, style, onMouseDown, textColor, textVariant, tabIndex, contrast, children, defaultEl, el, ghost, ...rest }: ButtonProps<E>) => ReactElement;
export declare const Button: typeof Core;
export {};
//# sourceMappingURL=Button.d.ts.map