import React, { ReactElement } from "react";
import { type VariantProps } from "class-variance-authority";
import { alignPositions, wellKnownPositions } from "@base-repo/constants/tools-constants";
import { htmlTags } from "@base-repo/constants/html-element-names";
import { booleanStringValues } from "@base-repo/constants/type-string-values";
import { accessibilityAttributeNames, componentVariantPropNames } from "../../../fd-toolbox/constants/html-constants";
import { commonLowerCaseWords } from "@base-repo/constants/internal-common-strings";
/**
 * Extends {@link https:/cva.style/docs/getting-started/variants VariantProps} of {@link buttonVariants}
 */
export interface ButtonProps extends VariantProps<typeof buttonVariants> {
    className?: string;
    children?: React.ReactNode;
    onClick?: React.MouseEventHandler<HTMLButtonElement>;
    id?: string;
    type?: typeof htmlTags.button | "submit" | typeof commonLowerCaseWords.reset;
    style?: React.CSSProperties;
    tabIndex?: number;
    title?: string;
    disabled?: boolean;
    onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;
    /**
     * Text to display in the tooltip when hovering over the button
     */
    tooltipText?: string;
    /**
     * Side of the button where the tooltip should appear
     */
    tooltipSide?: typeof wellKnownPositions.top | typeof wellKnownPositions.left | typeof wellKnownPositions.right | typeof wellKnownPositions.bottom;
    /**
     * Additional CSS classes to apply to the tooltip content
     */
    tooltipClassName?: string;
    /**
     * Alignment of the tooltip relative to the button
     */
    tooltipAlign?: typeof alignPositions.start | typeof alignPositions.center | typeof alignPositions.end;
    /**
     * Ref to access the underlying button element
     */
    ref?: React.Ref<HTMLButtonElement>;
    [accessibilityAttributeNames.ariaControls]?: string;
    [accessibilityAttributeNames.ariaExpanded]?: Booleanish;
    [accessibilityAttributeNames.ariaHaspopup]?: Booleanish;
    [accessibilityAttributeNames.dataDisabled]?: string;
    [accessibilityAttributeNames.dataState]?: string;
    render?: ReactElement;
    onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
    onPointerDown?: React.PointerEventHandler<HTMLButtonElement>;
}
/** @monorepo-internal */
export type ButtonVariant = VariantProps<typeof buttonVariants>[typeof componentVariantPropNames.variant];
type Booleanish = boolean | typeof booleanStringValues.true | typeof booleanStringValues.false | "dialog" | "menu" | "grid" | "listbox" | "tree" | undefined;
/**
 * Using {@link https:/cva.style/docs/getting-started/variants class-variance-authority}
 */
export declare const buttonVariants: (props?: {
    variant?: "float" | "default" | "icon" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "fullRounded";
    size?: "default" | "icon" | "sm" | "lg";
} & import("class-variance-authority/types").ClassProp) => string;
/**
 * Based on {@link https:/ui.shadcn.com/docs/components/button Button}
 *
 * @param ButtonProps {@link ButtonProps}
 *
 * Based on {@link https:/www.radix-ui.com/primitives/docs/utilities/slot Slot}
 */
export declare function Button({ className, variant, size, tooltipText, tooltipSide, tooltipClassName, tooltipAlign, children, onClick, id, disabled, type, style, tabIndex, title, onMouseEnter, [accessibilityAttributeNames.ariaControls]: ariaControls, [accessibilityAttributeNames.ariaExpanded]: ariaExpanded, [accessibilityAttributeNames.ariaHaspopup]: ariaHaspopup, [accessibilityAttributeNames.dataDisabled]: dataDisabled, [accessibilityAttributeNames.dataState]: dataState, onKeyDown, onPointerDown, render, ref, }: ButtonProps): React.JSX.Element;
export declare namespace Button {
    var displayName: "Button";
}
export {};
