efficient-web-builder 0.0.0 → 0.7.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 +174 -0
- package/LICENSE +10 -0
- package/README.md +230 -2
- package/dist/chunks/EditorPreviewCheckout-UMTU2FL4.js +4 -0
- package/dist/chunks/PreviewFooter-3TQMFRPZ.js +1 -0
- package/dist/chunks/SectionEditorShell-FZIT2REV.js +1 -0
- package/dist/chunks/SiteEditorProvider-FHKVGA4K.js +1 -0
- package/dist/chunks/StorefrontEditorChrome-MYOIHQ5J.js +1 -0
- package/dist/chunks/chunk-4G3T6ZD2.js +1 -0
- package/dist/chunks/chunk-4KLEZTLW.js +11 -0
- package/dist/chunks/chunk-IVOJJ6LW.js +1 -0
- package/dist/chunks/chunk-K3Y6UBLO.js +1 -0
- package/dist/chunks/chunk-KR3FTVDW.js +2 -0
- package/dist/chunks/chunk-N35EG6RF.js +143 -0
- package/dist/chunks/chunk-N35EG6RF.js.LEGAL.txt +4 -0
- package/dist/chunks/chunk-RF5DTRJ5.js +1 -0
- package/dist/chunks/chunk-UBYBQ3KR.js +1 -0
- package/dist/chunks/chunk-UTFM4DGR.js +15 -0
- package/dist/chunks/chunk-UTFM4DGR.js.LEGAL.txt +27 -0
- package/dist/chunks/chunk-WMFQNAWF.js +11 -0
- package/dist/chunks/chunk-X6KEAC34.js +1 -0
- package/dist/chunks/chunk-Y6SLVHK3.js +1 -0
- package/dist/chunks/fitment-data-ZLYB5QPR.js +1 -0
- package/dist/chunks/gallery-builds-data-SWA6XKFF.js +1 -0
- package/dist/chunks/headers-3CAQXQEY.js +1 -0
- package/dist/chunks/render-client-A75K43T5.js +1 -0
- package/dist/contract.d.ts +48 -0
- package/dist/contract.js +1 -0
- package/dist/editor.css +1 -0
- package/dist/index.d.ts +541 -0
- package/dist/index.js +10681 -0
- package/package.json +47 -3
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Bundled license information:
|
|
2
|
+
|
|
3
|
+
@tabler/icons-react/dist/esm/defaultAttributes.mjs:
|
|
4
|
+
@tabler/icons-react/dist/esm/createReactComponent.mjs:
|
|
5
|
+
@tabler/icons-react/dist/esm/icons/IconBrandFacebook.mjs:
|
|
6
|
+
@tabler/icons-react/dist/esm/icons/IconBrandInstagram.mjs:
|
|
7
|
+
@tabler/icons-react/dist/esm/icons/IconBrandLinkedin.mjs:
|
|
8
|
+
@tabler/icons-react/dist/esm/icons/IconBrandPinterest.mjs:
|
|
9
|
+
@tabler/icons-react/dist/esm/icons/IconBrandTiktok.mjs:
|
|
10
|
+
@tabler/icons-react/dist/esm/icons/IconBrandWhatsapp.mjs:
|
|
11
|
+
@tabler/icons-react/dist/esm/icons/IconBrandX.mjs:
|
|
12
|
+
@tabler/icons-react/dist/esm/icons/IconBrandYoutube.mjs:
|
|
13
|
+
@tabler/icons-react/dist/esm/icons/IconBrandFacebookFilled.mjs:
|
|
14
|
+
@tabler/icons-react/dist/esm/icons/IconBrandInstagramFilled.mjs:
|
|
15
|
+
@tabler/icons-react/dist/esm/icons/IconBrandLinkedinFilled.mjs:
|
|
16
|
+
@tabler/icons-react/dist/esm/icons/IconBrandPinterestFilled.mjs:
|
|
17
|
+
@tabler/icons-react/dist/esm/icons/IconBrandTiktokFilled.mjs:
|
|
18
|
+
@tabler/icons-react/dist/esm/icons/IconBrandWhatsappFilled.mjs:
|
|
19
|
+
@tabler/icons-react/dist/esm/icons/IconBrandXFilled.mjs:
|
|
20
|
+
@tabler/icons-react/dist/esm/icons/IconBrandYoutubeFilled.mjs:
|
|
21
|
+
@tabler/icons-react/dist/esm/tabler-icons-react.mjs:
|
|
22
|
+
/**
|
|
23
|
+
* @license @tabler/icons-react v3.46.0 - MIT
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the MIT license.
|
|
26
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
27
|
+
*/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{a as Et,b as ni,c as oi,d as si,g as ii,i as ri,j as ai,l as li}from"./chunk-4G3T6ZD2.js";import{$b as hn,$h as Xs,A as No,Ac as ys,B as _o,Bc as St,C as Ro,Cf as As,D as on,Df as Hs,Dh as $s,E as Te,Ea as Wo,Eh as gn,Ff as Ls,G as Ne,Gf as Fs,Gg as Ws,Gh as Vs,Gi as Ys,H as Io,Hg as Gs,I as Ao,Jf as Os,K as Ho,L as Lo,La as Oe,M as Fo,Ma as D,Ng as ze,P as Oo,Qg as ue,R as sn,Rg as Us,Rh as Ks,S as rn,T as an,U as yt,W as ln,X as cn,Y as Bo,Yb as bs,cj as bn,ef as ws,fa as Mo,fj as qs,ga as Do,gj as Zs,h as vo,hi as et,ii as tt,jb as fs,jf as mn,jh as ne,k as nn,l as To,mf as Ss,mi as xt,mj as js,mk as yn,og as De,oi as Pt,p as Fe,pj as Js,pk as ei,qf as Me,qk as ti,rg as Bs,ri as We,s as bt,sf as Tt,sg as Ms,tg as Ds,ti as kt,v as xo,vb as gs,w as Po,wg as zs,wj as Qs,x as ko,xh as be,y as Eo,z as Co}from"./chunk-UTFM4DGR.js";import{$ as Qo,$c as _s,A as Go,Aa as ps,B as Uo,C as $o,D as Vo,Da as hs,Ec as xs,Hc as Ps,Ka as ms,La as Pe,Ma as pn,Mc as ks,Nc as Es,Oc as fn,R as Ko,S as Xo,T as Yo,U as qo,Wa as Ze,X as Zo,Xc as Cs,Y as dn,Z as jo,_ as Jo,_c as Ns,ab as je,ad as Rs,ba as es,bc as Je,ca as ts,cc as Be,d as go,e as bo,f as yo,fa as ns,g as wo,ga as os,h as de,i as Qt,ia as ss,j as en,jd as Is,ma as is,n as Le,nd as V,o as tn,p as So,ra as un,sa as rs,tc as vt,ua as as,uc as Qe,wa as ls,wc as vs,xa as cs,xc as Ts,ya as ds,z as wt,za as us}from"./chunk-4KLEZTLW.js";import{E as zo,T as J,l as fo,o as Jt}from"./chunk-RF5DTRJ5.js";import{b as xe}from"./chunk-UBYBQ3KR.js";import{InspectorHead as br,InspectorIconButton as di}from"efficient-easel/chrome";import{jsx as ci,jsxs as gr}from"react/jsx-runtime";function Ct({side:e}){return gr("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,children:[ci("rect",{x:"3",y:"4",width:"18",height:"16",rx:"2"}),ci("path",{d:e==="left"?"M9 4v16":"M15 4v16"})]})}import{Fragment as pi,jsx as ye,jsxs as hi}from"react/jsx-runtime";function Nt({icon:e,title:t,context:n,actions:o,side:i="left",onHide:s}){return ye(br,{icon:e,name:t,kind:n,actions:o||s?hi(pi,{children:[o,s?ye(_t,{side:i,onHide:s,divider:!!o}):null]}):void 0})}function _t({side:e,onHide:t,divider:n=!1}){return hi(pi,{children:[n?ye("span",{className:"sf-head-divider","aria-hidden":"true"}):null,ye(di,{label:`Hide the ${e} panel`,title:"Hide panel",onClick:t,children:ye(Ct,{side:e})})]})}function xd({side:e,onShow:t}){return ye("div",{className:`es-sidepanel es-sidepanel--${e} sf-panel-strip`,children:ye(di,{label:`Show the ${e} panel`,title:"Show panel",onClick:t,children:ye(Ct,{side:e})})})}function ui({label:e,onClick:t,description:n}){return ye("button",{type:"button",className:"es-btn-ghost sf-head-textbtn",onClick:t,title:n,children:e})}var Rt="Flex",yr={FooterMenu:"MenuBlock",FooterEmailSignup:"EmailFormBlock",FooterSocial:"SocialLogosBlock"},wr=e=>{let{id:t,...n}=e;return n},mi=e=>typeof e=="string"?e:"";function fi(e,t){let n=e.props??{},o=yr[e.type];if(o)return[t(o,wr(n))];switch(e.type){case"FooterLogo":{let i=t("LogoBlock",n.reverse?{reverse:n.reverse}:{}),s=mi(n.tagline).trim();return s?[i,t("Text",{text:s,tone:"dim",align:n.align==="center"?"center":"left"})]:[i]}case"FooterText":return[t("Text",{text:mi(n.text),tone:typeof n.tone=="string"?n.tone:"default"})];case"FooterDivider":return[t("Divider")];case"FooterGroup":{let i=Array.isArray(n.blocks)?n.blocks:[];return[t(Rt,{direction:n.direction==="horizontal"?"row":"column",content:i.flatMap(s=>fi(s,t))})]}default:return[]}}function gi(e,t,n){let i=(e&&Array.isArray(e.props?.blocks)?e.props.blocks:[]).flatMap(h=>{let u=fi(h,t);return u.length<=1?u:[t(Rt,{direction:"column",content:u})]}),s=t(Rt,{direction:"row",wrap:!0,share:"equal",content:i}),c=t(Rt,{direction:"column",content:[t("LegalLineBlock")]});return xt(tt,n,[s,c])}var Sr=".sf-editor #preview-frame",Ge=()=>document.querySelector(Sr);function Rd(e){Is()||requestAnimationFrame(()=>{Ge()?.contentDocument?.querySelector(`[data-puck-component="${CSS.escape(e)}"]`)?.scrollIntoView({behavior:"smooth",block:"start"})})}function Id(e,t){let n=Ge()?.contentWindow;if(!n)return;let o={id:e,index:t};n.dispatchEvent(new CustomEvent(ti,{detail:o}))}function Ad(){requestAnimationFrame(()=>{Ge()?.contentWindow?.scrollTo({top:0,behavior:"smooth"})})}function bi(e,{passes:t=[150,400],onPinned:n}={}){let o=0,i=!1,s=[],c=()=>{let u=Ge(),r=u?.contentWindow,p=u?.contentDocument;if(!r||!p)return!1;let w=e(r,p);if(w==null)return!1;if(r.scrollTo({left:r.scrollX,top:w,behavior:"instant"}),!i){i=!0,n?.();for(let S of t)s.push(setTimeout(c,S))}return!0},h=()=>{!c()&&o++<150&&s.push(setTimeout(h,32))};return h(),()=>s.forEach(clearTimeout)}function Hd(e){return bi((t,n)=>{let o=n.querySelector(`[data-puck-component="${CSS.escape(e)}"]`);return o?t.scrollY+o.getBoundingClientRect().top:null})}function Ld(e){return bi((t,n)=>{if(!n.querySelector("[data-puck-component]"))return null;let o=Math.max(n.documentElement.scrollHeight,n.body?.scrollHeight??0);return o<=n.documentElement.clientHeight?null:o},{passes:[150,400,800,1300,2e3],onPinned:e})}import{useEditor as Xn}from"efficient-easel/editor";import{useEffect as bl,useRef as Vi,useState as Yt}from"react";import{useState as wi}from"react";import{SettingsField as Tr}from"efficient-easel/panel";import{jsx as nt,jsxs as wn}from"react/jsx-runtime";function vr(e){return e===1?"1 color theme":`${e} color themes`}function yi({count:e,onCancel:t,onConfirm:n}){return nt("div",{className:"sf-cleardlg-veil",role:"dialog","aria-modal":"true","aria-labelledby":"sf-clear-colours-title",children:wn("div",{className:"sf-cleardlg",children:[nt("h2",{id:"sf-clear-colours-title",className:"sf-cleardlg-title",children:"Clear this site\u2019s colors?"}),wn("p",{className:"sf-cleardlg-body",children:["This site has ",vr(e)," of its own. Clearing takes them away and puts back the four the shop supplies."]}),nt("p",{className:"sf-cleardlg-final",children:"This cannot be undone."}),wn("div",{className:"sf-cleardlg-btns",children:[nt("button",{type:"button",onClick:t,className:"sf-cleardlg-btn",children:"Cancel"}),nt("button",{type:"button",onClick:n,className:"sf-cleardlg-btn sf-cleardlg-btn--danger",children:"Clear colors"})]})]})})}import{Fragment as Cr,jsx as ke,jsxs as vi}from"react/jsx-runtime";var xr=Ms("the row's whole content is an action; the gutter names a subject and this row has none \u2014 the button's label is the name GG, 2026-09-23");function Pr(){return ke("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",children:ke("path",{d:"M12 5v14M5 12h14"})})}var Si="Reset color",kr={selected:0,themes:[]};function Er(e){e(kr)}function Sn({value:e,onChange:t}){let n=e?.themes??[],o=n.length===0,i=wt(e),[s,c]=wi(!1),[h,u]=wi(null),r=(a,y)=>{t({...i,themes:i.themes.map((g,O)=>O===a?y:g)})},p=$o(i).accent,w=new Set(i.themes.map(a=>a.brandInk).filter(Boolean)),S=Go.filter(a=>!w.has(a)).map(a=>Uo(p,a)),b=[...i.themes,...S],v=a=>{if(a<i.themes.length)return t({...i,selected:a});let y=[...i.themes,b[a]];t({...i,themes:y,selected:y.length-1})},P=()=>{let a=[...i.themes,{...Vo(i.themes[i.selected])}];t({...i,themes:a,selected:a.length-1}),u(a.length-1)};return vi(Cr,{children:[o?null:ke(Tr,{label:Si,icon:Ds(xr),labelId:"sf-theme-reset",action:ke(D,{label:Si,what:"change",onClear:()=>c(!0)})}),s&&ke(yi,{count:n.length,onCancel:()=>c(!1),onConfirm:()=>{c(!1),Er(t)}}),ke("div",{className:"sf-theme-list",role:"radiogroup","aria-label":"Theme",children:b.map((a,y)=>ke(Ls,{index:y,colors:a,selected:y===i.selected,open:h===y&&y<i.themes.length,editable:y<i.themes.length,onPick:()=>v(y),onEdit:()=>u(g=>g===y?null:y),onChangeColors:g=>r(y,g)},y))}),vi("button",{type:"button",onClick:P,className:"sf-theme-add",children:[ke(Pr,{}),"Add new theme"]})]})}import{SettingsField as ha}from"efficient-easel/panel";import{SquareIcon as ma}from"efficient-easel/icons";import{useEffect as Ft,useId as Rr,useRef as kn,useState as En}from"react";import{InspectorField as Ir}from"efficient-easel/fields";import{SettingsField as Ri,SettingsGroup as Ar,SettingsSegmented as xn}from"efficient-easel/panel";import{AlignCenterIcon as Hr,AlignLeftIcon as Ii,AlignRightIcon as Lr,CaseIcon as Fr,LetterSpacingIcon as Or,PaddingYIcon as Br,StylesIcon as Mr,TextColorIcon as Dr,TextLinesIcon as zr,TextSizeIcon as Wr,TypeIcon as Gr,WeightIcon as Ur,WidthIcon as $r}from"efficient-easel/icons";import{useEditor as Vr}from"efficient-easel/editor";import{jsx as vn}from"react/jsx-runtime";function Ti({children:e,weight:t}){return vn("span",{"aria-hidden":"true",style:{fontSize:13,lineHeight:1,fontWeight:t,letterSpacing:"-0.01em",userSelect:"none"},children:e})}function ot({weight:e=400}){return vn(Ti,{weight:e,children:"A"})}function It({letterCase:e="none"}){return vn(Ti,{weight:600,children:e==="upper"?"AA":e==="lower"?"aa":"Aa"})}import{useState as Nr}from"react";var Q="Not set";import{jsx as At,jsxs as xi}from"react/jsx-runtime";var Tn="__custom";function Pi({value:e,label:t,id:n,onChange:o}){let i=e===null,s=!i&&nn.includes(e)?e:null,c=!i&&e!==""&&s===null?e:null,[h,u]=Nr(!1),r=c!==null||h;return xi("div",{className:"sf-part-ink",children:[xi("select",{id:n,className:"sf-part-select",value:i?"":r?Tn:s??"",onChange:p=>{let w=p.target.value;if(w===Tn){u(!0),c===null&&o(null);return}u(!1),o(w===""?null:w)},children:[i&&At("option",{value:"",children:"Mixed"}),!i&&At("option",{value:"",children:Q}),nn.map(p=>At("option",{value:p,children:To[p]},p)),At("option",{value:Tn,children:"Custom\u2026"})]}),r&&Tt({value:c??"",onChange:p=>{u(!1),o(p)},label:t,caption:c===null?Q:void 0,ariaLabel:`${t} \u2014 custom`})]})}function Ht(e,t){let n=ko(e);return n?.control==="textList"?t.rowKey===(n.itemKey??"text")?Vs(n,t.index):null:Eo(e)?.[t.rowKey]??null}function ki(e,t,n){let o=e.node.props,{key:i,row:s}=Fe(e.propKey),c=s?_o(o,i,s,e.kind,t):Po(o,i,e.kind,t);return c?(n(e.zone,e.index,{...e.node,props:c}),!0):!1}var _r={CollectionCard:"product",FooterMenu:"menu",Gallery:"product",GalleryItem:"product",ProductGrid:"product",ProductHero:"product",SpecTable:"product",Events:"blog",FeaturedCover:"blog",LongRead:"blog",SubscribeBlogs:"blog"},Ei={product:"Synced from the product.",blog:"Synced from the blog post.",menu:"Synced from the site menu."},Ci="Open",Ni={product:{type:"storefront-editor:open-product",needsSlug:!0},blog:{type:"storefront-editor:open-post",needsSlug:!0},menu:{type:"storefront-editor:open-menus",needsSlug:!1}};function st(e){let n=e?.source?.slug;return typeof n=="string"&&n.length>0?n:void 0}function Lt(e){return _r[e]??null}import{Fragment as Bt,jsx as m,jsxs as H}from"react/jsx-runtime";var Kr=[{id:"none",label:"Normal",icon:m(It,{letterCase:"none"})},{id:"upper",label:"Upper",icon:m(It,{letterCase:"upper"})},{id:"lower",label:"Lower",icon:m(It,{letterCase:"lower"})}],Ai=[{id:"400",label:"Regular",icon:m(ot,{weight:400})},{id:"500",label:"Medium",icon:m(ot,{weight:500})},{id:"600",label:"Semibold",icon:m(ot,{weight:600})},{id:"700",label:"Bold",icon:m(ot,{weight:700})}],Xr=Object.fromEntries(Ai.map(e=>[e.id,e.label])),Yr=[{id:"left",label:"Left",icon:m(Ii,{})},{id:"center",label:"Center",icon:m(Hr,{})},{id:"right",label:"Right",icon:m(Lr,{})}],qr={labelsPx:114.63,widestLabelPx:42.75},Zr={labelsPx:174.25,widestLabelPx:55.3},jr={labelsPx:94.5,widestLabelPx:39.94},Hi=[{key:"font",label:"Font",group:"Typeface"},{key:"weight",label:"Weight",group:"Typeface"},{key:"size",label:"Size",group:"Size & spacing"},{key:"line",label:"Line spacing",group:"Size & spacing"},{key:"letter",label:"Letter spacing",group:"Size & spacing"},{key:"padding",label:"Padding",group:"Size & spacing"},{key:"width",label:"Width",group:"Size & spacing"},{key:"case",label:"Case",group:"Appearance"},{key:"align",label:"Alignment",group:"Appearance"},{key:"color",label:"Color",group:"Appearance"}],it={size:{...yt.size,suffix:" px"},line:{min:sn,max:rn,step:1,suffix:""},letter:{min:sn,max:rn,step:1,suffix:""},padding:{...yt.padding,suffix:" px"},width:{...yt.width,suffix:" px"}},Pn=e=>Object.hasOwn(it,e),Jr=[...new Set(Hi.map(e=>e.group))],Qr={font:m(Gr,{}),weight:m(Ur,{}),size:m(Wr,{}),line:m(zr,{}),letter:m(Or,{}),padding:m(Br,{}),width:m($r,{}),case:m(Fr,{}),align:m(Ii,{}),color:m(Dr,{})};function Ot(e){return e.kind==="role"?en[e.role]:e.kind==="custom"?"Custom":null}var ea=e=>e.kind==="role"?`role:${e.role}`:e.kind;function ta(e){let t=e.role;return t&&Qt.includes(t)?{kind:"role",role:t}:null}function na(e,t){if(!e)return{kind:"unread"};let{faceRole:n,base:o}=e;if(t[n]===o.fontKey)return{kind:"role",role:n};let i=Object.keys(t).filter(s=>t[s]===o.fontKey);return i.length===1?{kind:"role",role:i[0]}:{kind:"custom"}}function Cn(e,t,n,o){return ta(ln(e,t))??na(n,o)}function Li(e,t,n,o){return Ot(Cn(e,t,n,o))}function Nn(e,t){if(!e.length)return null;let n=t(e[0]);return e.every(o=>t(o)===n)?n:null}function oa(e){return Object.values(e).filter(t=>t!==void 0).length}function sa(e,t){let n=e.style[t];return t==="line"||t==="letter"?n??0:t==="color"?n??"":n!==void 0?n:t==="size"?Math.round(e.base.sizePx):t==="padding"?e.base.paddingPx:t==="width"?e.base.widthPx:t==="font"?e.base.fontKey:e.base[t]}function ia(e){return e===0?"style":e>0?`+${e}`:String(e)}function Fi({face:e,base:t,onPick:n}){let[o,i]=En(!1),s=kn(null),c=kn(null),h=Rr();Ft(()=>{if(!o)return;let p=w=>{s.current&&!s.current.contains(w.target)&&i(!1)};return document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[o]);let u=e.kind==="role"?e.role:null,r=p=>{n(p),i(!1),c.current?.focus()};return H("div",{className:"sf-part-style-pick",ref:s,children:[H("button",{ref:c,type:"button",className:"sf-part-style-trigger","aria-expanded":o,"aria-controls":h,"aria-label":`Follows ${Ot(e)??"no style"} \u2014 change`,onClick:()=>i(p=>!p),onKeyDown:p=>{p.key==="Escape"&&o&&(p.preventDefault(),i(!1))},children:[m("span",{className:"sf-part-style-name",style:{fontFamily:t?.fontKey?`var(${de(t.fontKey)?.cssVar})`:void 0,fontWeight:t?.weight},children:Ot(e)}),m("span",{className:"sf-part-style-sign","aria-hidden":"true"})]}),o&&H("div",{className:"sf-multi-menu sf-part-style-menu",id:h,role:"listbox",onKeyDown:p=>{p.key==="Escape"&&(p.preventDefault(),i(!1),c.current?.focus())},children:[H("button",{type:"button",role:"option","aria-selected":u===null,className:`sf-part-style-option${u===null?" is-on":""}`,onClick:()=>r(null),children:[m("span",{className:"sf-part-style-option-name",children:"No style"}),m("span",{className:"sf-note",children:"Section\u2019s own"})]}),Qt.map(p=>m("button",{type:"button",role:"option","aria-selected":u===p,className:`sf-part-style-option${u===p?" is-on":""}`,onClick:()=>r(p),children:m("span",{className:"sf-part-style-option-name",style:{fontFamily:`var(--font-role-${p})`},children:en[p]})},p))]})]})}function ra({parts:e,onEditStyle:t,onClearAll:n,onFollowStyle:o,kindLabel:i}){let c=Nn(e,w=>ea(w.face))?e[0].face:null,h=c?Ot(c):null,u=c&&c.kind!=="unread"?e[0].base:null,r=e.reduce((w,S)=>w+oa(S.style),0),p=u?de(u.fontKey)?.label:void 0;return H("div",{className:`sf-part-style${r?" has-overrides":""}`,children:[m("div",{className:"sf-part-style-caption",children:"Style"}),e.length>1&&H("div",{className:"sf-part-style-count",children:[e.length," selected"]}),e.length===1&&i&&H("div",{className:"sf-part-style-count",children:[i," \xB7 every row"]}),h&&u?H(Bt,{children:[o&&c?m(Fi,{face:c,base:u,onPick:o}):m("div",{className:"sf-part-style-name",style:{fontFamily:p?`var(${de(u.fontKey)?.cssVar})`:void 0,fontWeight:u.weight},children:h}),m("div",{className:"sf-part-style-meta",children:[p,`${Math.round(u.sizePx)} px`,Xr[u.weight]].filter(Boolean).join(" \xB7 ")})]}):m("div",{className:"sf-part-style-name",children:"Mixed styles"}),H("div",{className:"sf-part-style-top",children:[h?r?H(Bt,{children:[H("span",{className:"sf-part-chip",children:[r," changed"]}),m("button",{type:"button",className:"sf-part-link",onClick:n,children:"Clear"})]}):m("span",{className:"sf-part-style-state",children:"This text follows the site style."}):m("span",{className:"sf-part-style-state",children:"Changes apply to all selected."}),m("span",{className:"sf-part-style-gap"}),h&&t&&m("button",{type:"button",className:"sf-part-link",onClick:t,children:"Edit"})]})]})}function aa({sectionName:e,onBack:t,textEditor:n,styleRow:o,children:i}){return H("div",{className:"sf-part-panel",children:[H("button",{type:"button",className:"sf-part-back",onClick:t,children:[m(Mt,{}),H("span",{children:["All of ",e]})]}),n,o,i]})}function Mt(){return m("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.9,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:m("path",{d:"M15 5 8 12l7 7"})})}function Dt({source:e,slug:t}){let n=xe(),o=Ni[e],i=!o.needsSlug||!!t;return m("div",{className:"sf-note sf-note--source",children:H("p",{className:"sf-field-hint",children:[Ei[e],i?H(Bt,{children:[" ",m("button",{type:"button",className:"sf-source-open",onClick:()=>{o.type==="storefront-editor:open-menus"?n.send(o.type):t&&n.send(o.type,{slug:t})},children:Ci})]}):null]})})}var _i=4,la=120;function ca({region:e,sizePx:t,face:n,base:o,onFollowStyle:i,source:s,slug:c,onBack:h}){let u=e.follows;return H("div",{className:"sf-note",children:[m("p",{children:m("strong",{children:e.label})}),H("p",{children:["Its size follows Site styles \u25B8 ",u,t?` \u2014 ${Math.round(t)}px right now`:"","."]}),i?H(Bt,{children:[m(Ri,{label:"Style",icon:m(Mr,{}),children:m(Fi,{face:n,base:o,onPick:i})}),H("p",{className:"sf-field-hint",children:["Every ",e.label.toLowerCase()," in this section follows it. The face and the size change; the letter case is the section\u2019s own and stays as it is."]})]}):m("p",{className:"sf-field-hint",children:"Only the size follows a site style. This section sets its own font, weight and letter case."}),s?m(Dt,{source:s,slug:c}):null,H("button",{type:"button",className:"sf-part-back",onClick:h,children:[m(Mt,{}),m("span",{children:"Back to the page"})]})]})}function da({onBack:e}){return H("div",{className:"sf-note",children:[m("p",{children:m("strong",{children:"This part is no longer here."})}),m("p",{children:"The section it belonged to has been changed or removed."}),H("button",{type:"button",className:"sf-part-back",onClick:e,children:[m(Mt,{}),m("span",{children:"Back to the page"})]})]})}function ua({onBack:e,partId:t,why:n}){return H("div",{className:"sf-note",children:[m("p",{children:m("strong",{children:"This part's settings did not open."})}),m("p",{children:"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead."}),m("p",{className:"sf-note-detail",children:H("code",{children:[t," \u2014 ",n]})}),H("button",{type:"button",className:"sf-part-back",onClick:e,children:[m(Mt,{}),m("span",{children:"Back to the page"})]})]})}function _n({nodeId:e,propKey:t,onBack:n,onEditStyle:o}){let{getItemById:i,getSelectorForId:s,config:c}=Vr(f=>f),h=Oe(),{partStyle:u}=kt(),{fonts:r}=V(),[p,w]=En({}),S=kn(null),b=i(e),v=s(e),P=b?c.components[b.type]:void 0,{key:a,row:y}=Fe(t),g=P?.fields?.[a],O=y?Ht(g,y):g,W=Ne(e,t),F=b?.props??{},fe=xo(O),R=zs(O),q=Ho(O),B=b?Lt(b.type):null,k=y?Co(F[a],y):F[a],M=!!y&&!(Array.isArray(F[a])&&y.index<F[a].length);Ft(()=>{S.current?.querySelector(".sf-copybox textarea, .sf-copybox input")?.focus()},[W]);let[T,ee]=En(0);Ft(()=>ee(0),[W]);let ae=!!b&&!M&&(!v||!O);Ft(()=>{if(!ae||T>=_i)return;let f=setTimeout(()=>ee(I=>I+1),la);return()=>clearTimeout(f)},[ae,T]);let le=ae&&T<_i;if(!b||M)return m(da,{onBack:n});let te=Ys(b.type),ge=te?vo(te,t):null;if(te&&ge){let f=u?.partId===W?u:null,I=te[ge],U=I.writable===!0&&!!v,$=X=>{v&&h.replaceComponent(v.zone,v.index,{...b,props:cn(F,t,"role",X)})};return m(ca,{region:I,sizePx:f?.base.sizePx??null,face:Cn(F,t,f,r),base:f?.base??null,onFollowStyle:U?$:void 0,source:B,slug:st(F),onBack:n})}if(!v||!O)return le?m("div",{className:"sf-note","aria-busy":"true"}):m(ua,{onBack:n,partId:W,why:v?"no field":"no selector"});let Se=f=>{h.replaceComponent(v.zone,v.index,{...b,props:f})},Ye=f=>{if(bt(f).hidden!==bt(k).hidden||!fe){let U=y?No(F,a,y,f):{...F,[a]:f};U&&Se(U);return}ki({node:b,propKey:t,kind:fe,zone:v.zone,index:v.index},bt(f).text,h.replaceComponent)},ve=k,l=Do(b?.type,t),C=ln(F,l),z=u?.partId===W?u:null,_=[{partKey:l,face:Cn(F,l,z,r),sizeGroup:z?.sizeGroup??null,base:z?.base??pa,style:C}],Z=Nn(_,f=>f.sizeGroup),j=(f,I)=>{let U=F;for(let $ of _)U=cn(U,$.partKey,f,I);Se(U)},se=f=>j("role",f),ie=()=>{let f=F;for(let I of _)f=Bo(f,I.partKey);Se(f)},K=f=>{let I=_[0].base;return f==="size"?Math.round(I.sizePx):f==="padding"?I.paddingPx:f==="width"?I.widthPx:0},ce=(f,I)=>{if(f==="line"||f==="letter")return j(f,I);j(f,I===K(f)?null:I)},Ce=(f,I)=>{let U=_.some(qe=>qe.style[f]!==void 0),$=Nn(_,qe=>sa(qe,f)),X=$===null,G=`sf-part-${e}-${t}-${f}`,He=Pn(f)?it[f]:null,mo=!He||!Pn(f)?void 0:X?"Mixed":f==="line"||f==="letter"?ia($):f==="width"&&$===an?"Full":void 0,fr=He&&Pn(f)?m(Us,{value:X?K(f):$,min:He.min,max:He.max,step:He.step,suffix:He.suffix,ariaLabel:I,onChange:qe=>ce(f,qe),children:mo}):void 0;return m(Ri,{label:I,icon:Qr[f],value:fr,hint:f==="size"&&Z===null?"Fixed size \u2014 the site\u2019s Text setting doesn\u2019t resize this.":void 0,className:mo==="style"?"sf-part-field is-style-value":"sf-part-field",changed:U,htmlFor:f==="font"||f==="color"?G:void 0,action:U?m(D,{label:I,onClear:()=>j(f,null)}):void 0,children:jt(f,I,$,X,G)},f)},jt=(f,I,U,$,X)=>{switch(f){case"font":return H("select",{id:X,className:"sf-part-select",value:$?"":String(U),onChange:G=>j("font",G.target.value||null),children:[$&&m("option",{value:"",children:"Mixed"}),!$&&!de(String(U))&&m("option",{value:"",children:"Site style"}),go.map(G=>m("option",{value:G.key,children:G.label},G.key))]});case"weight":return m(xn,{options:Ai,value:$?"":String(U),onChange:G=>G&&j("weight",Number(G)),ariaLabel:I,fit:Zr});case"size":case"line":case"letter":case"padding":case"width":return m(ue,{min:it[f].min,max:it[f].max,step:it[f].step,value:$?K(f):U,readout:!1,ariaLabel:I,notch:K(f),onChange:G=>ce(f,G)});case"case":return m(xn,{options:Kr,value:$?"":String(U),onChange:G=>G&&j("case",G),ariaLabel:I,fit:qr});case"align":return m(xn,{options:Yr,value:$?"":String(U),onChange:G=>G&&j("align",G),ariaLabel:I,fit:jr});case"color":return m(Pi,{value:$?null:String(U),label:I,id:X,onChange:G=>j("color",G)})}};return H(aa,{sectionName:P?.label??b.type,onBack:n,textEditor:m("div",{ref:S,className:"sf-part-text",children:m(Ir,{field:O,name:t,value:ve,onChange:Ye,id:`sf-part-${e}-${t}`})}),styleRow:R||!q?void 0:m(ra,{parts:_,onEditStyle:o,onClearAll:ie,onFollowStyle:se,kindLabel:Mo[l]}),children:[B&&m(Dt,{source:B,slug:st(F)}),!R&&q&&Jr.map(f=>{let I=Hi.filter(X=>X.group===f),U=I.filter(X=>_.some(G=>G.style[X.key]!==void 0)).length,$=`sf-part-g-${e}-${t}-${f.replace(/\W+/g,"-")}`;return H(Ar,{id:$,title:f,open:p[f]!==!0,onToggle:X=>w(G=>({...G,[f]:!X})),count:U,children:[f==="Size & spacing"&&H("p",{className:"sf-note",children:["Line and letter spacing are relative to the style. ",m("strong",{children:"0"})," matches it, and holds when the size changes."]}),I.map(X=>Ce(X.key,X.label))]},f)})]})}var pa={fontKey:"",sizePx:16,weight:400,lineRatio:1.4,letterEm:0,align:"left",case:"none",paddingPx:0,widthPx:an};import{jsx as zt}from"react/jsx-runtime";var fa="Applies to panels, cards, inputs and buttons. Round things \u2014 color swatches, switches, status dots \u2014 stay round.",Rn="Corners",ga="Not set";function In({value:e,onChange:t,showHint:n=!0}){let o=e===null;return zt(ha,{label:Rn,icon:zt(ma,{}),value:o?ga:`${e}px`,changed:!o,action:o?null:zt(D,{label:Rn,what:"change",onClear:()=>t(null)}),hint:n?fa:void 0,children:zt(ue,{min:dn,max:jo,step:1,value:e??dn,readout:!1,ariaLabel:Rn,onChange:t})})}import{SettingsField as ba}from"efficient-easel/panel";import{ShadowIcon as ya}from"efficient-easel/icons";import{jsx as rt,jsxs as va}from"react/jsx-runtime";var Oi={none:"None",soft:"Soft",lifted:"Lifted"},wa="Applies to cards \u2014 products, brands, journal entries and filter cells. Round things like swatches and status dots are never shadowed.",Sa={none:"none",soft:"0 1px 1px rgba(20, 20, 22, 0.10), 0 2px 4px -1px rgba(20, 20, 22, 0.14)",lifted:"0 1px 2px rgba(20, 20, 22, 0.10), 0 4px 7px -2px rgba(20, 20, 22, 0.30)"};function An({value:e,onChange:t,showHint:n=!0}){let o=e===null,i=e??ts;return rt(ba,{label:"Card shadow",icon:rt(ya,{}),value:o?Q:Oi[e],changed:!o,action:o?void 0:rt(D,{label:"Card shadow",what:"change",onClear:()=>t(null)}),hint:n?wa:void 0,children:rt("div",{className:"sf-rungs",children:es.map(s=>va("button",{type:"button","aria-pressed":s===i,onClick:()=>t(s),className:`sf-rung sf-rung--inline${s===i?" is-active":""}`,children:[rt("span",{"aria-hidden":!0,className:"sf-rung-chip",style:{boxShadow:Sa[s]}}),Oi[s]]},s))})})}import{SettingsField as Ta}from"efficient-easel/panel";import{ShadowIcon as xa}from"efficient-easel/icons";import{Fragment as ka,jsx as Hn,jsxs as Ea}from"react/jsx-runtime";var Pa="Most useful on a dark theme, where a black shadow cannot be seen. Also used by the Lift hover, even with the card shadow off.";function Ln({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Hn(Ta,{label:"Shadow color",icon:Hn(xa,{}),changed:!o,action:Ea(ka,{children:[Tt({value:e??ss,onChange:t,label:"Shadow color",caption:o?Q:void 0}),o?null:Hn(D,{label:"Shadow color",what:"change",onClear:()=>t(null)})]}),hint:n?Pa:void 0})}import{SettingsField as Ca}from"efficient-easel/panel";import{AlignSeparateIcon as Na}from"efficient-easel/icons";import{jsx as Wt}from"react/jsx-runtime";var _a="The space between the blocks inside a row, a grid or a box. Not set means each one keeps the spacing it already has.",Fn="Block gap",Ra=ys.Grid;function On({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Wt(Ca,{label:Fn,labelId:"sf-block-gap",icon:Wt(Na,{}),value:o?"Not set":`${e}px`,changed:!o,action:o?void 0:Wt(D,{label:Fn,what:"change",onClear:()=>t(null)}),hint:n?_a:void 0,children:Wt(ue,{min:St.min,max:St.max,step:St.step,value:o?Ra:e,readout:!1,ariaLabel:Fn,onChange:t})})}import{SettingsField as Ia}from"efficient-easel/panel";import{HoverIcon as Aa}from"efficient-easel/icons";import{jsx as at}from"react/jsx-runtime";var Bi={none:"None",lift:"Lift",highlight:"Highlight"},Ha="What a card does when a shopper points at it \u2014 or taps it, on a phone. Highlight is the effect your cards already use.";function Bn({value:e,onChange:t,showHint:n=!0}){let o=e===null,i=e??os;return at(Ia,{label:"Hover effect",icon:at(Aa,{}),value:o?Q:Bi[e],changed:!o,action:o?void 0:at(D,{label:"Hover effect",what:"change",onClear:()=>t(null)}),hint:n?Ha:void 0,children:at("div",{className:"sf-rungs",children:ns.map(s=>at("button",{type:"button","aria-pressed":s===i,onClick:()=>t(s),className:`sf-rung${s===i?" is-active":""}`,children:Bi[s]},s))})})}import{SettingsField as La}from"efficient-easel/panel";import{ImageIcon as Fa}from"efficient-easel/icons";import{jsx as lt}from"react/jsx-runtime";var Mi="Hero image",Di=[{followsWidth:!1,label:De.full},{followsWidth:!0,label:De.page}],Oa="Whether the big picture at the top of a page runs edge to edge, or sits inside the page width. The words follow the page width either way.";function Mn({value:e,onChange:t,showHint:n=!0}){let o=e===null,i=e??!1;return lt(La,{label:Mi,icon:lt(Fa,{}),value:o?Q:Di.find(s=>s.followsWidth===e).label,changed:!o,action:o?void 0:lt(D,{label:Mi,what:"change",onClear:()=>t(null)}),hint:n?Oa:void 0,children:lt("div",{className:"sf-rungs",children:Di.map(s=>lt("button",{type:"button","aria-pressed":s.followsWidth===i,onClick:()=>t(s.followsWidth),className:`sf-rung${s.followsWidth===i?" is-active":""}`,children:s.label},s.label))})})}import{SettingsField as Ba}from"efficient-easel/panel";import{DropIcon as Ma}from"efficient-easel/icons";import{jsx as ct}from"react/jsx-runtime";var zi="Photography",Wi=[{grayscale:!1,label:"As shot"},{grayscale:!0,label:"Black and white"}],Da="Black and white photographs return to color on hover. Wheels and tyres keep their real finish either way.";function Dn({value:e,onChange:t,showHint:n=!0}){let o=e===null,i=e??!1;return ct(Ba,{label:zi,icon:ct(Ma,{}),value:o?Q:Wi.find(s=>s.grayscale===e).label,changed:!o,action:o?void 0:ct(D,{label:zi,what:"change",onClear:()=>t(null)}),hint:n?Da:void 0,children:ct("div",{className:"sf-rungs",children:Wi.map(s=>ct("button",{type:"button","aria-pressed":s.grayscale===i,onClick:()=>t(s.grayscale),className:`sf-rung${s.grayscale===i?" is-active":""}`,children:s.label},s.label))})})}import{SettingsField as za}from"efficient-easel/panel";import{PaddingXIcon as Wa}from"efficient-easel/icons";import{jsx as Gt}from"react/jsx-runtime";var zn="Side space",Ga="Not set",Ua=je.default,$a="The room left at the left and right edge of every page.";function Wn({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Gt(za,{label:zn,labelId:"sf-side-space",icon:Gt(Wa,{}),value:o?Ga:`${e}px`,changed:!o,action:o?void 0:Gt(D,{label:zn,what:"change",onClear:()=>t(null)}),hint:n?$a:void 0,children:Gt(ue,{min:je.min,max:je.max,step:je.step,value:e??Ua,readout:!1,ariaLabel:zn,onChange:t})})}import{SettingsField as Va}from"efficient-easel/panel";import{WidthIcon as Ka}from"efficient-easel/icons";import{jsx as Ut}from"react/jsx-runtime";var Gn="Content width",Xa="Not set",Ya=Ze.default,qa="The standard width every page on this site renders at.";function Un({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Ut(Va,{label:Gn,labelId:"sf-site-width",icon:Ut(Ka,{}),value:o?Xa:`${e}px`,changed:!o,action:o?void 0:Ut(D,{label:Gn,what:"change",onClear:()=>t(null)}),hint:n?qa:void 0,children:Ut(ue,{min:Ze.min,max:Ze.max,step:Ze.step,value:e??Ya,readout:!1,ariaLabel:Gn,onChange:t})})}import{SettingsField as Vt}from"efficient-easel/panel";import{AccentIcon as Za,CaseIcon as ja,StylesIcon as Ja,TextLinesIcon as Ui,TextSizeIcon as dt,TextSmallIcon as Qa,TypeIcon as el,WeightIcon as tl}from"efficient-easel/icons";import{Fragment as Vn,jsx as x,jsxs as $t}from"react/jsx-runtime";var nl=[{role:"heading",title:"Heading 1",group:"heading",step:"headingLarge",base:17,icon:x(dt,{})},{role:"heading2",title:"Heading 2",group:"heading",step:"headingMedium",base:15,icon:x(dt,{})},{role:"heading3",title:"Heading 3",group:"heading",step:"headingSmall",base:13,icon:x(dt,{})},{role:"accent",title:"Accent",step:"accent",base:15,icon:x(Za,{})},{role:"body",title:"Body",group:"body",step:"body",base:14,icon:x(Ui,{})},{role:"label",title:"Labels",group:"label",step:"label",base:11,icon:x(Qa,{})}];var ol=9,Ue=500,sl=100,il=80,rl=4,al=600,ll=700,cl=400,dl="0.18em";function ul({id:e,value:t,onChange:n}){return x("select",{id:e,className:"sf-select w-full min-w-0",value:t,onChange:o=>n(o.target.value),style:{fontFamily:`var(${de(t)?.cssVar??"--font-body"})`},children:yo().map(([o,i])=>x("optgroup",{label:bo[o],children:i.map(s=>x("option",{value:s.key,children:s.label},s.key))},o))})}function pl({label:e,icon:t,readout:n,min:o,max:i,step:s,value:c,onChange:h,action:u,hint:r}){return x(Vt,{label:e,icon:t,value:n,action:u,hint:r,children:x("input",{type:"range",min:o,max:i,step:s,value:c,onChange:p=>h(Number(p.target.value)),className:"h-1 w-full cursor-pointer","aria-label":e})})}function $n({label:e,icon:t,value:n,fallback:o,min:i,max:s,step:c,suffix:h="",hint:u,onChange:r}){let p=n===null;return x(pl,{label:e,icon:t,readout:p?"Auto":`${n}${h}`,min:i,max:s,step:c,value:p?o:n,onChange:r,action:p?null:x(D,{label:e,what:"change",onClear:()=>r(null)}),hint:u})}function Gi({label:e,icon:t,options:n,value:o,onChange:i,hint:s,action:c}){return x(Vt,{label:e,icon:t,value:n.find(h=>h.value===o)?.label,hint:s,action:c,children:x("div",{className:"sf-rungs",children:n.map(h=>x("button",{type:"button","aria-pressed":h.value===o,onClick:()=>i(h.value),className:`sf-rung${h.value===o?" is-active":""}`,children:h.label},h.value))})})}var hl=[{value:"authored",label:"As designed"},{value:"sentence",label:"As typed"}],ml=[{value:"normal",label:"Normal"},{value:"tight",label:"Tight"},{value:"compressed",label:"Compressed"}];function fl({fontKey:e,weight:t,fallbackWeight:n,onWeight:o}){let s=(t??n)>=al,c=wo(e),h=de(e)?.label??"This face";return x(Vt,{label:"Style",icon:x(Ja,{}),value:s?"Bold":"Normal",hint:"Bold is the weight above \u2014 one value, two ways to set it.",children:$t("div",{className:"sf-rungs",children:[x("button",{type:"button","aria-pressed":s,"aria-label":"Bold",title:"Bold",onClick:()=>o(s?cl:ll),className:`sf-rung sf-rung--glyph${s?" is-active":""}`,style:{fontWeight:700},children:"B"}),x("button",{type:"button","aria-pressed":!1,"aria-label":"Italic",disabled:!0,title:c?"Italic is not saved yet \u2014 the theme row has no column for it (card 66162.b).":`${h} is loaded without an italic, so it cannot be set in italic. Slanting it would deform the letters rather than style them.`,className:"sf-rung sf-rung--glyph",style:{fontStyle:"italic"},children:"I"})]})})}function Kn({fonts:e,compression:t,headingTypography:n,openRole:o,onOpenRole:i,onFontChange:s,sizes:c,onSizeChange:h,onCompressionChange:u,onHeadingTypographyChange:r,livePx:p,savedRole:w=null}){let S=a=>r({...n,...a}),b=a=>a==="accent"?"weightStrong":a==="heading2"?"weight2":a==="heading3"?"weight3":"weight",v=a=>a==="heading2"?"case2":a==="heading3"?"case3":"case",P=as(t);return x("div",{className:"sf-style-list",children:nl.map(a=>{let y=o===a.role;return x(Hs,{styleKey:a.role,label:a.title,icon:a.icon,value:de(e[a.role])?.label??e[a.role],sampleStyle:gl(a,e,n,P),open:y,onToggle:()=>i(y?null:a.role),saved:w===a.role,children:y&&$t(Vn,{children:[x(Vt,{label:"Font",icon:x(el,{}),htmlFor:`sf-font-${a.role}`,action:e[a.role]===tn[a.role]?null:x(D,{label:"Font",what:"change",onClear:()=>s(a.role,tn[a.role])}),children:x(ul,{id:`sf-font-${a.role}`,value:e[a.role],onChange:g=>s(a.role,g)})}),a.step&&h&&x($n,{label:"Size",icon:x(dt,{}),value:c[a.step],fallback:a.base*2,min:Xo,max:Yo,step:qo,suffix:"px",hint:c[a.step]===null?"Auto = this style states no size, and text following it keeps the size its section drew.":"The size a text takes when you set it to follow this style. Sections keep their own sizes.",onChange:g=>h(a.step,g)}),(Le(a.role)||a.role==="accent")&&$t(Vn,{children:[x($n,{label:"Weight",icon:x(tl,{}),value:n[b(a.role)],fallback:Le(a.role)?Ue:n.weight??Ue,min:ls,max:cs,step:sl,hint:a.role==="accent"?"Auto = the accent phrase takes the heading's own weight.":void 0,onChange:g=>S({[b(a.role)]:g})}),x(fl,{fontKey:e[a.role],weight:n[b(a.role)],fallbackWeight:Le(a.role)?Ue:n.weight??Ue,onWeight:g=>S({[b(a.role)]:g})})]}),Le(a.role)&&$t(Vn,{children:[x(Gi,{label:"Line & text gap",icon:x(Ui,{}),options:ml,value:t,onChange:u,hint:P.lineHeight===void 0?"The built-in spacing.":`Line gap ${P.lineHeight} \xB7 text gap ${P.letterSpacing}em.`,action:t===un?null:x(D,{label:"Line & text gap",what:"change",onClear:()=>u(un)})}),x(Gi,{label:"Capitals",icon:x(ja,{}),options:hl,value:n[v(a.role)],onChange:g=>S({[v(a.role)]:g}),hint:"The only setting that changes a heading's capitals.",action:n[v(a.role)]==="authored"?null:x(D,{label:"Capitals",what:"change",onClear:()=>S({[v(a.role)]:"authored"})})}),x($n,{label:"Largest size",icon:x(dt,{}),value:n.maxPx,fallback:il,min:ds,max:us,step:rl,suffix:"px",hint:"Caps the biggest heading on the site. Auto = each section's own.",onChange:g=>S({maxPx:g})})]})]})},a.role)})})}function gl(e,t,n,o){let i=Math.max(ol,e.base),s={fontFamily:`var(${de(t[e.role])?.cssVar??"--font-body"})`,fontSize:`${i.toFixed(1)}px`,lineHeight:1.15};return Le(e.role)?(s.fontWeight=n.weight??Ue,s.textTransform=n.case==="sentence"?"none":"uppercase",o.letterSpacing!==void 0&&(s.letterSpacing=`${o.letterSpacing}em`)):e.role==="accent"?(s.fontWeight=n.weightStrong??n.weight??Ue,o.letterSpacing!==void 0&&(s.letterSpacing=`${o.letterSpacing}em`)):e.role==="label"&&(s.textTransform="uppercase",s.letterSpacing=dl),s}import{SettingsTabs as yl}from"efficient-easel/panel";import{ContrastIcon as wl,NoteIcon as Sl,SettingsIcon as vl,TypeIcon as Tl}from"efficient-easel/icons";function $i(e){switch(e.status){case"saved":return null;case"failed":return{msg:"Not saved. Try again.",tone:"error"};case"skipped":switch(e.reason){case"empty":return null;case"no-token":return{msg:"Not saved. Reload the page.",tone:"error"};case"template":return{msg:"Templates keep their look. Press Save.",tone:"success"}}}}import{Fragment as ut,jsx as L,jsxs as $e}from"react/jsx-runtime";var Xt="sf-site-styles-tabpanel",pt=!1,xl="Show hints";function _e({shown:e,onChange:t}){return L("div",{className:"sf-hints",children:$e("button",{type:"button","aria-pressed":e,onClick:()=>t(!e),className:`sf-rung sf-hints-toggle${e?" is-active":""}`,children:[L(Sl,{size:13}),xl]})})}var Ih="text",Kt=[{id:"basics",label:"Basics",icon:L(vl,{}),htmlId:"sf-site-styles-tab-basics",panelId:Xt},{id:"theme",label:"Theme",icon:L(wl,{}),htmlId:"sf-site-styles-tab-theme",panelId:Xt},{id:"text",label:"Text",icon:L(Tl,{}),htmlId:"sf-site-styles-tab-text",panelId:Xt}];function Pl({themeFromDocument:e,persist:t}){let{appState:n,dispatch:o}=Xn(r=>r),{theme:i,setTheme:s}=V(),c=n.data,h=c.root?.props??{},u=r=>{if(e){let p={...h,theme:r};o({type:"replaceRoot",root:{...c.root,props:p},recordHistory:!0})}else s(r);t({selected_preset:r.selected,theme_presets:r.themes})};return L(Sn,{value:e?h.theme:i,onChange:u})}function kl(e,t){let[n,o]=Yt(null),i=Vi(null),s=JSON.stringify(e),c=Vi(t);return c.current=t,bl(()=>{if(i.current===null){i.current=s;return}if(i.current===s)return;i.current=s;let h=window.setTimeout(()=>o(c.current),700),u=window.setTimeout(()=>o(null),2200);return()=>{window.clearTimeout(h),window.clearTimeout(u)}},[s]),n}function El({themeFromDocument:e,persist:t}){let{appState:n,dispatch:o}=Xn(k=>k),[i,s]=Yt(null),{fonts:c,setFonts:h,sizes:u,setSizes:r,headingCompression:p,setHeadingCompression:w,headingTypography:S,setHeadingTypography:b}=V(),v=n.data,P=v.root?.props??{},a=e?So(P.fonts):c,y=e?Ko:u,g=e?rs(P.headingCompression):p,O=e?ps(P.headingTypography):S,W=k=>o({type:"replaceRoot",root:{...v.root,props:{...P,...k}},recordHistory:!0}),F=kl({curFonts:a,curCompression:g,curTypography:O},i);return L(Kn,{fonts:a,sizes:y,compression:g,headingTypography:O,openRole:i,onOpenRole:s,onFontChange:(k,M)=>{let T={...a,[k]:M};e?W({fonts:T}):h(T),t({heading_font:T.heading,body_font:T.body,accent_font:T.accent,label_font:T.label})},onSizeChange:e?void 0:(k,M)=>{let T={...y,[k]:M};r(T),t({heading_size_large_px:T.headingLarge,heading_size_medium_px:T.headingMedium,heading_size_small_px:T.headingSmall,accent_size_px:T.accent,body_size_px:T.body,label_size_px:T.label})},onCompressionChange:k=>{e?W({headingCompression:k}):w(k),t({heading_compression:k})},onHeadingTypographyChange:k=>{e?W({headingTypography:k}):b(k),t(hs(k))},livePx:Nl,savedRole:F})}var Cl={heading:"main h1, main h2",heading2:"main h1, main h2",heading3:"main h1, main h2",accent:"main h1 em, main h2 em",body:"main p",label:"main .mono-eyebrow"};function Nl(e){if(typeof document>"u")return null;let n=(Ge()?.contentDocument??document).querySelector(Cl[e]);if(!n)return null;let o=parseFloat(getComputedStyle(n).fontSize);return Number.isFinite(o)?o:null}function _l({themeFromDocument:e,persist:t,showHint:n}){let{appState:o,dispatch:i}=Xn(b=>b),{cornerRadiusPx:s,setCornerRadiusPx:c}=V(),h=o.data,u=h.root?.props??{},r=u.cornerRadiusPx===void 0?Jo[Zo(u.cornerStyle)]:Qo(u.cornerRadiusPx),p=e?r:s,w=b=>i({type:"replaceRoot",root:{...h.root,props:{...u,...b}},recordHistory:!0});return L(In,{value:p,onChange:b=>{e?w({cornerRadiusPx:b}):c(b),t({corner_radius_px:b})},showHint:n})}function Rl(e){return{site_width:e}}function Il({persist:e,showHint:t}){let{siteWidth:n,setSiteWidth:o}=V();return L(Un,{value:n,onChange:s=>{o(s),e(Rl(s),s===null)},showHint:t})}function Al(e){return{block_gap:e}}function Hl(e){return{site_gutter:e}}function Ll({persist:e,showHint:t}){let{siteGutter:n,setSiteGutter:o}=V();return L(Wn,{value:n,onChange:s=>{o(s),e(Hl(s),s===null)},showHint:t})}function Fl({persist:e,showHint:t}){let{blockGap:n,setBlockGap:o}=V();return L(On,{value:n,onChange:s=>{o(s),e(Al(s),s===null)},showHint:t})}function Ol({persist:e,showHint:t}){let{heroBackgroundFollowsWidth:n,setHeroBackgroundFollowsWidth:o}=V();return L(Mn,{value:n,onChange:s=>{o(s),e({hero_background_follows_width:s},!0)},showHint:t})}function Bl({persist:e,showHint:t=!0}){return $e(ut,{children:[L(Il,{persist:e,showHint:t}),L(Ll,{persist:e,showHint:t}),L(Fl,{persist:e,showHint:t}),L(Ol,{persist:e,showHint:t})]})}function Ml(e){return{card_shadow:e}}function Dl(e){return e===null?{shadow_color:null}:{shadow_color:is(e)}}function zl(e){return{hover_effect:e}}function Wl({persist:e,showHint:t=!0}){let{cardShadow:n,setCardShadow:o,shadowColor:i,setShadowColor:s,hoverEffect:c,setHoverEffect:h}=V();return $e(ut,{children:[L(An,{value:n,onChange:u=>{o(u),e(Ml(u),!0)},showHint:t}),L(Ln,{value:i,onChange:u=>{s(u),e(Dl(u),u===null)},showHint:t}),L(Bn,{value:c,onChange:u=>{h(u),e(zl(u),!0)},showHint:t})]})}function Gl(e){return{photography_grayscale:e}}function Ul({persist:e,showHint:t}){let{photographyGrayscale:n,setPhotographyGrayscale:o}=V();return L(Dn,{value:n,onChange:s=>{o(s),e(Gl(s),!0)},showHint:t})}function $l({persist:e,showHint:t=!0}){return L(ut,{children:L(Ul,{persist:e,showHint:t})})}function Ki(){let{websiteName:e}=V();return e?.trim()||vt}function Yn({themeFromDocument:e=!1,tokenRef:t,siteId:n,onNotify:o,tab:i,onTabChange:s}){let{persist:c}=Fs({themeFromDocument:e,tokenRef:t,siteId:n,onResult:P=>{let a=$i(P);a&&o?.(a.msg,a.tone)}}),[h,u]=Yt(Kt[0].id),r=i!==void 0,p=r?i:h,w=r?s??(()=>{}):u,S=Kt.find(P=>P.id===p)??Kt[0],[b,v]=Yt(pt);return $e(ut,{children:[L(yl,{items:Kt,activeId:S.id,onSelect:w,ariaLabel:"Site styles"}),$e("div",{id:Xt,role:"tabpanel","aria-labelledby":S.htmlId,children:[p==="basics"&&$e(ut,{children:[L(_l,{themeFromDocument:e,persist:c,showHint:b}),!e&&L(Wl,{persist:c,showHint:b}),!e&&L(Bl,{persist:c,showHint:b}),!e&&L($l,{persist:c,showHint:b}),L(_e,{shown:b,onChange:v})]}),p==="theme"&&L(Pl,{themeFromDocument:e,persist:c}),p==="text"&&L(El,{themeFromDocument:e,persist:c})]})]})}import{ImageIcon as Vl}from"efficient-easel/icons";import{MediaIcon as Kl}from"efficient-easel/rail";import{Fragment as ql,jsx as Re,jsxs as Zl}from"react/jsx-runtime";function Xl({panel:e,pick:t,onHide:n}){let o=Ki(),i=t?Yl(t.accept):null;return Zl(ql,{children:[t?Re(Nt,{icon:Re(Vl,{size:15}),title:`Choose ${i}`,context:t.title?`For ${t.title}`:o,actions:Re(ui,{label:"Cancel",description:`Keep the current ${i}`,onClick:()=>mn(t.requestId,null)}),onHide:n}):Re(Nt,{icon:Re(Kl,{}),title:"Media library",context:o,onHide:n}),Re("div",{className:"sf-media-panel",children:Re(e,{pick:t,onPick:s=>t&&mn(t.requestId,s)})})]})}function Yl(e){return/svg/i.test(e)?"SVG logo":e.startsWith("video")?"video":"image"}import{DEFAULT_PANEL_W as jl,clampPanelWidth as Jl}from"efficient-easel/chrome";import{MAX_PANEL_W as Xh,MIN_PANEL_W as Yh,panelWidthVars as qh}from"efficient-easel/chrome";var Gh="sf-editor-panel-widths",Uh={...jl},$h=e=>Jl(e);import{useState as Qc}from"react";import{useEditor as ed}from"efficient-easel/editor";import{InspectorHead as td,InspectorIconButton as ar}from"efficient-easel/chrome";import{DuplicateIcon as nd,TrashIcon as od}from"efficient-easel/icons";function Xi(e,t){if(!t)return null;let n=e.components?.[t.type],o=n?.fields??null;if(!o||typeof n?.resolveFields!="function")return o;try{let i=n.resolveFields({type:t.type,props:t.props},{fields:o,lastFields:o,lastData:null,changed:{},parent:null,appState:{}});return!i||typeof i.then=="function"?o:i}catch{return o}}import{useCallback as pe,useEffect as mt,useRef as qn,useState as Ee}from"react";import{SettingsTabs as Ql}from"efficient-easel/panel";import{ListIcon as ec,LogoIcon as tc,SettingsIcon as nc,StylesIcon as oc}from"efficient-easel/icons";import{Fragment as Ie,jsx as d,jsxs as E}from"react/jsx-runtime";var ht="sf-header-tabpanel",Zn=[{id:"logo",label:"Logo",icon:d(tc,{}),htmlId:"sf-header-tab-logo",panelId:ht},{id:"menu",label:"Menu",icon:d(ec,{}),htmlId:"sf-header-tab-menu",panelId:ht},{id:"tools",label:"Tools",icon:d(nc,{}),htmlId:"sf-header-tab-tools",panelId:ht},{id:"look",label:"Look",icon:d(oc,{}),htmlId:"sf-header-tab-look",panelId:ht}];function jn({tokenRef:e,siteId:t,onClose:n,onAuthExpired:o,inline:i,placeholderMode:s,websiteName:c,onOpenWebsiteSettings:h}){let u=xe(),[r,p]=Ee(null),[w,S]=Ee(null),[b,v]=Ee(!1),[P,a]=Ee(Zn[0].id),[y,g]=Ee(pt),O=s?Zn.filter(l=>l.id!=="menu"):Zn,W=O.find(l=>l.id===P)??O[0],[F,fe]=Ee(0),{setSettings:R}=V(),q=qn(null),B=qn(null),k=qn(null);mt(()=>{let l=!1,C=null,z=null,_=3,Z=(se,ie=0)=>{l||S(null),Et(se,t,ie>0).then(K=>!l&&p(K)).catch(()=>{l||(ie+1<_?z=setTimeout(()=>Z(se,ie+1),600*(ie+1)):S("Could not load header settings."))})},j=e.current;if(j)Z(j);else{let se=0;C=setInterval(()=>{let ie=e.current;if(ie){C&&clearInterval(C),C=null,l||S(null),Z(ie);return}se+=250,se===5e3&&!l&&S("Waiting for editor authorization\u2026"),se>=3e4&&(C&&clearInterval(C),C=null,l||S("Not authorized yet \u2014 reopen once the editor has loaded."))},250)}return()=>{l=!0,C&&clearInterval(C),z&&clearTimeout(z)}},[e,F,t]),mt(()=>{r&&R(si(r))},[r,R]),mt(()=>()=>{q.current&&clearTimeout(q.current),B.current&&clearTimeout(B.current),k.current&&clearTimeout(k.current)},[]);let M=pe(async(l,C)=>{let z=e.current;if(!z||!r)return;let _=r;C&&p({...r,...C}),v(!0),S(null);try{let Z=await l(z);p(Z),ni(Z,t)}catch(Z){p(_),Z instanceof zo&&Z.status===401?(oi(t),o?.(),S("Authorization expired \u2014 try again in a moment.")):S("Could not save. Please retry.")}finally{v(!1)}},[r,e,o,t]),T=pe(l=>M(C=>J.updateHeaderSettings(l,C,t??void 0),l),[M,t]),ee=pe(l=>{M(C=>J.setHeaderLogoFromAsset(l,C,t??void 0))},[M,t]),ae=pe(()=>{Ss(u,{accept:"image/svg+xml",title:"Logo (SVG)"}).then(l=>{l&&ee(l.id)})},[ee]),le=pe((l,C=!0)=>{p(_=>_&&{..._,logo_size_px:l}),q.current&&clearTimeout(q.current);let z=()=>{M(_=>J.updateHeaderSettings({logo_size_px:l},_,t??void 0))};C?z():q.current=setTimeout(z,400)},[M,t]),te=pe((l,C=!0)=>{p(_=>_&&{..._,height_px:l}),B.current&&clearTimeout(B.current);let z=()=>{M(_=>J.updateHeaderSettings({height_px:l},_,t??void 0))};C?z():B.current=setTimeout(z,400)},[M,t]),ge=pe((l,C=!0)=>{p(_=>_&&{..._,menu_gap_px:l}),k.current&&clearTimeout(k.current);let z=()=>{M(_=>J.updateHeaderSettings({menu_gap_px:l},_,t??void 0))};C?z():k.current=setTimeout(z,400)},[M,t]),Se=pe(()=>{M(async l=>{let C=await J.clearHeaderLogo(l,t??void 0);return C.reverse_logo?J.updateHeaderSettings({reverse_logo:!1},l,t??void 0):C})},[M,t]),Ye=pe(l=>{p(C=>C&&{...C,menu:l?.id??null,menu_handle:l?.handle??null,menu_name:l?.name??null,menu_items:l?l.items.map(z=>({label:z.label,url:z.url,dropdown_menu:z.dropdown_menu??null,dropdown_items:z.dropdown_items??[]})):[]}),M(C=>J.updateHeaderSettings({menu:l?.id??null},C,t??void 0))},[M,t]),ve=E(Ie,{children:[w&&E("div",{className:"mx-4 mt-3 flex items-center justify-between gap-3 rounded bg-red-50 px-3 py-2 text-[12px] text-red-700",children:[d("span",{children:w}),!r&&d("button",{type:"button",onClick:()=>fe(l=>l+1),className:"shrink-0 rounded border border-red-300 px-2 py-0.5 font-medium text-red-700 transition-colors hover:bg-red-100",children:"Retry"})]}),r?E(Ie,{children:[d(Ql,{items:O,activeId:W.id,onSelect:a,ariaLabel:"Header settings"}),E("div",{id:ht,role:"tabpanel","aria-labelledby":W.htmlId,className:"flex flex-col p-4 [&>*+*]:mt-3",children:[W.id==="logo"&&E(Ie,{children:[d(re,{label:"Image"}),!s&&d(sc,{settings:r,websiteName:c,onPick:ae,onClear:Se,showHint:y}),d(Y,{label:"Reverse the Logo",children:d(ne,{value:r.reverse_logo,onChange:l=>T({reverse_logo:l})})}),d(he,{shown:y,children:"Keeps the logo readable on any header \u2014 flips just its black & white parts to contrast the bar behind it (in both light and dark themes). Any other colors are kept as-is."}),d(re,{label:"Placement"}),d(rc,{label:N.logoPosition.label,value:N.logoPosition.options.find(l=>l.value===N.logoPosition.choose(r.logo_position))?.label,children:d(be,{value:N.logoPosition.choose(r.logo_position),options:N.logoPosition.options,onChange:l=>T({logo_position:l}),ariaLabel:N.logoPosition.label})}),E("div",{className:"flex flex-col gap-1.5",children:[E("div",{className:"flex items-center justify-between",children:[d("span",{className:"text-[13px] text-zinc-600",children:"Size"}),E("span",{className:"text-[12px] tabular-nums text-zinc-500",children:[r.logo_size_px??Qe[r.logo_size],"px"]})]}),d("div",{className:"sf-slider",children:d("input",{type:"range",min:vs,max:Ts,step:2,value:r.logo_size_px??Qe[r.logo_size],onChange:l=>le(Number(l.target.value),!1),onPointerUp:l=>le(Number(l.currentTarget.value),!0),onKeyUp:l=>{/^(Arrow|Home|End|Page)/.test(l.key)&&le(Number(l.currentTarget.value),!0)},"aria-label":"Logo size in pixels"})}),d(he,{shown:y,children:"Sets the logo\u2019s height; the width follows the logo\u2019s own proportions."}),r.logo_size_px!=null&&d("button",{type:"button",onClick:()=>le(null),className:"self-start text-[12px] font-medium text-zinc-500 underline underline-offset-2 transition-colors hover:text-zinc-700",children:"Reset to default size"})]}),d(_e,{shown:y,onChange:g})]}),W.id==="menu"&&E(Ie,{children:[d(re,{label:"Links"}),d(ic,{token:e.current,menuId:r.menu,menuName:r.menu_name,itemCount:r.menu_items?.length??0,onPick:Ye}),d(Y,{label:N.menuAlign.label,children:d(be,{value:N.menuAlign.choose(r.menu_position),options:N.menuAlign.options.filter(l=>l.value!=="beside"||r.logo_position!=="center"),onChange:l=>T({menu_position:l}),ariaLabel:N.menuAlign.label})}),N.menuAlign.choose(r.menu_position)==="beside"&&E("div",{className:"flex flex-col gap-1.5",children:[E("div",{className:"flex items-center justify-between",children:[d("span",{className:"text-[13px] text-zinc-600",children:"Space from the logo"}),E("span",{className:"text-[12px] tabular-nums text-zinc-500",children:[r.menu_gap_px??Be.default,"px"]})]}),d("div",{className:"sf-slider",children:d("input",{type:"range",min:Be.min,max:Be.max,step:Be.step,value:r.menu_gap_px??Be.default,onChange:l=>ge(Number(l.target.value),!1),onPointerUp:l=>ge(Number(l.currentTarget.value),!0),onKeyUp:l=>{/^(Arrow|Home|End|Page)/.test(l.key)&&ge(Number(l.currentTarget.value),!0)},"aria-label":"Space from the logo in pixels"})}),d(he,{shown:y,children:"How much room the menu leaves the logo. Only the logo moves away; the space between the menu words stays as it is."}),r.menu_gap_px!=null&&d("button",{type:"button",onClick:()=>ge(null),className:"self-start text-[12px] font-medium text-zinc-500 underline underline-offset-2 transition-colors hover:text-zinc-700",children:"Reset to default space"})]}),d(Y,{label:N.menuRow.label,children:d(be,{value:N.menuRow.choose(r.menu_row),options:N.menuRow.options,onChange:l=>T({menu_row:l}),ariaLabel:N.menuRow.label})}),r.logo_position==="center"&&r.menu_position!=="center"&&d(Y,{label:"Left items",children:d("select",{value:r.menu_split??3,onChange:l=>T({menu_split:Number(l.target.value)}),className:"rounded border border-zinc-300 bg-white px-2 py-1.5 text-[13px]",children:[1,2,3,4].map(l=>d("option",{value:l,children:l},l))})}),d(Y,{label:N.navTextCase.label,children:d(be,{value:N.navTextCase.choose(r.nav_text_case),options:N.navTextCase.options,onChange:l=>T({nav_text_case:l}),ariaLabel:N.navTextCase.label})}),E(he,{shown:y,children:[d("strong",{children:"Uppercase"})," draws SEARCH and BAG;"," ",d("strong",{children:"Capitalised"})," draws Search and Bag. It covers the menu links and the Tools words together, and it leaves a name like FusionForge exactly as you typed it."]})]}),W.id==="tools"&&E(Ie,{children:[d(re,{label:"Style"}),d(Y,{label:N.utilStyle.label,children:d(be,{value:N.utilStyle.choose(r.util_style),options:N.utilStyle.options,onChange:l=>T({util_style:l}),ariaLabel:N.utilStyle.label})}),E(he,{shown:y,children:[d("strong",{children:"Text"})," draws the words \u2014 Search, Account, Bag \u2014 instead of the little pictures. It changes how they look, not whether they are shown: that stays with the switches below."]}),d(re,{label:"Search"}),d(Y,{label:"Search",children:d(ne,{value:r.search_enabled,onChange:l=>T({search_enabled:l})})}),d(Y,{label:N.searchPosition.label,children:d(be,{value:N.searchPosition.choose(r.search_position),options:N.searchPosition.options,onChange:l=>T({search_position:l}),ariaLabel:N.searchPosition.label})}),d(re,{label:"Country selector"}),d(Y,{label:"Show selector",children:d(ne,{value:r.country_selector_enabled,onChange:l=>T({country_selector_enabled:l})})}),!s&&r.country_selector_enabled&&E(he,{shown:y,children:["Which countries this website serves \u2014 and each region's own URL \u2014 is set in the admin console under"," ",d("strong",{children:"Storefront \u203A Settings \u203A Regions & currencies"}),". Whether the picker is SHOWN stays here: that is header chrome, but the served-country list has tax consequences and belongs with commerce configuration."]}),d(re,{label:"Account and cart"}),d(Y,{label:"Account",children:d(ne,{value:r.account_enabled??!0,onChange:l=>T({account_enabled:l})})}),d(Y,{label:"Cart",children:d(ne,{value:r.cart_enabled??!0,onChange:l=>T({cart_enabled:l})})}),d(_e,{shown:y,onChange:g})]}),W.id==="look"&&E(Ie,{children:[d(re,{label:"Dimensions"}),d(Y,{label:N.width.label,children:d(be,{value:N.width.choose(r.width),options:N.width.options,onChange:l=>T({width:l}),ariaLabel:N.width.label})}),E("div",{className:"flex flex-col gap-1.5",children:[E("div",{className:"flex items-center justify-between",children:[d("span",{className:"text-[13px] text-zinc-600",children:"Height"}),E("span",{className:"text-[12px] tabular-nums text-zinc-500",children:[r.height_px??Je.default,"px"]})]}),d("div",{className:"sf-slider",children:d("input",{type:"range",min:Je.min,max:Je.max,step:2,value:r.height_px??Je.default,onChange:l=>te(Number(l.target.value),!1),onPointerUp:l=>te(Number(l.currentTarget.value),!0),onKeyUp:l=>{/^(Arrow|Home|End|Page)/.test(l.key)&&te(Number(l.currentTarget.value),!0)},"aria-label":"Header height in pixels"})}),d(he,{shown:y,children:"Sets how tall the header bar is; the content below it shifts down to match."}),r.height_px!=null&&d("button",{type:"button",onClick:()=>te(null),className:"self-start text-[12px] font-medium text-zinc-500 underline underline-offset-2 transition-colors hover:text-zinc-700",children:"Reset to default height"})]}),d(Y,{label:"Border thickness",children:E("div",{className:"flex items-center gap-2",children:[d("input",{type:"number",min:0,max:20,value:r.border_thickness,onChange:l=>T({border_thickness:Math.max(0,Number(l.target.value)||0)}),className:"w-20 rounded border border-zinc-300 px-2 py-1.5 text-[13px]"}),d("span",{className:"text-[12px] text-zinc-500",children:"px"})]})}),d(re,{label:"Color"}),d(Y,{label:"Theme",children:d(Os,{value:r.theme??fn,onChange:l=>T({theme:l===fn?null:l}),followLabel:"Follow the site theme"})}),d(he,{shown:y,children:"The color the bar paints once it is solid \u2014 after any scroll, and on every product page from the first paint. Follow the site theme keeps it on whatever palette the site is on."}),d(Y,{label:N.topTextColor.label,children:d(be,{value:N.topTextColor.choose(r.top_text_color),options:N.topTextColor.options,onChange:l=>T({top_text_color:l}),ariaLabel:N.topTextColor.label})}),d(he,{shown:y,children:"Auto reads what the first section on each page says it is \u2014 dark, light or accent \u2014 and picks the text that can be read on it. Set Light or Dark to decide it yourself when Auto reads a page wrong."}),d(re,{label:"Behavior"}),d(Y,{label:"Sticky header",children:E("select",{value:r.sticky,onChange:l=>T({sticky:l.target.value}),className:"w-full rounded border border-zinc-300 bg-white px-2 py-1.5 text-[13px]",children:[d("option",{value:"none",children:"None"}),d("option",{value:"always",children:"Always"}),d("option",{value:"on_scroll_up",children:"On scroll up"})]})}),h&&E(Ie,{children:[d(re,{label:"Display mode"}),d("p",{className:"text-[12px] text-zinc-500",children:"Set the default Light / Dark / Auto mode and show or hide the light\u2194dark switch in Appearance."}),d("button",{type:"button",onClick:h,className:"self-start text-[13px] font-medium text-zinc-700 underline underline-offset-2 transition-colors hover:text-zinc-900",children:"Set up display mode \u2192"})]}),d(_e,{shown:y,onChange:g})]})]})]}):w?null:d("p",{className:"p-4 text-[13px] text-zinc-500",children:"Loading\u2026"})]});return i?E("div",{className:"flex flex-col",children:[b&&d("div",{className:"px-4 pt-2 text-[11px] text-zinc-400",children:"Saving\u2026"}),ve]}):E("div",{className:"fixed inset-0 z-[1000] flex justify-end",children:[d("button",{type:"button","aria-label":"Close header settings",onClick:n,className:"absolute inset-0 bg-black/20"}),E("aside",{className:"relative flex h-full w-[320px] flex-col overflow-y-auto border-l border-zinc-200 bg-white text-zinc-800 shadow-xl",children:[E("header",{className:"sticky top-0 z-10 flex items-center justify-between bg-white px-4 py-3",children:[d("h2",{className:"text-[15px] font-semibold",children:"Header"}),E("div",{className:"flex items-center gap-2",children:[b&&d("span",{className:"text-[11px] text-zinc-400",children:"Saving\u2026"}),d("button",{type:"button",onClick:n,className:"rounded p-1 text-zinc-500 hover:bg-zinc-100","aria-label":"Close",children:"\u2715"})]})]}),ve]})]})}function sc({settings:e,websiteName:t,onPick:n,onClear:o,showHint:i}){let s=!!e.logo_url,c=!s&&!!e.default_logo_url,h=fo(e.effective_logo_url),u=t&&t.trim()?t.trim():vt;return E("div",{className:"flex flex-col gap-2",children:[d("button",{type:"button",onClick:n,title:"Choose an SVG logo from your media library, or upload one",className:"flex h-20 items-center justify-center rounded border border-dashed border-zinc-300 bg-zinc-50 px-3 transition-colors hover:border-zinc-400 hover:bg-zinc-100",children:h?d("img",{src:h,alt:"Header logo",className:"max-h-12 max-w-full object-contain"}):E("span",{className:"text-[12px] text-zinc-400",children:["No logo \u2014 \u201C",u,"\u201D wordmark shown"]})}),h&&d("span",{className:"truncate text-[11px] text-zinc-500",title:Jt(h),children:Jt(h)}),d(he,{shown:i,children:s?"Custom SVG logo uploaded for this store.":c?"Using your company logo from the database.":"No company logo on file \u2014 upload an SVG or the wordmark is used."}),E("div",{className:"flex gap-2",children:[d("button",{type:"button",onClick:n,className:"rounded border border-zinc-300 px-3 py-1.5 text-[13px] font-medium text-zinc-700 transition-colors hover:bg-zinc-100",children:s?"Replace SVG logo":"Upload SVG logo"}),s&&d("button",{type:"button",onClick:o,className:"rounded px-3 py-1.5 text-[13px] font-medium text-zinc-500 transition-colors hover:bg-zinc-100",children:"Use company default"})]})]})}function ic({token:e,menuId:t,menuName:n,itemCount:o,onPick:i}){let s=xe(),[c,h]=Ee(null),[u,r]=Ee(!1),p=pe(a=>{h(a),r(!0)},[]);mt(()=>{let a=!1;return qs(e).then(y=>!a&&p(y)).catch(()=>!a&&h([])),()=>{a=!0}},[e,p]),mt(()=>{let a=!1,y=Wo(()=>{Zs(e).then(g=>!a&&p(g)).catch(()=>{})});return()=>{a=!0,y()}},[e,p]);let w=c===null,S=!w&&(c?.length??0)===0,b=!w&&(c??[]).some(a=>a.id===t),v=b?t:"",P=u&&!!t&&!b;return E("div",{className:"flex flex-col gap-2",children:[d(Y,{label:"Menu",children:E("select",{value:v,disabled:w||S,onChange:a=>{let y=a.target.value,g=y?(c??[]).find(O=>O.id===y):null;i(g?{...g,items:g.items.map(O=>({...O,dropdown_items:(c??[]).find(W=>W.id===O.dropdown_menu)?.items.map(W=>({label:W.label,url:W.url}))??[]}))}:null)},className:"max-w-[170px] rounded border border-zinc-300 bg-white px-2 py-1.5 text-[13px] disabled:opacity-60",children:[d("option",{value:"",children:w?"Loading\u2026":S?"No menus":"Default links"}),(c??[]).map(a=>E("option",{value:a.id,children:[a.name," (",a.item_count??a.items.length,")"]},a.id))]})}),P?d("p",{className:"text-[12px] text-[var(--sf-warning,#b45309)]",children:xs}):d("p",{className:"text-[12px] text-zinc-500",children:v?`Header shows \u201C${n??"the linked menu"}\u201D \u2014 ${o} link${o===1?"":"s"}.`:S?"No menus yet. Create one in Storefront \u2192 Menus, then pick it here.":"Pick a menu to drive the header links, or keep the built-in default links."}),d("button",{type:"button",onClick:()=>s.send("storefront-editor:open-menus",{menuId:v||null}),className:"self-start text-[13px] font-medium text-zinc-700 underline underline-offset-2 transition-colors hover:text-zinc-900",children:v?"Edit menu \u2192":"Manage menus \u2192"})]})}function he({shown:e,children:t}){return e?d("p",{className:"text-[11px] text-[var(--sf-muted)]",children:t}):null}function rc({label:e,value:t,children:n}){return E("div",{className:"flex flex-col gap-1.5",children:[E("div",{className:"flex items-center justify-between",children:[d("span",{className:"text-[13px] text-zinc-600",children:e}),t&&d("span",{className:"text-[12px] text-zinc-500",children:t})]}),n]})}function re({label:e}){return d(ze,{label:e})}function Y({label:e,children:t}){return E("div",{className:"flex flex-wrap items-center justify-between gap-x-3 gap-y-[7px]",children:[d("span",{className:"text-[13px] text-[var(--sf-text-secondary)]",children:e}),d("div",{className:"flex-shrink-0",children:t})]})}var ac=[{label:"Left",value:"left"},{label:"Center",value:"center"}],lc=[{label:"Left",value:"left"},{label:"Right",value:"right"}],cc=[{label:"Right",value:"left"},{label:"Centered",value:"center"},{label:"Beside logo",value:"beside"}],dc=[{label:"Own row",value:"top"},{label:"Same row",value:"inline"}],uc=[{label:De.page,value:"page"},{label:De.full,value:"full"}],pc=[{label:"Icon",value:"icon"},{label:"Text",value:"text"}],hc=[{label:"Uppercase",value:"uppercase"},{label:"Capitalised",value:"capitalised"}],mc=[{label:"Auto",value:"auto"},{label:"Light",value:"light"},{label:"Dark",value:"dark"}],N={logoPosition:{label:"Position",options:ac,choose:e=>e==="right"?"center":e},menuAlign:{label:"Alignment",options:cc,choose:e=>e==="center"?"center":e==="beside"?"beside":"left"},menuRow:{label:"Row",options:dc,choose:e=>e==="inline"?"inline":"top"},searchPosition:{label:"Position",options:lc,choose:e=>e},width:{label:"Width",options:uc,choose:e=>e},navTextCase:{label:"Letters",options:hc,choose:e=>e==="capitalised"?"capitalised":"uppercase"},utilStyle:{label:"Show as",options:pc,choose:e=>e==="text"?"text":"icon"},topTextColor:{label:"Text color at the top",options:mc,choose:e=>Cs(e)}};import{useEffect as fc,useState as gc}from"react";import{SettingsField as bc}from"efficient-easel/panel";import{TypeIcon as yc}from"efficient-easel/icons";import{Fragment as Tc,jsx as oe,jsxs as Yi}from"react/jsx-runtime";var wc="Chat with us",Sc="We usually reply within a few minutes",vc="Hi! Ask us anything \u2014 about a wheel, an order, or fitment. Leave your details and we\u2019ll reply.";function Jn({label:e,value:t,placeholder:n,onCommit:o,multiline:i=!1}){let[s,c]=gc(t);fc(()=>c(t),[t]);let h=()=>{s!==t&&o(s)};return oe(bc,{label:e,icon:oe(yc,{}),children:i?oe("textarea",{value:s,placeholder:n,rows:3,onChange:u=>c(u.target.value),onBlur:h,"aria-label":e}):oe("input",{type:"text",value:s,placeholder:n,onChange:u=>c(u.target.value),onBlur:h,onKeyDown:u=>{u.key==="Enter"&&u.currentTarget.blur()},"aria-label":e,autoComplete:"off"})})}function Qn(){let{chat:e,setChat:t}=Js();return Yi(Tc,{children:[Yi("div",{className:"sf-field sf-field--row",children:[oe("span",{className:"sf-field-label sf-field-label--inline",children:"Show the chat bubble"}),oe(ne,{value:e.enabled,onChange:n=>t({enabled:n})})]}),oe("p",{className:"sf-field-hint",children:e.enabled?"The floating chat bubble shows in the corner of every page.":"The chat bubble is hidden across the whole site."}),oe(ze,{label:"Wording"}),oe(Jn,{label:"Title",value:e.title,placeholder:wc,onCommit:n=>t({title:n})}),oe(Jn,{label:"Subtitle",value:e.subtitle,placeholder:Sc,onCommit:n=>t({subtitle:n})}),oe(Jn,{label:"Greeting message",value:e.greeting,placeholder:vc,onCommit:n=>t({greeting:n}),multiline:!0}),oe("p",{className:"sf-field-hint",children:"Leave a field blank to use the built-in wording."})]})}import{useEffect as xc,useId as qi,useState as Zi}from"react";import{SettingsField as Pc}from"efficient-easel/panel";import{Fragment as eo,jsx as Ae,jsxs as ji}from"react/jsx-runtime";var kc={instagram:"instagram.com/yourshop",facebook:"facebook.com/yourshop",tiktok:"tiktok.com/@yourshop",youtube:"youtube.com/@yourshop",x:"x.com/yourshop",linkedin:"linkedin.com/company/yourshop",pinterest:"pinterest.com/yourshop",whatsapp:"wa.me/61400000000"};function Ec({platform:e}){let{rows:t,saveLink:n}=bn(),{value:o,error:i}=t[e],[s,c]=Zi(o),[h,u]=Zi(!1),r=qi(),p=qi();xc(()=>c(o),[o]);let w=async()=>{if(s.trim()===o){s!==o&&c(o);return}u(!0),await n(e,s),u(!1)},S=Rs[e];return ji(eo,{children:[Ae(Pc,{label:S,htmlFor:r,icon:Ae(js,{platform:e,iconStyle:"outline",size:18}),children:Ae("input",{id:r,type:"text",inputMode:"url",value:s,placeholder:kc[e],onChange:b=>c(b.target.value),onBlur:()=>{w()},onKeyDown:b=>{b.key==="Enter"&&b.currentTarget.blur(),b.key==="Escape"&&(c(o),b.currentTarget.blur())},"aria-invalid":i?!0:void 0,"aria-describedby":i?p:void 0,"aria-busy":h||void 0,autoComplete:"off",spellCheck:!1})}),i&&Ae("p",{id:p,className:"sf-note sf-note--error",role:"alert",children:i})]})}function to({unavailable:e}){let{canSave:t}=bn();return!t&&e?Ae(eo,{children:e}):ji(eo,{children:[Ae("p",{className:"sf-field-hint",children:"Paste a link to each profile. A platform left empty shows nothing on the site."}),_s.map(n=>Ae(Ec,{platform:n},n))]})}import{useMemo as Cc}from"react";import{useEditor as Nc}from"efficient-easel/editor";import{SettingsField as _c}from"efficient-easel/panel";import{jsx as Ve,jsxs as Ji}from"react/jsx-runtime";var Rc="root:default-zone";function no({heroId:e}){let{appState:t,dispatch:n}=Nc(r=>r),o=t.data.content??[],i=o.findIndex(r=>r.props.id===e),s=i>=0?o[i]:null,c=s?s.props.showTicker??!0:!0,h=Cc(()=>{let r=s?.props.tickerItems;return Array.isArray(r)?r:ei.map(p=>({text:p}))},[s]);if(!s)return Ve("div",{className:"sf-field",style:{color:"var(--sf-muted)",fontSize:12},children:"This ticker\u2019s hero is no longer on the page."});let u=r=>n({type:"replace",destinationZone:Rc,destinationIndex:i,data:{...s,props:{...s.props,...r}}});return Ji("div",{children:[Ve(ze,{label:"Ticker"}),Ji("div",{className:"sf-field sf-field--row",children:[Ve("span",{className:"sf-field-label sf-field-label--inline",children:"Show ticker"}),Ve(ne,{value:c,onChange:r=>u({showTicker:r})})]}),Ve(_c,{label:gn.label,icon:gn.icon,children:Ve($s,{items:h,placeholder:"item",onChange:r=>u({tickerItems:r}),markup:!0})})]})}import{useCallback as Ic,useEffect as Ac,useRef as Hc,useState as Ke}from"react";import{createPortal as Lc}from"react-dom";import{InspectorIconButton as Fc}from"efficient-easel/chrome";import{CopyToPageIcon as Oc}from"efficient-easel/icons";import{Fragment as Qi,jsx as me,jsxs as qt}from"react/jsx-runtime";function oo({node:e,currentSlug:t,siteId:n,tokenRef:o,runAuthed:i,onNotify:s}){let[c,h]=Ke(!1),[u,r]=Ke(null),[p,w]=Ke(!1),[S,b]=Ke(null),v=Hc(null),[P,a]=Ke(null),[y,g]=Ke(null),O=Ic(async()=>{let R=o.current;if(!R){w(!0);return}try{r(await J.listPages(R,n))}catch{w(!0)}},[o,n]),W=()=>{if(c){h(!1);return}let R=v.current?.getBoundingClientRect();R&&a({top:R.bottom+6,right:Math.max(8,window.innerWidth-R.right)}),g(v.current?.closest(".sf-editor")??document.body),r(null),w(!1),O(),h(!0)};Ac(()=>{if(!c)return;let R=q=>{q.key==="Escape"&&h(!1)};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[c]);let F=bs(u??[]).filter(R=>R.slug!==t),fe=async R=>{if(S)return;b(R.slug);let q=ws(ii(e)),B=await i(async k=>{let M=await J.getPageById(R.id,k);if(!M)throw new Error(`Page "${R.slug}" no longer exists.`);let T=M.layout??{},ee=Array.isArray(T.content)?[...T.content]:[],ae=ee.findIndex(le=>le?.type===Pe);ee.splice(ae===-1?ee.length:ae,0,q),await J.saveLayout(R.id,{root:{},zones:{},...T,content:ee},k,M.updated_at??"")});b(null),h(!1),s?.(B?`Duplicated to \u201C${hn(R)}\u201D`:"Couldn\u2019t duplicate the section \u2014 please retry",B?"success":"error")};return qt(Qi,{children:[me(Fc,{buttonRef:v,label:"Duplicate to another page",hasPopup:"menu",expanded:c,onClick:W,children:me(Oc,{size:15})}),c&&P&&y&&Lc(qt(Qi,{children:[me("div",{className:"sf-dupmenu-backdrop",onClick:()=>h(!1)}),qt("div",{className:"sf-dupmenu",role:"menu",style:{top:P.top,right:P.right},children:[me("div",{className:"sf-dupmenu-head",children:"Duplicate to page\u2026"}),p?me("div",{className:"sf-dupmenu-empty",children:"Couldn\u2019t load pages"}):u===null?me("div",{className:"sf-dupmenu-empty",children:"Loading\u2026"}):F.length===0?me("div",{className:"sf-dupmenu-empty",children:"No other pages"}):F.map(R=>qt("button",{type:"button",role:"menuitem",className:"sf-dupmenu-item",disabled:S!==null,onClick:()=>fe(R),children:[me("span",{className:"sf-dupmenu-name",children:hn(R)}),S===R.slug?me("span",{className:"sf-note",children:"Copying\u2026"}):!R.is_published&&me("span",{className:"sf-note",children:"draft"})]},R.id))]})]}),y)]})}import{SettingsDrill as Bc}from"efficient-easel/panel";import{jsx as ft,jsxs as zc}from"react/jsx-runtime";var Mc="Not shown on the page";function Dc({part:e,onOpen:t}){return ft(Bc,{name:e.label,preview:e.offPage?Mc:e.preview||"Empty",offPage:e.offPage,status:e.hidden?ft("span",{className:"sf-entry-eye",role:"img","aria-label":"Hidden on the page",children:ft(Ps,{name:"eye-off",size:14})}):void 0,onOpen:()=>t(e.key)})}function er({parts:e,onOpen:t}){let n=e.filter(o=>!o.identifier);return n.length?zc("div",{className:"sf-entries",children:[ft("h3",{className:"sf-entries-head",children:"Text"}),n.map(o=>ft(Dc,{part:o,onOpen:t},o.key))]}):null}import{useState as Wc}from"react";import{createNode as Gc,newId as Uc}from"efficient-easel/data";import{useEditor as $c}from"efficient-easel/editor";import{jsx as Zt,jsxs as tr}from"react/jsx-runtime";function so(){let{appState:e,dispatch:t,config:n}=$c(p=>p),{readOnly:o}=Me(),[i,s]=Wc(!1),c=e.data.content;if(o||c.some(p=>p.type===tt))return null;let h=c.find(p=>p.type===Pe)??null,u=(p,w)=>Gc(n,p,w);return tr("div",{className:"sf-box-footer-switch",children:[Zt("p",{className:"sf-box-footer-switch-text",children:"Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept."}),i?tr("div",{className:"sf-box-footer-switch-row",children:[Zt("button",{type:"button",className:"es-btn-primary",onClick:()=>{let p=gi(h,u,Uc(tt));t({type:"setData",data:w=>({...w,content:[...Pt(w.content,p)]}),recordHistory:!0}),s(!1)},children:"Switch now"}),Zt("button",{type:"button",className:"es-btn-ghost",onClick:()=>s(!1),children:"Cancel"})]}):Zt("button",{type:"button",className:"es-btn-ghost",onClick:()=>s(!0),children:"Switch to Box footer"})]})}import{useState as io}from"react";import{createNode as Vc,newId as Kc}from"efficient-easel/data";import{useEditor as Xc}from"efficient-easel/editor";var nr="Flex",or=10;function sr(e,t,n,{logoHeightPx:o}={}){let i=e.util_style==="text"?"text":"icon",s={...e.menu?{id:e.menu}:{},...e.menu_handle?{handle:e.menu_handle}:{},...e.menu_name?{name:e.menu_name}:{},items:(e.menu_items??[]).map(({label:r,url:p})=>({label:r,url:p}))},c=[e.search_enabled?t("SearchBlock",{style:i}):null,e.country_selector_enabled?t("CountrySwitchBlock"):null,e.cart_enabled!==!1?t("CartBlock",{style:i}):null].filter(r=>r!==null),h=t(nr,{direction:"row",justify:"between",align:"center",share:"content",wrap:"nowrap",phoneRow:3,sectionPaddingTop:or,sectionPaddingBottom:or,content:[t("LogoBlock",o?{heightPx:o}:{}),t("MenuBlock",{menu:s,direction:"row"}),...c.length?[t(nr,{direction:"row",justify:"end",align:"center",share:"content",wrap:"nowrap",phoneRow:3,content:c})]:[]]}),u=xt(et,n,[h]);return{...u,props:{...u.props,sticky:e.sticky??"always",topTextColor:e.top_text_color??"auto"}}}import{jsx as gt,jsxs as ir}from"react/jsx-runtime";function ro(){let{appState:e,dispatch:t,config:n}=Xc(P=>P),{readOnly:o,tokenRef:i,siteId:s}=Me(),[c,h]=io(!1),[u,r]=io(!1),[p,w]=io(!1),S=e.data.content;if(o||S.some(P=>P.type===et))return null;let b=(P,a)=>Vc(n,P,a);return ir("div",{className:"sf-box-footer-switch",children:[gt("p",{className:"sf-box-footer-switch-text",children:"Build the site header out of Boxes and blocks, like a page: the same logo, menu, search, region and cart. Your current header is kept."}),c?ir("div",{className:"sf-box-footer-switch-row",children:[gt("button",{type:"button",className:"es-btn-primary",onClick:async()=>{let P=i.current;if(!(!P||u)){r(!0),w(!1);try{let a=await Et(P,s),y=a.logo_size_px??Qe[a.logo_size],g=sr(a,b,Kc(et),{logoHeightPx:y});t({type:"setData",data:O=>({...O,content:[...Pt(O.content,g)]}),recordHistory:!0}),h(!1)}catch{w(!0)}finally{r(!1)}}},disabled:u,children:u?"Switching\u2026":"Switch now"}),gt("button",{type:"button",className:"es-btn-ghost",onClick:()=>h(!1),disabled:u,children:"Cancel"})]}):gt("button",{type:"button",className:"es-btn-ghost",onClick:()=>h(!0),children:"Switch to Box header"}),p?gt("p",{className:"sf-box-footer-switch-text",role:"alert",children:"The header settings could not be read. Try again."}):null]})}import{useState as Yc}from"react";import{useSelectedFields as qc}from"efficient-easel/editor";import{Inspector as Zc,planFields as jc}from"efficient-easel/fields";import{jsx as rr}from"react/jsx-runtime";var ao=new Map,Jc=Object.fromEntries(Ks.map(e=>{let t=Ws[e];return[e,rr(t,{},e)]}));function lo({entries:e}){let{id:t,fields:n,values:o,readOnly:i,onChange:s}=qc(),[c,h]=Yc(()=>ao.get(t)),u=ao.get(t),r=jc(n).buckets,p=u&&r.includes(u)?u:c&&r.includes(c)?c:r[0],w=p===void 0||Gs(r,p)!==!0;return rr(Zc,{fields:n,values:o,onChange:s,readOnly:i,tab:p,onTab:S=>{ao.set(t,S),h(S)},tabIcons:Jc,idPrefix:t,ariaLabel:"Section settings",children:w?e:null})}import{Fragment as co,jsx as A,jsxs as we}from"react/jsx-runtime";var uo={kind:"puck"},mg={kind:"header"},fg={kind:"website"},gg={kind:"chat"},bg={kind:"social"},Xe="Part";function sd(e,t,n){let o=e.describeNode(t);return{name:n,kindLabel:o?`${Xe} of ${o.label}`:Xe}}function lr({what:e}){return we("div",{className:"sf-note",children:[A("p",{children:we("strong",{children:[e," settings belong to a website."]})}),we("p",{children:["A template is a blueprint \u2014 it has no website of its own, so there is nothing here to change. Each website created from this template sets its own ",e.toLowerCase()," afterwards."]})]})}var id={header:{name:"Header",kindLabel:"Site settings",icon:"header",render:(e,t)=>A(jn,{inline:!0,placeholderMode:t.capabilities.placeholderFrames,tokenRef:t.tokenRef,siteId:t.siteId,websiteName:t.websiteName??void 0,onOpenWebsiteSettings:t.onOpenWebsiteSettings,onAuthExpired:()=>t.notifyParent("storefront-editor:auth-expired")})},website:{name:"Appearance",kindLabel:"Site settings",icon:"website",render:(e,t)=>A(Yn,{themeFromDocument:!t.capabilities.hasSiteTheme,tokenRef:t.tokenRef,siteId:t.siteId,onNotify:t.onNotify})},chat:{name:"Live chat",kindLabel:"Site settings",icon:"chat",render:()=>A(Qn,{})},social:{name:"Social links",kindLabel:"Site settings",icon:"social",render:()=>A(to,{unavailable:A(lr,{what:"Social link"})})},ticker:{name:yn,kindLabel:Xe,icon:"ticker",head:(e,t)=>e.kind==="ticker"?sd(t,e.heroId,yn):null,render:e=>A(no,{heroId:e.kind==="ticker"?e.heroId:""})},part:{name:Xe,kindLabel:Xe,icon:"Text",head:(e,t)=>{if(e.kind!=="part")return null;let n=t.describeNode(e.nodeId);if(!n)return null;let{key:o,row:i}=Fe(e.propKey),s=i?Ht(n.fields[o],i):n.fields[o],c=Ro(Fo(Lo(s??{},o)),i);return{name:t.styleNameOfPart(e.nodeId,e.propKey)??c,kindLabel:`${Xe} of ${n.label}`}},render:(e,t)=>e.kind==="part"?A(_n,{nodeId:e.nodeId,propKey:e.propKey,onBack:()=>t.onSelectNode(e.nodeId),onEditStyle:t.onOpenSiteStyles}):null}},rd=new Set(["header","website","chat"]);function ad(e,t){if(e==="puck")return null;let n=id[e];return rd.has(e)&&!t.hasSiteSettings?{...n,kindLabel:"Not part of a template",render:()=>A(lr,{what:n.name})}:n}function ld({mode:e,onOpenWebsiteSettings:t,onOpenSiteStyles:n,onSelectNode:o,hideNodeActions:i=!1,onNotify:s,onHidePanel:c}){let{capabilities:h,tokenRef:u,notifyParent:r,currentSlug:p,siteId:w,runAuthed:S}=Me(),{websiteName:b,fonts:v}=V(),{partStyle:P}=kt(),a=Oe(),{select:y}=We(),{selectedItem:g,getItemById:O,getSelectorForId:W,config:F,appState:fe}=ed(K=>K),R=Xi(F,g?{type:g.type,props:g.props}:null),q=K=>F.components[K]?.label??K,B=g?W(g.props.id):void 0,k=ad(e.kind,h),M={capabilities:h,tokenRef:u,describeNode:K=>{let ce=O(K);if(!ce)return null;let Ce=F.components[ce.type];return{type:ce.type,label:Ce?.label??ce.type,fields:Ce?.fields??{}}},styleNameOfPart:(K,ce)=>{let Ce=O(K);if(!Ce)return null;let jt=Ne(K,ce),f=P?.partId===jt?P:null;return Li(Ce.props,ce,f,v)},siteId:w,websiteName:b??null,notifyParent:r,onNotify:s,onOpenWebsiteSettings:t,onOpenSiteStyles:n,onSelectNode:o},T=k?.head?.(e,M)??null,ee=T?.name??(k?k.name:g?q(g.type):"Page settings"),ae=T?.kindLabel??(k?k.kindLabel:g?B&&B.zone!==pn?"Block":"Section":"Page"),le=k?k.icon:g?g.type:"page",te=k?null:g?F.components[g.type]?.fields??null:F.root?.fields??null,ge=te?Xs(te):2,Se=e.kind==="puck"&&g?Lt(g.type):null,Ye=!!g&&!!B&&B.zone===pn&&g.type!==Pe&&g.type!==ms,ve=fs(fe?.data,g),l=()=>{ve||B&&a.duplicateComponent(B.zone,B.index)},C=()=>{B&&(a.removeComponent(B.zone,B.index),a.select(null))},z=g?F.components[g.type]?.defaultProps?.previewHover:void 0,_=e.kind==="puck"&&!!g&&!!B&&z!==void 0,Z=_&&g.props.previewHover===!0,j=()=>{!g||!B||a.replaceComponent(B.zone,B.index,{...g,props:{...g.props,previewHover:!Z}})},[se,ie]=Qc(pt);return we("div",{className:`es-sidepanel es-sidepanel--right sf-panel sf-panel--right${se?"":" sf-hints-folded"}`,children:[A(td,{icon:A(Qs,{type:le,size:15}),name:ee,kind:ae,actions:!i&&e.kind==="puck"&&g&&g.type!==Pe?we(co,{children:[A(ar,{label:"Duplicate section",title:ve??void 0,disabled:ve!==null,onClick:l,children:A(nd,{size:15})}),Ye&&h.hasSiteSettings&&A(oo,{node:g,currentSlug:p,siteId:w??void 0,tokenRef:u,runAuthed:S,onNotify:s}),A(ar,{label:"Remove section",danger:!0,onClick:C,children:A(od,{size:15})}),c?A(_t,{side:"right",onHide:c,divider:!0}):null]}):c?A(_t,{side:"right",onHide:c}):void 0}),_&&we("div",{className:"sf-preview-pin",children:[we("div",{className:"sf-preview-pin-text",children:[A("span",{className:"sf-preview-pin-label",children:"Preview hover state"}),A("span",{className:"sf-preview-pin-hint",children:"not shown live"})]}),A(ne,{value:Z,onChange:j,label:"Preview hover state"})]}),A(Bs,{tier:ge,children:A("div",{className:"sf-insp-body sf-scroll",children:k?k.render(e,M):g?we(co,{children:[A(As,{children:A(lo,{entries:A(er,{parts:Oo(R??F.components[g.type]?.fields,g.props),onOpen:K=>y(Ne(g.props.id,K))})})}),g.type===Pe&&h.hasSiteSettings&&A(so,{}),Se&&A(Dt,{source:Se,slug:st(g?.props)}),A(_e,{shown:se,onChange:ie})]}):we(co,{children:[A(lo,{}),p===gs&&h.hasSiteSettings&&A(ro,{})]})})})]})}import{useCallback as cr,useEffect as dr}from"react";import{useEditor as cd}from"efficient-easel/editor";function Eg({mode:e,setMode:t,onOpenPart:n}){let{getSelectorForId:o}=cd(p=>p),i=Oe(),{setSelectedPartId:s,setSelectHandler:c}=We(),h=cr(p=>{let w=Io(p);if(!w)return;let{nodeId:S,propKey:b}=w;if(!b){t(v=>v.kind==="part"?uo:v);return}t(v=>v.kind==="part"&&v.nodeId===S&&v.propKey===b?v:{kind:"part",nodeId:S,propKey:b}),n?.(S)},[t,n]);dr(()=>{c(h)},[c,h]);let u=e.kind==="part"?Ne(e.nodeId,e.propKey):null;return dr(()=>{s(u)},[u,s]),{selectNode:cr(p=>{t(()=>uo);let w=o(p);w&&i.select(w)},[t,o,i]),openPartId:u}}import{useEffect as ur,useState as dd}from"react";import{bindUndoKeys as ud,useEditorApi as pd}from"efficient-easel/editor";function hd(e){let t=xe(),[n,o]=dd(null);return ur(()=>o(e.current),[e]),t.ownsDocument?typeof document>"u"?null:document:n}function Ig(e){let t=xe(),n=pd(),o=hd(e);ur(()=>{if(!(t.ownsDocument||!o))return ud(o,n)},[t,n,o])}import{EditorCanvas as bd}from"efficient-easel/editor";import{useEffect as pr}from"react";import{Fragment as fd,jsx as hr,jsxs as gd}from"react/jsx-runtime";var md=`
|
|
2
|
+
[${on}][${on}] { cursor: text; }
|
|
3
|
+
[${Te}][${Te}][${Te}] {
|
|
4
|
+
outline: 1px solid ${Ns.accent};
|
|
5
|
+
outline-offset: 2px;
|
|
6
|
+
}
|
|
7
|
+
[${Te}][${Te}]:has([${Te}]),
|
|
8
|
+
[data-puck-overlay-portal][data-puck-overlay-portal]:has([${Te}]) {
|
|
9
|
+
outline: none;
|
|
10
|
+
}
|
|
11
|
+
`;function po({children:e,document:t}){let{theme:n,themeMode:o,themeSwitchShown:i}=V(),s=wt(n);return pr(()=>{if(t)return ks(t,{mode:o,switchShown:i})},[t,o,i]),pr(()=>{if(t)return Es(t,s)},[t,s]),gd(fd,{children:[hr(ai,{}),hr("style",{children:md}),e]})}import{Fragment as mr,jsx as ho}from"react/jsx-runtime";function yd({children:e,componentId:t}){let{selectedPartId:n}=We();return Ao(n,t)?ho(mr,{}):ho(mr,{children:e})}function Yg(e){let{mirrorHostStyles:t}=ri(),n=li();return ho(bd,{...e,metadata:e.metadata??n,height:"fill",mirrorStyles:t,frameWrapper:po,overlay:yd})}export{Nt as a,xd as b,ui as c,gi as d,Rd as e,Id as f,Ad as g,Hd as h,Ld as i,Ih as j,Kt as k,Ki as l,Yn as m,Xl as n,Gh as o,Uh as p,$h as q,Xh as r,Yh as s,qh as t,Xi as u,uo as v,mg as w,fg as x,gg as y,bg as z,ld as A,Eg as B,hd as C,Ig as D,Yg as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Xb as S}from"./chunk-4KLEZTLW.js";import{jsx as y,jsxs as A}from"react/jsx-runtime";function I({spokes:l,mesh:i=!1,className:d}){let s=o=>Math.round(o*1e3)/1e3,u=[];for(let o=0;o<l;o++){let t=o/l*Math.PI*2-Math.PI/2;if(u.push({x1:s(100+Math.cos(t)*22),y1:s(100+Math.sin(t)*22),x2:s(100+Math.cos(t)*86),y2:s(100+Math.sin(t)*86),main:!0}),i){let r=t+Math.PI/l;u.push({x1:s(100+Math.cos(r)*22*1.4),y1:s(100+Math.sin(r)*22*1.4),x2:s(100+Math.cos(r)*78),y2:s(100+Math.sin(r)*78),main:!1})}}return A("svg",{viewBox:"0 0 200 200",fill:"none",stroke:"currentColor",className:d??"block h-[70%] w-[70%] transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)]",children:[y("circle",{cx:100,cy:100,r:92,strokeWidth:2}),y("circle",{cx:100,cy:100,r:84,strokeWidth:1,opacity:.4}),y("circle",{cx:100,cy:100,r:22,strokeWidth:2}),y("circle",{cx:100,cy:100,r:6,fill:"currentColor"}),u.map((o,t)=>y("line",{x1:o.x1,y1:o.y1,x2:o.x2,y2:o.y2,stroke:"currentColor",strokeWidth:o.main?6:3,strokeLinecap:"round",opacity:o.main?1:.5},t))]})}import{Children as H,isValidElement as W,useEffect as T,useLayoutEffect as B,useRef as N,useState as R}from"react";import{jsx as g,jsxs as O}from"react/jsx-runtime";var $=500;function F({value:l,onChange:i,disabled:d,children:h,className:p,style:f,name:s,id:u,"aria-label":o}){let t=H.toArray(h).flatMap(e=>{if(!W(e))return[];if(e.type!=="option")return[];let a=e.props,E=a.value!==void 0?String(a.value):"",M=a.children,P=typeof M=="string"||typeof M=="number"?String(M):E;return[{value:E,label:P,disabled:!!a.disabled}]}),[r,c]=R(!1),[b,m]=R(0),k=N(null),w=N(null),x=N({text:"",timer:0});T(()=>{if(!r)return;let e=a=>{!k.current?.contains(a.target)&&!w.current?.contains(a.target)&&c(!1)},n=a=>{a.key==="Escape"&&(c(!1),k.current?.focus())};return document.addEventListener("mousedown",e),document.addEventListener("keydown",n),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",n)}},[r]),T(()=>{if(!r)return;let e=t.findIndex(n=>n.value===(l??""));m(e>=0?e:0)},[r]),B(()=>{if(!r||!w.current)return;w.current.children.item(b)?.scrollIntoView({block:"nearest"})},[b,r]);let K=t.find(e=>e.value===(l??""))?.label??t[0]?.label??"",L=e=>{i?.({target:{value:e}}),c(!1),k.current?.focus()},D=e=>{if(t.length===0)return;let n=b;for(let a=0;a<t.length&&(n=(n+e+t.length)%t.length,!!t[n].disabled);a++);m(n)};return O("div",{className:"relative",children:[s&&g("input",{type:"hidden",name:s,value:l??""}),g("button",{ref:k,type:"button",disabled:d,"aria-haspopup":"listbox","aria-expanded":r,"aria-label":o,id:u,onClick:()=>!d&&c(e=>!e),onKeyDown:e=>{if(!d){if(e.key==="ArrowDown")e.preventDefault(),r?D(1):c(!0);else if(e.key==="ArrowUp")e.preventDefault(),r?D(-1):c(!0);else if(e.key==="Home")e.preventDefault(),m(0);else if(e.key==="End")e.preventDefault(),m(t.length-1);else if(e.key==="Enter"||e.key===" "){if(e.preventDefault(),!r){c(!0);return}let n=t[b];n&&!n.disabled&&L(n.value)}else if(e.key==="Tab")c(!1);else if(e.key.length===1&&/\S/.test(e.key)){window.clearTimeout(x.current.timer),x.current.text+=e.key.toLowerCase();let n=x.current.text,a=t.findIndex(E=>E.label.toLowerCase().startsWith(n));a>=0&&m(a),r||c(!0),x.current.timer=window.setTimeout(()=>{x.current.text=""},$)}}},className:`block w-full ${p??""}`,style:f,children:g("span",{className:"block w-full truncate text-left",children:K})}),r&&g("ul",{ref:w,role:"listbox",className:"absolute left-0 top-full z-50 mt-1 max-h-[280px] w-max min-w-full overflow-y-auto border-2 border-accent bg-bg shadow-xl",children:t.map((e,n)=>g("li",{role:"option","aria-selected":e.value===(l??""),"aria-disabled":e.disabled||void 0,onMouseEnter:()=>!e.disabled&&m(n),onMouseDown:a=>{a.preventDefault(),e.disabled||L(e.value)},className:["px-3 py-2.5 font-mono text-[13px] font-semibold uppercase tracking-[0.1em] transition-colors whitespace-nowrap",e.disabled?"cursor-not-allowed opacity-40":"cursor-pointer",n===b&&!e.disabled?"bg-accent text-bg":"bg-bg text-fg"].join(" "),children:e.label},`${e.value}_${n}`))})]})}import{useState as _}from"react";import{jsx as v,jsxs as C}from"react/jsx-runtime";function z({customerEmail:l}){let{coupon:i,applyCoupon:d,removeCoupon:h,couponBusy:p}=S(),[f,s]=_("");async function u(){p||!f.trim()||(await d(f,l),s(""))}return C("div",{className:"flex flex-col gap-2",children:[i===null?C("div",{className:"flex border border-line",children:[v("input",{type:"text",value:f,onChange:o=>s(o.target.value),onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),u())},placeholder:"Coupon code","aria-label":"Coupon code",className:"flex-1 bg-transparent px-3.5 py-3.5 font-mono text-[11px] uppercase tracking-[0.18em] text-fg outline-none placeholder:text-fg-dim"}),v("button",{type:"button",onClick:()=>{u()},disabled:p,className:"border-l border-line px-4 font-mono text-[10px] uppercase tracking-[0.26em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-wait disabled:opacity-60",children:p?"\u2026":"Apply"})]}):C("div",{className:["flex items-center justify-between gap-3 border px-3.5 py-3",i.valid?"border-accent":"border-line"].join(" "),style:i.valid?{background:"color-mix(in oklab, var(--accent) 8%, transparent)"}:void 0,children:[v("span",{className:["font-mono text-[11px] uppercase tracking-[0.22em]",i.valid?"text-accent":"text-fg-dim line-through"].join(" "),children:i.code}),v("button",{type:"button",onClick:h,"aria-label":`Remove coupon ${i.code}`,className:"font-mono text-[12px] text-fg-dim transition-colors hover:text-fg",children:"\u2715"})]}),i&&!i.valid&&i.message&&v("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-alert",children:i.message})]})}export{I as a,F as b,z as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var g=Object.create;var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);var l=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=h(a,d))||e.enumerable});return b};var n=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:!0}):c,b));export{m as a,n as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{K as b,M as T,q as p,r as S}from"./chunk-RF5DTRJ5.js";import"./chunk-Y6SLVHK3.js";var v={generatedAt:"2026-06-28T04:33:14.721Z",region:"audm",upstreamHits:80,makes:[{slug:"abarth",name:"Abarth"},{slug:"aion",name:"Aion"},{slug:"alfa-romeo",name:"Alfa Romeo"},{slug:"alpine",name:"Alpine"},{slug:"aston-martin",name:"Aston Martin"},{slug:"audi",name:"Audi"},{slug:"bentley",name:"Bentley"},{slug:"bmw",name:"BMW"},{slug:"bmw-alpina",name:"BMW Alpina"},{slug:"byd",name:"BYD"},{slug:"cadillac",name:"Cadillac"},{slug:"chery",name:"Chery"},{slug:"citroen",name:"Citro\xEBn"},{slug:"cupra",name:"Cupra"},{slug:"daihatsu",name:"Daihatsu"},{slug:"datsun",name:"Datsun"},{slug:"deepal",name:"Deepal"},{slug:"denza",name:"Denza"},{slug:"dodge",name:"Dodge"},{slug:"ds",name:"DS"},{slug:"ferrari",name:"Ferrari"},{slug:"fiat",name:"Fiat"},{slug:"ford",name:"Ford"},{slug:"foton",name:"Foton"},{slug:"geely",name:"Geely"},{slug:"genesis",name:"Genesis"},{slug:"great-wall",name:"Great Wall (GWM)"},{slug:"haval",name:"Haval"},{slug:"holden",name:"Holden"},{slug:"honda",name:"Honda"},{slug:"hyundai",name:"Hyundai"},{slug:"ineos",name:"Ineos"},{slug:"isuzu",name:"Isuzu"},{slug:"iveco",name:"Iveco"},{slug:"jac",name:"JAC"},{slug:"jaecoo",name:"Jaecoo"},{slug:"jaguar",name:"Jaguar"},{slug:"jeep",name:"Jeep"},{slug:"kg-mobility",name:"KGM"},{slug:"kia",name:"Kia"},{slug:"lamborghini",name:"Lamborghini"},{slug:"land-rover",name:"Land Rover"},{slug:"ldv",name:"LDV"},{slug:"leapmotor",name:"Leapmotor"},{slug:"lexus",name:"Lexus"},{slug:"lotus",name:"Lotus"},{slug:"mahindra",name:"Mahindra"},{slug:"maserati",name:"Maserati"},{slug:"mazda",name:"Mazda"},{slug:"mclaren",name:"McLaren"},{slug:"mercedes",name:"Mercedes-Benz"},{slug:"mercedes-maybach",name:"Mercedes-Maybach"},{slug:"mg",name:"MG"},{slug:"mini",name:"MINI"},{slug:"mitsubishi",name:"Mitsubishi"},{slug:"nissan",name:"Nissan"},{slug:"omoda",name:"Omoda"},{slug:"opel",name:"Opel"},{slug:"ora",name:"Ora"},{slug:"peugeot",name:"Peugeot"},{slug:"polaris",name:"Polaris"},{slug:"polestar",name:"Polestar"},{slug:"porsche",name:"Porsche"},{slug:"proton",name:"Proton"},{slug:"ram",name:"Ram"},{slug:"renault",name:"Renault"},{slug:"seat",name:"Seat"},{slug:"skoda",name:"Skoda"},{slug:"smart",name:"Smart"},{slug:"ssangyong",name:"SsangYong"},{slug:"subaru",name:"Subaru"},{slug:"suzuki",name:"Suzuki"},{slug:"tank",name:"Tank"},{slug:"tesla",name:"Tesla"},{slug:"toyota",name:"Toyota"},{slug:"triumph",name:"Triumph"},{slug:"volkswagen",name:"Volkswagen"},{slug:"volvo",name:"Volvo"},{slug:"zeekr",name:"Zeekr"}],models:{abarth:[{slug:"500e",name:"500e"},{slug:"695",name:"695"},{slug:"695c",name:"695C"}],aion:[{slug:"ut",name:"UT"}],"alfa-romeo":[{slug:"giulia",name:"Giulia"},{slug:"junior",name:"Junior"},{slug:"stelvio",name:"Stelvio"},{slug:"tonale",name:"Tonale"}],alpine:[{slug:"a110",name:"A110"},{slug:"a390",name:"A390"}],"aston-martin":[{slug:"db11",name:"DB11"},{slug:"db12",name:"DB12"},{slug:"dbs-770-ultimate",name:"DBS 770 Ultimate"},{slug:"dbs-superleggera",name:"DBS Superleggera"},{slug:"dbx",name:"DBX"},{slug:"dbx-s",name:"DBX S"},{slug:"dbx707",name:"DBX707"},{slug:"v12-vantage",name:"V12 Vantage"},{slug:"valhalla",name:"Valhalla"},{slug:"valour",name:"Valour"},{slug:"vanquish",name:"Vanquish"},{slug:"vantage",name:"Vantage"},{slug:"vantage-s",name:"Vantage S"}],audi:[{slug:"5-5",name:"5+5"},{slug:"a1",name:"A1"},{slug:"a3",name:"A3"},{slug:"a4",name:"A4"},{slug:"a4-allroad",name:"A4 Allroad"},{slug:"a5",name:"A5"},{slug:"a6",name:"A6"},{slug:"a6-allroad",name:"A6 Allroad"},{slug:"a7",name:"A7"},{slug:"a8",name:"A8"},{slug:"allroad",name:"Allroad"},{slug:"e-tron",name:"e-tron"},{slug:"e-tron-gt",name:"e-tron GT"},{slug:"e-tron-s",name:"e-tron S"},{slug:"e-tron-s-sportback",name:"e-tron S Sportback"},{slug:"e-tron-sportback",name:"e-tron Sportback"},{slug:"q2",name:"Q2"},{slug:"q3",name:"Q3"},{slug:"q3-sportback",name:"Q3 Sportback"},{slug:"q4",name:"Q4 e-tron"},{slug:"q4-sportback",name:"Q4 Sportback e-tron"},{slug:"q5",name:"Q5"},{slug:"q5-sportback",name:"Q5 Sportback"},{slug:"q6-e-tron",name:"Q6 e-tron"},{slug:"q7",name:"Q7"},{slug:"q8",name:"Q8"},{slug:"q8-e-tron",name:"Q8 e-tron"},{slug:"q8-sportback-e-tron",name:"Q8 Sportback e-tron"},{slug:"r8",name:"R8"},{slug:"rs-e-tron-gt",name:"RS e-tron GT"},{slug:"rs-q3",name:"RS Q3"},{slug:"rs-q3-sportback",name:"RS Q3 Sportback"},{slug:"rs-q8",name:"RS Q8"},{slug:"rs3",name:"RS3"},{slug:"rs4",name:"RS4"},{slug:"rs5",name:"RS5"},{slug:"rs6",name:"RS6"},{slug:"rs7",name:"RS7"},{slug:"s-e-tron-gt",name:"S e-tron GT"},{slug:"s1",name:"S1"},{slug:"s3",name:"S3"},{slug:"s4",name:"S4"},{slug:"s5",name:"S5"},{slug:"s6",name:"S6"},{slug:"s7",name:"S7"},{slug:"s8",name:"S8"},{slug:"sq2",name:"SQ2"},{slug:"sq5",name:"SQ5"},{slug:"sq5-sportback",name:"SQ5 Sportback"},{slug:"sq6-e-tron",name:"SQ6 e-tron"},{slug:"sq7",name:"SQ7"},{slug:"sq8",name:"SQ8"},{slug:"sq8-e-tron",name:"SQ8 e-tron"},{slug:"sq8-sportback-e-tron",name:"SQ8 Sportback e-tron"},{slug:"tt",name:"TT"},{slug:"tt-rs",name:"TT RS"},{slug:"tts",name:"TT S"}],bentley:[{slug:"bentayga",name:"Bentayga"},{slug:"continental-gt",name:"Continental GT"},{slug:"continental-gtc",name:"Continental GTC"},{slug:"flying-spur",name:"Flying Spur"}],bmw:[{slug:"1-series",name:"1 Series"},{slug:"2-series",name:"2 Series"},{slug:"2-series-active-tourer",name:"2 Series Active Tourer"},{slug:"2-series-gran-coupe",name:"2 Series Gran Coupe"},{slug:"3-series",name:"3 Series"},{slug:"3-series-gran-turismo",name:"3 Series Gran Turismo"},{slug:"4-series",name:"4 Series"},{slug:"4-series-gran-coupe",name:"4 Series Gran Coupe"},{slug:"5-series",name:"5 Series"},{slug:"5-series-gran-turismo",name:"5 Series Gran Turismo"},{slug:"6-series",name:"6 Series"},{slug:"7-series",name:"7 Series"},{slug:"8-series",name:"8 Series"},{slug:"i4",name:"i4"},{slug:"i5",name:"i5"},{slug:"i7",name:"i7"},{slug:"ix",name:"iX"},{slug:"ix1",name:"iX1"},{slug:"ix2",name:"iX2"},{slug:"ix3",name:"iX3"},{slug:"m2",name:"M2"},{slug:"m3",name:"M3"},{slug:"m4",name:"M4"},{slug:"m5",name:"M5"},{slug:"m8",name:"M8"},{slug:"x1",name:"X1"},{slug:"x2",name:"X2"},{slug:"x3",name:"X3"},{slug:"x3-m",name:"X3 M"},{slug:"x4",name:"X4"},{slug:"x4-m",name:"X4 M"},{slug:"x5",name:"X5"},{slug:"x5-m",name:"X5 M"},{slug:"x6",name:"X6"},{slug:"x6-m",name:"X6 M"},{slug:"x7",name:"X7"},{slug:"xm",name:"XM"},{slug:"z4",name:"Z4"}],"bmw-alpina":[{slug:"b10",name:"B10"},{slug:"b3",name:"B3"},{slug:"b4",name:"B4"},{slug:"b8",name:"B8"},{slug:"xb7",name:"XB7"},{slug:"xd3",name:"XD3"}],byd:[{slug:"atto-1",name:"Atto 1"},{slug:"atto-3",name:"Atto 3"},{slug:"sea-lion-6",name:"Sealion 6"},{slug:"seal",name:"Seal"},{slug:"sealion-5",name:"Sealion 5"},{slug:"sealion-7",name:"Sealion 7"},{slug:"sealion-8",name:"Sealion 8"},{slug:"shark-6",name:"Shark 6"}],cadillac:[{slug:"lyriq",name:"Lyriq"}],chery:[{slug:"j1",name:"J1"},{slug:"j11",name:"J11"},{slug:"j3",name:"J3"},{slug:"omoda-5",name:"Omoda 5"},{slug:"omoda-5-gt",name:"Omoda 5 GT"},{slug:"omoda-e5",name:"Omoda E5"},{slug:"tiggo-4",name:"Tiggo 4"},{slug:"tiggo-4-pro",name:"Tiggo 4 Pro"},{slug:"tiggo-7",name:"Tiggo 7"},{slug:"tiggo-7-pro",name:"Tiggo 7 Pro"},{slug:"tiggo-8",name:"Tiggo 8"},{slug:"tiggo-8-pro-max",name:"Tiggo 8 Pro Max"}],citroen:[{slug:"c3",name:"C3"},{slug:"c3-aircross",name:"C3 Aircross"},{slug:"c4",name:"C4"},{slug:"c5-aircross",name:"C5 Aircross"}],cupra:[{slug:"ateca",name:"Ateca"},{slug:"born",name:"Born"},{slug:"formentor",name:"Formentor"},{slug:"leon",name:"Leon"},{slug:"tavascan",name:"Tavascan"},{slug:"terramar",name:"Terramar"}],daihatsu:[{slug:"charade",name:"Charade"}],datsun:[{slug:"240z",name:"240Z"},{slug:"260z",name:"260Z"},{slug:"280z",name:"280Z"},{slug:"280zx",name:"280ZX"}],deepal:[{slug:"e07",name:"E07"},{slug:"s07",name:"S07"}],denza:[{slug:"b5",name:"B5"},{slug:"b8",name:"B8"},{slug:"d9",name:"D9"}],dodge:[{slug:"avenger",name:"Avenger"}],ds:[{slug:"ds-3",name:"DS 3"},{slug:"ds-4",name:"DS 4"},{slug:"ds-7",name:"DS 7"}],ferrari:[{slug:"12cilindri",name:"12Cilindri"},{slug:"12cilindri-spider",name:"12Cilindri Spider"},{slug:"296-gt3",name:"296 GT3"},{slug:"296-gtb",name:"296 GTB"},{slug:"296-gts",name:"296 GTS"},{slug:"296-speciale",name:"296 Speciale"},{slug:"296-speciale-a",name:"296 Speciale A"},{slug:"458-italia",name:"458 Italia"},{slug:"458-speciale",name:"458 Speciale"},{slug:"458-speciale-a",name:"458 Speciale A"},{slug:"458-spider",name:"458 Spider"},{slug:"488-gtb",name:"488 GTB"},{slug:"488-pista",name:"488 Pista"},{slug:"488-pista-spider",name:"488 Pista Spider"},{slug:"488-spider",name:"488 Spider"},{slug:"812-competizione",name:"812 Competizione"},{slug:"812-competizione-a",name:"812 Competizione A"},{slug:"812-gts",name:"812 GTS"},{slug:"812-superfast",name:"812 Superfast"},{slug:"849-testarossa",name:"849 Testarossa"},{slug:"amalfi",name:"Amalfi"},{slug:"daytona-sp3",name:"Daytona SP3"},{slug:"f8-spider",name:"F8 Spider"},{slug:"f8-tributo",name:"F8 Tributo"},{slug:"f80",name:"F80"},{slug:"ff",name:"FF"},{slug:"gtc4-lusso",name:"GTC4Lusso"},{slug:"monza-sp1",name:"Monza SP1"},{slug:"monza-sp2",name:"Monza SP2"},{slug:"portofino",name:"Portofino"},{slug:"roma",name:"Roma"},{slug:"sf90-spider",name:"SF90 Spider"},{slug:"sf90-stradale",name:"SF90 Stradale"},{slug:"sf90-xx-spider",name:"SF90 XX Spider"},{slug:"sf90-xx-stradale",name:"SF90 XX Stradale"}],fiat:[{slug:"500",name:"500"},{slug:"500c",name:"500C"},{slug:"500e",name:"500e"},{slug:"595",name:"595"},{slug:"695",name:"695"},{slug:"ducato",name:"Ducato"},{slug:"ritmo",name:"Ritmo"}],ford:[{slug:"capri",name:"Capri"},{slug:"cougar",name:"Cougar"},{slug:"courier",name:"Courier"},{slug:"e-transit",name:"E-Transit"},{slug:"endura",name:"Endura"},{slug:"escape",name:"Escape"},{slug:"everest",name:"Everest"},{slug:"f-150",name:"F-150"},{slug:"fairlane",name:"Fairlane"},{slug:"fairmont",name:"Fairmont"},{slug:"falcon",name:"Falcon"},{slug:"fiesta",name:"Fiesta"},{slug:"laser",name:"Laser"},{slug:"ltd",name:"LTD"},{slug:"mustang",name:"Mustang"},{slug:"mustang-mach-e",name:"Mustang Mach-E"},{slug:"probe",name:"Probe"},{slug:"puma",name:"Puma"},{slug:"ranger",name:"Ranger"},{slug:"taurus",name:"Taurus"},{slug:"territory",name:"Territory"},{slug:"tourneo-custom",name:"Tourneo Custom"},{slug:"transit",name:"Transit"},{slug:"transit-custom",name:"Transit Custom"}],foton:[{slug:"tunland",name:"Tunland"}],geely:[{slug:"ex5",name:"EX5"},{slug:"riddara-rd6",name:"Riddara RD6"},{slug:"starray-em-i",name:"Starray EM-i"}],genesis:[{slug:"g70",name:"G70"},{slug:"g80",name:"G80"},{slug:"gv60",name:"GV60"},{slug:"gv70",name:"GV70"},{slug:"gv80",name:"GV80"}],"great-wall":[{slug:"cannon",name:"Cannon"},{slug:"cannon-alpha",name:"Cannon Alpha"},{slug:"ora",name:"Ora"},{slug:"steed",name:"Steed"},{slug:"ute",name:"Ute"}],haval:[{slug:"h6",name:"H6"},{slug:"h6gt",name:"H6 GT"},{slug:"jolion",name:"Jolion"},{slug:"jolion-s",name:"Jolion S"}],holden:[{slug:"acadia",name:"Acadia"},{slug:"adventra",name:"Adventra"},{slug:"apollo",name:"Apollo"},{slug:"astra",name:"Astra"},{slug:"astra-gtc",name:"Astra GTC"},{slug:"astra-vxr",name:"Astra VXR"},{slug:"barina",name:"Barina"},{slug:"barina-spark",name:"Barina Spark"},{slug:"caprice",name:"Caprice"},{slug:"captiva",name:"Captiva"},{slug:"captiva-5",name:"Captiva 5"},{slug:"captiva-7",name:"Captiva 7"},{slug:"cascada",name:"Cascada"},{slug:"colorado",name:"Colorado"},{slug:"colorado-7",name:"Colorado 7"},{slug:"commodore",name:"Commodore"},{slug:"crewman",name:"Crewman"},{slug:"cruze",name:"Cruze"},{slug:"equinox",name:"Equinox"},{slug:"frontera",name:"Frontera"},{slug:"insignia-vxr",name:"Insignia VXR"},{slug:"jackaroo",name:"Jackaroo"},{slug:"malibu",name:"Malibu"},{slug:"monaro",name:"Monaro"},{slug:"one-tonner",name:"One Tonner"},{slug:"rodeo",name:"Rodeo"},{slug:"spark",name:"Spark"},{slug:"suburban",name:"Suburban"},{slug:"tigra",name:"Tigra"},{slug:"trailblazer",name:"Trailblazer"},{slug:"trax",name:"Trax"},{slug:"ute",name:"Ute"},{slug:"vectra",name:"Vectra"},{slug:"viva",name:"Viva"},{slug:"volt",name:"Volt"},{slug:"zafira",name:"Zafira"}],honda:[{slug:"accord",name:"Accord"},{slug:"accord-euro",name:"Accord Euro"},{slug:"city",name:"City"},{slug:"civic",name:"Civic"},{slug:"civic-5d",name:"Civic 5d"},{slug:"civic-type-r",name:"Civic Type R"},{slug:"cr-v",name:"CR-V"},{slug:"hr-v",name:"HR-V"},{slug:"jazz",name:"Jazz"},{slug:"jazz-crosstar",name:"Jazz Crosstar"},{slug:"legend",name:"Legend"},{slug:"odyssey",name:"Odyssey"},{slug:"s2000",name:"S2000"},{slug:"zr-v",name:"ZR-V"}],hyundai:[{slug:"accent",name:"Accent"},{slug:"elantra",name:"Elantra"},{slug:"elantra-lavita",name:"Elantra LaVita"},{slug:"i20-n",name:"i20 N"},{slug:"i30",name:"i30"},{slug:"i30-fastback-n",name:"i30 Fastback N"},{slug:"i30-n",name:"i30 N"},{slug:"i30-sedan",name:"i30 Sedan"},{slug:"i30-sedan-n",name:"i30 Sedan N"},{slug:"i45",name:"i45"},{slug:"iload",name:"iLoad"},{slug:"imax",name:"iMax"},{slug:"inster",name:"Inster"},{slug:"ioniq",name:"IONIQ"},{slug:"ioniq-5",name:"IONIQ 5"},{slug:"ioniq-5-n",name:"IONIQ 5 N"},{slug:"ioniq-6",name:"IONIQ 6"},{slug:"ioniq-6-n",name:"IONIQ 6 N"},{slug:"ioniq-9",name:"IONIQ 9"},{slug:"ix35",name:"ix35"},{slug:"kona",name:"Kona"},{slug:"kona-n",name:"Kona N"},{slug:"mighty",name:"Mighty"},{slug:"nexo",name:"Nexo"},{slug:"palisade",name:"Palisade"},{slug:"santa-fe",name:"Santa Fe"},{slug:"sonata",name:"Sonata"},{slug:"staria",name:"Staria"},{slug:"tucson",name:"Tucson"},{slug:"venue",name:"Venue"}],ineos:[{slug:"grenadier",name:"Grenadier"}],isuzu:[{slug:"d-max",name:"D-MAX"},{slug:"mu-x",name:"mu-X"}],iveco:[{slug:"daily",name:"Daily"}],jac:[{slug:"t9",name:"T9"}],jaecoo:[{slug:"j5",name:"J5"},{slug:"j7",name:"J7"}],jaguar:[{slug:"e-pace",name:"E-Pace"},{slug:"f-pace",name:"F-Pace"},{slug:"f-type",name:"F-Type"},{slug:"i-pace",name:"I-Pace"},{slug:"xe",name:"XE"},{slug:"xf",name:"XF"}],jeep:[{slug:"avenger",name:"Avenger"},{slug:"cherokee",name:"Cherokee"},{slug:"compass",name:"Compass"},{slug:"gladiator",name:"Gladiator"},{slug:"grand-cherokee",name:"Grand Cherokee"},{slug:"grand-cherokee-l",name:"Grand Cherokee L"},{slug:"renegade",name:"Renegade"},{slug:"wrangler",name:"Wrangler"}],"kg-mobility":[{slug:"actyon",name:"Actyon"},{slug:"korando",name:"Korando"},{slug:"musso",name:"Musso"},{slug:"musso-ev",name:"Musso EV"},{slug:"rexton",name:"Rexton"},{slug:"torres",name:"Torres"}],kia:[{slug:"carnival",name:"Carnival"},{slug:"cerato",name:"Cerato"},{slug:"ev3",name:"EV3"},{slug:"ev4",name:"EV4"},{slug:"ev5",name:"EV5"},{slug:"ev6",name:"EV6"},{slug:"ev9",name:"EV9"},{slug:"grand-carnival",name:"Grand Carnival"},{slug:"k4",name:"K4"},{slug:"mentor",name:"Mentor"},{slug:"niro",name:"Niro"},{slug:"niro-plus",name:"Niro Plus"},{slug:"optima",name:"Optima"},{slug:"picanto",name:"Picanto"},{slug:"picanto-x-line",name:"Picanto X-Line"},{slug:"rio",name:"Rio"},{slug:"rondo",name:"Rondo"},{slug:"seltos",name:"Seltos"},{slug:"sorento",name:"Sorento"},{slug:"sportage",name:"Sportage"},{slug:"stinger",name:"Stinger"},{slug:"stonic",name:"Stonic"},{slug:"tasman",name:"Tasman"}],lamborghini:[{slug:"aventador",name:"Aventador"},{slug:"countach",name:"Countach"},{slug:"huracan",name:"Huracan"},{slug:"revuelto",name:"Revuelto"},{slug:"sian",name:"Sian"},{slug:"temerario",name:"Temerario"},{slug:"urus",name:"Urus"}],"land-rover":[{slug:"defender",name:"Defender"},{slug:"discovery-5",name:"Discovery 5"},{slug:"discovery-sport",name:"Discovery Sport"},{slug:"range-rover",name:"Range Rover"},{slug:"range-rover-evoque",name:"Range Rover Evoque"},{slug:"range-rover-sport",name:"Range Rover Sport"},{slug:"range-rover-velar",name:"Range Rover Velar"}],ldv:[{slug:"d90",name:"D90"},{slug:"deliver-7",name:"Deliver 7"},{slug:"deliver-9",name:"Deliver 9"},{slug:"edeliver-3",name:"eDeliver 3"},{slug:"edeliver-7",name:"eDeliver 7"},{slug:"edeliver-9",name:"eDeliver 9"},{slug:"et60",name:"eT60"},{slug:"g10",name:"G10"},{slug:"mifa",name:"Mifa People Mover"},{slug:"mifa-9",name:"Mifa 9"},{slug:"t60",name:"T60"},{slug:"terron-9",name:"Terron 9"},{slug:"v80",name:"V80"}],leapmotor:[{slug:"b10",name:"B10"},{slug:"c10",name:"C10"}],lexus:[{slug:"es",name:"ES"},{slug:"gx",name:"GX"},{slug:"is",name:"IS"},{slug:"lbx",name:"LBX"},{slug:"lc",name:"LC"},{slug:"lm",name:"LM"},{slug:"ls",name:"LS"},{slug:"lx",name:"LX"},{slug:"nx",name:"NX"},{slug:"rc-f",name:"RC F"},{slug:"rx",name:"RX"},{slug:"rz",name:"RZ"},{slug:"ux",name:"UX"}],lotus:[{slug:"eletre",name:"Eletre"},{slug:"emeya",name:"Emeya"},{slug:"emira",name:"Emira"},{slug:"evija",name:"Evija"}],mahindra:[{slug:"genio",name:"Genio"},{slug:"pik-up",name:"Pik Up"},{slug:"scorpio-n",name:"Scorpio-N"},{slug:"xuv500",name:"XUV500"},{slug:"xuv700",name:"XUV700"}],maserati:[{slug:"ghibli",name:"Ghibli"},{slug:"gran-turismo",name:"GranTurismo"},{slug:"grancabrio",name:"GranCabrio"},{slug:"grecale",name:"Grecale"},{slug:"gt2-stradale",name:"GT2 Stradale"},{slug:"levante",name:"Levante"},{slug:"mc20",name:"MC20"},{slug:"mcpura",name:"MCPura"},{slug:"quattroporte",name:"Quattroporte"}],mazda:[{slug:"6e",name:"6e"},{slug:"929",name:"929"},{slug:"bravo",name:"Bravo"},{slug:"bt-50",name:"BT-50"},{slug:"cx-3",name:"CX-3"},{slug:"cx-30",name:"CX-30"},{slug:"cx-5",name:"CX-5"},{slug:"cx-60",name:"CX-60"},{slug:"cx-70",name:"CX-70"},{slug:"cx-8",name:"CX-8"},{slug:"cx-80",name:"CX-80"},{slug:"cx-9",name:"CX-9"},{slug:"cx-90",name:"CX-90"},{slug:"mazda2",name:"Mazda2"},{slug:"mazda3",name:"Mazda3"},{slug:"mazda3-mps",name:"Mazda3 MPS"},{slug:"mazda6",name:"Mazda6"},{slug:"mx-30",name:"MX-30"},{slug:"mx-5",name:"MX-5"},{slug:"mx-5-rf",name:"MX-5 RF"},{slug:"rx-7",name:"RX-7"}],mclaren:[{slug:"720s",name:"720S"},{slug:"720s-spider",name:"720S Spider"},{slug:"750s",name:"750S"},{slug:"765lt",name:"765LT"},{slug:"765lt-spider",name:"765LT Spider"},{slug:"artura",name:"Artura"},{slug:"gt",name:"GT"},{slug:"gts",name:"GTS"},{slug:"mp4-12c",name:"Mp4-12C"},{slug:"senna",name:"Senna"},{slug:"speedtail",name:"Speedtail"},{slug:"w1",name:"W1"}],mercedes:[{slug:"a-class",name:"A-Class"},{slug:"a-class-amg",name:"A-Class AMG"},{slug:"c-class",name:"C-Class"},{slug:"c-class-amg",name:"C-Class AMG"},{slug:"cla-class",name:"CLA-Class"},{slug:"cla-class-amg",name:"CLA-Class AMG"},{slug:"cle-class",name:"CLE-Class"},{slug:"cls-class-amg",name:"CLS-Class AMG"},{slug:"e-class",name:"E-Class"},{slug:"e-class-amg",name:"E-Class AMG"},{slug:"e-class-cabrio",name:"E-Class Cabriolet"},{slug:"e-class-coupe",name:"E-Class Coupe"},{slug:"eqa",name:"EQA"},{slug:"eqb",name:"EQB"},{slug:"eqc",name:"EQC"},{slug:"eqe",name:"EQE"},{slug:"eqe-amg",name:"EQE AMG"},{slug:"eqe-suv",name:"EQE SUV"},{slug:"eqe-suv-amg",name:"EQE SUV AMG"},{slug:"eqs",name:"EQS"},{slug:"eqs-amg",name:"EQS AMG"},{slug:"eqs-suv",name:"EQS SUV"},{slug:"eqv",name:"EQV"},{slug:"g-class",name:"G-Class"},{slug:"g-class-amg",name:"G-Class AMG"},{slug:"gla",name:"GLA-Class"},{slug:"gla-class-amg",name:"GLA-Class AMG"},{slug:"glb",name:"GLB-Class"},{slug:"glb-class-amg",name:"GLB-Class AMG"},{slug:"glc",name:"GLC-Class"},{slug:"glc-class-amg",name:"GLC-Class AMG"},{slug:"glc-class-coupe",name:"GLC-Class Coupe"},{slug:"glc-class-coupe-amg",name:"GLC-Class Coupe AMG"},{slug:"gle-class",name:"GLE-Class"},{slug:"gle-class-amg",name:"GLE-Class AMG"},{slug:"gle-class-coupe",name:"GLE-Class Coupe"},{slug:"gle-class-coupe-amg",name:"GLE-Class Coupe AMG"},{slug:"gls-class",name:"GLS-Class"},{slug:"gls-class-amg",name:"GLS-Class AMG"},{slug:"s-class",name:"S-Class"},{slug:"sprinter",name:"Sprinter"},{slug:"v-class",name:"V-Class"},{slug:"x-class",name:"X-Class"}],"mercedes-maybach":[{slug:"eqs",name:"EQS"},{slug:"gls-class",name:"GLS-Class"},{slug:"s-class",name:"S-Class"}],mg:[{slug:"3",name:"3"},{slug:"350",name:"350"},{slug:"4",name:"4"},{slug:"5",name:"5"},{slug:"6",name:"6"},{slug:"cyberster",name:"Cyberster"},{slug:"gs",name:"GS"},{slug:"hs",name:"HS"},{slug:"im5",name:"IM5"},{slug:"im6",name:"IM6"},{slug:"qs",name:"QS"},{slug:"s5",name:"S5"},{slug:"u9",name:"MGU9"},{slug:"zs",name:"ZS"},{slug:"zs-ev",name:"ZS EV"},{slug:"zst",name:"ZST"}],mini:[{slug:"aceman",name:"Aceman"},{slug:"clubman",name:"Clubman"},{slug:"convertible",name:"Convertible"},{slug:"cooper",name:"Cooper"},{slug:"countryman",name:"Countryman"},{slug:"hatch",name:"Hatch"}],mitsubishi:[{slug:"asx",name:"ASX"},{slug:"challenger",name:"Challenger"},{slug:"eclipse-cross",name:"Eclipse Cross"},{slug:"express",name:"Express"},{slug:"l200",name:"L200"},{slug:"magna",name:"Magna"},{slug:"mirage",name:"Mirage"},{slug:"nimbus",name:"Nimbus"},{slug:"outlander",name:"Outlander"},{slug:"pajero-sport",name:"Pajero Sport"},{slug:"triton",name:"Triton"},{slug:"verada",name:"Verada"}],nissan:[{slug:"200sx",name:"200SX"},{slug:"280zx",name:"280ZX"},{slug:"300zx",name:"300ZX"},{slug:"370z",name:"370Z"},{slug:"almera",name:"Almera"},{slug:"altima",name:"Altima"},{slug:"ariya",name:"Ariya"},{slug:"bluebird",name:"Bluebird"},{slug:"dualis",name:"Dualis"},{slug:"dualis-2",name:"Dualis+2"},{slug:"gt-r",name:"GT-R"},{slug:"juke",name:"Juke"},{slug:"leaf",name:"Leaf"},{slug:"maxima",name:"Maxima"},{slug:"micra",name:"Micra"},{slug:"navara",name:"Navara"},{slug:"np300-navara",name:"NP300 Navara"},{slug:"pathfinder",name:"Pathfinder"},{slug:"patrol",name:"Patrol"},{slug:"patrol-cab-chassis",name:"Patrol Cab Chassis"},{slug:"pulsar",name:"Pulsar"},{slug:"qashqai",name:"Qashqai"},{slug:"x-trail",name:"X-Trail"},{slug:"z",name:"Z"}],omoda:[{slug:"9",name:"9"},{slug:"c5",name:"C5"},{slug:"e5",name:"E5"}],opel:[{slug:"astra",name:"Astra"},{slug:"grandland",name:"Grandland"},{slug:"mokka",name:"Mokka"}],ora:[{slug:"03",name:"03"}],peugeot:[{slug:"2008",name:"2008"},{slug:"208",name:"208"},{slug:"3008",name:"3008"},{slug:"308",name:"308"},{slug:"408",name:"408"},{slug:"5008",name:"5008"},{slug:"508",name:"508"},{slug:"boxer",name:"Boxer"},{slug:"expert",name:"Expert"},{slug:"partner",name:"Partner"}],polaris:[{slug:"general-xp",name:"General XP 1000"},{slug:"general-xp-4",name:"General XP 4 1000"},{slug:"ranger-crew-xd",name:"Ranger Crew XD 1500"},{slug:"ranger-crew-xp",name:"Ranger Crew XP 1000"},{slug:"ranger-xd",name:"Ranger XD 1500"},{slug:"ranger-xp",name:"Ranger XP 1000"},{slug:"rzr-pro-r",name:"RZR Pro R"},{slug:"rzr-pro-r-4",name:"RZR Pro R 4"},{slug:"rzr-pro-xp",name:"RZR Pro XP"},{slug:"rzr-xp",name:"RZR XP 1000"},{slug:"rzr-xp-4",name:"RZR XP 4 1000"},{slug:"xpedition-adv",name:"Xpedition ADV"},{slug:"xpedition-adv-5",name:"Xpedition ADV 5"},{slug:"xpedition-xp",name:"Xpedition XP"},{slug:"xpedition-xp-5",name:"Xpedition XP 5"}],polestar:[{slug:"polestar-1",name:"Polestar 1"},{slug:"polestar-2",name:"Polestar 2"},{slug:"polestar-3",name:"Polestar 3"},{slug:"polestar-4",name:"Polestar 4"},{slug:"polestar-5",name:"Polestar 5"}],porsche:[{slug:"718",name:"718"},{slug:"911",name:"911"},{slug:"928",name:"928"},{slug:"cayenne",name:"Cayenne"},{slug:"macan",name:"Macan"},{slug:"panamera",name:"Panamera"},{slug:"taycan",name:"Taycan"}],proton:[{slug:"exora",name:"Exora"},{slug:"gen-2",name:"Gen-2"},{slug:"jumbuck",name:"Jumbuck"},{slug:"persona",name:"Persona"},{slug:"preve",name:"Preve"},{slug:"s16",name:"S16"},{slug:"satria",name:"Satria"},{slug:"savvy",name:"Savvy"},{slug:"suprima",name:"Suprima S"},{slug:"waja",name:"Waja"}],ram:[{slug:"1500",name:"1500"},{slug:"1500-classic",name:"1500 Classic"},{slug:"1500-trx",name:"1500 TRX"},{slug:"2500",name:"2500"},{slug:"3500",name:"3500"}],renault:[{slug:"arkana",name:"Arkana"},{slug:"captur",name:"Captur"},{slug:"duster",name:"Duster"},{slug:"kangoo",name:"Kangoo"},{slug:"kangoo-van",name:"Kangoo Van"},{slug:"koleos",name:"Koleos"},{slug:"latitude",name:"Latitude"},{slug:"master",name:"Master"},{slug:"megane-e-tech",name:"Megane E-Tech"},{slug:"scenic-e-tech",name:"Scenic E-Tech"},{slug:"trafic",name:"Trafic"}],seat:[{slug:"arona",name:"Arona"},{slug:"ateca",name:"Ateca"},{slug:"leon",name:"Leon"},{slug:"tarraco",name:"Tarraco"}],skoda:[{slug:"elroq",name:"Elroq"},{slug:"enyaq-iv",name:"Enyaq"},{slug:"fabia",name:"Fabia"},{slug:"kamiq",name:"Kamiq"},{slug:"karoq",name:"Karoq"},{slug:"kodiaq",name:"Kodiaq"},{slug:"octavia",name:"Octavia"},{slug:"rapid",name:"Rapid"},{slug:"scala",name:"Scala"},{slug:"superb",name:"Superb"},{slug:"superb-scout",name:"Superb Scout"},{slug:"yeti",name:"Yeti"}],smart:[{slug:"1",name:"#1"},{slug:"3",name:"#3"},{slug:"roadster",name:"Roadster"}],ssangyong:[{slug:"korando",name:"Korando"},{slug:"kyron",name:"Kyron"},{slug:"musso",name:"Musso"},{slug:"rexton",name:"Rexton"},{slug:"rhino",name:"Rhino"},{slug:"stavic",name:"Stavic"},{slug:"tivoli",name:"Tivoli"}],subaru:[{slug:"brz",name:"BRZ"},{slug:"crosstrek",name:"Crosstrek"},{slug:"forester",name:"Forester"},{slug:"impreza",name:"Impreza"},{slug:"liberty",name:"Liberty"},{slug:"outback",name:"Outback"},{slug:"solterra",name:"Solterra"},{slug:"wrx",name:"WRX"},{slug:"wrx-sti",name:"WRX STI"},{slug:"xv",name:"XV"}],suzuki:[{slug:"baleno",name:"Baleno"},{slug:"fronx",name:"Fronx"},{slug:"ignis",name:"Ignis"},{slug:"jimny",name:"Jimny"},{slug:"s-cross",name:"S-Cross"},{slug:"swift",name:"Swift"},{slug:"swift-sport",name:"Swift Sport"},{slug:"vitara",name:"Vitara"}],tank:[{slug:"300",name:"300"},{slug:"500",name:"500"}],tesla:[{slug:"cybertruck",name:"Cybertruck"},{slug:"model-3",name:"Model 3"},{slug:"model-s",name:"Model S"},{slug:"model-x",name:"Model X"},{slug:"model-y",name:"Model Y"}],toyota:[{slug:"86",name:"86"},{slug:"aurion",name:"Aurion"},{slug:"avalon",name:"Avalon"},{slug:"avensis-verso",name:"Avensis Verso"},{slug:"bz4x",name:"bZ4X"},{slug:"c-hr",name:"C-HR"},{slug:"camry",name:"Camry"},{slug:"corolla",name:"Corolla"},{slug:"corolla-cross",name:"Corolla Cross"},{slug:"echo",name:"Echo"},{slug:"fortuner",name:"Fortuner"},{slug:"gr-corolla",name:"GR Corolla"},{slug:"gr-yaris",name:"GR Yaris"},{slug:"gr86",name:"GR86"},{slug:"granvia",name:"Granvia"},{slug:"hiace",name:"Hiace"},{slug:"hilux",name:"Hilux"},{slug:"kluger",name:"Kluger"},{slug:"land-cruiser",name:"Land Cruiser"},{slug:"land-cruiser-prado",name:"Land Cruiser Prado"},{slug:"prius",name:"Prius"},{slug:"prius-c",name:"Prius c"},{slug:"prius-v",name:"Prius v"},{slug:"rav4",name:"RAV4"},{slug:"rukus",name:"Rukus"},{slug:"supra",name:"Supra"},{slug:"tarago",name:"Tarago"},{slug:"tundra",name:"Tundra"},{slug:"vienta",name:"Vienta"},{slug:"yaris",name:"Yaris"},{slug:"yaris-cross",name:"Yaris Cross"}],triumph:[{slug:"tr7",name:"TR7"}],volkswagen:[{slug:"amarok",name:"Amarok"},{slug:"beetle",name:"Beetle"},{slug:"caddy",name:"Caddy"},{slug:"california",name:"California"},{slug:"caravelle",name:"Caravelle"},{slug:"cc",name:"CC"},{slug:"crafter",name:"Crafter"},{slug:"golf",name:"Golf"},{slug:"golf-alltrack",name:"Golf Alltrack"},{slug:"golf-gti",name:"Golf GTI"},{slug:"golf-r",name:"Golf R"},{slug:"grand-california",name:"Grand California"},{slug:"id-buzz",name:"ID. Buzz"},{slug:"id4",name:"ID.4"},{slug:"id5",name:"ID.5"},{slug:"multivan",name:"Multivan"},{slug:"passat",name:"Passat"},{slug:"passat-alltrack",name:"Passat Alltrack"},{slug:"polo",name:"Polo"},{slug:"polo-gti",name:"Polo GTI"},{slug:"t-cross",name:"T-Cross"},{slug:"t-roc",name:"T-Roc"},{slug:"t-roc-r",name:"T-Roc R"},{slug:"tiguan",name:"Tiguan"},{slug:"tiguan-allspace",name:"Tiguan Allspace"},{slug:"touareg",name:"Touareg"},{slug:"transporter",name:"Transporter"}],volvo:[{slug:"c40",name:"C40"},{slug:"es90",name:"ES90"},{slug:"ex30",name:"EX30"},{slug:"ex40",name:"EX40"},{slug:"ex90",name:"EX90"},{slug:"s60",name:"S60"},{slug:"s60-cross-country",name:"S60 Cross Country"},{slug:"s90",name:"S90"},{slug:"v60-cross-country",name:"V60 Cross Country"},{slug:"v90-cross-country",name:"V90 Cross Country"},{slug:"xc40",name:"XC40"},{slug:"xc60",name:"XC60"},{slug:"xc90",name:"XC90"}],zeekr:[{slug:"009",name:"009"},{slug:"x",name:"X"}]},years:{"audi/rs6":[2026,2025,2024,2023,2022,2021,2020],"bmw/m3":[2026,2025,2024,2023,2022,2021,2020,2018,2017,2016,2015,2014],"ferrari/296-gtb":[2026,2025,2024,2023,2022],"lamborghini/huracan":[2024,2023,2022,2021,2020,2019],"mclaren/750s":[2026,2025,2024,2023],"mercedes/c-class-amg":[2026,2025,2024,2023,2022,2021,2020,2019,2018,2017,2016],"nissan/gt-r":[2023,2022,2021,2020,2019,2018,2017,2016],"tesla/model-3":[2026,2025,2024,2023,2022,2021,2020,2019,2018,2017],"toyota/supra":[2026,2025,2024,2023,2022,2021,1993,1992,1991,1990,1989,1988,1987,1986]},modifications:{"audi/rs6/2024":[{slug:"a28ff79ddf",name:"4.0 TFSi quattro",trim:"4.0 TFSi quattro",body:null}],"bmw/m3/2024":[{slug:"0aaf0bb46d",name:"M3",trim:"M3",body:null},{slug:"402e65e913",name:"M3 Competition",trim:"M3 Competition",body:null},{slug:"4c760df5c5",name:"M3 Competition xDrive",trim:"M3 Competition xDrive",body:null},{slug:"6250847bc8",name:"M3 Competition xDrive",trim:"M3 Competition xDrive",body:null},{slug:"82f59cadb0",name:"M3",trim:"M3",body:null}],"ferrari/296-gtb/2024":[{slug:"c412dafd12",name:"3.0",trim:"3.0",body:null}],"lamborghini/huracan/2024":[{slug:"aab49a3dae",name:"Evo 5.2",trim:"Evo 5.2",body:null},{slug:"f81a37ca20",name:"Evo 5.2",trim:"Evo 5.2",body:null}],"mclaren/750s/2024":[{slug:"f8f346c327",name:"4.0T",trim:"4.0T",body:null}],"mercedes/c-class-amg/2024":[{slug:"038122904b",name:"C 43 4Matic",trim:"C 43 4Matic",body:null},{slug:"a403e6b64c",name:"C 63 S E",trim:"C 63 S E",body:null}],"nissan/gt-r/2024":[],"tesla/model-3/2024":[{slug:"026e4ab9d6",name:"Long Range",trim:"Long Range",body:null},{slug:"4296c050a9",name:"Performance",trim:"Performance",body:null},{slug:"50f0c93d66",name:"Performance",trim:"Performance",body:null},{slug:"be5b2b9767",name:"Standard Range",trim:"Standard Range",body:null},{slug:"d4960b3833",name:"Long Range",trim:"Long Range",body:null}],"toyota/supra/2024":[{slug:"eabbd747b7",name:"3.0i",trim:"3.0i",body:null}]},meta:{modelsFetchedAt:{abarth:"2026-06-28T04:33:00.474Z",aion:"2026-06-28T04:33:01.415Z","alfa-romeo":"2026-06-28T04:33:02.355Z",alpine:"2026-06-28T04:33:03.290Z","aston-martin":"2026-06-28T04:33:04.229Z",audi:"2026-06-28T04:33:05.195Z",bentley:"2026-06-28T04:33:06.135Z",bmw:"2026-06-28T04:33:07.112Z","bmw-alpina":"2026-06-28T04:33:08.062Z",byd:"2026-06-28T04:33:09.004Z",cadillac:"2026-06-28T04:33:09.958Z",chery:"2026-06-28T04:33:10.944Z",citroen:"2026-06-28T04:33:11.887Z",cupra:"2026-06-28T04:33:12.827Z",daihatsu:"2026-06-28T04:33:13.770Z",datsun:"2026-06-28T04:33:14.721Z",deepal:"2026-06-27T04:23:59.381Z",denza:"2026-06-27T04:24:00.200Z",dodge:"2026-06-27T04:24:01.018Z",ds:"2026-06-27T04:24:01.843Z",ferrari:"2026-06-27T04:24:02.667Z",fiat:"2026-06-27T04:24:03.492Z",ford:"2026-06-27T04:24:04.311Z",foton:"2026-06-27T04:24:05.129Z",geely:"2026-06-27T04:24:05.946Z",genesis:"2026-06-27T04:24:06.764Z","great-wall":"2026-06-27T04:24:07.584Z",haval:"2026-06-27T04:24:08.402Z",holden:"2026-06-27T04:24:09.221Z",honda:"2026-06-27T04:24:10.039Z",hyundai:"2026-06-27T04:24:10.861Z",ineos:"2026-06-27T04:24:11.677Z",isuzu:"2026-06-27T04:24:12.495Z",iveco:"2026-06-28T04:32:51.940Z",jac:"2026-06-27T04:24:13.314Z",jaecoo:"2026-06-28T04:32:17.949Z",jaguar:"2026-06-28T04:32:18.902Z",jeep:"2026-06-28T04:32:19.838Z","kg-mobility":"2026-06-28T04:32:20.769Z",kia:"2026-06-28T04:32:21.710Z",lamborghini:"2026-06-28T04:32:22.641Z","land-rover":"2026-06-28T04:32:23.589Z",ldv:"2026-06-28T04:32:24.525Z",leapmotor:"2026-06-28T04:32:25.463Z",lexus:"2026-06-28T04:32:26.401Z",lotus:"2026-06-28T04:32:27.336Z",mahindra:"2026-06-28T04:32:28.278Z",maserati:"2026-06-28T04:32:29.225Z",mazda:"2026-06-28T04:32:30.189Z",mclaren:"2026-06-28T04:32:31.133Z",mercedes:"2026-06-28T04:32:32.103Z","mercedes-maybach":"2026-06-28T04:32:33.041Z",mg:"2026-06-28T04:32:33.991Z",mini:"2026-06-28T04:32:34.935Z",mitsubishi:"2026-06-28T04:32:35.884Z",nissan:"2026-06-28T04:32:36.836Z",omoda:"2026-06-28T04:32:37.789Z",opel:"2026-06-28T04:32:38.731Z",ora:"2026-06-28T04:32:39.684Z",peugeot:"2026-06-28T04:32:40.631Z",polaris:"2026-06-28T04:32:52.902Z",polestar:"2026-06-28T04:32:41.575Z",porsche:"2026-06-28T04:32:42.516Z",proton:"2026-06-28T04:32:43.459Z",ram:"2026-06-28T04:32:44.398Z",renault:"2026-06-28T04:32:45.351Z",seat:"2026-06-28T04:32:46.297Z",skoda:"2026-06-28T04:32:47.233Z",smart:"2026-06-28T04:32:48.178Z",ssangyong:"2026-06-28T04:32:49.114Z",subaru:"2026-06-28T04:32:50.052Z",suzuki:"2026-06-28T04:32:50.996Z",tank:"2026-06-28T04:32:53.840Z",tesla:"2026-06-28T04:32:54.775Z",toyota:"2026-06-28T04:32:55.749Z",triumph:"2026-06-28T04:32:56.677Z",volkswagen:"2026-06-28T04:32:57.635Z",volvo:"2026-06-28T04:32:58.582Z",zeekr:"2026-06-28T04:32:59.524Z"},popularFetchedAt:"2026-06-28T04:32:16.984Z",coverage:{covered:79,total:79}}};var u=v,k="http://localhost:8000".replace(/\/+$/,""),M=3600,g="",Z="x-efficient-shop-hop",C="".trim();async function r(a,e){let s=new URLSearchParams;for(let[h,c]of Object.entries(e))c!==void 0&&c!==""&&s.set(h,String(c));let n=s.toString(),l=`${k}/api/fitment${a}${n?`?${n}`:""}`,m={next:{revalidate:M}},[f,y]=await Promise.all([b(),T()]),t=p(f,y,S(m));C&&(t[Z]=C);let i=await fetch(l,{...m,...Object.keys(t).length>0?{headers:t}:{}});if(!i.ok)throw new Error(`backend fitment ${i.status} on ${a}`);let d=await i.text();return d?JSON.parse(d):null}function o(a){return u.region===a&&(u.makes?.length??0)>0}function R(a){if(!a)return null;let e=a.et_range;return{pcd:a.pcd||void 0,boltPattern:a.bolt_pattern||void 0,centreBore:a.centre_bore??void 0,frontWheels:a.front_wheels??[],rearWheels:a.rear_wheels??[],frontTyres:a.front_tyres??[],rearTyres:a.rear_tyres??[],etRange:e&&e[0]!==null&&e[1]!==null?[e[0],e[1]]:void 0}}var P={async makes(a=g){try{return await r("/makes/",{region:a})}catch(e){if(o(a))return u.makes;throw e}},async models(a,e=g){try{return await r("/models/",{make:a,region:e})}catch(s){let n=o(e)?u.models[a]:void 0;if(n)return n;throw s}},async years(a,e,s=g){try{return await r("/years/",{make:a,model:e,region:s})}catch(n){let l=o(s)?u.years[`${a}/${e}`]:void 0;if(l)return l;throw n}},async modifications(a,e,s,n=g){try{return await r("/modifications/",{make:a,model:e,year:s,region:n})}catch(l){let m=o(n)?u.modifications[`${a}/${e}/${s}`]:void 0;if(m)return m;throw l}},async stockFitment(a,e,s,n,l=g){return R(await r("/stock-fitment/",{make:a,model:e,year:s,modification:n,region:l}))}};export{P as fitmentData};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-Y6SLVHK3.js";var t=[{wheel:"HASTE II",wheelSlug:"haste-ii",process:"FusionForge\xAE",car:"2020 Chevrolet Camaro ZL1",finish:"Black Satin Lacquer",photos:["/media/images/products/Haste II/HasteII ksl car 2020 Chevrolet Camaro ZL1 (1).jpg","/media/images/products/Haste II/HasteII ksl car 2020 Chevrolet Camaro ZL1 (2).jpg","/media/images/products/Haste II/HasteII ksl car 2020 Chevrolet Camaro ZL1 (5).jpg","/media/images/products/Haste II/HasteII ksl car 2020 Chevrolet Camaro ZL1 (6).jpg","/media/images/products/Haste II/HasteII ksl car 2020 Chevrolet Camaro ZL1 (9).jpg"]},{wheel:"BLITZ",wheelSlug:"blitz",process:"Monoblock Cast",car:"2018 Mercedes-AMG GT R",finish:"Black Machined Dark Tint",photos:["/media/images/products/blitz/Blitz kmftdtm Car 2018 Mercedes-AMG GT R (2).jpg","/media/images/products/blitz/Blitz kmftdtm Car 2018 Mercedes-AMG GT R (7).jpg","/media/images/products/blitz/Blitz kmftdtm Car 2018 Mercedes-AMG GT R (8).jpg","/media/images/products/blitz/Blitz kmftdtm Car 2018 Mercedes-AMG GT R (9).jpg","/media/images/products/blitz/Blitz kmftdtm Car 2018 Mercedes-AMG GT R (10).jpg"]},{wheel:"BLITZ",wheelSlug:"blitz",process:"Monoblock Cast",car:"AUDI 03-03",finish:"Black Satin Lacquer",photos:["/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (1).png","/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (2).png","/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (3).png","/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (4).png","/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (5).png","/media/images/products/blitz/Blitz ktm Car AUDI 03-03 (6).png"]},{wheel:"BLITZ II",wheelSlug:"blitz-ii",process:"Precision Forged",car:"2022 Bentley Continental GT Speed 251216",finish:"Bronze",photos:["/media/images/products/blitz_II/BlitzII N Car 2022 Bentley Continental GT Speed 251216 (2).jpg","/media/images/products/blitz_II/BlitzII N Car 2022 Bentley Continental GT Speed 251216 (3).jpg","/media/images/products/blitz_II/BlitzII N Car 2022 Bentley Continental GT Speed 251216 (4).jpg","/media/images/products/blitz_II/BlitzII N Car 2022 Bentley Continental GT Speed 251216 (5).jpg"]},{wheel:"FORCE 6",wheelSlug:"force-6",process:"FusionForge\xAE",car:"2022 Cadillac Escalade ESV Sport Platinum-VAT Q",finish:"Black Machined Dark Tint",photos:["/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (1).jpg","/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (2).jpg","/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (6).jpg","/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (7).jpg","/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (9).jpg","/media/images/products/force 6/Force6 kmftdtm car 2022 Cadillac Escalade ESV Sport Platinum-VAT Q (11).jpg"]},{wheel:"FRIXION 5",wheelSlug:"frixion-5",process:"Monoblock Cast",car:"2021 Ferrari Roma",finish:"Candy Red",photos:["/media/images/products/frixion 5/Frixion5 R car 2021 Ferrari Roma (1).jpg","/media/images/products/frixion 5/Frixion5 R car 2021 Ferrari Roma (2).jpg","/media/images/products/frixion 5/Frixion5 R car 2021 Ferrari Roma (5).jpg","/media/images/products/frixion 5/Frixion5 R car 2021 Ferrari Roma (7).jpg","/media/images/products/frixion 5/Frixion5 R car 2021 Ferrari Roma (9).jpg"]},{wheel:"FRIXION 5",wheelSlug:"frixion-5",process:"Monoblock Cast",car:"2019 Jaguar XE SV Project 8",finish:"Silver Machined",photos:["/media/images/products/frixion 5/Frixion5 smftm car 2019 Jaguar XE SV Project 8 (4).jpg","/media/images/products/frixion 5/Frixion5 smftm car 2019 Jaguar XE SV Project 8 (5).jpg","/media/images/products/frixion 5/Frixion5 smftm car 2019 Jaguar XE SV Project 8 (6).jpg","/media/images/products/frixion 5/Frixion5 smftm car 2019 Jaguar XE SV Project 8 (7).jpg"]},{wheel:"FRIXION 6",wheelSlug:"frixion-6",process:"Monoblock Cast",car:"2019 Lincoln Navigator",finish:"Black Machined Dark Tint",photos:["/media/images/products/frixion 6/Frixion 6 kmftdtm car 2019 Lincoln Navigator (1).jpg","/media/images/products/frixion 6/Frixion 6 kmftdtm car 2019 Lincoln Navigator (2).jpg","/media/images/products/frixion 6/Frixion 6 kmftdtm car 2019 Lincoln Navigator (12).jpg","/media/images/products/frixion 6/Frixion 6 kmftdtm car 2019 Lincoln Navigator (14).jpg","/media/images/products/frixion 6/Frixion 6 kmftdtm car 2019 Lincoln Navigator (15).jpg"]},{wheel:"ROTOR",wheelSlug:"rotor",process:"Monoblock Cast",car:"2022 Dodge Challenger SRT'Super Stock'",finish:"Black Machined Dark Tint",photos:["/media/images/products/rotor/Rotor Kmftdtm car 2022 Dodge Challenger SRT_Super Stock_ (1).jpg","/media/images/products/rotor/Rotor Kmftdtm car 2022 Dodge Challenger SRT_Super Stock_ (2).jpg","/media/images/products/rotor/Rotor Kmftdtm car 2022 Dodge Challenger SRT_Super Stock_ (3).jpg","/media/images/products/rotor/Rotor Kmftdtm car 2022 Dodge Challenger SRT_Super Stock_ (4).jpg","/media/images/products/rotor/Rotor Kmftdtm car 2022 Dodge Challenger SRT_Super Stock_ (5).jpg"]},{wheel:"SPEED II",wheelSlug:"speed-ii",process:"FusionForge\xAE",car:"2025 Audi R8 ABT XGT-VAT (hero)",finish:"SMFTDTM",photos:["/media/images/products/speed_II/Speed II smftdtm car 2025 Audi R8 ABT XGT-VAT (hero) (1).jpg","/media/images/products/speed_II/Speed II smftdtm car 2025 Audi R8 ABT XGT-VAT (hero) (2).jpg","/media/images/products/speed_II/Speed II smftdtm car 2025 Audi R8 ABT XGT-VAT (hero) (4).jpg","/media/images/products/speed_II/Speed II smftdtm car 2025 Audi R8 ABT XGT-VAT (hero) (5).jpg","/media/images/products/speed_II/Speed II smftdtm car 2025 Audi R8 ABT XGT-VAT (hero) (6).jpg"]},{wheel:"THRUST II",wheelSlug:"thrust-ii",process:"Precision Forged",car:"aston marting-vantage-v12",finish:"Black Satin Lacquer",photos:["/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (1).jpg","/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (2).jpg","/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (3).jpg","/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (4).jpg","/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (6).jpg","/media/images/products/thrust_II/Thrust II ktm car aston marting-vantage-v12 (12).jpg"]},{wheel:"TORQUE",wheelSlug:"torque",process:"Monoblock Cast",car:"2017 Maserati Quanttoporte S GranSport MMP-121 copy",finish:"Black Machined Dark Tint",photos:["/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (1).jpg","/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (2).jpg","/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (3).jpg","/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (4).jpg","/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (5).jpg","/media/images/products/torque/Torque kmftdtm car 2017 Maserati Quanttoporte S GranSport MMP-121 copy (6).jpg"]},{wheel:"TURBINE II",wheelSlug:"turbine-ii",process:"Monoblock Cast",car:"2023 Lamborghini Huracan Sterrato",finish:"Black Machined Dark Tint",photos:["/media/images/products/turbine II/TurbineII kmftdtm car 2023 Lamborghini Huracan Sterrato (1).jpg","/media/images/products/turbine II/TurbineII kmftdtm car 2023 Lamborghini Huracan Sterrato (2).jpg","/media/images/products/turbine II/TurbineII kmftdtm car 2023 Lamborghini Huracan Sterrato (3).jpg"]},{wheel:"VECTOR II",wheelSlug:"vector-ii",process:"Monoblock Cast",car:"2022 Mercedes-AMG 205 C63 Coupe G",finish:"Black Machined Dark Tint",photos:["/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (1).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (2).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (4).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (5).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (6).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (7).jpg","/media/images/products/vector II/Vector II kmftdtm car 2022 Mercedes-AMG 205 C63 Coupe G (12).jpg"]},{wheel:"VECTOR III",wheelSlug:"vector-iii",process:"Precision Forged",car:"McLaren-765-LT-Spider",finish:"Black Satin Lacquer",photos:["/media/images/products/vector_III/Vector III ktm car McLaren-765-LT-Spider (1).jpg","/media/images/products/vector_III/Vector III ktm car McLaren-765-LT-Spider (2).jpg","/media/images/products/vector_III/Vector III ktm car McLaren-765-LT-Spider (12).jpg","/media/images/products/vector_III/Vector III ktm car McLaren-765-LT-Spider (15).jpg"]}];var o=t;function m(e,r){return o.filter(a=>(!e||a.process===e)&&(!r||a.wheelSlug===r))}export{m as listGalleryBuilds};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-Y6SLVHK3.js";async function e(){throw new Error("efficient-web-builder: no request scope in the browser")}async function r(){throw new Error("efficient-web-builder: no request scope in the browser")}export{r as cookies,e as headers};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{r as A}from"./chunk-N35EG6RF.js";import"./chunk-KR3FTVDW.js";import"./chunk-K3Y6UBLO.js";import{Nj as h,hb as m,ib as g,lb as d,of as T}from"./chunk-UTFM4DGR.js";import"./chunk-X6KEAC34.js";import{Na as y}from"./chunk-4KLEZTLW.js";import"./chunk-RF5DTRJ5.js";import"./chunk-UBYBQ3KR.js";import"./chunk-Y6SLVHK3.js";import{Render as x}from"efficient-easel/render";function L(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&typeof t.type=="string")}function u(e){let t=e.props;if(!t)return e;let o=t,i=!1;for(let[p,r]of Object.entries(t)){if(!L(r))continue;let n=r.map(u),s=e.type===d&&n.every(c=>c.type===m)?g(n):n;(s.length!==r.length||s.some((c,a)=>c!==r[a]))&&(o===t&&(o={...t}),o[p]=s,i=!0)}return i?{...e,props:o}:e}function N(e){let t=e;if(!t||typeof t!="object")return e;let o=!1,i={...e};if(Array.isArray(t.content)){let p=t.content.map(u);p.some((r,n)=>r!==t.content[n])&&(i.content=p,o=!0)}if(t.zones&&typeof t.zones=="object"){let p=!1,r=Object.fromEntries(Object.entries(t.zones).map(([n,s])=>{if(!Array.isArray(s))return[n,s];let c=s.map(u);return c.some((a,f)=>a!==s[f])&&(p=!0),[n,c]}));p&&(i.zones=r,o=!0)}return o?i:e}var _=["DocMasthead","AlloyWheelsListing"],O="titleLevel";function k(e){let t=e;if(!t?.content?.length)return e;let o=!1,i=!1,p=t.content.map(r=>_.includes(r?.type??"")?o?(i=!0,{...r,props:{...r.props??{},[O]:2}}):(o=!0,r):r);return i?{...t,content:p}:e}var P=["GalleryB"];function E(e){let t=e.content;if(!Array.isArray(t))return e;let o=!1,i=t.map(n=>{let s=n?.type;if(!s||!P.includes(s))return n;let c=h[s];if(!c?.legacy)return n;let a=n.props??{},f=a[c.slot];if(Array.isArray(f)&&f.length>0)return n;let l=c.legacy(a);if(!l.length)return n;o=!0;let R=String(a.id??s),w=l.map((b,D)=>({type:c.childType,props:{id:`${c.childType}-${R}-${D}`,...b}}));return{...n,props:{...a,[c.slot]:w}}}),p=new Set(y(i)),r=p.size?i.filter((n,s)=>!p.has(s)):i;return p.size&&(o=!0),o?{...e,content:r}:e}import{jsx as z}from"react/jsx-runtime";function S({data:e}){return z(x,{config:A,data:k(N(T(E(e))))})}export{S as default};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The public types of `efficient-web-builder/contract` (published as dist/contract.d.ts).
|
|
3
|
+
*
|
|
4
|
+
* Written out, like `public.d.ts`, and kept honest the same way: `types.check.ts`
|
|
5
|
+
* pairs each declaration with the code it describes.
|
|
6
|
+
*
|
|
7
|
+
* This entry is plain data and one pure function. It imports nothing, so a
|
|
8
|
+
* server can load it without React, the engine or the editor.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The set a block travels in.
|
|
13
|
+
*
|
|
14
|
+
* general draws from its own props and what the host hands it; any host
|
|
15
|
+
* may offer it
|
|
16
|
+
* commerce the shop: products, the catalogue, the cart, the checkout
|
|
17
|
+
* service needs one of the EFFICIENT backend's site services (forms,
|
|
18
|
+
* bookings, reviews, the newsletter, the blog, menus)
|
|
19
|
+
*/
|
|
20
|
+
export type BlockSet = "general" | "commerce" | "service";
|
|
21
|
+
|
|
22
|
+
/** The three sets, in the order a host names them. */
|
|
23
|
+
export const BLOCK_SETS: readonly ["general", "commerce", "service"];
|
|
24
|
+
|
|
25
|
+
/** Every block type of the general set, sorted. */
|
|
26
|
+
export const GENERAL_BLOCKS: readonly string[];
|
|
27
|
+
/** Every block type of the commerce set, sorted. */
|
|
28
|
+
export const COMMERCE_BLOCKS: readonly string[];
|
|
29
|
+
/** Every block type of the service set, sorted. */
|
|
30
|
+
export const SERVICE_BLOCKS: readonly string[];
|
|
31
|
+
|
|
32
|
+
/** The set a block type travels in, or `undefined` for a type this version of
|
|
33
|
+
* the editor does not register (a host's own block, a type from a newer one). */
|
|
34
|
+
export function blockSetOf(type: string): BlockSet | undefined;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Every block type a saved layout uses — top-level sections and whatever sits
|
|
38
|
+
* in their slots, to any depth — each once, sorted.
|
|
39
|
+
*
|
|
40
|
+
* `layout` is the page document a `WebsiteBackend` stores (`PageLayout`); a
|
|
41
|
+
* single node (a section template's) is read the same way. Read by shape: any
|
|
42
|
+
* `{ type: string, props: {…} }` in the page's `content`, in a `zones` entry or
|
|
43
|
+
* in an array under a node's props is a block. Anything else answers `[]`.
|
|
44
|
+
*
|
|
45
|
+
* It errs wide: something that merely looks like a node is counted, so a check
|
|
46
|
+
* built on this can refuse a page it might have accepted and never the reverse.
|
|
47
|
+
*/
|
|
48
|
+
export function blockTypesIn(layout: unknown): string[];
|
package/dist/contract.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var h=["general","commerce","service"],l=[{key:"openers",title:"Hero & intros",defaultExpanded:!0,templateable:!0,sections:[{type:"Hero",label:"Hero Slideshow",set:"general"},{type:"HeroSingle",label:"Hero",set:"general"},{type:"IntroBleed",label:"Scroll-Over Text",set:"general"}]},{key:"shop",title:"Shop & galleries",templateable:!0,sections:[{type:"Collections",label:"Collections",set:"commerce"},{type:"BrandStrip",label:"Brand Strip",set:"commerce"},{type:"AlloyWheelsListing",label:"List",set:"commerce"},{type:"CatalogFilterBar",label:"Catalog Filter Bar",set:"commerce"},{type:"ProductGrid",label:"Product Grid",set:"commerce"},{type:"FitmentFinder",label:"Fitment Form",set:"commerce"},{type:"Gallery",label:"Tabbed Gallery",set:"commerce"},{type:"GalleryB",label:"Customer Photo Grid",set:"commerce"},{type:"SpecStrip",label:"Spec Strip",set:"general"}]},{key:"product",title:"Product page",templateable:!0,sections:[{type:"ProductHero",label:"Product Hero",set:"commerce"},{type:"SpecTable",label:"Spec Table",set:"commerce"},{type:"ProcessSteps",label:"Image & Text Columns",set:"general"},{type:"DetailRows",label:"Feature Rows",set:"commerce"},{type:"FitmentTable",label:"Fitment Table",set:"commerce"},{type:"TyreSizes",label:"Tyre Sizes",set:"commerce"},{type:"TyreFitment",label:"Tyre Fitment Form",set:"commerce"},{type:"EuTyreLabel",label:"EU Tyre Label",set:"commerce"},{type:"RelatedProducts",label:"Related Products",set:"commerce"},{type:"BundleOffer",label:"Bundle Products",set:"commerce"}]},{key:"checkout",title:"Checkout & ordering",templateable:!0,sections:[{type:"OrderSummary",label:"Order Table",set:"general"},{type:"DeliveryOptions",label:"Delivery Options",set:"commerce"},{type:"PaymentBadges",label:"Payment Methods",set:"general"},{type:"CheckoutCTA",label:"Ready-to-Order Banner",set:"commerce"}]},{key:"about",title:"About & brand story",templateable:!0,sections:[{type:"Manifesto",label:"Brand Text",set:"general"},{type:"Timeline",label:"Story Timeline",set:"general"},{type:"TimelineTrack",label:"Milestone Timeline",set:"general"},{type:"Footprint",label:"Locations Map",set:"general"}]},{key:"content",title:"Text & content",templateable:!0,sections:[{type:"Prose",label:"Editorial Text",set:"general"},{type:"ParagraphsA",label:"Lead Text",set:"general"},{type:"Split",label:"Image & Text Split",set:"general"},{type:"Cards",label:"Cards",set:"general"},{type:"KeyFeatures",label:"Key Features",set:"general"}]},{key:"proof",title:"Stats & social proof",templateable:!0,sections:[{type:"Stats",label:"Stats",set:"general"},{type:"StatsParagraph",label:"Stats with Text",set:"general"},{type:"Chart",label:"Chart",set:"general"},{type:"Mockup",label:"Mockup Card",set:"general"},{type:"Testimonials",label:"Testimonials",set:"general"},{type:"Reviews",label:"Reviews",set:"service"},{type:"Logos",label:"Logos",set:"general"}]},{key:"promo",title:"Promotions & sign-ups",templateable:!0,sections:[{type:"Banner",label:"Banner",set:"general"},{type:"TitleWithButtons",label:"Call-to-Action Heading",set:"general"},{type:"Ticker",label:"Scrolling Bar",set:"general"},{type:"Subscribe",label:"Signup Form",set:"service"}]},{key:"blog",title:"Blog & journal",templateable:!0,sections:[{type:"Masthead",label:"Issue Header",set:"general"},{type:"FeaturedCover",label:"Feature Banner",set:"general"},{type:"LongRead",label:"Article Text",set:"general"},{type:"Series",label:"Recurring Columns",set:"general"},{type:"Events",label:"Latest Posts",set:"service"}]},{key:"navigation",title:"Navigation & wayfinding",templateable:!0,sections:[{type:"Breadcrumb",label:"Breadcrumb",set:"general"},{type:"CategoryBar",label:"Category Bar",set:"general"},{type:"DocTabs",label:"Document Tabs",set:"general"}]},{key:"legal",title:"Legal & documents",templateable:!0,sections:[{type:"DocMasthead",label:"Document Header",set:"general"},{type:"DocBody",label:"Document Text",set:"general"},{type:"DocMetaCards",label:"Document Detail Cards",set:"general"}]},{key:"contact",title:"Contact, FAQ & forms",templateable:!0,sections:[{type:"FAQ",label:"Q&A",set:"general"},{type:"ContactRouting",label:"Contact Form",set:"service"},{type:"ContactLocations",label:"Contact / Locations",set:"general"},{type:"SubmitBuild",label:"Photo Submission Form",set:"service"},{type:"ReviewForm",label:"Review Form",set:"service"},{type:"Form",label:"Form",set:"service"},{type:"AppointmentBooking",label:"Booking Form",set:"service"}]},{key:"structure",title:"Layout, structure & embeds",templateable:!1,sections:[{type:"SectionHeader",label:"Section Header",set:"general"},{type:"Flex",label:"Box",set:"general"},{type:"Spacer",label:"Spacer",set:"general"},{type:"Divider",label:"Divider",set:"general"},{type:"CustomHTML",label:"Custom HTML",set:"general"}]}];var y={Grid:'Lewis, 2026-09-14: Box and Grid duplicate each other and it feels confusing. 2026-09-15 he chose the order: give Box uneven widths FIRST, then merge Grid into Box. Shown three ways to pick the widths (mockup "Uneven Box Widths"), he chose A \u2014 shape pictures on the Box\'s `Block widths` row, the same "a row is a shape, pick a picture of it" rule he set for the photo wall on 2026-09-07.\n\nWHAT REPLACES IT: a Box set to One row, with `Block widths` at Equal or a shape (Big left, Big right, Bigger left, Bigger right) and its own `Columns on phone`. Measured on PRODUCTION 2026-09-16 ~09:28 AEST (database `efficient-system`, all 10 tenant schemas, 128 storefront pages, both `layout` and `published_layout` \u2014 256 documents): 2 Grid nodes, and they are ONE Grid counted twice \u2014 the 9DIEM homepage on 9diem.com (`xtreme_mudder` schema), once as draft and once as published. It is top-level, holds three `ImageBlock`s at `columns` 3 \u2014 equal thirds \u2014 and NO block sets `Positions`. A Box draws that with `Block widths` at Equal.\n\n\u26A0\uFE0F THE COUNT MOVES; THE RULE MUST NOT DEPEND ON IT. This entry has already carried three different readings. A local-clone snapshot said no Grid used `Positions`. A PRODUCTION reading on 2026-09-15 ~13:15 AEST found 6 nodes on two sites, 4 of them spanned \u2014 hartesmetal.com.au homepage and about, 4 columns, spans 1 + 3. That one was TRUE when it was taken and stopped being true the same day: those two pages were rebuilt on Box (`Block widths: Bigger right`), and on 2026-09-16 they hold zero Grid nodes and are built from `Flex`. \u26D4 So the rule is NOT "there are still N spanned Grids". NEVER delete the Grid component or its `gridSpan` handling, whatever a census says \u2014 Grid still renders, still edits, still drags, and a merchant may rebuild a page either way on any day. Re-run the census on production before anyone PROPOSES deleting either, and read any number written here as the reading of its own day, not as the state of the world.\n\nWHAT A MERCHANT LOSES: a new Grid, and with it a fixed "N per row" that wraps by itself past three across, and the per-block `Positions` number. Box wraps with `Wrap`, but by content width, not by a fixed count.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Grid still renders through it and can still be edited, dragged and added to; no document is rewritten and NO MIGRATION RUNS \u2014 the owner redoes live sections himself.\n\n\u26A0\uFE0F AND IT STAYS DROPPABLE WHERE IT LIVES. The drop rule in lib/puck/config.tsx read the nestable containers off the catalogue\'s `structure` row, so leaving the catalogue would have made every open slot \u2014 a Box included \u2014 refuse a Grid already stored inside one. `scripts/test-retired-grid-stays-editable.tsx` \xA73 pins it.',CompatibleTyres:'Lewis, 2026-09-09: "Do not bother counting. Delete Compatible Tyres and use the new one. The new one needs complete settings \u2014 it must have every setting our cards have." Shown three ways to finish it, he chose C: retire from the menu now, and take styling the card text as its own card.\n\nWHAT REPLACES IT: `RelatedProducts` with its `Show` dropdown set to "Tyres that fit this product". That block is the GENERIC relationship section from card 1128 \u2014 it knows nothing about wheels or tyres, it asks the registry for a relationship by name. The two have rendered through the SAME renderer (`DynamicRelatedProducts`) since that card; this one is the pre-registry one-off that was never removed.\n\n\u26A0\uFE0F THE SWAP WAS NOT SAFE UNTIL #1305, AND SAYING SO IS THE POINT. The first old-versus-new table put in front of the owner was WRONG. `DynamicRelatedProducts` returns EARLY on a tyre answer and draws this component, so the seven card settings, the head split and the Width control all stopped at that call \u2014 nine settings, measured NO EFFECT, on precisely the relationship that replaces this block. #1283 gave the new block the card settings, #1299 the head split and its own Width, #1305 carried all of it onto the tyre branch. Only then was the claim true.\n\nWHAT WAS MEASURED BEFORE RETIRING, four ways, because the premise decides the card:\n \u2022 settable text kinds (SECTION_TEXT_KINDS): both blocks ABSENT \u2014 the map holds only TimelineTrack and Footprint, both AUTHORED lists\n \u2022 read-only text regions: neither `components/CompatibleTyres` nor `components/TyreCard` stamps one\n \u2022 panel rows through resolveFields: this block 31, `RelatedProducts` 42. This block\'s only style-ish key is `_sStyle`, the bucket HEADER, not a control\n \u2022 head text (num/title/description) is authored on both, so `_partStyles` reaches it identically\nSo on the CARD runs the two are zero against zero \u2014 neither can style them \u2014 and everywhere else the new block is ahead. Styling those runs needs a section-level prop family and a paint path for DERIVED text, which no section has yet: a part is anchored by matching an AUTHORED prop\'s string against the DOM, and `lib/puck/source-bound-parts` keeps hydrated copy unreachable on purpose so a merchant cannot type into a copy of a product name and lose it at the next sync. That is its own card, and `lib/sections/text-regions` is the read-only half that already ships.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT, the same contract Subscribe, Split and SubscribeBlogs have. Every page holding a `CompatibleTyres` still renders through it, no published document is rewritten, and NO MIGRATION RUNS \u2014 the owner\'s standing ruling of 2026-09-05: he redoes live sections himself and deletes the old ones when he does. He also said explicitly not to count them first.\n\n\u26A0\uFE0F AND THIS COMPONENT IS LOAD-BEARING FOR ITS OWN REPLACEMENT: `DynamicRelatedProducts` draws it for EVERY tyre answer. Deleting it would blank the block that replaces it, not just the pages still holding this one.',SubscribeBlogs:"card 66396 \u2014 folded into `Subscribe`, which now chooses its rail's content with a `Type` control (the newsletter's own issues, or live blog posts). The two shared 21 of their fields and rendered THE SAME BYTES from equivalent rows, so offering both asked a merchant to choose between two names for one section. The type key stays because it is stored on published pages, and the component stays because those pages still render through it."};var f=Array.from(new Set([...l.flatMap(e=>e.sections.map(t=>t.type)),...Object.keys(y)])),w=Object.fromEntries(l.flatMap(e=>e.sections.map(t=>[t.type,t.label]))),m={Heading:"general",Text:"general",Eyebrow:"general",ImageBlock:"general",LogoBlock:"general",ButtonBlock:"general",PostCard:"general",HeroSlide:"general",HeroGroup:"general",Integrations:"general",Grid:"general",CollectionCard:"commerce",GalleryItem:"commerce",ProductRef:"commerce",CompatibleTyres:"commerce",Header:"commerce",SearchBlock:"commerce",CartBlock:"commerce",CountrySwitchBlock:"commerce",SubmitBox:"service",BookingBox:"service",SubscribeBlogs:"service",Footer:"service",FooterLogo:"service",FooterMenu:"service",FooterDivider:"service",FooterGroup:"service",FooterText:"service",FooterEmailSignup:"service",FooterSocial:"service",MenuBlock:"service",EmailFormBlock:"service",SocialLogosBlock:"service",LegalLineBlock:"service",SiteHeader:"service",SiteFooter:"service"},a={...m,...Object.fromEntries(l.flatMap(e=>e.sections.map(t=>[t.type,t.set])))};function g(e){return Object.prototype.hasOwnProperty.call(a,e)?a[e]:void 0}function i(e){return Object.keys(a).filter(t=>a[t]===e).sort()}var b=i("general"),u=i("commerce"),S=i("service");var T="Box",B=`${T}es`;var s=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function c(e){return s(e)&&typeof e.type=="string"&&e.type!==""&&s(e.props)}function p(e,t,o){if(Array.isArray(e))for(let r of e)c(r)?d(r,t,o):s(r)&&typeof r.type=="string"&&r.type!==""&&t.add(r.type)}function n(e,t,o){if(Array.isArray(e)){if(o.has(e))return;o.add(e);for(let r of e)c(r)?d(r,t,o):n(r,t,o);return}if(!(!s(e)||o.has(e))){o.add(e);for(let r of Object.values(e))n(r,t,o)}}function d(e,t,o){if(!o.has(e)){o.add(e),t.add(e.type);for(let r of Object.values(e.props))n(r,t,o)}}function E(e){let t=new Set,o=new Set;if(c(e))d(e,t,o);else if(s(e)){if(p(e.content,t,o),s(e.zones))for(let r of Object.values(e.zones))p(r,t,o);s(e.root)&&n(e.root,t,o)}return[...t].sort()}export{h as BLOCK_SETS,u as COMMERCE_BLOCKS,b as GENERAL_BLOCKS,S as SERVICE_BLOCKS,g as blockSetOf,E as blockTypesIn};
|