|
1 | 1 | import { useEffect } from 'react' |
2 | 2 | import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/solid' |
3 | | -import { ImageSliderItem } from './ImageSliderItem' |
4 | | -import SwiperSlider from './script' |
| 3 | +import { Slide } from './Slide' |
| 4 | +import { Image } from './Image' |
| 5 | +import SliderScript from './script.ts' |
5 | 6 |
|
6 | 7 | export interface ImageSliderProp { |
7 | 8 | children: React.ReactNode |
8 | | - loop?: boolean |
9 | | - speed?: number |
10 | | - slidesPerViewMobile?: number |
11 | | - slidesPerViewTablet?: number |
12 | 9 | slidesPerViewDesktop: number |
13 | | - customClass?: string |
| 10 | + slidesPerViewTablet?: number |
| 11 | + slidesPerViewMobile?: number |
14 | 12 | } |
15 | 13 |
|
16 | 14 | export const ImageSliderWrapper = ({ |
17 | 15 | children, |
18 | | - loop = false, |
19 | | - speed = 500, |
20 | | - slidesPerViewMobile = 1, |
21 | | - slidesPerViewTablet = 2, |
22 | | - slidesPerViewDesktop = 3, |
23 | | - customClass, |
| 16 | + slidesPerViewDesktop, |
| 17 | + slidesPerViewTablet, |
| 18 | + slidesPerViewMobile, |
24 | 19 | }: ImageSliderProp) => { |
25 | 20 | useEffect(() => { |
26 | | - SwiperSlider() |
27 | | - }, []) |
| 21 | + SliderScript() |
| 22 | + }) |
| 23 | + |
| 24 | + const arrowButtons = `bg-cu-black-50 text-cu-black-800 hover:bg-cu-red hover:text-white hover:bg-cu-red relative flex items-center justify-center rounded-md h-8 w-8 z-50` |
| 25 | + const arrowIcons = `w-5 h-5 [&>path]:stroke-[2]` |
28 | 26 |
|
29 | 27 | return ( |
30 | 28 | <div |
31 | | - className={`swiper swiper--slider ${customClass ? customClass : ''}`} |
32 | | - data-swiper-class={`${customClass ? customClass : 'swiper'}`} |
33 | | - data-swiper-loop={loop} |
34 | | - data-swiper-speed={speed} |
35 | | - data-swiper-perview-mobile={slidesPerViewMobile} |
36 | | - data-swiper-perview-tablet={slidesPerViewTablet} |
37 | | - data-swiper-perview-desktop={slidesPerViewDesktop} |
| 29 | + className="slider overflow-hidden" |
| 30 | + data-slides-desktop={slidesPerViewDesktop} |
| 31 | + data-slides-tablet={slidesPerViewTablet} |
| 32 | + data-slides-mobile={slidesPerViewMobile} |
38 | 33 | > |
39 | | - <div className="swiper-wrapper">{children}</div> |
40 | | - <div className="swiper__footer"> |
41 | | - <button type="button" className="swiper__button swiper__button--prev" aria-label="Previous slide"> |
42 | | - <ChevronLeftIcon className="w-8 h-8 [&>path]:stroke-[2]" aria-hidden="true" /> |
| 34 | + {/* Slider Slides */} |
| 35 | + <div className="slider__wrap flex align-items-center">{children}</div> |
| 36 | + |
| 37 | + {/* Slider Arrow */} |
| 38 | + <div className="flex align-items-center gap-3 justify-center mt-4"> |
| 39 | + <button className={`slider__arrow slider__arrow--prev ${arrowButtons}`}> |
| 40 | + <span className="sr-only">Go to Previous Slide</span> |
| 41 | + <ChevronLeftIcon className={arrowIcons} aria-hidden="true" /> |
43 | 42 | </button> |
44 | | - <button type="button" className="swiper__button swiper__button--next" aria-label="Next slide"> |
45 | | - <ChevronRightIcon className="w-8 h-8 [&>path]:stroke-[2]" aria-hidden="true" /> |
| 43 | + |
| 44 | + <button className={`slider__arrow slider__arrow--next ${arrowButtons}`}> |
| 45 | + <span className="sr-only">Go to Next Slide</span> |
| 46 | + <ChevronRightIcon className={arrowIcons} aria-hidden="true" /> |
46 | 47 | </button> |
47 | 48 | </div> |
48 | 49 | </div> |
49 | 50 | ) |
50 | 51 | } |
51 | 52 |
|
52 | 53 | export const ImageSlider = Object.assign(ImageSliderWrapper, { |
53 | | - Item: ImageSliderItem, |
| 54 | + Slide: Slide, |
| 55 | + Image: Image, |
54 | 56 | }) |
55 | 57 |
|
56 | 58 | ImageSliderWrapper.displayName = 'ImageSlider' |
0 commit comments