{"version":3,"file":"Input.cjs","names":[],"sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Input.module.css\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n    label?: string;\n    helperText?: string;\n    error?: string;\n    leftIcon?: ReactNode;\n    rightIcon?: ReactNode;\n    wrapperClassName?: string;\n    /** Visual size — drives height, padding and font via density-aware tokens. */\n    size?: InputSize;\n}\n\n/**\n * Labelled text input with helper/error slots and optional adornment icons.\n * Forwards refs to the underlying `<input>` for integration with form libraries.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n    {\n        label,\n        helperText,\n        error,\n        leftIcon,\n        rightIcon,\n        wrapperClassName,\n        className,\n        id,\n        required,\n        size = \"md\",\n        ...props\n    },\n    ref,\n) {\n    const generatedId = useId();\n    const inputId = id ?? generatedId;\n    const describedById = error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined;\n    const sizeClass = size === \"sm\" ? styles.sizeSm : size === \"lg\" ? styles.sizeLg : styles.sizeMd;\n\n    return (\n        <div className={cn(styles.wrapper, error && styles.error, wrapperClassName)}>\n            {label && (\n                <label htmlFor={inputId} className={styles.label}>\n                    {label}\n                    {required && <span className={styles.required}>*</span>}\n                </label>\n            )}\n            <div className={styles.field}>\n                {leftIcon && <span className={styles.iconLeft}>{leftIcon}</span>}\n                <input\n                    ref={ref}\n                    id={inputId}\n                    aria-invalid={!!error}\n                    aria-describedby={describedById}\n                    required={required}\n                    className={cn(\n                        styles.input,\n                        sizeClass,\n                        leftIcon && styles.hasLeftIcon,\n                        rightIcon && styles.hasRightIcon,\n                        className,\n                    )}\n                    {...props}\n                />\n                {rightIcon && <span className={styles.iconRight}>{rightIcon}</span>}\n            </div>\n            {error ? (\n                <span id={`${inputId}-error`} className={styles.errorText}>\n                    {error}\n                </span>\n            ) : helperText ? (\n                <span id={`${inputId}-helper`} className={styles.helper}>\n                    {helperText}\n                </span>\n            ) : null}\n        </div>\n    );\n});\n"],"mappings":"4HAsBA,IAAa,GAAA,EAAQ,EAAA,WAAA,CAAyC,SAC1D,CACI,QACA,aACA,QACA,WACA,YACA,mBACA,YACA,KACA,WACA,OAAO,KACP,GAAG,GAEP,EACF,CACE,IAAM,GAAA,EAAc,EAAA,MAAA,CAAM,EACpB,EAAU,GAAM,EAChB,EAAgB,EAAQ,GAAG,EAAQ,QAAU,EAAa,GAAG,EAAQ,SAAW,IAAA,GAChF,EAAY,IAAS,KAAO,EAAA,QAAO,OAAS,IAAS,KAAO,EAAA,QAAO,OAAS,EAAA,QAAO,OAEzF,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,GAAS,EAAA,QAAO,MAAO,CAAgB,EAA1E,SAAA,CACK,IACG,EAAA,EAAA,KAAA,CAAC,QAAD,CAAO,QAAS,EAAS,UAAW,EAAA,QAAO,MAA3C,SAAA,CACK,EACA,IAAY,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,SAAU,SAAA,GAAO,CAAA,CACnD,KAEX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAvB,SAAA,CACK,IAAY,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,SAAW,SAAA,CAAe,CAAA,GAC/D,EAAA,EAAA,IAAA,CAAC,QAAD,CACS,MACL,GAAI,EACJ,eAAc,CAAC,CAAC,EAChB,mBAAkB,EACR,WACV,UAAW,EAAA,GACP,EAAA,QAAO,MACP,EACA,GAAY,EAAA,QAAO,YACnB,GAAa,EAAA,QAAO,aACpB,CACJ,EACA,GAAI,CACP,CAAA,EACA,IAAa,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAY,SAAA,CAAgB,CAAA,CACjE,IACJ,GACG,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,GAAI,GAAG,EAAQ,QAAS,UAAW,EAAA,QAAO,UAC3C,SAAA,CACC,CAAA,EACN,GACA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,GAAI,GAAG,EAAQ,SAAU,UAAW,EAAA,QAAO,OAC5C,SAAA,CACC,CAAA,EACN,IACH,GAEb,CAAC"}