/modules/carousel/simple-carousel

El componente BkCarousel permite al usuario mostrar grupos de componentes a través de una animación.

Nos hemos basado en Embla Carousel. Para un uso mas extendido, ir a la documentación.

Todos los elementos que se encuentren dentro del componente BkCarousel serán considerados slides individuales. Esto quiere decir que cada uno de los children son los elementos que forman el componente en su totalidad.

Carrusel simple

Carrusel con los slides a todo lo ancho. En todos los casos, las opciones del carrusel se pasarán a través de la prop carouselOptions. En este ejemplo hemos añadido la opción loop.

Swipe 1

Swipe 2

Swipe 3

Swipe 4

Swipe 5

Swipe 6

const simpleCarousel = [
    {
        color: 'success',
        width: '200px',
    },
    {
        color: 'warning',
        width: '250px',
    },
    {
        color: 'error',
        width: '350px',
    },
    {
        color: 'info',
        width: '500px',
    },
    {
        color: 'experienceFitness',
        width: '200px',
    },
    {
        color: 'experienceWorkout',
        width: '250px',
    }
];
<BkSimpleCarousel
    carouselOptions={{ loop: true }}
>
    {
        simpleCarousel.map((slide, index) => (
            <BkBox
                key={ index }
                sx={{
                    backgroundColor: theme.palette[slide.color].main,
                    alignItems: 'center',
                    display: 'flex',
                    justifyContent: 'center',
                    height: '300px',
                }}
            >
                <BkTypography variant='subtitleLarge' gutterBottom>Swipe { index  + 1 }</BkTypography>
            </BkBox>
        ))
    }
</BkSimpleCarousel>

Contenedor con border radius

Hemos añadido la prop, borderRadius, para el caso en que se requiera que el contenedor tenga el border radius indicado en el theme.

Swipe 1

Swipe 2

Swipe 3

Swipe 4

Swipe 5

Swipe 6

<BkSimpleCarousel
    carouselOptions={{ loop: true }}
    borderRadius
>
    { children }
</BkSimpleCarousel>

Múltiples Slides

Para tener múltiples slides, tendremos que añadir valores a varias props. Estos valores tendrán que ser obligatoriamente valores que correspondan a la propiedad width de CSS. Por defecto, estos valores son "100%" y como funciona es que modifican la propiedad flex: 0 0 valorAñadido.

Estas props corresponden a cada uno de los breakpoints definidos en el theme y son slideWidthXs, slideWidthMobile, slideWidthSm, slideWidthMd, slideWidthLg y slideWidthXl.

Swipe 1

Swipe 2

Swipe 3

Swipe 4

Swipe 5

Swipe 6

<BkSimpleCarousel
    carouselOptions={{ align: 'start', slidesToScroll: 3, loop: true }}
    borderRadius
    colorStyle="accent"
    spaceBetween={ 0 }
    slideWidthXs="33.35%"
    slideWidthMobile="33.35%"
    slideWidthSm="33.35%"
    slideWidthMd="33.35%"
    slideWidthLg="33.35%"
    slideWidthXl="33.35%"
>
    { children }
</BkSimpleCarousel>

Espacio entre slides y navegación

Para añadir espacio entre slides hemos añadido la prop spaceBetween. El valor deberá ser numérico.

Añadiendo las props showNavigationArrows y showPagination, se mostrarán las flechas de navegación y el paginado, respectivamente.

El estilo de color de las flechas y el paginado lo podemos cambiar a través de la prop colorStyle.

Swipe 1

Swipe 2

Swipe 3

Swipe 4

Swipe 5

Swipe 6

Swipe 1

Swipe 2

Swipe 3

Swipe 4

Swipe 5

Swipe 6

<BkSimpleCarousel
    carouselOptions={{ align: 'start', slidesToScroll: 3 }}
    colorStyle="secondary"
    showNavigationArrows
    showPagination
    spaceBetween={ 16 }
    slideWidthXs="32.55%"
    slideWidthMobile="32.55%"
    slideWidthSm="32.55%"
    slideWidthMd="32.55%"
    slideWidthLg="32.55%"
    slideWidthXl="32.55%"
>
    { children }
</BkSimpleCarousel>

<BkSimpleCarousel
    carouselOptions={{ align: 'start', slidesToScroll: 3 }}
    colorStyle="secondary"
    showNavigationArrows
    showPagination
    spaceBetween={ 4 }
    slideWidthXs="32.55%"
    slideWidthMobile="32.55%"
    slideWidthSm="32.55%"
    slideWidthMd="32.55%"
    slideWidthLg="32.55%"
    slideWidthXl="32.55%"
>
    { children }
</BkSimpleCarousel>

Espacio (padding) para Cards y posición de las flechas de navegación

Nuestras Cards tienen un efecto de escalado en hover, para qe no queden ocultas al usarlas en el carrusel, y para añadir versatilidad, hemos añadido la prop paddingStyle. A través de esta prop podremos añadir estilos CSS correspondientes a la propiedad padding al contenedor del carrusel.

¿Qué pasa si queremos mostrar las "flechas" de navegación en otro lugar? Para esto tendremos que pasar un objeto de estilos vía prop navigationArrowStyles. Con las propiedades de CSS de flex, position y otras podremos darle multitud de estilos a la ubicación de la navegación.

Swipe 1: Card

Swipe 2: Card

Swipe 3: Card

Swipe 4: Card

Swipe 5: Card

Swipe 6: Card

