product-variant-03-block
stackzero/product-variant-03-blockFreeBlock
stackzero publishes no description for this item.
Install it
npx shadcn@latest add https://ui.stackzero.co/r/product-variant-03-block.jsonSource
1"use client";23import ImageCarousel_Basic, {4 CarouselImage,5} from "@/components/commerce-ui/image-carousel-basic";6import PriceFormat from "@/components/commerce-ui/price-format-basic";7import QuantityInputBasic from "@/components/commerce-ui/quantity-input-basic";8import VariantSelectorBasic, {9 VariantItem as BaseVariantItem,10} from "@/components/commerce-ui/variant-selector-basic";11import { Button } from "@/components/ui/button";12import { Separator } from "@/components/ui/separator";13import { Check, ShieldCheck } from "lucide-react";14import { useState } from "react";1516interface VariantItem extends BaseVariantItem {17 price: number;18 salePrice?: number;19 images?: CarouselImage[];20 isInStock?: boolean;21 availableQuantity?: number | null;22 features?: string[];23}2425interface VariantSelectionPayload {26 variantId: string;27 variantLabel: string;28 quantity: number;29 price: number;30 salePrice?: number;31 totalPrice: number;32 isOnSale: boolean;33}3435interface ProductVariant03Props {36 title?: string;37 description?: string;38 badge?: string | null;39 variants: VariantItem[];40 defaultImages?: CarouselImage[];41 initialVariant?: string;42 variantLabel?: string;43 onAddToCart?: (payload: VariantSelectionPayload) => void;44 onBuyNow?: (payload: VariantSelectionPayload) => void;45 selectedVariant?: string;46 onVariantChange?: (variant: string) => void;47 quantity?: number;48 onQuantityChange?: (quantity: number) => void;49 isLoading?: boolean;50 errorMessage?: string | null;51 currencyPrefix?: string;52 releaseDate?: string;53}5455function ProductVariant_03({56 badge = "Just Released",57 currencyPrefix = "$",58 defaultImages = [],59 description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",60 errorMessage = null,61 initialVariant,62 isLoading = false,63 onAddToCart = () => {},64 onBuyNow = () => {},65 onQuantityChange,66 onVariantChange,67 quantity: controlledQuantity,68 releaseDate = "August 15, 2023",69 selectedVariant: controlledVariant,70 title = "Product Variant Title",71 variantLabel = "Model",72 variants = [],73}: ProductVariant03Props) {74 // Ensure variants array is not empty75 if (!variants.length) {76 throw new Error("At least one variant must be provided");77 }7879 const defaultInitialVariant = initialVariant || variants[0].value;8081 const [internalSelectedVariant, setInternalSelectedVariant] = useState(82 defaultInitialVariant83 );84// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from stackzero
All 112 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| address-01-blockaddress-01-block | stackzero | Blocks | Free | 4 deps | |
| address-02-blockaddress-02-block | stackzero | Blocks | Free | 4 deps | |
| address-03-blockaddress-03-block | stackzero | Blocks | Free | 4 deps | |
| banner-01-blockbanner-01-block | stackzero | Blocks | Free | no deps | |
| banner-02-blockbanner-02-block | stackzero | Blocks | Free | no deps | |
| banner-03-blockbanner-03-block | stackzero | Blocks | Free | no deps | |
| banner-04-blockbanner-04-block | stackzero | Blocks | Free | no deps | |
| banner-05-blockbanner-05-block | stackzero | Blocks | Free | no deps |
