import React, { type ReactNode, type MouseEvent } from "react";
import { type IconProp } from "src/lib/renderIcon";
type ButtonVariant = "default" | "secondary" | "destructive" | "destructive-soft" | "outline" | "ghost" | "link";
type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg";
type IconPosition = "left" | "right";
type ButtonType = "button" | "reset" | "submit";
interface ButtonTooltipProps {
    content?: ReactNode;
    position?: string;
    disabled?: boolean;
}
export interface ButtonProps {
    /** Visual variant of the button. */
    variant?: ButtonVariant;
    /** Size of the button. */
    size?: ButtonSize;
    /** Text label rendered inside the button. */
    label?: string;
    /** Icon component, element, or class-name string. */
    icon?: IconProp;
    /** Placement of the icon relative to the label. */
    iconPosition?: IconPosition;
    /** Show a loading spinner and prevent clicks. */
    loading?: boolean;
    /** Disable the button. */
    disabled?: boolean;
    /** Click handler. */
    onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
    /** Internal route (react-router `Link`). */
    to?: string;
    /** External URL (renders an anchor tag). */
    href?: string;
    /** HTML button type attribute. */
    type?: ButtonType;
    /** Stretch the button to fill its container. */
    fullWidth?: boolean;
    /** Additional CSS class names. */
    className?: string;
    /** Props forwarded to a wrapping Tooltip. */
    tooltipProps?: ButtonTooltipProps | null;
    /** Render as a custom element (polymorphic). */
    asChild?: boolean;
    /** Children rendered inside the button (fallback for `label`). */
    children?: ReactNode;
}
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
export { Button };
