import React, { type ReactNode, type MouseEvent } from "react";
import { type IconProp } from "src/shared/renderIcon";
export declare const BUTTON_VARIANTS: readonly ["default", "secondary", "destructive", "destructive-soft", "outline", "ghost", "link"];
export declare const BUTTON_SIZES: readonly ["default", "xs", "sm", "lg", "icon", "icon-xs", "icon-sm", "icon-lg"];
export type ButtonVariant = (typeof BUTTON_VARIANTS)[number];
export type ButtonSize = (typeof BUTTON_SIZES)[number];
type IconPosition = "left" | "right";
type ButtonType = "button" | "reset" | "submit";
interface ButtonTooltipProps {
    content?: ReactNode;
    position?: string;
    disabled?: boolean;
}
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type" | "disabled" | "className" | "children" | "onClick"> {
    /** 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;
    /**
     * Content rendered after the label and any right-side icon (e.g., a trailing
     * chevron, badge, or shortcut indicator). Auto-wrapped with
     * `data-icon="inline-end"` so the button's compact end-padding kicks in.
     */
    trailing?: ReactNode;
    /** Children rendered inside the button (fallback for `label`). */
    children?: ReactNode;
}
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
export { Button };
