{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "lumo", "homepage": "https://lumo-www.vercel.app", "items": [ { "name": "lib", "type": "registry:lib", "title": "Lumo commerce model and money utilities", "description": "The canonical commerce data model (Product, Variant, Money, CartLine, Address) and minor-unit-aware money helpers that every Lumo block builds on. Map your backend onto these types once.", "files": [ { "path": "packages/utils/src/types.ts", "type": "registry:lib", "target": "lib/lumo/types.ts" }, { "path": "packages/utils/src/format-money.ts", "type": "registry:lib", "target": "lib/lumo/money.ts" } ] }, { "name": "price-display", "type": "registry:ui", "title": "Price Display", "description": "Renders a Money value with optional compare-at price and discount badge.", "dependencies": ["class-variance-authority"], "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/price-display.tsx", "type": "registry:ui", "target": "components/lumo/price-display.tsx" } ] }, { "name": "rating-stars", "type": "registry:ui", "title": "Rating Stars", "description": "Accessible star rating with an optional review count.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/rating-stars.tsx", "type": "registry:ui", "target": "components/lumo/rating-stars.tsx" } ] }, { "name": "quantity-stepper", "type": "registry:ui", "title": "Quantity Stepper", "description": "Accessible increment and decrement control with min and max clamping.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/quantity-stepper.tsx", "type": "registry:ui", "target": "components/lumo/quantity-stepper.tsx" } ] }, { "name": "variant-selector", "type": "registry:ui", "title": "Variant Selector", "description": "Option picker that detects which variant combinations are available.", "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/variant-selector.tsx", "type": "registry:ui", "target": "components/lumo/variant-selector.tsx" } ] }, { "name": "product-card", "type": "registry:ui", "title": "Product Card", "description": "Responsive product card with badges, rating, price, and quick actions.", "dependencies": ["class-variance-authority", "lucide-react"], "registryDependencies": [ "https://lumo-www.vercel.app/r/lib.json", "https://lumo-www.vercel.app/r/price-display.json", "https://lumo-www.vercel.app/r/rating-stars.json" ], "files": [ { "path": "packages/core/src/components/lumo/product-card.tsx", "type": "registry:ui", "target": "components/lumo/product-card.tsx" } ] }, { "name": "product-grid", "type": "registry:ui", "title": "Product Grid", "description": "Responsive product grid with loading skeletons and an empty state.", "registryDependencies": [ "https://lumo-www.vercel.app/r/lib.json", "https://lumo-www.vercel.app/r/product-card.json" ], "files": [ { "path": "packages/core/src/components/lumo/product-grid.tsx", "type": "registry:ui", "target": "components/lumo/product-grid.tsx" } ] }, { "name": "search-bar", "type": "registry:ui", "title": "Search Bar", "description": "A controlled, accessible search input with a clear button and an optional loading spinner. Submit on Enter for query-on-submit search.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/search-bar.tsx", "type": "registry:ui", "target": "components/lumo/search-bar.tsx" } ] }, { "name": "sort-select", "type": "registry:ui", "title": "Sort Select", "description": "A sort-order dropdown with a sensible default set of e-commerce options (featured, price, rating, newest). Bring your own items to customize.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/sort-select.tsx", "type": "registry:ui", "target": "components/lumo/sort-select.tsx" } ] }, { "name": "filter-panel", "type": "registry:ui", "title": "Filter Panel", "description": "A faceted filter panel: groups of checkboxes with optional result counts, an active-filter count, and a clear-all control. Fully controlled.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/filter-panel.tsx", "type": "registry:ui", "target": "components/lumo/filter-panel.tsx" } ] }, { "name": "pagination", "type": "registry:ui", "title": "Pagination", "description": "Accessible page navigation with previous/next controls and a truncated page range with ellipses.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/pagination.tsx", "type": "registry:ui", "target": "components/lumo/pagination.tsx" } ] }, { "name": "breadcrumbs", "type": "registry:ui", "title": "Breadcrumbs", "description": "An accessible breadcrumb trail. The last crumb is marked as the current page; pass href on the rest to make them links.", "dependencies": ["lucide-react"], "files": [ { "path": "packages/core/src/components/lumo/breadcrumbs.tsx", "type": "registry:ui", "target": "components/lumo/breadcrumbs.tsx" } ] }, { "name": "cart-line-item", "type": "registry:ui", "title": "Cart Line Item", "description": "A single cart line with image, variant, quantity stepper, and line total.", "dependencies": ["lucide-react"], "registryDependencies": [ "https://lumo-www.vercel.app/r/lib.json", "https://lumo-www.vercel.app/r/price-display.json", "https://lumo-www.vercel.app/r/quantity-stepper.json" ], "files": [ { "path": "packages/core/src/components/lumo/cart-line-item.tsx", "type": "registry:ui", "target": "components/lumo/cart-line-item.tsx" } ] }, { "name": "cart-summary", "type": "registry:ui", "title": "Cart Summary", "description": "Subtotal, optional total, taxes-and-shipping note, and a checkout button.", "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/cart-summary.tsx", "type": "registry:ui", "target": "components/lumo/cart-summary.tsx" } ] }, { "name": "cart-drawer", "type": "registry:ui", "title": "Cart Drawer", "description": "Accessible slide-over cart built on Radix Dialog, with line items and summary.", "dependencies": ["@radix-ui/react-dialog", "lucide-react", "tw-animate-css"], "registryDependencies": [ "https://lumo-www.vercel.app/r/lib.json", "https://lumo-www.vercel.app/r/cart-line-item.json", "https://lumo-www.vercel.app/r/cart-summary.json" ], "files": [ { "path": "packages/core/src/components/lumo/cart-drawer.tsx", "type": "registry:ui", "target": "components/lumo/cart-drawer.tsx" } ] }, { "name": "cart-provider", "type": "registry:hook", "title": "Cart Provider", "description": "Optional, backend-agnostic cart state. A CartProvider context and useCart hook that add lines, merge duplicate variants, update quantities, and compute the subtotal. Sync to your backend through onLinesChange.", "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/cart-provider.tsx", "type": "registry:hook", "target": "components/lumo/cart-provider.tsx" } ] }, { "name": "address-form", "type": "registry:ui", "title": "Address Form", "description": "A validated shipping/billing address form (react-hook-form + zod) that emits a normalized Address.", "dependencies": ["react-hook-form", "zod", "@hookform/resolvers"], "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/address-form.tsx", "type": "registry:ui", "target": "components/lumo/address-form.tsx" } ] }, { "name": "order-summary", "type": "registry:ui", "title": "Order Summary", "description": "A read-only order review with line items, subtotal, shipping, tax, and total.", "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/order-summary.tsx", "type": "registry:ui", "target": "components/lumo/order-summary.tsx" } ] }, { "name": "checkout-form", "type": "registry:ui", "title": "Checkout Form", "description": "A payment-agnostic checkout: contact and shipping fields with validation, a payment slot, an order summary, and submit states. Wire your own PSP.", "dependencies": ["react-hook-form", "zod", "@hookform/resolvers"], "registryDependencies": [ "https://lumo-www.vercel.app/r/lib.json", "https://lumo-www.vercel.app/r/order-summary.json" ], "files": [ { "path": "packages/core/src/components/lumo/checkout-form.tsx", "type": "registry:ui", "target": "components/lumo/checkout-form.tsx" } ] }, { "name": "order-confirmation", "type": "registry:ui", "title": "Order Confirmation", "description": "A post-purchase confirmation with order number, receipt email, item summary, and total.", "dependencies": ["lucide-react"], "registryDependencies": ["https://lumo-www.vercel.app/r/lib.json"], "files": [ { "path": "packages/core/src/components/lumo/order-confirmation.tsx", "type": "registry:ui", "target": "components/lumo/order-confirmation.tsx" } ] } ] }