import { type ComponentPropsWithoutRef, type ReactElement } from "react";
import { TimeSpan } from "@synnaxlabs/x";
import { type Align } from '../align';
import { Text } from '../text';
import { Tooltip } from '../tooltip';
import { type ComponentSize } from '../util/component';
/** The variant of button */
export type Variant = "filled" | "outlined" | "text";
export interface ButtonExtensionProps {
    variant?: Variant;
    size?: ComponentSize;
    sharp?: boolean;
    loading?: boolean;
}
/** The base props accepted by all button types in this directory. */
export interface BaseProps extends ComponentPropsWithoutRef<"button">, ButtonExtensionProps {
}
/** The props for the {@link Button} component. */
export type ButtonProps = Omit<Text.WithIconProps<"button">, "size" | "startIcon" | "endIcon" | "level"> & ButtonExtensionProps & BaseProps & {
    level?: Text.Level;
    startIcon?: ReactElement | ReactElement[];
    endIcon?: ReactElement | ReactElement[];
    iconSpacing?: Align.SpaceProps["size"];
    disabled?: boolean;
    delay?: number | TimeSpan;
};
/**
 * 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.
 */
export declare const Button: import("react").ForwardRefExoticComponent<Omit<Omit<Text.WithIconProps<"button", "h1">, "size" | "level" | "startIcon" | "endIcon"> & ButtonExtensionProps & BaseProps & {
    level?: "small" | "h1" | "h2" | "h3" | "h4" | "h5" | "p" | undefined;
    startIcon?: ReactElement<any, string | import("react").JSXElementConstructor<any>> | ReactElement<any, string | import("react").JSXElementConstructor<any>>[] | undefined;
    endIcon?: ReactElement<any, string | import("react").JSXElementConstructor<any>> | ReactElement<any, string | import("react").JSXElementConstructor<any>>[] | undefined;
    iconSpacing?: Align.SpaceProps["size"];
    disabled?: boolean | undefined;
    delay?: number | TimeSpan | undefined;
} & Tooltip.WrapProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
