import { useEffect, useState } from "react"; import { FakeTile } from "./fakes"; const TILE_COUNT = 12; const REVEAL_MS = 350; const TILE_PROPS: { favorite?: boolean; rating?: number; duration?: string }[] = [ {}, { favorite: true }, {}, { duration: "1:24" }, { rating: 5 }, {}, { favorite: true, rating: 3 }, {}, { duration: "0:09" }, {}, { rating: 4 }, {}, ]; /// Placeholder tiles "loading in" one by one, looping, to show how the grid /// fills while thumbnails are generated. export function StepGalleryPreview() { const [revealed, setRevealed] = useState(0); useEffect(() => { const timer = setInterval(() => { setRevealed((current) => (current >= TILE_COUNT + 4 ? 0 : current + 1)); }, REVEAL_MS); return () => clearInterval(timer); }, []); return (

The gallery is a virtualized grid — it stays fast with hundreds of thousands of items. Tiles carry your favorites, star ratings, and video durations; hover for filename and quick actions.

{TILE_PROPS.map((props, i) => ( ))}

Click any tile to open the lightbox — keyboard navigation, zoom, inline tag editing, ratings, and a full video player.

The toolbar filters by type, favorites, or rating, sorts by date/name/size, and switches grid density.

); }