import { default as React } from 'react';
import { default as IInputProps } from './IInputProps';
import { InputType } from './types';
/**
 * Input component.
 * @param props {@link IInputProps} - Props for the Input component
 * @returns The rendered Input component
 *
 * @example
 * ```tsx
 * // Basic usage with default settings (text input)
 * function App() {
 *   return <Input label="Username" placeholder="Enter your username" />;
 * }
 * ```
 *
 * @example
 * ```tsx
 * // Custom configuration with email input and description
 * function App() {
 *   return (
 *     <Input
 *       label="Email"
 *       type="email"
 *       placeholder="Enter your email"
 *       description="This is an input description."
 *     />
 *   );
 * }
 * ```
 *
 * @example
 * ```tsx
 * // Layout prop: horizontal layout (label next to input)
 * <Input
 *   layout="horizontal"
 *   label="Username"
 *   placeholder="Enter username"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Layout prop: vertical layout (default - label above input)
 * <Input
 *   layout="vertical"
 *   label="Username"
 *   placeholder="Enter username"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Type prop: different input types
 * <Input type="text" label="Text" />
 * <Input type="email" label="Email" />
 * <Input type="number" label="Number" />
 * <Input type="password" label="Password" />
 * <Input type="tel" label="Phone" />
 * <Input type="url" label="Website" />
 * <Input type="file" label="Upload file" />
 * ```
 *
 * @example
 * ```tsx
 * // Controlled input with value and onChange
 * function App() {
 *   const [value, setValue] = useState('');
 *   return (
 *     <Input
 *       label="Controlled input"
 *       value={value}
 *       onChange={(newValue) => setValue(newValue)}
 *     />
 *   );
 * }
 * ```
 *
 * @example
 * ```tsx
 * // Input with description
 * <Input
 *   label="Email"
 *   description="We'll never share your email with anyone else."
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Disabled input
 * <Input
 *   label="Disabled input"
 *   disabled
 *   value="Cannot be edited"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with icons
 * <Input
 *   label="Search"
 *   leftIcon="Search"
 *   placeholder="Search items..."
 * />
 *
 * <Input
 *   label="Password"
 *   type="password"
 *   rightIcon="EyeOff"
 *   placeholder="Enter password"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with prefix and suffix
 * <Input
 *   label="Price"
 *   prefix="$"
 *   placeholder="0.00"
 * />
 *
 * <Input
 *   label="Weight"
 *   suffix="kg"
 *   placeholder="Enter weight"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with notice
 * <Input
 *   label="Username"
 *   notice="Required"
 *   placeholder="Enter username"
 * />
 *
 * <Input
 *   label="Password"
 *   type="password"
 *   notice="Strong"
 *   isNoticeRight={true}
 *   placeholder="Enter password"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with error message
 * <Input
 *   label="Email"
 *   type="email"
 *   errorMessage="Please enter a valid email address"
 *   placeholder="Enter email"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with maxLength
 * <Input
 *   label="Tweet"
 *   maxLength={280}
 *   placeholder="What's happening?"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with autoComplete
 * <Input
 *   label="Email"
 *   type="email"
 *   autoComplete="email"
 *   placeholder="Enter email"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input size variants
 * <Input
 *   label="Default size"
 *   size="default"
 *   placeholder="Default input size"
 * />
 *
 * <Input
 *   label="Small size"
 *   size="sm"
 *   placeholder="Smaller input"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Input with event handlers
 * <Input
 *   label="Interactive input"
 *   onFocus={() => console.log('Input focused')}
 *   onBlur={() => console.log('Input blurred')}
 *   placeholder="Click me"
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Custom configuration with email input and description
 * function App() {
 *   return (
 *     <Input
 *       label="Email"
 *       type="email"
 *       placeholder="Enter your email"
 *       description="This is an input description."
 *     />
 *   );
 * }
 * ```
 *
 */
declare const Input: {
    <T extends InputType = InputType>({ ref, layout, label, id, type, value, inputMode, description, disabled, readOnly, name, placeholder, onChange, onFocus, onBlur, leftIcon, rightIcon, prefix, suffix, maxLength, autoComplete, errorMessage, notice, isNoticeRight, size, isError, ...props }: IInputProps<T> & React.RefAttributes<HTMLInputElement>): React.ReactElement;
    displayName: string;
};
export default Input;
