Category Card Carousel

Installation

Run the following command

npx vibes@latest add category-card-carousel

Usage

import { type CategoryCardContent } from '@/vibes/soul/primitives/category-card';import { CategoryCardCarousel } from '@/vibes/soul/sections/category-card-carousel';function Usage() {  return (      <CategoryCardCarousel          cards={cards}          emptyStateSubtitle="Try browsing our complete catalog of products."          emptyStateTitle="No products found"          iconColorScheme="dark"      />  );}const cards: CategoryCardContent[] = [  {    title: 'Mini Bar Bag',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTo1YzIwNTljMi04NzcwLTRiM2ItYmIzMy02ZTk0ODNkY2M5MDk=/mini-bar-bag.jpeg',      alt: 'Mini Bar Bag',    },    href: '#1',  },  {    title: 'Mini Bar Bag',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTphOTFmNjU3Ny0zMDMxLTQzNjYtOWUzNC02MjRkYWQ4OTkzOWI=/mini-bar-bag-2.jpeg',      alt: 'Mini Bar Bag',    },    href: '#2',  },  {    title: 'Stem Caddy',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTo5NTIxMmU4MC0xY2EwLTQxZjktOTBiYS0yOWFhYmU3ZTNkMzA=/stem-caddy.jpeg',      alt: 'Stem Caddy',    },    href: '#3',  },  {    title: 'Hip Slinger',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTo0MDcxNDBlYy1jYmIzLTRiNjQtOTUxMS1mMTIyMGUyYWY5MjQ=/hip-slinger.jpeg',      alt: 'Hip Slinger',    },    href: '#4',  },  {    title: 'Everyday Tote',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTowODYwYTY2NC02NjdjLTRhODYtYTUxYy1jOWExNzI5YTdjMDk=/everyday-tote.jpeg',      alt: 'Everyday Tote',    },    href: '#5',  },  {    title: 'Mini Saddlebag',    image: {      src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTo4YzEyMjUyOC0zMWU5LTQyYWYtOTFlYi04YjQzNmRiZGVmNDU=/mini-saddlebag.jpeg',      alt: 'Mini Saddlebag',    },    href: '#6',  },];

API Reference

CategoryCardCarouselProps

PropTypeDefault
cards*
Streamable<CategoryCardContent[]>
aspectRatio
'5:6' | '3:4' | '1:1'
textColorScheme
'light'| 'dark'
iconColorScheme
'light'| 'dark'
carouselColorScheme
'light'| 'dark'
'light'
className
string
emptyStateTitle
Streamable<string>
emptyStateSubtitle
Streamable<string>
scrollbarLabel
string
previousLabel
string
nextLabel
string
showButtons
boolean
showScrollbar
boolean
hideOverflow
boolean
placeholderCount
number

CategoryCardContent

PropTypeDefault
title*
string
image
{ src: string; alt: string }
href*
string

CSS Variables

This component supports various CSS variables for theming. Here's a comprehensive list.

:root {  --category-card-carousel-light-empty-title: var(--foreground);  --category-card-carousel-light-empty-subtitle: var(--contrast-500);  --category-card-carousel-dark-empty-title: var(--background);  --category-card-carousel-dark-empty-subtitle: var(--contrast-200);}

Changelog

2025-07-28

  • Renamed to CategoryCardCarousel from CardCarousel