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 * * * // 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