11"use client"
22
33import { useRef , useState } from "react"
4- import { motion , useMotionTemplate , useSpring } from "motion/react"
54import { clsx } from "clsx"
65import Image from "next-image-export-optimizer"
76import type { StaticImageData } from "next/image"
87
98import { Marquee } from "@/app/conf/_design-system/marquee"
10- import ZoomInIcon from "../../pixelarticons/zoom-in.svg?svgr"
11- import ZoomOutIcon from "../../pixelarticons/zoom-out.svg?svgr"
129
1310import { imagesByYear } from "./images"
1411
@@ -52,7 +49,7 @@ export function GalleryStrip({ className, ...rest }: GalleryStripProps) {
5249 speedOnHover = { 15 }
5350 drag
5451 reverse
55- className = "!overflow-visible"
52+ className = "cursor-[var(--cursor-grabbing,grab)] !overflow-visible"
5653 >
5754 { imagesByYear [ selectedYear ] . map ( ( image , i ) => {
5855 const key = `${ selectedYear } -${ i } `
@@ -78,47 +75,8 @@ function GalleryStripImage({
7875 image : StaticImageData
7976 previousZoomedImage : React . MutableRefObject < HTMLElement | null >
8077} ) {
81- const [ isZoomed , setIsZoomed ] = useState ( false )
82- const scale = useSpring ( 1 )
83- const transform = useMotionTemplate `translate3d(0,0,var(--translate-z,-16px)) scale(${ scale } )`
84-
85- // if we set scale in useEffect the UI glitches
86- const zoomIn = ( current : HTMLElement | null ) => {
87- if ( previousZoomedImage . current ) {
88- previousZoomedImage . current . style . zIndex = "0"
89- previousZoomedImage . current . style . setProperty ( "--translate-z" , "0px" )
90- }
91-
92- if ( current ) {
93- current . style . zIndex = "2"
94- current . style . setProperty ( "--translate-z" , "16px" )
95- }
96-
97- previousZoomedImage . current = current
98-
99- scale . set ( 1.665625 )
100- setIsZoomed ( true )
101- }
102-
103- const zoomOut = ( ) => {
104- scale . set ( 1 )
105- setIsZoomed ( false )
106- }
107-
10878 return (
109- < motion . div
110- role = "presentation"
111- className = "relative md:px-2"
112- style = { { transform } }
113- onPointerOut = { event => {
114- const target = event . currentTarget
115- const relatedTarget = event . relatedTarget as Node | null
116-
117- if ( ! relatedTarget || ! target . contains ( relatedTarget ) ) {
118- zoomOut ( )
119- }
120- } }
121- >
79+ < div role = "presentation" className = "relative md:px-2" >
12280 < Image
12381 src = { image }
12482 alt = ""
@@ -127,19 +85,6 @@ function GalleryStripImage({
12785 height = { 533 }
12886 className = "pointer-events-none aspect-[799/533] h-[320px] w-auto object-cover"
12987 />
130- < button
131- type = "button"
132- className = "absolute right-2 top-0 z-[1] bg-neu-50/10 p-4"
133- onClick = { event => {
134- isZoomed ? zoomOut ( ) : zoomIn ( event . currentTarget . parentElement )
135- } }
136- >
137- { isZoomed ? (
138- < ZoomOutIcon className = "size-12" />
139- ) : (
140- < ZoomInIcon className = "size-12" />
141- ) }
142- </ button >
143- </ motion . div >
88+ </ div >
14489 )
14590}
0 commit comments