From 0315a9a7047e8eef361337dc9ad3c9a8624c8437 Mon Sep 17 00:00:00 2001 From: "[dyad]" Date: Sun, 18 Jan 2026 11:00:40 +0100 Subject: [PATCH] [dyad] Redesign image converter layout - wrote 1 file(s) --- src/components/image-converter.tsx | 95 ++++++++++++++++-------------- 1 file changed, 51 insertions(+), 44 deletions(-) diff --git a/src/components/image-converter.tsx b/src/components/image-converter.tsx index ecb713d..0dba146 100644 --- a/src/components/image-converter.tsx +++ b/src/components/image-converter.tsx @@ -19,7 +19,7 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; -import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +import { ScrollArea } from "@/components/ui/scroll-area"; import { Upload, Download, Image as ImageIcon, X, Trash2 } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; @@ -39,7 +39,6 @@ export function ImageConverter() { const fileInputRef = useRef(null); useEffect(() => { - // Clean up object URLs on component unmount return () => { previewUrls.forEach((url) => URL.revokeObjectURL(url)); }; @@ -78,7 +77,9 @@ export function ImageConverter() { ]; const newFilenames = [ ...filenames, - ...imageFiles.map(file => file.name.substring(0, file.name.lastIndexOf('.'))) + ...imageFiles.map((file) => + file.name.substring(0, file.name.lastIndexOf(".")) + ), ]; setImages(newImages); @@ -123,7 +124,9 @@ export function ImageConverter() { setFilenames(newFilenames); if (selectedImageIndex === indexToRemove) { - setSelectedImageIndex(newImages.length > 0 ? Math.max(0, indexToRemove - 1) : null); + setSelectedImageIndex( + newImages.length > 0 ? Math.max(0, indexToRemove - 1) : null + ); } else if (selectedImageIndex !== null && selectedImageIndex > indexToRemove) { setSelectedImageIndex(selectedImageIndex - 1); } @@ -138,10 +141,12 @@ export function ImageConverter() { toast.info("All images cleared."); }; - const handleFilenameChange = (e: ChangeEvent) => { - if (selectedImageIndex === null) return; + const handleFilenameChange = ( + e: ChangeEvent, + index: number + ) => { const newFilenames = [...filenames]; - newFilenames[selectedImageIndex] = e.target.value; + newFilenames[index] = e.target.value; setFilenames(newFilenames); }; @@ -150,8 +155,11 @@ export function ImageConverter() { toast.error("Please select an image and set dimensions."); return; } - if (!filenames[selectedImageIndex] || filenames[selectedImageIndex].trim() === "") { - toast.error("Please enter a filename."); + if ( + !filenames[selectedImageIndex] || + filenames[selectedImageIndex].trim() === "" + ) { + toast.error("Please enter a filename for the selected image."); return; } @@ -194,8 +202,8 @@ export function ImageConverter() { const isImageSelected = selectedImageIndex !== null; return ( -
-
+
+
Image Settings @@ -225,23 +233,26 @@ export function ImageConverter() {
-
- - -
- - + + +
+ +
+
+ {isImageSelected && previewUrls[selectedImageIndex] ? ( + Selected image preview + ) : ( +
fileInputRef.current?.click()}> + + Click or drag & drop images here +
+ )} + +
{hasImages && ( @@ -252,35 +263,31 @@ export function ImageConverter() {
- -
+ +
{previewUrls.map((url, index) => ( -
- - +
setSelectedImageIndex(index)}> + {`Preview +
+

+ Source: {images[index].name} +

+
+ + handleFilenameChange(e, index)} onClick={(e) => e.stopPropagation()} /> +
+
+
))}
- )}
- -
- {isImageSelected && previewUrls[selectedImageIndex] ? ( - Selected image preview - ) : ( -
fileInputRef.current?.click()}> - - Click or drag & drop images here -
- )} - -
); } \ No newline at end of file