import { AccessibilityProps, KeyboardHandlerMap, TokenContract } from '../shared/index.js';

type ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
type ButtonSize = 'xs' | 'sm' | 'default' | 'lg' | 'icon';
interface ButtonProps {
    variant?: ButtonVariant;
    size?: ButtonSize;
    disabled?: boolean;
    loading?: boolean;
    asChild?: boolean;
    type?: 'button' | 'submit' | 'reset';
}
interface ButtonAPI {
    /** ARIA attributes to spread on the element */
    ariaProps: Partial<AccessibilityProps>;
    /** Keyboard handlers to attach */
    keyboardHandlers: KeyboardHandlerMap;
    /** Whether interaction should be blocked */
    isInteractive: boolean;
    /** Data attributes for CSS styling hooks */
    dataAttributes: Record<string, string>;
}
declare function createButton(props?: ButtonProps): ButtonAPI;
declare function getButtonType(props: ButtonProps): string;

declare const buttonTokens: TokenContract;
declare const buttonVariants: (props?: ({
    variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | undefined;
    size?: "default" | "xs" | "sm" | "lg" | "icon" | undefined;
} & {
    className?: string;
}) | undefined) => string;

export { type ButtonAPI, type ButtonProps, type ButtonSize, type ButtonVariant, buttonTokens, buttonVariants, createButton, getButtonType };
