File size: 1,920 Bytes
a8f12e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
function formatBytes(bytes) {
  if (!bytes) return "0 B";
  const units = ["B", "KB", "MB", "GB"];
  const i = Math.floor(Math.log(bytes) / Math.log(1024));
  return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${units[i]}`;
}

export default function ImagePreview({ file, previewUrl, onClear, disabled }) {
  if (!file || !previewUrl) return null;

  return (
    <div className="relative rounded-2xl border border-white/10 bg-white/[0.02] overflow-hidden">
      <div className="aspect-video w-full bg-black flex items-center justify-center">
        <img
          src={previewUrl}
          alt={file.name}
          className="max-h-full max-w-full object-contain"
        />
      </div>
      <div className="flex items-center justify-between px-4 py-3 border-t border-white/10 bg-black/40">
        <div className="min-w-0 flex-1">
          <p className="text-sm text-white/90 truncate" title={file.name}>
            {file.name}
          </p>
          <p className="text-xs text-white/40 mt-0.5">
            {formatBytes(file.size)} ·{" "}
            {file.type.replace("image/", "").toUpperCase()}
          </p>
        </div>
        <button
          type="button"
          onClick={onClear}
          disabled={disabled}
          className="ml-3 inline-flex items-center gap-1.5 text-xs text-white/60 hover:text-white px-2.5 py-1.5 rounded-md border border-white/10 hover:border-white/20 transition-colors disabled:opacity-40 disabled:cursor-not-allowed"
        >
          <svg
            viewBox="0 0 24 24"
            className="w-3.5 h-3.5"
            fill="none"
            stroke="currentColor"
            strokeWidth="2"
            strokeLinecap="round"
            strokeLinejoin="round"
          >
            <line x1="18" y1="6" x2="6" y2="18" />
            <line x1="6" y1="6" x2="18" y2="18" />
          </svg>
          Remove
        </button>
      </div>
    </div>
  );
}