Instalación
npx logic2b@next add carouselUso
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselNext,
CarouselPrevious,
} from "@/components/ui/carousel"
<Carousel>
<CarouselContent>
<CarouselItem>1</CarouselItem>
<CarouselItem>2</CarouselItem>
<CarouselItem>3</CarouselItem>
</CarouselContent>
<CarouselPrevious />
<CarouselNext />
</Carousel>
Está construido sobre
embla-carousel-react.
Pasa las opciones de Embla mediante opts, los plugins mediante plugins o
recibe la API imperativa con setApi.
Notas de uso
CarouselPrevious y CarouselNext aceptan las propiedades estándar de
Button, como variant y size, y se desactivan automáticamente en los extremos.
Ejemplos
Varios elementos
Define el basis de cada CarouselItem para mostrar varias diapositivas a la vez.
Vertical
Usa orientation="vertical" para desplazar las diapositivas de arriba abajo.
Accesibilidad
- La raíz usa
role="region"yaria-roledescription="carousel"; cada diapositiva es unrole="group"identificado como tal. - Cuando el carrusel tiene el foco, Flecha izquierda y Flecha derecha avanzan a la diapositiva anterior o siguiente.
- Los botones incluyen etiquetas solo para lectores de pantalla y pasan a
disabledcuando no queda contenido en esa dirección.
Playground interactivo
Edita las propiedades del componente y revisa el JSX exacto antes de copiarlo. La vista previa se carga solo cuando esta sección entra en pantalla.
<Carousel
orientation="horizontal"
className="w-full max-w-xs"
aria-label="Registry highlights"
>
<CarouselContent
className="h-44"
>
<CarouselItem>
<div
className="flex h-40 items-center justify-center rounded-lg border bg-muted text-3xl font-semibold"
>1</div>
</CarouselItem>
<CarouselItem>
<div
className="flex h-40 items-center justify-center rounded-lg border bg-muted text-3xl font-semibold"
>2</div>
</CarouselItem>
<CarouselItem>
<div
className="flex h-40 items-center justify-center rounded-lg border bg-muted text-3xl font-semibold"
>3</div>
</CarouselItem>
</CarouselContent>
<CarouselPrevious />
<CarouselNext />
</Carousel>Referencia de API
Generada a partir de las exportaciones públicas de TypeScript en src/ui/carousel.tsx. Las descripciones técnicas conservan el texto canónico del código fuente.
CarouselApi
Tipotype CarouselApi = UseEmblaCarouselType[1]Carousel
ComponenteProps: React.ComponentProps<"div"> & CarouselProps| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
orientation | "horizontal" | "vertical" | No | "horizontal" | — |
opts | CarouselOptions | No | — | — |
setApi | (api: CarouselApi) => void | No | — | — |
plugins | CarouselPlugin | No | — | — |
CarouselContent
ComponenteProps: React.ComponentProps<"div">CarouselItem
ComponenteProps: React.ComponentProps<"div">CarouselPrevious
ComponenteProps: React.ComponentProps<typeof Button>| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
variant | null | "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | No | "outline" | — |
size | null | "default" | "sm" | "lg" | "icon" | No | "icon" | — |
CarouselNext
ComponenteProps: React.ComponentProps<typeof Button>| Propiedad | Tipo | Obligatoria | Valor predeterminado | Descripción |
|---|---|---|---|---|
variant | null | "link" | "default" | "destructive" | "secondary" | "outline" | "ghost" | No | "outline" | — |
size | null | "default" | "sm" | "lg" | "icon" | No | "icon" | — |
Contrato de accesibilidad
Comportamiento legible por máquinas y responsabilidades de quien integra carousel. Los detalles normativos conservan el texto canónico del registro.
- Soporte
- Comportamiento implementado
- Patrón
- carousel
- Embla Carousel
| Teclas | Comportamiento |
|---|---|
| ArrowLeft ArrowRight | Move to the previous or next slide. |
| Tab | Reach the explicit previous/next buttons. |
Semántica incorporada
- The root is a labelled carousel region; slides are labelled groups and controls expose names/disabled state.
Responsabilidades de integración
- Give the carousel a contextual aria-label and avoid auto-rotation without a pause control.