import React from 'react';
import { type ComponentSize } from '../../../lib/utils';
import { type ComposableProps } from '../../../lib/slot';
import { IconName } from '../Icons';
import { type GlassVariant } from '../../../lib/glass';
/**
* Button variant options
* @public
*/
export type ButtonVariant = 'primary' | 'secondary' | 'destructive' | 'text' | 'link' | 'ghost' | 'dashed';
/**
* Button size options - uses unified ComponentSize
* @public
*/
export type ButtonSize = ComponentSize;
/**
* Button shape options
* @public
*/
export type ButtonShape = 'default' | 'rounded';
/**
* Icon position relative to button text
* @public
*/
export type IconPosition = 'leading' | 'trailing' | 'only';
/**
* Button component props
*
* @public
*
* @example
* ```tsx
* // Primary button (default variant)
*
*
* // Primary button with icon
*
*
* // Composable API with ButtonIcon and ButtonText
*
*
* // Icon-only button
*
*
* // Loading state
*
*
* // Link variant
*
*
* // With asChild
*
* ```
*/
export interface ButtonProps extends Omit, 'children'> {
/**
* Visual style variant
* @default 'primary'
*
* - `primary`: Main call-to-action, dark background
* - `secondary`: Secondary actions, outlined style
* - `destructive`: Delete/dangerous actions, red
* - `text`: Text-only button, minimal styling
* - `link`: Link-style button with underline
* - `ghost`: Transparent with border, fills on hover
* - `dashed`: Dashed border style
*/
variant?: ButtonVariant;
/**
* Button size
* @default 'md'
*
* Available sizes: `xxs` (x6), `xs` (x8), `sm` (x9), `md` (x10),
* `lg` (x12), `xl` (x14), `xxl` (x16)
*/
size?: ButtonSize;
/**
* Icon name from FT Design System icon library or custom React component
* Can be an IconName string or a custom React component
* @see {@link IconName} for available icon names
*/
icon?: IconName | React.ReactNode;
/**
* Icon size (only applies when icon is IconName string)
* @default Based on button size
*/
iconSize?: number;
/**
* Custom className for icon wrapper (only applies when icon is IconName string)
*/
iconClassName?: string;
/**
* Icon position relative to text
* @default 'leading'
*
* - `leading`: Icon before text
* - `trailing`: Icon after text
* - `only`: Icon-only button (no text)
*/
iconPosition?: IconPosition;
/**
* Button shape
* @default 'default'
*
* - `default`: Component radius token
* - `rounded`: Rounded corners (x3)
*/
shape?: ButtonShape;
/**
* Enable glassmorphism effect (applies to secondary, text, and ghost variants)
* - `true`: Standard glass effect
* - `'subtle'`: Subtle glass effect
* - `'prominent'`: Prominent glass effect
*/
glass?: GlassVariant;
/**
* Shows loading spinner and disables button
* @default false
*/
loading?: boolean;
/**
* Button content (text or React nodes)
* Not required for icon-only buttons (`iconPosition="only"`)
*/
children?: React.ReactNode;
}
/**
* Button Component
*
* A versatile, composable button component with multiple variants, sizes, and icon support.
* Supports all standard HTML button attributes and accessibility features.
* Defaults to primary variant for better developer experience.
*
* @public
*
* @example
* ```tsx
* import { Button, ButtonIcon, ButtonText } from 'ft-design-system';
*
* function MyComponent() {
* return (
*
* // Default primary button
*
*
* // Composable API
*
*
* // Secondary with icon
*
*
* // Loading state
*
*
* // With asChild
*
*
* );
* }
* ```
*
* @remarks
* - Defaults to `variant="primary"` for better DX
* - Supports composable API with ButtonIcon and ButtonText sub-components
* - Supports `asChild` prop to merge props with child element
* - Automatically adapts to light/dark/night themes via CSS variables
* - Icon-only buttons are square by default, circular if `rounded-full` class is added
* - Loading state shows spinner and disables interaction
* - Accessible: includes ARIA labels and keyboard navigation support
* - AI-protected by default. Use `ft-design-system/core` for unprotected version
*/
export declare const Button: React.ForwardRefExoticComponent>;
//# sourceMappingURL=Button.d.ts.map