react-motion-gallery 2.0.4 → 2.0.5
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.
- package/dist/index.css +274 -307
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +625 -190
- package/dist/index.mjs +12273 -6763
- package/dist/index.mjs.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/package.json +40 -7
- package/dist/FullscreenRuntime-CEYIXWZZ.mjs +0 -2666
- package/dist/FullscreenRuntime-CEYIXWZZ.mjs.map +0 -1
- package/dist/FullscreenRuntime-D6G3BRAU.css +0 -123
- package/dist/FullscreenRuntime-D6G3BRAU.css.map +0 -1
- package/dist/chunk-HOCUKMYX.mjs +0 -2634
- package/dist/chunk-HOCUKMYX.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Gallery/fullscreen/DefaultCloseIcon.tsx","../src/Gallery/fullscreen/DefaultChevronIcon.tsx","../src/Gallery/fullscreen/DefaultCounterText.tsx","../src/Gallery/fullscreen/FullscreenModal.tsx","../src/Gallery/fullscreen/FullscreenSlider.module.css","../src/Gallery/fullscreen/FullscreenSlider.tsx","../src/Gallery/fullscreen/FullscreenThumbnailSlider.tsx","../src/Gallery/entries/overlay/FsEntryOverlayMount.tsx","../src/Gallery/fullscreen/FullscreenRuntime.tsx"],"names":["jsx","React","isRtl","fsSub","imageCount","canonicalIdx","thumbCropRect","endObjPos","originalsLen","jsxs","useEffect","len","direction","x","y","target","indexCurrent","indexPrevious","body","allowedForce","force","fsScrollTo","next","mode","useRef","React3","Fragment"],"mappings":"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","file":"FullscreenRuntime-CEYIXWZZ.mjs","sourcesContent":["export function DefaultCloseIcon({\n size = 35,\n className,\n}: {\n size?: number;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n fill=\"white\"\n stroke=\"#4f4f4f\"\n strokeWidth={0.5}\n d=\"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>\n );\n}","export function DefaultChevronIcon({ side }: { side: \"left\" | \"right\" }) {\n return (\n <svg viewBox=\"0 0 16 16\" width=\"100%\" height=\"100%\" focusable=\"false\" aria-hidden=\"true\" style={{ display: \"block\" }}>\n <polygon\n points=\"4.586,3.414 9.172,8 4.586,12.586 6,14 12,8 6,2\"\n fill=\"white\"\n stroke=\"#4f4f4f\"\n strokeWidth=\"0.5\"\n />\n </svg>\n );\n}","export function DefaultCounterText({ index, count }: { index: number; count: number }) {\n return (\n <span>\n {index + 1} / {count}\n </span>\n );\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client'\n\nimport React, {\n Dispatch,\n RefObject,\n SetStateAction,\n useEffect,\n} from 'react'\nimport type { FullscreenSliderSub } from './fullscreenSliderSub'\nimport { parseObjectPosition } from '../shared/transitions/objectPosition';\nimport { containTransformForRect, coverTransformForRect, objectFitContentRect } from '../shared/transitions/objectFitTransform';\nimport { MediaItem } from '../shared/types/media';\nimport { IndexMode } from '../api/types';\nimport { MediaEntryLink } from '../entries';\nimport { FullscreenOptions } from './types';\nimport { DefaultCloseIcon } from './DefaultCloseIcon';\nimport { DefaultChevronIcon } from './DefaultChevronIcon';\nimport { DefaultCounterText } from './DefaultCounterText';\n\ninterface FullscreenModalProps {\n fsSub: FullscreenSliderSub\n open: boolean\n onClose: () => void\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 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 sliderX: RefObject<number>\n sliderVelocity: RefObject<number>\n isWrapping: RefObject<boolean>\n wrappedItems: MediaItem[]\n centerAlign: boolean\n centerSlider?: () => void;\n setSliderIndex: (i: number, mode: IndexMode) => void;\n onForceResetZoom: () => void;\n layout?: 'slider' | 'grid' | 'masonry' | 'entries';\n expandableImgRefs: RefObject<RefObject<HTMLImageElement | null>[]>\n entryMapRef?: RefObject<MediaEntryLink[] | null>;\n entryMediaLayout?: string;\n introFade?: boolean;\n introDuration?: number;\n introEasing?: string;\n requestFsCloseRef: React.RefObject<null | (() => void)>;\n fs: FullscreenOptions;\n styles: Record<string, string>;\n direction: 'ltr' | 'rtl';\n}\n\nfunction freezeRect(el: HTMLElement) {\n const r = el.getBoundingClientRect()\n el.style.width = `${Math.max(1, Math.round(r.width))}px`\n el.style.height = `${Math.max(1, Math.round(r.height))}px`\n}\n\nconst px = (n: number) => `${Math.round(n)}px`\n\nfunction getViewportEl(track: HTMLDivElement | null): HTMLElement | null {\n if (!track) return null\n return (track.parentElement as HTMLElement) ?? track\n}\n\nfunction getTotalCellsWidth(slides: { cells: { element: HTMLElement; index: number }[] }[] | undefined): number {\n if (!slides) return 0\n let totalWidth = 0\n slides.forEach(slide => {\n slide.cells.forEach(cell => {\n totalWidth += cell.element.offsetWidth\n })\n })\n return totalWidth\n}\n\nfunction isCellVisible(\n cellEl: HTMLElement,\n viewportEl: HTMLElement,\n allowPartial = true\n): boolean {\n const c = viewportEl.getBoundingClientRect()\n const r = cellEl.getBoundingClientRect()\n const fully = r.left >= c.left && r.right <= c.right && r.top >= c.top && r.bottom <= c.bottom\n const intersects = r.right > c.left && r.left < c.right && r.bottom > c.top && r.top < c.bottom\n return allowPartial ? intersects : fully\n}\n\ntype ClipperArgs = {\n DURATION_MS: number;\n EASING: string;\n};\n\nfunction createClipper({ DURATION_MS, EASING }: ClipperArgs): HTMLDivElement {\n const clipper = document.createElement('div')\n Object.assign(clipper.style, {\n position: 'fixed',\n inset: '0',\n clipPath: 'inset(0px 0px 0px 0px)',\n willChange: 'clip-path',\n pointerEvents: 'none',\n transition: `clip-path ${DURATION_MS}ms ${EASING}`,\n zIndex: '9998',\n background: 'transparent',\n } as CSSStyleDeclaration)\n document.body.appendChild(clipper)\n void clipper.offsetWidth\n return clipper\n}\n\nfunction insetForRect(r: DOMRect): string {\n const vw = window.innerWidth\n const vh = window.innerHeight\n const top = r.top\n const left = r.left\n const right = vw - (r.left + r.width)\n const bottom = vh - (r.top + r.height)\n return `inset(${px(top)} ${px(right)} ${px(bottom)} ${px(left)})`\n}\n\nfunction findThumbInfoEnsuringVisible(\n wrapIndex: number,\n centerAlign: boolean,\n sliderRef: RefObject<HTMLDivElement | null>,\n slidesRef: RefObject<{ cells: { element: HTMLElement; index: number }[]; target: number }[]>,\n selectedIndex: RefObject<number>,\n sliderX: RefObject<number>,\n sliderVelocity: RefObject<number>,\n centerSlider: (() => void) | undefined,\n isWrappingRef: RefObject<boolean>,\n visibleImagesRef: RefObject<number>,\n setSliderIndex: (i: number, mode: IndexMode) => void\n): ThumbInfo | null {\n const slider = sliderRef.current\n const slides = slidesRef.current\n if (!slider || !slides?.length) return null\n\n const matchSlide = slides.find(s => s.cells.some(c => c.index === wrapIndex))\n if (!matchSlide) return null\n\n const slideIdx = slides.indexOf(matchSlide)\n const targetCell =\n matchSlide.cells.find(c => c.index === wrapIndex)?.element ??\n matchSlide.cells[0]?.element ??\n null\n if (!targetCell) return null\n\n const viewport = getViewportEl(slider)\n if (!viewport) return null\n\n const fullyVisible = isCellVisible(targetCell, viewport, /*allowPartial*/ false)\n\n if (!fullyVisible) {\n moveBaseSliderToSlide(\n centerAlign,\n sliderRef,\n slidesRef,\n selectedIndex,\n sliderX,\n sliderVelocity,\n centerSlider,\n slideIdx,\n setSliderIndex\n )\n\n void slider.offsetWidth\n }\n\n const isWrapping = !!isWrappingRef.current\n const visibleImages = visibleImagesRef.current\n const cloneOffset = isWrapping ? (visibleImages || 0) : 0\n const domSlideIdx = isWrapping ? (slideIdx + cloneOffset) : slideIdx\n\n const cropRect = targetCell.getBoundingClientRect()\n\n const imgEl = targetCell.querySelector('img') as HTMLImageElement | null\n const cs = imgEl ? getComputedStyle(imgEl) : null\n const objPos = parseObjectPosition(cs?.objectPosition ?? null) ?? { x: 0.5, y: 0.5 };\n const renderedRect = imgEl?.getBoundingClientRect() ?? null\n const renderedW = renderedRect ? renderedRect.width : 0\n const renderedH = renderedRect ? renderedRect.height : 0\n\n return {\n slideIdx,\n domSlideIdx,\n cropRect,\n imgEl,\n objPos,\n renderedW,\n renderedH,\n renderedRect\n }\n}\n\ntype ThumbInfo = {\n slideIdx: number\n domSlideIdx: number\n cropRect: DOMRect\n imgEl: HTMLImageElement | null\n objPos: { x: number; y: number }\n renderedW: number\n renderedH: number\n renderedRect: DOMRect | null\n}\n\nfunction moveBaseSliderToSlide(\n centerAlign: boolean,\n sliderRef: RefObject<HTMLDivElement | null>,\n slidesRef: RefObject<{ cells: { element: HTMLElement; index: number }[]; target: number }[]>,\n selectedIndex: RefObject<number>,\n sliderX: RefObject<number>,\n sliderVelocity: RefObject<number>,\n centerSlider: (() => void) | undefined,\n newIndex: number,\n setSliderIndex: (i: number, mode: IndexMode) => void\n) {\n const slider = sliderRef.current\n const slides = slidesRef.current\n if (!slider || !slides) return\n const viewport = getViewportEl(slider)\n if (!viewport) return\n\n const totalWidth = getTotalCellsWidth(slides)\n const containerWidth = viewport.clientWidth\n const firstCellWidthOfSlide = slides[newIndex].cells[0].element.clientWidth\n const center = centerAlign ? (containerWidth - firstCellWidthOfSlide) / 2 : 0\n\n const matchSlide = slides[newIndex]\n selectedIndex.current = newIndex\n setSliderIndex(newIndex, 'instant');\n\n sliderX.current = totalWidth <= containerWidth ? 0 : -matchSlide.target + center\n\n sliderVelocity.current = 0\n slider.style.transform = `translate3d(${px(sliderX.current)},0,0)`\n\n centerSlider?.()\n}\n\nasync function captureVideoFrame(video: HTMLVideoElement): Promise<HTMLImageElement | null> {\n try {\n const w = video.videoWidth || Math.round(video.getBoundingClientRect().width) || 1\n const h = video.videoHeight || Math.round(video.getBoundingClientRect().height) || 1\n if (!w || !h) return null\n const canvas = document.createElement('canvas')\n canvas.width = w\n canvas.height = h\n const ctx = canvas.getContext('2d')\n if (!ctx) return null\n ctx.drawImage(video, 0, 0, w, h)\n const dataURL = canvas.toDataURL('image/png')\n const img = new Image()\n img.decoding = 'async'\n img.src = dataURL\n await img.decode().catch(() => {})\n return img\n } catch {\n return null\n }\n}\n\nfunction extractPlyrPoster(wrapperEl: HTMLElement | null): string | null {\n if (!wrapperEl) return null\n const v = wrapperEl.querySelector('video') as HTMLVideoElement | null\n if (v?.poster) return v.poster\n const posterEl = wrapperEl.querySelector('.plyr__poster') as HTMLElement | null\n if (posterEl) {\n const bg = getComputedStyle(posterEl).backgroundImage\n const match = bg && /url\\([\"']?(.*?)[\"']?\\)/.exec(bg)\n if (match?.[1]) return match[1]\n }\n return null\n}\n\nasync function makeVideoProxy(\n movingVideo: HTMLVideoElement,\n wrapperEl: HTMLElement | null\n): Promise<HTMLImageElement> {\n const frame = await captureVideoFrame(movingVideo)\n if (frame) return frame\n\n const posterURL = extractPlyrPoster(wrapperEl)\n const img = new Image()\n img.decoding = 'async'\n if (posterURL) {\n img.src = posterURL\n try { await img.decode() } catch {}\n } else {\n const w = movingVideo.videoWidth || 1\n const h = movingVideo.videoHeight || 1\n const c = document.createElement('canvas')\n c.width = Math.max(1, w)\n c.height = Math.max(1, h)\n img.src = c.toDataURL('image/png')\n }\n return img\n}\n\nfunction getVideoObjPos(videoEl: HTMLVideoElement | null): { x: number; y: number } {\n if (!videoEl) return { x: 0.5, y: 0.5 };\n const cs = getComputedStyle(videoEl);\n return parseObjectPosition(cs?.objectPosition ?? null);\n}\n\nfunction styleProxyImage(\n img: HTMLImageElement,\n objPos: { x: number; y: number }\n) {\n img.decoding = 'async';\n (img as any).loading = 'eager';\n img.draggable = false;\n img.style.pointerEvents = 'none';\n img.style.objectFit = 'cover';\n img.style.objectPosition = `${Math.round(objPos.x * 100)}% ${Math.round(objPos.y * 100)}%`;\n}\n\nfunction isElementOnScreen(el: HTMLElement, visibleThreshold = 0.4): boolean {\n const rect = el.getBoundingClientRect()\n const vh = window.innerHeight || document.documentElement.clientHeight\n\n const visibleHeight = Math.min(rect.bottom, vh) - Math.max(rect.top, 0)\n if (visibleHeight <= 0) return false\n\n return visibleHeight >= rect.height * visibleThreshold\n}\n\nasync function scrollEntrySectionIntoView(entryIndex: number): Promise<void> {\n if (typeof window === 'undefined') return\n\n const section = document.querySelector<HTMLElement>(\n `[data-rmg-entry-owner=\"${entryIndex}\"]`\n )\n\n if (!section) return\n\n if (isElementOnScreen(section, 0.5)) return\n\n const rect = section.getBoundingClientRect()\n const currentScroll = window.scrollY || document.documentElement.scrollTop || 0\n\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight || rect.height\n const targetTop =\n rect.top + currentScroll - (viewportHeight - rect.height) / 2\n\n window.scrollTo({\n top: targetTop,\n behavior: 'instant',\n })\n}\n\nasync function scrollElementIntoCenterView(el: HTMLElement | null): Promise<void> {\n if (!el) return;\n\n if (isElementOnScreen(el, 0.5)) return;\n\n const rect = el.getBoundingClientRect();\n const scrollY =\n window.scrollY ||\n document.documentElement.scrollTop ||\n 0;\n\n const viewportHeight =\n window.innerHeight ||\n document.documentElement.clientHeight ||\n rect.height;\n\n const targetTop =\n rect.top + scrollY - (viewportHeight - rect.height) / 2;\n\n window.scrollTo({\n top: targetTop,\n behavior: 'instant',\n });\n}\n\ntype VideoProxyCloseArgs = {\n fsSliderEl: HTMLElement;\n nodeIdx: number;\n thumbCropRect: DOMRect;\n endObjPos: { x: number; y: number };\n captionClone: HTMLElement | null;\n\n safeTeardown: () => void;\n onCaptionCloneGone?: () => void;\n DURATION_MS: number;\n EASING: string;\n};\n\nasync function animateVideoCloseProxy({\n fsSliderEl,\n nodeIdx,\n thumbCropRect,\n endObjPos,\n captionClone,\n safeTeardown,\n onCaptionCloneGone,\n DURATION_MS,\n EASING\n}: VideoProxyCloseArgs): Promise<void> {\n const wrapperEl =\n (fsSliderEl.querySelector(`.rmg__player[data-index=\"${nodeIdx}\"]`) as HTMLElement | null) ||\n (fsSliderEl.querySelector('.rmg__player') as HTMLElement | null) ||\n null;\n\n const fsVideo = wrapperEl?.querySelector('video') as HTMLVideoElement | null;\n\n const fsRect =\n wrapperEl?.getBoundingClientRect?.() ||\n fsVideo?.getBoundingClientRect?.();\n\n if (!fsRect) {\n safeTeardown();\n return;\n }\n\n if (wrapperEl) {\n freezeRect(wrapperEl);\n wrapperEl.style.visibility = 'hidden';\n wrapperEl.style.opacity = '0';\n const poster = wrapperEl.querySelector('.plyr__poster') as HTMLElement | null;\n if (poster) poster.style.opacity = '0';\n const controls = wrapperEl.querySelector('.plyr__controls') as HTMLElement | null;\n if (controls) controls.style.opacity = '0';\n }\n\n if (fsVideo) {\n try { fsVideo.pause(); } catch {}\n fsVideo.muted = true;\n }\n\n const vidForProxy =\n fsVideo || (wrapperEl?.querySelector('video') as HTMLVideoElement | null);\n\n if (!vidForProxy) {\n safeTeardown();\n return;\n }\n\n const proxyImg = await makeVideoProxy(vidForProxy, wrapperEl);\n\n styleProxyImage(proxyImg, endObjPos);\n\n const natW = proxyImg.naturalWidth || 1;\n const natH = proxyImg.naturalHeight || 1;\n\n const startObjPos = getVideoObjPos(fsVideo);\n\n const startT = coverTransformForRect(natW, natH, fsRect, startObjPos);\n const endT = coverTransformForRect(natW, natH, thumbCropRect, endObjPos);\n\n const movingProxy = proxyImg as unknown as HTMLElement;\n\n Object.assign(movingProxy.style, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: `${natW}px`,\n height: `${natH}px`,\n maxWidth: 'none',\n maxHeight: 'none',\n transformOrigin: '50% 50%',\n willChange: 'transform',\n zIndex: '2147483601',\n opacity: '1',\n transition: 'none',\n } as CSSStyleDeclaration);\n\n movingProxy.style.transform =\n `translate3d(${startT.cx}px, ${startT.cy}px, 0)` +\n ` translate3d(${-natW / 2}px, ${-natH / 2}px, 0)` +\n ` scale(${startT.scale})`;\n\n const clipper = createClipper({DURATION_MS, EASING});\n clipper.style.clipPath = insetForRect(fsRect);\n clipper.appendChild(movingProxy);\n\n void movingProxy.offsetWidth;\n void clipper.offsetWidth;\n\n const cleanup = () => {\n if (captionClone) {\n try { captionClone.remove(); } catch {}\n onCaptionCloneGone?.();\n }\n try { document.body.removeChild(clipper); } catch {}\n try { (movingProxy as HTMLElement).remove(); } catch {}\n safeTeardown();\n };\n\n const onEnd = (ev: TransitionEvent) => {\n if (ev.propertyName !== 'transform') return;\n (movingProxy as HTMLElement).removeEventListener('transitionend', onEnd as any);\n cleanup();\n };\n\n requestAnimationFrame(() => {\n clipper.style.clipPath = insetForRect(thumbCropRect);\n (movingProxy as HTMLElement).style.transition = `transform ${DURATION_MS}ms ${EASING}`;\n (movingProxy as HTMLElement).style.transform =\n `translate3d(${endT.cx}px, ${endT.cy}px, 0)` +\n ` translate3d(${-natW / 2}px, ${-natH / 2}px, 0)` +\n ` scale(${endT.scale})`;\n\n (movingProxy as HTMLElement).addEventListener('transitionend', onEnd as any, { once: true });\n\n window.setTimeout(() => {\n (movingProxy as HTMLElement).removeEventListener('transitionend', onEnd as any);\n cleanup();\n }, DURATION_MS + 120);\n });\n}\n\nexport const FullscreenModal: React.FC<FullscreenModalProps> = ({\n children,\n fsSub,\n open,\n onClose,\n isClick,\n isAnimating,\n overlayDivRef,\n closeButtonRef,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n cells,\n setShowFullscreenSlider,\n imageCount,\n setClosingModal,\n slides,\n slider,\n visibleImagesRef,\n selectedIndex,\n sliderX,\n sliderVelocity,\n isWrapping,\n wrappedItems,\n centerAlign,\n centerSlider,\n setSliderIndex,\n onForceResetZoom,\n layout,\n expandableImgRefs,\n entryMapRef,\n entryMediaLayout,\n introFade,\n introDuration = 300,\n introEasing = 'cubic-bezier(.4,0,.22,1)',\n requestFsCloseRef,\n fs,\n styles,\n direction\n}) => {\n const DURATION_MS = introDuration\n const EASING = introEasing\n\n const modalRef = React.useRef<HTMLDivElement | null>(null);\n const pointerDownX = React.useRef<number>(0)\n const pointerDownY = React.useRef<number>(0)\n\n const shieldRef = React.useRef<HTMLDivElement | null>(null);\n\n function mountShield() {\n if (shieldRef.current) return;\n\n const shield = document.createElement('div');\n shield.setAttribute('data-rmg-fs-shield', 'true');\n\n Object.assign(shield.style, {\n position: 'fixed',\n inset: '0',\n zIndex: '2147483606',\n background: 'transparent',\n pointerEvents: 'auto',\n touchAction: 'none',\n cursor: 'default',\n } as CSSStyleDeclaration);\n\n const stop = (e: Event) => {\n e.preventDefault?.();\n e.stopPropagation?.();\n };\n\n shield.addEventListener('pointerdown', stop, { capture: true });\n shield.addEventListener('pointerup', stop, { capture: true });\n shield.addEventListener('pointermove', stop, { capture: true });\n shield.addEventListener('click', stop, { capture: true });\n shield.addEventListener('dblclick', stop, { capture: true });\n shield.addEventListener('contextmenu', stop, { capture: true });\n shield.addEventListener('touchstart', stop, { capture: true, passive: false } as any);\n shield.addEventListener('touchmove', stop, { capture: true, passive: false } as any);\n shield.addEventListener('touchend', stop, { capture: true, passive: false } as any);\n shield.addEventListener('wheel', stop, { capture: true, passive: false } as any);\n\n shield.addEventListener(\n 'keydown',\n stop,\n { capture: true } as any\n );\n\n document.body.appendChild(shield);\n shieldRef.current = shield;\n }\n\n function unmountShield() {\n const shield = shieldRef.current;\n if (!shield) return;\n try { shield.remove(); } catch {}\n shieldRef.current = null;\n }\n\n useEffect(() => {\n return () => unmountShield();\n }, []);\n\n type ElementStyleLike = { className?: string; style?: React.CSSProperties } | null | undefined;\n\n function mergeClassNames(...parts: Array<string | undefined | null | false>) {\n return parts.filter(Boolean).join(\" \");\n }\n\n function styleFromElementStyle(es?: ElementStyleLike) {\n return (es?.style ?? undefined) as React.CSSProperties | undefined;\n }\n\n function classFromElementStyle(es?: ElementStyleLike) {\n return es?.className ?? \"\";\n }\n \n function getArrowAction(side: \"left\" | \"right\", isRtl: boolean): \"prev\" | \"next\" {\n // visual-left button means \"previous\" in LTR, but \"next\" in RTL\n if (side === \"left\") return isRtl ? \"next\" : \"prev\";\n return isRtl ? \"prev\" : \"next\";\n }\n\n function runArrowAction(fsSub: FullscreenSliderSub, action: \"prev\" | \"next\") {\n if (action === \"next\") fsSub.requestNext();\n else fsSub.requestPrev();\n }\n\n function withinFs<T extends Element = HTMLElement>(sel: string): T | null {\n const root = modalRef.current;\n return root ? (root.querySelector(sel) as T | null) : null;\n }\n\n useEffect(() => {\n if (!open) return;\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.preventDefault();\n e.stopPropagation();\n proceedToClose();\n };\n\n window.addEventListener(\"keydown\", onKeyDown, { capture: true });\n return () => window.removeEventListener(\"keydown\", onKeyDown, { capture: true } as any);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n function nodeIdxFromFs(fsIdx: number, imageCount: number) {\n const fsSlider = withinFs<HTMLElement>('.fullscreen_slider');\n if (!fsSlider) return Math.max(0, Math.min(imageCount + 1, fsIdx + 1));\n\n let currentTranslateX = 0;\n const transform = getComputedStyle(fsSlider).transform;\n if (transform !== 'none') {\n const matrix = new DOMMatrixReadOnly(transform);\n currentTranslateX = matrix.m41;\n }\n\n if (imageCount === 1) return 0;\n if (fsIdx === 0 && Math.abs(currentTranslateX) >= fsSlider.getBoundingClientRect().width) return imageCount + 1;\n if (fsIdx === 0) return 1;\n if (fsIdx === imageCount + 1) return imageCount + 1;\n return Math.max(1, Math.min(imageCount, fsIdx + 1));\n }\n\n function cloneFsCaptionForNode(\n fsRoot: HTMLElement | null,\n nodeIdx: number\n ): HTMLElement | null {\n if (!fsRoot) return null\n\n const activeMediaEl =\n fsRoot.querySelector<HTMLElement>(`[data-index=\"${nodeIdx}\"]`) ?? null\n\n const activeSlideEl = activeMediaEl\n ? (activeMediaEl.closest('[data-rmg-fs-slide=\"true\"]') as HTMLElement | null)\n : null\n\n const activeCaptionEl =\n activeSlideEl?.querySelector<HTMLElement>('[data-rmg-fs-caption=\"true\"]') ?? null\n\n if (!activeCaptionEl) return null\n\n const r = activeCaptionEl.getBoundingClientRect()\n\n const captionClone = activeCaptionEl.cloneNode(true) as HTMLElement\n Object.assign(captionClone.style, {\n position: 'fixed',\n left: `${Math.round(r.left)}px`,\n top: `${Math.round(r.top)}px`,\n width: `${Math.round(r.width)}px`,\n height: `${Math.round(r.height)}px`,\n margin: '0',\n transform: 'none',\n zIndex: '2147483602',\n pointerEvents: 'none',\n } as CSSStyleDeclaration)\n\n document.body.appendChild(captionClone)\n\n activeCaptionEl.style.visibility = 'hidden'\n\n return captionClone\n }\n\n function fadeChrome() {\n const els = [\n leftChevronRef.current,\n rightChevronRef.current,\n counterRef.current,\n closeButtonRef.current,\n ];\n\n els.forEach((el) => {\n if (!el) return;\n el.classList.remove(styles.open);\n });\n }\n\n function fadeNonActiveSlides(fsSlider: HTMLElement, nodeIdx: number, targetImg: HTMLImageElement | null, isVideoSlide: boolean) {\n if (isVideoSlide) {\n fsSlider.querySelectorAll<HTMLElement>('[data-index]').forEach(el => {\n if (el.dataset.index === String(nodeIdx)) return;\n el.style.transition = 'opacity 0.3s cubic-bezier(.4,0,.22,1)';\n el.style.opacity = '0';\n });\n return;\n }\n\n fsSlider.querySelectorAll<HTMLElement>('[data-rmg-fs-slide=\"true\"]').forEach(slide => {\n if (targetImg && slide.contains(targetImg)) return;\n slide.style.transition = 'opacity 0.3s cubic-bezier(.4,0,.22,1)';\n slide.style.opacity = '0';\n });\n }\n\n function fadeOverlay() {\n const ov = overlayDivRef.current;\n if (!ov) return;\n ov.style.transition = `opacity ${DURATION_MS}ms ${EASING}`;\n ov.style.opacity = '0';\n ov.style.pointerEvents = 'none';\n }\n\n function isVideoItem(m: MediaItem | null | undefined): boolean {\n if (!m) return false;\n return (m as any).kind === 'video' || /\\.(mp4|webm|ogg)$/i.test((m as any).src || '');\n }\n\n function fadeCloseAndTeardown() {\n fadeChrome()\n\n fadeOverlay()\n\n const fsSlider = withinFs<HTMLElement>('.fullscreen_slider');\n if (fsSlider) {\n fsSlider.style.transition = `opacity ${DURATION_MS}ms ${EASING}`;\n fsSlider.style.opacity = '0';\n }\n\n const modal = withinFs<HTMLElement>('.fs_modal');\n if (modal) {\n modal.style.transition = `opacity ${DURATION_MS}ms ${EASING}`;\n modal.style.opacity = '0';\n modal.style.pointerEvents = 'none';\n }\n\n window.setTimeout(() => {\n safeTeardown();\n }, DURATION_MS + 40);\n }\n\n async function proceedToClose() {\n if (!open) return;\n\n mountShield();\n isAnimating.current = false;\n isClick.current = false;\n cells.current = [];\n setClosingModal(true);\n\n const originals = wrappedItems.slice(1, wrappedItems.length - 1);\n if (!originals.length) {\n safeTeardown();\n return;\n }\n\n const fsIdx = fsSub.get();\n\n const isGridish =\n layout === \"grid\" ||\n layout === \"masonry\" ||\n entryMediaLayout === \"grid\" ||\n entryMediaLayout === \"masonry\";\n\n const computeThumbCropRectFromImg = (img: HTMLImageElement): { cropRect: DOMRect; objPos: { x: number; y: number } } => {\n const box = img.getBoundingClientRect();\n const cs = getComputedStyle(img);\n const objPos = parseObjectPosition(cs?.objectPosition ?? null) ?? { x: 0.5, y: 0.5 };\n const fit = (cs?.objectFit ?? \"cover\") as \"contain\" | \"cover\";\n\n if (fit !== \"contain\") return { cropRect: box, objPos };\n\n const natW = Math.max(1, img.naturalWidth || 0);\n const natH = Math.max(1, img.naturalHeight || 0);\n const cropRect = objectFitContentRect(natW, natH, box, \"contain\", objPos);\n return { cropRect, objPos };\n };\n\n const animateCloseToThumb = async (args: {\n thumbCropRect: DOMRect;\n endObjPos: { x: number; y: number };\n isVideoSlide: boolean;\n }) => {\n const fsSlider = withinFs<HTMLElement>(\".fullscreen_slider\");\n if (!fsSlider) {\n safeTeardown();\n return;\n }\n\n const nodeIdx = nodeIdxFromFs(fsSub.get(), imageCount);\n\n const targetImg =\n !args.isVideoSlide\n ? fsSlider.querySelector<HTMLImageElement>(`img[data-index=\"${nodeIdx}\"]`) ?? null\n : null;\n\n if (!targetImg && !args.isVideoSlide) {\n safeTeardown();\n return;\n }\n\n fadeNonActiveSlides(fsSlider, nodeIdx, targetImg, args.isVideoSlide);\n\n let captionClone: HTMLElement | null = cloneFsCaptionForNode(fsSlider, nodeIdx);\n if (captionClone) {\n captionClone.style.transition = `opacity ${DURATION_MS}ms ${EASING}`;\n void captionClone.offsetWidth;\n captionClone.style.opacity = \"0\";\n }\n\n // video path\n if (args.isVideoSlide) {\n await animateVideoCloseProxy({\n fsSliderEl: fsSlider,\n nodeIdx,\n thumbCropRect: args.thumbCropRect,\n endObjPos: args.endObjPos ?? { x: 0.5, y: 0.5 },\n captionClone,\n safeTeardown,\n DURATION_MS,\n EASING,\n });\n return;\n }\n\n // image path\n const movingEl = targetImg as unknown as HTMLElement;\n if (!movingEl) {\n safeTeardown();\n return;\n }\n\n const restoreIntoParent = movingEl.parentNode || null;\n const restoreNextSibling = movingEl.nextSibling || null;\n\n const fsCS = targetImg ? getComputedStyle(targetImg) : null;\n const fsObjPos = parseObjectPosition(fsCS?.objectPosition ?? null);\n\n const imgEl = movingEl as HTMLImageElement;\n const fsFit = ((getComputedStyle(targetImg!).objectFit || \"contain\") as \"contain\" | \"cover\");\n const curRect = movingEl.getBoundingClientRect();\n const natW = imgEl.naturalWidth || curRect.width || 1;\n const natH = imgEl.naturalHeight || curRect.height || 1;\n\n const startT =\n fsFit === \"contain\"\n ? containTransformForRect(natW, natH, curRect, fsObjPos)\n : coverTransformForRect(natW, natH, curRect, fsObjPos);\n\n const endT = coverTransformForRect(natW, natH, args.thumbCropRect, args.endObjPos);\n\n const clipper = createClipper({ DURATION_MS, EASING });\n\n const previous = {\n position: movingEl.style.position,\n left: movingEl.style.left,\n top: movingEl.style.top,\n width: movingEl.style.width,\n height: movingEl.style.height,\n maxWidth: movingEl.style.maxWidth,\n maxHeight: movingEl.style.maxHeight,\n transformOrigin: movingEl.style.transformOrigin,\n transform: movingEl.style.transform,\n transition: movingEl.style.transition,\n willChange: movingEl.style.willChange,\n zIndex: (movingEl.style as any).zIndex,\n opacity: movingEl.style.opacity,\n };\n\n Object.assign(movingEl.style, {\n position: \"fixed\",\n left: \"0\",\n top: \"0\",\n width: `${natW}px`,\n height: `${natH}px`,\n maxWidth: \"none\",\n maxHeight: \"none\",\n transformOrigin: \"50% 50%\",\n willChange: \"transform\",\n zIndex: \"1\",\n opacity: \"1\",\n transition: \"none\",\n } as CSSStyleDeclaration);\n\n movingEl.style.transform =\n `translate3d(${startT.cx}px, ${startT.cy}px, 0)` +\n ` translate3d(${-natW / 2}px, ${-natH / 2}px, 0)` +\n ` scale(${startT.scale})`;\n\n clipper.appendChild(movingEl);\n\n void movingEl.offsetWidth;\n void clipper.offsetWidth;\n\n const targetInset = insetForRect(args.thumbCropRect);\n requestAnimationFrame(() => {\n clipper.style.clipPath = targetInset;\n movingEl.style.transition = `transform ${DURATION_MS}ms ${EASING}`;\n movingEl.style.transform =\n `translate3d(${endT.cx}px, ${endT.cy}px, 0)` +\n ` translate3d(${-natW / 2}px, ${-natH / 2}px, 0)` +\n ` scale(${endT.scale})`;\n });\n\n const finish = () => {\n if (captionClone) {\n try { captionClone.remove(); } catch {}\n captionClone = null;\n }\n\n movingEl.removeEventListener(\"transitionend\", onEnd as any);\n\n try {\n if (restoreIntoParent) {\n if (restoreNextSibling) (restoreIntoParent as Node).insertBefore(movingEl, restoreNextSibling);\n else (restoreIntoParent as Node).appendChild(movingEl);\n }\n } catch {}\n\n try { document.body.removeChild(clipper); } catch {}\n Object.assign(movingEl.style, previous);\n safeTeardown();\n };\n\n const onEnd = (ev: TransitionEvent) => {\n if (ev.propertyName !== \"transform\") return;\n finish();\n };\n\n movingEl.addEventListener(\"transitionend\", onEnd as any, { once: true });\n window.setTimeout(() => finish(), DURATION_MS + 80);\n };\n\n // ---- resolve canonicalIdx + destination thumb info (layout-specific) ----\n let canonicalIdx = 0;\n let localSlideIdx = 0;\n\n if (!isGridish) {\n // slider canonical logic\n if (!slider.current || !slides.current?.length) return;\n\n const fsIndex = fsIdx;\n if (isWrapping.current) {\n if (\n slider.current &&\n fsIndex >= slider.current.children.length - (visibleImagesRef.current || 0) * 2 &&\n layout !== \"entries\"\n ) {\n canonicalIdx = 0;\n } else {\n canonicalIdx = fsIndex;\n }\n } else {\n const maxMedia = Math.max(0, originals.length - 1);\n canonicalIdx = Math.min(Math.max(0, fsIndex), maxMedia);\n }\n\n localSlideIdx = canonicalIdx;\n\n if (layout === \"entries\" && entryMapRef?.current) {\n const link = entryMapRef.current[canonicalIdx];\n if (link) {\n localSlideIdx = link.mediaIndex;\n await scrollEntrySectionIntoView(link.entryIndex);\n }\n }\n } else {\n // grid canonical logic\n canonicalIdx = Math.max(0, Math.min(originals.length - 1, fsIdx));\n localSlideIdx = canonicalIdx;\n\n // center the grid cell + entries section if needed\n const el = document.querySelector<HTMLElement>(`[data-rmg-idx=\"${canonicalIdx}\"]`);\n await scrollElementIntoCenterView(el);\n\n if (layout === \"entries\" && entryMapRef?.current) {\n const link = entryMapRef.current[canonicalIdx];\n if (link) {\n await scrollEntrySectionIntoView(link.entryIndex);\n }\n }\n }\n\n const url = originals[canonicalIdx];\n const isVideoSlide = isVideoItem(url);\n\n if (introFade || isVideoSlide) {\n fadeCloseAndTeardown();\n return;\n }\n\n // shared chrome fade\n fadeChrome();\n fadeOverlay();\n\n // ---- compute thumb rect + objPos, then animate ----\n if (!isGridish) {\n // slider destination: ensure thumb visible (may move slider), then measure\n if (!slider.current || !slides.current?.length) {\n safeTeardown();\n return;\n }\n\n const viewport = getViewportEl(slider.current);\n if (!viewport) {\n safeTeardown();\n return;\n }\n\n const slideArr = slides.current!;\n let matchSlide = slideArr.find((s) => s.cells.some((c) => c.index === localSlideIdx));\n let newIndex = matchSlide ? slideArr.indexOf(matchSlide) : -1;\n\n if (newIndex < 0) {\n newIndex = slideArr.length - 1;\n matchSlide = slideArr[slideArr.length - 1];\n }\n\n if (!matchSlide) {\n safeTeardown();\n return;\n }\n\n const targetCellEl =\n matchSlide.cells.find((c) => c.index === localSlideIdx)?.element ??\n matchSlide.cells[0]?.element ??\n null;\n\n const shouldMove = !!(viewport && targetCellEl) && !isCellVisible(targetCellEl!, viewport, true);\n\n const measureAndAnimate = async () => {\n const thumbInfo = findThumbInfoEnsuringVisible(\n localSlideIdx,\n centerAlign,\n slider,\n slides,\n selectedIndex,\n sliderX,\n sliderVelocity,\n centerSlider,\n isWrapping,\n visibleImagesRef,\n setSliderIndex\n );\n\n if (!thumbInfo) {\n safeTeardown();\n return;\n }\n\n // Prefer the actual image content rect if present\n let thumbCropRect = thumbInfo.cropRect;\n let endObjPos = thumbInfo.objPos ?? { x: 0.5, y: 0.5 };\n\n if (thumbInfo.imgEl) {\n const { cropRect, objPos } = computeThumbCropRectFromImg(thumbInfo.imgEl);\n thumbCropRect = cropRect;\n endObjPos = objPos;\n }\n\n await animateCloseToThumb({\n thumbCropRect,\n endObjPos,\n isVideoSlide: false,\n });\n };\n\n if (shouldMove) {\n moveBaseSliderToSlide(\n centerAlign,\n slider,\n slides,\n selectedIndex,\n sliderX,\n sliderVelocity,\n centerSlider,\n newIndex,\n setSliderIndex\n );\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => { void measureAndAnimate(); });\n });\n } else {\n await measureAndAnimate();\n }\n\n return;\n }\n\n // grid destination: use expandableImgRefs\n if (!expandableImgRefs?.current) {\n safeTeardown();\n return;\n }\n\n const origImgRef =\n (expandableImgRefs.current?.[canonicalIdx] as unknown as HTMLImageElement | null) ?? null;\n\n if (!origImgRef) {\n safeTeardown();\n return;\n }\n\n const { cropRect: thumbCropRect, objPos: endObjPos } = computeThumbCropRectFromImg(origImgRef);\n\n await animateCloseToThumb({\n thumbCropRect,\n endObjPos,\n isVideoSlide: false,\n });\n }\n\n useEffect(() => {\n requestFsCloseRef.current = () => {\n void proceedToClose();\n };\n\n return () => {\n if (requestFsCloseRef.current) requestFsCloseRef.current = null;\n };\n }, [requestFsCloseRef, proceedToClose]);\n\n function safeTeardown() {\n unmountShield();\n\n if (!introFade) {\n const fsSlider = withinFs<HTMLElement>('.fullscreen_slider');\n if (fsSlider) fsSlider.style.opacity = '0';\n\n const modal = withinFs<HTMLElement>('.fs_modal');\n if (modal) {\n modal.style.opacity = '0';\n modal.style.pointerEvents = 'none';\n }\n }\n\n overlayDivRef.current?.remove()\n overlayDivRef.current = null\n\n onForceResetZoom()\n onClose()\n setShowFullscreenSlider(false)\n setClosingModal(false)\n }\n\n const closeEnabled = fs?.controls?.close?.enabled !== false;\n\n const close = () => void proceedToClose();\n\n const userNode =\n typeof fs?.controls?.close?.render === \"function\"\n ? fs?.controls?.close.render()\n : null;\n\n const allowFsArrows =\n fs?.controls?.arrows?.enabled !== false && imageCount > 1;\n\n const isRtl = direction === \"rtl\" || false;\n\n const arrows = fs?.controls?.arrows;\n\n const renderArrowNode = (dir: \"prev\" | \"next\", side: \"left\" | \"right\") => {\n const explicit =\n dir === \"prev\"\n ? typeof arrows?.renderPrev === \"function\" ? arrows.renderPrev() : null\n : typeof arrows?.renderNext === \"function\" ? arrows.renderNext() : null;\n\n if (explicit != null) return explicit;\n\n if (typeof arrows?.render === \"function\") {\n const node = arrows.render({ dir });\n if (node != null) return node;\n }\n\n return <DefaultChevronIcon side={side} />;\n };\n\n function canonicalFromFsIndex(fsIndex: number, originalsLen: number) {\n return Math.max(0, Math.min(originalsLen - 1, fsIndex));\n }\n\n const originalsLen = Math.max(0, wrappedItems.length - 2);\n const canonicalIdx = canonicalFromFsIndex(fsSub.get(), Math.max(1, originalsLen));\n\n const counterEnabled = fs?.controls?.counter?.enabled !== false;\n const showCounter = counterEnabled && imageCount > 1;\n\n const userCounterNode =\n typeof fs?.controls?.counter?.render === \"function\"\n ? fs.controls.counter.render({ index: canonicalIdx, count: imageCount })\n : null;\n\n\n return (\n <div\n ref={modalRef}\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: 9999,\n display: 'block',\n touchAction: 'none',\n contain: 'layout style size',\n overflow: 'hidden',\n }}\n >\n {closeEnabled && (\n <button\n ref={closeButtonRef as any}\n type=\"button\"\n aria-label=\"Close\"\n onClick={() => close()}\n className={[\n styles?.closeBtn,\n fs?.controls?.close?.className ?? \"\",\n open ? styles.open : \"\",\n ].filter(Boolean).join(\" \")}\n style={{\n ...fs?.controls?.close?.style,\n }}\n >\n {userNode ?? <DefaultCloseIcon />}\n </button>\n )}\n {allowFsArrows && (\n <>\n {/* LEFT */}\n <button\n ref={leftChevronRef as any}\n type=\"button\"\n aria-label={getArrowAction(\"left\", isRtl) === \"prev\" ? \"Previous\" : \"Next\"}\n onClick={() => runArrowAction(fsSub as any, getArrowAction(\"left\", isRtl))}\n className={mergeClassNames(\n styles?.leftChevron,\n classFromElementStyle(arrows?.arrow as any),\n classFromElementStyle(arrows?.prev as any),\n open ? styles.open : \"\"\n )}\n style={{\n ...(styleFromElementStyle(arrows?.arrow as any) ?? {}),\n ...(styleFromElementStyle(arrows?.prev as any) ?? {}),\n }}\n >\n {renderArrowNode(getArrowAction(\"left\", isRtl), \"left\")}\n </button>\n\n {/* RIGHT */}\n <button\n ref={rightChevronRef as any}\n type=\"button\"\n aria-label={getArrowAction(\"right\", isRtl) === \"prev\" ? \"Previous\" : \"Next\"}\n onClick={() => runArrowAction(fsSub as any, getArrowAction(\"right\", isRtl))}\n className={mergeClassNames(\n styles?.rightChevron,\n classFromElementStyle(arrows?.arrow as any),\n classFromElementStyle(arrows?.next as any),\n open ? styles.open : \"\"\n )}\n style={{\n ...(styleFromElementStyle(arrows?.arrow as any) ?? {}),\n ...(styleFromElementStyle(arrows?.next as any) ?? {}),\n }}\n >\n {renderArrowNode(getArrowAction(\"right\", isRtl), \"right\")}\n </button>\n </>\n )}\n {showCounter && (\n <div\n ref={counterRef as any}\n className={[\n styles?.counter,\n fs?.controls?.counter?.className ?? \"\",\n open ? styles.open : \"\",\n ].filter(Boolean).join(\" \")}\n style={{\n ...(fs?.controls?.counter?.style ?? {}),\n }}\n >\n {userCounterNode ?? (\n <DefaultCounterText index={canonicalIdx} count={imageCount} />\n )}\n </div>\n )}\n {children}\n </div>\n )\n}\n\nexport default FullscreenModal",".rtl {}\n\n.track { position: relative; left: 0; }\n.rtl .track { left: auto; right: 0; }\n\n[data-rmg-plyr-provider='mp4'] :global(.plyr__video-wrapper),\n[data-rmg-plyr-provider='vimeo'] :global(.plyr__video-wrapper) {\n pointer-events: none !important;\n}","/* 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 type { APITypes } from 'plyr-react'\nimport styles from './FullscreenSlider.module.css'\nimport type { FullscreenSliderSub, FSRequest } from './fullscreenSliderSub'\nimport { createDragTracker } from '../shared/input/dragTracker'\nimport { Vector1D, Vector1DType } from '../shared/motion/vector1d'\nimport { ScrollBody, ScrollBodyType } from '../shared/motion/scrollBody'\nimport { Limit } from '../shared/motion/limit'\nimport { ScrollLooper } from '../shared/motion/scrollLooper'\nimport { BaseTarget, factorAbs, mathSign, ScrollTarget, ScrollTargetType } from '../shared/motion/scrollTarget'\nimport { Animations, AnimationsType } from '../shared/motion/animations'\nimport { EventStore } from '../shared/motion/eventStore'\nimport { MediaItem } from '../shared/types/media'\nimport { isMouseEvent } from '../shared/input/pointerTypes'\nimport { WindowType } from '../shared/input/pointerTypes'\nimport { FullscreenAxisType as AxisType, FullscreenAxis as Axis, FullscreenAxisLike as AxisLike } from '../shared/types/axis'\nimport { TranslateFullscreen as Translate } from '../shared/motion/translate'\nimport { createBaseLimit } from '../shared/motion/baseLimit'\nimport { Counter, CounterType } from '../shared/motion/counter'\n\nconst clamp01 = (n: number) => Math.max(0, Math.min(1, n))\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3)\n\nfunction DragTracker(axis: AxisLike, ownerWindow: WindowType) {\n return createDragTracker({\n ownerWindow,\n axis,\n })\n}\n\ntype FsScrollTo = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\ntype FsLimit = {\n min: number\n max: number\n reachedAny: (n: number) => boolean\n constrain: (n: number) => number\n removeOffset: (n: number) => number\n}\n\ninterface FullscreenSliderProps {\n sub: FullscreenSliderSub\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<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>,\n imageRef: React.RefObject<HTMLDivElement | null>\n ) => void\n imageRefs: React.RefObject<HTMLDivElement | 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 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 direction?: 'ltr' | 'rtl';\n isWrapping: RefObject<boolean>\n sliderDuration: number;\n sliderFriction: number;\n suppressLoopRef: React.RefObject<boolean>;\n fadeOpening: boolean;\n introFade?: boolean;\n slideFade?: boolean;\n slideFadeDuration?: number;\n slideFadeEasing?: string;\n normalizedItems: MediaItem[];\n introDuration?: number;\n introEasing?: string;\n resetAllZoomDom: () => void;\n requestFsCloseRef: React.RefObject<null | (() => void)>;\n}\n\nexport interface FullscreenSliderHandle {\n centerSlider(): void\n}\n\nexport const FullscreenSlider = forwardRef<FullscreenSliderHandle, FullscreenSliderProps>(\n (\n {\n sub,\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 isZooming,\n plyrRefs,\n plyrRef,\n closingModal,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n closeButtonRef,\n overlayDivRef,\n direction,\n isWrapping,\n sliderDuration,\n sliderFriction,\n suppressLoopRef,\n fadeOpening,\n introFade,\n slideFade = false,\n slideFadeDuration = 120,\n slideFadeEasing = 'cubic-bezier(.4,0,.22,1)',\n normalizedItems,\n introDuration = 300,\n introEasing = 'cubic-bezier(.4,0,.22,1)',\n resetAllZoomDom,\n requestFsCloseRef\n },\n ref\n ) => {\n const isRtl = direction === 'rtl' ? true : false\n const rtlCls = isRtl ? styles.rtl : '';\n const sign = isRtl ? -1 : 1;\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const slider = useRef<HTMLDivElement | null>(null)\n const axisRef = useRef<AxisType | null>(null)\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 isAnimatingRef = useRef(false)\n const pointerDownRef = useRef(false)\n const yTemp = useRef(0)\n const dragThreshold = 5\n const FADE_DISTANCE = 300\n const selectedIndex = useRef(0)\n const hasPositioned = useRef<boolean>(false)\n const perSlideRef = useRef(0)\n const contentSizeRef = useRef(0)\n const loopLimitRef = useRef<ReturnType<typeof Limit> | null>(null)\n const scrollSnapsRef = useRef<number[]>([])\n const scrollContentSizeRef = useRef(0)\n const scrollLimitRef = useRef<FsLimit | null>(null)\n const scrollTargetRef = useRef<ScrollTargetType | null>(null)\n const scrollToRef = useRef<FsScrollTo | null>(null)\n const slides = useRef<{ cells: { element: HTMLElement }[] }[]>([])\n const indexCurrentRef = useRef<CounterType | null>(null)\n const indexPreviousRef = useRef<CounterType | null>(null)\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 const dragStartY = useRef(0)\n const dragYForClose = useRef(0)\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 activeTouchCount = useRef(0)\n const wasPinch = useRef(false)\n const appliedYRef = useRef(0)\n type DragMode = 'none' | 'x' | 'y'\n const dragMode = useRef<DragMode>('none')\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 recenterWithAnchor = useCallback(() => {\n const track = slider.current;\n if (\n !track ||\n !locationRef.current ||\n !previousLocationRef.current ||\n !offsetLocationRef.current ||\n !targetRef.current\n ) {\n return;\n }\n\n const per = track.clientWidth || 1;\n perSlideRef.current = per;\n\n const len = slides.current.length || 1;\n const W = per * len;\n\n contentSizeRef.current = W;\n loopLimitRef.current = Limit(-W, 0);\n\n const snaps = Array.from({ length: len }, (_, i) => -per * i);\n scrollSnapsRef.current = snaps;\n\n const fsLimit = createBaseLimit(-W, 0);\n scrollLimitRef.current = fsLimit;\n\n if (loopLimitRef.current) {\n scrollTargetRef.current = ScrollTarget(\n true,\n snaps,\n W,\n loopLimitRef.current,\n targetRef.current\n );\n }\n\n const idx =\n indexCurrentRef.current?.get() ??\n selectedIndex.current ??\n 0;\n\n const nx = -per * idx;\n\n setAllX(nx);\n setTranslateX(nx, 0);\n animRef.current?.resetBlend();\n }, []);\n \n useEffect(() => {\n const el = slider.current;\n if (!el) return;\n\n const update = () => {\n recenterWithAnchor();\n };\n\n update();\n\n const ro = new ResizeObserver(update);\n ro.observe(el);\n\n return () => ro.disconnect();\n }, [show, recenterWithAnchor]);\n\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 function commitIndexChange(idx: number) {\n selectedIndex.current = idx;\n indexCurrentRef.current?.set(idx);\n sub.setLocalIndex(idx);\n updateCounterFromIndex(idx);\n\n resetAllZoomDom();\n }\n \n const GLOBAL_DRAG_ATTR = 'data-rmg-global-drag';\n const GLOBAL_DRAG_STYLE_ID = 'rmg-global-drag-style';\n\n function ensureGlobalDragStyle() {\n if (document.getElementById(GLOBAL_DRAG_STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = GLOBAL_DRAG_STYLE_ID;\n style.textContent = `\n html[${GLOBAL_DRAG_ATTR}] * { cursor: grabbing !important; }\n html[${GLOBAL_DRAG_ATTR}] { cursor: grabbing !important; }\n `;\n document.head.appendChild(style);\n }\n\n function setGlobalGrabbing(on: boolean) {\n const html = document.documentElement;\n if (!html) return;\n if (on) html.setAttribute(GLOBAL_DRAG_ATTR, '');\n else html.removeAttribute(GLOBAL_DRAG_ATTR);\n }\n\n function useGlobalGrabbingGuards() {\n const guardsRef = useRef<ReturnType<typeof EventStore> | null>(null);\n\n const start = () => {\n if (guardsRef.current) return;\n ensureGlobalDragStyle();\n setGlobalGrabbing(true);\n guardsRef.current = EventStore()\n .add(window, 'mouseup', stop, true)\n .add(window, 'pointerup', stop, true)\n .add(window, 'touchend', stop, { passive: true })\n .add(window, 'touchcancel', stop, { passive: true })\n .add(window, 'blur', stop, true)\n .add(document, 'visibilitychange', () => { if (document.hidden) stop(); });\n };\n\n const stop = () => {\n guardsRef.current?.clear();\n guardsRef.current = null;\n setGlobalGrabbing(false);\n };\n\n useEffect(() => stop, []);\n\n return { start, stop };\n }\n\n const { start: startGrabbing, stop: stopGrabbing } = useGlobalGrabbingGuards();\n\n const slideFadeBusyRef = useRef(false);\n\n const SLIDE_FADE_MS = slideFadeDuration;\n const SLIDE_FADE_EASING = slideFadeEasing\n\n function jumpToIndexInstant(idx: number) {\n const per = perSlide();\n const nx = -per * idx;\n\n animRef.current?.stop();\n bodyRef.current?.useDuration(0).useFriction(1);\n\n setAllX(nx);\n setTranslateX(nx, 0);\n\n commitIndexChange(idx);\n }\n\n function fadeToIndex(idx: number) {\n if (!slideFade) return;\n\n const track = slider.current;\n if (!track) return;\n\n if (!showFullscreenSlider) return;\n\n slideFadeBusyRef.current = true;\n\n const prevTransition = track.style.transition;\n const prevOpacity = track.style.opacity;\n\n track.style.transition = `opacity ${SLIDE_FADE_MS}ms ${SLIDE_FADE_EASING}`;\n\n const computed = window.getComputedStyle(track).opacity;\n track.style.opacity = computed;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (track as any).offsetWidth;\n\n track.style.opacity = '0';\n\n const t1 = window.setTimeout(() => {\n\n jumpToIndexInstant(idx);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (track as any).offsetWidth;\n\n track.style.opacity = '1';\n\n const t2 = window.setTimeout(() => {\n track.style.transition = prevTransition;\n if (!prevTransition) track.style.opacity = prevOpacity;\n\n slideFadeBusyRef.current = false;\n window.clearTimeout(t2);\n }, SLIDE_FADE_MS + 40);\n\n window.clearTimeout(t1);\n }, SLIDE_FADE_MS + 20);\n }\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(canonicalX: number, ny: number) {\n const nx = Math.round(canonicalX) * sign;\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 (closingModal) {\n animRef.current?.stop()\n pointerDownRef.current = false\n }\n }, [closingModal])\n\n useEffect(() => {\n if (!slider.current || hasPositioned.current) return\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) || (slideIndex === 0 && !isWrapping.current)) {\n selectedIndex.current = 0\n sub.setLocalIndex(0)\n setTimeout(() => {\n if (!slider.current) return\n const startX = 0\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 setTranslateX(startX, 0)\n } else {\n const sx = Math.round(startX) * sign\n slider.current.style.transform = `translate3d(${sx}px, 0, 0)`\n }\n }, 100)\n hasPositioned.current = true\n return\n }\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 sub.setLocalIndex(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 setTranslateX(startX, 0)\n } else {\n const sx = Math.round(startX) * sign\n slider.current.style.transform = `translate3d(${sx}px, 0, 0)`\n }\n }, 100)\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 function scrollToIndex(\n requested: number,\n opts: { jump?: boolean; direction?: number } = {}\n ) {\n const { jump = false, direction } = opts;\n\n const indexCurrent = indexCurrentRef.current;\n const fsScrollTo = scrollToRef.current;\n const body = bodyRef.current;\n\n if (!fsScrollTo || !body || !indexCurrent) return;\n\n const len = slideCount();\n const from = ((selectedIndex.current || 0) % len + len) % len;\n const to = ((requested || 0) % len + len) % len;\n\n const crossesSeam =\n len > 1 &&\n ((from === 0 && to === len - 1) || (from === len - 1 && to === 0));\n\n if (\n crossesSeam &&\n isZoomedRef.current &&\n imageCount > 1 &&\n selectedIndex.current === 0\n ) {\n const refs = imageRefs;\n\n const firstRealImg =\n refs[1]?.current?.querySelector('img') as HTMLElement | null;\n\n const firstCloneImg =\n refs[imageCount + 1]?.current?.querySelector('img') as HTMLElement | null;\n\n if (firstRealImg && firstCloneImg) {\n const extractScale = (el: HTMLElement | null): number => {\n if (!el) return 1;\n const tr = el.style.transform || '';\n const m = tr.match(/scale\\(([^)]+)\\)/);\n if (!m) return 1;\n const v = parseFloat(m[1]);\n return Number.isFinite(v) ? v : 1;\n };\n\n const readTransform = (el: HTMLElement): string => {\n let transform = el.style.transform;\n if (!transform) {\n const cs = window.getComputedStyle(el);\n transform = cs.transform !== 'none' ? cs.transform : '';\n }\n return transform || '';\n };\n\n const realScale = extractScale(firstRealImg);\n const cloneScale = extractScale(firstCloneImg);\n\n if (realScale > 1.01 && cloneScale <= 1.01) {\n const transform = readTransform(firstRealImg);\n firstCloneImg.style.transition = 'none';\n firstCloneImg.style.transform = transform;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (firstCloneImg as any).offsetWidth;\n }\n\n // Copy clone -> real if clone is zoomed but real isn't\n if (cloneScale > 1.01 && realScale <= 1.01) {\n const transform = readTransform(firstCloneImg);\n firstRealImg.style.transition = 'none';\n firstRealImg.style.transform = transform;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (firstRealImg as any).offsetWidth;\n }\n }\n }\n\n const targetIndex = indexCurrent.clone().set(requested).get();\n\n if (jump) {\n body.useDuration(0);\n } else {\n body.useBaseDuration().useBaseFriction();\n }\n\n const dir = typeof direction === 'number' ? direction : 0;\n fsScrollTo.index(targetIndex, dir);\n }\n\n function previous() {\n isVerticalScroll.current = false;\n isScrolling.current = false;\n isPinching.current = false;\n isTouchPinching.current = false;\n\n if (isZoomedRef.current && imageCount > 1 && selectedIndex.current === 0) {\n const refs = imageRefs;\n\n const firstRealImg =\n refs[1]?.current?.querySelector('img') as HTMLElement | null;\n const firstCloneImg =\n refs[imageCount + 1]?.current?.querySelector('img') as HTMLElement | null;\n\n if (firstRealImg && firstCloneImg) {\n const extractScale = (el: HTMLElement | null): number => {\n if (!el) return 1;\n const tr = el.style.transform || '';\n const m = tr.match(/scale\\(([^)]+)\\)/);\n if (!m) return 1;\n const v = parseFloat(m[1]);\n return Number.isFinite(v) ? v : 1;\n };\n\n const realScale = extractScale(firstRealImg);\n const cloneScale = extractScale(firstCloneImg);\n\n if (realScale > 1.01 && cloneScale <= 1.01) {\n let transform = firstRealImg.style.transform;\n if (!transform) {\n const cs = window.getComputedStyle(firstRealImg);\n transform = cs.transform !== 'none' ? cs.transform : '';\n }\n\n firstCloneImg.style.transition = 'none';\n firstCloneImg.style.transform = transform;\n\n (firstCloneImg as any).offsetWidth;\n }\n\n if (cloneScale > 1.01 && realScale <= 1.01) {\n let transform = firstCloneImg.style.transform;\n if (!transform) {\n const cs = window.getComputedStyle(firstCloneImg);\n transform = cs.transform !== 'none' ? cs.transform : '';\n }\n\n firstRealImg.style.transition = 'none';\n firstRealImg.style.transform = transform;\n\n (firstRealImg as any).offsetWidth;\n }\n }\n }\n\n const len = slideCount();\n const cur = selectedIndex.current || 0;\n const nextIdx = ((cur - 1) % len + len) % len;\n\n if (slideFade) {\n fadeToIndex(nextIdx);\n return;\n }\n\n const fsScrollTo = scrollToRef.current;\n const body = bodyRef.current;\n if (!fsScrollTo || !body) return;\n\n const step = perSlide();\n\n body.useBaseDuration().useBaseFriction();\n fsScrollTo.distance(step, true);\n }\n\n function next() {\n isVerticalScroll.current = false;\n isScrolling.current = false;\n isPinching.current = false;\n isTouchPinching.current = false;\n\n if (isZoomedRef.current && imageCount > 1 && selectedIndex.current === 0) {\n const refs = imageRefs;\n\n const firstRealImg =\n refs[1]?.current?.querySelector('img') as HTMLElement | null;\n const firstCloneImg =\n refs[imageCount + 1]?.current?.querySelector('img') as HTMLElement | null;\n\n if (firstRealImg && firstCloneImg) {\n const extractScale = (el: HTMLElement | null): number => {\n if (!el) return 1;\n const tr = el.style.transform || '';\n const m = tr.match(/scale\\(([^)]+)\\)/);\n if (!m) return 1;\n const v = parseFloat(m[1]);\n return Number.isFinite(v) ? v : 1;\n };\n\n const realScale = extractScale(firstRealImg);\n const cloneScale = extractScale(firstCloneImg);\n\n if (realScale > 1.01 && cloneScale <= 1.01) {\n let transform = firstRealImg.style.transform;\n if (!transform) {\n const cs = window.getComputedStyle(firstRealImg);\n transform = cs.transform !== 'none' ? cs.transform : '';\n }\n\n firstCloneImg.style.transition = 'none';\n firstCloneImg.style.transform = transform;\n\n (firstCloneImg as any).offsetWidth;\n }\n\n if (cloneScale > 1.01 && realScale <= 1.01) {\n let transform = firstCloneImg.style.transform;\n if (!transform) {\n const cs = window.getComputedStyle(firstCloneImg);\n transform = cs.transform !== 'none' ? cs.transform : '';\n }\n\n firstRealImg.style.transition = 'none';\n firstRealImg.style.transform = transform;\n\n (firstRealImg as any).offsetWidth;\n }\n }\n }\n\n const len = slideCount();\n const cur = selectedIndex.current || 0;\n const nextIdx = ((cur + 1) % len + len) % len;\n\n if (slideFade) {\n fadeToIndex(nextIdx);\n return;\n }\n\n const fsScrollTo = scrollToRef.current;\n const body = bodyRef.current;\n if (!fsScrollTo || !body) return;\n\n const step = perSlide();\n\n body.useBaseDuration().useBaseFriction();\n fsScrollTo.distance(-step, true);\n }\n\n function updateCounterFromIndex(canonicalIndex: number) {\n const len = slides.current.length || 1\n\n let actualIndex = canonicalIndex + 1\n actualIndex = ((actualIndex % len) + len) % len\n\n if (actualIndex === 0) actualIndex = imageCount\n\n if (counterRef.current) {\n counterRef.current.textContent = `${actualIndex} / ${imageCount}`\n }\n }\n\n function toggleActiveVideoPlay() {\n const idx = selectedIndex.current ?? 0\n\n const actualIndex = idx + 1\n\n const api = plyrRefs.current[actualIndex] || plyrRef.current[0]\n const p = api?.plyr\n if (!p) return\n\n if (p.playing) p.pause()\n else p.play()\n }\n\n function isPlyrControlsEl(el: HTMLElement | null) {\n return !!el?.closest?.(\n [\n '.plyr__controls',\n '.plyr__control--overlaid',\n '.plyr__menu__container',\n '.plyr__tooltip',\n '.plyr__captions',\n ].join(',')\n );\n }\n\n function getClientXY(evt: any) {\n const t = evt.changedTouches?.[0] ?? evt.touches?.[0];\n if (t) return { x: t.clientX, y: t.clientY };\n return { x: evt.clientX, y: evt.clientY };\n }\n\n function clickedVideoSurface(evt: any): boolean {\n const { x, y } = getClientXY(evt);\n\n const under = document.elementFromPoint(x, y) as HTMLElement | null;\n if (!under) return false;\n\n const slide = under.closest('[data-rmg-fs-slide=\"true\"]') as HTMLElement | null;\n if (!slide) return false;\n\n const plyrRoot = slide.querySelector('.plyr') as HTMLElement | null;\n if (!plyrRoot) return false;\n\n const wrap = plyrRoot.querySelector('.plyr__video-wrapper') as HTMLElement | null;\n if (!wrap) return false;\n\n const r = wrap.getBoundingClientRect();\n const inside =\n x >= r.left && x <= r.right &&\n y >= r.top && y <= r.bottom;\n\n if (under.closest('.plyr__controls')) return false;\n\n return inside;\n }\n\n function isYouTubeVideoEvent(evt: Event): boolean {\n const target = evt.target as HTMLElement | null;\n if (!target) return false;\n\n const slide = target.closest('[data-rmg-fs-slide=\"true\"]') as HTMLElement | null;\n if (!slide) return false;\n\n const plyrRoot = slide.querySelector('.rmg__player') as HTMLElement | null;\n if (!plyrRoot) return false;\n\n return plyrRoot.getAttribute('data-rmg-plyr-provider') === 'youtube';\n }\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 per = perSlideRef.current || track.clientWidth || 1;\n const len = slides.current.length || 1;\n const W = per * len;\n\n const counterMax = len - 1;\n const startIndex = selectedIndex.current || 0;\n\n const location = Vector1D(0);\n const previousLocation = Vector1D(0);\n const offsetLocation = Vector1D(0);\n const target = Vector1D(0);\n\n locationRef.current = location;\n previousLocationRef.current = previousLocation;\n offsetLocationRef.current = offsetLocation;\n targetRef.current = target;\n\n const scrollSnaps = Array.from({ length: len }, (_, i) => -per * i);\n scrollSnapsRef.current = scrollSnaps;\n\n const initialSnap = scrollSnaps[startIndex] ?? 0;\n\n location.set(initialSnap);\n previousLocation.set(initialSnap);\n offsetLocation.set(initialSnap);\n target.set(initialSnap);\n x.current = initialSnap;\n\n translateRef.current = Translate(track);\n setTranslateX(initialSnap, 0);\n\n const indexCurrent = Counter(counterMax, startIndex, true);\n const indexPrevious = Counter(counterMax, startIndex, true);\n\n indexCurrentRef.current = indexCurrent;\n indexPreviousRef.current = indexPrevious;\n\n selectedIndex.current = startIndex;\n sub.setLocalIndex(startIndex);\n updateCounterFromIndex(startIndex);\n\n contentSizeRef.current = W;\n loopLimitRef.current = Limit(-W, 0);\n scrollContentSizeRef.current = W;\n\n const fsLimit = createBaseLimit(-W, 0);\n scrollLimitRef.current = fsLimit;\n\n if (loopLimitRef.current) {\n scrollTargetRef.current = ScrollTarget(\n true,\n scrollSnaps,\n W,\n loopLimitRef.current,\n target\n );\n }\n\n function scrollTo(target: BaseTarget): void {\n const indexCurrent = indexCurrentRef.current;\n const indexPrevious = indexPreviousRef.current;\n if (!indexCurrent || !indexPrevious) return;\n\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n\n targetRef.current!.add(distanceDiff);\n\n if (distanceDiff) {\n if (bodyRef.current!.duration()) {\n animRef.current!.start();\n } else {\n bodyRef.current!.seek();\n positionSlider();\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n\n const idx = indexCurrent.get();\n commitIndexChange(idx);\n }\n }\n\n const fsScrollTo: FsScrollTo = {\n distance(n, snap) {\n const st = scrollTargetRef.current;\n if (!st) return;\n const target = st.byDistance(n, snap);\n scrollTo(target);\n },\n index(n, direction) {\n const st = scrollTargetRef.current;\n const indexCurrent = indexCurrentRef.current;\n if (!st || !indexCurrent) return;\n\n const targetIndex = indexCurrent.clone().set(n).get();\n const target = st.byIndex(targetIndex, direction);\n\n scrollTo(target);\n },\n };\n\n scrollToRef.current = fsScrollTo;\n\n const looper = ScrollLooper(\n contentSizeRef.current,\n loopLimitRef.current,\n location,\n [location, previousLocation, offsetLocation, target]\n )\n\n const body = ScrollBody(location, offsetLocation, previousLocation, target, sliderDuration, sliderFriction)\n bodyRef.current = body\n\n const anim = Animations(\n document,\n window as WindowType,\n () => {\n bodyRef.current?.seek()\n\n const body = bodyRef.current!\n const dir = body.direction() || Math.sign(target.get() - location.get()) || 0\n if (!suppressLoopRef.current && imageCount > 1 && W > 0) {\n looper.loop(dir);\n }\n\n x.current = location.get()\n },\n (alpha) => {\n const cur = location.get()\n const prev = previousLocation.get()\n const loc = cur * alpha + prev * (1 - alpha)\n\n offsetLocation.set(loc)\n x.current = loc\n y.current = isVerticalScroll.current ? yTemp.current : y.current\n\n positionSlider()\n\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 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 const targetEl = evt.target as HTMLElement;\n if (isPlyrControlsEl(targetEl)) return;\n\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 startGrabbing();\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 * sign\n trackerY.pointerMove(evt as any)\n\n previousDragX.current = dragX.current\n dragX.current = lastScroll * sign\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 commitXY(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 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 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 stopGrabbing();\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 (clickedVideoSurface(evt) && !isYouTubeVideoEvent(evt)) {\n evt.preventDefault?.();\n (evt as any).stopPropagation?.();\n\n toggleActiveVideoPlay();\n dragMode.current = 'none';\n suppressLoopRef.current = true\n goToCanonical(selectedIndex.current)\n return;\n }\n\n if (target.closest(\"[class*='plyr__']\")) return\n\n const t = evt as unknown as TouchEvent\n const clickedImg = target.closest('img')\n\n if (!clickedImg) {\n restoreOverlayTransition()\n clickedImgMargin.current = true\n animRef.current?.stop()\n requestFsCloseRef.current?.();\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 === imageCount - 1 && Number(imgIndex) === imageCount + 1) {\n suppressLoopRef.current = true\n goToCanonical(0)\n return\n }\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 suppressLoopRef.current = true\n goToCanonical(idx)\n return\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 requestFsCloseRef.current?.();\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 requestFsCloseRef.current?.();\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 const end = trackerX.pointerUp(evt as any)\n let rawForce = end.fx\n\n if (isRtl) rawForce = -rawForce\n\n const isMouseEvt = isMouseEvent(evt as any, window as any)\n const snapForceBoost = { mouse: 300, touch: 400 }\n const boost = snapForceBoost[isMouseEvt ? 'mouse' : 'touch']\n\n const boostedForce = rawForce * boost\n\n const fsScrollTarget = scrollTargetRef.current\n const fsScrollTo = scrollToRef.current\n const body = bodyRef.current\n\n if (!fsScrollTarget || !fsScrollTo || !body) {\n dragMode.current = 'none'\n return\n }\n\n function allowedForce(force: number): number {\n const len = slides.current.length || 1\n const curIndex = selectedIndex.current || 0\n\n const dirIndex = mathSign(force) * -1\n const nextIndex = ((curIndex + dirIndex) % len + len) % len\n\n const dirBump = slides.current.length === 2 ? mathSign(force) : 0;\n const nextTarget = fsScrollTarget!.byIndex(nextIndex, dirBump)\n return nextTarget.distance\n }\n \n const force = allowedForce(boostedForce)\n\n const baseSpeed = sliderDuration\n const baseFriction = sliderFriction\n const forceFactor = factorAbs(boostedForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n body.useDuration(speed).useFriction(friction)\n\n fsScrollTo.distance(force, true)\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])\n\n function goToCanonical(canonicalIdx: number, mode: 'instant' | 'animated' = 'animated') {\n scrollToIndex(canonicalIdx, { jump: mode === 'instant' })\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 * sign)\n const next = cur\n\n targetRef.current?.set(next)\n bodyRef.current?.useDuration(0).useFriction(1)\n\n animRef.current?.start()\n x.current = next\n positionSlider()\n updateActiveIndexFromX(next)\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\n if (selectedIndex.current !== idx) {\n selectedIndex.current = idx\n indexCurrentRef.current?.set(idx)\n\n sub.setLocalIndex(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 setTranslateX(tx: number, ty: number) {\n if (!slider.current) return\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(tx, ny)\n }\n\n function positionSlider() {\n setTranslateX(x.current, y.current)\n }\n\n useEffect(() => {\n const left = leftChevronRef.current;\n const right = rightChevronRef.current;\n\n const onClick = (ev: Event) => {\n const target = ev.currentTarget as HTMLButtonElement | null;\n const action = target?.dataset.action;\n if (action === 'prev') previous();\n else if (action === 'next') next();\n };\n\n if (left) left.addEventListener('click', onClick);\n if (right) right.addEventListener('click', onClick);\n\n return () => {\n if (left) left.removeEventListener('click', onClick);\n if (right) right.removeEventListener('click', onClick);\n };\n }, [leftChevronRef.current, rightChevronRef.current, showFullscreenSlider, isRtl]);\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 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, recenterWithAnchor]);\n\n useEffect(() => {\n const offReq = sub.onRequest((req: FSRequest) => {\n switch (req.type) {\n case 'requestSet': {\n const mode = req.mode ?? 'animated';\n if (mode === 'instant') {\n const per = perSlide();\n const nx = -per * req.index;\n setAllX(nx);\n setTranslateX(nx, 0);\n animRef.current?.stop();\n const idx = ((req.index % slideCount()) + slideCount()) % slideCount();\n commitIndexChange(idx);\n if (counterRef.current) {\n let actual = selectedIndex.current + 1;\n const len = slideCount();\n actual = ((actual % len) + len) % len;\n if (actual === 0) actual = imageCount;\n counterRef.current.textContent = `${actual} / ${imageCount}`;\n }\n } else {\n const mode = req.mode ?? 'animated'\n const jump = mode === 'instant'\n scrollToIndex(req.index, { jump });\n }\n break;\n }\n case 'requestPrev':\n previous();\n break;\n case 'requestNext':\n next();\n break;\n case 'center':\n recenterWithAnchor();\n break;\n }\n });\n\n const offEvt = sub.onEvent(() => { /* noop here */ });\n\n return () => {\n offReq();\n offEvt();\n };\n }, [sub]);\n\n function centerSlider() {\n scrollToIndex(selectedIndex.current, { jump: false })\n }\n\n useImperativeHandle(ref, () => ({ centerSlider: centerSlider }), [centerSlider]);\n\n function isVideoItem(item: MediaItem | undefined | null) {\n if (!item) return false;\n\n const any = item as any;\n\n if (any.type === 'video') return true;\n if (any.kind === 'video') return true;\n if (any.mediaType === 'video') return true;\n\n if (any.videoSrc) return true;\n if (any.src && typeof any.src === 'string' && any.src.match(/\\.(mp4|webm|mov)(\\?|#|$)/i)) return true;\n\n if (any.plyrSource) return true;\n if (any.sources?.video) return true;\n\n return false;\n }\n\n const len = normalizedItems?.length || imageCount || 1;\n\n const openingIndex =\n ((slideIndex ?? 0) % len + len) % len;\n\n const isVideoSlide =\n isVideoItem(normalizedItems?.[openingIndex]);\n\n\n return (\n <div\n ref={viewportRef}\n className={`fs_viewport ${rtlCls}`}\n dir={isRtl ? 'rtl' : undefined}\n style={{\n position: 'absolute',\n inset: 0,\n overflow: 'hidden',\n }}\n >\n <div\n ref={slider}\n className={`fullscreen_slider ${rtlCls}`}\n style={{\n position: 'absolute',\n inset: 0,\n overflow: 'visible',\n cursor: 'grab',\n userSelect: 'none',\n willChange: 'opacity, transform',\n backfaceVisibility: 'hidden',\n transition: introFade || isVideoSlide\n ? `opacity ${introDuration}ms ${introEasing}`\n : undefined,\n opacity: showFullscreenSlider\n ? introFade || isVideoSlide\n ? (fadeOpening ? 0 : 1)\n : 1\n : 0,\n }}\n >\n {children}\n </div>\n </div>\n )\n }\n)\n\nFullscreenSlider.displayName = 'FullscreenSlider'\nexport default FullscreenSlider","/* eslint-disable @next/next/no-img-element */\n'use client'\n\nimport React, { useEffect, useMemo, useRef } from 'react'\nimport ThumbnailSlider from '../slider/thumbnails/ThumbnailSlider'\nimport createIndexChannel from '../slider/sliderSub'\nimport type { FullscreenSliderSub } from './fullscreenSliderSub'\nimport { BreakpointMap } from '../shared/responsive'\nimport { ThumbnailPosition } from '../slider/thumbnails/types'\n\ntype FSItem = {\n thumbSrc: string\n alt?: string\n}\n\ntype ArrowRenderArgs = {\n ref: React.RefObject<HTMLDivElement | null>;\n onClick: () => void;\n hidden: boolean;\n disabled: boolean;\n createRipple: (el: HTMLElement) => void;\n className?: string;\n};\n\ninterface FullscreenThumbnailSliderProps {\n items: FSItem[]\n position: ThumbnailPosition\n fsSub: FullscreenSliderSub\n className?: string\n style?: React.CSSProperties\n thumbnailWidth?: number | string\n thumbnailHeight?: number | string\n thumbnailsCenter?: boolean;\n thumbnailsContainerWidth?: number | string\n thumbnailsContainerHeight?: number | string\n visible?: boolean\n invisible?: boolean\n fadeDurationMs?: number\n thumbnailItemClassName?: string\n thumbnailItemStyle?: React.CSSProperties\n gap?: number\n freeScroll?: boolean;\n groupCells?: boolean\n loop?: boolean\n direction?: 'ltr' | 'rtl';\n axis?: 'x' | 'y';\n skipSnaps?: boolean;\n centerActiveThumb?: boolean;\n selectDuration?: number;\n freeScrollDuration?: number;\n sliderFriction?: number;\n breakpointMap?: BreakpointMap;\n rippleEnabled?: boolean;\n rippleClassName?: string;\n showArrows?: boolean;\n arrowStyles?: React.CSSProperties;\n arrowClassName?: string;\n prevArrowStyles?: React.CSSProperties;\n prevArrowClassName?: string;\n nextArrowStyles?: React. CSSProperties;\n nextArrowClassName?: string;\n renderArrows?: (args: ArrowRenderArgs & { dir: \"prev\" | \"next\" }) => React.ReactNode;\n renderPrevArrow?: (args: ArrowRenderArgs) => React.ReactNode;\n renderNextArrow?: (args: ArrowRenderArgs) => React.ReactNode;\n}\n\nexport default function FullscreenThumbnailSlider({\n items,\n position,\n fsSub,\n className,\n style,\n thumbnailWidth,\n thumbnailHeight,\n thumbnailsCenter,\n thumbnailsContainerWidth,\n thumbnailsContainerHeight,\n visible = true,\n invisible = false,\n fadeDurationMs = 300,\n thumbnailItemClassName,\n thumbnailItemStyle,\n gap,\n freeScroll,\n groupCells,\n loop,\n direction,\n skipSnaps,\n centerActiveThumb,\n selectDuration,\n freeScrollDuration,\n sliderFriction,\n breakpointMap = { xs: 0, sm: 640, md: 768, lg: 1024, xl: 1280 },\n rippleEnabled,\n rippleClassName,\n showArrows = false,\n arrowStyles,\n arrowClassName,\n prevArrowStyles,\n prevArrowClassName,\n nextArrowStyles,\n nextArrowClassName,\n renderArrows,\n renderPrevArrow,\n renderNextArrow\n}: FullscreenThumbnailSliderProps) {\n const channelRef = useRef(createIndexChannel(fsSub.get(), 'animated'))\n\n useEffect(() => {\n const off = fsSub.onEvent((e) => {\n if (e.type === 'internalIndex') {\n channelRef.current.set(e.index, 'animated', { silent: false })\n }\n })\n return off\n }, [fsSub])\n\n useEffect(() => {\n channelRef.current.set(fsSub.get(), 'animated', { silent: true })\n }, [fsSub])\n\n const children = useMemo(\n () =>\n items.map((item, i) => (\n <button\n key={`fs-thumb-${i}`}\n type=\"button\"\n style={{\n border: 'none',\n padding: 0,\n background: 'transparent',\n cursor: 'pointer',\n }}\n >\n <img\n src={item.thumbSrc}\n alt={item.alt ?? `thumb-${i}`}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n }}\n draggable={false}\n />\n </button>\n )),\n [items]\n )\n\n const isOpen = visible && !invisible\n\n const opacity = isOpen ? 1 : 0\n const transform = isOpen ? 'translateY(0)' : 'translateY(8px)'\n const pointerEvents: React.CSSProperties['pointerEvents'] =\n isOpen ? 'auto' : 'none'\n\n const wrapperStyle: React.CSSProperties = {\n opacity,\n transform,\n pointerEvents,\n transition: `\n opacity ${fadeDurationMs}ms cubic-bezier(.4,0,.22,1),\n transform ${fadeDurationMs}ms cubic-bezier(.4,0,.22,1)\n `,\n }\n\n return (\n <div style={wrapperStyle} className={className}>\n <ThumbnailSlider\n position={position}\n thumbnailWidth={thumbnailWidth}\n thumbnailHeight={thumbnailHeight}\n indexChannel={channelRef.current}\n style={style}\n onSelectThumb={(idx) => fsSub.requestSet(idx, 'animated')}\n thumbnailsCenter={thumbnailsCenter}\n thumbnailsContainerWidth={thumbnailsContainerWidth}\n thumbnailsContainerHeight={thumbnailsContainerHeight}\n thumbnailItemClassName={thumbnailItemClassName}\n thumbnailItemStyle={thumbnailItemStyle}\n gap={gap}\n freeScroll={freeScroll}\n groupCells={groupCells}\n loop={loop}\n direction={direction}\n skipSnaps={skipSnaps}\n centerActiveThumb={centerActiveThumb}\n selectDuration={selectDuration}\n freeScrollDuration={freeScrollDuration}\n sliderFriction={sliderFriction}\n breakpointMap={breakpointMap}\n rippleEnabled={rippleEnabled}\n rippleClassName={rippleClassName}\n showArrows={showArrows}\n arrowStyles={arrowStyles}\n arrowClassName={arrowClassName}\n prevArrowStyles={prevArrowStyles}\n prevArrowClassName={prevArrowClassName}\n nextArrowStyles={nextArrowStyles}\n nextArrowClassName={nextArrowClassName}\n renderArrows={renderArrows}\n renderPrevArrow={renderPrevArrow}\n renderNextArrow={renderNextArrow}\n >\n {children}\n </ThumbnailSlider>\n </div>\n )\n}","'use client';\n\nimport * as React from 'react';\n\ntype Props = {\n setMountEl: (el: HTMLDivElement | null) => void;\n /** optional styles override */\n style?: React.CSSProperties;\n className?: string;\n};\n\nexport function FsEntryOverlayMount({ setMountEl, style, className }: Props) {\n return (\n <div\n ref={setMountEl}\n className={className}\n style={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n zIndex: 9999,\n ...style,\n }}\n />\n );\n}","'use client';\n\nimport * as React from 'react';\nimport { FullscreenModal } from './FullscreenModal';\nimport { FullscreenSlider } from './FullscreenSlider';\nimport FullscreenThumbnailSlider from './FullscreenThumbnailSlider';\nimport { FsEntryOverlayMount } from '../entries/overlay/FsEntryOverlayMount';\nimport type { FullscreenSliderHandle } from './FullscreenSlider';\nimport type { MediaEntryLink } from '../entries/types';\nimport type { APITypes } from \"plyr-react\";\nimport { MediaItem } from '../shared/types/media';\nimport { runFullscreenIntro } from \"./fullscreenIntro\";\nimport { FsCaptionPlacement, FsIntroRequest, FullscreenOptions } from './types';\nimport { Root } from 'react-dom/client';\n\nexport type FullscreenRuntimeProps = {\n fsEnabled: boolean;\n fsSub: any;\n showFullscreenModal: boolean;\n setShowFullscreenModal: React.Dispatch<React.SetStateAction<boolean>>;\n setShowFullscreenSlider: React.Dispatch<React.SetStateAction<boolean>>;\n showFullscreenSlider: boolean;\n epoch: number;\n isClick: React.RefObject<boolean>;\n isAnimatingRef: React.RefObject<boolean>;\n overlayDivRef: React.RefObject<HTMLDivElement | null>;\n duplicateImgRef: React.RefObject<HTMLElement | null>;\n cells: React.RefObject<{ element: HTMLElement; index: number }[]>;\n cellsStateLength: number;\n slidesForFullscreen: React.RefObject<\n { cells: { element: HTMLElement; index: number }[]; target: number }[]\n >;\n sliderForFullscreen: React.RefObject<HTMLDivElement | null>;\n visibleImagesForFullscreen: React.RefObject<number>;\n selectedIndexForFullscreen: React.RefObject<number>;\n sliderXForFullscreen: React.RefObject<number>;\n sliderVelocityForFullscreen: React.RefObject<number>;\n isWrappingForFullscreen: React.RefObject<boolean>;\n wrappedItems: MediaItem[];\n setClosingModal: React.Dispatch<React.SetStateAction<boolean>>;\n closingModal: boolean;\n closeButtonRef: React.RefObject<HTMLElement | null>;\n counterRef: React.RefObject<HTMLElement | null>;\n leftChevronRef: React.RefObject<HTMLElement | null>;\n rightChevronRef: React.RefObject<HTMLElement | null>;\n centerAlign: boolean;\n centerSliderForFullscreen: () => void;\n setSliderIndexForFullscreen: (index: number, mode?: any) => void;\n onForceResetZoom: () => void;\n layout: 'slider' | 'grid' | 'masonry' | 'entries';\n expandableImgRefs: React.RefObject<any[]>;\n entryMapRef: React.RefObject<MediaEntryLink[] | null>;\n entryMediaLayout: any;\n introFade: boolean;\n introDuration: number;\n introEasing: any;\n fullscreenSliderApi: React.RefObject<FullscreenSliderHandle | null>;\n slideIndex: number;\n isZoomClick: React.RefObject<boolean>;\n isZoomed: boolean;\n windowSize: any;\n handleZoomToggle: (zoomCtx: any, e: any, imageRef: any) => void;\n zoomCtx: any;\n imageRefsCurrent: React.RefObject<HTMLDivElement | null>[];\n isPinching: React.RefObject<boolean>\n scale: number;\n isTouchPinching: React.RefObject<boolean>\n isZooming: React.RefObject<boolean>;\n wrappedModePlyrRefs: React.RefObject<(APITypes | null)[]>;\n singleModePlyrRefs: React.RefObject<(APITypes | null)[]>;\n direction: 'ltr' | 'rtl';\n sliderDuration: number;\n sliderFriction: number;\n suppressLoopRef: React.RefObject<boolean>;\n fsFadeOpening: boolean;\n slideFade: boolean;\n slideFadeDuration: number;\n slideFadeEasing: any;\n normalizedItems: MediaItem[];\n resetZoomForSlideChange: () => void;\n wrappedFullscreenImages: React.ReactNode;\n oneFullscreenImage: React.ReactNode;\n flexDirection: any;\n fsThumbContainerRef: React.RefObject<HTMLDivElement | null>;\n fsThumbFadeDuration: number;\n fsThumbFadeEasing: any;\n fsThumbsOpen: boolean;\n fsResolvedThumbPos: any;\n fsThumbnailsPositionDefined: boolean;\n fsThumbnailsContainerClassName?: string;\n fsThumbnailsContainerStyle?: React.CSSProperties;\n fsThumbThumbnailWidth?: number | string;\n fsThumbThumbnailHeight?: number | string;\n fsThumbCenter?: boolean;\n fsThumbContainerWidth?: number | string;\n fsThumbContainerHeight?: number | string;\n fsThumbGap?: number;\n fsThumbFreeScroll?: boolean;\n fsThumbGroupCells?: boolean;\n fsThumbLoop?: boolean;\n fsThumbSkipSnaps?: boolean;\n fsThumbCenterActiveThumb?: boolean;\n fsThumbSelectDuration?: number;\n fsThumbFreeScrollDuration?: number;\n fsThumbFriction?: number;\n fsThumbBreakpointMap?: any;\n fsThumbRippleEnabled?: boolean;\n fsThumbRippleClassName?: string;\n fsThumbControlsEnabled?: boolean;\n sliderThumbArrowStyles?: React.CSSProperties;\n sliderThumbArrowClassName?: string;\n fsThumbPrevArrowStyles?: React.CSSProperties;\n fsThumbPrevArrowClassName?: string;\n fsThumbNextArrowStyles?: React.CSSProperties;\n fsThumbNextArrowClassName?: string;\n sliderThumbRenderArrows?: any;\n fsThumbRenderPrevArrow?: any;\n fsThumbRenderNextArrow?: any;\n showFsEntryOverlayMount: boolean;\n setFsEntryOverlayMountEl: (el: HTMLDivElement | null) => void;\n fsIntroReq: FsIntroRequest;\n clearFsIntroReq: () => void;\n styles: Record<string, string>;\n fs: FullscreenOptions;\n overlayCaptionRef: React.RefObject<HTMLDivElement | null>;\n overlayCaptionRootRef: React.RefObject<Root | null>;\n setFsFadeOpening: React.Dispatch<React.SetStateAction<boolean>>;\n addShield: (timeoutMs?: number | undefined) => void;\n resolveFsCaptionPlacement: (\n placement: any,\n breakpoint: number | undefined,\n viewportWidth: number\n ) => FsCaptionPlacement | null;\n requestFsCloseRef: React.RefObject<null | (() => void)>;\n};\n\nexport function FullscreenRuntime(props: FullscreenRuntimeProps) {\n const {\n fsEnabled,\n fsSub,\n showFullscreenModal,\n setShowFullscreenModal,\n isClick,\n isAnimatingRef,\n overlayDivRef,\n cells,\n setShowFullscreenSlider,\n cellsStateLength,\n slidesForFullscreen,\n sliderForFullscreen,\n visibleImagesForFullscreen,\n selectedIndexForFullscreen,\n sliderXForFullscreen,\n sliderVelocityForFullscreen,\n isWrappingForFullscreen,\n wrappedItems,\n setClosingModal,\n closeButtonRef,\n counterRef,\n leftChevronRef,\n rightChevronRef,\n centerAlign,\n centerSliderForFullscreen,\n setSliderIndexForFullscreen,\n onForceResetZoom,\n layout,\n expandableImgRefs,\n entryMapRef,\n entryMediaLayout,\n introFade,\n introDuration,\n introEasing,\n epoch,\n fullscreenSliderApi,\n slideIndex,\n isZoomClick,\n isZoomed,\n windowSize,\n handleZoomToggle,\n zoomCtx,\n imageRefsCurrent,\n isPinching,\n scale,\n isTouchPinching,\n showFullscreenSlider,\n isZooming,\n wrappedModePlyrRefs,\n singleModePlyrRefs,\n closingModal,\n duplicateImgRef,\n direction,\n sliderDuration,\n sliderFriction,\n suppressLoopRef,\n fsFadeOpening,\n slideFade,\n slideFadeDuration,\n slideFadeEasing,\n normalizedItems,\n resetZoomForSlideChange,\n wrappedFullscreenImages,\n oneFullscreenImage,\n flexDirection,\n fsThumbContainerRef,\n fsThumbFadeDuration,\n fsThumbFadeEasing,\n fsThumbsOpen,\n fsResolvedThumbPos,\n fsThumbnailsPositionDefined,\n fsThumbnailsContainerClassName,\n fsThumbnailsContainerStyle,\n fsThumbThumbnailWidth,\n fsThumbThumbnailHeight,\n fsThumbCenter,\n fsThumbContainerWidth,\n fsThumbContainerHeight,\n fsThumbGap,\n fsThumbFreeScroll,\n fsThumbGroupCells,\n fsThumbLoop,\n fsThumbSkipSnaps,\n fsThumbCenterActiveThumb,\n fsThumbSelectDuration,\n fsThumbFreeScrollDuration,\n fsThumbFriction,\n fsThumbBreakpointMap,\n fsThumbRippleEnabled,\n fsThumbRippleClassName,\n fsThumbControlsEnabled,\n sliderThumbArrowStyles,\n sliderThumbArrowClassName,\n fsThumbPrevArrowStyles,\n fsThumbPrevArrowClassName,\n fsThumbNextArrowStyles,\n fsThumbNextArrowClassName,\n sliderThumbRenderArrows,\n fsThumbRenderPrevArrow,\n fsThumbRenderNextArrow,\n showFsEntryOverlayMount,\n setFsEntryOverlayMountEl,\n fsIntroReq,\n clearFsIntroReq,\n styles,\n fs,\n overlayCaptionRef,\n overlayCaptionRootRef,\n setFsFadeOpening,\n addShield,\n resolveFsCaptionPlacement,\n requestFsCloseRef\n } = props;\n\n React.useEffect(() => {\n if (!fsIntroReq) return;\n\n const { origImg, index, closestSelector } = fsIntroReq;\n\n runFullscreenIntro({\n origImg,\n index,\n normalizedItems,\n isRtl: direction === \"rtl\",\n styles,\n fs,\n overlayDivRef,\n duplicateImgRef,\n overlayCaptionRef,\n overlayCaptionRootRef,\n fsThumbContainerRef,\n setShowFullscreenSlider,\n setFsFadeOpening,\n addShield,\n resolveFsCaptionPlacement,\n closestSelector,\n });\n\n clearFsIntroReq();\n }, [fsIntroReq]);\n\n\n return (\n <>\n {fsEnabled && (\n <FullscreenModal\n fsSub={fsSub}\n open={showFullscreenModal}\n onClose={() => setShowFullscreenModal(false)}\n isClick={isClick}\n isAnimating={isAnimatingRef}\n overlayDivRef={overlayDivRef}\n cells={cells}\n setShowFullscreenSlider={setShowFullscreenSlider}\n imageCount={cellsStateLength}\n slides={slidesForFullscreen}\n slider={sliderForFullscreen}\n visibleImagesRef={visibleImagesForFullscreen}\n selectedIndex={selectedIndexForFullscreen}\n sliderX={sliderXForFullscreen}\n sliderVelocity={sliderVelocityForFullscreen}\n isWrapping={isWrappingForFullscreen}\n wrappedItems={wrappedItems}\n setClosingModal={setClosingModal}\n closeButtonRef={closeButtonRef}\n counterRef={counterRef}\n leftChevronRef={leftChevronRef}\n rightChevronRef={rightChevronRef}\n centerAlign={centerAlign}\n centerSlider={centerSliderForFullscreen}\n setSliderIndex={setSliderIndexForFullscreen}\n onForceResetZoom={() => onForceResetZoom()}\n layout={layout}\n expandableImgRefs={expandableImgRefs}\n entryMapRef={entryMapRef}\n entryMediaLayout={entryMediaLayout}\n introFade={introFade}\n introDuration={introDuration}\n introEasing={introEasing}\n requestFsCloseRef={requestFsCloseRef}\n fs={fs}\n styles={styles}\n direction={direction}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n flexDirection,\n }}\n >\n <div\n style={{\n flex: '1 1 auto',\n position: 'relative',\n minHeight: 0,\n }}\n >\n <FullscreenSlider\n key={epoch}\n sub={fsSub}\n ref={fullscreenSliderApi}\n imageCount={cellsStateLength}\n slideIndex={slideIndex}\n isClick={isZoomClick}\n isZoomed={isZoomed}\n windowSize={windowSize}\n show={showFullscreenModal}\n handleZoomToggle={(e, imageRef) =>\n handleZoomToggle(zoomCtx as any, e as any, imageRef as any)\n }\n imageRefs={imageRefsCurrent}\n cells={cells}\n isPinching={isPinching}\n scale={scale}\n isTouchPinching={isTouchPinching}\n showFullscreenSlider={showFullscreenSlider}\n isZooming={isZooming}\n plyrRefs={wrappedModePlyrRefs}\n plyrRef={singleModePlyrRefs}\n closingModal={closingModal}\n closeButtonRef={closeButtonRef}\n counterRef={counterRef}\n leftChevronRef={leftChevronRef}\n rightChevronRef={rightChevronRef}\n overlayDivRef={overlayDivRef}\n direction={direction}\n isWrapping={isWrappingForFullscreen}\n sliderDuration={sliderDuration}\n sliderFriction={sliderFriction}\n suppressLoopRef={suppressLoopRef}\n fadeOpening={fsFadeOpening}\n introFade={introFade}\n slideFade={slideFade}\n slideFadeDuration={slideFadeDuration}\n slideFadeEasing={slideFadeEasing}\n normalizedItems={normalizedItems}\n introDuration={introDuration}\n introEasing={introEasing}\n resetAllZoomDom={() => resetZoomForSlideChange()}\n requestFsCloseRef={requestFsCloseRef}\n >\n {normalizedItems.length > 1 ? wrappedFullscreenImages : oneFullscreenImage}\n </FullscreenSlider>\n </div>\n {fsThumbnailsPositionDefined && (\n <div\n ref={fsThumbContainerRef}\n className={fsThumbnailsContainerClassName}\n style={{\n flex:\n fsResolvedThumbPos === 'left' || fsResolvedThumbPos === 'right'\n ? '0 0 auto'\n : '0 0 auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding:\n fsResolvedThumbPos === 'top' || fsResolvedThumbPos === 'bottom'\n ? '0.75rem 1rem'\n : '0.75rem 0.5rem',\n transition: `background-color ${fsThumbFadeDuration}ms ${fsThumbFadeEasing}`,\n backgroundColor: fsThumbsOpen\n ? 'rgba(255,255,255,1)'\n : 'rgba(255,255,255,0)',\n ...(fsThumbnailsContainerStyle || {}),\n }}\n >\n {normalizedItems.length > 1 && (\n <FullscreenThumbnailSlider\n items={normalizedItems.map((item) => ({\n thumbSrc: (item as any).thumbSrc ?? (item as any).src,\n alt: (item as any).alt,\n }))}\n position={fsResolvedThumbPos}\n fsSub={fsSub}\n thumbnailWidth={fsThumbThumbnailWidth}\n thumbnailHeight={fsThumbThumbnailHeight}\n thumbnailsCenter={fsThumbCenter}\n thumbnailsContainerWidth={fsThumbContainerWidth}\n thumbnailsContainerHeight={fsThumbContainerHeight}\n visible={showFullscreenModal}\n invisible={closingModal}\n thumbnailItemClassName={undefined}\n thumbnailItemStyle={undefined}\n gap={fsThumbGap}\n freeScroll={fsThumbFreeScroll}\n groupCells={fsThumbGroupCells}\n loop={fsThumbLoop}\n direction={direction}\n skipSnaps={fsThumbSkipSnaps}\n centerActiveThumb={fsThumbCenterActiveThumb}\n selectDuration={fsThumbSelectDuration}\n freeScrollDuration={fsThumbFreeScrollDuration}\n sliderFriction={fsThumbFriction}\n breakpointMap={fsThumbBreakpointMap}\n rippleEnabled={fsThumbRippleEnabled}\n rippleClassName={fsThumbRippleClassName}\n showArrows={fsThumbControlsEnabled}\n arrowStyles={sliderThumbArrowStyles}\n arrowClassName={sliderThumbArrowClassName}\n prevArrowStyles={fsThumbPrevArrowStyles}\n prevArrowClassName={fsThumbPrevArrowClassName}\n nextArrowStyles={fsThumbNextArrowStyles}\n nextArrowClassName={fsThumbNextArrowClassName}\n renderArrows={sliderThumbRenderArrows}\n renderPrevArrow={fsThumbRenderPrevArrow}\n renderNextArrow={fsThumbRenderNextArrow}\n />\n )}\n </div>\n )}\n </div>\n\n {showFsEntryOverlayMount ? (\n <FsEntryOverlayMount setMountEl={setFsEntryOverlayMountEl} />\n ) : null}\n </FullscreenModal>\n )}\n </>\n );\n}\n\nexport default FullscreenRuntime;"]}
|