<BkSimpleCarousel
    colorStyle="accent"
    showNavigationArrows
    showPagination={ matchesMd }
    spaceBetween={ 16 }
    slideWidthXs="80%"
    slideWidthMobile="270px"
    slideWidthSm="270px"
    slideWidthMd="300px"
    slideWidthLg="300px"
    slideWidthXl="300px"
    paddingStyle="1rem 0"
    navigationArrowStyles={{
        justifyContent: 'end',
        display: matchesMd ? 'none' : 'flex',
        flexDirection: 'row',
        padding: '1rem 0',
        paddingLeft: matchesMd ? '1rem' : '6rem',
        paddingRight: matchesMd ? '1rem' : '6rem',
    }}
>
    { children }
</BkSimpleCarousel>

Slides de diferentes tamaños

Podremos tener slides de diferentes tamaños. Para esto, será necesario modificar las props slideWidthXs, slideWidthMobile, slideWidthSm, slideWidthMd, slideWidthLg y slideWidthXl, y que todas tengan de valor "auto". Luego en cada slide independiente le podemos añadir el ancho deseado.

Swipe 1: 200px

Swipe 2: 250px

Swipe 3: 350px

Swipe 4: 500px

Swipe 5: 200px

Swipe 6: 250px

<BkSimpleCarousel
    colorStyle="accent"
    showNavigationArrows
    showPagination={ matchesMd }
    spaceBetween={ 16 }
    slideWidthXs="auto"
    slideWidthMobile="auto"
    slideWidthSm="auto"
    slideWidthMd="auto"
    slideWidthLg="auto"
    slideWidthXl="auto"
    paddingStyle="1rem 0"
    navigationArrowStyles={{
        justifyContent: 'end',
        display: matchesMd ? 'none' : 'flex',
        flexDirection: 'row',
        padding: '1rem 0',
        paddingLeft: matchesMd ? '1rem' : '6rem',
        paddingRight: matchesMd ? '1rem' : '6rem',
    }}
>
    {
        simpleCarousel.map((slide, index) => (
            <BkBox
                key={ index }
                sx={{
                    backgroundColor: theme.palette[slide.color].main,
                    alignItems: 'center',
                    display: 'flex',
                    justifyContent: 'center',
                    borderRadius: '8px',
                    height: '300px',
                    transition: 'all .25s',
                    width: slide.width,
                    '&:hover': {
                        transform: 'scale(1.05)'
                    }
                }}
            >
                <BkTypography variant='subtitleLarge' gutterBottom>Swipe { index  + 1 }: { slide.width }</BkTypography>
            </BkBox>
        ))
    }
</BkSimpleCarousel>

Añadiendo estilos extras

Podemos añadir estilos extras al contenedor de los slides a través de la prop carouselSlidesStyles. Esto nos puede ayudar a que podamos, por ejemplo, alinear slides de diferentes tamaños añdiendo propiedades de flex.

Swipe 1: 200px

Swipe 2: 250px

Swipe 3: 350px

Swipe 4: 500px

Swipe 5: 200px

Swipe 6: 250px

<BkSimpleCarousel
    colorStyle="accent"
    carouselOptions={{
        align: 'start',
        containScroll: 'trimSnaps',
    }}
    showNavigationArrows
    showPagination={ matchesMd }
    spaceBetween={ 16 }
    slideWidthXs="auto"
    slideWidthMobile="auto"
    slideWidthSm="auto"
    slideWidthMd="auto"
    slideWidthLg="auto"
    slideWidthXl="auto"
    paddingStyle="1rem 0"
    navigationArrowStyles={{
        justifyContent: 'end',
        display: matchesMd ? 'none' : 'flex',
        flexDirection: 'row',
        padding: '1rem 0',
        paddingLeft: matchesMd ? '1rem' : '6rem',
        paddingRight: matchesMd ? '1rem' : '6rem',
    }}
    carouselSlidesStyles={{
        alignItems: 'center',
    }}
>
    {
        simpleCarousel.map((slide, index) => (
            <BkBox
                key={ index }
                sx={{
                    backgroundColor: theme.palette[slide.color].main,
                    alignItems: 'center',
                    display: 'flex',
                    justifyContent: 'center',
                    borderRadius: '8px',
                    height: '300px',
                    transition: 'all .25s',
                    width: slide.width,
                    '&:hover': {
                        transform: 'scale(1.05)'
                    }
                }}
            >
                <BkTypography variant='subtitleLarge' gutterBottom>Swipe { index  + 1 }: { slide.width }</BkTypography>
            </BkBox>
        ))
    }
</BkSimpleCarousel>

NombreTypeDefaultReuqeridoDescripción
borderRadiusbool

Si es igual a "true", el contenedor tendrá el border radius definido en el theme.
carouselOptionsobject

Configuración de las opciones del carrusel.
carouselPluginsarray

Para añadir plugins al carrusel, por ejemplo, autoplay
carouselSlidesStylesobject

Se puede usar para añadir estilos extras en el contenedor de los slides. Por ejemplo, añadir estilos de flex para alinear slides.
childrennode

Contenido del componente.
colorStyle"accent" | "secondary"

accent

Color de flachas de navegación y el paginado.
paddingStylebool

Si es igual a "true", el contenedor tendrá el valor de padding añadido.
navigationArrowStylesobject

Estilo de posición de las flechas de navegación.
showNavigationArrowsbool

false

Si es igual a "true", se mostrarán las flechas de navegación.
showPaginationbool

false

Si es igual a "true", el componente mostrará la paginación.
slideWidthXsstring

Ancho de los slides en breakpoint xs.
slideWidthMobilestring

Ancho de los slides en breakpoint mobile.
slideWidthSmstring

Ancho de los slides en breakpoint sm.
slideWidthMdstring

Ancho de los slides en breakpoint md.
slideWidthLgstring

Ancho de los slides en breakpoint lg.
slideWidthXlstring

Ancho de los slides en breakpoint xl.
spaceBetweennumber

Ancho del espacio entre slides.