1
0
mirror of https://github.com/vercel/commerce.git synced 2025-07-26 11:41:23 +00:00
Files
.github
.vscode
app
components
cart
layout
modules
blurb-section
carousel
carousel.tsx
filtered-product-list
hero
reusable-section
slider
usp-section
pages
product
search
ui
loading-dots.tsx
preview-provider.tsx
price.tsx
prose.tsx
helpers
lib
messages
public
.env.example
.eslintrc.js
.gitignore
.npmrc
.nvmrc
.prettierignore
README.md
components.json
i18n-config.ts
license.md
middleware.ts
next.config.js
package.json
playwright.config.ts
pnpm-lock.yaml
postcss.config.js
prettier.config.js
sanity.config.ts
tailwind.config.js
tsconfig.json
commerce/components/modules/carousel/carousel.tsx
2023-08-10 15:16:45 +02:00

58 lines
1.4 KiB
TypeScript

import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/react/24/outline';
import 'glider-js/glider.min.css';
import React from 'react';
import Glider from 'react-glider';
export interface CarouselItemProps {
children: React.ReactNode;
className?: string;
}
export const CarouselItem: React.FC<CarouselItemProps> = ({
children,
className = 'ml-2 first:ml-0 lg:ml-4'
}: CarouselItemProps) => {
return <div className={className}>{children}</div>;
};
export interface CarouselProps {
children: JSX.Element | JSX.Element[] | any;
gliderClasses?: string;
hasArrows?: boolean;
hasDots?: boolean;
slidesToShow?: number;
slidesToScroll?: number;
responsive?: any;
}
export const Carousel: React.FC<CarouselProps> = ({
children,
gliderClasses,
hasArrows = true,
hasDots = true,
slidesToShow = 1,
slidesToScroll = 1,
responsive
}) => {
return (
<>
<Glider
className={`relative block ${gliderClasses}`}
draggable
slidesToShow={slidesToShow}
scrollLock
slidesToScroll={slidesToScroll}
hasArrows={hasArrows}
hasDots={hasDots}
iconLeft={<ArrowLeftIcon className="h-6 w-6" />}
iconRight={<ArrowRightIcon className="h-6 w-6" />}
responsive={[responsive]}
>
{React.Children.map(children, (child) => {
return React.cloneElement(child);
})}
</Glider>
</>
);
};