{"version":3,"file":"SN_BundlePriceDisplay.C6Eo7Vyc.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/jJb9uOGH7PPskLBZklBW/GloWPmSexuDnNm2Z1aKZ/SN_BundlePriceDisplay.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useState,useEffect,useRef,cloneElement,isValidElement}from\"react\";// ─────────────────────────────────────────────────────────────────────────\n// Shared bundle-price computation (exported; SN_BundleDiscountBadge imports it)\n// ─────────────────────────────────────────────────────────────────────────\nconst SHOP=\"ace-link-armor.myshopify.com\";// Storefront token — public by design (read scope). Shared across SN_*.\nconst TOKEN=\"0a593db1c8af3044faa3d79170fe3985\";const API=\"2025-01\";const BUNDLES_COLLECTION=\"bundles\";const FRESH_TTL=10*60*1e3;const HARD_TTL=24*60*60*1e3;const SS_KEY=\"sn.bundleDetails.v2\"// v2.1.0: bumped — v1 entries hold pre-override-fix prices\n;function centsOf(value){if(value===null||value===undefined)return null;if(typeof value===\"number\")return Number.isFinite(value)?Math.round(value*100):null;const raw=String(value).trim();if(raw===\"\"||!/^-?\\d+(\\.\\d+)?$/.test(raw))return null;const n=Number(raw);return Number.isFinite(n)?Math.round(n*100):null;}function money(cents,currency=\"USD\"){if(!Number.isFinite(cents))return\"\";const whole=cents%100===0;try{return new Intl.NumberFormat(\"en-US\",{style:\"currency\",currency:currency||\"USD\",minimumFractionDigits:whole?0:2,maximumFractionDigits:whole?0:2}).format(cents/100);}catch(e){return\"$\"+(cents/100).toFixed(whole?0:2);}}function normProductGid(value){const raw=String(value||\"\").trim();if(!raw)return null;if(raw.startsWith(\"gid://shopify/Product/\"))return raw;const m=raw.match(/(\\d{6,})\\s*$/);return m?`gid://shopify/Product/${m[1]}`:null;}function slotRequired(s){const r=s?.required;if(r===true)return true;if(typeof r===\"string\"){const x=r.trim().toLowerCase();return x===\"true\"||x===\"yes\"||x===\"1\";}return!!r;}function slotQty(s){const n=parseInt(String(s?.qty||\"1\"),10);return isNaN(n)||n<1?1:n;}/**\n * v2.1.0: effective override for a slot entry — per-product wins over\n * slot-level; empty strings count as \"not set\".\n */function effectiveOverride(s,pe){const pp=pe?.price_override;if(pp!==null&&pp!==undefined&&String(pp).trim()!==\"\")return String(pp).trim();const ps=s?.price_override;if(ps!==null&&ps!==undefined&&String(ps).trim()!==\"\")return String(ps).trim();return null;}function applyOverride(base,msrp,ov){const bc=centsOf(base);if(bc===null)return{price:\"\",compareAt:null,overridden:false};if(ov===null||ov===undefined||ov===\"\")return{price:base,compareAt:null,overridden:false};// v2.1.0: an overridden line strikes its MSRP (compareAtPrice ?? price),\n// never the live sale price.\nconst mc=msrp!==null?centsOf(msrp):null;const msrpC=mc!==null&&mc>bc?mc:bc;const o=String(ov).trim();let finalC;if(o.endsWith(\"%\")){const p=Number(o.slice(0,-1).trim());if(!Number.isFinite(p)||p<0)return{price:\"\",compareAt:null,overridden:true};finalC=Math.round(bc*p/100);}else{const oc=centsOf(o);if(oc===null||oc<0)return{price:\"\",compareAt:null,overridden:true};finalC=oc;}// Suppress the strike when it wouldn't represent a saving.\nconst compareAt=msrpC>finalC?(msrpC/100).toFixed(2):null;return{price:(finalC/100).toFixed(2),compareAt,overridden:true};}async function storefront(query,variables){const res=await fetch(`https://${SHOP}/api/${API}/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":TOKEN},body:JSON.stringify({query,variables})});return res.json();}function computeBundle(node,productsMap){const cfg=(()=>{try{return JSON.parse(node.compositeConfig?.value||node.bundleConfig?.value||\"null\");}catch(e){return null;}})();const currency=node.priceRange?.minVariantPrice?.currencyCode||\"USD\";let curC=0,cmpC=0,computed=false;let discountableC=0// v2.1.0: % discount must not stack on overridden lines\n;if(cfg&&Array.isArray(cfg.slots)){computed=true;for(const s of cfg.slots){if(!slotRequired(s))continue;const need=slotQty(s);let picked=null,firstAny=null;for(const pe of(s.products||[]).filter(p=>p&&p.shopify_id)){const pg=normProductGid(pe.shopify_id);const prod=pg?productsMap[pg]:null;if(!prod)continue;const tv=String(pe.variant_id||\"\").trim()||null;for(const v of(prod.variants?.nodes||[]).filter(v=>tv?v.id===tv:true)){const{price,compareAt,overridden}=applyOverride(v.price?.amount||\"\",v.compareAtPrice?.amount||null,effectiveOverride(s,pe));if(centsOf(price)===null)continue;const fc=compareAt&&centsOf(compareAt)!==null?compareAt:v.compareAtPrice?.amount&&centsOf(v.compareAtPrice.amount)!==null?v.compareAtPrice.amount:null;const opt={price,compareAt:fc,overridden};if(!firstAny)firstAny=opt;if(v.availableForSale){picked=opt;break;}}if(picked)break;}const opt=picked||firstAny;if(!opt)continue;const pc=centsOf(opt.price);if(pc===null)continue;const cc=centsOf(opt.compareAt??opt.price);curC+=pc*need;cmpC+=(cc===null?pc:cc)*need;if(!opt.overridden)discountableC+=pc*need;}const disc=cfg.discount_percent||0;if(disc>0)curC-=Math.round(discountableC*(disc/100));}const parentC=centsOf(node.priceRange?.minVariantPrice?.amount);const parentCmp=centsOf(node.compareAtPriceRange?.minVariantPrice?.amount);if(!computed||curC<=0){if(parentC===null)return null;curC=parentC;cmpC=parentCmp||0;}let hasCompare=cmpC>curC;if(!hasCompare&&parentCmp&&parentCmp>curC){cmpC=parentCmp;hasCompare=true;}const sav=hasCompare?cmpC-curC:0;const pct=hasCompare&&cmpC>0?Math.round(sav/cmpC*100):0;return{current:curC/100,compare:cmpC/100,savings:sav/100,savingsPercent:pct,hasCompare,currentFormatted:money(curC,currency),compareFormatted:hasCompare?money(cmpC,currency):\"\",bundleHandle:node.handle,currency};}async function fetchAllBundleDetails(){const col=await storefront(`{ collection(handle:\"${BUNDLES_COLLECTION}\"){ products(first:100){ nodes {\n            id handle\n            priceRange{ minVariantPrice{ amount currencyCode } }\n            compareAtPriceRange{ minVariantPrice{ amount } }\n            bundleConfig: metafield(namespace:\"bundle\",key:\"config\"){ value }\n            compositeConfig: metafield(namespace:\"composite\",key:\"config\"){ value }\n        } } } }`);const nodes=col?.data?.collection?.products?.nodes||[];// batch: every component product across every bundle, one query\nconst gids=new Set;for(const n of nodes){const cfg=(()=>{try{return JSON.parse(n.compositeConfig?.value||n.bundleConfig?.value||\"null\");}catch(e){return null;}})();if(cfg&&Array.isArray(cfg.slots))for(const s of cfg.slots)for(const p of s.products||[]){const g=normProductGid(p?.shopify_id);if(g)gids.add(g);}}const productsMap={};const gidList=[...gids];for(let i=0;i<gidList.length;i+=240){const chunk=gidList.slice(i,i+240);const r=await storefront(`query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product { id\n                variants(first:250){ nodes { id title availableForSale\n                    price{ amount } compareAtPrice{ amount } } } } } }`,{ids:chunk});for(const p of r?.data?.nodes||[])if(p?.id)productsMap[p.id]=p;}const map={};for(const n of nodes){const d=computeBundle(n,productsMap);if(!d)continue;map[n.id]=d;map[n.id.replace(\"gid://shopify/Product/\",\"\")]=d;if(n.handle)map[\"handle:\"+n.handle]=d;}return map;}function readCache(){try{const raw=localStorage.getItem(SS_KEY);if(!raw)return null;const p=JSON.parse(raw);if(!p||typeof p.ts!==\"number\")return null;const age=Date.now()-p.ts;if(age>HARD_TTL)return null;return{map:p.map,stale:age>FRESH_TTL};}catch(e){return null;}}function writeCache(map){try{localStorage.setItem(SS_KEY,JSON.stringify({ts:Date.now(),map}));}catch(e){/* best-effort */}}function shared(){const w=window;if(!w.__snBundleDetails)w.__snBundleDetails={promise:null,map:null};return w.__snBundleDetails;}function loadDetails(){const s=shared();if(s.map)return Promise.resolve(s.map);const cached=readCache();if(cached){s.map=cached.map;if(cached.stale&&!s.promise){s.promise=fetchAllBundleDetails().then(m=>{s.map=m;writeCache(m);s.promise=null;return m;}).catch(()=>{s.promise=null;return s.map;});}return Promise.resolve(cached.map);}if(!s.promise){s.promise=fetchAllBundleDetails().then(m=>{s.map=m;writeCache(m);s.promise=null;return m;}).catch(e=>{console.error(\"[SN_BundlePriceDisplay] load failed\",e);s.promise=null;return{};});}return s.promise;}function normKey(id){const raw=String(id||\"\").trim();if(!raw)return null;if(raw.startsWith(\"handle:\"))return raw;const g=normProductGid(raw);return g||raw;}export async function getBundleDetail(id){if(typeof window===\"undefined\")return null;const key=normKey(id);if(!key)return null;const map=await loadDetails();return map[key]||null;}/** Nearest product link → \"handle:<slug>\" (used when productID isn't bound). */export function deriveBundleKeyFromDom(el){if(!el)return null;const anchor=el.closest(\"a[href]\");if(!anchor)return null;try{const parts=new URL(anchor.href,window.location.origin).pathname.split(\"/\").filter(Boolean);if(parts[parts.length-2]!==\"bundles\")return null;const seg=parts.pop();return seg?\"handle:\"+decodeURIComponent(seg):null;}catch(e){return null;}}/**\n * The bundle handle THIS instance belongs to, derived from the enclosing card\n * link — null on the PDP, where no product link wraps the price. Re-derived\n * until unmount for the same reason `useBundleComputedDetail` polls: Framer\n * swaps a card's anchor after mount on SPA back-nav.\n */export function useBundleCardHandle(ref){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[handle,setHandle]=useState(null);useEffect(()=>{if(isCanvas)return;const apply=()=>{const key=deriveBundleKeyFromDom(ref?ref.current:null);const h=key?key.slice(\"handle:\".length):null;setHandle(prev=>prev===h?prev:h);};apply();const iv=window.setInterval(apply,500);const onNav=()=>{window.setTimeout(apply,50);};window.addEventListener(\"popstate\",onNav);window.addEventListener(\"pageshow\",onNav);return()=>{window.clearInterval(iv);window.removeEventListener(\"popstate\",onNav);window.removeEventListener(\"pageshow\",onNav);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[isCanvas]);return handle;}const CANVAS_MOCK={current:599.45,compare:911,savings:311.55,savingsPercent:34,hasCompare:true,currentFormatted:\"$599.45\",compareFormatted:\"$911\",bundleHandle:\"canvas-preview\",currency:\"USD\"};/**\n * Computed bundle detail for grid cards. Returns null on PDP-style usage\n * (no productID and no bundle link), so the live event path is untouched.\n */export function useBundleComputedDetail(productID,ref){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[detail,setDetail]=useState(null);useEffect(()=>{if(isCanvas)return;let cancelled=false;let lastKey=null;const apply=()=>{const key=normKey(productID)||deriveBundleKeyFromDom(ref?ref.current:null);if(!key||key===lastKey)return;lastKey=key;getBundleDetail(key).then(d=>{if(!cancelled&&lastKey===key)setDetail(d);});};apply();if(normKey(productID)){// productID bound — key can't drift, no watcher needed.\nreturn()=>{cancelled=true;};}// DOM-derived key (grid cards without a productID binding): the card's\n// surrounding link can be SWAPPED AFTER mount. On SPA back-nav Framer\n// mounts the narrow-breakpoint card variant before the collection item\n// variables resolve, so every card's anchor briefly points at the route\n// we came back from — and each price latched onto THAT bundle (Asana\n// 1216783719408759: all cards showed the visited product's price).\n// Keep re-deriving until unmount: the poll is cheap (string compare;\n// network + rerender only when the key actually changes).\nconst iv=window.setInterval(apply,500);const onNav=()=>{window.setTimeout(apply,50);};window.addEventListener(\"popstate\",onNav);window.addEventListener(\"pageshow\",onNav);return()=>{cancelled=true;window.clearInterval(iv);window.removeEventListener(\"popstate\",onNav);window.removeEventListener(\"pageshow\",onNav);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[productID,isCanvas]);if(isCanvas&&(productID||\"\").trim())return CANVAS_MOCK;return detail;}// \"Now\" / \"Was\" label helper: trims and appends a non-breaking space.\nfunction prefixLabel(text){const t=(text||\"\").trim();return t?t+\"\\xa0\":\"\";}export default function SN_BundlePriceDisplay(props){const{productID,nowText,wasText,prefixOnSaleOnly,prefixSize,fallbackPrice,fallbackCompare,currentColor,compareColor,savingsColor,currentFontSize,compareFontSize,fontWeight,layout,gap,showSavingsBadge,savingsTemplate,fontFamily,priceDesign,currentFont,compareFont}=props;const ref=useRef(null);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[bundleState,setBundleState]=useState(()=>typeof window===\"undefined\"?null:window.__acelinkBundleState||null);const[eventDetail,setEventDetail]=useState(()=>{if(typeof window===\"undefined\")return null;return window.__acelinkBundlePrice||null;});useEffect(()=>{if(typeof window===\"undefined\")return;const syncState=()=>{setBundleState(window.__acelinkBundleState||null);setEventDetail(window.__acelinkBundlePrice||null);};syncState();window.addEventListener(\"sn-bundle:state\",syncState);const cached=window.__acelinkBundlePrice;if(cached&&!eventDetail)setEventDetail(cached);const handler=e=>{const ce=e;if(ce.detail)setEventDetail(ce.detail);};window.addEventListener(\"sn-bundle:price\",handler);return()=>{window.removeEventListener(\"sn-bundle:price\",handler);window.removeEventListener(\"sn-bundle:state\",syncState);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);// Computed detail only when a productID is provided (grid cards). On the\n// editor canvas neither source can run, so show a realistic mock instead\n// of the \"$0.00\" fallback.\nconst computed=useBundleComputedDetail(productID,ref);const cardHandle=useBundleCardHandle(ref);const hasKey=!!(productID||\"\").trim();// `window.__acelinkBundlePrice` / \"sn-bundle:price\" is a GLOBAL signal that\n// always describes the bundle whose configurator published last. Letting it\n// beat the per-card computed value is how, after opening a bundle and going\n// back to the listing, EVERY card rendered the visited bundle's price\n// (Asana 1216783719408759 — the discount badge got this guard in that round,\n// the price display did not, so the % stayed right while the amount lied).\n// A card knows which bundle it is about from its own link or its computed\n// detail; the live event is honoured only when it agrees, or on the PDP,\n// where there is no card identity at all and the event is the only source.\nconst ownHandle=cardHandle||computed?.bundleHandle||null;const isCard=!!ownHandle||hasKey;const liveWins=!!eventDetail&&(!isCard||!!ownHandle&&eventDetail.bundleHandle===ownHandle);const detail=isCanvas?CANVAS_MOCK:(liveWins?eventDetail:null)||computed;// PDP is event/state-driven only. Leave card calculation/cache unchanged.\nconst pdpHandle=typeof window!==\"undefined\"&&/^\\/bundles\\/[^/]+\\/?$/.test(window.location.pathname)?decodeURIComponent(window.location.pathname.replace(/\\/$/,\"\").split(\"/\").pop()||\"\"):null;const isPdp=!isCanvas&&!isCard&&!!pdpHandle;if(!isCanvas&&typeof window===\"undefined\"&&!isCard&&!detail||isPdp&&(!bundleState?.priceResolved||bundleState.bundleHandle!==pdpHandle||eventDetail?.bundleHandle!==pdpHandle)){if(bundleState?.bundleHandle===pdpHandle&&bundleState?.status===\"unavailable\")return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{fontFamily,color:currentColor,fontSize:currentFontSize,fontWeight,lineHeight:1,...currentFont||{}},children:\"Price unavailable\"});return /*#__PURE__*/_jsx(\"div\",{ref:ref,\"aria-label\":\"Loading price\",\"aria-busy\":\"true\",style:{width:Math.round(currentFontSize*3.4),height:currentFontSize,borderRadius:3,background:\"rgba(0,0,0,0.08)\"}});}const current=detail?.currentFormatted||fallbackPrice;const compare=detail?.compareFormatted||fallbackCompare;const hasCompare=detail?.hasCompare??!!fallbackCompare;const savingsPercent=detail?.savingsPercent||0;const savingsAmount=detail?.savings||0;const showPrefixes=!prefixOnSaleOnly||hasCompare&&!!compare;const nowLabel=showPrefixes?prefixLabel(nowText):\"\";const wasLabel=showPrefixes?prefixLabel(wasText):\"\";const savingsLabel=(savingsTemplate||\"Save {percent}% (-{amount})\").replace(\"{percent}\",String(savingsPercent)).replace(\"{amount}\",`${savingsAmount.toFixed(2)}`);if(/*#__PURE__*/isValidElement(priceDesign)){return /*#__PURE__*/cloneElement(priceDesign,{...priceDesign.props||{},current,compare,hasCompare,savingsPercent,savingsAmount,savingsLabel});}// Grid card whose price hasn't resolved yet — neutral skeleton instead of\n// the \"$0.00\" fallback these cards carry (never happens on PDP: `isCard`\n// is false there). Cards identified by their link count too, not just by a\n// bound productID — that is the majority of the listing.\nif(isCard&&!detail&&!isCanvas){return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{width:Math.round(currentFontSize*3.4),height:currentFontSize,borderRadius:3,background:\"rgba(0,0,0,0.08)\"}});}return /*#__PURE__*/_jsxs(\"div\",{ref:ref,style:{display:\"flex\",flexDirection:layout===\"column\"?\"column\":\"row\",alignItems:layout===\"column\"?\"flex-start\":\"baseline\",gap,...nowLabel||wasLabel?{flexWrap:\"wrap\",rowGap:3}:{},fontFamily},children:[/*#__PURE__*/_jsxs(\"span\",{style:{color:currentColor,fontSize:currentFontSize,fontWeight,lineHeight:1,...nowLabel||wasLabel?{whiteSpace:\"nowrap\"}:{},...currentFont||{}},children:[nowLabel?/*#__PURE__*/_jsx(\"span\",{style:{fontWeight:400,...prefixSize>0?{fontSize:prefixSize}:{}},children:nowLabel}):null,current]}),hasCompare&&compare?/*#__PURE__*/_jsxs(\"span\",{style:{color:compareColor,fontSize:compareFontSize,lineHeight:1,...nowLabel||wasLabel?{whiteSpace:\"nowrap\"}:{},...compareFont||{}},children:[wasLabel?/*#__PURE__*/_jsx(\"span\",{style:prefixSize>0?{fontSize:prefixSize}:undefined,children:wasLabel}):null,/*#__PURE__*/_jsx(\"span\",{style:{textDecoration:\"line-through\"},children:compare})]}):null,showSavingsBadge&&hasCompare&&savingsPercent>0?/*#__PURE__*/_jsx(\"span\",{style:{color:savingsColor,fontSize:compareFontSize,fontWeight:600,lineHeight:1},children:savingsLabel}):null]});}SN_BundlePriceDisplay.defaultProps={productID:\"\",nowText:\"\",wasText:\"\",prefixOnSaleOnly:true,prefixSize:0,fallbackPrice:\"$0.00\",fallbackCompare:\"\",currentColor:\"#b02929\",compareColor:\"#8B8B8B\",savingsColor:\"#16a34a\",currentFontSize:32,compareFontSize:18,fontWeight:700,layout:\"row\",gap:12,showSavingsBadge:false,savingsTemplate:\"Save {percent}%\",fontFamily:\"Barlow, system-ui, sans-serif\",priceDesign:null};addPropertyControls(SN_BundlePriceDisplay,{productID:{type:ControlType.String,title:\"Product ID\",description:\"Bind to the card's Product ID variable. When set, the bundle price is computed for grid/category cards (no configurator needed). Leave empty on PDPs — the live configurator event drives it.\"},nowText:{type:ControlType.String,title:\"Now Prefix\",defaultValue:\"\",description:'Label before the price, e.g. \"Now\". Empty = none.'},wasText:{type:ControlType.String,title:\"Was Prefix\",defaultValue:\"\",description:'Label before the crossed-out price (not struck through), e.g. \"Was\".'},prefixOnSaleOnly:{type:ControlType.Boolean,title:\"Prefix on Sale Only\",defaultValue:true,description:\"Show Now/Was only when there is a crossed-out price.\"},prefixSize:{type:ControlType.Number,title:\"Prefix Size\",defaultValue:0,min:0,max:48,step:.5,description:\"Font size of the Now/Was labels. 0 = same as the price.\"},priceDesign:{type:ControlType.ComponentInstance,title:\"Price Design\",description:\"Opcjonalnie. Variables: current, compare, hasCompare, savingsPercent, savingsAmount, savingsLabel. Puste = wbudowany.\"},fallbackPrice:{type:ControlType.String,title:\"Fallback Price\",defaultValue:\"$0.00\",description:\"Shown until the price event/computation resolves.\"},fallbackCompare:{type:ControlType.String,title:\"Fallback Compare\",defaultValue:\"\",description:\"Optional crossed-out fallback shown before resolve.\"},layout:{type:ControlType.Enum,title:\"Layout\",defaultValue:\"row\",options:[\"row\",\"column\"],optionTitles:[\"Inline\",\"Stacked\"]},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:12,min:0,max:48,step:2},currentColor:{type:ControlType.Color,title:\"Current Color\",defaultValue:\"#b02929\"},compareColor:{type:ControlType.Color,title:\"Compare Color\",defaultValue:\"#8B8B8B\"},savingsColor:{type:ControlType.Color,title:\"Savings Color\",defaultValue:\"#16a34a\"},currentFontSize:{type:ControlType.Number,title:\"Current Size\",defaultValue:32,min:12,max:96,step:1},compareFontSize:{type:ControlType.Number,title:\"Compare Size\",defaultValue:18,min:10,max:72,step:1},fontWeight:{type:ControlType.Enum,title:\"Weight\",defaultValue:700,options:[400,500,600,700,800,900],optionTitles:[\"Regular\",\"Medium\",\"Semi-bold\",\"Bold\",\"Extra-bold\",\"Black\"]},fontFamily:{type:ControlType.String,title:\"Font Family\",defaultValue:\"Barlow, system-ui, sans-serif\"},currentFont:{type:ControlType.Font,title:\"Price Font\",controls:\"extended\",displayFontSize:true,displayTextAlignment:false,description:\"Overrides Font Family / Weight / Current Size for the main price when set.\"},compareFont:{type:ControlType.Font,title:\"Crossed Font\",controls:\"extended\",displayFontSize:true,displayTextAlignment:false,description:\"Font for the crossed-out compare price. Overrides Font Family / Compare Size when set.\"},showSavingsBadge:{type:ControlType.Boolean,title:\"Show Savings\",defaultValue:false},savingsTemplate:{type:ControlType.String,title:\"Savings Template\",defaultValue:\"Save {percent}%\",description:\"Placeholders: {percent}, {amount}\",hidden:props=>!props.showSavingsBadge}});\nexport const __FramerMetadata__ = {\"exports\":{\"deriveBundleKeyFromDom\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getBundleDetail\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"SN_BundlePriceDisplay\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"useBundleComputedDetail\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useBundleCardHandle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SN_BundlePriceDisplay.map"],"mappings":"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"}