{"version":3,"file":"CustomPrice.D0kTYteb.mjs","names":["useState","useRef","_Fragment"],"sources":["https:/framerusercontent.com/modules/nz41vokblR35PKhMu9Ip/xU0KZbzJFw02NsonjpmT/CustomPrice.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useEffect,useState,useRef}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const SHOPIFY_DOMAIN=\"bowling-stars.myshopify.com\"// <-- Replace with your myshopify domain\n;const STOREFRONT_TOKEN=\"605c822ded51e6c3b91e2dd2d422f662\"// <-- Replace with your public token\n;const localeMap={fr:\"fr-FR\",en:\"en-GB\",de:\"de-DE\",da:\"da-DK\",es:\"es-ES\",it:\"it-IT\",nl:\"nl-NL\",pl:\"pl-PL\",ro:\"ro-RO\",sv:\"sv-SE\",cs:\"cs-CZ\",tr:\"tr-TR\"};const shimmerStyles=`\n.price-is-loading {\n    opacity: 0.8 !important;\n    -webkit-mask-image: linear-gradient(-75deg, rgba(0,0,0,.4) 30%, #000 50%, rgba(0,0,0,.4) 70%);\n    -webkit-mask-size: 200%;\n    animation: textShimmer 1.2s infinite linear;\n    pointer-events: none;\n}\n@keyframes textShimmer {\n    from { -webkit-mask-position: 200% 0; }\n    to { -webkit-mask-position: -200% 0; }\n}\n`;export default function PDP_DynamicPrice(props){const{productId,defaultPrice,fontMain,fontSize,color,weight,saleMapString}=props;const[discountPct,setDiscountPct]=useState(0);const[addonPrice,setAddonPrice]=useState(0);const isTrackingVariantRef=useRef(false);const[localeCode,setLocaleCode]=useState(\"fr\");const[currentMarket,setCurrentMarket]=useState(\"FR\");const[apiPriceData,setApiPriceData]=useState(null);const[isShimmering,setIsShimmering]=useState(false);// Inject Shimmer CSS\nuseEffect(()=>{if(!document.getElementById(\"framer-price-shimmer-styles\")){const styleSheet=document.createElement(\"style\");styleSheet.id=\"framer-price-shimmer-styles\";styleSheet.innerText=shimmerStyles;document.head.appendChild(styleSheet);}},[]);// 🔧 FIX: Bulletproof LocalStorage Watcher\nuseEffect(()=>{// Initial check on mount for HTML lang\nif(typeof window!==\"undefined\"&&document.documentElement.lang){const lang=document.documentElement.lang.toLowerCase().split(\"-\")[0];if(localeMap[lang])setLocaleCode(lang);}// Lightweight poll to instantly catch local storage changes\nconst interval=setInterval(()=>{const savedMarket=localStorage.getItem(\"shopify_market_country\")||\"FR\";setCurrentMarket(prevMarket=>{if(prevMarket!==savedMarket){// Update locale formatting code to match new market\nconst newLang=savedMarket.toLowerCase();if(localeMap[newLang])setLocaleCode(newLang);return savedMarket;}return prevMarket;});},200)// Checks 5 times a second (virtually zero performance impact)\n;// Fallback custom event listener\nconst handleMarketEvent=e=>{if(e.detail){setCurrentMarket(e.detail);const newLang=e.detail.toLowerCase();if(localeMap[newLang])setLocaleCode(newLang);}};window.addEventListener(\"marketCurrencyChanged\",handleMarketEvent);window.addEventListener(\"storage\",handleMarketEvent)// Catches changes across different browser tabs\n;return()=>{clearInterval(interval);window.removeEventListener(\"marketCurrencyChanged\",handleMarketEvent);window.removeEventListener(\"storage\",handleMarketEvent);};},[]);// Fetch Shopify Price when Market or Product ID changes\nuseEffect(()=>{const fetchShopifyPrice=async()=>{if(!SHOPIFY_DOMAIN||!STOREFRONT_TOKEN||!productId)return;setIsShimmering(true);const formattedId=productId.includes(\"gid://\")?productId:`gid://shopify/Product/${productId}`;const query=`\n            query getProductPrice($id: ID!) @inContext(country: ${currentMarket}) {\n              product(id: $id) {\n                priceRange {\n                  minVariantPrice { amount currencyCode }\n                }\n              }\n            }`;try{const res=await fetch(`https://${SHOPIFY_DOMAIN}/api/2024-01/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":STOREFRONT_TOKEN},body:JSON.stringify({query,variables:{id:formattedId}})});const json=await res.json();if(json.data?.product?.priceRange?.minVariantPrice){setApiPriceData({amount:parseFloat(json.data.product.priceRange.minVariantPrice.amount),currency:json.data.product.priceRange.minVariantPrice.currencyCode});}}catch(err){console.error(\"Shopify Fetch Error:\",err);}finally{setIsShimmering(false);}};fetchShopifyPrice();},[productId,currentMarket]);const parseSaleMap=()=>{const map={};if(!saleMapString)return map;saleMapString.split(\",\").forEach(item=>{const[size,pct]=item.split(\":\");if(size&&pct)map[size.trim()]=parseInt(pct.trim(),10);});return map;};useEffect(()=>{const handleVariantUpdate=e=>{isTrackingVariantRef.current=true;const{discountPct:apiDiscount,addonPrice:apiAddon,label,price}=e.detail||{};if(price!==undefined&&price!==null&&apiPriceData){setApiPriceData({...apiPriceData,amount:Number(price)});}if(apiAddon!==undefined)setAddonPrice(apiAddon);if(apiDiscount!==undefined&&apiDiscount>0){setDiscountPct(apiDiscount);}else{const saleMap=parseSaleMap();setDiscountPct(saleMap[label]||0);}};window.addEventListener(\"shoesVariantSelected\",handleVariantUpdate);window.addEventListener(\"universalVariantSelected\",handleVariantUpdate);return()=>{window.removeEventListener(\"shoesVariantSelected\",handleVariantUpdate);window.removeEventListener(\"universalVariantSelected\",handleVariantUpdate);};},[saleMapString,apiPriceData]);const basePriceNum=apiPriceData?apiPriceData.amount:parseFloat(defaultPrice)||0;const isSale=discountPct>0;const currentFinalPrice=(basePriceNum+addonPrice)*(1-discountPct/100);const saveValue=basePriceNum+addonPrice-currentFinalPrice;const formatNumber=num=>{if(!apiPriceData)return num.toFixed(2);const locString=localeMap[localeCode]||\"fr-FR\";return new Intl.NumberFormat(locString,{style:\"currency\",currency:apiPriceData.currency,minimumFractionDigits:2,maximumFractionDigits:2}).format(num);};return /*#__PURE__*/_jsxs(\"div\",{className:`pdp-dynamic-price-container ${isShimmering?\"price-is-loading\":\"\"}`,\"data-product-id\":productId,style:{display:\"flex\",alignItems:\"baseline\",gap:\"14px\",flexWrap:\"wrap\",fontFamily:fontMain,transition:\"opacity 0.2s ease-in-out\"},children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:`${fontSize}px`,color:isSale?\"#ff3b2e\":color,fontWeight:weight,lineHeight:1,display:\"inline-block\"},children:formatNumber(currentFinalPrice)}),isSale&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"span\",{style:{fontSize:`${fontSize*.6}px`,color:\"#6a6a73\",position:\"relative\",textDecoration:\"line-through\",lineHeight:1},children:formatNumber(basePriceNum+addonPrice)}),/*#__PURE__*/_jsxs(\"span\",{style:{display:\"inline-flex\",alignItems:\"center\",gap:\"6px\",whiteSpace:\"nowrap\",fontFamily:\"'JetBrains Mono', monospace, sans-serif\",fontSize:\"11px\",fontWeight:600,letterSpacing:\"0.04em\",textTransform:\"uppercase\",color:\"#ff3b2e\",background:\"rgba(255, 59, 46, 0.12)\",border:\"1px solid rgba(255, 59, 46, 0.35)\",borderRadius:\"100px\",padding:\"6px 12px\",alignSelf:\"flex-end\"},children:[\"Save \",formatNumber(saveValue),\" \\xb7 -\",discountPct,\"%\"]})]})]});}addPropertyControls(PDP_DynamicPrice,{productId:{type:ControlType.String,title:\"Product ID\",placeholder:\"e.g. 8412930491823\"},defaultPrice:{type:ControlType.String,title:\"Base Price\",defaultValue:\"340.00\"},saleMapString:{type:ControlType.String,title:\"Sale Fallback Map\",defaultValue:\"42.5:10, 43:15, 44.5:20, 46:10\",description:\"Format -> Size:Percentage\"},fontMain:{type:ControlType.String,title:\"Font\",defaultValue:`\"Anton\", sans-serif`},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:28},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#ffffff\"},weight:{type:ControlType.Number,title:\"Font Weight\",defaultValue:400}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PDP_DynamicPrice\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CustomPrice.map"],"mappings":"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"}