efficient-storefront-blocks 0.60.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.
Files changed (154) hide show
  1. package/CHANGELOG.md +79 -1
  2. package/README.md +2 -1
  3. package/dist/chunks/{EditorPreviewCheckout-XY2PLPBD.js → EditorPreviewCheckout-BQFPYYBS.js} +1 -1
  4. package/dist/chunks/{SiteEditorProvider-XF374NLZ.js → SiteEditorProvider-3E6XWZIS.js} +1 -1
  5. package/dist/chunks/chunk-4BQ44OLC.js +250 -0
  6. package/dist/chunks/chunk-MT5KWSYX.js +1 -0
  7. package/dist/chunks/chunk-OJ4OD3N6.js +1 -0
  8. package/dist/chunks/{fitment-data-RORHKBID.js → fitment-data-PWZAAUFK.js} +1 -1
  9. package/dist/editor/components/EditorPreviewChat.js +4 -4
  10. package/dist/editor/components/PreviewHeader.d.ts +1 -1
  11. package/dist/editor/components/PreviewHeader.js +4 -4
  12. package/dist/editor/lib/efficient-backend.d.ts +1 -0
  13. package/dist/editor/lib/efficient-backend.js +1 -1
  14. package/dist/editor/lib/efficient-block-sources.d.ts +2 -0
  15. package/dist/editor/lib/efficient-block-sources.js +1 -0
  16. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.d.ts +2 -0
  17. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.js +1 -0
  18. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.d.ts +6 -0
  19. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.js +1 -0
  20. package/dist/editor/lib/puck/blocks/commerce/ProductHero/fields.js +1 -1
  21. package/dist/editor/lib/puck/blocks/commerce/index.d.ts +1 -1
  22. package/dist/editor/lib/puck/blocks/commerce/index.js +1 -1
  23. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.d.ts +2 -0
  24. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.js +1 -0
  25. package/dist/editor/lib/puck/blocks/service/index.d.ts +1 -1
  26. package/dist/editor/lib/puck/blocks/service/index.js +1 -1
  27. package/dist/editor/lib/puck/config.js +1 -1
  28. package/dist/editor/lib/storefront-editor-words.d.ts +1 -0
  29. package/dist/editor/lib/storefront-editor-words.js +1 -1
  30. package/dist/editor.css +1 -1
  31. package/dist/fitment.d.ts +56 -0
  32. package/dist/fitment.js +1 -0
  33. package/dist/index.d.ts +36 -6
  34. package/dist/index.js +101 -81
  35. package/dist/links.js +1 -1
  36. package/dist/render/app/globals.css +70 -14
  37. package/dist/render/built-with.json +1 -1
  38. package/dist/render/components/CartContext.d.ts +1 -0
  39. package/dist/render/components/CartContext.js +1 -1
  40. package/dist/render/components/CartDrawer.d.ts +0 -8
  41. package/dist/render/components/CartDrawer.js +2 -2
  42. package/dist/render/components/ChatWidget.js +1 -1
  43. package/dist/render/components/EuTyreLabels.d.ts +3 -0
  44. package/dist/render/components/EuTyreLabels.js +1 -1
  45. package/dist/render/components/FitmentTable.js +1 -1
  46. package/dist/render/components/FooterMenu.js +1 -1
  47. package/dist/render/components/FormBlock.js +1 -1
  48. package/dist/render/components/GalleryItem.js +1 -1
  49. package/dist/render/components/Header.js +1 -1
  50. package/dist/render/components/LegalLine.js +1 -1
  51. package/dist/render/components/PopupFrame.d.ts +2 -1
  52. package/dist/render/components/PopupFrame.js +1 -1
  53. package/dist/render/components/PopupHost.d.ts +17 -0
  54. package/dist/render/components/PopupHost.js +1 -0
  55. package/dist/render/components/ProductCard.js +1 -1
  56. package/dist/render/components/ProductGallery.d.ts +15 -0
  57. package/dist/render/components/ProductGallery.js +1 -0
  58. package/dist/render/components/ProductHeroPanel.js +1 -1
  59. package/dist/render/components/RatingStars.d.ts +4 -0
  60. package/dist/render/components/RatingStars.js +1 -0
  61. package/dist/render/components/Reviews.js +1 -1
  62. package/dist/render/components/StorefrontProviders.d.ts +1 -3
  63. package/dist/render/components/StorefrontProviders.js +1 -1
  64. package/dist/render/components/SubscribePopupContext.d.ts +3 -15
  65. package/dist/render/components/SubscribePopupContext.js +1 -1
  66. package/dist/render/components/TyrePlpCard.js +1 -1
  67. package/dist/render/components/WheelCardFrame.d.ts +3 -27
  68. package/dist/render/components/WheelCardFrame.js +1 -1
  69. package/dist/render/components/card-pieces/CardBuyButton.d.ts +7 -0
  70. package/dist/render/components/card-pieces/CardBuyButton.js +1 -0
  71. package/dist/render/components/card-pieces/CardFinishSwatches.d.ts +5 -0
  72. package/dist/render/components/card-pieces/CardFinishSwatches.js +1 -0
  73. package/dist/render/components/card-pieces/CardPrice.d.ts +7 -0
  74. package/dist/render/components/card-pieces/CardPrice.js +1 -0
  75. package/dist/render/components/card-pieces/CardProductBadge.d.ts +7 -0
  76. package/dist/render/components/card-pieces/CardProductBadge.js +1 -0
  77. package/dist/render/components/card-pieces/CardSizes.d.ts +9 -0
  78. package/dist/render/components/card-pieces/CardSizes.js +1 -0
  79. package/dist/render/components/card-pieces/ProductCardState.d.ts +53 -0
  80. package/dist/render/components/card-pieces/ProductCardState.js +1 -0
  81. package/dist/render/components/card-pieces/card-row.d.ts +20 -0
  82. package/dist/render/components/card-pieces/card-row.js +1 -0
  83. package/dist/render/components/cart/drawer-parts.d.ts +28 -0
  84. package/dist/render/components/cart/drawer-parts.js +1 -0
  85. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.d.ts +3 -0
  86. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.js +1 -1
  87. package/dist/render/components/pdp-dynamic/DynamicProductGallery.d.ts +9 -0
  88. package/dist/render/components/pdp-dynamic/DynamicProductGallery.js +1 -0
  89. package/dist/render/components/useHeaderBar.js +1 -1
  90. package/dist/render/components/useIsLightTheme.d.ts +1 -0
  91. package/dist/render/components/useIsLightTheme.js +1 -0
  92. package/dist/render/components/wheels-plp/AlloyWheelsListing.d.ts +2 -1
  93. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  94. package/dist/render/components/wheels-plp/PlpCard.d.ts +3 -2
  95. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  96. package/dist/render/components/wheels-plp/usePlpCardSelection.d.ts +1 -1
  97. package/dist/render/components/wheels-plp/usePlpCardSelection.js +1 -1
  98. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.d.ts +2 -1
  99. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.js +1 -1
  100. package/dist/render/lib/api/index.d.ts +4 -2
  101. package/dist/render/lib/api/index.js +1 -1
  102. package/dist/render/lib/api/types.d.ts +48 -1
  103. package/dist/render/lib/chrome-load.d.ts +1 -1
  104. package/dist/render/lib/chrome-load.js +1 -1
  105. package/dist/render/lib/content/field-usage.d.ts +0 -1
  106. package/dist/render/lib/content/field-usage.js +1 -1
  107. package/dist/render/lib/content/product-hero.d.ts +1 -0
  108. package/dist/render/lib/content/product-hero.js +1 -1
  109. package/dist/render/lib/header-fit.d.ts +2 -0
  110. package/dist/render/lib/header-fit.js +1 -0
  111. package/dist/render/lib/popup/popup-stores.d.ts +2 -0
  112. package/dist/render/lib/popup/popup-stores.js +1 -0
  113. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.d.ts +2 -0
  114. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.js +1 -0
  115. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.d.ts +2 -0
  116. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.js +1 -0
  117. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.d.ts +2 -0
  118. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.js +1 -0
  119. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.d.ts +2 -0
  120. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.js +1 -0
  121. package/dist/render/lib/puck/blocks/commerce/metas.d.ts +2 -0
  122. package/dist/render/lib/puck/blocks/commerce/metas.js +1 -1
  123. package/dist/render/lib/puck/blocks/commerce/renders.d.ts +2 -0
  124. package/dist/render/lib/puck/blocks/commerce/renders.js +1 -1
  125. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.d.ts +3 -0
  126. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.js +1 -0
  127. package/dist/render/lib/puck/blocks/service/RatingBlock/render.d.ts +2 -0
  128. package/dist/render/lib/puck/blocks/service/RatingBlock/render.js +1 -0
  129. package/dist/render/lib/puck/blocks/service/metas.d.ts +1 -0
  130. package/dist/render/lib/puck/blocks/service/metas.js +1 -1
  131. package/dist/render/lib/puck/blocks/service/renders.d.ts +1 -0
  132. package/dist/render/lib/puck/blocks/service/renders.js +1 -1
  133. package/dist/render/lib/puck/lazy-draws.js +1 -1
  134. package/dist/render/lib/storefront-page-groups.js +1 -1
  135. package/dist/render/lib/wheels/fitment-columns.d.ts +6 -1
  136. package/dist/render/lib/wheels/fitment-columns.js +1 -1
  137. package/dist/render/lib/wheels/plp-fitment-match.d.ts +4 -0
  138. package/dist/render/lib/wheels/plp-fitment-match.js +1 -1
  139. package/dist/render/lib/wheels/plp-hydrate.d.ts +2 -0
  140. package/dist/render/lib/wheels/plp-hydrate.js +1 -1
  141. package/dist/render/lib/wheels/spec-sheet.js +1 -1
  142. package/dist/words.d.ts +2 -2
  143. package/dist/words.js +3 -3
  144. package/package.json +11 -4
  145. package/dist/chunks/chunk-EZQTUHPN.js +0 -1
  146. package/dist/chunks/chunk-FCCEAXMM.js +0 -1
  147. package/dist/chunks/chunk-YNI65Q6Z.js +0 -250
  148. package/dist/render/components/wheels-plp/useWheelCardBottom.d.ts +0 -20
  149. package/dist/render/components/wheels-plp/useWheelCardBottom.js +0 -1
  150. package/dist/render/lib/popup/popup-rules.d.ts +0 -25
  151. package/dist/render/lib/popup/popup-rules.js +0 -1
  152. /package/dist/chunks/{chunk-YNI65Q6Z.js.LEGAL.txt → chunk-4BQ44OLC.js.LEGAL.txt} +0 -0
  153. /package/dist/chunks/{chunk-VT346MLP.js → chunk-FZFBLN7K.js} +0 -0
  154. /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.60.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",
