product-variant-01-block
stackzero/product-variant-01-blockFreeBlock
stackzero publishes no description for this item.
Install it
npx shadcn@latest add https://ui.stackzero.co/r/product-variant-01-block.jsonSource
1"use client";23import ImageViewer from "@/components/commerce-ui/image-viewer-basic";4import PriceFormat_Sale from "@/components/commerce-ui/price-format-sale";5import QuantityInputBasic from "@/components/commerce-ui/quantity-input-basic";6import VariantSelectorBasic, {7 VariantItem as BaseVariantItem,8} from "@/components/commerce-ui/variant-selector-basic";9import { Button } from "@/components/ui/button";10import { Clock } from "lucide-react";11import { useState } from "react";1213interface VariantItem extends BaseVariantItem {14 price: number;15 salePrice?: number;16 imageUrl?: string;17 isInStock?: boolean;18 availableQuantity?: number | null;19}20interface VariantSelectionPayload {21 variantId: string;22 variantLabel: string;23 quantity: number;24 price: number;25 originalPrice?: number;26 salePrice?: number;27 totalPrice: number;28 isOnSale: boolean;29}30interface ProductVariant01Props {31 title?: string;32 description?: string;33 badge?: string | null;34 shippingInfo?: string;35 variants: VariantItem[];36 defaultImage?: string;37 initialVariant?: string;38 variantLabel?: string;39 onAddToCart?: (payload: VariantSelectionPayload) => void;40 onBuyNow?: (payload: VariantSelectionPayload) => void;41 selectedVariant?: string;42 onVariantChange?: (variant: string) => void;43 quantity?: number;44 onQuantityChange?: (quantity: number) => void;45 isLoading?: boolean;46 errorMessage?: string | null;47}4849function ProductVariant_01({50 badge = "New",51 defaultImage,52 description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",53 errorMessage = null,54 initialVariant,55 isLoading = false,56 onAddToCart = () => {},57 onBuyNow = () => {},58 onQuantityChange,59 onVariantChange,60 quantity: controlledQuantity,61 selectedVariant: controlledVariant,62 shippingInfo,63 title = "Product Variant Title",64 variantLabel = "Variant",65 variants,66}: ProductVariant01Props) {67 // Ensure variants array is not empty68 if (!variants.length) {69 throw new Error("At least one variant must be provided");70 }7172 const defaultInitialVariant = initialVariant || variants[0].value;7374 const [internalSelectedVariant, setInternalSelectedVariant] = useState(75 defaultInitialVariant76 );77 const [internalQuantity, setInternalQuantity] = useState(1);7879 // Determine if we're in controlled or uncontrolled mode80 const isVariantControlled = controlledVariant !== undefined;81// … 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 |
