efficient-storefront-blocks 0.61.0 → 0.62.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/CHANGELOG.md +63 -1
- package/dist/chunks/{EditorPreviewCheckout-55ERZEPV.js → EditorPreviewCheckout-BQFPYYBS.js} +1 -1
- package/dist/chunks/{SiteEditorProvider-XF374NLZ.js → SiteEditorProvider-3E6XWZIS.js} +1 -1
- package/dist/chunks/chunk-4BQ44OLC.js +250 -0
- package/dist/chunks/chunk-MT5KWSYX.js +1 -0
- package/dist/chunks/chunk-OJ4OD3N6.js +1 -0
- package/dist/chunks/{fitment-data-RORHKBID.js → fitment-data-PWZAAUFK.js} +1 -1
- package/dist/editor/components/EditorPreviewChat.js +4 -4
- package/dist/editor/components/PreviewHeader.d.ts +1 -1
- package/dist/editor/components/PreviewHeader.js +4 -4
- package/dist/editor/lib/efficient-backend.d.ts +1 -0
- package/dist/editor/lib/efficient-backend.js +1 -1
- package/dist/editor/lib/efficient-block-sources.d.ts +2 -0
- package/dist/editor/lib/efficient-block-sources.js +1 -0
- package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.d.ts +2 -0
- package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.js +1 -0
- package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.d.ts +6 -0
- package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.js +1 -0
- package/dist/editor/lib/puck/blocks/commerce/ProductHero/fields.js +1 -1
- package/dist/editor/lib/puck/blocks/commerce/index.d.ts +1 -1
- package/dist/editor/lib/puck/blocks/commerce/index.js +1 -1
- package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.d.ts +2 -0
- package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.js +1 -0
- package/dist/editor/lib/puck/blocks/service/index.d.ts +1 -1
- package/dist/editor/lib/puck/blocks/service/index.js +1 -1
- package/dist/editor/lib/puck/config.js +1 -1
- package/dist/editor/lib/storefront-editor-words.d.ts +1 -0
- package/dist/editor/lib/storefront-editor-words.js +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +101 -81
- package/dist/render/app/globals.css +70 -14
- package/dist/render/built-with.json +1 -1
- package/dist/render/components/CartContext.d.ts +1 -0
- package/dist/render/components/CartContext.js +1 -1
- package/dist/render/components/CartDrawer.d.ts +0 -8
- package/dist/render/components/CartDrawer.js +2 -2
- package/dist/render/components/ChatWidget.js +1 -1
- package/dist/render/components/EuTyreLabels.d.ts +3 -0
- package/dist/render/components/EuTyreLabels.js +1 -1
- package/dist/render/components/FooterMenu.js +1 -1
- package/dist/render/components/FormBlock.js +1 -1
- package/dist/render/components/GalleryItem.js +1 -1
- package/dist/render/components/Header.js +1 -1
- package/dist/render/components/LegalLine.js +1 -1
- package/dist/render/components/PopupFrame.d.ts +2 -1
- package/dist/render/components/PopupFrame.js +1 -1
- package/dist/render/components/PopupHost.d.ts +17 -0
- package/dist/render/components/PopupHost.js +1 -0
- package/dist/render/components/ProductCard.js +1 -1
- package/dist/render/components/ProductGallery.d.ts +15 -0
- package/dist/render/components/ProductGallery.js +1 -0
- package/dist/render/components/ProductHeroPanel.js +1 -1
- package/dist/render/components/RatingStars.d.ts +4 -0
- package/dist/render/components/RatingStars.js +1 -0
- package/dist/render/components/Reviews.js +1 -1
- package/dist/render/components/StorefrontProviders.d.ts +1 -3
- package/dist/render/components/StorefrontProviders.js +1 -1
- package/dist/render/components/SubscribePopupContext.d.ts +3 -15
- package/dist/render/components/SubscribePopupContext.js +1 -1
- package/dist/render/components/TyrePlpCard.js +1 -1
- package/dist/render/components/WheelCardFrame.d.ts +3 -27
- package/dist/render/components/WheelCardFrame.js +1 -1
- package/dist/render/components/card-pieces/CardBuyButton.d.ts +7 -0
- package/dist/render/components/card-pieces/CardBuyButton.js +1 -0
- package/dist/render/components/card-pieces/CardFinishSwatches.d.ts +5 -0
- package/dist/render/components/card-pieces/CardFinishSwatches.js +1 -0
- package/dist/render/components/card-pieces/CardPrice.d.ts +7 -0
- package/dist/render/components/card-pieces/CardPrice.js +1 -0
- package/dist/render/components/card-pieces/CardProductBadge.d.ts +7 -0
- package/dist/render/components/card-pieces/CardProductBadge.js +1 -0
- package/dist/render/components/card-pieces/CardSizes.d.ts +9 -0
- package/dist/render/components/card-pieces/CardSizes.js +1 -0
- package/dist/render/components/card-pieces/ProductCardState.d.ts +53 -0
- package/dist/render/components/card-pieces/ProductCardState.js +1 -0
- package/dist/render/components/card-pieces/card-row.d.ts +20 -0
- package/dist/render/components/card-pieces/card-row.js +1 -0
- package/dist/render/components/cart/drawer-parts.d.ts +28 -0
- package/dist/render/components/cart/drawer-parts.js +1 -0
- package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.d.ts +3 -0
- package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.js +1 -1
- package/dist/render/components/pdp-dynamic/DynamicProductGallery.d.ts +9 -0
- package/dist/render/components/pdp-dynamic/DynamicProductGallery.js +1 -0
- package/dist/render/components/useHeaderBar.js +1 -1
- package/dist/render/components/useIsLightTheme.d.ts +1 -0
- package/dist/render/components/useIsLightTheme.js +1 -0
- package/dist/render/components/wheels-plp/PlpCard.d.ts +3 -2
- package/dist/render/components/wheels-plp/PlpCard.js +1 -1
- package/dist/render/components/wheels-plp/usePlpCardSelection.d.ts +1 -1
- package/dist/render/components/wheels-plp/usePlpCardSelection.js +1 -1
- package/dist/render/lib/api/index.d.ts +4 -2
- package/dist/render/lib/api/index.js +1 -1
- package/dist/render/lib/api/types.d.ts +48 -1
- package/dist/render/lib/chrome-load.d.ts +1 -1
- package/dist/render/lib/chrome-load.js +1 -1
- package/dist/render/lib/content/product-hero.d.ts +1 -0
- package/dist/render/lib/content/product-hero.js +1 -1
- package/dist/render/lib/header-fit.d.ts +2 -0
- package/dist/render/lib/header-fit.js +1 -0
- package/dist/render/lib/popup/popup-stores.d.ts +2 -0
- package/dist/render/lib/popup/popup-stores.js +1 -0
- package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.js +1 -0
- package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.js +1 -0
- package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.js +1 -0
- package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.js +1 -0
- package/dist/render/lib/puck/blocks/commerce/metas.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/metas.js +1 -1
- package/dist/render/lib/puck/blocks/commerce/renders.d.ts +2 -0
- package/dist/render/lib/puck/blocks/commerce/renders.js +1 -1
- package/dist/render/lib/puck/blocks/service/RatingBlock/meta.d.ts +3 -0
- package/dist/render/lib/puck/blocks/service/RatingBlock/meta.js +1 -0
- package/dist/render/lib/puck/blocks/service/RatingBlock/render.d.ts +2 -0
- package/dist/render/lib/puck/blocks/service/RatingBlock/render.js +1 -0
- package/dist/render/lib/puck/blocks/service/metas.d.ts +1 -0
- package/dist/render/lib/puck/blocks/service/metas.js +1 -1
- package/dist/render/lib/puck/blocks/service/renders.d.ts +1 -0
- package/dist/render/lib/puck/blocks/service/renders.js +1 -1
- package/dist/render/lib/puck/lazy-draws.js +1 -1
- package/dist/render/lib/storefront-page-groups.js +1 -1
- package/dist/render/lib/wheels/plp-fitment-match.d.ts +4 -0
- package/dist/render/lib/wheels/plp-fitment-match.js +1 -1
- package/dist/render/lib/wheels/spec-sheet.js +1 -1
- package/dist/words.d.ts +2 -2
- package/dist/words.js +3 -3
- package/package.json +4 -4
- package/dist/chunks/chunk-FCCEAXMM.js +0 -1
- package/dist/chunks/chunk-VVQ7KFQO.js +0 -1
- package/dist/chunks/chunk-YNI65Q6Z.js +0 -250
- package/dist/render/components/wheels-plp/useWheelCardBottom.d.ts +0 -20
- package/dist/render/components/wheels-plp/useWheelCardBottom.js +0 -1
- package/dist/render/lib/popup/popup-rules.d.ts +0 -25
- package/dist/render/lib/popup/popup-rules.js +0 -1
- /package/dist/chunks/{chunk-YNI65Q6Z.js.LEGAL.txt → chunk-4BQ44OLC.js.LEGAL.txt} +0 -0
- /package/dist/chunks/{chunk-VT346MLP.js → chunk-FZFBLN7K.js} +0 -0
- /package/dist/chunks/{chunk-I6VNNXUI.js → chunk-TRUOK5AD.js} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-storefront-blocks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.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",
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
"peerDependencies": {
|
|
86
86
|
"@stripe/react-stripe-js": "^6.7.0",
|
|
87
87
|
"@stripe/stripe-js": "^9.9.0",
|
|
88
|
-
"efficient-easel": "^
|
|
89
|
-
"efficient-shell": "^
|
|
90
|
-
"efficient-web-builder": "^
|
|
88
|
+
"efficient-easel": "^20.1.0",
|
|
89
|
+
"efficient-shell": "^9.1.0",
|
|
90
|
+
"efficient-web-builder": "^39.0.0",
|
|
91
91
|
"next": ">=16",
|
|
92
92
|
"react": ">=19",
|
|
93
93
|
"react-dom": ">=19"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as V,c as T,g as z,i as $,j,l as O}from"./chunk-VT346MLP.js";var U="".replace(/\/+$/,"");var N="x-forwarded-for";function Z(e){let t=(e??"").split(",").map(n=>n.trim()).filter(Boolean);return t.length>0?t[t.length-1]:null}var Ee="x-forwarded-host";function Q(e,t,n){let s={};return e&&(s[Ee]=e),t&&n==="uncached"&&(s[N]=t),s}function X(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 Y="x-storefront-site",ee="x-storefront-host",te="x-storefront-preview";var Fe="shop_access_token",ne="shop_refresh_token",B=null;function L(){O.removeItem(Fe),O.removeItem(ne)}var w={getAccess(){return B},takeLegacyRefresh(){let e=O.getItem(ne);return L(),e},setTokens(e){B=e,L()},clear(){B=null,L()}};import{efficientClientOpen as Ze}from"efficient-easel/screen/lib/session";function Ie(e){return!!e.src}function A(e){let t=e.finishes.filter(Ie);if(t.length===e.finishes.length)return e;let n=e.defaultFinish&&t.some(s=>s.name===e.defaultFinish)?e.defaultFinish:null;return{...e,finishes:t,defaultFinish:n}}function qe(e){return e.listable!==!1}function M(e){return e.map(A).filter(qe)}var oe=["fill","stroke","stop-color","color","flood-color","lighting-color","solid-color"],ae=new Set(["none","transparent","currentcolor","inherit","initial","unset","context-fill","context-stroke"]),v={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])(${oe.join("|")})(\\s*=\\s*)(["'])([^"']*)\\3`,"gi"),me=new RegExp(`((?:^|[;{\\s"'])(?:${oe.join("|")})\\s*:\\s*)([^;}"'<>]+)`,"gi"),$e=/<svg\b([^>]*)>/i,Ue=/\bfill\s*[=:]/i;function Ne(e){let t=e.replace(ue,(n,s,a,l,p)=>{let i=re(p);return i===null?n:`${s}${a}${l}${i}${l}`}).replace(me,(n,s,a)=>{let l=re(a);return l===null?n:`${s}${l}`});return t=t.replace($e,(n,s)=>Ue.test(s)?n:`<svg fill="#ffffff"${s}>`),t}function re(e){let t=/!important/i.test(e),n=e.replace(/!important/gi,"").trim().toLowerCase();if(!n||le.test(n)||ae.has(n))return null;let s=n in v?[...v[n],1]:de(n);if(!s)return null;let[a,l,p,i]=s;if(Math.max(a,l,p)-Math.min(a,l,p)>ce)return null;let r=Be(255-a,255-l,255-p,i);return t?`${r} !important`:r}function Be(e,t,n,s){if(s<1)return`rgba(${e}, ${t}, ${n}, ${s})`;let a=l=>l.toString(16).padStart(2,"0");return`#${a(e)}${a(t)}${a(n)}`}function de(e){return e.startsWith("#")?Le(e):e.startsWith("rgb")?Me(e):e.startsWith("hsl")?He(e):null}function Le(e){let t=e.slice(1),n=1;if(t.length===3||t.length===4)t.length===4&&(n=parseInt(t[3]+t[3],16)/255),t=t.slice(0,3).split("").map(s=>s+s).join("");else if(t.length===6||t.length===8)t.length===8&&(n=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),n]:null}function Me(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[n,s]=t.split("/"),a=n.split(/[\s,]+/).filter(Boolean).slice(0,3);if(a.length<3)return null;let l=a.map(i=>i.endsWith("%")?Math.round(parseFloat(i)/100*255):Math.round(parseFloat(i)));if(l.some(i=>Number.isNaN(i)))return null;let p=s?E(s):De(n);return[l[0],l[1],l[2],p]}function De(e){let t=e.split(/[\s,]+/).filter(Boolean);return t.length>=4?E(t[3]):1}function E(e){let t=e.trim().endsWith("%")?parseFloat(e)/100:parseFloat(e);return Number.isNaN(t)?1:t}function He(e){let t=e.slice(e.indexOf("(")+1,e.lastIndexOf(")")),[n,s]=t.split("/"),a=n.split(/[\s,]+/).filter(Boolean);if(a.length<3)return null;let l=parseFloat(a[0]),p=parseFloat(a[1])/100,i=parseFloat(a[2])/100;if([l,p,i].some(P=>Number.isNaN(P)))return null;let r=s?E(s):a.length>=4?E(a[3]):1,[o,u,g]=Je(l,p,i);return[o,u,g,r]}function Je(e,t,n){let s=(1-Math.abs(2*n-1))*t,a=(e%360+360)%360/60,l=s*(1-Math.abs(a%2-1)),p=0,i=0,r=0;a<1?[p,i,r]=[s,l,0]:a<2?[p,i,r]=[l,s,0]:a<3?[p,i,r]=[0,s,l]:a<4?[p,i,r]=[0,l,s]:a<5?[p,i,r]=[l,0,s]:[p,i,r]=[s,0,l];let o=n-s/2;return[Math.round((p+o)*255),Math.round((i+o)*255),Math.round((r+o)*255)]}var se=512*1024;function D(e){return/\.svg(\?|$)/i.test(e)}function We(e){return`data:image/svg+xml,${encodeURIComponent(Ne(e))}`}function Ge(e){let t=e.replace(/!important/gi,"").trim().toLowerCase();if(!t||le.test(t)||ae.has(t))return null;let n=t in v?[...v[t],1]:de(t);if(!n)return null;let[s,a,l]=n;return Math.max(s,a,l)-Math.min(s,a,l)>ce?null:(.2126*s+.7152*a+.0722*l)/255}function Ke(e){let t=[],n=s=>{let a=Ge(s);a!==null&&t.push(a)};for(let s of e.matchAll(ue))n(s[4]);for(let s of e.matchAll(me))n(s[2]);return t.length?t.reduce((s,a)=>s+a,0)/t.length<.5:null}var ie=/^(?:\uFEFF|\s+|<\?xml[^>]*\?>|<!--[\s\S]*?-->|<!DOCTYPE\s+svg[^>[]*>)/i;function Ve(e){let t=e;for(let n=ie.exec(t);n&&n[0].length>0;n=ie.exec(t))t=t.slice(n[0].length);return/^<svg[\s>/]/i.test(t)}async function ze(e,t){if(!D(e))return null;try{let n=await fetch(e,{signal:t,redirect:"manual"});if(!n.ok)return null;let s=Number(n.headers.get("content-length"));if(Number.isFinite(s)&&s>se)return null;let a=await n.text();return a.length>se?null:Ve(a)?a:null}catch{return null}}async function pe(e,t){let n=await ze(e,t);return n===null?null:{reversed:We(n),inkIsDark:Ke(n)}}import{currentEaselSession as je,setSessionBridgedSite as Mt,setSessionDocumentSite as Dt}from"efficient-easel/screen/lib/session";function ge(){return je().siteId()}var Qe="",f=class extends Error{constructor(t,n,s){super(n),this.status=t,this.data=s}},W="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.",Xe=new Set([502,503,504]),H=0,Ye="This editor runs on its host's own backend, which does not serve this request.",et=5e3,tt=15e3,nt=()=>typeof window>"u"?et:tt;function Ae(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(nt())}var he=e=>e instanceof Error&&e.name==="TimeoutError",ye=(e,t)=>Xe.has(e)?W:t,rt=["admin","venue"],Re="admin";function Qt(e){Re=rt.includes(e)?e:"admin"}function st(){return Re}var it=/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{1,8})*$/,_e=null;function Xt(e){_e=e&&it.test(e)?e:null}function ot(){return _e}function at(e){if(typeof window>"u"||!e.startsWith("/api/v1/"))return e;let t=$();return!t||/[?&]site=/.test(e)?e:q(e,`site=${encodeURIComponent(t)}`)}async function c(e,t={}){let{token:n,baseUrl:s,headers:a,audience:l,...p}=t;if(typeof window<"u"&&!Ze())throw new f(H,Ye,null);if(typeof window>"u"&&s===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 i=typeof FormData<"u"&&p.body instanceof FormData,r;try{r=await fetch(`${s??Qe}${at(e)}`,{...p,headers:{...i?{}:{"Content-Type":"application/json"},...n?{Authorization:`Bearer ${n}`}:{},...l===null?{}:{"X-Portal-Audience":l??"shop"},...a},signal:p.signal??Ae({...p,audience:l})})}catch(g){throw g instanceof TypeError||he(g)?new f(H,W,null):g}let o;try{o=await r.text()}catch(g){throw he(g)?new f(H,W,null):g}let u=null;if(o)try{u=JSON.parse(o)}catch{throw new f(r.status,r.ok?"Expected JSON but received a non-JSON response":ye(r.status,r.statusText),o)}if(!r.ok){let g=(u&&typeof u=="object"&&"detail"in u&&typeof u.detail=="string"?u.detail:null)??ye(r.status,r.statusText);throw new f(r.status,g,u)}return u}var R=null;async function xe(){return R||(R=ct().finally(()=>{R=null}),R)}async function ct(){let e=w.takeLegacyRefresh(),t=await lt.refresh(e??void 0);return w.setTokens(t.access),t.access}async function ke(){return w.getAccess()??xe()}async function h(e,t={}){let n;try{n=await ke()}catch{throw w.clear(),new f(401,"Not signed in",null)}try{return await c(e,{...t,token:n})}catch(s){if(!(s instanceof f)||s.status!==401)throw s;try{let a=await xe();return await c(e,{...t,token:a})}catch{throw w.clear(),s}}}async function fe(e,t={}){if(w.getAccess())try{return{data:await h(e,t),asShopper:!0}}catch(n){if(!(n instanceof f)||n.status!==401)throw n}return{data:await c(e,t),asShopper:!1}}async function Se(){let e=await h("/api/auth/me/");if(e.portal!=="shop")throw w.clear(),new f(403,"This session is not valid for this shop.",null);return e}var lt={login:(e,t)=>c("/api/auth/login/",{method:"POST",body:JSON.stringify({email:e,password:t,portal:"shop"}),credentials:"include"}),refresh:e=>c("/api/auth/refresh/",{method:"POST",body:JSON.stringify(e?{refresh:e,portal:"shop"}:{portal:"shop"}),credentials:"include"}),logout:async()=>{w.clear();try{await c("/api/auth/logout/",{method:"POST",body:JSON.stringify({portal:"shop"}),credentials:"include"})}catch{}},restoreSession:async()=>{let e=await ke();return await Se(),e},me:Se,updateMe:e=>h("/api/auth/me/",{method:"PATCH",body:JSON.stringify(e)}),changePassword:(e,t)=>h("/api/auth/me/",{method:"PATCH",body:JSON.stringify({password:t,old_password:e})}),changeEmail:(e,t)=>h("/api/shop-portal/change-email/",{method:"POST",body:JSON.stringify({new_email:e,current_password:t})}),myProfile:()=>h("/api/shop-portal/profile/"),updateMyProfile:e=>h("/api/shop-portal/profile/",{method:"PATCH",body:JSON.stringify(e)}),myAddresses:()=>h("/api/shop-portal/delivery-locations/"),createAddress:e=>h("/api/shop-portal/delivery-locations/",{method:"POST",body:JSON.stringify(e)}),updateAddress:(e,t)=>h(`/api/shop-portal/delivery-locations/${e}/`,{method:"PATCH",body:JSON.stringify(t)}),deleteAddress:e=>h(`/api/shop-portal/delivery-locations/${e}/`,{method:"DELETE"}),passwordResetRequest:e=>c("/api/auth/password-reset/",{method:"POST",body:JSON.stringify({email:e})}),passwordResetConfirm:(e,t,n)=>c("/api/auth/password-reset/confirm/",{method:"POST",body:JSON.stringify({uid:e,token:t,new_password:n})}),brands:()=>h("/api/products/brands/"),myOrders:()=>h("/api/shop-portal/orders/").then(e=>e.results),myOrder:e=>h(`/api/shop-portal/orders/${e}/`),cancelOrder:e=>h(`/api/shop-portal/orders/${e}/cancel/`,{method:"POST"}),myReturns:e=>h(`/api/shop-portal/returns/${e?`?order=${encodeURIComponent(e)}`:""}`).then(t=>t.results),createReturn:e=>h("/api/shop-portal/returns/",{method:"POST",body:JSON.stringify(e)}),withdrawReturn:e=>h(`/api/shop-portal/returns/${e}/cancel/`,{method:"POST"}),uploadReturnPhoto:(e,t)=>{let n=new FormData;return n.append("claim_item",e),n.append("file",t),n.append("media_type",t.type.startsWith("video/")?"video":"image"),h("/api/shop-portal/return-media/",{method:"POST",body:n})}};function S(e){if(typeof e=="string")return e.startsWith("/media/")?V(e):e;if(Array.isArray(e))return e.map(S);if(e&&typeof e=="object"){let t={};for(let[n,s]of Object.entries(e))t[n]=n==="captions"&&s&&typeof s=="object"&&!Array.isArray(s)?Object.fromEntries(Object.entries(s).map(([a,l])=>[S(a),l])):S(s);return t}return e}var Ce=typeof window>"u"&&U!=="",ut=Ce?U:"",mt=j,b=()=>({baseUrl:mt(),audience:null});function m(e,t){let n=t?`?process=${encodeURIComponent(t)}`:"";return`/api/v1${e}${n}`}var dt=100,Pe=50;function Te(e,t,n){let s=new URLSearchParams;for(let[a,l]of Object.entries(t))l!=null&&l!==""&&s.set(a,String(l));return s.set("pageSize",String(dt)),n&&s.set("cursor",n),`/api/v1${e}?${s.toString()}`}function pt(e,t){return Te("/wheels",{process:e},t)}function gt(e,t,n){return Te("/products",{kind:e.join(","),make:t?.make,model:t?.model,year:t?.year,modification:t?.modification},n)}function ht(e){if(!e)return null;try{return new URL(e,"http://cursor.invalid").searchParams.get("cursor")}catch{return null}}async function we(e,t,n=()=>!1){let s=[],a=null;try{for(let l=0;l<Pe;l++){let p=await c(await t(a),await d());if(s.push(...p.results),a=ht(p.next),!a)break}a&&console.warn(`[${e}] stopped at ${Pe} pages (${s.length} rows); catalog may be truncated`)}catch(l){if(n(l))throw l;console.warn(`[${e}] product API unavailable, returning []`,l)}return s}var yt=e=>e instanceof f&&e.status===400;function ft(e){return e.flatMap(t=>t.kind==="alloy-wheel"?M([t]):[t])}async function Oe(){return(await St()).host}async function St(){try{let{headers:e}=await import("./headers-UYHEZDAT.js"),t=await e(),n=l=>l?.split(",")[0]?.split(":")[0]?.trim().toLowerCase()||null,s=n(t.get(ee)??t.get("x-forwarded-host")??t.get("host")),a=n(t.get("host"));return{host:s,matchesRequestHost:s!==null&&s===a}}catch{return{host:null,matchesRequestHost:!1}}}async function Pt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return Z((await e()).get(N))}catch{return null}}async function wt(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(Y)||null}catch{return null}}async function bt(){let e=await wt();if(e)return`site=${encodeURIComponent(e)}`;let t=await Oe();return t?`host=${encodeURIComponent(t)}`:""}async function y(e){if(typeof window<"u"){let t=$();return t?q(e,`site=${encodeURIComponent(t)}`):e}return q(e,await bt())}function q(e,t){return t?`${e}${e.includes("?")?"&":"?"}${t}`:e}var At="preview";async function Rt(){if(typeof window<"u")return null;try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get(te)}catch{return null}}async function _t(){try{let{headers:e}=await import("./headers-UYHEZDAT.js");return(await e()).get("user-agent")}catch{return null}}async function J(e,t){let n=await Rt();if(n===null)return[await y(e),await d(t)];let s=q(await y(e),`${At}=${encodeURIComponent(n)}`),{next:a,cache:l,...p}=t??{},i=await d({...p,cache:"no-store"}),r=await _t();return r&&(i.headers={...i.headers,"user-agent":r}),[s,i]}async function xt(e){if(!Ce)return;let[t,n]=await Promise.all([Oe(),Pt()]),s=Q(t,n,e);return Object.keys(s).length>0?s:void 0}async function d(e){let t=await xt(X(e)),n={baseUrl:ut,...e};return t&&(n.headers={...t,...e?.headers}),n}var _=typeof window>"u";function x(e,t){let n=new URLSearchParams;for(let[a,l]of Object.entries(t))l!==void 0&&l!==""&&n.set(a,String(l));let s=n.toString();return`/api/v1/fitment${e}${s?`?${s}`:""}`}var rn={listMakes:async e=>{if(_){let{fitmentData:n}=await import("./fitment-data-RORHKBID.js");return n.makes(e)}return(await c(x("/makes",{region:e}),b())).results},listModels:async(e,t)=>{if(_){let{fitmentData:s}=await import("./fitment-data-RORHKBID.js");return s.models(e,t)}return(await c(x("/models",{make:e,region:t}),b())).results},listYears:async(e,t,n)=>{if(_){let{fitmentData:a}=await import("./fitment-data-RORHKBID.js");return a.years(e,t,n)}return(await c(x("/years",{make:e,model:t,region:n}),b())).results},listModifications:async(e,t,n,s)=>{if(_){let{fitmentData:l}=await import("./fitment-data-RORHKBID.js");return l.modifications(e,t,n,s)}return(await c(x("/modifications",{make:e,model:t,year:n,region:s}),b())).results},getStockFitment:async(e,t,n,s,a)=>{if(_){let{fitmentData:l}=await import("./fitment-data-RORHKBID.js");return l.stockFitment(e,t,n,s,a)}return c(x("/stock-fitment",{make:e,model:t,year:n,modification:s,region:a}),b())}},sn={listWheels:async e=>{let t=await we("products.listWheels",async n=>await y(pt(e,n)));return M(S(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 n=await we("products.listCatalog",async s=>await y(gt(e,t,s)),yt);return ft(S(n))},getWheel:async e=>A(S(await c(await y(m(`/wheels/${e}`)),await d()))),getTyre:async e=>S(await c(await y(m(`/tyres/${e}`)),await d())),listBundles:async()=>{try{return await c(await y(m("/bundles")),await d())}catch{return[]}},getBundle:async e=>c(await y(m(`/bundles/${e}`)),await d()),listGalleryBuilds:async(e={})=>{let{process:t=null,wheelSlug:n=null}=e;if(typeof window>"u"){let{listGalleryBuilds:s}=await import("./gallery-builds-data-TD3QJK7L.js");return S(s(t,n))}try{let s=new URLSearchParams;t&&s.set("process",t),n&&s.set("wheelSlug",n);let a=s.toString(),l=await c(`/api/v1/gallery-builds${a?`?${a}`:""}`,b());return S(l.results)}catch(s){return console.warn("[products.listGalleryBuilds] product API unavailable, returning []",s),[]}},getSite:async()=>c(await y(m("/site")),await d()),getSiteBySlug:async e=>c(`${m("/site")}?${new URLSearchParams({site:e})}`,typeof window>"u"?await d():void 0),listPages:async()=>S(await c(await y(m("/pages")),await d())),listProductTemplates:async()=>{try{return await c(await y(m("/product-templates")),await d())}catch(e){return console.warn("[products.listProductTemplates] unavailable, returning []",e),[]}},listDynamicPages:async e=>{let t=e?`?recordType=${encodeURIComponent(e)}`:"";try{return await c(await y(`${m("/dynamic-pages")}${t}`),await d())}catch(n){if(n instanceof f&&n.status===404)return[];throw n}},getRecord:async(e,t)=>{try{return await c(await y(m(`/records/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)),await d())}catch(n){if(n instanceof f&&n.status===404)return null;throw n}},listRecordKeys:async e=>{try{let t=await c(await y(m(`/records/${encodeURIComponent(e)}`)),await d({cache:"no-store"}));return Array.isArray(t?.keys)?t.keys.filter(n=>typeof n=="string"&&n!==""):[]}catch(t){if(t instanceof f&&t.status===404)return[];throw t}},listProductTypeChoices:async()=>{try{return await c(await y(m("/product-type-choices")),await d())}catch(e){return console.warn("[products.listProductTypeChoices] unavailable, returning []",e),[]}},listFieldUsage:async()=>{try{return await c(await y(m("/field-usage")),await d())}catch(e){return console.warn("[products.listFieldUsage] unavailable, returning []",e),[]}},getPage:async(e,t={})=>{let n=t.record?`?record=${encodeURIComponent(t.record)}`:"",[s,a]=await J(m(`/pages/${e}`)+n,t.revalidate!==void 0?{next:{revalidate:t.revalidate}}:void 0);return S(await c(s,a))},listBlogPosts:async()=>{try{return(await c(m("/blog-posts"),await d())).map(t=>({...t,coverImage:T(t.coverImage)??""}))}catch(e){return console.warn("[products.listBlogPosts] blog API unavailable, returning []",e),[]}},getBlogPost:async e=>{let t=await c(m(`/blog-posts/${e}`),await d());return{...t,coverImage:T(t.coverImage)??""}},createOrder:async e=>c(m("/orders"),await d({method:"POST",body:JSON.stringify(e)})),createOrderAuthed:async e=>h(m("/orders"),await d({method:"POST",body:JSON.stringify(e)})),lookupOrder:async e=>c(m("/orders/lookup"),await d({method:"POST",body:JSON.stringify(e)})),createPaymentIntent:async e=>c(m("/payments/intent"),await d({method:"POST",body:JSON.stringify(e)})),createPaypalOrder:async e=>c(m("/payments/paypal/order"),await d({method:"POST",body:JSON.stringify(e)})),capturePaypalOrder:async e=>c(m("/payments/paypal/capture"),await d({method:"POST",body:JSON.stringify(e)})),createAfterpayCheckout:async e=>c(m("/payments/afterpay/checkout"),await d({method:"POST",body:JSON.stringify(e)})),captureAfterpayPayment:async e=>c(m("/payments/afterpay/capture"),await d({method:"POST",body:JSON.stringify(e)})),chargeSquare:async e=>c(m("/payments/square/charge"),await d({method:"POST",body:JSON.stringify(e)})),createGocardlessBillingRequest:async e=>c(m("/payments/gocardless/billing-request"),await d({method:"POST",body:JSON.stringify(e)})),completeGocardlessPayment:async e=>c(m("/payments/gocardless/complete"),await d({method:"POST",body:JSON.stringify(e)})),createZipCheckout:async e=>c(m("/payments/zip/checkout"),await d({method:"POST",body:JSON.stringify(e)})),captureZipPayment:async e=>c(m("/payments/zip/capture"),await d({method:"POST",body:JSON.stringify(e)})),createKlarnaCheckout:async e=>c(m("/payments/klarna/checkout"),await d({method:"POST",body:JSON.stringify(e)})),captureKlarnaPayment:async e=>c(m("/payments/klarna/capture"),await d({method:"POST",body:JSON.stringify(e)})),createStockAlert:async e=>c(m("/stock-alerts"),await d({method:"POST",body:JSON.stringify(e)})),createPreOrderIntent:async e=>c(m("/pre-order-intents"),await d({method:"POST",body:JSON.stringify(e)})),createNewsletterSubscription:async e=>c(m("/newsletter-subscriptions"),await d({method:"POST",body:JSON.stringify(e)})),unsubscribeNewsletter:async e=>c(m("/newsletter-unsubscribe"),await d({method:"POST",body:JSON.stringify(e)})),captureCart:async e=>c(m("/carts"),await d({method:"POST",body:JSON.stringify(e)})),restoreCart:async e=>c(m("/carts/restore"),await d({method:"POST",body:JSON.stringify(e)})),unsubscribeCartReminders:async e=>c(m("/carts/unsubscribe"),await d({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 n=m("/reviews"),s=t.toString();try{return await c(await y(s?`${n}?${s}`:n),await d())}catch(a){return console.warn("[products.listReviews] product API unavailable, returning []",a),[]}},submitReview:async e=>c(m("/reviews"),await d({method:"POST",body:JSON.stringify(e)})),getForm:async e=>c(m(`/forms/${encodeURIComponent(e)}`),await d()),submitForm:async(e,t)=>c(m(`/forms/${encodeURIComponent(e)}/submissions`),await d({method:"POST",body:JSON.stringify(t)})),listShippingMethods:async()=>{try{return await c(m("/shipping-methods"),await d())}catch(e){return console.warn("[products.listShippingMethods] product API unavailable, returning []",e),[]}},listCountrySubdivisions:async e=>{try{return await c(m(`/countries/${encodeURIComponent(e)}/subdivisions`),await d())}catch(t){return console.warn("[products.listCountrySubdivisions] unavailable, returning []",t),[]}},quoteCart:async e=>{let t=m("/cart/quote"),n=await d({method:"POST",body:JSON.stringify(e)});return e.couponCode?(await fe(t,n)).data:c(t,n)},validateCoupon:async e=>{let{data:t,asShopper:n}=await fe(m("/coupons/validate"),await d({method:"POST",body:JSON.stringify(e)}));return{...t,askedAsShopper:n}},getHeaderSettings:async()=>{let e=Ae({method:"GET"}),t=await c(...await J(m("/header-settings"),{signal:e})),n=T(t.logoUrl),s=null,a=null;if(n&&D(n)){let l=await pe(n,e);l&&(s=l.reversed,a=l.inkIsDark)}return{...t,logoUrl:n,logoReversed:s,logoInkIsDark:a}},getThemeSettings:async()=>c(...await J(m("/theme-settings"))),getChatSettings:async()=>c(await y(m("/chat-settings")),await d())},on={listServices:async()=>{try{return await c(m("/bookings/services"),await d())}catch(e){return console.warn("[bookings.listServices] API unavailable, returning []",e),{results:[],currency:"USD"}}},getAvailability:async(e,t)=>c(m(`/bookings/availability?service=${encodeURIComponent(e)}&date=${t}`),await d()),create:async e=>c(m("/bookings"),await d({method:"POST",body:JSON.stringify(e)})),get:async e=>c(m(`/bookings/manage/${encodeURIComponent(e)}`),await d()),cancel:async e=>c(m(`/bookings/manage/${encodeURIComponent(e)}/cancel`),await d({method:"POST"})),createPaymentIntent:async e=>c(m("/bookings/payments/intent"),await d({method:"POST",body:JSON.stringify({manageToken:e})}))},G=class extends Error{constructor(n,s){super(`Slug "${n}" exists on ${s} websites; a site is required to pick one.`);this.slug=n;this.count=s;this.name="AmbiguousPageSlugError"}},F=(e,t,n)=>{let s=new URLSearchParams({...t?{site:t}:{},...n?{draft:"1"}:{}}).toString();return`/api/storefront/${e}/${s?`?${s}`:""}`},k=e=>`/api/storefront/sites/${encodeURIComponent(e)}/`,kt=e=>`${k(e)}currencies/`,Ct="/api/storefront/media/ingest/",K=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 Tt(){let e=ge();if(!e)throw new K;return`${Ct}?${new URLSearchParams({site:e})}`}var I={"X-Puck-Media-Manifest":z.contentHash},an=ve({});function ve(e){return(t,n={})=>{let s=ot(),a=e.headers||s?{...s?{"Accept-Language":s}:{},...e.headers,...n.headers}:void 0;return c(t,{...n,...e.baseUrl!==void 0?{baseUrl:e.baseUrl}:{},...a?{headers:a}:{},audience:e.audience??st()})}}function Ot(e={}){let t=ve(e),n=e.siteDrafts===!0,s=i=>F("header-settings",i,n),a=i=>F("theme-settings",i,n),l=i=>F("chat-settings",i,n),p=i=>F("social-settings",i,n);return{findPageBySlug:async(i,r,o)=>{let u=new URLSearchParams({slug:i});o&&u.set("site",o);let g=await t(`/api/storefront/pages/?${u.toString()}`,{token:r}),P=Array.isArray(g)?g:g.results??[];if(!o&&P.length>1)throw new G(i,P.length);return P[0]??null},getPageById:(i,r)=>t(`/api/storefront/pages/${i}/`,{token:r}),saveLayout:(i,r,o,u,g)=>t(`/api/storefront/pages/${i}/`,{method:"PATCH",body:JSON.stringify({layout:r,expected_updated_at:u,...g?{client_id:g}:{}}),token:o}),duplicatePage:(i,r,o)=>t(`/api/storefront/pages/${i}/duplicate/`,{method:"POST",body:JSON.stringify({title:r.title,slug:r.slug}),token:o}),geocode:(i,r,o)=>t(`/api/storefront/geocode/?${new URLSearchParams(o?{q:i,country:o}:{q:i})}`,{token:r}),createPagePreviewLink:(i,r)=>t(`/api/storefront/pages/${i}/preview-link/`,{method:"POST",token:r}),claimPageEditLock:(i,r,o,u=!1)=>t(`/api/storefront/pages/${i}/edit-lock/`,{method:"POST",body:JSON.stringify({client_id:o,takeover:u}),token:r}),releasePageEditLock:(i,r)=>t(`/api/storefront/pages/${i}/edit-lock/`,{method:"DELETE",token:r}),createTemplate:(i,r,o)=>t("/api/storefront/page-templates/",{method:"POST",body:JSON.stringify({name:i,layout:r}),headers:I,token:o}),getTemplate:(i,r)=>t(`/api/storefront/page-templates/${i}/`,{token:r}),saveTemplateLayout:(i,r,o)=>t(`/api/storefront/page-templates/${i}/`,{method:"PATCH",body:JSON.stringify({layout:r}),headers:I,token:o}),listTemplatePages:async(i,r)=>{let o=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(i)}`,{token:r});return Array.isArray(o)?o:o.results??[]},findTemplatePageBySlug:async(i,r,o)=>{let u=await t(`/api/storefront/template-pages/?template=${encodeURIComponent(i)}&slug=${encodeURIComponent(r)}`,{token:o});return(Array.isArray(u)?u:u.results??[])[0]??null},createTemplatePage:(i,r,o)=>t("/api/storefront/template-pages/",{method:"POST",body:JSON.stringify({template:i,...r}),headers:I,token:o}),saveTemplatePageLayout:(i,r,o)=>t(`/api/storefront/template-pages/${i}/`,{method:"PATCH",body:JSON.stringify({layout:r}),headers:I,token:o}),deleteTemplatePage:(i,r,o)=>t(`/api/storefront/template-pages/${i}/`,{method:"DELETE",token:r,...o?.keepalive?{keepalive:!0}:{}}),listPages:async(i,r)=>{let o=new URLSearchParams({no_page:"true"});r&&o.set("site",r);let u=await t(`/api/storefront/pages/?${o.toString()}`,{token:i});return Array.isArray(u)?u:u.results??[]},createPage:(i,r,o,u)=>t("/api/storefront/pages/",{method:"POST",body:JSON.stringify({title:i,slug:r,layout:o}),token:u}),deletePage:(i,r)=>t(`/api/storefront/pages/${i}/`,{method:"DELETE",token:r}),getHeaderSettings:(i,r)=>t(s(r),{token:i}),listMenus:async(i,r)=>{let o=new URLSearchParams({no_page:"true"});r&&o.set("site",r);let u=await t(`/api/storefront/menus/?${o}`,{token:i});return Array.isArray(u)?u:u.results??[]},listBlogPosts:async(i,r={})=>{let o=new URLSearchParams({no_page:"true"});r.visibleOnly&&o.set("is_visible","true"),r.siteId&&o.set("site",r.siteId);let u=await t(`/api/storefront/blog-posts/?${o.toString()}`,{token:i});return Array.isArray(u)?u:u.results??[]},listFieldUsage:async(i,r)=>{let o=await t(`/api/storefront/field-usage/?site=${encodeURIComponent(r)}`,{token:i});return Array.isArray(o?.entries)?o.entries:[]},listCategories:async(i,r={})=>{let o=new URLSearchParams({no_page:"true"});r.visibleOnly&&o.set("is_visible","true"),r.siteId&&o.set("site",r.siteId);let u=await t(`/api/storefront/categories/?${o.toString()}`,{token:i});return[...Array.isArray(u)?u:u.results??[]].sort((P,C)=>P.sort_order-C.sort_order||P.name.localeCompare(C.name))},listForms:async(i,r={})=>{let o=new URLSearchParams({no_page:"true"});r.siteId&&o.set("site",r.siteId);let u=await t(`/api/storefront/forms/?${o.toString()}`,{token:i});return[...Array.isArray(u)?u:u.results??[]].sort((P,C)=>P.title.localeCompare(C.title))},listWheelSummaries:async(i,r={})=>{let o=new URLSearchParams;r.siteId&&o.set("site",r.siteId);let u=o.toString(),g=await t(`/api/storefront/wheel-curations/summaries/${u?`?${u}`:""}`,{token:i});return S(g)},listProducts:async(i,r={})=>{let o=new URLSearchParams;r.kinds?.length&&o.set("kind",r.kinds.join(",")),r.siteId&&o.set("site",r.siteId);let u=o.toString(),g=await t(`/api/storefront/products/${u?`?${u}`:""}`,{token:i});return S(g)},getWheelDetail:async(i,r,o={})=>{let u=new URLSearchParams({slug:r});return o.siteId&&u.set("site",o.siteId),A(S(await t(`/api/storefront/wheel-curations/detail/?${u.toString()}`,{token:i})))},updateHeaderSettings:(i,r,o)=>t(s(o),{method:"PATCH",body:JSON.stringify(i),token:r}),getSite:(i,r)=>t(k(i),{token:r}),listSites:async i=>{let r=await t("/api/storefront/sites/?no_page=true",{token:i});return Array.isArray(r)?r:r.results??[]},listSiteCurrencies:async(i,r)=>{let o=await t(kt(i),{token:r});return Array.isArray(o)?o:[]},publishSite:(i,r)=>t(`${k(i)}publish/`,{method:"POST",token:r}),getSiteLiveState:(i,r)=>t(`${k(i)}live-state/`,{token:r}),updateSite:(i,r,o)=>t(k(i),{method:"PATCH",body:JSON.stringify(r),token:o}),getThemeSettings:(i,r)=>t(a(r),{token:i}),updateThemeSettings:(i,r,o)=>t(a(o),{method:"PATCH",body:JSON.stringify(i),token:r}),getChatSettings:(i,r)=>t(l(r),{token:i}),updateChatSettings:(i,r,o)=>t(l(o),{method:"PATCH",body:JSON.stringify(i),token:r}),getSocialSettings:(i,r)=>t(p(r),{token:i}),updateSocialSettings:(i,r,o)=>t(p(o),{method:"PATCH",body:JSON.stringify(i),token:r}),uploadHeaderLogo:(i,r,o)=>{let u=new FormData;return u.append("logo",i),t(s(o),{method:"PATCH",body:u,token:r})},clearHeaderLogo:(i,r)=>t(s(r),{method:"PATCH",body:JSON.stringify({logo:null}),token:i}),setHeaderLogoFromAsset:(i,r,o)=>t(s(o),{method:"PATCH",body:JSON.stringify({logo_asset_id:i}),token:r}),uploadMedia:async(i,r)=>{let o=new FormData;return o.append("file",i),t(Tt(),{method:"POST",body:o,token:r})},listMedia:async(i,r)=>{let o=new URLSearchParams({no_page:"true"});r&&o.set("kind",r);let u=await t(`/api/storefront/media-assets/?${o.toString()}`,{token:i});return Array.isArray(u)?u:u.results??[]}}}var cn=Ot({siteDrafts:!0});export{U as a,Q as b,X as c,w as d,Ie as e,D as f,ge as g,Qe as h,f as i,W as j,H as k,Qt as l,Xt as m,c as n,lt as o,Oe as p,St as q,Pt as r,wt as s,Rt as t,rn as u,sn as v,on as w,G as x,an as y,cn as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as ct,i as me,q as dt,s as ft,t as pt,v as B}from"./chunk-FCCEAXMM.js";import{Aa as pe,Ba as lt,Ea as $e,Fa as ut,Ia as Be,Ja as We}from"./chunk-I6VNNXUI.js";import{j as st,l as oe}from"./chunk-VT346MLP.js";import{createContext as ln,useContext as bt,useEffect as un,useMemo as he,useState as ht}from"react";function mt(e,t){return e.map(n=>({partNumber:n.partNumber,quantity:n.wheels*t}))}function ie(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 qe=4,Pr=1,wr={unit:"set",spares:0,spareSide:"left"};function gt(e){return e.unit==="single"?1:qe+e.spares}function _r(e,t){return[{partNumber:e.partNumber,wheels:gt(t),prices:e.prices}]}function Rr(e,t){let n=gt(t)-qe;if(n<=0||e.length===0)return e;let r=an(e),o=r?r[t.spareSide]:0;return e.map((i,a)=>a===o?{...i,wheels:i.wheels+n}:i)}function an(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 sn(e,t){return t.spares>0?`${e} + spare`:e}function Nr(e){return e.unit==="single"?"Single":sn(`Set of ${qe}`,e)}var Lr="data-add-to-basket",Ge=9,Ne="en";function ge(e,t,n=0){return new Intl.NumberFormat(Ne,{style:"currency",currency:t,minimumFractionDigits:0,maximumFractionDigits:n}).format(e)}function Ir(e,t){return new Intl.NumberFormat(Ne,{style:"currency",currency:t}).format(e)}import{jsx as pn}from"react/jsx-runtime";var cn="storefront-country",yt=cn,Ke=ln(null);function dn(e){return Ct(e,"catalogue")}function fn(e){return Ct(e,"money")}function Ct(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 s=n.get(i)??0;a=new Intl.NumberFormat(Ne,{style:"currency",currency:i,minimumFractionDigits:t==="money"?s:0,maximumFractionDigits:s}),r.set(i,a)}return a.format(o)}}function Mr({children:e,currencies:t,countries:n,defaultCurrency:r,defaultCountry:o}){let i=he(()=>t??[],[t]),a=he(()=>n??[],[n]),s=he(()=>r||i.find(y=>y.isDefault)?.code||i[0]?.code||"",[r,i]),c=he(()=>o||a.find(y=>y.isDefault)?.code||a[0]?.code||"",[o,a]),[u,f]=ht(c),[d,S]=ht(!1);un(()=>{let y=oe.getItem(yt);y&&a.some(w=>w.code===y)&&f(y),S(!0)},[a]);function R(y){f(y),oe.setItem(yt,y)}let C=he(()=>{let y=a.find(v=>v.code===u)??null,w=y?.currency,O=w&&i.some(v=>v.code===w)?w:s,M=dn(i),L=fn(i);return{country:u,currency:O,setCountry:R,currencies:i,countries:a,activeCountry:y,formatPrice:(v,x)=>M(v,x??O),formatMoney:(v,x)=>L(v,x??O),ready:d}},[u,i,a,s,d]);return pn(Ke.Provider,{value:C,children:e})}function xt(){let e=bt(Ke);if(!e)throw new Error("useCurrency must be used within a CurrencyProvider");return e}function Dr(){return bt(Ke)?.country??""}import{createContext as Nn,useCallback as T,useContext as Ln,useEffect as j,useMemo as kt,useRef as ae,useState as k}from"react";function vt(e,t){return e.valid?!1:e.reason==="firstOrderOnly"?!0:e.reason==="notEligible"&&!t}var Et="We'll confirm this discount when you place your order.",$r="Confirmed at checkout";function Br(e){return e&&(e.valid||e.deferred)?e.code:void 0}var St="coupon_code: ";function Wr(e){return!(e instanceof me)||e.status!==400||!e.message.startsWith(St)?null:e.message.slice(St.length)}function Pt(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 Le="Price on request",gn="Request a quote",hn="from ",zr="From ",Xr="each",wt="Free";function ze(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Xe(e,t){let n=e?.[t];return ze(n)?n:null}function Yr(e,t,n,r){let o=Xe(e,n),i=Xe(t,n);return o===null&&i===null?0:o===null?1:i===null?-1:r==="asc"?o-i:i-o}function Vr(e,t,n,r){if(n==null&&r==null)return!0;let o=Xe(e,t);return!(o===null||n!=null&&o<n||r!=null&&o>r)}var yn={priced:!1,unit:null,was:null,onSale:!1,setTotal:null};function bn(e,t,n){if(!ze(e))return yn;let r=ze(t)&&t>e?t:null;return{priced:!0,unit:e,was:r,onSale:r!==null,setTotal:n!=null?e*n:null}}function jr(e,t,n=""){return!e.priced||e.unit==null?Le:`${n}${ge(e.unit,t)}`}function Qr(e,t){return e.was==null?null:ge(e.was,t)}function Cn(e,t,n=1){let r=ie(e,t);if(r===null)return{priced:!1,unit:null,isFrom:!1,setTotal:null};let o=e.reduce((a,s)=>a+s.wheels,0),i=Math.min(...e.map(a=>a.prices[t]));return{priced:!0,unit:i,isFrom:i*o!==r,setTotal:r*n}}var xn={priced:!1,unit:null,isFrom:!1,was:null,onSale:!1,setTotal:null};function Zr(e,t,n,r=1){let o=bn(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}:{...xn,fromSetTotal:i}}function Sn(e,t){return!e.priced||e.unit==null?Le:`${e.isFrom?hn:""}${ge(e.unit,t)}`}function Jr(e,t){return e.was==null?null:ge(e.was,t)}function eo(e,t){return!e.priced||e.unit==null?gn:Sn(e,t)}var vn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function _t(e){return vn.test(e.trim())}var Rt="sf:ga-purchases",En=20;function Lt(){return typeof window>"u"||window.parent!==window}function ye(...e){try{if(Lt()||typeof window.gtag!="function")return;window.gtag(...e)}catch{}}function Pn(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:ie(e.components,t)??0,quantity:e.qty}}function Ye(e,t){return e.filter(Ie).map(n=>Pn(n,t))}function ao(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 It(e,t){let n=Ye([e],t);n.length!==0&&ye("event","add_to_cart",{currency:t,value:n[0].price*n[0].quantity,items:n})}function so(e){let t=Ye(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 Nt=new Set;function wn(e){if(Nt.has(e))return!1;Nt.add(e);try{let t=JSON.parse(oe.getItem(Rt)??"[]");if(t.includes(e))return!1;oe.setItem(Rt,JSON.stringify([...t,e].slice(-En)))}catch{}return!0}function lo(e){let t=e.confirmation;if(Lt()||!wn(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:Ye(e.lines,n)}),e.adsSendTo&&ye("event","conversion",{send_to:e.adsSendTo,transaction_id:t.orderNumber,currency:n,value:r})}var _n="Arranged after review",At="Calculated at checkout",Rn=At,fo=At;function Tt({quoted:e,optionCount:t,chosenAmount:n,couponWaivesFreight:r}){return e&&t===0?"arranged":r?"free":n===void 0?"pending":n===0?"free":"charged"}function po(e){switch(e){case"arranged":return _n;case"pending":return Rn;case"free":return wt;case"charged":return null}}import{jsx as kn}from"react/jsx-runtime";var In=400,An=400,Tn=1500;function Ie(e){return(e.components?.length??0)>0}function Ot(e,t){return{code:e,valid:t.valid,deferred:vt(t,t.askedAsShopper),message:t.message||void 0,effects:t.effects??void 0}}function Dt(e,t){return ie(e.components,t)}function Ve(e,t){let n=Dt(e,t);return n===null?null:n*e.qty}function Mt(e){return e!=="tyre"}var Ft=Nn(null);function wo({children:e,preview:t=!1}){let{currency:n,country:r,formatMoney:o}=xt(),[i,a]=k(t),[s,c]=k([]),[u,f]=k([]),[d,S]=k([]),[R,C]=k(!1),[y,w]=k(!1),[O,M]=k(!1),[L,v]=k(!1),[x,W]=k(null),[I,q]=k(void 0),b=ae(r),_=ae("");b.current=b.current||r;let[p,G]=k(null),[Q,F]=k(!1),[D,ve]=k(null),K=ae(void 0),Y=T(()=>a(!0),[]),le=T(()=>a(!1),[]),Z=T(()=>a(l=>!l),[]);j(()=>{t||typeof window>"u"||new URLSearchParams(window.location.search).get("cart")==="open"&&Y()},[Y,t]);let Ee=T(l=>{v(!0),Mt(l)&&M(!0)},[]),U=O||s.some(l=>Mt(l.kind)),Pe=L||s.length>0;j(()=>{if(t||!U||R)return;let l=!0;return B.listWheels().then(m=>{l&&(f(m),C(!0))}),()=>{l=!1}},[t,U,R]),j(()=>{if(t||!Pe||y)return;let l=!0;return B.listBundles().then(m=>{l&&(S(m),w(!0))}),()=>{l=!1}},[t,Pe,y]);let P=x?.deliveryOptions??[];j(()=>{P.length!==0&&ve(l=>l&&P.some(m=>m.id===l)?l:P[0]?.id??null)},[x]);let J=T(()=>s.filter(Ie).flatMap(l=>mt(l.components,l.qty)),[s]),ee=T(async(l,m)=>{let h=l.trim().toUpperCase();if(!h)return;let g=J();if(g.length===0){G({code:h,valid:!1,message:"Add a wheel to the cart first."});return}F(!0),K.current=m;try{let N=await B.validateCoupon({code:h,items:g,currency:n,shippingMethodId:D??void 0,customerEmail:m});G(Ot(h,N))}catch{G({code:h,valid:!1,message:"Could not check that code. Please try again."})}finally{F(!1)}},[J,n,D]),ue=T(()=>{G(null),K.current=void 0},[]),ce=T(l=>{if(!p)return;let{code:m}=p;G(h=>h&&h.code===m?{code:m,valid:!1,refused:!0,message:l}:h)},[p]);j(()=>{if(!p||p.refused)return;let l=p.code,m=g=>g!==null&&g.code===l&&!g.refused,h=setTimeout(async()=>{let g=J();if(g.length===0){G(N=>m(N)?{code:l,valid:!1,message:"Add a wheel to the cart first."}:N);return}F(!0);try{let N=await B.validateCoupon({code:l,items:g,currency:n,shippingMethodId:D??void 0,customerEmail:K.current});G(fe=>m(fe)?Ot(l,N):fe)}catch{}finally{F(!1)}},In);return()=>clearTimeout(h)},[s,n,D]);let te=p&&!p.refused?p.code:void 0;j(()=>{if(t)return;let l=!0,m=setTimeout(async()=>{let h=J();if(h.length===0){W(null),q(void 0);return}try{let g=await B.quoteCart({items:h,currency:n,shippingMethodId:D??void 0,couponCode:te,customerEmail:K.current||void 0,country:b.current||void 0,subdivision:_.current||void 0});if(!l)return;W(g)}catch{if(!l)return}q(te)},An);return()=>{l=!1,clearTimeout(m)}},[s,n,D,te,r]);let de=T(l=>{c(m=>{let h=m.findIndex(g=>g.id===l.id);return h===-1?[...m,l]:m.map((g,N)=>N===h?{...g,qty:Math.min(Ge,g.qty+l.qty)}:g)}),It(l,n)},[n]),ne=T(l=>{c(m=>m.filter(h=>h.id!==l))},[]),we=T((l,m)=>{let h=Math.max(1,Math.min(Ge,m));c(g=>g.map(N=>N.id===l?{...N,qty:h}:N))},[]),_e=T(l=>{c(l)},[]),[E,H]=k(null),V=ae(null);V.current=E;let $=ae(null),Fe=ae(""),nt=T((l,m)=>{let h=l.trim().toLowerCase();_t(h)&&H(g=>g&&g.email===h&&g.firstName===(m??"")?g:{email:h,firstName:m??""})},[]);j(()=>{if(t||!E)return;let l=Pt(s.filter(Ie),g=>Ve(g,n)===null?Le:o(Ve(g,n),n)),m={email:E.email,firstName:E.firstName,currency:n,items:l},h=JSON.stringify(m);if(h!==Fe.current)return $.current&&clearTimeout($.current),$.current=setTimeout(()=>{$.current=null,Fe.current=h,B.captureCart(m).catch(g=>{})},Tn),()=>{$.current&&(clearTimeout($.current),$.current=null)}},[s,E,n,t]);let rt=T(()=>{$.current&&(clearTimeout($.current),$.current=null);let l=V.current;l&&(Fe.current="",B.captureCart({email:l.email,firstName:l.firstName,currency:n,items:[]}).catch(m=>{}))},[n]),ot=kt(()=>{let l=s.reduce((A,re)=>{let Re=Ve(re,n);return Re===null?A:A+Re},0),m=s.some(A=>Dt(A,n)===null),h=s.reduce((A,re)=>A+re.qty,0),g=p?.valid?p.effects:void 0,N=g?Math.min(l,Number(g.discountAmount)):0,fe=x?.bundleDiscount??0,en=x?.appliedBundles??[],Ue=!!g?.freeShipping,it=P.find(A=>A.id===D),at=Ue?0:x?.shipping??it?.amount??0,tn=Tt({quoted:x!==null,optionCount:P.length,chosenAmount:it?.amount,couponWaivesFreight:Ue}),He={};for(let A of g?.freeUnits??[])He[A.partNumber]=(He[A.partNumber]??0)+A.quantity;let nn=x?.tax??null,rn=x?x.grandTotal:l-N-fe+at;return{sets:h,units:s.reduce((A,re)=>A+(re.components??[]).reduce((Re,on)=>Re+on.wheels*re.qty,0),0),subtotal:l,hasUnpricedLine:m,discount:N,bundleDiscount:fe,appliedBundles:en,shipping:at,freeShipping:Ue,shippingStatus:tn,freeUnitsByPartNumber:He,tax:nn,grand:rn,repricing:!!p?.refused&&x!==null&&I===p?.code,currency:n}},[s,n,p,P,D,x,I]),Jt=kt(()=>({isOpen:i,preview:t,open:Y,close:le,toggle:Z,items:s,catalog:u,bundles:d,warmCatalog:Ee,add:de,remove:ne,setQty:we,replaceItems:_e,identify:nt,clearCapturedCart:rt,coupon:p,applyCoupon:ee,removeCoupon:ue,refuseCoupon:ce,couponBusy:Q,deliveryOptions:P,shippingMethodId:D,setShippingMethodId:ve,totals:ot}),[i,t,Y,le,Z,s,u,d,Ee,de,ne,we,_e,nt,rt,p,ee,ue,ce,Q,P,D,ot]);return kn(Ft.Provider,{value:Jt,children:e})}function Ut(){let e=Ln(Ft);if(!e)throw new Error("useCart() must be called inside <CartProvider>. Mount the provider in app/layout.tsx.");return e}import{cache as Gn}from"react";function Ht(e,t,n,r){for(;e.size>=t;){let o,i;for(let[s,c]of e){if(c.expiresAt<=r){o=s;break}i===void 0&&n(s)&&(i=s)}let a=o??i??e.keys().next().value;if(a===void 0)return;e.delete(a)}}var On=6e4,Mn=5e3,Dn=500,Ae=new Map;async function Fn(e){let{host:t,matchesRequestHost:n}=await dt();if(!t)return"";let r=await ft();return r?`${e}|slug:${encodeURIComponent(t)}/${encodeURIComponent(r)}`:n?`${e}|host:${t}`:`${e}|xhost:${t}`}var Un=e=>e.includes("|slug:")||e.includes("|xhost:");async function $t(e,t){if(await pt()!==null)return t();let n=await Fn(e);if(!n)return t();let r=Date.now(),o=Ae.get(n);if(o&&o.expiresAt>r)return o.load;let i=await t(),a=i.outcome.state==="failed",s=a?Mn:On,c=Ae.get(n)?.lastGood,u=i.outcome.state==="ok"?i:a?c:void 0,f=a&&u?u:i;return Ht(Ae,Dn,Un,r),Ae.set(n,{load:f,expiresAt:r+s,lastGood:u}),f}var Hn=404;function $n(e){if(e instanceof me&&e.status===Hn)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 Bn="[storefront:chrome-load-failed]";function Wn(e,t){console.error(`${Bn} ${e} status=${t.status} \u2014 serving fallback chrome`,t.detail)}async function Bt(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=$n(o);return i.state==="failed"&&Wn(e,i),{value:n,outcome:i}}}function qn(e){return e==="production"?"silent":"banner"}var ko=qn("production");function Kn(e,t){return e?.trim()||t}function Bo({legalName:e,foundedYear:t,siteName:n},r=new Date().getFullYear()){let o=Kn(e,n);return`\xA9 ${t&&t<r?`${t}\u2013${r}`:`${r}`} ${o}`}var zn={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,consentEnabled:!1,consentPrivacyPage:null,consentNoticeOptOut:!1,socialLinks:$e},Wo=Gn(async()=>$t("site",()=>Bt("site",async()=>{let e=await B.getSite();return{name:lt(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,consentEnabled:e.consentEnabled??!1,consentPrivacyPage:e.consentPrivacyPage??null,consentNoticeOptOut:e.consentNoticeOptOut??!1,socialLinks:ut(e.socialLinks)}},zn)));var qo={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,consentEnabled:!1,consentPrivacyPage:null,consentNoticeOptOut:!1,socialLinks:$e};import{jsx as Ce,jsxs as je}from"react/jsx-runtime";import{useEffect as Te,useId as jn,useRef as qt,useState as ke}from"react";import{efficientClientOpen as Xn}from"efficient-easel/screen/lib/session";var be=new Map,Yn=64;async function Vn(e){if(!Xn())return null;try{let t=await fetch(`${st()}/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 Wt(e){let t=be.get(e);if(t)return t;let n=Vn(e);if(be.set(e,n),be.size>Yn){let r=be.keys().next();r.done||be.delete(r.value)}return n}var Qn=202/22,Zn=.88,oi=16,Jn="invert(1)";function ii({variant:e="header",scrolled:t=!0,src:n,reverse:r=!1,color:o=null,onLightSurface:i,reversedSrc:a,inkIsDark:s,size:c="medium",sizePx:u,wordmark:f,siteName:d=pe,fitToContainer:S=!1,fitWordmarkToContainer:R=!1,fitFloorPx:C}){let y=f&&f.trim()?f.trim():d,[w,O]=ke(!1),M=qt(null),L=E=>{M.current=E};Te(()=>{let E=M.current?.ownerDocument??document,H=()=>{O(E.documentElement.getAttribute("data-theme")==="light")};H();let V=new MutationObserver(H);return V.observe(E.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>V.disconnect()},[]);let v=n&&n.trim()?n.trim():null,x=!!v&&ct(v),W=i??(w&&t),I=o&&o.trim()?o.trim():null,q=r&&!I,b=`logo-color-${jn().replace(/[^A-Za-z0-9_-]/g,"")}`,_=q&&x&&v&&a!=null?{reversed:a,inkIsDark:s??null}:null,p=_!==null,[G,Q]=ke(null);Te(()=>{if(!q||!v||!x||p){Q(null);return}let E=!1;return Q(null),Wt(v).then(H=>{E||Q(H)}),()=>{E=!0}},[q,v,x,p]);let F=_??G,D=!!F&&F.inkIsDark!==null&&(W?!F.inkIsDark:F.inkIsDark),ve=q&&!!v&&!x&&!W,K=D&&F?F.reversed:v,Y=K?[K]:[],[le,Z]=ke(0);Te(()=>{Z(0)},[v,D]);let Ee=e==="footer"?We:Be[c],U=u&&u>0?u:Ee,Pe=Math.round(U*Qn),P=le<Y.length?Y[le]:null,[J,ee]=ke(K),ue=P!==null&&P===J,ce=qt(null);Te(()=>{let E=ce.current;if(!E||!E.complete)return;if(E.naturalWidth>0||E.naturalHeight>0){ee(P);return}let H=!1;return E.decode().then(()=>!H&&ee(P),()=>!H&&Z(V=>V+1)),()=>{H=!0}},[P]);let te=S||R,de=`calc(100cqi / ${((y.length+1)*Zn).toFixed(2)})`,ne=te&&C&&C>0?Math.min(C,U):null,we=te?ne===null?`min(${U}px, ${de})`:`clamp(${ne}px, ${de}, ${U}px)`:`${U}px`,_e=je("span",{className:`font-display font-bold tracking-[0.18em] ${ne===null?"whitespace-nowrap":"whitespace-normal"}`,style:{fontSize:we,lineHeight:1,...I?{color:I}:{}},"aria-label":y,children:[y,Ce("span",{className:"text-accent",style:I?{color:I}:void 0,children:"."})]});return je("span",{ref:L,className:"inline-flex items-center",children:[!ue&&_e,I&&P&&Ce("svg",{"aria-hidden":"true",focusable:"false",width:"0",height:"0",style:{position:"absolute"},children:je("filter",{id:b,colorInterpolationFilters:"sRGB",children:[Ce("feFlood",{style:{floodColor:I}}),Ce("feComposite",{in2:"SourceAlpha",operator:"in"})]})}),P&&Ce("img",{ref:ce,src:P,alt:y,width:Pe,height:U,className:"shrink-0 object-contain",style:{...ue?{height:`${U}px`,width:"auto",...S?{maxWidth:"100cqi"}:{}}:{display:"none"},...ve?{filter:Jn}:{},...I?{filter:`url(#${b})`}:{}},onLoad:()=>ee(P),onError:()=>Z(E=>E+1)},P)]})}import{jsx as xe,jsxs as tr}from"react/jsx-runtime";function er({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 f=u+Math.PI/e;s.push({x1:a(100+Math.cos(f)*22*1.4),y1:a(100+Math.sin(f)*22*1.4),x2:a(100+Math.cos(f)*78),y2:a(100+Math.sin(f)*78),main:!1})}}return tr("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:[xe("circle",{cx:100,cy:100,r:92,strokeWidth:2}),xe("circle",{cx:100,cy:100,r:84,strokeWidth:1,opacity:.4}),xe("circle",{cx:100,cy:100,r:22,strokeWidth:2}),xe("circle",{cx:100,cy:100,r:6,fill:"currentColor"}),s.map((c,u)=>xe("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 ui="#c9a461",Gt=[{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"}],ci={name:"",color:"var(--fg)",family:"silver",src:""};function nr(e,t){let n=r=>{let o=Gt.findIndex(i=>i.f===r);return o===-1?Gt.length:o};return n(e)-n(t)||e.localeCompare(t)}function di(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(nr)}import{useState as rr}from"react";import{jsx as se,jsxs as Qe}from"react/jsx-runtime";function or({customerEmail:e}){let{coupon:t,applyCoupon:n,removeCoupon:r,couponBusy:o}=Ut(),[i,a]=rr("");async function s(){o||!i.trim()||(await n(i,e),a(""))}return Qe("div",{className:"flex flex-col gap-2",children:[t===null?Qe("div",{className:"flex border border-line",children:[se("input",{type:"text",value:i,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"}),se("button",{type:"button",onClick:()=>{s()},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"})]}):Qe("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:[se("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}),se("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?se("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-fg-dim",children:Et}):t&&!t.valid&&t.message&&se("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-alert",children:t.message})]})}var Ze="Ads on. Shopper can opt out.",Oe="Ads and analytics off until Accept",ir={us:{region:"us",name:"United States",model:"opt-out",law:"California CCPA / CPRA, other state laws",beforeChoice:Ze,footerLink:"Do Not Sell or Share My Personal Information",panelEyebrow:"Do not sell or share",adsRowName:"Sale or sharing for ads"},ca:{region:"ca",name:"Canada",model:"opt-in",law:"PIPEDA, Quebec Law 25",beforeChoice:Oe,footerLink:"Privacy choices",panelEyebrow:"Privacy choices",adsRowName:"Advertising"},au:{region:"au",name:"Australia",model:"opt-out",law:"Privacy Act 1988 (APPs)",beforeChoice:Ze,footerLink:"Privacy choices",panelEyebrow:"Privacy choices",adsRowName:"Advertising"},nz:{region:"nz",name:"New Zealand",model:"opt-out",law:"Privacy Act 2020",beforeChoice:Ze,footerLink:"Privacy choices",panelEyebrow:"Privacy choices",adsRowName:"Advertising"},uk:{region:"uk",name:"United Kingdom",model:"opt-in",law:"PECR, UK GDPR",beforeChoice:Oe,footerLink:"Cookie settings",panelEyebrow:"Cookie settings",adsRowName:"Advertising"},eu:{region:"eu",name:"European Union",model:"opt-in",law:"ePrivacy Directive, GDPR",beforeChoice:Oe,footerLink:"Cookie settings",panelEyebrow:"Cookie settings",adsRowName:"Advertising"},other:{region:"other",name:"All other countries",model:"opt-in",law:"Safe default",beforeChoice:Oe,footerLink:"Cookie settings",panelEyebrow:"Cookie settings",adsRowName:"Advertising"}};function ar(e){let t=[...e.googleAds?["Google"]:[],...e.meta?["Facebook","Instagram"]:[]];return t.length<=1?t.join(""):`${t.slice(0,-1).join(", ")} and ${t[t.length-1]}`}function bi(e,t,n){let r=ar(n),o=r?`We use cookies to count visits and to show you ${t} ads on ${r}.`:"We use cookies to count visits.";return e.model==="opt-in"?{heading:r?"Cookies and ads":"Cookies",before:`${o} Nothing loads until you choose. You can change this at any time with `,link:e.footerLink,after:" at the bottom of every page."}:{heading:r?"Cookies and ads":"Cookies",before:`${o} You can say no at any time: choose Privacy choices, or use `,link:e.footerLink,after:" at the bottom of every page."}}var Ci={accept:"Accept all",reject:"Reject all",choose:"Choose",save:"Save",ok:"OK",privacyChoices:"Privacy choices",privacyPolicy:"Privacy Policy",alwaysOn:"Always on"};var sr={asked:!1,region:"other",model:"opt-in",analytics:!0,ads:!0,chosen:!0,gpc:!1};var lr=sr;function Ei(e=lr){if(e.asked)return e.ads?"granted":"denied"}function wi(){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 cr,isValidElement as dr,useEffect as zt,useId as fr,useLayoutEffect as Vt,useRef as z,useState as Xt}from"react";var Me=(e,t)=>!!e[t]&&!e[t].disabled;function Je(e,t,n){let r=e.length;for(let o=1;o<=r;o++){let i=((t+n*o)%r+r)%r;if(Me(e,i))return i}return t}function et(e,t){return Je(e,t===1?-1:e.length,t)}function tt(e,t){return Me(e,t)?t:Math.max(et(e,1),0)}function Kt(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(),s=n.findIndex((c,u)=>Me(n,u)&&c.label.toLowerCase().startsWith(a));return{state:i({open:!0,typed:a,focus:s>=0?s: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:Je(n,o,1)}),handled:!0};case"ArrowUp":return{state:i({focus:Je(n,o,-1)}),handled:!0};case"Home":return{state:i({focus:et(n,1)}),handled:!0};case"End":return{state:i({focus:et(n,-1)}),handled:!0};case"Enter":case" ":return Me(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{placeMenu as pr}from"efficient-shell/ui";import{Fragment as Cr,jsx as X,jsxs as jt}from"react/jsx-runtime";var Yt={body:"text-[length:var(--size-body,14px)]",label:"text-[length:var(--size-label,13px)]"};function mr({items:e,value:t,onPick:n,open:r,onOpen:o,onClose:i}){let[a,s]=Xt(!1),c=r!==void 0,u=c?r:a,[f,d]=Xt(0),S=z({text:"",timer:0}),R=z(null),C=z(null),y=z(null),w=fr(),O=z(null),M=e.findIndex(b=>b.value===t),L=b=>{b!==u&&(c||s(b),b?o?.():i?.())},v=b=>{let _=e[b];!_||_.disabled||(n(_.value),L(!1),C.current?.focus())},x=b=>{let _={open:u,focus:u?f:tt(e,M),typed:S.current.text},p=Kt(_,b,e);return!p.handled&&p.state.open===u?!1:(p.state.typed!==_.typed&&(S.current.text=p.state.typed,window.clearTimeout(S.current.timer),S.current.timer=window.setTimeout(()=>{S.current.text=""},500)),d(p.state.focus),p.commit!==void 0?v(p.commit):L(p.state.open),p.refocus&&C.current?.focus(),p.handled)},W=z(x);W.current=x;let I=z(()=>L(!1));I.current=()=>L(!1);let q=b=>{u||(O.current=b.nativeEvent,W.current(b.key)&&b.preventDefault())};return zt(()=>{if(!u)return;let b=p=>{R.current?.contains(p.target)||I.current()},_=p=>{p!==O.current&&W.current(p.key)&&p.preventDefault()};return document.addEventListener("mousedown",b),document.addEventListener("keydown",_),()=>{document.removeEventListener("mousedown",b),document.removeEventListener("keydown",_)}},[u]),zt(()=>{u&&(S.current.text||d(tt(e,M)))},[u]),Vt(()=>{if(!u||!y.current)return;y.current.children.item(f)?.scrollIntoView({block:"nearest"})},[f,u]),{open:u,toggle:()=>L(!u),close:()=>L(!1),focusIdx:f,setFocusIdx:d,pick:b=>v(e.findIndex(_=>_.value===b)),wrapRef:R,triggerRef:C,listRef:y,listId:w,onTriggerKeyDown:q,activeId:u?`${w}-${f}`:void 0}}var gr={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 ${Yt.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 ${Yt.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 hr(e,t){Vt(()=>{let n=e.current,r=n?.ownerDocument.defaultView;if(!n||!r)return;let o=()=>{let i=n.style;i.top=i.bottom=i.marginTop=i.marginBottom=i.maxHeight=i.overflowY=i.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",f=pr({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(f.side==="top"){i.top="auto",i.bottom="100%",i.marginTop="0px";let S=f.top+Math.min(c.height,f.maxHeight);i.marginBottom=`${Math.max(0,s.top-S)}px`}f.maxHeight<c.height&&(i.maxHeight=`${f.maxHeight}px`,i.overflowY="auto");let d=f.left-c.left;d&&(i.translate=`${d}px`)};return o(),r.addEventListener("resize",o),r.addEventListener("scroll",o,!0),()=>{r.removeEventListener("resize",o),r.removeEventListener("scroll",o,!0)}},[e,t])}function yr({id:e,tone:t,items:n,value:r,focusIdx:o,onFocus:i,onPick:a,listRef:s,ariaLabel:c}){let u=gr[t],f=z(null);return hr(f,n.length),X("ul",{ref:d=>{f.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 R=d.value===r;return X("li",{id:`${e}-${S}`,role:"option","aria-selected":R,"aria-disabled":d.disabled||void 0,onMouseEnter:()=>!d.disabled&&i(S),onMouseDown:C=>{C.preventDefault(),d.disabled||a(d.value)},className:u.item(S===o,R&&d.value!=="",!!d.disabled,S===n.length-1),style:u.itemStyle?.(R),children:d.meta===void 0?d.label:jt(Cr,{children:[d.lead,X("span",{className:"flex-1 whitespace-nowrap",children:d.label}),X("span",{className:"ml-auto text-[12px] opacity-50",children:d.meta})]})},`${d.value}_${S}`)})})}function br({value:e,onChange:t,disabled:n,children:r,className:o,style:i,name:a,id:s,"aria-label":c}){let u=cr.toArray(r).flatMap(C=>{if(!dr(C))return[];if(C.type!=="option")return[];let w=C.props,O=w.value!==void 0?String(w.value):"",M=w.children,L=typeof M=="string"||typeof M=="number"?String(M):O;return[{value:O,label:L,disabled:!!w.disabled}]}),f=e??"",d=mr({items:u,value:f,onPick:C=>t?.({target:{value:C}})}),R=u.find(C=>C.value===f)?.label??u[0]?.label??"";return jt("div",{ref:d.wrapRef,className:"relative",children:[a&&X("input",{type:"hidden",name:a,value:f}),X("button",{ref:C=>{d.triggerRef.current=C},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:C=>!n&&d.onTriggerKeyDown(C),className:`block w-full ${o??""}`,style:i,children:X("span",{className:"block w-full truncate text-left",children:R})}),d.open&&X(yr,{id:d.listId,tone:"select",items:u,value:f,focusIdx:d.focusIdx,onFocus:d.setFocusIdx,onPick:d.pick,listRef:d.listRef})]})}import{jsx as Se,jsxs as De}from"react/jsx-runtime";var xr="font-mono text-[length:var(--size-label,12px)]",Sr="font-semibold uppercase tracking-[0.22em] text-fg";function Qt(e){return`${e??xr} ${Sr}`}function Zt(){return Se("span",{className:"text-accent",children:" *"})}function vr({children:e,required:t,labelFace:n}){return De("span",{className:Qt(n),children:[e,t?Se(Zt,{}):null]})}function Er({label:e,required:t,hint:n,separate:r,htmlFor:o,labelFace:i,className:a,children:s}){let c=a?`flex flex-col gap-2 ${a}`:"flex flex-col gap-2",u=n?Se("span",{className:"font-mono text-[11px] uppercase tracking-[0.22em] text-fg-dim",children:n}):null;return r||n?De("div",{className:c,children:[De("label",{htmlFor:o,className:Qt(i),children:[e,t?Se(Zt,{}):null]}),s,u]}):De("label",{htmlFor:o,className:c,children:[Se(vr,{required:t,labelFace:i,children:e}),s]})}export{$r as a,Br as b,Wr as c,mt as d,qe as e,Pr as f,wr as g,_r as h,Rr as i,an as j,sn as k,Nr as l,Lr as m,Ge as n,Ne as o,ge as p,Ir as q,Le as r,gn as s,hn as t,zr as u,Xr as v,wt as w,Xe as x,Yr as y,Vr as z,bn as A,jr as B,Qr as C,Cn as D,Zr as E,Sn as F,Jr as G,eo as H,_t as I,ao as J,so as K,lo as L,fo as M,po as N,Mr as O,xt as P,Dr as Q,Ie as R,Ve as S,wo as T,Ut as U,Bo as V,zn as W,qo as X,oi as Y,ii as Z,er as _,ui as $,Gt as aa,ci as ba,nr as ca,di as da,or as ea,ir as fa,bi as ga,Ci as ha,sr as ia,Ei as ja,wi as ka,mr as la,yr as ma,br as na,vr as oa,Er as pa};
|