UNPKG

react-garden

Version:

React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.

767 lines (680 loc) 20.3 kB
export const SwiperCenteredJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperCentered = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ rtl: direction === 'rtl', slides: { perView: 2, spacing: 16, origin: 'center' } }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-26.jpg' alt='swiper 26' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-27.jpg' alt='swiper 27' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-28.jpg' alt='swiper 28' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-29.jpg' alt='swiper 29' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-30.jpg' alt='swiper 30' /> </Box> </Box> ) } export default SwiperCentered `}</code> </pre> ) export const SwiperAutoSwitchJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperAutoSwitch = ({ direction }) => { // ** Hook const [ref] = useKeenSlider( { loop: true, rtl: direction === 'rtl' }, [ slider => { let mouseOver = false let timeout const clearNextTimeout = () => { clearTimeout(timeout) } const nextTimeout = () => { clearTimeout(timeout) if (mouseOver) return timeout = setTimeout(() => { slider.next() }, 2000) } slider.on('created', () => { slider.container.addEventListener('mouseover', () => { mouseOver = true clearNextTimeout() }) slider.container.addEventListener('mouseout', () => { mouseOver = false nextTimeout() }) nextTimeout() }) slider.on('dragStarted', clearNextTimeout) slider.on('animationEnded', nextTimeout) slider.on('updated', nextTimeout) } ] ) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-1.jpg' alt='swiper 1' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-2.jpg' alt='swiper 2' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-3.jpg' alt='swiper 3' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-4.jpg' alt='swiper 4' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-5.jpg' alt='swiper 5' /> </Box> </Box> ) } export default SwiperAutoSwitch `}</code> </pre> ) export const SwiperControlsJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** React Imports import { useState } from 'react' // ** MUI Imports import Box from '@mui/material/Box' import Badge from '@mui/material/Badge' // ** Icons Imports import ChevronLeft from 'mdi-material-ui/ChevronLeft' import ChevronRight from 'mdi-material-ui/ChevronRight' // ** Third Party Components import clsx from 'clsx' import { useKeenSlider } from 'keen-slider/react' const SwiperControls = ({ direction }) => { // ** States const [loaded, setLoaded] = useState(false) const [currentSlide, setCurrentSlide] = useState(0) // ** Hook const [sliderRef, instanceRef] = useKeenSlider({ rtl: direction === 'rtl', slideChanged(slider) { setCurrentSlide(slider.track.details.rel) }, created() { setLoaded(true) } }) return ( <> <Box className='navigation-wrapper'> <Box ref={sliderRef} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-1.jpg' alt='swiper 1' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-2.jpg' alt='swiper 2' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-3.jpg' alt='swiper 3' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-4.jpg' alt='swiper 4' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-5.jpg' alt='swiper 5' /> </Box> </Box> {loaded && instanceRef.current && ( <> <ChevronLeft className={clsx('arrow arrow-left', { 'arrow-disabled': currentSlide === 0 })} onClick={e => e.stopPropagation() || instanceRef.current?.prev()} /> <ChevronRight className={clsx('arrow arrow-right', { 'arrow-disabled': currentSlide === instanceRef.current.track.details.slides.length - 1 })} onClick={e => e.stopPropagation() || instanceRef.current?.next()} /> </> )} </Box> {loaded && instanceRef.current && ( <Box className='swiper-dots'> {[...Array(instanceRef.current.track.details.slides.length).keys()].map(idx => { return ( <Badge key={idx} variant='dot' component='div' className={clsx({ active: currentSlide === idx })} onClick={() => { instanceRef.current?.moveToIdx(idx) }} ></Badge> ) })} </Box> )} </> ) } export default SwiperControls `}</code> </pre> ) export const SwiperDefaultJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperDefault = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ rtl: direction === 'rtl' }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-1.jpg' alt='swiper 1' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-2.jpg' alt='swiper 2' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-3.jpg' alt='swiper 3' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-4.jpg' alt='swiper 4' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-5.jpg' alt='swiper 5' /> </Box> </Box> ) } export default SwiperDefault `}</code> </pre> ) export const SwiperFreeModeJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperFreeMode = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ loop: true, mode: 'free', rtl: direction === 'rtl', slides: { perView: 2, spacing: 16 } }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-21.jpg' alt='swiper 21' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-22.jpg' alt='swiper 22' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-23.jpg' alt='swiper 23' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-24.jpg' alt='swiper 24' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-25.jpg' alt='swiper 25' /> </Box> </Box> ) } export default SwiperFreeMode `}</code> </pre> ) export const SwiperFaderJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** React Imports import { useState } from 'react' // ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const images = [ '/images/banners/banner-9.jpg', '/images/banners/banner-7.jpg', '/images/banners/banner-6.jpg', '/images/banners/banner-10.jpg', '/images/banners/banner-8.jpg' ] const SwiperFader = ({ direction }) => { const [opacities, setOpacities] = useState([]) // ** Hook const [sliderRef] = useKeenSlider({ slides: images.length, rtl: direction === 'rtl', detailsChanged(s) { const new_opacities = s.track.details.slides.map(slide => slide.portion) setOpacities(new_opacities) } }) return ( <Box ref={sliderRef} className='fader' sx={{ height: [200, 250, 395] }}> {images.map((src, idx) => ( <Box key={idx} className='fader__slide' sx={{ opacity: opacities[idx] }}> <img src={src} alt={slider {idx}} /> </Box> ))} </Box> ) } export default SwiperFader `}</code> </pre> ) export const SwiperMutationObserverJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** React Imports import { useState } from 'react' // ** MUI Imports import Box from '@mui/material/Box' import Button from '@mui/material/Button' import { useTheme } from '@mui/material/styles' import Typography from '@mui/material/Typography' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const MutationPlugin = slider => { const observer = new MutationObserver(mutations => { mutations.forEach(() => { slider.update() }) }) const config = { childList: true } slider.on('created', () => { observer.observe(slider.container, config) }) slider.on('destroyed', () => { observer.disconnect() }) } const SwiperMutationObserver = ({ direction }) => { // ** States const [slides, setSlides] = useState([1]) // ** Hooks const theme = useTheme() const [ref] = useKeenSlider( { rtl: direction === 'rtl', slides: { perView: 3, spacing: 16 }, breakpoints: { [(max-width: {theme.breakpoints.values.sm}px)]: { slides: { perView: 1, spacing: 16 } } } }, [MutationPlugin] ) return ( <> <Box ref={ref} className='keen-slider'> {slides.map(slide => { return ( <Box key={slide} className='keen-slider__slide default-slide'> <Typography variant='h1'>{slide}</Typography> </Box> ) })} </Box> <Box sx={{ mt: 4 }} className='demo-space-x'> <Button variant='contained' onClick={() => setSlides([...slides, slides.length + 1])}> Add </Button> <Button variant='contained' color='error' onClick={() => setSlides(slides.slice(0, -1))}> Remove </Button> </Box> </> ) } export default SwiperMutationObserver `}</code> </pre> ) export const SwiperLoopJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperLoop = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ loop: true, rtl: direction === 'rtl' }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-7.jpg' alt='swiper 7' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-8.jpg' alt='swiper 8' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-9.jpg' alt='swiper 9' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-10.jpg' alt='swiper 10' /> </Box> </Box> ) } export default SwiperLoop `}</code> </pre> ) export const SwiperMultipleSlidesJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperMultipleSlides = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ rtl: direction === 'rtl', slides: { perView: 2 } }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-11.jpg' alt='swiper 11' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-12.jpg' alt='swiper 12' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-13.jpg' alt='swiper 13' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-14.jpg' alt='swiper 14' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-15.jpg' alt='swiper 15' /> </Box> </Box> ) } export default SwiperMultipleSlides `}</code> </pre> ) export const SwiperThumbnailsJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' import { useTheme } from '@mui/material/styles' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const ThumbnailPlugin = mainRef => { return slider => { function removeActive() { slider.slides.forEach(slide => { slide.classList.remove('active') }) } function addActive(idx) { 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 }) => { // ** Hooks const theme = useTheme() const [sliderRef, instanceRef] = useKeenSlider({ rtl: direction === 'rtl' }) const [thumbnailRef] = useKeenSlider( { rtl: direction === 'rtl', slides: { perView: 4, spacing: 8 }, breakpoints: { [(max-width: {theme.breakpoints.values.sm}px)]: { slides: { perView: 3, spacing: 8 } } } }, [ThumbnailPlugin(instanceRef)] ) return ( <> <Box ref={sliderRef} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-1.jpg' alt='swiper 1' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-2.jpg' alt='swiper 2' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-3.jpg' alt='swiper 3' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-4.jpg' alt='swiper 4' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-5.jpg' alt='swiper 5' /> </Box> </Box> <Box sx={{ mt: 2 }} ref={thumbnailRef} className='keen-slider thumbnail'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-1.jpg' alt='swiper 1' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-2.jpg' alt='swiper 2' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-3.jpg' alt='swiper 3' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-4.jpg' alt='swiper 4' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-5.jpg' alt='swiper 5' /> </Box> </Box> </> ) } export default SwiperThumbnails `}</code> </pre> ) export const SwiperSpacingJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperSpacing = ({ direction }) => { // ** Hook const [ref] = useKeenSlider({ rtl: direction === 'rtl', slides: { perView: 2, spacing: 16 } }) return ( <Box ref={ref} className='keen-slider'> <Box className='keen-slider__slide'> <img src='/images/banners/banner-16.jpg' alt='swiper 16' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-17.jpg' alt='swiper 17' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-18.jpg' alt='swiper 18' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-19.jpg' alt='swiper 19' /> </Box> <Box className='keen-slider__slide'> <img src='/images/banners/banner-20.jpg' alt='swiper 20' /> </Box> </Box> ) } export default SwiperSpacing `}</code> </pre> ) export const SwiperZoomJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** React Imports import { useState } from 'react' // ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const images = [ '/images/banners/banner-6.jpg', '/images/banners/banner-7.jpg', '/images/banners/banner-8.jpg', '/images/banners/banner-9.jpg', '/images/banners/banner-10.jpg' ] const SwiperZoom = ({ direction }) => { // ** State const [details, setDetails] = useState(null) // ** Hook const [sliderRef] = useKeenSlider({ initial: 2, rtl: direction === 'rtl', detailsChanged(s) { setDetails(s.track.details) } }) const scaleStyle = idx => { if (!details) return {} const slide = details.slides[idx] const scale_size = 1 const scale = 1 - (scale_size - scale_size * slide.portion) return { transform: scale({scale}), WebkitTransform: scale({scale}) } } return ( <Box ref={sliderRef} className='keen-slider zoom-out' sx={{ height: [200, 250, 395] }}> {images.map((src, idx) => ( <Box key={idx} className='keen-slider__slide zoom-out__slide'> <Box className='slider-content-wrapper' sx={{ ...scaleStyle(idx) }}> <img src={src} alt={slider {idx}} /> </Box> </Box> ))} </Box> ) } export default SwiperZoom `}</code> </pre> ) export const SwiperVerticalJSXCode = ( <pre className='language-jsx'> <code className='language-jsx'>{`// ** MUI Imports import Box from '@mui/material/Box' // ** Third Party Components import { useKeenSlider } from 'keen-slider/react' const SwiperVertical = () => { // ** Hook const [ref] = useKeenSlider({ vertical: true, slides: { perView: 2, spacing: 8 } }) return ( <Box ref={ref} className='keen-slider vertical' sx={{ maxHeight: 300 }}> {[...Array(10).keys()].map(num => ( <Box key={num} className='keen-slider__slide default-slide'> {num + 1} </Box> ))} </Box> ) } export default SwiperVertical `}</code> </pre> )