Product List
manifest-ui/product-listFreeBlock
Product list with list, grid, carousel, and picker variants.
Install it
npx shadcn@latest add https://ui.manifest.build/r/product-list.jsonSource
1'use client'23import { Button } from '@/components/ui/button'4import { cn } from '@/lib/utils'5import { Check, ChevronLeft, ChevronRight, ShoppingCart, Star } from 'lucide-react'6import { useCallback, useState } from 'react'78// Import types from shared types file to avoid circular dependencies9import type { Product } from './types'10// Re-export for backward compatibility11export type { Product } from './types'1213import { demoProducts } from './demo/list'141516/**17 * ═══════════════════════════════════════════════════════════════════════════18 * ProductListProps19 * ═══════════════════════════════════════════════════════════════════════════20 *21 * Props for configuring a versatile product list component with list, grid,22 * carousel, and picker variants.23 */24export interface ProductListProps {25 data?: {26 /** Array of products to display in the list. */27 products?: Product[]28 }29 actions?: {30 /** Called when a user selects a product from the list. */31 onSelectProduct?: (product: Product) => void32 /** Called when products are added to cart (picker variant only). */33 onAddToCart?: (products: Product[]) => void34 }35 appearance?: {36 /**37 * Layout variant for displaying products.38 * @default "list"39 */40 variant?: 'list' | 'grid' | 'carousel' | 'picker'41 /**42 * Currency code for price formatting (e.g., "USD", "EUR").43 * @default "EUR"44 */45 currency?: string46 /**47 * Number of columns for grid variant.48 * @default 449 */50 columns?: 3 | 451 /**52 * Custom label for the add to cart button (picker variant).53 * @default "Add to cart"54 */55 buttonLabel?: string56 }57 control?: {58 /** Index of the currently selected product. */59 selectedProductIndex?: number60 }61}6263// Horizontal card for list variant64function ProductHorizontalCard({65 product,66 selected,67 onSelect,68 formatCurrency69}: {70 product: Product71 selected: boolean72 onSelect: () => void73 formatCurrency: (value: number) => string74}) {75 return (76 <button77 onClick={onSelect}78 disabled={!product.inStock}79 className={cn(80// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from Manifest UI
All 32 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Amount Inputamount-input | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Chat Conversationchat-conversation | Manifest UI | Blocks | Free | 1 dep · 3 files | |
| Contact Formcontact-form | Manifest UI | Blocks | Free | 1 dep · 3 files | |
| Date & Time Pickerdate-time-picker | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Cardevent-card | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Confirmationevent-confirmation | Manifest UI | Blocks | Free | 1 dep · 2 files | |
| Event Detailevent-detail | Manifest UI | Blocks | Free | 3 deps · 2 files | |
| Event Listevent-list | Manifest UI | Blocks | Free | 3 deps · 2 files |
