Carousel
tailark-base-ui/carouselFreeComponent
Tailark Base UI Carousel component
See it running
Open the demo on Tailark Base UI
tailark.com/blocks/carouselInstall it
npx shadcn@latest add https://tailark.com/r/carousel.jsonSource
1'use client'23import * as React from 'react'4import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react'5import { ArrowLeft, ArrowRight } from 'lucide-react'6import { cn } from '@/lib/utils'7import { Button } from '@/components/ui/button'89type CarouselApi = UseEmblaCarouselType[1]10type UseCarouselParameters = Parameters<typeof useEmblaCarousel>11type CarouselOptions = UseCarouselParameters[0]12type CarouselPlugin = UseCarouselParameters[1]1314type CarouselProps = {15 opts?: CarouselOptions16 plugins?: CarouselPlugin17 orientation?: 'horizontal' | 'vertical'18 setApi?: (api: CarouselApi) => void19}2021type CarouselContextProps = {22 carouselRef: ReturnType<typeof useEmblaCarousel>[0]23 api: ReturnType<typeof useEmblaCarousel>[1]24 scrollPrev: () => void25 scrollNext: () => void26 canScrollPrev: boolean27 canScrollNext: boolean28} & CarouselProps2930const CarouselContext = React.createContext<CarouselContextProps | null>(null)3132function useCarousel() {33 const context = React.useContext(CarouselContext)3435 if (!context) {36 throw new Error('useCarousel must be used within a <Carousel />')37 }3839 return context40}4142const Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselProps>(({ orientation = 'horizontal', opts, setApi, plugins, className, children, ...props }, ref) => {43 const [carouselRef, api] = useEmblaCarousel(44 {45 ...opts,46 axis: orientation === 'horizontal' ? 'x' : 'y',47 },48 plugins49 )50 const [canScrollPrev, setCanScrollPrev] = React.useState(false)51 const [canScrollNext, setCanScrollNext] = React.useState(false)5253 const onSelect = React.useCallback((api: CarouselApi) => {54 if (!api) {55 return56 }5758 setCanScrollPrev(api.canScrollPrev())59 setCanScrollNext(api.canScrollNext())60 }, [])6162 const scrollPrev = React.useCallback(() => {63 api?.scrollPrev()64 }, [api])6566 const scrollNext = React.useCallback(() => {67 api?.scrollNext()68 }, [api])6970 const handleKeyDown = React.useCallback(71 (event: React.KeyboardEvent<HTMLDivElement>) => {72 if (event.key === 'ArrowLeft') {73 event.preventDefault()74 scrollPrev()75 } else if (event.key === 'ArrowRight') {76 event.preventDefault()77 scrollNext()78 }79 },80 [scrollPrev, scrollNext]81 )8283// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from Tailark Base UI
All 468 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | Tailark Base UI | Components | Free | 1 dep | |
| Actionnable Illustrationactionnable | Tailark Base UI | Components | Paid | no deps | |
| Comment Illustrationadd-comment | Tailark Base UI | Components | Paid | no deps | |
| Agent Illustrationagent-feedback | Tailark Base UI | Components | Paid | no deps | |
| Agent Illustrationagent-task-planning | Tailark Base UI | Components | Paid | no deps | |
| Agent Illustrationagent-tasks | Tailark Base UI | Components | Paid | no deps | |
| Agent Illustrationagent-workflow | Tailark Base UI | Components | Paid | no deps | |
| Ai Illustrationai-1 | Tailark Base UI | Components | Paid | no deps |
