Installation
Usage
import ButtonFileUpload from "@/components/ruixen/button-file-upload";
export default function MyComponent() {
const handleFileSelect = (files: FileList | null) => {
if (files) {
console.log(
"Selected files:",
Array.from(files).map((f) => f.name),
);
}
};
return (
<div className="flex gap-4">
<ButtonFileUpload onFileSelect={handleFileSelect}>
Upload File
</ButtonFileUpload>
<ButtonFileUpload accept="image/*" onFileSelect={handleFileSelect}>
Upload Image
</ButtonFileUpload>
<ButtonFileUpload multiple onFileSelect={handleFileSelect}>
Upload Multiple
</ButtonFileUpload>
</div>
);
}Props
| Prop | Type | Default | Description |
|---|---|---|---|
onFileSelect | (files: FileList | null) => void | - | Callback with selected files |
accept | string | - | Accepted file types |
multiple | boolean | false | Allow multiple files |
variant | "default" | "outline" | "secondary" | "default" | Button style variant |
className | string | - | Additional CSS classes |
Features
- Hidden file input with styled button
- Accept attribute for file type filtering
- Single or multiple file selection
- Upload icon indicator
- Light and dark mode support

