summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/media-panel/drag-overlay.tsx
blob: 0c75d146022202247527b9398ad59c90c84ca6a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { Upload, Plus, Image } from "lucide-react";
import { Button } from "@/components/ui/button";

interface MediaDragOverlayProps {
	isVisible: boolean;
	isProcessing?: boolean;
	progress?: number;
	onClick?: () => void;
	isEmptyState?: boolean;
}

export function MediaDragOverlay({
	isVisible,
	isProcessing = false,
	progress = 0,
	onClick,
	isEmptyState = false,
}: MediaDragOverlayProps) {
	if (!isVisible) return null;

	const handleClick = (e: React.MouseEvent) => {
		if (isProcessing || !onClick) return;
		e.preventDefault();
		e.stopPropagation();
		onClick();
	};

	return (
		<div
			className="flex flex-col items-center justify-center gap-4 h-full text-center rounded-lg bg-foreground/5 hover:bg-foreground/10 transition-all duration-200 p-8"
			onClick={handleClick}
		>
			<div className="flex items-center justify-center">
				<Upload className="h-10 w-10 text-foreground" />
			</div>

			<div className="space-y-2">
				<p className="text-xs text-muted-foreground max-w-sm">
					{isProcessing
						? `Processing your files (${progress}%)`
						: "Drag and drop videos, photos, and audio files here"}
				</p>
			</div>

			{isProcessing && (
				<div className="w-full max-w-xs">
					<div className="w-full bg-muted/50 rounded-full h-2">
						<div
							className="bg-primary h-2 rounded-full transition-all duration-300"
							style={{ width: `${progress}%` }}
						/>
					</div>
				</div>
			)}
		</div>
	);
}