@@ -37,6 +37,11 @@
37
37
  "import": "./dist/consent.js",
38
38
  "default": "./dist/consent.js"
39
39
  },
40
+ "./fitment": {
41
+ "types": "./dist/fitment.d.ts",
42
+ "import": "./dist/fitment.js",
43
+ "default": "./dist/fitment.js"
44
+ },
40
45
  "./words": {
41
46
  "types": "./dist/words.d.ts",
42
47
  "import": "./dist/words.js",
@@ -65,6 +70,8 @@
65
70
  "dist/links.d.ts",
66
71
  "dist/consent.js",
67
72
  "dist/consent.d.ts",
73
+ "dist/fitment.js",
74
+ "dist/fitment.d.ts",
68
75
  "dist/words.js",
69
76
  "dist/words.d.ts",
70
77
  "dist/editor.css",
@@ -78,9 +85,9 @@
78
85
  "peerDependencies": {
79
86
  "@stripe/react-stripe-js": "^6.7.0",
80
87
  "@stripe/stripe-js": "^9.9.0",
81
- "efficient-easel": "^19.0.0",
82
- "efficient-shell": "^8.39.0",
83
- "efficient-web-builder": "^38.1.0",
88
+ "efficient-easel": "^20.1.0",
89
+ "efficient-shell": "^9.1.0",
90
+ "efficient-web-builder": "^39.0.0",
84
91
  "next": ">=16",
85
92
  "react": ">=19",
86
93
  "react-dom": ">=19"
@@ -1 +0,0 @@
1
- import{f as ut,i as me,q as ct,s as dt,t as ft,v as B}from"./chunk-FCCEAXMM.js";import{Aa as pe,Ba as st,Ea as $e,Fa as lt,Ia as Be,Ja as We}from"./chunk-I6VNNXUI.js";import{j as at,l as oe}from"./chunk-VT346MLP.js";import{createContext as sn,useContext as ln,useEffect as un,useMemo as he,useState as gt}from"react";function pt(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 mt(e){return e.unit==="single"?1:qe+e.spares}function _r(e,t){return[{partNumber:e.partNumber,wheels:mt(t),prices:e.prices}]}function Rr(e,t){let n=mt(t)-qe;if(n<=0||e.length===0)return e;let r=on(e),o=r?r[t.spareSide]:0;return e.map((i,a)=>a===o?{...i,wheels:i.wheels+n}:i)}function on(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 an(e,t){return t.spares>0?`${e} + spare`:e}function Nr(e){return e.unit==="single"?"Single":an(`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",ht=cn,yt=sn(null);function dn(e){return bt(e,"catalogue")}function fn(e){return bt(e,"money")}function bt(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]=gt(c),[d,S]=gt(!1);un(()=>{let y=oe.getItem(ht);y&&a.some(w=>w.code===y)&&f(y),S(!0)},[a]);function R(y){f(y),oe.setItem(ht,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(yt.Provider,{value:C,children:e})}function Ct(){let e=ln(yt);if(!e)throw new Error("useCurrency must be used within a CurrencyProvider");return e}import{createContext as Nn,useCallback as T,useContext as Ln,useEffect as j,useMemo as Tt,useRef as ae,useState as k}from"react";function St(e,t){return e.valid?!1:e.reason==="firstOrderOnly"?!0:e.reason==="notEligible"&&!t}var vt="We'll confirm this discount when you place your order.",Hr="Confirmed at checkout";function $r(e){return e&&(e.valid||e.deferred)?e.code:void 0}var xt="coupon_code: ";function Br(e){return!(e instanceof me)||e.status!==400||!e.message.startsWith(xt)?null:e.message.slice(xt.length)}function Et(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 ",Kr="From ",zr="each",Pt="Free";function Ke(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function ze(e,t){let n=e?.[t];return Ke(n)?n:null}function Xr(e,t,n,r){let o=ze(e,n),i=ze(t,n);return o===null&&i===null?0:o===null?1:i===null?-1:r==="asc"?o-i:i-o}function Yr(e,t,n,r){if(n==null&&r==null)return!0;let o=ze(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(!Ke(e))return yn;let r=Ke(t)&&t>e?t:null;return{priced:!0,unit:e,was:r,onSale:r!==null,setTotal:n!=null?e*n:null}}function Vr(e,t,n=""){return!e.priced||e.unit==null?Le:`${n}${ge(e.unit,t)}`}function jr(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 Qr(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 Zr(e,t){return e.was==null?null:ge(e.was,t)}function Jr(e,t){return!e.priced||e.unit==null?gn:Sn(e,t)}var vn=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function wt(e){return vn.test(e.trim())}var _t="sf:ga-purchases",En=20;function Nt(){return typeof window>"u"||window.parent!==window}function ye(...e){try{if(Nt()||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 Xe(e,t){return e.filter(Ie).map(n=>Pn(n,t))}function io(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 Lt(e,t){let n=Xe([e],t);n.length!==0&&ye("event","add_to_cart",{currency:t,value:n[0].price*n[0].quantity,items:n})}function ao(e){let t=Xe(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 Rt=new Set;function wn(e){if(Rt.has(e))return!1;Rt.add(e);try{let t=JSON.parse(oe.getItem(_t)??"[]");if(t.includes(e))return!1;oe.setItem(_t,JSON.stringify([...t,e].slice(-En)))}catch{}return!0}function so(e){let t=e.confirmation;if(Nt()||!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:Xe(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",It="Calculated at checkout",Rn=It,co=It;function At({quoted:e,optionCount:t,chosenAmount:n,couponWaivesFreight:r}){return e&&t===0?"arranged":r?"free":n===void 0?"pending":n===0?"free":"charged"}function fo(e){switch(e){case"arranged":return _n;case"pending":return Rn;case"free":return Pt;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 kt(e,t){return{code:e,valid:t.valid,deferred:St(t,t.askedAsShopper),message:t.message||void 0,effects:t.effects??void 0}}function Mt(e,t){return ie(e.components,t)}function Ye(e,t){let n=Mt(e,t);return n===null?null:n*e.qty}function Ot(e){return e!=="tyre"}var Dt=Nn(null);function Po({children:e,preview:t=!1}){let{currency:n,country:r,formatMoney:o}=Ct(),[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),Ot(l)&&M(!0)},[]),U=O||s.some(l=>Ot(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=>pt(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(kt(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)?kt(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)}),Lt(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(""),tt=T((l,m)=>{let h=l.trim().toLowerCase();wt(h)&&H(g=>g&&g.email===h&&g.firstName===(m??"")?g:{email:h,firstName:m??""})},[]);j(()=>{if(t||!E)return;let l=Et(s.filter(Ie),g=>Ye(g,n)===null?Le:o(Ye(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 nt=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]),rt=Tt(()=>{let l=s.reduce((A,re)=>{let Re=Ye(re,n);return Re===null?A:A+Re},0),m=s.some(A=>Mt(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,Jt=x?.appliedBundles??[],Ue=!!g?.freeShipping,ot=P.find(A=>A.id===D),it=Ue?0:x?.shipping??ot?.amount??0,en=At({quoted:x!==null,optionCount:P.length,chosenAmount:ot?.amount,couponWaivesFreight:Ue}),He={};for(let A of g?.freeUnits??[])He[A.partNumber]=(He[A.partNumber]??0)+A.quantity;let tn=x?.tax??null,nn=x?x.grandTotal:l-N-fe+it;return{sets:h,units:s.reduce((A,re)=>A+(re.components??[]).reduce((Re,rn)=>Re+rn.wheels*re.qty,0),0),subtotal:l,hasUnpricedLine:m,discount:N,bundleDiscount:fe,appliedBundles:Jt,shipping:it,freeShipping:Ue,shippingStatus:en,freeUnitsByPartNumber:He,tax:tn,grand:nn,repricing:!!p?.refused&&x!==null&&I===p?.code,currency:n}},[s,n,p,P,D,x,I]),Zt=Tt(()=>({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:tt,clearCapturedCart:nt,coupon:p,applyCoupon:ee,removeCoupon:ue,refuseCoupon:ce,couponBusy:Q,deliveryOptions:P,shippingMethodId:D,setShippingMethodId:ve,totals:rt}),[i,t,Y,le,Z,s,u,d,Ee,de,ne,we,_e,tt,nt,p,ee,ue,ce,Q,P,D,rt]);return kn(Dt.Provider,{value:Zt,children:e})}function Ft(){let e=Ln(Dt);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 Ut(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 ct();if(!t)return"";let r=await dt();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 Ht(e,t){if(await ft()!==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 Ut(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 $t(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 To=qn("production");function Kn(e,t){return e?.trim()||t}function $o({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},Bo=Gn(async()=>Ht("site",()=>$t("site",async()=>{let e=await B.getSite();return{name:st(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:lt(e.socialLinks)}},zn)));var Wo={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 Ve}from"react/jsx-runtime";import{useEffect as Te,useId as jn,useRef as Wt,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(`${at()}/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 Bt(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,ri=16,Jn="invert(1)";function oi({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=Wt(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&&ut(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),Bt(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=Wt(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=Ve("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 Ve("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:Ve("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 li="#c9a461",qt=[{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"}],ui={name:"",color:"var(--fg)",family:"silver",src:""};function nr(e,t){let n=r=>{let o=qt.findIndex(i=>i.f===r);return o===-1?qt.length:o};return n(e)-n(t)||e.localeCompare(t)}function ci(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 je}from"react/jsx-runtime";function or({customerEmail:e}){let{coupon:t,applyCoupon:n,removeCoupon:r,couponBusy:o}=Ft(),[i,a]=rr("");async function s(){o||!i.trim()||(await n(i,e),a(""))}return je("div",{className:"flex flex-col gap-2",children:[t===null?je("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"})]}):je("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:vt}):t&&!t.valid&&t.message&&se("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-alert",children:t.message})]})}var Qe="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:Qe,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:Qe,footerLink:"Privacy choices",panelEyebrow:"Privacy choices",adsRowName:"Advertising"},nz:{region:"nz",name:"New Zealand",model:"opt-out",law:"Privacy Act 2020",beforeChoice:Qe,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 yi(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 bi={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 vi(e=lr){if(e.asked)return e.ads?"granted":"denied"}function Pi(){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 Kt,useId as fr,useLayoutEffect as Yt,useRef as z,useState as zt}from"react";var Me=(e,t)=>!!e[t]&&!e[t].disabled;function Ze(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 Je(e,t){return Ze(e,t===1?-1:e.length,t)}function et(e,t){return Me(e,t)?t:Math.max(Je(e,1),0)}function Gt(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:Ze(n,o,1)}),handled:!0};case"ArrowUp":return{state:i({focus:Ze(n,o,-1)}),handled:!0};case"Home":return{state:i({focus:Je(n,1)}),handled:!0};case"End":return{state:i({focus:Je(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 Vt}from"react/jsx-runtime";var Xt={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]=zt(!1),c=r!==void 0,u=c?r:a,[f,d]=zt(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:et(e,M),typed:S.current.text},p=Gt(_,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 Kt(()=>{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]),Kt(()=>{u&&(S.current.text||d(et(e,M)))},[u]),Yt(()=>{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 ${Xt.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 ${Xt.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){Yt(()=>{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:Vt(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 Vt("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 jt(e){return`${e??xr} ${Sr}`}function Qt(){return Se("span",{className:"text-accent",children:" *"})}function vr({children:e,required:t,labelFace:n}){return De("span",{className:jt(n),children:[e,t?Se(Qt,{}):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:jt(i),children:[e,t?Se(Qt,{}):null]}),s,u]}):De("label",{htmlFor:o,className:c,children:[Se(vr,{required:t,labelFace:i,children:e}),s]})}export{Hr as a,$r as b,Br as c,pt as d,qe as e,Pr as f,wr as g,_r as h,Rr as i,on as j,an 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,Kr as u,zr as v,Pt as w,ze as x,Xr as y,Yr as z,bn as A,Vr as B,jr as C,Cn as D,Qr as E,Sn as F,Zr as G,Jr as H,wt as I,io as J,ao as K,so as L,co as M,fo as N,Mr as O,Ct as P,Ie as Q,Ye as R,Po as S,Ft as T,$o as U,zn as V,Wo as W,ri as X,oi as Y,er as Z,li as _,qt as $,ui as aa,nr as ba,ci as ca,or as da,ir as ea,yi as fa,bi as ga,sr as ha,vi as ia,Pi as ja,mr as ka,yr as la,br as ma,vr as na,Er as oa};
@@ -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};