You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Carousel navigation on the main viewer.ImageDisplay now exposes prev/next arrow buttons that step the main image through the recent-generations history one tile at a time. Arrows are positioned at the left and right edges of the image card (desktop) and rendered as an inline row with a currentIdx / total counter on mobile. The same navigation is bound to global ←/→ keyboard shortcuts that respect inputs/textareas/contenteditables and the prompt-editor modal so they don't fire mid-typing. The arrow buttons are disabled at the ends of the history list and hidden whenever the comparison slider is on screen so they can't fight with its own controls (components/ImageDisplay.tsx, App.tsx).
Recent-generations gallery jumps to the top on empty viewer. When the user has prior history but nothing is loaded into the main viewer, App.tsx now suppresses the "Ready to Create" placeholder so RecentGenerations lands at the top of the page on load. True first-run users (no current generation and no history) still see the original empty-state hint (App.tsx).
Show/Hide details toggle for the gallery. New eye-icon toggle in the RecentGenerations toolbar collapses the per-tile prompt + tag-chip panel beneath each thumbnail. Default is off so the gallery reads as a clean image grid. Choice persists to localStorage under recentGenerations.showDetails (components/RecentGenerations.tsx).
Thumbnail size selector for the gallery. New RichSelect dropdown in the RecentGenerations toolbar lets users pick X-Small / Small / Medium / Large density. Each maps to a different responsive grid-cols-* configuration (3→10 cols at X-Small, 2→5 at Large). Defaults to Small so the grid is tighter out of the box, and the choice persists to localStorage under recentGenerations.thumbnailSize (components/RecentGenerations.tsx).
triggerLabelClassName prop on DownloadMenu. Lets callers responsively hide the trigger label <span> (e.g. hidden xl:inline) without losing the accessible name, which keeps reading via triggerTitle/aria-label (components/DownloadMenu.tsx).
Changed
Tile action buttons hide until hover on hover-capable devices. The per-tile toolbar (Download / Copy image / Copy URL / Copy prompt / Delete) on RecentGenerations thumbnails now uses [@media(hover:hover)]:opacity-0 ... :group-hover:opacity-100 instead of the old lg: breakpoint carve-out. Hover-capable devices at any width get a clean image grid that reveals controls on hover/focus-within; touch-only devices keep the toolbar always visible since they have no hover state. Buttons remain in the DOM (opacity-only) so keyboard tab-focus and screen readers still see them (components/RecentGenerations.tsx).
Recent-generations toolbar collapses to icons instead of wrapping. The gallery toolbar (Size / Show details / Download all / Select for export) was wrapping onto a second row at narrow desktop widths because flex-wrap let the buttons drop down. The container is now flex-nowrap, all buttons get shrink-0, and the text labels on the three action buttons hide below xl (1280px) via hidden xl:inline, leaving the icons + accessible names. The size dropdown keeps its selected value visible at all widths so users can still see which density is active (components/RecentGenerations.tsx).