'use client'; import { useRef, useState } from 'react'; import clsx from 'clsx'; import { Button } from '../control1'; import { IconUpload } from '../icons1'; import { type Titled } from '../props'; import { Label } from './label1'; interface FileInputProps extends Titled, Omit, 'accept' | 'type'> { /** Label to display in file upload button. */ label: string; /** Filter: file types. */ acceptType?: string; /** Callback to set the `value`. Value is transmitted as `event.target.files[0]`. */ onChange?: (event: React.ChangeEvent) => void; } /** * FileInput is a component for selecting a `file`, displaying the selected file name. */ export function FileInput({ id, label, acceptType, title, className, style, onChange, ...restProps }: FileInputProps) { const inputRef = useRef(null); const [fileName, setFileName] = useState(''); const handleUploadClick = () => { inputRef.current?.click(); }; const handleFileChange = (event: React.ChangeEvent) => { if (event.target.files && event.target.files.length > 0) { setFileName(event.target.files[0].name); } else { setFileName(''); } onChange?.(event); }; return (
); }