249 lines
6.8 KiB
TypeScript
249 lines
6.8 KiB
TypeScript
export const basicCarousel=`import { Card, CardContent } from "@/components/ui/card"
|
|
import {
|
|
Carousel,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
|
|
const BasicCarousel = () => {
|
|
return (
|
|
<Carousel className="w-full max-w-xs mx-auto">
|
|
<CarouselContent>
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index}>
|
|
<div className="p-1">
|
|
<Card>
|
|
<CardContent className="flex aspect-square items-center justify-center p-6">
|
|
<span className="text-4xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
);
|
|
};
|
|
|
|
export default BasicCarousel;`
|
|
|
|
export const sizeCarousel=`import { Card, CardContent } from "@/components/ui/card"
|
|
import {
|
|
Carousel,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
|
|
const SizeCarousel = () => {
|
|
return (
|
|
<Carousel
|
|
opts={{
|
|
align: "start",
|
|
}}
|
|
className="w-full max-w-sm mx-auto"
|
|
>
|
|
<CarouselContent>
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index} className="md:basis-1/2 lg:basis-1/3">
|
|
<div className="p-1">
|
|
<Card>
|
|
<CardContent className="flex aspect-square items-center justify-center p-6">
|
|
<span className="text-3xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
);
|
|
};
|
|
|
|
export default SizeCarousel;`
|
|
|
|
export const spacingCarousel=`"use client"
|
|
|
|
import { Card, CardContent } from "@/components/ui/card"
|
|
import {
|
|
Carousel,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
|
|
const SpacingCarousel = () => {
|
|
return (
|
|
<Carousel className="w-full max-w-sm mx-auto">
|
|
<CarouselContent className="-ml-1">
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index} className="pl-1 md:basis-1/2 lg:basis-1/3">
|
|
<div className="p-1">
|
|
<Card>
|
|
<CardContent className="flex aspect-square items-center justify-center p-6">
|
|
<span className="text-2xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
);
|
|
};
|
|
|
|
export default SpacingCarousel;`
|
|
|
|
export const verticalCarousel=`import { Card, CardContent } from "@/components/ui/card"
|
|
import {
|
|
Carousel,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
|
|
const VerticalCarousel = () => {
|
|
return (
|
|
<div className="pt-10 pb-12">
|
|
<Carousel
|
|
opts={{
|
|
align: "start",
|
|
}}
|
|
orientation="vertical"
|
|
className="w-full max-w-xs mx-auto"
|
|
>
|
|
<CarouselContent className="-mt-1 h-[200px] min-w-[200px]">
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index} className="pt-1 md:basis-1/2">
|
|
<div className="p-1">
|
|
<Card>
|
|
<CardContent className="flex items-center justify-center p-6">
|
|
<span className="text-3xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default VerticalCarousel;`
|
|
|
|
export const autoplayCarousel=`"use client"
|
|
import { Card, CardContent } from "@/components/ui/card"
|
|
import Autoplay from "embla-carousel-autoplay"
|
|
|
|
import {
|
|
Carousel,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
import { useRef } from "react";
|
|
|
|
const AutoplayCarousel = () => {
|
|
const plugin = useRef(
|
|
Autoplay({ delay: 2000, stopOnInteraction: true })
|
|
)
|
|
|
|
return (
|
|
<Carousel
|
|
className="w-full max-w-sm mx-auto"
|
|
plugins={[plugin.current]}
|
|
onMouseEnter={plugin.current.stop}
|
|
onMouseLeave={plugin.current.reset}
|
|
>
|
|
<CarouselContent className="-ml-1">
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index} className="pl-1 md:basis-1/2 lg:basis-1/3">
|
|
<div className="p-1">
|
|
<Card>
|
|
<CardContent className="flex aspect-square items-center justify-center p-6">
|
|
<span className="text-2xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
);
|
|
};
|
|
|
|
export default AutoplayCarousel;`
|
|
|
|
export const customCarousel=`"use client"
|
|
import { Card, CardContent } from "@/components/ui/card"
|
|
import {
|
|
Carousel,
|
|
CarouselApi,
|
|
CarouselContent,
|
|
CarouselItem,
|
|
CarouselNext,
|
|
CarouselPrevious,
|
|
} from "@/components/ui/carousel"
|
|
import { useEffect, useState } from "react"
|
|
|
|
const CustomCarousel = () => {
|
|
const [api, setApi] = useState<CarouselApi | undefined>(undefined)
|
|
const [current, setCurrent] = useState<number>(0)
|
|
const [count, setCount] = useState<number>(0)
|
|
|
|
useEffect(() => {
|
|
if (!api) {
|
|
return
|
|
}
|
|
|
|
setCount(api.scrollSnapList().length)
|
|
setCurrent(api.selectedScrollSnap() + 1)
|
|
|
|
api.on("select", () => {
|
|
setCurrent(api.selectedScrollSnap() + 1)
|
|
})
|
|
}, [api])
|
|
|
|
return (
|
|
<div className="flex flex-col items-center gap-3">
|
|
<Carousel setApi={setApi} className="w-full max-w-xs">
|
|
<CarouselContent>
|
|
{Array.from({ length: 5 }).map((_, index) => (
|
|
<CarouselItem key={index}>
|
|
<Card>
|
|
<CardContent className="flex aspect-square items-center justify-center p-6">
|
|
<span className="text-4xl font-semibold">{index + 1}</span>
|
|
</CardContent>
|
|
</Card>
|
|
</CarouselItem>
|
|
))}
|
|
</CarouselContent>
|
|
<CarouselPrevious />
|
|
<CarouselNext />
|
|
</Carousel>
|
|
<div className="py-2 text-center font-medium text-sm text-muted-foreground">
|
|
Slide <strong>{current}</strong> of <strong>{count}</strong>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default CustomCarousel
|
|
` |