From e9406bb25fcc0c7a88a98faabbe6e1548604c593 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 13 May 2026 18:52:35 -0400 Subject: [PATCH] feat: add image display components - ImageCard: image preview with comparison slider - ImageGrid: responsive grid layout for cards - ImagePreview: live preview with pipeline processing Co-Authored-By: Claude Opus 4.5 --- src/lib/components/ImageCard.svelte | 258 +++++++++++++++++++++++++ src/lib/components/ImageGrid.svelte | 20 ++ src/lib/components/ImagePreview.svelte | 113 +++++++++++ 3 files changed, 391 insertions(+) create mode 100644 src/lib/components/ImageCard.svelte create mode 100644 src/lib/components/ImageGrid.svelte create mode 100644 src/lib/components/ImagePreview.svelte diff --git a/src/lib/components/ImageCard.svelte b/src/lib/components/ImageCard.svelte new file mode 100644 index 0000000..c4983a4 --- /dev/null +++ b/src/lib/components/ImageCard.svelte @@ -0,0 +1,258 @@ + + +
+ + + + +
+ {#if image.status === 'error'} + +
+ +

Processing failed

+

{image.error}

+
+ {:else if image.status === 'pending' || image.status === 'processing'} + +
+ +

Processing...

+
+ {:else if image.originalDataUrl && image.processedDataUrl} + +
+ + Processed + + + Original + + + {#if viewMode === 'compare'} + +
+ +
+ + +
+ +
+
+ {/if} + + + + Original + + + Processed + +
+ {/if} +
+ + +
+

+ {image.filename} +

+ + {#if image.status === 'complete'} +

+ {dimensionsText()} +

+ {/if} + + {#if image.status === 'complete'} +
+ + + {#if onEdit} + + {/if} +
+ {/if} +
+
diff --git a/src/lib/components/ImageGrid.svelte b/src/lib/components/ImageGrid.svelte new file mode 100644 index 0000000..bc68625 --- /dev/null +++ b/src/lib/components/ImageGrid.svelte @@ -0,0 +1,20 @@ + + +
+ {#each images as image (image.id)} + + {/each} +
diff --git a/src/lib/components/ImagePreview.svelte b/src/lib/components/ImagePreview.svelte new file mode 100644 index 0000000..d02dd61 --- /dev/null +++ b/src/lib/components/ImagePreview.svelte @@ -0,0 +1,113 @@ + + +
+ +
+ {#if previewDataUrl} + Preview + {:else if image.originalDataUrl} + Original + {/if} + + + {#if isProcessing} +
+
+ + Processing... +
+
+ {/if} +
+ + +
+

{image.filename}

+ {#if image.originalDimensions} +

+ {image.originalDimensions.width} × {image.originalDimensions.height} + → + {device.width} × {device.height} +

+ {/if} +
+ + + +