import React, { forwardRef, InputHTMLAttributes } from 'react'; import { Box } from './Box'; import { Text } from './Text'; export interface InputProps extends Omit, 'size'> { label?: string; error?: string; errorMessage?: string; hint?: string; fullWidth?: boolean; size?: 'sm' | 'md' | 'lg'; icon?: React.ReactNode; variant?: 'default' | 'error'; } export const Input = forwardRef(({ label, error, errorMessage, hint, fullWidth = false, size = 'md', icon, variant = 'default', ...props }, ref) => { const finalError = error || errorMessage; const sizeClasses = { sm: 'px-3 py-1.5 text-xs', md: 'px-4 py-2 text-sm', lg: 'px-4 py-3 text-base' }; const baseClasses = 'bg-[var(--ui-color-bg-surface)] border border-[var(--ui-color-border-default)] text-[var(--ui-color-text-high)] placeholder-[var(--ui-color-text-low)] focus:outline-none focus:border-[var(--ui-color-intent-primary)] transition-colors'; const errorClasses = (finalError || variant === 'error') ? 'border-[var(--ui-color-intent-critical)]' : ''; const widthClasses = fullWidth ? 'w-full' : ''; const classes = [ baseClasses, sizeClasses[size], errorClasses, widthClasses, icon ? 'pl-10' : '', ].filter(Boolean).join(' '); return ( {label && ( {label} )} {icon && ( {icon} )} {finalError && ( {finalError} )} {hint && !finalError && ( {hint} )} ); }); Input.displayName = 'Input';