terry-staging #11

Merged
terry merged 37 commits from terry-staging into main 2026-05-29 19:29:58 +00:00
Showing only changes of commit ed6e0023b8 - Show all commits

View File

@@ -151,12 +151,11 @@ function LightboxView({
const [isCaptionVisible, setIsCaptionVisible] = useState(true); const [isCaptionVisible, setIsCaptionVisible] = useState(true);
const touchStartX = useRef<number | null>(null); const touchStartX = useRef<number | null>(null);
const goPrev = useCallback( // Clamp at the ends instead of wrapping; the nav arrows / swipe / arrow
() => setIndex((i) => (i - 1 + images.length) % images.length), // keys should all behave like a linear gallery, not a carousel.
[images.length], const goPrev = useCallback(() => setIndex((i) => Math.max(0, i - 1)), []);
);
const goNext = useCallback( const goNext = useCallback(
() => setIndex((i) => (i + 1) % images.length), () => setIndex((i) => Math.min(images.length - 1, i + 1)),
[images.length], [images.length],
); );
@@ -234,31 +233,31 @@ function LightboxView({
{/* Image stage */} {/* Image stage */}
<div className="relative flex min-h-0 w-full flex-1 items-center justify-center"> <div className="relative flex min-h-0 w-full flex-1 items-center justify-center">
{hasMany ? ( {hasMany && index > 0 ? (
<> <button
<button type="button"
type="button" onClick={(e) => {
onClick={(e) => { e.stopPropagation();
e.stopPropagation(); goPrev();
goPrev(); }}
}} className="absolute left-2 top-1/2 z-10 flex h-12 w-12 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white shadow-lg ring-1 ring-white/25 transition hover:bg-black/80 md:left-6"
className="absolute left-2 top-1/2 z-10 flex h-12 w-12 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white shadow-lg ring-1 ring-white/25 transition hover:bg-black/80 md:left-6" aria-label="Previous"
aria-label="Previous" >
> <ChevronLeft className="h-6 w-6" />
<ChevronLeft className="h-6 w-6" /> </button>
</button> ) : null}
<button {hasMany && index < images.length - 1 ? (
type="button" <button
onClick={(e) => { type="button"
e.stopPropagation(); onClick={(e) => {
goNext(); e.stopPropagation();
}} goNext();
className="absolute right-2 top-1/2 z-10 flex h-12 w-12 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white shadow-lg ring-1 ring-white/25 transition hover:bg-black/80 md:right-6" }}
aria-label="Next" className="absolute right-2 top-1/2 z-10 flex h-12 w-12 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white shadow-lg ring-1 ring-white/25 transition hover:bg-black/80 md:right-6"
> aria-label="Next"
<ChevronRight className="h-6 w-6" /> >
</button> <ChevronRight className="h-6 w-6" />
</> </button>
) : null} ) : null}
<div <div