efficient-storefront-blocks 0.41.0 → 0.42.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-storefront-blocks",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "description": "The EFFICIENT storefront's website editor — the website builder assembled with the storefront's own sections — for an app that edits a storefront website inside its own page. Built from the efficient-storefront-blocks repository.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Efficient Pty Ltd",
@@ -1 +0,0 @@
1
- import{f as rt,i as me,r as ot,t as it,u as at,w as q}from"./chunk-XJGBK3UK.js";import{Ba as pe,Ca as et,Fa as Me,Ga as tt}from"./chunk-XNJCKTT5.js";import{e as Ze,q as nt,s as re}from"./chunk-DZX6J2J6.js";import{createContext as Zt,useContext as en,useEffect as tn,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 o=r.prices?.[t];if(typeof o!="number"||!Number.isFinite(o)||o<=0)return null;n+=o*r.wheels}return n}var De=4,cr=1,dr={unit:"set",spares:0,spareSide:"left"};function lt(e){return e.unit==="single"?1:De+e.spares}function pr(e,t){return[{partNumber:e.partNumber,wheels:lt(t),prices:e.prices}]}function mr(e,t){let n=lt(t)-De;if(n<=0||e.length===0)return e;let r=Xt(e),o=r?r[t.spareSide]:0;return e.map((i,a)=>a===o?{...i,wheels:i.wheels+n}:i)}function Xt(e){let t,n;for(let r=0;r<e.length;r+=1){let o=e[r].hand;if(o!=="left"&&o!=="right")continue;if((o==="left"?t:n)!==void 0)return null;o==="left"?t=r:n=r}return t!==void 0&&n!==void 0?{left:t,right:n}:null}function Jt(e,t){return t.spares>0?`${e} + spare`:e}function fr(e){return e.unit==="single"?"Single":Jt(`Set of ${De}`,e)}var gr="data-add-to-basket",Oe=9,Fe="en";function fe(e,t,n=0){return new Intl.NumberFormat(Fe,{style:"currency",currency:t,minimumFractionDigits:0,maximumFractionDigits:n}).format(e)}import{jsx as on}from"react/jsx-runtime";var ct="storefront-country",dt=Zt(null);function nn(e){return pt(e,"catalogue")}function rn(e){return pt(e,"money")}function pt(e,t){let n=new Map(e.map(o=>[o.code,o.decimalPlaces])),r=new Map;return(o,i)=>{if(!i)return"";let a=r.get(i);if(!a){let u=n.get(i)??0;a=new Intl.NumberFormat(Fe,{style:"currency",currency:i,minimumFractionDigits:t==="money"?u:0,maximumFractionDigits:u}),r.set(i,a)}return a.format(o)}}function xr({children:e,currencies:t,countries:n,defaultCurrency:r,defaultCountry:o}){let i=ge(()=>t??[],[t]),a=ge(()=>n??[],[n]),u=ge(()=>r||i.find(C=>C.isDefault)?.code||i[0]?.code||"",[r,i]),c=ge(()=>o||a.find(C=>C.isDefault)?.code||a[0]?.code||"",[o,a]),[l,d]=ut(c),[m,P]=ut(!1);tn(()=>{let C=re.getItem(ct);C&&a.some(I=>I.code===C)&&d(C),P(!0)},[a]);function L(C){d(C),re.setItem(ct,C)}let b=ge(()=>{let C=a.find(w=>w.code===l)??null,I=C?.currency,T=I&&i.some(w=>w.code===I)?I:u,M=nn(i),x=rn(i);return{country:l,currency:T,setCountry:L,currencies:i,countries:a,activeCountry:C,formatPrice:(w,S)=>M(w,S??T),formatMoney:(w,S)=>x(w,S??T),ready:m}},[l,i,a,u,m]);return on(dt.Provider,{value:b,children:e})}function mt(){let e=en(dt);if(!e)throw new Error("useCurrency must be used within a CurrencyProvider");return e}import{createContext as Cn,useCallback as k,useContext as xn,useEffect as Y,useMemo as Pt,useRef as ie,useState as A}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.",Pr="Confirmed at checkout";function Ir(e){return e&&(e.valid||e.deferred)?e.code:void 0}var ft="coupon_code: ";function wr(e){return!(e instanceof me)||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 Pe="Price on request",sn="Request a quote";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 o=$e(e,n),i=$e(t,n);return o===null&&i===null?0:o===null?1:i===null?-1:r==="asc"?o-i:i-o}function kr(e,t,n,r){if(n==null&&r==null)return!0;let o=$e(e,t);return!(o===null||n!=null&&o<n||r!=null&&o>r)}var ln={priced:!1,unit:null,was:null,onSale:!1,setTotal:null};function un(e,t,n){if(!Ue(e))return ln;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 Ar(e,t,n=""){return!e.priced||e.unit==null?Pe:`${n}${fe(e.unit,t)}`}function Rr(e,t){return e.was==null?null:fe(e.was,t)}function cn(e,t,n=1){let r=oe(e,t);if(r===null)return{priced:!1,unit:null,isFrom:!1,setTotal:null};let o=e.reduce((a,u)=>a+u.wheels,0),i=Math.min(...e.map(a=>a.prices[t]));return{priced:!0,unit:i,isFrom:i*o!==r,setTotal:r*n}}var dn={priced:!1,unit:null,isFrom:!1,was:null,onSale:!1,setTotal:null};function Mr(e,t,n,r=1){let o=un(e.prices[n],e.msrpPrices?.[n],4),i=o.setTotal==null?null:o.setTotal*r;if(!t)return{priced:o.priced,unit:o.unit,isFrom:!0,was:o.was,onSale:o.onSale,setTotal:null,fromSetTotal:i};let a=cn(t.components,n,r);return a.priced?{priced:!0,unit:a.unit,isFrom:a.isFrom,was:null,onSale:!1,setTotal:a.setTotal,fromSetTotal:i}:{...dn,fromSetTotal:i}}function pn(e,t){return!e.priced||e.unit==null?Pe:`${e.isFrom?"from ":""}${fe(e.unit,t)}`}function Dr(e,t){return e.was==null?null:fe(e.was,t)}function Or(e,t){return!e.priced||e.unit==null?sn:pn(e,t)}var mn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function bt(e){return mn.test(e.trim())}var Ct="sf:ga-purchases",fn=20;function St(){return typeof window>"u"||window.parent!==window}function ye(...e){try{if(St()||typeof window.gtag!="function")return;window.gtag(...e)}catch{}}function gn(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 qe(e,t){return e.filter(Ie).map(n=>gn(n,t))}function Kr(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 vt(e,t){let n=qe([e],t);n.length!==0&&ye("event","add_to_cart",{currency:t,value:n[0].price*n[0].quantity,items:n})}function Wr(e){let t=qe(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 xt=new Set;function yn(e){if(xt.has(e))return!1;xt.add(e);try{let t=JSON.parse(re.getItem(Ct)??"[]");if(t.includes(e))return!1;re.setItem(Ct,JSON.stringify([...t,e].slice(-fn)))}catch{}return!0}function Br(e){let t=e.confirmation;if(St()||!yn(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:qe(e.lines,n)}),e.adsSendTo&&ye("event","conversion",{send_to:e.adsSendTo,transaction_id:t.orderNumber,currency:n,value:r})}var hn="Arranged after review",bn="Calculated at checkout";function Et({quoted:e,optionCount:t,chosenAmount:n,couponWaivesFreight:r}){return e&&t===0?"arranged":r?"free":n===void 0?"pending":n===0?"free":"charged"}function Gr(e){switch(e){case"arranged":return hn;case"pending":return bn;case"free":return"Free";case"charged":return null}}import{jsx as Pn}from"react/jsx-runtime";var Sn=400,vn=400,En=1500;function Ie(e){return(e.components?.length??0)>0}function It(e,t){return{code:e,valid:t.valid,deferred:gt(t,t.askedAsShopper),message:t.message||void 0,effects:t.effects??void 0}}function Lt(e,t){return oe(e.components,t)}function He(e,t){let n=Lt(e,t);return n===null?null:n*e.qty}function wt(e){return e!=="tyre"}var Nt=Cn(null);function oo({children:e,preview:t=!1}){let{currency:n,country:r,formatMoney:o}=mt(),[i,a]=A(t),[u,c]=A([]),[l,d]=A([]),[m,P]=A([]),[L,b]=A(!1),[C,I]=A(!1),[T,M]=A(!1),[x,w]=A(!1),[S,H]=A(null),[W,Q]=A(void 0),h=ie(r),v=ie("");h.current=h.current||r;let[p,K]=A(null),[X,z]=A(!1),[R,J]=A(null),Z=ie(void 0),D=k(()=>a(!0),[]),xe=k(()=>a(!1),[]),O=k(()=>a(s=>!s),[]);Y(()=>{t||typeof window>"u"||new URLSearchParams(window.location.search).get("cart")==="open"&&D()},[D,t]);let Se=k(s=>{w(!0),wt(s)&&M(!0)},[]),ee=T||u.some(s=>wt(s.kind)),se=x||u.length>0;Y(()=>{if(t||!ee||L)return;let s=!0;return q.listWheels().then(f=>{s&&(d(f),b(!0))}),()=>{s=!1}},[t,ee,L]),Y(()=>{if(t||!se||C)return;let s=!0;return q.listBundles().then(f=>{s&&(P(f),I(!0))}),()=>{s=!1}},[t,se,C]);let F=S?.deliveryOptions??[];Y(()=>{F.length!==0&&J(s=>s&&F.some(f=>f.id===s)?s:F[0]?.id??null)},[S]);let G=k(()=>u.filter(Ie).flatMap(s=>st(s.components,s.qty)),[u]),le=k(async(s,f)=>{let y=s.trim().toUpperCase();if(!y)return;let g=G();if(g.length===0){K({code:y,valid:!1,message:"Add a wheel to the cart first."});return}z(!0),Z.current=f;try{let N=await q.validateCoupon({code:y,items:g,currency:n,shippingMethodId:R??void 0,customerEmail:f});K(It(y,N))}catch{K({code:y,valid:!1,message:"Could not check that code. Please try again."})}finally{z(!1)}},[G,n,R]),te=k(()=>{K(null),Z.current=void 0},[]),ve=k(s=>{if(!p)return;let{code:f}=p;K(y=>y&&y.code===f?{code:f,valid:!1,refused:!0,message:s}:y)},[p]);Y(()=>{if(!p||p.refused)return;let s=p.code,f=g=>g!==null&&g.code===s&&!g.refused,y=setTimeout(async()=>{let g=G();if(g.length===0){K(N=>f(N)?{code:s,valid:!1,message:"Add a wheel to the cart first."}:N);return}z(!0);try{let N=await q.validateCoupon({code:s,items:g,currency:n,shippingMethodId:R??void 0,customerEmail:Z.current});K(de=>f(de)?It(s,N):de)}catch{}finally{z(!1)}},Sn);return()=>clearTimeout(y)},[u,n,R]);let ue=p&&!p.refused?p.code:void 0;Y(()=>{if(t)return;let s=!0,f=setTimeout(async()=>{let y=G();if(y.length===0){H(null),Q(void 0);return}try{let g=await q.quoteCart({items:y,currency:n,shippingMethodId:R??void 0,couponCode:ue,customerEmail:Z.current||void 0,country:h.current||void 0,subdivision:v.current||void 0});if(!s)return;H(g)}catch{if(!s)return}Q(ue)},vn);return()=>{s=!1,clearTimeout(f)}},[u,n,R,ue,r]);let E=k(s=>{c(f=>{let y=f.findIndex(g=>g.id===s.id);return y===-1?[...f,s]:f.map((g,N)=>N===y?{...g,qty:Math.min(Oe,g.qty+s.qty)}:g)}),vt(s,n)},[n]),U=k(s=>{c(f=>f.filter(y=>y.id!==s))},[]),V=k((s,f)=>{let y=Math.max(1,Math.min(Oe,f));c(g=>g.map(N=>N.id===s?{...N,qty:y}:N))},[]),Ge=k(s=>{c(s)},[]),[ce,Bt]=A(null),Ve=ie(null);Ve.current=ce;let $=ie(null),ke=ie(""),Ye=k((s,f)=>{let y=s.trim().toLowerCase();bt(y)&&Bt(g=>g&&g.email===y&&g.firstName===(f??"")?g:{email:y,firstName:f??""})},[]);Y(()=>{if(t||!ce)return;let s=ht(u.filter(Ie),g=>He(g,n)===null?Pe:o(He(g,n),n)),f={email:ce.email,firstName:ce.firstName,currency:n,items:s},y=JSON.stringify(f);if(y!==ke.current)return $.current&&clearTimeout($.current),$.current=setTimeout(()=>{$.current=null,ke.current=y,q.captureCart(f).catch(g=>{})},En),()=>{$.current&&(clearTimeout($.current),$.current=null)}},[u,ce,n,t]);let je=k(()=>{$.current&&(clearTimeout($.current),$.current=null);let s=Ve.current;s&&(ke.current="",q.captureCart({email:s.email,firstName:s.firstName,currency:n,items:[]}).catch(f=>{}))},[n]),Qe=Pt(()=>{let s=u.reduce((_,ne)=>{let Ee=He(ne,n);return Ee===null?_:_+Ee},0),f=u.some(_=>Lt(_,n)===null),y=u.reduce((_,ne)=>_+ne.qty,0),g=p?.valid?p.effects:void 0,N=g?Math.min(s,Number(g.discountAmount)):0,de=S?.bundleDiscount??0,Gt=S?.appliedBundles??[],Ae=!!g?.freeShipping,Xe=F.find(_=>_.id===R),Je=Ae?0:S?.shipping??Xe?.amount??0,Vt=Et({quoted:S!==null,optionCount:F.length,chosenAmount:Xe?.amount,couponWaivesFreight:Ae}),Re={};for(let _ of g?.freeUnits??[])Re[_.partNumber]=(Re[_.partNumber]??0)+_.quantity;let Yt=S?.tax??null,jt=S?S.grandTotal:s-N-de+Je;return{sets:y,units:u.reduce((_,ne)=>_+(ne.components??[]).reduce((Ee,Qt)=>Ee+Qt.wheels*ne.qty,0),0),subtotal:s,hasUnpricedLine:f,discount:N,bundleDiscount:de,appliedBundles:Gt,shipping:Je,freeShipping:Ae,shippingStatus:Vt,freeUnitsByPartNumber:Re,tax:Yt,grand:jt,repricing:!!p?.refused&&S!==null&&W===p?.code,currency:n}},[u,n,p,F,R,S,W]),zt=Pt(()=>({isOpen:i,preview:t,open:D,close:xe,toggle:O,items:u,catalog:l,bundles:m,warmCatalog:Se,add:E,remove:U,setQty:V,replaceItems:Ge,identify:Ye,clearCapturedCart:je,coupon:p,applyCoupon:le,removeCoupon:te,refuseCoupon:ve,couponBusy:X,deliveryOptions:F,shippingMethodId:R,setShippingMethodId:J,totals:Qe}),[i,t,D,xe,O,u,l,m,Se,E,U,V,Ge,Ye,je,p,le,te,ve,X,F,R,Qe]);return Pn(Nt.Provider,{value:zt,children:e})}function Tt(){let e=xn(Nt);if(!e)throw new Error("useCart() must be called inside <CartProvider>. Mount the provider in app/layout.tsx.");return e}import{cache as Dn}from"react";function _t(e,t,n,r){for(;e.size>=t;){let o,i;for(let[u,c]of e){if(c.expiresAt<=r){o=u;break}i===void 0&&n(u)&&(i=u)}let a=o??i??e.keys().next().value;if(a===void 0)return;e.delete(a)}}var In=6e4,wn=5e3,Ln=500,we=new Map;async function Nn(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 Tn=e=>e.includes("|slug:")||e.includes("|xhost:");async function kt(e,t){if(await at()!==null)return t();let n=await Nn(e);if(!n)return t();let r=Date.now(),o=we.get(n);if(o&&o.expiresAt>r)return o.load;let i=await t(),a=i.outcome.state==="failed",u=a?wn:In,c=we.get(n)?.lastGood,l=i.outcome.state==="ok"?i:a?c:void 0,d=a&&l?l:i;return _t(we,Ln,Tn,r),we.set(n,{load:d,expiresAt:r+u,lastGood:l}),d}var _n=404;function kn(e){if(e instanceof me&&e.status===_n)return{state:"absent"};let t=e instanceof me?e.status:-1,n=e instanceof Error?e.message:String(e);return{state:"failed",status:t,detail:n}}var An="[storefront:chrome-load-failed]";function Rn(e,t){console.error(`${An} ${e} status=${t.status} \u2014 serving fallback chrome`,t.detail)}async function At(e,t,n,r){try{let o=await t();return r?.(o)?{value:o,outcome:{state:"absent"}}:{value:o,outcome:{state:"ok"}}}catch(o){let i=kn(o);return i.state==="failed"&&Rn(e,i),{value:n,outcome:i}}}function Mn(e){return e==="production"?"silent":"banner"}var mo=Mn("production");function On(e,t){return e?.trim()||t}function So({legalName:e,foundedYear:t,siteName:n},r=new Date().getFullYear()){let o=On(e,n);return`\xA9 ${t&&t<r?`${t}\u2013${r}`:`${r}`} ${o}`}var Fn={name:pe,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:Me},vo=Dn(async()=>kt("site",()=>At("site",async()=>{let e=await q.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)}},Fn)));var Eo={name:pe,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:Me};import{jsx as Mt,jsxs as Dt}from"react/jsx-runtime";import{useEffect as Le,useRef as Ot,useState as Ne}from"react";var he=new Map,Un=64;async function $n(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:o}=n;return typeof r!="string"?null:{reversed:r,inkIsDark:typeof o=="boolean"?o:null}}catch{return null}}function Rt(e){let t=he.get(e);if(t)return t;let n=$n(e);if(he.set(e,n),he.size>Un){let r=he.keys().next();r.done||he.delete(r.value)}return n}var qn={small:54,medium:66,large:84},Hn=44,Kn=202/22,Ro=16,Mo=140,Wn=.88,Do=16,Bn="invert(1)";function Oo({variant:e="header",scrolled:t=!0,src:n,reverse:r=!1,onLightSurface:o,reversedSrc:i,inkIsDark:a,size:u="medium",sizePx:c,wordmark:l,siteName:d=pe,fitToContainer:m=!1,fitWordmarkToContainer:P=!1,fitFloorPx:L}){let b=l&&l.trim()?l.trim():d,[C,I]=Ne(!1),T=Ot(null),M=E=>{T.current=E};Le(()=>{let E=T.current?.ownerDocument??document,U=()=>{I(E.documentElement.getAttribute("data-theme")==="light")};U();let V=new MutationObserver(U);return V.observe(E.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>V.disconnect()},[]);let x=n&&n.trim()?n.trim():null,w=!!x&&rt(x),S=o??(C&&t),H=r&&w&&x&&i!=null?{reversed:i,inkIsDark:a??null}:null,W=H!==null,[Q,h]=Ne(null);Le(()=>{if(!r||!x||!w||W){h(null);return}let E=!1;return h(null),Rt(x).then(U=>{E||h(U)}),()=>{E=!0}},[r,x,w,W]);let v=H??Q,p=!!v&&v.inkIsDark!==null&&(S?!v.inkIsDark:v.inkIsDark),K=r&&!!x&&!w&&!S,X=p&&v?v.reversed:x,z=X?[X]:[],[R,J]=Ne(0);Le(()=>{J(0)},[x,p]);let Z=e==="footer"?Hn:qn[u],D=c&&c>0?c:Z,xe=Math.round(D*Kn),O=R<z.length?z[R]:null,[Se,ee]=Ne(X),se=O!==null&&O===Se,F=Ot(null);Le(()=>{let E=F.current;if(!E||!E.complete)return;if(E.naturalWidth>0||E.naturalHeight>0){ee(O);return}let U=!1;return E.decode().then(()=>!U&&ee(O),()=>!U&&J(V=>V+1)),()=>{U=!0}},[O]);let G=m||P,le=`calc(100cqi / ${((b.length+1)*Wn).toFixed(2)})`,te=G&&L&&L>0?Math.min(L,D):null,ve=G?te===null?`min(${D}px, ${le})`:`clamp(${te}px, ${le}, ${D}px)`:`${D}px`,ue=Dt("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,Mt("span",{className:"text-accent",children:"."})]});return Dt("span",{ref:M,className:"inline-flex items-center",children:[!se&&ue,O&&Mt("img",{ref:F,src:O,alt:b,width:xe,height:D,className:"shrink-0 object-contain",style:{...se?{height:`${D}px`,width:"auto",...m?{maxWidth:"100cqi"}:{}}:{display:"none"},...K?{filter:Bn}:{}},onLoad:()=>ee(O),onError:()=>J(E=>E+1)},O)]})}import{Children as Gn,isValidElement as Vn,useEffect as Ut,useId as Yn,useLayoutEffect as jn,useRef as j,useState as $t}from"react";var Te=(e,t)=>!!e[t]&&!e[t].disabled;function Ke(e,t,n){let r=e.length;for(let o=1;o<=r;o++){let i=((t+n*o)%r+r)%r;if(Te(e,i))return i}return t}function We(e,t){return Ke(e,t===1?-1:e.length,t)}function Be(e,t){return Te(e,t)?t:Math.max(We(e,1),0)}function Ft(e,t,n){let{open:r,focus:o}=e,i=a=>({...e,...a});if(t.length===1&&/\S/.test(t)){let a=e.typed+t.toLowerCase(),u=n.findIndex((c,l)=>Te(n,l)&&c.label.toLowerCase().startsWith(a));return{state:i({open:!0,typed:a,focus:u>=0?u:o}),handled:!0}}if(!r)return t==="ArrowDown"||t==="ArrowUp"||t==="Enter"||t===" "?{state:i({open:!0,typed:""}),handled:!0}:{state:e,handled:!1};switch(t){case"ArrowDown":return{state:i({focus:Ke(n,o,1)}),handled:!0};case"ArrowUp":return{state:i({focus:Ke(n,o,-1)}),handled:!0};case"Home":return{state:i({focus:We(n,1)}),handled:!0};case"End":return{state:i({focus:We(n,-1)}),handled:!0};case"Enter":case" ":return Te(n,o)?{state:i({open:!1,typed:""}),commit:o,refocus:!0,handled:!0}:{state:e,handled:!0};case"Escape":return{state:i({open:!1,typed:""}),refocus:!0,handled:!0};case"Tab":return{state:i({open:!1,typed:""}),handled:!1};default:return{state:e,handled:!1}}}import{Fragment as er,jsx as B,jsxs as qt}from"react/jsx-runtime";function Qn({items:e,value:t,onPick:n,open:r,onOpen:o,onClose:i}){let[a,u]=$t(!1),c=r!==void 0,l=c?r:a,[d,m]=$t(0),P=j({text:"",timer:0}),L=j(null),b=j(null),C=j(null),I=Yn(),T=j(null),M=e.findIndex(h=>h.value===t),x=h=>{h!==l&&(c||u(h),h?o?.():i?.())},w=h=>{let v=e[h];!v||v.disabled||(n(v.value),x(!1),b.current?.focus())},S=h=>{let v={open:l,focus:l?d:Be(e,M),typed:P.current.text},p=Ft(v,h,e);return!p.handled&&p.state.open===l?!1:(p.state.typed!==v.typed&&(P.current.text=p.state.typed,window.clearTimeout(P.current.timer),P.current.timer=window.setTimeout(()=>{P.current.text=""},500)),m(p.state.focus),p.commit!==void 0?w(p.commit):x(p.state.open),p.refocus&&b.current?.focus(),p.handled)},H=j(S);H.current=S;let W=j(()=>x(!1));W.current=()=>x(!1);let Q=h=>{l||(T.current=h.nativeEvent,H.current(h.key)&&h.preventDefault())};return Ut(()=>{if(!l)return;let h=p=>{L.current?.contains(p.target)||W.current()},v=p=>{p!==T.current&&H.current(p.key)&&p.preventDefault()};return document.addEventListener("mousedown",h),document.addEventListener("keydown",v),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("keydown",v)}},[l]),Ut(()=>{l&&(P.current.text||m(Be(e,M)))},[l]),jn(()=>{if(!l||!C.current)return;C.current.children.item(d)?.scrollIntoView({block:"nearest"})},[d,l]),{open:l,toggle:()=>x(!l),close:()=>x(!1),focusIdx:d,setFocusIdx:m,pick:h=>w(e.findIndex(v=>v.value===h)),wrapRef:L,triggerRef:b,listRef:C,listId:I,onTriggerKeyDown:Q,activeId:l?`${I}-${d}`:void 0}}var Xn={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-2.5 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 text-[length:var(--size-label,13px)] 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 text-[length:var(--size-body,14px)] 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-3.5 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 Jn({id:e,tone:t,items:n,value:r,focusIdx:o,onFocus:i,onPick:a,listRef:u,ariaLabel:c}){let l=Xn[t];return B("ul",{ref:u,id:e,role:"listbox","aria-label":c,...l.pickerMarker?{"data-picker-menu":""}:{},className:l.list,children:n.map((d,m)=>{let P=d.value===r;return B("li",{id:`${e}-${m}`,role:"option","aria-selected":P,"aria-disabled":d.disabled||void 0,onMouseEnter:()=>!d.disabled&&i(m),onMouseDown:L=>{L.preventDefault(),d.disabled||a(d.value)},className:l.item(m===o,P&&d.value!=="",!!d.disabled,m===n.length-1),style:l.itemStyle?.(P),children:d.meta===void 0?d.label:qt(er,{children:[B("span",{className:"flex-1 whitespace-nowrap",children:d.label}),B("span",{className:"ml-auto text-[12px] opacity-50",children:d.meta})]})},`${d.value}_${m}`)})})}function Zn({value:e,onChange:t,disabled:n,children:r,className:o,style:i,name:a,id:u,"aria-label":c}){let l=Gn.toArray(r).flatMap(b=>{if(!Vn(b))return[];if(b.type!=="option")return[];let I=b.props,T=I.value!==void 0?String(I.value):"",M=I.children,x=typeof M=="string"||typeof M=="number"?String(M):T;return[{value:T,label:x,disabled:!!I.disabled}]}),d=e??"",m=Qn({items:l,value:d,onPick:b=>t?.({target:{value:b}})}),L=l.find(b=>b.value===d)?.label??l[0]?.label??"";return qt("div",{ref:m.wrapRef,className:"relative",children:[a&&B("input",{type:"hidden",name:a,value:d}),B("button",{ref:b=>{m.triggerRef.current=b},type:"button",disabled:n,"aria-haspopup":"listbox","aria-expanded":m.open,"aria-controls":m.open?m.listId:void 0,"aria-activedescendant":m.activeId,"aria-label":c,id:u,onClick:()=>!n&&m.toggle(),onKeyDown:b=>!n&&m.onTriggerKeyDown(b),className:`block w-full ${o??""}`,style:i,children:B("span",{className:"block w-full truncate text-left",children:L})}),m.open&&B(Jn,{id:m.listId,tone:"select",items:l,value:d,focusIdx:m.focusIdx,onFocus:m.setFocusIdx,onPick:m.pick,listRef:m.listRef})]})}var zo="#c9a461",Ht=[{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"}],Go={name:"",color:"var(--fg)",family:"silver",src:""};function tr(e,t){let n=r=>{let o=Ht.findIndex(i=>i.f===r);return o===-1?Ht.length:o};return n(e)-n(t)||e.localeCompare(t)}function Vo(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(tr)}import{jsx as be,jsxs as _e}from"react/jsx-runtime";var nr="font-mono text-[length:var(--size-label,12px)]",rr="font-semibold uppercase tracking-[0.22em] text-fg";function Kt(e){return`${e??nr} ${rr}`}function Wt(){return be("span",{className:"text-accent",children:" *"})}function or({children:e,required:t,labelFace:n}){return _e("span",{className:Kt(n),children:[e,t?be(Wt,{}):null]})}function ir({label:e,required:t,hint:n,separate:r,htmlFor:o,labelFace:i,className:a,children:u}){let c=a?`flex flex-col gap-2 ${a}`:"flex flex-col gap-2",l=n?be("span",{className:"font-mono text-[11px] uppercase tracking-[0.22em] text-fg-dim",children:n}):null;return r||n?_e("div",{className:c,children:[_e("label",{htmlFor:o,className:Kt(i),children:[e,t?be(Wt,{}):null]}),u,l]}):_e("label",{htmlFor:o,className:c,children:[be(or,{required:t,labelFace:i,children:e}),u]})}import{jsx as Ce,jsxs as sr}from"react/jsx-runtime";function ar({spokes:e,mesh:t=!1,className:n}){let a=c=>Math.round(c*1e3)/1e3,u=[];for(let c=0;c<e;c++){let l=c/e*Math.PI*2-Math.PI/2;if(u.push({x1:a(100+Math.cos(l)*22),y1:a(100+Math.sin(l)*22),x2:a(100+Math.cos(l)*86),y2:a(100+Math.sin(l)*86),main:!0}),t){let d=l+Math.PI/e;u.push({x1:a(100+Math.cos(d)*22*1.4),y1:a(100+Math.sin(d)*22*1.4),x2:a(100+Math.cos(d)*78),y2:a(100+Math.sin(d)*78),main:!1})}}return sr("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:[Ce("circle",{cx:100,cy:100,r:92,strokeWidth:2}),Ce("circle",{cx:100,cy:100,r:84,strokeWidth:1,opacity:.4}),Ce("circle",{cx:100,cy:100,r:22,strokeWidth:2}),Ce("circle",{cx:100,cy:100,r:6,fill:"currentColor"}),u.map((c,l)=>Ce("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},l))]})}import{useState as lr}from"react";import{jsx as ae,jsxs as ze}from"react/jsx-runtime";function ur({customerEmail:e}){let{coupon:t,applyCoupon:n,removeCoupon:r,couponBusy:o}=Tt(),[i,a]=lr("");async function u(){o||!i.trim()||(await n(i,e),a(""))}return ze("div",{className:"flex flex-col gap-2",children:[t===null?ze("div",{className:"flex border border-line",children:[ae("input",{type:"text",value:i,onChange:c=>a(c.target.value),onKeyDown:c=>{c.key==="Enter"&&(c.preventDefault(),u())},placeholder:"Coupon code","aria-label":"Coupon code",className:"flex-1 bg-transparent px-3.5 py-3.5 font-mono text-[11px] uppercase tracking-[0.18em] text-fg outline-none placeholder:text-fg-dim"}),ae("button",{type:"button",onClick:()=>{u()},disabled:o,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:o?"\u2026":"Apply"})]}):ze("div",{className:["flex items-center justify-between gap-3 border px-3.5 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 oi(){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)}`}export{Pr as a,Ir as b,wr as c,st as d,De as e,cr as f,dr as g,pr as h,mr as i,Xt as j,Jt as k,fr as l,gr as m,Oe as n,Fe as o,fe as p,Pe as q,sn as r,$e as s,_r as t,kr as u,un as v,Ar as w,Rr as x,cn as y,Mr as z,pn as A,Dr as B,Or as C,bt as D,Kr as E,Wr as F,Br as G,Gr as H,xr as I,mt as J,Ie as K,He as L,oo as M,Tt as N,So as O,Fn as P,Eo as Q,qn as R,Hn as S,Ro as T,Mo as U,Do as V,Oo as W,Qn as X,Jn as Y,Zn as Z,zo as _,Ht as $,Go as aa,tr as ba,Vo as ca,or as da,ir as ea,ar as fa,ur as ga,oi as ha};