{"version":3,"file":"_useProduct.2RFZ9Dtt.mjs","names":["useState","useAtomValue","useMemo","useAtom","useCallback","useEffect","useLayoutEffect","__esmMin","le","pe","init_npm_react_18_3_1","window","_e","ne","ce","init_ssg_sandbox_shims","init__framer_utils","init_jotai_2_15","useInitializeShopify","selectedProductsAtom","configAtom","priceCode","init__useShopify","DefaultProduct","parseProductPayload","init__atoms","init__utils","productsLoadableAtom","init__test_data","H","M","useIsStaticWebsite","useProduct","isStatic","hasMounted","setHasMounted","config","productsState","cmsProduct","productID","selectedProducts","setSelectedProducts","product","item","selected","storedSelection","addToSelected","resolveSelectedProduct","activeConfig","getPrice","comparePriceValue","camparePrice","priceValue","price","changeQuantity","state","DefaultSelectedOption","selectVariant","normalizeAvailableQuantity","useSelectionEffect","currentSelection","resolvedSelection","selectedVariant","multiplePrice","init__useProduct","quantity","defaultVariant"],"sources":["https:/framerusercontent.com/modules/xEahqZEsyG5uoZky61jQ/Jq5xpVB2EtHRhNbukrHt/_useProduct.js"],"sourcesContent":["import{useCallback,useEffect,useLayoutEffect,useMemo,useState}from\"react\";import{useAtom,useAtomValue}from\"https://esm.sh/jotai@2.15.0?external=react\";import{parseProductPayload,priceCode}from\"https://framerusercontent.com/modules/7dEgbg7qo3lsQk361YtS/ThUoOgwiB0dnN03sGTvb/_utils.js\";import{configAtom,productsLoadableAtom,selectedProductsAtom}from\"https://framerusercontent.com/modules/yZBbIevRfN36MGDPpltx/89RrH2Io0vUgcxyspY67/_atoms.js\";import{DefaultProduct}from\"https://framerusercontent.com/modules/fWwtzMT2tYXMW4IKB8On/qkWzXbhYbATozMlhaVV8/_test_data.js\";import{useIsStaticWebsite}from\"https://framerusercontent.com/modules/eAejHXy6apg0StNmpKvK/GfiUlYgjnAB0Az7cClGa/_framer_utils.js\";import{useInitializeShopify}from\"https://framerusercontent.com/modules/tdCHCV0pSkxlDaX5GkOX/WKo1sACwoziPHO6aRe0i/_useShopify.js\";const DefaultSelectedOption={quantity:1,quantityAvailable:null,selectedOption:null,sellingPlan:null};const normalizeAvailableQuantity=quantity=>typeof quantity===\"number\"?Math.max(0,quantity):null;// Persist the initial selection before the browser paints, while keeping SSR\n// safe by falling back to useEffect when window is unavailable.\nconst useSelectionEffect=typeof window===\"undefined\"?useEffect:useLayoutEffect;const resolveSelectedProduct=(product,storedSelection)=>{const selectedVariant=product.variants.nodes.find(item=>item.id===storedSelection?.selectedOption);if(storedSelection&&selectedVariant){return{...storedSelection,quantityAvailable:normalizeAvailableQuantity(selectedVariant.quantityAvailable)};}const defaultVariant=product.variants.nodes[0];if(!defaultVariant)return null;return{...DefaultSelectedOption,quantityAvailable:normalizeAvailableQuantity(defaultVariant.quantityAvailable),selectedOption:defaultVariant.id};};/** Resolve a CMS payload on static output and Storefront data interactively. */export function useProduct(productID,addToSelected){const isStatic=useIsStaticWebsite();// Other Shopiframe boundaries can finish loading products or selections while\n// this boundary is hydrating. Preserve its server snapshot until it commits.\nconst[hasMounted,setHasMounted]=useState(false);useInitializeShopify(isStatic);useEffect(()=>{setHasMounted(true);},[]);const config=useAtomValue(configAtom);const productsState=useAtomValue(productsLoadableAtom);const cmsProduct=useMemo(()=>parseProductPayload(productID),[productID]);const[selectedProducts,setSelectedProducts]=useAtom(selectedProductsAtom);const product=useMemo(()=>{if(!cmsProduct)return DefaultProduct;if(!hasMounted||isStatic)return cmsProduct;if(productsState.state!==\"hasData\")return cmsProduct;return productsState.data.find(item=>item.id===cmsProduct.id)??cmsProduct;},[cmsProduct,hasMounted,isStatic,productsState]);const selected=useMemo(()=>{const storedSelection=hasMounted&&product?.id?selectedProducts[product.id]:null;if(!addToSelected||!product)return storedSelection;return resolveSelectedProduct(product,storedSelection);},[addToSelected,hasMounted,product,selectedProducts]);const activeConfig=hasMounted?config:null;const getPrice=useCallback((camparePrice,price)=>{const comparePriceValue=camparePrice&&camparePrice.amount!==\"0.0\"?priceCode(camparePrice,activeConfig??undefined):null;const priceValue=priceCode(price,activeConfig??undefined);return{camparePrice:comparePriceValue!==priceValue?comparePriceValue:null,price:priceValue};},[activeConfig]);const changeQuantity=quantity=>{if(!product)return;setSelectedProducts(state=>({...state,[product.id]:{...DefaultSelectedOption,...resolveSelectedProduct(product,state[product.id]),quantity}}));};const selectVariant=(item,sellingPlan)=>{if(!product||!item)return;setSelectedProducts(state=>({...state,[product.id]:{...DefaultSelectedOption,...resolveSelectedProduct(product,state[product.id]),sellingPlan,quantityAvailable:normalizeAvailableQuantity(item.quantityAvailable),selectedOption:item.id}}));};useSelectionEffect(()=>{if(!product||!addToSelected)return;setSelectedProducts(state=>{const currentSelection=state[product.id];const resolvedSelection=resolveSelectedProduct(product,currentSelection);if(!resolvedSelection)return state;if(currentSelection?.selectedOption===resolvedSelection.selectedOption&&currentSelection?.quantity===resolvedSelection.quantity&&currentSelection?.quantityAvailable===resolvedSelection.quantityAvailable&&currentSelection?.sellingPlan===resolvedSelection.sellingPlan){return state;}return{...state,[product.id]:resolvedSelection};});},[product,addToSelected,setSelectedProducts]);const result=useMemo(()=>{if(!product)return{product:null,availableForSale:null,multiplePrice:null,price:null,stock:null,selectedVariant:null,selectedProduct:null};const selectedVariant=product.variants.nodes.find(item=>item.id===selected?.selectedOption);if(selectedVariant){const selectedSellingPlan=selectedVariant.sellingPlanAllocations?.nodes.find(item=>item.sellingPlan.id===selected?.sellingPlan);const price=selectedSellingPlan?.checkoutChargeAmount??selectedVariant.priceV2;return{product,price:getPrice(selectedVariant.compareAtPriceV2,price),multiplePrice:false,availableForSale:selectedVariant.availableForSale,stock:normalizeAvailableQuantity(selectedVariant.quantityAvailable),selectedVariant,selectedProduct:selected};}const multiplePrice=product.priceRange.minVariantPrice.amount!==product.priceRange.maxVariantPrice.amount;return{product,price:getPrice(product.compareAtPriceRange.minVariantPrice,product.priceRange.minVariantPrice),multiplePrice,availableForSale:product.availableForSale,stock:normalizeAvailableQuantity(product.totalInventory),selectedVariant:null,selectedProduct:selected};},[product,getPrice,selected]);return{...result,changeQuantity,selectVariant};}\nexport const __FramerMetadata__ = {\"exports\":{\"useProduct\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./_useProduct.map"],"mappings":"A,qTAE6qB,SAAgBgC,EAAW,EAAU,EAAc,CAAC,IAAMC,EAASF,EAAmB,EAE9vB,CAACG,EAAWC,GAAenC,EAAS,EAAK,EAAEkB,EAAqBe,CAAQ,EAAEnB,MAAc,CAACqB,EAAc,EAAI,CAAE,EAAE,CAAC,CAAC,EAAE,IAAMC,EAAOnC,EAAamB,CAAU,EAAQiB,EAAcpC,EAAa0B,CAAoB,EAAQW,EAAWpC,MAAYsB,EAAoBe,CAAS,EAAE,CAACA,CAAS,CAAC,EAAO,CAACC,EAAiBC,GAAqBtC,EAAQgB,CAAoB,EAAQuB,EAAQxC,MAAiBoC,EAAoC,CAACJ,GAAYD,GAA8BI,EAAc,QAAQ,UAAiBC,EAAkBD,EAAc,KAAK,KAAK,GAAMM,EAAK,KAAKL,EAAW,EAAE,GAAGA,EAA9Kf,EAA2L,CAACe,EAAWJ,EAAWD,EAASI,CAAa,CAAC,EAAQO,EAAS1C,MAAY,CAAC,IAAM2C,EAAgBX,GAAYQ,GAAS,GAAGF,EAAiBE,EAAQ,IAAI,KAAwD,MAAhD,CAACI,GAAe,CAACJ,EAAeG,EAAuBE,EAAuBL,EAAQG,CAAe,CAAE,EAAE,CAACC,EAAcZ,EAAWQ,EAAQF,CAAgB,CAAC,EAAQQ,EAAad,EAAWE,EAAO,KAAWa,EAAS7C,GAAa,EAAa,IAAQ,CAAC,IAAM8C,EAAkBC,GAAcA,EAAa,SAAS,MAAM9B,EAAU8B,EAAaH,GAAc,IAAA,EAAS,EAAE,KAAWI,EAAW/B,EAAUgC,EAAML,GAAc,IAAA,EAAS,EAAE,MAAM,CAAC,aAAaE,IAAoBE,EAA6B,KAAlBF,EAAuB,MAAME,CAAU,CAAE,EAAE,CAACJ,CAAY,CAAC,EAAQM,EAAe,GAAU,CAAKZ,GAAeD,EAAoB,IAAQ,CAAC,GAAGc,GAAOb,EAAQ,IAAI,CAAC,GAAGc,EAAsB,GAAGT,EAAuBL,EAAQa,EAAMb,EAAQ,GAAG,EAAE,UAAQ,CAAC,EAAE,CAAE,EAAQe,GAAe,EAAK,IAAc,CAAKf,GAAUC,GAAYF,EAAoB,IAAQ,CAAC,GAAGc,GAAOb,EAAQ,IAAI,CAAC,GAAGc,EAAsB,GAAGT,EAAuBL,EAAQa,EAAMb,EAAQ,GAAG,EAAE,cAAY,kBAAkBgB,EAA2Bf,EAAK,iBAAiB,EAAE,eAAeA,EAAK,EAAE,CAAC,EAAE,CAAE,EAA8tD,OAA5tDgB,MAAuB,CAAKjB,GAAUI,GAAqBL,EAAoB,GAAO,CAAC,IAAMmB,EAAiBL,EAAMb,EAAQ,IAAUmB,EAAkBd,EAAuBL,EAAQkB,CAAgB,EAA8T,MAAzT,CAACC,GAAkCD,GAAkB,iBAAiBC,EAAkB,gBAAgBD,GAAkB,WAAWC,EAAkB,UAAUD,GAAkB,oBAAoBC,EAAkB,mBAAmBD,GAAkB,cAAcC,EAAkB,YAAoBN,EAAa,CAAC,GAAGA,GAAOb,EAAQ,IAAImB,CAAiB,CAAE,CAAC,CAAE,EAAE,CAACnB,EAAQI,EAAcL,CAAmB,CAAC,EAA6nC,CAAC,GAA/mCvC,MAAY,CAAC,GAAG,CAACwC,EAAQ,MAAM,CAAC,QAAQ,KAAK,iBAAiB,KAAK,cAAc,KAAK,MAAM,KAAK,MAAM,KAAK,gBAAgB,KAAK,gBAAgB,IAAI,EAAE,IAAMoB,EAAgBpB,EAAQ,SAAS,MAAM,KAAK,GAAMC,EAAK,KAAKC,GAAU,cAAc,EAAE,GAAGkB,EAAgB,CAAiI,IAAMT,EAA5GS,EAAgB,wBAAwB,MAAM,KAAK,GAAMnB,EAAK,YAAY,KAAKC,GAAU,WAAW,CAAA,EAAmC,sBAAsBkB,EAAgB,QAAQ,MAAM,CAAC,UAAQ,MAAMb,EAASa,EAAgB,iBAAiBT,CAAK,EAAE,cAAc,GAAM,iBAAiBS,EAAgB,iBAAiB,MAAMJ,EAA2BI,EAAgB,iBAAiB,EAAE,kBAAgB,gBAAgBlB,CAAQ,CAAE,CAAC,IAAMmB,EAAcrB,EAAQ,WAAW,gBAAgB,SAASA,EAAQ,WAAW,gBAAgB,OAAO,MAAM,CAAC,UAAQ,MAAMO,EAASP,EAAQ,oBAAoB,gBAAgBA,EAAQ,WAAW,eAAe,EAAE,gBAAc,iBAAiBA,EAAQ,iBAAiB,MAAMgB,EAA2BhB,EAAQ,cAAc,EAAE,gBAAgB,KAAK,gBAAgBE,CAAQ,CAAE,EAAE,CAACF,EAAQO,EAASL,CAAQ,CAAkB,EAAE,iBAAe,eAAa,CAAE,C,0EAJptF,EAAsB,CAAC,SAAS,EAAE,kBAAkB,KAAK,eAAe,KAAK,YAAY,IAAI,EAAQ,EAA2B,GAAU,OAAOqB,GAAW,SAAS,KAAK,IAAI,EAAEA,CAAQ,EAAE,KAE9+B,EAA0BtD,IAAS,OAAYN,EAAUC,EAAsB,GAAwB,EAAQ,IAAkB,CAAC,IAAMwD,EAAgBpB,EAAQ,SAAS,MAAM,KAAK,GAAMC,EAAK,KAAKE,GAAiB,cAAc,EAAE,GAAGA,GAAiBiB,EAAiB,MAAM,CAAC,GAAGjB,EAAgB,kBAAkBa,EAA2BI,EAAgB,iBAAiB,CAAC,EAAG,IAAMI,EAAexB,EAAQ,SAAS,MAAM,GAAkC,OAA3BwB,EAAiC,CAAC,GAAGV,EAAsB,kBAAkBE,EAA2BQ,EAAe,iBAAiB,EAAE,eAAeA,EAAe,EAAE,EAApJ,IAAsJ,C"}