efficient-storefront-blocks 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +111 -0
- package/dist/chunks/{EditorPreviewCheckout-SKKKKPGY.js → EditorPreviewCheckout-G6POTPY5.js} +1 -1
- package/dist/chunks/{SiteEditorProvider-5GEAEYON.js → SiteEditorProvider-WZNKW4ZJ.js} +1 -1
- package/dist/chunks/chunk-P4R7UXX3.js +249 -0
- package/dist/chunks/{chunk-XPQ4SKME.js → chunk-TWJV44ND.js} +1 -1
- package/dist/chunks/{chunk-5XTSI7QI.js → chunk-ZCVIYNS6.js} +1 -1
- package/dist/chunks/{fitment-data-LCDKZQGW.js → fitment-data-AEPN4DNQ.js} +1 -1
- package/dist/editor.css +1 -1
- package/dist/index.js +63 -39
- package/dist/words.d.ts +2 -0
- package/dist/words.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/chunk-4EH3ICKL.js +0 -249
- /package/dist/chunks/{SectionEditorShell-MADEVNR6.js → SectionEditorShell-LNTTPTET.js} +0 -0
- /package/dist/chunks/{chunk-4EH3ICKL.js.LEGAL.txt → chunk-P4R7UXX3.js.LEGAL.txt} +0 -0
- /package/dist/chunks/{chunk-VUQAJ7FV.js → chunk-UX74DN6T.js} +0 -0
- /package/dist/chunks/{chunk-JBQJN7EB.js → chunk-VRSJK3KG.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,116 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.38.0 — 2026-10-16
|
|
4
|
+
|
|
5
|
+
- **A left/right SET card draws the left wheel and its right-hand twin, and
|
|
6
|
+
the /wheels listing draws the same SET card** (Lewis approved the design on
|
|
7
|
+
2026-10-16, GG's four points; Stealth on hartesmetal.com). Measured live
|
|
8
|
+
before: both wheels were the same LEFT render; on a 390 phone each wheel was
|
|
9
|
+
104px, because the plate's inline `width` beat its `max-[800px]:w-[252px]`;
|
|
10
|
+
the listing drew Stealth as a one-slot "each" card; the price read "the
|
|
11
|
+
set" under a per-wheel figure.
|
|
12
|
+
- The second wheel is `Finish.srcRight` (efficient-backend #3297; contract
|
|
13
|
+
efficient-storefront #1692; `lib/api/types.ts` regenerated), only when the
|
|
14
|
+
first wheel is that finish's own `src` (`setSecondSrc`, `lib/wheels/set-mode`).
|
|
15
|
+
With no twin the band draws the first picture twice, as before.
|
|
16
|
+
- Phone (option A): each plate is the band's full width, stacked and level.
|
|
17
|
+
The 38px shift and `SET_PHONE_SHIFT_PX` are gone. The side-by-side width
|
|
18
|
+
rides `--sf-set-plate-w`, so the phone class can replace it.
|
|
19
|
+
- `PlpCard` uses the shared set rules: two slots (`wide`), the Set chip
|
|
20
|
+
(`withSetChip`, one copy now), the set words in the accent, the right-hand
|
|
21
|
+
twin, and its plate gap follows the listing gutter (`setGridGap`).
|
|
22
|
+
- Price word: `PER_WHEEL_UNIT` ("per wheel"), also read by the product page.
|
|
23
|
+
- ⚠️ Storefront: `scripts/test-set-card-two-slots.tsx` imports
|
|
24
|
+
`SET_PHONE_SHIFT_PX` and pins the 38px classes; the bump to 0.38.0 must
|
|
25
|
+
move it to option A.
|
|
26
|
+
Guard: `scripts/test-set-card-right-wheel.tsx`.
|
|
27
|
+
|
|
28
|
+
## 0.37.1 — 2026-10-16
|
|
29
|
+
|
|
30
|
+
- **The Customer Photo Grid shows or hides each part of its tiles, per
|
|
31
|
+
screen, and its tiles share one look** (card Gallery tiles on phone, Lewis
|
|
32
|
+
2026-10-16, Hartes US homepage: on a phone keep only the wheel name,
|
|
33
|
+
smaller, no car and no "01 / 09"; design
|
|
34
|
+
https://claude.ai/artifact/XydQQ2bzLGCpoZdNfB9Z5K). Images ▸ Display: chips
|
|
35
|
+
Tag · Eyebrow · Title · Meta · Card number; in the Phone view the same row
|
|
36
|
+
sets the phone (below 720px), untouched parts follow Desktop. A style set on
|
|
37
|
+
one tile's text (e.g. Title's Font size, with its own phone size) is stored
|
|
38
|
+
once on the section (`_partStyles["@title"]`) and reaches every tile; the
|
|
39
|
+
words stay each tile's own. The tile's fields now say Title and Meta
|
|
40
|
+
(N10.1). Nothing set draws as before. Needs efficient-web-builder 17.1.0
|
|
41
|
+
(this release takes ^17.1.1). Guard: `scripts/test-gallery-tile-display.tsx`.
|
|
42
|
+
|
|
43
|
+
- **On a phone, a hero grows to fit its words instead of pushing them off
|
|
44
|
+
the top of the page** (card [FIX] Hero Grows On Phone, GG 2026-10-16). The
|
|
45
|
+
hero's phone column is bottom-aligned in a word layer that covered a hero of
|
|
46
|
+
fixed height, so tall words rose above the page, under the header:
|
|
47
|
+
hartesmetal.com/dealers' heading began 181px above it at 390x844, and
|
|
48
|
+
hartesmetal.com.au's home slideshow 100px above it at 375x667. In the hero's
|
|
49
|
+
800px block of `app/globals.css` the hero (HeroSingle's section, the
|
|
50
|
+
slideshow) is now a column whose height is a minimum (the set phone height,
|
|
51
|
+
from 720px the desktop one, or `max(100vh, 680px)` unset), the slideshow's
|
|
52
|
+
track and slides size to the tallest slide, and the word layer is in the
|
|
53
|
+
flow at the hero's width. Measured on the live pages with these rules: every
|
|
54
|
+
heading starts at 152px or lower under the 116px header (AU home at 375x667:
|
|
55
|
+
hero 680 → 932px; US dealers: the layer is 375px, not 449px, so
|
|
56
|
+
`lib/fit-words` fits "Become" at 84.2px); 768x1024 does not move. It replaces
|
|
57
|
+
efficient-web-builder 16.0.2 / 17.0.1's `max-[720px]:` utilities, which put a
|
|
58
|
+
second phone line in one section; take it with web-builder 17.1.1.
|
|
59
|
+
Guard: `scripts/test-hero-grows-on-phone.ts`.
|
|
60
|
+
**The Customer Photo Grid sits in the site's column.** Its side gutter was on
|
|
61
|
+
the full-width `<section>` and nothing capped it, so a gallery set to Full width
|
|
62
|
+
ran towards the screen edges on a screen wider than the site (at 1920: 40..1880
|
|
63
|
+
while the site column is 200..1720). Lewis's ruling (card 66513) is that content
|
|
64
|
+
always sits on the column and Full width only lets the background run edge to
|
|
65
|
+
edge. Now the `<section>` keeps the background and the top/bottom spacing, and
|
|
66
|
+
one inner box caps at `--sf-site-width`, centres and carries the side gutter
|
|
67
|
+
(phone gutter too), in every frame of `GalleryGrid` and `DynamicGalleryGrid`.
|
|
68
|
+
Measured with the real classes: 390, 1440 and 1600 unchanged; 1920 → 200..1720,
|
|
69
|
+
the same column as Events. The rendered bytes change on purpose (declared in
|
|
70
|
+
`CHANGED_SECTIONS`). Guard: `scripts/test-gallery-caps-at-site-column.tsx`
|
|
71
|
+
(18 checks failed before the fix).
|
|
72
|
+
|
|
73
|
+
- **A gallery tile's Tag and its "01 / 09" number no longer draw on top of
|
|
74
|
+
each other.** They were two separately placed labels; on hartesmetal.com's
|
|
75
|
+
3 × 3 wall at 390px (114px tiles) the Tag ran 27px into the number on every
|
|
76
|
+
tile, and any narrow tile on any site did the same. They now share one top
|
|
77
|
+
row: the number keeps its width and the Tag ends in "…". The words at the
|
|
78
|
+
foot sit in their own box below that row, so a long car name cannot climb
|
|
79
|
+
into it (that line ends in "…" too). The gradient and every size are
|
|
80
|
+
unchanged. Customer Photo Grid and Tabbed Gallery both draw this tile.
|
|
81
|
+
Guard: `scripts/test-gallery-tile-top-row.tsx` (11 checks failed before the
|
|
82
|
+
fix).
|
|
83
|
+
|
|
84
|
+
**The Events (blog cards) section sits in the site's column.** Events copied
|
|
85
|
+
the Q&A section's frame: the side gutter on the full-width `<section>` and no
|
|
86
|
+
cap, so on a screen wider than the site its cards ran to the screen edges
|
|
87
|
+
(inovit.com.au/journal, "Driven by Innovation.", at 1920: 40..1880 while the
|
|
88
|
+
site column starts at 200). Now the `<section>` keeps the background and the
|
|
89
|
+
top/bottom spacing, and one inner box caps at `--sf-site-width`, centres and
|
|
90
|
+
carries the side gutter (phone gutter too), in all three frames (head inline,
|
|
91
|
+
head in its own Box, the one-line count). Measured on the live page with the new
|
|
92
|
+
classes: 200..1720 at 1920, 1440 unchanged. The rendered bytes change on
|
|
93
|
+
purpose. efficient-web-builder's Q&A section takes the same fix (its #121).
|
|
94
|
+
Guard: `scripts/test-events-caps-at-site-column.tsx`.
|
|
95
|
+
|
|
96
|
+
**On a wheel page no word is cut, and none is under 11px** (Hartes phone
|
|
97
|
+
audit R05-R10, 2026-10-16, read on hartesmetal.com and .com.au at 375x667 and
|
|
98
|
+
390x844).
|
|
99
|
+
|
|
100
|
+
- **Finish chips size to their words and wrap.** They were two equal columns
|
|
101
|
+
with a cut label, so on a phone every long finish read "BLACK/MACHIN…" (a
|
|
102
|
+
111px label for names 119-361px wide). A name longer than the row wraps its
|
|
103
|
+
words inside its chip. On desktop the chips also size to their words instead
|
|
104
|
+
of two equal columns.
|
|
105
|
+
- **The fit form's value line is not cut.** "Pick a model first" needed 128px
|
|
106
|
+
and had 122px at 375: the `pr-4` kept room for the ▾, which sits on the
|
|
107
|
+
label's line. The value now takes its whole cell, and wraps if still too long.
|
|
108
|
+
- **The related card's "Set" flag is 11px**, not 10px.
|
|
109
|
+
- Guard: `scripts/test-wheel-page-phone-words.tsx`.
|
|
110
|
+
|
|
111
|
+
- **Builds on efficient-web-builder 17.1.1** (the peer moves from `^17.0.0` to `^17.1.1`). 17.0.1: a hero grows to fit its words on a phone, one hover outline, the map fallback. 17.0.2: the four-side Padding row's kept sides (Bottom, Left, Right) name `reachedBy`, so the storefront's `test-panel-no-empty-rows` can follow each one back to its row. 17.1.0: a gallery's Display chips with phone answers; the published word types are written again by `scripts/write-editor-words.ts`. 17.1.1: the hero's phone layout moves back to the 800px line (this release's `globals.css`, #68), so the hero root at its defaults draws the same bytes as before 17.0.1.
|
|
112
|
+
- `test-shell-peer-range`: the builder caret is `^17.1.1`.
|
|
113
|
+
|
|
3
114
|
## 0.37.0 — 2026-10-16
|
|
4
115
|
|
|
5
116
|
**Builds on efficient-web-builder 17.0.0** (card [BUMP] Storefront Blocks To Latest Web Builder). The peers narrow: efficient-easel `^10.3.0` (was `^8.1.0`) and efficient-shell `^7.47.0` (was `^7.46.0`), with the builder at `^17.0.0`. The bump itself changes no code in `src/`; what moves is the builder's. It stacks on #55 (0.36.0, the header and footer in place on web-builder 16).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use client";import{F as jt,G as qt,H as _t,I as Ft,J as oe,K as Se,L as Dt,M as Mt,N as Je,O as Ut,Q as Xe,W as Wt,Z as Ze,_ as $t,a as At,b as Lt,c as Ot,d as Tt,ea as K,fa as Kt,ga as Yt,ha as zt}from"./chunk-
|
|
1
|
+
"use client";import{F as jt,G as qt,H as _t,I as Ft,J as oe,K as Se,L as Dt,M as Mt,N as Je,O as Ut,Q as Xe,W as Wt,Z as Ze,_ as $t,a as At,b as Lt,c as Ot,d as Tt,ea as K,fa as Kt,ga as Yt,ha as zt}from"./chunk-ZCVIYNS6.js";import{i as je,o as pe,w as T}from"./chunk-TWJV44ND.js";import{Ma as Rt,a as Et,c as te}from"./chunk-VRSJK3KG.js";import{r as It,s as Ce,t as H}from"./chunk-UX74DN6T.js";import{a as Ge,b as rr}from"./chunk-Y6SLVHK3.js";var Ht=Ge((ea,Bt)=>{"use strict";var ar="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";Bt.exports=ar});var Xt=Ge((ta,Jt)=>{"use strict";var or=Ht();function Vt(){}function Gt(){}Gt.resetWarningCache=Vt;Jt.exports=function(){function t(a,o,s,l,d,p){if(p!==or){var u=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 u.name="Invariant Violation",u}}t.isRequired=t;function e(){return t}var n={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:Gt,resetWarningCache:Vt};return n.PropTypes=n,n}});var Qt=Ge((aa,Zt)=>{"use strict";Zt.exports=Xt()();var na,ra});import{useEffect as z,useMemo as Ke,useRef as se,useState as g}from"react";var P=rr(Qt(),1);import x from"react";function en(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,a=Array(e);n<e;n++)a[n]=t[n];return a}function ir(t){if(Array.isArray(t))return t}function on(t,e,n){return(e=dr(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function sr(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var a,o,s,l,d=[],p=!0,u=!1;try{if(s=(n=n.call(t)).next,e!==0)for(;!(p=(a=s.call(n)).done)&&(d.push(a.value),d.length!==e);p=!0);}catch(v){u=!0,o=v}finally{try{if(!p&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(u)throw o}}return d}}function cr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,a)}return n}function nn(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?tn(Object(n),!0).forEach(function(a){on(t,a,n[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):tn(Object(n)).forEach(function(a){Object.defineProperty(t,a,Object.getOwnPropertyDescriptor(n,a))})}return t}function lr(t,e){if(t==null)return{};var n,a,o=ur(t,e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(a=0;a<s.length;a++)n=s[a],e.indexOf(n)===-1&&{}.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function ur(t,e){if(t==null)return{};var n={};for(var a in t)if({}.hasOwnProperty.call(t,a)){if(e.indexOf(a)!==-1)continue;n[a]=t[a]}return n}function sn(t,e){return ir(t)||sr(t,e)||mr(t,e)||cr()}function pr(t,e){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var a=n.call(t,e);if(typeof a!="object")return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function dr(t){var e=pr(t,"string");return typeof e=="symbol"?e:e+""}function Qe(t){"@babel/helpers - typeof";return Qe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qe(t)}function mr(t,e){if(t){if(typeof t=="string")return en(t,e);var n={}.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?en(t,e):void 0}}var j=function(e,n,a){var o=!!a,s=x.useRef(a);x.useEffect(function(){s.current=a},[a]),x.useEffect(function(){if(!o||!e)return function(){};var l=function(){if(s.current)return s.current.apply(s,arguments)};return e.on(n,l),function(){e.off(n,l)}},[o,n,e,s])},et=function(e){var n=x.useRef(e);return x.useEffect(function(){n.current=e},[e]),n.current},de=function(e){return e!==null&&Qe(e)==="object"},fr=function(e){return de(e)&&typeof e.then=="function"},gr=function(e){return de(e)&&typeof e.elements=="function"&&typeof e.createToken=="function"&&typeof e.createPaymentMethod=="function"&&typeof e.confirmCardPayment=="function"},rn="[object Object]",yr=function t(e,n){if(e===n)return!0;if(!de(e)||!de(n))return e===n;var a=Array.isArray(e),o=Array.isArray(n);if(a!==o)return!1;var s=Object.prototype.toString.call(e)===rn,l=Object.prototype.toString.call(n)===rn;if(s!==l)return!1;if(!s&&!a)return e===n;var d=Object.keys(e),p=Object.keys(n);if(d.length!==p.length)return!1;for(var u={},v=0;v<d.length;v+=1)u[d[v]]=!0;for(var b=0;b<p.length;b+=1)u[p[b]]=!0;var f=Object.keys(u);if(f.length!==d.length)return!1;var h=e,A=n,k=function(S){return t(h[S],A[S])};return f.every(k)},cn=function(e,n,a){return de(e)?Object.keys(e).reduce(function(o,s){var l=!de(n)||!yr(e[s],n[s]);return a.includes(s)?(l&&console.warn("Unsupported prop change: options.".concat(s," is not a mutable property.")),o):l?nn(nn({},o||{}),{},on({},s,e[s])):o},null):null},ln="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.",an=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ln;if(e===null||gr(e))return e;throw new Error(n)},hr=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ln;if(fr(e))return{tag:"async",stripePromise:Promise.resolve(e).then(function(o){return an(o,n)})};var a=an(e,n);return a===null?{tag:"empty"}:{tag:"sync",stripe:a}},vr=function(e){!e||!e._registerWrapper||!e.registerAppInfo||(e._registerWrapper({name:"react-stripe-js",version:"6.12.0"}),e.registerAppInfo({name:"react-stripe-js",version:"6.12.0",url:"https://stripe.com/docs/stripe-js/react"}))},qe=x.createContext(null);qe.displayName="ElementsContext";var un=function(e,n){if(!e)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 e},nt=function(e){var n=e.stripe,a=e.options,o=e.children,s=x.useMemo(function(){return hr(n)},[n]),l=x.useState(function(){return{stripe:s.tag==="sync"?s.stripe:null,elements:s.tag==="sync"?s.stripe.elements(a):null}}),d=sn(l,2),p=d[0],u=d[1];x.useEffect(function(){var f=!0,h=function(k){u(function(C){return C.stripe?C:{stripe:k,elements:k.elements(a)}})};return s.tag==="async"&&!p.stripe?s.stripePromise.then(function(A){A&&f&&h(A)}):s.tag==="sync"&&!p.stripe&&h(s.stripe),function(){f=!1}},[s,p,a]);var v=et(n);x.useEffect(function(){v!==null&&v!==n&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")},[v,n]);var b=et(a);return x.useEffect(function(){if(p.elements){var f=cn(a,b,["clientSecret","fonts"]);f&&p.elements.update(f)}},[a,b,p.elements]),x.useEffect(function(){vr(p.stripe)},[p.stripe]),x.createElement(qe.Provider,{value:p},o)};nt.propTypes={stripe:P.default.any,options:P.default.object};var pn=function(e){var n=x.useContext(qe);return un(n,e)},dn=function(){var e=pn("calls useElements()"),n=e.elements;return n},br=function(e){var n=e.children,a=pn("mounts <ElementsConsumer>");return n(a)};br.propTypes={children:P.default.func.isRequired};var xr=x.createContext(null);xr.displayName="CheckoutContext";var mn=x.createContext(null);mn.displayName="CheckoutSdkContext";var tt=function(e){var n=x.useContext(mn),a=x.useContext(qe);if(n){if(a)throw new Error("You cannot wrap the part of your app that ".concat(e," in both a checkout provider and <Elements> provider."));return n}else return un(a,e)},kr=["mode"],Cr=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},N=function(e,n,a){var o="".concat(Cr(e),"Element"),s=function(u){var v=u.id,b=u.className,f=u.options,h=f===void 0?{}:f,A=u.onBlur,k=u.onFocus,C=u.onReady,S=u.onChange,D=u.onEscape,O=u.onClick,J=u.onLoadError,V=u.onLoaderStart,me=u.onNetworksChange,ne=u.onConfirm,Ne=u.onCancel,re=u.onShippingAddressChange,Ee=u.onShippingRateChange,fe=u.onSavedPaymentMethodRemove,Re=u.onSavedPaymentMethodUpdate,ge=u.onAvailablePaymentMethodsChange,Q=tt("mounts <".concat(o,">")),ee="elements"in Q?Q.elements:null,M="checkoutSdk"in Q?Q.checkoutSdk:null,ye=x.useState(null),ce=sn(ye,2),I=ce[0],he=ce[1],_=x.useRef(null),ae=x.useRef(null);j(I,"blur",A),j(I,"focus",k),j(I,"escape",D),j(I,"click",O),j(I,"loaderror",J),j(I,"loaderstart",V),j(I,"networkschange",me),j(I,"confirm",ne),j(I,"cancel",Ne),j(I,"shippingaddresschange",re),j(I,"shippingratechange",Ee),j(I,"savedpaymentmethodremove",fe),j(I,"savedpaymentmethodupdate",Re),j(I,"availablepaymentmethodschange",ge),j(I,"change",S);var U;C&&(e==="expressCheckout"?U=C:U=function(){C(I)}),j(I,"ready",U),x.useLayoutEffect(function(){if(_.current===null&&ae.current!==null&&(ee||M)){var w=null;if(M){var B=M,ve=M;switch(e){case"paymentForm":w=ve.createForm(h);break;case"payment":w=B.createPaymentElement(h);break;case"address":if("mode"in h){var be=h.mode,ze=lr(h,kr);if(be==="shipping")w=B.createShippingAddressElement(ze);else if(be==="billing")w=B.createBillingAddressElement(ze);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":w=B.createExpressCheckoutElement(h);break;case"currencySelector":w=M.createCurrencySelectorElement();break;case"taxId":w=B.createTaxIdElement(h);break;case"contactDetails":w=B.createContactDetailsElement();break;case"linkSignup":if("createLinkSignupElement"in M)w=M.createLinkSignupElement(h);else throw new Error("<LinkSignupElement> requires <CheckoutElementsProvider> and is not supported inside <CheckoutFormProvider>.");break;case"terms":w=B.createTermsElement(h);break;default:throw new Error("<".concat(o,"> is not supported inside a checkout provider. Use an <Elements> provider instead."))}}else ee&&(w=ee.create(e,h));_.current=w,he(w),w&&w.mount(ae.current)}},[ee,M,h]);var le=et(h);return x.useEffect(function(){if(_.current){var w=cn(h,le,["paymentRequest"]);w&&"update"in _.current&&_.current.update(w)}},[h,le]),x.useLayoutEffect(function(){return function(){if(_.current&&typeof _.current.destroy=="function")try{_.current.destroy(),_.current=null}catch{}}},[]),x.createElement("div",{id:v,className:b,ref:ae})},l=function(u){tt("mounts <".concat(o,">"));var v=u.id,b=u.className;return x.createElement("div",{id:v,className:b})},d=n?l:s;return d.propTypes={id:P.default.string,className:P.default.string,onChange:P.default.func,onBlur:P.default.func,onFocus:P.default.func,onReady:P.default.func,onEscape:P.default.func,onClick:P.default.func,onLoadError:P.default.func,onLoaderStart:P.default.func,onNetworksChange:P.default.func,onConfirm:P.default.func,onCancel:P.default.func,onShippingAddressChange:P.default.func,onShippingRateChange:P.default.func,onSavedPaymentMethodRemove:P.default.func,onSavedPaymentMethodUpdate:P.default.func,onAvailablePaymentMethodsChange:P.default.func,options:P.default.object},d.displayName=o,d.__elementType=e,d},E=typeof window>"u",Sr=x.createContext(null);Sr.displayName="EmbeddedCheckoutProviderContext";var fn=function(){var e=tt("calls useStripe()"),n=e.stripe;return n},ia=N("auBankAccount",E),sa=N("card",E),ca=N("cardNumber",E),la=N("cardExpiry",E),ua=N("cardCvc",E),pa=N("currencySelector",E),da=N("iban",E),gn=N("payment",E),ma=N("expressCheckout",E),fa=N("paymentRequestButton",E),ga=N("linkAuthentication",E),ya=N("linkSignup",E),ha=N("contactDetails",E),va=N("address",E),ba=N("shippingAddress",E),xa=N("paymentMethodMessaging",E),ka=N("taxId",E),Ca=N("issuingCardNumberDisplay",E),Sa=N("issuingCardCvcDisplay",E),wa=N("issuingCardExpiryDisplay",E),Pa=N("issuingCardPinDisplay",E),Na=N("issuingCardCopyButton",E),Ea=N("terms",E);function De(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?De=function(e){return typeof e}:De=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},De(t)}var vn="dahlia",wr=function(e){return e===3?"v3":e},bn="https://js.stripe.com",Pr="".concat(bn,"/").concat(vn,"/stripe.js"),Nr=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,Er=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,yn="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",Rr=function(e){return Nr.test(e)||Er.test(e)},Ir=function(){for(var e=document.querySelectorAll('script[src^="'.concat(bn,'"]')),n=0;n<e.length;n++){var a=e[n];if(Rr(a.src))return a}return null},hn=function(e){var n=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(Pr).concat(n);var o=document.head||document.body;if(!o)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return o.appendChild(a),a},Ar=function(e,n){!e||!e._registerWrapper||e._registerWrapper({name:"stripe-js",version:"9.17.0",startTime:n})},we=null,_e=null,Fe=null,Lr=function(e){return function(n){e(new Error("Failed to load Stripe.js",{cause:n}))}},Or=function(e,n){return function(){window.Stripe?e(window.Stripe):n(new Error("Stripe.js not available"))}},Tr=function(e){return we!==null?we:(we=new Promise(function(n,a){if(typeof window>"u"||typeof document>"u"){n(null);return}if(window.Stripe&&e&&console.warn(yn),window.Stripe){n(window.Stripe);return}try{var o=Ir();if(o&&e)console.warn(yn);else if(!o)o=hn(e);else if(o&&Fe!==null&&_e!==null){var s;o.removeEventListener("load",Fe),o.removeEventListener("error",_e),(s=o.parentNode)===null||s===void 0||s.removeChild(o),o=hn(e)}Fe=Or(n,a),_e=Lr(a),o.addEventListener("load",Fe),o.addEventListener("error",_e)}catch(l){a(l);return}}),we.catch(function(n){return we=null,Promise.reject(n)}))},jr=function(e,n,a){if(e===null)return null;var o=n[0];if(typeof o!="string")throw new Error("Expected publishable key to be of type string, got type ".concat(De(o)," instead."));var s=o.match(/^pk_test/),l=wr(e.version),d=vn;s&&l!==d&&console.warn("Stripe.js@".concat(l," was loaded on the page, but @stripe/stripe-js@").concat("9.17.0"," expected Stripe.js@").concat(d,". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var p=e.apply(void 0,n);return Ar(p,a),p},Pe,xn=!1,kn=function(){return Pe||(Pe=Tr(null).catch(function(e){return Pe=null,Promise.reject(e)}),Pe)};Promise.resolve().then(function(){return kn()}).catch(function(t){xn||console.warn(t)});var Cn=function(){for(var e=arguments.length,n=new Array(e),a=0;a<e;a++)n[a]=arguments[a];xn=!0;var o=Date.now();return kn().then(function(s){return jr(s,n,o)})};var qr="sf:gclid",_r="sf:fbclid",Fr=2160*60*60*1e3;function Pn(){return typeof window<"u"}function Sn(t){let e=Ce.getItem(t);if(!e)return"";try{let{v:n,t:a}=JSON.parse(e);return!n||typeof a!="number"||Date.now()-a>Fr?"":n}catch{return""}}function wn(t){if(!Pn())return"";let e=t.replace(/([.$?*|{}()[\]\\/+^])/g,"\\$1"),n=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return n?decodeURIComponent(n[1]):""}function Nn(){if(!Pn())return{};let t=Sn(qr),e=Sn(_r),n=wn("_fbp"),a=wn("_fbc");!a&&e&&(a=`fb.1.${Date.now()}.${e}`);let o={};return t&&(o.gclid=t),e&&(o.fbclid=e),n&&(o.fbp=n),a&&(o.fbc=a),o}var En="sf:meta-purchases",Dr=20;function In(){return typeof window>"u"||window.parent!==window}function Mr(...t){try{if(In()||typeof window.fbq!="function")return;window.fbq(...t)}catch{}}var Rn=new Set;function Ur(t){if(Rn.has(t))return!1;Rn.add(t);try{let e=JSON.parse(Ce.getItem(En)??"[]");if(e.includes(t))return!1;Ce.setItem(En,JSON.stringify([...e,t].slice(-Dr)))}catch{}return!0}function Wr(t){return[...new Set(t.filter(Se).flatMap(e=>e.components.map(n=>n.partNumber)))]}function An(t){let e=t.confirmation;In()||!Ur(e.orderNumber)||Mr("track","Purchase",{value:Number(e.grandTotal),currency:e.currency,content_type:"product",content_ids:Wr(t.lines)},{eventID:e.orderNumber})}var rt="checkout-afterpay-context",Me="checkout-gocardless-context",at="checkout-zip-context",Ue="checkout-klarna-context";function $r({evidence:t,parked:e}){return t?{action:"capture",evidence:t,parked:e}:e?{action:"settle",parked:e}:{action:"ignore"}}function Kr(t,e){let n=t.getItem(e);if(t.removeItem(e),!n)return null;try{return JSON.parse(n)}catch{return null}}var Ln={name:"Afterpay",legParam:"afterpay",legValues:["confirm","cancel"],storageKey:rt,evidenceFrom(t,e){return e==="cancel"||(t.get("status")??"").toUpperCase()==="CANCELLED"?null:t.get("orderToken")},requestFrom:t=>({token:t})},On={name:"Zip",legParam:"zip",legValues:["return"],storageKey:at,evidenceFrom(t){let e=(t.get("result")??"").toLowerCase();return e==="cancelled"||e==="declined"?null:t.get("checkoutId")},requestFrom:t=>({checkoutId:t})};async function ot(t,e){let n=new URLSearchParams(e.search),a=n.get(t.legParam);if(!a||!t.legValues.includes(a))return;let o=Kr(e.storage,t.storageKey),s=t.evidenceFrom(n,a);e.scrubQuery();let l=$r({evidence:s,parked:o});if(l.action!=="ignore"){if(e.page.clearCart(),l.action==="settle"){e.page.note(`The ${t.name} payment was not completed \u2014 our team will follow up on payment.`),e.page.land(l.parked.confirmation);return}e.page.setConfirming(!0);try{let d=await e.capture(t.requestFrom(l.evidence));d.status==="paid"?e.page.markPaid():e.page.note(`${t.name} declined the payment \u2014 our team will follow up on payment.`),e.page.land(l.parked?.confirmation??d)}catch{l.parked?(e.page.note(`We could not confirm the ${t.name} payment \u2014 our team will follow up on payment.`),e.page.land(l.parked.confirmation)):e.page.fail(`We could not confirm your ${t.name} payment. Please contact us before trying again \u2014 your payment may already have been taken.`)}finally{e.page.setConfirming(!1)}}}import{Fragment as q,jsx as r,jsxs as c}from"react/jsx-runtime";function Tn(t){let e=t.indexOf(`
|
|
3
3
|
`);return e===-1?[t,""]:[t.slice(0,e),t.slice(e+1)]}function jn(t,{canParkContext:e}={canParkContext:!0}){let n=t.paymentMethods,a=[];return n.includes("card")&&a.push({key:"card",title:"Card",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("paypal")&&t.paypalClientId&&a.push({key:"paypal",title:"PayPal",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAYPAL \xB7 CARDS"})}),n.includes("afterpay")&&a.push({key:"afterpay",title:"Afterpay",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"4 \xD7 INTEREST-FREE"})}),n.includes("square")&&t.squareApplicationId&&t.squareLocationId&&a.push({key:"square",title:"Card (Square)",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA \xB7 MC \xB7 AMEX"})}),n.includes("gocardless")&&e&&a.push({key:"gocardless",title:"Bank Direct Debit",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY BY BANK"})}),n.includes("zip")&&a.push({key:"zip",title:"Zip",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY IN 4"})}),n.includes("klarna")&&e&&a.push({key:"klarna",title:"Klarna",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY LATER"})}),a.push({key:"bank",title:"Bank transfer",body:null,price:r("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Invoiced"})}),a}function ct({site:t,logo:e,preview:n=!1}){let{items:a,totals:o,coupon:s,refuseCoupon:l,deliveryOptions:d,shippingMethodId:p,setShippingMethodId:u,identify:v,clearCapturedCart:b}=Je(),f=d.find(i=>i.id===p)?.pickupLocation??null,{country:h,countries:A,activeCountry:k,formatMoney:C}=oe(),[S,D]=g(()=>jn(t)[0].key),[O,J]=g(!0);z(()=>{J(It(H))},[]);let[V,me]=g(!1),[ne,Ne]=g(""),[re,Ee]=g(""),[fe,Re]=g(""),[ge,Q]=g(""),[ee,M]=g(""),[ye,ce]=g(""),[I,he]=g(""),[_,ae]=g(""),[U,le]=g(()=>h||A[0]?.code||""),[w,B]=g(""),[ve,be]=g([]),Mn=Ke(()=>A.find(i=>i.code===U)??k,[A,U,k])?.postalLabel||"Postal Code",Un=ve[0]?.divisionType||"State / Province";z(()=>{if(!U){be([]);return}let i=!1;return T.listCountrySubdivisions(U).then(m=>{i||(be(m),B(""))}),()=>{i=!0}},[U]);let[X,lt]=g(null),[ut,pt]=g([]),[Ie,Ae]=g("new"),[Be,dt]=g(!1),[mt,Wn]=g("Home"),[ft,gt]=g(null),[W]=g(()=>zt()),[Le,$]=g(null),[yt,xe]=g(null),[ht,$n]=g(null),[Kn,Yn]=g(!1),[zn,Bn]=g(!1),[G,He]=g(null),[vt,ue]=g(!1),[bt,Z]=g(null),[Hn,Vn]=g(!1),[Gn,xt]=g(!1),[Jn,Xn]=g(!1),[Zn,kt]=g(!1),Ct=se(!1);z(()=>{n||Ct.current||!a.some(Se)||(Ct.current=!0,jt({lines:a,currency:o.currency,value:o.subtotal-o.discount,coupon:s?.valid?s.code:void 0}))},[a,o,s,n]),z(()=>{v(ne,re.trim()||void 0)},[ne,re,v]);let St=se(null),[Oe,Qn]=g(null);z(()=>{let i=St.current;if(!Oe||!i)return;let m=()=>i.style.setProperty("--sf-checkout-header-h",`${Oe.offsetHeight}px`);m();let y=new ResizeObserver(m);return y.observe(Oe),()=>y.disconnect()},[Oe]),z(()=>{let i=y=>({setConfirming:y,land:$,markPaid:()=>ue(!0),note:Z,fail:xe,clearCart:b}),m={search:window.location.search,storage:H,scrubQuery:()=>window.history.replaceState(null,"",window.location.pathname)};ot(Ln,{...m,capture:T.captureAfterpayPayment,page:i(Vn)}),ot(On,{...m,capture:T.captureZipPayment,page:i(Xn)})},[]),z(()=>{let m=new URLSearchParams(window.location.search).get("gocardless");if(m!=="confirm"&&m!=="cancel")return;let y=H.getItem(Me);if(H.removeItem(Me),window.history.replaceState(null,"",window.location.pathname),!y)return;let R;try{R=JSON.parse(y)}catch{return}if(b(),m==="cancel"){Z("The direct debit was not set up \u2014 our team will follow up on payment."),$(R.confirmation);return}xt(!0),T.completeGocardlessPayment({idempotencyKey:R.idempotencyKey}).then(L=>{L.status==="paid"?ue(!0):L.status==="declined"?Z("The direct debit was declined \u2014 our team will follow up on payment."):Z("Your direct debit is set up \u2014 the payment is collecting and will clear in a few days.")}).catch(()=>{Z("We could not confirm the direct debit \u2014 our team will follow up on payment.")}).finally(()=>{$(R.confirmation),xt(!1)})},[]),z(()=>{let i=new URLSearchParams(window.location.search),m=i.get("klarna");if(m!=="confirm"&&m!=="cancel")return;let y=H.getItem(Ue);H.removeItem(Ue);let R=i.get("authorization_token");if(window.history.replaceState(null,"",window.location.pathname),!y)return;let L;try{L=JSON.parse(y)}catch{return}if(b(),m==="cancel"||!R){Z("The Klarna payment was not completed \u2014 our team will follow up on payment."),$(L.confirmation);return}kt(!0),T.captureKlarnaPayment({idempotencyKey:L.idempotencyKey,authorizationToken:R}).then(F=>{F.status==="paid"?ue(!0):F.status==="declined"?Z("Klarna declined the payment \u2014 our team will follow up on payment."):Z("Your Klarna payment is being reviewed \u2014 we'll confirm the outcome shortly.")}).catch(()=>{Z("We could not confirm the Klarna payment \u2014 our team will follow up on payment.")}).finally(()=>{$(L.confirmation),kt(!1)})},[]);function wt(i){let[m,y]=Tn(i.address);Q(m),M(y),ce(i.city),he(i.zip_code),i.country&&le(i.country),i.phone&&ae(i.phone)}z(()=>{let i=!1;return(async()=>{try{let[m,y,R]=await Promise.all([pe.me(),pe.myProfile().catch(()=>null),pe.myAddresses().catch(()=>[])]);if(i)return;lt(m);let L=R.filter(ke=>ke.is_active);pt(L),Ne(m.email);let F=(y?.contact_name??"").split(/\s+/);Ee(m.first_name||F[0]||""),Re(m.last_name||F.slice(1).join(" "));let Nt=m.phone||y?.phone;Nt&&ae(Nt);let Ve=L.find(ke=>ke.id===m.default_delivery_location)??L[0];if(Ve)Ae(Ve.id),wt(Ve);else if(y){let[ke,nr]=Tn(y.address??"");Q(ke),M(nr),ce(y.city??""),he(y.zip_code??""),y.country&&le(y.country)}}catch{}})(),()=>{i=!0}},[]);function er(){pe.logout(),lt(null),pt([]),Ae("new"),dt(!1)}let Te=Ke(()=>jn(t,{canParkContext:O}),[t,O]);z(()=>{Te.some(i=>i.key===S)||D(Te[0].key)},[Te,S]);let Pt=ee.trim()?`${ge}
|
|
4
4
|
${ee.trim()}`:ge;async function tr(){if(n||V||a.length===0||o.repricing)return;let i=a.filter(Se).flatMap(m=>Tt(m.components,m.qty));if(i.length===0){xe("Pick a size on each wheel's product page before checking out.");return}me(!0),xe(null);try{let y=await(X?T.createOrderAuthed:T.createOrder)({customer:{email:ne,name:`${re} ${fe}`.trim(),phone:_.trim()||void 0,address:Pt,city:ye,state:w||void 0,zipCode:I,country:U},items:i,currency:o.currency,idempotencyKey:W,shippingMethodId:p??void 0,couponCode:Lt(s),...Nn()});if(qt({confirmation:y,lines:a,adsSendTo:t.googleAdsId&&t.googleAdsConversionLabel?`${t.googleAdsId}/${t.googleAdsConversionLabel}`:null}),An({confirmation:y,lines:a}),b(),X&&Be&&Ie==="new")try{await pe.createAddress({label:mt.trim()||"Home",contact_name:`${re} ${fe}`.trim(),phone:_.trim(),address:Pt,city:ye,zip_code:I,country:U}),gt("Address saved to your account.")}catch{gt("We couldn't save the address to your account \u2014 you can add it under Account \u2192 Addresses.")}if(S==="card"&&t.paymentMethods.includes("card")){let R=await T.createPaymentIntent({idempotencyKey:W});He(y),$n(R)}else if(S==="paypal"&&t.paymentMethods.includes("paypal"))He(y),Yn(!0);else if(S==="afterpay"&&t.paymentMethods.includes("afterpay")){let R=window.location.origin,L=await T.createAfterpayCheckout({idempotencyKey:W,confirmUrl:`${R}/checkout?afterpay=confirm`,cancelUrl:`${R}/checkout?afterpay=cancel`}),F={idempotencyKey:W,confirmation:y};H.setItem(rt,JSON.stringify(F)),window.location.assign(L.redirectCheckoutUrl);return}else if(S==="square"&&t.paymentMethods.includes("square"))He(y),Bn(!0);else if(S==="gocardless"&&t.paymentMethods.includes("gocardless")){let R=window.location.origin,L=await T.createGocardlessBillingRequest({idempotencyKey:W,confirmUrl:`${R}/checkout?gocardless=confirm`,cancelUrl:`${R}/checkout?gocardless=cancel`}),F={idempotencyKey:W,confirmation:y};H.setItem(Me,JSON.stringify(F)),window.location.assign(L.authorisationUrl);return}else if(S==="zip"&&t.paymentMethods.includes("zip")){let R=window.location.origin,L=await T.createZipCheckout({idempotencyKey:W,redirectUrl:`${R}/checkout?zip=return`}),F={idempotencyKey:W,confirmation:y};H.setItem(at,JSON.stringify(F)),window.location.assign(L.redirectUrl);return}else if(S==="klarna"&&t.paymentMethods.includes("klarna")){let R=window.location.origin,L=await T.createKlarnaCheckout({idempotencyKey:W,confirmUrl:`${R}/checkout?klarna=confirm`,cancelUrl:`${R}/checkout?klarna=cancel`}),F={idempotencyKey:W,confirmation:y};H.setItem(Ue,JSON.stringify(F)),window.location.assign(L.redirectUrl);return}else $(y)}catch(m){let y=Ot(m);y?(l(y),xe(`${y} Your order has not been placed. Place it again to continue without the code.`)):xe(m instanceof je?m.message:"Could not place the order. Please try again."),me(!1)}}return Le?c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[r("h1",{className:"font-display text-3xl",children:vt?"Payment received":"Order received"}),c("p",{className:"text-fg-dim",children:[vt?c(q,{children:["Thank you \u2014 your payment for order"," ",r("span",{className:"font-mono text-fg",children:Le.orderNumber})," has gone through."," "]}):c(q,{children:["Thank you \u2014 your order ",r("span",{className:"font-mono text-fg",children:Le.orderNumber})," is being reviewed by our team."," "]}),X?c(q,{children:["Track it under"," ",r(te,{href:"/account/orders",className:"text-accent underline",children:"your orders"}),"."]}):r(q,{children:"We\u2019ve emailed you a link to set a password and track it."})]}),bt&&r("p",{className:"text-sm text-fg-dim",children:bt}),ft&&r("p",{className:"text-sm text-fg-dim",children:ft}),!X&&c("p",{className:"text-sm text-fg-dim",children:["You can also"," ",r(te,{href:`/track?order=${encodeURIComponent(Le.orderNumber)}`,className:"text-accent underline",children:"track this order"})," ","anytime with just your order number and email \u2014 no password needed."]}),r(te,{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"})]}):Hn?c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[r("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),r("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Afterpay \u2014 one moment."})]}):Gn?c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[r("h1",{className:"font-display text-3xl",children:"Setting up your direct debit\u2026"}),r("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Confirming with GoCardless \u2014 one moment."})]}):Jn?c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[r("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),r("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Zip \u2014 one moment."})]}):Zn?c("div",{className:"flex min-h-screen flex-col items-center justify-center gap-4 bg-bg px-6 text-center text-fg",children:[r("h1",{className:"font-display text-3xl",children:"Confirming your payment\u2026"}),r("p",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Checking with Klarna \u2014 one moment."})]}):ht?r(Yr,{payment:ht,onPaid:()=>{ue(!0),$(G)},onSkip:()=>$(G)}):Kn&&G?r(Hr,{confirmation:G,clientId:t.paypalClientId??"",idemKey:W,onPaid:()=>{ue(!0),$(G)},onSkip:()=>$(G)}):zn&&G?r(Gr,{confirmation:G,applicationId:t.squareApplicationId??"",locationId:t.squareLocationId??"",environment:t.squareEnvironment??"production",idemKey:W,onPaid:()=>{ue(!0),$(G)},onSkip:()=>$(G)}):c("div",{ref:St,className:"bg-bg text-fg",children:[c("header",{ref:Qn,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-[22px] 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:[c(te,{href:"/",className:"inline-flex items-center gap-2.5 font-mono text-[13px] uppercase tracking-[0.26em] text-fg-dim transition-colors hover:text-accent",children:["\u2190",r("span",{className:"max-[640px]:hidden",children:"Back to shop"})]}),r(te,{href:"/","aria-label":`${t.name} home`,className:"inline-flex items-center justify-center",children:r(Wt,{variant:"header",scrolled:!0,src:e?.url??null,reverse:e?.reverse??!1,reversedSrc:e?.reversed??null,inkIsDark:e?.inkIsDark??null,size:e?.size??"medium",sizePx:e?.sizePx??null,siteName:t.name})}),t.cardPayments?c("span",{className:"flex items-center justify-end gap-2.5 font-mono text-[12px] uppercase tracking-[0.26em] text-fg-dim",children:[r("span",{className:"text-green",children:"\u25CF"}),r("span",{className:"max-[640px]:hidden",children:"Encrypted \xB7"})," Stripe"]}):r("span",{})]}),c("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:[r("span",{className:"inline-flex items-center bg-accent px-2.5 py-1 font-bold text-bg",children:"Checkout"}),r("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(i=>c("span",{className:["relative flex items-center gap-2 transition-colors",i.state==="pending"?"text-fg-dim":"text-fg",i.state==="active"?"font-bold after:absolute after:inset-x-0 after:-bottom-1 after:h-[2px] after:bg-accent":""].join(" "),children:[r("span",{className:i.state==="done"?"text-accent font-bold":"",children:i.n}),r("span",{children:i.label})]},i.n))})]}),c("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-9 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:[c("div",{children:[c(We,{num:"N\xB0 01",title:"Contact",children:[r(K,{label:"Email",hint:X?c(q,{children:["Signed in \xB7"," ",r("button",{type:"button",onClick:er,className:"underline transition-colors hover:text-accent",children:"Not you? Sign out"})]}):void 0,children:r("input",{type:"email",value:ne,onChange:i=>Ne(i.target.value),placeholder:"you@example.com",readOnly:X!==null,className:Y+(X?" opacity-70":"")})}),c(_n,{children:[r(K,{label:"First name",children:r("input",{type:"text",value:re,onChange:i=>Ee(i.target.value),className:Y})}),r(K,{label:"Last name",children:r("input",{type:"text",value:fe,onChange:i=>Re(i.target.value),className:Y})})]})]}),c(We,{num:"N\xB0 02",title:f?"Collection":"Shipping address",children:[f?c("div",{className:"grid gap-1.5 text-[14px] leading-[1.6]",children:[r("span",{className:"font-medium",children:f.name}),[f.address,f.city,f.state,f.zipCode,f.country].filter(Boolean).length>0&&r("span",{className:"opacity-80",children:[f.address,f.city,f.state,f.zipCode,f.country].filter(Boolean).join(", ")}),f.openingHours&&r("span",{className:"opacity-80",children:f.openingHours}),f.instructions&&r("span",{className:"opacity-80",children:f.instructions}),r("span",{className:"mt-1 font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"No delivery address needed"})]}):c(q,{children:[X!==null&&ut.length>0&&c("div",{className:"grid gap-2.5",children:[ut.map(i=>r($e,{active:Ie===i.id,onClick:()=>{Ae(i.id),wt(i)},title:i.label,body:i.formatted_address,price:null},i.id)),r($e,{active:Ie==="new",onClick:()=>Ae("new"),title:"New address",body:null,price:null})]}),r(K,{label:"Address line 1",children:r("input",{type:"text",value:ge,onChange:i=>Q(i.target.value),className:Y})}),r(K,{label:"Address line 2",children:r("input",{type:"text",value:ee,onChange:i=>M(i.target.value),placeholder:"Apartment, unit, garage bay\u2026",className:Y})}),c(_n,{cols:"three",children:[r(K,{label:"City",children:r("input",{type:"text",value:ye,onChange:i=>ce(i.target.value),className:Y})}),r(K,{label:Mn,children:r("input",{type:"text",value:I,onChange:i=>he(i.target.value),className:Y})}),r(K,{label:"Country",separate:!0,children:r(Ze,{value:U,onChange:i=>le(i.target.value),className:Y+" pr-10",style:qn,children:A.map(i=>r("option",{value:i.code,children:i.name},i.code))})})]}),r(K,{label:Un,separate:!0,children:ve.length>0?c(Ze,{value:w,onChange:i=>B(i.target.value),className:Y+" pr-10",style:qn,children:[r("option",{value:"",children:"Select\u2026"}),ve.map(i=>r("option",{value:i.code||i.name,children:i.name},i.code||i.name))]}):r("input",{type:"text",value:w,onChange:i=>B(i.target.value),className:Y})})]}),r(K,{label:"Phone",children:r("input",{type:"tel",value:_,onChange:i=>ae(i.target.value),placeholder:"+44 7700 900000",className:Y})}),!f&&X!==null&&Ie==="new"&&c(q,{children:[r(Jr,{checked:Be,onChange:dt,label:"Save this address to my account"}),Be&&r(K,{label:"Address label",children:r("input",{type:"text",value:mt,onChange:i=>Wn(i.target.value),placeholder:"Home",className:Y})})]})]}),r(We,{num:"N\xB0 03",title:"Shipping",children:c("div",{className:"grid gap-2.5",children:[d.map(i=>{let m=i.pickupLocation,y=m?[m.address,m.city,m.state,m.zipCode].filter(Boolean).join(", "):null;return r($e,{active:p===i.id,onClick:()=>u(i.id),title:m?`${i.name} \u2014 ${m.name}`:i.name,body:m?[y,m.openingHours,m.instructions,i.description].filter(Boolean).join(" \xB7 "):i.description||null,price:o.freeShipping||i.amount===0?"Free":C(i.amount,o.currency),tag:i.tag||void 0},i.id)}),d.length===0&&r("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Shipping is arranged after your order is reviewed."})]})}),c(We,{num:"N\xB0 04",title:"Payment",children:[r("div",{className:"grid gap-2.5",children:Te.map(i=>r($e,{active:S===i.key,onClick:()=>D(i.key),title:i.title,body:i.body,price:i.price,tag:i.tag},i.key))}),S==="card"?r("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."}):S==="paypal"?r("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."}):S==="afterpay"?r("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."}):S==="square"?r("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."}):S==="gocardless"?r("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."}):S==="zip"?r("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."}):S==="klarna"?r("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."}):r("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."})]})]}),c("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:[c("header",{className:"flex items-center justify-between border-b border-accent bg-accent px-6 py-3.5 font-mono text-[13px] font-bold uppercase tracking-[0.28em] text-bg",children:[r("span",{children:"Your order"}),r(te,{href:"/wheels",className:"text-bg/80 transition-colors hover:text-bg",children:"Edit \u2197"})]}),r("div",{className:"flex flex-col px-6 py-2",children:a.length===0?c("div",{className:"py-8 text-center font-serif text-[16px] italic leading-[1.5] text-fg-dim",children:["Your cart is empty. ",r(te,{href:"/wheels",className:"text-accent underline-offset-4 hover:underline",children:"Browse the catalog \u2192"})]}):a.map(i=>r(Xr,{slug:i.slug,name:i.name,qty:i.qty,config:i.config,configSummary:Zr(i.config),price:Dt(i,o.currency)??0,currency:o.currency},i.id))}),r("div",{className:"border-t border-line px-6 pt-5",children:r(Yt,{customerEmail:ne})}),c("div",{className:"flex flex-col gap-2 border-t border-line mt-5 px-6 pt-5",children:[r(ie,{label:"Subtotal",value:C(o.subtotal,o.currency)}),o.discount>0&&s?.valid&&r(ie,{label:`Coupon \xB7 ${s.code}`,value:c("span",{className:"font-semibold text-green",children:["\u2212 ",C(o.discount,o.currency)]})}),s?.deferred&&r(ie,{label:`Coupon \xB7 ${s.code}`,value:At}),s?.valid&&s.effects?.gift&&r(ie,{label:`Free gift \xB7 ${s.effects.gift.partNumber}${s.effects.gift.quantity>1?` \xD7${s.effects.gift.quantity}`:""}`,value:r("span",{className:"font-semibold text-green",children:"Free"})}),r(ie,{label:"Shipping",value:o.shippingStatus==="free"?r("span",{className:"font-semibold text-green",children:"Free"}):_t(o.shippingStatus)??C(o.shipping,o.currency)}),o.tax&&(o.tax.charged?r(ie,{label:o.tax.inclusive?`${o.tax.name} included \xB7 ${o.tax.rate}%`:o.tax.name,value:C(o.tax.amount,o.currency)}):o.tax.name?r(ie,{label:o.tax.name,value:"Calculated at checkout"}):null)]}),c("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:[r("span",{className:"font-display text-[20px] font-bold uppercase tracking-[0.04em] text-fg",children:"Total"}),r("span",{className:"text-right font-display text-[34px] font-bold leading-none tracking-[-0.025em] text-fg",children:o.repricing?"\u2026":C(o.grand,o.currency)})]}),c("div",{className:"flex flex-col gap-2.5 px-6 pt-[18px] pb-6",children:[yt&&r("p",{className:"border border-red-300 bg-red-50 px-3 py-2 text-[13px] text-red-700",children:yt}),o.hasUnpricedLine&&c("p",{className:"border border-amber-300 bg-amber-50 px-3 py-2 text-[13px] text-amber-800",children:["One or more items have no price in ",o.currency,". Remove them, or switch region, to continue."]}),r("button",{type:"button",onClick:tr,disabled:V||a.length===0||o.hasUnpricedLine||o.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",a.length===0||V||o.hasUnpricedLine||o.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:V?c(q,{children:["Building order\u2026 ",r("span",{children:"\xB7"})]}):o.repricing?c(q,{children:["Updating total\u2026 ",r("span",{children:"\xB7"})]}):c(q,{children:[S==="bank"?"Place order":"Continue to payment"," \xB7"," ",C(o.grand,o.currency),r("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})})]})]})]}),r("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:r("span",{children:Ut({legalName:t.legalName,foundedYear:t.foundedYear,siteName:t.name})})})]})}var Y="w-full border-2 border-line bg-bg px-4 py-3.5 font-display text-[17px] tracking-[-0.005em] text-fg outline-none transition-colors placeholder:text-fg-dim hover:border-fg-dim focus:border-accent",qn={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 We({num:t,title:e,children:n}){return c("section",{className:"mb-6 border border-line bg-bg",children:[c("header",{className:"flex items-center gap-4 border-b border-line bg-surface px-6 py-3.5",children:[r("span",{className:"inline-flex items-center justify-center bg-accent px-2.5 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:t}),r("h2",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:e})]}),r("div",{className:"flex flex-col gap-4 px-6 py-6",children:n})]})}function _n({cols:t="two",children:e}){return r("div",{className:["grid gap-3 max-[640px]:grid-cols-1",t==="two"?"grid-cols-2":"grid-cols-[1.2fr_1fr_1fr]"].join(" "),children:e})}function $e({active:t,onClick:e,title:n,body:a,price:o,tag:s}){return c("button",{type:"button",onClick:e,"aria-pressed":t,className:["relative grid grid-cols-[auto_1fr_auto] items-center gap-[18px] border bg-bg px-[22px] py-[18px] text-left transition-colors",t?"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:t?{background:"color-mix(in oklab, var(--accent) 14%, var(--bg))"}:void 0,children:[t&&r("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),r("span",{className:["flex h-[18px] w-[18px] items-center justify-center rounded-full border-2",t?"border-accent":"border-fg-dim"].join(" "),children:t&&r("span",{className:"block h-2.5 w-2.5 rounded-full bg-accent"})}),c("span",{className:"flex min-w-0 flex-col gap-1",children:[c("span",{className:"flex flex-wrap items-baseline gap-2.5 font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:[n,s&&r("span",{className:"border px-1.5 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})]}),a&&r("span",{className:"font-mono text-[12px] uppercase tracking-[0.22em] text-fg-dim",children:a})]}),r("span",{className:"whitespace-nowrap font-display text-[18px] font-medium tracking-[-0.01em] text-fg",children:o})]})}function Yr({payment:t,onPaid:e,onSkip:n}){let{formatMoney:a}=oe(),o=Ke(()=>Cn(t.publishableKey),[t.publishableKey]),s=Ke(()=>{if(typeof document>"u")return;let l=getComputedStyle(document.documentElement),d=(u,v)=>l.getPropertyValue(u).trim()||v,p=document.documentElement.getAttribute("data-theme")!=="light";return{theme:p?"night":"stripe",variables:{colorPrimary:d("--accent",p?"#c9a461":"#8a6a2a"),colorBackground:d("--site-surface",p?"#131313":"#ffffff"),colorText:d("--fg",p?"#f5f1e8":"#0a0a0a"),borderRadius:"0px"}}},[]);return r("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:c("div",{className:"w-full max-w-xl border border-line bg-bg",children:[c("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-3.5",children:[r("span",{className:"inline-flex items-center justify-center bg-accent px-2.5 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:t.orderNumber}),r("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Payment"})]}),c("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:["Your order is placed. Pay"," ",r("span",{className:"text-fg",children:a(Number(t.amount),t.currency)})," ","by card to confirm it now."]}),r(nt,{stripe:o,options:{clientSecret:t.clientSecret,appearance:s},children:r(zr,{payment:t,onPaid:e,onSkip:n})})]})]})})}function zr({payment:t,onPaid:e,onSkip:n}){let{formatMoney:a}=oe(),o=fn(),s=dn(),[l,d]=g(!1),[p,u]=g(null);async function v(){if(!o||!s||l)return;d(!0),u(null);let b=await o.confirmPayment({elements:s,redirect:"if_required"});if(b.error){u(b.error.message??"Payment failed. Please try again."),d(!1);return}let f=b.paymentIntent?.status;if(f==="succeeded"||f==="processing"){e();return}u("Payment did not complete. Please try again."),d(!1)}return c("div",{className:"flex flex-col gap-4",children:[r(gn,{}),p&&r("p",{className:"border border-red-300 bg-red-50 px-3 py-2 text-[13px] text-red-700",children:p}),r("button",{type:"button",onClick:v,disabled:!o||!s||l,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!o||!s||l?"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?c(q,{children:["Processing\u2026 ",r("span",{children:"\xB7"})]}):c(q,{children:["Pay ",a(Number(t.amount),t.currency),r("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),r("button",{type:"button",onClick:n,disabled:l,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 Fn="paypal-sdk-js",it=null;function Br(t,e){let n=`${t}|${e}`;if(it?.key===n)return it.promise;let a=new Promise((o,s)=>{document.getElementById(Fn)?.remove();let l=document.createElement("script");l.id=Fn;let d=new URLSearchParams({"client-id":t,currency:e,intent:"capture"});l.src=`https://www.paypal.com/sdk/js?${d}`,l.onload=()=>{let p=window.paypal;p?o(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 it={key:n,promise:a},a}function Hr({confirmation:t,clientId:e,idemKey:n,onPaid:a,onSkip:o}){let{formatMoney:s}=oe(),l=se(null),[d,p]=g(!1),[u,v]=g(null),b=se(a);return b.current=a,z(()=>{let f=!1,h=null;return Br(e,t.currency).then(A=>{if(!(f||!l.current))return h=A.Buttons({style:{layout:"vertical",color:"gold",shape:"rect",label:"paypal"},createOrder:async()=>(await T.createPaypalOrder({idempotencyKey:n})).paypalOrderId,onApprove:async k=>{try{if((await T.capturePaypalOrder({idempotencyKey:n,paypalOrderId:k.orderID})).status==="paid"){b.current();return}v("PayPal did not complete the payment. Please try again.")}catch(C){v(C instanceof je?C.message:"PayPal payment failed. Please try again.")}},onError:()=>{v("PayPal could not process the payment. Please try again.")}}),h.render(l.current).then(()=>{f||p(!0)})}).catch(()=>{f||v("PayPal could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{f=!0,h?.close?.()}},[e,t.currency,n]),r("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:c("div",{className:"w-full max-w-xl border border-line bg-bg",children:[c("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-3.5",children:[r("span",{className:"inline-flex items-center justify-center bg-accent px-2.5 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:t.orderNumber}),r("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"PayPal"})]}),c("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:["Your order is placed. Pay"," ",r("span",{className:"text-fg",children:s(Number(t.grandTotal),t.currency)})," ","with PayPal to confirm it now."]}),!d&&!u&&r("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading PayPal\u2026"}),r("div",{ref:l}),u&&r("p",{className:"border border-red-300 bg-red-50 px-3 py-2 text-[13px] text-red-700",children:u}),r("button",{type:"button",onClick:o,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 Dn="square-web-sdk",st=null;function Vr(t){let e=t==="sandbox"?"sandbox":"production";if(st?.key===e)return st.promise;let n=new Promise((a,o)=>{document.getElementById(Dn)?.remove();let s=document.createElement("script");s.id=Dn,s.src=e==="sandbox"?"https://sandbox.web.squarecdn.com/v1/square.js":"https://web.squarecdn.com/v1/square.js",s.onload=()=>{let l=window.Square;l?a(l):o(new Error("Square SDK loaded without its namespace"))},s.onerror=()=>o(new Error("Square SDK failed to load")),document.head.appendChild(s)});return st={key:e,promise:n},n}function Gr({confirmation:t,applicationId:e,locationId:n,environment:a,idemKey:o,onPaid:s,onSkip:l}){let{formatMoney:d}=oe(),p=se(null),u=se(null),v=se(null),[b,f]=g(!1),[h,A]=g(!1),[k,C]=g(null);z(()=>{let D=!1,O=null;return Vr(a).then(async J=>{if(D||!p.current)return;let V=J.payments(e,n);v.current=V,O=await V.card(),await O.attach(p.current),u.current=O,D||f(!0)}).catch(()=>{D||C("Square could not be loaded. You can pay later \u2014 your order stands either way.")}),()=>{D=!0,O?.destroy?.()}},[e,n,a]);async function S(){let D=u.current;if(!(!D||h)){A(!0),C(null);try{let O=await D.tokenize();if(O.status!=="OK"||!O.token){C(O.errors?.[0]?.message??"Please check the card details and try again."),A(!1);return}let J;try{J=(await v.current?.verifyBuyer?.(O.token,{amount:String(t.grandTotal),currencyCode:t.currency,intent:"CHARGE"}))?.token}catch{}if((await T.chargeSquare({idempotencyKey:o,sourceId:O.token,...J?{verificationToken:J}:{}})).status==="paid"){s();return}C("Square did not complete the payment. Please try again.")}catch(O){C(O instanceof je?O.message:"Square payment failed. Please try again.")}A(!1)}}return r("div",{className:"flex min-h-screen flex-col items-center justify-center gap-6 bg-bg px-6 py-16 text-fg",children:c("div",{className:"w-full max-w-xl border border-line bg-bg",children:[c("header",{className:"flex items-center justify-between gap-4 border-b border-line bg-surface px-6 py-3.5",children:[r("span",{className:"inline-flex items-center justify-center bg-accent px-2.5 py-1 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-bg",children:t.orderNumber}),r("h1",{className:"font-display text-[26px] font-medium uppercase leading-none tracking-[-0.02em] text-fg",children:"Card"})]}),c("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:["Your order is placed. Pay"," ",r("span",{className:"text-fg",children:d(Number(t.grandTotal),t.currency)})," ","by card to confirm it now."]}),!b&&!k&&r("p",{className:"font-mono text-[11px] uppercase tracking-[0.2em] text-fg-dim",children:"Loading card form\u2026"}),r("div",{ref:p}),k&&r("p",{className:"border border-red-300 bg-red-50 px-3 py-2 text-[13px] text-red-700",children:k}),r("button",{type:"button",onClick:S,disabled:!b||h,className:["group flex items-center justify-between border px-5 py-5 font-mono text-[14px] font-medium uppercase tracking-[0.3em] transition-all",!b||h?"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:h?c(q,{children:["Processing\u2026 ",r("span",{children:"\xB7"})]}):c(q,{children:["Pay ",d(Number(t.grandTotal),t.currency),r("span",{className:"transition-transform group-hover:translate-x-1",children:"\u2192"})]})}),r("button",{type:"button",onClick:l,disabled:h,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"})]})]})})}function Jr({checked:t,onChange:e,label:n,sub:a}){return c("div",{className:"flex items-start gap-3 border-t border-line py-3.5 first:border-t-0 first:pt-0",children:[r("button",{type:"button",onClick:()=>e(!t),"aria-pressed":t,"aria-label":n,className:["mt-px flex h-5 w-5 flex-shrink-0 items-center justify-center border transition-colors",t?"border-accent":"border-line"].join(" "),style:t?{background:"color-mix(in oklab, var(--accent) 18%, transparent)"}:void 0,children:t&&r("span",{className:"text-[13px] text-accent",children:"\u2713"})}),c("span",{className:"flex-1 font-display text-[16px] leading-[1.5] text-fg",children:[n,a&&r("small",{className:"mt-1 block font-mono text-[12px] uppercase tracking-[0.18em] text-fg-dim",children:a})]})]})}function Xr({slug:t,name:e,qty:n,config:a,configSummary:o,price:s,currency:l}){let{catalog:d}=Je(),{formatMoney:p}=oe(),u=d.find(k=>k.slug===t),v=u?.spokes??5,b=u?.mesh??!1,f=a.find(k=>k.gold)?.label,h=u?.finishes.find(k=>k.name===f&&k.src)??u?.finishes.find(k=>k.src),A=u?.finishes[0]?.color??$t;return c("div",{className:"grid grid-cols-[60px_1fr_auto] items-center gap-3.5 border-b border-line py-4 last:border-b-0",children:[c("div",{className:"relative flex aspect-square items-center justify-center overflow-hidden border border-line bg-surface",children:[r("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}),h?.src?r(Et,{src:h.src,alt:`${e.lead}${e.accent} \u2014 ${h.name}`,width:120,height:120,sizes:"60px",className:"relative block h-full w-full object-contain p-1.5"}):r("div",{className:"block w-[78%]",style:{color:A},children:r(Kt,{spokes:v,mesh:b,className:"block w-full"})})]}),c("div",{className:"flex min-w-0 flex-col gap-0.5",children:[c("span",{className:"font-display text-[17px] font-bold uppercase leading-none tracking-[-0.005em] text-fg",children:[e.lead,r("em",{className:"font-serif font-normal italic text-accent tracking-[-0.005em] normal-case",children:e.accent})]}),r("span",{className:"font-mono text-[12px] uppercase leading-[1.5] tracking-[0.18em] text-fg-dim",children:o})]}),r("span",{className:"text-right font-display text-[17px] font-bold tracking-[-0.005em] text-fg",children:p(s,l)})]})}function ie({label:t,value:e}){return c("div",{className:"flex items-center justify-between font-mono text-[13px] font-medium uppercase tracking-[0.18em] text-fg",children:[r("span",{children:t}),r("strong",{className:"font-display text-[16px] font-medium tracking-[-0.005em] normal-case text-fg",children:e})]})}function Zr(t){return t.map(e=>e.label).join(" \xB7 ")}import{jsx as Ye}from"react/jsx-runtime";function Qr(){let{settings:t,websiteName:e}=Rt(),n=e?{...Xe,name:e}:Xe,a=t?{url:t.logoUrl,reversed:t.logoReversed??null,inkIsDark:t.logoInkIsDark??null,reverse:t.reverseLogo,size:t.logoSize,sizePx:t.logoSizePx}:null;return Ye("div",{style:{position:"fixed",inset:0,zIndex:2147482e3,overflowY:"auto",background:"var(--bg)",color:"var(--fg)"},children:Ye(Ft,{children:Ye(Mt,{preview:!0,children:Ye(ct,{site:n,logo:a,preview:!0})})})})}export{Qr as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{lh as t}from"./chunk-P4R7UXX3.js";import"./chunk-VRSJK3KG.js";import"./chunk-UX74DN6T.js";import"./chunk-Y6SLVHK3.js";import{jsx as e}from"react/jsx-runtime";import{default as r}from"efficient-easel/screen/components/ScreenStoreProvider";function p(o){return e(r,{...o,parts:t})}export{p as default};
|