1
1
"use client"
2
2
3
3
import { useRef , useState } from "react"
4
- import { motion , useMotionTemplate , useSpring } from "motion/react"
5
4
import { clsx } from "clsx"
6
5
import Image from "next-image-export-optimizer"
7
6
import type { StaticImageData } from "next/image"
8
7
9
8
import { 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"
12
9
13
10
import { imagesByYear } from "./images"
14
11
@@ -52,7 +49,7 @@ export function GalleryStrip({ className, ...rest }: GalleryStripProps) {
52
49
speedOnHover = { 15 }
53
50
drag
54
51
reverse
55
- className = "!overflow-visible"
52
+ className = "cursor-[var(--cursor-grabbing,grab)] !overflow-visible"
56
53
>
57
54
{ imagesByYear [ selectedYear ] . map ( ( image , i ) => {
58
55
const key = `${ selectedYear } -${ i } `
@@ -78,47 +75,8 @@ function GalleryStripImage({
78
75
image : StaticImageData
79
76
previousZoomedImage : React . MutableRefObject < HTMLElement | null >
80
77
} ) {
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
-
108
78
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" >
122
80
< Image
123
81
src = { image }
124
82
alt = ""
@@ -127,19 +85,6 @@ function GalleryStripImage({
127
85
height = { 533 }
128
86
className = "pointer-events-none aspect-[799/533] h-[320px] w-auto object-cover"
129
87
/>
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 >
144
89
)
145
90
}
0 commit comments