import { default as React } from 'react';
import { ButtonProps as AriaButtonProps } from 'react-aria-components';
import { AvatarProps, AvatarSize } from '../Avatar/Avatar';
export declare const buttonStyles: {
    primary: string;
    secondary: string;
    light: string;
    text: string;
    outline: string;
    danger: string;
};
export declare const buttonSizes: {
    sm: string;
    md: string;
    lg: string;
};
type ButtonSize = keyof typeof buttonSizes;
export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'style'> {
    /**
     * Press handler — unifies pointer, keyboard, and touch (React Aria). Prefer
     * this over `onClick`.
     */
    onPress?: AriaButtonProps['onPress'];
    /**
     * @deprecated Use `onPress`. Still fires for now; removed in a future major.
     */
    onClick?: React.MouseEventHandler<HTMLButtonElement>;
    /** Disable the button (non-interactive, not focusable). */
    isDisabled?: boolean;
    /**
     * @deprecated Use `isDisabled`. Still works for now; removed in a future major.
     */
    disabled?: boolean;
    /**
     * @deprecated Pass `aria-label` directly instead. Still works for now;
     * removed in a future major.
     */
    ariaLabel?: string;
    icon?: React.ReactNode;
    loading?: boolean;
    variant?: keyof typeof buttonStyles;
    size?: ButtonSize;
    block?: boolean;
    className?: string;
    testId?: string;
}
export interface ButtonAvatarProps extends Omit<AvatarProps, 'size'> {
    /** Override the auto-derived size (defaults to follow the button's size). */
    size?: AvatarSize;
}
/**
 * Flush leading avatar for a trigger pill — `<Button><Button.Avatar …/>Name</Button>`.
 * Sits concentric with the pill's rounded left edge (via a negative margin that
 * eats the button's left padding), so the button keeps its token-driven chrome
 * instead of a hand-copied class string.
 */
declare function ButtonAvatar({ size, className, ...rest }: ButtonAvatarProps): React.JSX.Element;
declare namespace ButtonAvatar {
    var displayName: string;
}
export interface ButtonLabelProps extends React.HTMLAttributes<HTMLSpanElement> {
    /**
     * Cap the label width (any CSS length, e.g. `'20ch'`). Longer text truncates
     * with an ellipsis. Omit to let the label size to its content.
     */
    maxWidth?: string;
}
/**
 * Truncating label for a trigger pill — pairs with {@link ButtonAvatar}. Owns
 * the flex `min-w-0` footgun so a long name ellipsizes instead of blowing the
 * pill out: `<Button><Button.Avatar …/><Button.Label maxWidth="20ch">{name}</Button.Label></Button>`.
 */
declare function ButtonLabel({ maxWidth, className, style, children, ...rest }: ButtonLabelProps): React.JSX.Element;
declare namespace ButtonLabel {
    var displayName: string;
}
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>> & {
    Avatar: typeof ButtonAvatar;
    Label: typeof ButtonLabel;
};
export {};
//# sourceMappingURL=Button.d.ts.map