import React, { useCallback, useMemo, useRef, useState } from "react";
import { motion } from "framer-motion";
import { UploadCloud, Info, Search, CheckCircle2, XCircle, File } from "lucide-react";
// ------------------------------------------------------------
// Minimal UI primitives (Tailwind-styled)
// ------------------------------------------------------------
const Button = ({ className = "", children, ...props }) => (
);
const Card = ({ className = "", children }) => (
{children}
);
const CardHeader = ({ className = "", children }) => (
{children}
);
const CardTitle = ({ className = "", children }) => (
{children}
);
const CardContent = ({ className = "", children }) => (
{children}
);
const Badge = ({ children, className = "" }) => (
{children}
);
// ------------------------------------------------------------
// Data: Master list of accepted extensions (grouped)
// Each item: { ext, platform, desc }
// ------------------------------------------------------------
const EXT_GROUPS = [
{
title: "1. EXECUTABLE & INSTALLATION FILES",
items: [
{ ext: ".exe", platform: "Windows", desc: "Executable application" },
{ ext: ".msi", platform: "Windows", desc: "Microsoft Installer package" },
{ ext: ".app", platform: "macOS/Linux", desc: "Application bundle" },
{ ext: ".bat", platform: "Windows", desc: "Batch script for automation" },
{ ext: ".cmd", platform: "Windows", desc: "Command script" },
{ ext: ".com", platform: "Windows/DOS", desc: "Legacy executable format" },
{ ext: ".scr", platform: "Windows", desc: "Screensaver executable" },
{ ext: ".sh", platform: "Linux/Unix", desc: "Shell script file" },
{ ext: ".run", platform: "Linux", desc: "Self-extracting installer" },
{ ext: ".bin", platform: "All", desc: "Binary executable or firmware" },
{ ext: ".out", platform: "Linux", desc: "Compiled executable output" },
{ ext: ".deb", platform: "Linux", desc: "Debian-based software package" },
{ ext: ".rpm", platform: "Linux", desc: "RedHat Package Manager package" },
{ ext: ".pkg", platform: "macOS/Linux", desc: "Generic installer package" },
{ ext: ".appimage", platform: "Linux", desc: "Portable app executable" },
{ ext: ".wsf", platform: "Windows", desc: "Windows Script File" },
{ ext: ".gadget", platform: "Windows", desc: "Desktop gadget installer" },
],
},
{
title: "2. TEXT & DOCUMENT FILES",
items: [
{ ext: ".txt", platform: "All", desc: "Plain text file" },
{ ext: ".log", platform: "All", desc: "Application/system log file" },
{ ext: ".md", platform: "All", desc: "Markdown documentation" },
{ ext: ".csv", platform: "All", desc: "Comma-Separated Values data" },
{ ext: ".json", platform: "All", desc: "Data format for APIs/config" },
{ ext: ".yaml", platform: "All", desc: "Human-readable config format" },
{ ext: ".yml", platform: "All", desc: "Alternate YAML extension" },
{ ext: ".xml", platform: "All", desc: "Structured markup language" },
{ ext: ".doc", platform: "Windows", desc: "MS Word document (old)" },
{ ext: ".docx", platform: "Windows", desc: "MS Word document (modern)" },
{ ext: ".odt", platform: "Linux", desc: "OpenDocument text file" },
{ ext: ".rtf", platform: "Windows", desc: "Rich Text Format" },
{ ext: ".tex", platform: "All", desc: "LaTeX scientific document" },
{ ext: ".pdf", platform: "All", desc: "Portable Document Format" },
{ ext: ".epub", platform: "All", desc: "eBook format" },
{ ext: ".mobi", platform: "All", desc: "Kindle eBook format" },
{ ext: ".pages", platform: "macOS", desc: "Apple Pages document" },
],
},
{
title: "3. IMAGE & GRAPHIC FILES",
items: [
{ ext: ".jpg", platform: "All", desc: "Compressed image" },
{ ext: ".jpeg", platform: "All", desc: "JPEG image" },
{ ext: ".png", platform: "All", desc: "Lossless image" },
{ ext: ".gif", platform: "All", desc: "Animated/static image" },
{ ext: ".bmp", platform: "Windows", desc: "Bitmap image" },
{ ext: ".tiff", platform: "All", desc: "High-quality image" },
{ ext: ".tif", platform: "All", desc: "TIFF alt extension" },
{ ext: ".webp", platform: "All", desc: "Optimized web image" },
{ ext: ".heic", platform: "macOS/iOS", desc: "High Efficiency Image Codec" },
{ ext: ".ico", platform: "Windows", desc: "Icon file" },
{ ext: ".icns", platform: "macOS", desc: "Mac icon file" },
{ ext: ".svg", platform: "All", desc: "Scalable vector graphics" },
{ ext: ".psd", platform: "Windows", desc: "Photoshop project" },
{ ext: ".ai", platform: "Windows", desc: "Illustrator file" },
{ ext: ".xcf", platform: "Linux", desc: "GIMP project" },
{ ext: ".raw", platform: "All", desc: "Camera RAW data" },
],
},
{
title: "4. AUDIO & MUSIC FILES",
items: [
{ ext: ".mp3", platform: "All", desc: "Compressed audio" },
{ ext: ".wav", platform: "All", desc: "Uncompressed audio" },
{ ext: ".ogg", platform: "Linux/All", desc: "Open-source audio" },
{ ext: ".flac", platform: "All", desc: "Lossless audio" },
{ ext: ".aac", platform: "All", desc: "Advanced Audio Coding" },
{ ext: ".wma", platform: "Windows", desc: "Windows Media Audio" },
{ ext: ".midi", platform: "All", desc: "MIDI data" },
{ ext: ".mid", platform: "All", desc: "MIDI alt extension" },
{ ext: ".m4a", platform: "All", desc: "MPEG-4 audio" },
{ ext: ".opus", platform: "All", desc: "VoIP-optimized codec" },
],
},
{
title: "5. VIDEO & MULTIMEDIA FILES",
items: [
{ ext: ".mp4", platform: "All", desc: "Widely used video" },
{ ext: ".mkv", platform: "All", desc: "Matroska container" },
{ ext: ".avi", platform: "Windows", desc: "Audio Video Interleave" },
{ ext: ".mov", platform: "macOS", desc: "QuickTime video" },
{ ext: ".wmv", platform: "Windows", desc: "Windows Media Video" },
{ ext: ".webm", platform: "All", desc: "Web-optimized video" },
{ ext: ".flv", platform: "All", desc: "Flash Video" },
{ ext: ".mpeg", platform: "All", desc: "MPEG-1/2 video" },
{ ext: ".mpg", platform: "All", desc: "MPEG alt extension" },
{ ext: ".3gp", platform: "All", desc: "Mobile video" },
{ ext: ".m4v", platform: "All", desc: "iTunes video" },
{ ext: ".vob", platform: "All", desc: "DVD video" },
{ ext: ".ts", platform: "All", desc: "MPEG transport stream" },
{ ext: ".f4v", platform: "All", desc: "Adobe Flash MP4 variant" },
],
},
{
title: "6. COMPRESSED & ARCHIVE FILES",
items: [
{ ext: ".zip", platform: "All", desc: "Compressed archive" },
{ ext: ".rar", platform: "All", desc: "RAR archive" },
{ ext: ".7z", platform: "All", desc: "High-compression format" },
{ ext: ".tar", platform: "Linux", desc: "Archive container" },
{ ext: ".gz", platform: "Linux", desc: "Gzip compression" },
{ ext: ".tar.gz", platform: "Linux", desc: "Tar + gzip" },
{ ext: ".bz2", platform: "Linux", desc: "Bzip2-compressed" },
{ ext: ".xz", platform: "Linux", desc: "XZ-compressed" },
{ ext: ".iso", platform: "All", desc: "Disk image" },
{ ext: ".img", platform: "All", desc: "Raw disk image" },
{ ext: ".dmg", platform: "macOS", desc: "Disk image installer" },
{ ext: ".cab", platform: "Windows", desc: "Cabinet archive" },
{ ext: ".arj", platform: "All", desc: "Legacy archive" },
{ ext: ".zst", platform: "Linux", desc: "Zstandard archive" },
],
},
{
title: "7. SYSTEM & CONFIGURATION FILES",
items: [
{ ext: ".dll", platform: "Windows", desc: "Dynamic Link Library" },
{ ext: ".sys", platform: "Windows", desc: "System driver" },
{ ext: ".drv", platform: "Windows", desc: "Legacy driver" },
{ ext: ".ocx", platform: "Windows", desc: "Object linking component" },
{ ext: ".ini", platform: "Windows", desc: "Initialization file" },
{ ext: ".cfg", platform: "All", desc: "App configuration" },
{ ext: ".conf", platform: "Linux", desc: "System configuration" },
{ ext: ".reg", platform: "Windows", desc: "Registry entries backup" },
{ ext: ".hosts", platform: "All", desc: "Hosts file" },
{ ext: ".tmp", platform: "All", desc: "Temporary file" },
{ ext: ".lock", platform: "Linux", desc: "Process lock" },
{ ext: ".swap", platform: "Linux", desc: "Swap memory file" },
{ ext: ".ko", platform: "Linux", desc: "Kernel object module" },
{ ext: ".dmp", platform: "Windows", desc: "Memory dump" },
],
},
{
title: "8. PROGRAMMING & DEVELOPMENT FILES",
items: [
{ ext: ".py", platform: "All", desc: "Python script" },
{ ext: ".pyc", platform: "All", desc: "Compiled Python bytecode" },
{ ext: ".java", platform: "All", desc: "Java source" },
{ ext: ".class", platform: "All", desc: "Compiled Java class" },
{ ext: ".jar", platform: "All", desc: "Java archive" },
{ ext: ".c", platform: "All", desc: "C source" },
{ ext: ".cpp", platform: "All", desc: "C++ source" },
{ ext: ".h", platform: "All", desc: "C/C++ header" },
{ ext: ".cs", platform: "Windows", desc: "C# source" },
{ ext: ".vb", platform: "Windows", desc: "Visual Basic source" },
{ ext: ".js", platform: "All", desc: "JavaScript file" },
{ ext: ".ts", platform: "All", desc: "TypeScript source" },
{ ext: ".jsx", platform: "All", desc: "React JavaScript" },
{ ext: ".tsx", platform: "All", desc: "React TypeScript" },
{ ext: ".html", platform: "All", desc: "HyperText Markup" },
{ ext: ".css", platform: "All", desc: "Stylesheet" },
{ ext: ".php", platform: "All", desc: "PHP script" },
{ ext: ".rb", platform: "All", desc: "Ruby source" },
{ ext: ".go", platform: "All", desc: "Golang source" },
{ ext: ".rs", platform: "All", desc: "Rust source" },
{ ext: ".kt", platform: "All", desc: "Kotlin source" },
{ ext: ".dart", platform: "All", desc: "Flutter/Dart source" },
{ ext: ".json", platform: "All", desc: "Data exchange" },
{ ext: ".sql", platform: "All", desc: "Structured Query Language" },
{ ext: ".db", platform: "All", desc: "Database file" },
{ ext: ".env", platform: "All", desc: "Environment variables" },
],
},
{
title: "9. DATABASE & BACKEND FILES",
items: [
{ ext: ".sqlite", platform: "All", desc: "SQLite database" },
{ ext: ".dbf", platform: "Windows", desc: "dBase database" },
{ ext: ".accdb", platform: "Windows", desc: "MS Access database" },
{ ext: ".mdb", platform: "Windows", desc: "Legacy Access DB" },
{ ext: ".ndf", platform: "Windows", desc: "SQL Server secondary DB" },
{ ext: ".ldf", platform: "Windows", desc: "SQL Server log DB" },
{ ext: ".frm", platform: "Linux", desc: "MySQL/MariaDB schema" },
{ ext: ".ibd", platform: "Linux", desc: "InnoDB table file" },
{ ext: ".mdf", platform: "Windows", desc: "SQL Server primary DB" },
{ ext: ".parquet", platform: "All", desc: "Columnar big data storage" },
{ ext: ".avro", platform: "All", desc: "Big Data Avro" },
],
},
{
title: "10. VIRTUAL MACHINES & FIRMWARE FILES",
items: [
{ ext: ".vmdk", platform: "All", desc: "VMware virtual disk" },
{ ext: ".vdi", platform: "All", desc: "VirtualBox virtual disk" },
{ ext: ".vhd", platform: "Windows", desc: "Hyper-V virtual disk" },
{ ext: ".vhdx", platform: "Windows", desc: "Hyper-V next-gen" },
{ ext: ".ovf", platform: "All", desc: "Open Virtualization Format" },
{ ext: ".ova", platform: "All", desc: "Open Virtual Appliance" },
{ ext: ".qcow2", platform: "Linux", desc: "QEMU/KVM disk image" },
{ ext: ".rom", platform: "All", desc: "Firmware ROM image" },
{ ext: ".bin", platform: "All", desc: "BIOS/firmware dump" },
{ ext: ".efi", platform: "All", desc: "UEFI bootloader" },
],
},
{
title: "11. SPECIALIZED & MISCELLANEOUS FILES",
items: [
{ ext: ".ics", platform: "All", desc: "Calendar event" },
{ ext: ".vcf", platform: "All", desc: "Virtual Contact File" },
{ ext: ".ttf", platform: "All", desc: "TrueType font" },
{ ext: ".otf", platform: "All", desc: "OpenType font" },
{ ext: ".fon", platform: "Windows", desc: "Legacy font" },
{ ext: ".srt", platform: "All", desc: "Subtitle file" },
{ ext: ".ass", platform: "All", desc: "Advanced subtitle" },
{ ext: ".cue", platform: "All", desc: "Disk image cue sheet" },
{ ext: ".nfo", platform: "Windows", desc: "Info file" },
{ ext: ".sha1", platform: "All", desc: "Checksum file" },
{ ext: ".pem", platform: "All", desc: "SSL cert/private key" },
{ ext: ".pfx", platform: "All", desc: "Encrypted cert container" },
{ ext: ".key", platform: "All", desc: "Software license key" },
{ ext: ".lic", platform: "All", desc: "License file" },
{ ext: ".sig", platform: "All", desc: "Digital signature" },
],
},
];
// Build a unique set of extensions for validation &
const ALL_EXTS = Array.from(
new Set(
EXT_GROUPS.flatMap((g) => g.items.map((i) => i.ext.toLowerCase()))
)
).sort();
// ------------------------------------------------------------
// Helper: pretty file size
// ------------------------------------------------------------
const prettyBytes = (num) => {
if (!Number.isFinite(num)) return "-";
const units = ["B", "KB", "MB", "GB", "TB"];
let i = 0;
while (num >= 1024 && i < units.length - 1) {
num /= 1024;
i++;
}
return `${num.toFixed(num < 10 && i > 0 ? 1 : 0)} ${units[i]}`;
};
// ------------------------------------------------------------
// Component: Filebin.pro Homepage
// ------------------------------------------------------------
export default function FilebinProHome() {
const [files, setFiles] = useState([]);
const [dragActive, setDragActive] = useState(false);
const [showList, setShowList] = useState(false);
const [query, setQuery] = useState("");
const inputRef = useRef(null);
const acceptAttr = useMemo(() => ALL_EXTS.join(","), []);
const onFiles = useCallback((fileList) => {
const toArray = Array.from(fileList || []);
if (!toArray.length) return;
const prepared = toArray.map((f) => {
const ext = (f.name.match(/\.[^.]+$/)?.[0] || "").toLowerCase();
const allowed = ext && ALL_EXTS.includes(ext);
return {
id: `${f.name}-${f.size}-${Math.random().toString(36).slice(2, 7)}`,
file: f,
name: f.name,
size: f.size,
type: f.type,
ext,
allowed,
progress: 0,
status: allowed ? "uploading" : "blocked",
};
});
setFiles((prev) => [...prepared, ...prev]);
// Simulate upload progress for allowed files
prepared.forEach((item) => {
if (!item.allowed) return;
const tick = () => {
setFiles((curr) =>
curr.map((c) =>
c.id === item.id
? { ...c, progress: Math.min(100, c.progress + Math.random() * 18 + 7), status: c.progress >= 99 ? "done" : "uploading" }
: c
)
);
};
const interval = setInterval(() => {
tick();
}, 250);
setTimeout(() => clearInterval(interval), 2600 + Math.random() * 1200);
});
}, []);
const onDrop = (e) => {
e.preventDefault();
e.stopPropagation();
setDragActive(false);
onFiles(e.dataTransfer.files);
};
const onDragOver = (e) => {
e.preventDefault();
e.stopPropagation();
e.dataTransfer.dropEffect = "copy";
if (!dragActive) setDragActive(true);
};
const onDragLeave = (e) => {
e.preventDefault();
e.stopPropagation();
setDragActive(false);
};
const filteredGroups = useMemo(() => {
if (!query.trim()) return EXT_GROUPS;
const q = query.toLowerCase();
return EXT_GROUPS.map((g) => ({
...g,
items: g.items.filter(
(i) => i.ext.toLowerCase().includes(q) || i.platform.toLowerCase().includes(q) || i.desc.toLowerCase().includes(q)
),
})).filter((g) => g.items.length > 0);
}, [query]);
return (
{/* Decorative gradients */}
{/* Header */}
{/* Hero / Uploader */}
{/* Dropzone */}
Upload your files here
Drag & drop anywhere inside the panel, or click to browse.
.zip
.rar
.txt
inputRef.current?.click()}
className={`group relative grid cursor-pointer place-items-center rounded-2xl border-2 border-dashed p-10 transition-all ${dragActive ? "border-fuchsia-400/70 bg-fuchsia-400/5" : "border-white/20 hover:border-white/30"}`}
>
Drop files to upload
or click to choose from your device
Accepted: {ALL_EXTS.length}+ extensions
onFiles(e.target.files)}
/>
{/* Upload queue */}
{files.length > 0 && (
{files.map((f) => (
{f.allowed ? : }
{f.name}
{prettyBytes(f.size)}
{f.allowed
? f.progress >= 100
? "Uploaded"
: "Uploading..."
: `Blocked: .${f.name.split('.').pop()?.toLowerCase()} is not in the allowed list`}
{f.allowed && f.progress >= 100 && (
)}
))}
)}
{/* Right rail: Feature highlights */}
Why Filebin.pro?
{/* Footer */}
{/* Extensions Modal */}
{showList && (
setShowList(false)}>
e.stopPropagation()}
>
MASTER LIST — 300+ Common Windows & Linux File Extensions
Showing {ALL_EXTS.length} extensions accepted by Filebin.pro
{filteredGroups.map((group) => (
{group.title}
{group.items.map((item) => (
-
{item.ext}
{item.platform}
{item.desc}
Accepted
))}
))}
Tip: You can filter (e.g., ".iso", "Linux", "video").
)}
);
}
function FeatureRow({ title, desc }) {
return (
);
}