efficient-storefront-blocks 0.80.0 → 0.82.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 +23 -0
  2. package/README.md +1 -1
  3. package/dist/chunks/{EditorPreviewCheckout-PSONSVRR.js → EditorPreviewCheckout-XM22X3CX.js} +4 -4
  4. package/dist/chunks/{SiteEditorProvider-PWHW2UA6.js → SiteEditorProvider-5YHSOW4Y.js} +1 -1
  5. package/dist/chunks/{chunk-MCCDGDRW.js → chunk-47L7KHRW.js} +1 -1
  6. package/dist/chunks/{chunk-3Q66B5NU.js → chunk-NSBGNY7R.js} +1 -1
  7. package/dist/chunks/chunk-VIPMT34C.js +320 -0
  8. package/dist/chunks/{fitment-data-Q2TJ6FBU.js → fitment-data-SZWTO4WT.js} +1 -1
  9. package/dist/editor/components/CategoryProductFields.d.ts +4 -1
  10. package/dist/editor/components/CategoryProductFields.js +1 -1
  11. package/dist/editor/components/EditReviewsLink.d.ts +4 -0
  12. package/dist/editor/components/EditReviewsLink.js +1 -0
  13. package/dist/editor/components/GalleryShowcaseSource.js +1 -1
  14. package/dist/editor/components/PreviewProductPicker.js +1 -1
  15. package/dist/editor/components/ProductHeroSource.js +1 -1
  16. package/dist/editor/components/ProductPicker.js +1 -1
  17. package/dist/editor/components/ReviewsProductSource.d.ts +26 -0
  18. package/dist/editor/components/ReviewsProductSource.js +1 -0
  19. package/dist/editor/components/SpecTableSource.js +1 -1
  20. package/dist/editor/lib/document/blocks/commerce/DetailRows/fields.js +1 -1
  21. package/dist/editor/lib/document/blocks/commerce/GalleryB/fields.js +1 -1
  22. package/dist/editor/lib/document/blocks/commerce/ProductGrid/fields.js +1 -1
  23. package/dist/editor/lib/document/blocks/commerce/ProductHero/fields.js +1 -1
  24. package/dist/editor/lib/document/blocks/commerce/RelatedProducts/fields.js +1 -1
  25. package/dist/editor/lib/document/blocks/commerce/SpecTable/fields.js +1 -1
  26. package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
  27. package/dist/editor/lib/document/blocks/commerce/page-rules.d.ts +2 -0
  28. package/dist/editor/lib/document/blocks/commerce/page-rules.js +1 -1
  29. package/dist/editor/lib/document/blocks/service/ReviewForm/fields.js +1 -1
  30. package/dist/editor/lib/document/blocks/service/Reviews/fields.js +1 -1
  31. package/dist/editor/lib/document/config.d.ts +1 -0
  32. package/dist/editor/lib/document/config.js +1 -1
  33. package/dist/editor/lib/document/section-text-regions.d.ts +1 -0
  34. package/dist/editor/lib/document/section-text-regions.js +1 -0
  35. package/dist/editor/lib/storefront-editor-words.d.ts +4 -1
  36. package/dist/editor/lib/storefront-editor-words.js +1 -1
  37. package/dist/index.js +36 -28
  38. package/dist/render/app/globals.css +69 -20
  39. package/dist/render/built-with.json +1 -1
  40. package/dist/render/components/AppointmentBooking.js +1 -1
  41. package/dist/render/components/ChatContext.js +1 -1
  42. package/dist/render/components/CheckoutCTA.js +1 -1
  43. package/dist/render/components/CollectionCard.js +1 -1
  44. package/dist/render/components/Collections.js +1 -1
  45. package/dist/render/components/CompatibleTyres.js +1 -1
  46. package/dist/render/components/ConsentBanner.js +1 -1
  47. package/dist/render/components/ContactCards.js +1 -1
  48. package/dist/render/components/ContactRouting.js +1 -1
  49. package/dist/render/components/DeliveryOptions.js +1 -1
  50. package/dist/render/components/DetailRows.js +1 -1
  51. package/dist/render/components/EuTyreLabels.d.ts +1 -1
  52. package/dist/render/components/EuTyreLabels.js +1 -1
  53. package/dist/render/components/Events.js +1 -1
  54. package/dist/render/components/FitmentTable.js +1 -1
  55. package/dist/render/components/FooterDivider.js +1 -1
  56. package/dist/render/components/FooterSection.js +1 -1
  57. package/dist/render/components/FooterSocial.js +1 -1
  58. package/dist/render/components/FormBlock.js +1 -1
  59. package/dist/render/components/GalleryCard.js +1 -1
  60. package/dist/render/components/GalleryGrid.js +1 -1
  61. package/dist/render/components/GalleryItem.js +1 -1
  62. package/dist/render/components/GalleryShowcase.js +1 -1
  63. package/dist/render/components/LinkedProductHero.d.ts +2 -1
  64. package/dist/render/components/MessagingCards.js +1 -1
  65. package/dist/render/components/ProductCard.js +1 -1
  66. package/dist/render/components/ProductCardChrome.d.ts +4 -3
  67. package/dist/render/components/ProductCardChrome.js +1 -1
  68. package/dist/render/components/ProductGallery.js +1 -1
  69. package/dist/render/components/ProductGridSection.d.ts +7 -6
  70. package/dist/render/components/ProductGridSection.js +1 -1
  71. package/dist/render/components/ProductHeroPanel.d.ts +7 -2
  72. package/dist/render/components/ProductHeroPanel.js +1 -1
  73. package/dist/render/components/ProductLightbox.js +1 -1
  74. package/dist/render/components/RateTable.js +1 -1
  75. package/dist/render/components/ReviewForm.js +1 -1
  76. package/dist/render/components/Reviews.js +1 -1
  77. package/dist/render/components/SectionBand.d.ts +5 -2
  78. package/dist/render/components/SectionBand.js +1 -1
  79. package/dist/render/components/SectionBandChoice.d.ts +5 -0
  80. package/dist/render/components/SectionBandChoice.js +1 -0
  81. package/dist/render/components/SpecTable.js +1 -1
  82. package/dist/render/components/SubmitBuild.js +1 -1
  83. package/dist/render/components/Subscribe.js +1 -1
  84. package/dist/render/components/ThemedSelect.d.ts +4 -2
  85. package/dist/render/components/ThemedSelect.js +1 -1
  86. package/dist/render/components/TyreVehicleFitment.d.ts +2 -2
  87. package/dist/render/components/TyreVehicleFitment.js +1 -1
  88. package/dist/render/components/WheelCardFrame.js +1 -1
  89. package/dist/render/components/WheelPlaceholder.d.ts +3 -1
  90. package/dist/render/components/WheelPlaceholder.js +1 -1
  91. package/dist/render/components/booking/BookingRegions.js +1 -1
  92. package/dist/render/components/buy-row.d.ts +1 -1
  93. package/dist/render/components/buy-row.js +1 -1
  94. package/dist/render/components/card-pieces/CardPicture.d.ts +1 -1
  95. package/dist/render/components/card-pieces/CardPicture.js +1 -1
  96. package/dist/render/components/card-spin.d.ts +7 -0
  97. package/dist/render/components/card-spin.js +1 -0
  98. package/dist/render/components/catalog/CatalogFilterBar.js +1 -1
  99. package/dist/render/components/catalog/CatalogVehiclePicker.js +1 -1
  100. package/dist/render/components/catalog/PriceRange.d.ts +6 -0
  101. package/dist/render/components/catalog/PriceRange.js +1 -0
  102. package/dist/render/components/catalog/SortSelect.d.ts +8 -0
  103. package/dist/render/components/catalog/SortSelect.js +1 -0
  104. package/dist/render/components/checkout/CheckoutPageClient.js +1 -1
  105. package/dist/render/components/checkout/checkout-parts.js +1 -1
  106. package/dist/render/components/fitment/FitmentFinder.js +1 -1
  107. package/dist/render/components/fitment/FitmentPickerGrid.js +1 -1
  108. package/dist/render/components/fitment/StockFitmentCard.js +1 -1
  109. package/dist/render/components/pdp-dynamic/DynamicBundleOffer.js +1 -1
  110. package/dist/render/components/pdp-dynamic/DynamicDetailRows.js +1 -1
  111. package/dist/render/components/pdp-dynamic/DynamicGalleryGrid.js +1 -1
  112. package/dist/render/components/pdp-dynamic/DynamicProductHero.d.ts +2 -1
  113. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.d.ts +3 -2
  114. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.js +1 -1
  115. package/dist/render/components/pdp-dynamic/DynamicTyreSizes.js +1 -1
  116. package/dist/render/components/pdp-dynamic/KindGate.js +1 -1
  117. package/dist/render/components/pdp-dynamic/RecordPhotoGallery.js +1 -1
  118. package/dist/render/components/wheels-plp/AlloyWheelsListing.d.ts +3 -2
  119. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  120. package/dist/render/components/wheels-plp/PlpCard.d.ts +3 -2
  121. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  122. package/dist/render/components/wheels-plp/PlpToolbar.d.ts +16 -0
  123. package/dist/render/components/wheels-plp/PlpToolbar.js +1 -0
  124. package/dist/render/lib/catalog/relationships.js +1 -1
  125. package/dist/render/lib/document/blocks/commerce/AlloyWheelsListing/render.js +1 -1
  126. package/dist/render/lib/document/blocks/commerce/DetailRows/render.js +1 -1
  127. package/dist/render/lib/document/blocks/commerce/ProductGrid/meta.js +1 -1
  128. package/dist/render/lib/document/blocks/commerce/ProductGrid/render.js +1 -1
  129. package/dist/render/lib/document/blocks/commerce/ProductHero/render.js +1 -1
  130. package/dist/render/lib/document/blocks/commerce/RelatedProducts/render.js +1 -1
  131. package/dist/render/lib/document/blocks/text-part-shapes.json +0 -14
  132. package/dist/render/lib/sections/catalog-text-size.d.ts +7 -0
  133. package/dist/render/lib/sections/catalog-text-size.js +1 -0
  134. package/dist/render/lib/sections/fill-row.js +1 -1
  135. package/dist/render/lib/sections/grid-no-hole.d.ts +1 -1
  136. package/dist/render/lib/sections/grid-no-hole.js +1 -1
  137. package/dist/render/lib/sections/product-hero-text-regions.d.ts +3 -0
  138. package/dist/render/lib/sections/product-hero-text-regions.js +1 -0
  139. package/dist/render/lib/sections/reviews.d.ts +7 -0
  140. package/dist/render/lib/sections/reviews.js +1 -1
  141. package/dist/render/lib/sections/section-band.d.ts +2 -0
  142. package/dist/render/lib/sections/section-band.js +1 -0
  143. package/dist/render/lib/wheels/catalog-default-layout.js +1 -1
  144. package/dist/render/lib/wheels/lug-count.d.ts +1 -0
  145. package/dist/render/lib/wheels/lug-count.js +1 -1
  146. package/dist/words.d.ts +17 -2
  147. package/dist/words.js +5 -5
  148. package/package.json +5 -4
  149. package/dist/chunks/chunk-6MHGEO3D.js +0 -320
  150. package/dist/editor/lib/document/blocks/service/placeholders.d.ts +0 -1
  151. package/dist/editor/lib/document/blocks/service/placeholders.js +0 -1
  152. /package/dist/chunks/{chunk-X5W6GJLI.js → chunk-T2R5CZ2F.js} +0 -0
  153. /package/dist/chunks/{chunk-6MHGEO3D.js.LEGAL.txt → chunk-VIPMT34C.js.LEGAL.txt} +0 -0
  154. /package/dist/chunks/{chunk-JUGY3EKR.js → chunk-VVWX2P2N.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.82.0 - 2026-11-05
4
+
5
+ **A major for hosts (major version zero, so a minor number):** the peer moves to `efficient-easel` `^27.2.0` (was `^27.0.0`) (#359), and the Reviews editor types change (#359). A host must: install efficient-easel 27.2.0 or later with this release; pass `allProducts` (the unfiltered catalog) where it renders `editor/components/CategoryProductFields`; and stop importing `editor/lib/document/blocks/service/placeholders`, which is removed. No stored page needs a data move (0 Reviews or Testimonials nodes on the 34 US pages). From main at `7873a439`: #359, #360, #361, #362. `efficient-web-builder` stays at `^49.1.0` and `efficient-shell` at `^11.8.0`.
6
+
7
+ - **BREAKING: peer `efficient-easel` `^27.2.0`** (#359). Peer and dev, here and in `package/`. 27.2.0 is the first easel that types `open-site-section` with `"reviews"`.
8
+ - **BREAKING: a Reviews block chooses which product's reviews it shows** (#359). With Review content = Product reviews, the typed Design code box becomes a Product row: All products, This product (on a dynamic product page) or Choose a product. `CategoryProductFields` takes a required `allProducts` and opt-in `showPicked` and `categoryHidden`. `StorefrontBlocksPhrase` loses "Reviews to display", and the generated text-part shape loses `Reviews.dataSourceOptions`. **Edit in Reviews ->** opens the Storefront hub's Reviews section.
9
+ - **The sheet draws a section's tablet Height, Stick to top and Border** (#360), from 720 to 1099.98px. A node with no tablet class or property draws as before. The builder's Tablet rows that write these come in a later web-builder release.
10
+ - **The classic live chat checks sign-in only when it is opened** (#361). Before, every public page load sent a refresh exchange and `GET /api/auth/me/`, and a stored conversation was fetched twice. A message sent before the check answers waits for it.
11
+ - The repository links name the `eff-erp` organization (#362).
12
+
13
+ ## 0.81.0 - 2026-11-04
14
+
15
+ **A major for hosts (major version zero, so a minor number):** the peer moves to `efficient-web-builder` `^49.1.0` (was `^48.2.0`) (#355), and the card render types lose the `spinOnHover` prop (#346). A host must: install web-builder 49.1.0 or later with this release; and pass `hover={cardHoverOf(props, key)}` (from `efficient-web-builder/format/lib/animation/hover`) where it passed `spinOnHover`. No stored page needs a data move. From main at `0be9f233`: #346, #349, #350, #352, #353, #355, #356, #357. No export is removed (13 added).
16
+
17
+ - **BREAKING: peer `efficient-web-builder` `^49.1.0`** (#355). Peer and dev, here and in `package/`. Every view line is written by its name (`max-view-wide:`, `view-desktop:` and the others) from this sheet's `--breakpoint-view-*`, not by 720, 800 or 1100; `fill-row` reads the grid steps through the builder's `view-lines`. The editor words are written again from the 49 catalogue.
18
+ - **BREAKING: the card wheel turns by the section's Animation › Hover** (#346). `spinOnHover` leaves the render types of `ProductCardChrome`, `ProductGridSection`, `PlpCard`, `AlloyWheelsListing` and `DynamicRelatedProducts`; one drawing, `render/components/card-spin` (`cardSpinOf`), turns the picture by the Hover angle, Duration and Delay. At the defaults the look is the same; the no-render wheel turns with its card. The bound Product Grid honours Hover too (0 US bound grids store `false`).
19
+ - **The Product Hero price takes a text style and a size** (#357). The amount is the text region `price` (Heading 2, 36px built in), stored under `_partStyles["@price"]` with the web-builder region API. `editor/lib/document/section-text-regions` is the one list of storefront section regions and is in `sideEffects`. With nothing stored the hero draws the same bytes.
20
+ - **A section inside a Box draws no band of its own** (#350). One place, `render/components/SectionBand`, asks the builder's `useInsideSiteGutter`; in a Box the section draws only the padding its panel row shows. `BAND_CAP` stays exported from `render/components/SectionBand`.
21
+ - **One sort, one price pair and one size table for the catalog** (#349): `components/catalog/SortSelect`, `components/catalog/PriceRange`, `lib/sections/catalog-text-size`, and `lugFilterLabel`. No new block and no stored page change.
22
+ - **Panel rows that read a page fact draw again** (#356). Eight rows on five commerce sections (Spec Table, Customer Photo Grid, Feature Rows and others) read `dynamicPage` as a `not`, so a product template shows them.
23
+ - **The no-render wheel fills the card picture area** (#352): 179px of a 256px area, not 4px, on the card's own colour.
24
+ - Internal: source comments name roles, not people (#353).
25
+
3
26
  ## 0.80.0 - 2026-11-04
4
27
 
5
28
  **A major for hosts (major version zero, so a minor number):** the peer moves to `efficient-web-builder` `^48.2.0` (was `^48.1.1`) (#342), and the tyre spec sheet changes its type and output (#347). A host must: install web-builder 48.2.0 or later; stop passing `euLabel` to `buildTyreSpecSheet` (`TyreSpecSheetSource` loses it); and read the six EU grades from the EU Tyre Label block, not the spec sheet. No stored page needs a data move (0 of 34 US pages hold a tyre section or page).
package/README.md CHANGED
@@ -9,7 +9,7 @@ Published as `efficient-web` up to 0.3.0 and as `efficient-web-builder` from
9
9
  0.7.0 to 0.10.0; 0.11.0 is the first release under this name (`CHANGELOG.md`
10
10
  says how to migrate). The name `efficient-web-builder` now belongs to the
11
11
  builder alone, published from its own repository
12
- ([`Efficient-Pty-Ltd/efficient-web-builder`](https://github.com/Efficient-Pty-Ltd/efficient-web-builder)):
12
+ ([`eff-erp/efficient-web-builder`](https://github.com/eff-erp/efficient-web-builder)):
13
13
  The editor, the general sections and the renderer, with no storefront in it.
14
14
 
15
15
  It is not a second copy of anything: `build.mjs` compiles this repository's
@@ -1,4 +1,4 @@
1
- "use client";import{$ as Gn,L as Mn,M as Kn,N as Un,O as Wn,P as $n,Q as me,S as Xe,T as Yn,U as Bn,V as mt,W as zn,Y as Mt,_ as Hn,aa as Vn,b as qn,c as Dt,d as jn,e as Dn,fa as Jn,ga as Te,la as Xn,ma as Ze,pa as Kt,ra as ee,sa as Q,x as pt}from"./chunk-3Q66B5NU.js";import{i as pe,o as We,v as K}from"./chunk-MCCDGDRW.js";import{Da as _n,xa as Ln,za as de}from"./chunk-X5W6GJLI.js";import{k as Fn,l as Je,m as ae}from"./chunk-JUGY3EKR.js";import{a as jt,b as Ka}from"./chunk-Y6SLVHK3.js";var er=jt((Qo,Qn)=>{"use strict";var Wa="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";Qn.exports=Wa});var ar=jt((ei,rr)=>{"use strict";var $a=er();function tr(){}function nr(){}nr.resetWarningCache=tr;rr.exports=function(){function e(r,a,s,l,m,p){if(p!==$a){var d=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw d.name="Invariant Violation",d}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:nr,resetWarningCache:tr};return n.PropTypes=n,n}});var ir=jt((ri,or)=>{"use strict";or.exports=ar()();var ti,ni});import{useEffect as da,useMemo as sa,useRef as Ye,useState as _e}from"react";import{rootIsDark as Ua}from"efficient-shell/format";function Zn(){if(typeof document>"u")return;let e=getComputedStyle(document.documentElement),t=(r,a)=>e.getPropertyValue(r).trim()||a,n=Ua({whenUnset:!0});return{theme:n?"night":"stripe",variables:{colorPrimary:t("--accent",n?"#c9a461":"#8a6a2a"),colorBackground:t("--site-surface",n?"#131313":"#ffffff"),colorText:t("--fg",n?"#f5f1e8":"#0a0a0a"),borderRadius:"0px"}}}var F=Ka(ir(),1);import A from"react";function sr(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ya(e){if(Array.isArray(e))return e}function pr(e,t,n){return(t=Ja(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ba(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,s,l,m=[],p=!0,d=!1;try{if(s=(n=n.call(e)).next,t!==0)for(;!(p=(r=s.call(n)).done)&&(m.push(r.value),m.length!==t);p=!0);}catch(y){d=!0,a=y}finally{try{if(!p&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(d)throw a}}return m}}function za(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?cr(Object(n),!0).forEach(function(r){pr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cr(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Ha(e,t){if(e==null)return{};var n,r,a=Ga(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Ga(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function mr(e,t){return Ya(e)||Ba(e,t)||Xa(e,t)||za()}function Va(e,t){if(typeof e!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ja(e){var t=Va(e,"string");return typeof t=="symbol"?t:t+""}function Ut(e){"@babel/helpers - typeof";return Ut=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ut(e)}function Xa(e,t){if(e){if(typeof e=="string")return sr(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?sr(e,t):void 0}}var Y=function(t,n,r){var a=!!r,s=A.useRef(r);A.useEffect(function(){s.current=r},[r]),A.useEffect(function(){if(!a||!t)return function(){};var l=function(){if(s.current)return s.current.apply(s,arguments)};return t.on(n,l),function(){t.off(n,l)}},[a,n,t,s])},Wt=function(t){var n=A.useRef(t);return A.useEffect(function(){n.current=t},[t]),n.current},$e=function(t){return t!==null&&Ut(t)==="object"},Za=function(t){return $e(t)&&typeof t.then=="function"},Qa=function(t){return $e(t)&&typeof t.elements=="function"&&typeof t.createToken=="function"&&typeof t.createPaymentMethod=="function"&&typeof t.confirmCardPayment=="function"},ur="[object Object]",eo=function e(t,n){if(t===n)return!0;if(!$e(t)||!$e(n))return t===n;var r=Array.isArray(t),a=Array.isArray(n);if(r!==a)return!1;var s=Object.prototype.toString.call(t)===ur,l=Object.prototype.toString.call(n)===ur;if(s!==l)return!1;if(!s&&!r)return t===n;var m=Object.keys(t),p=Object.keys(n);if(m.length!==p.length)return!1;for(var d={},y=0;y<m.length;y+=1)d[m[y]]=!0;for(var x=0;x<p.length;x+=1)d[p[x]]=!0;var b=Object.keys(d);if(b.length!==m.length)return!1;var f=t,E=n,S=function(X){return e(f[X],E[X])};return b.every(S)},fr=function(t,n,r){return $e(t)?Object.keys(t).reduce(function(a,s){var l=!$e(n)||!eo(t[s],n[s]);return r.includes(s)?(l&&console.warn("Unsupported prop change: options.".concat(s," is not a mutable property.")),a):l?lr(lr({},a||{}),{},pr({},s,t[s])):a},null):null},gr="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",dr=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gr;if(t===null||Qa(t))return t;throw new Error(n)},to=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gr;if(Za(t))return{tag:"async",stripePromise:Promise.resolve(t).then(function(a){return dr(a,n)})};var r=dr(t,n);return r===null?{tag:"empty"}:{tag:"sync",stripe:r}},no=function(t){!t||!t._registerWrapper||!t.registerAppInfo||(t._registerWrapper({name:"react-stripe-js",version:"6.12.0"}),t.registerAppInfo({name:"react-stripe-js",version:"6.12.0",url:"https://stripe.com/docs/stripe-js/react"}))},ft=A.createContext(null);ft.displayName="ElementsContext";var yr=function(t,n){if(!t)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(n," in an <Elements> provider."));return t},Yt=function(t){var n=t.stripe,r=t.options,a=t.children,s=A.useMemo(function(){return to(n)},[n]),l=A.useState(function(){return{stripe:s.tag==="sync"?s.stripe:null,elements:s.tag==="sync"?s.stripe.elements(r):null}}),m=mr(l,2),p=m[0],d=m[1];A.useEffect(function(){var b=!0,f=function(S){d(function(O){return O.stripe?O:{stripe:S,elements:S.elements(r)}})};return s.tag==="async"&&!p.stripe?s.stripePromise.then(function(E){E&&b&&f(E)}):s.tag==="sync"&&!p.stripe&&f(s.stripe),function(){b=!1}},[s,p,r]);var y=Wt(n);A.useEffect(function(){y!==null&&y!==n&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")},[y,n]);var x=Wt(r);return A.useEffect(function(){if(p.elements){var b=fr(r,x,["clientSecret","fonts"]);b&&p.elements.update(b)}},[r,x,p.elements]),A.useEffect(function(){no(p.stripe)},[p.stripe]),A.createElement(ft.Provider,{value:p},a)};Yt.propTypes={stripe:F.default.any,options:F.default.object};var hr=function(t){var n=A.useContext(ft);return yr(n,t)},br=function(){var t=hr("calls useElements()"),n=t.elements;return n},ro=function(t){var n=t.children,r=hr("mounts <ElementsConsumer>");return n(r)};ro.propTypes={children:F.default.func.isRequired};var ao=A.createContext(null);ao.displayName="CheckoutContext";var vr=A.createContext(null);vr.displayName="CheckoutSdkContext";var $t=function(t){var n=A.useContext(vr),r=A.useContext(ft);if(n){if(r)throw new Error("You cannot wrap the part of your app that ".concat(t," in both a checkout provider and <Elements> provider."));return n}else return yr(r,t)},oo=["mode"],io=function(t){return t.charAt(0).toUpperCase()+t.slice(1)},q=function(t,n,r){var a="".concat(io(t),"Element"),s=function(d){var y=d.id,x=d.className,b=d.options,f=b===void 0?{}:b,E=d.onBlur,S=d.onFocus,O=d.onReady,X=d.onChange,R=d.onEscape,w=d.onClick,U=d.onLoadError,H=d.onLoaderStart,M=d.onNetworksChange,oe=d.onConfirm,fe=d.onCancel,Ee=d.onShippingAddressChange,ie=d.onShippingRateChange,B=d.onSavedPaymentMethodRemove,te=d.onSavedPaymentMethodUpdate,se=d.onAvailablePaymentMethodsChange,_=$t("mounts <".concat(a,">")),C="elements"in _?_.elements:null,G="checkoutSdk"in _?_.checkoutSdk:null,Be=A.useState(null),Re=mr(Be,2),D=Re[0],ze=Re[1],V=A.useRef(null),ce=A.useRef(null);Y(D,"blur",E),Y(D,"focus",S),Y(D,"escape",R),Y(D,"click",w),Y(D,"loaderror",U),Y(D,"loaderstart",H),Y(D,"networkschange",M),Y(D,"confirm",oe),Y(D,"cancel",fe),Y(D,"shippingaddresschange",Ee),Y(D,"shippingratechange",ie),Y(D,"savedpaymentmethodremove",B),Y(D,"savedpaymentmethodupdate",te),Y(D,"availablepaymentmethodschange",se),Y(D,"change",X);var be;O&&(t==="expressCheckout"?be=O:be=function(){O(D)}),Y(D,"ready",be),A.useLayoutEffect(function(){if(V.current===null&&ce.current!==null&&(C||G)){var T=null;if(G){var Z=G,Fe=G;switch(t){case"paymentForm":T=Fe.createForm(f);break;case"payment":T=Z.createPaymentElement(f);break;case"address":if("mode"in f){var L=f.mode,Oe=Ha(f,oo);if(L==="shipping")T=Z.createShippingAddressElement(Oe);else if(L==="billing")T=Z.createBillingAddressElement(Oe);else throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.")}else throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");break;case"expressCheckout":T=Z.createExpressCheckoutElement(f);break;case"currencySelector":T=G.createCurrencySelectorElement();break;case"taxId":T=Z.createTaxIdElement(f);break;case"contactDetails":T=Z.createContactDetailsElement();break;case"linkSignup":if("createLinkSignupElement"in G)T=G.createLinkSignupElement(f);else throw new Error("<LinkSignupElement> requires <CheckoutElementsProvider> and is not supported inside <CheckoutFormProvider>.");break;case"terms":T=Z.createTermsElement(f);break;default:throw new Error("<".concat(a,"> is not supported inside a checkout provider. Use an <Elements> provider instead."))}}else C&&(T=C.create(t,f));V.current=T,ze(T),T&&T.mount(ce.current)}},[C,G,f]);var le=Wt(f);return A.useEffect(function(){if(V.current){var T=fr(f,le,["paymentRequest"]);T&&"update"in V.current&&V.current.update(T)}},[f,le]),A.useLayoutEffect(function(){return function(){if(V.current&&typeof V.current.destroy=="function")try{V.current.destroy(),V.current=null}catch{}}},[]),A.createElement("div",{id:y,className:x,ref:ce})},l=function(d){$t("mounts <".concat(a,">"));var y=d.id,x=d.className;return A.createElement("div",{id:y,className:x})},m=n?l:s;return m.propTypes={id:F.default.string,className:F.default.string,onChange:F.default.func,onBlur:F.default.func,onFocus:F.default.func,onReady:F.default.func,onEscape:F.default.func,onClick:F.default.func,onLoadError:F.default.func,onLoaderStart:F.default.func,onNetworksChange:F.default.func,onConfirm:F.default.func,onCancel:F.default.func,onShippingAddressChange:F.default.func,onShippingRateChange:F.default.func,onSavedPaymentMethodRemove:F.default.func,onSavedPaymentMethodUpdate:F.default.func,onAvailablePaymentMethodsChange:F.default.func,options:F.default.object},m.displayName=a,m.__elementType=t,m},j=typeof window>"u",so=A.createContext(null);so.displayName="EmbeddedCheckoutProviderContext";var xr=function(){var t=$t("calls useStripe()"),n=t.stripe;return n},oi=q("auBankAccount",j),ii=q("card",j),si=q("cardNumber",j),ci=q("cardExpiry",j),li=q("cardCvc",j),ui=q("currencySelector",j),di=q("iban",j),Cr=q("payment",j),pi=q("expressCheckout",j),mi=q("paymentRequestButton",j),fi=q("linkAuthentication",j),gi=q("linkSignup",j),yi=q("contactDetails",j),hi=q("address",j),bi=q("shippingAddress",j),vi=q("paymentMethodMessaging",j),xi=q("taxId",j),Ci=q("issuingCardNumberDisplay",j),ki=q("issuingCardCvcDisplay",j),wi=q("issuingCardExpiryDisplay",j),Pi=q("issuingCardPinDisplay",j),Ni=q("issuingCardCopyButton",j),Si=q("terms",j);function ht(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ht=function(t){return typeof t}:ht=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ht(e)}var Pr="dahlia",co=function(t){return t===3?"v3":t},Nr="https://js.stripe.com",lo="".concat(Nr,"/").concat(Pr,"/stripe.js"),uo=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,po=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,kr="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",mo=function(t){return uo.test(t)||po.test(t)},fo=function(){for(var t=document.querySelectorAll('script[src^="'.concat(Nr,'"]')),n=0;n<t.length;n++){var r=t[n];if(mo(r.src))return r}return null},wr=function(t){var n=t&&!t.advancedFraudSignals?"?advancedFraudSignals=false":"",r=document.createElement("script");r.src="".concat(lo).concat(n);var a=document.head||document.body;if(!a)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return a.appendChild(r),r},go=function(t,n){!t||!t._registerWrapper||t._registerWrapper({name:"stripe-js",version:"9.17.0",startTime:n})},Qe=null,gt=null,yt=null,yo=function(t){return function(n){t(new Error("Failed to load Stripe.js",{cause:n}))}},ho=function(t,n){return function(){window.Stripe?t(window.Stripe):n(new Error("Stripe.js not available"))}},bo=function(t){return Qe!==null?Qe:(Qe=new Promise(function(n,r){if(typeof window>"u"||typeof document>"u"){n(null);return}if(window.Stripe&&t&&console.warn(kr),window.Stripe){n(window.Stripe);return}try{var a=fo();if(a&&t)console.warn(kr);else if(!a)a=wr(t);else if(a&&yt!==null&&gt!==null){var s;a.removeEventListener("load",yt),a.removeEventListener("error",gt),(s=a.parentNode)===null||s===void 0||s.removeChild(a),a=wr(t)}yt=ho(n,r),gt=yo(r),a.addEventListener("load",yt),a.addEventListener("error",gt)}catch(l){r(l);return}}),Qe.catch(function(n){return Qe=null,Promise.reject(n)}))},vo=function(t,n,r){if(t===null)return null;var a=n[0];if(typeof a!="string")throw new Error("Expected publishable key to be of type string, got type ".concat(ht(a)," instead."));var s=a.match(/^pk_test/),l=co(t.version),m=Pr;s&&l!==m&&console.warn("Stripe.js@".concat(l," was loaded on the page, but @stripe/stripe-js@").concat("9.17.0"," expected Stripe.js@").concat(m,". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var p=t.apply(void 0,n);return go(p,r),p},et,Sr=!1,Er=function(){return et||(et=bo(null).catch(function(t){return et=null,Promise.reject(t)}),et)};Promise.resolve().then(function(){return Er()}).catch(function(e){Sr||console.warn(e)});var bt=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];Sr=!0;var a=Date.now();return Er().then(function(s){return vo(s,n,a)})};var Bt=2;function Rr(e){return e==="card"}var xo="checkout_unavailable",Co="checkout_waiting",Pe="We could not check your payment. Please try again.",Or="Your bank is still waiting for you to approve this payment, so your order stays as it was. Finish the approval, or try again in a few minutes.",Ir=1e4;async function Ar(e,t=Ir){let n,r=new Promise(s=>{n=setTimeout(()=>s(void 0),t)}),a=(async()=>{try{return(await(await bt(e.publishableKey))?.retrievePaymentIntent(e.clientSecret))?.paymentIntent?.status}catch{return}})();try{return await Promise.race([a,r])}finally{clearTimeout(n)}}var Tr=new Set(["none","requires_payment_method","canceled"]);async function zt(e,t=Ir){let n,r=new Promise(a=>{n=setTimeout(()=>a(void 0),t)});try{return await Promise.race([K.releaseCheckout({idempotencyKey:e}).then(a=>a.status,()=>{}),r])}finally{clearTimeout(n)}}function Lr(e,t){return e instanceof pe&&typeof e.data=="object"&&e.data!==null&&e.data.code===t}function vt(e){return Lr(e,xo)}function _r(e){return Lr(e,Co)}function xt(e){return e.orderNumber||e.checkoutNumber}function ko(e){return e.orderNumber?{kind:"placed",order:e}:{kind:e.status==="released"?"refunded":e.status==="expired"?"expired":"pending",checkoutNumber:e.checkoutNumber}}async function Fr({checkoutNumber:e,resend:t,page:n}){n.setConfirming(!0);let r;try{r=ko(await t())}catch{r={kind:"pending",checkoutNumber:e}}r.kind==="placed"?(n.markPaid(),n.track(r.order),n.land(r.order)):n.unplaced({...r,checkoutNumber:r.checkoutNumber||e}),n.setConfirming(!1)}import{createContext as To,useContext as Lo,useEffect as z,useMemo as Hr,useRef as J,useState as P}from"react";var wo="sf:gclid",Po="sf:fbclid",No=2160*60*60*1e3;function Dr(){return typeof window<"u"}function qr(e){let t=Je.getItem(e);if(!t)return"";try{let{v:n,t:r}=JSON.parse(t);return!n||typeof r!="number"||Date.now()-r>No?"":n}catch{return""}}function jr(e){if(!Dr())return"";let t=e.replace(/([.$?*|{}()[\]\\/+^])/g,"\\$1"),n=document.cookie.match(new RegExp(`(?:^|; )${t}=([^;]*)`));return n?decodeURIComponent(n[1]):""}function Mr(){if(!Dr())return{};let e=qr(wo),t=qr(Po),n=jr("_fbp"),r=jr("_fbc");!r&&t&&(r=`fb.1.${Date.now()}.${t}`);let a={};return e&&(a.gclid=e),t&&(a.fbclid=t),n&&(a.fbp=n),r&&(a.fbc=r),a}var Kr="sf:meta-purchases",So=20;function Wr(){return typeof window>"u"||window.parent!==window}function Eo(...e){try{if(Wr()||typeof window.fbq!="function")return;window.fbq(...e)}catch{}}var Ur=new Set;function Ro(e){if(Ur.has(e))return!1;Ur.add(e);try{let t=JSON.parse(Je.getItem(Kr)??"[]");if(t.includes(e))return!1;Je.setItem(Kr,JSON.stringify([...t,e].slice(-So)))}catch{}return!0}function Oo(e){return[...new Set(e.filter(Xe).flatMap(t=>t.components.map(n=>n.partNumber)))]}function $r(e){let t=e.confirmation;Wr()||!Ro(t.orderNumber)||Eo("track","Purchase",{value:Number(t.grandTotal),currency:t.currency,content_type:"product",content_ids:Oo(e.lines)},{eventID:t.orderNumber})}var Ht="checkout-afterpay-context",Ct="checkout-gocardless-context",Gt="checkout-zip-context",kt="checkout-klarna-context";function Io({evidence:e,parked:t}){return e?{action:"capture",evidence:e,parked:t}:t?{action:"settle",parked:t}:{action:"ignore"}}function Ao(e,t){let n=e.getItem(t);if(e.removeItem(t),!n)return null;try{return JSON.parse(n)}catch{return null}}var Yr={name:"Afterpay",legParam:"afterpay",legValues:["confirm","cancel"],storageKey:Ht,evidenceFrom(e,t){return t==="cancel"||(e.get("status")??"").toUpperCase()==="CANCELLED"?null:e.get("orderToken")},requestFrom:e=>({token:e})},Br={name:"Zip",legParam:"zip",legValues:["return"],storageKey:Gt,evidenceFrom(e){let t=(e.get("result")??"").toLowerCase();return t==="cancelled"||t==="declined"?null:e.get("checkoutId")},requestFrom:e=>({checkoutId:e})};async function Vt(e,t){let n=new URLSearchParams(t.search),r=n.get(e.legParam);if(!r||!e.legValues.includes(r))return;let a=Ao(t.storage,e.storageKey),s=e.evidenceFrom(n,r);t.scrubQuery();let l=Io({evidence:s,parked:a});if(l.action!=="ignore"){if(t.page.clearCart(),l.action==="settle"){t.page.note(`The ${e.name} payment was not completed \u2014 our team will follow up on payment.`),t.page.land(l.parked.confirmation);return}t.page.setConfirming(!0);try{let m=await t.capture(e.requestFrom(l.evidence));m.status==="paid"?t.page.markPaid():t.page.note(`${e.name} declined the payment \u2014 our team will follow up on payment.`),t.page.land(l.parked?.confirmation??m)}catch{l.parked?(t.page.note(`We could not confirm the ${e.name} payment \u2014 our team will follow up on payment.`),t.page.land(l.parked.confirmation)):t.page.fail(`We could not confirm your ${e.name} payment. Please contact us before trying again \u2014 your payment may already have been taken.`)}finally{t.page.setConfirming(!1)}}}function zr(e,t,n){let r=(t??"").trim();if(!r)return"";if(n.length===0)return r;let a=r.toUpperCase(),s=`${e.toUpperCase()}-${a}`,l=n.find(m=>m.code&&m.code.toUpperCase()===a)??n.find(m=>m.code&&m.code.toUpperCase()===s)??n.find(m=>m.name.toUpperCase()===a);return l?l.code||l.name:""}import{jsx as he}from"react/jsx-runtime";function Gr(e){let t=e.indexOf(`
3
- `);return t===-1?[e,""]:[e.slice(0,t),e.slice(t+1)]}function Vr(e,{canParkContext:t}={canParkContext:!0}){let n=e.paymentMethods,r=[];return n.includes("card")&&r.push({key:"card",title:"Card",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("paypal")&&e.paypalClientId&&r.push({key:"paypal",title:"PayPal",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAYPAL \xB7 CARDS"})}),n.includes("afterpay")&&r.push({key:"afterpay",title:"Afterpay",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"4 \xD7 INTEREST-FREE"})}),n.includes("square")&&e.squareApplicationId&&e.squareLocationId&&r.push({key:"square",title:"Card (Square)",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("gocardless")&&t&&r.push({key:"gocardless",title:"Bank Direct Debit",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY BY BANK"})}),n.includes("zip")&&r.push({key:"zip",title:"Zip",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY IN 4"})}),n.includes("klarna")&&t&&r.push({key:"klarna",title:"Klarna",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY LATER"})}),n.includes("bank")&&r.push({key:"bank",title:"Bank transfer",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Invoiced"})}),r}var Jr="This shop does not take payment online yet. Please contact the shop to order.",wt=class extends Error{};function _o(e,t){if(!e.orderNumber&&vt(t))return t.message;let n=t instanceof pe?` (${t.message})`:"";return e.orderNumber?`Your order ${e.orderNumber} is saved, but the payment did not start${n}. Try the payment again \u2014 your order will not be placed twice.`:`Your items are held under ${e.checkoutNumber}, but the payment did not start${n}. Try the payment again \u2014 you will not be charged twice.`}var Xr="Shipping cannot be calculated right now. Please try again.";function Fo({site:e,logo:t,preview:n=!1}){let{items:r,totals:a,coupon:s,refuseCoupon:l,deliveryOptions:m,shippingMethodId:p,setShippingMethodId:d,setQuoteDestination:y,courier:x,requote:b,identify:f,clearCapturedCart:E,replaceItems:S,removeCoupon:O}=mt(),X=m.find(i=>i.id===p)?.pickupLocation??null,{country:R,countries:w,activeCountry:U,formatMoney:H}=me(),[M,oe]=P(()=>Vr(e)[0]?.key??null),[fe,Ee]=P(!0);z(()=>{Ee(Fn(ae))},[]);let[ie,B]=P(!1),[te,se]=P(""),[_,C]=P(""),[G,Be]=P(""),[Re,D]=P(""),[ze,V]=P(""),[ce,be]=P(""),[le,T]=P(""),[Z,Fe]=P(""),[L,Oe]=P(()=>R||w[0]?.code||""),[ve,tt]=P(""),[He,en]=P([]),[Et,Rt]=P(null),[nt,Ge]=P(null),tn=Hr(()=>w.find(i=>i.code===L)??U,[w,L,U]),pa=tn?.postalLabel||"Postal Code",ma=He[0]?.divisionType||"State / Province";z(()=>{if(!L){en([]),Rt(L);return}Rt(null);let i=!1;return K.listCountrySubdivisions(L).then(u=>{i||(en(u),Rt(L),tt(""))}),()=>{i=!0}},[L]);let nn=Re.trim()!==""&&ce.trim()!==""&&le.trim()!==""&&Et===L&&(He.length===0||ve!=="")?le.trim():"";z(()=>{y(L?{country:L,subdivision:ve,postcode:nn}:null)},[L,ve,nn,y]),z(()=>()=>y(null),[y]);let fa=x?.status==="unavailable",ga=b,[rt,rn]=P(null),[ya,an]=P([]),[on,Ot]=P("new"),[sn,cn]=P(!1),[It,ha]=P("Home"),[ba,ln]=P(null),[qe,At]=P(()=>Ze()),un=J(null),[dn,ue]=P(null),[va,ne]=P(null),[pn,at]=P(null),[mn,xa]=P(!1),[fn,Ca]=P(!1),[xe,je]=P(null),[ka,De]=P(!1),[re,Ce]=P(null),[wa,ge]=P(null),[Pa,Na]=P(!1),[Sa,gn]=P(!1),[Ea,Ra]=P(!1),[Oa,yn]=P(!1),[hn,Ia]=P(!1),[Aa,Tt]=P(!1),[Lt,bn]=P(null),Me=J(null),ot=J(r),_t=J(null),Ft=J(null),vn=!!(dn||Lt&&Lt.kind!=="processing"||hn||mn||fn||pn&&xe?.orderNumber);z(()=>{vn&&(S([]),O())},[vn,S,O]);let xn=J(!1);z(()=>{n||xn.current||!r.some(Xe)||(xn.current=!0,Mn({lines:r,currency:a.currency,value:a.subtotal-a.discount,coupon:s?.valid?s.code:void 0}))},[r,a,s,n]),z(()=>{f(te,_.trim()||void 0)},[te,_,f]);let Cn=J(null),[it,Ta]=P(null);z(()=>{let i=Cn.current;if(!it||!i)return;let u=()=>i.style.setProperty("--sf-checkout-header-h",`${it.offsetHeight}px`);u();let g=new ResizeObserver(u);return g.observe(it),()=>g.disconnect()},[it]),z(()=>{let i=g=>({setConfirming:g,land:ue,markPaid:()=>De(!0),note:ge,fail:ne,clearCart:E}),u={search:window.location.search,storage:ae,scrubQuery:()=>window.history.replaceState(null,"",window.location.pathname)};Vt(Yr,{...u,capture:K.captureAfterpayPayment,page:i(Na)}),Vt(Br,{...u,capture:K.captureZipPayment,page:i(Ra)})},[]),z(()=>{let u=new URLSearchParams(window.location.search).get("gocardless");if(u!=="confirm"&&u!=="cancel")return;let g=ae.getItem(Ct);if(ae.removeItem(Ct),window.history.replaceState(null,"",window.location.pathname),!g)return;let v;try{v=JSON.parse(g)}catch{return}if(E(),u==="cancel"){ge("The direct debit was not set up \u2014 our team will follow up on payment."),ue(v.confirmation);return}gn(!0),K.completeGocardlessPayment({idempotencyKey:v.idempotencyKey}).then(k=>{k.status==="paid"?De(!0):k.status==="declined"?ge("The direct debit was declined \u2014 our team will follow up on payment."):ge("Your direct debit is set up \u2014 the payment is collecting and will clear in a few days.")}).catch(()=>{ge("We could not confirm the direct debit \u2014 our team will follow up on payment.")}).finally(()=>{ue(v.confirmation),gn(!1)})},[]),z(()=>{let i=new URLSearchParams(window.location.search),u=i.get("klarna");if(u!=="confirm"&&u!=="cancel")return;let g=ae.getItem(kt);ae.removeItem(kt);let v=i.get("authorization_token");if(window.history.replaceState(null,"",window.location.pathname),!g)return;let k;try{k=JSON.parse(g)}catch{return}if(E(),u==="cancel"||!v){ge("The Klarna payment was not completed \u2014 our team will follow up on payment."),ue(k.confirmation);return}yn(!0),K.captureKlarnaPayment({idempotencyKey:k.idempotencyKey,authorizationToken:v}).then(I=>{I.status==="paid"?De(!0):I.status==="declined"?ge("Klarna declined the payment \u2014 our team will follow up on payment."):ge("Your Klarna payment is being reviewed \u2014 we'll confirm the outcome shortly.")}).catch(()=>{ge("We could not confirm the Klarna payment \u2014 our team will follow up on payment.")}).finally(()=>{ue(k.confirmation),yn(!1)})},[]);function kn(i){let[u,g]=Gr(i.address);D(u),V(g),be(i.city),T(i.zip_code),i.country&&Oe(i.country),i.phone&&Fe(i.phone),Ge({country:i.country||null,state:i.state??""})}z(()=>{if(nt){if((nt.country||L)!==L){Ge(null);return}Et===L&&(tt(zr(L,nt.state,He)),Ge(null))}},[nt,L,Et,He]),z(()=>{let i=!1;return(async()=>{try{let[u,g,v]=await Promise.all([We.me(),We.myProfile().catch(()=>null),We.myAddresses().catch(()=>[])]);if(i)return;rn(u);let k=v.filter(Ve=>Ve.is_active);an(k),se(u.email);let I=(g?.contact_name??"").split(/\s+/);C(u.first_name||I[0]||""),Be(u.last_name||I.slice(1).join(" "));let W=u.phone||g?.phone;W&&Fe(W);let Ae=k.find(Ve=>Ve.id===u.default_delivery_location)??k[0];if(Ae)Ot(Ae.id),kn(Ae);else if(g){let[Ve,Ma]=Gr(g.address??"");D(Ve),V(Ma),be(g.city??""),T(g.zip_code??""),g.country&&Oe(g.country),Ge({country:g.country||null,state:g.state??""})}}catch{}})(),()=>{i=!0}},[]);function La(){We.logout(),rn(null),an([]),Ot("new"),cn(!1),se(""),C(""),Be(""),D(""),V(""),be(""),T(""),Fe(""),Oe(R||w[0]?.code||""),tt(""),Ge(null)}let Ke=Hr(()=>Vr(e,{canParkContext:fe}),[e,fe]);z(()=>{Ke.some(i=>i.key===M)||oe(Ke[0]?.key??null)},[Ke,M]);let _a=Ke.length===0,st=ze.trim()?`${Re}
4
- ${ze.trim()}`:Re,ke=JSON.stringify([te,_,G,Z,st,ce,ve,le,L,r.map(i=>[i.id,i.qty]),p,Dt(s),M,a.currency,rt?.id??null]),ct=J(null),ye=J(!1),Ue=J(null),lt=J(!1),ut=J(ke);ut.current=ke;let wn=J(ie);wn.current=ie;let Pn=()=>ye.current&&ut.current!==ct.current,Ie=J(null);z(()=>{wn.current||(ke!==Ie.current&&(Ie.current=null),!(!ye.current||!re||re.orderNumber)&&(ke===ct.current||ke===Ie.current||dt(re)))},[ke,re]);async function dt(i){if(!lt.current){lt.current=!0,B(!0);try{let u=Ue.current?await Ar(Ue.current):"none";if(u==="succeeded"||u==="processing"){ye.current=!1,Ce(null),u==="succeeded"?await we(void 0,i):On(i);return}if(u===void 0||!Tr.has(u)){Ie.current=ut.current,Ce(i),ne(u==="requires_action"?Or:Pe);return}let g=await zt(qe);if(g==="committed"){ye.current=!1,Ce(null),await we(void 0,i);return}if(g!=="released"){Ie.current=ut.current,Ce(i),ne(Pe);return}ye.current=!1,Ue.current=null,Ie.current=null,ne(null),Ce(null),At(Ze())}finally{lt.current=!1,B(!1)}}}async function Fa(){if(n||ie||lt.current)return;if(re){if(ye.current&&!re.orderNumber&&ke!==ct.current){await dt(re);return}B(!0),ne(null),await qt();let v=re.orderNumber?M:"card";v!==M&&oe(v),await In(re,v,!re.orderNumber);return}if(r.length===0||a.repricing||!M||!Ke.some(v=>v.key===M))return;let i=r.filter(Xe).flatMap(v=>Dn(v.components,v.qty));if(i.length===0){ne("Pick a size on each wheel's product page before checking out.");return}B(!0),ne(null);let u,g=qe;try{let v=rt?K.createOrderAuthed:K.createOrder,k=Xn(),I={customer:{email:te,name:`${_} ${G}`.trim(),phone:Z.trim()||void 0,address:st,city:ce,state:ve||void 0,zipCode:le,country:L},items:i,currency:a.currency,idempotencyKey:qe,shippingMethodId:p??void 0,couponCode:Dt(s),...k==="denied"?{}:Mr(),...k?{adConsent:k}:{},...Rr(M)?{checkoutFlow:Bt}:{}};Me.current=()=>v(I),Ue.current=null,ye.current=!1,Ie.current=null,ct.current=ke,ot.current=r,En(I,v);let W=await(!I.checkoutFlow&&Ft.current===I.idempotencyKey?Nn(I,v):v(I).then(Ae=>({answer:Ae,request:I})).catch(Ae=>qa(Ae,I,v)));if(!W)return;u=W.answer,g=W.request.idempotencyKey,u.orderNumber&&(Rn(u),E()),await qt()}catch(v){let k=jn(v);k?(l(k),ne(`${k} Your order has not been placed. Place it again to continue without the code.`)):v instanceof wt?ne(Pe):ne(v instanceof pe?v.message:"Could not place the order. Please try again."),B(!1);return}await In(u,M,!1,g)}async function qa(i,u,g){if(vt(i))return Sn(u,g);if(!_r(i))throw i;return Ft.current=u.idempotencyKey,Nn(u,g)}async function Nn(i,u){let g=await zt(i.idempotencyKey);if(g==="released")return Sn(i,u);if(g!=="committed")throw new wt;let v=_t.current?.key===i.idempotencyKey?_t.current:null;ot.current=v?.lines??r;let k=v?.send??(()=>u({...i,checkoutFlow:Bt}));Me.current=k;let I=await k();return B(!1),await we(I,{...I,orderNumber:""}),await qt(),null}async function Sn(i,u){let g={...i,idempotencyKey:Ze()};return Ft.current=null,At(g.idempotencyKey),Me.current=()=>u(g),En(g,u),{answer:await u(g),request:g}}function En(i,u){i.checkoutFlow&&(_t.current={key:i.idempotencyKey,send:()=>u(i),lines:r})}function Rn(i){Kn({confirmation:i,lines:ot.current,adsSendTo:e.googleAdsId&&e.googleAdsConversionLabel?`${e.googleAdsId}/${e.googleAdsConversionLabel}`:null}),$r({confirmation:i,lines:ot.current})}async function we(i,u=xe){if(!u)return;let g=i?async()=>i:Me.current;if(u.orderNumber||!g){De(!0),ue(u);return}E(),await Fr({checkoutNumber:u.checkoutNumber,resend:g,page:{setConfirming:Ia,land:ue,markPaid:()=>De(!0),track:Rn,unplaced:bn}})}function On(i=xe){if(i){if(i.orderNumber){ue(i);return}E(),bn({kind:"processing",checkoutNumber:i.checkoutNumber})}}async function qt(){let i=JSON.stringify([It.trim(),_,G,Z.trim(),st,ce,ve,le,L]);if(!(!rt||!sn||on!=="new"||un.current===i))try{await We.createAddress({label:It.trim()||"Home",contact_name:`${_} ${G}`.trim(),phone:Z.trim(),address:st,city:ce,zip_code:le,state:ve,country:L}),un.current=i,ln("Address saved to your account.")}catch{ln("We couldn't save the address to your account \u2014 you can add it under Account \u2192 Addresses.")}}async function In(i,u=M,g=!1,v=qe){Ce(null);try{if(u==="card"&&e.paymentMethods.includes("card")){let k=await K.createPaymentIntent({idempotencyKey:v});if(Ue.current=k,g&&Pn()){await dt(i);return}let I=i;if(g){let W=await Me.current?.().catch(()=>null);if(W?.orderNumber){await we(W,i);return}if(I=An(i,W)??{...i,expiresAt:null},Pn()){await dt(i);return}}je(I),Tt(!1),at(k)}else if(u==="paypal"&&e.paymentMethods.includes("paypal"))je(i),xa(!0);else if(u==="afterpay"&&e.paymentMethods.includes("afterpay")){let k=window.location.origin,I=await K.createAfterpayCheckout({idempotencyKey:v,confirmUrl:`${k}/checkout?afterpay=confirm`,cancelUrl:`${k}/checkout?afterpay=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Ht,JSON.stringify(W)),window.location.assign(I.redirectCheckoutUrl);return}else if(u==="square"&&e.paymentMethods.includes("square"))je(i),Ca(!0);else if(u==="gocardless"&&e.paymentMethods.includes("gocardless")){let k=window.location.origin,I=await K.createGocardlessBillingRequest({idempotencyKey:v,confirmUrl:`${k}/checkout?gocardless=confirm`,cancelUrl:`${k}/checkout?gocardless=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Ct,JSON.stringify(W)),window.location.assign(I.authorisationUrl);return}else if(u==="zip"&&e.paymentMethods.includes("zip")){let k=window.location.origin,I=await K.createZipCheckout({idempotencyKey:v,redirectUrl:`${k}/checkout?zip=return`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Gt,JSON.stringify(W)),window.location.assign(I.redirectUrl);return}else if(u==="klarna"&&e.paymentMethods.includes("klarna")){let k=window.location.origin,I=await K.createKlarnaCheckout({idempotencyKey:v,confirmUrl:`${k}/checkout?klarna=confirm`,cancelUrl:`${k}/checkout?klarna=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(kt,JSON.stringify(W)),window.location.assign(I.redirectUrl);return}else ue(i)}catch(k){if((g||u==="card")&&k instanceof pe&&k.status===409){await we(void 0,i);return}Tn(i,k),B(!1)}}function An(i,u){return u&&!u.orderNumber&&u.status==="open"&&u.checkoutNumber===i.checkoutNumber?u:null}function Tn(i,u){ne(_o(i,u)),!i.orderNumber&&vt(u)?(ye.current=!1,At(Ze())):Ce(i)}async function ja(i){if(!xe)return;let u=xe;try{let g=await K.createPaymentIntent({idempotencyKey:qe}),v=await Me.current?.().catch(()=>null);if(v?.orderNumber){await we(v);return}let k=An(u,v);je(k??{...u,expiresAt:null}),Tt(i&&k!==null),Ue.current=g,at(g)}catch(g){if(g instanceof pe&&g.status===409){await we();return}at(null),je(null),Tn(u,g),B(!1)}}function Da(){xe&&(ye.current=!0,Ce(xe),at(null),je(null),Tt(!1),B(!1))}return{site:e,logo:t,items:r,totals:a,coupon:s,deliveryOptions:m,courierUnavailable:fa,retryCourier:ga,shippingMethodId:p,setShippingMethodId:d,pickupLocation:X,servedCountries:w,formatMoney:H,payChoice:M,setPayChoice:oe,placing:ie,email:te,setEmail:se,firstName:_,setFirstName:C,lastName:G,setLastName:Be,address1:Re,setAddress1:D,address2:ze,setAddress2:V,city:ce,setCity:be,postcode:le,setPostcode:T,phone:Z,setPhone:Fe,country:L,setCountry:Oe,subdivision:ve,setSubdivision:tt,subdivisions:He,destination:tn,postcodeLabel:pa,subdivisionLabel:ma,me:rt,savedAddresses:ya,selectedAddressId:on,setSelectedAddressId:Ot,saveAddress:sn,setSaveAddress:cn,saveLabel:It,setSaveLabel:ha,addressSaveNote:ba,idemKey:qe,confirmation:dn,setConfirmation:ue,orderError:va,payment:pn,paypalStep:mn,squareStep:fn,pendingConf:xe,paid:ka,setPaid:De,unpaidOrder:re,payNote:wa,afterpayConfirming:Pa,gocardlessConfirming:Sa,zipConfirming:Ea,klarnaConfirming:Oa,cardConfirming:hn,checkoutResult:Lt,confirmCardPayment:we,cardStillProcessing:On,renewCardPayment:ja,holdRenewed:Aa,leaveCardPayment:Da,checkoutRootRef:Cn,setCheckoutHeaderEl:Ta,fillFromAddress:kn,checkoutSignOut:La,payOptions:Ke,noPaymentMethod:_a,placeOrder:Fa}}var Zr=To(null);function Qr({children:e,...t}){let n=Fo(t);return he(Zr.Provider,{value:n,children:e})}function Ne(){let e=Lo(Zr);if(!e)throw new Error("useCheckout must be used inside CheckoutStateProvider");return e}import{useId as Jt}from"react";import{Fragment as Se,jsx as o,jsxs as N}from"react/jsx-runtime";function ta(){let{email:e,setEmail:t,firstName:n,setFirstName:r,lastName:a,setLastName:s,me:l,checkoutSignOut:m}=Ne(),p=Jt();return N(Nt,{num:"N\xB0 01",title:"Contact",children:[o(ee,{label:"Email",htmlFor:p,hint:l?N(Se,{children:["Signed in \xB7"," ",o("button",{type:"button",onClick:m,className:"underline transition-colors hover:text-accent",children:"Not you? Sign out"})]}):void 0,children:o("input",{id:p,type:"email",value:e,onChange:d=>t(d.target.value),placeholder:"you@example.com",readOnly:l!==null,className:Q+(l?" opacity-70":"")})}),N(ia,{children:[o(ee,{label:"First name",children:o("input",{type:"text",value:n,onChange:d=>r(d.target.value),className:Q})}),o(ee,{label:"Last name",children:o("input",{type:"text",value:a,onChange:d=>s(d.target.value),className:Q})})]})]})}function na(){let{pickupLocation:e,servedCountries:t,address1:n,setAddress1:r,address2:a,setAddress2:s,city:l,setCity:m,postcode:p,setPostcode:d,phone:y,setPhone:x,country:b,setCountry:f,subdivision:E,setSubdivision:S,subdivisions:O,destination:X,postcodeLabel:R,subdivisionLabel:w,me:U,savedAddresses:H,selectedAddressId:M,setSelectedAddressId:oe,saveAddress:fe,setSaveAddress:Ee,saveLabel:ie,setSaveLabel:B,fillFromAddress:te}=Ne(),se=Jt(),_=Jt();return N(Nt,{num:"N\xB0 02",title:e?"Collection":"Shipping address",children:[e?N("div",{className:"grid gap-2 text-[14px] leading-[1.6]",children:[o("span",{className:"font-medium",children:e.name}),[e.address,e.city,e.state,e.zipCode,e.country].filter(Boolean).length>0&&o("span",{className:"opacity-80",children:[e.address,e.city,e.state,e.zipCode,e.country].filter(Boolean).join(", ")}),e.openingHours&&o("span",{className:"opacity-80",children:e.openingHours}),e.instructions&&o("span",{className:"opacity-80",children:e.instructions}),o("span",{className:"mt-1 font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"No delivery address needed"})]}):N(Se,{children:[U!==null&&H.length>0&&N("div",{className:"grid gap-3",children:[H.map(C=>o(Pt,{active:M===C.id,onClick:()=>{oe(C.id),te(C)},title:C.label,body:C.formatted_address,price:null},C.id)),o(Pt,{active:M==="new",onClick:()=>oe("new"),title:"New address",body:null,price:null})]}),o(ee,{label:"Address line 1",children:o("input",{type:"text",value:n,onChange:C=>r(C.target.value),className:Q})}),o(ee,{label:"Address line 2",children:o("input",{type:"text",value:a,onChange:C=>s(C.target.value),placeholder:"Apartment, unit, garage bay\u2026",className:Q})}),N(ia,{cols:"three",children:[o(ee,{label:"City",children:o("input",{type:"text",value:l,onChange:C=>m(C.target.value),className:Q})}),o(ee,{label:R,children:o("input",{type:"text",value:p,onChange:C=>d(C.target.value),className:Q})}),o(ee,{label:"Country",separate:!0,htmlFor:se,children:o(Kt,{id:se,value:b,onChange:C=>f(C.target.value),className:Q+" pr-10",style:ea,children:t.map(C=>o("option",{value:C.code,children:C.name},C.code))})})]}),o(ee,{label:w,separate:!0,htmlFor:_,children:O.length>0?N(Kt,{id:_,value:E,onChange:C=>S(C.target.value),className:Q+" pr-10",style:ea,children:[o("option",{value:"",children:"Select\u2026"}),O.map(C=>o("option",{value:C.code||C.name,children:C.name},C.code||C.name))]}):o("input",{id:_,type:"text",value:E,onChange:C=>S(C.target.value),className:Q})})]}),o(ee,{label:"Phone",children:o("input",{type:"tel",value:y,onChange:C=>x(C.target.value),className:Q})}),!e&&U!==null&&M==="new"&&N(Se,{children:[o(qo,{checked:fe,onChange:Ee,label:"Save this address to my account"}),fe&&o(ee,{label:"Address label",children:o("input",{type:"text",value:ie,onChange:C=>B(C.target.value),placeholder:"Home",className:Q})})]})]})}function ra(){let{totals:e,coupon:t,deliveryOptions:n,shippingMethodId:r,setShippingMethodId:a,pickupLocation:s,formatMoney:l,city:m,destination:p,courierUnavailable:d,retryCourier:y}=Ne();return o(Nt,{num:"N\xB0 03",title:"Shipping",children:N("div",{className:"grid gap-3",children:[n.map(x=>{let b=x.pickupLocation,f=b?[b.address,b.city,b.state,b.zipCode].filter(Boolean).join(", "):null;return o(Pt,{active:r===x.id,onClick:()=>a(x.id),title:b?`${x.name} \u2014 ${b.name}`:x.name,body:b?[f,b.openingHours,b.instructions,x.description].filter(Boolean).join(" \xB7 "):x.description||null,price:e.freeShipping||x.amount===0?pt:l(x.amount,e.currency),tag:x.tag||void 0},x.id)}),d?N("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:[Xr," ",o("button",{type:"button",onClick:y,className:"underline transition-colors hover:text-accent",children:"Try again"})]}):n.length===0&&o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Shipping is arranged after your order is reviewed."})]})})}function aa(){let{payChoice:e,setPayChoice:t,placing:n,payment:r,payOptions:a,noPaymentMethod:s}=Ne();return N(Nt,{num:"N\xB0 04",title:"Payment",children:[s&&o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:Jr}),o("div",{className:"grid gap-3",children:a.map(l=>o(Pt,{active:e===l.key,onClick:()=>t(l.key),title:l.title,body:l.body,price:l.price,tag:l.tag},l.key))}),e==="card"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll enter card details on the secure payment step after placing the order."}):e==="paypal"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll approve the payment with PayPal on the payment step after placing the order."}):e==="afterpay"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Afterpay to approve four interest-free payments, then brought straight back."}):e==="square"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll enter card details on the secure payment step after placing the order."}):e==="gocardless"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll set up a bank direct debit with GoCardless, then be brought straight back. Direct debits clear in a few days."}):e==="zip"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Zip to approve four instalments, then brought straight back."}):e==="klarna"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Klarna to choose how to pay, then brought straight back."}):e==="bank"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Our team emails you the invoice and bank details after review."}):null]})}function oa(){let{site:e,items:t,totals:n,coupon:r,formatMoney:a,payChoice:s,placing:l,email:m,orderError:p,payment:d,noPaymentMethod:y,unpaidOrder:x,placeOrder:b}=Ne();return N("aside",{className:"sticky top-[var(--sf-checkout-header-h,88px)] border border-line max-[1100px]:static",style:{background:"linear-gradient(180deg, color-mix(in oklab, var(--site-surface) 70%, var(--bg)) 0%, var(--bg) 100%)"},children:[N("header",{className:"flex items-center justify-between border-b border-accent bg-accent px-6 py-4 font-mono text-[13px] font-bold uppercase tracking-[0.28em] text-bg",children:[o("span",{children:"Your order"}),o(de,{href:"/wheels",className:"text-bg/80 transition-colors hover:text-bg",children:"Edit \u2197"})]}),o("div",{className:"flex flex-col px-6 py-2",children:t.length===0?N("div",{className:"py-8 text-center font-serif text-[16px] italic leading-[1.5] text-fg-dim",children:["Your cart is empty. ",o(de,{href:"/wheels",className:"text-accent underline-offset-4 hover:underline",children:"Browse the catalog \u2192"})]}):t.map(f=>o(jo,{slug:f.slug,name:f.name,qty:f.qty,config:f.config,configSummary:Do(f.config),price:Yn(f,n.currency)??0,currency:n.currency},f.id))}),o("div",{className:"border-t border-line px-6 pt-5",children:o(Jn,{customerEmail:m})}),N("div",{className:"flex flex-col gap-2 border-t border-line mt-5 px-6 pt-5",children:[o(Le,{label:"Subtotal",value:a(n.subtotal,n.currency)}),n.discount>0&&r?.valid&&o(Le,{label:`Coupon \xB7 ${r.code}`,value:N("span",{className:"font-semibold text-green",children:["\u2212 ",a(n.discount,n.currency)]})}),r?.deferred&&o(Le,{label:`Coupon \xB7 ${r.code}`,value:qn}),r?.valid&&r.effects?.gift&&o(Le,{label:`Free gift \xB7 ${r.effects.gift.partNumber}${r.effects.gift.quantity>1?` \xD7${r.effects.gift.quantity}`:""}`,value:o("span",{className:"font-semibold text-green",children:pt})}),o(Le,{label:"Shipping",value:n.shippingStatus==="free"?o("span",{className:"font-semibold text-green",children:pt}):Wn(n.shippingStatus)??a(n.shipping,n.currency)}),n.tax&&(n.tax.charged?o(Le,{label:n.tax.inclusive?`${n.tax.name} included \xB7 ${n.tax.rate}%`:n.tax.name,value:a(n.tax.amount,n.currency)}):n.tax.name?o(Le,{label:n.tax.name,value:Un}):null)]}),N("div",{className:"mt-4 flex items-end justify-between border-y-2 border-accent px-6 py-4",style:{background:"color-mix(in oklab, var(--accent) 10%, var(--bg))"},children:[o("span",{className:"font-display text-[20px] font-bold uppercase tracking-[0.04em] text-fg",children:"Total"}),o("span",{className:"text-right font-display text-[34px] font-bold leading-none tracking-[-0.025em] text-fg",children:n.repricing?"\u2026":a(n.grand,n.currency)})]}),N("div",{className:"flex flex-col gap-3 px-6 pt-5 pb-6",children:[p&&o(Te,{role:"alert",children:p}),n.hasUnpricedLine&&N(Te,{role:"status",children:["One or more items have no price in ",n.currency,". Remove them, or switch region, to continue."]}),o("button",{type:"button",onClick:b,disabled:l||!x&&(y||t.length===0||n.hasUnpricedLine||n.repricing),className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",l||!x&&(t.length===0||y||n.hasUnpricedLine||n.repricing)?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:l?N(Se,{children:["Building order\u2026 ",o("span",{children:"\xB7"})]}):y?N(Se,{children:["No online payment ",o("span",{children:"\xB7"})]}):x?N(Se,{children:["Try payment again \xB7 ",xt(x),o("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]}):n.repricing?N(Se,{children:["Updating total\u2026 ",o("span",{children:"\xB7"})]}):N(Se,{children:[s==="bank"?"Place order":"Continue to payment"," \xB7"," ",a(n.grand,n.currency),o("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})})]})]})}var ea={backgroundImage:"linear-gradient(45deg, transparent 50%, var(--accent) 50%), linear-gradient(135deg, var(--accent) 50%, transparent 50%)",backgroundPosition:"calc(100% - 18px) 50%, calc(100% - 12px) 50%",backgroundSize:"6px 6px",backgroundRepeat:"no-repeat"};function Nt({num:e,title:t,children:n}){return N("section",{className:"mb-6 border border-line bg-bg",children:[N("header",{className:"flex items-center gap-4 border-b border-line bg-surface px-6 py-4",children:[o("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e}),o("h2",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:t})]}),o("div",{className:"flex flex-col gap-4 px-6 py-6",children:n})]})}function ia({cols:e="two",children:t}){return o("div",{className:["grid gap-3 max-[640px]:grid-cols-1",e==="two"?"grid-cols-2":"grid-cols-[1.2fr_1fr_1fr]"].join(" "),children:t})}function Pt({active:e,onClick:t,title:n,body:r,price:a,tag:s}){return N("button",{type:"button",onClick:t,"aria-pressed":e,className:["relative grid grid-cols-[auto_1fr_auto] items-center gap-5 border bg-bg px-6 py-5 text-left transition-colors",e?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-line hover:border-[color-mix(in_oklab,var(--accent)_50%,var(--site-line))]"].join(" "),style:e?{background:"color-mix(in oklab, var(--accent) 14%, var(--bg))"}:void 0,children:[e&&o("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),o("span",{className:["flex h-[18px] w-[18px] items-center justify-center rounded-full border-2",e?"border-accent":"border-fg-dim"].join(" "),children:e&&o("span",{className:"block h-2.5 w-2.5 rounded-full bg-accent"})}),N("span",{className:"flex min-w-0 flex-col gap-1",children:[N("span",{className:"flex flex-wrap items-baseline gap-3 font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:[n,s&&o("span",{className:"border px-2 py-0.5 font-mono text-[11px] font-normal uppercase tracking-[0.24em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)",borderColor:"color-mix(in oklab, var(--accent) 45%, var(--site-line))"},children:s})]}),r&&o("span",{className:"font-mono text-[12px] uppercase tracking-[0.22em] text-fg-dim",children:r})]}),o("span",{className:"whitespace-nowrap font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:a})]})}function qo({checked:e,onChange:t,label:n,sub:r}){return N("div",{className:"flex items-start gap-3 border-t border-line py-4 first:border-t-0 first:pt-0",children:[o("button",{type:"button",onClick:()=>t(!e),"aria-pressed":e,"aria-label":n,className:["mt-px flex h-5 w-5 flex-shrink-0 items-center justify-center border transition-colors",e?"border-accent":"border-line"].join(" "),style:e?{background:"color-mix(in oklab, var(--accent) 18%, transparent)"}:void 0,children:e&&o("span",{className:"text-[13px] text-accent",children:"\u2713"})}),N("span",{className:"flex-1 font-display text-[16px] leading-[1.5] text-fg",children:[n,r&&o("small",{className:"mt-1 block font-mono text-[12px] uppercase tracking-[0.18em] text-fg-dim",children:r})]})]})}function jo({slug:e,name:t,qty:n,config:r,configSummary:a,price:s,currency:l}){let{catalog:m}=mt(),{formatMoney:p}=me(),d=m.find(S=>S.slug===e),y=d?.spokes??5,x=d?.mesh??!1,b=r.find(S=>S.gold)?.label,f=d?.finishes.find(S=>S.name===b&&S.src)??d?.finishes.find(S=>S.src),E=d?.finishes[0]?.color??Vn;return N("div",{className:"grid grid-cols-[60px_1fr_auto] items-center gap-4 border-b border-line py-4 last:border-b-0",children:[N("div",{className:"relative aspect-square",children:[o("div",{className:"flex h-full w-full items-center justify-center overflow-hidden border border-line bg-surface",children:f?.src?o(Ln,{src:f.src,alt:`${t.lead}${t.accent} \u2014 ${f.name}`,width:120,height:120,sizes:"60px",className:"block h-full w-full object-contain p-2"}):o("div",{className:"block w-[78%]",style:{color:E},children:o(Gn,{spokes:y,mesh:x,className:"block w-full"})})}),o("span",{className:"absolute -right-1.5 -top-1.5 z-[2] flex h-[18px] w-[18px] items-center justify-center rounded-full bg-accent font-mono text-[11px] font-bold text-bg",children:n})]}),N("div",{className:"flex min-w-0 flex-col gap-0.5",children:[N("span",{className:"font-display text-[17px] font-bold uppercase leading-none tracking-[-0.005em] text-fg",children:[t.lead,o("em",{className:"font-serif font-normal italic text-accent tracking-[-0.005em] normal-case",children:t.accent})]}),o("span",{className:"font-mono text-[12px] uppercase leading-[1.5] tracking-[0.18em] text-fg-dim",children:a})]}),o("span",{className:"text-right font-display text-[17px] font-bold tracking-[-0.005em] text-fg",children:p(s,l)})]})}function Le({label:e,value:t}){return N("div",{className:"flex items-center justify-between font-mono text-[13px] font-medium uppercase tracking-[0.18em] text-fg",children:[o("span",{children:e}),o("strong",{className:"font-display text-[16px] font-medium tracking-[-0.005em] normal-case text-fg",children:t})]})}function Do(e){return e.map(t=>t.label).join(" \xB7 ")}import{Fragment as $,jsx as c,jsxs as h}from"react/jsx-runtime";function Qt(e){return c(Qr,{...e,children:c(Uo,{})})}function Mo({order:e,paid:t}){let{formatMoney:n}=me();if(!e.grandTotal||!e.currency)return null;let r=l=>n(Number(l),e.currency),a=Number(e.freightCharge??0),s=Number(e.discountAmount??0);return h("dl",{className:"grid w-full max-w-sm grid-cols-[1fr_auto] gap-x-6 gap-y-1 border-y border-line py-3 text-left text-sm",children:[(e.shippingMethod||a>0)&&h($,{children:[h("dt",{className:"text-fg-dim",children:["Delivery",e.shippingMethod?` \xB7 ${e.shippingMethod}`:""]}),c("dd",{className:"text-right font-mono",children:r(e.freightCharge??"0")})]}),s>0&&h($,{children:[h("dt",{className:"text-fg-dim",children:["Discount",e.couponCode?` \xB7 ${e.couponCode}`:""]}),h("dd",{className:"text-right font-mono",children:["\u2212",r(e.discountAmount??"0")]})]}),c("dt",{className:"text-fg",children:t?"Total paid":"Order total"}),c("dd",{className:"text-right font-mono text-fg",children:r(e.grandTotal)})]})}function Ko({result:e}){let t=c("span",{className:"font-mono text-fg",children:e.checkoutNumber});return h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:e.kind==="refunded"||e.kind==="expired"?"Order not placed":e.kind==="processing"?"Payment processing":"Payment received"}),c("p",{className:"text-fg-dim",children:e.kind==="refunded"?h($,{children:["An item sold out or an offer ended while you paid for checkout ",t,". Your payment is refunded to your card."]}):e.kind==="expired"?h($,{children:["The hold on checkout ",t," ran out before your payment arrived. Your payment is refunded to your card."]}):e.kind==="processing"?h($,{children:["Your payment for checkout ",t," is being processed. When it goes through, we will email your order confirmation."]}):h($,{children:["Thank you \u2014 your payment for checkout ",t," has gone through. We will email you the order number shortly."]})}),c(de,{href:"/wheels",className:"mt-2 border-2 border-line px-6 py-3 font-mono text-[12px] uppercase tracking-[0.24em] hover:border-accent",children:"Continue browsing"})]})}function Uo(){let{site:e,logo:t,items:n,placing:r,email:a,me:s,addressSaveNote:l,idemKey:m,confirmation:p,setConfirmation:d,payment:y,paypalStep:x,squareStep:b,pendingConf:f,paid:E,setPaid:S,payNote:O,afterpayConfirming:X,gocardlessConfirming:R,zipConfirming:w,klarnaConfirming:U,cardConfirming:H,checkoutResult:M,confirmCardPayment:oe,cardStillProcessing:fe,renewCardPayment:Ee,holdRenewed:ie,leaveCardPayment:B,checkoutRootRef:te,setCheckoutHeaderEl:se}=Ne();return p?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:E?"Payment received":"Order received"}),h("p",{className:"text-fg-dim",children:[E?h($,{children:["Thank you \u2014 your payment for order"," ",c("span",{className:"font-mono text-fg",children:p.orderNumber})," has gone through."," "]}):h($,{children:["Thank you \u2014 your order ",c("span",{className:"font-mono text-fg",children:p.orderNumber})," is being reviewed by our team."," "]}),s?h($,{children:["Track it under"," ",c(de,{href:"/account/orders",className:"text-accent underline",children:"your orders"}),"."]}):c($,{children:"We\u2019ve emailed you a link to set a password and track it."})]}),c(Mo,{order:p,paid:E}),O&&c("p",{className:"text-sm text-fg-dim",children:O}),l&&c("p",{className:"text-sm text-fg-dim",children:l}),!s&&h("p",{className:"text-sm text-fg-dim",children:["You can also"," ",c(de,{href:`/track?order=${encodeURIComponent(p.orderNumber)}`,className:"text-accent underline",children:"track this order"})," ","anytime with just your order number and email \u2014 no password needed."]}),c(de,{href:"/wheels",className:"mt-2 border-2 border-line px-6 py-3 font-mono text-[12px] uppercase tracking-[0.24em] hover:border-accent",children:"Continue browsing"})]}):M?c(Ko,{result:M}):H?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Placing your order \u2014 one moment."})]}):X?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Afterpay \u2014 one moment."})]}):R?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Setting up your direct debit\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Confirming with GoCardless \u2014 one moment."})]}):w?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Zip \u2014 one moment."})]}):U?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Klarna \u2014 one moment."})]}):y&&f?c(Wo,{payment:y,checkout:f,holdRenewed:ie,onPaid:oe,onProcessing:fe,onRenew:Ee,onBack:B}):x&&f?c(zo,{confirmation:f,clientId:e.paypalClientId??"",idemKey:m,onPaid:()=>{S(!0),d(f)},onSkip:()=>d(f)}):b&&f?c(Go,{confirmation:f,applicationId:e.squareApplicationId??"",locationId:e.squareLocationId??"",environment:e.squareEnvironment??"production",idemKey:m,onPaid:()=>{S(!0),d(f)},onSkip:()=>d(f)}):h("div",{ref:te,className:"bg-bg text-fg",children:[h("header",{ref:se,className:"sticky top-0 z-30 grid grid-cols-[1fr_auto_1fr] items-center gap-8 border-b border-line px-[var(--sf-site-gutter,40px)] py-6 backdrop-blur-md max-[640px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[640px]:py-4",style:{background:"color-mix(in oklab, var(--bg) 92%, transparent)"},children:[h(de,{href:"/",className:"inline-flex items-center gap-3 font-mono text-[13px] uppercase tracking-[0.26em] text-fg-dim transition-colors hover:text-accent",children:["\u2190",c("span",{className:"max-[640px]:hidden",children:"Back to shop"})]}),c(de,{href:"/","aria-label":`${e.name} home`,className:"inline-flex items-center justify-center",children:c(Hn,{variant:"header",scrolled:!0,src:t?.url??null,reverse:t?.reverse??!1,reversedSrc:t?.reversed??null,inkIsDark:t?.inkIsDark??null,size:t?.size??"medium",sizePx:t?.sizePx??null,siteName:e.name})}),e.cardPayments?h("span",{className:"flex items-center justify-end gap-3 font-mono text-[12px] uppercase tracking-[0.26em] text-fg-dim",children:[c("span",{className:"text-green",children:"\u25CF"}),c("span",{className:"max-[640px]:hidden",children:"Encrypted \xB7"})," Stripe"]}):c("span",{})]}),h("section",{className:"mx-auto flex max-w-[var(--sf-site-width,1600px)] flex-wrap items-center justify-between gap-x-8 gap-y-3 border-b border-line bg-surface px-[var(--sf-site-gutter,40px)] py-4 font-mono text-[13px] font-medium uppercase tracking-[0.24em] text-fg max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))]",children:[c("span",{className:"inline-flex items-center bg-accent px-3 py-1 font-bold text-bg",children:"Checkout"}),c("nav",{"aria-label":"Checkout steps",className:"flex flex-wrap items-center gap-5",children:[{n:"01",label:"Cart",state:"done"},{n:"02",label:"Ship & pay",state:"active"},{n:"03",label:"Confirmed",state:"pending"}].map(_=>h("span",{className:["relative flex items-center gap-2 transition-colors",_.state==="pending"?"text-fg-dim":"text-fg",_.state==="active"?"font-bold after:absolute after:inset-x-0 after:-bottom-1 after:h-[2px] after:bg-accent":""].join(" "),children:[c("span",{className:_.state==="done"?"text-accent font-bold":"",children:_.n}),c("span",{children:_.label})]},_.n))})]}),h("main",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] grid-cols-[1fr_420px] items-start gap-16 px-[var(--sf-site-gutter,40px)] pt-10 pb-[100px] max-[1100px]:grid-cols-1 max-[1100px]:gap-10 max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:pt-8 max-[1100px]:pb-20",children:[h("div",{children:[c(ta,{}),c(na,{}),c(ra,{}),c(aa,{})]}),c(oa,{})]}),c("footer",{className:"flex flex-wrap items-center justify-between gap-4 border-t border-line px-[var(--sf-site-gutter,40px)] py-6 font-mono text-[12px] uppercase tracking-[0.22em] text-fg-dim max-[640px]:px-[min(20px,var(--sf-site-gutter,40px))]",children:c("span",{children:zn({legalName:e.legalName,foundedYear:e.foundedYear,siteName:e.name})})})]})}function Wo({payment:e,checkout:t,holdRenewed:n,onPaid:r,onProcessing:a,onRenew:s,onBack:l}){let{formatMoney:m}=me(),p=c("span",{className:"text-fg",children:m(Number(e.amount),e.currency)}),d=sa(()=>bt(e.publishableKey),[e.publishableKey]),y=sa(()=>Zn(),[]);return c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:xt(t)}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Payment"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:t.orderNumber?h($,{children:["Your order is placed. Pay ",p," by card to confirm it now."]}):n?h($,{children:["Your hold ran out, so your items are held again",t.expiresAt?` until ${ca(t.expiresAt)}`:"",". Enter your card again, then pay ",p,"."]}):h($,{children:["Your items are held",t.expiresAt?` until ${ca(t.expiresAt)}`:"",". Pay ",p," by card to place your order."]})}),c(Yt,{stripe:d,options:{clientSecret:e.clientSecret,appearance:y},children:c(Yo,{payment:e,checkout:t,onPaid:r,onProcessing:a,onRenew:s,onBack:l})},e.clientSecret)]})]})})}function ca(e){return new Date(e).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var $o=5;function Yo({payment:e,checkout:t,onPaid:n,onProcessing:r,onRenew:a,onBack:s}){let{formatMoney:l}=me(),m=xr(),p=br(),[d,y]=_e(!1),[x,b]=_e(null),f=Ye(!1);async function E(){try{return(await m.retrievePaymentIntent(e.clientSecret)).paymentIntent?.status}catch{return}}async function S(R){let w=R;for(let U=0;w==="processing"&&U<$o;U+=1)await new Promise(H=>setTimeout(H,1e3)),w=await E()??w;if(w==="succeeded"){n();return}if(w==="processing"){r();return}b("Payment did not complete. Please try again."),y(!1)}async function O(){if(!m||!p||d)return;y(!0),b(null),f.current=!0;let R=await m.confirmPayment({elements:p,redirect:"if_required"}).catch(()=>null);if(!R){let w=await E();if(w==="succeeded"||w==="processing"){await S(w);return}b(w===void 0?Pe:"Payment failed. Please try again."),y(!1);return}if(R.error){if(!t.orderNumber&&R.error.code==="payment_intent_unexpected_state"){let w=await E();if(w==="succeeded"||w==="processing"){await S(w);return}if(w===void 0){b(Pe),y(!1);return}await a(w==="canceled"),y(!1);return}b(R.error.message??"Payment failed. Please try again."),y(!1);return}await S(R.paymentIntent?.status)}async function X(){if(d)return;if(!f.current){s();return}y(!0),b(null);let R=await E();if(R==="succeeded"||R==="processing"){await S(R);return}if(y(!1),R===void 0){b(Pe);return}s()}return h("div",{className:"flex flex-col gap-4",children:[c(Cr,{}),x&&c(Te,{role:"alert",children:x}),c("button",{type:"button",onClick:O,disabled:!m||!p||d,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!m||!p||d?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:d?h($,{children:["Processing\u2026 ",c("span",{children:"\xB7"})]}):h($,{children:["Pay ",l(Number(e.amount),e.currency),c("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),!t.orderNumber&&!d&&h("button",{type:"button",onClick:X,className:"inline-flex items-center gap-3 self-start font-mono text-[12px] uppercase tracking-[0.26em] text-fg-dim transition-colors hover:text-accent",children:["\u2190",c("span",{children:"Back to checkout"})]})]})}var la="paypal-sdk-js",Xt=null;function Bo(e,t){let n=`${e}|${t}`;if(Xt?.key===n)return Xt.promise;let r=new Promise((a,s)=>{document.getElementById(la)?.remove();let l=document.createElement("script");l.id=la;let m=new URLSearchParams({"client-id":e,currency:t,intent:"capture"});l.src=`https://www.paypal.com/sdk/js?${m}`,l.onload=()=>{let p=window.paypal;p?a(p):s(new Error("PayPal SDK loaded without its namespace"))},l.onerror=()=>s(new Error("PayPal SDK failed to load")),document.head.appendChild(l)});return Xt={key:n,promise:r},r}function zo({confirmation:e,clientId:t,idemKey:n,onPaid:r,onSkip:a}){let{formatMoney:s}=me(),l=Ye(null),[m,p]=_e(!1),[d,y]=_e(null),x=Ye(r);return x.current=r,da(()=>{let b=!1,f=null;return Bo(t,e.currency).then(E=>{if(!(b||!l.current))return f=E.Buttons({style:{layout:"vertical",color:"gold",shape:"rect",label:"paypal"},createOrder:async()=>(await K.createPaypalOrder({idempotencyKey:n})).paypalOrderId,onApprove:async S=>{try{if((await K.capturePaypalOrder({idempotencyKey:n,paypalOrderId:S.orderID})).status==="paid"){x.current();return}y("PayPal did not complete the payment. Please try again.")}catch(O){y(O instanceof pe?O.message:"PayPal payment failed. Please try again.")}},onError:()=>{y("PayPal could not process the payment. Please try again.")}}),f.render(l.current).then(()=>{b||p(!0)})}).catch(()=>{b||y("PayPal could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{b=!0,f?.close?.()}},[t,e.currency,n]),c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e.orderNumber}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"PayPal"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[h("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:["Your order is placed. Pay"," ",c("span",{className:"text-fg",children:s(Number(e.grandTotal),e.currency)})," ","with PayPal to confirm it now."]}),!m&&!d&&c("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading PayPal\u2026"}),c("div",{ref:l}),d&&c(Te,{role:"alert",children:d}),c("button",{type:"button",onClick:a,className:"self-center font-mono text-[11px] uppercase tracking-[0.24em] text-fg-dim underline-offset-4 transition-colors hover:text-accent hover:underline",children:"Pay later \u2014 our team will be in touch"})]})]})})}var ua="square-web-sdk",Zt=null;function Ho(e){let t=e==="sandbox"?"sandbox":"production";if(Zt?.key===t)return Zt.promise;let n=new Promise((r,a)=>{document.getElementById(ua)?.remove();let s=document.createElement("script");s.id=ua,s.src=t==="sandbox"?"https://sandbox.web.squarecdn.com/v1/square.js":"https://web.squarecdn.com/v1/square.js",s.onload=()=>{let l=window.Square;l?r(l):a(new Error("Square SDK loaded without its namespace"))},s.onerror=()=>a(new Error("Square SDK failed to load")),document.head.appendChild(s)});return Zt={key:t,promise:n},n}function Go({confirmation:e,applicationId:t,locationId:n,environment:r,idemKey:a,onPaid:s,onSkip:l}){let{formatMoney:m}=me(),p=Ye(null),d=Ye(null),y=Ye(null),[x,b]=_e(!1),[f,E]=_e(!1),[S,O]=_e(null);da(()=>{let R=!1,w=null;return Ho(r).then(async U=>{if(R||!p.current)return;let H=U.payments(t,n);y.current=H,w=await H.card(),await w.attach(p.current),d.current=w,R||b(!0)}).catch(()=>{R||O("Square could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{R=!0,w?.destroy?.()}},[t,n,r]);async function X(){let R=d.current;if(!(!R||f)){E(!0),O(null);try{let w=await R.tokenize();if(w.status!=="OK"||!w.token){O(w.errors?.[0]?.message??"Please check the card details and try again."),E(!1);return}let U;try{U=(await y.current?.verifyBuyer?.(w.token,{amount:String(e.grandTotal),currencyCode:e.currency,intent:"CHARGE"}))?.token}catch{}if((await K.chargeSquare({idempotencyKey:a,sourceId:w.token,...U?{verificationToken:U}:{}})).status==="paid"){s();return}O("Square did not complete the payment. Please try again.")}catch(w){O(w instanceof pe?w.message:"Square payment failed. Please try again.")}E(!1)}}return c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e.orderNumber}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Card"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[h("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:["Your order is placed. Pay"," ",c("span",{className:"text-fg",children:m(Number(e.grandTotal),e.currency)})," ","by card to confirm it now."]}),!x&&!S&&c("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading card form\u2026"}),c("div",{ref:p}),S&&c(Te,{role:"alert",children:S}),c("button",{type:"button",onClick:X,disabled:!x||f,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!x||f?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:f?h($,{children:["Processing\u2026 ",c("span",{children:"\xB7"})]}):h($,{children:["Pay ",m(Number(e.grandTotal),e.currency),c("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),c("button",{type:"button",onClick:l,disabled:f,className:"self-center font-mono text-[11px] uppercase tracking-[0.24em] text-fg-dim underline-offset-4 transition-colors hover:text-accent hover:underline",children:"Pay later \u2014 our team will be in touch"})]})]})})}import{jsx as St}from"react/jsx-runtime";function Vo(){let{settings:e,websiteName:t}=_n(),n=t?{...Mt,name:t}:Mt,r=e?{url:e.logoUrl,reversed:e.logoReversed??null,inkIsDark:e.logoInkIsDark??null,reverse:e.reverseLogo,size:e.logoSize,sizePx:e.logoSizePx}:null;return St("div",{style:{position:"fixed",inset:0,zIndex:2147482e3,overflowY:"auto",background:"var(--bg)",color:"var(--fg)"},children:St($n,{children:St(Bn,{preview:!0,children:St(Qt,{site:n,logo:r,preview:!0})})})})}export{Vo as default};
1
+ "use client";import{$ as Gn,L as Mn,M as Kn,N as Un,O as Wn,P as $n,Q as me,S as Xe,T as Yn,U as Bn,V as mt,W as zn,Y as Mt,_ as Hn,aa as Vn,b as qn,c as Dt,d as jn,e as Dn,fa as Jn,ga as Te,la as Xn,ma as Ze,pa as Kt,ra as ee,sa as Q,x as pt}from"./chunk-NSBGNY7R.js";import{i as pe,o as We,v as K}from"./chunk-47L7KHRW.js";import{Da as _n,xa as Ln,za as de}from"./chunk-T2R5CZ2F.js";import{k as Fn,l as Je,m as ae}from"./chunk-VVWX2P2N.js";import{a as jt,b as Ka}from"./chunk-Y6SLVHK3.js";var er=jt((Qo,Qn)=>{"use strict";var Wa="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";Qn.exports=Wa});var ar=jt((ei,rr)=>{"use strict";var $a=er();function tr(){}function nr(){}nr.resetWarningCache=tr;rr.exports=function(){function e(r,a,s,l,m,p){if(p!==$a){var d=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw d.name="Invariant Violation",d}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:nr,resetWarningCache:tr};return n.PropTypes=n,n}});var ir=jt((ri,or)=>{"use strict";or.exports=ar()();var ti,ni});import{useEffect as da,useMemo as sa,useRef as Ye,useState as _e}from"react";import{rootIsDark as Ua}from"efficient-shell/format";function Zn(){if(typeof document>"u")return;let e=getComputedStyle(document.documentElement),t=(r,a)=>e.getPropertyValue(r).trim()||a,n=Ua({whenUnset:!0});return{theme:n?"night":"stripe",variables:{colorPrimary:t("--accent",n?"#c9a461":"#8a6a2a"),colorBackground:t("--site-surface",n?"#131313":"#ffffff"),colorText:t("--fg",n?"#f5f1e8":"#0a0a0a"),borderRadius:"0px"}}}var F=Ka(ir(),1);import A from"react";function sr(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Ya(e){if(Array.isArray(e))return e}function pr(e,t,n){return(t=Ja(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ba(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,s,l,m=[],p=!0,d=!1;try{if(s=(n=n.call(e)).next,t!==0)for(;!(p=(r=s.call(n)).done)&&(m.push(r.value),m.length!==t);p=!0);}catch(y){d=!0,a=y}finally{try{if(!p&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(d)throw a}}return m}}function za(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function lr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?cr(Object(n),!0).forEach(function(r){pr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cr(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Ha(e,t){if(e==null)return{};var n,r,a=Ga(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Ga(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function mr(e,t){return Ya(e)||Ba(e,t)||Xa(e,t)||za()}function Va(e,t){if(typeof e!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ja(e){var t=Va(e,"string");return typeof t=="symbol"?t:t+""}function Ut(e){"@babel/helpers - typeof";return Ut=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ut(e)}function Xa(e,t){if(e){if(typeof e=="string")return sr(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?sr(e,t):void 0}}var Y=function(t,n,r){var a=!!r,s=A.useRef(r);A.useEffect(function(){s.current=r},[r]),A.useEffect(function(){if(!a||!t)return function(){};var l=function(){if(s.current)return s.current.apply(s,arguments)};return t.on(n,l),function(){t.off(n,l)}},[a,n,t,s])},Wt=function(t){var n=A.useRef(t);return A.useEffect(function(){n.current=t},[t]),n.current},$e=function(t){return t!==null&&Ut(t)==="object"},Za=function(t){return $e(t)&&typeof t.then=="function"},Qa=function(t){return $e(t)&&typeof t.elements=="function"&&typeof t.createToken=="function"&&typeof t.createPaymentMethod=="function"&&typeof t.confirmCardPayment=="function"},ur="[object Object]",eo=function e(t,n){if(t===n)return!0;if(!$e(t)||!$e(n))return t===n;var r=Array.isArray(t),a=Array.isArray(n);if(r!==a)return!1;var s=Object.prototype.toString.call(t)===ur,l=Object.prototype.toString.call(n)===ur;if(s!==l)return!1;if(!s&&!r)return t===n;var m=Object.keys(t),p=Object.keys(n);if(m.length!==p.length)return!1;for(var d={},y=0;y<m.length;y+=1)d[m[y]]=!0;for(var x=0;x<p.length;x+=1)d[p[x]]=!0;var b=Object.keys(d);if(b.length!==m.length)return!1;var f=t,E=n,S=function(X){return e(f[X],E[X])};return b.every(S)},fr=function(t,n,r){return $e(t)?Object.keys(t).reduce(function(a,s){var l=!$e(n)||!eo(t[s],n[s]);return r.includes(s)?(l&&console.warn("Unsupported prop change: options.".concat(s," is not a mutable property.")),a):l?lr(lr({},a||{}),{},pr({},s,t[s])):a},null):null},gr="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",dr=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gr;if(t===null||Qa(t))return t;throw new Error(n)},to=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gr;if(Za(t))return{tag:"async",stripePromise:Promise.resolve(t).then(function(a){return dr(a,n)})};var r=dr(t,n);return r===null?{tag:"empty"}:{tag:"sync",stripe:r}},no=function(t){!t||!t._registerWrapper||!t.registerAppInfo||(t._registerWrapper({name:"react-stripe-js",version:"6.12.0"}),t.registerAppInfo({name:"react-stripe-js",version:"6.12.0",url:"https://stripe.com/docs/stripe-js/react"}))},ft=A.createContext(null);ft.displayName="ElementsContext";var yr=function(t,n){if(!t)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(n," in an <Elements> provider."));return t},Yt=function(t){var n=t.stripe,r=t.options,a=t.children,s=A.useMemo(function(){return to(n)},[n]),l=A.useState(function(){return{stripe:s.tag==="sync"?s.stripe:null,elements:s.tag==="sync"?s.stripe.elements(r):null}}),m=mr(l,2),p=m[0],d=m[1];A.useEffect(function(){var b=!0,f=function(S){d(function(O){return O.stripe?O:{stripe:S,elements:S.elements(r)}})};return s.tag==="async"&&!p.stripe?s.stripePromise.then(function(E){E&&b&&f(E)}):s.tag==="sync"&&!p.stripe&&f(s.stripe),function(){b=!1}},[s,p,r]);var y=Wt(n);A.useEffect(function(){y!==null&&y!==n&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")},[y,n]);var x=Wt(r);return A.useEffect(function(){if(p.elements){var b=fr(r,x,["clientSecret","fonts"]);b&&p.elements.update(b)}},[r,x,p.elements]),A.useEffect(function(){no(p.stripe)},[p.stripe]),A.createElement(ft.Provider,{value:p},a)};Yt.propTypes={stripe:F.default.any,options:F.default.object};var hr=function(t){var n=A.useContext(ft);return yr(n,t)},br=function(){var t=hr("calls useElements()"),n=t.elements;return n},ro=function(t){var n=t.children,r=hr("mounts <ElementsConsumer>");return n(r)};ro.propTypes={children:F.default.func.isRequired};var ao=A.createContext(null);ao.displayName="CheckoutContext";var vr=A.createContext(null);vr.displayName="CheckoutSdkContext";var $t=function(t){var n=A.useContext(vr),r=A.useContext(ft);if(n){if(r)throw new Error("You cannot wrap the part of your app that ".concat(t," in both a checkout provider and <Elements> provider."));return n}else return yr(r,t)},oo=["mode"],io=function(t){return t.charAt(0).toUpperCase()+t.slice(1)},q=function(t,n,r){var a="".concat(io(t),"Element"),s=function(d){var y=d.id,x=d.className,b=d.options,f=b===void 0?{}:b,E=d.onBlur,S=d.onFocus,O=d.onReady,X=d.onChange,R=d.onEscape,w=d.onClick,U=d.onLoadError,H=d.onLoaderStart,M=d.onNetworksChange,oe=d.onConfirm,fe=d.onCancel,Ee=d.onShippingAddressChange,ie=d.onShippingRateChange,B=d.onSavedPaymentMethodRemove,te=d.onSavedPaymentMethodUpdate,se=d.onAvailablePaymentMethodsChange,_=$t("mounts <".concat(a,">")),k="elements"in _?_.elements:null,G="checkoutSdk"in _?_.checkoutSdk:null,Be=A.useState(null),Re=mr(Be,2),D=Re[0],ze=Re[1],V=A.useRef(null),ce=A.useRef(null);Y(D,"blur",E),Y(D,"focus",S),Y(D,"escape",R),Y(D,"click",w),Y(D,"loaderror",U),Y(D,"loaderstart",H),Y(D,"networkschange",M),Y(D,"confirm",oe),Y(D,"cancel",fe),Y(D,"shippingaddresschange",Ee),Y(D,"shippingratechange",ie),Y(D,"savedpaymentmethodremove",B),Y(D,"savedpaymentmethodupdate",te),Y(D,"availablepaymentmethodschange",se),Y(D,"change",X);var be;O&&(t==="expressCheckout"?be=O:be=function(){O(D)}),Y(D,"ready",be),A.useLayoutEffect(function(){if(V.current===null&&ce.current!==null&&(k||G)){var T=null;if(G){var Z=G,Fe=G;switch(t){case"paymentForm":T=Fe.createForm(f);break;case"payment":T=Z.createPaymentElement(f);break;case"address":if("mode"in f){var L=f.mode,Oe=Ha(f,oo);if(L==="shipping")T=Z.createShippingAddressElement(Oe);else if(L==="billing")T=Z.createBillingAddressElement(Oe);else throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.")}else throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");break;case"expressCheckout":T=Z.createExpressCheckoutElement(f);break;case"currencySelector":T=G.createCurrencySelectorElement();break;case"taxId":T=Z.createTaxIdElement(f);break;case"contactDetails":T=Z.createContactDetailsElement();break;case"linkSignup":if("createLinkSignupElement"in G)T=G.createLinkSignupElement(f);else throw new Error("<LinkSignupElement> requires <CheckoutElementsProvider> and is not supported inside <CheckoutFormProvider>.");break;case"terms":T=Z.createTermsElement(f);break;default:throw new Error("<".concat(a,"> is not supported inside a checkout provider. Use an <Elements> provider instead."))}}else k&&(T=k.create(t,f));V.current=T,ze(T),T&&T.mount(ce.current)}},[k,G,f]);var le=Wt(f);return A.useEffect(function(){if(V.current){var T=fr(f,le,["paymentRequest"]);T&&"update"in V.current&&V.current.update(T)}},[f,le]),A.useLayoutEffect(function(){return function(){if(V.current&&typeof V.current.destroy=="function")try{V.current.destroy(),V.current=null}catch{}}},[]),A.createElement("div",{id:y,className:x,ref:ce})},l=function(d){$t("mounts <".concat(a,">"));var y=d.id,x=d.className;return A.createElement("div",{id:y,className:x})},m=n?l:s;return m.propTypes={id:F.default.string,className:F.default.string,onChange:F.default.func,onBlur:F.default.func,onFocus:F.default.func,onReady:F.default.func,onEscape:F.default.func,onClick:F.default.func,onLoadError:F.default.func,onLoaderStart:F.default.func,onNetworksChange:F.default.func,onConfirm:F.default.func,onCancel:F.default.func,onShippingAddressChange:F.default.func,onShippingRateChange:F.default.func,onSavedPaymentMethodRemove:F.default.func,onSavedPaymentMethodUpdate:F.default.func,onAvailablePaymentMethodsChange:F.default.func,options:F.default.object},m.displayName=a,m.__elementType=t,m},j=typeof window>"u",so=A.createContext(null);so.displayName="EmbeddedCheckoutProviderContext";var xr=function(){var t=$t("calls useStripe()"),n=t.stripe;return n},oi=q("auBankAccount",j),ii=q("card",j),si=q("cardNumber",j),ci=q("cardExpiry",j),li=q("cardCvc",j),ui=q("currencySelector",j),di=q("iban",j),kr=q("payment",j),pi=q("expressCheckout",j),mi=q("paymentRequestButton",j),fi=q("linkAuthentication",j),gi=q("linkSignup",j),yi=q("contactDetails",j),hi=q("address",j),bi=q("shippingAddress",j),vi=q("paymentMethodMessaging",j),xi=q("taxId",j),ki=q("issuingCardNumberDisplay",j),Ci=q("issuingCardCvcDisplay",j),wi=q("issuingCardExpiryDisplay",j),Pi=q("issuingCardPinDisplay",j),Ni=q("issuingCardCopyButton",j),Si=q("terms",j);function ht(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ht=function(t){return typeof t}:ht=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ht(e)}var Pr="dahlia",co=function(t){return t===3?"v3":t},Nr="https://js.stripe.com",lo="".concat(Nr,"/").concat(Pr,"/stripe.js"),uo=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,po=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,Cr="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",mo=function(t){return uo.test(t)||po.test(t)},fo=function(){for(var t=document.querySelectorAll('script[src^="'.concat(Nr,'"]')),n=0;n<t.length;n++){var r=t[n];if(mo(r.src))return r}return null},wr=function(t){var n=t&&!t.advancedFraudSignals?"?advancedFraudSignals=false":"",r=document.createElement("script");r.src="".concat(lo).concat(n);var a=document.head||document.body;if(!a)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return a.appendChild(r),r},go=function(t,n){!t||!t._registerWrapper||t._registerWrapper({name:"stripe-js",version:"9.17.0",startTime:n})},Qe=null,gt=null,yt=null,yo=function(t){return function(n){t(new Error("Failed to load Stripe.js",{cause:n}))}},ho=function(t,n){return function(){window.Stripe?t(window.Stripe):n(new Error("Stripe.js not available"))}},bo=function(t){return Qe!==null?Qe:(Qe=new Promise(function(n,r){if(typeof window>"u"||typeof document>"u"){n(null);return}if(window.Stripe&&t&&console.warn(Cr),window.Stripe){n(window.Stripe);return}try{var a=fo();if(a&&t)console.warn(Cr);else if(!a)a=wr(t);else if(a&&yt!==null&&gt!==null){var s;a.removeEventListener("load",yt),a.removeEventListener("error",gt),(s=a.parentNode)===null||s===void 0||s.removeChild(a),a=wr(t)}yt=ho(n,r),gt=yo(r),a.addEventListener("load",yt),a.addEventListener("error",gt)}catch(l){r(l);return}}),Qe.catch(function(n){return Qe=null,Promise.reject(n)}))},vo=function(t,n,r){if(t===null)return null;var a=n[0];if(typeof a!="string")throw new Error("Expected publishable key to be of type string, got type ".concat(ht(a)," instead."));var s=a.match(/^pk_test/),l=co(t.version),m=Pr;s&&l!==m&&console.warn("Stripe.js@".concat(l," was loaded on the page, but @stripe/stripe-js@").concat("9.17.0"," expected Stripe.js@").concat(m,". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var p=t.apply(void 0,n);return go(p,r),p},et,Sr=!1,Er=function(){return et||(et=bo(null).catch(function(t){return et=null,Promise.reject(t)}),et)};Promise.resolve().then(function(){return Er()}).catch(function(e){Sr||console.warn(e)});var bt=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];Sr=!0;var a=Date.now();return Er().then(function(s){return vo(s,n,a)})};var Bt=2;function Rr(e){return e==="card"}var xo="checkout_unavailable",ko="checkout_waiting",Pe="We could not check your payment. Please try again.",Or="Your bank is still waiting for you to approve this payment, so your order stays as it was. Finish the approval, or try again in a few minutes.",Ir=1e4;async function Ar(e,t=Ir){let n,r=new Promise(s=>{n=setTimeout(()=>s(void 0),t)}),a=(async()=>{try{return(await(await bt(e.publishableKey))?.retrievePaymentIntent(e.clientSecret))?.paymentIntent?.status}catch{return}})();try{return await Promise.race([a,r])}finally{clearTimeout(n)}}var Tr=new Set(["none","requires_payment_method","canceled"]);async function zt(e,t=Ir){let n,r=new Promise(a=>{n=setTimeout(()=>a(void 0),t)});try{return await Promise.race([K.releaseCheckout({idempotencyKey:e}).then(a=>a.status,()=>{}),r])}finally{clearTimeout(n)}}function Lr(e,t){return e instanceof pe&&typeof e.data=="object"&&e.data!==null&&e.data.code===t}function vt(e){return Lr(e,xo)}function _r(e){return Lr(e,ko)}function xt(e){return e.orderNumber||e.checkoutNumber}function Co(e){return e.orderNumber?{kind:"placed",order:e}:{kind:e.status==="released"?"refunded":e.status==="expired"?"expired":"pending",checkoutNumber:e.checkoutNumber}}async function Fr({checkoutNumber:e,resend:t,page:n}){n.setConfirming(!0);let r;try{r=Co(await t())}catch{r={kind:"pending",checkoutNumber:e}}r.kind==="placed"?(n.markPaid(),n.track(r.order),n.land(r.order)):n.unplaced({...r,checkoutNumber:r.checkoutNumber||e}),n.setConfirming(!1)}import{createContext as To,useContext as Lo,useEffect as z,useMemo as Hr,useRef as J,useState as P}from"react";var wo="sf:gclid",Po="sf:fbclid",No=2160*60*60*1e3;function Dr(){return typeof window<"u"}function qr(e){let t=Je.getItem(e);if(!t)return"";try{let{v:n,t:r}=JSON.parse(t);return!n||typeof r!="number"||Date.now()-r>No?"":n}catch{return""}}function jr(e){if(!Dr())return"";let t=e.replace(/([.$?*|{}()[\]\\/+^])/g,"\\$1"),n=document.cookie.match(new RegExp(`(?:^|; )${t}=([^;]*)`));return n?decodeURIComponent(n[1]):""}function Mr(){if(!Dr())return{};let e=qr(wo),t=qr(Po),n=jr("_fbp"),r=jr("_fbc");!r&&t&&(r=`fb.1.${Date.now()}.${t}`);let a={};return e&&(a.gclid=e),t&&(a.fbclid=t),n&&(a.fbp=n),r&&(a.fbc=r),a}var Kr="sf:meta-purchases",So=20;function Wr(){return typeof window>"u"||window.parent!==window}function Eo(...e){try{if(Wr()||typeof window.fbq!="function")return;window.fbq(...e)}catch{}}var Ur=new Set;function Ro(e){if(Ur.has(e))return!1;Ur.add(e);try{let t=JSON.parse(Je.getItem(Kr)??"[]");if(t.includes(e))return!1;Je.setItem(Kr,JSON.stringify([...t,e].slice(-So)))}catch{}return!0}function Oo(e){return[...new Set(e.filter(Xe).flatMap(t=>t.components.map(n=>n.partNumber)))]}function $r(e){let t=e.confirmation;Wr()||!Ro(t.orderNumber)||Eo("track","Purchase",{value:Number(t.grandTotal),currency:t.currency,content_type:"product",content_ids:Oo(e.lines)},{eventID:t.orderNumber})}var Ht="checkout-afterpay-context",kt="checkout-gocardless-context",Gt="checkout-zip-context",Ct="checkout-klarna-context";function Io({evidence:e,parked:t}){return e?{action:"capture",evidence:e,parked:t}:t?{action:"settle",parked:t}:{action:"ignore"}}function Ao(e,t){let n=e.getItem(t);if(e.removeItem(t),!n)return null;try{return JSON.parse(n)}catch{return null}}var Yr={name:"Afterpay",legParam:"afterpay",legValues:["confirm","cancel"],storageKey:Ht,evidenceFrom(e,t){return t==="cancel"||(e.get("status")??"").toUpperCase()==="CANCELLED"?null:e.get("orderToken")},requestFrom:e=>({token:e})},Br={name:"Zip",legParam:"zip",legValues:["return"],storageKey:Gt,evidenceFrom(e){let t=(e.get("result")??"").toLowerCase();return t==="cancelled"||t==="declined"?null:e.get("checkoutId")},requestFrom:e=>({checkoutId:e})};async function Vt(e,t){let n=new URLSearchParams(t.search),r=n.get(e.legParam);if(!r||!e.legValues.includes(r))return;let a=Ao(t.storage,e.storageKey),s=e.evidenceFrom(n,r);t.scrubQuery();let l=Io({evidence:s,parked:a});if(l.action!=="ignore"){if(t.page.clearCart(),l.action==="settle"){t.page.note(`The ${e.name} payment was not completed \u2014 our team will follow up on payment.`),t.page.land(l.parked.confirmation);return}t.page.setConfirming(!0);try{let m=await t.capture(e.requestFrom(l.evidence));m.status==="paid"?t.page.markPaid():t.page.note(`${e.name} declined the payment \u2014 our team will follow up on payment.`),t.page.land(l.parked?.confirmation??m)}catch{l.parked?(t.page.note(`We could not confirm the ${e.name} payment \u2014 our team will follow up on payment.`),t.page.land(l.parked.confirmation)):t.page.fail(`We could not confirm your ${e.name} payment. Please contact us before trying again \u2014 your payment may already have been taken.`)}finally{t.page.setConfirming(!1)}}}function zr(e,t,n){let r=(t??"").trim();if(!r)return"";if(n.length===0)return r;let a=r.toUpperCase(),s=`${e.toUpperCase()}-${a}`,l=n.find(m=>m.code&&m.code.toUpperCase()===a)??n.find(m=>m.code&&m.code.toUpperCase()===s)??n.find(m=>m.name.toUpperCase()===a);return l?l.code||l.name:""}import{jsx as he}from"react/jsx-runtime";function Gr(e){let t=e.indexOf(`
3
+ `);return t===-1?[e,""]:[e.slice(0,t),e.slice(t+1)]}function Vr(e,{canParkContext:t}={canParkContext:!0}){let n=e.paymentMethods,r=[];return n.includes("card")&&r.push({key:"card",title:"Card",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("paypal")&&e.paypalClientId&&r.push({key:"paypal",title:"PayPal",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAYPAL \xB7 CARDS"})}),n.includes("afterpay")&&r.push({key:"afterpay",title:"Afterpay",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"4 \xD7 INTEREST-FREE"})}),n.includes("square")&&e.squareApplicationId&&e.squareLocationId&&r.push({key:"square",title:"Card (Square)",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("gocardless")&&t&&r.push({key:"gocardless",title:"Bank Direct Debit",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY BY BANK"})}),n.includes("zip")&&r.push({key:"zip",title:"Zip",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY IN 4"})}),n.includes("klarna")&&t&&r.push({key:"klarna",title:"Klarna",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY LATER"})}),n.includes("bank")&&r.push({key:"bank",title:"Bank transfer",body:null,price:he("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Invoiced"})}),r}var Jr="This shop does not take payment online yet. Please contact the shop to order.",wt=class extends Error{};function _o(e,t){if(!e.orderNumber&&vt(t))return t.message;let n=t instanceof pe?` (${t.message})`:"";return e.orderNumber?`Your order ${e.orderNumber} is saved, but the payment did not start${n}. Try the payment again \u2014 your order will not be placed twice.`:`Your items are held under ${e.checkoutNumber}, but the payment did not start${n}. Try the payment again \u2014 you will not be charged twice.`}var Xr="Shipping cannot be calculated right now. Please try again.";function Fo({site:e,logo:t,preview:n=!1}){let{items:r,totals:a,coupon:s,refuseCoupon:l,deliveryOptions:m,shippingMethodId:p,setShippingMethodId:d,setQuoteDestination:y,courier:x,requote:b,identify:f,clearCapturedCart:E,replaceItems:S,removeCoupon:O}=mt(),X=m.find(i=>i.id===p)?.pickupLocation??null,{country:R,countries:w,activeCountry:U,formatMoney:H}=me(),[M,oe]=P(()=>Vr(e)[0]?.key??null),[fe,Ee]=P(!0);z(()=>{Ee(Fn(ae))},[]);let[ie,B]=P(!1),[te,se]=P(""),[_,k]=P(""),[G,Be]=P(""),[Re,D]=P(""),[ze,V]=P(""),[ce,be]=P(""),[le,T]=P(""),[Z,Fe]=P(""),[L,Oe]=P(()=>R||w[0]?.code||""),[ve,tt]=P(""),[He,en]=P([]),[Et,Rt]=P(null),[nt,Ge]=P(null),tn=Hr(()=>w.find(i=>i.code===L)??U,[w,L,U]),pa=tn?.postalLabel||"Postal Code",ma=He[0]?.divisionType||"State / Province";z(()=>{if(!L){en([]),Rt(L);return}Rt(null);let i=!1;return K.listCountrySubdivisions(L).then(u=>{i||(en(u),Rt(L),tt(""))}),()=>{i=!0}},[L]);let nn=Re.trim()!==""&&ce.trim()!==""&&le.trim()!==""&&Et===L&&(He.length===0||ve!=="")?le.trim():"";z(()=>{y(L?{country:L,subdivision:ve,postcode:nn}:null)},[L,ve,nn,y]),z(()=>()=>y(null),[y]);let fa=x?.status==="unavailable",ga=b,[rt,rn]=P(null),[ya,an]=P([]),[on,Ot]=P("new"),[sn,cn]=P(!1),[It,ha]=P("Home"),[ba,ln]=P(null),[qe,At]=P(()=>Ze()),un=J(null),[dn,ue]=P(null),[va,ne]=P(null),[pn,at]=P(null),[mn,xa]=P(!1),[fn,ka]=P(!1),[xe,je]=P(null),[Ca,De]=P(!1),[re,ke]=P(null),[wa,ge]=P(null),[Pa,Na]=P(!1),[Sa,gn]=P(!1),[Ea,Ra]=P(!1),[Oa,yn]=P(!1),[hn,Ia]=P(!1),[Aa,Tt]=P(!1),[Lt,bn]=P(null),Me=J(null),ot=J(r),_t=J(null),Ft=J(null),vn=!!(dn||Lt&&Lt.kind!=="processing"||hn||mn||fn||pn&&xe?.orderNumber);z(()=>{vn&&(S([]),O())},[vn,S,O]);let xn=J(!1);z(()=>{n||xn.current||!r.some(Xe)||(xn.current=!0,Mn({lines:r,currency:a.currency,value:a.subtotal-a.discount,coupon:s?.valid?s.code:void 0}))},[r,a,s,n]),z(()=>{f(te,_.trim()||void 0)},[te,_,f]);let kn=J(null),[it,Ta]=P(null);z(()=>{let i=kn.current;if(!it||!i)return;let u=()=>i.style.setProperty("--sf-checkout-header-h",`${it.offsetHeight}px`);u();let g=new ResizeObserver(u);return g.observe(it),()=>g.disconnect()},[it]),z(()=>{let i=g=>({setConfirming:g,land:ue,markPaid:()=>De(!0),note:ge,fail:ne,clearCart:E}),u={search:window.location.search,storage:ae,scrubQuery:()=>window.history.replaceState(null,"",window.location.pathname)};Vt(Yr,{...u,capture:K.captureAfterpayPayment,page:i(Na)}),Vt(Br,{...u,capture:K.captureZipPayment,page:i(Ra)})},[]),z(()=>{let u=new URLSearchParams(window.location.search).get("gocardless");if(u!=="confirm"&&u!=="cancel")return;let g=ae.getItem(kt);if(ae.removeItem(kt),window.history.replaceState(null,"",window.location.pathname),!g)return;let v;try{v=JSON.parse(g)}catch{return}if(E(),u==="cancel"){ge("The direct debit was not set up \u2014 our team will follow up on payment."),ue(v.confirmation);return}gn(!0),K.completeGocardlessPayment({idempotencyKey:v.idempotencyKey}).then(C=>{C.status==="paid"?De(!0):C.status==="declined"?ge("The direct debit was declined \u2014 our team will follow up on payment."):ge("Your direct debit is set up \u2014 the payment is collecting and will clear in a few days.")}).catch(()=>{ge("We could not confirm the direct debit \u2014 our team will follow up on payment.")}).finally(()=>{ue(v.confirmation),gn(!1)})},[]),z(()=>{let i=new URLSearchParams(window.location.search),u=i.get("klarna");if(u!=="confirm"&&u!=="cancel")return;let g=ae.getItem(Ct);ae.removeItem(Ct);let v=i.get("authorization_token");if(window.history.replaceState(null,"",window.location.pathname),!g)return;let C;try{C=JSON.parse(g)}catch{return}if(E(),u==="cancel"||!v){ge("The Klarna payment was not completed \u2014 our team will follow up on payment."),ue(C.confirmation);return}yn(!0),K.captureKlarnaPayment({idempotencyKey:C.idempotencyKey,authorizationToken:v}).then(I=>{I.status==="paid"?De(!0):I.status==="declined"?ge("Klarna declined the payment \u2014 our team will follow up on payment."):ge("Your Klarna payment is being reviewed \u2014 we'll confirm the outcome shortly.")}).catch(()=>{ge("We could not confirm the Klarna payment \u2014 our team will follow up on payment.")}).finally(()=>{ue(C.confirmation),yn(!1)})},[]);function Cn(i){let[u,g]=Gr(i.address);D(u),V(g),be(i.city),T(i.zip_code),i.country&&Oe(i.country),i.phone&&Fe(i.phone),Ge({country:i.country||null,state:i.state??""})}z(()=>{if(nt){if((nt.country||L)!==L){Ge(null);return}Et===L&&(tt(zr(L,nt.state,He)),Ge(null))}},[nt,L,Et,He]),z(()=>{let i=!1;return(async()=>{try{let[u,g,v]=await Promise.all([We.me(),We.myProfile().catch(()=>null),We.myAddresses().catch(()=>[])]);if(i)return;rn(u);let C=v.filter(Ve=>Ve.is_active);an(C),se(u.email);let I=(g?.contact_name??"").split(/\s+/);k(u.first_name||I[0]||""),Be(u.last_name||I.slice(1).join(" "));let W=u.phone||g?.phone;W&&Fe(W);let Ae=C.find(Ve=>Ve.id===u.default_delivery_location)??C[0];if(Ae)Ot(Ae.id),Cn(Ae);else if(g){let[Ve,Ma]=Gr(g.address??"");D(Ve),V(Ma),be(g.city??""),T(g.zip_code??""),g.country&&Oe(g.country),Ge({country:g.country||null,state:g.state??""})}}catch{}})(),()=>{i=!0}},[]);function La(){We.logout(),rn(null),an([]),Ot("new"),cn(!1),se(""),k(""),Be(""),D(""),V(""),be(""),T(""),Fe(""),Oe(R||w[0]?.code||""),tt(""),Ge(null)}let Ke=Hr(()=>Vr(e,{canParkContext:fe}),[e,fe]);z(()=>{Ke.some(i=>i.key===M)||oe(Ke[0]?.key??null)},[Ke,M]);let _a=Ke.length===0,st=ze.trim()?`${Re}
4
+ ${ze.trim()}`:Re,Ce=JSON.stringify([te,_,G,Z,st,ce,ve,le,L,r.map(i=>[i.id,i.qty]),p,Dt(s),M,a.currency,rt?.id??null]),ct=J(null),ye=J(!1),Ue=J(null),lt=J(!1),ut=J(Ce);ut.current=Ce;let wn=J(ie);wn.current=ie;let Pn=()=>ye.current&&ut.current!==ct.current,Ie=J(null);z(()=>{wn.current||(Ce!==Ie.current&&(Ie.current=null),!(!ye.current||!re||re.orderNumber)&&(Ce===ct.current||Ce===Ie.current||dt(re)))},[Ce,re]);async function dt(i){if(!lt.current){lt.current=!0,B(!0);try{let u=Ue.current?await Ar(Ue.current):"none";if(u==="succeeded"||u==="processing"){ye.current=!1,ke(null),u==="succeeded"?await we(void 0,i):On(i);return}if(u===void 0||!Tr.has(u)){Ie.current=ut.current,ke(i),ne(u==="requires_action"?Or:Pe);return}let g=await zt(qe);if(g==="committed"){ye.current=!1,ke(null),await we(void 0,i);return}if(g!=="released"){Ie.current=ut.current,ke(i),ne(Pe);return}ye.current=!1,Ue.current=null,Ie.current=null,ne(null),ke(null),At(Ze())}finally{lt.current=!1,B(!1)}}}async function Fa(){if(n||ie||lt.current)return;if(re){if(ye.current&&!re.orderNumber&&Ce!==ct.current){await dt(re);return}B(!0),ne(null),await qt();let v=re.orderNumber?M:"card";v!==M&&oe(v),await In(re,v,!re.orderNumber);return}if(r.length===0||a.repricing||!M||!Ke.some(v=>v.key===M))return;let i=r.filter(Xe).flatMap(v=>Dn(v.components,v.qty));if(i.length===0){ne("Pick a size on each wheel's product page before checking out.");return}B(!0),ne(null);let u,g=qe;try{let v=rt?K.createOrderAuthed:K.createOrder,C=Xn(),I={customer:{email:te,name:`${_} ${G}`.trim(),phone:Z.trim()||void 0,address:st,city:ce,state:ve||void 0,zipCode:le,country:L},items:i,currency:a.currency,idempotencyKey:qe,shippingMethodId:p??void 0,couponCode:Dt(s),...C==="denied"?{}:Mr(),...C?{adConsent:C}:{},...Rr(M)?{checkoutFlow:Bt}:{}};Me.current=()=>v(I),Ue.current=null,ye.current=!1,Ie.current=null,ct.current=Ce,ot.current=r,En(I,v);let W=await(!I.checkoutFlow&&Ft.current===I.idempotencyKey?Nn(I,v):v(I).then(Ae=>({answer:Ae,request:I})).catch(Ae=>qa(Ae,I,v)));if(!W)return;u=W.answer,g=W.request.idempotencyKey,u.orderNumber&&(Rn(u),E()),await qt()}catch(v){let C=jn(v);C?(l(C),ne(`${C} Your order has not been placed. Place it again to continue without the code.`)):v instanceof wt?ne(Pe):ne(v instanceof pe?v.message:"Could not place the order. Please try again."),B(!1);return}await In(u,M,!1,g)}async function qa(i,u,g){if(vt(i))return Sn(u,g);if(!_r(i))throw i;return Ft.current=u.idempotencyKey,Nn(u,g)}async function Nn(i,u){let g=await zt(i.idempotencyKey);if(g==="released")return Sn(i,u);if(g!=="committed")throw new wt;let v=_t.current?.key===i.idempotencyKey?_t.current:null;ot.current=v?.lines??r;let C=v?.send??(()=>u({...i,checkoutFlow:Bt}));Me.current=C;let I=await C();return B(!1),await we(I,{...I,orderNumber:""}),await qt(),null}async function Sn(i,u){let g={...i,idempotencyKey:Ze()};return Ft.current=null,At(g.idempotencyKey),Me.current=()=>u(g),En(g,u),{answer:await u(g),request:g}}function En(i,u){i.checkoutFlow&&(_t.current={key:i.idempotencyKey,send:()=>u(i),lines:r})}function Rn(i){Kn({confirmation:i,lines:ot.current,adsSendTo:e.googleAdsId&&e.googleAdsConversionLabel?`${e.googleAdsId}/${e.googleAdsConversionLabel}`:null}),$r({confirmation:i,lines:ot.current})}async function we(i,u=xe){if(!u)return;let g=i?async()=>i:Me.current;if(u.orderNumber||!g){De(!0),ue(u);return}E(),await Fr({checkoutNumber:u.checkoutNumber,resend:g,page:{setConfirming:Ia,land:ue,markPaid:()=>De(!0),track:Rn,unplaced:bn}})}function On(i=xe){if(i){if(i.orderNumber){ue(i);return}E(),bn({kind:"processing",checkoutNumber:i.checkoutNumber})}}async function qt(){let i=JSON.stringify([It.trim(),_,G,Z.trim(),st,ce,ve,le,L]);if(!(!rt||!sn||on!=="new"||un.current===i))try{await We.createAddress({label:It.trim()||"Home",contact_name:`${_} ${G}`.trim(),phone:Z.trim(),address:st,city:ce,zip_code:le,state:ve,country:L}),un.current=i,ln("Address saved to your account.")}catch{ln("We couldn't save the address to your account \u2014 you can add it under Account \u2192 Addresses.")}}async function In(i,u=M,g=!1,v=qe){ke(null);try{if(u==="card"&&e.paymentMethods.includes("card")){let C=await K.createPaymentIntent({idempotencyKey:v});if(Ue.current=C,g&&Pn()){await dt(i);return}let I=i;if(g){let W=await Me.current?.().catch(()=>null);if(W?.orderNumber){await we(W,i);return}if(I=An(i,W)??{...i,expiresAt:null},Pn()){await dt(i);return}}je(I),Tt(!1),at(C)}else if(u==="paypal"&&e.paymentMethods.includes("paypal"))je(i),xa(!0);else if(u==="afterpay"&&e.paymentMethods.includes("afterpay")){let C=window.location.origin,I=await K.createAfterpayCheckout({idempotencyKey:v,confirmUrl:`${C}/checkout?afterpay=confirm`,cancelUrl:`${C}/checkout?afterpay=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Ht,JSON.stringify(W)),window.location.assign(I.redirectCheckoutUrl);return}else if(u==="square"&&e.paymentMethods.includes("square"))je(i),ka(!0);else if(u==="gocardless"&&e.paymentMethods.includes("gocardless")){let C=window.location.origin,I=await K.createGocardlessBillingRequest({idempotencyKey:v,confirmUrl:`${C}/checkout?gocardless=confirm`,cancelUrl:`${C}/checkout?gocardless=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(kt,JSON.stringify(W)),window.location.assign(I.authorisationUrl);return}else if(u==="zip"&&e.paymentMethods.includes("zip")){let C=window.location.origin,I=await K.createZipCheckout({idempotencyKey:v,redirectUrl:`${C}/checkout?zip=return`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Gt,JSON.stringify(W)),window.location.assign(I.redirectUrl);return}else if(u==="klarna"&&e.paymentMethods.includes("klarna")){let C=window.location.origin,I=await K.createKlarnaCheckout({idempotencyKey:v,confirmUrl:`${C}/checkout?klarna=confirm`,cancelUrl:`${C}/checkout?klarna=cancel`}),W={idempotencyKey:v,confirmation:i};ae.setItem(Ct,JSON.stringify(W)),window.location.assign(I.redirectUrl);return}else ue(i)}catch(C){if((g||u==="card")&&C instanceof pe&&C.status===409){await we(void 0,i);return}Tn(i,C),B(!1)}}function An(i,u){return u&&!u.orderNumber&&u.status==="open"&&u.checkoutNumber===i.checkoutNumber?u:null}function Tn(i,u){ne(_o(i,u)),!i.orderNumber&&vt(u)?(ye.current=!1,At(Ze())):ke(i)}async function ja(i){if(!xe)return;let u=xe;try{let g=await K.createPaymentIntent({idempotencyKey:qe}),v=await Me.current?.().catch(()=>null);if(v?.orderNumber){await we(v);return}let C=An(u,v);je(C??{...u,expiresAt:null}),Tt(i&&C!==null),Ue.current=g,at(g)}catch(g){if(g instanceof pe&&g.status===409){await we();return}at(null),je(null),Tn(u,g),B(!1)}}function Da(){xe&&(ye.current=!0,ke(xe),at(null),je(null),Tt(!1),B(!1))}return{site:e,logo:t,items:r,totals:a,coupon:s,deliveryOptions:m,courierUnavailable:fa,retryCourier:ga,shippingMethodId:p,setShippingMethodId:d,pickupLocation:X,servedCountries:w,formatMoney:H,payChoice:M,setPayChoice:oe,placing:ie,email:te,setEmail:se,firstName:_,setFirstName:k,lastName:G,setLastName:Be,address1:Re,setAddress1:D,address2:ze,setAddress2:V,city:ce,setCity:be,postcode:le,setPostcode:T,phone:Z,setPhone:Fe,country:L,setCountry:Oe,subdivision:ve,setSubdivision:tt,subdivisions:He,destination:tn,postcodeLabel:pa,subdivisionLabel:ma,me:rt,savedAddresses:ya,selectedAddressId:on,setSelectedAddressId:Ot,saveAddress:sn,setSaveAddress:cn,saveLabel:It,setSaveLabel:ha,addressSaveNote:ba,idemKey:qe,confirmation:dn,setConfirmation:ue,orderError:va,payment:pn,paypalStep:mn,squareStep:fn,pendingConf:xe,paid:Ca,setPaid:De,unpaidOrder:re,payNote:wa,afterpayConfirming:Pa,gocardlessConfirming:Sa,zipConfirming:Ea,klarnaConfirming:Oa,cardConfirming:hn,checkoutResult:Lt,confirmCardPayment:we,cardStillProcessing:On,renewCardPayment:ja,holdRenewed:Aa,leaveCardPayment:Da,checkoutRootRef:kn,setCheckoutHeaderEl:Ta,fillFromAddress:Cn,checkoutSignOut:La,payOptions:Ke,noPaymentMethod:_a,placeOrder:Fa}}var Zr=To(null);function Qr({children:e,...t}){let n=Fo(t);return he(Zr.Provider,{value:n,children:e})}function Ne(){let e=Lo(Zr);if(!e)throw new Error("useCheckout must be used inside CheckoutStateProvider");return e}import{useId as Jt}from"react";import{Fragment as Se,jsx as o,jsxs as N}from"react/jsx-runtime";function ta(){let{email:e,setEmail:t,firstName:n,setFirstName:r,lastName:a,setLastName:s,me:l,checkoutSignOut:m}=Ne(),p=Jt();return N(Nt,{num:"N\xB0 01",title:"Contact",children:[o(ee,{label:"Email",htmlFor:p,hint:l?N(Se,{children:["Signed in \xB7"," ",o("button",{type:"button",onClick:m,className:"underline transition-colors hover:text-accent",children:"Not you? Sign out"})]}):void 0,children:o("input",{id:p,type:"email",value:e,onChange:d=>t(d.target.value),placeholder:"you@example.com",readOnly:l!==null,className:Q+(l?" opacity-70":"")})}),N(ia,{children:[o(ee,{label:"First name",children:o("input",{type:"text",value:n,onChange:d=>r(d.target.value),className:Q})}),o(ee,{label:"Last name",children:o("input",{type:"text",value:a,onChange:d=>s(d.target.value),className:Q})})]})]})}function na(){let{pickupLocation:e,servedCountries:t,address1:n,setAddress1:r,address2:a,setAddress2:s,city:l,setCity:m,postcode:p,setPostcode:d,phone:y,setPhone:x,country:b,setCountry:f,subdivision:E,setSubdivision:S,subdivisions:O,destination:X,postcodeLabel:R,subdivisionLabel:w,me:U,savedAddresses:H,selectedAddressId:M,setSelectedAddressId:oe,saveAddress:fe,setSaveAddress:Ee,saveLabel:ie,setSaveLabel:B,fillFromAddress:te}=Ne(),se=Jt(),_=Jt();return N(Nt,{num:"N\xB0 02",title:e?"Collection":"Shipping address",children:[e?N("div",{className:"grid gap-2 text-[14px] leading-[1.6]",children:[o("span",{className:"font-medium",children:e.name}),[e.address,e.city,e.state,e.zipCode,e.country].filter(Boolean).length>0&&o("span",{className:"opacity-80",children:[e.address,e.city,e.state,e.zipCode,e.country].filter(Boolean).join(", ")}),e.openingHours&&o("span",{className:"opacity-80",children:e.openingHours}),e.instructions&&o("span",{className:"opacity-80",children:e.instructions}),o("span",{className:"mt-1 font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"No delivery address needed"})]}):N(Se,{children:[U!==null&&H.length>0&&N("div",{className:"grid gap-3",children:[H.map(k=>o(Pt,{active:M===k.id,onClick:()=>{oe(k.id),te(k)},title:k.label,body:k.formatted_address,price:null},k.id)),o(Pt,{active:M==="new",onClick:()=>oe("new"),title:"New address",body:null,price:null})]}),o(ee,{label:"Address line 1",children:o("input",{type:"text",value:n,onChange:k=>r(k.target.value),className:Q})}),o(ee,{label:"Address line 2",children:o("input",{type:"text",value:a,onChange:k=>s(k.target.value),placeholder:"Apartment, unit, garage bay\u2026",className:Q})}),N(ia,{cols:"three",children:[o(ee,{label:"City",children:o("input",{type:"text",value:l,onChange:k=>m(k.target.value),className:Q})}),o(ee,{label:R,children:o("input",{type:"text",value:p,onChange:k=>d(k.target.value),className:Q})}),o(ee,{label:"Country",separate:!0,htmlFor:se,children:o(Kt,{id:se,value:b,onChange:k=>f(k.target.value),className:Q+" pr-10",style:ea,children:t.map(k=>o("option",{value:k.code,children:k.name},k.code))})})]}),o(ee,{label:w,separate:!0,htmlFor:_,children:O.length>0?N(Kt,{id:_,value:E,onChange:k=>S(k.target.value),className:Q+" pr-10",style:ea,children:[o("option",{value:"",children:"Select\u2026"}),O.map(k=>o("option",{value:k.code||k.name,children:k.name},k.code||k.name))]}):o("input",{id:_,type:"text",value:E,onChange:k=>S(k.target.value),className:Q})})]}),o(ee,{label:"Phone",children:o("input",{type:"tel",value:y,onChange:k=>x(k.target.value),className:Q})}),!e&&U!==null&&M==="new"&&N(Se,{children:[o(qo,{checked:fe,onChange:Ee,label:"Save this address to my account"}),fe&&o(ee,{label:"Address label",children:o("input",{type:"text",value:ie,onChange:k=>B(k.target.value),placeholder:"Home",className:Q})})]})]})}function ra(){let{totals:e,coupon:t,deliveryOptions:n,shippingMethodId:r,setShippingMethodId:a,pickupLocation:s,formatMoney:l,city:m,destination:p,courierUnavailable:d,retryCourier:y}=Ne();return o(Nt,{num:"N\xB0 03",title:"Shipping",children:N("div",{className:"grid gap-3",children:[n.map(x=>{let b=x.pickupLocation,f=b?[b.address,b.city,b.state,b.zipCode].filter(Boolean).join(", "):null;return o(Pt,{active:r===x.id,onClick:()=>a(x.id),title:b?`${x.name} \u2014 ${b.name}`:x.name,body:b?[f,b.openingHours,b.instructions,x.description].filter(Boolean).join(" \xB7 "):x.description||null,price:e.freeShipping||x.amount===0?pt:l(x.amount,e.currency),tag:x.tag||void 0},x.id)}),d?N("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:[Xr," ",o("button",{type:"button",onClick:y,className:"underline transition-colors hover:text-accent",children:"Try again"})]}):n.length===0&&o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Shipping is arranged after your order is reviewed."})]})})}function aa(){let{payChoice:e,setPayChoice:t,placing:n,payment:r,payOptions:a,noPaymentMethod:s}=Ne();return N(Nt,{num:"N\xB0 04",title:"Payment",children:[s&&o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:Jr}),o("div",{className:"grid gap-3",children:a.map(l=>o(Pt,{active:e===l.key,onClick:()=>t(l.key),title:l.title,body:l.body,price:l.price,tag:l.tag},l.key))}),e==="card"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll enter card details on the secure payment step after placing the order."}):e==="paypal"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll approve the payment with PayPal on the payment step after placing the order."}):e==="afterpay"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Afterpay to approve four interest-free payments, then brought straight back."}):e==="square"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll enter card details on the secure payment step after placing the order."}):e==="gocardless"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll set up a bank direct debit with GoCardless, then be brought straight back. Direct debits clear in a few days."}):e==="zip"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Zip to approve four instalments, then brought straight back."}):e==="klarna"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"You\u2019ll be taken to Klarna to choose how to pay, then brought straight back."}):e==="bank"?o("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Our team emails you the invoice and bank details after review."}):null]})}function oa(){let{site:e,items:t,totals:n,coupon:r,formatMoney:a,payChoice:s,placing:l,email:m,orderError:p,payment:d,noPaymentMethod:y,unpaidOrder:x,placeOrder:b}=Ne();return N("aside",{className:"sticky top-[var(--sf-checkout-header-h,88px)] border border-line max-view-desktop:static",style:{background:"linear-gradient(180deg, color-mix(in oklab, var(--site-surface) 70%, var(--bg)) 0%, var(--bg) 100%)"},children:[N("header",{className:"flex items-center justify-between border-b border-accent bg-accent px-6 py-4 font-mono text-[13px] font-bold uppercase tracking-[0.28em] text-bg",children:[o("span",{children:"Your order"}),o(de,{href:"/wheels",className:"text-bg/80 transition-colors hover:text-bg",children:"Edit \u2197"})]}),o("div",{className:"flex flex-col px-6 py-2",children:t.length===0?N("div",{className:"py-8 text-center font-serif text-[16px] italic leading-[1.5] text-fg-dim",children:["Your cart is empty. ",o(de,{href:"/wheels",className:"text-accent underline-offset-4 hover:underline",children:"Browse the catalog \u2192"})]}):t.map(f=>o(jo,{slug:f.slug,name:f.name,qty:f.qty,config:f.config,configSummary:Do(f.config),price:Yn(f,n.currency)??0,currency:n.currency},f.id))}),o("div",{className:"border-t border-line px-6 pt-5",children:o(Jn,{customerEmail:m})}),N("div",{className:"flex flex-col gap-2 border-t border-line mt-5 px-6 pt-5",children:[o(Le,{label:"Subtotal",value:a(n.subtotal,n.currency)}),n.discount>0&&r?.valid&&o(Le,{label:`Coupon \xB7 ${r.code}`,value:N("span",{className:"font-semibold text-green",children:["\u2212 ",a(n.discount,n.currency)]})}),r?.deferred&&o(Le,{label:`Coupon \xB7 ${r.code}`,value:qn}),r?.valid&&r.effects?.gift&&o(Le,{label:`Free gift \xB7 ${r.effects.gift.partNumber}${r.effects.gift.quantity>1?` \xD7${r.effects.gift.quantity}`:""}`,value:o("span",{className:"font-semibold text-green",children:pt})}),o(Le,{label:"Shipping",value:n.shippingStatus==="free"?o("span",{className:"font-semibold text-green",children:pt}):Wn(n.shippingStatus)??a(n.shipping,n.currency)}),n.tax&&(n.tax.charged?o(Le,{label:n.tax.inclusive?`${n.tax.name} included \xB7 ${n.tax.rate}%`:n.tax.name,value:a(n.tax.amount,n.currency)}):n.tax.name?o(Le,{label:n.tax.name,value:Un}):null)]}),N("div",{className:"mt-4 flex items-end justify-between border-y-2 border-accent px-6 py-4",style:{background:"color-mix(in oklab, var(--accent) 10%, var(--bg))"},children:[o("span",{className:"font-display text-[20px] font-bold uppercase tracking-[0.04em] text-fg",children:"Total"}),o("span",{className:"text-right font-display text-[34px] font-bold leading-none tracking-[-0.025em] text-fg",children:n.repricing?"\u2026":a(n.grand,n.currency)})]}),N("div",{className:"flex flex-col gap-3 px-6 pt-5 pb-6",children:[p&&o(Te,{role:"alert",children:p}),n.hasUnpricedLine&&N(Te,{role:"status",children:["One or more items have no price in ",n.currency,". Remove them, or switch region, to continue."]}),o("button",{type:"button",onClick:b,disabled:l||!x&&(y||t.length===0||n.hasUnpricedLine||n.repricing),className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",l||!x&&(t.length===0||y||n.hasUnpricedLine||n.repricing)?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:l?N(Se,{children:["Building order\u2026 ",o("span",{children:"\xB7"})]}):y?N(Se,{children:["No online payment ",o("span",{children:"\xB7"})]}):x?N(Se,{children:["Try payment again \xB7 ",xt(x),o("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]}):n.repricing?N(Se,{children:["Updating total\u2026 ",o("span",{children:"\xB7"})]}):N(Se,{children:[s==="bank"?"Place order":"Continue to payment"," \xB7"," ",a(n.grand,n.currency),o("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})})]})]})}var ea={backgroundImage:"linear-gradient(45deg, transparent 50%, var(--accent) 50%), linear-gradient(135deg, var(--accent) 50%, transparent 50%)",backgroundPosition:"calc(100% - 18px) 50%, calc(100% - 12px) 50%",backgroundSize:"6px 6px",backgroundRepeat:"no-repeat"};function Nt({num:e,title:t,children:n}){return N("section",{className:"mb-6 border border-line bg-bg",children:[N("header",{className:"flex items-center gap-4 border-b border-line bg-surface px-6 py-4",children:[o("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e}),o("h2",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:t})]}),o("div",{className:"flex flex-col gap-4 px-6 py-6",children:n})]})}function ia({cols:e="two",children:t}){return o("div",{className:["grid gap-3 max-[640px]:grid-cols-1",e==="two"?"grid-cols-2":"grid-cols-[1.2fr_1fr_1fr]"].join(" "),children:t})}function Pt({active:e,onClick:t,title:n,body:r,price:a,tag:s}){return N("button",{type:"button",onClick:t,"aria-pressed":e,className:["relative grid grid-cols-[auto_1fr_auto] items-center gap-5 border bg-bg px-6 py-5 text-left transition-colors",e?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-line hover:border-[color-mix(in_oklab,var(--accent)_50%,var(--site-line))]"].join(" "),style:e?{background:"color-mix(in oklab, var(--accent) 14%, var(--bg))"}:void 0,children:[e&&o("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),o("span",{className:["flex h-[18px] w-[18px] items-center justify-center rounded-full border-2",e?"border-accent":"border-fg-dim"].join(" "),children:e&&o("span",{className:"block h-2.5 w-2.5 rounded-full bg-accent"})}),N("span",{className:"flex min-w-0 flex-col gap-1",children:[N("span",{className:"flex flex-wrap items-baseline gap-3 font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:[n,s&&o("span",{className:"border px-2 py-0.5 font-mono text-[11px] font-normal uppercase tracking-[0.24em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)",borderColor:"color-mix(in oklab, var(--accent) 45%, var(--site-line))"},children:s})]}),r&&o("span",{className:"font-mono text-[12px] uppercase tracking-[0.22em] text-fg-dim",children:r})]}),o("span",{className:"whitespace-nowrap font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:a})]})}function qo({checked:e,onChange:t,label:n,sub:r}){return N("div",{className:"flex items-start gap-3 border-t border-line py-4 first:border-t-0 first:pt-0",children:[o("button",{type:"button",onClick:()=>t(!e),"aria-pressed":e,"aria-label":n,className:["mt-px flex h-5 w-5 flex-shrink-0 items-center justify-center border transition-colors",e?"border-accent":"border-line"].join(" "),style:e?{background:"color-mix(in oklab, var(--accent) 18%, transparent)"}:void 0,children:e&&o("span",{className:"text-[13px] text-accent",children:"\u2713"})}),N("span",{className:"flex-1 font-display text-[16px] leading-[1.5] text-fg",children:[n,r&&o("small",{className:"mt-1 block font-mono text-[12px] uppercase tracking-[0.18em] text-fg-dim",children:r})]})]})}function jo({slug:e,name:t,qty:n,config:r,configSummary:a,price:s,currency:l}){let{catalog:m}=mt(),{formatMoney:p}=me(),d=m.find(S=>S.slug===e),y=d?.spokes??5,x=d?.mesh??!1,b=r.find(S=>S.gold)?.label,f=d?.finishes.find(S=>S.name===b&&S.src)??d?.finishes.find(S=>S.src),E=d?.finishes[0]?.color??Vn;return N("div",{className:"grid grid-cols-[60px_1fr_auto] items-center gap-4 border-b border-line py-4 last:border-b-0",children:[N("div",{className:"relative aspect-square",children:[o("div",{className:"flex h-full w-full items-center justify-center overflow-hidden border border-line bg-surface",children:f?.src?o(Ln,{src:f.src,alt:`${t.lead}${t.accent} \u2014 ${f.name}`,width:120,height:120,sizes:"60px",className:"block h-full w-full object-contain p-2"}):o("div",{className:"block w-[78%]",style:{color:E},children:o(Gn,{spokes:y,mesh:x,className:"block w-full"})})}),o("span",{className:"absolute -right-1.5 -top-1.5 z-[2] flex h-[18px] w-[18px] items-center justify-center rounded-full bg-accent font-mono text-[11px] font-bold text-bg",children:n})]}),N("div",{className:"flex min-w-0 flex-col gap-0.5",children:[N("span",{className:"font-display text-[17px] font-bold uppercase leading-none tracking-[-0.005em] text-fg",children:[t.lead,o("em",{className:"font-serif font-normal italic text-accent tracking-[-0.005em] normal-case",children:t.accent})]}),o("span",{className:"font-mono text-[12px] uppercase leading-[1.5] tracking-[0.18em] text-fg-dim",children:a})]}),o("span",{className:"text-right font-display text-[17px] font-bold tracking-[-0.005em] text-fg",children:p(s,l)})]})}function Le({label:e,value:t}){return N("div",{className:"flex items-center justify-between font-mono text-[13px] font-medium uppercase tracking-[0.18em] text-fg",children:[o("span",{children:e}),o("strong",{className:"font-display text-[16px] font-medium tracking-[-0.005em] normal-case text-fg",children:t})]})}function Do(e){return e.map(t=>t.label).join(" \xB7 ")}import{Fragment as $,jsx as c,jsxs as h}from"react/jsx-runtime";function Qt(e){return c(Qr,{...e,children:c(Uo,{})})}function Mo({order:e,paid:t}){let{formatMoney:n}=me();if(!e.grandTotal||!e.currency)return null;let r=l=>n(Number(l),e.currency),a=Number(e.freightCharge??0),s=Number(e.discountAmount??0);return h("dl",{className:"grid w-full max-w-sm grid-cols-[1fr_auto] gap-x-6 gap-y-1 border-y border-line py-3 text-left text-sm",children:[(e.shippingMethod||a>0)&&h($,{children:[h("dt",{className:"text-fg-dim",children:["Delivery",e.shippingMethod?` \xB7 ${e.shippingMethod}`:""]}),c("dd",{className:"text-right font-mono",children:r(e.freightCharge??"0")})]}),s>0&&h($,{children:[h("dt",{className:"text-fg-dim",children:["Discount",e.couponCode?` \xB7 ${e.couponCode}`:""]}),h("dd",{className:"text-right font-mono",children:["\u2212",r(e.discountAmount??"0")]})]}),c("dt",{className:"text-fg",children:t?"Total paid":"Order total"}),c("dd",{className:"text-right font-mono text-fg",children:r(e.grandTotal)})]})}function Ko({result:e}){let t=c("span",{className:"font-mono text-fg",children:e.checkoutNumber});return h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:e.kind==="refunded"||e.kind==="expired"?"Order not placed":e.kind==="processing"?"Payment processing":"Payment received"}),c("p",{className:"text-fg-dim",children:e.kind==="refunded"?h($,{children:["An item sold out or an offer ended while you paid for checkout ",t,". Your payment is refunded to your card."]}):e.kind==="expired"?h($,{children:["The hold on checkout ",t," ran out before your payment arrived. Your payment is refunded to your card."]}):e.kind==="processing"?h($,{children:["Your payment for checkout ",t," is being processed. When it goes through, we will email your order confirmation."]}):h($,{children:["Thank you \u2014 your payment for checkout ",t," has gone through. We will email you the order number shortly."]})}),c(de,{href:"/wheels",className:"mt-2 border-2 border-line px-6 py-3 font-mono text-[12px] uppercase tracking-[0.24em] hover:border-accent",children:"Continue browsing"})]})}function Uo(){let{site:e,logo:t,items:n,placing:r,email:a,me:s,addressSaveNote:l,idemKey:m,confirmation:p,setConfirmation:d,payment:y,paypalStep:x,squareStep:b,pendingConf:f,paid:E,setPaid:S,payNote:O,afterpayConfirming:X,gocardlessConfirming:R,zipConfirming:w,klarnaConfirming:U,cardConfirming:H,checkoutResult:M,confirmCardPayment:oe,cardStillProcessing:fe,renewCardPayment:Ee,holdRenewed:ie,leaveCardPayment:B,checkoutRootRef:te,setCheckoutHeaderEl:se}=Ne();return p?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:E?"Payment received":"Order received"}),h("p",{className:"text-fg-dim",children:[E?h($,{children:["Thank you \u2014 your payment for order"," ",c("span",{className:"font-mono text-fg",children:p.orderNumber})," has gone through."," "]}):h($,{children:["Thank you \u2014 your order ",c("span",{className:"font-mono text-fg",children:p.orderNumber})," is being reviewed by our team."," "]}),s?h($,{children:["Track it under"," ",c(de,{href:"/account/orders",className:"text-accent underline",children:"your orders"}),"."]}):c($,{children:"We\u2019ve emailed you a link to set a password and track it."})]}),c(Mo,{order:p,paid:E}),O&&c("p",{className:"text-sm text-fg-dim",children:O}),l&&c("p",{className:"text-sm text-fg-dim",children:l}),!s&&h("p",{className:"text-sm text-fg-dim",children:["You can also"," ",c(de,{href:`/track?order=${encodeURIComponent(p.orderNumber)}`,className:"text-accent underline",children:"track this order"})," ","anytime with just your order number and email \u2014 no password needed."]}),c(de,{href:"/wheels",className:"mt-2 border-2 border-line px-6 py-3 font-mono text-[12px] uppercase tracking-[0.24em] hover:border-accent",children:"Continue browsing"})]}):M?c(Ko,{result:M}):H?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Placing your order \u2014 one moment."})]}):X?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Afterpay \u2014 one moment."})]}):R?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Setting up your direct debit\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Confirming with GoCardless \u2014 one moment."})]}):w?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Zip \u2014 one moment."})]}):U?h("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[c("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Klarna \u2014 one moment."})]}):y&&f?c(Wo,{payment:y,checkout:f,holdRenewed:ie,onPaid:oe,onProcessing:fe,onRenew:Ee,onBack:B}):x&&f?c(zo,{confirmation:f,clientId:e.paypalClientId??"",idemKey:m,onPaid:()=>{S(!0),d(f)},onSkip:()=>d(f)}):b&&f?c(Go,{confirmation:f,applicationId:e.squareApplicationId??"",locationId:e.squareLocationId??"",environment:e.squareEnvironment??"production",idemKey:m,onPaid:()=>{S(!0),d(f)},onSkip:()=>d(f)}):h("div",{ref:te,className:"bg-bg text-fg",children:[h("header",{ref:se,className:"sticky top-0 z-30 grid grid-cols-[1fr_auto_1fr] items-center gap-8 border-b border-line px-[var(--sf-site-gutter,40px)] py-6 backdrop-blur-md max-[640px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[640px]:py-4",style:{background:"color-mix(in oklab, var(--bg) 92%, transparent)"},children:[h(de,{href:"/",className:"inline-flex items-center gap-3 font-mono text-[13px] uppercase tracking-[0.26em] text-fg-dim transition-colors hover:text-accent",children:["\u2190",c("span",{className:"max-[640px]:hidden",children:"Back to shop"})]}),c(de,{href:"/","aria-label":`${e.name} home`,className:"inline-flex items-center justify-center",children:c(Hn,{variant:"header",scrolled:!0,src:t?.url??null,reverse:t?.reverse??!1,reversedSrc:t?.reversed??null,inkIsDark:t?.inkIsDark??null,size:t?.size??"medium",sizePx:t?.sizePx??null,siteName:e.name})}),e.cardPayments?h("span",{className:"flex items-center justify-end gap-3 font-mono text-[12px] uppercase tracking-[0.26em] text-fg-dim",children:[c("span",{className:"text-green",children:"\u25CF"}),c("span",{className:"max-[640px]:hidden",children:"Encrypted \xB7"})," Stripe"]}):c("span",{})]}),h("section",{className:"mx-auto flex max-w-[var(--sf-site-width,1600px)] flex-wrap items-center justify-between gap-x-8 gap-y-3 border-b border-line bg-surface px-[var(--sf-site-gutter,40px)] py-4 font-mono text-[13px] font-medium uppercase tracking-[0.24em] text-fg max-view-desktop:px-[min(24px,var(--sf-site-gutter,40px))]",children:[c("span",{className:"inline-flex items-center bg-accent px-3 py-1 font-bold text-bg",children:"Checkout"}),c("nav",{"aria-label":"Checkout steps",className:"flex flex-wrap items-center gap-5",children:[{n:"01",label:"Cart",state:"done"},{n:"02",label:"Ship & pay",state:"active"},{n:"03",label:"Confirmed",state:"pending"}].map(_=>h("span",{className:["relative flex items-center gap-2 transition-colors",_.state==="pending"?"text-fg-dim":"text-fg",_.state==="active"?"font-bold after:absolute after:inset-x-0 after:-bottom-1 after:h-[2px] after:bg-accent":""].join(" "),children:[c("span",{className:_.state==="done"?"text-accent font-bold":"",children:_.n}),c("span",{children:_.label})]},_.n))})]}),h("main",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] grid-cols-[1fr_420px] items-start gap-16 px-[var(--sf-site-gutter,40px)] pt-10 pb-[100px] max-view-desktop:grid-cols-1 max-view-desktop:gap-10 max-view-desktop:px-[min(24px,var(--sf-site-gutter,40px))] max-view-desktop:pt-8 max-view-desktop:pb-20",children:[h("div",{children:[c(ta,{}),c(na,{}),c(ra,{}),c(aa,{})]}),c(oa,{})]}),c("footer",{className:"flex flex-wrap items-center justify-between gap-4 border-t border-line px-[var(--sf-site-gutter,40px)] py-6 font-mono text-[12px] uppercase tracking-[0.22em] text-fg-dim max-[640px]:px-[min(20px,var(--sf-site-gutter,40px))]",children:c("span",{children:zn({legalName:e.legalName,foundedYear:e.foundedYear,siteName:e.name})})})]})}function Wo({payment:e,checkout:t,holdRenewed:n,onPaid:r,onProcessing:a,onRenew:s,onBack:l}){let{formatMoney:m}=me(),p=c("span",{className:"text-fg",children:m(Number(e.amount),e.currency)}),d=sa(()=>bt(e.publishableKey),[e.publishableKey]),y=sa(()=>Zn(),[]);return c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:xt(t)}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Payment"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[c("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:t.orderNumber?h($,{children:["Your order is placed. Pay ",p," by card to confirm it now."]}):n?h($,{children:["Your hold ran out, so your items are held again",t.expiresAt?` until ${ca(t.expiresAt)}`:"",". Enter your card again, then pay ",p,"."]}):h($,{children:["Your items are held",t.expiresAt?` until ${ca(t.expiresAt)}`:"",". Pay ",p," by card to place your order."]})}),c(Yt,{stripe:d,options:{clientSecret:e.clientSecret,appearance:y},children:c(Yo,{payment:e,checkout:t,onPaid:r,onProcessing:a,onRenew:s,onBack:l})},e.clientSecret)]})]})})}function ca(e){return new Date(e).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var $o=5;function Yo({payment:e,checkout:t,onPaid:n,onProcessing:r,onRenew:a,onBack:s}){let{formatMoney:l}=me(),m=xr(),p=br(),[d,y]=_e(!1),[x,b]=_e(null),f=Ye(!1);async function E(){try{return(await m.retrievePaymentIntent(e.clientSecret)).paymentIntent?.status}catch{return}}async function S(R){let w=R;for(let U=0;w==="processing"&&U<$o;U+=1)await new Promise(H=>setTimeout(H,1e3)),w=await E()??w;if(w==="succeeded"){n();return}if(w==="processing"){r();return}b("Payment did not complete. Please try again."),y(!1)}async function O(){if(!m||!p||d)return;y(!0),b(null),f.current=!0;let R=await m.confirmPayment({elements:p,redirect:"if_required"}).catch(()=>null);if(!R){let w=await E();if(w==="succeeded"||w==="processing"){await S(w);return}b(w===void 0?Pe:"Payment failed. Please try again."),y(!1);return}if(R.error){if(!t.orderNumber&&R.error.code==="payment_intent_unexpected_state"){let w=await E();if(w==="succeeded"||w==="processing"){await S(w);return}if(w===void 0){b(Pe),y(!1);return}await a(w==="canceled"),y(!1);return}b(R.error.message??"Payment failed. Please try again."),y(!1);return}await S(R.paymentIntent?.status)}async function X(){if(d)return;if(!f.current){s();return}y(!0),b(null);let R=await E();if(R==="succeeded"||R==="processing"){await S(R);return}if(y(!1),R===void 0){b(Pe);return}s()}return h("div",{className:"flex flex-col gap-4",children:[c(kr,{}),x&&c(Te,{role:"alert",children:x}),c("button",{type:"button",onClick:O,disabled:!m||!p||d,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!m||!p||d?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:d?h($,{children:["Processing\u2026 ",c("span",{children:"\xB7"})]}):h($,{children:["Pay ",l(Number(e.amount),e.currency),c("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),!t.orderNumber&&!d&&h("button",{type:"button",onClick:X,className:"inline-flex items-center gap-3 self-start font-mono text-[12px] uppercase tracking-[0.26em] text-fg-dim transition-colors hover:text-accent",children:["\u2190",c("span",{children:"Back to checkout"})]})]})}var la="paypal-sdk-js",Xt=null;function Bo(e,t){let n=`${e}|${t}`;if(Xt?.key===n)return Xt.promise;let r=new Promise((a,s)=>{document.getElementById(la)?.remove();let l=document.createElement("script");l.id=la;let m=new URLSearchParams({"client-id":e,currency:t,intent:"capture"});l.src=`https://www.paypal.com/sdk/js?${m}`,l.onload=()=>{let p=window.paypal;p?a(p):s(new Error("PayPal SDK loaded without its namespace"))},l.onerror=()=>s(new Error("PayPal SDK failed to load")),document.head.appendChild(l)});return Xt={key:n,promise:r},r}function zo({confirmation:e,clientId:t,idemKey:n,onPaid:r,onSkip:a}){let{formatMoney:s}=me(),l=Ye(null),[m,p]=_e(!1),[d,y]=_e(null),x=Ye(r);return x.current=r,da(()=>{let b=!1,f=null;return Bo(t,e.currency).then(E=>{if(!(b||!l.current))return f=E.Buttons({style:{layout:"vertical",color:"gold",shape:"rect",label:"paypal"},createOrder:async()=>(await K.createPaypalOrder({idempotencyKey:n})).paypalOrderId,onApprove:async S=>{try{if((await K.capturePaypalOrder({idempotencyKey:n,paypalOrderId:S.orderID})).status==="paid"){x.current();return}y("PayPal did not complete the payment. Please try again.")}catch(O){y(O instanceof pe?O.message:"PayPal payment failed. Please try again.")}},onError:()=>{y("PayPal could not process the payment. Please try again.")}}),f.render(l.current).then(()=>{b||p(!0)})}).catch(()=>{b||y("PayPal could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{b=!0,f?.close?.()}},[t,e.currency,n]),c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e.orderNumber}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"PayPal"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[h("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:["Your order is placed. Pay"," ",c("span",{className:"text-fg",children:s(Number(e.grandTotal),e.currency)})," ","with PayPal to confirm it now."]}),!m&&!d&&c("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading PayPal\u2026"}),c("div",{ref:l}),d&&c(Te,{role:"alert",children:d}),c("button",{type:"button",onClick:a,className:"self-center font-mono text-[11px] uppercase tracking-[0.24em] text-fg-dim underline-offset-4 transition-colors hover:text-accent hover:underline",children:"Pay later \u2014 our team will be in touch"})]})]})})}var ua="square-web-sdk",Zt=null;function Ho(e){let t=e==="sandbox"?"sandbox":"production";if(Zt?.key===t)return Zt.promise;let n=new Promise((r,a)=>{document.getElementById(ua)?.remove();let s=document.createElement("script");s.id=ua,s.src=t==="sandbox"?"https://sandbox.web.squarecdn.com/v1/square.js":"https://web.squarecdn.com/v1/square.js",s.onload=()=>{let l=window.Square;l?r(l):a(new Error("Square SDK loaded without its namespace"))},s.onerror=()=>a(new Error("Square SDK failed to load")),document.head.appendChild(s)});return Zt={key:t,promise:n},n}function Go({confirmation:e,applicationId:t,locationId:n,environment:r,idemKey:a,onPaid:s,onSkip:l}){let{formatMoney:m}=me(),p=Ye(null),d=Ye(null),y=Ye(null),[x,b]=_e(!1),[f,E]=_e(!1),[S,O]=_e(null);da(()=>{let R=!1,w=null;return Ho(r).then(async U=>{if(R||!p.current)return;let H=U.payments(t,n);y.current=H,w=await H.card(),await w.attach(p.current),d.current=w,R||b(!0)}).catch(()=>{R||O("Square could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{R=!0,w?.destroy?.()}},[t,n,r]);async function X(){let R=d.current;if(!(!R||f)){E(!0),O(null);try{let w=await R.tokenize();if(w.status!=="OK"||!w.token){O(w.errors?.[0]?.message??"Please check the card details and try again."),E(!1);return}let U;try{U=(await y.current?.verifyBuyer?.(w.token,{amount:String(e.grandTotal),currencyCode:e.currency,intent:"CHARGE"}))?.token}catch{}if((await K.chargeSquare({idempotencyKey:a,sourceId:w.token,...U?{verificationToken:U}:{}})).status==="paid"){s();return}O("Square did not complete the payment. Please try again.")}catch(w){O(w instanceof pe?w.message:"Square payment failed. Please try again.")}E(!1)}}return c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:h("div",{className:"w-full max-w-xl border border-line bg-bg",children:[h("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-4",children:[c("span",{className:"inline-flex items-center justify-center bg-accent px-3 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:e.orderNumber}),c("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Card"})]}),h("div",{className:"flex flex-col gap-4 px-6 py-6",children:[h("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:["Your order is placed. Pay"," ",c("span",{className:"text-fg",children:m(Number(e.grandTotal),e.currency)})," ","by card to confirm it now."]}),!x&&!S&&c("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading card form\u2026"}),c("div",{ref:p}),S&&c(Te,{role:"alert",children:S}),c("button",{type:"button",onClick:X,disabled:!x||f,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!x||f?"cursor-not-allowed border-line bg-surface text-fg-dim":"border-btn bg-btn text-btn-ink hover:border-fg hover:bg-fg"].join(" "),children:f?h($,{children:["Processing\u2026 ",c("span",{children:"\xB7"})]}):h($,{children:["Pay ",m(Number(e.grandTotal),e.currency),c("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),c("button",{type:"button",onClick:l,disabled:f,className:"self-center font-mono text-[11px] uppercase tracking-[0.24em] text-fg-dim underline-offset-4 transition-colors hover:text-accent hover:underline",children:"Pay later \u2014 our team will be in touch"})]})]})})}import{jsx as St}from"react/jsx-runtime";function Vo(){let{settings:e,websiteName:t}=_n(),n=t?{...Mt,name:t}:Mt,r=e?{url:e.logoUrl,reversed:e.logoReversed??null,inkIsDark:e.logoInkIsDark??null,reverse:e.reverseLogo,size:e.logoSize,sizePx:e.logoSizePx}:null;return St("div",{style:{position:"fixed",inset:0,zIndex:2147482e3,overflowY:"auto",background:"var(--bg)",color:"var(--fg)"},children:St($n,{children:St(Bn,{preview:!0,children:St(Qt,{site:n,logo:r,preview:!0})})})})}export{Vo as default};
@@ -1 +1 @@
1
- "use client";import{Vl as r}from"./chunk-6MHGEO3D.js";import"./chunk-X5W6GJLI.js";import"./chunk-JUGY3EKR.js";import"./chunk-Y6SLVHK3.js";import{jsx as o}from"react/jsx-runtime";import e from"efficient-easel/screen/components/ScreenStoreProvider";function a(t){return o(e,{...t,parts:r})}export{a as default};
1
+ "use client";import{pm as r}from"./chunk-VIPMT34C.js";import"./chunk-T2R5CZ2F.js";import"./chunk-VVWX2P2N.js";import"./chunk-Y6SLVHK3.js";import{jsx as o}from"react/jsx-runtime";import e from"efficient-easel/screen/components/ScreenStoreProvider";function a(t){return o(e,{...t,parts:r})}export{a as default};