Saltar al contenido
Logic2BUI

Buscar en la documentación

Busca componentes y documentación

Nuevo
Menú

Carrusel

Carrusel de diapositivas con controles anterior/siguiente y navegación por teclado.

Instalación

npx logic2b@next add carousel

Uso

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" y aria-roledescription="carousel"; cada diapositiva es un role="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 disabled cuando no queda contenido en esa dirección.

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.

JSX generado
<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>

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.

Ver JSON
Tipo
type CarouselApi = UseEmblaCarouselType[1]
Componente
Props: React.ComponentProps<"div"> & CarouselProps
PropiedadTipoObligatoriaValor predeterminadoDescripción
orientation"horizontal" | "vertical"No"horizontal"—
optsCarouselOptionsNo——
setApi(api: CarouselApi) => voidNo——
pluginsCarouselPluginNo——
Componente
Props: React.ComponentProps<"div">
Componente
Props: React.ComponentProps<"div">
Componente
Props: React.ComponentProps<typeof Button>
PropiedadTipoObligatoriaValor predeterminadoDescripción
variantnull | "link" | "default" | "destructive" | "secondary" | "outline" | "ghost"No"outline"—
sizenull | "default" | "sm" | "lg" | "icon"No"icon"—
Componente
Props: React.ComponentProps<typeof Button>
PropiedadTipoObligatoriaValor predeterminadoDescripción
variantnull | "link" | "default" | "destructive" | "secondary" | "outline" | "ghost"No"outline"—
sizenull | "default" | "sm" | "lg" | "icon"No"icon"—

Comportamiento legible por máquinas y responsabilidades de quien integra carousel. Los detalles normativos conservan el texto canónico del registro.

Ver JSON
Soporte
Comportamiento implementado
Patrón
carousel
Embla Carousel
Interacciones de teclado para carousel
TeclasComportamiento
ArrowLeft ArrowRightMove to the previous or next slide.
TabReach 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.