import { ButtonHTMLAttributes, DetailedHTMLProps, FC } from "react";
import * as class_variance_authority_types9 from "class-variance-authority/types";
import { VariantProps } from "class-variance-authority";
import { LucideIcon } from "lucide-react";

//#region src/components/Button/Button.d.ts
/**
 * Button size variants for different use cases
 */
declare enum ButtonSize {
  SM = "sm",
  MD = "md",
  LG = "lg",
  XL = "xl",
  ICON_SM = "icon-sm",
  ICON_MD = "icon-md",
  ICON_LG = "icon-lg",
  ICON_XL = "icon-xl",
}
/**
 * Icon positioning within the button
 */
declare enum ButtonIconPosition {
  LEFT = "left",
  RIGHT = "right",
}
/**
 * Button visual style variants
 */
declare enum ButtonVariant {
  DEFAULT = "default",
  NONE = "none",
  OUTLINE = "outline",
  LINK = "link",
  INVISIBLE_LINK = "invisible-link",
  HOVERABLE = "hoverable",
  INPUT = "input",
}
/**
 * Button color themes that work with the design system
 */
declare enum ButtonColor {
  PRIMARY = "primary",
  SECONDARY = "secondary",
  DESTRUCTIVE = "destructive",
  NEUTRAL = "neutral",
  LIGHT = "light",
  DARK = "dark",
  TEXT = "text",
  TEXT_INVERSE = "text-inverse",
  ERROR = "error",
  SUCCESS = "success",
  CUSTOM = "custom",
}
/**
 * Text alignment options for button content
 */
declare enum ButtonTextAlign {
  LEFT = "left",
  CENTER = "center",
  RIGHT = "right",
}
/**
 * Enhanced button variants with improved accessibility and focus states
 */
declare const buttonVariants: (props?: {
  size?: "sm" | "md" | "lg" | "xl" | "icon-sm" | "icon-md" | "icon-lg" | "icon-xl";
  color?: "primary" | "secondary" | "destructive" | "neutral" | "light" | "dark" | "text" | "text-inverse" | "error" | "success" | "custom";
  variant?: "default" | "invisible-link" | "hoverable" | "none" | "input" | "link" | "outline";
  textAlign?: "left" | "right" | "center";
  isFullWidth?: boolean;
  hasIconLeft?: boolean;
  hasIconRight?: boolean;
} & class_variance_authority_types9.ClassProp) => string;
/**
 * Enhanced Button component props with comprehensive type safety and accessibility features
 */
type ButtonProps = DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> & VariantProps<typeof buttonVariants> & {
  /**
   * Accessible label for screen readers and assistive technologies.
   * This is required for accessibility compliance.
   */
  label: string;
  /**
   * Optional icon to display on the left side of the button
   */
  Icon?: FC | LucideIcon;
  /**
   * Optional icon to display on the right side of the button
   */
  IconRight?: FC | LucideIcon;
  /**
   * Additional CSS classes for icon styling
   */
  iconClassName?: string;
  /**
   * Shows loading spinner and disables button interaction when true
   */
  isLoading?: boolean;
  /**
   * Marks the button as active (useful for navigation or toggle states)
   */
  isActive?: boolean;
  /**
   * Marks the button as selected
   */
  isSelected?: boolean;
  /**
   * Makes the button span the full width of its container
   */
  isFullWidth?: boolean;
  /**
   * Additional description for complex buttons (optional)
   */
  'aria-describedby'?: string;
  /**
   * Expanded state for collapsible sections (optional)
   */
  'aria-expanded'?: boolean;
  /**
   * Controls whether the button has popup/menu (optional)
   */
  'aria-haspopup'?: boolean | 'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';
  /**
   * Indicates if button controls are currently pressed (for toggle buttons)
   */
  'aria-pressed'?: boolean;
};
/**
 * Button Component - A comprehensive, accessible button component
 *
 * Features:
 * - Full accessibility compliance with ARIA attributes
 * - Multiple variants and sizes for different use cases
 * - Icon support (left and right positioning)
 * - Loading states with spinner
 * - Keyboard navigation support
 * - Focus management with visible indicators
 * - Responsive design adaptations
 *
 * @example
 * ```tsx
 * // Basic button
 * <Button label="Click me">Click me</Button>
 *
 * // Button with icon and loading state
 * <Button
 *   label="Save document"
 *   Icon={SaveIcon}
 *   isLoading={saving}
 *   disabled={!hasChanges}
 * >
 *   Save
 * </Button>
 *
 * // Destructive action button
 * <Button
 *   variant={ButtonVariant.OUTLINE}
 *   color={ButtonColor.DESTRUCTIVE}
 *   label="Delete item permanently"
 *   aria-describedby="delete-warning"
 * >
 *   Delete
 * </Button>
 * ```
 */
declare const Button: FC<ButtonProps>;
//#endregion
export { Button, ButtonColor, ButtonIconPosition, ButtonProps, ButtonSize, ButtonTextAlign, ButtonVariant };
//# sourceMappingURL=Button.d.ts.map