{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "shopping-carts-01",
  "type": "registry:component",
  "title": "Shopping Carts",
  "author": "Toby Belhome",
  "description": "Provide a seamless shopping experience with Tailwind CSS shopping cart sections. These layouts display selected products, quantities, prices, and total amounts clearly, making checkout effortless. Perfect for online stores and marketplaces aiming for modern, user-friendly, and conversion-optimized cart interfaces.",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "badge",
    "button",
    "button-group",
    "input",
    "button",
    "tooltip",
    "separator"
  ],
  "files": [
    {
      "path": "examples/blocks/ecommerce/shopping-carts/01/cart-item.tsx",
      "content": "import Image from \"next/image\";\nimport { Ban, Check, MinusIcon, PlusIcon, SearchIcon, TrashIcon, X } from \"lucide-react\";\n\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue\n} from \"@/components/ui/select\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\n\nimport { CartItem } from \"./type\";\nimport { ButtonGroup } from \"@/components/ui/button-group\";\nimport { Input } from \"@/components/ui/input\";\n\nexport function CartListItem({ item }: { item: CartItem }) {\n  return (\n    <div\n      key={item.id}\n      className=\"bg-muted/50 hover:bg-muted flex items-start space-x-4 rounded-lg p-4\">\n      <div className=\"relative shrink-0\">\n        <Image\n          src={item.image}\n          className=\"aspect-square size-20 rounded-md object-cover\"\n          width={60}\n          height={60}\n          alt={item.title}\n          unoptimized\n        />\n      </div>\n\n      <div className=\"flex-1\">\n        <div className=\"flex items-center justify-between\">\n          <div className=\"space-y-1\">\n            <h3 className=\"font-semibold\">{item.title}</h3>\n            <div className=\"text-muted-foreground flex gap-2 text-sm\">\n              <span className=\"text-xs\">\n                {item.variant} | {item.size}\n              </span>\n              {item.in_stock ? (\n                <Badge variant=\"outline\" className=\"text-green-600\">\n                  <Check className=\"mr-0.5 size-3\" />\n                  In stock\n                </Badge>\n              ) : (\n                <Badge variant=\"outline\" className=\"text-muted-foreground\">\n                  <Ban className=\"mr-0.5 size-3\" />\n                  Sold out\n                </Badge>\n              )}\n            </div>\n            <p className=\"text-sm\">{item.price}</p>\n          </div>\n\n          <div className=\"flex flex-col space-x-4 sm:flex-row\">\n            <ButtonGroup className=\"w-30\">\n              <Input defaultValue={1} className=\"h-8 text-center\" readOnly />\n              <Button variant=\"outline\" size=\"sm\" aria-label=\"Search\">\n                <PlusIcon />\n              </Button>\n              <Button variant=\"outline\" size=\"sm\" aria-label=\"Search\">\n                <MinusIcon />\n              </Button>\n            </ButtonGroup>\n\n            <Button variant=\"ghost\" size=\"icon-sm\">\n              <TrashIcon className=\"size-4 text-red-600\" />\n              <span className=\"sr-only\">Remove item</span>\n            </Button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/shopping-carts/cart-item.tsx"
    },
    {
      "path": "examples/blocks/ecommerce/shopping-carts/01/data.ts",
      "content": "import { CartItem } from \"./type\";\n\nexport const cartItems: CartItem[] = [\n  {\n    id: 3,\n    title: \"Classic Hoodie\",\n    price: \"$45.00\",\n    variant: \"Black\",\n    size: \"Medium\",\n    quantity: 1,\n    image: \"/images/products/list1.png\",\n    in_stock: true\n  },\n  {\n    id: 4,\n    title: \"Denim Jacket\",\n    price: \"$80.00\",\n    variant: \"Blue\",\n    size: \"Large\",\n    quantity: 2,\n    image: \"/images/products/list2.png\",\n    in_stock: false\n  },\n  {\n    id: 5,\n    title: \"Slim Fit Jeans\",\n    price: \"$50.00\",\n    variant: \"Dark Wash\",\n    size: \"32\",\n    quantity: 1,\n    image: \"/images/products/list3.png\",\n    in_stock: true\n  }\n];\n",
      "type": "registry:component",
      "target": "components/shopping-carts/data.ts"
    },
    {
      "path": "examples/blocks/ecommerce/shopping-carts/01/page.tsx",
      "content": "import { ArrowRightIcon, Info } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";\n\nimport { CartListItem } from \"./cart-item\";\nimport { cartItems } from \"./data\";\nimport { Separator } from \"@/components/ui/separator\";\n\nexport default function ShoppingCart() {\n  return (\n    <section className=\"py-12 lg:py-20\">\n      <div className=\"container mx-auto px-4\">\n        <header className=\"mb-4\">\n          <h1 className=\"font-heading text-3xl\">Shopping Cart</h1>\n        </header>\n\n        <Separator />\n\n        <div className=\"mt-6 grid items-start gap-4 lg:grid-cols-3 lg:gap-6\">\n          <div className=\"space-y-3 lg:col-span-2\">\n            {cartItems.map((item, key) => (\n              <CartListItem key={key} item={item} />\n            ))}\n          </div>\n\n          {/* Order Summary */}\n          <div className=\"bg-muted/50 flex h-full flex-col space-y-6 rounded-lg p-6\">\n            <div className=\"space-y-4\">\n              <h2 className=\"font-semibold\">Order summary</h2>\n\n              <div className=\"flex justify-between text-sm\">\n                <p>Subtotal</p>\n                <p className=\"font-medium\">$255.00</p>\n              </div>\n\n              <div className=\"flex items-center justify-between text-sm\">\n                <div className=\"flex items-center\">\n                  <p>Shipping estimate</p>\n                  <TooltipProvider>\n                    <Tooltip>\n                      <TooltipTrigger>\n                        <Info className=\"text-muted-foreground ml-1 size-3\" />\n                      </TooltipTrigger>\n                      <TooltipContent>Delivery in 10 days is planned.</TooltipContent>\n                    </Tooltip>\n                  </TooltipProvider>\n                </div>\n                <p className=\"font-medium\">$5.00</p>\n              </div>\n\n              <div className=\"flex items-center justify-between text-sm\">\n                <div className=\"flex items-center\">\n                  <p>Tax estimate</p>\n                  <TooltipProvider>\n                    <Tooltip>\n                      <TooltipTrigger>\n                        <Info className=\"text-muted-foreground ml-1 size-3\" />\n                      </TooltipTrigger>\n                      <TooltipContent>There is a country specific taxation system.</TooltipContent>\n                    </Tooltip>\n                  </TooltipProvider>\n                </div>\n                <p className=\"font-medium\">$4.50</p>\n              </div>\n\n              <div className=\"flex justify-between border-t border-gray-200 pt-4 text-sm font-medium\">\n                <p>Order total</p>\n                <p>$264.50</p>\n              </div>\n            </div>\n\n            <div className=\"mt-auto\">\n              <Button className=\"w-full\">Checkout</Button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/shopping-carts/shopping-carts.tsx"
    },
    {
      "path": "examples/blocks/ecommerce/shopping-carts/01/type.ts",
      "content": "export type CartItem = {\n  id: number,\n  title: string,\n  price: string,\n  variant: string,\n  size: string,\n  quantity: number,\n  image: string,\n  in_stock: boolean,\n}\n\n",
      "type": "registry:component",
      "target": "components/shopping-carts/type.ts"
    }
  ],
  "meta": {
    "isPro": true
  }
}