import { ButtonHTMLAttributes, ReactNode } from 'react';
/** Visual emphasis variant for the button. */
export type ButtonVariant = 'primary' | 'secondary' | 'tertiary';
/** Size of the button. Arrow uses `data-size` attribute. */
export type ButtonSize = 'large' | 'small' | 'xs';
export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
    /** Button content. */
    children: ReactNode;
    /** Visual emphasis variant. Defaults to `'primary'`. */
    variant?: ButtonVariant;
    /** Button size. Defaults to `'large'`. */
    size?: ButtonSize;
    /** Enable inverse (dark background) styling via `data-inverse`. */
    inverse?: boolean;
    /**
     * Disables the button using `aria-disabled` (not native `disabled`),
     * keeping it focusable per Arrow accessibility guidelines.
     */
    disabled?: boolean;
    /** HTML button type. Defaults to `'button'`. */
    type?: 'button' | 'submit' | 'reset';
    /** Leading icon/SVG element rendered before the label. */
    icon?: ReactNode;
    /** Trailing decoration (only renders for tertiary variant). */
    trailingIcon?: ReactNode;
    /** Monochrome variant via `data-monochrome`. */
    monochrome?: boolean;
    /** Loading state — disables and shows screen reader status. */
    loading?: boolean;
    /** Accessible label (`aria-label`) for the button. */
    ariaLabel?: string;
    /** ID of element describing this button (`aria-describedby`). */
    describedBy?: string;
    /** Force focus state for demos. */
    focused?: boolean;
    /** Force hover state for demos. */
    hover?: boolean;
    /** Force pressed state for demos. */
    pressed?: boolean;
}
//# sourceMappingURL=Button.types.d.ts.map