diff --git a/ui/src/components/SampleImages.tsx b/ui/src/components/SampleImages.tsx index b55d42eb..a587e751 100644 --- a/ui/src/components/SampleImages.tsx +++ b/ui/src/components/SampleImages.tsx @@ -154,9 +154,7 @@ export default function SampleImages({ job }: SampleImagesProps) { switch (cols) { case 1: - return 'grid-cols-1'; case 2: - return 'grid-cols-2'; case 3: return 'grid-cols-3'; case 4: @@ -234,7 +232,7 @@ export default function SampleImages({ job }: SampleImagesProps) { case 40: return 'grid-cols-40'; default: - return 'grid-cols-1'; + return 'grid-cols-3'; } }, [numSamples]); @@ -262,17 +260,38 @@ export default function SampleImages({ job }: SampleImagesProps) { {PageInfoContent} {sampleImages && (
- {sampleImages.map((sample: string) => ( - setSelectedSamplePath(sample)} - observerRoot={containerRef.current} - /> - ))} + {sampleImages.map((sample: string, idx: number) => { + // Compute current group (groups are size = numSamples) + const groupIndex = Math.floor(idx / numSamples); + const groupStart = groupIndex * numSamples; + const groupEnd = Math.min(groupStart + numSamples, sampleImages.length); + const groupSize = groupEnd - groupStart; + const isEndOfGroup = idx === groupEnd - 1; + + // Only enforce a MIN of 3 when the group's planned width is < 3 + const MIN_COLS = 3; + const shouldPad = numSamples < MIN_COLS && groupSize < MIN_COLS; + const padsNeeded = shouldPad ? MIN_COLS - groupSize : 0; + + return ( +
+ setSelectedSamplePath(sample)} + observerRoot={containerRef.current} + /> + + {isEndOfGroup && + padsNeeded > 0 && + Array.from({ length: padsNeeded }).map((_, i) => ( +
+ ))} +
+ ); + })}
)}