react-motion-gallery 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Gallery/fullscreenSlideStore.tsx","../src/Gallery/FullscreenSlider.tsx","../src/Gallery/scaleStore.tsx","../src/Gallery/slideStore.tsx","../src/Gallery/FullscreenModal.tsx","../src/Gallery/Slider.tsx","../src/Gallery/useOpenEpoch.ts","../src/Gallery/ThumbnailSlider.tsx","../src/Gallery/index.tsx"],"names":["lastT","forwardRef","useRef","useEffect","Children","target","next","useCallback","useImperativeHandle","jsx","slideStore","useSyncExternalStore","React","imageCount","slider","mathAbs","EventStore","Vector1D","Translate","Animations","isMouseEvent","Axis","DragTracker","ScrollBody","useSlideIndex","cloneElement","useState","loop","isValidElement","useLayoutEffect","i","createRef","PercentOfView","ScrollBounds","body","normalizeToWindow","styles","jsxs","clamp","Limit","min","max","cls","useMemo","isMouse","isClick","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["type Listener = () => void;\n\nconst slideStore = {\n _slideIndex: 0,\n _listeners: new Set<Listener>(),\n\n getSnapshot(): number {\n return this._slideIndex;\n },\n\n subscribe(listener: Listener): () => void {\n this._listeners.add(listener);\n return () => {\n this._listeners.delete(listener);\n };\n },\n\n setSlideIndex(newIndex: number): void {\n this._slideIndex = newIndex;\n for (const listener of this._listeners) {\n listener();\n }\n },\n};\n\nexport default slideStore;","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport {\n useRef,\n useEffect,\n ReactNode,\n Children,\n RefObject,\n useCallback,\n useImperativeHandle,\n forwardRef\n} from 'react'\nimport fullscreenSlideStore from './fullscreenSlideStore'\nimport type { APITypes } from 'plyr-react'\n\ntype WindowType = Window & typeof globalThis\n\nconst mathAbs = Math.abs\nconst clamp01 = (n: number) => Math.max(0, Math.min(1, n))\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3)\n\nfunction EventStore() {\n const listeners: Array<() => void> = []\n return {\n add<T extends EventTarget>(\n t: T,\n type: string,\n fn: EventListenerOrEventListenerObject,\n opts?: AddEventListenerOptions | boolean\n ) {\n t.addEventListener(type, fn as any, opts as any)\n listeners.push(() => t.removeEventListener(type, fn as any, opts as any))\n return this\n },\n clear() {\n while (listeners.length) listeners.pop()?.()\n }\n }\n}\n\nfunction Axis() {\n return {\n scroll: 'x' as const,\n cross: 'y' as const,\n direction(n: number) {\n return n\n },\n measureSize(rect: DOMRect) {\n return rect.width\n }\n }\n}\ntype AxisType = ReturnType<typeof Axis>\n\ntype Vector1DType = {\n get: () => number\n set: (n: number) => void\n add: (n: number) => void\n}\n\nfunction Vector1D(initial: number): Vector1DType {\n let v = initial\n return {\n get: () => v,\n set: (n) => { v = n },\n add: (n) => { v += n }\n }\n}\n\nfunction Translate(container: HTMLElement) {\n let prevX = NaN\n let prevY = NaN\n let lockY = false\n let lockedY = 0\n let suspended = false\n const round2 = (n: number) => Math.round(n * 100) / 100\n\n function write(nx: number, ny: number) {\n if (nx === prevX && ny === prevY) return\n container.style.transform = `translate3d(${nx}px, ${ny}px, 0)`\n prevX = nx\n prevY = ny\n }\n\n return {\n to(targetX: number, targetY = 0) {\n if (suspended) return\n const nx = round2(targetX)\n const ny = lockY ? lockedY : targetY\n write(nx, ny)\n },\n lockY(value?: number) {\n lockY = true\n lockedY = Math.round((value ?? prevY) || 0)\n write(prevX || 0, lockedY)\n },\n unlockY() { lockY = false },\n suspend(on = true) { suspended = on },\n get() { return { x: prevX, y: prevY } },\n resetCache() { prevX = NaN; prevY = NaN }\n }\n}\n\ntype AnimationsType = {\n start: () => void\n stop: () => void\n init: () => void\n destroy: () => void\n resetBlend: () => void\n}\nfunction Animations(doc: Document, win: WindowType, update: () => void, render: (a: number) => void): AnimationsType {\n const fixed = 1000 / 60\n const visible = EventStore()\n let last: number | null = null\n let acc = 0\n let animId = 0\n function reset() { last = null; acc = 0 }\n function animate(ts: number) {\n if (!animId) return\n if (last == null) {\n last = ts\n update()\n update()\n }\n const dt = ts - (last as number)\n last = ts\n acc += dt\n while (acc >= fixed) { update(); acc -= fixed }\n const alpha = acc / fixed\n render(alpha)\n if (animId) animId = win.requestAnimationFrame(animate)\n }\n return {\n init() {\n visible.add(doc, 'visibilitychange', () => { if (doc.hidden) reset() })\n },\n destroy() {\n this.stop()\n visible.clear()\n },\n start() {\n if (animId) return\n animId = win.requestAnimationFrame(animate)\n },\n stop() {\n win.cancelAnimationFrame(animId)\n animId = 0\n reset()\n },\n resetBlend() { reset() }\n }\n}\n\ntype PointerEventType = TouchEvent | MouseEvent\nfunction isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent\n}\n\ntype AxisLike = {\n scroll: 'x' | 'y'\n cross: 'x' | 'y'\n direction: (n: number) => number\n measureSize?: (rect: DOMRect) => number\n}\n\nfunction DragTracker(axis: AxisLike, ownerWindow: WindowType) {\n const WINDOW_MS = 120;\n const RECENT_MS = 90;\n const RELEASE_FRESH_MS = 180;\n const STILL_MS = 140;\n const MOVE_EPS = 0.5;\n const FLICK_VEL = 0.12;\n const FLICK_DIST = 6;\n const MIN_VEL = 0.06;\n const EPS = 1e-6;\n\n type Sample = { t: number; dx: number; dy: number };\n let samples: Sample[] = [];\n\n let startX = 0, startY = 0;\n let lastX = 0, lastY = 0, lastT = 0;\n let lastActiveT = 0;\n\n function now(evt: PointerEventType): number {\n const ts = (evt as any).timeStamp as number | undefined;\n const perf = ownerWindow?.performance?.now ? ownerWindow.performance.now() : Date.now();\n return (typeof ts === 'number' && ts > 0) ? ts : perf;\n }\n\n function isMouse(evt: PointerEventType): evt is MouseEvent {\n return (ownerWindow as any).MouseEvent\n ? evt instanceof (ownerWindow as any).MouseEvent\n : 'clientX' in evt && !('touches' in (evt as any));\n }\n\n function readPoint(evt: PointerEventType, axisKey: 'x' | 'y' = axis.scroll) {\n const coord = axisKey === 'x' ? 'clientX' : 'clientY';\n if (isMouse(evt)) return (evt as MouseEvent)[coord];\n const te = evt as TouchEvent;\n const touch = (te.touches && te.touches[0]) || (te.changedTouches && te.changedTouches[0]);\n return touch ? (touch as any)[coord] as number : (axisKey === 'x' ? lastX : lastY);\n }\n\n function trimTo(t: number) {\n const earliest = t - WINDOW_MS * 1.5;\n while (samples.length && samples[0].t < earliest) samples.shift();\n }\n\n function velocityInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let sumDx = 0, sumDy = 0;\n let firstT = Number.POSITIVE_INFINITY, lastT = Number.NEGATIVE_INFINITY;\n\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n firstT = Math.min(firstT, s.t);\n lastT = Math.max(lastT, s.t);\n const age = s.t - startT;\n const w = 0.5 + 0.5 * (age / Math.max(spanMs, 1));\n sumDx += s.dx * w;\n sumDy += s.dy * w;\n }\n const dt = Math.max(lastT - firstT, EPS);\n return { vx: sumDx / dt, vy: sumDy / dt };\n }\n\n function displacementInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let dx = 0, dy = 0;\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n dx += s.dx;\n dy += s.dy;\n }\n return { dx, dy };\n }\n\n return {\n pointerDown(evt: PointerEventType) {\n samples = [];\n startX = lastX = readPoint(evt, 'x');\n startY = lastY = readPoint(evt, 'y');\n return { x: startX, y: startY };\n },\n\n pointerMove(evt: PointerEventType) {\n const t = now(evt);\n const x = readPoint(evt, 'x');\n const y = readPoint(evt, 'y');\n\n const dx = x - lastX;\n const dy = y - lastY;\n\n samples.push({ t, dx, dy });\n trimTo(t);\n\n if (Math.abs(dx) >= MOVE_EPS || Math.abs(dy) >= MOVE_EPS) lastActiveT = t;\n\n lastX = x; lastY = y; lastT = t;\n return { dx, dy };\n },\n\n pointerUp(evt: PointerEventType) {\n const t = now(evt);\n samples.push({ t, dx: 0, dy: 0 });\n trimTo(t);\n\n const sinceLastMove = t - lastT;\n const idleMs = t - lastActiveT;\n const releasedFresh = sinceLastMove <= RELEASE_FRESH_MS;\n const wasStill = idleMs > STILL_MS;\n\n if (wasStill) {\n return { fx: 0, fy: 0 };\n }\n\n const { vx: vxRecent, vy: vyRecent } = velocityInWindow(t, RECENT_MS);\n const { dx: dxRecent, dy: dyRecent } = displacementInWindow(t, RECENT_MS);\n\n const intentX = releasedFresh && (Math.abs(vxRecent) >= FLICK_VEL || Math.abs(dxRecent) >= FLICK_DIST);\n const intentY = releasedFresh && (Math.abs(vyRecent) >= FLICK_VEL || Math.abs(dyRecent) >= FLICK_DIST);\n\n const { vx, vy } = velocityInWindow(t, WINDOW_MS);\n\n let fx = intentX ? vx : 0;\n let fy = intentY ? vy : 0;\n\n if (intentX && Math.abs(fx) < MIN_VEL) fx = (dxRecent >= 0 ? 1 : -1) * MIN_VEL;\n if (intentY && Math.abs(fy) < MIN_VEL) fy = (dyRecent >= 0 ? 1 : -1) * MIN_VEL;\n\n return { fx, fy };\n },\n\n readPoint,\n }\n}\n\nfunction ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n) {\n let vel = 0\n let dir = 0\n let duration = baseDuration\n let friction = baseFriction\n let raw = location.get()\n let rawPrev = 0\n return {\n sync() {\n raw = location.get()\n rawPrev = raw\n return this\n },\n resetVelocity() { vel = 0; return this },\n useDuration(n: number) { duration = n; return this },\n useFriction(n: number) { friction = n; return this },\n useBaseDuration() { return this.useDuration(baseDuration) },\n useBaseFriction() { return this.useFriction(baseFriction) },\n duration() { return duration },\n frictionFactor() { return friction },\n direction() { return dir },\n velocity() { return vel },\n seek() {\n const curLoc = location.get()\n const curTgt = target.get()\n const disp = curTgt - curLoc\n const instant = !duration\n let d = 0\n if (instant) {\n vel = 0\n previousLocation.set(curTgt)\n location.set(curTgt)\n d = disp\n } else {\n previousLocation.set(curLoc)\n vel += disp / duration\n vel *= friction\n raw += vel\n location.add(vel)\n d = raw - rawPrev\n }\n dir = Math.sign(d)\n rawPrev = raw\n return this\n },\n settled() {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n }\n}\ntype ScrollBodyType = ReturnType<typeof ScrollBody>\n\ninterface FullscreenSliderProps {\n children: ReactNode\n imageCount: number\n slideIndex: number\n isClick: React.RefObject<boolean>\n isZoomed: boolean\n windowSize: { width: number; height: number }\n show: boolean\n handleZoomToggle: (\n e:\n | React.PointerEvent<HTMLImageElement>\n | React.TouchEvent<HTMLImageElement>,\n imageRef: React.RefObject<HTMLImageElement | null>\n ) => void\n imageRefs: React.RefObject<HTMLImageElement | null>[]\n cells: RefObject<{ element: HTMLElement; index: number }[]>\n isPinching: React.RefObject<boolean>\n scale: number\n isTouchPinching: React.RefObject<boolean>\n showFullscreenSlider: boolean\n isWrapping: RefObject<boolean>\n zoomedDuringWrap: RefObject<boolean>\n isZooming: RefObject<boolean>\n plyrRefs: RefObject<(APITypes | null)[]>\n plyrRef: RefObject<(APITypes | null)[]>\n closingModal: boolean\n counterRef: RefObject<HTMLElement | null>\n leftChevronRef: RefObject<HTMLElement | null>\n rightChevronRef: RefObject<HTMLElement | null>\n closeButtonRef: RefObject<HTMLElement | null>\n overlayDivRef: RefObject<HTMLDivElement | null>\n}\n\nexport interface FullscreenSliderHandle {\n centerSlider(): void\n}\n\nconst FullscreenSlider = forwardRef<FullscreenSliderHandle, FullscreenSliderProps>(\n (\n {\n children,\n imageCount,\n slideIndex,\n isClick,\n isZoomed,\n windowSize,\n show,\n handleZoomToggle,\n imageRefs,\n cells,\n isPinching,\n isTouchPinching,\n showFullscreenSlider,\n isWrapping,\n zoomedDuringWrap,\n isZooming,\n plyrRefs,\n plyrRef,\n closingModal,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n closeButtonRef,\n overlayDivRef\n },\n ref\n ) => {\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const slider = useRef<HTMLDivElement | null>(null)\n const axisRef = useRef<AxisType | null>(null)\n\n const locationRef = useRef<Vector1DType | null>(null)\n const previousLocationRef = useRef<Vector1DType | null>(null)\n const offsetLocationRef = useRef<Vector1DType | null>(null)\n const targetRef = useRef<Vector1DType | null>(null)\n const bodyRef = useRef<ScrollBodyType | null>(null)\n const translateRef = useRef<ReturnType<typeof Translate> | null>(null)\n const animRef = useRef<AnimationsType | null>(null)\n\n const isAnimatingRef = useRef(false)\n const pointerDownRef = useRef(false)\n\n const yTemp = useRef(0)\n const dragThreshold = 5\n const FADE_DISTANCE = 300\n\n const selectedIndex = useRef(0)\n const hasPositioned = useRef<boolean>(false)\n\n function useLatest<T>(value: T) {\n const r = useRef(value)\n useEffect(() => { r.current = value }, [value])\n return r\n }\n const isZoomedRef = useLatest(isZoomed)\n\n const perSlideRef = useRef(0)\n useEffect(() => {\n const el = slider.current\n if (!el) return\n const update = () => { perSlideRef.current = el.clientWidth || 0 }\n update()\n const ro = new ResizeObserver(update)\n ro.observe(el)\n return () => ro.disconnect()\n }, [show])\n\n const slides = useRef<{ cells: { element: HTMLElement }[] }[]>([])\n useEffect(() => {\n const childrenArray = Children.toArray(children)\n slides.current = []\n if (imageCount > 1) {\n for (let i = 1; i < childrenArray.length - 1; i++) {\n slides.current.push({ cells: [cells.current[i]] as any })\n }\n } else {\n for (let i = 0; i < childrenArray.length; i++) {\n slides.current.push({ cells: [cells.current[i]] as any })\n }\n }\n }, [children])\n\n const isPointerDown = useRef(false)\n const isVerticalScroll = useRef(false)\n const isScrolling = useRef(false)\n const isClosing = useRef(false)\n const clickedImgMargin = useRef(false)\n\n const dragStartY = useRef(0)\n const dragYForClose = useRef(0)\n\n const x = useRef(0)\n const y = useRef(0)\n const velocityX = useRef(0)\n const dragX = useRef(0)\n const previousDragX = useRef(0)\n const dragMoveTime = useRef<Date | null>(null)\n const isDragSelect = useRef(false)\n\n function perSlide() {\n return perSlideRef.current || slider.current?.clientWidth || 1\n }\n function slideCount() {\n return slides.current.length || 1\n }\n\n function commitXY(nx: number, ny: number) {\n translateRef.current?.to(nx, ny)\n if (overlayDivRef.current) {\n const progress = clamp01(Math.abs(ny) / FADE_DISTANCE)\n const o = 1 - easeOutCubic(progress)\n overlayDivRef.current.style.opacity = String(o)\n }\n }\n\n useEffect(() => {\n if (!slider.current || hasPositioned.current) return\n zoomedDuringWrap.current = false\n\n if (counterRef.current) {\n counterRef.current.textContent = `${\n !isWrapping.current ? slideIndex + 1 : slideIndex\n } / ${imageCount}`\n }\n\n if (slideIndex === 1 && isWrapping.current === true) {\n selectedIndex.current = 0\n fullscreenSlideStore.setSlideIndex(0)\n hasPositioned.current = true\n return\n }\n if (slideIndex === 0 && !isWrapping.current) {\n selectedIndex.current = 0\n fullscreenSlideStore.setSlideIndex(0)\n hasPositioned.current = true\n return\n }\n let actualIndex = slideIndex - 1\n actualIndex = ((actualIndex % imageCount) + imageCount) % imageCount\n if (actualIndex === 0) actualIndex = imageCount\n const finalIndex = isWrapping.current === true ? actualIndex : slideIndex\n\n selectedIndex.current = finalIndex\n fullscreenSlideStore.setSlideIndex(finalIndex)\n\n setTimeout(() => {\n if (!slider.current) return\n const per = perSlideRef.current || slider.current.clientWidth\n const startX = -per * finalIndex\n x.current = startX\n y.current = 0\n if (locationRef.current && previousLocationRef.current && offsetLocationRef.current && targetRef.current) {\n locationRef.current.set(startX)\n previousLocationRef.current.set(startX)\n offsetLocationRef.current.set(startX)\n targetRef.current.set(startX)\n translateRef.current?.to(startX, 0)\n } else {\n slider.current.style.transform = `translate3d(${Math.round(startX)}px, 0, 0)`\n }\n }, 0)\n\n hasPositioned.current = true\n }, [show, slides.current])\n\n const ySnapTweenId = { current: 0 }\n function snapBackY(ms = 300) {\n const startId = ++ySnapTweenId.current\n const fromY = yTemp.current || 0\n const start = performance.now()\n const step = (now: number) => {\n if (startId !== ySnapTweenId.current || isPointerDown.current) return\n const t = Math.min(1, (now - start) / ms)\n const k = easeOutCubic(t)\n yTemp.current = fromY + (0 - fromY) * k\n const xNow = offsetLocationRef.current!.get()\n y.current = yTemp.current\n commitXY(xNow, y.current)\n if (t < 1) requestAnimationFrame(step)\n }\n requestAnimationFrame(step)\n }\n\n function disableOverlayTransition() {\n if (overlayDivRef.current) overlayDivRef.current.style.transition = 'opacity 0s'\n }\n function restoreOverlayTransition() {\n if (overlayDivRef.current) overlayDivRef.current.style.transition = ''\n }\n\n const activeTouchCount = useRef(0)\n const wasPinch = useRef(false)\n\n useEffect(() => {\n const root = viewportRef.current\n const track = slider.current\n if (!root || !track) return\n\n const axis = Axis()\n axisRef.current = axis\n\n const start = (() => {\n const per = perSlideRef.current || track.clientWidth\n const idx = selectedIndex.current || 0\n return -per * idx\n })()\n\n const location = Vector1D(start)\n const previousLocation = Vector1D(start)\n const offsetLocation = Vector1D(start)\n const target = Vector1D(start)\n\n locationRef.current = location\n previousLocationRef.current = previousLocation\n offsetLocationRef.current = offsetLocation\n targetRef.current = target\n\n translateRef.current = Translate(track)\n\n const baseDuration = 25\n const baseFriction = 0.68\n const body = ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction)\n bodyRef.current = body\n\n const anim = Animations(\n document,\n window as WindowType,\n () => {\n bodyRef.current?.seek()\n x.current = locationRef.current!.get()\n },\n (alpha) => {\n const cur = locationRef.current!.get()\n const prev = previousLocationRef.current!.get()\n const loc = cur * alpha + prev * (1 - alpha)\n offsetLocationRef.current!.set(loc)\n x.current = loc\n y.current = isVerticalScroll.current ? yTemp.current : y.current\n positionSlider()\n const settled = bodyRef.current?.settled()\n if (settled && !pointerDownRef.current) {\n animRef.current?.stop()\n isAnimatingRef.current = false\n }\n if (!isZoomedRef.current && !isAnimatingRef.current) {\n updateActiveIndexFromX(loc)\n }\n }\n )\n animRef.current = anim\n anim.init()\n\n translateRef.current.to(locationRef.current!.get(), 0)\n\n const dragStore = EventStore()\n const moveStore = EventStore()\n const trackerX = DragTracker(axis, window as WindowType)\n\n const axisY: AxisLike = {\n scroll: 'y',\n cross: 'x',\n direction(n: number) { return n },\n measureSize: (r: DOMRect) => r.height\n }\n const trackerY = DragTracker(axisY, window as WindowType)\n\n let isMouse = false\n let preventScroll = false\n let startPX = 0\n let startPY = 0\n const dragThresholdLocal = dragThreshold\n\n function addDragEvents() {\n const node: any = isMouse ? document : root\n moveStore\n .add(node, 'touchmove', onMove as any, { passive: false })\n .add(node, 'touchend', onUp as any)\n .add(node, 'mousemove', onMove as any, { passive: false })\n .add(node, 'mouseup', onUp as any)\n }\n\n function onDown(evt: PointerEvent) {\n if (isZoomedRef.current || closingModal) return\n const isMouseEvt = isMouseEvent(evt as any, window as any)\n isMouse = isMouseEvt\n if (isMouseEvt && (evt as MouseEvent).button !== 0) return\n\n wasPinch.current = false\n isTouchPinching.current = false\n activeTouchCount.current = !isMouseEvt\n ? ((evt as unknown as TouchEvent).touches?.length ?? 1)\n : 0\n\n pointerDownRef.current = true\n isPointerDown.current = true\n isScrolling.current = false\n isPinching.current = false\n isTouchPinching.current = false\n isClick.current = true\n dragMode.current = 'none'\n yTemp.current = 0\n dragStartY.current = 0\n dragYForClose.current = 0\n\n trackerX.pointerDown(evt as any)\n trackerY.pointerDown(evt as any)\n\n startPX = trackerX.readPoint(evt as any, 'x')\n startPY = trackerY.readPoint(evt as any, 'y')\n\n bodyRef.current!.useFriction(0).useDuration(0)\n targetRef.current!.set(locationRef.current!.get())\n\n addDragEvents()\n animRef.current?.start()\n }\n\n function onMove(evt: PointerEvent) {\n if (isZoomedRef.current) return\n const isTouchEvt = !isMouseEvent(evt as any, window as any)\n if (isTouchEvt) {\n const t = evt as unknown as TouchEvent\n activeTouchCount.current = t.touches?.length ?? 1\n if (activeTouchCount.current >= 2) {\n wasPinch.current = true\n isTouchPinching.current = true\n isClick.current = false\n dragMode.current = 'none'\n animRef.current?.stop()\n if (t.cancelable) {\n t.preventDefault()\n }\n return\n }\n }\n\n const lastScroll = trackerX.readPoint(evt as any, 'x')\n const lastCross = trackerY.readPoint(evt as any, 'y')\n const dxAbs = Math.abs(lastScroll - startPX)\n const dyAbs = Math.abs(lastCross - startPY)\n\n if (dragMode.current === 'none') {\n if (dxAbs > dragThresholdLocal || dyAbs > dragThresholdLocal) {\n dragMode.current = dxAbs >= dyAbs ? 'x' : 'y'\n isClick.current = false\n if (dragMode.current === 'y') {\n isVerticalScroll.current = true\n dragStartY.current = lastCross\n yTemp.current = 0\n }\n }\n }\n\n disableOverlayTransition()\n\n const diffX = trackerX.pointerMove(evt as any).dx\n trackerY.pointerMove(evt as any)\n\n previousDragX.current = dragX.current\n dragX.current = lastScroll\n velocityX.current = diffX\n dragMoveTime.current = new Date()\n\n if (!preventScroll && !isMouse && dragMode.current === 'x') {\n if (!('cancelable' in evt) || !(evt as any).cancelable) return\n preventScroll = dxAbs > dyAbs\n if (!preventScroll) return\n }\n\n if (dragMode.current === 'y') {\n const dy = lastCross - dragStartY.current\n dragYForClose.current = dy\n yTemp.current = dy * 0.5\n y.current = yTemp.current\n const xNow = offsetLocationRef.current!.get()\n translateRef.current?.to(xNow, y.current)\n\n if (overlayDivRef.current) {\n const progress = clamp01(Math.abs(dy) / FADE_DISTANCE)\n overlayDivRef.current.style.opacity = String(1 - progress)\n }\n\n pausePlyrNearActive()\n evt.preventDefault?.()\n return\n }\n\n bodyRef.current!.useFriction(0.3).useDuration(0.75)\n const delta = axisRef.current!.direction(diffX)\n targetRef.current!.add(delta)\n animRef.current?.start()\n\n pausePlyrNearActive()\n if ((evt as any).cancelable) evt.preventDefault()\n }\n\n function onUp(evt: PointerEvent) {\n const isTouchEvt = !isMouseEvent(evt as any, window as any)\n if (isTouchEvt && (isTouchPinching.current || wasPinch.current)) {\n const t = evt as unknown as TouchEvent\n activeTouchCount.current = t.touches?.length ?? 0\n\n if (activeTouchCount.current > 0) {\n return\n }\n\n isTouchPinching.current = false\n wasPinch.current = false\n pointerDownRef.current = false\n isPointerDown.current = false\n isClick.current = false\n dragMode.current = 'none'\n isVerticalScroll.current = false\n yTemp.current = 0\n moveStore.clear()\n preventScroll = false\n return\n }\n \n isPointerDown.current = false\n pointerDownRef.current = false\n moveStore.clear()\n preventScroll = false\n\n if (isClick.current) {\n const target = evt.target as HTMLElement\n if (target.closest(\"[class*='plyr__']\")) return\n const t = evt as unknown as TouchEvent\n\n const clickedImg = target.closest('img')\n if (!clickedImg) {\n restoreOverlayTransition()\n clickedImgMargin.current = true\n animRef.current?.stop()\n closeButtonRef.current?.click()\n if (t.cancelable) {\n t.preventDefault()\n }\n return\n }\n\n const imgIndex = (clickedImg as HTMLImageElement).dataset.index\n if (imgIndex == null) return\n const matchedRef = imageRefs[parseInt(imgIndex)]\n\n const idx = selectedIndex.current\n if (idx !== Number(imgIndex) && Number(imgIndex) !== idx + 2) {\n isZooming.current = true\n handleZoomToggle(evt as any, matchedRef)\n }\n if (idx === imageCount - 1 && Number(imgIndex) === imageCount + 1) {\n isZooming.current = true\n handleZoomToggle(evt as any, matchedRef)\n }\n if (slider.current && slider.current.children.length === 1) {\n isZooming.current = true\n handleZoomToggle(evt as any, matchedRef)\n }\n goToIndex(idx)\n return\n } else {\n const el = evt.target as HTMLElement\n const playerDiv = el.closest('.myPlayer[data-index]') as HTMLElement | null\n if (playerDiv) {\n const idx = playerDiv.dataset.index\n if (idx != null) {\n setTimeout(() => { plyrRefs.current[parseInt(idx)]?.plyr.pause() }, 0)\n if (imageCount === 1) setTimeout(() => { plyrRef.current[0]?.plyr.pause() }, 0)\n }\n }\n }\n\n if (dragMode.current === 'y') {\n const rawY = trackerY.pointerUp(evt as any).fy\n const tinyFlick = Math.abs(rawY) > 0.15\n if (tinyFlick) {\n anim?.stop()\n translateRef.current?.lockY(yTemp.current)\n restoreOverlayTransition()\n isClosing.current = true\n closeButtonRef.current?.click()\n yTemp.current = 0\n isVerticalScroll.current = false\n return\n }\n const dy = dragYForClose.current\n const distanceThreshold = windowSize.height * 0.3\n if (Math.abs(dy) > distanceThreshold) {\n anim?.stop()\n translateRef.current?.lockY(yTemp.current)\n restoreOverlayTransition()\n isClosing.current = true\n closeButtonRef.current?.click()\n yTemp.current = 0\n isVerticalScroll.current = false\n return\n }\n snapBackY(300)\n dragMode.current = 'none'\n isVerticalScroll.current = false\n } else {\n x.current = offsetLocationRef.current!.get()\n\n let index = dragEndRestingSelect()\n if (\n index === selectedIndex.current ||\n (index === slides.current.length &&\n selectedIndex.current !== slides.current.length - 1)\n ) {\n index += dragEndBoostSelect()\n }\n isDragSelect.current = true\n select(index)\n isDragSelect.current = false\n }\n\n dragMode.current = 'none'\n }\n\n dragStore\n .add(root, 'dragstart', (evt) => (evt as Event).preventDefault(), { passive: false })\n .add(root, 'touchstart', onDown as any)\n .add(root, 'mousedown', onDown as any, { passive: true })\n .add(root, 'touchcancel', () => {\n isTouchPinching.current = false\n wasPinch.current = false\n pointerDownRef.current = false\n isPointerDown.current = false\n dragMode.current = 'none'\n isVerticalScroll.current = false\n yTemp.current = 0\n moveStore.clear()\n })\n .add(root, 'contextmenu', onUp as any)\n\n return () => {\n dragStore.clear()\n moveStore.clear()\n animRef.current?.destroy()\n animRef.current = null\n }\n }, [show, imageCount, windowSize.height])\n\n function normalizeToWindow(anchor?: number) {\n if (!isWrapping.current) return\n const W = getStripWidth()\n if (!W) return\n\n const a = anchor ?? (offsetLocationRef.current?.get() ?? x.current)\n\n const normalized = ((a % W) + W) % W - W\n const delta = normalized - a\n if (delta === 0) return\n\n locationRef.current?.add(delta)\n previousLocationRef.current?.add(delta)\n offsetLocationRef.current?.add(delta)\n targetRef.current?.add(delta)\n x.current += delta\n }\n\n useEffect(() => {\n const root = viewportRef.current\n if (!root) return\n let wheelTimer: number | null = null\n function onWheel(e: WheelEvent) {\n if (isZoomed) return\n const track = slider.current\n if (!track) return\n const containerWidth = track.clientWidth\n const contentWidth = (slides.current.length || 1) * (perSlideRef.current || containerWidth)\n const canScrollHorizontally = contentWidth > containerWidth\n const isHorizontal = Math.abs(e.deltaX) > Math.abs(e.deltaY)\n if (!isHorizontal || !canScrollHorizontally) return\n e.preventDefault()\n const cur = (offsetLocationRef.current?.get() ?? 0) - e.deltaX\n const next = cur\n\n // if (!isWrapping.current && limitRef.current) {\n // next = limitRef.current.constrain(cur)\n // }\n\n targetRef.current?.set(next)\n bodyRef.current?.useDuration(0).useFriction(1)\n\n normalizeToWindow(next)\n\n animRef.current?.start()\n x.current = next\n positionSlider()\n updateActiveIndexFromX(next)\n pausePlyrNearActive()\n\n if (wheelTimer) clearTimeout(wheelTimer as any)\n wheelTimer = window.setTimeout(() => {}, 120)\n }\n root.addEventListener('wheel', onWheel as any, { passive: false })\n return () => root.removeEventListener('wheel', onWheel as any)\n }, [isZoomed])\n\n function updateActiveIndexFromX(loc: number) {\n const per = perSlide()\n const len = slideCount()\n let idx = Math.round(Math.abs(loc) / per)\n idx = ((idx % len) + len) % len\n if (selectedIndex.current !== idx) {\n selectedIndex.current = idx\n fullscreenSlideStore.setSlideIndex(idx)\n let actualIndex = ((idx + 1) % imageCount + imageCount) % imageCount\n if (actualIndex === 0) actualIndex = imageCount\n if (counterRef.current) {\n counterRef.current.textContent = `${actualIndex} / ${imageCount}`\n }\n }\n }\n\n function pausePlyrNearActive() {\n let actualIndex = selectedIndex.current + 1\n const length = slides.current.length\n actualIndex = ((actualIndex % length) + length) % length\n if (actualIndex === 0) actualIndex = imageCount\n setTimeout(() => { plyrRefs.current[actualIndex]?.plyr.pause() }, 0)\n if (imageCount === 1) setTimeout(() => { plyrRef.current[0]?.plyr.pause() }, 0)\n }\n\n function previous() {\n isVerticalScroll.current = false\n isScrolling.current = false\n isPinching.current = false\n isTouchPinching.current = false\n zoomedDuringWrap.current = false\n pausePlyrNearActive()\n select(selectedIndex.current - 1)\n }\n\n function next() {\n isVerticalScroll.current = false\n isScrolling.current = false\n isPinching.current = false\n isTouchPinching.current = false\n zoomedDuringWrap.current = false\n pausePlyrNearActive()\n select(selectedIndex.current + 1)\n }\n\n function getStripWidth() {\n return perSlideRef.current * slides.current.length\n }\n\n const appliedYRef = useRef(0)\n function setTranslateX(tx: number, ty: number) {\n if (!slider.current) return\n const nx = Math.round(tx)\n let ny: number\n if (isVerticalScroll.current) {\n ny = Math.round(ty)\n } else {\n const currentY = appliedYRef.current\n const easedY = currentY + (0 - currentY) * 0.2\n ny = Math.round(easedY)\n appliedYRef.current = ny\n }\n commitXY(nx, ny)\n }\n\n function positionSlider() {\n let currentPositionX = x.current\n const currentPositionY = y.current\n if (!isClick.current && imageCount > 1 && zoomedDuringWrap.current !== true) {\n const W = getStripWidth()\n if (W > 0) {\n currentPositionX = ((currentPositionX % W) + W) % W\n currentPositionX -= W\n }\n }\n setTranslateX(currentPositionX, currentPositionY)\n }\n\n function getFrictionFactor() {\n return bodyRef.current?.frictionFactor() ?? 0.68\n }\n\n function getRestingPosition() {\n return x.current + (velocityX.current || 0) / (1 - getFrictionFactor())\n }\n\n function getSlideDistance(xPos: number, index: number) {\n if (!slider.current) return 1\n const length = slides.current.length\n const cellWidth = perSlideRef.current || slider.current.clientWidth\n const cellIndex = ((index % length) + length) % length\n const cell = cellWidth * cellIndex\n const stripWidth = cellWidth * length\n const wrap = stripWidth * Math.floor(index / length)\n return xPos - (cell + wrap)\n }\n\n function getClosestResting(restingX: number, dist: number, inc: number) {\n let index = selectedIndex.current\n let minDistance = Infinity\n let distance = dist\n while (distance < minDistance) {\n index += inc\n minDistance = distance\n distance = getSlideDistance(-restingX, index) as number\n if ((distance as any) === null) break\n distance = Math.abs(distance as number)\n }\n return { distance: minDistance, index: index - inc }\n }\n\n function dragEndRestingSelect() {\n const restingX = getRestingPosition()\n const distance = Math.abs(getSlideDistance(-restingX, selectedIndex.current))\n const positiveResting = getClosestResting(restingX, distance, 1)\n const negativeResting = getClosestResting(restingX, distance, -1)\n return positiveResting.distance < negativeResting.distance\n ? positiveResting.index\n : negativeResting.index\n }\n\n function dragEndBoostSelect() {\n const movedAt = dragMoveTime.current\n if (!movedAt || new Date().getTime() - movedAt.getTime() > 100) return 0\n const delta = previousDragX.current - dragX.current\n if (delta > 0) return 1\n if (delta < 0) return -1\n return 0\n }\n\n function wrapSelect(index: number) {\n if (!slider.current || zoomedDuringWrap.current === true) return\n const length = slides.current.length\n const slideableWidth = (perSlideRef.current || slider.current.clientWidth) * length\n const selectedIdx = selectedIndex.current\n\n if (!isDragSelect.current) {\n const wrapIndex = ((index % length) + length) % length\n const delta = Math.abs(wrapIndex - selectedIdx)\n const backWrapDelta = Math.abs(wrapIndex + length - selectedIdx)\n const fwdWrapDelta = Math.abs(wrapIndex - length - selectedIdx)\n if (backWrapDelta < delta) index += length\n else if (fwdWrapDelta < delta) index -= length\n }\n\n if (index < 0) {\n x.current -= slideableWidth\n locationRef.current?.add(-slideableWidth)\n previousLocationRef.current?.add(-slideableWidth)\n offsetLocationRef.current?.add(-slideableWidth)\n targetRef.current?.add(-slideableWidth)\n } else if (index >= length) {\n x.current += slideableWidth\n locationRef.current?.add(slideableWidth)\n previousLocationRef.current?.add(slideableWidth)\n offsetLocationRef.current?.add(slideableWidth)\n targetRef.current?.add(slideableWidth)\n }\n }\n\n function select(index: number) {\n if (isVerticalScroll.current) return\n if (imageCount > 1) wrapSelect(index)\n\n const length = slides.current.length\n index = ((index % length) + length) % length\n\n if (zoomedDuringWrap.current === true) {\n index = slides.current.length\n }\n\n selectedIndex.current = index\n fullscreenSlideStore.setSlideIndex(index)\n\n let actualIndex = index + 1\n actualIndex = ((actualIndex % length) + length) % length\n if (actualIndex === 0) actualIndex = imageCount\n\n if (counterRef.current) {\n counterRef.current.textContent = `${actualIndex} / ${imageCount}`\n }\n\n const per = perSlide()\n const targetX = -per * index\n bodyRef.current?.useBaseDuration().useBaseFriction()\n targetRef.current?.set(targetX)\n isAnimatingRef.current = true\n animRef.current?.start()\n }\n\n function goToIndex(idx: number, opts: { preserveTiming?: boolean } = {}) {\n const { preserveTiming = false } = opts\n if (!bodyRef.current || !targetRef.current) return\n if (!preserveTiming) bodyRef.current.useBaseDuration().useBaseFriction()\n select(idx)\n }\n\n type DragMode = 'none' | 'x' | 'y'\n const dragMode = useRef<DragMode>('none')\n\n useEffect(() => {\n const left = leftChevronRef.current\n const right = rightChevronRef.current\n if (left) left.addEventListener('click', previous)\n if (right) right.addEventListener('click', next)\n return () => {\n if (left) left.removeEventListener('click', previous)\n if (right) right.removeEventListener('click', next)\n }\n }, [leftChevronRef.current, rightChevronRef.current, showFullscreenSlider])\n\n function readIndexProgress(oldOffset: number, oldPer: number) {\n if (!oldPer || !isFinite(oldPer)) return { idx: selectedIndex.current, progress: 0 };\n const raw = -oldOffset / oldPer;\n const idx = Math.floor(raw);\n const progress = raw - idx;\n return { idx, progress };\n }\n\n function setAllX(nx: number) {\n locationRef.current?.set(nx);\n previousLocationRef.current?.set(nx);\n offsetLocationRef.current?.set(nx);\n targetRef.current?.set(nx);\n x.current = nx;\n }\n\n const recenterWithAnchor = useCallback(() => {\n const track = slider.current;\n if (!track) return;\n\n const oldPer = perSlideRef.current || track.clientWidth || 1;\n const oldOff = offsetLocationRef.current?.get() ?? x.current ?? 0;\n const { idx: oldIdx, progress } = readIndexProgress(oldOff, oldPer);\n\n const newPer = track.clientWidth || oldPer;\n perSlideRef.current = newPer;\n\n const nx = -(oldIdx + progress) * newPer;\n\n if (isWrapping.current) {\n const W = newPer * (slides.current.length || 1);\n if (W > 0) {\n const normalized = ((nx % W) + W) % W - W;\n setAllX(normalized);\n translateRef.current?.to(normalized, 0);\n animRef.current?.resetBlend();\n return;\n }\n }\n\n setAllX(nx);\n translateRef.current?.to(nx, 0);\n animRef.current?.resetBlend();\n }, [isWrapping.current]);\n\n useEffect(() => {\n let raf = 0;\n function onResize() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n animRef.current?.stop();\n recenterWithAnchor();\n });\n }\n\n onResize();\n\n const roViewport = new ResizeObserver(onResize);\n if (viewportRef.current) roViewport.observe(viewportRef.current);\n\n window.addEventListener('orientationchange', onResize, { passive: true });\n\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('orientationchange', onResize);\n roViewport.disconnect();\n };\n }, [windowSize.width, windowSize.height, recenterWithAnchor]);\n\n\n useImperativeHandle(ref, () => ({ centerSlider: recenterWithAnchor }), [recenterWithAnchor]);\n\n return (\n <div\n ref={viewportRef}\n className=\"fs_viewport\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n }}\n >\n <div\n ref={slider}\n className=\"fullscreen_slider\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'visible',\n cursor: 'grab',\n userSelect: 'none',\n willChange: 'transform',\n backfaceVisibility: 'hidden',\n opacity: showFullscreenSlider ? '1' : '0',\n }}\n >\n {children}\n </div>\n </div>\n )\n }\n)\n\nFullscreenSlider.displayName = 'FullscreenSlider'\nexport default FullscreenSlider","class ScaleStore {\n private scale = 1;\n private subs = new Set<() => void>();\n\n getScale = () => this.scale;\n getSnapshot = () => this.scale > 1.01;\n getServerSnapshot = () => false;\n\n subscribe = (cb: () => void) => {\n this.subs.add(cb);\n return () => void this.subs.delete(cb);\n };\n\n setScale = (newScale: number) => {\n const oldZoomed = this.scale > 1.01;\n this.scale = newScale;\n const newZoomed = this.scale > 1.01;\n if (newZoomed !== oldZoomed) {\n this.subs.forEach((cb) => cb());\n }\n };\n}\n\nconst scaleStore = new ScaleStore();\n\nexport default scaleStore;","type Listener = () => void;\ntype Mode = 'instant' | 'animated';\n\nconst slideStore = {\n _slideIndex: 0,\n _mode: 'animated' as Mode,\n _listeners: new Set<Listener>(),\n\n getSnapshot(): number {\n return this._slideIndex;\n },\n\n getMode(consume = false): Mode {\n const m = this._mode;\n if (consume) this._mode = 'animated';\n return m;\n },\n\n subscribe(listener: Listener): () => void {\n this._listeners.add(listener);\n return () => this._listeners.delete(listener);\n },\n\n setSlideIndex(newIndex: number, opts?: { mode?: Mode }): void {\n this._slideIndex = newIndex;\n this._mode = opts?.mode ?? 'animated';\n for (const listener of this._listeners) listener();\n },\n\n setInstant(index: number) {\n this.setSlideIndex(index, { mode: 'instant' });\n },\n};\n\nexport default slideStore;","/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport React, {\n Dispatch,\n RefObject,\n SetStateAction,\n useEffect,\n useSyncExternalStore,\n} from 'react'\nimport scaleStore from './scaleStore'\nimport slideStore from './slideStore';\nimport fullscreenSlideStore from './fullscreenSlideStore'\nimport { MediaItem } from '.'\n\nfunction useSlideIndex() {\n return useSyncExternalStore(\n fullscreenSlideStore.subscribe.bind(fullscreenSlideStore),\n fullscreenSlideStore.getSnapshot.bind(fullscreenSlideStore),\n fullscreenSlideStore.getSnapshot.bind(fullscreenSlideStore)\n )\n}\n\ninterface FullscreenModalProps {\n open: boolean\n onClose: () => void\n isZoomClick: RefObject<boolean>\n isClick: RefObject<boolean>\n isAnimating: RefObject<boolean>\n overlayDivRef: RefObject<HTMLDivElement | null>\n closeButtonRef: RefObject<HTMLElement | null>\n counterRef: RefObject<HTMLElement | null>\n leftChevronRef: RefObject<HTMLElement | null>\n rightChevronRef: RefObject<HTMLElement | null>\n zoomLevel: number\n children: React.ReactNode\n cells: RefObject<{ element: HTMLElement; index: number }[]>\n setShowFullscreenSlider: Dispatch<SetStateAction<boolean>>\n imageCount: number\n setClosingModal: Dispatch<SetStateAction<boolean>>\n slides: RefObject<{ cells: { element: HTMLElement; index: number }[]; target: number }[]>\n slider: RefObject<HTMLDivElement | null>\n visibleImagesRef: RefObject<number>\n selectedIndex: RefObject<number>\n firstCellInSlide: RefObject<HTMLElement | null>\n sliderX: RefObject<number>\n sliderVelocity: RefObject<number>\n isWrapping: RefObject<boolean>\n wrappedItems: MediaItem[]\n}\n\nconst FullscreenModal: React.FC<FullscreenModalProps> = ({\n open,\n onClose,\n isZoomClick,\n isClick,\n isAnimating,\n overlayDivRef,\n closeButtonRef,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n zoomLevel,\n cells,\n setShowFullscreenSlider,\n imageCount,\n setClosingModal,\n slides,\n slider,\n visibleImagesRef,\n selectedIndex,\n firstCellInSlide,\n sliderX,\n sliderVelocity,\n isWrapping,\n wrappedItems,\n children,\n}) => {\n const pointerDownX = React.useRef<number>(0)\n const pointerDownY = React.useRef<number>(0)\n const slideIndexSync = useSlideIndex()\n\n useEffect(() => {\n const btn = closeButtonRef.current\n if (!btn) return\n const handler = (ev: Event) => handleClose(ev as MouseEvent)\n btn.addEventListener('click', handler)\n return () => btn.removeEventListener('click', handler)\n }, [open, zoomLevel, isZoomClick, children, closeButtonRef])\n\n function handleClose(e: MouseEvent) {\n const clickedImg = (e.target as HTMLElement)?.closest('img')\n if (clickedImg) return\n\n proceedToClose(e)\n }\n\n function getPositionValue(position: number) {\n return Math.round(position) + 'px'\n }\n\n function getTotalCellsWidth(): number {\n let totalWidth = 0\n slides.current.forEach(slide => {\n slide.cells.forEach(cell => {\n totalWidth += cell.element.offsetWidth\n })\n })\n return totalWidth\n }\n\n function proceedToClose(e: MouseEvent) {\n if (!open) return\n isAnimating.current = false\n isClick.current = false\n cells.current = []\n setClosingModal(true)\n\n const slideArr = slides.current\n if (!slider.current) return\n\n let wrapIndex: number\n if (isWrapping.current) {\n if (slideIndexSync >= slider.current.children.length - visibleImagesRef.current * 2) {\n wrapIndex = 0\n } else {\n wrapIndex = slideIndexSync\n }\n } else {\n wrapIndex = slideIndexSync >= slider.current.children.length ? 0 : slideIndexSync\n }\n\n let matchSlide = slideArr.find(s => s.cells.some(cell => cell.index === wrapIndex))\n let newIndex = matchSlide ? slides.current.indexOf(matchSlide) : -1;\n\n if (newIndex < 0) {\n newIndex = slides.current.length - 1;\n matchSlide = slides.current[slides.current.length - 1];\n }\n\n if (!matchSlide) {\n onClose();\n setShowFullscreenSlider(false);\n setClosingModal(false);\n scaleStore.setScale(1);\n return;\n }\n\n const totalWidth = getTotalCellsWidth()\n const cellLeft = slides.current[0].cells[0].element.getBoundingClientRect().left\n\n selectedIndex.current = newIndex\n slideStore.setSlideIndex(newIndex)\n firstCellInSlide.current = matchSlide.cells[0]?.element ?? null\n sliderX.current = totalWidth <= slider.current.clientWidth ? cellLeft : -matchSlide.target\n sliderVelocity.current = 0\n\n const translateSliderX = getPositionValue(sliderX.current)\n slider.current.style.transform = `translate3d(${translateSliderX},0,0)`\n\n if (!slider.current || slider.current.children.length === 0) return\n\n const idx = isWrapping.current ? wrapIndex + visibleImagesRef.current : wrapIndex\n const slideEl = slider.current.children[idx] as HTMLElement | undefined\n if (!slideEl) return\n\n const rect = slideEl.getBoundingClientRect()\n const x = e.clientX\n const y = e.clientY\n\n const overlayElem = e.currentTarget as HTMLElement\n overlayElem.style.pointerEvents = 'none'\n const underlyingElement = document.elementFromPoint(x, y)\n overlayElem.style.pointerEvents = ''\n\n let targetImg: HTMLImageElement | null = null\n if (underlyingElement) {\n if ((underlyingElement as HTMLElement).tagName.toLowerCase() === 'img') {\n targetImg = underlyingElement as HTMLImageElement\n } else {\n targetImg = (underlyingElement as HTMLElement).querySelector('img')\n }\n }\n\n const fsSlider = document.querySelector('.fullscreen_slider') as HTMLElement;\n const counterEl = counterRef.current\n\n const originals = wrappedItems.slice(1, wrappedItems.length - 1)\n const url = originals[wrapIndex]\n const isVideoSlide = /\\.(mp4|webm|ogg)$/i.test(url.src)\n\n if (isVideoSlide) {\n let newIdx = wrapIndex + 1\n if (imageCount === 1) newIdx = 0\n const plyrEl = fsSlider?.querySelector(\n `.myPlayer[data-index=\"${newIdx}\"]`\n ) as HTMLImageElement | null\n if (plyrEl) targetImg = plyrEl\n }\n\n console.log('pure targetImg', targetImg)\n\n if (imageCount > 1 && fsSlider) {\n const currentFromCounter = Number(counterEl?.textContent?.split('/')[0] ?? '0')\n const currentIndex = parseInt(targetImg?.getAttribute('data-index') || '-1', 10)\n const nextImg = fsSlider.querySelector(\n `img[data-index=\"${currentFromCounter}\"]`\n ) as HTMLImageElement | null\n const lastImg = fsSlider.querySelector(\n `[data-index=\"${imageCount + 1}\"]`\n ) as HTMLImageElement | null\n\n let currentTranslateX = 0\n const cs = getComputedStyle(fsSlider)\n const transform = cs.transform\n if (transform !== 'none') {\n const matrix = new DOMMatrixReadOnly(transform)\n currentTranslateX = matrix.m41\n }\n\n if (currentIndex !== currentFromCounter) {\n if (\n currentIndex === 0 &&\n Math.abs(currentTranslateX) >= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width * 1.5 &&\n Math.abs(currentTranslateX) <= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width &&\n React.isValidElement<{ imageCount: number }>(children)\n ) {\n const { imageCount } = children.props\n targetImg = fsSlider.querySelector(\n `img[data-index=\"${imageCount + 1}\"]`\n ) as HTMLImageElement | null\n } else {\n targetImg = nextImg\n }\n }\n\n if (React.isValidElement<{ imageCount: number }>(children)) {\n const { imageCount } = children.props\n\n if (currentIndex === imageCount && currentFromCounter === 1) {\n targetImg = fsSlider.querySelector(\n `img[data-index=\"${imageCount + 1}\"]`\n ) as HTMLImageElement | null\n }\n\n if (currentIndex === imageCount + 1) {\n targetImg = fsSlider.querySelector(\n `img[data-index=\"${imageCount + 1}\"]`\n ) as HTMLImageElement | null\n }\n }\n\n if (currentIndex === -1) {\n targetImg = fsSlider.querySelector(\n `[data-index=\"${wrapIndex + 1}\"]`\n ) as HTMLImageElement | null\n }\n\n if (currentIndex === -1 && !isVideoSlide && wrapIndex === 0) {\n targetImg = fsSlider.querySelector(\n `[data-index=\"${imageCount + 1}\"]`\n ) as HTMLImageElement | null\n }\n\n if (\n isVideoSlide &&\n currentIndex === 1 &&\n Math.abs(currentTranslateX) >= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width * 1.5 &&\n Math.abs(currentTranslateX) <= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width\n ) {\n targetImg = lastImg\n }\n\n if (isVideoSlide) {\n let newIdx = wrapIndex + 1\n if (imageCount === 1) newIdx = 0\n if (\n currentIndex === 1 &&\n Math.abs(currentTranslateX) >= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width * 1.5 &&\n Math.abs(currentTranslateX) <= fsSlider.scrollWidth - fsSlider.getBoundingClientRect().width\n ) {\n newIdx = imageCount + 1\n }\n const wrapIndexStr = String(newIdx)\n\n const els = fsSlider.querySelectorAll<HTMLElement>('[data-index]')\n els.forEach(el => {\n if (el.dataset.index === wrapIndexStr) return\n Object.assign(el.style, {\n transition: 'opacity 0.3s cubic-bezier(.4,0,.22,1)',\n opacity: '0',\n })\n })\n } else {\n const divs = fsSlider.querySelectorAll('div')\n console.log('targetImg', targetImg)\n divs.forEach(div => {\n if (targetImg && div.contains(targetImg)) return\n Object.assign(div.style, {\n transition: 'opacity 0.3s cubic-bezier(.4,0,.22,1)',\n opacity: '0',\n })\n })\n }\n }\n\n if (!targetImg || !overlayDivRef.current || !rect) return\n\n const zoomedImg = targetImg\n const zoomedRect = targetImg.getBoundingClientRect()\n\n const computedStyle = window.getComputedStyle(zoomedImg)\n const transformMatrix = new DOMMatrix(computedStyle.transform)\n const currentScale = transformMatrix.a\n const translateX = transformMatrix.e\n const translateY = transformMatrix.f\n\n let deltaX = 0\n let deltaY = 0\n\n deltaX =\n currentScale !== 1\n ? rect.left - (Math.abs(translateX) + zoomedRect.left)\n : rect.left - zoomedRect.left\n\n deltaY =\n currentScale !== 1\n ? rect.top - (Math.abs(translateY) + zoomedRect.top)\n : rect.top - zoomedRect.top\n\n const scaleX = rect.width / (zoomedRect.width / currentScale)\n\n const fadeEls: (HTMLElement | null | undefined)[] = [\n leftChevronRef.current,\n rightChevronRef.current,\n counterRef.current,\n closeButtonRef.current,\n ]\n\n zoomedImg.style.transformOrigin = '0 0'\n zoomedImg.style.transition = 'transform 0.3s cubic-bezier(.4,0,.22,1)'\n zoomedImg.style.transform = `translate(${deltaX}px, ${deltaY}px) scale(${scaleX})`\n\n overlayDivRef.current.style.backgroundColor = 'transparent'\n fadeEls.forEach(el => {\n if (el) el.style.opacity = '0'\n })\n\n window.setTimeout(() => {\n zoomedImg.style.transition = ''\n zoomedImg.style.transform = ''\n\n fadeEls.forEach(el => el?.remove())\n leftChevronRef.current = null\n rightChevronRef.current = null\n counterRef.current = null\n closeButtonRef.current = null\n\n const slider = document.querySelector('.fullscreen_slider') as HTMLElement;\n if (slider) {\n slider.style.opacity = '0';\n };\n const modal = document.querySelector('.fs_modal') as HTMLElement;\n if (modal) {\n modal.style.opacity = '0';\n modal.style.pointerEvents = 'none';\n }\n overlayDivRef.current?.remove()\n overlayDivRef.current = null\n\n onClose()\n setShowFullscreenSlider(false)\n setClosingModal(false)\n scaleStore.setScale(1)\n zoomedImg.style.height = '100%'\n }, 300)\n }\n\n return (\n <div\n onPointerDown={(e: React.PointerEvent<HTMLDivElement>) => {\n pointerDownX.current = e.clientX\n pointerDownY.current = e.clientY\n }}\n className='fs_modal'\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%', \n height: '100%',\n opacity: open ? 1 : 0,\n pointerEvents: open ? 'auto' : 'none',\n zIndex: 9000,\n display: 'block',\n touchAction: 'none',\n contain: 'layout style size',\n overflow: 'hidden',\n }}\n >\n {children}\n </div>\n )\n}\n\nexport default FullscreenModal","/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport {\n useRef,\n useEffect,\n useLayoutEffect,\n useState,\n createRef,\n cloneElement,\n Children,\n ReactNode,\n ReactElement,\n HTMLAttributes,\n ClassAttributes,\n Dispatch,\n SetStateAction,\n RefObject,\n isValidElement,\n useSyncExternalStore,\n useCallback,\n} from 'react'\nimport slideStore from './slideStore'\nimport styles from './Slider.module.css'\n\ntype WindowType = Window & typeof globalThis\n\nconst mathAbs = Math.abs\nconst clamp = (n: number, lo: number, hi: number) => Math.max(lo, Math.min(hi, n))\n\nfunction EventStore() {\n const listeners: Array<() => void> = []\n return {\n add<T extends EventTarget>(\n t: T,\n type: string,\n fn: EventListenerOrEventListenerObject,\n opts?: AddEventListenerOptions | boolean\n ) {\n t.addEventListener(type, fn as any, opts as any)\n listeners.push(() => t.removeEventListener(type, fn as any, opts as any))\n return this\n },\n clear() {\n while (listeners.length) listeners.pop()?.()\n },\n }\n}\n\ntype Vector1DType = {\n get: () => number\n set: (n: number) => void\n add: (n: number) => void\n}\n\nfunction Vector1D(initial: number): Vector1DType {\n let v = initial\n return {\n get: () => v,\n set: (n) => {\n v = n\n },\n add: (n) => {\n v += n\n },\n }\n}\n\nfunction Limit(min: number, max: number) {\n return {\n min,\n max,\n reachedMin(n: number) {\n return n < min\n },\n reachedMax(n: number) {\n return n > max\n },\n reachedAny(n: number) {\n return n < min || n > max\n },\n constrain(n: number) {\n return clamp(n, min, max)\n },\n }\n}\ntype LimitType = ReturnType<typeof Limit>\n\nfunction Translate(container: HTMLElement) {\n let prevX = NaN\n function write(nx: number) {\n if (nx === prevX) return\n container.style.transform = `translate3d(${nx}px,0,0)`\n prevX = nx\n }\n return {\n to(targetX: number) {\n write(targetX)\n },\n get() { return { x: prevX } },\n resetCache() { prevX = NaN },\n }\n}\n\ntype AnimationsType = {\n start: () => void\n stop: () => void\n init: () => void\n destroy: () => void\n resetBlend: () => void\n}\nfunction Animations(doc: Document, win: WindowType, update: () => void, render: (a: number) => void): AnimationsType {\n const fixed = 1000 / 60\n const visible = EventStore()\n let last: number | null = null\n let acc = 0\n let animId = 0\n function reset() {\n last = null\n acc = 0\n }\n function animate(ts: number) {\n if (!animId) return\n if (last == null) {\n last = ts\n update()\n update()\n }\n const dt = ts - (last as number)\n last = ts\n acc += dt\n while (acc >= fixed) {\n update()\n acc -= fixed\n }\n const alpha = acc / fixed\n render(alpha)\n if (animId) animId = win.requestAnimationFrame(animate)\n }\n return {\n init() {\n visible.add(doc, 'visibilitychange', () => {\n if (doc.hidden) reset()\n })\n },\n destroy() {\n this.stop()\n visible.clear()\n },\n start() {\n if (animId) return\n animId = win.requestAnimationFrame(animate)\n },\n stop() {\n win.cancelAnimationFrame(animId)\n animId = 0\n reset()\n },\n resetBlend() {\n reset()\n },\n }\n}\n\ntype PointerEventType = TouchEvent | MouseEvent\nfunction isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent\n}\n\nfunction Axis() {\n return {\n scroll: 'x' as const,\n cross: 'y' as const,\n direction(n: number) {\n return n\n },\n measureSize(rect: DOMRect) {\n return rect.width\n },\n }\n}\ntype AxisType = ReturnType<typeof Axis>\n\nfunction DragTracker(axis: AxisType, ownerWindow: WindowType) {\n const WINDOW_MS = 120;\n const RECENT_MS = 90;\n const RELEASE_FRESH_MS = 180;\n const STILL_MS = 140;\n const MOVE_EPS = 0.5;\n const FLICK_VEL = 0.12;\n const FLICK_DIST = 6;\n const MIN_VEL = 0.06;\n const EPS = 1e-6;\n\n type Sample = { t: number; dx: number; dy: number };\n let samples: Sample[] = [];\n\n let startX = 0, startY = 0;\n let lastX = 0, lastY = 0, lastT = 0;\n let lastActiveT = 0;\n\n function now(evt: PointerEventType): number {\n const ts = (evt as any).timeStamp as number | undefined;\n const perf = ownerWindow?.performance?.now ? ownerWindow.performance.now() : Date.now();\n return (typeof ts === 'number' && ts > 0) ? ts : perf;\n }\n\n function isMouse(evt: PointerEventType): evt is MouseEvent {\n return (ownerWindow as any).MouseEvent\n ? evt instanceof (ownerWindow as any).MouseEvent\n : 'clientX' in evt && !('touches' in (evt as any));\n }\n\n function readPoint(evt: PointerEventType, axisKey: 'x' | 'y' = axis.scroll) {\n const coord = axisKey === 'x' ? 'clientX' : 'clientY';\n if (isMouse(evt)) return (evt as MouseEvent)[coord];\n const te = evt as TouchEvent;\n const touch = (te.touches && te.touches[0]) || (te.changedTouches && te.changedTouches[0]);\n return touch ? (touch as any)[coord] as number : (axisKey === 'x' ? lastX : lastY);\n }\n\n function trimTo(t: number) {\n const earliest = t - WINDOW_MS * 1.5;\n while (samples.length && samples[0].t < earliest) samples.shift();\n }\n\n function velocityInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let sumDx = 0, sumDy = 0;\n let firstT = Number.POSITIVE_INFINITY, lastT = Number.NEGATIVE_INFINITY;\n\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n firstT = Math.min(firstT, s.t);\n lastT = Math.max(lastT, s.t);\n const age = s.t - startT;\n const w = 0.5 + 0.5 * (age / Math.max(spanMs, 1));\n sumDx += s.dx * w;\n sumDy += s.dy * w;\n }\n const dt = Math.max(lastT - firstT, EPS);\n return { vx: sumDx / dt, vy: sumDy / dt };\n }\n\n function displacementInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let dx = 0, dy = 0;\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n dx += s.dx;\n dy += s.dy;\n }\n return { dx, dy };\n }\n\n return {\n pointerDown(evt: PointerEventType) {\n samples = [];\n startX = lastX = readPoint(evt, 'x');\n startY = lastY = readPoint(evt, 'y');\n return { x: startX, y: startY };\n },\n\n pointerMove(evt: PointerEventType) {\n const t = now(evt);\n const x = readPoint(evt, 'x');\n const y = readPoint(evt, 'y');\n\n const dx = x - lastX;\n const dy = y - lastY;\n\n samples.push({ t, dx, dy });\n trimTo(t);\n\n if (Math.abs(dx) >= MOVE_EPS || Math.abs(dy) >= MOVE_EPS) lastActiveT = t;\n\n lastX = x; lastY = y; lastT = t;\n return { dx, dy };\n },\n\n pointerUp(evt: PointerEventType) {\n const t = now(evt);\n samples.push({ t, dx: 0, dy: 0 });\n trimTo(t);\n\n const sinceLastMove = t - lastT;\n const idleMs = t - lastActiveT;\n const releasedFresh = sinceLastMove <= RELEASE_FRESH_MS;\n const wasStill = idleMs > STILL_MS;\n\n if (wasStill) {\n return { fx: 0, fy: 0 };\n }\n\n const { vx: vxRecent, vy: vyRecent } = velocityInWindow(t, RECENT_MS);\n const { dx: dxRecent, dy: dyRecent } = displacementInWindow(t, RECENT_MS);\n\n const intentX = releasedFresh && (Math.abs(vxRecent) >= FLICK_VEL || Math.abs(dxRecent) >= FLICK_DIST);\n const intentY = releasedFresh && (Math.abs(vyRecent) >= FLICK_VEL || Math.abs(dyRecent) >= FLICK_DIST);\n\n const { vx, vy } = velocityInWindow(t, WINDOW_MS);\n\n let fx = intentX ? vx : 0;\n let fy = intentY ? vy : 0;\n\n if (intentX && Math.abs(fx) < MIN_VEL) fx = (dxRecent >= 0 ? 1 : -1) * MIN_VEL;\n if (intentY && Math.abs(fy) < MIN_VEL) fy = (dyRecent >= 0 ? 1 : -1) * MIN_VEL;\n\n return { fx, fy };\n },\n\n readPoint,\n }\n}\n\nfunction ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n) {\n let vel = 0\n let dir = 0\n let duration = baseDuration\n let friction = baseFriction\n let raw = location.get()\n let rawPrev = 0\n return {\n sync() {\n raw = location.get()\n rawPrev = raw\n return this\n },\n resetVelocity() {\n vel = 0\n return this\n },\n useDuration(n: number) {\n duration = n\n return this\n },\n useFriction(n: number) {\n friction = n\n return this\n },\n useBaseDuration() {\n return this.useDuration(baseDuration)\n },\n useBaseFriction() {\n return this.useFriction(baseFriction)\n },\n duration() {\n return duration\n },\n frictionFactor() {\n return friction\n },\n direction() {\n return dir\n },\n velocity() {\n return vel\n },\n seek() {\n const curLoc = location.get()\n const curTgt = target.get()\n const disp = curTgt - curLoc\n const instant = !duration\n let d = 0\n if (instant) {\n vel = 0\n previousLocation.set(curTgt)\n location.set(curTgt)\n d = disp\n } else {\n previousLocation.set(curLoc)\n vel += disp / duration\n vel *= friction\n raw += vel\n location.add(vel)\n d = raw - rawPrev\n }\n dir = Math.sign(d)\n rawPrev = raw\n return this\n },\n settled() {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n },\n }\n}\ntype ScrollBodyType = ReturnType<typeof ScrollBody>\n\nfunction useSlideIndex() {\n return useSyncExternalStore(\n slideStore.subscribe.bind(slideStore),\n slideStore.getSnapshot.bind(slideStore),\n slideStore.getSnapshot.bind(slideStore)\n )\n}\n\ninterface SliderProps {\n children: ReactNode\n imageCount: number\n isClick: RefObject<boolean>\n expandableImgRefs: RefObject<RefObject<HTMLImageElement | null>[]>\n overlayDivRef: RefObject<HTMLDivElement | null>\n setSlideIndex: (index: number) => void\n setShowFullscreenModal: (show: boolean) => void\n setShowFullscreenSlider: Dispatch<SetStateAction<boolean>>\n showFullscreenSlider: boolean\n isWrapping: RefObject<boolean>\n slides: RefObject<{ cells: { element: HTMLElement; index: number }[]; target: number }[]>\n slider: RefObject<HTMLDivElement | null>\n visibleImagesRef: RefObject<number>\n selectedIndex: RefObject<number>\n firstCellInSlide: RefObject<HTMLElement | null>\n sliderX: RefObject<number>\n sliderVelocity: RefObject<number>\n duplicateImgRef: RefObject<HTMLElement | null>\n closeButtonRef: RefObject<HTMLElement | null>\n counterRef: RefObject<HTMLElement | null>\n leftChevronRef: RefObject<HTMLElement | null>\n rightChevronRef: RefObject<HTMLElement | null>\n responsive?: boolean;\n isReady: boolean\n setIsReady: Dispatch<SetStateAction<boolean>>\n loop?: boolean\n freeScroll?: boolean\n autoPlay?: boolean\n autoScroll?: boolean\n groupCells?: boolean\n centerAlign?: boolean\n gap?: number\n backgroundColor?: string\n sliderHeight?: string;\n}\n\ntype CarouselChildProps = HTMLAttributes<HTMLElement> &\n ClassAttributes<HTMLElement> & {\n style?: React.CSSProperties\n }\n\nfunction cloneSlide(\n child: ReactElement<any>,\n key: string,\n elementIndex: number,\n cells: React.RefObject<{ element: HTMLElement; index: number }[]>\n): ReactElement<CarouselChildProps> {\n return cloneElement<CarouselChildProps>(child, {\n key,\n ref: (el: HTMLElement | null) => {\n if (el && !cells.current.some((c) => c.element === el)) {\n cells.current.push({ element: el, index: elementIndex })\n }\n },\n style: {\n ...child.props.style,\n },\n })\n}\n\nconst Slider = ({\n children,\n imageCount,\n isClick,\n expandableImgRefs,\n overlayDivRef,\n setSlideIndex,\n setShowFullscreenModal,\n setShowFullscreenSlider,\n showFullscreenSlider,\n isWrapping,\n slides,\n slider,\n visibleImagesRef,\n selectedIndex,\n firstCellInSlide,\n sliderX,\n sliderVelocity,\n duplicateImgRef,\n closeButtonRef,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n responsive,\n isReady,\n setIsReady,\n loop,\n freeScroll,\n autoPlay,\n autoScroll,\n groupCells,\n centerAlign,\n gap,\n backgroundColor,\n sliderHeight\n}: SliderProps) => {\n const sliderContainer = useRef<HTMLDivElement | null>(null)\n const prevButtonRef = useRef<HTMLDivElement>(null)\n const nextButtonRef = useRef<HTMLDivElement>(null)\n const dotRefs = useRef<(HTMLDivElement | null)[]>([])\n const dotsContainerRef = useRef<HTMLDivElement | null>(null)\n\n const [clonedChildren, setClonedChildren] = useState<React.ReactElement[]>([])\n const clonesCountRef = useRef(0)\n const [visibleImages, setVisibleImages] = useState(1)\n const [slidesState, setSlidesState] = useState<{ cells: { element: HTMLElement }[] }[]>([])\n const [allImagesLoaded, setAllImagesLoaded] = useState(false)\n const [isMeasured, setIsMeasured] = useState(false)\n \n const [inView, setInView] = useState(false)\n const [wrap, setWrap] = useState(false)\n const slideIndexSync = useSlideIndex()\n\n function clampIndex(i: number, len: number) {\n return Math.max(0, Math.min(len - 1, i))\n }\n\n useEffect(() => {\n isWrapping.current = wrap\n }, [wrap, isWrapping])\n\n const cells = useRef<{ element: HTMLElement; index: number }[]>([])\n const sliderWidth = useRef(0)\n const hasPositioned = useRef<boolean>(false)\n\n useEffect(() => {\n const container = slider.current\n if (!container) return\n\n const imgs = Array.from(container.querySelectorAll<HTMLImageElement>('img'))\n if (imgs.length === 0) return\n\n let loadedCount = 0\n const total = imgs.length\n\n function onImgLoad() {\n loadedCount += 1\n if (loadedCount === total) setAllImagesLoaded(true)\n }\n\n imgs.forEach((img) => {\n if (img.complete && img.naturalWidth > 0) onImgLoad()\n else {\n img.addEventListener('load', onImgLoad)\n img.addEventListener('error', onImgLoad)\n }\n })\n return () => {\n imgs.forEach((img) => {\n img.removeEventListener('load', onImgLoad)\n img.removeEventListener('error', onImgLoad)\n })\n }\n }, [children, clonedChildren, visibleImages])\n\n function getCenterOffsetForIndex(idx: number) {\n const track = slider.current\n if (!track || !slides.current?.[idx]?.cells?.[0]?.element) return 0\n const containerWidth = track.clientWidth\n const cellWidth = slides.current[idx].cells[0].element.clientWidth\n return centerAlign ? (containerWidth - cellWidth) / 2 : 0\n }\n\n const SPEED_DELAY = 3000;\n const RESUME_DELAY = 1000;\n const lastPointerUpTime = useRef<number>(performance.now() - 1000);\n\n useEffect(() => {\n const id = window.setInterval(() => {\n const now = performance.now();\n if (\n isPointerDown.current ||\n showFullscreenSlider ||\n !isWrapping.current || \n !autoPlay\n ) {\n return;\n }\n if (now - lastPointerUpTime.current < RESUME_DELAY) return;\n next();\n }, SPEED_DELAY);\n\n return () => {\n window.clearInterval(id);\n };\n }, [showFullscreenSlider, slidesState, slideIndexSync, allImagesLoaded, clonedChildren, isWrapping.current]);\n\n function normalizeToWindow(anchor?: number) {\n if (!wrap) return\n const W = getStripWidth()\n if (!W) return\n\n const a = anchor ?? (offsetLocationRef.current?.get() ?? xRef.current)\n\n const normalized = ((a % W) + W) % W - W\n const delta = normalized - a\n if (delta === 0) return\n\n locationRef.current?.add(delta)\n previousLocationRef.current?.add(delta)\n offsetLocationRef.current?.add(delta)\n targetRef.current?.add(delta)\n xRef.current += delta\n }\n\n const AUTO_SCROLL_PAUSE_MS = 1000;\n const autoScrollPauseUntil = useRef(0);\n\n const SPEED = 0.1;\n\n useEffect(() => {\n let lastTime = performance.now();\n\n let frameId: number;\n function loop(now: number) {\n frameId = requestAnimationFrame(loop);\n\n const dt = now - lastTime;\n lastTime = now;\n\n if (!slider.current || !isWrapping.current || isPointerDown.current || isAnimatingRef.current || showFullscreenSlider || !autoScroll) return;\n\n if (now < autoScrollPauseUntil.current) return;\n\n const cur = (offsetLocationRef.current?.get() ?? 0) - SPEED * dt;\n const next = cur\n\n targetRef.current?.set(next)\n bodyRef.current?.useDuration(0).useFriction(1)\n\n normalizeToWindow(next)\n\n animRef.current?.start()\n xRef.current = next\n positionSlider()\n updateActiveIndexFromX(next)\n }\n\n frameId = requestAnimationFrame(loop);\n return () => cancelAnimationFrame(frameId);\n }, [showFullscreenSlider]);\n\n useEffect(() => {\n const el = slider.current\n if (!el) return\n\n const ro = new ResizeObserver(() => {\n const rawKids = Children.toArray(children).filter(isValidElement) as ReactElement<any>[]\n const originals = rawKids.length\n if (originals < 1) return\n\n const allEls = Array.from(el.children) as HTMLElement[]\n const clonesBefore = clonesCountRef.current\n const clonesAfter = clonesBefore\n const originalEls = allEls.slice(clonesBefore, allEls.length - clonesAfter)\n\n const cw = el.clientWidth\n let sum = 0\n let count = 0\n for (const slot of originalEls) {\n const w = slot.getBoundingClientRect().width\n if (w === 0) {\n requestAnimationFrame(() => ro.observe(el))\n return\n }\n if (sum + w <= cw) {\n sum += w\n count++\n } else {\n count++\n break\n }\n }\n\n const per = Math.max(1, Math.min(originals, count))\n const guard = per + 2 >= originals\n let shouldLoop = loop\n if (guard) {\n shouldLoop = false\n }\n\n setWrap(shouldLoop ?? false)\n isWrapping.current = shouldLoop ?? false\n clonesCountRef.current = shouldLoop ? per : 0\n setVisibleImages(per)\n visibleImagesRef.current = per\n\n const slidesArr: ReactElement<any>[] = []\n cells.current = []\n\n if (shouldLoop) {\n slidesArr.push(...rawKids.slice(-per).map((c, i) => cloneSlide(c, `before-${i}`, -per + i, cells)))\n }\n slidesArr.push(...rawKids.map((c, i) => cloneSlide(c, `original-${i}`, i, cells)))\n if (shouldLoop) {\n slidesArr.push(...rawKids.slice(0, per).map((c, i) => cloneSlide(c, `after-${i}`, i, cells)))\n }\n setClonedChildren(slidesArr)\n })\n\n ro.observe(el)\n return () => ro.disconnect()\n }, [slider, visibleImagesRef, isWrapping, allImagesLoaded])\n\n useEffect(() => {\n const container = slider.current\n if (!container) return\n\n const slideEls = Array.from(container.children) as HTMLElement[]\n let canceled = false\n\n function measureAndPosition() {\n if (responsive) {\n const widths = slideEls.map((sl) => sl.getBoundingClientRect().width)\n if (widths.some((w) => w === 0)) {\n return requestAnimationFrame(measureAndPosition)\n }\n\n const clonesBefore = clonesCountRef.current\n const beforeWidths = widths.slice(0, clonesBefore)\n let runningX = -(beforeWidths.reduce((sum, w) => sum + w, 0) + (gap ?? 0) * clonesBefore)\n\n slideEls.forEach((sl, i) => {\n sl.style.transform = `translateX(${runningX}px)`\n runningX += widths[i] + (gap ?? 0)\n })\n\n const origWidths = widths.slice(clonesBefore, widths.length - clonesBefore)\n const originalsCount = origWidths.length\n const innerGaps = Math.max(0, originalsCount - 1)\n const baseWidth = origWidths.reduce((sum, w) => sum + w, 0) + (gap ?? 0) * innerGaps\n sliderWidth.current = wrap ? baseWidth + (originalsCount > 0 ? (gap ?? 0) : 0) : baseWidth\n } else {\n if (canceled) return\n slideEls.forEach((sl) => {\n sl.style.width = ''\n sl.style.transform = ''\n })\n\n const widths = slideEls.map((sl) => sl.getBoundingClientRect().width)\n if (widths.some((w) => w === 0)) {\n return requestAnimationFrame(measureAndPosition)\n }\n\n slideEls.forEach((sl, i) => {\n sl.style.width = `${widths[i]}px`\n })\n\n const clonesBefore = clonesCountRef.current\n const beforeWidths = widths.slice(0, clonesBefore)\n let runningX = -(beforeWidths.reduce((sum, w) => sum + w, 0) + (gap ?? 0) * clonesBefore)\n\n slideEls.forEach((sl, i) => {\n sl.style.transform = `translateX(${runningX}px)`\n runningX += widths[i] + (gap ?? 0)\n })\n\n const origWidths = widths.slice(clonesBefore, widths.length - clonesBefore)\n const originalsCount = origWidths.length\n const innerGaps = Math.max(0, originalsCount - 1)\n const baseWidth = origWidths.reduce((sum, w) => sum + w, 0) + (gap ?? 0) * innerGaps\n sliderWidth.current = wrap ? baseWidth + (originalsCount > 0 ? (gap ?? 0) : 0) : baseWidth\n }\n }\n\n requestAnimationFrame(measureAndPosition)\n setIsMeasured(true)\n return () => {\n canceled = true\n }\n }, [clonedChildren, visibleImages])\n\n useEffect(() => {\n const ready = allImagesLoaded && clonedChildren.length > 0 && isMeasured\n if (ready) setIsReady(true)\n }, [allImagesLoaded, clonedChildren.length, isMeasured])\n\n useLayoutEffect(() => {\n if (!slider.current || cells.current.length === 0 || hasPositioned.current || sliderWidth.current === 0 || !slides.current || !slides.current[0] || !slides.current[0].cells[0]?.element) return\n firstCellInSlide.current = slides.current[0].cells[0]?.element\n const containerWidth = slider.current.clientWidth\n const isCenter = getCenterOffsetForIndex(0)\n if (wrap) {\n const currentPosition = isCenter;\n sliderX.current = currentPosition\n setTranslateX(currentPosition);\n }\n if (!wrap && sliderWidth.current <= containerWidth) {\n sliderX.current = (containerWidth - sliderWidth.current) / 2\n slider.current.style.transform = `translate3d(${Math.round(sliderX.current)}px,0,0)`\n }\n hasPositioned.current = true\n }, [slidesState, wrap])\n\n useEffect(() => {\n const containerEl = slider.current\n if (!containerEl) return\n\n let canceled = false\n const rawKids = Children.toArray(children).filter(isValidElement)\n const childCount = rawKids.length\n const clonesBefore = wrap ? visibleImages : 0\n const clonesAfter = clonesBefore\n const cw = containerEl.getBoundingClientRect().width\n\n function buildPages() {\n if (canceled || !containerEl) return\n const allEls = Array.from(containerEl.children) as HTMLElement[]\n const originals = allEls.slice(clonesBefore, allEls.length - clonesAfter)\n const idxMap = new Map<HTMLElement, number>(originals.map((el, i) => [el, i]))\n\n const left0 = containerEl.getBoundingClientRect().left\n const data = originals.map((el) => {\n const r = el.getBoundingClientRect()\n return { el, left: r.left - left0, right: r.right - left0 }\n })\n\n const pages: { els: HTMLElement[]; target: number }[] = []\n let i = 0\n\n if (groupCells) {\n while (i < childCount) {\n const startLeft = data[i]?.left ?? 0\n const viewRight = startLeft + cw\n let j = i\n while (j < childCount && (data[j]?.right ?? 0) <= viewRight) j++\n if (j === i) j++\n const slice = originals.slice(i, j)\n const isLast = j >= childCount\n let target = startLeft\n if (isLast && !wrap) {\n target = Math.max(0, sliderWidth.current - cw)\n }\n if (i === 0) target = 0\n pages.push({ els: slice, target })\n i = j\n }\n } else {\n const maxTarget = Math.max(0, (sliderWidth.current || 0) - cw);\n const EPS = 0.5;\n\n if (wrap) {\n data.forEach((d, idx) => {\n const t = idx === 0 ? 0 : d.left;\n pages.push({ els: [d.el], target: t });\n });\n } else {\n for (let idx = 0; idx < data.length; idx++) {\n const d = data[idx];\n let t = idx === 0 ? 0 : d.left;\n t = Math.min(t, maxTarget);\n\n if (!pages.length || Math.abs(t - pages[pages.length - 1].target) > EPS) {\n pages.push({ els: [d.el], target: t });\n }\n\n if (Math.abs(t - maxTarget) <= EPS) break;\n }\n\n const lastT = pages[pages.length - 1]?.target ?? 0;\n const needTerminal = maxTarget > 0 && Math.abs(lastT - maxTarget) > EPS;\n if (needTerminal) {\n\n let lastIdx = -1;\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i].left <= maxTarget + EPS) { lastIdx = i; break; }\n }\n const safeIdx = lastIdx >= 0 ? lastIdx : data.length - 1;\n pages.push({ els: [data[safeIdx].el], target: maxTarget });\n }\n }\n }\n\n const newSlides = pages.map((page) => ({\n target: page.target,\n cells: page.els.map((el) => ({\n element: el,\n index: idxMap.get(el)!,\n })),\n }))\n\n const hasNaN = newSlides.some((s) => Number.isNaN(s.target))\n const unstable = hasNaN || (wrap && newSlides.length === 1)\n if (unstable) {\n requestAnimationFrame(buildPages)\n return\n }\n\n slides.current = newSlides\n setSlidesState(newSlides)\n }\n\n requestAnimationFrame(buildPages)\n return () => {\n canceled = true\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children, clonedChildren, visibleImages, wrap])\n\n useEffect(() => {\n if (!slider.current) return\n const childrenArray = Children.toArray(children)\n const imgOffset = !wrap ? 0 : visibleImages * 2\n if (clonedChildren.length !== Children.toArray(children).length + imgOffset) return\n\n expandableImgRefs.current = []\n expandableImgRefs.current = Array(childrenArray.length + imgOffset)\n .fill(null)\n .map(() => createRef<HTMLImageElement>())\n\n const images = slider.current.querySelectorAll('img')\n images.forEach((img, index) => {\n if (expandableImgRefs.current[index]) {\n ;(expandableImgRefs.current[index] as any).current = img\n }\n })\n return () => {\n expandableImgRefs.current = []\n }\n }, [children, clonedChildren, visibleImages, wrap])\n\n useEffect(() => {\n if (!slider.current || sliderWidth.current === 0 || !slides.current?.[0]?.cells?.[0]?.element) return\n firstCellInSlide.current = slides.current[0].cells[0]?.element\n const containerWidth = slider.current.clientWidth\n if (!wrap && sliderWidth.current <= containerWidth) {\n sliderX.current = (containerWidth - sliderWidth.current) / 2\n slider.current.style.transform = `translate3d(${Math.round(sliderX.current)}px,0,0)`\n }\n }, [slidesState, wrap])\n\n useEffect(() => {\n if (!isReady || !sliderContainer.current) return\n const el = sliderContainer.current\n const io = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setTimeout(() => {\n setInView(true)\n io.disconnect()\n if (!slider.current) return;\n const isCenter = getCenterOffsetForIndex(0)\n if (wrap) {\n const currentPosition = isCenter;\n sliderX.current = currentPosition\n setTranslateX(currentPosition);\n }\n }, 100)\n }\n },\n { threshold: 0.2 }\n )\n io.observe(el)\n return () => io.disconnect()\n }, [isReady])\n\n const locationRef = useRef<Vector1DType | null>(null)\n const previousLocationRef = useRef<Vector1DType | null>(null)\n const offsetLocationRef = useRef<Vector1DType | null>(null)\n const targetRef = useRef<Vector1DType | null>(null)\n const bodyRef = useRef<ScrollBodyType | null>(null)\n const translateRef = useRef<ReturnType<typeof Translate> | null>(null)\n const animRef = useRef<AnimationsType | null>(null)\n const limitRef = useRef<LimitType | null>(null)\n\n const pointerDownRef = useRef(false)\n const isAnimatingRef = useRef(false)\n const isPointerDown = useRef(false)\n const isScrolling = useRef(false)\n\n const xRef = useRef(0)\n const dragX = useRef(0)\n const previousDragX = useRef(0)\n const dragMoveTime = useRef<Date | null>(null)\n const isDragSelect = useRef(false)\n\n const boundsRef = useRef<ScrollBoundsType | null>(null)\n const povRef = useRef<PercentOfViewType | null>(null)\n\n const getSnapTargets: () => number[] = () => (slides.current || []).map((s) => s.target)\n const totalWidth = () => sliderWidth.current || 0\n\n function PercentOfView(viewSize: number) {\n return {\n measure(n: number) {\n return (viewSize * n) / 100\n },\n }\n }\n type PercentOfViewType = ReturnType<typeof PercentOfView>\n\n function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n body: ScrollBodyType,\n pov: PercentOfViewType\n ) {\n const pullBack = pov.measure(10)\n const edgeTol = pov.measure(50)\n const fricLim = Limit(0.1, 0.99)\n\n function reached() {\n return limit.reachedAny(target.get()) && limit.reachedAny(location.get())\n }\n\n return {\n constrain(pointerDown: boolean) {\n if (!reached()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const distToEdge = Math.abs(limit[edge] - location.get())\n const distToTarget = target.get() - location.get()\n const f = fricLim.constrain(distToEdge / edgeTol)\n\n target.set(target.get() - distToTarget * f)\n\n if (!pointerDown && Math.abs(distToTarget) < pullBack) {\n target.set(limit.constrain(target.get()))\n body.useDuration(25).useBaseFriction()\n }\n },\n }\n }\n type ScrollBoundsType = ReturnType<typeof ScrollBounds>\n\n function select(index: number) {\n if (!slides.current?.length || !slider.current) return\n\n const length = slides.current.length\n\n if (wrap) {\n wrapSelect(index)\n index = ((index % length) + length) % length\n } else {\n index = clampIndex(index, length)\n }\n\n selectedIndex.current = index\n slideStore.setSlideIndex(index)\n firstCellInSlide.current = slides.current?.[index]?.cells?.[0]?.element ?? null\n\n const isCenter = getCenterOffsetForIndex(index)\n const targetX = -(slides.current[index].target) + isCenter\n bodyRef.current?.useBaseDuration().useBaseFriction()\n targetRef.current?.set(targetX)\n isAnimatingRef.current = true\n animRef.current?.start()\n }\n\n function previous() {\n const L = slides.current?.length ?? 0\n if (!L) return\n const nextIdx = wrap ? selectedIndex.current - 1 : clampIndex(selectedIndex.current - 1, L)\n select(nextIdx)\n }\n\n function next() {\n const L = slides.current?.length ?? 0\n if (!L) return\n const nextIdx = wrap ? selectedIndex.current + 1 : clampIndex(selectedIndex.current + 1, L)\n select(nextIdx)\n }\n\n function indexFromX(loc: number) {\n const x = -loc\n const targets = getSnapTargets()\n const W = totalWidth()\n if (!targets.length) return 0\n let best = 0\n let min = Infinity\n for (let i = 0; i < targets.length; i++) {\n const base = targets[i]\n const candidates = !W || !wrap ? [base] : [base, base + W, base - W]\n for (const c of candidates) {\n const d = Math.abs(c - x)\n if (d < min) {\n min = d\n best = i\n }\n }\n }\n return best\n }\n\n function getFrictionFactor() {\n return bodyRef.current?.frictionFactor() ?? 0.68\n }\n\n function getRestingPosition() {\n const cur = xRef.current\n const v = sliderVelocity.current || 0\n return cur + v / (1 - getFrictionFactor())\n }\n\n function getStripWidth() {\n return totalWidth()\n }\n\n const paintWindowIdxRef = useRef(0)\n const wrapWidthRef = useRef(0)\n\n wrapWidthRef.current = sliderWidth.current\n\n function wrapForPaintStable(worldX: number) {\n if (!wrap) return worldX\n const W = wrapWidthRef.current\n if (!W) return worldX\n\n const k = paintWindowIdxRef.current\n const right = -k * W\n const left = -(k + 1) * W\n\n const H = Math.max(1, W * 0.02)\n\n if (worldX < left - H) {\n while (worldX < -(paintWindowIdxRef.current + 1) * W - H) {\n paintWindowIdxRef.current += 1\n }\n }\n else if (worldX > right + H) {\n while (worldX > -paintWindowIdxRef.current * W + H) {\n paintWindowIdxRef.current -= 1\n }\n }\n\n const k2 = paintWindowIdxRef.current\n const wrapped = worldX + k2 * W\n\n return wrapped <= -W ? wrapped + W : wrapped > 0 ? wrapped - W : wrapped\n }\n\n function setTranslateX(tx: number) {\n translateRef.current?.to(Math.round(tx))\n }\n\n function positionSlider(loc?: number) {\n const x = loc ?? xRef.current\n const px = wrapForPaintStable(x)\n translateRef.current?.to(px)\n }\n\n function getSlideDistance(x: number, index: number) {\n if (!slider.current || !slides.current?.length) return 1\n const length = slides.current.length\n const slideIndex = wrap ? ((index % length) + length) % length : clampIndex(index, length)\n const slide = slides.current[slideIndex]\n if (!slide) return null\n\n let loopWrap = 0\n if (wrap && sliderWidth.current > slider.current.clientWidth) {\n loopWrap = sliderWidth.current * Math.floor(index / length)\n }\n\n const containerWidth = slider.current.clientWidth;\n const cellWidth = slides.current[slideIndex].cells[0].element.clientWidth;\n\n const isCenter = centerAlign ? (containerWidth - cellWidth) / 2 : 0;\n return x - ((slide.target - isCenter) + loopWrap)\n }\n\n function getClosestResting(restingX: number, dist: number, inc: number) {\n let index = selectedIndex.current\n let minDistance = Infinity\n let distance = dist\n while (distance < minDistance) {\n index += inc\n minDistance = distance\n const d = getSlideDistance(-restingX, index)\n if (d == null) break\n distance = Math.abs(d)\n }\n return { distance: minDistance, index: index - inc }\n }\n\n function dragEndRestingSelect() {\n const restingX = getRestingPosition()\n const distance = Math.abs(getSlideDistance(-restingX, selectedIndex.current) ?? Infinity)\n const positiveResting = getClosestResting(restingX, distance, 1)\n const negativeResting = getClosestResting(restingX, distance, -1)\n return positiveResting.distance < negativeResting.distance ? positiveResting.index : negativeResting.index\n }\n\n function dragEndBoostSelect() {\n const movedAt = dragMoveTime.current\n if (!movedAt || new Date().getTime() - movedAt.getTime() > 100) return 0\n const delta = previousDragX.current - dragX.current\n if (delta > 0) return 1\n if (delta < 0) return -1\n return 0\n }\n\n function shiftAllBy(delta: number) {\n locationRef.current?.add(delta)\n previousLocationRef.current?.add(delta)\n offsetLocationRef.current?.add(delta)\n targetRef.current?.add(delta)\n xRef.current += delta\n translateRef.current?.resetCache?.()\n }\n\n function wrapSelect(index: number) {\n if (!wrap || !slides.current?.length) return\n const length = slides.current.length\n const slideableWidth = getStripWidth()\n const selectedIdx = selectedIndex.current\n\n if (!isDragSelect.current) {\n const wrapIndex = ((index % length) + length) % length\n const delta = Math.abs(wrapIndex - selectedIdx)\n const backWrapDelta = Math.abs(wrapIndex + length - selectedIdx)\n const fwdWrapDelta = Math.abs(wrapIndex - length - selectedIdx)\n if (backWrapDelta < delta) index += length\n else if (fwdWrapDelta < delta) index -= length\n }\n\n if (index < 0) {\n shiftAllBy(-slideableWidth)\n paintWindowIdxRef.current += 1\n } else if (index >= length) {\n shiftAllBy(+slideableWidth)\n paintWindowIdxRef.current -= 1\n }\n }\n\n function updateActiveIndexFromX(loc: number) {\n const idx = indexFromX(loc)\n if (selectedIndex.current !== idx) {\n selectedIndex.current = idx\n slideStore.setSlideIndex(idx)\n firstCellInSlide.current = slides.current?.[idx]?.cells?.[0]?.element ?? null\n }\n }\n\n function goToIndex(idx: number, opts: { preserveTiming?: boolean } = {}) {\n const { preserveTiming = false } = opts\n if (!bodyRef.current || !targetRef.current) return\n if (!preserveTiming) bodyRef.current.useBaseDuration().useBaseFriction()\n select(idx)\n }\n\n useEffect(() => {\n if (!slides.current?.length) return;\n\n const idx = slideStore.getSnapshot();\n const mode = slideStore.getMode(true);\n\n if (idx === selectedIndex.current && !pointerDownRef.current) return;\n\n if (mode === 'instant') {\n const x = -(slides.current[idx].target) + getCenterOffsetForIndex(idx);\n bodyRef.current?.useDuration(0).useFriction(1);\n targetRef.current?.set(x);\n animRef.current?.start();\n } else {\n goToIndex(idx, { preserveTiming: false });\n }\n }, [slideIndexSync]);\n\n useEffect(() => {\n const root = sliderContainer.current\n const track = slider.current\n if (!root || !track || !slides.current?.length) return\n\n const startIdx = selectedIndex.current || 0\n const start = -(slides.current?.[startIdx]?.target ?? 0) + getCenterOffsetForIndex(startIdx)\n\n const location = Vector1D(start)\n const previousLocation = Vector1D(start)\n const offsetLocation = Vector1D(start)\n const target = Vector1D(start)\n\n locationRef.current = location\n previousLocationRef.current = previousLocation\n offsetLocationRef.current = offsetLocation\n targetRef.current = target\n\n translateRef.current = Translate(track)\n\n const selectSpeed = 25\n const freeScrollSpeed = 43\n const baseFriction = 0.68\n const body = ScrollBody(location, offsetLocation, previousLocation, target, selectSpeed, baseFriction)\n bodyRef.current = body\n\n if (!wrap) {\n const cw = track.clientWidth\n const min = -(Math.max(0, sliderWidth.current - cw))\n const max = 0\n limitRef.current = Limit(isNaN(min) ? 0 : min, max)\n\n povRef.current = PercentOfView(cw)\n boundsRef.current = ScrollBounds(\n limitRef.current,\n offsetLocationRef.current!,\n targetRef.current!,\n bodyRef.current!,\n povRef.current\n )\n } else {\n limitRef.current = null\n boundsRef.current = null\n povRef.current = null\n }\n\n const anim = Animations(\n document,\n window as WindowType,\n () => {\n if (!wrap) {\n boundsRef.current?.constrain(pointerDownRef.current)\n }\n\n bodyRef.current?.seek()\n xRef.current = locationRef.current!.get()\n },\n (alpha) => {\n const body = bodyRef.current\n const shouldSettle = body ? body.settled() : true\n const idle = shouldSettle && !pointerDownRef.current\n if (idle) {\n animRef.current?.stop()\n isAnimatingRef.current = false\n }\n const cur = locationRef.current!.get()\n const prev = previousLocationRef.current!.get()\n const loc = cur * alpha + prev * (1 - alpha)\n offsetLocationRef.current!.set(loc)\n xRef.current = loc\n positionSlider()\n if (!isAnimatingRef.current && !pointerDownRef.current) {\n updateActiveIndexFromX(loc)\n }\n }\n )\n animRef.current = anim\n anim.init()\n\n translateRef.current.to(start)\n\n const dragStore = EventStore()\n const moveStore = EventStore()\n const axis = Axis()\n const tracker = DragTracker(axis, window as WindowType)\n\n let isMouse = false\n let startX = 0\n let startY = 0\n let preventScroll = false\n const freeBoost = { mouse: 500, touch: 600 }\n\n function addDragEvents() {\n const node: any = isMouse ? document : root\n moveStore\n .add(node, 'touchmove', onMove as any)\n .add(node, 'touchend', onUp as any)\n .add(node, 'mousemove', onMove as any, { passive: false })\n .add(node, 'mouseup', onUp as any)\n }\n\n function forceBoost(rawForce: number) {\n const type = isMouse ? 'mouse' : 'touch'\n return rawForce * (freeBoost[type as 'mouse' | 'touch'])\n }\n\n function onDown(evt: PointerEvent) {\n const hit = (evt.target as Node)\n\n if (prevButtonRef.current?.contains(hit)) return\n if (nextButtonRef.current?.contains(hit)) return\n const dotIndex = dotRefs.current.findIndex((dot) => dot?.contains(hit))\n if (dotIndex >= 0) return\n if (dotsContainerRef.current?.contains(hit)) return\n\n const isMouseEvt = isMouseEvent(evt as any, window as any)\n isMouse = isMouseEvt\n if (isMouseEvt && (evt as MouseEvent).button !== 0) return\n\n pointerDownRef.current = true\n isPointerDown.current = true\n isScrolling.current = false\n isClick.current = true\n\n tracker.pointerDown(evt as any)\n startX = tracker.readPoint(evt as any, 'x')\n startY = tracker.readPoint(evt as any, 'y')\n\n bodyRef.current!.useFriction(0).useDuration(0)\n targetRef.current!.set(locationRef.current!.get())\n\n addDragEvents()\n animRef.current?.start()\n }\n\n function onMove(evt: PointerEvent) {\n const isTouchEvt = !isMouseEvent(evt as any, window as any)\n if (isTouchEvt && (evt as any).touches?.length >= 2) return onUp(evt)\n\n const lastScroll = tracker.readPoint(evt as any, 'x')\n const lastCross = tracker.readPoint(evt as any, 'y')\n const diffScroll = Math.abs(lastScroll - startX)\n const diffCross = Math.abs(lastCross - startY)\n\n if (diffScroll > 5 || diffCross > 5) {\n isClick.current = false\n }\n\n if (!preventScroll && !isMouse) {\n if (!('cancelable' in evt) || !(evt as any).cancelable) return onUp(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return onUp(evt)\n }\n\n const diffX = tracker.pointerMove(evt as any).dx\n\n previousDragX.current = dragX.current\n dragX.current = lastScroll\n sliderVelocity.current = diffX\n dragMoveTime.current = new Date()\n\n bodyRef.current!.useFriction(0.3).useDuration(0.75)\n const delta = diffX\n targetRef.current!.add(delta)\n\n animRef.current?.start()\n if ((evt as any).cancelable) evt.preventDefault?.()\n }\n\n function onUp(evt: PointerEvent) {\n isPointerDown.current = false\n preventScroll = false\n pointerDownRef.current = false\n moveStore.clear()\n\n if (isClick.current) {\n const target = evt.target as HTMLElement\n const img = target.closest('img') as HTMLImageElement | null\n if (img) {\n const index = expandableImgRefs.current.findIndex((ref) => ref.current === img)\n if (index >= 0) handleImageClick(evt as any, index)\n return\n }\n }\n\n autoScrollPauseUntil.current = performance.now() + AUTO_SCROLL_PAUSE_MS;\n\n if (freeScroll === false) {\n xRef.current = offsetLocationRef.current!.get()\n\n let index = dragEndRestingSelect()\n if (index === selectedIndex.current || (index === slides.current.length && selectedIndex.current === 0)) {\n index += dragEndBoostSelect()\n }\n\n isDragSelect.current = true\n select(index)\n isDragSelect.current = false\n } else {\n const raw = tracker.pointerUp(evt as any).fx\n const boosted = forceBoost(raw)\n const force = boosted\n const factor = Math.min(1, Math.abs(raw) > 0 ? Math.abs((Math.abs(boosted) - Math.abs(force)) / (raw || 1)) : 0)\n const speed = freeScrollSpeed - 10 * factor\n const friction = baseFriction + factor / 50\n bodyRef.current!.useDuration(speed).useFriction(friction)\n\n targetRef.current!.add(force)\n\n anim.start()\n isMouse = false\n }\n \n }\n\n dragStore\n .add(root, 'dragstart', (evt) => (evt as Event).preventDefault(), { passive: false })\n .add(root, 'touchstart', onDown as any)\n .add(root, 'mousedown', onDown as any, { passive: true })\n .add(root, 'touchcancel', onUp as any)\n .add(root, 'contextmenu', onUp as any)\n\n function normalizeToWindow(anchor?: number) {\n if (!wrap) return\n const W = getStripWidth()\n if (!W) return\n\n const a = anchor ?? (offsetLocationRef.current?.get() ?? xRef.current)\n\n const normalized = ((a % W) + W) % W - W\n const delta = normalized - a\n if (delta === 0) return\n\n locationRef.current?.add(delta)\n previousLocationRef.current?.add(delta)\n offsetLocationRef.current?.add(delta)\n targetRef.current?.add(delta)\n xRef.current += delta\n }\n\n function onWheel(e: WheelEvent) {\n const trackEl = slider.current\n if (!trackEl) return\n const containerWidth = trackEl.clientWidth\n const contentWidth = sliderWidth.current\n const canScrollHorizontally = contentWidth > containerWidth\n const isHorizontal = Math.abs(e.deltaX) > Math.abs(e.deltaY)\n if (!isHorizontal || !canScrollHorizontally) return\n autoScrollPauseUntil.current = performance.now() + 100;\n const cur = (offsetLocationRef.current?.get() ?? 0) - e.deltaX\n let next = cur\n\n if (!wrap && limitRef.current) {\n next = limitRef.current.constrain(cur)\n }\n\n targetRef.current?.set(next)\n bodyRef.current?.useDuration(0).useFriction(1)\n\n normalizeToWindow(next)\n\n animRef.current?.start()\n xRef.current = next\n positionSlider()\n updateActiveIndexFromX(next)\n }\n\n root.addEventListener('wheel', onWheel as any, { passive: false })\n\n return () => {\n dragStore.clear()\n moveStore.clear()\n root.removeEventListener('wheel', onWheel as any)\n animRef.current?.destroy()\n animRef.current = null\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [clonedChildren.length, slidesState.length, wrap])\n\n const centerSlider = useCallback(() => {\n const track = slider.current\n if (!track) return\n const idx = selectedIndex.current || 0\n const x = -(slides.current?.[idx]?.target ?? 0) + getCenterOffsetForIndex(idx)\n locationRef.current?.set(x)\n previousLocationRef.current?.set(x)\n offsetLocationRef.current?.set(x)\n targetRef.current?.set(x)\n xRef.current = x\n positionSlider()\n }, [wrap])\n\n useEffect(() => {\n const track = slider.current\n if (!track) return\n if (!wrap) {\n const cw = track.clientWidth\n const min = -(Math.max(0, sliderWidth.current - cw))\n const max = 0\n limitRef.current = Limit(isNaN(min) ? 0 : min, max)\n const cur = offsetLocationRef.current?.get() ?? 0\n const constrained = limitRef.current.constrain(cur)\n locationRef.current?.set(constrained)\n previousLocationRef.current?.set(constrained)\n offsetLocationRef.current?.set(constrained)\n targetRef.current?.set(constrained)\n translateRef.current?.to(constrained)\n xRef.current = constrained\n } else {\n limitRef.current = null\n }\n centerSlider()\n }, [visibleImages, slidesState.length, wrap, centerSlider, showFullscreenSlider])\n\n useEffect(() => {\n const track = slider.current;\n if (!track) return;\n\n const ro = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const cw = track.clientWidth;\n const contentW = sliderWidth.current || 0;\n\n if (!isWrapping.current) {\n if (contentW <= cw) {\n const center = Math.round((cw - contentW) / 2);\n\n const newLimit = Limit(center, center);\n limitRef.current = newLimit;\n povRef.current = PercentOfView(cw);\n boundsRef.current = ScrollBounds(\n newLimit,\n offsetLocationRef.current!,\n targetRef.current!,\n bodyRef.current!,\n povRef.current!\n );\n\n locationRef.current?.set(center);\n previousLocationRef.current?.set(center);\n offsetLocationRef.current?.set(center);\n targetRef.current?.set(center);\n translateRef.current?.to(center);\n xRef.current = center;\n sliderX.current = center;\n } else {\n const min = -(contentW - cw);\n const max = 0;\n\n const newLimit = Limit(min, max);\n limitRef.current = newLimit;\n povRef.current = PercentOfView(cw);\n boundsRef.current = ScrollBounds(\n newLimit,\n offsetLocationRef.current!,\n targetRef.current!,\n bodyRef.current!,\n povRef.current!\n );\n\n const cur = offsetLocationRef.current?.get() ?? 0;\n const constrained = newLimit.constrain(cur);\n\n locationRef.current?.set(constrained);\n previousLocationRef.current?.set(constrained);\n offsetLocationRef.current?.set(constrained);\n targetRef.current?.set(constrained);\n translateRef.current?.to(constrained);\n xRef.current = constrained;\n sliderX.current = constrained;\n }\n } else {\n limitRef.current = null;\n povRef.current = null;\n boundsRef.current = null;\n\n const a = offsetLocationRef.current?.get() ?? xRef.current ?? 0;\n const W = sliderWidth.current || 0;\n if (W > 0) {\n const normalized = ((a % W) + W) % W - W;\n const delta = normalized - a;\n\n locationRef.current?.add(delta);\n previousLocationRef.current?.add(delta);\n offsetLocationRef.current?.add(delta);\n targetRef.current?.add(delta);\n xRef.current += delta;\n\n translateRef.current?.to(xRef.current);\n }\n }\n });\n });\n });\n\n ro.observe(track);\n return () => ro.disconnect();\n }, [wrap]);\n\n const shieldCleanupRef = useRef<null | (() => void)>(null)\n const SHIELD_TIMEOUT = 400\n function addGestureShield() {\n shieldCleanupRef.current?.()\n const shield = document.createElement('div')\n Object.assign(shield.style, {\n position: 'fixed',\n inset: '0',\n zIndex: '10000',\n background: 'transparent',\n touchAction: 'none',\n pointerEvents: 'auto',\n } as CSSStyleDeclaration)\n document.body.appendChild(shield)\n const remove = () => {\n if (shield.parentNode) shield.remove()\n }\n const timer = window.setTimeout(() => {\n remove()\n shieldCleanupRef.current = null\n }, SHIELD_TIMEOUT)\n const teardown = () => {\n window.clearTimeout(timer)\n remove()\n shieldCleanupRef.current = null\n }\n shieldCleanupRef.current = teardown\n return teardown\n }\n\n function handleImageClick(e: React.PointerEvent | MouseEvent, parsedImgIndex: number) {\n isClick.current = true\n const originalIndex = ((parsedImgIndex - visibleImagesRef.current) % imageCount + imageCount) % imageCount\n const fullscreenIndex = originalIndex + 1\n const finalIndex = !wrap ? parsedImgIndex : fullscreenIndex\n setShowFullscreenModal(true)\n toggleFullscreen(e as React.PointerEvent<HTMLDivElement>, expandableImgRefs.current[parsedImgIndex], finalIndex)\n setSlideIndex(finalIndex)\n }\n\n function toggleFullscreen(\n e: React.PointerEvent<HTMLDivElement>,\n imgRef: React.RefObject<HTMLImageElement | null>,\n index: number\n ) {\n const origImg = imgRef.current\n const container = sliderContainer.current\n if (!origImg || !container) return\n\n shieldCleanupRef.current?.()\n shieldCleanupRef.current = addGestureShield()\n\n const imgRect = origImg.getBoundingClientRect()\n\n const overlay = document.createElement('div')\n overlay.className = styles.fullscreenOverlay\n overlay.style.display = 'none'\n overlayDivRef.current = overlay\n\n const dup = document.createElement('img')\n dup.className = styles.duplicateImg\n dup.style.display = 'none'\n duplicateImgRef.current = dup\n\n const closeBtn = document.createElement('button')\n closeBtn.type = 'button'\n closeBtn.className = styles.closeBtn\n closeBtn.style.display = 'none'\n closeButtonRef.current = closeBtn\n {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '35')\n svg.setAttribute('height', '35')\n svg.setAttribute('viewBox', '0 0 16 16')\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n path.setAttribute('fill', 'white')\n path.setAttribute('stroke', '#4f4f4f')\n path.setAttribute('stroke-width', '0.5')\n path.setAttribute(\n 'd',\n 'M12.96 4.46l-1.42-1.42-3.54 3.55-3.54-3.55-1.42 1.42 3.55 3.54-3.55 3.54 1.42 1.42 3.54-3.55 3.54 3.55 1.42-1.42-3.55-3.54 3.55-3.54z'\n )\n svg.appendChild(path)\n closeBtn.appendChild(svg)\n }\n\n const leftCh = document.createElement('div')\n leftCh.className = styles.leftChevron\n leftCh.style.display = 'none'\n leftChevronRef.current = leftCh\n {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '50')\n svg.setAttribute('height', '50')\n svg.setAttribute('viewBox', '0 0 16 16')\n svg.setAttribute('fill', 'white')\n const poly = document.createElementNS('http://www.w3.org/2000/svg', 'polygon')\n poly.setAttribute('stroke', '#4f4f4f')\n poly.setAttribute('stroke-width', '0.5')\n poly.setAttribute('points', '4.586,3.414 9.172,8 4.586,12.586 6,14 12,8 6,2')\n svg.appendChild(poly)\n leftCh.appendChild(svg)\n }\n\n const rightCh = document.createElement('div')\n rightCh.className = styles.rightChevron\n rightCh.style.display = 'none'\n rightChevronRef.current = rightCh\n {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('width', '50')\n svg.setAttribute('height', '50')\n svg.setAttribute('viewBox', '0 0 16 16')\n svg.setAttribute('fill', 'white')\n const poly = document.createElementNS('http://www.w3.org/2000/svg', 'polygon')\n poly.setAttribute('stroke', '#4f4f4f')\n poly.setAttribute('stroke-width', '0.5')\n poly.setAttribute('points', '4.586,3.414 9.172,8 4.586,12.586 6,14 12,8 6,2')\n svg.appendChild(poly)\n rightCh.appendChild(svg)\n }\n\n const ctr = document.createElement('div')\n ctr.className = styles.counter\n ctr.style.display = 'none'\n ctr.textContent = `${index + 1} / ${imageCount}`\n ;(counterRef as any).current = ctr\n\n const frag = document.createDocumentFragment()\n frag.append(overlay, dup, closeBtn, leftCh, rightCh, ctr)\n document.body.appendChild(frag)\n\n overlay.style.display = 'block'\n overlay.classList.remove(styles.open)\n\n dup.src = origImg.src\n dup.style.display = 'block'\n dup.style.position = 'fixed'\n dup.style.left = `${imgRect.left}px`\n dup.style.top = `${imgRect.top}px`\n dup.style.width = `${imgRect.width}px`\n dup.style.height = `${imgRect.height}px`\n dup.style.transition = 'none'\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n dup.offsetWidth\n dup.style.transition = 'transform 0.3s cubic-bezier(.4,0,.22,1)'\n\n closeBtn.style.display = 'block'\n closeBtn.classList.remove(styles.open)\n\n leftCh.style.display = imageCount > 1 ? 'block' : 'none'\n leftCh.classList.remove(styles.open)\n\n rightCh.style.display = imageCount > 1 ? 'block' : 'none'\n rightCh.classList.remove(styles.open)\n\n ctr.style.display = imageCount > 1 ? 'block' : 'none'\n ctr.classList.remove(styles.open)\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n overlay.offsetWidth\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n dup.offsetWidth\n\n const vw = document.documentElement.clientWidth\n const scaleX = vw / imgRect.width\n const scaleY = window.innerHeight / imgRect.height\n const s = Math.min(scaleX, scaleY)\n const finalW = imgRect.width * s\n const finalH = imgRect.height * s\n const targetLeft = (vw - finalW) / 2\n const targetTop = (window.innerHeight - finalH) / 2\n const dx = targetLeft - imgRect.left\n const dy = targetTop - imgRect.top\n\n requestAnimationFrame(() => {\n dup.style.transform = `translate3d(${dx}px, ${dy}px, 0) scale(${s})`\n overlay.style.backgroundColor = 'rgba(0,0,0,0.8)'\n overlay.classList.add(styles.open)\n closeBtn.classList.add(styles.open)\n if (imageCount > 1) {\n leftCh.classList.add(styles.open)\n rightCh.classList.add(styles.open)\n ctr.classList.add(styles.open)\n }\n })\n\n function centerMostFsImg(): HTMLImageElement | null {\n const root = document.querySelector('.fullscreen_slider');\n if (!root) return null;\n const imgs = Array.from(root.querySelectorAll('img')) as HTMLImageElement[];\n if (!imgs.length) return null;\n\n const cx = innerWidth / 2, cy = innerHeight / 2;\n return imgs\n .map(img => [img, img.getBoundingClientRect()] as const)\n .sort(([, a], [, b]) => {\n const da = Math.hypot(a.left + a.width/2 - cx, a.top + a.height/2 - cy);\n const db = Math.hypot(b.left + b.width/2 - cx, b.top + b.height/2 - cy);\n return da - db;\n })[0]?.[0] ?? null;\n }\n\n const onEnd = async (ev: TransitionEvent) => {\n if (ev.propertyName !== 'transform') return;\n dup.removeEventListener('transitionend', onEnd);\n\n await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));\n\n const img = centerMostFsImg();\n\n try {\n if (img) {\n if (img.complete && img.naturalWidth > 0) {\n await img.decode?.().catch(() => {});\n } else {\n await new Promise<void>((res) => {\n const done = () => img.decode?.().catch(() => {}).finally(res);\n img.addEventListener('load', done, { once: true });\n img.addEventListener('error', () => res(), { once: true });\n });\n }\n }\n } catch {}\n\n setShowFullscreenSlider(true);\n requestAnimationFrame(() => {\n dup.remove();\n (duplicateImgRef as any).current = null;\n shieldCleanupRef.current?.();\n shieldCleanupRef.current = null;\n });\n };\n dup.addEventListener('transitionend', onEnd, { once: true })\n }\n\n function onTouchStart(e: TouchEvent) {\n const t0 = e.touches[0]\n ;(onTouchStart as any)._sx = t0.clientX\n ;(onTouchStart as any)._sy = t0.clientY\n }\n function onTouchMove(e: TouchEvent) {\n if (e.touches.length !== 1) return\n const t0 = e.touches[0]\n const sx = (onTouchStart as any)._sx || t0.clientX\n const sy = (onTouchStart as any)._sy || t0.clientY\n const dx = t0.clientX - sx\n const dy = t0.clientY - sy\n const angle = Math.abs(Math.atan2(dy, dx) * (180 / Math.PI))\n const isMostlyVertical = Math.abs(dy) > Math.abs(dx)\n const isVerticalScroll = angle >= 60 || isMostlyVertical\n if (!isVerticalScroll) e.preventDefault()\n }\n useEffect(() => {\n const el = sliderContainer.current!\n el.addEventListener('touchstart', onTouchStart, { passive: false })\n el.addEventListener('touchmove', onTouchMove, { passive: false })\n return () => {\n el.removeEventListener('touchstart', onTouchStart as any)\n el.removeEventListener('touchmove', onTouchMove as any)\n }\n }, [])\n\n function createRipple(container: HTMLElement) {\n const old = container.querySelector<HTMLElement>('.ripple')\n if (old) old.remove()\n const rect = container.getBoundingClientRect()\n const diameter = Math.max(rect.width, rect.height)\n const radius = diameter / 2\n const x = rect.width / 2 - radius\n const y = rect.height / 2 - radius\n const span = document.createElement('span')\n span.className = styles['ripple']\n span.style.width = `${diameter}px`\n span.style.height = `${diameter}px`\n span.style.left = `${x}px`\n span.style.top = `${y}px`\n container.appendChild(span)\n span.addEventListener('animationend', () => span.remove())\n }\n\n const Arrow = ({ direction, size = 32 }: { direction: 'prev' | 'next'; size?: number }) => (\n <svg viewBox=\"0 0 24 24\" width={size} height={size} fill=\"#000\" xmlns=\"http://www.w3.org/2000/svg\">\n {direction === 'prev' ? (\n <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6z\" />\n ) : (\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6z\" />\n )}\n </svg>\n )\n\n return (\n <div\n ref={sliderContainer}\n className={styles.slider_container}\n style={{ position: 'relative', height: sliderHeight, backgroundColor: backgroundColor, zIndex: 1 }}\n >\n {!isReady && <div className={styles.shimmerOverlay} aria-hidden />}\n <div\n className={`${styles.fade_container} ${isReady && inView ? styles.fadeInActive : styles.fadeInStart}`}\n style={{ position: 'relative', height: sliderHeight }}\n >\n {/* Prev */}\n <div\n ref={prevButtonRef}\n onClick={() => {\n const btn = prevButtonRef.current\n if (btn) createRipple(btn)\n previous()\n }}\n style={{\n position: 'absolute',\n overflow: 'hidden',\n display:\n imageCount > 1 && slider.current && sliderWidth.current > slider.current.clientWidth\n ? 'flex'\n : 'none',\n left: 10,\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: 'rgba(255, 255, 255, 0.75)',\n boxShadow: '0 0 5px rgba(0, 0, 0, 0.5)',\n borderRadius: '100%',\n zIndex: 2,\n width: 36,\n height: 36,\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n <Arrow direction=\"prev\" size={32} />\n </div>\n\n {/* Next */}\n <div\n ref={nextButtonRef}\n onClick={() => {\n const btn = nextButtonRef.current\n if (btn) createRipple(btn)\n next()\n }}\n style={{\n position: 'absolute',\n overflow: 'hidden',\n display:\n imageCount > 1 && slider.current && sliderWidth.current > slider.current.clientWidth\n ? 'flex'\n : 'none',\n right: 10,\n top: '50%',\n transform: 'translateY(-50%)',\n backgroundColor: 'rgba(255, 255, 255, 0.75)',\n boxShadow: '0 0 5px rgba(0, 0, 0, 0.5)',\n borderRadius: '100%',\n zIndex: 2,\n width: 36,\n height: 36,\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n }}\n >\n <Arrow direction=\"next\" size={32} />\n </div>\n\n {/* Track */}\n <div ref={slider} style={{ width: '100%', willChange: 'transform', backfaceVisibility: 'hidden' }}>\n {clonedChildren}\n </div>\n\n {/* Dots */}\n <div\n ref={dotsContainerRef}\n style={{\n display: slider.current && sliderWidth.current <= (slider.current as HTMLDivElement).clientWidth ? 'none' : 'flex',\n justifyContent: 'center',\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n bottom: 10,\n zIndex: 10,\n background: 'rgba(0, 0, 0, 0.5)',\n padding: '4px 8px',\n borderRadius: '9999px',\n cursor: 'auto',\n }}\n >\n {(slides.current || []).map((_, index) => {\n const isActive = slideIndexSync === index\n return (\n <div\n key={index}\n ref={(el) => {\n dotRefs.current[index] = el\n }}\n onClick={() => {\n const btn = dotRefs.current[index]\n if (btn) createRipple(btn)\n isScrolling.current = false\n goToIndex(index)\n }}\n className={`${styles.pagination_dot} ${isActive ? styles.active : styles.inactive}`}\n />\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n\nexport default Slider","import { useEffect, useRef, useState } from 'react';\nexport function useOpenEpoch(open: boolean) {\n const [epoch, setEpoch] = useState(0);\n const prev = useRef(open);\n useEffect(() => {\n if (open && !prev.current) setEpoch(e => e + 1);\n prev.current = open;\n }, [open]);\n return epoch;\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport {\n Children,\n ReactElement,\n ReactNode,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport slideStore from './slideStore'\nimport cls from './ThumbnailSlider.module.css';\n\ntype WindowType = Window & typeof globalThis\n\nconst mathAbs = Math.abs\nconst clamp = (n: number, lo: number, hi: number) => Math.max(lo, Math.min(hi, n))\n\nfunction EventStore() {\n const listeners: Array<() => void> = []\n return {\n add<T extends EventTarget>(\n t: T,\n type: string,\n fn: EventListenerOrEventListenerObject,\n opts?: AddEventListenerOptions | boolean\n ) {\n t.addEventListener(type, fn as any, opts as any)\n listeners.push(() => t.removeEventListener(type, fn as any, opts as any))\n return this\n },\n clear() {\n while (listeners.length) listeners.pop()?.()\n },\n }\n}\n\ntype Vector1DType = {\n get: () => number\n set: (n: number) => void\n add: (n: number) => void\n}\n\nfunction Vector1D(initial: number): Vector1DType {\n let v = initial\n return {\n get: () => v,\n set: (n) => {\n v = n\n },\n add: (n) => {\n v += n\n },\n }\n}\n\nfunction Limit(min: number, max: number) {\n return {\n min,\n max,\n reachedMin(n: number) {\n return n < min\n },\n reachedMax(n: number) {\n return n > max\n },\n reachedAny(n: number) {\n return n < min || n > max\n },\n constrain(n: number) {\n return clamp(n, min, max)\n },\n }\n}\ntype LimitType = ReturnType<typeof Limit>\n\nfunction TranslateAxis(container: HTMLElement, axis: 'x' | 'y') {\n let prev = NaN\n function write(n: number) {\n if (n === prev) return\n container.style.transform =\n axis === 'x' ? `translate3d(${n}px,0,0)` : `translate3d(0,${n}px,0)`\n prev = n\n }\n return {\n to(target: number) {\n write(target)\n },\n resetCache() {\n prev = NaN\n },\n }\n}\n\ntype AnimationsType = {\n start: () => void\n stop: () => void\n init: () => void\n destroy: () => void\n}\nfunction Animations(\n doc: Document,\n win: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const fixed = 1000 / 60\n const visible = EventStore()\n let last: number | null = null\n let acc = 0\n let id = 0\n\n function reset() {\n last = null\n acc = 0\n }\n\n function frame(ts: number) {\n if (!id) return\n if (last == null) {\n last = ts\n update()\n update()\n }\n const dt = ts - (last as number)\n last = ts\n acc += dt\n while (acc >= fixed) {\n update()\n acc -= fixed\n }\n const alpha = acc / fixed\n render(alpha)\n if (id) id = win.requestAnimationFrame(frame)\n }\n\n return {\n init() {\n visible.add(doc, 'visibilitychange', () => {\n if (doc.hidden) reset()\n })\n },\n destroy() {\n this.stop()\n visible.clear()\n },\n start() {\n if (id) return\n id = win.requestAnimationFrame(frame)\n },\n stop() {\n win.cancelAnimationFrame(id)\n id = 0\n reset()\n },\n }\n}\n\ntype PointerEventType = TouchEvent | MouseEvent\nfunction isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent\n}\n\ntype AxisKey = 'x' | 'y';\n\nfunction Axis(isHorizontal: boolean): {\n scroll: AxisKey;\n cross: AxisKey;\n measureSize: (rect: DOMRect) => number;\n} {\n const scroll: AxisKey = isHorizontal ? 'x' : 'y';\n const cross: AxisKey = isHorizontal ? 'y' : 'x';\n\n return {\n scroll,\n cross,\n measureSize(rect: DOMRect) {\n return isHorizontal ? rect.width : rect.height;\n },\n };\n}\n\ntype AxisType = ReturnType<typeof Axis>\n\nfunction DragTracker(axis: AxisType, ownerWindow: WindowType) {\n const WINDOW_MS = 120;\n const RECENT_MS = 90;\n const RELEASE_FRESH_MS = 180;\n const STILL_MS = 140;\n const MOVE_EPS = 0.5;\n const FLICK_VEL = 0.12;\n const FLICK_DIST = 6;\n const MIN_VEL = 0.06;\n const EPS = 1e-6;\n\n type Sample = { t: number; dx: number; dy: number };\n let samples: Sample[] = [];\n\n let startX = 0, startY = 0;\n let lastX = 0, lastY = 0, lastT = 0;\n let lastActiveT = 0;\n\n function now(evt: PointerEventType): number {\n const ts = (evt as any).timeStamp as number | undefined;\n const perf = ownerWindow?.performance?.now ? ownerWindow.performance.now() : Date.now();\n return (typeof ts === 'number' && ts > 0) ? ts : perf;\n }\n\n function isMouse(evt: PointerEventType): evt is MouseEvent {\n return (ownerWindow as any).MouseEvent\n ? evt instanceof (ownerWindow as any).MouseEvent\n : 'clientX' in evt && !('touches' in (evt as any));\n }\n\n function readPoint(evt: PointerEventType, axisKey: 'x' | 'y' = axis.scroll) {\n const coord = axisKey === 'x' ? 'clientX' : 'clientY';\n if (isMouse(evt)) return (evt as MouseEvent)[coord];\n const te = evt as TouchEvent;\n const touch = (te.touches && te.touches[0]) || (te.changedTouches && te.changedTouches[0]);\n return touch ? (touch as any)[coord] as number : (axisKey === 'x' ? lastX : lastY);\n }\n\n function trimTo(t: number) {\n const earliest = t - WINDOW_MS * 1.5;\n while (samples.length && samples[0].t < earliest) samples.shift();\n }\n\n function velocityInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let sumDx = 0, sumDy = 0;\n let firstT = Number.POSITIVE_INFINITY, lastT = Number.NEGATIVE_INFINITY;\n\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n firstT = Math.min(firstT, s.t);\n lastT = Math.max(lastT, s.t);\n const age = s.t - startT;\n const w = 0.5 + 0.5 * (age / Math.max(spanMs, 1));\n sumDx += s.dx * w;\n sumDy += s.dy * w;\n }\n const dt = Math.max(lastT - firstT, EPS);\n return { vx: sumDx / dt, vy: sumDy / dt };\n }\n\n function displacementInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let dx = 0, dy = 0;\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n dx += s.dx;\n dy += s.dy;\n }\n return { dx, dy };\n }\n\n return {\n pointerDown(evt: PointerEventType) {\n samples = [];\n startX = lastX = readPoint(evt, 'x');\n startY = lastY = readPoint(evt, 'y');\n return { x: startX, y: startY };\n },\n\n pointerMove(evt: PointerEventType) {\n const t = now(evt);\n const x = readPoint(evt, 'x');\n const y = readPoint(evt, 'y');\n\n const dx = x - lastX;\n const dy = y - lastY;\n\n samples.push({ t, dx, dy });\n trimTo(t);\n\n if (Math.abs(dx) >= MOVE_EPS || Math.abs(dy) >= MOVE_EPS) lastActiveT = t;\n\n lastX = x; lastY = y; lastT = t;\n return { dx, dy };\n },\n\n pointerUp(evt: PointerEventType) {\n const t = now(evt);\n samples.push({ t, dx: 0, dy: 0 });\n trimTo(t);\n\n const sinceLastMove = t - lastT;\n const idleMs = t - lastActiveT;\n const releasedFresh = sinceLastMove <= RELEASE_FRESH_MS;\n const wasStill = idleMs > STILL_MS;\n\n if (wasStill) {\n return { fx: 0, fy: 0 };\n }\n\n const { vx: vxRecent, vy: vyRecent } = velocityInWindow(t, RECENT_MS);\n const { dx: dxRecent, dy: dyRecent } = displacementInWindow(t, RECENT_MS);\n\n const intentX = releasedFresh && (Math.abs(vxRecent) >= FLICK_VEL || Math.abs(dxRecent) >= FLICK_DIST);\n const intentY = releasedFresh && (Math.abs(vyRecent) >= FLICK_VEL || Math.abs(dyRecent) >= FLICK_DIST);\n\n const { vx, vy } = velocityInWindow(t, WINDOW_MS);\n\n let fx = intentX ? vx : 0;\n let fy = intentY ? vy : 0;\n\n if (intentX && Math.abs(fx) < MIN_VEL) fx = (dxRecent >= 0 ? 1 : -1) * MIN_VEL;\n if (intentY && Math.abs(fy) < MIN_VEL) fy = (dyRecent >= 0 ? 1 : -1) * MIN_VEL;\n\n return { fx, fy };\n },\n\n readPoint,\n }\n}\n\nfunction ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n) {\n let vel = 0\n let dir = 0\n let duration = baseDuration\n let friction = baseFriction\n let raw = location.get()\n let rawPrev = 0\n return {\n sync() {\n raw = location.get()\n rawPrev = raw\n return this\n },\n resetVelocity() {\n vel = 0\n return this\n },\n useDuration(n: number) {\n duration = n\n return this\n },\n useFriction(n: number) {\n friction = n\n return this\n },\n useBaseDuration() {\n return this.useDuration(baseDuration)\n },\n useBaseFriction() {\n return this.useFriction(baseFriction)\n },\n duration() {\n return duration\n },\n frictionFactor() {\n return friction\n },\n direction() {\n return dir\n },\n velocity() {\n return vel\n },\n seek() {\n const curLoc = location.get()\n const curTgt = target.get()\n const disp = curTgt - curLoc\n const instant = !duration\n let d = 0\n if (instant) {\n vel = 0\n previousLocation.set(curTgt)\n location.set(curTgt)\n d = disp\n } else {\n previousLocation.set(curLoc)\n vel += disp / duration\n vel *= friction\n raw += vel\n location.add(vel)\n d = raw - rawPrev\n }\n dir = Math.sign(d)\n rawPrev = raw\n return this\n },\n settled() {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n },\n }\n}\ntype ScrollBodyType = ReturnType<typeof ScrollBody>\n\nfunction PercentOfView(viewSize: number) {\n return {\n measure(n: number) {\n return (viewSize * n) / 100\n },\n }\n}\ntype PercentOfViewType = ReturnType<typeof PercentOfView>\n\nfunction ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n body: ScrollBodyType,\n pov: PercentOfViewType\n) {\n const pullBack = pov.measure(10)\n const edgeTol = pov.measure(50)\n const fricLim = Limit(0.1, 0.99)\n\n function reached() {\n return limit.reachedAny(target.get()) && limit.reachedAny(location.get())\n }\n\n return {\n constrain(pointerDown: boolean) {\n if (!reached()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const distToEdge = Math.abs(limit[edge] - location.get())\n const distToTarget = target.get() - location.get()\n const f = fricLim.constrain(distToEdge / edgeTol)\n\n target.set(target.get() - distToTarget * f)\n if (!pointerDown && Math.abs(distToTarget) < pullBack) {\n target.set(limit.constrain(target.get()))\n body.useDuration(25).useBaseFriction()\n }\n },\n }\n}\ntype ScrollBoundsType = ReturnType<typeof ScrollBounds>\n\nexport type ThumbnailPosition = 'top' | 'right' | 'bottom' | 'left'\n\ninterface ThumbnailSliderProps {\n children: ReactNode\n position: ThumbnailPosition\n gap?: number\n thumbSize?: number\n className?: string\n style?: React.CSSProperties\n freeScroll?: boolean\n thumbnailWidth?: number | string\n thumbnailHeight?: number | string\n}\n\nexport default function ThumbnailSlider({\n children,\n position,\n gap = 8,\n thumbSize,\n className,\n style,\n freeScroll = true,\n thumbnailWidth,\n thumbnailHeight\n}: ThumbnailSliderProps) {\n const isHorizontal = position === 'top' || position === 'bottom'\n const axis = Axis(isHorizontal)\n\n const containerRef = useRef<HTMLDivElement | null>(null)\n const trackRef = useRef<HTMLDivElement | null>(null)\n\n const [thumbLong, setThumbLong] = useState<number>(thumbSize ?? 0)\n const [thumbCross, setThumbCross] = useState<number>(0)\n const [contentLength, setContentLength] = useState<number>(0)\n const [containerLength, setContainerLength] = useState<number>(0)\n\n const locationRef = useRef<Vector1DType | null>(null)\n const previousLocationRef = useRef<Vector1DType | null>(null)\n const offsetLocationRef = useRef<Vector1DType | null>(null)\n const targetRef = useRef<Vector1DType | null>(null)\n const bodyRef = useRef<ScrollBodyType | null>(null)\n const translateRef = useRef<ReturnType<typeof TranslateAxis> | null>(null)\n const animRef = useRef<AnimationsType | null>(null)\n const limitRef = useRef<LimitType | null>(null)\n const boundsRef = useRef<ScrollBoundsType | null>(null)\n\n const pointerDownRef = useRef(false)\n const isPointerDown = useRef(false)\n const isClickRef = useRef(true)\n const xRef = useRef(0)\n\n const dragX = useRef(0)\n const previousDragX = useRef(0)\n const dragMoveTime = useRef<Date | null>(null)\n const sliderVelocity = useRef(0)\n\n const selectedIndexRef = useRef<number>(slideStore.getSnapshot?.() ?? 0)\n useEffect(() => {\n const unsub = slideStore.subscribe(() => {\n selectedIndexRef.current = slideStore.getSnapshot?.() ?? 0;\n });\n return () => unsub();\n }, []);\n\n const rawKids = Children.toArray(children).filter(isValidElement) as ReactElement<ThumbnailSliderProps>[];\n const count = rawKids.length\n\n const targetsRef = useRef<number[]>([])\n const recomputeTargets = useCallback(() => {\n const size = thumbLong\n if (!size) return\n const t: number[] = []\n for (let i = 0; i < count; i++) t.push(i * (size + gap))\n targetsRef.current = t\n }, [count, gap, thumbLong])\n\n useLayoutEffect(() => {\n const track = trackRef.current\n const container = containerRef.current\n if (!track || !container) return\n\n const measure = () => {\n const firstChild = track.children[0] as HTMLElement | undefined\n if (firstChild) {\n const rect = firstChild.getBoundingClientRect()\n const long = axis.measureSize(rect)\n const cross = isHorizontal ? rect.height : rect.width\n if (!thumbLong) setThumbLong(long || thumbSize || 0)\n setThumbCross(cross || 0)\n }\n\n const childCount = track.children.length\n const longSize = thumbSize || thumbLong\n const contentLen =\n childCount > 0 ? childCount * longSize + (childCount - 1) * gap : 0\n setContentLength(contentLen)\n\n const crect = container.getBoundingClientRect()\n const contLen = axis.measureSize(crect)\n setContainerLength(contLen)\n }\n\n const ro = new ResizeObserver(() => {\n measure()\n recomputeTargets()\n })\n ro.observe(container)\n ro.observe(track)\n\n measure()\n recomputeTargets()\n\n return () => ro.disconnect()\n }, [axis, gap, isHorizontal, thumbLong, thumbSize, recomputeTargets])\n\n const prevActiveRef = useRef<number>(-1);\n\n function setActiveThumb(i: number) {\n const track = trackRef.current;\n if (!track) return;\n const prev = prevActiveRef.current;\n\n if (prev >= 0 && track.children[prev]) {\n (track.children[prev] as HTMLElement).removeAttribute('data-active');\n }\n if (track.children[i]) {\n (track.children[i] as HTMLElement).setAttribute('data-active', 'true');\n }\n prevActiveRef.current = i;\n }\n\n useEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n\n const ready = !!(contentLength && containerLength && (thumbSize || thumbLong));\n if (!ready) return;\n\n const maxIndex = Math.max(0, (track.children.length || count) - 1);\n\n const init = Math.min(Math.max(slideStore.getSnapshot() ?? 0, 0), maxIndex);\n setActiveThumb(init);\n animateToScroll(getCenteredScroll(init));\n\n const unsub = slideStore.subscribe(() => {\n const idx = Math.min(Math.max(slideStore.getSnapshot() ?? 0, 0), maxIndex);\n setActiveThumb(idx);\n if (!pointerDownRef.current) {\n animateToScroll(getCenteredScroll(idx));\n }\n });\n\n return () => unsub();\n }, [count, contentLength, containerLength, thumbLong, thumbSize]);\n\n function getCenteredScroll(i: number) {\n const size = thumbSize || thumbLong || 0;\n const t = targetsRef.current[i] ?? 0;\n if (!size || !containerLength) return 0;\n\n const centerWanted = t - (containerLength - size) / 2;\n const maxScroll = Math.max(0, contentLength - containerLength);\n return Math.min(Math.max(centerWanted, 0), maxScroll);\n }\n\n function animateToScroll(scroll: number) {\n const world = -scroll;\n bodyRef.current?.useBaseDuration().useBaseFriction();\n targetRef.current?.set(world);\n animRef.current?.start();\n }\n\n useEffect(() => {\n const root = containerRef.current\n const track = trackRef.current\n if (!root || !track) return\n\n const startIdx = clamp(slideStore.getSnapshot() ?? 0, 0, Math.max(0, count - 1))\n const startTarget = -(targetsRef.current[startIdx] ?? 0)\n\n const location = Vector1D(startTarget)\n const previousLocation = Vector1D(startTarget)\n const offsetLocation = Vector1D(startTarget)\n const target = Vector1D(startTarget)\n\n locationRef.current = location\n previousLocationRef.current = previousLocation\n offsetLocationRef.current = offsetLocation\n targetRef.current = target\n\n translateRef.current = TranslateAxis(track, axis.scroll)\n\n const selectSpeed = 25\n const baseFriction = 0.68\n const body = ScrollBody(location, offsetLocation, previousLocation, target, selectSpeed, baseFriction)\n bodyRef.current = body\n\n const min = -(Math.max(0, contentLength - containerLength))\n const max = 0\n limitRef.current = Limit(isNaN(min) ? 0 : min, max)\n\n const pov = PercentOfView(containerLength || 1)\n boundsRef.current = ScrollBounds(limitRef.current, offsetLocationRef.current, targetRef.current, bodyRef.current, pov)\n\n const anim = Animations(\n document,\n window as WindowType,\n () => {\n boundsRef.current?.constrain(pointerDownRef.current)\n bodyRef.current?.seek()\n xRef.current = locationRef.current!.get()\n },\n (alpha) => {\n const shouldSettle = bodyRef.current ? bodyRef.current.settled() : true\n const idle = shouldSettle && !pointerDownRef.current\n if (idle) animRef.current?.stop()\n const cur = locationRef.current!.get()\n const prev = previousLocationRef.current!.get()\n const loc = cur * alpha + prev * (1 - alpha)\n offsetLocationRef.current!.set(loc)\n xRef.current = loc\n translateRef.current?.to(loc)\n }\n )\n animRef.current = anim\n anim.init()\n\n translateRef.current.to(startTarget)\n\n const dragStore = EventStore()\n const moveStore = EventStore()\n const tracker = DragTracker(axis, window as WindowType)\n\n let isMouse = false\n let startScrollPoint = 0\n let startCrossPoint = 0\n let preventScroll = false\n\n function addDragEvents() {\n const node: any = isMouse ? document : root\n moveStore\n .add(node, 'touchmove', onMove as any)\n .add(node, 'touchend', onUp as any)\n .add(node, 'mousemove', onMove as any, { passive: false })\n .add(node, 'mouseup', onUp as any)\n }\n\n function getFrictionFactor() {\n return bodyRef.current?.frictionFactor() ?? 0.68\n }\n\n function getRestingPosition() {\n const cur = xRef.current\n const v = sliderVelocity.current || 0\n return cur + v / (1 - getFrictionFactor())\n }\n\n function getSlideDistance(x: number, index: number) {\n const t = targetsRef.current[index] ?? 0\n const targetX = -t\n return x - targetX\n }\n\n function getClosestResting(restingX: number, dist: number, inc: number) {\n let index = selectedIndexRef.current\n let minDistance = Infinity\n let distance = dist\n while (distance < minDistance) {\n index += inc\n minDistance = distance\n if (index < 0 || index >= count) break\n const d = getSlideDistance(restingX, index)\n distance = Math.abs(d)\n }\n\n return { distance: minDistance, index: clamp(index - inc, 0, count - 1) }\n }\n\n function dragEndRestingSelect() {\n const restingX = getRestingPosition()\n const curIndex = selectedIndexRef.current\n const d0 = Math.abs(getSlideDistance(restingX, curIndex))\n const positive = getClosestResting(restingX, d0, 1)\n const negative = getClosestResting(restingX, d0, -1)\n return positive.distance < negative.distance ? positive.index : negative.index\n }\n\n function dragEndBoostSelect() {\n const movedAt = dragMoveTime.current\n if (!movedAt || new Date().getTime() - movedAt.getTime() > 100) return 0\n const delta = previousDragX.current - dragX.current\n if (delta > 0) return 1\n if (delta < 0) return -1\n return 0\n }\n\n function select(index: number) {\n index = clamp(index, 0, count - 1)\n selectedIndexRef.current = index\n const t = targetsRef.current[index] ?? 0\n const maxScroll = Math.max(0, contentLength - containerLength)\n const snapped = -clamp(t, 0, maxScroll)\n bodyRef.current?.useBaseDuration().useBaseFriction()\n targetRef.current?.set(snapped)\n animRef.current?.start()\n }\n\n function onDown(evt: PointerEvent) {\n const isMouseEvt = isMouseEvent(evt as any, window as any)\n isMouse = isMouseEvt\n if (isMouseEvt && (evt as MouseEvent).button !== 0) return\n\n {\n const min = -(Math.max(0, contentLength - containerLength))\n const max = 0\n limitRef.current = Limit(isNaN(min) ? 0 : min, max)\n }\n\n pointerDownRef.current = true\n isPointerDown.current = true\n isClickRef.current = true\n\n tracker.pointerDown(evt as any)\n startScrollPoint = tracker.readPoint(evt as any, axis.scroll)\n startCrossPoint = tracker.readPoint(evt as any, axis.cross)\n\n bodyRef.current!.useFriction(0).useDuration(0)\n targetRef.current!.set(locationRef.current!.get())\n\n addDragEvents()\n animRef.current?.start()\n }\n\n const freeScrollSpeed = 43\n const freeBoost = { mouse: 500, touch: 600 }\n function forceBoost(rawForce: number) {\n const type = isMouse ? 'mouse' : 'touch'\n return rawForce * (freeBoost[type as 'mouse' | 'touch'])\n }\n\n function onMove(evt: PointerEvent) {\n const lastScroll = tracker.readPoint(evt as any, axis.scroll)\n const lastCross = tracker.readPoint(evt as any, axis.cross)\n const diffScroll = Math.abs(lastScroll - startScrollPoint)\n const diffCross = Math.abs(lastCross - startCrossPoint)\n\n if (diffScroll > 5 || diffCross > 5) {\n isClickRef.current = false\n }\n\n if (!preventScroll && !isMouse) {\n if (!('cancelable' in evt) || !(evt as any).cancelable) return onUp(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return onUp(evt)\n }\n\n const d = tracker.pointerMove(evt as any).dx\n\n previousDragX.current = dragX.current\n dragX.current = lastScroll\n sliderVelocity.current = d\n dragMoveTime.current = new Date()\n\n bodyRef.current!.useFriction(0.3).useDuration(0.75)\n targetRef.current!.add(d)\n\n animRef.current?.start()\n if ((evt as any).cancelable) evt.preventDefault?.()\n }\n\n function onUp(evt: PointerEvent) {\n isPointerDown.current = false\n preventScroll = false\n pointerDownRef.current = false\n moveStore.clear()\n\n if (!freeScroll) {\n xRef.current = offsetLocationRef.current!.get()\n\n let index = dragEndRestingSelect()\n if (\n index === selectedIndexRef.current ||\n (index === count && selectedIndexRef.current === 0)\n ) {\n index += dragEndBoostSelect()\n }\n\n select(index)\n } else {\n const raw = tracker.pointerUp(evt as any).fx\n const boosted = forceBoost(raw)\n const force = boosted\n const factor = Math.min(\n 1,\n Math.abs(raw) > 0 ? Math.abs((Math.abs(boosted) - Math.abs(force)) / (raw || 1)) : 0\n )\n const speed = freeScrollSpeed - 10 * factor\n const friction = baseFriction + factor / 50\n bodyRef.current!.useDuration(speed).useFriction(friction)\n\n targetRef.current!.add(force)\n\n animRef.current?.start()\n isMouse = false\n }\n\n }\n\n dragStore\n .add(root, 'dragstart', (evt) => (evt as Event).preventDefault(), { passive: false })\n .add(root, 'touchstart', onDown as any)\n .add(root, 'mousedown', onDown as any, { passive: true })\n .add(root, 'touchcancel', onUp as any)\n .add(root, 'contextmenu', onUp as any)\n\n function onWheel(e: WheelEvent) {\n const primary = isHorizontal ? e.deltaX : e.deltaY\n const primaryAbs = Math.abs(primary)\n const crossAbs = Math.abs(isHorizontal ? e.deltaY : e.deltaX)\n if (primaryAbs <= crossAbs) return\n\n const cur = (offsetLocationRef.current?.get() ?? 0) - primary\n let next = cur\n if (limitRef.current) next = limitRef.current.constrain(cur)\n\n targetRef.current?.set(next)\n bodyRef.current?.useDuration(0).useFriction(1)\n animRef.current?.start()\n xRef.current = next\n translateRef.current?.to(next)\n e.preventDefault()\n }\n root.addEventListener('wheel', onWheel as any, { passive: false })\n\n return () => {\n dragStore.clear()\n moveStore.clear()\n root.removeEventListener('wheel', onWheel as any)\n animRef.current?.destroy()\n animRef.current = null\n }\n }, [count, contentLength, containerLength, freeScroll, isHorizontal])\n\n const sizedChildren = rawKids.map((child, i) =>\n cloneElement(child as ReactElement<any>, {\n key: `thumb-${i}`,\n className: [cls.thumb, (child.props as any)?.className].filter(Boolean).join(' '),\n onClick: () => {\n if (!isClickRef.current) return;\n const track = trackRef.current;\n if (track && track.children[i]) {\n if (prevActiveRef.current >= 0 && track.children[prevActiveRef.current]) {\n (track.children[prevActiveRef.current] as HTMLElement).removeAttribute('data-active');\n }\n (track.children[i] as HTMLElement).setAttribute('data-active', 'true');\n prevActiveRef.current = i;\n }\n\n animateToScroll(getCenteredScroll(i));\n\n requestAnimationFrame(() => slideStore.setSlideIndex(i));\n },\n onFocus: () => {\n requestAnimationFrame(() => slideStore.setSlideIndex(i));\n },\n style: {\n ...(child.props?.style || {}),\n flex: '0 0 auto',\n width: thumbnailWidth,\n height: thumbnailHeight,\n cursor: 'pointer',\n userSelect: 'none',\n },\n draggable: false,\n })\n );\n\n useEffect(() => {\n const min = -(Math.max(0, contentLength - containerLength));\n const max = 0;\n limitRef.current = Limit(isNaN(min) ? 0 : min, max);\n\n const cur = offsetLocationRef.current?.get() ?? 0;\n const constrained = limitRef.current.constrain(cur);\n locationRef.current?.set(constrained);\n previousLocationRef.current?.set(constrained);\n offsetLocationRef.current?.set(constrained);\n targetRef.current?.set(constrained);\n translateRef.current?.to(constrained);\n xRef.current = constrained;\n }, [contentLength, containerLength]);\n\n useEffect(() => {\n if (!contentLength || !containerLength || !(thumbSize || thumbLong)) return;\n const i = Math.min(Math.max(selectedIndexRef.current ?? 0, 0), Math.max(0, count - 1));\n animateToScroll(getCenteredScroll(i)); // snap; avoids a visible “walk”\n }, [contentLength, containerLength, thumbLong, thumbSize, count]);\n\n const outerStyle: React.CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n display: 'flex',\n ...(isHorizontal\n ? { width: '100%', height: thumbCross ? thumbnailHeight : 'auto' }\n : { height: '600px', width: thumbLong ? thumbnailWidth : 'auto' }),\n ...(style || {}),\n }\n\n const trackStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: isHorizontal ? 'row' : 'column',\n gap: `${gap}px`,\n willChange: 'transform',\n backfaceVisibility: 'hidden',\n touchAction: 'none',\n contain: 'layout size'\n }\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={outerStyle}\n onTouchStart={(e) => {\n const t0 = e.touches[0]\n ;(containerRef.current as any)._sx = t0.clientX\n ;(containerRef.current as any)._sy = t0.clientY\n }}\n onTouchMove={(e) => {\n if (e.touches.length !== 1) return\n const t0 = e.touches[0]\n const sx = (containerRef.current as any)._sx ?? t0.clientX\n const sy = (containerRef.current as any)._sy ?? t0.clientY\n const dx = Math.abs(t0.clientX - sx)\n const dy = Math.abs(t0.clientY - sy)\n const primary = isHorizontal ? dx : dy\n const cross = isHorizontal ? dy : dx\n if (primary > cross && e.cancelable) e.preventDefault()\n }}\n >\n <div ref={trackRef} style={trackStyle}>\n {sizedChildren}\n </div>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @next/next/no-img-element */\n'use client'\n\nimport React, { useState, useEffect, useRef, createRef, useLayoutEffect, useCallback, useMemo, ReactNode } from \"react\";\nimport FullscreenSlider, { FullscreenSliderHandle } from \"./FullscreenSlider\";\nimport FullscreenModal from \"./FullscreenModal\";\nimport Slider from \"./Slider\";\nimport { useSyncExternalStore } from 'react';\nimport fullscreenSlideStore from './fullscreenSlideStore';\nimport styles from './index.module.css';\nimport scaleStore from './scaleStore';\nimport \"plyr-react/plyr.css\";\nimport type { APITypes } from \"plyr-react\";\nconst Plyr = React.lazy(() => import('plyr-react'));\nimport { useOpenEpoch } from \"./useOpenEpoch\";\nimport ThumbnailSlider from \"./ThumbnailSlider\";\n\ntype WindowType = Window & typeof globalThis\n\nconst mathAbs = Math.abs\nconst clamp = (n: number, lo: number, hi: number) => Math.max(lo, Math.min(hi, n))\n\nfunction EventStore() {\n const listeners: Array<() => void> = []\n return {\n add<T extends EventTarget>(\n t: T,\n type: string,\n fn: EventListenerOrEventListenerObject,\n opts?: AddEventListenerOptions | boolean\n ) {\n t.addEventListener(type, fn as any, opts as any)\n listeners.push(() => t.removeEventListener(type, fn as any, opts as any))\n return this\n },\n clear() {\n while (listeners.length) listeners.pop()?.()\n },\n }\n}\n\nfunction Axis() {\n return {\n scroll: 'x' as const,\n cross: 'y' as const,\n direction(n: number) {\n return n // LTR\n },\n }\n}\ntype AxisType = ReturnType<typeof Axis>\n\ntype Vector1DType = {\n get: () => number\n set: (n: number) => void\n add: (n: number) => void\n}\nfunction Vector1D(initial: number): Vector1DType {\n let v = initial\n return {\n get: () => v,\n set: (n) => { v = n },\n add: (n) => { v += n },\n }\n}\n\nfunction PercentOfView(viewSize: number) {\n return {\n measure(n: number) {\n return (viewSize * n) / 100\n },\n }\n}\ntype PercentOfViewType = ReturnType<typeof PercentOfView>\n\nfunction Limit(min: number, max: number) {\n return {\n min,\n max,\n reachedMin(n: number) { return n < min },\n reachedMax(n: number) { return n > max },\n reachedAny(n: number) { return n < min || n > max },\n constrain(n: number) { return clamp(n, min, max) },\n }\n}\n\ntype LimitType = ReturnType<typeof Limit>\n\ntype AnimationsType = {\n start: () => void\n stop: () => void\n init: () => void\n destroy: () => void\n resetBlend: () => void\n}\n\ntype PointerEventType = TouchEvent | MouseEvent\nfunction isMouseEvent(evt: PointerEventType, ownerWindow: WindowType): evt is MouseEvent {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent\n}\n\nfunction DragTracker(axis: AxisType, ownerWindow: WindowType) {\n const WINDOW_MS = 120;\n const RECENT_MS = 90;\n const RELEASE_FRESH_MS = 180;\n const STILL_MS = 140;\n const MOVE_EPS = 0.5;\n const FLICK_VEL = 0.12;\n const FLICK_DIST = 6;\n const MIN_VEL = 0.06;\n const EPS = 1e-6;\n\n type Sample = { t: number; dx: number; dy: number };\n let samples: Sample[] = [];\n\n let startX = 0, startY = 0;\n let lastX = 0, lastY = 0, lastT = 0;\n let lastActiveT = 0;\n\n function now(evt: PointerEventType): number {\n const ts = (evt as any).timeStamp as number | undefined;\n const perf = ownerWindow?.performance?.now ? ownerWindow.performance.now() : Date.now();\n return (typeof ts === 'number' && ts > 0) ? ts : perf;\n }\n\n function isMouse(evt: PointerEventType): evt is MouseEvent {\n return (ownerWindow as any).MouseEvent\n ? evt instanceof (ownerWindow as any).MouseEvent\n : 'clientX' in evt && !('touches' in (evt as any));\n }\n\n function readPoint(evt: PointerEventType, axisKey: 'x' | 'y' = axis.scroll) {\n const coord = axisKey === 'x' ? 'clientX' : 'clientY';\n if (isMouse(evt)) return (evt as MouseEvent)[coord];\n const te = evt as TouchEvent;\n const touch = (te.touches && te.touches[0]) || (te.changedTouches && te.changedTouches[0]);\n return touch ? (touch as any)[coord] as number : (axisKey === 'x' ? lastX : lastY);\n }\n\n function trimTo(t: number) {\n const earliest = t - WINDOW_MS * 1.5;\n while (samples.length && samples[0].t < earliest) samples.shift();\n }\n\n function velocityInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let sumDx = 0, sumDy = 0;\n let firstT = Number.POSITIVE_INFINITY, lastT = Number.NEGATIVE_INFINITY;\n\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n firstT = Math.min(firstT, s.t);\n lastT = Math.max(lastT, s.t);\n const age = s.t - startT;\n const w = 0.5 + 0.5 * (age / Math.max(spanMs, 1));\n sumDx += s.dx * w;\n sumDy += s.dy * w;\n }\n const dt = Math.max(lastT - firstT, EPS);\n return { vx: sumDx / dt, vy: sumDy / dt };\n }\n\n function displacementInWindow(endT: number, spanMs: number) {\n const startT = endT - spanMs;\n let dx = 0, dy = 0;\n for (let i = samples.length - 1; i >= 0; i--) {\n const s = samples[i];\n if (s.t < startT) break;\n dx += s.dx;\n dy += s.dy;\n }\n return { dx, dy };\n }\n\n return {\n pointerDown(evt: PointerEventType) {\n samples = [];\n startX = lastX = readPoint(evt, 'x');\n startY = lastY = readPoint(evt, 'y');\n return { x: startX, y: startY };\n },\n\n pointerMove(evt: PointerEventType) {\n const t = now(evt);\n const x = readPoint(evt, 'x');\n const y = readPoint(evt, 'y');\n\n const dx = x - lastX;\n const dy = y - lastY;\n\n samples.push({ t, dx, dy });\n trimTo(t);\n\n if (Math.abs(dx) >= MOVE_EPS || Math.abs(dy) >= MOVE_EPS) lastActiveT = t;\n\n lastX = x; lastY = y; lastT = t;\n return { dx, dy };\n },\n\n pointerUp(evt: PointerEventType) {\n const t = now(evt);\n samples.push({ t, dx: 0, dy: 0 });\n trimTo(t);\n\n const sinceLastMove = t - lastT;\n const idleMs = t - lastActiveT;\n const releasedFresh = sinceLastMove <= RELEASE_FRESH_MS;\n const wasStill = idleMs > STILL_MS;\n\n if (wasStill) {\n return { fx: 0, fy: 0 };\n }\n\n const { vx: vxRecent, vy: vyRecent } = velocityInWindow(t, RECENT_MS);\n const { dx: dxRecent, dy: dyRecent } = displacementInWindow(t, RECENT_MS);\n\n const intentX = releasedFresh && (Math.abs(vxRecent) >= FLICK_VEL || Math.abs(dxRecent) >= FLICK_DIST);\n const intentY = releasedFresh && (Math.abs(vyRecent) >= FLICK_VEL || Math.abs(dyRecent) >= FLICK_DIST);\n\n const { vx, vy } = velocityInWindow(t, WINDOW_MS);\n\n let fx = intentX ? vx : 0;\n let fy = intentY ? vy : 0;\n\n if (intentX && Math.abs(fx) < MIN_VEL) fx = (dxRecent >= 0 ? 1 : -1) * MIN_VEL;\n if (intentY && Math.abs(fy) < MIN_VEL) fy = (dyRecent >= 0 ? 1 : -1) * MIN_VEL;\n\n return { fx, fy };\n },\n\n readPoint,\n }\n}\n\nfunction useSlideIndex() {\n return useSyncExternalStore(\n fullscreenSlideStore.subscribe.bind(fullscreenSlideStore),\n fullscreenSlideStore.getSnapshot.bind(fullscreenSlideStore),\n fullscreenSlideStore.getSnapshot.bind(fullscreenSlideStore)\n );\n}\n\nexport type MediaItem =\n | { kind: 'image'; src: string; alt?: string }\n | { kind: 'video'; src: string; alt?: string; thumb?: string };\n\ntype ThumbnailPosition = 'top' | 'right' | 'bottom' | 'left' | null\n\nconst toMediaItems = (urls: string[]): MediaItem[] =>\n urls.map((u) =>\n /\\.(mp4|webm|ogg)$/i.test(u) ? { kind: \"video\", src: u } : { kind: \"image\", src: u }\n );\n\ntype FSImageRender = (args: {\n item: { kind:'image'; src:string; alt?:string };\n index: number;\n isZoomed: boolean;\n className: string;\n baseStyle: React.CSSProperties;\n}) => React.ReactNode;\n\ntype PlyrSourceBuilder = (item: MediaItem, index: number) => Plyr.SourceInfo;\ntype PlyrOptionsResolver =\n | Plyr.Options\n | ((item: MediaItem, index: number) => Plyr.Options);\n\ntype Props = { \n children: ReactNode;\n thumbnailChildren?: ReactNode;\n items?: MediaItem[]; \n urls?: string[]; \n thumbnails?: ThumbnailPosition; \n thumbnailWidth?: number | string;\n thumbnailHeight?: number | string;\n loop?: boolean;\n freeScroll?: boolean;\n autoPlay?: boolean;\n autoScroll?: boolean;\n groupCells?: boolean;\n centerAlign?: boolean;\n gap?: number;\n backgroundColor?: string;\n fsRenderImage?: FSImageRender;\n plyrSourceBuilder?: PlyrSourceBuilder;\n plyrOptions?: PlyrOptionsResolver;\n responsive?: boolean;\n containerStyle?: React.CSSProperties;\n sliderColumnStyle?: React.CSSProperties;\n sliderHeight?: string;\n};\n\nexport default function Gallery({ \n children,\n thumbnailChildren,\n items, \n urls, \n thumbnails, \n thumbnailWidth,\n thumbnailHeight,\n loop = true,\n freeScroll = false,\n autoPlay = false,\n autoScroll = false,\n groupCells = false,\n centerAlign = false,\n gap = 20,\n backgroundColor = 'transparent',\n fsRenderImage,\n plyrSourceBuilder,\n plyrOptions,\n responsive,\n containerStyle,\n sliderColumnStyle,\n sliderHeight\n}: Props) {\n const normalizedItems = useMemo<MediaItem[]>(\n () => (items && items.length ? items : urls ? toMediaItems(urls) : []),\n [items, urls]\n );\n\n const [slideIndex, setSlideIndex] = useState(0);\n const isClick = useRef(false);\n const isZoomClick = useRef(false);\n const imageRefs = useRef<React.RefObject<HTMLImageElement | null>[]>([]);\n const [showFullscreenSlider, setShowFullscreenSlider] = useState(false);\n const isWrapping = useRef(true);\n const zoomedDuringWrap = useRef(false);\n const fullscreenSliderApi = useRef<FullscreenSliderHandle>(null);\n const isZooming = useRef(false);\n const expandableImgRefs = useRef([]);\n const overlayDivRef = useRef<HTMLDivElement | null>(null);\n const duplicateImgRef = useRef<HTMLElement | null>(null);\n const closeButtonRef = useRef<HTMLElement | null>(null);\n const counterRef = useRef<HTMLElement | null>(null);\n const leftChevronRef = useRef<HTMLElement | null>(null);\n const rightChevronRef = useRef<HTMLElement | null>(null);\n const [showFullscreenModal, setShowFullscreenModal] = useState(false);\n const [wrappedItems, setWrappedItems] = useState<MediaItem[]>([]);\n const [windowSize, setWindowSize] = useState({ width: 0, height: 0 });\n\n const isZoomed = useSyncExternalStore(\n scaleStore.subscribe,\n scaleStore.getSnapshot,\n scaleStore.getServerSnapshot\n );\n const zoomLevel = isZoomed ? 2 : 1;\n\n const scaleRef = useRef(1);\n const panRef = useRef({ x: 0, y: 0 });\n const previousZoom = useRef({ x: 0, y: 0 });\n const slideIndexSync = useSlideIndex();\n const changingSlides = useRef(false);\n const clickScale = 2.5;\n\n const currentImage = useRef<HTMLElement | null>(null);\n const aspectRatioRef = useRef(1);\n\n const axisRef = useRef<AxisType | null>(null);\n const pointerDownRef = useRef(false);\n const interactionModeRef = useRef<'idle' | 'drag' | 'wheel' | 'programmatic'>('idle');\n\n const locX = useRef<Vector1DType | null>(null);\n const locY = useRef<Vector1DType | null>(null);\n const prevX = useRef<Vector1DType | null>(null);\n const prevY = useRef<Vector1DType | null>(null);\n const offX = useRef<Vector1DType | null>(null);\n const offY = useRef<Vector1DType | null>(null);\n const tgtX = useRef<Vector1DType | null>(null);\n const tgtY = useRef<Vector1DType | null>(null);\n\n const [closingModal, setClosingModal] = useState(false);\n const slides = useRef<{ cells: { element: HTMLElement, index: number }[], target: number }[]>([]);\n const slider = useRef<HTMLDivElement | null>(null);\n const visibleImagesRef = useRef(0);\n const selectedIndex = useRef(0);\n const firstCellInSlide = useRef<HTMLElement | null>(null);\n const sliderX = useRef(0);\n const sliderVelocity = useRef(0);\n\n const epoch = useOpenEpoch(showFullscreenModal);\n\n const [isReady, setIsReady] = useState(false)\n\n const defaultPlyrOptions: Plyr.Options = {\n controls: [\"play-large\",\"play\",\"progress\",\"current-time\",\"volume\",\"fullscreen\"],\n ratio: \"16:9\",\n fullscreen: { enabled: true, fallback: true, iosNative: true },\n };\n\n const defaultPlyrSource: PlyrSourceBuilder = (item) => ({\n type: \"video\",\n poster: (item as any).thumb,\n sources: [{ src: (item as any).src, type: \"video/mp4\" }],\n });\n\n useEffect(() => {\n if (emblaAnimRef.current) {\n emblaAnimRef.current.stop()\n scaleStore.setScale(1);\n previousZoom.current.x = 0; previousZoom.current.y = 0;\n panRef.current = { x: 0, y: 0 }\n scaleRef.current = 1\n }\n }, [closingModal])\n\n function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n ) {\n let vel = 0\n let duration = baseDuration\n let friction = baseFriction\n let raw = location.get()\n let rawPrev = 0\n let dir = 0\n\n return {\n sync() {\n raw = location.get()\n rawPrev = raw\n return this\n },\n resetVelocity() {\n vel = 0\n return this\n },\n useDuration(n: number) {\n duration = n\n return this\n },\n useFriction(n: number) {\n friction = n\n return this\n },\n useBaseDuration() { return this.useDuration(baseDuration) },\n useBaseFriction() { return this.useFriction(baseFriction) },\n duration() { return duration },\n direction() { return dir },\n velocity() { return vel },\n seek() {\n const curLoc = location.get()\n const curTgt = target.get()\n const disp = curTgt - curLoc\n const instant = !duration\n let d = 0\n if (instant) {\n vel = 0\n previousLocation.set(curTgt)\n location.set(curTgt)\n d = disp\n } else {\n previousLocation.set(curLoc)\n vel += disp / duration\n vel *= friction\n raw += vel\n location.add(vel)\n d = raw - rawPrev\n }\n dir = Math.sign(d)\n rawPrev = raw\n return this\n },\n settled() {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n },\n }\n }\n type ScrollBodyType = ReturnType<typeof ScrollBody>\n const bodyX = useRef<ScrollBodyType | null>(null);\n const bodyY = useRef<ScrollBodyType | null>(null);\n\n function boundsForCurrent(scale: number, imgW: number, imgH: number) {\n const viewW = window.innerWidth\n const viewH = window.innerHeight\n const scaledW = imgW * scale\n const scaledH = imgH * scale\n\n const offsetW = (viewW - imgW) / 2\n const offsetH = (viewH - imgH) / 2\n\n const xMin = scaledW <= viewW ? -offsetW - (scaledW - viewW) / 2 : -(scaledW - viewW) - offsetW\n const xMax = scaledW <= viewW ? -offsetW - (scaledW - viewW) / 2 : -offsetW\n\n const yMin = scaledH <= viewH ? -offsetH - (scaledH - viewH) / 2 : -(scaledH - viewH) - offsetH\n const yMax = scaledH <= viewH ? -offsetH - (scaledH - viewH) / 2 : -offsetH\n\n return {\n x: Limit(xMin, xMax),\n y: Limit(yMin, yMax),\n povX: PercentOfView(viewW),\n povY: PercentOfView(viewH),\n }\n }\n\n function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n body: ScrollBodyType,\n pov: PercentOfViewType\n ) {\n const pullBack = pov.measure(10)\n const edgeTol = pov.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n\n function shouldConstrain() {\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n return {\n shouldConstrain,\n constrain(pointerDown: boolean) {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const fr = frictionLimit.constrain(diffToEdge / edgeTol)\n target.set(target.get() - diffToTarget * fr)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBack) {\n target.set(limit.constrain(target.get()))\n body.useDuration(25).useBaseFriction()\n }\n },\n }\n }\n type ScrollBoundsType = ReturnType<typeof ScrollBounds>\n const boundsX = useRef<ScrollBoundsType | null>(null);\n const boundsY = useRef<ScrollBoundsType | null>(null);\n\n const isAnimatingRef = useRef(false);\n const emblaAnimRef = useRef<AnimationsType | null>(null);\n\n function Animations(doc: Document, win: WindowType, update: () => void, render: (a: number) => void): AnimationsType {\n const fixed = 1000 / 60\n const visible = EventStore()\n let last: number | null = null\n let acc = 0\n let animId = 0\n\n function reset() { last = null; acc = 0 }\n\n function animate(ts: number) {\n if (!animId) return\n if (last == null) {\n last = ts\n update()\n update()\n }\n const dt = ts - (last as number)\n last = ts\n acc += dt\n while (acc >= fixed) { update(); acc -= fixed }\n const alpha = acc / fixed\n render(alpha)\n if (animId) animId = win.requestAnimationFrame(animate)\n }\n\n return {\n init() {\n visible.add(doc, 'visibilitychange', () => { if (doc.hidden) reset() })\n },\n destroy() {\n this.stop()\n visible.clear()\n },\n start() {\n if (animId) return\n isAnimatingRef.current = true\n animId = win.requestAnimationFrame(animate)\n },\n stop() {\n win.cancelAnimationFrame(animId)\n animId = 0\n isAnimatingRef.current = false\n reset()\n },\n resetBlend() { reset() },\n }\n }\n\n function renderPan(xPx: number, yPx: number) {\n if (!currentImage.current) return\n const img = currentImage.current.children[0] as HTMLElement | null\n if (!img) return\n img.style.transform = `translate3d(${xPx}px, ${yPx}px, 0) scale(${scaleRef.current})`\n\n const lastImageEl = imageRefs.current.at(-1)?.current?.children[0] as HTMLElement | undefined\n const firstImageEl = imageRefs.current[0]?.current?.children[0] as HTMLElement | undefined\n const secondImageEl = imageRefs.current[1]?.current?.children[0] as HTMLElement | undefined\n const idx = Number(img.dataset.index)\n const len = imageRefs.current.length\n if (idx !== len - 2 && idx !== len - 3 && lastImageEl) lastImageEl.style.transform = `translate3d(${xPx}px, ${yPx}px,0) scale(${scaleRef.current})`\n if (idx === len - 2 && firstImageEl) firstImageEl.style.transform = `translate3d(${xPx}px, ${yPx}px,0) scale(${scaleRef.current})`\n if (idx === len - 1 && secondImageEl) secondImageEl.style.transform = `translate3d(${xPx}px, ${yPx}px,0) scale(${scaleRef.current})`\n }\n\n useEffect(() => {\n axisRef.current = Axis()\n }, [])\n\n const plyrRefs = useRef<(APITypes | null)[]>([]);\n const plyrRef = useRef<(APITypes | null)[]>([]);\n const isVideoItem = (m: MediaItem) => m.kind === \"video\";\n\n const suppressNextClickRef = useRef(false);\n\n const plyrPropsList = useMemo(() => {\n return wrappedItems.map((item, index) => {\n if (!isVideoItem(item)) return null;\n\n const source =\n (plyrSourceBuilder ?? defaultPlyrSource)(item, index);\n\n const baseOptions = defaultPlyrOptions;\n const resolvedOptions =\n typeof plyrOptions === \"function\"\n ? plyrOptions(item, index)\n : plyrOptions ?? baseOptions;\n\n const options: Plyr.Options = { ...baseOptions, ...resolvedOptions };\n\n return { source, options } as {\n source: Plyr.SourceInfo;\n options: Plyr.Options;\n };\n });\n }, [wrappedItems, plyrSourceBuilder, plyrOptions]);\n\n const plyrProp = useMemo(() => {\n return normalizedItems.map((item) => {\n if (!isVideoItem(item)) return null;\n return {\n source: { type: \"video\", sources: [{ src: item.src, type: \"video/mp4\" }] } as Plyr.SourceInfo,\n options: { controls: [\"play-large\",\"play\",\"progress\",\"current-time\",\"volume\",\"fullscreen\"], ratio: \"16:9\", fullscreen: {\n enabled: true,\n fallback: true,\n iosNative: true,\n }, } as Plyr.Options,\n };\n });\n }, [normalizedItems]);\n\n const cells = useRef<{ element: HTMLElement, index: number }[]>([]);\n const wrappedFullscreenImages = wrappedItems.map((item, index) => {\n const imageRef = imageRefs.current[index];\n const length = wrappedItems.length;\n const originalCount = length - 2;\n\n let transformStyle = '';\n if (index === 0) transformStyle = `translateX(-100%)`;\n else if (index === length - 1) transformStyle = `translateX(${originalCount * 100}%)`;\n else transformStyle = `translateX(${(index - 1) * 100}%)`;\n\n const plyrProps = plyrPropsList[index];\n const isVideo = !!plyrProps;\n\n return (\n <div\n key={`${item.src}-${index}`}\n ref={(el: HTMLImageElement | null) => {\n if (el && !cells.current.some(c => c.element === el)) {\n cells.current.push({ element: el, index });\n }\n }}\n style={{\n transform: transformStyle,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n left: 0,\n minWidth: '100%',\n height: '100%',\n margin: 'auto',\n touchAction: 'none',\n }}\n className={styles.imgMargin}\n >\n <div\n ref={imageRef}\n onPointerDown={(e) => handlePanPointerStart(e, imageRef)}\n onClickCapture={(e) => {\n if (suppressNextClickRef.current) {\n suppressNextClickRef.current = false;\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n style={{\n overflow: 'visible',\n touchAction: \"none\",\n height: '100%',\n display: 'flex',\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {isVideo ? (\n <div data-index={index} className={`${styles.myPlayer} myPlayer`}>\n <Plyr\n source={plyrProps!.source}\n options={plyrProps!.options}\n ref={(player) => { plyrRefs.current[index] = player; }}\n />\n </div>\n ) : (\n fsRenderImage\n ? fsRenderImage({\n item: item as any,\n index,\n isZoomed,\n className: styles.fullscreenImages,\n baseStyle: {\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n touchAction: 'manipulation',\n transformOrigin: '0 0',\n transform: 'translate(0, 0) scale(1)',\n cursor: isZoomed ? 'grab' : 'zoom-in',\n userSelect: 'none',\n },\n })\n : (\n <img\n src={item.src}\n alt={item.alt ?? `cell-${index}`}\n data-index={index}\n className={styles.fullscreenImages}\n draggable=\"false\"\n style={{\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n touchAction: 'manipulation',\n transformOrigin: '0 0',\n transform: 'translate(0, 0) scale(1)',\n cursor: isZoomed ? 'grab' : 'zoom-in',\n userSelect: 'none',\n }}\n />\n )\n )}\n </div>\n </div>\n )\n });\n\n const oneFullscreenImage = normalizedItems.map((item, index) => {\n const imageRef = imageRefs.current[index];\n const plyr = plyrProp[index];\n const isVideo = !!plyr;\n\n return (\n <div\n key={`${item.src}-${index}`}\n ref={(el: HTMLImageElement | null) => {\n if (el && !cells.current.some(c => c.element === el)) {\n cells.current.push({ element: el, index });\n }\n }}\n style={{\n transform: 'translateX(0%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n left: 0,\n minWidth: '100%',\n height: '100%',\n margin: 'auto',\n touchAction: 'none',\n }}\n className={styles.imgMargin}\n >\n <div\n ref={imageRef}\n onPointerDown={(e) => handlePanPointerStart(e, imageRef)}\n onClickCapture={(e) => {\n if (suppressNextClickRef.current) {\n suppressNextClickRef.current = false;\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n style={{\n overflow: 'visible',\n touchAction: \"none\",\n height: '100%',\n display: 'flex',\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {isVideo ? (\n <div data-index={index} className={`${styles.myPlayer} myPlayer`}>\n <Plyr\n source={plyr!.source}\n options={plyr!.options}\n ref={(player: APITypes | null) => { plyrRef.current[index] = player; }}\n />\n </div>\n ) : (\n <img\n data-index={index}\n className={styles.fullscreenImages}\n src={item.src}\n style={{\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: \"contain\",\n touchAction: 'manipulation',\n transformOrigin: '0 0',\n transform: `translate(0, 0) scale(1)`,\n cursor: isZoomed ? 'grab' : 'zoom-in',\n userSelect: 'none'\n }}\n alt={item.alt ?? `cell-${index}`}\n draggable='false'\n />\n )}\n </div>\n </div>\n )\n });\n\n useEffect(() => {\n if (scaleRef.current === 1) return;\n changingSlides.current = true;\n scaleStore.setScale(1);\n previousZoom.current.x = 0; previousZoom.current.y = 0;\n panRef.current = { x: 0, y: 0 }\n scaleRef.current = 1\n\n const commonStyles = {\n transform: 'translate(0, 0) scale(1)',\n transition: 'transform 0.2s cubic-bezier(.4,0,.22,1)',\n };\n\n imageRefs.current.forEach(ref => {\n const element = ref.current!;\n const child = element?.children[0] as HTMLElement | undefined;\n const match = commonStyles.transition.match(/([\\d.]+)s/);\n const durationMs = match ? parseFloat(match[1]) * 1000 : 300;\n\n if (element) element.style.transition = commonStyles.transition;\n if (child) child.style.transition = commonStyles.transition;\n\n if (element) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (element as any).offsetWidth;\n } \n\n if (element) element.style.transform = commonStyles.transform;\n if (child) child.style.transform = commonStyles.transform;\n\n setTimeout(() => {\n if (element) element.style.transition = '';\n if (child) child.style.transition = '';\n }, durationMs + 50);\n });\n\n setTimeout(() => { changingSlides.current = false; }, 200);\n }, [slideIndexSync]);\n\n useEffect(() => {\n if (!normalizedItems.length) return;\n const first = normalizedItems[0];\n const last = normalizedItems[normalizedItems.length - 1];\n setWrappedItems([last, ...normalizedItems, first]);\n }, [normalizedItems]);\n\n useEffect(() => {\n if (!wrappedItems.length) return;\n imageRefs.current = wrappedItems.map(() => createRef());\n }, [wrappedItems]);\n\n useEffect(() => {\n const onResize = () => setWindowSize({ width: window.innerWidth, height: window.innerHeight });\n window.addEventListener(\"resize\", onResize);\n onResize();\n return () => window.removeEventListener(\"resize\", onResize);\n }, []);\n\n function getImageAspectRatio(image: HTMLDivElement | null) {\n if (!image) return;\n const imgElement = image.children[0] as HTMLImageElement | undefined;\n if (imgElement && imgElement.naturalWidth && imgElement.naturalHeight) {\n aspectRatioRef.current = imgElement.naturalWidth / imgElement.naturalHeight;\n }\n }\n\n function getCurrentTransform(slide: HTMLElement | null) {\n if (!slide) return { x: 0, y: 0 };\n const computedStyle = window.getComputedStyle(slide);\n const transform = computedStyle.transform;\n if (!transform || transform === 'none') return { x: 0, y: 0 };\n const matrixMatch = transform.match(/matrix\\(([^)]+)\\)/);\n if (!matrixMatch) return { x: 0, y: 0 };\n const matrixValues = matrixMatch[1].split(',').map(parseFloat);\n const tx = matrixValues[4] || 0;\n const ty = matrixValues[5] || 0;\n return { x: tx, y: ty };\n }\n\n const rebuildPanBodies = useCallback(() => {\n if (!currentImage.current) return\n const img = currentImage.current.children[0] as HTMLImageElement | undefined\n if (!img) return\n\n const { x, y } = getCurrentTransform(img)\n locX.current = Vector1D(x); prevX.current = Vector1D(x); offX.current = Vector1D(x); tgtX.current = Vector1D(x)\n locY.current = Vector1D(y); prevY.current = Vector1D(y); offY.current = Vector1D(y); tgtY.current = Vector1D(y)\n\n bodyX.current = ScrollBody(locX.current, offX.current, prevX.current, tgtX.current, 25, 0.68).sync()\n bodyY.current = ScrollBody(locY.current, offY.current, prevY.current, tgtY.current, 25, 0.68).sync()\n\n const imgW = img.clientWidth\n const imgH = img.clientWidth / (aspectRatioRef.current || 1)\n const { x: limX, y: limY, povX, povY } = boundsForCurrent(scaleRef.current, imgW, imgH)\n\n boundsX.current = ScrollBounds(limX, offX.current, tgtX.current, bodyX.current, povX)\n boundsY.current = ScrollBounds(limY, offY.current, tgtY.current, bodyY.current, povY)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [windowSize.width, windowSize.height])\n\n useEffect(() => {\n const anim = Animations(document, window as WindowType,\n () => {\n boundsX.current?.constrain(pointerDownRef.current)\n boundsY.current?.constrain(pointerDownRef.current)\n bodyX.current?.seek()\n bodyY.current?.seek()\n },\n (alpha) => {\n if (!locX.current || !locY.current || !prevX.current || !prevY.current) return\n const lx = locX.current.get() * alpha + prevX.current.get() * (1 - alpha)\n const ly = locY.current.get() * alpha + prevY.current.get() * (1 - alpha)\n offX.current?.set(lx)\n offY.current?.set(ly)\n renderPan(lx, ly)\n\n const settled = !!bodyX.current?.settled() && !!bodyY.current?.settled()\n const within =\n !(boundsX.current?.shouldConstrain()) &&\n !(boundsY.current?.shouldConstrain())\n const stop = settled && within && !pointerDownRef.current\n if (stop) emblaAnimRef.current?.stop()\n }\n )\n emblaAnimRef.current = anim\n anim.init()\n return () => { anim.destroy(); emblaAnimRef.current = null }\n }, [slideIndexSync])\n\n const freeBoost = { mouse: 400, touch: 400 }\n const baseSpeed = 43\n\n const trackerRef = useRef<ReturnType<typeof DragTracker> | null>(null)\n const dragStore = useRef(EventStore()).current\n const moveStore = useRef(EventStore()).current\n\n const forceBoost = (rawForce: number, isMouse: boolean) =>\n rawForce * (isMouse ? freeBoost.mouse : freeBoost.touch)\n\n function handlePanPointerStart(\n e: React.PointerEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n imageRef: React.RefObject<HTMLImageElement | null>\n ) {\n if (!isZoomed) return\n if (!imageRef.current) return\n currentImage.current = imageRef.current\n getImageAspectRatio(imageRef.current)\n\n rebuildPanBodies()\n\n const ownerWin = window as WindowType\n const axis = axisRef.current || Axis()\n trackerRef.current = DragTracker(axis, ownerWin)\n\n const mouse = (e as any).button !== undefined\n const isPrimaryMouse = mouse ? (e as React.PointerEvent).button === 0 : false\n if (mouse && !isPrimaryMouse) return\n\n pointerDownRef.current = true\n interactionModeRef.current = 'drag'\n\n if (tgtX.current && locX.current) tgtX.current.set(locX.current.get())\n if (tgtY.current && locY.current) tgtY.current.set(locY.current.get())\n\n const CLICK_MOVE_TOL = 3\n const CLICK_TIME_TOL_MS = 220\n const FLICK_FORCE_TOL = 0.075\n let totalAbsDx = 0\n let totalAbsDy = 0\n let canceledByMultiTouch = false\n const downTs = performance.now()\n const downNativeEvt = e.nativeEvent as any\n\n trackerRef.current.pointerDown(downNativeEvt)\n\n const onMove = (evt: PointerEvent | TouchEvent) => {\n if (!isMouseEvent(evt as any, window as any) && (evt as TouchEvent).touches?.length >= 2) {\n canceledByMultiTouch = true\n return onUp(evt as any)\n }\n\n const moved = trackerRef.current!.pointerMove(evt as any)\n\n totalAbsDx += Math.abs(moved.dx)\n totalAbsDy += Math.abs(moved.dy)\n\n bodyX.current?.useFriction(0.3).useDuration(0.75)\n bodyY.current?.useFriction(0.3).useDuration(0.75)\n\n tgtX.current?.add(moved.dx)\n tgtY.current?.add(moved.dy)\n\n emblaAnimRef.current?.start()\n if ('cancelable' in evt && (evt as any).cancelable) (evt as any).preventDefault?.()\n }\n\n const onUp = (evt: PointerEvent | TouchEvent) => {\n const flick = trackerRef.current!.pointerUp(evt as any)\n const isMouse = isMouseEvent(evt as any, window as any)\n\n const durMs = performance.now() - downTs\n const tinyTravel = totalAbsDx <= CLICK_MOVE_TOL && totalAbsDy <= CLICK_MOVE_TOL\n const tinyFlick = Math.abs(flick.fx) <= FLICK_FORCE_TOL && Math.abs(flick.fy) <= FLICK_FORCE_TOL\n const isClick = !canceledByMultiTouch && tinyTravel && tinyFlick && durMs <= CLICK_TIME_TOL_MS\n\n pointerDownRef.current = false\n interactionModeRef.current = 'idle'\n moveStore.clear()\n\n if (isClick) {\n const imgEl = (currentImage.current?.querySelector('img') ??\n currentImage.current?.children[0]) as HTMLImageElement | null\n if (imgEl) {\n const upAny = evt as any\n const cx = upAny?.touches?.[0]?.clientX ?? upAny?.changedTouches?.[0]?.clientX ?? upAny?.clientX ?? downNativeEvt?.clientX\n const cy = upAny?.touches?.[0]?.clientY ?? upAny?.changedTouches?.[0]?.clientY ?? upAny?.clientY ?? downNativeEvt?.clientY\n\n const fakeReactEvt = {\n target: imgEl,\n currentTarget: imgEl,\n clientX: cx,\n clientY: cy,\n nativeEvent: upAny ?? downNativeEvt,\n } as unknown as React.PointerEvent<HTMLImageElement>\n\n handleZoomToggle(fakeReactEvt, currentImage as any)\n\n suppressNextClickRef.current = true;\n const anyEvt: any = evt;\n anyEvt?.preventDefault?.();\n anyEvt?.stopPropagation?.();\n emblaAnimRef.current?.stop()\n return;\n }\n emblaAnimRef.current?.stop()\n return\n }\n\n const fx = forceBoost(flick.fx, isMouse)\n const fy = forceBoost(flick.fy, isMouse)\n\n const factorX = Math.min(\n 1,\n Math.abs(flick.fx) > 0\n ? Math.abs((Math.abs(fx) - Math.abs(flick.fx)) / (flick.fx || 1))\n : 0\n )\n const factorY = Math.min(\n 1,\n Math.abs(flick.fy) > 0\n ? Math.abs((Math.abs(fy) - Math.abs(flick.fy)) / (flick.fy || 1))\n : 0\n )\n\n const speedX = baseSpeed - 10 * factorX\n const speedY = baseSpeed - 10 * factorY\n const frictionX = 0.68 + factorX / 50\n const frictionY = 0.68 + factorY / 50\n\n bodyX.current?.useDuration(speedX).useFriction(frictionX)\n bodyY.current?.useDuration(speedY).useFriction(frictionY)\n\n tgtX.current?.add(fx)\n tgtY.current?.add(fy)\n\n emblaAnimRef.current?.start()\n }\n\n const isMouse = (e as any).nativeEvent instanceof MouseEvent\n const node: any = isMouse ? document : window\n moveStore\n .add(node, 'touchmove', onMove as any, { passive: false })\n .add(node, 'touchend', onUp as any)\n .add(node, 'mousemove', onMove as any, { passive: false })\n .add(node, 'mouseup', onUp as any)\n\n dragStore\n .add(window, 'touchcancel', onUp as any)\n .add(window, 'contextmenu', onUp as any)\n }\n\n const isPinching = useRef(false);\n const isTouchPinching = useRef(false);\n const pinchJustEnded = useRef(false);\n const startDist = useRef(0);\n const startScale = useRef(1);\n\n function baseFitSize(imgEl: HTMLImageElement, viewW: number, viewH: number) {\n const natW = imgEl.naturalWidth || imgEl.width || viewW\n const natH = imgEl.naturalHeight || imgEl.height || viewH\n const fit = Math.min(viewW / natW, viewH / natH)\n return { baseW: natW * fit, baseH: natH * fit }\n }\n\n function applySmoothTransform(x: number, y: number, scale: number, durationMs = 300) {\n if (!currentImage.current) return\n const img = currentImage.current.children[0] as HTMLElement | null\n if (!img) return\n\n const all: HTMLElement[] = [img]\n const last = imageRefs.current.at(-1)?.current?.children[0] as HTMLElement | undefined\n const first = imageRefs.current[0]?.current?.children[0] as HTMLElement | undefined\n const second = imageRefs.current[1]?.current?.children[0] as HTMLElement | undefined\n const idx = Number(img.dataset.index)\n const len = imageRefs.current.length\n if (idx !== len - 2 && idx !== len - 3 && last) all.push(last)\n if (idx === len - 2 && first) all.push(first)\n if (idx === len - 1 && second) all.push(second)\n\n const transition = `transform ${durationMs}ms cubic-bezier(.4,0,.22,1)`\n all.forEach(el => { el.style.transition = transition; el.style.transform = `translate3d(${x}px, ${y}px, 0) scale(${scale})` })\n window.setTimeout(() => all.forEach(el => (el.style.transition = '')), durationMs + 30)\n }\n\n function handleZoomToggle(\n e: React.PointerEvent<HTMLImageElement> | React.TouchEvent<HTMLImageElement>,\n imageRef: React.RefObject<HTMLDivElement | null>\n ) {\n if (!imageRef.current) return;\n\n currentImage.current = imageRef.current;\n const container = currentImage.current;\n const imgEl = container.children[0] as HTMLImageElement;\n\n const { x: domTx, y: domTy } = getCurrentTransform(imgEl);\n if (!locX.current || !locY.current) {\n locX.current = Vector1D(domTx); prevX.current = Vector1D(domTx); offX.current = Vector1D(domTx); tgtX.current = Vector1D(domTx);\n locY.current = Vector1D(domTy); prevY.current = Vector1D(domTy); offY.current = Vector1D(domTy); tgtY.current = Vector1D(domTy);\n bodyX.current = ScrollBody(locX.current, offX.current, prevX.current, tgtX.current, 25, 0.68).sync();\n bodyY.current = ScrollBody(locY.current, offY.current, prevY.current, tgtY.current, 25, 0.68).sync();\n }\n\n const s0 = scaleRef.current || 1;\n const goingIn = s0 === 1;\n const s1 = goingIn ? clickScale : 1;\n\n const rect = container.getBoundingClientRect();\n const containerW = rect.width;\n const containerH = rect.height;\n\n const anyEvt = e as any;\n const clientX = anyEvt?.touches?.[0]?.clientX ?? anyEvt?.changedTouches?.[0]?.clientX ?? anyEvt?.clientX ?? 0;\n const clientY = anyEvt?.touches?.[0]?.clientY ?? anyEvt?.changedTouches?.[0]?.clientY ?? anyEvt?.clientY ?? 0;\n const cx = clientX - rect.left;\n const cy = clientY - rect.top;\n\n const { baseW, baseH } = baseFitSizeC(imgEl, containerW, containerH);\n const offXc = (containerW - baseW) / 2;\n const offYc = (containerH - baseH) / 2;\n\n const tx0 = offX.current!.get();\n const ty0 = offY.current!.get();\n\n let tx1: number, ty1: number;\n\n if (goingIn) {\n const k = s1 / s0;\n tx1 = tx0 + (1 - k) * (cx - offXc - tx0);\n ty1 = ty0 + (1 - k) * (cy - offYc - ty0);\n\n const { x: limX, y: limY } = boundsForCurrent(s1, baseW, baseH);\n tx1 = limX.constrain(tx1);\n ty1 = limY.constrain(ty1);\n } else {\n tx1 = 0;\n ty1 = 0;\n }\n\n applySmoothTransform(tx1, ty1, s1, 300);\n\n scaleRef.current = s1;\n scaleStore.setScale(s1);\n previousZoom.current.x = cx;\n previousZoom.current.y = cy;\n panRef.current = { x: tx1, y: ty1 };\n\n window.setTimeout(() => {\n locX.current!.set(tx1); prevX.current!.set(tx1); offX.current!.set(tx1); tgtX.current!.set(tx1);\n locY.current!.set(ty1); prevY.current!.set(ty1); offY.current!.set(ty1); tgtY.current!.set(ty1);\n\n bodyX.current = ScrollBody(locX.current!, offX.current!, prevX.current!, tgtX.current!, 25, 0.68).sync();\n bodyY.current = ScrollBody(locY.current!, offY.current!, prevY.current!, tgtY.current!, 25, 0.68).sync();\n\n const { x: limX2, y: limY2, povX, povY } = boundsForCurrent(s1, baseW, baseH);\n boundsX.current = ScrollBoundsC(limX2, offX.current!, tgtX.current!, bodyX.current!, povX);\n boundsY.current = ScrollBoundsC(limY2, offY.current!, tgtY.current!, bodyY.current!, povY);\n\n tgtX.current!.set(limX2.constrain(tgtX.current!.get()));\n tgtY.current!.set(limY2.constrain(tgtY.current!.get()));\n\n emblaAnimRef.current?.resetBlend();\n }, 300);\n }\n\n type Point = { x: number; y: number };\n function clampNum(val: number, min: number, max: number) { return Math.max(min, Math.min(max, val)) }\n\n const handlePinchWheel = useCallback((\n e: WheelEvent,\n imageRef: React.RefObject<HTMLDivElement | null>\n ) => {\n e.preventDefault();\n if (!imageRef.current) return;\n if (!e.ctrlKey) return;\n\n fullscreenSliderApi.current?.centerSlider();\n\n if (scaleRef.current > 1.01) {\n isPinching.current = true;\n }\n\n const { ctrlKey, deltaMode } = e;\n let { deltaY } = e;\n\n if (deltaMode === 1) {\n deltaY *= 15;\n }\n\n const divisor = ctrlKey ? 100 : 300;\n const scaleDiff = 1 - deltaY / divisor;\n const destZoomLevel = scaleRef.current * scaleDiff;\n\n zoomTo({\n destZoomLevel,\n centerPoint: { x: e.clientX, y: e.clientY },\n imageRef\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scaleRef.current]);\n\n function baseFitSizeC(imgEl: HTMLImageElement, containerW: number, containerH: number) {\n const natW = imgEl.naturalWidth || imgEl.width || containerW\n const natH = imgEl.naturalHeight || imgEl.height || containerH\n const fit = Math.min(containerW / natW, containerH / natH)\n return { baseW: natW * fit, baseH: natH * fit }\n }\n\n function ScrollBoundsC(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n body: ScrollBodyType,\n pov: PercentOfViewType\n ) {\n const pullBack = pov.measure(10)\n const edgeTol = pov.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n\n function shouldConstrain() {\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n return {\n shouldConstrain,\n constrain(pointerDown: boolean) {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = Math.abs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const fr = frictionLimit.constrain(diffToEdge / edgeTol)\n target.set(target.get() - diffToTarget * fr)\n\n if (!pointerDown && Math.abs(diffToTarget) < pullBack) {\n target.set(limit.constrain(target.get()))\n body.useDuration(25).useBaseFriction()\n }\n },\n }\n }\n\n function zoomTo({\n destZoomLevel,\n centerPoint,\n imageRef\n }: {\n destZoomLevel: number;\n centerPoint: { x: number; y: number };\n imageRef: React.RefObject<HTMLDivElement | null>;\n }) {\n if (!imageRef.current) return;\n\n currentImage.current = imageRef.current;\n const container = currentImage.current;\n const imgEl = container.children[0] as HTMLImageElement;\n\n const { x: domTx, y: domTy } = getCurrentTransform(imgEl);\n if (!locX.current || !locY.current) {\n locX.current = Vector1D(domTx); prevX.current = Vector1D(domTx); offX.current = Vector1D(domTx); tgtX.current = Vector1D(domTx);\n locY.current = Vector1D(domTy); prevY.current = Vector1D(domTy); offY.current = Vector1D(domTy); tgtY.current = Vector1D(domTy);\n bodyX.current = ScrollBody(locX.current, offX.current, prevX.current, tgtX.current, 25, 0.68).sync();\n bodyY.current = ScrollBody(locY.current, offY.current, prevY.current, tgtY.current, 25, 0.68).sync();\n }\n\n const s0 = scaleRef.current || 1;\n const s1 = clampNum(destZoomLevel, 1, 3);\n if (s1 === s0) return;\n\n const rect = container.getBoundingClientRect();\n const containerW = rect.width;\n const containerH = rect.height;\n\n const cx = centerPoint.x - rect.left;\n const cy = centerPoint.y - rect.top;\n\n const { baseW, baseH } = baseFitSizeC(imgEl, containerW, containerH);\n const offXc = (containerW - baseW) / 2;\n const offYc = (containerH - baseH) / 2;\n\n const tx0 = offX.current!.get();\n const ty0 = offY.current!.get();\n\n const k = s1 / s0;\n let tx1 = tx0 + (1 - k) * (cx - offXc - tx0);\n let ty1 = ty0 + (1 - k) * (cy - offYc - ty0);\n\n const { x: limX, y: limY, povX, povY } = boundsForCurrent(s1, baseW, baseH);\n tx1 = limX.constrain(tx1);\n ty1 = limY.constrain(ty1);\n\n scaleRef.current = s1;\n scaleStore.setScale(s1);\n previousZoom.current.x = cx;\n previousZoom.current.y = cy;\n\n tgtX.current!.set(tx1); locX.current!.set(tx1); prevX.current!.set(tx1); offX.current!.set(tx1);\n tgtY.current!.set(ty1); locY.current!.set(ty1); prevY.current!.set(ty1); offY.current!.set(ty1);\n\n boundsX.current = ScrollBoundsC(limX, offX.current!, tgtX.current!, bodyX.current!, povX);\n boundsY.current = ScrollBoundsC(limY, offY.current!, tgtY.current!, bodyY.current!, povY);\n\n bodyX.current?.useDuration(0).useFriction(1);\n bodyY.current?.useDuration(0).useFriction(1);\n emblaAnimRef.current?.start();\n renderPan(tx1, ty1);\n }\n\n function isPinchGesture(e: WheelEvent): boolean {\n if (e.ctrlKey) return true;\n const absX = Math.abs(e.deltaX), absY = Math.abs(e.deltaY)\n if (absX < 1 && absY < 1) return false\n const ratio = absX / absY\n return ratio >= 0.8 && ratio <= 1.2\n }\n\n const handleWheel = useCallback((e: WheelEvent & { deltaX: number; deltaY: number }) => {\n e.preventDefault();\n if (!isZoomed) return;\n if (isPinchGesture(e)) return;\n if (e.ctrlKey) return;\n if (!currentImage.current) return;\n\n rebuildPanBodies();\n\n const imgEl = currentImage.current.children[0] as HTMLImageElement;\n const { baseW, baseH } = baseFitSize(imgEl, windowSize.width, windowSize.height);\n const { x: limX, y: limY } = boundsForCurrent(scaleRef.current, baseW, baseH);\n\n let tx = (offX.current?.get() ?? 0) - e.deltaX;\n let ty = (offY.current?.get() ?? 0) - e.deltaY;\n\n tx = limX.constrain(tx);\n ty = limY.constrain(ty);\n\n tgtX.current?.set(tx);\n tgtY.current?.set(ty);\n\n bodyX.current?.useDuration(0).useFriction(1);\n bodyY.current?.useDuration(0).useFriction(1);\n\n emblaAnimRef.current?.start();\n renderPan(tx, ty);\n }, [isZoomed, rebuildPanBodies, windowSize.width, windowSize.height]);\n\n useEffect(() => {\n window.addEventListener('wheel', handleWheel as any)\n return () => {\n window.removeEventListener('wheel', handleWheel as any)\n }\n }, [handleWheel])\n\n useLayoutEffect(() => {\n function pinchWheelHandler(e: WheelEvent) {\n let targetImg: HTMLImageElement | null = null;\n\n const x = e.clientX;\n const y = e.clientY;\n\n const underlyingElement = document.elementFromPoint(x, y);\n\n if (underlyingElement) {\n if (underlyingElement.tagName.toLowerCase() === \"img\") {\n targetImg = underlyingElement as HTMLImageElement;\n } else {\n targetImg = underlyingElement.querySelector(\"img\");\n }\n }\n\n if (!targetImg) return;\n\n const imgIndex = targetImg.dataset.index;\n\n if (imgIndex === undefined) return;\n\n const matchedRef = imageRefs.current[parseInt(imgIndex)];\n\n if (!matchedRef) return;\n\n currentImage.current = imageRefs.current[parseInt(imgIndex)].current;\n\n handlePinchWheel(e, matchedRef);\n }\n\n window.addEventListener('wheel', pinchWheelHandler, { passive: false });\n\n return () => {\n window.removeEventListener('wheel', pinchWheelHandler);\n };\n }, [handlePinchWheel]);\n\n function midpoint(a: Touch, b: Touch): Point {\n if (!b) return { x: a.clientX, y: a.clientY };\n return { x: (a.clientX + b.clientX) / 2, y: (a.clientY + b.clientY) / 2 }\n }\n \n function distance(a: Touch, b: Touch): number {\n const dx = a.clientX - b.clientX\n const dy = a.clientY - b.clientY\n return Math.hypot(dx, dy)\n }\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length !== 2) return;\n e.preventDefault();\n\n fullscreenSliderApi.current?.centerSlider();\n\n isTouchPinching.current = true;\n const [t0, t1] = [e.touches[0], e.touches[1]];\n startDist.current = distance(t0, t1);\n startScale.current = scaleRef.current;\n }\n\n const onTouchMove = (e: TouchEvent, imageRef: React.RefObject<HTMLDivElement | null>) => {\n if (!isTouchPinching.current || e.touches.length !== 2) return;\n e.preventDefault();\n\n const [t0, t1] = [e.touches[0], e.touches[1]];\n const currDist = distance(t0, t1);\n const factor = currDist / startDist.current;\n const destZoom = startScale.current * factor;\n\n const center = midpoint(t0, t1);\n zoomTo({ destZoomLevel: destZoom, centerPoint: center, imageRef })\n }\n\n const endPinch = () => {\n if (!isTouchPinching.current) return;\n isTouchPinching.current = false;\n pinchJustEnded.current = true;\n }\n\n useLayoutEffect(() => {\n function touchPinchMoveHandler(e: TouchEvent) {\n let targetImg: HTMLImageElement | null = null;\n\n const { x, y } = midpoint(e.touches[0], e.touches[1])\n\n const underlyingElement = document.elementFromPoint(x, y);\n\n if (underlyingElement) {\n if (underlyingElement.tagName.toLowerCase() === \"img\") {\n targetImg = underlyingElement as HTMLImageElement;\n } else {\n targetImg = underlyingElement.querySelector(\"img\");\n }\n }\n\n if (!targetImg) return;\n\n const imgIndex = targetImg.dataset.index;\n\n if (imgIndex === undefined) return;\n\n const matchedRef = imageRefs.current[parseInt(imgIndex)];\n\n if (!matchedRef) return;\n\n currentImage.current = imageRefs.current[parseInt(imgIndex)].current;\n\n onTouchMove(e, matchedRef);\n }\n\n window.addEventListener('touchstart', onTouchStart, { passive: false });\n window.addEventListener('touchmove', touchPinchMoveHandler, { passive: false });\n window.addEventListener('touchend', endPinch);\n window.addEventListener('touchcancel', endPinch);\n return () => {\n window.removeEventListener('touchstart', onTouchStart);\n window.removeEventListener('touchmove', touchPinchMoveHandler);\n window.removeEventListener('touchend', endPinch);\n window.removeEventListener('touchcancel', endPinch);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zoomTo, onTouchStart, onTouchMove, endPinch]);\n\n\n return (\n <>\n <div style={containerStyle}>\n {(thumbnails === 'top' || thumbnails === 'left') && (\n <ThumbnailSlider position={thumbnails} freeScroll={true} gap={8} thumbnailWidth={thumbnailWidth} thumbnailHeight={thumbnailHeight}>\n {thumbnailChildren}\n </ThumbnailSlider>\n )}\n <div style={sliderColumnStyle}>\n <Slider \n imageCount={normalizedItems.length} \n isClick={isClick} \n expandableImgRefs={expandableImgRefs} \n overlayDivRef={overlayDivRef} \n setSlideIndex={setSlideIndex} \n setShowFullscreenModal={setShowFullscreenModal} \n setShowFullscreenSlider={setShowFullscreenSlider} \n showFullscreenSlider={showFullscreenSlider} \n isWrapping={isWrapping} \n slides={slides} \n slider={slider} \n visibleImagesRef={visibleImagesRef} \n selectedIndex={selectedIndex} \n firstCellInSlide={firstCellInSlide} \n sliderX={sliderX} \n sliderVelocity={sliderVelocity}\n duplicateImgRef={duplicateImgRef}\n closeButtonRef={closeButtonRef}\n counterRef={counterRef}\n leftChevronRef={leftChevronRef}\n rightChevronRef={rightChevronRef}\n responsive={responsive}\n isReady={isReady}\n setIsReady={setIsReady}\n loop={loop}\n freeScroll={freeScroll}\n autoPlay={autoPlay}\n autoScroll={autoScroll}\n groupCells={groupCells}\n centerAlign={centerAlign}\n gap={gap}\n backgroundColor={backgroundColor}\n sliderHeight={sliderHeight}\n >\n {children}\n </Slider>\n </div>\n {(thumbnails === 'bottom' || thumbnails === 'right') && (\n <ThumbnailSlider position={thumbnails} freeScroll={true} gap={8} thumbnailWidth={thumbnailWidth} thumbnailHeight={thumbnailHeight}>\n {thumbnailChildren}\n </ThumbnailSlider>\n )}\n </div>\n <FullscreenModal\n open={showFullscreenModal}\n onClose={() => setShowFullscreenModal(false)}\n isZoomClick={isZoomClick}\n isClick={isClick}\n isAnimating={isAnimatingRef}\n overlayDivRef={overlayDivRef}\n zoomLevel={zoomLevel}\n cells={cells}\n setShowFullscreenSlider={setShowFullscreenSlider}\n imageCount={normalizedItems.length}\n slides={slides}\n slider={slider}\n visibleImagesRef={visibleImagesRef}\n selectedIndex={selectedIndex} \n firstCellInSlide={firstCellInSlide} \n sliderX={sliderX} \n sliderVelocity={sliderVelocity}\n isWrapping={isWrapping}\n wrappedItems={wrappedItems}\n setClosingModal={setClosingModal}\n closeButtonRef={closeButtonRef}\n counterRef={counterRef}\n leftChevronRef={leftChevronRef}\n rightChevronRef={rightChevronRef}\n >\n <FullscreenSlider \n key={epoch}\n ref={fullscreenSliderApi}\n imageCount={normalizedItems.length} \n slideIndex={slideIndex} \n isClick={isZoomClick} \n isZoomed={isZoomed} \n windowSize={windowSize} \n show={showFullscreenModal} \n handleZoomToggle={handleZoomToggle} \n imageRefs={imageRefs.current} \n cells={cells} \n isPinching={isPinching} \n scale={scaleRef.current} \n isTouchPinching={isTouchPinching}\n showFullscreenSlider={showFullscreenSlider}\n isWrapping={isWrapping}\n zoomedDuringWrap={zoomedDuringWrap}\n isZooming={isZooming}\n plyrRefs={plyrRefs}\n plyrRef={plyrRef}\n closingModal={closingModal}\n closeButtonRef={closeButtonRef}\n counterRef={counterRef}\n leftChevronRef={leftChevronRef}\n rightChevronRef={rightChevronRef}\n overlayDivRef={overlayDivRef}\n >\n {normalizedItems.length > 1 ? wrappedFullscreenImages : oneFullscreenImage}\n </FullscreenSlider>\n </FullscreenModal>\n </>\n );\n}"]}