efficient-storefront-blocks 0.44.0 → 0.45.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/chunks/{EditorPreviewCheckout-OV6BQIOF.js → EditorPreviewCheckout-ORWZ3U5M.js} +1 -1
- package/dist/chunks/{SiteEditorProvider-3GN6QL3B.js → SiteEditorProvider-77MRTMFQ.js} +1 -1
- package/dist/chunks/{chunk-63NK7MUL.js → chunk-HVKN4YAE.js} +10 -10
- package/dist/chunks/{chunk-LDQBFEDQ.js → chunk-SHC7Z7AY.js} +1 -1
- package/dist/chunks/{chunk-CLMOO7LL.js → chunk-WSWQW2X3.js} +1 -1
- package/dist/chunks/{fitment-data-CRPBBPU6.js → fitment-data-SGKQISTO.js} +1 -1
- package/dist/index.js +43 -43
- package/package.json +2 -2
- /package/dist/chunks/{SectionEditorShell-4AEPZWJA.js → SectionEditorShell-S3DLOFOJ.js} +0 -0
- /package/dist/chunks/{chunk-CABIEVEL.js → chunk-G3PA7RZW.js} +0 -0
- /package/dist/chunks/{chunk-63NK7MUL.js.LEGAL.txt → chunk-HVKN4YAE.js.LEGAL.txt} +0 -0
- /package/dist/chunks/{chunk-D32TXJVQ.js → chunk-YLAMT2JE.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as rt,j as pe,r as ot,t as it,u as at,w as H}from"./chunk-CLMOO7LL.js";import{Aa as et,Da as De,Ea as tt,za as me}from"./chunk-D32TXJVQ.js";import{e as Ze,q as nt,s as re}from"./chunk-CABIEVEL.js";import{createContext as rn,useContext as on,useEffect as an,useMemo as ge,useState as ut}from"react";function st(e,t){return e.map(n=>({partNumber:n.partNumber,quantity:n.wheels*t}))}function oe(e,t){if(e.length===0)return null;let n=0;for(let r of e){let i=r.prices?.[t];if(typeof i!="number"||!Number.isFinite(i)||i<=0)return null;n+=i*r.wheels}return n}var Oe=4,yr=1,hr={unit:"set",spares:0,spareSide:"left"};function lt(e){return e.unit==="single"?1:Oe+e.spares}function br(e,t){return[{partNumber:e.partNumber,wheels:lt(t),prices:e.prices}]}function xr(e,t){let n=lt(t)-Oe;if(n<=0||e.length===0)return e;let r=tn(e),i=r?r[t.spareSide]:0;return e.map((o,a)=>a===i?{...o,wheels:o.wheels+n}:o)}function tn(e){let t,n;for(let r=0;r<e.length;r+=1){let i=e[r].hand;if(i!=="left"&&i!=="right")continue;if((i==="left"?t:n)!==void 0)return null;i==="left"?t=r:n=r}return t!==void 0&&n!==void 0?{left:t,right:n}:null}function nn(e,t){return t.spares>0?`${e} + spare`:e}function Cr(e){return e.unit==="single"?"Single":nn(`Set of ${Oe}`,e)}var Sr="data-add-to-basket",Fe=9,Pe="en";function fe(e,t,n=0){return new Intl.NumberFormat(Pe,{style:"currency",currency:t,minimumFractionDigits:0,maximumFractionDigits:n}).format(e)}function vr(e,t){return new Intl.NumberFormat(Pe,{style:"currency",currency:t}).format(e)}import{jsx as un}from"react/jsx-runtime";var ct="storefront-country",dt=rn(null);function sn(e){return mt(e,"catalogue")}function ln(e){return mt(e,"money")}function mt(e,t){let n=new Map(e.map(i=>[i.code,i.decimalPlaces])),r=new Map;return(i,o)=>{if(!o)return"";let a=r.get(o);if(!a){let s=n.get(o)??0;a=new Intl.NumberFormat(Pe,{style:"currency",currency:o,minimumFractionDigits:t==="money"?s:0,maximumFractionDigits:s}),r.set(o,a)}return a.format(i)}}function Lr({children:e,currencies:t,countries:n,defaultCurrency:r,defaultCountry:i}){let o=ge(()=>t??[],[t]),a=ge(()=>n??[],[n]),s=ge(()=>r||o.find(x=>x.isDefault)?.code||o[0]?.code||"",[r,o]),c=ge(()=>i||a.find(x=>x.isDefault)?.code||a[0]?.code||"",[i,a]),[u,p]=ut(c),[d,S]=ut(!1);an(()=>{let x=re.getItem(ct);x&&a.some(w=>w.code===x)&&p(x),S(!0)},[a]);function I(x){p(x),re.setItem(ct,x)}let b=ge(()=>{let x=a.find(L=>L.code===u)??null,w=x?.currency,N=w&&o.some(L=>L.code===w)?w:s,M=sn(o),C=ln(o);return{country:u,currency:N,setCountry:I,currencies:o,countries:a,activeCountry:x,formatPrice:(L,v)=>M(L,v??N),formatMoney:(L,v)=>C(L,v??N),ready:d}},[u,o,a,s,d]);return un(dt.Provider,{value:b,children:e})}function pt(){let e=on(dt);if(!e)throw new Error("useCurrency must be used within a CurrencyProvider");return e}import{createContext as Pn,useCallback as R,useContext as In,useEffect as Y,useMemo as wt,useRef as ie,useState as k}from"react";function gt(e,t){return e.valid?!1:e.reason==="firstOrderOnly"?!0:e.reason==="notEligible"&&!t}var yt="We'll confirm this discount when you place your order.",Rr="Confirmed at checkout";function kr(e){return e&&(e.valid||e.deferred)?e.code:void 0}var ft="coupon_code: ";function Ar(e){return!(e instanceof pe)||e.status!==400||!e.message.startsWith(ft)?null:e.message.slice(ft.length)}function ht(e,t){return e.map(n=>({qty:n.qty,slug:n.slug,name:`${n.name.lead}${n.name.accent}`.trim(),finish:n.finishName,size:n.size,kind:n.kind,sku:n.sku,pack:n.pack,priceLabel:t(n)}))}var Ie="Price on request",dn="Request a quote",mn="from ",Fr="From ",Ur="each",bt="Free";function Ue(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function $e(e,t){let n=e?.[t];return Ue(n)?n:null}function $r(e,t,n,r){let i=$e(e,n),o=$e(t,n);return i===null&&o===null?0:i===null?1:o===null?-1:r==="asc"?i-o:o-i}function Hr(e,t,n,r){if(n==null&&r==null)return!0;let i=$e(e,t);return!(i===null||n!=null&&i<n||r!=null&&i>r)}var pn={priced:!1,unit:null,was:null,onSale:!1,setTotal:null};function fn(e,t,n){if(!Ue(e))return pn;let r=Ue(t)&&t>e?t:null;return{priced:!0,unit:e,was:r,onSale:r!==null,setTotal:n!=null?e*n:null}}function qr(e,t,n=""){return!e.priced||e.unit==null?Ie:`${n}${fe(e.unit,t)}`}function Kr(e,t){return e.was==null?null:fe(e.was,t)}function gn(e,t,n=1){let r=oe(e,t);if(r===null)return{priced:!1,unit:null,isFrom:!1,setTotal:null};let i=e.reduce((a,s)=>a+s.wheels,0),o=Math.min(...e.map(a=>a.prices[t]));return{priced:!0,unit:o,isFrom:o*i!==r,setTotal:r*n}}var yn={priced:!1,unit:null,isFrom:!1,was:null,onSale:!1,setTotal:null};function Wr(e,t,n,r=1){let i=fn(e.prices[n],e.msrpPrices?.[n],4),o=i.setTotal==null?null:i.setTotal*r;if(!t)return{priced:i.priced,unit:i.unit,isFrom:!0,was:i.was,onSale:i.onSale,setTotal:null,fromSetTotal:o};let a=gn(t.components,n,r);return a.priced?{priced:!0,unit:a.unit,isFrom:a.isFrom,was:null,onSale:!1,setTotal:a.setTotal,fromSetTotal:o}:{...yn,fromSetTotal:o}}function hn(e,t){return!e.priced||e.unit==null?Ie:`${e.isFrom?mn:""}${fe(e.unit,t)}`}function Br(e,t){return e.was==null?null:fe(e.was,t)}function zr(e,t){return!e.priced||e.unit==null?dn:hn(e,t)}var bn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function xt(e){return bn.test(e.trim())}var Ct="sf:ga-purchases",xn=20;function vt(){return typeof window>"u"||window.parent!==window}function ye(...e){try{if(vt()||typeof window.gtag!="function")return;window.gtag(...e)}catch{}}function Cn(e,t){let n=e.config.find(r=>r.gold)?.label;return{item_id:`${e.slug}|${e.finishName}|${e.size}`,item_name:`${e.name.lead}${e.name.accent}`.trim(),...n?{item_variant:n}:{},price:oe(e.components,t)??0,quantity:e.qty}}function He(e,t){return e.filter(we).map(n=>Cn(n,t))}function Qr(e){ye("event","view_item",{currency:e.currency,value:e.pricePerSet,items:[{item_id:e.itemId,item_name:e.itemName,...e.variant?{item_variant:e.variant}:{},price:e.pricePerSet,quantity:1}]})}function Et(e,t){let n=He([e],t);n.length!==0&&ye("event","add_to_cart",{currency:t,value:n[0].price*n[0].quantity,items:n})}function Jr(e){let t=He(e.lines,e.currency);t.length!==0&&ye("event","begin_checkout",{currency:e.currency,value:e.value,...e.coupon?{coupon:e.coupon}:{},items:t})}var St=new Set;function Sn(e){if(St.has(e))return!1;St.add(e);try{let t=JSON.parse(re.getItem(Ct)??"[]");if(t.includes(e))return!1;re.setItem(Ct,JSON.stringify([...t,e].slice(-xn)))}catch{}return!0}function Zr(e){let t=e.confirmation;if(vt()||!Sn(t.orderNumber))return;let n=t.currency,r=Number(t.grandTotal);ye("event","purchase",{transaction_id:t.orderNumber,currency:n,value:r,shipping:Number(t.freightCharge),...t.couponCode?{coupon:t.couponCode}:{},items:He(e.lines,n)}),e.adsSendTo&&ye("event","conversion",{send_to:e.adsSendTo,transaction_id:t.orderNumber,currency:n,value:r})}var vn="Arranged after review",Pt="Calculated at checkout",En=Pt,no=Pt;function It({quoted:e,optionCount:t,chosenAmount:n,couponWaivesFreight:r}){return e&&t===0?"arranged":r?"free":n===void 0?"pending":n===0?"free":"charged"}function ro(e){switch(e){case"arranged":return vn;case"pending":return En;case"free":return bt;case"charged":return null}}import{jsx as Nn}from"react/jsx-runtime";var wn=400,Ln=400,Tn=1500;function we(e){return(e.components?.length??0)>0}function Lt(e,t){return{code:e,valid:t.valid,deferred:gt(t,t.askedAsShopper),message:t.message||void 0,effects:t.effects??void 0}}function Nt(e,t){return oe(e.components,t)}function qe(e,t){let n=Nt(e,t);return n===null?null:n*e.qty}function Tt(e){return e!=="tyre"}var _t=Pn(null);function yo({children:e,preview:t=!1}){let{currency:n,country:r,formatMoney:i}=pt(),[o,a]=k(t),[s,c]=k([]),[u,p]=k([]),[d,S]=k([]),[I,b]=k(!1),[x,w]=k(!1),[N,M]=k(!1),[C,L]=k(!1),[v,q]=k(null),[W,j]=k(void 0),h=ie(r),E=ie("");h.current=h.current||r;let[m,K]=k(null),[Q,G]=k(!1),[A,J]=k(null),Z=ie(void 0),D=R(()=>a(!0),[]),Ce=R(()=>a(!1),[]),O=R(()=>a(l=>!l),[]);Y(()=>{t||typeof window>"u"||new URLSearchParams(window.location.search).get("cart")==="open"&&D()},[D,t]);let Se=R(l=>{L(!0),Tt(l)&&M(!0)},[]),ee=N||s.some(l=>Tt(l.kind)),se=C||s.length>0;Y(()=>{if(t||!ee||I)return;let l=!0;return H.listWheels().then(f=>{l&&(p(f),b(!0))}),()=>{l=!1}},[t,ee,I]),Y(()=>{if(t||!se||x)return;let l=!0;return H.listBundles().then(f=>{l&&(S(f),w(!0))}),()=>{l=!1}},[t,se,x]);let F=v?.deliveryOptions??[];Y(()=>{F.length!==0&&J(l=>l&&F.some(f=>f.id===l)?l:F[0]?.id??null)},[v]);let V=R(()=>s.filter(we).flatMap(l=>st(l.components,l.qty)),[s]),le=R(async(l,f)=>{let y=l.trim().toUpperCase();if(!y)return;let g=V();if(g.length===0){K({code:y,valid:!1,message:"Add a wheel to the cart first."});return}G(!0),Z.current=f;try{let T=await H.validateCoupon({code:y,items:g,currency:n,shippingMethodId:A??void 0,customerEmail:f});K(Lt(y,T))}catch{K({code:y,valid:!1,message:"Could not check that code. Please try again."})}finally{G(!1)}},[V,n,A]),te=R(()=>{K(null),Z.current=void 0},[]),ve=R(l=>{if(!m)return;let{code:f}=m;K(y=>y&&y.code===f?{code:f,valid:!1,refused:!0,message:l}:y)},[m]);Y(()=>{if(!m||m.refused)return;let l=m.code,f=g=>g!==null&&g.code===l&&!g.refused,y=setTimeout(async()=>{let g=V();if(g.length===0){K(T=>f(T)?{code:l,valid:!1,message:"Add a wheel to the cart first."}:T);return}G(!0);try{let T=await H.validateCoupon({code:l,items:g,currency:n,shippingMethodId:A??void 0,customerEmail:Z.current});K(de=>f(de)?Lt(l,T):de)}catch{}finally{G(!1)}},wn);return()=>clearTimeout(y)},[s,n,A]);let ue=m&&!m.refused?m.code:void 0;Y(()=>{if(t)return;let l=!0,f=setTimeout(async()=>{let y=V();if(y.length===0){q(null),j(void 0);return}try{let g=await H.quoteCart({items:y,currency:n,shippingMethodId:A??void 0,couponCode:ue,customerEmail:Z.current||void 0,country:h.current||void 0,subdivision:E.current||void 0});if(!l)return;q(g)}catch{if(!l)return}j(ue)},Ln);return()=>{l=!1,clearTimeout(f)}},[s,n,A,ue,r]);let P=R(l=>{c(f=>{let y=f.findIndex(g=>g.id===l.id);return y===-1?[...f,l]:f.map((g,T)=>T===y?{...g,qty:Math.min(Fe,g.qty+l.qty)}:g)}),Et(l,n)},[n]),U=R(l=>{c(f=>f.filter(y=>y.id!==l))},[]),X=R((l,f)=>{let y=Math.max(1,Math.min(Fe,f));c(g=>g.map(T=>T.id===l?{...T,qty:y}:T))},[]),Ge=R(l=>{c(l)},[]),[ce,Xt]=k(null),Ve=ie(null);Ve.current=ce;let $=ie(null),ke=ie(""),Xe=R((l,f)=>{let y=l.trim().toLowerCase();xt(y)&&Xt(g=>g&&g.email===y&&g.firstName===(f??"")?g:{email:y,firstName:f??""})},[]);Y(()=>{if(t||!ce)return;let l=ht(s.filter(we),g=>qe(g,n)===null?Ie:i(qe(g,n),n)),f={email:ce.email,firstName:ce.firstName,currency:n,items:l},y=JSON.stringify(f);if(y!==ke.current)return $.current&&clearTimeout($.current),$.current=setTimeout(()=>{$.current=null,ke.current=y,H.captureCart(f).catch(g=>{})},Tn),()=>{$.current&&(clearTimeout($.current),$.current=null)}},[s,ce,n,t]);let Ye=R(()=>{$.current&&(clearTimeout($.current),$.current=null);let l=Ve.current;l&&(ke.current="",H.captureCart({email:l.email,firstName:l.firstName,currency:n,items:[]}).catch(f=>{}))},[n]),je=wt(()=>{let l=s.reduce((_,ne)=>{let Ee=qe(ne,n);return Ee===null?_:_+Ee},0),f=s.some(_=>Nt(_,n)===null),y=s.reduce((_,ne)=>_+ne.qty,0),g=m?.valid?m.effects:void 0,T=g?Math.min(l,Number(g.discountAmount)):0,de=v?.bundleDiscount??0,jt=v?.appliedBundles??[],Ae=!!g?.freeShipping,Qe=F.find(_=>_.id===A),Je=Ae?0:v?.shipping??Qe?.amount??0,Qt=It({quoted:v!==null,optionCount:F.length,chosenAmount:Qe?.amount,couponWaivesFreight:Ae}),Me={};for(let _ of g?.freeUnits??[])Me[_.partNumber]=(Me[_.partNumber]??0)+_.quantity;let Jt=v?.tax??null,Zt=v?v.grandTotal:l-T-de+Je;return{sets:y,units:s.reduce((_,ne)=>_+(ne.components??[]).reduce((Ee,en)=>Ee+en.wheels*ne.qty,0),0),subtotal:l,hasUnpricedLine:f,discount:T,bundleDiscount:de,appliedBundles:jt,shipping:Je,freeShipping:Ae,shippingStatus:Qt,freeUnitsByPartNumber:Me,tax:Jt,grand:Zt,repricing:!!m?.refused&&v!==null&&W===m?.code,currency:n}},[s,n,m,F,A,v,W]),Yt=wt(()=>({isOpen:o,preview:t,open:D,close:Ce,toggle:O,items:s,catalog:u,bundles:d,warmCatalog:Se,add:P,remove:U,setQty:X,replaceItems:Ge,identify:Xe,clearCapturedCart:Ye,coupon:m,applyCoupon:le,removeCoupon:te,refuseCoupon:ve,couponBusy:Q,deliveryOptions:F,shippingMethodId:A,setShippingMethodId:J,totals:je}),[o,t,D,Ce,O,s,u,d,Se,P,U,X,Ge,Xe,Ye,m,le,te,ve,Q,F,A,je]);return Nn(_t.Provider,{value:Yt,children:e})}function Rt(){let e=In(_t);if(!e)throw new Error("useCart() must be called inside <CartProvider>. Mount the provider in app/layout.tsx.");return e}import{cache as Hn}from"react";function kt(e,t,n,r){for(;e.size>=t;){let i,o;for(let[s,c]of e){if(c.expiresAt<=r){i=s;break}o===void 0&&n(s)&&(o=s)}let a=i??o??e.keys().next().value;if(a===void 0)return;e.delete(a)}}var _n=6e4,Rn=5e3,kn=500,Le=new Map;async function An(e){let{host:t,matchesRequestHost:n}=await ot();if(!t)return"";let r=await it();return r?`${e}|slug:${encodeURIComponent(t)}/${encodeURIComponent(r)}`:n?`${e}|host:${t}`:`${e}|xhost:${t}`}var Mn=e=>e.includes("|slug:")||e.includes("|xhost:");async function At(e,t){if(await at()!==null)return t();let n=await An(e);if(!n)return t();let r=Date.now(),i=Le.get(n);if(i&&i.expiresAt>r)return i.load;let o=await t(),a=o.outcome.state==="failed",s=a?Rn:_n,c=Le.get(n)?.lastGood,u=o.outcome.state==="ok"?o:a?c:void 0,p=a&&u?u:o;return kt(Le,kn,Mn,r),Le.set(n,{load:p,expiresAt:r+s,lastGood:u}),p}var Dn=404;function On(e){if(e instanceof pe&&e.status===Dn)return{state:"absent"};let t=e instanceof pe?e.status:-1,n=e instanceof Error?e.message:String(e);return{state:"failed",status:t,detail:n}}var Fn="[storefront:chrome-load-failed]";function Un(e,t){console.error(`${Fn} ${e} status=${t.status} \u2014 serving fallback chrome`,t.detail)}async function Mt(e,t,n,r){try{let i=await t();return r?.(i)?{value:i,outcome:{state:"absent"}}:{value:i,outcome:{state:"ok"}}}catch(i){let o=On(i);return o.state==="failed"&&Un(e,o),{value:n,outcome:o}}}function $n(e){return e==="production"?"silent":"banner"}var Po=$n("production");function qn(e,t){return e?.trim()||t}function ko({legalName:e,foundedYear:t,siteName:n},r=new Date().getFullYear()){let i=qn(e,n);return`\xA9 ${t&&t<r?`${t}\u2013${r}`:`${r}`} ${i}`}var Kn={name:me,legalName:null,foundedYear:null,faviconUrl:null,currencies:[],defaultCurrency:null,countries:[],defaultCountry:null,commerceEnabled:!0,cardPayments:!1,paymentMethods:[],paypalClientId:null,paypalEnvironment:null,squareApplicationId:null,squareLocationId:null,squareEnvironment:null,ga4MeasurementId:null,googleAdsId:null,googleAdsConversionLabel:null,metaPixelId:null,mapsApiKey:null,mapsMapId:null,socialLinks:De},Ao=Hn(async()=>At("site",()=>Mt("site",async()=>{let e=await H.getSite();return{name:et(e.name),legalName:e.legalName?.trim()||null,foundedYear:e.foundedYear??null,faviconUrl:e.faviconUrl??null,currencies:e.currencies??[],defaultCurrency:e.defaultCurrency??null,countries:e.countries??[],defaultCountry:e.defaultCountry??null,commerceEnabled:e.commerceEnabled??!0,cardPayments:e.cardPayments??!1,paymentMethods:e.paymentMethods??(e.cardPayments?["card"]:[]),paypalClientId:e.paypalClientId??null,paypalEnvironment:e.paypalEnvironment??null,squareApplicationId:e.squareApplicationId??null,squareLocationId:e.squareLocationId??null,squareEnvironment:e.squareEnvironment??null,ga4MeasurementId:e.ga4MeasurementId??null,googleAdsId:e.googleAdsId??null,googleAdsConversionLabel:(e.googleAdsId?e.googleAdsConversionLabel:null)??null,metaPixelId:e.metaPixelId??null,mapsApiKey:e.mapsApiKey??null,mapsMapId:e.mapsMapId??null,socialLinks:tt(e.socialLinks)}},Kn)));var Mo={name:me,legalName:null,foundedYear:null,faviconUrl:null,currencies:[{code:"USD",symbol:"$",decimalPlaces:2,isDefault:!0}],defaultCurrency:"USD",countries:[{code:"US",name:"United States",currency:"USD",url:"",isDefault:!0,chargeTax:!1,taxDisplay:"none",taxName:"",taxRate:null,postalLabel:"Zip Code"}],defaultCountry:"US",commerceEnabled:!0,cardPayments:!0,paymentMethods:["card"],paypalClientId:null,paypalEnvironment:null,squareApplicationId:null,squareLocationId:null,squareEnvironment:null,ga4MeasurementId:null,googleAdsId:null,googleAdsConversionLabel:null,metaPixelId:null,mapsApiKey:null,mapsMapId:null,socialLinks:De};import{jsx as Ot,jsxs as Ft}from"react/jsx-runtime";import{useEffect as Te,useRef as Ut,useState as Ne}from"react";var he=new Map,Wn=64;async function Bn(e){if(!Ze())return null;try{let t=await fetch(`${nt()}/logo-analysis.json?url=${encodeURIComponent(e)}`);if(!t.ok)return null;let n=await t.json();if(!n||typeof n!="object")return null;let{reversed:r,inkIsDark:i}=n;return typeof r!="string"?null:{reversed:r,inkIsDark:typeof i=="boolean"?i:null}}catch{return null}}function Dt(e){let t=he.get(e);if(t)return t;let n=Bn(e);if(he.set(e,n),he.size>Wn){let r=he.keys().next();r.done||he.delete(r.value)}return n}var zn={small:54,medium:66,large:84},Gn=44,Vn=202/22,Bo=16,zo=140,Xn=.88,Go=16,Yn="invert(1)";function Vo({variant:e="header",scrolled:t=!0,src:n,reverse:r=!1,onLightSurface:i,reversedSrc:o,inkIsDark:a,size:s="medium",sizePx:c,wordmark:u,siteName:p=me,fitToContainer:d=!1,fitWordmarkToContainer:S=!1,fitFloorPx:I}){let b=u&&u.trim()?u.trim():p,[x,w]=Ne(!1),N=Ut(null),M=P=>{N.current=P};Te(()=>{let P=N.current?.ownerDocument??document,U=()=>{w(P.documentElement.getAttribute("data-theme")==="light")};U();let X=new MutationObserver(U);return X.observe(P.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>X.disconnect()},[]);let C=n&&n.trim()?n.trim():null,L=!!C&&rt(C),v=i??(x&&t),q=r&&L&&C&&o!=null?{reversed:o,inkIsDark:a??null}:null,W=q!==null,[j,h]=Ne(null);Te(()=>{if(!r||!C||!L||W){h(null);return}let P=!1;return h(null),Dt(C).then(U=>{P||h(U)}),()=>{P=!0}},[r,C,L,W]);let E=q??j,m=!!E&&E.inkIsDark!==null&&(v?!E.inkIsDark:E.inkIsDark),K=r&&!!C&&!L&&!v,Q=m&&E?E.reversed:C,G=Q?[Q]:[],[A,J]=Ne(0);Te(()=>{J(0)},[C,m]);let Z=e==="footer"?Gn:zn[s],D=c&&c>0?c:Z,Ce=Math.round(D*Vn),O=A<G.length?G[A]:null,[Se,ee]=Ne(Q),se=O!==null&&O===Se,F=Ut(null);Te(()=>{let P=F.current;if(!P||!P.complete)return;if(P.naturalWidth>0||P.naturalHeight>0){ee(O);return}let U=!1;return P.decode().then(()=>!U&&ee(O),()=>!U&&J(X=>X+1)),()=>{U=!0}},[O]);let V=d||S,le=`calc(100cqi / ${((b.length+1)*Xn).toFixed(2)})`,te=V&&I&&I>0?Math.min(I,D):null,ve=V?te===null?`min(${D}px, ${le})`:`clamp(${te}px, ${le}, ${D}px)`:`${D}px`,ue=Ft("span",{className:`font-display font-bold tracking-[0.18em] ${te===null?"whitespace-nowrap":"whitespace-normal"}`,style:{fontSize:ve,lineHeight:1},"aria-label":b,children:[b,Ot("span",{className:"text-accent",children:"."})]});return Ft("span",{ref:M,className:"inline-flex items-center",children:[!se&&ue,O&&Ot("img",{ref:F,src:O,alt:b,width:Ce,height:D,className:"shrink-0 object-contain",style:{...se?{height:`${D}px`,width:"auto",...d?{maxWidth:"100cqi"}:{}}:{display:"none"},...K?{filter:Yn}:{}},onLoad:()=>ee(O),onError:()=>J(P=>P+1)},O)]})}import{jsx as be,jsxs as Qn}from"react/jsx-runtime";function jn({spokes:e,mesh:t=!1,className:n}){let a=c=>Math.round(c*1e3)/1e3,s=[];for(let c=0;c<e;c++){let u=c/e*Math.PI*2-Math.PI/2;if(s.push({x1:a(100+Math.cos(u)*22),y1:a(100+Math.sin(u)*22),x2:a(100+Math.cos(u)*86),y2:a(100+Math.sin(u)*86),main:!0}),t){let p=u+Math.PI/e;s.push({x1:a(100+Math.cos(p)*22*1.4),y1:a(100+Math.sin(p)*22*1.4),x2:a(100+Math.cos(p)*78),y2:a(100+Math.sin(p)*78),main:!1})}}return Qn("svg",{viewBox:"0 0 200 200",fill:"none",stroke:"currentColor",className:n??"block h-[70%] w-[70%] transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)]",children:[be("circle",{cx:100,cy:100,r:92,strokeWidth:2}),be("circle",{cx:100,cy:100,r:84,strokeWidth:1,opacity:.4}),be("circle",{cx:100,cy:100,r:22,strokeWidth:2}),be("circle",{cx:100,cy:100,r:6,fill:"currentColor"}),s.map((c,u)=>be("line",{x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,stroke:"currentColor",strokeWidth:c.main?6:3,strokeLinecap:"round",opacity:c.main?1:.5},u))]})}var Qo="#c9a461",$t=[{f:"black",label:"Black",hex:"#171717"},{f:"silver",label:"Silver",hex:"#cccccc"},{f:"bronze",label:"Bronze",hex:"#8a6438"},{f:"graphite",label:"Graphite",hex:"#3a3c3f"},{f:"red",label:"Candy Red",hex:"#7a0f14"}],Jo={name:"",color:"var(--fg)",family:"silver",src:""};function Jn(e,t){let n=r=>{let i=$t.findIndex(o=>o.f===r);return i===-1?$t.length:i};return n(e)-n(t)||e.localeCompare(t)}function Zo(e){let t=new Set;for(let n of e)for(let r of n.finishes??[])r?.family&&t.add(r.family);return[...t].sort(Jn)}import{useState as Zn}from"react";import{jsx as ae,jsxs as Ke}from"react/jsx-runtime";function er({customerEmail:e}){let{coupon:t,applyCoupon:n,removeCoupon:r,couponBusy:i}=Rt(),[o,a]=Zn("");async function s(){i||!o.trim()||(await n(o,e),a(""))}return Ke("div",{className:"flex flex-col gap-2",children:[t===null?Ke("div",{className:"flex border border-line",children:[ae("input",{type:"text",value:o,onChange:c=>a(c.target.value),onKeyDown:c=>{c.key==="Enter"&&(c.preventDefault(),s())},placeholder:"Coupon code","aria-label":"Coupon code",className:"flex-1 bg-transparent px-4 py-4 font-mono text-[11px] uppercase tracking-[0.18em] text-fg outline-none placeholder:text-fg-dim"}),ae("button",{type:"button",onClick:()=>{s()},disabled:i,className:"border-l border-line px-4 font-mono text-[10px] uppercase tracking-[0.26em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-wait disabled:opacity-60",children:i?"\u2026":"Apply"})]}):Ke("div",{className:["flex items-center justify-between gap-3 border px-4 py-3",t.valid?"border-accent":"border-line"].join(" "),style:t.valid?{background:"color-mix(in oklab, var(--accent) 8%, transparent)"}:void 0,children:[ae("span",{className:["font-mono text-[11px] uppercase tracking-[0.22em]",t.valid?"text-accent":t.deferred?"text-fg":"text-fg-dim line-through"].join(" "),children:t.code}),ae("button",{type:"button",onClick:r,"aria-label":`Remove coupon ${t.code}`,className:"font-mono text-[12px] text-fg-dim transition-colors hover:text-fg",children:"\u2715"})]}),t?.deferred?ae("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-fg-dim",children:yt}):t&&!t.valid&&t.message&&ae("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-alert",children:t.message})]})}function ai(){let e=typeof crypto<"u"?crypto:void 0;if(typeof e?.randomUUID=="function")return e.randomUUID();let t=new Uint8Array(16);if(typeof e?.getRandomValues=="function")e.getRandomValues(t);else for(let r=0;r<t.length;r++)t[r]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;let n=Array.from(t,r=>r.toString(16).padStart(2,"0")).join("");return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}import{Children as nr,isValidElement as rr,useEffect as qt,useId as or,useLayoutEffect as Bt,useRef as B,useState as Kt}from"react";var _e=(e,t)=>!!e[t]&&!e[t].disabled;function We(e,t,n){let r=e.length;for(let i=1;i<=r;i++){let o=((t+n*i)%r+r)%r;if(_e(e,o))return o}return t}function Be(e,t){return We(e,t===1?-1:e.length,t)}function ze(e,t){return _e(e,t)?t:Math.max(Be(e,1),0)}function Ht(e,t,n){let{open:r,focus:i}=e,o=a=>({...e,...a});if(t.length===1&&/\S/.test(t)){let a=e.typed+t.toLowerCase(),s=n.findIndex((c,u)=>_e(n,u)&&c.label.toLowerCase().startsWith(a));return{state:o({open:!0,typed:a,focus:s>=0?s:i}),handled:!0}}if(!r)return t==="ArrowDown"||t==="ArrowUp"||t==="Enter"||t===" "?{state:o({open:!0,typed:""}),handled:!0}:{state:e,handled:!1};switch(t){case"ArrowDown":return{state:o({focus:We(n,i,1)}),handled:!0};case"ArrowUp":return{state:o({focus:We(n,i,-1)}),handled:!0};case"Home":return{state:o({focus:Be(n,1)}),handled:!0};case"End":return{state:o({focus:Be(n,-1)}),handled:!0};case"Enter":case" ":return _e(n,i)?{state:o({open:!1,typed:""}),commit:i,refocus:!0,handled:!0}:{state:e,handled:!0};case"Escape":return{state:o({open:!1,typed:""}),refocus:!0,handled:!0};case"Tab":return{state:o({open:!1,typed:""}),handled:!1};default:return{state:e,handled:!1}}}import{placeMenu as ir}from"efficient-shell/ui";import{Fragment as dr,jsx as z,jsxs as zt}from"react/jsx-runtime";var Wt={body:"text-[length:var(--size-body,14px)]",label:"text-[length:var(--size-label,13px)]"};function ar({items:e,value:t,onPick:n,open:r,onOpen:i,onClose:o}){let[a,s]=Kt(!1),c=r!==void 0,u=c?r:a,[p,d]=Kt(0),S=B({text:"",timer:0}),I=B(null),b=B(null),x=B(null),w=or(),N=B(null),M=e.findIndex(h=>h.value===t),C=h=>{h!==u&&(c||s(h),h?i?.():o?.())},L=h=>{let E=e[h];!E||E.disabled||(n(E.value),C(!1),b.current?.focus())},v=h=>{let E={open:u,focus:u?p:ze(e,M),typed:S.current.text},m=Ht(E,h,e);return!m.handled&&m.state.open===u?!1:(m.state.typed!==E.typed&&(S.current.text=m.state.typed,window.clearTimeout(S.current.timer),S.current.timer=window.setTimeout(()=>{S.current.text=""},500)),d(m.state.focus),m.commit!==void 0?L(m.commit):C(m.state.open),m.refocus&&b.current?.focus(),m.handled)},q=B(v);q.current=v;let W=B(()=>C(!1));W.current=()=>C(!1);let j=h=>{u||(N.current=h.nativeEvent,q.current(h.key)&&h.preventDefault())};return qt(()=>{if(!u)return;let h=m=>{I.current?.contains(m.target)||W.current()},E=m=>{m!==N.current&&q.current(m.key)&&m.preventDefault()};return document.addEventListener("mousedown",h),document.addEventListener("keydown",E),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("keydown",E)}},[u]),qt(()=>{u&&(S.current.text||d(ze(e,M)))},[u]),Bt(()=>{if(!u||!x.current)return;x.current.children.item(p)?.scrollIntoView({block:"nearest"})},[p,u]),{open:u,toggle:()=>C(!u),close:()=>C(!1),focusIdx:p,setFocusIdx:d,pick:h=>L(e.findIndex(E=>E.value===h)),wrapRef:I,triggerRef:b,listRef:x,listId:w,onTriggerKeyDown:j,activeId:u?`${w}-${p}`:void 0}}var sr={select:{list:"absolute left-0 top-full z-50 mt-1 max-h-[280px] w-max min-w-full overflow-y-auto border-2 border-accent bg-bg shadow-xl",item:(e,t,n)=>["px-3 py-3 font-mono text-[13px] font-semibold uppercase tracking-[0.1em] transition-colors whitespace-nowrap",n?"cursor-not-allowed opacity-40":"cursor-pointer",e&&!n?"bg-accent text-bg":"bg-bg text-fg"].join(" ")},cell:{list:"absolute left-0 top-full z-50 mt-1 max-h-[320px] w-max min-w-full overflow-y-auto border-2 border-accent bg-bg shadow-xl",item:e=>[`cursor-pointer whitespace-nowrap px-6 py-3 font-mono ${Wt.label} font-semibold uppercase tracking-[0.1em] transition-colors`,e?"bg-accent text-bg":"bg-bg text-fg"].join(" "),pickerMarker:!0},hairline:{list:"absolute left-0 top-full z-50 max-h-[320px] w-full overflow-y-auto border border-line bg-bg shadow-[0_6px_20px_rgba(0,0,0,0.10)]",item:(e,t)=>[`flex cursor-pointer items-center justify-between gap-4 border-b border-line px-4 py-3 text-left ${Wt.body} transition-colors last:border-b-0`,t?"border-fg font-medium text-fg":e?"border-fg text-fg":"text-fg-dim"].join(" "),pickerMarker:!0},region:{list:"absolute right-0 top-full z-[200] mt-2 flex min-w-[240px] flex-col border border-line bg-surface text-fg",item:(e,t,n,r)=>["flex w-full cursor-pointer items-center gap-3 px-4 py-3 text-left transition-colors","font-mono text-[13px] uppercase tracking-[0.18em]",e?"bg-surface-2 text-fg":"",r?"":"border-b border-line",t?"text-accent":""].join(" "),itemStyle:e=>e?void 0:{color:"color-mix(in oklab, currentColor 80%, transparent)"}}};function lr(e,t){Bt(()=>{let n=e.current,r=n?.ownerDocument.defaultView;if(!n||!r)return;let i=()=>{let o=n.style;o.top=o.bottom=o.marginTop=o.marginBottom=o.maxHeight=o.overflowY=o.translate="";let a=n.offsetParent??n.parentElement;if(!a)return;let s=a.getBoundingClientRect(),c=n.getBoundingClientRect(),u=Math.abs(c.right-s.right)<Math.abs(c.left-s.left)?"end":"start",p=ir({trigger:{left:s.left,right:s.right,top:s.top,bottom:s.bottom},menu:{width:c.width,height:c.height},bounds:{left:0,top:0,right:r.innerWidth,bottom:r.innerHeight},align:u,side:"bottom"});if(p.side==="top"){o.top="auto",o.bottom="100%",o.marginTop="0px";let S=p.top+Math.min(c.height,p.maxHeight);o.marginBottom=`${Math.max(0,s.top-S)}px`}p.maxHeight<c.height&&(o.maxHeight=`${p.maxHeight}px`,o.overflowY="auto");let d=p.left-c.left;d&&(o.translate=`${d}px`)};return i(),r.addEventListener("resize",i),r.addEventListener("scroll",i,!0),()=>{r.removeEventListener("resize",i),r.removeEventListener("scroll",i,!0)}},[e,t])}function ur({id:e,tone:t,items:n,value:r,focusIdx:i,onFocus:o,onPick:a,listRef:s,ariaLabel:c}){let u=sr[t],p=B(null);return lr(p,n.length),z("ul",{ref:d=>{p.current=d,s&&(s.current=d)},id:e,role:"listbox","aria-label":c,...u.pickerMarker?{"data-picker-menu":""}:{},className:u.list,children:n.map((d,S)=>{let I=d.value===r;return z("li",{id:`${e}-${S}`,role:"option","aria-selected":I,"aria-disabled":d.disabled||void 0,onMouseEnter:()=>!d.disabled&&o(S),onMouseDown:b=>{b.preventDefault(),d.disabled||a(d.value)},className:u.item(S===i,I&&d.value!=="",!!d.disabled,S===n.length-1),style:u.itemStyle?.(I),children:d.meta===void 0?d.label:zt(dr,{children:[d.lead,z("span",{className:"flex-1 whitespace-nowrap",children:d.label}),z("span",{className:"ml-auto text-[12px] opacity-50",children:d.meta})]})},`${d.value}_${S}`)})})}function cr({value:e,onChange:t,disabled:n,children:r,className:i,style:o,name:a,id:s,"aria-label":c}){let u=nr.toArray(r).flatMap(b=>{if(!rr(b))return[];if(b.type!=="option")return[];let w=b.props,N=w.value!==void 0?String(w.value):"",M=w.children,C=typeof M=="string"||typeof M=="number"?String(M):N;return[{value:N,label:C,disabled:!!w.disabled}]}),p=e??"",d=ar({items:u,value:p,onPick:b=>t?.({target:{value:b}})}),I=u.find(b=>b.value===p)?.label??u[0]?.label??"";return zt("div",{ref:d.wrapRef,className:"relative",children:[a&&z("input",{type:"hidden",name:a,value:p}),z("button",{ref:b=>{d.triggerRef.current=b},type:"button",disabled:n,"aria-haspopup":"listbox","aria-expanded":d.open,"aria-controls":d.open?d.listId:void 0,"aria-activedescendant":d.activeId,"aria-label":c,id:s,onClick:()=>!n&&d.toggle(),onKeyDown:b=>!n&&d.onTriggerKeyDown(b),className:`block w-full ${i??""}`,style:o,children:z("span",{className:"block w-full truncate text-left",children:I})}),d.open&&z(ur,{id:d.listId,tone:"select",items:u,value:p,focusIdx:d.focusIdx,onFocus:d.setFocusIdx,onPick:d.pick,listRef:d.listRef})]})}import{jsx as xe,jsxs as Re}from"react/jsx-runtime";var mr="font-mono text-[length:var(--size-label,12px)]",pr="font-semibold uppercase tracking-[0.22em] text-fg";function Gt(e){return`${e??mr} ${pr}`}function Vt(){return xe("span",{className:"text-accent",children:" *"})}function fr({children:e,required:t,labelFace:n}){return Re("span",{className:Gt(n),children:[e,t?xe(Vt,{}):null]})}function gr({label:e,required:t,hint:n,separate:r,htmlFor:i,labelFace:o,className:a,children:s}){let c=a?`flex flex-col gap-2 ${a}`:"flex flex-col gap-2",u=n?xe("span",{className:"font-mono text-[11px] uppercase tracking-[0.22em] text-fg-dim",children:n}):null;return r||n?Re("div",{className:c,children:[Re("label",{htmlFor:i,className:Gt(o),children:[e,t?xe(Vt,{}):null]}),s,u]}):Re("label",{htmlFor:i,className:c,children:[xe(fr,{required:t,labelFace:o,children:e}),s]})}export{Rr as a,kr as b,Ar as c,st as d,Oe as e,yr as f,hr as g,br as h,xr as i,tn as j,nn as k,Cr as l,Sr as m,Fe as n,Pe as o,fe as p,vr as q,Ie as r,dn as s,mn as t,Fr as u,Ur as v,bt as w,$e as x,$r as y,Hr as z,fn as A,qr as B,Kr as C,gn as D,Wr as E,hn as F,Br as G,zr as H,xt as I,Qr as J,Jr as K,Zr as L,no as M,ro as N,Lr as O,pt as P,we as Q,qe as R,yo as S,Rt as T,ko as U,Kn as V,Mo as W,zn as X,Gn as Y,Bo as Z,zo as _,Go as $,Vo as aa,jn as ba,Qo as ca,$t as da,Jo as ea,Jn as fa,Zo as ga,er as ha,ai as ia,ar as ja,ur as ka,cr as la,fr as ma,gr as na};
|
|
1
|
+
import{g as rt,j as pe,r as ot,t as it,u as at,w as H}from"./chunk-WSWQW2X3.js";import{Aa as et,Da as De,Ea as tt,za as me}from"./chunk-YLAMT2JE.js";import{e as Ze,q as nt,s as re}from"./chunk-G3PA7RZW.js";import{createContext as rn,useContext as on,useEffect as an,useMemo as ge,useState as ut}from"react";function st(e,t){return e.map(n=>({partNumber:n.partNumber,quantity:n.wheels*t}))}function oe(e,t){if(e.length===0)return null;let n=0;for(let r of e){let i=r.prices?.[t];if(typeof i!="number"||!Number.isFinite(i)||i<=0)return null;n+=i*r.wheels}return n}var Oe=4,yr=1,hr={unit:"set",spares:0,spareSide:"left"};function lt(e){return e.unit==="single"?1:Oe+e.spares}function br(e,t){return[{partNumber:e.partNumber,wheels:lt(t),prices:e.prices}]}function xr(e,t){let n=lt(t)-Oe;if(n<=0||e.length===0)return e;let r=tn(e),i=r?r[t.spareSide]:0;return e.map((o,a)=>a===i?{...o,wheels:o.wheels+n}:o)}function tn(e){let t,n;for(let r=0;r<e.length;r+=1){let i=e[r].hand;if(i!=="left"&&i!=="right")continue;if((i==="left"?t:n)!==void 0)return null;i==="left"?t=r:n=r}return t!==void 0&&n!==void 0?{left:t,right:n}:null}function nn(e,t){return t.spares>0?`${e} + spare`:e}function Cr(e){return e.unit==="single"?"Single":nn(`Set of ${Oe}`,e)}var Sr="data-add-to-basket",Fe=9,Pe="en";function fe(e,t,n=0){return new Intl.NumberFormat(Pe,{style:"currency",currency:t,minimumFractionDigits:0,maximumFractionDigits:n}).format(e)}function vr(e,t){return new Intl.NumberFormat(Pe,{style:"currency",currency:t}).format(e)}import{jsx as un}from"react/jsx-runtime";var ct="storefront-country",dt=rn(null);function sn(e){return mt(e,"catalogue")}function ln(e){return mt(e,"money")}function mt(e,t){let n=new Map(e.map(i=>[i.code,i.decimalPlaces])),r=new Map;return(i,o)=>{if(!o)return"";let a=r.get(o);if(!a){let s=n.get(o)??0;a=new Intl.NumberFormat(Pe,{style:"currency",currency:o,minimumFractionDigits:t==="money"?s:0,maximumFractionDigits:s}),r.set(o,a)}return a.format(i)}}function Lr({children:e,currencies:t,countries:n,defaultCurrency:r,defaultCountry:i}){let o=ge(()=>t??[],[t]),a=ge(()=>n??[],[n]),s=ge(()=>r||o.find(x=>x.isDefault)?.code||o[0]?.code||"",[r,o]),c=ge(()=>i||a.find(x=>x.isDefault)?.code||a[0]?.code||"",[i,a]),[u,p]=ut(c),[d,S]=ut(!1);an(()=>{let x=re.getItem(ct);x&&a.some(w=>w.code===x)&&p(x),S(!0)},[a]);function I(x){p(x),re.setItem(ct,x)}let b=ge(()=>{let x=a.find(L=>L.code===u)??null,w=x?.currency,N=w&&o.some(L=>L.code===w)?w:s,M=sn(o),C=ln(o);return{country:u,currency:N,setCountry:I,currencies:o,countries:a,activeCountry:x,formatPrice:(L,v)=>M(L,v??N),formatMoney:(L,v)=>C(L,v??N),ready:d}},[u,o,a,s,d]);return un(dt.Provider,{value:b,children:e})}function pt(){let e=on(dt);if(!e)throw new Error("useCurrency must be used within a CurrencyProvider");return e}import{createContext as Pn,useCallback as R,useContext as In,useEffect as Y,useMemo as wt,useRef as ie,useState as k}from"react";function gt(e,t){return e.valid?!1:e.reason==="firstOrderOnly"?!0:e.reason==="notEligible"&&!t}var yt="We'll confirm this discount when you place your order.",Rr="Confirmed at checkout";function kr(e){return e&&(e.valid||e.deferred)?e.code:void 0}var ft="coupon_code: ";function Ar(e){return!(e instanceof pe)||e.status!==400||!e.message.startsWith(ft)?null:e.message.slice(ft.length)}function ht(e,t){return e.map(n=>({qty:n.qty,slug:n.slug,name:`${n.name.lead}${n.name.accent}`.trim(),finish:n.finishName,size:n.size,kind:n.kind,sku:n.sku,pack:n.pack,priceLabel:t(n)}))}var Ie="Price on request",dn="Request a quote",mn="from ",Fr="From ",Ur="each",bt="Free";function Ue(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function $e(e,t){let n=e?.[t];return Ue(n)?n:null}function $r(e,t,n,r){let i=$e(e,n),o=$e(t,n);return i===null&&o===null?0:i===null?1:o===null?-1:r==="asc"?i-o:o-i}function Hr(e,t,n,r){if(n==null&&r==null)return!0;let i=$e(e,t);return!(i===null||n!=null&&i<n||r!=null&&i>r)}var pn={priced:!1,unit:null,was:null,onSale:!1,setTotal:null};function fn(e,t,n){if(!Ue(e))return pn;let r=Ue(t)&&t>e?t:null;return{priced:!0,unit:e,was:r,onSale:r!==null,setTotal:n!=null?e*n:null}}function qr(e,t,n=""){return!e.priced||e.unit==null?Ie:`${n}${fe(e.unit,t)}`}function Kr(e,t){return e.was==null?null:fe(e.was,t)}function gn(e,t,n=1){let r=oe(e,t);if(r===null)return{priced:!1,unit:null,isFrom:!1,setTotal:null};let i=e.reduce((a,s)=>a+s.wheels,0),o=Math.min(...e.map(a=>a.prices[t]));return{priced:!0,unit:o,isFrom:o*i!==r,setTotal:r*n}}var yn={priced:!1,unit:null,isFrom:!1,was:null,onSale:!1,setTotal:null};function Wr(e,t,n,r=1){let i=fn(e.prices[n],e.msrpPrices?.[n],4),o=i.setTotal==null?null:i.setTotal*r;if(!t)return{priced:i.priced,unit:i.unit,isFrom:!0,was:i.was,onSale:i.onSale,setTotal:null,fromSetTotal:o};let a=gn(t.components,n,r);return a.priced?{priced:!0,unit:a.unit,isFrom:a.isFrom,was:null,onSale:!1,setTotal:a.setTotal,fromSetTotal:o}:{...yn,fromSetTotal:o}}function hn(e,t){return!e.priced||e.unit==null?Ie:`${e.isFrom?mn:""}${fe(e.unit,t)}`}function Br(e,t){return e.was==null?null:fe(e.was,t)}function zr(e,t){return!e.priced||e.unit==null?dn:hn(e,t)}var bn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function xt(e){return bn.test(e.trim())}var Ct="sf:ga-purchases",xn=20;function vt(){return typeof window>"u"||window.parent!==window}function ye(...e){try{if(vt()||typeof window.gtag!="function")return;window.gtag(...e)}catch{}}function Cn(e,t){let n=e.config.find(r=>r.gold)?.label;return{item_id:`${e.slug}|${e.finishName}|${e.size}`,item_name:`${e.name.lead}${e.name.accent}`.trim(),...n?{item_variant:n}:{},price:oe(e.components,t)??0,quantity:e.qty}}function He(e,t){return e.filter(we).map(n=>Cn(n,t))}function Qr(e){ye("event","view_item",{currency:e.currency,value:e.pricePerSet,items:[{item_id:e.itemId,item_name:e.itemName,...e.variant?{item_variant:e.variant}:{},price:e.pricePerSet,quantity:1}]})}function Et(e,t){let n=He([e],t);n.length!==0&&ye("event","add_to_cart",{currency:t,value:n[0].price*n[0].quantity,items:n})}function Jr(e){let t=He(e.lines,e.currency);t.length!==0&&ye("event","begin_checkout",{currency:e.currency,value:e.value,...e.coupon?{coupon:e.coupon}:{},items:t})}var St=new Set;function Sn(e){if(St.has(e))return!1;St.add(e);try{let t=JSON.parse(re.getItem(Ct)??"[]");if(t.includes(e))return!1;re.setItem(Ct,JSON.stringify([...t,e].slice(-xn)))}catch{}return!0}function Zr(e){let t=e.confirmation;if(vt()||!Sn(t.orderNumber))return;let n=t.currency,r=Number(t.grandTotal);ye("event","purchase",{transaction_id:t.orderNumber,currency:n,value:r,shipping:Number(t.freightCharge),...t.couponCode?{coupon:t.couponCode}:{},items:He(e.lines,n)}),e.adsSendTo&&ye("event","conversion",{send_to:e.adsSendTo,transaction_id:t.orderNumber,currency:n,value:r})}var vn="Arranged after review",Pt="Calculated at checkout",En=Pt,no=Pt;function It({quoted:e,optionCount:t,chosenAmount:n,couponWaivesFreight:r}){return e&&t===0?"arranged":r?"free":n===void 0?"pending":n===0?"free":"charged"}function ro(e){switch(e){case"arranged":return vn;case"pending":return En;case"free":return bt;case"charged":return null}}import{jsx as Nn}from"react/jsx-runtime";var wn=400,Ln=400,Tn=1500;function we(e){return(e.components?.length??0)>0}function Lt(e,t){return{code:e,valid:t.valid,deferred:gt(t,t.askedAsShopper),message:t.message||void 0,effects:t.effects??void 0}}function Nt(e,t){return oe(e.components,t)}function qe(e,t){let n=Nt(e,t);return n===null?null:n*e.qty}function Tt(e){return e!=="tyre"}var _t=Pn(null);function yo({children:e,preview:t=!1}){let{currency:n,country:r,formatMoney:i}=pt(),[o,a]=k(t),[s,c]=k([]),[u,p]=k([]),[d,S]=k([]),[I,b]=k(!1),[x,w]=k(!1),[N,M]=k(!1),[C,L]=k(!1),[v,q]=k(null),[W,j]=k(void 0),h=ie(r),E=ie("");h.current=h.current||r;let[m,K]=k(null),[Q,G]=k(!1),[A,J]=k(null),Z=ie(void 0),D=R(()=>a(!0),[]),Ce=R(()=>a(!1),[]),O=R(()=>a(l=>!l),[]);Y(()=>{t||typeof window>"u"||new URLSearchParams(window.location.search).get("cart")==="open"&&D()},[D,t]);let Se=R(l=>{L(!0),Tt(l)&&M(!0)},[]),ee=N||s.some(l=>Tt(l.kind)),se=C||s.length>0;Y(()=>{if(t||!ee||I)return;let l=!0;return H.listWheels().then(f=>{l&&(p(f),b(!0))}),()=>{l=!1}},[t,ee,I]),Y(()=>{if(t||!se||x)return;let l=!0;return H.listBundles().then(f=>{l&&(S(f),w(!0))}),()=>{l=!1}},[t,se,x]);let F=v?.deliveryOptions??[];Y(()=>{F.length!==0&&J(l=>l&&F.some(f=>f.id===l)?l:F[0]?.id??null)},[v]);let V=R(()=>s.filter(we).flatMap(l=>st(l.components,l.qty)),[s]),le=R(async(l,f)=>{let y=l.trim().toUpperCase();if(!y)return;let g=V();if(g.length===0){K({code:y,valid:!1,message:"Add a wheel to the cart first."});return}G(!0),Z.current=f;try{let T=await H.validateCoupon({code:y,items:g,currency:n,shippingMethodId:A??void 0,customerEmail:f});K(Lt(y,T))}catch{K({code:y,valid:!1,message:"Could not check that code. Please try again."})}finally{G(!1)}},[V,n,A]),te=R(()=>{K(null),Z.current=void 0},[]),ve=R(l=>{if(!m)return;let{code:f}=m;K(y=>y&&y.code===f?{code:f,valid:!1,refused:!0,message:l}:y)},[m]);Y(()=>{if(!m||m.refused)return;let l=m.code,f=g=>g!==null&&g.code===l&&!g.refused,y=setTimeout(async()=>{let g=V();if(g.length===0){K(T=>f(T)?{code:l,valid:!1,message:"Add a wheel to the cart first."}:T);return}G(!0);try{let T=await H.validateCoupon({code:l,items:g,currency:n,shippingMethodId:A??void 0,customerEmail:Z.current});K(de=>f(de)?Lt(l,T):de)}catch{}finally{G(!1)}},wn);return()=>clearTimeout(y)},[s,n,A]);let ue=m&&!m.refused?m.code:void 0;Y(()=>{if(t)return;let l=!0,f=setTimeout(async()=>{let y=V();if(y.length===0){q(null),j(void 0);return}try{let g=await H.quoteCart({items:y,currency:n,shippingMethodId:A??void 0,couponCode:ue,customerEmail:Z.current||void 0,country:h.current||void 0,subdivision:E.current||void 0});if(!l)return;q(g)}catch{if(!l)return}j(ue)},Ln);return()=>{l=!1,clearTimeout(f)}},[s,n,A,ue,r]);let P=R(l=>{c(f=>{let y=f.findIndex(g=>g.id===l.id);return y===-1?[...f,l]:f.map((g,T)=>T===y?{...g,qty:Math.min(Fe,g.qty+l.qty)}:g)}),Et(l,n)},[n]),U=R(l=>{c(f=>f.filter(y=>y.id!==l))},[]),X=R((l,f)=>{let y=Math.max(1,Math.min(Fe,f));c(g=>g.map(T=>T.id===l?{...T,qty:y}:T))},[]),Ge=R(l=>{c(l)},[]),[ce,Xt]=k(null),Ve=ie(null);Ve.current=ce;let $=ie(null),ke=ie(""),Xe=R((l,f)=>{let y=l.trim().toLowerCase();xt(y)&&Xt(g=>g&&g.email===y&&g.firstName===(f??"")?g:{email:y,firstName:f??""})},[]);Y(()=>{if(t||!ce)return;let l=ht(s.filter(we),g=>qe(g,n)===null?Ie:i(qe(g,n),n)),f={email:ce.email,firstName:ce.firstName,currency:n,items:l},y=JSON.stringify(f);if(y!==ke.current)return $.current&&clearTimeout($.current),$.current=setTimeout(()=>{$.current=null,ke.current=y,H.captureCart(f).catch(g=>{})},Tn),()=>{$.current&&(clearTimeout($.current),$.current=null)}},[s,ce,n,t]);let Ye=R(()=>{$.current&&(clearTimeout($.current),$.current=null);let l=Ve.current;l&&(ke.current="",H.captureCart({email:l.email,firstName:l.firstName,currency:n,items:[]}).catch(f=>{}))},[n]),je=wt(()=>{let l=s.reduce((_,ne)=>{let Ee=qe(ne,n);return Ee===null?_:_+Ee},0),f=s.some(_=>Nt(_,n)===null),y=s.reduce((_,ne)=>_+ne.qty,0),g=m?.valid?m.effects:void 0,T=g?Math.min(l,Number(g.discountAmount)):0,de=v?.bundleDiscount??0,jt=v?.appliedBundles??[],Ae=!!g?.freeShipping,Qe=F.find(_=>_.id===A),Je=Ae?0:v?.shipping??Qe?.amount??0,Qt=It({quoted:v!==null,optionCount:F.length,chosenAmount:Qe?.amount,couponWaivesFreight:Ae}),Me={};for(let _ of g?.freeUnits??[])Me[_.partNumber]=(Me[_.partNumber]??0)+_.quantity;let Jt=v?.tax??null,Zt=v?v.grandTotal:l-T-de+Je;return{sets:y,units:s.reduce((_,ne)=>_+(ne.components??[]).reduce((Ee,en)=>Ee+en.wheels*ne.qty,0),0),subtotal:l,hasUnpricedLine:f,discount:T,bundleDiscount:de,appliedBundles:jt,shipping:Je,freeShipping:Ae,shippingStatus:Qt,freeUnitsByPartNumber:Me,tax:Jt,grand:Zt,repricing:!!m?.refused&&v!==null&&W===m?.code,currency:n}},[s,n,m,F,A,v,W]),Yt=wt(()=>({isOpen:o,preview:t,open:D,close:Ce,toggle:O,items:s,catalog:u,bundles:d,warmCatalog:Se,add:P,remove:U,setQty:X,replaceItems:Ge,identify:Xe,clearCapturedCart:Ye,coupon:m,applyCoupon:le,removeCoupon:te,refuseCoupon:ve,couponBusy:Q,deliveryOptions:F,shippingMethodId:A,setShippingMethodId:J,totals:je}),[o,t,D,Ce,O,s,u,d,Se,P,U,X,Ge,Xe,Ye,m,le,te,ve,Q,F,A,je]);return Nn(_t.Provider,{value:Yt,children:e})}function Rt(){let e=In(_t);if(!e)throw new Error("useCart() must be called inside <CartProvider>. Mount the provider in app/layout.tsx.");return e}import{cache as Hn}from"react";function kt(e,t,n,r){for(;e.size>=t;){let i,o;for(let[s,c]of e){if(c.expiresAt<=r){i=s;break}o===void 0&&n(s)&&(o=s)}let a=i??o??e.keys().next().value;if(a===void 0)return;e.delete(a)}}var _n=6e4,Rn=5e3,kn=500,Le=new Map;async function An(e){let{host:t,matchesRequestHost:n}=await ot();if(!t)return"";let r=await it();return r?`${e}|slug:${encodeURIComponent(t)}/${encodeURIComponent(r)}`:n?`${e}|host:${t}`:`${e}|xhost:${t}`}var Mn=e=>e.includes("|slug:")||e.includes("|xhost:");async function At(e,t){if(await at()!==null)return t();let n=await An(e);if(!n)return t();let r=Date.now(),i=Le.get(n);if(i&&i.expiresAt>r)return i.load;let o=await t(),a=o.outcome.state==="failed",s=a?Rn:_n,c=Le.get(n)?.lastGood,u=o.outcome.state==="ok"?o:a?c:void 0,p=a&&u?u:o;return kt(Le,kn,Mn,r),Le.set(n,{load:p,expiresAt:r+s,lastGood:u}),p}var Dn=404;function On(e){if(e instanceof pe&&e.status===Dn)return{state:"absent"};let t=e instanceof pe?e.status:-1,n=e instanceof Error?e.message:String(e);return{state:"failed",status:t,detail:n}}var Fn="[storefront:chrome-load-failed]";function Un(e,t){console.error(`${Fn} ${e} status=${t.status} \u2014 serving fallback chrome`,t.detail)}async function Mt(e,t,n,r){try{let i=await t();return r?.(i)?{value:i,outcome:{state:"absent"}}:{value:i,outcome:{state:"ok"}}}catch(i){let o=On(i);return o.state==="failed"&&Un(e,o),{value:n,outcome:o}}}function $n(e){return e==="production"?"silent":"banner"}var Po=$n("production");function qn(e,t){return e?.trim()||t}function ko({legalName:e,foundedYear:t,siteName:n},r=new Date().getFullYear()){let i=qn(e,n);return`\xA9 ${t&&t<r?`${t}\u2013${r}`:`${r}`} ${i}`}var Kn={name:me,legalName:null,foundedYear:null,faviconUrl:null,currencies:[],defaultCurrency:null,countries:[],defaultCountry:null,commerceEnabled:!0,cardPayments:!1,paymentMethods:[],paypalClientId:null,paypalEnvironment:null,squareApplicationId:null,squareLocationId:null,squareEnvironment:null,ga4MeasurementId:null,googleAdsId:null,googleAdsConversionLabel:null,metaPixelId:null,mapsApiKey:null,mapsMapId:null,socialLinks:De},Ao=Hn(async()=>At("site",()=>Mt("site",async()=>{let e=await H.getSite();return{name:et(e.name),legalName:e.legalName?.trim()||null,foundedYear:e.foundedYear??null,faviconUrl:e.faviconUrl??null,currencies:e.currencies??[],defaultCurrency:e.defaultCurrency??null,countries:e.countries??[],defaultCountry:e.defaultCountry??null,commerceEnabled:e.commerceEnabled??!0,cardPayments:e.cardPayments??!1,paymentMethods:e.paymentMethods??(e.cardPayments?["card"]:[]),paypalClientId:e.paypalClientId??null,paypalEnvironment:e.paypalEnvironment??null,squareApplicationId:e.squareApplicationId??null,squareLocationId:e.squareLocationId??null,squareEnvironment:e.squareEnvironment??null,ga4MeasurementId:e.ga4MeasurementId??null,googleAdsId:e.googleAdsId??null,googleAdsConversionLabel:(e.googleAdsId?e.googleAdsConversionLabel:null)??null,metaPixelId:e.metaPixelId??null,mapsApiKey:e.mapsApiKey??null,mapsMapId:e.mapsMapId??null,socialLinks:tt(e.socialLinks)}},Kn)));var Mo={name:me,legalName:null,foundedYear:null,faviconUrl:null,currencies:[{code:"USD",symbol:"$",decimalPlaces:2,isDefault:!0}],defaultCurrency:"USD",countries:[{code:"US",name:"United States",currency:"USD",url:"",isDefault:!0,chargeTax:!1,taxDisplay:"none",taxName:"",taxRate:null,postalLabel:"Zip Code"}],defaultCountry:"US",commerceEnabled:!0,cardPayments:!0,paymentMethods:["card"],paypalClientId:null,paypalEnvironment:null,squareApplicationId:null,squareLocationId:null,squareEnvironment:null,ga4MeasurementId:null,googleAdsId:null,googleAdsConversionLabel:null,metaPixelId:null,mapsApiKey:null,mapsMapId:null,socialLinks:De};import{jsx as Ot,jsxs as Ft}from"react/jsx-runtime";import{useEffect as Te,useRef as Ut,useState as Ne}from"react";var he=new Map,Wn=64;async function Bn(e){if(!Ze())return null;try{let t=await fetch(`${nt()}/logo-analysis.json?url=${encodeURIComponent(e)}`);if(!t.ok)return null;let n=await t.json();if(!n||typeof n!="object")return null;let{reversed:r,inkIsDark:i}=n;return typeof r!="string"?null:{reversed:r,inkIsDark:typeof i=="boolean"?i:null}}catch{return null}}function Dt(e){let t=he.get(e);if(t)return t;let n=Bn(e);if(he.set(e,n),he.size>Wn){let r=he.keys().next();r.done||he.delete(r.value)}return n}var zn={small:54,medium:66,large:84},Gn=44,Vn=202/22,Bo=16,zo=140,Xn=.88,Go=16,Yn="invert(1)";function Vo({variant:e="header",scrolled:t=!0,src:n,reverse:r=!1,onLightSurface:i,reversedSrc:o,inkIsDark:a,size:s="medium",sizePx:c,wordmark:u,siteName:p=me,fitToContainer:d=!1,fitWordmarkToContainer:S=!1,fitFloorPx:I}){let b=u&&u.trim()?u.trim():p,[x,w]=Ne(!1),N=Ut(null),M=P=>{N.current=P};Te(()=>{let P=N.current?.ownerDocument??document,U=()=>{w(P.documentElement.getAttribute("data-theme")==="light")};U();let X=new MutationObserver(U);return X.observe(P.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>X.disconnect()},[]);let C=n&&n.trim()?n.trim():null,L=!!C&&rt(C),v=i??(x&&t),q=r&&L&&C&&o!=null?{reversed:o,inkIsDark:a??null}:null,W=q!==null,[j,h]=Ne(null);Te(()=>{if(!r||!C||!L||W){h(null);return}let P=!1;return h(null),Dt(C).then(U=>{P||h(U)}),()=>{P=!0}},[r,C,L,W]);let E=q??j,m=!!E&&E.inkIsDark!==null&&(v?!E.inkIsDark:E.inkIsDark),K=r&&!!C&&!L&&!v,Q=m&&E?E.reversed:C,G=Q?[Q]:[],[A,J]=Ne(0);Te(()=>{J(0)},[C,m]);let Z=e==="footer"?Gn:zn[s],D=c&&c>0?c:Z,Ce=Math.round(D*Vn),O=A<G.length?G[A]:null,[Se,ee]=Ne(Q),se=O!==null&&O===Se,F=Ut(null);Te(()=>{let P=F.current;if(!P||!P.complete)return;if(P.naturalWidth>0||P.naturalHeight>0){ee(O);return}let U=!1;return P.decode().then(()=>!U&&ee(O),()=>!U&&J(X=>X+1)),()=>{U=!0}},[O]);let V=d||S,le=`calc(100cqi / ${((b.length+1)*Xn).toFixed(2)})`,te=V&&I&&I>0?Math.min(I,D):null,ve=V?te===null?`min(${D}px, ${le})`:`clamp(${te}px, ${le}, ${D}px)`:`${D}px`,ue=Ft("span",{className:`font-display font-bold tracking-[0.18em] ${te===null?"whitespace-nowrap":"whitespace-normal"}`,style:{fontSize:ve,lineHeight:1},"aria-label":b,children:[b,Ot("span",{className:"text-accent",children:"."})]});return Ft("span",{ref:M,className:"inline-flex items-center",children:[!se&&ue,O&&Ot("img",{ref:F,src:O,alt:b,width:Ce,height:D,className:"shrink-0 object-contain",style:{...se?{height:`${D}px`,width:"auto",...d?{maxWidth:"100cqi"}:{}}:{display:"none"},...K?{filter:Yn}:{}},onLoad:()=>ee(O),onError:()=>J(P=>P+1)},O)]})}import{jsx as be,jsxs as Qn}from"react/jsx-runtime";function jn({spokes:e,mesh:t=!1,className:n}){let a=c=>Math.round(c*1e3)/1e3,s=[];for(let c=0;c<e;c++){let u=c/e*Math.PI*2-Math.PI/2;if(s.push({x1:a(100+Math.cos(u)*22),y1:a(100+Math.sin(u)*22),x2:a(100+Math.cos(u)*86),y2:a(100+Math.sin(u)*86),main:!0}),t){let p=u+Math.PI/e;s.push({x1:a(100+Math.cos(p)*22*1.4),y1:a(100+Math.sin(p)*22*1.4),x2:a(100+Math.cos(p)*78),y2:a(100+Math.sin(p)*78),main:!1})}}return Qn("svg",{viewBox:"0 0 200 200",fill:"none",stroke:"currentColor",className:n??"block h-[70%] w-[70%] transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)]",children:[be("circle",{cx:100,cy:100,r:92,strokeWidth:2}),be("circle",{cx:100,cy:100,r:84,strokeWidth:1,opacity:.4}),be("circle",{cx:100,cy:100,r:22,strokeWidth:2}),be("circle",{cx:100,cy:100,r:6,fill:"currentColor"}),s.map((c,u)=>be("line",{x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,stroke:"currentColor",strokeWidth:c.main?6:3,strokeLinecap:"round",opacity:c.main?1:.5},u))]})}var Qo="#c9a461",$t=[{f:"black",label:"Black",hex:"#171717"},{f:"silver",label:"Silver",hex:"#cccccc"},{f:"bronze",label:"Bronze",hex:"#8a6438"},{f:"graphite",label:"Graphite",hex:"#3a3c3f"},{f:"red",label:"Candy Red",hex:"#7a0f14"}],Jo={name:"",color:"var(--fg)",family:"silver",src:""};function Jn(e,t){let n=r=>{let i=$t.findIndex(o=>o.f===r);return i===-1?$t.length:i};return n(e)-n(t)||e.localeCompare(t)}function Zo(e){let t=new Set;for(let n of e)for(let r of n.finishes??[])r?.family&&t.add(r.family);return[...t].sort(Jn)}import{useState as Zn}from"react";import{jsx as ae,jsxs as Ke}from"react/jsx-runtime";function er({customerEmail:e}){let{coupon:t,applyCoupon:n,removeCoupon:r,couponBusy:i}=Rt(),[o,a]=Zn("");async function s(){i||!o.trim()||(await n(o,e),a(""))}return Ke("div",{className:"flex flex-col gap-2",children:[t===null?Ke("div",{className:"flex border border-line",children:[ae("input",{type:"text",value:o,onChange:c=>a(c.target.value),onKeyDown:c=>{c.key==="Enter"&&(c.preventDefault(),s())},placeholder:"Coupon code","aria-label":"Coupon code",className:"flex-1 bg-transparent px-4 py-4 font-mono text-[11px] uppercase tracking-[0.18em] text-fg outline-none placeholder:text-fg-dim"}),ae("button",{type:"button",onClick:()=>{s()},disabled:i,className:"border-l border-line px-4 font-mono text-[10px] uppercase tracking-[0.26em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-wait disabled:opacity-60",children:i?"\u2026":"Apply"})]}):Ke("div",{className:["flex items-center justify-between gap-3 border px-4 py-3",t.valid?"border-accent":"border-line"].join(" "),style:t.valid?{background:"color-mix(in oklab, var(--accent) 8%, transparent)"}:void 0,children:[ae("span",{className:["font-mono text-[11px] uppercase tracking-[0.22em]",t.valid?"text-accent":t.deferred?"text-fg":"text-fg-dim line-through"].join(" "),children:t.code}),ae("button",{type:"button",onClick:r,"aria-label":`Remove coupon ${t.code}`,className:"font-mono text-[12px] text-fg-dim transition-colors hover:text-fg",children:"\u2715"})]}),t?.deferred?ae("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-fg-dim",children:yt}):t&&!t.valid&&t.message&&ae("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-alert",children:t.message})]})}function ai(){let e=typeof crypto<"u"?crypto:void 0;if(typeof e?.randomUUID=="function")return e.randomUUID();let t=new Uint8Array(16);if(typeof e?.getRandomValues=="function")e.getRandomValues(t);else for(let r=0;r<t.length;r++)t[r]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;let n=Array.from(t,r=>r.toString(16).padStart(2,"0")).join("");return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}import{Children as nr,isValidElement as rr,useEffect as qt,useId as or,useLayoutEffect as Bt,useRef as B,useState as Kt}from"react";var _e=(e,t)=>!!e[t]&&!e[t].disabled;function We(e,t,n){let r=e.length;for(let i=1;i<=r;i++){let o=((t+n*i)%r+r)%r;if(_e(e,o))return o}return t}function Be(e,t){return We(e,t===1?-1:e.length,t)}function ze(e,t){return _e(e,t)?t:Math.max(Be(e,1),0)}function Ht(e,t,n){let{open:r,focus:i}=e,o=a=>({...e,...a});if(t.length===1&&/\S/.test(t)){let a=e.typed+t.toLowerCase(),s=n.findIndex((c,u)=>_e(n,u)&&c.label.toLowerCase().startsWith(a));return{state:o({open:!0,typed:a,focus:s>=0?s:i}),handled:!0}}if(!r)return t==="ArrowDown"||t==="ArrowUp"||t==="Enter"||t===" "?{state:o({open:!0,typed:""}),handled:!0}:{state:e,handled:!1};switch(t){case"ArrowDown":return{state:o({focus:We(n,i,1)}),handled:!0};case"ArrowUp":return{state:o({focus:We(n,i,-1)}),handled:!0};case"Home":return{state:o({focus:Be(n,1)}),handled:!0};case"End":return{state:o({focus:Be(n,-1)}),handled:!0};case"Enter":case" ":return _e(n,i)?{state:o({open:!1,typed:""}),commit:i,refocus:!0,handled:!0}:{state:e,handled:!0};case"Escape":return{state:o({open:!1,typed:""}),refocus:!0,handled:!0};case"Tab":return{state:o({open:!1,typed:""}),handled:!1};default:return{state:e,handled:!1}}}import{placeMenu as ir}from"efficient-shell/ui";import{Fragment as dr,jsx as z,jsxs as zt}from"react/jsx-runtime";var Wt={body:"text-[length:var(--size-body,14px)]",label:"text-[length:var(--size-label,13px)]"};function ar({items:e,value:t,onPick:n,open:r,onOpen:i,onClose:o}){let[a,s]=Kt(!1),c=r!==void 0,u=c?r:a,[p,d]=Kt(0),S=B({text:"",timer:0}),I=B(null),b=B(null),x=B(null),w=or(),N=B(null),M=e.findIndex(h=>h.value===t),C=h=>{h!==u&&(c||s(h),h?i?.():o?.())},L=h=>{let E=e[h];!E||E.disabled||(n(E.value),C(!1),b.current?.focus())},v=h=>{let E={open:u,focus:u?p:ze(e,M),typed:S.current.text},m=Ht(E,h,e);return!m.handled&&m.state.open===u?!1:(m.state.typed!==E.typed&&(S.current.text=m.state.typed,window.clearTimeout(S.current.timer),S.current.timer=window.setTimeout(()=>{S.current.text=""},500)),d(m.state.focus),m.commit!==void 0?L(m.commit):C(m.state.open),m.refocus&&b.current?.focus(),m.handled)},q=B(v);q.current=v;let W=B(()=>C(!1));W.current=()=>C(!1);let j=h=>{u||(N.current=h.nativeEvent,q.current(h.key)&&h.preventDefault())};return qt(()=>{if(!u)return;let h=m=>{I.current?.contains(m.target)||W.current()},E=m=>{m!==N.current&&q.current(m.key)&&m.preventDefault()};return document.addEventListener("mousedown",h),document.addEventListener("keydown",E),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("keydown",E)}},[u]),qt(()=>{u&&(S.current.text||d(ze(e,M)))},[u]),Bt(()=>{if(!u||!x.current)return;x.current.children.item(p)?.scrollIntoView({block:"nearest"})},[p,u]),{open:u,toggle:()=>C(!u),close:()=>C(!1),focusIdx:p,setFocusIdx:d,pick:h=>L(e.findIndex(E=>E.value===h)),wrapRef:I,triggerRef:b,listRef:x,listId:w,onTriggerKeyDown:j,activeId:u?`${w}-${p}`:void 0}}var sr={select:{list:"absolute left-0 top-full z-50 mt-1 max-h-[280px] w-max min-w-full overflow-y-auto border-2 border-accent bg-bg shadow-xl",item:(e,t,n)=>["px-3 py-3 font-mono text-[13px] font-semibold uppercase tracking-[0.1em] transition-colors whitespace-nowrap",n?"cursor-not-allowed opacity-40":"cursor-pointer",e&&!n?"bg-accent text-bg":"bg-bg text-fg"].join(" ")},cell:{list:"absolute left-0 top-full z-50 mt-1 max-h-[320px] w-max min-w-full overflow-y-auto border-2 border-accent bg-bg shadow-xl",item:e=>[`cursor-pointer whitespace-nowrap px-6 py-3 font-mono ${Wt.label} font-semibold uppercase tracking-[0.1em] transition-colors`,e?"bg-accent text-bg":"bg-bg text-fg"].join(" "),pickerMarker:!0},hairline:{list:"absolute left-0 top-full z-50 max-h-[320px] w-full overflow-y-auto border border-line bg-bg shadow-[0_6px_20px_rgba(0,0,0,0.10)]",item:(e,t)=>[`flex cursor-pointer items-center justify-between gap-4 border-b border-line px-4 py-3 text-left ${Wt.body} transition-colors last:border-b-0`,t?"border-fg font-medium text-fg":e?"border-fg text-fg":"text-fg-dim"].join(" "),pickerMarker:!0},region:{list:"absolute right-0 top-full z-[200] mt-2 flex min-w-[240px] flex-col border border-line bg-surface text-fg",item:(e,t,n,r)=>["flex w-full cursor-pointer items-center gap-3 px-4 py-3 text-left transition-colors","font-mono text-[13px] uppercase tracking-[0.18em]",e?"bg-surface-2 text-fg":"",r?"":"border-b border-line",t?"text-accent":""].join(" "),itemStyle:e=>e?void 0:{color:"color-mix(in oklab, currentColor 80%, transparent)"}}};function lr(e,t){Bt(()=>{let n=e.current,r=n?.ownerDocument.defaultView;if(!n||!r)return;let i=()=>{let o=n.style;o.top=o.bottom=o.marginTop=o.marginBottom=o.maxHeight=o.overflowY=o.translate="";let a=n.offsetParent??n.parentElement;if(!a)return;let s=a.getBoundingClientRect(),c=n.getBoundingClientRect(),u=Math.abs(c.right-s.right)<Math.abs(c.left-s.left)?"end":"start",p=ir({trigger:{left:s.left,right:s.right,top:s.top,bottom:s.bottom},menu:{width:c.width,height:c.height},bounds:{left:0,top:0,right:r.innerWidth,bottom:r.innerHeight},align:u,side:"bottom"});if(p.side==="top"){o.top="auto",o.bottom="100%",o.marginTop="0px";let S=p.top+Math.min(c.height,p.maxHeight);o.marginBottom=`${Math.max(0,s.top-S)}px`}p.maxHeight<c.height&&(o.maxHeight=`${p.maxHeight}px`,o.overflowY="auto");let d=p.left-c.left;d&&(o.translate=`${d}px`)};return i(),r.addEventListener("resize",i),r.addEventListener("scroll",i,!0),()=>{r.removeEventListener("resize",i),r.removeEventListener("scroll",i,!0)}},[e,t])}function ur({id:e,tone:t,items:n,value:r,focusIdx:i,onFocus:o,onPick:a,listRef:s,ariaLabel:c}){let u=sr[t],p=B(null);return lr(p,n.length),z("ul",{ref:d=>{p.current=d,s&&(s.current=d)},id:e,role:"listbox","aria-label":c,...u.pickerMarker?{"data-picker-menu":""}:{},className:u.list,children:n.map((d,S)=>{let I=d.value===r;return z("li",{id:`${e}-${S}`,role:"option","aria-selected":I,"aria-disabled":d.disabled||void 0,onMouseEnter:()=>!d.disabled&&o(S),onMouseDown:b=>{b.preventDefault(),d.disabled||a(d.value)},className:u.item(S===i,I&&d.value!=="",!!d.disabled,S===n.length-1),style:u.itemStyle?.(I),children:d.meta===void 0?d.label:zt(dr,{children:[d.lead,z("span",{className:"flex-1 whitespace-nowrap",children:d.label}),z("span",{className:"ml-auto text-[12px] opacity-50",children:d.meta})]})},`${d.value}_${S}`)})})}function cr({value:e,onChange:t,disabled:n,children:r,className:i,style:o,name:a,id:s,"aria-label":c}){let u=nr.toArray(r).flatMap(b=>{if(!rr(b))return[];if(b.type!=="option")return[];let w=b.props,N=w.value!==void 0?String(w.value):"",M=w.children,C=typeof M=="string"||typeof M=="number"?String(M):N;return[{value:N,label:C,disabled:!!w.disabled}]}),p=e??"",d=ar({items:u,value:p,onPick:b=>t?.({target:{value:b}})}),I=u.find(b=>b.value===p)?.label??u[0]?.label??"";return zt("div",{ref:d.wrapRef,className:"relative",children:[a&&z("input",{type:"hidden",name:a,value:p}),z("button",{ref:b=>{d.triggerRef.current=b},type:"button",disabled:n,"aria-haspopup":"listbox","aria-expanded":d.open,"aria-controls":d.open?d.listId:void 0,"aria-activedescendant":d.activeId,"aria-label":c,id:s,onClick:()=>!n&&d.toggle(),onKeyDown:b=>!n&&d.onTriggerKeyDown(b),className:`block w-full ${i??""}`,style:o,children:z("span",{className:"block w-full truncate text-left",children:I})}),d.open&&z(ur,{id:d.listId,tone:"select",items:u,value:p,focusIdx:d.focusIdx,onFocus:d.setFocusIdx,onPick:d.pick,listRef:d.listRef})]})}import{jsx as xe,jsxs as Re}from"react/jsx-runtime";var mr="font-mono text-[length:var(--size-label,12px)]",pr="font-semibold uppercase tracking-[0.22em] text-fg";function Gt(e){return`${e??mr} ${pr}`}function Vt(){return xe("span",{className:"text-accent",children:" *"})}function fr({children:e,required:t,labelFace:n}){return Re("span",{className:Gt(n),children:[e,t?xe(Vt,{}):null]})}function gr({label:e,required:t,hint:n,separate:r,htmlFor:i,labelFace:o,className:a,children:s}){let c=a?`flex flex-col gap-2 ${a}`:"flex flex-col gap-2",u=n?xe("span",{className:"font-mono text-[11px] uppercase tracking-[0.22em] text-fg-dim",children:n}):null;return r||n?Re("div",{className:c,children:[Re("label",{htmlFor:i,className:Gt(o),children:[e,t?xe(Vt,{}):null]}),s,u]}):Re("label",{htmlFor:i,className:c,children:[xe(fr,{required:t,labelFace:o,children:e}),s]})}export{Rr as a,kr as b,Ar as c,st as d,Oe as e,yr as f,hr as g,br as h,xr as i,tn as j,nn as k,Cr as l,Sr as m,Fe as n,Pe as o,fe as p,vr as q,Ie as r,dn as s,mn as t,Fr as u,Ur as v,bt as w,$e as x,$r as y,Hr as z,fn as A,qr as B,Kr as C,gn as D,Wr as E,hn as F,Br as G,zr as H,xt as I,Qr as J,Jr as K,Zr as L,no as M,ro as N,Lr as O,pt as P,we as Q,qe as R,yo as S,Rt as T,ko as U,Kn as V,Mo as W,zn as X,Gn as Y,Bo as Z,zo as _,Go as $,Vo as aa,jn as ba,Qo as ca,$t as da,Jo as ea,Jn as fa,Zo as ga,er as ha,ai as ia,ar as ja,ur as ka,cr as la,fr as ma,gr as na};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as G,e as K,i as V,k as C,p as E,q as z,s as k}from"./chunk-CABIEVEL.js";var I="".replace(/\/+$/,"");var q="x-forwarded-for";function j(e){let t=(e??"").split(",").map(r=>r.trim()).filter(Boolean);return t.length>0?t[t.length-1]:null}var $e="x-forwarded-host";function Z(e,t,r){let n={};return e&&(n[$e]=e),t&&r==="uncached"&&(n[q]=t),n}function Q(e){if(e?.cache==="no-store"||e?.cache==="no-cache")return"uncached";if(e?.cache==="force-cache")return"data-cached";let t=e?.next?.revalidate;return typeof t=="number"&&t>0?"data-cached":"uncached"}var X="x-storefront-site",Y="x-storefront-host",ee="x-storefront-preview";var te={contentHash:"bff238ceb7836a0a",schema:1,mediaFields:{ImageBlock:["src"],LogoBlock:["src"],Flex:["bgImage"],FeaturedCover:["image"],LongRead:["image"],Banner:["imageSrc"],Timeline:["imageSrc"],Logos:["items[].src"],ContactLocations:["locations[].photo"],HeroSingle:["imageFocal","mediaImage","mediaImage2","mediaVideo","poster"],HeroSlide:["mediaImage","mediaVideo","poster"],PostCard:["image"],Gallery:["othersCards[].image","othersCards[].photos[].src","vehicleCards[].image","vehicleCards[].photos[].src","wheelCards[].image","wheelCards[].photos[].src"],GalleryItem:["image","photos[].src"],Manifesto:["imageSrc"],SectionHeader:["logoSrc"],IntroBleed:["imageSrc","imageSrcMobile"],Split:["imageSrc","textBgSrc"],ProcessSteps:["steps[].image"],DetailRows:["rows[].image"],PaymentBadges:["badges[].src"]},mediaKeyNames:["bgImage","image","imageFocal","imageSrc","imageSrcMobile","logoSrc","mediaImage","mediaImage2","mediaVideo","photo","poster","src","textBgSrc"],snapshotObjects:{ProductGrid:{source:{keep:["slug"]}},GalleryItem:{product:{keep:["code","finish"]}},FeaturedCover:{source:{keep:["slug"]}},LongRead:{source:{keep:["slug"]}}},hydratedLists:{Events:["posts"],SubscribeBlogs:["posts"]},technicalStateKeys:["focal","focalPhone","imageFocal","imageFocal2","imageFocal2Phone","imageFocalPhone"]};var Ue="shop_access_token",re="shop_refresh_token",$=null;function B(){k.removeItem(Ue),k.removeItem(re)}var P={getAccess(){return $},takeLegacyRefresh(){let e=k.getItem(re);return B(),e},setTokens(e){$=e,B()},clear(){$=null,B()}};function Le(e){return!!e.src}function b(e){let t=e.finishes.filter(Le);if(t.length===e.finishes.length)return e;let r=e.defaultFinish&&t.some(n=>n.name===e.defaultFinish)?e.defaultFinish:null;return{...e,finishes:t,defaultFinish:r}}function Ne(e){return e.listable!==!1}function U(e){return e.map(b).filter(Ne)}var ie=["fill","stroke","stop-color","color","flood-color","lighting-color","solid-color"],ae=new Set(["none","transparent","currentcolor","inherit","initial","unset","context-fill","context-stroke"]),T={black:[0,0,0],white:[255,255,255],gray:[128,128,128],grey:[128,128,128],darkgray:[169,169,169],darkgrey:[169,169,169],dimgray:[105,105,105],dimgrey:[105,105,105],lightgray:[211,211,211],lightgrey:[211,211,211],gainsboro:[220,220,220],silver:[192,192,192],whitesmoke:[245,245,245]},ce=12,le=/\burl\(/i,ue=new RegExp(`(?<![-\\w])(${ie.join("|")})(\\s*=\\s*)(["'])([^"']*)\\3`,"gi"),me=new RegExp(`((?:^|[;{\\s"'])(?:${ie.join("|")})\\s*:\\s*)([^;}"'<>]+)`,"gi"),Me=/<svg\b([^>]*)>/i,He=/\bfill\s*[=:]/i;function De(e){let t=e.replace(ue,(r,n,s,o,l)=>{let u=ne(l);return u===null?r:`${n}${s}${o}${u}${o}`}).replace(me,(r,n,s)=>{let o=ne(s);return o===null?r:`${n}${o}`});return t=t.replace(Me,(r,n)=>He.test(n)?r:`<svg fill="#ffffff"${n}>`),t}function ne(e){let t=/!important/i.test(e),r=e.replace(/!important/gi,"").trim().toLowerCase();if(!r||le.test(r)||ae.has(r))return null;let n=r in T?[...T[r],1]:de(r);if(!n)return null;let[s,o,l,u]=n;if(Math.max(s,o,l)-Math.min(s,o,l)>ce)return null;let m=We(255-s,255-o,255-l,u);return t?`${m} !important`:m}function We(e,t,r,n){if(n<1)return`rgba(${e}, ${t}, ${r}, ${n})`;let s=o=>o.toString(16).padStart(2,"0");return`#${s(e)}${s(t)}${s(r)}`}function de(e){return e.startsWith("#")?Je(e):e.startsWith("rgb")?Ge(e):e.startsWith("hsl")?Ve(e):null}function Je(e){let t=e.slice(1),r=1;if(t.length===3||t.length===4)t.length===4&&(r=parseInt(t[3]+t[3],16)/255),t=t.slice(0,3).split("").map(n=>n+n).join("");else if(t.length===6||t.length===8)t.length===8&&(r=parseInt(t.slice(6,8),16)/255),t=t.slice(0,6);else return null;return/^[0-9a-f]{6}$/.test(t)?[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),r]:null}function Ge(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[r,n]=t.split("/"),s=r.split(/[\s,]+/).filter(Boolean).slice(0,3);if(s.length<3)return null;let o=s.map(u=>u.endsWith("%")?Math.round(parseFloat(u)/100*255):Math.round(parseFloat(u)));if(o.some(u=>Number.isNaN(u)))return null;let l=n?O(n):Ke(r);return[o[0],o[1],o[2],l]}function Ke(e){let t=e.split(/[\s,]+/).filter(Boolean);return t.length>=4?O(t[3]):1}function O(e){let t=e.trim().endsWith("%")?parseFloat(e)/100:parseFloat(e);return Number.isNaN(t)?1:t}function Ve(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[r,n]=t.split("/"),s=r.split(/[\s,]+/).filter(Boolean);if(s.length<3)return null;let o=parseFloat(s[0]),l=parseFloat(s[1])/100,u=parseFloat(s[2])/100;if([o,l,u].some(qe=>Number.isNaN(qe)))return null;let m=n?O(n):s.length>=4?O(s[3]):1,[y,f,S]=ze(o,l,u);return[y,f,S,m]}function ze(e,t,r){let n=(1-Math.abs(2*r-1))*t,s=(e%360+360)%360/60,o=n*(1-Math.abs(s%2-1)),l=0,u=0,m=0;s<1?[l,u,m]=[n,o,0]:s<2?[l,u,m]=[o,n,0]:s<3?[l,u,m]=[0,n,o]:s<4?[l,u,m]=[0,o,n]:s<5?[l,u,m]=[o,0,n]:[l,u,m]=[n,0,o];let y=r-n/2;return[Math.round((l+y)*255),Math.round((u+y)*255),Math.round((m+y)*255)]}var se=512*1024;function L(e){return/\.svg(\?|$)/i.test(e)}function je(e){return`data:image/svg+xml,${encodeURIComponent(De(e))}`}function Ze(e){let t=e.replace(/!important/gi,"").trim().toLowerCase();if(!t||le.test(t)||ae.has(t))return null;let r=t in T?[...T[t],1]:de(t);if(!r)return null;let[n,s,o]=r;return Math.max(n,s,o)-Math.min(n,s,o)>ce?null:(.2126*n+.7152*s+.0722*o)/255}function Qe(e){let t=[],r=n=>{let s=Ze(n);s!==null&&t.push(s)};for(let n of e.matchAll(ue))r(n[4]);for(let n of e.matchAll(me))r(n[2]);return t.length?t.reduce((n,s)=>n+s,0)/t.length<.5:null}var oe=/^(?:\uFEFF|\s+|<\?xml[^>]*\?>|<!--[\s\S]*?-->|<!DOCTYPE\s+svg[^>[]*>)/i;function Xe(e){let t=e;for(let r=oe.exec(t);r&&r[0].length>0;r=oe.exec(t))t=t.slice(r[0].length);return/^<svg[\s>/]/i.test(t)}async function Ye(e,t){if(!L(e))return null;try{let r=await fetch(e,{signal:t,redirect:"manual"});if(!r.ok)return null;let n=Number(r.headers.get("content-length"));if(Number.isFinite(n)&&n>se)return null;let s=await r.text();return s.length>se?null:Xe(s)?s:null}catch{return null}}async function pe(e,t){let r=await Ye(e,t);return r===null?null:{reversed:je(r),inkIsDark:Qe(r)}}function ge(){return G().siteId()}var et="",g=class extends Error{constructor(t,r,n){super(r),this.status=t,this.data=n}},H="Unable to reach the server. This could be a problem with your internet connection, or the server may be undergoing maintenance or an upgrade. Please try again shortly.",tt=new Set([502,503,504]),N=0,rt="This editor runs on its host's own backend, which does not serve this request.",nt=5e3,st=15e3,ot=()=>typeof window>"u"?nt:st;function xe(e){let t=(e.method??"GET").toUpperCase();if(!(e.body!=null||t!=="GET"&&t!=="HEAD")&&!(e.audience!=null&&e.audience!=="shop")&&typeof AbortSignal?.timeout=="function")return AbortSignal.timeout(ot())}var he=e=>e instanceof Error&&e.name==="TimeoutError",ye=(e,t)=>tt.has(e)?H:t,it=["admin","venue"],Ce="admin";function tr(e){Ce=it.includes(e)?e:"admin"}function at(){return Ce}var ct=/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{1,8})*$/,ke=null;function rr(e){ke=e&&ct.test(e)?e:null}function lt(){return ke}function ut(e){if(typeof window>"u"||!e.startsWith("/api/v1/"))return e;let t=E();return!t||/[?&]site=/.test(e)?e:F(e,`site=${encodeURIComponent(t)}`)}async function i(e,t={}){let{token:r,baseUrl:n,headers:s,audience:o,...l}=t;if(typeof window<"u"&&!K())throw new g(N,rt,null);if(typeof window>"u"&&n===void 0)throw new Error(`apiFetch(${JSON.stringify(e)}) ran on the server without an explicit baseUrl. The API_URL default it would inherit is browser-only (the prod image bakes NEXT_PUBLIC_API_URL="" for same-origin use, which a Node fetch cannot resolve). Pass a base explicitly: \`await backendOpts()\` (or baseUrl: PRODUCT_FETCH_BASE) for product reads, or the server-only PRODUCT_BACKEND_URL env for other backend surfaces.`);let u=typeof FormData<"u"&&l.body instanceof FormData,m;try{m=await fetch(`${n??et}${ut(e)}`,{...l,headers:{...u?{}:{"Content-Type":"application/json"},...r?{Authorization:`Bearer ${r}`}:{},...o===null?{}:{"X-Portal-Audience":o??"shop"},...s},signal:l.signal??xe({...l,audience:o})})}catch(S){throw S instanceof TypeError||he(S)?new g(N,H,null):S}let y;try{y=await m.text()}catch(S){throw he(S)?new g(N,H,null):S}let f=null;if(y)try{f=JSON.parse(y)}catch{throw new g(m.status,m.ok?"Expected JSON but received a non-JSON response":ye(m.status,m.statusText),y)}if(!m.ok){let S=(f&&typeof f=="object"&&"detail"in f&&typeof f.detail=="string"?f.detail:null)??ye(m.status,m.statusText);throw new g(m.status,S,f)}return f}var A=null;async function Te(){return A||(A=mt().finally(()=>{A=null}),A)}async function mt(){let e=P.takeLegacyRefresh(),t=await dt.refresh(e??void 0);return P.setTokens(t.access),t.access}async function Oe(){return P.getAccess()??Te()}async function d(e,t={}){let r;try{r=await Oe()}catch{throw P.clear(),new g(401,"Not signed in",null)}try{return await i(e,{...t,token:r})}catch(n){if(!(n instanceof g)||n.status!==401)throw n;try{let s=await Te();return await i(e,{...t,token:s})}catch{throw P.clear(),n}}}async function fe(e,t={}){if(P.getAccess())try{return{data:await d(e,t),asShopper:!0}}catch(r){if(!(r instanceof g)||r.status!==401)throw r}return{data:await i(e,t),asShopper:!1}}async function Se(){let e=await d("/api/auth/me/");if(e.portal!=="shop")throw P.clear(),new g(403,"This session is not valid for this shop.",null);return e}var dt={login:(e,t)=>i("/api/auth/login/",{method:"POST",body:JSON.stringify({email:e,password:t,portal:"shop"}),credentials:"include"}),refresh:e=>i("/api/auth/refresh/",{method:"POST",body:JSON.stringify(e?{refresh:e,portal:"shop"}:{portal:"shop"}),credentials:"include"}),logout:async()=>{P.clear();try{await i("/api/auth/logout/",{method:"POST",body:JSON.stringify({portal:"shop"}),credentials:"include"})}catch{}},restoreSession:async()=>{let e=await Oe();return await Se(),e},me:Se,updateMe:e=>d("/api/auth/me/",{method:"PATCH",body:JSON.stringify(e)}),changePassword:(e,t)=>d("/api/auth/me/",{method:"PATCH",body:JSON.stringify({password:t,old_password:e})}),changeEmail:(e,t)=>d("/api/shop-portal/change-email/",{method:"POST",body:JSON.stringify({new_email:e,current_password:t})}),myProfile:()=>d("/api/shop-portal/profile/"),updateMyProfile:e=>d("/api/shop-portal/profile/",{method:"PATCH",body:JSON.stringify(e)}),myAddresses:()=>d("/api/shop-portal/delivery-locations/"),createAddress:e=>d("/api/shop-portal/delivery-locations/",{method:"POST",body:JSON.stringify(e)}),updateAddress:(e,t)=>d(`/api/shop-portal/delivery-locations/${e}/`,{method:"PATCH",body:JSON.stringify(t)}),deleteAddress:e=>d(`/api/shop-portal/delivery-locations/${e}/`,{method:"DELETE"}),passwordResetRequest:e=>i("/api/auth/password-reset/",{method:"POST",body:JSON.stringify({email:e})}),passwordResetConfirm:(e,t,r)=>i("/api/auth/password-reset/confirm/",{method:"POST",body:JSON.stringify({uid:e,token:t,new_password:r})}),brands:()=>d("/api/products/brands/"),myOrders:()=>d("/api/shop-portal/orders/").then(e=>e.results),myOrder:e=>d(`/api/shop-portal/orders/${e}/`),cancelOrder:e=>d(`/api/shop-portal/orders/${e}/cancel/`,{method:"POST"}),myReturns:e=>d(`/api/shop-portal/returns/${e?`?order=${encodeURIComponent(e)}`:""}`).then(t=>t.results),createReturn:e=>d("/api/shop-portal/returns/",{method:"POST",body:JSON.stringify(e)}),withdrawReturn:e=>d(`/api/shop-portal/returns/${e}/cancel/`,{method:"POST"}),uploadReturnPhoto:(e,t)=>{let r=new FormData;return r.append("claim_item",e),r.append("file",t),r.append("media_type",t.type.startsWith("video/")?"video":"image"),d("/api/shop-portal/return-media/",{method:"POST",body:r})}};function h(e){if(typeof e=="string")return e.startsWith("/media/")?V(e):e;if(Array.isArray(e))return e.map(h);if(e&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=r==="captions"&&n&&typeof n=="object"&&!Array.isArray(n)?Object.fromEntries(Object.entries(n).map(([s,o])=>[h(s),o])):h(n);return t}return e}var ve=typeof window>"u"&&I!=="",pt=ve?I:"",gt=z,w=()=>({baseUrl:gt(),audience:null});function a(e,t){let r=t?`?process=${encodeURIComponent(t)}`:"";return`/api/v1${e}${r}`}var ht=100,Pe=50;function Fe(e,t,r){let n=new URLSearchParams;for(let[s,o]of Object.entries(t))o!=null&&o!==""&&n.set(s,String(o));return n.set("pageSize",String(ht)),r&&n.set("cursor",r),`/api/v1${e}?${n.toString()}`}function yt(e,t){return Fe("/wheels",{process:e},t)}function ft(e,t,r){return Fe("/products",{kind:e.join(","),make:t?.make,model:t?.model,year:t?.year,modification:t?.modification},r)}function St(e){if(!e)return null;try{return new URL(e,"http://cursor.invalid").searchParams.get("cursor")}catch{return null}}async function we(e,t,r=()=>!1){let n=[],s=null;try{for(let o=0;o<Pe;o++){let l=await i(await t(s),await c());if(n.push(...l.results),s=St(l.next),!s)break}s&&console.warn(`[${e}] stopped at ${Pe} pages (${n.length} rows); catalog may be truncated`)}catch(o){if(r(o))throw o;console.warn(`[${e}] product API unavailable, returning []`,o)}return n}var Pt=e=>e instanceof g&&e.status===400;function wt(e){return e.flatMap(t=>t.kind==="alloy-wheel"?U([t]):[t])}async function Ee(){return(await bt()).host}async function bt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js"),t=await e(),r=o=>o?.split(",")[0]?.split(":")[0]?.trim().toLowerCase()||null,n=r(t.get(Y)??t.get("x-forwarded-host")??t.get("host")),s=r(t.get("host"));return{host:n,matchesRequestHost:n!==null&&n===s}}catch{return{host:null,matchesRequestHost:!1}}}async function At(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return j((await e()).get(q))}catch{return null}}async function Rt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(X)||null}catch{return null}}async function _t(){let e=await Rt();if(e)return`site=${encodeURIComponent(e)}`;let t=await Ee();return t?`host=${encodeURIComponent(t)}`:""}async function p(e){if(typeof window<"u"){let t=E();return t?F(e,`site=${encodeURIComponent(t)}`):e}return F(e,await _t())}function F(e,t){return t?`${e}${e.includes("?")?"&":"?"}${t}`:e}var xt="preview";async function Ct(){if(typeof window<"u")return null;try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(ee)}catch{return null}}async function kt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get("user-agent")}catch{return null}}async function M(e,t){let r=await Ct();if(r===null)return[await p(e),await c(t)];let n=F(await p(e),`${xt}=${encodeURIComponent(r)}`),{next:s,cache:o,...l}=t??{},u=await c({...l,cache:"no-store"}),m=await kt();return m&&(u.headers={...u.headers,"user-agent":m}),[n,u]}async function Tt(e){if(!ve)return;let[t,r]=await Promise.all([Ee(),At()]),n=Z(t,r,e);return Object.keys(n).length>0?n:void 0}async function c(e){let t=await Tt(Q(e)),r={baseUrl:pt,...e};return t&&(r.headers={...t,...e?.headers}),r}var R=typeof window>"u";function _(e,t){let r=new URLSearchParams;for(let[s,o]of Object.entries(t))o!==void 0&&o!==""&&r.set(s,String(o));let n=r.toString();return`/api/v1/fitment${e}${n?`?${n}`:""}`}var ar={listMakes:async e=>{if(R){let{fitmentData:r}=await import("./fitment-data-CRPBBPU6.js");return r.makes(e)}return(await i(_("/makes",{region:e}),w())).results},listModels:async(e,t)=>{if(R){let{fitmentData:n}=await import("./fitment-data-CRPBBPU6.js");return n.models(e,t)}return(await i(_("/models",{make:e,region:t}),w())).results},listYears:async(e,t,r)=>{if(R){let{fitmentData:s}=await import("./fitment-data-CRPBBPU6.js");return s.years(e,t,r)}return(await i(_("/years",{make:e,model:t,region:r}),w())).results},listModifications:async(e,t,r,n)=>{if(R){let{fitmentData:o}=await import("./fitment-data-CRPBBPU6.js");return o.modifications(e,t,r,n)}return(await i(_("/modifications",{make:e,model:t,year:r,region:n}),w())).results},getStockFitment:async(e,t,r,n,s)=>{if(R){let{fitmentData:o}=await import("./fitment-data-CRPBBPU6.js");return o.stockFitment(e,t,r,n,s)}return i(_("/stock-fitment",{make:e,model:t,year:r,modification:n,region:s}),w())}},cr={listWheels:async e=>{let t=await we("products.listWheels",async r=>await p(yt(e,r)));return U(h(t))},listCatalog:async(e,t)=>{if(e.length===0)throw new Error("products.listCatalog() needs at least one kind. An empty list would omit `kind`, which the contract reads as `alloy-wheel` \u2014 so the call would silently return the wheel catalog instead of nothing.");let r=await we("products.listCatalog",async n=>await p(ft(e,t,n)),Pt);return wt(h(r))},getWheel:async e=>b(h(await i(await p(a(`/wheels/${e}`)),await c()))),getTyre:async e=>h(await i(await p(a(`/tyres/${e}`)),await c())),listBundles:async()=>{try{return await i(await p(a("/bundles")),await c())}catch{return[]}},getBundle:async e=>i(await p(a(`/bundles/${e}`)),await c()),listGalleryBuilds:async(e={})=>{let{process:t=null,wheelSlug:r=null}=e;if(typeof window>"u"){let{listGalleryBuilds:n}=await import("./gallery-builds-data-TD3QJK7L.js");return h(n(t,r))}try{let n=new URLSearchParams;t&&n.set("process",t),r&&n.set("wheelSlug",r);let s=n.toString(),o=await i(`/api/v1/gallery-builds${s?`?${s}`:""}`,w());return h(o.results)}catch(n){return console.warn("[products.listGalleryBuilds] product API unavailable, returning []",n),[]}},getSite:async()=>i(await p(a("/site")),await c()),getSiteBySlug:async e=>i(`${a("/site")}?${new URLSearchParams({site:e})}`,typeof window>"u"?await c():void 0),listBrands:async()=>{try{return(await i(await p(a("/brands")),await c())).results??[]}catch(e){return console.warn("[products.listBrands] product API unavailable, returning []",e),[]}},listBrandsForSite:async e=>(await i(`${a("/brands")}?${new URLSearchParams({site:e})}`,typeof window>"u"?await c():void 0)).results??[],listPages:async()=>h(await i(await p(a("/pages")),await c())),listProductTemplates:async()=>{try{return await i(await p(a("/product-templates")),await c())}catch(e){return console.warn("[products.listProductTemplates] unavailable, returning []",e),[]}},listDynamicPages:async e=>{let t=e?`?recordType=${encodeURIComponent(e)}`:"";try{return await i(await p(`${a("/dynamic-pages")}${t}`),await c())}catch(r){if(r instanceof g&&r.status===404)return[];throw r}},getRecord:async(e,t)=>{try{return await i(await p(a(`/records/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)),await c())}catch(r){if(r instanceof g&&r.status===404)return null;throw r}},listRecordKeys:async e=>{try{let t=await i(await p(a(`/records/${encodeURIComponent(e)}`)),await c({cache:"no-store"}));return Array.isArray(t?.keys)?t.keys.filter(r=>typeof r=="string"&&r!==""):[]}catch(t){if(t instanceof g&&t.status===404)return[];throw t}},listProductTypeChoices:async()=>{try{return await i(await p(a("/product-type-choices")),await c())}catch(e){return console.warn("[products.listProductTypeChoices] unavailable, returning []",e),[]}},listFieldUsage:async()=>{try{return await i(await p(a("/field-usage")),await c())}catch(e){return console.warn("[products.listFieldUsage] unavailable, returning []",e),[]}},getPage:async(e,t={})=>{let r=t.record?`?record=${encodeURIComponent(t.record)}`:"",[n,s]=await M(a(`/pages/${e}`)+r,t.revalidate!==void 0?{next:{revalidate:t.revalidate}}:void 0);return h(await i(n,s))},listBlogPosts:async()=>{try{return(await i(a("/blog-posts"),await c())).map(t=>({...t,coverImage:C(t.coverImage)??""}))}catch(e){return console.warn("[products.listBlogPosts] blog API unavailable, returning []",e),[]}},getBlogPost:async e=>{let t=await i(a(`/blog-posts/${e}`),await c());return{...t,coverImage:C(t.coverImage)??""}},createOrder:async e=>i(a("/orders"),await c({method:"POST",body:JSON.stringify(e)})),createOrderAuthed:async e=>d(a("/orders"),await c({method:"POST",body:JSON.stringify(e)})),lookupOrder:async e=>i(a("/orders/lookup"),await c({method:"POST",body:JSON.stringify(e)})),createPaymentIntent:async e=>i(a("/payments/intent"),await c({method:"POST",body:JSON.stringify(e)})),createPaypalOrder:async e=>i(a("/payments/paypal/order"),await c({method:"POST",body:JSON.stringify(e)})),capturePaypalOrder:async e=>i(a("/payments/paypal/capture"),await c({method:"POST",body:JSON.stringify(e)})),createAfterpayCheckout:async e=>i(a("/payments/afterpay/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureAfterpayPayment:async e=>i(a("/payments/afterpay/capture"),await c({method:"POST",body:JSON.stringify(e)})),chargeSquare:async e=>i(a("/payments/square/charge"),await c({method:"POST",body:JSON.stringify(e)})),createGocardlessBillingRequest:async e=>i(a("/payments/gocardless/billing-request"),await c({method:"POST",body:JSON.stringify(e)})),completeGocardlessPayment:async e=>i(a("/payments/gocardless/complete"),await c({method:"POST",body:JSON.stringify(e)})),createZipCheckout:async e=>i(a("/payments/zip/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureZipPayment:async e=>i(a("/payments/zip/capture"),await c({method:"POST",body:JSON.stringify(e)})),createKlarnaCheckout:async e=>i(a("/payments/klarna/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureKlarnaPayment:async e=>i(a("/payments/klarna/capture"),await c({method:"POST",body:JSON.stringify(e)})),createStockAlert:async e=>i(a("/stock-alerts"),await c({method:"POST",body:JSON.stringify(e)})),createPreOrderIntent:async e=>i(a("/pre-order-intents"),await c({method:"POST",body:JSON.stringify(e)})),createNewsletterSubscription:async e=>i(a("/newsletter-subscriptions"),await c({method:"POST",body:JSON.stringify(e)})),unsubscribeNewsletter:async e=>i(a("/newsletter-unsubscribe"),await c({method:"POST",body:JSON.stringify(e)})),captureCart:async e=>i(a("/carts"),await c({method:"POST",body:JSON.stringify(e)})),restoreCart:async e=>i(a("/carts/restore"),await c({method:"POST",body:JSON.stringify(e)})),unsubscribeCartReminders:async e=>i(a("/carts/unsubscribe"),await c({method:"POST",body:JSON.stringify(e)})),listReviews:async(e={})=>{let t=new URLSearchParams;e.limit&&t.set("limit",String(e.limit)),e.designCode&&t.set("designCode",e.designCode);let r=a("/reviews"),n=t.toString();try{return await i(await p(n?`${r}?${n}`:r),await c())}catch(s){return console.warn("[products.listReviews] product API unavailable, returning []",s),[]}},submitReview:async e=>i(a("/reviews"),await c({method:"POST",body:JSON.stringify(e)})),getForm:async e=>i(a(`/forms/${encodeURIComponent(e)}`),await c()),submitForm:async(e,t)=>i(a(`/forms/${encodeURIComponent(e)}/submissions`),await c({method:"POST",body:JSON.stringify(t)})),listShippingMethods:async()=>{try{return await i(a("/shipping-methods"),await c())}catch(e){return console.warn("[products.listShippingMethods] product API unavailable, returning []",e),[]}},listCountrySubdivisions:async e=>{try{return await i(a(`/countries/${encodeURIComponent(e)}/subdivisions`),await c())}catch(t){return console.warn("[products.listCountrySubdivisions] unavailable, returning []",t),[]}},quoteCart:async e=>{let t=a("/cart/quote"),r=await c({method:"POST",body:JSON.stringify(e)});return e.couponCode?(await fe(t,r)).data:i(t,r)},validateCoupon:async e=>{let{data:t,asShopper:r}=await fe(a("/coupons/validate"),await c({method:"POST",body:JSON.stringify(e)}));return{...t,askedAsShopper:r}},getHeaderSettings:async()=>{let e=xe({method:"GET"}),t=await i(...await M(a("/header-settings"),{signal:e})),r=C(t.logoUrl),n=null,s=null;if(r&&L(r)){let o=await pe(r,e);o&&(n=o.reversed,s=o.inkIsDark)}return{...t,logoUrl:r,logoReversed:n,logoInkIsDark:s}},getThemeSettings:async()=>i(...await M(a("/theme-settings"))),getChatSettings:async()=>i(await p(a("/chat-settings")),await c())},lr={listServices:async()=>{try{return await i(a("/bookings/services"),await c())}catch(e){return console.warn("[bookings.listServices] API unavailable, returning []",e),{results:[],currency:"USD"}}},getAvailability:async(e,t)=>i(a(`/bookings/availability?service=${encodeURIComponent(e)}&date=${t}`),await c()),create:async e=>i(a("/bookings"),await c({method:"POST",body:JSON.stringify(e)})),get:async e=>i(a(`/bookings/manage/${encodeURIComponent(e)}`),await c()),cancel:async e=>i(a(`/bookings/manage/${encodeURIComponent(e)}/cancel`),await c({method:"POST"})),createPaymentIntent:async e=>i(a("/bookings/payments/intent"),await c({method:"POST",body:JSON.stringify({manageToken:e})}))},D=class extends Error{constructor(r,n){super(`Slug "${r}" exists on ${n} websites; a site is required to pick one.`);this.slug=r;this.count=n;this.name="AmbiguousPageSlugError"}},x=e=>e?`/api/storefront/header-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/header-settings/",be=e=>e?`/api/storefront/theme-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/theme-settings/",Ae=e=>e?`/api/storefront/chat-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/chat-settings/",Re=e=>`/api/storefront/social-settings/?${new URLSearchParams({site:e})}`,W=e=>`/api/storefront/sites/${encodeURIComponent(e)}/`,Ot=e=>`${W(e)}currencies/`,vt="/api/storefront/media/ingest/",J=class extends Error{constructor(){super("This editor is not connected to a website, so an upload has nowhere to go. Open the page from the website the file should belong to, then try again."),this.name="MediaUploadDestinationError"}};function Ft(){let e=ge();if(!e)throw new J;return`${vt}?${new URLSearchParams({site:e})}`}var v={"X-Puck-Media-Manifest":te.contentHash},ur=Ie({});function Ie(e){return(t,r={})=>{let n=lt(),s=e.headers||n?{...n?{"Accept-Language":n}:{},...e.headers,...r.headers}:void 0;return i(t,{...r,...e.baseUrl!==void 0?{baseUrl:e.baseUrl}:{},...s?{headers:s}:{},audience:e.audience??at()})}}function Et(e={}){let t=Ie(e);return{findPageBySlug:async(r,n,s)=>{let o=new URLSearchParams({slug:r});s&&o.set("site",s);let l=await t(`/api/storefront/pages/?${o.toString()}`,{token:n}),u=Array.isArray(l)?l:l.results??[];if(!s&&u.length>1)throw new D(r,u.length);return u[0]??null},getPageById:(r,n)=>t(`/api/storefront/pages/${r}/`,{token:n}),saveLayout:(r,n,s,o,l)=>t(`/api/storefront/pages/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n,expected_updated_at:o,...l?{client_id:l}:{}}),token:s}),publishPage:(r,n,s)=>t(`/api/storefront/pages/${r}/publish/`,{method:"POST",body:s?JSON.stringify({expected_updated_at:s}):void 0,token:n}),createPagePreviewLink:(r,n)=>t(`/api/storefront/pages/${r}/preview-link/`,{method:"POST",token:n}),claimPageEditLock:(r,n,s,o=!1)=>t(`/api/storefront/pages/${r}/edit-lock/`,{method:"POST",body:JSON.stringify({client_id:s,takeover:o}),token:n}),releasePageEditLock:(r,n)=>t(`/api/storefront/pages/${r}/edit-lock/`,{method:"DELETE",token:n}),createTemplate:(r,n,s)=>t("/api/storefront/page-templates/",{method:"POST",body:JSON.stringify({name:r,layout:n}),headers:v,token:s}),getTemplate:(r,n)=>t(`/api/storefront/page-templates/${r}/`,{token:n}),saveTemplateLayout:(r,n,s)=>t(`/api/storefront/page-templates/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n}),headers:v,token:s}),listTemplatePages:async(r,n)=>{let s=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(r)}`,{token:n});return Array.isArray(s)?s:s.results??[]},findTemplatePageBySlug:async(r,n,s)=>{let o=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(r)}&slug=${encodeURIComponent(n)}`,{token:s});return(Array.isArray(o)?o:o.results??[])[0]??null},createTemplatePage:(r,n,s)=>t("/api/storefront/template-pages/",{method:"POST",body:JSON.stringify({template:r,...n}),headers:v,token:s}),saveTemplatePageLayout:(r,n,s)=>t(`/api/storefront/template-pages/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n}),headers:v,token:s}),deleteTemplatePage:(r,n,s)=>t(`/api/storefront/template-pages/${r}/`,{method:"DELETE",token:n,...s?.keepalive?{keepalive:!0}:{}}),listPages:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("site",n);let o=await t(`/api/storefront/pages/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]},createPage:(r,n,s,o)=>t("/api/storefront/pages/",{method:"POST",body:JSON.stringify({title:r,slug:n,layout:s}),token:o}),deletePage:(r,n)=>t(`/api/storefront/pages/${r}/`,{method:"DELETE",token:n}),getHeaderSettings:(r,n)=>t(x(n),{token:r}),listMenus:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("site",n);let o=await t(`/api/storefront/menus/?${s}`,{token:r});return Array.isArray(o)?o:o.results??[]},listBlogPosts:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.visibleOnly&&s.set("is_visible","true"),n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/blog-posts/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]},listFieldUsage:async(r,n)=>{let s=await t(`/api/storefront/field-usage/?site=${encodeURIComponent(n)}`,{token:r});return Array.isArray(s?.entries)?s.entries:[]},listCategories:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.visibleOnly&&s.set("is_visible","true"),n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/categories/?${s.toString()}`,{token:r});return[...Array.isArray(o)?o:o.results??[]].sort((u,m)=>u.sort_order-m.sort_order||u.name.localeCompare(m.name))},listForms:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/forms/?${s.toString()}`,{token:r});return[...Array.isArray(o)?o:o.results??[]].sort((u,m)=>u.title.localeCompare(m.title))},listWheelSummaries:async(r,n={})=>{let s=new URLSearchParams;n.siteId&&s.set("site",n.siteId);let o=s.toString(),l=await t(`/api/storefront/wheel-curations/summaries/${o?`?${o}`:""}`,{token:r});return h(l)},listProducts:async(r,n={})=>{let s=new URLSearchParams;n.kinds?.length&&s.set("kind",n.kinds.join(",")),n.siteId&&s.set("site",n.siteId);let o=s.toString(),l=await t(`/api/storefront/products/${o?`?${o}`:""}`,{token:r});return h(l)},getWheelDetail:async(r,n,s={})=>{let o=new URLSearchParams({slug:n});return s.siteId&&o.set("site",s.siteId),b(h(await t(`/api/storefront/wheel-curations/detail/?${o.toString()}`,{token:r})))},updateHeaderSettings:(r,n,s)=>t(x(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getSite:(r,n)=>t(W(r),{token:n}),listSites:async r=>{let n=await t("/api/storefront/sites/?no_page=true",{token:r});return Array.isArray(n)?n:n.results??[]},listSiteCurrencies:async(r,n)=>{let s=await t(Ot(r),{token:n});return Array.isArray(s)?s:[]},updateSite:(r,n,s)=>t(W(r),{method:"PATCH",body:JSON.stringify(n),token:s}),getThemeSettings:(r,n)=>t(be(n),{token:r}),updateThemeSettings:(r,n,s)=>t(be(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getChatSettings:(r,n)=>t(Ae(n),{token:r}),updateChatSettings:(r,n,s)=>t(Ae(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getSocialSettings:(r,n)=>t(Re(n),{token:r}),updateSocialSettings:(r,n,s)=>t(Re(s),{method:"PATCH",body:JSON.stringify(r),token:n}),uploadHeaderLogo:(r,n,s)=>{let o=new FormData;return o.append("logo",r),t(x(s),{method:"PATCH",body:o,token:n})},clearHeaderLogo:(r,n)=>t(x(n),{method:"PATCH",body:JSON.stringify({logo:null}),token:r}),setHeaderLogoFromAsset:(r,n,s)=>t(x(s),{method:"PATCH",body:JSON.stringify({logo_asset_id:r}),token:n}),uploadMedia:async(r,n)=>{let s=new FormData;return s.append("file",r),t(Ft(),{method:"POST",body:s,token:n})},listMedia:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("kind",n);let o=await t(`/api/storefront/media-assets/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]}}}var mr=Et();export{te as a,I as b,Z as c,Q as d,P as e,Le as f,L as g,ge as h,et as i,g as j,H as k,N as l,tr as m,rr as n,i as o,dt as p,Ee as q,bt as r,At as s,Rt as t,Ct as u,ar as v,cr as w,lr as x,D as y,ur as z,mr as A};
|
|
1
|
+
import{c as G,e as K,i as V,k as C,p as E,q as z,s as k}from"./chunk-G3PA7RZW.js";var I="".replace(/\/+$/,"");var q="x-forwarded-for";function j(e){let t=(e??"").split(",").map(r=>r.trim()).filter(Boolean);return t.length>0?t[t.length-1]:null}var $e="x-forwarded-host";function Z(e,t,r){let n={};return e&&(n[$e]=e),t&&r==="uncached"&&(n[q]=t),n}function Q(e){if(e?.cache==="no-store"||e?.cache==="no-cache")return"uncached";if(e?.cache==="force-cache")return"data-cached";let t=e?.next?.revalidate;return typeof t=="number"&&t>0?"data-cached":"uncached"}var X="x-storefront-site",Y="x-storefront-host",ee="x-storefront-preview";var te={contentHash:"bff238ceb7836a0a",schema:1,mediaFields:{ImageBlock:["src"],LogoBlock:["src"],Flex:["bgImage"],FeaturedCover:["image"],LongRead:["image"],Banner:["imageSrc"],Timeline:["imageSrc"],Logos:["items[].src"],ContactLocations:["locations[].photo"],HeroSingle:["imageFocal","mediaImage","mediaImage2","mediaVideo","poster"],HeroSlide:["mediaImage","mediaVideo","poster"],PostCard:["image"],Gallery:["othersCards[].image","othersCards[].photos[].src","vehicleCards[].image","vehicleCards[].photos[].src","wheelCards[].image","wheelCards[].photos[].src"],GalleryItem:["image","photos[].src"],Manifesto:["imageSrc"],SectionHeader:["logoSrc"],IntroBleed:["imageSrc","imageSrcMobile"],Split:["imageSrc","textBgSrc"],ProcessSteps:["steps[].image"],DetailRows:["rows[].image"],PaymentBadges:["badges[].src"]},mediaKeyNames:["bgImage","image","imageFocal","imageSrc","imageSrcMobile","logoSrc","mediaImage","mediaImage2","mediaVideo","photo","poster","src","textBgSrc"],snapshotObjects:{ProductGrid:{source:{keep:["slug"]}},GalleryItem:{product:{keep:["code","finish"]}},FeaturedCover:{source:{keep:["slug"]}},LongRead:{source:{keep:["slug"]}}},hydratedLists:{Events:["posts"],SubscribeBlogs:["posts"]},technicalStateKeys:["focal","focalPhone","imageFocal","imageFocal2","imageFocal2Phone","imageFocalPhone"]};var Ue="shop_access_token",re="shop_refresh_token",$=null;function B(){k.removeItem(Ue),k.removeItem(re)}var P={getAccess(){return $},takeLegacyRefresh(){let e=k.getItem(re);return B(),e},setTokens(e){$=e,B()},clear(){$=null,B()}};function Le(e){return!!e.src}function b(e){let t=e.finishes.filter(Le);if(t.length===e.finishes.length)return e;let r=e.defaultFinish&&t.some(n=>n.name===e.defaultFinish)?e.defaultFinish:null;return{...e,finishes:t,defaultFinish:r}}function Ne(e){return e.listable!==!1}function U(e){return e.map(b).filter(Ne)}var ie=["fill","stroke","stop-color","color","flood-color","lighting-color","solid-color"],ae=new Set(["none","transparent","currentcolor","inherit","initial","unset","context-fill","context-stroke"]),T={black:[0,0,0],white:[255,255,255],gray:[128,128,128],grey:[128,128,128],darkgray:[169,169,169],darkgrey:[169,169,169],dimgray:[105,105,105],dimgrey:[105,105,105],lightgray:[211,211,211],lightgrey:[211,211,211],gainsboro:[220,220,220],silver:[192,192,192],whitesmoke:[245,245,245]},ce=12,le=/\burl\(/i,ue=new RegExp(`(?<![-\\w])(${ie.join("|")})(\\s*=\\s*)(["'])([^"']*)\\3`,"gi"),me=new RegExp(`((?:^|[;{\\s"'])(?:${ie.join("|")})\\s*:\\s*)([^;}"'<>]+)`,"gi"),Me=/<svg\b([^>]*)>/i,He=/\bfill\s*[=:]/i;function De(e){let t=e.replace(ue,(r,n,s,o,l)=>{let u=ne(l);return u===null?r:`${n}${s}${o}${u}${o}`}).replace(me,(r,n,s)=>{let o=ne(s);return o===null?r:`${n}${o}`});return t=t.replace(Me,(r,n)=>He.test(n)?r:`<svg fill="#ffffff"${n}>`),t}function ne(e){let t=/!important/i.test(e),r=e.replace(/!important/gi,"").trim().toLowerCase();if(!r||le.test(r)||ae.has(r))return null;let n=r in T?[...T[r],1]:de(r);if(!n)return null;let[s,o,l,u]=n;if(Math.max(s,o,l)-Math.min(s,o,l)>ce)return null;let m=We(255-s,255-o,255-l,u);return t?`${m} !important`:m}function We(e,t,r,n){if(n<1)return`rgba(${e}, ${t}, ${r}, ${n})`;let s=o=>o.toString(16).padStart(2,"0");return`#${s(e)}${s(t)}${s(r)}`}function de(e){return e.startsWith("#")?Je(e):e.startsWith("rgb")?Ge(e):e.startsWith("hsl")?Ve(e):null}function Je(e){let t=e.slice(1),r=1;if(t.length===3||t.length===4)t.length===4&&(r=parseInt(t[3]+t[3],16)/255),t=t.slice(0,3).split("").map(n=>n+n).join("");else if(t.length===6||t.length===8)t.length===8&&(r=parseInt(t.slice(6,8),16)/255),t=t.slice(0,6);else return null;return/^[0-9a-f]{6}$/.test(t)?[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16),r]:null}function Ge(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[r,n]=t.split("/"),s=r.split(/[\s,]+/).filter(Boolean).slice(0,3);if(s.length<3)return null;let o=s.map(u=>u.endsWith("%")?Math.round(parseFloat(u)/100*255):Math.round(parseFloat(u)));if(o.some(u=>Number.isNaN(u)))return null;let l=n?O(n):Ke(r);return[o[0],o[1],o[2],l]}function Ke(e){let t=e.split(/[\s,]+/).filter(Boolean);return t.length>=4?O(t[3]):1}function O(e){let t=e.trim().endsWith("%")?parseFloat(e)/100:parseFloat(e);return Number.isNaN(t)?1:t}function Ve(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[r,n]=t.split("/"),s=r.split(/[\s,]+/).filter(Boolean);if(s.length<3)return null;let o=parseFloat(s[0]),l=parseFloat(s[1])/100,u=parseFloat(s[2])/100;if([o,l,u].some(qe=>Number.isNaN(qe)))return null;let m=n?O(n):s.length>=4?O(s[3]):1,[y,f,S]=ze(o,l,u);return[y,f,S,m]}function ze(e,t,r){let n=(1-Math.abs(2*r-1))*t,s=(e%360+360)%360/60,o=n*(1-Math.abs(s%2-1)),l=0,u=0,m=0;s<1?[l,u,m]=[n,o,0]:s<2?[l,u,m]=[o,n,0]:s<3?[l,u,m]=[0,n,o]:s<4?[l,u,m]=[0,o,n]:s<5?[l,u,m]=[o,0,n]:[l,u,m]=[n,0,o];let y=r-n/2;return[Math.round((l+y)*255),Math.round((u+y)*255),Math.round((m+y)*255)]}var se=512*1024;function L(e){return/\.svg(\?|$)/i.test(e)}function je(e){return`data:image/svg+xml,${encodeURIComponent(De(e))}`}function Ze(e){let t=e.replace(/!important/gi,"").trim().toLowerCase();if(!t||le.test(t)||ae.has(t))return null;let r=t in T?[...T[t],1]:de(t);if(!r)return null;let[n,s,o]=r;return Math.max(n,s,o)-Math.min(n,s,o)>ce?null:(.2126*n+.7152*s+.0722*o)/255}function Qe(e){let t=[],r=n=>{let s=Ze(n);s!==null&&t.push(s)};for(let n of e.matchAll(ue))r(n[4]);for(let n of e.matchAll(me))r(n[2]);return t.length?t.reduce((n,s)=>n+s,0)/t.length<.5:null}var oe=/^(?:\uFEFF|\s+|<\?xml[^>]*\?>|<!--[\s\S]*?-->|<!DOCTYPE\s+svg[^>[]*>)/i;function Xe(e){let t=e;for(let r=oe.exec(t);r&&r[0].length>0;r=oe.exec(t))t=t.slice(r[0].length);return/^<svg[\s>/]/i.test(t)}async function Ye(e,t){if(!L(e))return null;try{let r=await fetch(e,{signal:t,redirect:"manual"});if(!r.ok)return null;let n=Number(r.headers.get("content-length"));if(Number.isFinite(n)&&n>se)return null;let s=await r.text();return s.length>se?null:Xe(s)?s:null}catch{return null}}async function pe(e,t){let r=await Ye(e,t);return r===null?null:{reversed:je(r),inkIsDark:Qe(r)}}function ge(){return G().siteId()}var et="",g=class extends Error{constructor(t,r,n){super(r),this.status=t,this.data=n}},H="Unable to reach the server. This could be a problem with your internet connection, or the server may be undergoing maintenance or an upgrade. Please try again shortly.",tt=new Set([502,503,504]),N=0,rt="This editor runs on its host's own backend, which does not serve this request.",nt=5e3,st=15e3,ot=()=>typeof window>"u"?nt:st;function xe(e){let t=(e.method??"GET").toUpperCase();if(!(e.body!=null||t!=="GET"&&t!=="HEAD")&&!(e.audience!=null&&e.audience!=="shop")&&typeof AbortSignal?.timeout=="function")return AbortSignal.timeout(ot())}var he=e=>e instanceof Error&&e.name==="TimeoutError",ye=(e,t)=>tt.has(e)?H:t,it=["admin","venue"],Ce="admin";function tr(e){Ce=it.includes(e)?e:"admin"}function at(){return Ce}var ct=/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{1,8})*$/,ke=null;function rr(e){ke=e&&ct.test(e)?e:null}function lt(){return ke}function ut(e){if(typeof window>"u"||!e.startsWith("/api/v1/"))return e;let t=E();return!t||/[?&]site=/.test(e)?e:F(e,`site=${encodeURIComponent(t)}`)}async function i(e,t={}){let{token:r,baseUrl:n,headers:s,audience:o,...l}=t;if(typeof window<"u"&&!K())throw new g(N,rt,null);if(typeof window>"u"&&n===void 0)throw new Error(`apiFetch(${JSON.stringify(e)}) ran on the server without an explicit baseUrl. The API_URL default it would inherit is browser-only (the prod image bakes NEXT_PUBLIC_API_URL="" for same-origin use, which a Node fetch cannot resolve). Pass a base explicitly: \`await backendOpts()\` (or baseUrl: PRODUCT_FETCH_BASE) for product reads, or the server-only PRODUCT_BACKEND_URL env for other backend surfaces.`);let u=typeof FormData<"u"&&l.body instanceof FormData,m;try{m=await fetch(`${n??et}${ut(e)}`,{...l,headers:{...u?{}:{"Content-Type":"application/json"},...r?{Authorization:`Bearer ${r}`}:{},...o===null?{}:{"X-Portal-Audience":o??"shop"},...s},signal:l.signal??xe({...l,audience:o})})}catch(S){throw S instanceof TypeError||he(S)?new g(N,H,null):S}let y;try{y=await m.text()}catch(S){throw he(S)?new g(N,H,null):S}let f=null;if(y)try{f=JSON.parse(y)}catch{throw new g(m.status,m.ok?"Expected JSON but received a non-JSON response":ye(m.status,m.statusText),y)}if(!m.ok){let S=(f&&typeof f=="object"&&"detail"in f&&typeof f.detail=="string"?f.detail:null)??ye(m.status,m.statusText);throw new g(m.status,S,f)}return f}var A=null;async function Te(){return A||(A=mt().finally(()=>{A=null}),A)}async function mt(){let e=P.takeLegacyRefresh(),t=await dt.refresh(e??void 0);return P.setTokens(t.access),t.access}async function Oe(){return P.getAccess()??Te()}async function d(e,t={}){let r;try{r=await Oe()}catch{throw P.clear(),new g(401,"Not signed in",null)}try{return await i(e,{...t,token:r})}catch(n){if(!(n instanceof g)||n.status!==401)throw n;try{let s=await Te();return await i(e,{...t,token:s})}catch{throw P.clear(),n}}}async function fe(e,t={}){if(P.getAccess())try{return{data:await d(e,t),asShopper:!0}}catch(r){if(!(r instanceof g)||r.status!==401)throw r}return{data:await i(e,t),asShopper:!1}}async function Se(){let e=await d("/api/auth/me/");if(e.portal!=="shop")throw P.clear(),new g(403,"This session is not valid for this shop.",null);return e}var dt={login:(e,t)=>i("/api/auth/login/",{method:"POST",body:JSON.stringify({email:e,password:t,portal:"shop"}),credentials:"include"}),refresh:e=>i("/api/auth/refresh/",{method:"POST",body:JSON.stringify(e?{refresh:e,portal:"shop"}:{portal:"shop"}),credentials:"include"}),logout:async()=>{P.clear();try{await i("/api/auth/logout/",{method:"POST",body:JSON.stringify({portal:"shop"}),credentials:"include"})}catch{}},restoreSession:async()=>{let e=await Oe();return await Se(),e},me:Se,updateMe:e=>d("/api/auth/me/",{method:"PATCH",body:JSON.stringify(e)}),changePassword:(e,t)=>d("/api/auth/me/",{method:"PATCH",body:JSON.stringify({password:t,old_password:e})}),changeEmail:(e,t)=>d("/api/shop-portal/change-email/",{method:"POST",body:JSON.stringify({new_email:e,current_password:t})}),myProfile:()=>d("/api/shop-portal/profile/"),updateMyProfile:e=>d("/api/shop-portal/profile/",{method:"PATCH",body:JSON.stringify(e)}),myAddresses:()=>d("/api/shop-portal/delivery-locations/"),createAddress:e=>d("/api/shop-portal/delivery-locations/",{method:"POST",body:JSON.stringify(e)}),updateAddress:(e,t)=>d(`/api/shop-portal/delivery-locations/${e}/`,{method:"PATCH",body:JSON.stringify(t)}),deleteAddress:e=>d(`/api/shop-portal/delivery-locations/${e}/`,{method:"DELETE"}),passwordResetRequest:e=>i("/api/auth/password-reset/",{method:"POST",body:JSON.stringify({email:e})}),passwordResetConfirm:(e,t,r)=>i("/api/auth/password-reset/confirm/",{method:"POST",body:JSON.stringify({uid:e,token:t,new_password:r})}),brands:()=>d("/api/products/brands/"),myOrders:()=>d("/api/shop-portal/orders/").then(e=>e.results),myOrder:e=>d(`/api/shop-portal/orders/${e}/`),cancelOrder:e=>d(`/api/shop-portal/orders/${e}/cancel/`,{method:"POST"}),myReturns:e=>d(`/api/shop-portal/returns/${e?`?order=${encodeURIComponent(e)}`:""}`).then(t=>t.results),createReturn:e=>d("/api/shop-portal/returns/",{method:"POST",body:JSON.stringify(e)}),withdrawReturn:e=>d(`/api/shop-portal/returns/${e}/cancel/`,{method:"POST"}),uploadReturnPhoto:(e,t)=>{let r=new FormData;return r.append("claim_item",e),r.append("file",t),r.append("media_type",t.type.startsWith("video/")?"video":"image"),d("/api/shop-portal/return-media/",{method:"POST",body:r})}};function h(e){if(typeof e=="string")return e.startsWith("/media/")?V(e):e;if(Array.isArray(e))return e.map(h);if(e&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=r==="captions"&&n&&typeof n=="object"&&!Array.isArray(n)?Object.fromEntries(Object.entries(n).map(([s,o])=>[h(s),o])):h(n);return t}return e}var ve=typeof window>"u"&&I!=="",pt=ve?I:"",gt=z,w=()=>({baseUrl:gt(),audience:null});function a(e,t){let r=t?`?process=${encodeURIComponent(t)}`:"";return`/api/v1${e}${r}`}var ht=100,Pe=50;function Fe(e,t,r){let n=new URLSearchParams;for(let[s,o]of Object.entries(t))o!=null&&o!==""&&n.set(s,String(o));return n.set("pageSize",String(ht)),r&&n.set("cursor",r),`/api/v1${e}?${n.toString()}`}function yt(e,t){return Fe("/wheels",{process:e},t)}function ft(e,t,r){return Fe("/products",{kind:e.join(","),make:t?.make,model:t?.model,year:t?.year,modification:t?.modification},r)}function St(e){if(!e)return null;try{return new URL(e,"http://cursor.invalid").searchParams.get("cursor")}catch{return null}}async function we(e,t,r=()=>!1){let n=[],s=null;try{for(let o=0;o<Pe;o++){let l=await i(await t(s),await c());if(n.push(...l.results),s=St(l.next),!s)break}s&&console.warn(`[${e}] stopped at ${Pe} pages (${n.length} rows); catalog may be truncated`)}catch(o){if(r(o))throw o;console.warn(`[${e}] product API unavailable, returning []`,o)}return n}var Pt=e=>e instanceof g&&e.status===400;function wt(e){return e.flatMap(t=>t.kind==="alloy-wheel"?U([t]):[t])}async function Ee(){return(await bt()).host}async function bt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js"),t=await e(),r=o=>o?.split(",")[0]?.split(":")[0]?.trim().toLowerCase()||null,n=r(t.get(Y)??t.get("x-forwarded-host")??t.get("host")),s=r(t.get("host"));return{host:n,matchesRequestHost:n!==null&&n===s}}catch{return{host:null,matchesRequestHost:!1}}}async function At(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return j((await e()).get(q))}catch{return null}}async function Rt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(X)||null}catch{return null}}async function _t(){let e=await Rt();if(e)return`site=${encodeURIComponent(e)}`;let t=await Ee();return t?`host=${encodeURIComponent(t)}`:""}async function p(e){if(typeof window<"u"){let t=E();return t?F(e,`site=${encodeURIComponent(t)}`):e}return F(e,await _t())}function F(e,t){return t?`${e}${e.includes("?")?"&":"?"}${t}`:e}var xt="preview";async function Ct(){if(typeof window<"u")return null;try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(ee)}catch{return null}}async function kt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get("user-agent")}catch{return null}}async function M(e,t){let r=await Ct();if(r===null)return[await p(e),await c(t)];let n=F(await p(e),`${xt}=${encodeURIComponent(r)}`),{next:s,cache:o,...l}=t??{},u=await c({...l,cache:"no-store"}),m=await kt();return m&&(u.headers={...u.headers,"user-agent":m}),[n,u]}async function Tt(e){if(!ve)return;let[t,r]=await Promise.all([Ee(),At()]),n=Z(t,r,e);return Object.keys(n).length>0?n:void 0}async function c(e){let t=await Tt(Q(e)),r={baseUrl:pt,...e};return t&&(r.headers={...t,...e?.headers}),r}var R=typeof window>"u";function _(e,t){let r=new URLSearchParams;for(let[s,o]of Object.entries(t))o!==void 0&&o!==""&&r.set(s,String(o));let n=r.toString();return`/api/v1/fitment${e}${n?`?${n}`:""}`}var ar={listMakes:async e=>{if(R){let{fitmentData:r}=await import("./fitment-data-SGKQISTO.js");return r.makes(e)}return(await i(_("/makes",{region:e}),w())).results},listModels:async(e,t)=>{if(R){let{fitmentData:n}=await import("./fitment-data-SGKQISTO.js");return n.models(e,t)}return(await i(_("/models",{make:e,region:t}),w())).results},listYears:async(e,t,r)=>{if(R){let{fitmentData:s}=await import("./fitment-data-SGKQISTO.js");return s.years(e,t,r)}return(await i(_("/years",{make:e,model:t,region:r}),w())).results},listModifications:async(e,t,r,n)=>{if(R){let{fitmentData:o}=await import("./fitment-data-SGKQISTO.js");return o.modifications(e,t,r,n)}return(await i(_("/modifications",{make:e,model:t,year:r,region:n}),w())).results},getStockFitment:async(e,t,r,n,s)=>{if(R){let{fitmentData:o}=await import("./fitment-data-SGKQISTO.js");return o.stockFitment(e,t,r,n,s)}return i(_("/stock-fitment",{make:e,model:t,year:r,modification:n,region:s}),w())}},cr={listWheels:async e=>{let t=await we("products.listWheels",async r=>await p(yt(e,r)));return U(h(t))},listCatalog:async(e,t)=>{if(e.length===0)throw new Error("products.listCatalog() needs at least one kind. An empty list would omit `kind`, which the contract reads as `alloy-wheel` \u2014 so the call would silently return the wheel catalog instead of nothing.");let r=await we("products.listCatalog",async n=>await p(ft(e,t,n)),Pt);return wt(h(r))},getWheel:async e=>b(h(await i(await p(a(`/wheels/${e}`)),await c()))),getTyre:async e=>h(await i(await p(a(`/tyres/${e}`)),await c())),listBundles:async()=>{try{return await i(await p(a("/bundles")),await c())}catch{return[]}},getBundle:async e=>i(await p(a(`/bundles/${e}`)),await c()),listGalleryBuilds:async(e={})=>{let{process:t=null,wheelSlug:r=null}=e;if(typeof window>"u"){let{listGalleryBuilds:n}=await import("./gallery-builds-data-TD3QJK7L.js");return h(n(t,r))}try{let n=new URLSearchParams;t&&n.set("process",t),r&&n.set("wheelSlug",r);let s=n.toString(),o=await i(`/api/v1/gallery-builds${s?`?${s}`:""}`,w());return h(o.results)}catch(n){return console.warn("[products.listGalleryBuilds] product API unavailable, returning []",n),[]}},getSite:async()=>i(await p(a("/site")),await c()),getSiteBySlug:async e=>i(`${a("/site")}?${new URLSearchParams({site:e})}`,typeof window>"u"?await c():void 0),listBrands:async()=>{try{return(await i(await p(a("/brands")),await c())).results??[]}catch(e){return console.warn("[products.listBrands] product API unavailable, returning []",e),[]}},listBrandsForSite:async e=>(await i(`${a("/brands")}?${new URLSearchParams({site:e})}`,typeof window>"u"?await c():void 0)).results??[],listPages:async()=>h(await i(await p(a("/pages")),await c())),listProductTemplates:async()=>{try{return await i(await p(a("/product-templates")),await c())}catch(e){return console.warn("[products.listProductTemplates] unavailable, returning []",e),[]}},listDynamicPages:async e=>{let t=e?`?recordType=${encodeURIComponent(e)}`:"";try{return await i(await p(`${a("/dynamic-pages")}${t}`),await c())}catch(r){if(r instanceof g&&r.status===404)return[];throw r}},getRecord:async(e,t)=>{try{return await i(await p(a(`/records/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)),await c())}catch(r){if(r instanceof g&&r.status===404)return null;throw r}},listRecordKeys:async e=>{try{let t=await i(await p(a(`/records/${encodeURIComponent(e)}`)),await c({cache:"no-store"}));return Array.isArray(t?.keys)?t.keys.filter(r=>typeof r=="string"&&r!==""):[]}catch(t){if(t instanceof g&&t.status===404)return[];throw t}},listProductTypeChoices:async()=>{try{return await i(await p(a("/product-type-choices")),await c())}catch(e){return console.warn("[products.listProductTypeChoices] unavailable, returning []",e),[]}},listFieldUsage:async()=>{try{return await i(await p(a("/field-usage")),await c())}catch(e){return console.warn("[products.listFieldUsage] unavailable, returning []",e),[]}},getPage:async(e,t={})=>{let r=t.record?`?record=${encodeURIComponent(t.record)}`:"",[n,s]=await M(a(`/pages/${e}`)+r,t.revalidate!==void 0?{next:{revalidate:t.revalidate}}:void 0);return h(await i(n,s))},listBlogPosts:async()=>{try{return(await i(a("/blog-posts"),await c())).map(t=>({...t,coverImage:C(t.coverImage)??""}))}catch(e){return console.warn("[products.listBlogPosts] blog API unavailable, returning []",e),[]}},getBlogPost:async e=>{let t=await i(a(`/blog-posts/${e}`),await c());return{...t,coverImage:C(t.coverImage)??""}},createOrder:async e=>i(a("/orders"),await c({method:"POST",body:JSON.stringify(e)})),createOrderAuthed:async e=>d(a("/orders"),await c({method:"POST",body:JSON.stringify(e)})),lookupOrder:async e=>i(a("/orders/lookup"),await c({method:"POST",body:JSON.stringify(e)})),createPaymentIntent:async e=>i(a("/payments/intent"),await c({method:"POST",body:JSON.stringify(e)})),createPaypalOrder:async e=>i(a("/payments/paypal/order"),await c({method:"POST",body:JSON.stringify(e)})),capturePaypalOrder:async e=>i(a("/payments/paypal/capture"),await c({method:"POST",body:JSON.stringify(e)})),createAfterpayCheckout:async e=>i(a("/payments/afterpay/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureAfterpayPayment:async e=>i(a("/payments/afterpay/capture"),await c({method:"POST",body:JSON.stringify(e)})),chargeSquare:async e=>i(a("/payments/square/charge"),await c({method:"POST",body:JSON.stringify(e)})),createGocardlessBillingRequest:async e=>i(a("/payments/gocardless/billing-request"),await c({method:"POST",body:JSON.stringify(e)})),completeGocardlessPayment:async e=>i(a("/payments/gocardless/complete"),await c({method:"POST",body:JSON.stringify(e)})),createZipCheckout:async e=>i(a("/payments/zip/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureZipPayment:async e=>i(a("/payments/zip/capture"),await c({method:"POST",body:JSON.stringify(e)})),createKlarnaCheckout:async e=>i(a("/payments/klarna/checkout"),await c({method:"POST",body:JSON.stringify(e)})),captureKlarnaPayment:async e=>i(a("/payments/klarna/capture"),await c({method:"POST",body:JSON.stringify(e)})),createStockAlert:async e=>i(a("/stock-alerts"),await c({method:"POST",body:JSON.stringify(e)})),createPreOrderIntent:async e=>i(a("/pre-order-intents"),await c({method:"POST",body:JSON.stringify(e)})),createNewsletterSubscription:async e=>i(a("/newsletter-subscriptions"),await c({method:"POST",body:JSON.stringify(e)})),unsubscribeNewsletter:async e=>i(a("/newsletter-unsubscribe"),await c({method:"POST",body:JSON.stringify(e)})),captureCart:async e=>i(a("/carts"),await c({method:"POST",body:JSON.stringify(e)})),restoreCart:async e=>i(a("/carts/restore"),await c({method:"POST",body:JSON.stringify(e)})),unsubscribeCartReminders:async e=>i(a("/carts/unsubscribe"),await c({method:"POST",body:JSON.stringify(e)})),listReviews:async(e={})=>{let t=new URLSearchParams;e.limit&&t.set("limit",String(e.limit)),e.designCode&&t.set("designCode",e.designCode);let r=a("/reviews"),n=t.toString();try{return await i(await p(n?`${r}?${n}`:r),await c())}catch(s){return console.warn("[products.listReviews] product API unavailable, returning []",s),[]}},submitReview:async e=>i(a("/reviews"),await c({method:"POST",body:JSON.stringify(e)})),getForm:async e=>i(a(`/forms/${encodeURIComponent(e)}`),await c()),submitForm:async(e,t)=>i(a(`/forms/${encodeURIComponent(e)}/submissions`),await c({method:"POST",body:JSON.stringify(t)})),listShippingMethods:async()=>{try{return await i(a("/shipping-methods"),await c())}catch(e){return console.warn("[products.listShippingMethods] product API unavailable, returning []",e),[]}},listCountrySubdivisions:async e=>{try{return await i(a(`/countries/${encodeURIComponent(e)}/subdivisions`),await c())}catch(t){return console.warn("[products.listCountrySubdivisions] unavailable, returning []",t),[]}},quoteCart:async e=>{let t=a("/cart/quote"),r=await c({method:"POST",body:JSON.stringify(e)});return e.couponCode?(await fe(t,r)).data:i(t,r)},validateCoupon:async e=>{let{data:t,asShopper:r}=await fe(a("/coupons/validate"),await c({method:"POST",body:JSON.stringify(e)}));return{...t,askedAsShopper:r}},getHeaderSettings:async()=>{let e=xe({method:"GET"}),t=await i(...await M(a("/header-settings"),{signal:e})),r=C(t.logoUrl),n=null,s=null;if(r&&L(r)){let o=await pe(r,e);o&&(n=o.reversed,s=o.inkIsDark)}return{...t,logoUrl:r,logoReversed:n,logoInkIsDark:s}},getThemeSettings:async()=>i(...await M(a("/theme-settings"))),getChatSettings:async()=>i(await p(a("/chat-settings")),await c())},lr={listServices:async()=>{try{return await i(a("/bookings/services"),await c())}catch(e){return console.warn("[bookings.listServices] API unavailable, returning []",e),{results:[],currency:"USD"}}},getAvailability:async(e,t)=>i(a(`/bookings/availability?service=${encodeURIComponent(e)}&date=${t}`),await c()),create:async e=>i(a("/bookings"),await c({method:"POST",body:JSON.stringify(e)})),get:async e=>i(a(`/bookings/manage/${encodeURIComponent(e)}`),await c()),cancel:async e=>i(a(`/bookings/manage/${encodeURIComponent(e)}/cancel`),await c({method:"POST"})),createPaymentIntent:async e=>i(a("/bookings/payments/intent"),await c({method:"POST",body:JSON.stringify({manageToken:e})}))},D=class extends Error{constructor(r,n){super(`Slug "${r}" exists on ${n} websites; a site is required to pick one.`);this.slug=r;this.count=n;this.name="AmbiguousPageSlugError"}},x=e=>e?`/api/storefront/header-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/header-settings/",be=e=>e?`/api/storefront/theme-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/theme-settings/",Ae=e=>e?`/api/storefront/chat-settings/?${new URLSearchParams({site:e})}`:"/api/storefront/chat-settings/",Re=e=>`/api/storefront/social-settings/?${new URLSearchParams({site:e})}`,W=e=>`/api/storefront/sites/${encodeURIComponent(e)}/`,Ot=e=>`${W(e)}currencies/`,vt="/api/storefront/media/ingest/",J=class extends Error{constructor(){super("This editor is not connected to a website, so an upload has nowhere to go. Open the page from the website the file should belong to, then try again."),this.name="MediaUploadDestinationError"}};function Ft(){let e=ge();if(!e)throw new J;return`${vt}?${new URLSearchParams({site:e})}`}var v={"X-Puck-Media-Manifest":te.contentHash},ur=Ie({});function Ie(e){return(t,r={})=>{let n=lt(),s=e.headers||n?{...n?{"Accept-Language":n}:{},...e.headers,...r.headers}:void 0;return i(t,{...r,...e.baseUrl!==void 0?{baseUrl:e.baseUrl}:{},...s?{headers:s}:{},audience:e.audience??at()})}}function Et(e={}){let t=Ie(e);return{findPageBySlug:async(r,n,s)=>{let o=new URLSearchParams({slug:r});s&&o.set("site",s);let l=await t(`/api/storefront/pages/?${o.toString()}`,{token:n}),u=Array.isArray(l)?l:l.results??[];if(!s&&u.length>1)throw new D(r,u.length);return u[0]??null},getPageById:(r,n)=>t(`/api/storefront/pages/${r}/`,{token:n}),saveLayout:(r,n,s,o,l)=>t(`/api/storefront/pages/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n,expected_updated_at:o,...l?{client_id:l}:{}}),token:s}),publishPage:(r,n,s)=>t(`/api/storefront/pages/${r}/publish/`,{method:"POST",body:s?JSON.stringify({expected_updated_at:s}):void 0,token:n}),createPagePreviewLink:(r,n)=>t(`/api/storefront/pages/${r}/preview-link/`,{method:"POST",token:n}),claimPageEditLock:(r,n,s,o=!1)=>t(`/api/storefront/pages/${r}/edit-lock/`,{method:"POST",body:JSON.stringify({client_id:s,takeover:o}),token:n}),releasePageEditLock:(r,n)=>t(`/api/storefront/pages/${r}/edit-lock/`,{method:"DELETE",token:n}),createTemplate:(r,n,s)=>t("/api/storefront/page-templates/",{method:"POST",body:JSON.stringify({name:r,layout:n}),headers:v,token:s}),getTemplate:(r,n)=>t(`/api/storefront/page-templates/${r}/`,{token:n}),saveTemplateLayout:(r,n,s)=>t(`/api/storefront/page-templates/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n}),headers:v,token:s}),listTemplatePages:async(r,n)=>{let s=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(r)}`,{token:n});return Array.isArray(s)?s:s.results??[]},findTemplatePageBySlug:async(r,n,s)=>{let o=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(r)}&slug=${encodeURIComponent(n)}`,{token:s});return(Array.isArray(o)?o:o.results??[])[0]??null},createTemplatePage:(r,n,s)=>t("/api/storefront/template-pages/",{method:"POST",body:JSON.stringify({template:r,...n}),headers:v,token:s}),saveTemplatePageLayout:(r,n,s)=>t(`/api/storefront/template-pages/${r}/`,{method:"PATCH",body:JSON.stringify({layout:n}),headers:v,token:s}),deleteTemplatePage:(r,n,s)=>t(`/api/storefront/template-pages/${r}/`,{method:"DELETE",token:n,...s?.keepalive?{keepalive:!0}:{}}),listPages:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("site",n);let o=await t(`/api/storefront/pages/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]},createPage:(r,n,s,o)=>t("/api/storefront/pages/",{method:"POST",body:JSON.stringify({title:r,slug:n,layout:s}),token:o}),deletePage:(r,n)=>t(`/api/storefront/pages/${r}/`,{method:"DELETE",token:n}),getHeaderSettings:(r,n)=>t(x(n),{token:r}),listMenus:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("site",n);let o=await t(`/api/storefront/menus/?${s}`,{token:r});return Array.isArray(o)?o:o.results??[]},listBlogPosts:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.visibleOnly&&s.set("is_visible","true"),n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/blog-posts/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]},listFieldUsage:async(r,n)=>{let s=await t(`/api/storefront/field-usage/?site=${encodeURIComponent(n)}`,{token:r});return Array.isArray(s?.entries)?s.entries:[]},listCategories:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.visibleOnly&&s.set("is_visible","true"),n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/categories/?${s.toString()}`,{token:r});return[...Array.isArray(o)?o:o.results??[]].sort((u,m)=>u.sort_order-m.sort_order||u.name.localeCompare(m.name))},listForms:async(r,n={})=>{let s=new URLSearchParams({no_page:"true"});n.siteId&&s.set("site",n.siteId);let o=await t(`/api/storefront/forms/?${s.toString()}`,{token:r});return[...Array.isArray(o)?o:o.results??[]].sort((u,m)=>u.title.localeCompare(m.title))},listWheelSummaries:async(r,n={})=>{let s=new URLSearchParams;n.siteId&&s.set("site",n.siteId);let o=s.toString(),l=await t(`/api/storefront/wheel-curations/summaries/${o?`?${o}`:""}`,{token:r});return h(l)},listProducts:async(r,n={})=>{let s=new URLSearchParams;n.kinds?.length&&s.set("kind",n.kinds.join(",")),n.siteId&&s.set("site",n.siteId);let o=s.toString(),l=await t(`/api/storefront/products/${o?`?${o}`:""}`,{token:r});return h(l)},getWheelDetail:async(r,n,s={})=>{let o=new URLSearchParams({slug:n});return s.siteId&&o.set("site",s.siteId),b(h(await t(`/api/storefront/wheel-curations/detail/?${o.toString()}`,{token:r})))},updateHeaderSettings:(r,n,s)=>t(x(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getSite:(r,n)=>t(W(r),{token:n}),listSites:async r=>{let n=await t("/api/storefront/sites/?no_page=true",{token:r});return Array.isArray(n)?n:n.results??[]},listSiteCurrencies:async(r,n)=>{let s=await t(Ot(r),{token:n});return Array.isArray(s)?s:[]},updateSite:(r,n,s)=>t(W(r),{method:"PATCH",body:JSON.stringify(n),token:s}),getThemeSettings:(r,n)=>t(be(n),{token:r}),updateThemeSettings:(r,n,s)=>t(be(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getChatSettings:(r,n)=>t(Ae(n),{token:r}),updateChatSettings:(r,n,s)=>t(Ae(s),{method:"PATCH",body:JSON.stringify(r),token:n}),getSocialSettings:(r,n)=>t(Re(n),{token:r}),updateSocialSettings:(r,n,s)=>t(Re(s),{method:"PATCH",body:JSON.stringify(r),token:n}),uploadHeaderLogo:(r,n,s)=>{let o=new FormData;return o.append("logo",r),t(x(s),{method:"PATCH",body:o,token:n})},clearHeaderLogo:(r,n)=>t(x(n),{method:"PATCH",body:JSON.stringify({logo:null}),token:r}),setHeaderLogoFromAsset:(r,n,s)=>t(x(s),{method:"PATCH",body:JSON.stringify({logo_asset_id:r}),token:n}),uploadMedia:async(r,n)=>{let s=new FormData;return s.append("file",r),t(Ft(),{method:"POST",body:s,token:n})},listMedia:async(r,n)=>{let s=new URLSearchParams({no_page:"true"});n&&s.set("kind",n);let o=await t(`/api/storefront/media-assets/?${s.toString()}`,{token:r});return Array.isArray(o)?o:o.results??[]}}}var mr=Et();export{te as a,I as b,Z as c,Q as d,P as e,Le as f,L as g,ge as h,et as i,g as j,H as k,N as l,tr as m,rr as n,i as o,dt as p,Ee as q,bt as r,At as s,Rt as t,Ct as u,ar as v,cr as w,lr as x,D as y,ur as z,mr as A};
|