import React from 'react'; import { type ComponentSize } from '../../../lib/utils'; import { IconName } from '../Icons'; import { type GlassVariant } from '../../../lib/glass'; /** * Input component props * * @public * * @example * ```tsx * // Composable API (recommended) * * Email * * Invalid email * * * // Declarative API (deprecated) * * ``` */ export interface InputProps extends Omit, 'size'> { /** * Input content (for composable API) */ children?: React.ReactNode; /** * Label text displayed above the input */ label?: string; /** * Shows mandatory indicator (*) next to label * @default false */ labelMandatory?: boolean; /** * Shows optional indicator next to label * @default false */ labelOptional?: boolean; /** * Shows suffix icon in label * @default false */ labelSuffixIcon?: boolean; /** * Custom icon component for label */ labelIcon?: React.ReactNode; /** * Error message displayed below input * When provided, input shows error styling */ error?: string; /** * Warning message displayed below input * When provided, input shows warning styling */ warning?: string; /** * Success message displayed below input * When provided, input shows success styling */ success?: string; /** * Helper text displayed below input * Provides additional context or instructions */ helperText?: string; /** * Icon displayed on the left side of input * Can be an IconName string or a custom React component * @see {@link IconName} for available icon names */ leadingIcon?: IconName | React.ReactNode; /** * Icon displayed on the right side of input * Can be an IconName string or a custom React component * @see {@link IconName} for available icon names */ trailingIcon?: IconName | React.ReactNode; /** * Size for leading icon (only applies when leadingIcon is IconName string) * @default Based on input size */ leadingIconSize?: number; /** * Size for trailing icon (only applies when trailingIcon is IconName string) * @default Based on input size */ trailingIconSize?: number; /** * Additional CSS classes for leading icon container */ leadingIconClassName?: string; /** * Additional CSS classes for trailing icon container */ trailingIconClassName?: string; /** * Additional CSS classes for InputField wrapper div */ wrapperClassName?: string; /** * Additional inline styles for InputField wrapper div */ wrapperStyle?: React.CSSProperties; /** * Input size * @default 'md' * * Available sizes: `xxs` (x4), `xs` (x6), `sm` (x8), `md` (x10), * `lg` (x12), `xl` (x14), `xxl` (x16) */ size?: ComponentSize; /** * Visual style variant * @default 'default' * * - `default`: Standard input with border * - `filled`: Filled background style * - `outlined`: Outlined border style */ variant?: 'default' | 'filled' | 'outlined'; /** * Enable glassmorphism effect on input background * - `true`: Standard glass effect * - `'subtle'`: Subtle glass effect * - `'prominent'`: Prominent glass effect */ glass?: GlassVariant; } /** * Input Component * * A versatile text input component with label, validation states, icons, and helper text. * Supports both composable API (recommended) and declarative API (deprecated). * * @public * * @example * ```tsx * // Composable API (recommended) * import { Input, InputLabel, InputField, InputError, InputHelper } from 'ft-design-system'; * * function MyForm() { * const [email, setEmail] = useState(''); * const [error, setError] = useState(''); * * return ( * * Email Address * setEmail(e.target.value)} * leadingIcon="mail" * placeholder="Enter your email" * /> * {error && {error}} * We'll never share your email * * ); * } * ``` * * @remarks * - Composable API provides maximum flexibility and control * - All sub-components (InputLabel, InputField, InputError, etc.) support `asChild` * - Automatically generates accessible IDs for labels and error messages * - Supports validation states: error, warning, success * - Icon positioning adapts to input size * - Accessible: includes ARIA attributes and keyboard navigation * - Declarative API is deprecated but still functional for backward compatibility */ export declare const Input: React.ForwardRefExoticComponent>; //# sourceMappingURL=Input.d.ts.map