{"version":3,"file":"Loading.iVCduW_J.mjs","names":["useState","useCallback","p","get","useMemo","currentCurrencyCode","cleanShopifyId","useState","useRef","useCallback","get","countryCode","product","required","useState","useCallback","get","useRef","React.useCallback"],"sources":["https:/framerusercontent.com/modules/k9s4cejdkBGDjmzudhzM/18cq93eooqM4YmdbL7E2/currencyMaps.js","https:/framerusercontent.com/modules/N07JJZfuMtyHijtiRRgH/N43J81zCinYsWhgHRgvG/FC_ProductPrice.js","https:/framerusercontent.com/modules/6Zs9CjkPbKzHjoy8LK08/UlcfEh8799smdhRPoZER/Fb_pixel.js","https:/framerusercontent.com/modules/FXrY3V9ZYVL8aziafDQn/poYNkLXrIoN2FGyaJ5zN/initialize.js","https:/framerusercontent.com/modules/DfixsupJND2Hhr1xcPbk/YbElnXoztInYWIBDdWOr/FC_ProductPurchaseButton.js","https:/framerusercontent.com/modules/B12xzzGu5tV27jDrWyaW/dyGmYzzIUDiXU0ubHYzE/FC_ProductVariantState.js","https:/framer.com/m/framer/default-utils.js@^0.45.0","https:/framerusercontent.com/modules/NQ9LlTfXzHTRhTTi6qMI/5u9VoSaQM7qxLI2scUcH/Loading.js"],"sourcesContent":["export const currencyMaps={AED:\"د.إ\",AFN:\"Af\",ALL:\"L\",AMD:\"֏\",ANG:\"ƒ\",AOA:\"Kz\",ARS:\"$\",AUD:\"$\",AWG:\"ƒ\",AZN:\"₼\",BAM:\"KM\",BBD:\"$\",BDT:\"৳\",BGN:\"лв\",BHD:\"د.ب\",BIF:\"FBu\",BMD:\"$\",BND:\"$\",BOB:\"Bs.\",BRL:\"R$\",BSD:\"$\",BTN:\"Nu.\",BWP:\"P\",BYN:\"Br\",BZD:\"BZ$\",CAD:\"$\",CDF:\"FC\",CHF:\"Fr\",CLP:\"$\",CNY:\"\\xa5\",COP:\"$\",CRC:\"₡\",CVE:\"$\",CZK:\"Kč\",DJF:\"Fdj\",DKK:\"kr\",DOP:\"RD$\",DZD:\"د.ج\",EGP:\"\\xa3\",ERN:\"Nfk\",ETB:\"Br\",EUR:\"€\",FJD:\"$\",FKP:\"\\xa3\",GBP:\"\\xa3\",GEL:\"₾\",GHS:\"₵\",GIP:\"\\xa3\",GMD:\"D\",GNF:\"FG\",GTQ:\"Q\",GYD:\"$\",HKD:\"$\",HNL:\"L\",HRK:\"kn\",HTG:\"G\",HUF:\"Ft\",IDR:\"Rp\",ILS:\"₪\",INR:\"₹\",IQD:\"ع.د\",IRR:\"﷼\",ISK:\"kr\",JEP:\"\\xa3\",JMD:\"J$\",JOD:\"د.ا\",JPY:\"\\xa5\",KES:\"KSh\",KGS:\"сом\",KHR:\"៛\",KID:\"$\",KMF:\"CF\",KRW:\"₩\",KWD:\"د.ك\",KYD:\"$\",KZT:\"₸\",LAK:\"₭\",LBP:\"\\xa3\",LKR:\"රු\",LRD:\"$\",LSL:\"L\",LTL:\"Lt\",LVL:\"Ls\",LYD:\"ل.د\",MAD:\"د.م.\",MDL:\"MDL\",MGA:\"Ar\",MKD:\"ден\",MMK:\"Ks\",MNT:\"₮\",MOP:\"MOP$\",MRU:\"UM\",MUR:\"₨\",MVR:\"ރ\",MWK:\"MK\",MXN:\"$\",MYR:\"RM\",MZN:\"MT\",NAD:\"$\",NGN:\"₦\",NIO:\"C$\",NOK:\"kr\",NPR:\"रू\",NZD:\"$\",OMR:\"ر.ع.\",PAB:\"B/.\",PEN:\"S/.\",PGK:\"K\",PHP:\"₱\",PKR:\"₨\",PLN:\"zł\",PYG:\"₲\",QAR:\"ر.ق\",RON:\"lei\",RSD:\"Дин.\",RUB:\"₽\",RWF:\"FRw\",SAR:\"ر.س\",SBD:\"$\",SCR:\"₨\",SDG:\"ج.س.\",SEK:\"kr\",SGD:\"$\",SHP:\"\\xa3\",SLL:\"Le\",SOS:\"Sh\",SRD:\"$\",SSP:\"\\xa3\",STN:\"Db\",SYP:\"\\xa3\",SZL:\"E\",THB:\"฿\",TJS:\"ЅМ\",TMT:\"T\",TND:\"د.ت\",TOP:\"T$\",TRY:\"₺\",TTD:\"TT$\",TWD:\"NT$\",TZS:\"TSh\",UAH:\"₴\",UGX:\"USh\",USD:\"$\",UYU:\"$\",UZS:\"so'm\",VED:\"Bs.S.\",VES:\"Bs.\",VND:\"₫\",VUV:\"VT\",WST:\"T\",XAF:\"FCFA\",XCD:\"$\",XOF:\"CFA\",XPF:\"₣\",XXX:\"\",YER:\"﷼\",ZAR:\"R\",ZMW:\"ZK\",BYR:\"Br\",STD:\"Db\",VEF:\"Bs.\"};// Explicit list of currencies where the symbol is the same as the code\n// or where browsers commonly display the code instead of a distinct symbol\nexport const knownCurrenciesWithCodeAsSymbol=[\"CHF\",\"PLN\",\"SEK\",\"NOK\",\"DKK\",\"CZK\",\"HUF\",\"RON\",\"HRK\",\"BGN\",\"ISK\",\"MDL\",\"BYN\",\"KZT\",\"AMD\",\"UZS\",\"TJS\",\"KGS\",\"MNT\",\"GEL\",\"AFN\",\"MRU\",\"RWF\",\"XAF\",\"XOF\",\"XPF\"];\nexport const __FramerMetadata__ = {\"exports\":{\"currencyMaps\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"knownCurrenciesWithCodeAsSymbol\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./currencyMaps.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * © 2025 Butter Supply Inc. All Rights Reserved.\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{useCallback,useEffect,useMemo,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{get}from\"lodash-es\";import{useIsBrowser}from\"https://framerusercontent.com/modules/ncBs5KPMI9I5GEta13fn/zGXDjuZapa1SGy6D8P5e/IsBrowser.js\";import{knownCurrenciesWithCodeAsSymbol}from\"https://framerusercontent.com/modules/k9s4cejdkBGDjmzudhzM/18cq93eooqM4YmdbL7E2/currencyMaps.js\";import{getLocaleFromCountry}from\"https://framerusercontent.com/modules/vC6fzbfO83MgBPIhn5zl/DUlbmWuOELzEUenVmv3G/locales.js\";// Helper function to check if a currency's symbol is the same as its code\nconst isCurrencySymbolSameAsCode=currencyCode=>{// For some currencies like CHF, the browser might use the code as the symbol\nif(!currencyCode)return false;if(knownCurrenciesWithCodeAsSymbol.includes(currencyCode)){return true;}try{const formatted=new Intl.NumberFormat(undefined,{style:\"currency\",currency:currencyCode,currencyDisplay:\"narrowSymbol\"}).format(0);// Remove digits, decimal points, and common formatting characters\nconst cleanFormatted=formatted.replace(/[0-9.,\\s]/g,\"\");// Check if what remains is the currency code\nreturn cleanFormatted===currencyCode;}catch(e){return false;}};/**\n * @framerDisableUnlink\n */export default function FC_ProductPrice(props){const{shopifyProductID,canvasPrice,format:{showCurrency,showSymbol,showDecimals,currencyCode}={},fromText=\"from\"}=props;const isBrowser=useIsBrowser();const[product,setProduct]=useState();const[activeVariant,setActiveVariant]=useState();const[subscriptionPrice,setSubscriptionPrice]=useState(null);const[selectedCurrency,setSelectedCurrency]=useState(\"\");const[selectedCountryCode,setSelectedCountryCode]=useState(\"\");const[selectedCountry,setSelectedCountry]=useState(\"\");const[isLoadingPrice,setIsLoadingPrice]=useState(false);const[partialSelections,setPartialSelections]=useState({});const[variantSelectorAction,setVariantSelectorAction]=useState(\"\");const[waitingForVariantSelection,setWaitingForVariantSelection]=useState(false);// PERFORMANCE OPTIMIZATION: Progressive loading state\n// - Show prices immediately for fast perceived performance\n// - Compute ranges in background using requestIdleCallback\n// - Cache computed ranges to avoid recalculation\nconst[isRangeComputed,setIsRangeComputed]=useState(false);const[computedPriceRange,setComputedPriceRange]=useState({min:null,max:null});// Compute product price range from variants when product.priceRange is missing/partial\nconst getProductPriceRange=useCallback((p,useCompareAt=false)=>{if(!p)return{min:null,max:null};// Prefer product-level range when available\nconst rangePath=useCompareAt?\"compareAtPriceRange\":\"priceRange\";const minFromProduct=get(p,`${rangePath}.minVariantPrice.amount`);const maxFromProduct=get(p,`${rangePath}.maxVariantPrice.amount`);let minVal=minFromProduct?parseFloat(minFromProduct):null;let maxVal=maxFromProduct?parseFloat(maxFromProduct):null;if(minVal===null||isNaN(minVal)||maxVal===null||isNaN(maxVal)){// OPTIMIZED: Use reduce for better performance on large variant lists\nconst edges=p?.variants?.edges||[];if(edges.length>0){const{min,max}=edges.reduce((acc,{node:v})=>{if(!v)return acc;const fieldPath=useCompareAt?\"compareAtPrice.amount\":\"price.amount\";const amtStr=get(v,fieldPath);const amt=amtStr?parseFloat(amtStr):NaN;if(!isNaN(amt)&&amt>0){if(acc.min===null||amt<acc.min)acc.min=amt;if(acc.max===null||amt>acc.max)acc.max=amt;}return acc;},{min:null,max:null});minVal=min;maxVal=max;}}return{min:typeof minVal===\"number\"&&!isNaN(minVal)?minVal:null,max:typeof maxVal===\"number\"&&!isNaN(maxVal)?maxVal:null};},[selectedCurrency]);// Progressive range computation - compute in background after initial render\nuseEffect(()=>{if(!product||isRangeComputed)return;// Use requestIdleCallback for non-blocking computation\nconst computeRange=()=>{const range=getProductPriceRange(product,false);setComputedPriceRange(range);setIsRangeComputed(true);};// Delay computation to prioritize initial render\nif(\"requestIdleCallback\"in window){requestIdleCallback(computeRange,{timeout:200});}else{// Fallback for browsers without requestIdleCallback\nsetTimeout(computeRange,100);}},[product,isRangeComputed,getProductPriceRange]);// Reset range computation when product changes\nuseEffect(()=>{if(product){setIsRangeComputed(false);setComputedPriceRange({min:null,max:null});}},[product]);// Initialize currency and country code on page load\nuseEffect(()=>{if(!isBrowser)return;const storedCurrency=localStorage.getItem(\"selectedCurrency\");const storedCountryCode=localStorage.getItem(\"selectedCountryCode\");const storedCountry=localStorage.getItem(\"selectedCountry\");setSelectedCurrency(storedCurrency||\"USD\");setSelectedCountryCode(storedCountryCode||\"US\");setSelectedCountry(storedCountry||\"United States\");},[isBrowser]);// Handle variant changes\nconst handleVariantChange=useCallback(async e=>{// Check for purchase action flag - if this is a purchase action, don't update variant state\nif(e.detail?.isPurchaseAction){//console.log(\"Purchase action detected, returning\", e.detail?.isPurchaseAction)\nreturn;}if(!e.detail||e.detail.productId!==`gid://shopify/Product/${shopifyProductID}`){return;}// console.log(\"variantSelectorAction\", e.detail.onClickAction)\nsetVariantSelectorAction(e.detail.onClickAction);// Clear waiting state when variant changes are received\nsetWaitingForVariantSelection(false);//console.log(\"Price component: Variant change event received, clearing wait state\")\n//console.log(\"handleVariantChange\", e.detail)\nsetIsLoadingPrice(true);try{// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);// Find the matching variant in the current product data\nconst matchingVariant=_matchingProduct.node?.variants?.edges?.find(({node})=>node.selectedOptions.every(option=>e.detail.selectedOptions.find(detailOption=>detailOption.name===option.name&&detailOption.value===option.value)));if(matchingVariant){if(e.detail.onClickAction===\"purchase\"){setActiveVariant(null);setPartialSelections({[e.detail.selectedOptions[0].name]:e.detail.selectedOptions[0].value});}else if(e.detail?.isCompleteVariant===false){// Partial selection: keep partial range behavior\nsetActiveVariant(null);if(Array.isArray(e.detail.selectedOptions)){const partial={};e.detail.selectedOptions.forEach(opt=>{if(opt?.name)partial[opt.name]=opt.value;});setPartialSelections(partial);}}else{setActiveVariant(matchingVariant.node);setPartialSelections({});}}}}catch(error){// Fallback\nif(e.detail?.isCompleteVariant){setActiveVariant(e.detail);if(e.detail.onClickAction!==\"purchase\"){setPartialSelections({});}}else{setActiveVariant(null);if(Array.isArray(e.detail?.selectedOptions)){const partial={};e.detail.selectedOptions.forEach(opt=>{if(opt?.name)partial[opt.name]=opt.value;});setPartialSelections(partial);}}}finally{setIsLoadingPrice(false);}},[shopifyProductID]);// Handle currency changes\nconst handleCurrencyChange=useCallback(event=>{setIsLoadingPrice(true);const{currency,countryCode,country}=event.detail;setSelectedCurrency(currency);setSelectedCountryCode(countryCode);setSelectedCountry(country);try{// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);// Preserve active variant selection if possible\nif(activeVariant){const matchingVariant=_matchingProduct.node.variants?.edges.find(({node})=>node.selectedOptions.every(option=>activeVariant.selectedOptions.find(activeOption=>activeOption.name===option.name&&activeOption.value===option.value)));if(matchingVariant){setActiveVariant(matchingVariant.node);}}}}catch(error){// Error handling\n}finally{setIsLoadingPrice(false);}},[shopifyProductID,activeVariant]);// Listen for currency changes\nuseEffect(()=>{if(!isBrowser)return;window.addEventListener(\"currency_changed\",handleCurrencyChange);return()=>{window.removeEventListener(\"currency_changed\",handleCurrencyChange);};},[isBrowser,handleCurrencyChange]);// Initial product load\nuseEffect(()=>{if(!isBrowser)return;const handleProductsReady=async e=>{if(Array.isArray(e.detail.products)){setIsLoadingPrice(true);const _matchingProduct=e.detail.products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);if(_matchingProduct.node?.variants?.edges?.length===1){setActiveVariant(_matchingProduct.node.variants.edges[0].node);}}setIsLoadingPrice(false);}};const loadProduct=async()=>{try{setIsLoadingPrice(true);// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);if(_matchingProduct.node?.variants?.edges?.length===1){setActiveVariant(_matchingProduct.node.variants.edges[0].node);}}}catch(error){// Error handling\n}finally{setIsLoadingPrice(false);}};loadProduct();// Add event listeners\ndocument.addEventListener(\"product__active-variant__changed\",handleVariantChange);document.addEventListener(\"data__products-ready\",handleProductsReady);// Cleanup\nreturn()=>{document.removeEventListener(\"product__active-variant__changed\",handleVariantChange);document.removeEventListener(\"data__products-ready\",handleProductsReady);};},[isBrowser,shopifyProductID,selectedCurrency,selectedCountryCode]);// Wait for variant selection events with timeout\nuseEffect(()=>{if(!isBrowser||!product)return;// Only wait for variant selection if it's a multi-variant product\nconst isMultiVariant=product.variants?.edges?.length>1;if(!isMultiVariant)return;// Set waiting state and start timeout\nsetWaitingForVariantSelection(true);// console.log(\"Price component: Waiting for variant selection events...\")\nconst timeout=setTimeout(()=>{// If no variant selection events received within timeout, assume no variant selector\nsetWaitingForVariantSelection(false);//console.log(\"Price component: No variant selection events received, showing product price\")\n},1e3)// 1 second timeout\n;return()=>{clearTimeout(timeout);};},[isBrowser,product]);// Add subscription price listener\nuseEffect(()=>{if(!isBrowser)return;const handleSubscriptionPriceUpdate=e=>{if(e.detail?.productId===shopifyProductID&&e.detail?.price){//console.log(\"selling plan event\", e.detail)\nsetSubscriptionPrice(e.detail.price);}else{setSubscriptionPrice(null);}};const handleVariantOptionSelected=e=>{//console.log(\"variant_option_selected\", e.detail)\nif(e.detail?.isPurchaseAction){// console.log(\n//     \"Purchase action is true, returning\",\n//     e.detail?.isPurchaseAction\n// )\nreturn;}// Check if this event is for our product\nconst eventProductId=e.detail?.productId;const expectedProductId=`gid://shopify/Product/${shopifyProductID}`;if(eventProductId&&eventProductId!==expectedProductId){//console.log(\"Event not for this product\", eventProductId, expectedProductId)\nreturn;}// Clear waiting state when variant selection events are received\nsetWaitingForVariantSelection(false);//console.log(\"Price component: Variant selection event received, clearing wait state\")\nsetIsLoadingPrice(true);if(e.detail?.optionName&&e.detail?.value){setPartialSelections({[e.detail.optionName]:e.detail.value});//console.log(\"setting partialSelections from individual option\", e.detail.optionName, e.detail.value)\n}setIsLoadingPrice(false);};document.addEventListener(\"subscription__price-update\",handleSubscriptionPriceUpdate);document.addEventListener(\"variant_option_selected\",handleVariantOptionSelected);document.addEventListener(\"__variant_option_selected\",handleVariantOptionSelected);return()=>{document.removeEventListener(\"subscription__price-update\",handleSubscriptionPriceUpdate);document.removeEventListener(\"variant_option_selected\",handleVariantOptionSelected);document.removeEventListener(\"__variant_option_selected\",handleVariantOptionSelected);};},[isBrowser,shopifyProductID]);// Get currency formatting options at component level\nconst _currencyCode=useMemo(()=>{const variantCurrency=get(activeVariant,\"price.currencyCode\");const productCurrency=get(product,\"priceRange.minVariantPrice.currencyCode\");return variantCurrency||productCurrency||\"USD\";},[activeVariant,product]);const showMockValues=useMemo(()=>RenderTarget.current()===RenderTarget.canvas||isBrowser&&window.location.origin.endsWith(\"framercanvas.com\"),[isBrowser]);// Common function to format price based on options\nconst formatPriceWithOptions=(numericPrice,currCode)=>{const symbolSameAsCode=isCurrencySymbolSameAsCode(currCode);// Get locale from selected country code\nconst locale=getLocaleFromCountry(selectedCountryCode);// Log browser user agent for debugging iOS-specific issues\n// if (isBrowser) {\n//     console.log(\"[FC_ProductPrice] Format debug:\", {\n//         userAgent: navigator.userAgent,\n//         isCurrencySymbolSameAsCode: symbolSameAsCode,\n//         currencyCode: currCode,\n//         selectedCountryCode,\n//         locale,\n//         showSymbol,\n//         showCurrency,\n//         showDecimals,\n//     })\n// }\n// Determine if we should show decimals based on the setting\nconst shouldShowDecimals=()=>{if(showDecimals===\"Always show\")return true;if(showDecimals===\"Never show\")return false;if(showDecimals===\"Hide when .00\"){// Check if the decimal part is zero\nreturn numericPrice%1!==0;}return true// Default fallback\n;};const decimalDigits=shouldShowDecimals()?2:0;// If showing neither symbol nor code, just format the number\nif(!showSymbol&&!showCurrency){const formattedNumber=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);return formattedNumber;}// Special case for USD to prevent \"US$\" display in Safari iOS\nif(currCode===\"USD\"&&showSymbol){// Check if running on iOS device\nconst isIOS=isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;// Format USD manually to avoid the iOS \"US$\" prefix\nif(isIOS){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);let result;if(!showCurrency){result=`$${number}`// Just \"$50\" format\n;}else{result=`$${number} USD`// \"$50 USD\" format\n;}return result;}else{// For non-iOS devices, continue with normal formatting but use\n// a more controlled approach to ensure consistency\nlet result;if(!showCurrency){result=new Intl.NumberFormat(locale,{style:\"currency\",currency:\"USD\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);}else{const withSymbol=new Intl.NumberFormat(locale,{style:\"currency\",currency:\"USD\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);result=`${withSymbol} USD`;}return result;}}// For currencies where symbol is same as code (like CHF)\nif(symbolSameAsCode){// If showing currency code, always use code-first format and ignore symbol\nif(showCurrency&&!showSymbol){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);const output=`${currCode} ${number}`;return output;}if(showSymbol&&!showCurrency){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);const output=`${currCode} ${number}`;return output;}if(showCurrency&&showSymbol){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);const result=`${currCode} ${number}`;return result;}}// For currencies with distinct symbols (like USD with $)\n// If showing only the code (no symbol)\nif(!showSymbol&&showCurrency){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);// For normal currencies, show code after the number\nconst result=`${number} ${currCode}`;return result;}// If showing only the symbol (no code)\nif(showSymbol&&!showCurrency){const result=new Intl.NumberFormat(locale,{style:\"currency\",currency:currCode,minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);return result;}// If showing both symbol and code\nconst withSymbol=new Intl.NumberFormat(locale,{style:\"currency\",currency:currCode,minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);const result=`${withSymbol} ${currCode}`;return result;};const text=useMemo(()=>{if(!isBrowser)return\"\";// For canvas view, handle the display options directly\nif(typeof RenderTarget!==\"undefined\"&&(RenderTarget.current()===RenderTarget.canvas||showMockValues)){// Parse canvasPrice as range format (e.g., \"200.00-250.00\")\nlet minPrice;let maxPrice;if(canvasPrice){const priceRange=canvasPrice.split(\"-\");if(priceRange.length===2){minPrice=priceRange[0].trim();maxPrice=priceRange[1].trim();}else{// If no range format, use the single price for both min and max\nminPrice=canvasPrice;maxPrice=canvasPrice;}}const numericPrice=parseFloat(minPrice);const numericMaxPrice=parseFloat(maxPrice);const currentCurrencyCode=currencyCode||\"USD\";const formattedPrice=formatPriceWithOptions(numericPrice,currentCurrencyCode);// Handle displayPrice logic for canvas preview\nif(props.displayPrice===\"minimum price\"){// If min and max are the same, just show one price (no \"from\" prefix)\nif(Math.abs(numericPrice-numericMaxPrice)<.01){return formattedPrice;}return`${fromText} ${formattedPrice}`;}if(props.displayPrice===\"range\"){const formattedMaxPrice=formatPriceWithOptions(numericMaxPrice,currentCurrencyCode);// If min and max are the same, just show one price\nif(Math.abs(numericPrice-numericMaxPrice)<.01){return formattedPrice;}return`${formattedPrice} - ${formattedMaxPrice}`;}return formattedPrice;}// For live view, use the selected currency or preview currency\nconst amount=subscriptionPrice||activeVariant&&get(activeVariant,\"price.amount\");if(!amount&&!activeVariant&&!product?.priceRange){return\"\";}const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";// Use cached range if available, otherwise compute on-demand\nconst range=computedPriceRange.min!==null?computedPriceRange:getProductPriceRange(product,false);const{min:computedMin,max:computedMax}=range;// FAST PATH: If we have an amount (subscription or active variant), format it immediately\nif(amount){const numericPrice=parseFloat(amount);if(isNaN(numericPrice))return\"\";const formattedPrice=formatPriceWithOptions(numericPrice,currentCurrencyCode);return formattedPrice;}// FAST PATH: Single variant products - show price immediately\nif(product?.variants?.edges?.length===1&&!activeVariant){const variant=product.variants.edges[0].node;if(variant?.price?.amount){const numericPrice=parseFloat(variant.price.amount);if(!isNaN(numericPrice)){return formatPriceWithOptions(numericPrice,currentCurrencyCode);}}}// Handle partial selections (when user selects only some variant options)\nconst hasPartialSelections=Object.keys(partialSelections).length>0;const hasCompleteVariant=activeVariant&&activeVariant.selectedOptions?.length>0;//console.log(\"hasPartialSelections\", hasPartialSelections)\n//console.log(\"hasCompleteVariant\", hasCompleteVariant)\n//console.log(\"product\", product)\n//console.log(\"partialSelections\", partialSelections)\nif(hasPartialSelections&&!hasCompleteVariant&&product?.variants?.edges?.length&&variantSelectorAction!==\"purchase\"){// Filter variants that match the partial selections\nconst matchingVariants=product.variants.edges.filter(({node:variant})=>{return variant.selectedOptions.every(option=>{// If this option is in our partial selections, it must match\nif(partialSelections[option.name]){return partialSelections[option.name]===option.value;}// If not in partial selections, any value is fine\nreturn true;});});// console.log(\"matchingVariants\", matchingVariants)\nif(matchingVariants.length>0){//console.log(\"matchingVariants\", matchingVariants)\n// Calculate min and max prices for matching variants\nconst prices=matchingVariants.map(({node:variant})=>parseFloat(variant.price?.amount||\"0\")).filter(price=>price>0);if(prices.length>0){const minPrice=Math.min(...prices);const maxPrice=Math.max(...prices);const formattedMinPrice=formatPriceWithOptions(minPrice,currentCurrencyCode);if(props.displayPrice===\"range\"){// If min and max are the same, just show one price\nif(Math.abs(minPrice-maxPrice)<.01){return formattedMinPrice;}const formattedMaxPrice=formatPriceWithOptions(maxPrice,currentCurrencyCode);return`${formattedMinPrice} - ${formattedMaxPrice}`;}if(props.displayPrice===\"minimum price\"){// If min and max are the same, just show one price (no \"from\" prefix)\nif(Math.abs(minPrice-maxPrice)<.01){return formattedMinPrice;}return`${fromText} ${formattedMinPrice}`;}}}}// Handle price range display logic for complete product (no active variant)\nif(!activeVariant&&product?.priceRange||variantSelectorAction===\"purchase\"&&product?.priceRange){// If we're waiting for variant selection, don't show product price\nif(waitingForVariantSelection){return\"\";}// PROGRESSIVE ENHANCEMENT: Show min price immediately, enhance with range when computed\nif(computedMin){const formattedMinPrice=formatPriceWithOptions(computedMin,currentCurrencyCode);// If we have both min and max, show range\nif(computedMax&&Math.abs(computedMin-computedMax)>.01){if(props.displayPrice===\"range\"){const formattedMaxPrice=formatPriceWithOptions(computedMax,currentCurrencyCode);return`${formattedMinPrice} - ${formattedMaxPrice}`;}if(props.displayPrice===\"minimum price\"){// If min and max are the same, just show one price (no \"from\" prefix)\nif(Math.abs(computedMin-computedMax)<.01){return formattedMinPrice;}return`${fromText} ${formattedMinPrice}`;}}// Single price or fallback\nif(props.displayPrice===\"range\"){return formattedMinPrice;}// If min and max are the same, just show one price (no \"from\" prefix)\nif(computedMax&&Math.abs(computedMin-computedMax)<.01){return formattedMinPrice;}return`${fromText} ${formattedMinPrice}`;}// FALLBACK: Use product-level range if available\nconst productMinPrice=get(product,\"priceRange.minVariantPrice.amount\");if(productMinPrice){const numericMinPrice=parseFloat(productMinPrice);if(!isNaN(numericMinPrice)&&numericMinPrice>0){const formattedMinPrice=formatPriceWithOptions(numericMinPrice,currentCurrencyCode);if(props.displayPrice===\"range\"){const productMaxPrice1=get(product,\"priceRange.maxVariantPrice.amount\");if(productMaxPrice1){const numericMaxPrice=parseFloat(productMaxPrice1);if(!isNaN(numericMaxPrice)&&numericMaxPrice>0&&Math.abs(numericMinPrice-numericMaxPrice)>.01){const formattedMaxPrice=formatPriceWithOptions(numericMaxPrice,currentCurrencyCode);return`${formattedMinPrice} - ${formattedMaxPrice}`;}}return formattedMinPrice;}// If min and max are the same, just show one price (no \"from\" prefix)\nif(productMaxPrice){const numericMaxPrice=parseFloat(productMaxPrice);if(!isNaN(numericMaxPrice)&&Math.abs(numericMinPrice-numericMaxPrice)<.01){return formattedMinPrice;}}return`${fromText} ${formattedMinPrice}`;}}}// Absolute last fallback: try active variant again or show nothing\nreturn\"\";},[isBrowser,showMockValues,activeVariant,product,canvasPrice,showCurrency,showSymbol,currencyCode,showDecimals,selectedCurrency,selectedCountryCode,subscriptionPrice,props.displayPrice,partialSelections,variantSelectorAction,fromText,waitingForVariantSelection,getProductPriceRange]);const compareAtPrice=useMemo(()=>{// For partial selections (variant groups), check if any matching variants have compareAtPrice\nif(Object.keys(partialSelections).length>0&&product?.variants?.edges?.length){const matchingVariants=product.variants.edges.filter(({node:variant})=>{return variant.selectedOptions.every(option=>{if(partialSelections[option.name]){return partialSelections[option.name]===option.value;}return true;});});// Check if ALL matching variants have a valid compareAtPrice\nconst allMatchingVariantsHaveComparePrice=matchingVariants.every(({node:variant})=>{const compareAmount=get(variant,\"compareAtPrice.amount\");return compareAmount&&parseFloat(compareAmount)>0;});// If not all matching variants have compareAtPrice, return empty string\nif(!allMatchingVariantsHaveComparePrice){return\"\";}// If all matching variants have compareAtPrice, use the minimum for consistency\nconst comparePrices=matchingVariants.map(({node:variant})=>parseFloat(get(variant,\"compareAtPrice.amount\")||\"0\")).filter(price=>price>0);if(comparePrices.length>0){const minComparePrice=Math.min(...comparePrices);const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";return formatPriceWithOptions(minComparePrice,currentCurrencyCode);}}// For active variant, use its compareAtPrice\nif(activeVariant){const amount=get(activeVariant,\"compareAtPrice.amount\");if(!amount)return\"\";const numericPrice=parseFloat(amount);if(isNaN(numericPrice)||numericPrice<=0)return\"\";const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";return formatPriceWithOptions(numericPrice,currentCurrencyCode);}// For product level (no variant selected), check if ALL variants have compareAtPrice\nif(product?.variants?.edges?.length){const allVariantsHaveComparePrice=product.variants.edges.every(({node:variant})=>{const compareAmount=get(variant,\"compareAtPrice.amount\");return compareAmount&&parseFloat(compareAmount)>0;});// If not all variants have compareAtPrice, don't show sale styling\nif(!allVariantsHaveComparePrice){return\"\";}// If all variants have compareAtPrice, use the product-level compareAtPriceRange\nconst amount=get(product,\"compareAtPriceRange.minVariantPrice.amount\");if(!amount)return\"\";const numericPrice=parseFloat(amount);if(isNaN(numericPrice)||numericPrice<=0)return\"\";const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";return formatPriceWithOptions(numericPrice,currentCurrencyCode);}return\"\";},[activeVariant,product,partialSelections,currencyCode,showCurrency,showSymbol,showDecimals,selectedCurrency,selectedCountryCode,showMockValues,props.format]);const numericValue=useMemo(()=>parseFloat(compareAtPrice.replace(/[^\\d.-]/g,\"\")),[compareAtPrice]);const hasValidCompareAtPrice=!isNaN(numericValue)&&numericValue>0;const shouldDisplay=useMemo(()=>{if(showMockValues)return true;if(!text)return false;const value=parseFloat(text.replace(/[^\\d.-]/g,\"\"));return!isNaN(value)&&value>0;},[text,showMockValues]);const computedStyles=useMemo(()=>{const baseStyles={margin:0,padding:0,lineHeight:1,whiteSpace:\"nowrap\",display:\"inline-block\",width:\"auto\"};const priceStyles=hasValidCompareAtPrice?props.saleFont:props.regularFont;const priceColor=hasValidCompareAtPrice?props.saleColor:props.regularColor;return{...baseStyles,...priceStyles,color:priceColor};},[hasValidCompareAtPrice,props.saleFont,props.regularFont,props.saleColor,props.regularColor]);// console.log(\"Text\", text)\n// // Price calculation logging\n// useEffect(() => {\n//     console.log(\"[FC_ProductPrice] Price State Update:\", {\n//         activeVariant,\n//         product,\n//         selectedCurrency,\n//         subscriptionPrice,\n//     })\n// }, [activeVariant, product, selectedCurrency, subscriptionPrice])\n// useEffect(() => {\n//     console.log(\"Active variant updated:\", activeVariant);\n// }, [activeVariant]);\n// Return placeholder during SSR\nif(!isBrowser||isLoadingPrice){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"none\"}});}// Progressive enhancement: Show loading state only when we have no data at all\nconst shouldShowLoading=!product&&!activeVariant&&!subscriptionPrice&&!showMockValues;if(shouldShowLoading){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"none\"}});}// Show progressive loading indicator when computing ranges\nconst isComputingRange=product&&!isRangeComputed&&product.variants?.edges?.length>1;return /*#__PURE__*/_jsx(\"div\",{style:{display:\"inline-block\",maxWidth:\"100%\",width:\"auto\",whiteSpace:\"nowrap\",overflow:\"visible\",transform:\"none\",transition:\"none\",animation:\"none\",willChange:\"auto\"},children:/*#__PURE__*/_jsx(\"p\",{style:{...computedStyles,transform:\"none\",transition:\"none\",animation:\"none\",willChange:\"auto\"},children:text})});}FC_ProductPrice.defaultProps={shopifyProductID:\"\",canvasPrice:\"50.00\",fromText:\"from\",format:{showCurrency:true,showSymbol:true,currencyCode:\"USD\",showDecimals:\"Always show\"}};addPropertyControls(FC_ProductPrice,{shopifyProductID:{type:ControlType.String,title:\"Product ID\",description:\"Connect to CMS (required).\"},canvasPrice:{type:ControlType.String,title:\"Price\",defaultValue:\"50.00\",description:\"Connect to CMS (for canvas preview only).\"},displayPrice:{type:ControlType.Enum,title:\"Varying Prices\",options:[\"minimum price\",\"range\"],optionTitles:[\"Minimum Price\",\"Range\"],defaultValue:\"minimum price\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",description:\"When a product has multiple prices and a variant has not been selected.\"},fromText:{type:ControlType.String,title:\"Prefix\",placeholder:\"from\",defaultValue:\"from\",hidden:props=>props.displayPrice!==\"minimum price\"},format:{type:ControlType.Object,title:\"Format\",controls:{showSymbol:{type:ControlType.Boolean,title:\"Symbol\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"$, \\xa3, €, etc.\"},showCurrency:{type:ControlType.Boolean,title:\"Code\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"USD, EUR, CHF, etc.\"},showDecimals:{type:ControlType.Enum,title:\"Decimals\",defaultValue:\"Always show\",options:[\"Always show\",\"Never show\",\"Hide when .00\"],optionTitles:[\"Always show\",\"Never show\",\"Hide when .00\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},currencyCode:{type:ControlType.Enum,title:\"Preview\",defaultValue:\"USD\",options:[\"USD\",\"EUR\",\"GBP\",\"CHF\",\"JPY\",\"CAD\",\"AUD\",\"CNY\",\"HKD\",\"NZD\",\"SEK\",\"KRW\",\"SGD\",\"NOK\",\"MXN\",\"INR\",\"RUB\",\"ZAR\",\"TRY\",\"BRL\",\"TWD\",\"DKK\",\"PLN\",\"THB\",\"IDR\",\"HUF\",\"CZK\",\"ILS\",\"CLP\",\"PHP\",\"AED\",\"COP\",\"SAR\",\"MYR\",\"RON\"],description:\"Currency is for canvas preview only.\"}}},/** Font and Color Controls */regularFont:{type:ControlType.Font,title:\"Regular\",controls:\"extended\"},regularColor:{type:ControlType.Color,title:\"↳ Color\",defaultValue:\"#000\"},saleFont:{type:ControlType.Font,title:\"Sale\",controls:\"extended\"},saleColor:{type:ControlType.Color,title:\"↳ Color\",defaultValue:\"#FF0000\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_ProductPrice\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_ProductPrice.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * ... [license header omitted for brevity] ...\n */// Utility function to clean Shopify GID to just the numeric ID\nconst cleanShopifyId=gid=>gid?.split(\"/\").pop()||\"\";// Standardized Facebook Pixel AddToCart tracking function\nexport const trackFacebookPixelAddToCart=data=>{if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\"}=data;if(!variant||!product){console.warn(\"Missing variant or product data for Facebook Pixel tracking\");return;}const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const item_variant=variant.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const value=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel AddToCart: missing required data\",{item_id,item_name,price,value});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing AddToCart', item_id, item_name);\n// console.log('[Facebook Pixel] AddToCart with data:', fbqData);\n// console.log('[Facebook Pixel] AddToCart timestamp:', new Date().toISOString());\nfbq(\"track\",\"AddToCart\",fbqData,{eventID:\"addtocart_\"+Date.now()});};// Standardized Facebook Pixel InitiateCheckout tracking function\nexport const trackFacebookPixelInitiateCheckout=data=>{if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\",value:providedValue,content_ids:providedContentIds,content_name:providedContentName,num_items:providedNumItems}=data;let fbqData={content_type:\"product\",currency:currency};// If we have variant and product data, calculate from them\nif(variant&&product){const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const calculatedValue=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: missing required data\",{item_id,item_name,price,calculatedValue});return;}fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(calculatedValue.toFixed(2)),currency:finalCurrency,num_items:parseInt(quantity.toString())};}else if(providedContentIds&&providedValue!==undefined){// Ensure providedValue is a valid number\nconst numericValue=typeof providedValue===\"number\"?providedValue:parseFloat(providedValue)||0;fbqData={content_type:\"product\",content_ids:providedContentIds,content_name:providedContentName||\"Checkout\",value:parseFloat(numericValue.toFixed(2)),currency:currency,num_items:parseInt((providedNumItems||1).toString())};}else{console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: insufficient data\",data);return;}// console.log('[Facebook Pixel] Firing InitiateCheckout', fbqData.content_ids?.[0], fbqData.content_name);\n// console.log('[Facebook Pixel] InitiateCheckout with data:', fbqData);\n// console.log('[Facebook Pixel] InitiateCheckout timestamp:', new Date().toISOString());\n// Use sendBeacon if requested, otherwise use regular tracking\nconst eventOptions={eventID:\"initiatecheckout_\"+Date.now()};if(data.useBeacon){fbq(\"track\",\"InitiateCheckout\",fbqData,{...eventOptions,transport:\"beacon\"});}else{fbq(\"track\",\"InitiateCheckout\",fbqData,eventOptions);}};// Standardized Facebook Pixel RemoveFromCart tracking function\nexport const trackFacebookPixelRemoveFromCart=data=>{if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{lineItem,currency=\"USD\"}=data;if(!lineItem){console.warn(\"Missing lineItem data for Facebook Pixel RemoveFromCart tracking\");return;}const item_id=cleanShopifyId(lineItem.merchandise.id);const item_name=lineItem.merchandise.product?.title||\"\";const item_variant=lineItem.merchandise.title||\"\";const price=parseFloat(lineItem.cost.subtotalAmount.amount||\"0\");const quantity=lineItem.quantity||1;const value=price*quantity;const finalCurrency=lineItem.cost.subtotalAmount.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel RemoveFromCart: missing required data\",{item_id,item_name,price,value,quantity});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:lineItem.merchandise.product?.productType||\"\",content_brand:lineItem.merchandise.product?.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing RemoveFromCart with data:', fbqData);\nfbq(\"track\",\"RemoveFromCart\",fbqData,{eventID:\"removefromcart_\"+Date.now()});};// Standardized Facebook Pixel ViewContent tracking function\nexport const trackFacebookPixelViewContent=data=>{if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,currency=\"USD\"}=data;if(!product){console.warn(\"Missing product data for Facebook Pixel ViewContent tracking\");return;}const item_id=variant?cleanShopifyId(variant.id):cleanShopifyId(product.id);const item_name=product.title||\"\";const item_variant=variant?.title||\"\";const price=variant?parseFloat(variant.price?.amount||\"0\"):parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const finalCurrency=variant?.price?.currencyCode||product.priceRange?.minVariantPrice?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel ViewContent: missing required data\",{item_id,item_name,price});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(price.toFixed(2)),currency:finalCurrency};// console.log('[Facebook Pixel] Firing ViewContent with data:', fbqData);\nfbq(\"track\",\"ViewContent\",fbqData,{eventID:\"viewcontent_\"+Date.now()});};export default function initializeFacebookPixel(facebookPixelId){!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments);};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=\"2.0\";n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;// Add onload and onerror event handlers\nt.onload=()=>{if(typeof fbq!==\"undefined\"){fbq(\"init\",facebookPixelId);fbq(\"track\",\"PageView\");}else{// Handle case where fbq is not defined\n}};t.onerror=()=>{// Handle Facebook Pixel script load failure\n};s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s);}(window,document,\"script\",\"https://connect.facebook.net/en_US/fbevents.js\");}\nexport const __FramerMetadata__ = {\"exports\":{\"trackFacebookPixelRemoveFromCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelInitiateCheckout\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelAddToCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelViewContent\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Fb_pixel.map","/**\n * Initialization utilities for Framer Commerce\n * This file contains functions that should run when the application first loads\n */import{getUTMParameters,getSCARefParameters}from\"https://framerusercontent.com/modules/w24ELWa2giT3SFaWpV77/UL9rXBH96UMdOgXUL8Iq/utmParams.js\";/**\n * Initialize global functionality for the store\n * This includes capturing UTM parameters, setting up event listeners, etc.\n */export function initializeStore(){// Capture UTM and SCA ref parameters when the page loads\nif(typeof window!==\"undefined\"){// Initialize UTM parameter tracking\ngetUTMParameters();// Initialize SCA ref parameter tracking\ngetSCARefParameters();// Add a listener for history changes to capture tracking parameters\n// when users navigate between pages\ntry{const originalPushState=history.pushState;const originalReplaceState=history.replaceState;history.pushState=function(){originalPushState.apply(this,arguments);getUTMParameters()// Capture UTM parameters after navigation\n;getSCARefParameters()// Capture SCA ref parameters after navigation\n;};history.replaceState=function(){originalReplaceState.apply(this,arguments);getUTMParameters()// Capture UTM parameters after navigation\n;getSCARefParameters()// Capture SCA ref parameters after navigation\n;};// Also listen for popstate events (back/forward navigation)\nwindow.addEventListener(\"popstate\",()=>{getUTMParameters();getSCARefParameters();});}catch(error){console.error(\"Error setting up history listeners:\",error);}}}// Auto-initialize if this module is loaded\ninitializeStore();export default initializeStore;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"initializeStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./initialize.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * © 2025 Butter Supply Inc. All Rights Reserved.\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,useCallback,cloneElement}from\"react\";import{createCartMutation,addToCartMutation,cartQuery,updateCartAttributes,updateCartCurrency,getProductMetafields}from\"https://framerusercontent.com/modules/yiRfl1JCGhIBUL31WVDk/wupS2XmBAHu1kBQNv9pi/mutations_v2.js\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{get}from\"lodash-es\";import{appendAllTrackingParamsToUrl}from\"https://framerusercontent.com/modules/w24ELWa2giT3SFaWpV77/UL9rXBH96UMdOgXUL8Iq/utmParams.js\";import{appendLanguageToUrl}from\"https://framerusercontent.com/modules/vC6fzbfO83MgBPIhn5zl/DUlbmWuOELzEUenVmv3G/locales.js\";import{useIsBrowser}from\"https://framerusercontent.com/modules/ncBs5KPMI9I5GEta13fn/zGXDjuZapa1SGy6D8P5e/IsBrowser.js\";import{trackFacebookPixelAddToCart,trackFacebookPixelInitiateCheckout,trackFacebookPixelViewContent}from\"https://framerusercontent.com/modules/6Zs9CjkPbKzHjoy8LK08/UlcfEh8799smdhRPoZER/Fb_pixel.js\";// Import initialization utility to ensure UTM tracking is set up\nimport\"https://framerusercontent.com/modules/FXrY3V9ZYVL8aziafDQn/poYNkLXrIoN2FGyaJ5zN/initialize.js\";/**\n * @framerDisableUnlink\n */export default function FC_ProductPurchaseButton(props){const{shopifyProductID,available,OutOfStock,SelectVariant,LoadingState,maxQuantity,shopifyProductVariantId,BuyNowATC,title=\"Add to Cart\",required=false,openCart=true}=props;// State from original component\nconst[product,setProduct]=useState();const[activeVariant,setActiveVariant]=useState();const[isInStock,setIsInStock]=useState(true);const[needsVariantSelection,setNeedsVariantSelection]=useState(false);const[isLoading,setIsLoading]=useState(true);const[shouldShowLoading,setShouldShowLoading]=useState(false);const[hasInitialized,setHasInitialized]=useState(false);const[countryCode,setCountryCode]=useState();const isBrowser=useIsBrowser();// Additional state for cart functionality\nconst[planSelected,setPlanSelected]=useState(\"one-time\");const[cartExistingData,setCartExistingData]=useState();const[errorMessage,setErrorMessage]=useState();const[productQuantity,setProductQuantity]=useState(1);const viewContentFired=useRef(false);const[autoSelectFirst,setAutoSelectFirst]=useState(false);const[isVariantManuallySelected,setIsVariantManuallySelected]=useState(false);// Check if variant is autoselected by default\nuseEffect(()=>{if(!isBrowser)return;//console.log(\"FC_ProductPurchaseButton mounted\")\nconst handleAutoSelectFlag=event=>{// console.log(\n//     \"Auto Select event received as:\",\n//     event.detail.autoSelectFirst\n// )\nif(event.detail.shopifyProductID!==`gid://shopify/Product/${props.shopifyProductID}`){return;}setAutoSelectFirst(event.detail.autoSelectFirst);window.__fc_autoSelectFirst=event.detail.autoSelectFirst;//console.log(\"Auto Select First Flag:\", event.detail.autoSelectFirst)\n};document.addEventListener(\"auto_select_first_flag\",handleAutoSelectFlag);return()=>{document.removeEventListener(\"auto_select_first_flag\",handleAutoSelectFlag);};},[isBrowser]);// Calculate total inventory helper function\nconst calculateTotalInventory=useCallback(productData=>{if(!productData||productData===\"404\")return 0;// If totalInventory is available, use it\nif(typeof productData.totalInventory===\"number\"){return productData.totalInventory;}// Otherwise sum up variant quantities\nreturn get(productData,\"variants.edges\",[]).reduce((total,{node})=>{return total+(node.quantityAvailable||0);},0);},[]);// Helper function to check if variant is available for sale\nconst isVariantAvailable=useCallback(variant=>{if(!variant)return false;// If availableForSale is true, the variant can be sold regardless of quantity\nif(variant.availableForSale)return true;// If availableForSale is false, check quantity\nreturn variant.quantityAvailable>0;},[]);// Error handling\nuseEffect(()=>{if(errorMessage&&isBrowser){const event=new CustomEvent(\"errorChanged\",{detail:errorMessage});window.dispatchEvent(event);}},[errorMessage]);// Load cart from localStorage\nuseEffect(()=>{if(!isBrowser||!window[\"shopXtools\"])return;// Try to load cart ID first\nconst savedCartId=localStorage.getItem(\"shopX_cart_id\");if(savedCartId){// If we have a cart ID, fetch the cart data\nwindow.shopXtools.handleCartMutation(cartQuery,{cartId:savedCartId}).then(data=>{if(data?.cart){setCartExistingData(data.cart);window.shopXtools.cart=data.cart;localStorage.setItem(\"shopXtools.cart\",JSON.stringify(data.cart));}}).catch(error=>{// Clear invalid cart data\nlocalStorage.removeItem(\"shopX_cart_id\");localStorage.removeItem(\"shopXtools.cart\");});}const handleSubscriptionChange=event=>{setPlanSelected(event.detail.subscriptionId);};document.addEventListener(\"subscription__selection-sync\",handleSubscriptionChange);return()=>document.removeEventListener(\"subscription__selection-sync\",handleSubscriptionChange);},[isBrowser]);// Add this at the top level with other event handlers\nconst handleQuantityChange=event=>{// console.log(\"Quantity change event received:\", event.detail)\nsetProductQuantity(event.detail);};useEffect(()=>{if(isBrowser){window.addEventListener(\"FcQuantitySelectorchanges\",handleQuantityChange);// Cleanup\nreturn()=>{window.removeEventListener(\"FcQuantitySelectorchanges\",handleQuantityChange);};}},[isBrowser]);// Separate effect for ViewContent tracking - more reliable\nuseEffect(()=>{if(!isBrowser||!product||viewContentFired.current)return;// Wait for either activeVariant or at least one variant to be available\nconst hasVariantData=activeVariant||product.variants?.edges?.length>0;if(hasVariantData){// console.log('[ViewContent] Firing ViewContent event for product:', product.title);\ntrackFacebookPixelViewContent({variant:activeVariant||product.variants?.edges?.[0]?.node,product:product,currency:activeVariant?.price?.currencyCode||product.variants?.edges?.[0]?.node?.price?.currencyCode||\"USD\"});viewContentFired.current=true;}},[isBrowser,product,activeVariant]);useEffect(()=>{if(!isBrowser)return;const handleCurrencyChange=async event=>{const{countryCode}=event.detail;setCountryCode(countryCode);const existingCartId=localStorage.getItem(\"shopX_cart_id\");if(existingCartId){try{const updateData=await window.shopXtools.handleCartMutation(updateCartCurrency,{cartId:existingCartId,countryCode:countryCode});if(updateData?.cartBuyerIdentityUpdate?.cart){window.shopXtools.cart=updateData.cartBuyerIdentityUpdate.cart;window.dispatchEvent(new Event(\"shopXtools-cart-update\"));}else{window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:\"Failed to update cart with new country code\"}));}}catch(error){window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:error.message||\"Failed to update cart currency\"}));}}};window.addEventListener(\"currency_changed\",handleCurrencyChange);return()=>{window.removeEventListener(\"currency_changed\",handleCurrencyChange);};},[isBrowser]);// Load product data and set up event listeners\nuseEffect(()=>{if(!isBrowser)return;const handleSingleVariantProduct=productNode=>{if(!productNode)return false;const variants=get(productNode,\"variants.edges\",[]);if(variants.length===1){const variant=variants[0].node;setActiveVariant(variant);if(!isVariantManuallySelected){window.__fc_activeVariantId=variant.id;}setIsInStock(isVariantAvailable(variant));setNeedsVariantSelection(false);return true;}return false;};const handleProductData=_matchingProduct=>{if(_matchingProduct){const productNode=_matchingProduct.node;setProduct(productNode||\"404\");// Fetch order_max if we have a product handle\nif(productNode?.handle){fetchOrderMax(productNode.handle);}// If shopifyProductVariantId is provided, find and set that variant\nif(shopifyProductVariantId&&productNode){const variantId=`gid://shopify/ProductVariant/${shopifyProductVariantId}`;const matchingVariant=get(productNode,\"variants.edges\",[]).find(({node})=>node.id===variantId);if(matchingVariant){setActiveVariant(matchingVariant.node);if(!isVariantManuallySelected){window.__fc_activeVariantId=matchingVariant.node.id;}setIsInStock(isVariantAvailable(matchingVariant.node));setNeedsVariantSelection(false);return;// Exit early as we've found our variant\n}}// Immediately handle single variant products\nif(handleSingleVariantProduct(productNode)){return;// Exit early as we've handled the single variant\n}if(autoSelectFirst&&!isVariantManuallySelected){//console.log(\"Auto-selecting the first variant\");\nconst firstAvailableVariant=productNode.variants.edges.find(edge=>edge.node.availableForSale)?.node;if(firstAvailableVariant){setActiveVariant(firstAvailableVariant);if(!isVariantManuallySelected){window.__fc_activeVariantId=firstAvailableVariant.id;}setIsInStock(isVariantAvailable(firstAvailableVariant));setNeedsVariantSelection(false);return;// Exit early as we've set the active variant\n}}// For multi-variant products without a selected variant\nconst variants=get(productNode,\"variants.edges\",[]);const hasMultipleVariants=variants.length>1;const optionsCount=get(productNode,\"options\",[]).length||0;// Only update needsVariantSelection if we don't have an active variant.\n// This is to prevent the \"Select Variant\" button from showing when the variant is already selected.\nif(!activeVariant){if(!autoSelectFirst&&hasMultipleVariants){setNeedsVariantSelection(true);}else{setNeedsVariantSelection(!shopifyProductVariantId&&hasMultipleVariants);}}// Check if any variant is available\nconst anyVariantAvailable=variants.some(({node})=>isVariantAvailable(node));setIsInStock(anyVariantAvailable);// If nothing is available, do not prompt for variant selection\nif(!anyVariantAvailable){setNeedsVariantSelection(false);}}else{setProduct(\"404\");setIsInStock(false);}};// Check if we already have product data available\nif(window.shopXtools?.products&&Array.isArray(window.shopXtools.products)){// console.log('Found existing products in shopXtools')\nconst _matchingProduct=window.shopXtools.products.find(({node})=>node.id===`gid://shopify/Product/${shopifyProductID}`);handleProductData(_matchingProduct);}const productsReadyHandler=()=>{//console.log('productsReadyHandler called')\n// Reset manual selection state when products are ready\nsetIsVariantManuallySelected(false);if(window?.shopXtools?.products){const matchingProduct=window.shopXtools.products.find(({node:product})=>product.id===`gid://shopify/Product/${shopifyProductID}`);handleProductData(matchingProduct);}};const variantChangeHandler=e=>{// Only update the variant if no shopifyProductVariantId is provided\n// console.log(\"Variant changed, active variant is\", e.detail)\nif(e.detail.productId!==`gid://shopify/Product/${shopifyProductID}`){return;}if(e.detail){// Normalize completeness: some dispatchers may omit isCompleteVariant.\nconst productOptions=get(product,\"options\",[])||[];const selectedArray=Array.isArray(e.detail.selectedOptions)?e.detail.selectedOptions:[];const selectedNames=new Set(selectedArray.map(o=>o?.name).filter(Boolean));const isCompleteFromNames=productOptions.length>0&&productOptions.every(opt=>selectedNames.has(opt.name));const isComplete=e.detail.isCompleteVariant===true||isCompleteFromNames;// If selection is partial, DO NOT treat it as an active variant for purchasing\nif(!isComplete){setIsVariantManuallySelected(true);setActiveVariant(null);window.__fc_activeVariantId=undefined;setNeedsVariantSelection(true);return;}// Complete selection – safe to treat as active variant\nsetActiveVariant(e.detail);setIsVariantManuallySelected(true);window.__fc_activeVariantId=e.detail.id;setIsInStock(e.detail.quantityAvailable>0);// console.log(\"e.detail.id\", e.detail.id)\n// console.log(\n//     \"window.__fc_activeVariantId\",\n//     window.__fc_activeVariantId\n// )\nconst cartQuantity=getCurrentCartQuantity(e.detail.id);// console.log(\"variantChangeHandler: cartQuantity\", cartQuantity)\nif(cartQuantity===e.detail.quantityAvailable&&e.detail.quantityAvailable!==0){// console.log(\"variantChangeHandler: max reached\")\nsetMaxQuantityReached(true);}else{setMaxQuantityReached(false);}// When autoSelectFirst is false, we need to make sure all variants are selected\n// before changing the button state\n// Only mark selection as complete when all options are selected\nif(isComplete){setNeedsVariantSelection(false);}else{setNeedsVariantSelection(true);}}};document.addEventListener(\"data__products-ready\",productsReadyHandler);document.addEventListener(\"product__active-variant__changed\",variantChangeHandler);return()=>{document.removeEventListener(\"data__products-ready\",productsReadyHandler);document.removeEventListener(\"product__active-variant__changed\",variantChangeHandler);};},[shopifyProductID,shopifyProductVariantId,activeVariant,isBrowser,calculateTotalInventory,autoSelectFirst]);// Update variant selection state when activeVariant changes\nuseEffect(()=>{if(!product||product===\"404\")return;const variants=get(product,\"variants.edges\",[]);const hasMultipleVariants=variants.length>1;const noVariantSelected=!activeVariant&&!shopifyProductVariantId;// console.log('Variant selection state update:', {\n//     hasMultipleVariants,\n//     noVariantSelected,\n//     activeVariant,\n//     shopifyProductVariantId\n// })\nsetNeedsVariantSelection(hasMultipleVariants&&noVariantSelected);},[product,activeVariant,shopifyProductVariantId]);// Handle single variant products\nconst handleSingleVariantProducts=product=>{if(!product)return;const variants=get(product,\"variants.edges\",[]);if(variants.length===1){const variant=variants[0].node;setActiveVariant(variant);setIsInStock(variant.quantityAvailable>0);setNeedsVariantSelection(false);}};// Cart functionality\nconst handleSubscription=async(mutation,variables)=>{if(!isBrowser)return null;const handleCartMutation=window[\"shopXtools\"]?.handleCartMutation;if(handleCartMutation){return await handleCartMutation(mutation,variables);}throw new Error(\"handleCartMutation function not available\");};const isValidId=id=>id!==null&&id!==undefined&&id!==\"\";const fullId=`gid://shopify/ProductVariant/${props.shopifyProductVariantId}`;// Add new state for order field validation\nconst[orderFieldError,setOrderFieldError]=useState(false);// Debug logging function\nconst logDebug=(message,data)=>{// Empty function - no logging\n};// Enhanced validation function with logging\nconst validateOrderField=()=>{if(!props.required){logDebug(\"Validation skipped - not required\",{required:props.required});return true;}const productSpecificKey=`fc_cart_attributes_${props.shopifyProductID}`;const storedAttributes=sessionStorage.getItem(productSpecificKey);logDebug(\"Checking stored attributes\",{productSpecificKey,hasStoredAttributes:!!storedAttributes});if(!storedAttributes){return false;}try{const parsedAttrs=JSON.parse(storedAttributes);// Check if any attribute has a non-empty value\nconst hasValidValue=Object.values(parsedAttrs).some(value=>value&&String(value).trim()!==\"\");logDebug(\"Validation result\",{attributes:parsedAttrs,isValid:hasValidValue});return hasValidValue;}catch(error){return false;}};// Effect to initialize validation state\nuseEffect(()=>{if(props.required){const isValid=validateOrderField();logDebug(\"Initial validation\",{isValid,required:props.required});setOrderFieldError(!isValid);}},[props.required,props.shopifyProductID]);// Listen for order field changes with logging\nuseEffect(()=>{if(props.required){const handleOrderFieldChange=event=>{logDebug(\"Order field change event received\",event.detail);const isValid=validateOrderField();setOrderFieldError(!isValid);logDebug(\"Order field validation updated\",{isValid,orderFieldError:!isValid});};window.addEventListener(\"orderFieldChanged\",handleOrderFieldChange);return()=>window.removeEventListener(\"orderFieldChanged\",handleOrderFieldChange);}},[props.required]);const[isInputRequired,setIsInputRequired]=useState(false);// Effect to check if the input field exists and is required\nuseEffect(()=>{const checkInputRequirement=()=>{const configKey=`fc_input_config_${shopifyProductID}`;const config=sessionStorage.getItem(configKey);// Only set as required if the config exists and required is true\nif(config){const{required}=JSON.parse(config);setIsInputRequired(required);}else{// If no config exists, the field isn't on the page\nsetIsInputRequired(false);}};checkInputRequirement();// Listen for config changes\nwindow.addEventListener(\"inputConfigChanged\",checkInputRequirement);return()=>window.removeEventListener(\"inputConfigChanged\",checkInputRequirement);},[shopifyProductID]);const getLineItem=()=>{const merchandiseId=activeVariant?.id||(props.shopifyProductVariantId?`gid://shopify/ProductVariant/${props.shopifyProductVariantId}`:null);if(!merchandiseId){throw new Error(\"No valid product variant selected\");}const lineItem={merchandiseId,quantity:productQuantity};// Add selling plan ID if a subscription is selected\nif(planSelected&&planSelected!==\"one-time\"){lineItem[\"sellingPlanId\"]=planSelected;}try{const productSpecificKey=`fc_cart_attributes_${props.shopifyProductID}`;const stored=sessionStorage.getItem(productSpecificKey);if(!stored)return lineItem;const data=JSON.parse(stored);// Get all attributes instead of just checking for specific ones\nconst attributes=[];// Process all key-value pairs in the stored data\nObject.entries(data).forEach(([key,value])=>{if(value&&String(value).trim()){attributes.push({key,value:String(value).trim()});}});// Only add attributes if we have any\nif(attributes.length>0){lineItem[\"attributes\"]=attributes;}}catch(e){console.error(\"Error adding attributes to cart item:\",e);}return lineItem;};const[maxQuantityReached,setMaxQuantityReached]=useState(false);const[orderMax,setOrderMax]=useState(0);// Fetch order_max from product metafields\nconst fetchOrderMax=useCallback(async productHandle=>{if(!productHandle)return;try{const metafieldsResponse=await window.shopXtools?.handleCartMutation?.(getProductMetafields,{handle:productHandle});const max=parseInt(metafieldsResponse?.product?.metafield_order_max?.value,10);if(!isNaN(max)&&max>0){setOrderMax(max);// console.log(\"Fetched order max\", max)\n}else{setOrderMax(0);}}catch(error){console.warn(\"Could not fetch product metafields for order_max:\",error);setOrderMax(0);}},[]);// Modify the getCurrentCartQuantity function to calculate per-product quantity\nconst getCurrentCartQuantity=useCallback(variantId=>{// if (!cartExistingData?.lines?.edges) {\n//     return 0\n// }\nconst liveCart=window?.shopXtools?.cart;setCartExistingData(liveCart);const liveEdges=liveCart?.lines?.edges;if(!liveEdges)return 0;// If we have a product handle, calculate per-product quantity\nif(product?.handle&&orderMax>0){const productVariantIds=get(product,\"variants.edges\",[]).map(({node})=>node.id);const totalQuantity=liveEdges.reduce((total,{node})=>{if(productVariantIds.includes(node.merchandise.id)){return total+node.quantity;}return total;},0);// console.log(\"getCurrentCartQuantity (per-product):\", totalQuantity)\nreturn totalQuantity;}// Fallback to variant-specific quantity\nconst quantity=liveEdges.reduce((total,{node})=>{if(node.merchandise.id===variantId){return total+node.quantity;}return total;},0);// console.log(\"getCurrentCartQuantity (per-variant):\", quantity)\nreturn quantity;},[product,orderMax]);const handleAddToCart=async()=>{try{if(!isBrowser)return;const variantId=activeVariant?.id||(props.shopifyProductVariantId?`gid://shopify/ProductVariant/${props.shopifyProductVariantId}`:null);const currentCartQuantity=getCurrentCartQuantity(variantId);// console.log(\"currentCartQuantity\", currentCartQuantity)\n// Check order_max from product metafields\nif(orderMax>0){// console.log(\"orderMax > 0\", orderMax)\n// Check if we've already reached the product limit\nif(currentCartQuantity>=orderMax){// console.log(\"currentCartQuantity >= orderMax: Max reached\")\nsetMaxQuantityReached(true);return;}}// Check quantityAvailable when orderMax is 0 or not set\nif(orderMax===0&&activeVariant&&activeVariant.quantityAvailable!==0){// console.log(\"orderMax is 0, checking quantityAvailable\")\n// console.log(\"activeVariant.quantityAvailable\", activeVariant.quantityAvailable)\n// Check if we've already reached the available quantity\nif(currentCartQuantity>=activeVariant.quantityAvailable){// console.log(\"currentCartQuantity >= quantityAvailable: Max reached\")\nsetMaxQuantityReached(true);return;}}if(props.required||isInputRequired){const productSpecificKey=`fc_cart_attributes_${props.shopifyProductID}`;const storedAttributes=sessionStorage.getItem(productSpecificKey);const inputElement=document.querySelector(`[data-product-id=\"${props.shopifyProductID}\"]`);const currentInputValue=inputElement?.value||\"\";// Don't check for unsaved input if there's no input element or value\nif(inputElement&&currentInputValue&&storedAttributes){try{// Parse stored attributes\nconst parsedAttrs=JSON.parse(storedAttributes);// Check if the current input value is different from any of the stored attribute values\nconst valueIsSaved=Object.values(parsedAttrs).some(attrValue=>String(attrValue).trim()===currentInputValue.trim());if(!valueIsSaved){window.dispatchEvent(new CustomEvent(\"inputValidationFailed\",{detail:{productId:props.shopifyProductID,message:\"Please save your input before adding to cart\"}}));return;}}catch(e){// If we can't parse stored attributes, we can't validate\nwindow.dispatchEvent(new CustomEvent(\"inputValidationFailed\",{detail:{productId:props.shopifyProductID,message:\"Please fill in all required fields\"}}));return;}}// Now check if there are any stored attributes at all\nif(!storedAttributes){window.dispatchEvent(new CustomEvent(\"inputValidationFailed\",{detail:{productId:props.shopifyProductID,message:\"Please fill in all required fields\"}}));return;}// Finally check if any of the stored attributes has a valid value\ntry{const parsedAttrs=JSON.parse(storedAttributes);const hasValidValue=Object.values(parsedAttrs).some(value=>value&&String(value).trim()!==\"\");if(!hasValidValue){window.dispatchEvent(new CustomEvent(\"inputValidationFailed\",{detail:{productId:props.shopifyProductID,message:\"Please fill in all required fields\"}}));return;}}catch(e){window.dispatchEvent(new CustomEvent(\"inputValidationFailed\",{detail:{productId:props.shopifyProductID,message:\"Please fill in all required fields\"}}));return;}}const lines=[getLineItem()];// console.log(\"handleAddToCart lines:\", lines)\n// Retrieve the selected country code from localStorage\nconst countryCode=localStorage.getItem(\"selectedCountryCode\");let existingCartId=localStorage.getItem(\"shopX_cart_id\");if(!BuyNowATC){if(existingCartId){try{const cartValidation=await window.shopXtools.handleCartMutation(cartQuery,{cartId:existingCartId});if(!cartValidation?.cart){localStorage.removeItem(\"shopX_cart_id\");localStorage.removeItem(\"shopXtools.cart\");existingCartId=null;}}catch(error){localStorage.removeItem(\"shopX_cart_id\");localStorage.removeItem(\"shopXtools.cart\");existingCartId=null;}}if(!existingCartId){try{const cartData=await window.shopXtools.handleCartMutation(createCartMutation,{lines,countryCode:countryCode});if(cartData?.cartCreate?.cart?.id){localStorage.setItem(\"shopX_cart_id\",cartData.cartCreate.cart.id);localStorage.setItem(\"shopXtools.cart\",JSON.stringify(cartData.cartCreate.cart));window.shopXtools.cart=cartData.cartCreate.cart;setCartExistingData(window.shopXtools.cart);// Dispatch event after updating the cart\nwindow.dispatchEvent(new Event(\"shopXtools-cart-update\"));// Analytics\nconst currency=activeVariant?.price?.currencyCode||\"USD\";const value=parseFloat((parseFloat(activeVariant?.price?.amount||\"0\")*productQuantity).toFixed(2));const item_id=cleanShopifyId(activeVariant?.id);const item_name=product?.title||\"\";const item_variant=activeVariant?.title||null;const price=parseFloat(activeVariant?.price?.amount||\"0\");// Google Analytics tracking (add_to_cart)\nif(item_id&&item_name&&item_variant&&price>0){const payload={currency,value,items:[{item_id,item_name,item_variant,price,item_brand:product?.vendor||null,item_category:product?.productType||null,quantity:productQuantity,// TagHound compatibility\nSKU:item_id,\"Item Name\":item_name}]};// console.log('[FC_ProductPurchaseButton ANALYTICS] About to fire add_to_cart with payload:', payload);\nif(typeof window.fcTrackGAEvent===\"function\"){window.fcTrackGAEvent(\"add_to_cart\",payload);// console.log('[FC_ProductPurchaseButton ANALYTICS] Fired add_to_cart:', payload.items[0]);\n}}else{console.warn(\"❌ Skipping add_to_cart: missing item data\",{item_id,item_name,item_variant,price,value});}// Meta Pixel tracking\ntrackFacebookPixelAddToCart({variant:activeVariant,product:product,quantity:productQuantity,currency:currency});window.shopXtools.dispatchEvent(\"checkout__changed\",{__triggerCartModal:openCart});}else{window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:\"Failed to add to cart\"}));}}catch(error){window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:error.message||\"Failed to create new cart\"}));}}else{const cartData=await window.shopXtools.handleCartMutation(addToCartMutation,{cartId:existingCartId,lines});if(cartData?.cartLinesAdd?.cart){localStorage.setItem(\"shopXtools.cart\",JSON.stringify(cartData.cartLinesAdd.cart));window.shopXtools.cart=cartData.cartLinesAdd.cart;// console.log(\"handleAddToCart cart:\", window.shopXtools.cart)\nsetCartExistingData(window.shopXtools.cart);// Dispatch event after updating the cart\nwindow.dispatchEvent(new Event(\"shopXtools-cart-update\"));// Google Analytics tracking\nconst currency=activeVariant?.price?.currencyCode||\"USD\";const value=parseFloat((parseFloat(activeVariant?.price?.amount||\"0\")*productQuantity).toFixed(2));const item_id=cleanShopifyId(activeVariant?.id);const item_name=product?.title||\"\";const item_variant=activeVariant?.title||null;const price=parseFloat(activeVariant?.price?.amount||\"0\");// Google Analytics tracking (add_to_cart)\nif(item_id&&item_name&&item_variant&&price>0){const payload={currency,value,items:[{item_id,item_name,item_variant,price,item_brand:product?.vendor||null,item_category:product?.productType||null,quantity:productQuantity,// TagHound compatibility\nSKU:item_id,\"Item Name\":item_name}]};// console.log('[FC_ProductPurchaseButton ANALYTICS] About to fire add_to_cart with payload:', payload);\nif(typeof window.fcTrackGAEvent===\"function\"){window.fcTrackGAEvent(\"add_to_cart\",payload);// console.log('[FC_ProductPurchaseButton ANALYTICS] Fired add_to_cart:', payload.items[0]);\n}}else{console.warn(\"❌ Skipping add_to_cart: missing item data\",{item_id,item_name,item_variant,price,value});}// Meta Pixel tracking\ntrackFacebookPixelAddToCart({variant:activeVariant,product:product,quantity:productQuantity,currency:currency});window.shopXtools.dispatchEvent(\"checkout__changed\",{__triggerCartModal:openCart});}else{window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:\"Failed to add to cart\"}));}}}// Directly proceed to checkout without opening the cart modal\nif(BuyNowATC){//console.log(\"Directly proceeding to checkout without opening the cart modal\")\n// Create the cart and proceed to checkout\nconst variables={lines,countryCode:countryCode};//console.log(\"Sending mutation with variables:\", variables)\nconst result=await window[\"shopXtools\"]?.handleTemporaryCartMutation(createCartMutation,variables);//console.log(\"result:\", result)\nconst checkoutUrl=result.cartCreate.cart.checkoutUrl;if(checkoutUrl){//console.log(\"checkoutUrl:\", checkoutUrl)\nlet finalCheckoutUrl=checkoutUrl;if(finalCheckoutUrl){// Analytics\nconst currency=activeVariant?.price?.currencyCode||\"USD\";const value=parseFloat((parseFloat(activeVariant?.price?.amount||\"0\")*productQuantity).toFixed(2));const item_id=cleanShopifyId(activeVariant?.id);const item_name=product?.title||\"\";const item_variant=activeVariant?.title||null;const price=parseFloat(activeVariant?.price?.amount||\"0\");// Google Analytics tracking (begin_checkout)\nif(item_id&&item_name&&item_variant&&price>0){const payload={currency,value,items:[{item_id,item_name,item_variant,price,item_brand:product?.vendor||null,item_category:product?.productType||null,quantity:productQuantity,// TagHound compatibility\nSKU:item_id,\"Item Name\":item_name}]};// console.log('[FC_ProductPurchaseButton ANALYTICS] About to fire begin_checkout with payload:', payload);\nif(typeof window.fcTrackGAEvent===\"function\"){window.fcTrackGAEvent(\"begin_checkout\",payload);// console.log('[FC_ProductPurchaseButton ANALYTICS] Fired begin_checkout:', payload.items[0]);\n}}else{console.warn(\"❌ Skipping begin_checkout: missing item data\",{item_id,item_name,item_variant,price,value});}// Meta Pixel tracking\ntrackFacebookPixelInitiateCheckout({variant:activeVariant,product:product,quantity:productQuantity,currency:currency,useBeacon:true});finalCheckoutUrl=appendAllTrackingParamsToUrl(finalCheckoutUrl);finalCheckoutUrl=appendLanguageToUrl(finalCheckoutUrl);window.location.assign(finalCheckoutUrl);}}else{window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:\"Failed to create cart for checkout\"}));}}if(lines[0].attributes){// const cartId = existingCartId || cartData?.cartCreate?.cart?.id;\nconst cartId=existingCartId//removed check for cartData\n;await window.shopXtools.handleCartMutation(updateCartAttributes,{cartId,attributes:lines[0].attributes});}}catch(error){window.dispatchEvent(new CustomEvent(\"errorChanged\",{detail:error.message||\"Failed to add item to cart\"}));}};useEffect(()=>{let timer;if(isLoading){setShouldShowLoading(false);timer=setTimeout(()=>{setShouldShowLoading(true);},200)// 200ms delay before showing loading state\n;}else{setShouldShowLoading(false);}return()=>{if(timer)clearTimeout(timer);};},[isLoading]);// Update loading state when product data is received\nuseEffect(()=>{if(product){setIsLoading(false);}},[product]);// Initialize hasInitialized\nuseEffect(()=>{if(!hasInitialized&&(product||shopifyProductID)){// Small delay to ensure we have all the necessary data\nconst timer=setTimeout(()=>{setHasInitialized(true);},50);return()=>clearTimeout(timer);}},[product]);// Handle loading state for canvas preview\nconst isDesignOrPreview=RenderTarget.current()===RenderTarget.canvas;let content=null;if(isDesignOrPreview){content=available?.[0]||null// Always show available state in canvas\n;}else if(!hasInitialized){content=null;}else if(maxQuantityReached&&maxQuantity?.[0]){// console.log(\"maxQuantityReached, displaying max quantity state\")\ncontent=maxQuantity?.[0]||null;}else if(!isInStock&&!activeVariant?.availableForSale||activeVariant&&!isVariantAvailable(activeVariant)||product&&!get(product,\"variants.edges\",[]).some(({node})=>isVariantAvailable(node))||props.required&&orderFieldError){// Prioritize Out of Stock over prompting variant selection\ncontent=OutOfStock?.[0]||null;}else if(needsVariantSelection){content=SelectVariant?.[0]||null;}else{content=available?.[0]||null;}// Near the bottom of the component where we create clonedElement\nconst canAddToCart=(isInStock||activeVariant&&activeVariant.availableForSale)&&!needsVariantSelection&&!maxQuantityReached&&(!props.required||!orderFieldError);const handleClick=e=>{if(canAddToCart){handleAddToCart();}};// Single consolidated effect for maxQuantityReached\nuseEffect(()=>{const variantId=activeVariant?.id||(props.shopifyProductVariantId?`gid://shopify/ProductVariant/${props.shopifyProductVariantId}`:null);// Always read from live cart to avoid stale state after updates\nconst currentQuantity=getCurrentCartQuantity(variantId);// console.log(\"currentQuantity\", currentQuantity)\nlet shouldBeAtMax=false;// Check orderMax first (takes precedence)\nif(orderMax>0){shouldBeAtMax=currentQuantity>=orderMax;// console.log(\"orderMax check - shouldBeAtMax:\", shouldBeAtMax)\n}else if(orderMax===0&&activeVariant&&activeVariant.quantityAvailable!==0){// If no orderMax, check quantityAvailable\nshouldBeAtMax=currentQuantity>=activeVariant.quantityAvailable;// console.log(\"quantityAvailable check - shouldBeAtMax:\", shouldBeAtMax)\n}if(shouldBeAtMax!==maxQuantityReached){// console.log(\"shouldBeAtMax !== maxQuantityReached\", maxQuantityReached, shouldBeAtMax)\nsetMaxQuantityReached(shouldBeAtMax);}},[orderMax,activeVariant,props.shopifyProductVariantId,maxQuantityReached,getCurrentCartQuantity]);const clonedElement=content?/*#__PURE__*/cloneElement(content,{style:{...content.props?.style||{},width:\"100%\",height:\"100%\",cursor:canAddToCart?\"pointer\":\"not-allowed\",transition:hasInitialized?\"opacity 0.2s ease-in-out\":\"none\",opacity:1},onClick:handleClick,\"aria-hidden\":!hasInitialized,tabIndex:hasInitialized?0:-1}):/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#666\",fontSize:\"14px\",border:\"1px dashed #ccc\",borderRadius:\"4px\"},children:\"Connect Instance\"});// Add this effect near the other useEffect hooks\nuseEffect(()=>{if(orderMax>0){window.dispatchEvent(new CustomEvent(\"setMaxQuantity\",{detail:{productId:props.shopifyProductID,maxQuantity:orderMax}}));}},[orderMax,props.shopifyProductID]);// Add this effect to handle cart updates\nuseEffect(()=>{const variantId=activeVariant?.id||(props.shopifyProductVariantId?`gid://shopify/ProductVariant/${props.shopifyProductVariantId}`:null);const currentInCart=getCurrentCartQuantity(variantId);if(orderMax>0&&cartExistingData){// Handle orderMax scenario\nconst remainingAllowed=Math.max(0,orderMax-currentInCart);window.dispatchEvent(new CustomEvent(\"setMaxQuantity\",{detail:{productId:props.shopifyProductID,maxQuantity:remainingAllowed}}));// console.log(\"sending setMaxQuantity, orderMAx > 0 (cartExistingData)\", {\n//     detail: {\n//         productId: props.shopifyProductID,\n//         maxQuantity: remainingAllowed,\n//     },\n// })\n}else if(orderMax===0&&activeVariant&&activeVariant.quantityAvailable!==0&&cartExistingData){// Handle quantityAvailable scenario\nconst remainingAllowed=Math.max(0,activeVariant.quantityAvailable-currentInCart);window.dispatchEvent(new CustomEvent(\"setMaxQuantity\",{detail:{productId:props.shopifyProductID,maxQuantity:remainingAllowed}}));// console.log(\"sending setMaxQuantity,  orderMAx = 0 (cartExistingData)\", {\n//     detail: {\n//         productId: props.shopifyProductID,\n//         maxQuantity: remainingAllowed,\n//     },\n// })\n}// else if (orderMax === 0 && cartExistingData) {\n//     // Reset maxQuantity when orderMax is 0 and no valid variant/quantity\n//     window.dispatchEvent(\n//         new CustomEvent(\"setMaxQuantity\", {\n//             detail: {\n//                 productId: props.shopifyProductID,\n//                 maxQuantity: null,\n//             },\n//         })\n//     )\n//     console.log(\"sending setMaxQuantity, orderMax = 0, resetting to null (cartExistingData)\")\n// }\n},[cartExistingData,orderMax,activeVariant,props.shopifyProductVariantId,getCurrentCartQuantity,productQuantity]);// Effect to handle general cart updates\nuseEffect(()=>{const handleCartUpdate=()=>{// console.log(\"handleCartUpdate: Cart updated, refreshing purchase button state\")\n// Force recalculation of maxQuantityReached state\nconst variantId=activeVariant?.id||null;const currentQuantity=getCurrentCartQuantity(variantId);if(orderMax>0){const shouldBeAtMax=currentQuantity>=orderMax;setMaxQuantityReached(shouldBeAtMax);// console.log(\"handleCartUpdate: orderMax > 0, shouldBeAtMax:\", shouldBeAtMax)\n}else if(orderMax===0&&activeVariant&&activeVariant.quantityAvailable!==0){const shouldBeAtMax=currentQuantity>=activeVariant.quantityAvailable;setMaxQuantityReached(shouldBeAtMax);// console.log(\"handleCartUpdate: orderMax = 0, shouldBeAtMax:\", shouldBeAtMax)\n}else{setMaxQuantityReached(false);// console.log(\"handleCartUpdate: resetting maxQuantityReached to false\")\n}const orderMaxRemainingAllowed=Math.max(0,orderMax-currentQuantity);const remainingAllowed=Math.max(0,activeVariant?.quantityAvailable-currentQuantity);window.dispatchEvent(new CustomEvent(\"setMaxQuantity\",{detail:{productId:props.shopifyProductID,maxQuantity:orderMax>0?orderMaxRemainingAllowed:remainingAllowed}}));// console.log(\"handleCartUpdate: sending setMaxQuantity\", {\n//     detail: {\n//         productId: props.shopifyProductID,\n//         maxQuantity: remainingAllowed,\n//     },\n// })\n};window.addEventListener(\"shopXtools-cart-update\",handleCartUpdate);return()=>window.removeEventListener(\"shopXtools-cart-update\",handleCartUpdate);},[activeVariant,orderMax,getCurrentCartQuantity,props.shopifyProductID]);useEffect(()=>{if(!isBrowser)return;const handleResize=()=>{if(typeof window!==\"undefined\"&&window.__fc_autoSelectFirst!==undefined){setAutoSelectFirst(window.__fc_autoSelectFirst);}if(typeof window!==\"undefined\"&&window.__fc_activeVariantId!==undefined){const storedId=window.__fc_activeVariantId;// console.log(\"storedId\", storedId)\nif(storedId){const variants=get(product,\"variants.edges\",[]);const found=variants.find(({node})=>node.id===storedId);// console.log(\"found\", found)\nif(found)setActiveVariant(found.node);// console.log(\"setting activeVariant\", found.node)\n}}if(product){const variants=get(product,\"variants.edges\",[]);const hasMultipleVariants=variants.length>1;// console.log(\"activeVariant\", activeVariant)\nif(autoSelectFirst){setNeedsVariantSelection(false);// console.log(\"handleResize: autoSelectFirst, setting needsVariantSelection to false\");\n}else if(activeVariant){// If a variant is already selected, don't require selection\nsetNeedsVariantSelection(false);// console.log(\"handleResize: activeVariant exists, setting needsVariantSelection to false\");\n}else if(!autoSelectFirst&&hasMultipleVariants){setNeedsVariantSelection(true);// console.log(\"handleResize: !autoSelectFirst && hasMultipleVariants\", autoSelectFirst, hasMultipleVariants);\n}else{setNeedsVariantSelection(!shopifyProductVariantId&&hasMultipleVariants);//console.log(\"handleResize: !shopifyProductVariantId && hasMultipleVariants\", shopifyProductVariantId, hasMultipleVariants);\n}}};window.addEventListener(\"resize\",handleResize);return()=>{window.removeEventListener(\"resize\",handleResize);};},[isBrowser,product,activeVariant,autoSelectFirst,shopifyProductVariantId]);const viewItemTrackedRef=useRef();const pageViewTrackedRef=useRef(false);// Single consolidated analytics effect\nuseEffect(()=>{if(!product)return;// Helper to extract brand and category if available\nconst item_brand=product.vendor||null;const item_category=product.productType||null;// Always fire page_view on initial load\nif(!pageViewTrackedRef.current){const productId=cleanShopifyId(product.id);const productName=product.title;const defaultVariant=get(product,\"variants.edges\",[])[0]?.node;let payload;if(defaultVariant){// Product with variants\npayload={currency:defaultVariant.price?.currencyCode||\"USD\",value:parseFloat(defaultVariant.price?.amount||\"0\"),items:[{item_id:cleanShopifyId(defaultVariant.id),item_name:productName,item_variant:defaultVariant.title,price:parseFloat(defaultVariant.price?.amount||\"0\"),item_brand,item_category,quantity:1,// TagHound compatibility\nSKU:cleanShopifyId(defaultVariant.id),\"Item Name\":productName}]};}else{// Product with no variants\npayload={currency:product.priceRange?.minVariantPrice?.currencyCode||\"USD\",value:parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\"),items:[{item_id:productId,item_name:productName,price:parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\"),item_brand,item_category,quantity:1,// TagHound compatibility\nSKU:productId,\"Item Name\":productName}]};}// We do not fire GA4 page_view manually; GA4 config handles it. Keep only view_item below.\npageViewTrackedRef.current=true;}// Fire view_item when variant is selected\nif(activeVariant&&product?.title){const item_id=cleanShopifyId(activeVariant.id);const item_name=product.title;const item_variant=activeVariant.title;const price=parseFloat(activeVariant.price?.amount||\"0\");const currency=activeVariant.price?.currencyCode||\"USD\";const value=price;// Only fire if all data is present and not already tracked for this variant\nif(item_id&&item_name&&item_variant&&price>0&&viewItemTrackedRef.current!==item_id){const payload={currency,value,items:[{item_id,item_name,item_variant,price,item_brand,item_category,quantity:1,// TagHound compatibility\nSKU:item_id,\"Item Name\":item_name}]};if(payload.items&&payload.items.length>0&&payload.items[0].item_id&&payload.items[0].item_name){window.fcTrackGAEvent&&window.fcTrackGAEvent(\"view_item\",payload);viewItemTrackedRef.current=item_id;}else{// Skipping view_item - invalid payload\n}}}},[product,activeVariant]);useEffect(()=>{// On state transition, blur any currently focused button that is about to be hidden\nconst focused=document.activeElement;if(focused&&focused.closest(\".fc-purchase-button-container\")){focused.blur();}},[content]);return /*#__PURE__*/_jsxs(\"div\",{style:{height:\"100%\",position:\"relative\"},role:\"none\",className:\"fc-purchase-button-container\",children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                .fc-purchase-button-container :focus-visible {\n                    outline: ${props.focus.width}px solid ${props.focus.color} !important;\n                    outline-offset: ${props.focus.padding}px !important;\n                    border-radius: ${props.focus.radius}px !important;\n                }\n            `}),isDesignOrPreview?// In canvas, only render the available state\navailable?.[0]&&/*#__PURE__*/cloneElement(available[0],{style:{...available[0].props?.style||{},width:\"100%\",height:\"100%\",cursor:\"pointer\",outline:\"none\"},onClick:handleClick,role:\"button\",\"aria-label\":props.BuyNowATC?\"Buy now\":\"Add to cart\"}):// In browser, render all states but only show the active one\n/*#__PURE__*/_jsxs(\"div\",{style:{height:\"100%\",position:\"relative\"},children:[available?.[0]&&/*#__PURE__*/cloneElement(available[0],{style:{...available[0].props?.style||{},width:\"100%\",height:\"100%\",cursor:canAddToCart?\"pointer\":\"not-allowed\",transition:hasInitialized?\"opacity 0.3s ease-in-out\":\"none\",opacity:content===available?.[0]?1:0,position:\"absolute\",top:0,left:0,pointerEvents:content===available?.[0]?\"auto\":\"none\",visibility:content===available?.[0]?\"visible\":\"hidden\",outline:\"none\",zIndex:content===available?.[0]?2:0,transitionDelay:content===available?.[0]?\"0s\":\"0s\"},onClick:handleClick,onKeyDown:e=>{if(e.key===\"Enter\"||e.key===\" \"){e.preventDefault();if(canAddToCart){handleClick(e);}}},role:\"button\",\"aria-disabled\":!canAddToCart,\"aria-label\":props.BuyNowATC?\"Buy now\":\"Add to cart\",tabIndex:content===available?.[0]&&hasInitialized?0:-1,\"aria-hidden\":content!==available?.[0]||!hasInitialized}),OutOfStock?.[0]&&/*#__PURE__*/cloneElement(OutOfStock[0],{style:{...OutOfStock[0].props?.style||{},width:\"100%\",height:\"100%\",cursor:\"not-allowed\",transition:hasInitialized?\"opacity 0.3s ease-in-out\":\"none\",opacity:content===OutOfStock?.[0]?1:0,position:\"absolute\",top:0,left:0,pointerEvents:content===OutOfStock?.[0]?\"auto\":\"none\",visibility:content===OutOfStock?.[0]?\"visible\":\"hidden\",outline:\"none\",zIndex:content===OutOfStock?.[0]?2:0,transitionDelay:content===OutOfStock?.[0]?\"0s\":\"0s\"},role:\"button\",\"aria-disabled\":true,\"aria-label\":\"Out of stock\",tabIndex:content===OutOfStock?.[0]&&hasInitialized?0:-1,\"aria-hidden\":content!==OutOfStock?.[0]||!hasInitialized}),SelectVariant?.[0]&&/*#__PURE__*/cloneElement(SelectVariant[0],{style:{...SelectVariant[0].props?.style||{},width:\"100%\",height:\"100%\",cursor:\"not-allowed\",transition:hasInitialized?\"opacity 0.3s ease-in-out\":\"none\",opacity:content===SelectVariant?.[0]?1:content===available?.[0]||content===OutOfStock?.[0]?1-(hasInitialized?1:0):0,position:\"absolute\",top:0,left:0,pointerEvents:content===SelectVariant?.[0]?\"auto\":\"none\",visibility:content===SelectVariant?.[0]||(content===available?.[0]||content===OutOfStock?.[0])&&hasInitialized?\"visible\":\"hidden\",outline:\"none\",zIndex:content===SelectVariant?.[0]?2:1,transitionDelay:content===SelectVariant?.[0]?\"0s\":\"0.3s\"},role:\"button\",\"aria-disabled\":true,\"aria-label\":\"Select variant\",tabIndex:content===SelectVariant?.[0]&&hasInitialized?0:-1,\"aria-hidden\":content!==SelectVariant?.[0]||!hasInitialized}),LoadingState?.[0]&&RenderTarget.current()!==RenderTarget.canvas&&/*#__PURE__*/cloneElement(LoadingState[0],{style:{...LoadingState[0].props?.style||{},width:\"100%\",height:\"100%\",position:\"absolute\",top:0,left:0,opacity:isLoading&&shouldShowLoading&&!props.skipLoading?1:0,pointerEvents:isLoading&&shouldShowLoading&&!props.skipLoading?\"auto\":\"none\",visibility:isLoading&&shouldShowLoading&&!props.skipLoading?\"visible\":\"hidden\",transition:\"opacity 0.2s ease-in-out\",outline:\"none\"},role:\"status\",\"aria-label\":`Loading ${props.BuyNowATC?\"buy now\":\"add to cart\"} button`,\"aria-live\":\"polite\",tabIndex:-1,\"aria-hidden\":!isLoading||!shouldShowLoading||props.skipLoading}),maxQuantity?.[0]&&RenderTarget.current()!==RenderTarget.canvas&&/*#__PURE__*/cloneElement(maxQuantity[0],{style:{...maxQuantity[0].props?.style||{},width:\"100%\",height:\"100%\",cursor:\"not-allowed\",transition:hasInitialized?\"opacity 0.3s ease-in-out\":\"none\",opacity:content===maxQuantity?.[0]?1:0,position:\"absolute\",top:0,left:0,pointerEvents:\"none\",visibility:content===maxQuantity?.[0]?\"visible\":\"hidden\",outline:\"none\",zIndex:content===maxQuantity?.[0]?2:0,transitionDelay:content===maxQuantity?.[0]?\"0s\":\"0s\"},role:\"button\",\"aria-disabled\":true,\"aria-label\":\"Max quantity reached\",tabIndex:-1})]})]});}addPropertyControls(FC_ProductPurchaseButton,{shopifyProductID:{type:ControlType.String,title:\"Product ID\",description:\"Connect to CMS (required)\"},LoadingState:{type:ControlType.ComponentInstance,title:\"Loading\",hidden:props=>props.skipLoading,description:\"Display when product/variant is determining state to show.\"},available:{type:ControlType.ComponentInstance,title:\"Available\",description:\"Display when product/variant is available (Add to Cart or Buy Now).\"},SelectVariant:{type:ControlType.ComponentInstance,title:\"Select Variant\",description:\"Display when product/variant requires a variant selection.\"},OutOfStock:{type:ControlType.ComponentInstance,title:\"Out of Stock\",description:\"Display when product/variant is out of stock.\"},maxQuantity:{type:ControlType.ComponentInstance,title:\"Limit Reached\",description:\"Display when maximum cart quantity is reached.  \\n\\n –––– \\n\\n Connect each state to button component off-page. \\n\\n If you detatch the button component, you'll need to reconnect the states.\"},BuyNowATC:{title:\"Buy Now\",type:ControlType.Boolean,enabledTitle:\"Yes\",disabledTitle:\"No\",defaultValue:false},skipLoading:{title:\"Loading State\",type:ControlType.Boolean,enabledTitle:\"No\",disabledTitle:\"Yes\",defaultValue:false},openCart:{title:\"Trigger Cart\",description:\"If button is inside the cart, select No to keep the cart open.\",type:ControlType.Boolean,enabledTitle:\"Yes\",disabledTitle:\"No\",defaultValue:true,hidden:props=>props.BuyNowATC},focus:{type:ControlType.Object,title:\"Focus\",controls:{radius:{type:ControlType.Number,title:\"Radius\",defaultValue:0,min:0,max:100,step:1,displayStepper:true},width:{type:ControlType.Number,title:\"Width\",defaultValue:2,min:0,max:20,step:1,displayStepper:true},padding:{type:ControlType.Number,title:\"Padding\",defaultValue:2,min:0,max:20,step:1,displayStepper:true},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#007AFF\"}}},shopifyProductVariantId:{type:ControlType.String,title:\"Variant ID\",description:\"Advanced: Manually set a specific product variant ID (optional).\"}});// Utility to clean Shopify GID to just the numeric ID\nconst cleanShopifyId=gid=>gid?.split(\"/\").pop();\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_ProductPurchaseButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_ProductPurchaseButton.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * © 2025 Butter Supply Inc. All Rights Reserved.\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useState,useCallback}from\"react\";import{get}from\"lodash-es\";/**\n * @framerDisableUnlink\n */export default function FC_ProductVariantState(props){const{shopifyProductID,textTemplate}=props;const[product,setProduct]=useState();const[selectedOptions,setSelectedOptions]=useState({});// Move handler outside useEffect for better stability\nconst handleVariantSelection=useCallback(event=>{// Directly set the new selected options\nsetSelectedOptions(prev=>({...prev,[event.detail.optionName]:event.detail.value}));},[]);useEffect(()=>{if(window[\"shopXtools\"]&&Array.isArray(window[\"shopXtools\"].products)){const _matchingProduct=window[\"shopXtools\"].products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);setProduct(_matchingProduct?_matchingProduct.node:\"404\");}else{document.addEventListener(\"data__products-ready\",e=>{if(Array.isArray(e.detail.products)){const _matchingProduct=e.detail.products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);setProduct(_matchingProduct?_matchingProduct.node:\"404\");}});}document.addEventListener(\"variant_option_selected\",handleVariantSelection);return()=>{document.removeEventListener(\"variant_option_selected\",handleVariantSelection);};},[shopifyProductID,handleVariantSelection]);useEffect(()=>{const handleCurrencyChange=event=>{const{currency}=event.detail;if(window[\"shopXtools\"]&&Array.isArray(window[\"shopXtools\"].products)){const _matchingProduct=window[\"shopXtools\"].products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);}}};window.addEventListener(\"currency_changed\",handleCurrencyChange);return()=>{window.removeEventListener(\"currency_changed\",handleCurrencyChange);};},[shopifyProductID]);const options=get(product,\"options\",[]);// Get remaining unselected options\nconst remainingOptions=options.filter(opt=>!selectedOptions[opt.name]).map(opt=>opt.name);// In Framer canvas or when shopXtools is not ready, show placeholder\nconst isFramerCanvas=typeof window===\"undefined\"||!window[\"shopXtools\"];const displayText=isFramerCanvas?textTemplate.replace(\"{{variant}}\",\"Size\"):remainingOptions.length===0?\"\":textTemplate.replace(\"{{variant}}\",remainingOptions.join(\", \"));// If no text to display, return empty div\nif(!displayText){return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\"}});}return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsx(\"p\",{style:{...props.font,color:props.color,margin:0,textAlign:\"center\",textTransform:props.textTransform},children:displayText})});}FC_ProductVariantState.defaultProps={shopifyProductID:\"\",textTemplate:\"Select {{variant}}\",textTransform:\"none\",color:\"#000000\"};addPropertyControls(FC_ProductVariantState,{shopifyProductID:{type:ControlType.String,title:\"Product ID\"},textTemplate:{type:ControlType.String,title:\"Format\",description:\"Use {{variant}} to insert the variant name\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\"},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000000\"},textTransform:{type:ControlType.Enum,title:\"Transform\",options:[\"None\",\"Uppercase\",\"Lowercase\",\"Capitalize\"],defaultValue:\"none\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_ProductVariantState\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_ProductVariantState.map","/*\n * index (framer/default-utils@0.45.0)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/G4IfyjvwmaeSBpdb4TWu/OIjZRBmWDcIE2B6qgG1j/index.js\"\n","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{useRef,useEffect}from\"react\";import{addPropertyControls,ControlType,useAnimation,motion}from\"framer\";import{defaultEvents,useOnEnter,useOnExit}from\"https://framer.com/m/framer/default-utils.js@^0.45.0\";var Indicators;(function(Indicators){Indicators[\"DotWave\"]=\"Dots\";Indicators[\"Material\"]=\"Material\";Indicators[\"IOS\"]=\"iOS\";})(Indicators||(Indicators={}));const angleInRadians=angleInDegrees=>(angleInDegrees-90)*(Math.PI/180);const polarToCartesian=(centerX,centerY,radius,angleInDegrees)=>{const a=angleInRadians(angleInDegrees);return{x:centerX+radius*Math.cos(a),y:centerY+radius*Math.sin(a)};};const arc=(x,y,radius,startAngle,endAngle)=>{const fullCircle=endAngle-startAngle===360;const start=polarToCartesian(x,y,radius,endAngle-0.01);const end=polarToCartesian(x,y,radius,startAngle);const arcFlag=endAngle-startAngle<=180?\"0\":\"1\";let d=[\"M\",start.x,start.y,\"A\",radius,radius,0,arcFlag,0,end.x,end.y,].join(\" \");if(fullCircle)d+=\"z\";return d;};function Spinner({color}){const length=360;const endPercentage=length/360*100;const strokeWidth=10;const width=100;const height=100;return(/*#__PURE__*/ _jsxs(motion.div,{style:{height:\"85%\",width:\"85%\",position:\"relative\",originX:0.5,originY:0.5},animate:{rotate:360},transition:{loop:Infinity,ease:\"linear\",duration:0.5},children:[/*#__PURE__*/ _jsx(motion.svg,{style:{height:\"100%\",width:\"100%\",top:0,left:0,right:0,bottom:0,position:\"absolute\",WebkitMask:`conic-gradient(rgba(0, 0, 0, 0.0) 0%, rgba(0, 0, 0,1.0) ${endPercentage}%)`},viewBox:\"0 0 100 100\",children:/*#__PURE__*/ _jsx(\"g\",{transform:\"translate(0 0)\",children:/*#__PURE__*/ _jsx(\"path\",{d:arc(width/2,height/2,width/2-strokeWidth/2,0,length),fill:\"none\",stroke:color,strokeWidth:strokeWidth,strokeLinecap:\"round\"})})}),/*#__PURE__*/ _jsx(motion.svg,{style:{height:\"100%\",width:\"100%\",position:\"absolute\"},viewBox:\"0 0 100 100\",children:/*#__PURE__*/ _jsx(\"g\",{transform:\"translate(50 0)\",children:/*#__PURE__*/ _jsx(\"path\",{d:\"M 0 0 C 2.761 0 5 2.239 5 5 C 5 7.761 2.761 10 0 10 C 0 10 0 0 0 0 Z\",fill:color})})})]}));}// <path d=\"M 0 0 C 2.761 0 5 2.239 5 5 C 5 7.761 2.761 10 0 10 C 0 10 0 0 0 0 Z\" fill=\"#CCC\"></path>\n// function Spinner({ color }) {\n//     return (\n//         <svg style={{ height: \"85%\", width: \"85%\" }} viewBox=\"0 0 100 100\">\n//             <motion.g\n//                 transform=\"translate(3 3)\"\n//                 animate={{ rotate: 360 }}\n//                 transition={{ loop: Infinity, ease: \"linear\", duration: 1 }}\n//             >\n//                 {pathStrings.map((data, i) => {\n//                     return <path d={data} fill={color} opacity={i / pathStrings.length} />\n//                 })}\n//             </motion.g>\n//         </svg>\n//     )\n// }\nfunction DotWave({color,animation}){const circles=[0,1,2];const{delay,ease,duration,...animProps}=animation;const transition=animation.type===\"spring\"?animProps:{...animProps,ease,duration};// console.log(animProps)\nreturn(/*#__PURE__*/ _jsx(motion.svg,{style:{height:\"85%\",width:\"85%\"},viewBox:\"0 0 30 30\",variants:{show:{transition:{delayChildren:0.1,staggerChildren:0.12}}},animate:\"show\",children:circles.map(circle=>/*#__PURE__*/ _jsx(motion.circle,{style:{fill:color},variants:{hidden:{y:0},show:{y:[0,0,0,-10,0,0,0]}},transition:{...transition,yoyo:Infinity},r:3,cx:circle*10+5,cy:15},circle))}));}function Material({color,animation}){return(/*#__PURE__*/ _jsx(motion.svg,{style:{height:\"85%\",width:\"85%\",overflow:\"visible\",originX:\"50%\",originY:\"50%\"},animate:{rotate:360},transition:{ease:\"linear\",loop:Infinity,duration:2},viewBox:\"25 25 50 50\",children:/*#__PURE__*/ _jsx(motion.circle,{style:{stroke:color,strokeLinecap:\"round\"},animate:{strokeDasharray:[\"1, 200\",\"89, 200\",\"89, 200\"],strokeDashoffset:[0,-35,-124]},transition:{...animation,loop:Infinity,ease:\"easeInOut\"},cx:\"50\",cy:\"50\",r:\"20\",fill:\"none\",strokeWidth:2,strokeMiterlimit:\"10\"})}));}function IOS({color,animation}){const particles=12;// this was the death of me\nconst arrayRotate=(arr,n)=>arr.slice(n,arr.length).concat(arr.slice(0,n));const lines=[...new Array(particles)].map((l,i)=>0.9/particles*i+0.1).reverse();const lineOpacities=lines.map((l,i)=>arrayRotate(lines,i));return(/*#__PURE__*/ _jsx(motion.svg,{viewBox:\"-15 -15 30 30\",style:{width:\"100%\",height:\"100%\"},children:lineOpacities.map((lineKeyframes,i)=>/*#__PURE__*/ _jsx(motion.g,{initial:{opacity:lineKeyframes[0]},animate:{opacity:lineKeyframes},transition:{...animation,loop:Infinity,repeatDelay:0.0005},children:/*#__PURE__*/ _jsx(\"rect\",{style:{width:7,height:2,fill:color,transform:`rotate(${(particles-i)/particles*360-90}deg)`},x:5,y:-1,rx:1})},i))}));}function getIndicator(indicator,props){switch(indicator){case Indicators.DotWave:return(/*#__PURE__*/ _jsx(DotWave,{...props}));case Indicators.Material:return(/*#__PURE__*/ _jsx(Material,{...props}));case Indicators.IOS:return(/*#__PURE__*/ _jsx(IOS,{...props}));// case Indicators.Spinner:\n//     return <Spinner {...props} />\ndefault:return(/*#__PURE__*/ _jsx(DotWave,{...props}));}}export function handleTimeout(duration,callback){const id=setTimeout(callback,duration*1e3);return()=>clearTimeout(id);}/**\n * Loading\n *\n * @framerIntrinsicWidth 40\n * @framerIntrinsicHeight 40\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */ export function Loading(props){const{duration,onTimeout,fadeOut,hasDuration,indicator,onClick,onMouseDown,onMouseUp,onMouseEnter,onMouseLeave,style}=props;const controls=useAnimation();const animDuration=fadeOut?Math.min(duration,0.35):0;const animDelay=fadeOut?duration-animDuration:duration;const currentIndicator=getIndicator(indicator,props);const handlers=useRef([]);const onFadeOut=React.useCallback(()=>{if(hasDuration)controls.start({opacity:0,transition:{duration:animDuration,ease:\"easeIn\"}});},[hasDuration,animDuration]);const resetOpacity=async()=>{controls.set({opacity:1});};useOnEnter(()=>{resetOpacity();if(hasDuration)handlers.current=[handleTimeout(duration,onTimeout),handleTimeout(animDelay,onFadeOut),];});// Cancel all timers on exit.\nuseOnExit(()=>handlers.current.forEach(cleanup=>cleanup));// Cancel all timers on unmount.\nuseEffect(()=>()=>handlers.current.forEach(cleanup=>cleanup),[]);return(/*#__PURE__*/ _jsx(motion.div,{onClick,onMouseDown,onMouseUp,onMouseEnter,onMouseLeave,animate:controls,style:{position:\"relative\",overflow:\"show\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",...style},children:currentIndicator}));}Loading.defaultProps={height:40,width:40,duration:2,color:\"#888\",animation:{type:\"tween\",ease:\"linear\",duration:1.3},hasDuration:false};// Learn more: https://framer.com/api/property-controls/\naddPropertyControls(Loading,{indicator:{title:\"Indicator\",type:ControlType.Enum,options:Object.keys(Indicators).map(i=>Indicators[i])},color:{type:ControlType.Color,defaultValue:\"#888\"},// transition: { title: \"Animation\", type: ControlType.Transition },\nhasDuration:{title:\"Duration\",type:ControlType.Boolean,defaultValue:Loading.defaultProps.hasDuration,enabledTitle:\"Timeout\",disabledTitle:\"Infinity\"},duration:{title:\"Time\",hidden:({hasDuration})=>!hasDuration,min:0.1,max:10,defaultValue:Loading.defaultProps.duration,type:ControlType.Number,step:0.1},animation:{type:ControlType.Transition},fadeOut:{title:\"Fade Out\",hidden:({hasDuration})=>!hasDuration,type:ControlType.Boolean,enabledTitle:\"Yes\",disabledTitle:\"No\"},onTimeout:{type:ControlType.EventHandler},...defaultEvents});\nexport const __FramerMetadata__ = {\"exports\":{\"handleTimeout\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Loading\":{\"type\":\"reactComponent\",\"name\":\"Loading\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"40\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerIntrinsicHeight\":\"40\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Loading.map"],"mappings":"2iBAAa,EAAa,CAAC,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,IAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,IAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAO,IAAI,KAAK,IAAI,MAAM,IAAI,IAAO,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAA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"}