// ** React Imports import { MutableRefObject } from 'react' // ** MUI Imports import Box from '@mui/material/Box' import { Direction } from '@mui/material' import { useTheme } from '@mui/material/styles' import Image from 'next/image' // ** Third Party Components import { useKeenSlider, KeenSliderPlugin, KeenSliderInstance } from 'keen-slider/react' const ThumbnailPlugin = (mainRef: MutableRefObject): KeenSliderPlugin => { return slider => { function removeActive() { slider.slides.forEach(slide => { slide.classList.remove('active') }) } function addActive(idx: number) { slider.slides[idx].classList.add('active') } function addClickEvents() { slider.slides.forEach((slide, idx) => { slide.addEventListener('click', () => { if (mainRef.current) mainRef.current.moveToIdx(idx) }) }) } slider.on('created', () => { if (!mainRef.current) return addActive(slider.track.details.rel) addClickEvents() mainRef.current.on('animationStarted', main => { removeActive() const next = main.animator.targetIdx || 0 addActive(main.track.absToRel(next)) slider.moveToIdx(next) }) }) } } const SwiperThumbnails = ({ direction }: { direction: Direction }) => { // ** Hooks const theme = useTheme() const [sliderRef, instanceRef] = useKeenSlider({ rtl: direction === 'rtl' }) const [thumbnailRef] = useKeenSlider( { rtl: direction === 'rtl', slides: { perView: 4, spacing: 16 }, breakpoints: { [`(max-width: ${theme.breakpoints.values.sm}px)`]: { slides: { perView: 3, spacing: 8 } } } }, [ThumbnailPlugin(instanceRef)] ) return ( <> swiper 1 swiper 2 swiper 3 swiper 4 swiper 5 swiper 1 swiper 2 swiper 3 swiper 4 swiper 5 ) } export default SwiperThumbnails