efficient-web-builder 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +24 -5
  3. package/dist/chunks/{EditorPreviewCheckout-RALICX2M.js → EditorPreviewCheckout-YVSO4HE3.js} +3 -3
  4. package/dist/chunks/PreviewFooter-34YJU76X.js +1 -0
  5. package/dist/chunks/SectionEditorShell-CVWJ6DSU.js +1 -0
  6. package/dist/chunks/{SiteEditorProvider-4NZYBEVE.js → SiteEditorProvider-ECGZVKLG.js} +1 -1
  7. package/dist/chunks/StorefrontEditorChrome-YKEMJT3Z.js +1 -0
  8. package/dist/chunks/chunk-2XX3N727.js +153 -0
  9. package/dist/chunks/chunk-6CP4D6VJ.js +1 -0
  10. package/dist/chunks/chunk-7QXLVNFD.js +1 -0
  11. package/dist/chunks/chunk-EKKAVQJX.js +1 -0
  12. package/dist/chunks/chunk-FU5UZ4UY.js +1 -0
  13. package/dist/chunks/chunk-J5WPJJCW.js +2 -0
  14. package/dist/chunks/{chunk-5WIA75VU.js → chunk-MEIUD5LJ.js} +1 -1
  15. package/dist/chunks/chunk-N3IM4XBG.js +1 -0
  16. package/dist/chunks/chunk-RRHBLOH4.js +1 -0
  17. package/dist/chunks/chunk-TUB4O4RZ.js +15 -0
  18. package/dist/chunks/chunk-UM3P3PXW.js +230 -0
  19. package/dist/chunks/chunk-XQGZKQII.js +1 -0
  20. package/dist/chunks/fitment-data-6NXSKODX.js +1 -0
  21. package/dist/chunks/render-client-VMLB4BTY.js +1 -0
  22. package/dist/editor.css +1 -1
  23. package/dist/index.d.ts +184 -4
  24. package/dist/index.js +908 -644
  25. package/dist/links.js +1 -1
  26. package/package.json +2 -2
  27. package/dist/chunks/PreviewFooter-TTWVSN7F.js +0 -1
  28. package/dist/chunks/SectionEditorShell-QHF74BM4.js +0 -1
  29. package/dist/chunks/StorefrontEditorChrome-VAFMI23Y.js +0 -1
  30. package/dist/chunks/chunk-23HYGLAH.js +0 -1
  31. package/dist/chunks/chunk-2Z43RC3L.js +0 -143
  32. package/dist/chunks/chunk-4MT74TMP.js +0 -1
  33. package/dist/chunks/chunk-764WH3TY.js +0 -11
  34. package/dist/chunks/chunk-DN65SLZM.js +0 -1
  35. package/dist/chunks/chunk-FEL3RPX5.js +0 -230
  36. package/dist/chunks/chunk-KZIT3J33.js +0 -1
  37. package/dist/chunks/chunk-X2DL3VCU.js +0 -15
  38. package/dist/chunks/chunk-XMRSKZIR.js +0 -2
  39. package/dist/chunks/fitment-data-6EHBA26C.js +0 -1
  40. package/dist/chunks/render-client-3H6QYWG7.js +0 -1
  41. /package/dist/chunks/{chunk-2Z43RC3L.js.LEGAL.txt → chunk-2XX3N727.js.LEGAL.txt} +0 -0
  42. /package/dist/chunks/{chunk-UBYBQ3KR.js → chunk-HVOO2GNE.js} +0 -0
  43. /package/dist/chunks/{chunk-X2DL3VCU.js.LEGAL.txt → chunk-TUB4O4RZ.js.LEGAL.txt} +0 -0
@@ -0,0 +1,230 @@
1
+ import{a as lt,b as dt,c as ct,d as pt,e as ut,f as ft,l as gt,m as bt,p as yt,q as wt,t as kt,v as Pt,w as It,y as Tt}from"./chunk-XQGZKQII.js";import{$a as Ge,Aa as De,Dc as Ve,Dh as ht,Ed as Ze,H as Me,Hh as vt,Ie as Je,P as He,Q as R,Qf as tt,R as ce,Ra as Ke,Rf as me,Sa as pe,Ta as N,Th as St,Uh as Et,Va as $,Wa as $e,We as Qe,Xa as qe,Xe as et,_a as Ue,_c as fe,_f as nt,cb as Ye,cf as J,fd as Z,ig as ot,je,jh as mt,ma as K,od as j,pg as rt,qa as Be,sa as We,sg as he,tg as ge,wa as _,xg as at,ya as ze,zc as V}from"./chunk-TUB4O4RZ.js";import{b as ue}from"./chunk-HVOO2GNE.js";import{B as Xe,Ka as X,Na as it,Oa as st}from"./chunk-FU5UZ4UY.js";import{d as de}from"./chunk-6CP4D6VJ.js";import{InspectorHead as cn,InspectorIconButton as Nt}from"efficient-easel/chrome";import{jsx as Rt,jsxs as dn}from"react/jsx-runtime";function Q({side:e}){return dn("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,children:[Rt("rect",{x:"3",y:"4",width:"18",height:"16",rx:"2"}),Rt("path",{d:e==="left"?"M9 4v16":"M15 4v16"})]})}import{Fragment as Ct,jsx as P,jsxs as xt}from"react/jsx-runtime";function pn({icon:e,title:t,context:n,actions:o,side:s="left",onHide:r}){return P(cn,{icon:e,name:t,kind:n,actions:o||r?xt(Ct,{children:[o,r?P(ee,{side:s,onHide:r,divider:!!o}):null]}):void 0})}function ee({side:e,onHide:t,divider:n=!1}){return xt(Ct,{children:[n?P("span",{className:"sf-head-divider","aria-hidden":"true"}):null,P(Nt,{label:`Hide the ${e} panel`,title:"Hide panel",onClick:t,children:P(Q,{side:e})})]})}function _o({side:e,onShow:t}){return P("div",{className:`es-sidepanel es-sidepanel--${e} sf-panel-strip`,children:P(Nt,{label:`Show the ${e} panel`,title:"Show panel",onClick:t,children:P(Q,{side:e})})})}function Mo({label:e,onClick:t,description:n}){return P("button",{type:"button",className:"es-btn-ghost sf-head-textbtn",onClick:t,title:n,children:e})}var te="Flex",un={FooterMenu:"MenuBlock",FooterEmailSignup:"EmailFormBlock",FooterSocial:"SocialLogosBlock"},fn=e=>{let{id:t,...n}=e;return n},Ot=e=>typeof e=="string"?e:"";function Lt(e,t){let n=e.props??{},o=un[e.type];if(o)return[t(o,fn(n))];switch(e.type){case"FooterLogo":{let s=t("LogoBlock",n.reverse?{reverse:n.reverse}:{}),r=Ot(n.tagline).trim();return r?[s,t("Text",{text:r,tone:"dim",align:n.align==="center"?"center":"left"})]:[s]}case"FooterText":return[t("Text",{text:Ot(n.text),tone:typeof n.tone=="string"?n.tone:"default"})];case"FooterDivider":return[t("Divider")];case"FooterGroup":{let s=Array.isArray(n.blocks)?n.blocks:[];return[t(te,{direction:n.direction==="horizontal"?"row":"column",content:s.flatMap(r=>Lt(r,t))})]}default:return[]}}function At(e,t,n){let s=(e&&Array.isArray(e.props?.blocks)?e.props.blocks:[]).flatMap(p=>{let d=Lt(p,t);return d.length<=1?d:[t(te,{direction:"column",content:d})]}),r=t(te,{direction:"row",wrap:!0,share:"equal",content:s}),l=t(te,{direction:"column",content:[t("LegalLineBlock")]});return Be(K,n,[r,l])}import{MediaPanelHead as mn,mediaPickKind as hn}from"efficient-easel/chrome";import{Fragment as bn,jsx as be,jsxs as yn}from"react/jsx-runtime";function gn({panel:e,pick:t,onHide:n}){let o=yt();return yn(bn,{children:[be(mn,{context:o,pick:t?{kind:hn(t.accept),field:t.title||void 0}:null,onCancel:()=>t&&fe(t.requestId,null),onHide:n}),be("div",{className:"sf-media-panel",children:be(e,{pick:t,onPick:s=>t&&fe(t.requestId,s)})})]})}import{DEFAULT_PANEL_W as wn,clampPanelWidth as vn}from"efficient-easel/chrome";import{MAX_PANEL_W as Jo,MIN_PANEL_W as Qo,panelWidthVars as er}from"efficient-easel/chrome";var Yo="sf-editor-panel-widths",Xo={...wn},Vo=e=>vn(e);import{useState as so}from"react";import{useEasel as ao}from"efficient-easel/easel";import{InspectorHead as lo,InspectorIconButton as qt}from"efficient-easel/chrome";import{DuplicateIcon as co,TrashIcon as po}from"efficient-easel/icons";function Ft(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 s=n.resolveFields({type:t.type,props:t.props},{fields:o,lastFields:o,lastData:null,changed:{},parent:null,appState:{}});return!s||typeof s.then=="function"?o:s}catch{return o}}import{useEffect as kn,useId as Sn,useState as En}from"react";import{SettingsField as Pn,SettingsSwitch as In}from"efficient-easel/panel";import{TypeIcon as Tn}from"efficient-easel/icons";import{Fragment as xn,jsx as v,jsxs as _t}from"react/jsx-runtime";var Rn="Chat with us",Nn="We usually reply within a few minutes",Cn="Hi! Ask us anything \u2014 about a wheel, an order, or fitment. Leave your details and we\u2019ll reply.";function ye({label:e,value:t,placeholder:n,onCommit:o,multiline:s=!1}){let[r,l]=En(t);kn(()=>l(t),[t]);let p=()=>{r!==t&&o(r)};return v(Pn,{label:e,icon:v(Tn,{}),children:s?v("textarea",{value:r,placeholder:n,rows:3,onChange:d=>l(d.target.value),onBlur:p,"aria-label":e}):v("input",{type:"text",value:r,placeholder:n,onChange:d=>l(d.target.value),onBlur:p,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()},"aria-label":e,autoComplete:"off"})})}function we(){let{chat:e,setChat:t}=rt(),n=Sn();return _t(xn,{children:[_t("div",{className:"sf-field sf-field--row",children:[v("span",{id:n,className:"sf-field-label sf-field-label--inline",children:"Show the chat bubble"}),v(In,{checked:e.enabled,onChange:o=>t({enabled:o}),ariaLabelledBy:n})]}),v("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."}),v(J,{label:"Wording"}),v(ye,{label:"Title",value:e.title,placeholder:Rn,onCommit:o=>t({title:o})}),v(ye,{label:"Subtitle",value:e.subtitle,placeholder:Nn,onCommit:o=>t({subtitle:o})}),v(ye,{label:"Greeting message",value:e.greeting,placeholder:Cn,onCommit:o=>t({greeting:o}),multiline:!0}),v("p",{className:"sf-field-hint",children:"Leave a field blank to use the built-in wording."})]})}import{useEffect as On,useId as Mt,useState as Ht}from"react";import{SettingsField as Ln}from"efficient-easel/panel";import{Fragment as ve,jsx as x,jsxs as Bt}from"react/jsx-runtime";var An={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 Fn({platform:e}){let{rows:t,saveLink:n}=he(),{value:o,error:s}=t[e],[r,l]=Ht(o),[p,d]=Ht(!1),h=Mt(),i=Mt();On(()=>l(o),[o]);let f=async()=>{if(r.trim()===o){r!==o&&l(o);return}d(!0),await n(e,r),d(!1)},b=st[e];return Bt(ve,{children:[x(Ln,{label:b,htmlFor:h,icon:x(vt,{platform:e,iconStyle:"outline",size:18}),children:x("input",{id:h,type:"text",inputMode:"url",value:r,placeholder:An[e],onChange:g=>l(g.target.value),onBlur:()=>{f()},onKeyDown:g=>{g.key==="Enter"&&g.currentTarget.blur(),g.key==="Escape"&&(l(o),g.currentTarget.blur())},"aria-invalid":s?!0:void 0,"aria-describedby":s?i:void 0,"aria-busy":p||void 0,autoComplete:"off",spellCheck:!1})}),s&&x("p",{id:i,className:"sf-note sf-note--error",role:"alert",children:s})]})}function ke({unavailable:e}){let{canSave:t}=he();return!t&&e?x(ve,{children:e}):Bt(ve,{children:[x("p",{className:"sf-field-hint",children:"Paste a link to each profile. A platform left empty shows nothing on the site."}),it.map(n=>x(Fn,{platform:n},n))]})}import{useId as _n,useMemo as Mn}from"react";import{useEasel as Hn}from"efficient-easel/easel";import{SettingsField as Bn,SettingsSwitch as Wn}from"efficient-easel/panel";import{jsx as M,jsxs as Wt}from"react/jsx-runtime";var zn="root:default-zone";function Se({heroId:e}){let{appState:t,dispatch:n}=Hn(i=>i),o=t.data.content??[],s=o.findIndex(i=>i.props.id===e),r=s>=0?o[s]:null,l=r?r.props.showTicker??!0:!0,p=Mn(()=>{let i=r?.props.tickerItems;return Array.isArray(i)?i:ht.map(f=>({text:f}))},[r]),d=_n();if(!r)return M("div",{className:"sf-field",style:{color:"var(--sf-muted)",fontSize:12},children:"This ticker\u2019s hero is no longer on the page."});let h=i=>n({type:"replace",destinationZone:zn,destinationIndex:s,data:{...r,props:{...r.props,...i}}});return Wt("div",{children:[M(J,{label:"Ticker"}),Wt("div",{className:"sf-field sf-field--row",children:[M("span",{id:d,className:"sf-field-label sf-field-label--inline",children:"Show ticker"}),M(Wn,{checked:l,onChange:i=>h({showTicker:i}),ariaLabelledBy:d})]}),M(Bn,{label:me.label,icon:me.icon,children:M(tt,{items:p,placeholder:"item",onChange:i=>h({tickerItems:i}),markup:!0})})]})}import{useCallback as Dn,useEffect as Kn,useRef as $n,useState as H}from"react";import{createPortal as qn}from"react-dom";import{InspectorIconButton as Un}from"efficient-easel/chrome";import{CopyToPageIcon as Gn}from"efficient-easel/icons";import{Fragment as zt,jsx as S,jsxs as ne}from"react/jsx-runtime";function Ee({node:e,currentSlug:t,siteId:n,tokenRef:o,runAuthed:s,onNotify:r}){let[l,p]=H(!1),[d,h]=H(null),i=V(),[f,b]=H(!1),[g,y]=H(null),O=$n(null),[T,re]=H(null),[a,U]=H(null),ie=Dn(async()=>{if(i.usesBridgedToken&&!o.current){b(!0);return}try{h(await de(i).pages.list(n?{siteId:n}:void 0))}catch{b(!0)}},[o,n,i]),E=()=>{if(l){p(!1);return}let u=O.current?.getBoundingClientRect();u&&re({top:u.bottom+6,right:Math.max(8,window.innerWidth-u.right)}),U(O.current?.closest(".sf-editor")??document.body),h(null),b(!1),ie(),p(!0)};Kn(()=>{if(!l)return;let u=m=>{m.key==="Escape"&&p(!1)};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[l]);let G=(d??[]).filter(u=>u.slug!==t),se=async u=>{if(g)return;y(u.slug);let m=kt(e),w=i.documentHooks?.storedNode?.(m)??m,W=de(i).pages,z=await s(async()=>{let L=await W.load({id:u.id});if(!L)throw new Error(`Page "${u.slug}" no longer exists.`);let A=L.layout??{},F=Array.isArray(A.content)?[...A.content]:[],Y=F.findIndex(ae=>ae?.type===R);F.splice(Y===-1?F.length:Y,0,w),await W.save(u.id,{layout:{root:{},zones:{},...A,content:F}},{version:L.version,clientId:""})});y(null),p(!1),r?.(z?`Duplicated to \u201C${u.label}\u201D`:"Couldn\u2019t duplicate the section \u2014 please retry",z?"success":"error")};return ne(zt,{children:[S(Un,{buttonRef:O,label:"Duplicate to another page",hasPopup:"menu",expanded:l,onClick:E,children:S(Gn,{size:15})}),l&&T&&a&&qn(ne(zt,{children:[S("div",{className:"sf-dupmenu-backdrop",onClick:()=>p(!1)}),ne("div",{className:"sf-dupmenu",role:"menu",style:{top:T.top,right:T.right},children:[S("div",{className:"sf-dupmenu-head",children:"Duplicate to page\u2026"}),f?S("div",{className:"sf-dupmenu-empty",children:"Couldn\u2019t load pages"}):d===null?S("div",{className:"sf-dupmenu-empty",children:"Loading\u2026"}):G.length===0?S("div",{className:"sf-dupmenu-empty",children:"No other pages"}):G.map(u=>ne("button",{type:"button",role:"menuitem",className:"sf-dupmenu-item",disabled:g!==null,onClick:()=>se(u),children:[S("span",{className:"sf-dupmenu-name",children:u.label}),g===u.slug?S("span",{className:"sf-note",children:"Copying\u2026"}):u.draft&&S("span",{className:"sf-note",children:"draft"})]},u.id))]})]}),a)]})}import{SettingsDrill as Yn}from"efficient-easel/panel";import{jsx as q,jsxs as Zn}from"react/jsx-runtime";var Xn="Not shown on the page";function Vn({part:e,onOpen:t}){return q(Yn,{name:e.label,preview:e.offPage?Xn:e.preview||"Empty",offPage:e.offPage,status:e.hidden?q("span",{className:"sf-entry-eye",role:"img","aria-label":"Hidden on the page",children:q(je,{name:"eye-off",size:14})}):void 0,onOpen:()=>t(e.key)})}function Dt({parts:e,onOpen:t}){let n=e.filter(o=>!o.identifier);return n.length?Zn("div",{className:"sf-entries",children:[q("h3",{className:"sf-entries-head",children:"Text"}),n.map(o=>q(Vn,{part:o,onOpen:t},o.key))]}):null}import{useState as jn}from"react";import{createNode as Jn,newId as Qn}from"efficient-easel/data";import{useEasel as eo}from"efficient-easel/easel";import{jsx as oe,jsxs as Kt}from"react/jsx-runtime";function Pe(){let{appState:e,dispatch:t,config:n}=eo(i=>i),{readOnly:o}=Z(),[s,r]=jn(!1),l=e.data.content;if(o||l.some(i=>i.type===K))return null;let p=l.find(i=>i.type===R)??null,d=(i,f)=>Jn(n,i,f);return Kt("div",{className:"sf-box-footer-switch",children:[oe("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."}),s?Kt("div",{className:"sf-box-footer-switch-row",children:[oe("button",{type:"button",className:"es-btn-primary",onClick:()=>{let i=At(p,d,Qn(K));t({type:"setData",data:f=>({...f,content:[...We(f.content,i)]}),recordHistory:!0}),r(!1)},children:"Switch now"}),oe("button",{type:"button",className:"es-btn-ghost",onClick:()=>r(!1),children:"Cancel"})]}):oe("button",{type:"button",className:"es-btn-ghost",onClick:()=>r(!0),children:"Switch to Box footer"})]})}import{useState as to}from"react";import{useSelectedFields as no}from"efficient-easel/easel";import{Inspector as oo,planFields as ro}from"efficient-easel/fields";import{jsx as $t}from"react/jsx-runtime";var Ie=new Map,io=Object.fromEntries(nt.map(e=>{let t=Qe[e];return[e,$t(t,{},e)]}));function Te({entries:e}){let{id:t,fields:n,values:o,readOnly:s,onChange:r}=no(),[l,p]=to(()=>Ie.get(t)),d=Ie.get(t),h=ro(n).buckets,i=d&&h.includes(d)?d:l&&h.includes(l)?l:h[0],f=i===void 0||et(h,i)!==!0;return $t(oo,{fields:n,values:o,onChange:r,readOnly:s,tab:i,onTab:b=>{Ie.set(t,b),p(b)},tabIcons:io,idPrefix:t,ariaLabel:"Section settings",children:f?e:null})}import{SettingsSwitch as uo}from"efficient-easel/panel";import{Fragment as Re,jsx as c,jsxs as I}from"react/jsx-runtime";var Ne={kind:"puck"},Fi={kind:"header"},_i={kind:"website"},Mi={kind:"chat"},Hi={kind:"social"},B="Part";function fo(e,t,n){let o=e.describeNode(t);return{name:n,kindLabel:o?`${B} of ${o.label}`:B}}function Ut({what:e}){return I("div",{className:"sf-note",children:[c("p",{children:I("strong",{children:[e," settings belong to a website."]})}),I("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 mo={header:{name:"Header",kindLabel:"Site settings",icon:"header",render:(e,t)=>{let n=t.hostPanels?.header;return n?c(n,{placeholderMode:t.capabilities.placeholderFrames,tokenRef:t.tokenRef,siteId:t.siteId,websiteName:t.websiteName,onOpenWebsiteSettings:t.onOpenWebsiteSettings,onAuthExpired:()=>t.notifyParent("storefront-editor:auth-expired")}):null}},website:{name:"Appearance",kindLabel:"Site settings",icon:"website",render:(e,t)=>c(wt,{themeFromDocument:!t.capabilities.hasSiteTheme,tokenRef:t.tokenRef,siteId:t.siteId,onNotify:t.onNotify})},chat:{name:"Live chat",kindLabel:"Site settings",icon:"chat",render:()=>c(we,{})},social:{name:"Social links",kindLabel:"Site settings",icon:"social",render:()=>c(ke,{unavailable:c(Ut,{what:"Social link"})})},ticker:{name:ge,kindLabel:B,icon:"ticker",head:(e,t)=>e.kind==="ticker"?fo(t,e.heroId,ge):null,render:e=>c(Se,{heroId:e.kind==="ticker"?e.heroId:""})},part:{name:B,kindLabel:B,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:s}=De(e.propKey),r=s?lt(n.fields[o],s):n.fields[o],l=Ke(Ge(Ue(r??{},o)),s);return{name:t.styleNameOfPart(e.nodeId,e.propKey)??l,kindLabel:`${B} of ${n.label}`}},render:(e,t)=>e.kind==="part"?c(ft,{nodeId:e.nodeId,propKey:e.propKey,onBack:()=>t.onSelectNode(e.nodeId),onEditStyle:t.onOpenSiteStyles}):null}},ho=new Set(["header","website","chat"]);function go(e,t){if(e==="puck")return null;let n=mo[e];return ho.has(e)&&!t.hasSiteSettings?{...n,kindLabel:"Not part of a template",render:()=>c(Ut,{what:n.name})}:n}function bo({mode:e,onOpenWebsiteSettings:t,onOpenSiteStyles:n,onSelectNode:o,hideNodeActions:s=!1,onNotify:r,onHidePanel:l}){let{capabilities:p,tokenRef:d,notifyParent:h,currentSlug:i,siteId:f,runAuthed:b}=Z(),{websiteName:g,fonts:y}=X(),{partStyle:O}=ze(),T=j(),{select:re}=_(),{selectedItem:a,getItemById:U,getSelectorForId:ie,config:E,appState:G}=ao(k=>k),se=Ft(E,a?{type:a.type,props:a.props}:null),u=k=>E.components[k]?.label??k,m=a?ie(a.props.id):void 0,w=go(e.kind,p),W=V(),z=W.chrome?.panels?.chromePage,L={capabilities:p,tokenRef:d,hostPanels:W.chrome?.panels,describeNode:k=>{let C=U(k);if(!C)return null;let D=E.components[C.type];return{type:C.type,label:D?.label??C.type,fields:D?.fields??{}}},styleNameOfPart:(k,C)=>{let D=U(k);if(!D)return null;let an=$(k,C),ln=O?.partId===an?O:null;return pt(D.props,C,ln,y)},siteId:f,websiteName:g??null,notifyParent:h,onNotify:r,onOpenWebsiteSettings:t,onOpenSiteStyles:n,onSelectNode:o},A=w?.head?.(e,L)??null,F=A?.name??(w?w.name:a?u(a.type):"Page settings"),Y=A?.kindLabel??(w?w.kindLabel:a?m&&m.zone!==ce?"Block":"Section":"Page"),ae=w?w.icon:a?a.type:"page",Oe=w?null:a?E.components[a.type]?.fields??null:E.root?.fields??null,Qt=Oe?ot(Oe):2,Le=e.kind==="puck"&&a?ct(a.type):null,en=!!a&&!!m&&m.zone===ce&&a.type!==R&&a.type!==He,le=Me(G?.data,a),tn=()=>{le||m&&T.duplicateComponent(m.zone,m.index)},nn=()=>{m&&(T.removeComponent(m.zone,m.index),T.select(null))},on=a?E.components[a.type]?.defaultProps?.previewHover:void 0,Ae=e.kind==="puck"&&!!a&&!!m&&on!==void 0,Fe=Ae&&a.props.previewHover===!0,rn=()=>{!a||!m||T.replaceComponent(m.zone,m.index,{...a,props:{...a.props,previewHover:!Fe}})},[_e,sn]=so(gt);return I("div",{className:`es-sidepanel es-sidepanel--right sf-panel sf-panel--right${_e?"":" sf-hints-folded"}`,children:[c(lo,{icon:c(at,{type:ae,size:15}),name:F,kind:Y,actions:!s&&e.kind==="puck"&&a&&a.type!==R?I(Re,{children:[c(qt,{label:"Duplicate section",title:le??void 0,disabled:le!==null,onClick:tn,children:c(co,{size:15})}),en&&p.hasSiteSettings&&c(Ee,{node:a,currentSlug:i,siteId:f??void 0,tokenRef:d,runAuthed:b,onNotify:r}),c(qt,{label:"Remove section",danger:!0,onClick:nn,children:c(po,{size:15})}),l?c(ee,{side:"right",onHide:l,divider:!0}):null]}):l?c(ee,{side:"right",onHide:l}):void 0}),Ae&&I("div",{className:"sf-preview-pin",children:[I("div",{className:"sf-preview-pin-text",children:[c("span",{className:"sf-preview-pin-label",children:"Preview hover state"}),c("span",{className:"sf-preview-pin-hint",children:"not shown live"})]}),c(uo,{checked:Fe,onChange:rn,ariaLabel:"Preview hover state"})]}),c(Je,{tier:Qt,children:c("div",{className:"sf-insp-body sf-scroll",children:w?w.render(e,L):a?I(Re,{children:[c(Ze,{children:c(Te,{entries:c(Dt,{parts:Ye(se??E.components[a.type]?.fields,a.props),onOpen:k=>re($(a.props.id,k))})})}),a.type===R&&p.hasSiteSettings&&c(Pe,{}),Le&&c(ut,{source:Le,slug:dt(a?.props)}),c(bt,{shown:_e,onChange:sn})]}):I(Re,{children:[c(Te,{}),i===Ve&&p.hasSiteSettings&&z&&c(z,{})]})})})]})}import{useCallback as Gt,useEffect as Yt}from"react";import{useEasel as yo}from"efficient-easel/easel";function Gi({mode:e,setMode:t,onOpenPart:n}){let{getSelectorForId:o}=yo(i=>i),s=j(),{setSelectedPartId:r,setSelectHandler:l}=_(),p=Gt(i=>{let f=$e(i);if(!f)return;let{nodeId:b,propKey:g}=f;if(!g){t(y=>y.kind==="part"?Ne:y);return}t(y=>y.kind==="part"&&y.nodeId===b&&y.propKey===g?y:{kind:"part",nodeId:b,propKey:g}),n?.(b)},[t,n]);Yt(()=>{l(p)},[l,p]);let d=e.kind==="part"?$(e.nodeId,e.propKey):null;return Yt(()=>{r(d)},[d,r]),{selectNode:Gt(i=>{t(()=>Ne);let f=o(i);f&&s.select(f)},[t,o,s]),openPartId:d}}import{useEffect as Xt,useState as wo}from"react";import{bindUndoKeys as vo,useEaselApi as ko}from"efficient-easel/easel";function So(e){let t=ue(),[n,o]=wo(null);return Xt(()=>o(e.current),[e]),t.ownsDocument?typeof document>"u"?null:document:n}function ji(e){let t=ue(),n=ko(),o=So(e);Xt(()=>{if(!(t.ownsDocument||!o))return vo(o,n)},[t,n,o])}import{EaselCanvas as Co}from"efficient-easel/easel";import{useEffect as Zt,useLayoutEffect as Io}from"react";var Eo=String.raw`(function (doc) {
2
+ if (doc.__sfFitWords) return;
3
+ var win = doc.defaultView;
4
+ var SELECTOR = "h1,h2,h3,h4,h5,h6,[class*='font-heading'],[class*='font-display']";
5
+ var MIN_SCALE = 0.3, MIN_PX = 16, SLACK = 1;
6
+
7
+ function measure(el) {
8
+ var widest = 0, current = 0, last = null, split = false, lastBlock = null;
9
+ function blockOf(n) {
10
+ for (var p = n.parentElement; p && p !== el; p = p.parentElement) {
11
+ var d = win.getComputedStyle(p).display;
12
+ if (d.indexOf("inline") !== 0 && d !== "contents") return p;
13
+ }
14
+ return el;
15
+ }
16
+ function close() { if (current > widest) widest = current; current = 0; last = null; }
17
+ var walker = doc.createTreeWalker(el, 5), range = doc.createRange(), node;
18
+ while ((node = walker.nextNode())) {
19
+ if (node.nodeType === 1) {
20
+ if (node.tagName === "BR" || node.tagName === "WBR") close();
21
+ continue;
22
+ }
23
+ var block = blockOf(node);
24
+ if (block !== lastBlock) close();
25
+ lastBlock = block;
26
+ var re = /(\S+)|(\s+)/g, m;
27
+ while ((m = re.exec(node.data))) {
28
+ if (m[2]) { close(); continue; }
29
+ range.setStart(node, m.index);
30
+ range.setEnd(node, m.index + m[0].length);
31
+ var rects = range.getClientRects();
32
+ for (var i = 0; i < rects.length; i++) {
33
+ var r = rects[i];
34
+ if (r.width <= 0) continue;
35
+ current += r.width;
36
+ if (last && r.top > last.top + last.height / 2) split = true;
37
+ last = r;
38
+ }
39
+ }
40
+ }
41
+ close();
42
+ return { widest: widest, split: split };
43
+ }
44
+
45
+ function lineWidth(el) {
46
+ var cs = win.getComputedStyle(el);
47
+ return el.getBoundingClientRect().width - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight)
48
+ - parseFloat(cs.borderLeftWidth) - parseFloat(cs.borderRightWidth);
49
+ }
50
+
51
+ // ⚠️ THE HEADING ELEMENT IS NEVER TOUCHED — no style="", no data-*. This
52
+ // runs before React hydrates, and React 19 in development reports ANY
53
+ // attribute that differs from what it rendered ("a tree hydrated but some
54
+ // attributes didn't match"): first our inline font-size on the hero (which
55
+ // React owns via --heading-size), then, when that moved to a data-sf-fit
56
+ // attribute, the attribute itself. So the fitted size lives only in this
57
+ // script's own stylesheet, in <head>, addressed to each heading by its
58
+ // POSITION (":root>*:nth-child(2)>…"). A position goes stale when the page's
59
+ // structure changes, so the rules are rewritten in the MutationObserver
60
+ // callback, which runs before the next paint. !important so the size also
61
+ // beats a part's own inline size.
62
+ var head = doc.head || doc.documentElement;
63
+ var fitEl = doc.createElement("style");
64
+ fitEl.id = "storefront-fit-words-sizes";
65
+ head.appendChild(fitEl);
66
+ var fitted = new Map(); // heading -> fitted size, e.g. "43.8px"
67
+
68
+ function pathOf(el) {
69
+ var parts = [];
70
+ for (var e = el; e && e.parentElement; e = e.parentElement) {
71
+ var i = 1, s = e;
72
+ while ((s = s.previousElementSibling)) i++;
73
+ parts.unshift("*:nth-child(" + i + ")");
74
+ }
75
+ return ":root>" + parts.join(">");
76
+ }
77
+ function writeRules() {
78
+ var css = "";
79
+ fitted.forEach(function (size, el) {
80
+ if (!el.isConnected) { fitted.delete(el); return; }
81
+ css += pathOf(el) + "{font-size:" + size + " !important}";
82
+ });
83
+ if (fitEl.textContent !== css) fitEl.textContent = css;
84
+ }
85
+
86
+ function unfit(el) {
87
+ if (fitted.delete(el)) writeRules();
88
+ }
89
+
90
+ function fits(el) {
91
+ var m = measure(el);
92
+ return !m.split && m.widest <= lineWidth(el) + SLACK;
93
+ }
94
+
95
+ function fit(el) {
96
+ unfit(el);
97
+ if (lineWidth(el) <= 0) return; // hidden, or not laid out yet
98
+ if (fits(el)) return;
99
+ var set = parseFloat(win.getComputedStyle(el).fontSize);
100
+ if (!set) return;
101
+ var floor = Math.max(set * MIN_SCALE, MIN_PX);
102
+ if (floor >= set) return;
103
+ function size(px) { return Math.floor(px * 10) / 10 + "px"; }
104
+ // The SEARCH tries sizes on the element's own style and then puts that
105
+ // attribute back byte for byte (or removes it, if it had none), so nothing
106
+ // is left for React to see. A trial in a stylesheet instead restyles the
107
+ // whole page per step: a full pass on the Hartes home took 75–160ms at 4x
108
+ // CPU that way.
109
+ var hadStyle = el.hasAttribute("style"), origStyle = el.getAttribute("style");
110
+ function attempt(px) { el.style.setProperty("font-size", size(px), "important"); }
111
+ function done() { if (hadStyle) el.setAttribute("style", origStyle); else el.removeAttribute("style"); }
112
+ attempt(floor);
113
+ if (!fits(el)) { done(); return; } // even the floor does not fit: leave it as set
114
+ var lo = floor, hi = set;
115
+ for (var i = 0; i < 8; i++) {
116
+ var mid = (lo + hi) / 2;
117
+ attempt(mid);
118
+ if (fits(el)) lo = mid; else hi = mid;
119
+ }
120
+ done();
121
+ fitted.set(el, size(lo));
122
+ writeRules();
123
+ }
124
+
125
+ // What each heading measured right after we last fitted it, so the
126
+ // ResizeObserver below can tell a real change (a font swap, a rotate, a
127
+ // container that moved) from the size change our own write just caused.
128
+ var seen = new WeakMap();
129
+ function remember(el) {
130
+ var b = el.getBoundingClientRect();
131
+ seen.set(el, b.width + "x" + b.height);
132
+ }
133
+ function fitAndRemember(el) { fit(el); remember(el); }
134
+
135
+ // ⚠️ A ResizeObserver, NOT fonts.ready or a resize event, and the reason is
136
+ // WHEN it runs: after layout, BEFORE paint. The web font arriving re-wraps a
137
+ // fitted heading, and fonts.ready resolves only after that frame is painted —
138
+ // measured on the Hartes hero: a 42px jump in 2 of 3 loads. A size change
139
+ // reported here is fitted in the same frame, so the broken state is never
140
+ // drawn. It also covers a container that resizes.
141
+ var ro = new win.ResizeObserver(function (entries) {
142
+ for (var i = 0; i < entries.length; i++) {
143
+ var el = entries[i].target;
144
+ var b = el.getBoundingClientRect();
145
+ if (seen.get(el) === b.width + "x" + b.height) continue; // our own write
146
+ fitAndRemember(el);
147
+ }
148
+ });
149
+ function watch(el) { if (!seen.has(el)) { remember(el); ro.observe(el); } }
150
+
151
+ function fitAll() {
152
+ var els = doc.querySelectorAll(SELECTOR);
153
+ for (var i = 0; i < els.length; i++) { fitAndRemember(els[i]); watch(els[i]); }
154
+ }
155
+
156
+ var queued = 0, all = false, touched = new Set();
157
+ function run() {
158
+ queued = 0;
159
+ if (all) { all = false; touched.clear(); fitAll(); return; }
160
+ var els = Array.from(touched);
161
+ touched.clear();
162
+ for (var i = 0; i < els.length; i++) if (els[i].isConnected) { fitAndRemember(els[i]); watch(els[i]); }
163
+ }
164
+ function schedule() { if (!queued) queued = win.requestAnimationFrame(run); }
165
+ function scheduleAll() { all = true; schedule(); }
166
+
167
+ fitAll();
168
+ // A backstop only: a font that changes widths without changing any
169
+ // heading's box is not seen by the ResizeObserver.
170
+ if (doc.fonts && doc.fonts.ready) doc.fonts.ready.then(scheduleAll, function () {});
171
+
172
+ // …and the viewport WIDTH, which the ResizeObserver cannot stand in for: a
173
+ // heading sized to its own text (fit-content, a flex item) keeps the SAME box
174
+ // when the phone turns to 844, so nothing reports a change and it would stay
175
+ // shrunk. The probe's rotate check caught exactly that.
176
+ var lastWidth = win.innerWidth;
177
+ function onResize() {
178
+ if (win.innerWidth === lastWidth) return; // a phone's toolbar changing HEIGHT is not our business
179
+ lastWidth = win.innerWidth;
180
+ scheduleAll();
181
+ }
182
+ win.addEventListener("resize", onResize);
183
+
184
+ var mo = new win.MutationObserver(function (records) {
185
+ // Positions first: a node added or removed anywhere can shift the
186
+ // nth-child path of a fitted heading, and this callback runs before paint.
187
+ if (fitted.size) {
188
+ for (var q = 0; q < records.length; q++) if (records[q].type === "childList") { writeRules(); break; }
189
+ }
190
+ for (var i = 0; i < records.length; i++) {
191
+ var r = records[i];
192
+ var target = r.target.nodeType === 1 ? r.target : r.target.parentElement;
193
+ var own = target && target.closest(SELECTOR);
194
+ if (own) touched.add(own);
195
+ for (var j = 0; j < r.addedNodes.length; j++) {
196
+ var n = r.addedNodes[j];
197
+ if (n.nodeType !== 1) continue;
198
+ if (n.matches(SELECTOR)) touched.add(n);
199
+ var inner = n.querySelectorAll(SELECTOR);
200
+ for (var k = 0; k < inner.length; k++) touched.add(inner[k]);
201
+ }
202
+ }
203
+ if (touched.size) schedule();
204
+ });
205
+ mo.observe(doc.body, { childList: true, subtree: true, characterData: true });
206
+
207
+ doc.__sfFitWords = function stop() {
208
+ win.removeEventListener("resize", onResize);
209
+ ro.disconnect();
210
+ mo.disconnect();
211
+ if (queued) win.cancelAnimationFrame(queued);
212
+ fitted.clear();
213
+ fitEl.remove();
214
+ delete doc.__sfFitWords;
215
+ };
216
+ // For the probe and for debugging: which headings are fitted, at what size,
217
+ // and the sheet that holds it (disable it to read a heading's set size).
218
+ doc.__sfFitWords.fitted = fitted;
219
+ doc.__sfFitWords.sheet = fitEl;
220
+ })(document);`,Po="storefront-fit-words";function Vt(e){let t=e.createElement("script");return t.id=Po,t.textContent=Eo,(e.head??e.documentElement).appendChild(t),()=>{e.__sfFitWords?.(),t.remove()}}import{Fragment as Ro,jsx as jt,jsxs as No}from"react/jsx-runtime";var To=`
221
+ [${pe}][${pe}] { cursor: text; }
222
+ [${N}][${N}][${N}] {
223
+ outline: 1px solid ${mt.accent};
224
+ outline-offset: 2px;
225
+ }
226
+ [${N}][${N}]:has([${N}]),
227
+ [data-puck-overlay-portal][data-puck-overlay-portal]:has([${N}]) {
228
+ outline: none;
229
+ }
230
+ `;function Ce({children:e,document:t}){let{theme:n,themeMode:o,themeSwitchShown:s}=X(),r=Xe(n);return Zt(()=>{if(t)return St(t,{mode:o,switchShown:s})},[t,o,s]),Zt(()=>{if(t)return Et(t,r)},[t,r]),Io(()=>{if(t)return Vt(t)},[t]),No(Ro,{children:[jt(It,{}),jt("style",{children:To}),e]})}import{Fragment as Jt,jsx as xe}from"react/jsx-runtime";function xo({children:e,componentId:t}){let{selectedPartId:n}=_();return qe(n,t)?xe(Jt,{}):xe(Jt,{children:e})}function gs(e){let{mirrorHostStyles:t}=Pt(),n=Tt();return xe(Co,{...e,metadata:e.metadata??n,height:"fill",mirrorStyles:t,frameWrapper:Ce,overlay:xo})}export{pn as a,_o as b,Mo as c,At as d,gn as e,Yo as f,Xo as g,Vo as h,Jo as i,Qo as j,er as k,Ft as l,Ne as m,Fi as n,_i as o,Mi as p,Hi as q,bo as r,Gi as s,So as t,ji as u,gs as v};
@@ -0,0 +1 @@
1
+ import{Aa as ie,Ba as We,Ca as Dt,Cb as q,Eh as Wn,Gg as Bn,Ha as le,Ib as Z,Je as kn,Ka as Wt,Ke as Fn,Kg as Dn,La as Gt,Ma as zt,Na as Mt,Nd as Nn,Ne as An,O as It,Oa as Ut,Pa as Vt,Qa as $t,Tb as Ye,Tf as Hn,Va as Xt,Za as Yt,eb as Ge,fb as ze,ff as B,gb as Me,gf as On,hb as ce,hd as de,id as Pn,jb as Ue,jd as xn,kb as Ve,lb as Kt,od as _n,pd as w,te as In,ub as Cn,ue,vb as En,ya as Ft}from"./chunk-TUB4O4RZ.js";import{b as Rn}from"./chunk-HVOO2GNE.js";import{$ as $e,Aa as Sn,B as qt,Ba as yn,C as Zt,Ca as wn,D as jt,Da as Tn,E as Jt,F as Qt,Ga as vn,Ka as A,La as Ln,U as en,V as tn,W as nn,X as on,_ as an,aa as sn,ba as rn,ca as ln,d as kt,ea as cn,fa as dn,g as At,h as Ot,i as Ht,ia as un,j as Lt,ja as hn,k as L,l as Le,la as pn,m as Be,pa as mn,q as V,r as De,s as Bt,ua as Xe,va as gn,xa as fn,za as bn}from"./chunk-FU5UZ4UY.js";var _o=".sf-editor #preview-frame",$=()=>document.querySelector(_o);function wr(e){kt()||requestAnimationFrame(()=>{$()?.contentDocument?.querySelector(`[data-puck-component="${CSS.escape(e)}"]`)?.scrollIntoView({behavior:"smooth",block:"start"})})}function Tr(e,t){let n=$()?.contentWindow;if(!n)return;let o={id:e,index:t};n.dispatchEvent(new CustomEvent(Wn,{detail:o}))}function vr(){requestAnimationFrame(()=>{$()?.contentWindow?.scrollTo({top:0,behavior:"smooth"})})}function Gn(e,{passes:t=[150,400],onPinned:n}={}){let o=0,s=!1,a=[],d=()=>{let c=$(),p=c?.contentWindow,u=c?.contentDocument;if(!p||!u)return!1;let v=e(p,u);if(v==null)return!1;if(p.scrollTo({left:p.scrollX,top:v,behavior:"instant"}),!s){s=!0,n?.();for(let P of t)a.push(setTimeout(d,P))}return!0},h=()=>{!d()&&o++<150&&a.push(setTimeout(h,32))};return h(),()=>a.forEach(clearTimeout)}function Cr(e){return Gn((t,n)=>{let o=n.querySelector(`[data-puck-component="${CSS.escape(e)}"]`);return o?t.scrollY+o.getBoundingClientRect().top:null})}function Er(e){return Gn((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{useEasel as Et}from"efficient-easel/easel";import{useEffect as Is,useRef as go,useState as Ne}from"react";import{useState as Mn}from"react";import{SettingsField as Io}from"efficient-easel/panel";import{jsx as j,jsxs as Ke}from"react/jsx-runtime";function No(e){return e===1?"1 color theme":`${e} color themes`}function zn({count:e,onCancel:t,onConfirm:n}){return j("div",{className:"sf-cleardlg-veil",role:"dialog","aria-modal":"true","aria-labelledby":"sf-clear-colours-title",children:Ke("div",{className:"sf-cleardlg",children:[j("h2",{id:"sf-clear-colours-title",className:"sf-cleardlg-title",children:"Clear this site\u2019s colors?"}),Ke("p",{className:"sf-cleardlg-body",children:["This site has ",No(e)," of its own. Clearing takes them away and puts back the four the shop supplies."]}),j("p",{className:"sf-cleardlg-final",children:"This cannot be undone."}),Ke("div",{className:"sf-cleardlg-btns",children:[j("button",{type:"button",onClick:t,className:"sf-cleardlg-btn",children:"Cancel"}),j("button",{type:"button",onClick:n,className:"sf-cleardlg-btn sf-cleardlg-btn--danger",children:"Clear colors"})]})]})})}import{Fragment as Ho,jsx as z,jsxs as Vn}from"react/jsx-runtime";var ko=kn("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 Fo(){return z("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",children:z("path",{d:"M12 5v14M5 12h14"})})}var Un="Reset color",Ao={selected:0,themes:[]};function Oo(e){e(Ao)}function qe({value:e,onChange:t}){let n=e?.themes??[],o=n.length===0,s=qt(e),[a,d]=Mn(!1),[h,c]=Mn(null),p=(r,f)=>{t({...s,themes:s.themes.map((E,H)=>H===r?f:E)})},u=Jt(s).accent,v=new Set(s.themes.map(r=>r.brandInk).filter(Boolean)),P=Zt.filter(r=>!v.has(r)).map(r=>jt(u,r)),g=[...s.themes,...P],C=r=>{if(r<s.themes.length)return t({...s,selected:r});let f=[...s.themes,g[r]];t({...s,themes:f,selected:f.length-1})},_=()=>{let r=[...s.themes,{...Qt(s.themes[s.selected])}];t({...s,themes:r,selected:r.length-1}),c(r.length-1)};return Vn(Ho,{children:[o?null:z(Io,{label:Un,icon:Fn(ko),labelId:"sf-theme-reset",action:z(w,{label:Un,what:"change",onClear:()=>d(!0)})}),a&&z(zn,{count:n.length,onCancel:()=>d(!1),onConfirm:()=>{d(!1),Oo(t)}}),z("div",{className:"sf-theme-list",role:"radiogroup","aria-label":"Theme",children:g.map((r,f)=>z(Pn,{index:f,colors:r,selected:f===s.selected,open:h===f&&f<s.themes.length,editable:f<s.themes.length,onPick:()=>C(f),onEdit:()=>c(E=>E===f?null:f),onChangeColors:E=>p(f,E)},f))}),Vn("button",{type:"button",onClick:_,className:"sf-theme-add",children:[z(Fo,{}),"Add new theme"]})]})}import{SettingsField as va}from"efficient-easel/panel";import{SquareIcon as Ca}from"efficient-easel/icons";import{useEffect as me,useId as Do,useRef as tt,useState as nt}from"react";import{InspectorField as Wo}from"efficient-easel/fields";import{SettingsField as to,SettingsGroup as Go,SettingsSegmented as Qe}from"efficient-easel/panel";import{AlignCenterIcon as zo,AlignLeftIcon as no,AlignRightIcon as Mo,CaseIcon as Uo,LetterSpacingIcon as Vo,PaddingYIcon as $o,StylesIcon as Xo,TextColorIcon as Yo,TextLinesIcon as Ko,TextSizeIcon as qo,TypeIcon as Zo,WeightIcon as jo,WidthIcon as Jo}from"efficient-easel/icons";import{useEasel as Qo}from"efficient-easel/easel";import{jsx as Ze}from"react/jsx-runtime";function $n({children:e,weight:t}){return Ze("span",{"aria-hidden":"true",style:{fontSize:13,lineHeight:1,fontWeight:t,letterSpacing:"-0.01em",userSelect:"none"},children:e})}function J({weight:e=400}){return Ze($n,{weight:e,children:"A"})}function he({letterCase:e="none"}){return Ze($n,{weight:600,children:e==="upper"?"AA":e==="lower"?"aa":"Aa"})}import{useState as Lo}from"react";var O="Not set";import{jsx as pe,jsxs as Xn}from"react/jsx-runtime";var je="__custom";function Yn({value:e,label:t,id:n,onChange:o}){let s=e===null,a=!s&&We.includes(e)?e:null,d=!s&&e!==""&&a===null?e:null,[h,c]=Lo(!1),p=d!==null||h;return Xn("div",{className:"sf-part-ink",children:[Xn("select",{id:n,className:"sf-part-select",value:s?"":p?je:a??"",onChange:u=>{let v=u.target.value;if(v===je){c(!0),d===null&&o(null);return}c(!1),o(v===""?null:v)},children:[s&&pe("option",{value:"",children:"Mixed"}),!s&&pe("option",{value:"",children:O}),We.map(u=>pe("option",{value:u,children:Dt[u]},u)),pe("option",{value:je,children:"Custom\u2026"})]}),p&&de({value:d??"",onChange:u=>{c(!1),o(u)},label:t,caption:d===null?O:void 0,ariaLabel:`${t} \u2014 custom`})]})}function Kn(e,t){let n=zt(e);return n?.control==="textList"?t.rowKey===(n.itemKey??"text")?Hn(n,t.index):null:Mt(e)?.[t.rowKey]??null}function qn(e,t,n){let o=e.node.props,{key:s,row:a}=ie(e.propKey),d=a?$t(o,s,a,e.kind,t):Gt(o,s,e.kind,t);return d?(n(e.zone,e.index,{...e.node,props:d}),!0):!1}var Bo={CollectionCard:"product",FooterMenu:"menu",Gallery:"product",GalleryItem:"product",ProductGrid:"product",ProductHero:"product",SpecTable:"product",Events:"blog",FeaturedCover:"blog",LongRead:"blog",SubscribeBlogs:"blog"},Zn={product:"Synced from the product.",blog:"Synced from the blog post.",menu:"Synced from the site menu."},jn="Open",Jn={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 Je(e){let n=e?.source?.slug;return typeof n=="string"&&n.length>0?n:void 0}function Qn(e){return Bo[e]??null}import{Fragment as fe,jsx as i,jsxs as S}from"react/jsx-runtime";var ea=[{id:"none",label:"Normal",icon:i(he,{letterCase:"none"})},{id:"upper",label:"Upper",icon:i(he,{letterCase:"upper"})},{id:"lower",label:"Lower",icon:i(he,{letterCase:"lower"})}],oo=[{id:"400",label:"Regular",icon:i(J,{weight:400})},{id:"500",label:"Medium",icon:i(J,{weight:500})},{id:"600",label:"Semibold",icon:i(J,{weight:600})},{id:"700",label:"Bold",icon:i(J,{weight:700})}],ta=Object.fromEntries(oo.map(e=>[e.id,e.label])),na=[{id:"left",label:"Left",icon:i(no,{})},{id:"center",label:"Center",icon:i(zo,{})},{id:"right",label:"Right",icon:i(Mo,{})}],oa={labelsPx:114.63,widestLabelPx:42.75},aa={labelsPx:174.25,widestLabelPx:55.3},sa={labelsPx:94.5,widestLabelPx:39.94},ao=[{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"}],Q={size:{...ce.size,suffix:" px"},line:{min:Ge,max:ze,step:1,suffix:""},letter:{min:Ge,max:ze,step:1,suffix:""},padding:{...ce.padding,suffix:" px"},width:{...ce.width,suffix:" px"}},et=e=>Object.hasOwn(Q,e),ra=[...new Set(ao.map(e=>e.group))],ia={font:i(Zo,{}),weight:i(jo,{}),size:i(qo,{}),line:i(Ko,{}),letter:i(Vo,{}),padding:i($o,{}),width:i(Jo,{}),case:i(Uo,{}),align:i(no,{}),color:i(Yo,{})};function ge(e){return e.kind==="role"?Be[e.role]:e.kind==="custom"?"Custom":null}var la=e=>e.kind==="role"?`role:${e.role}`:e.kind;function ca(e){let t=e.role;return t&&Le.includes(t)?{kind:"role",role:t}:null}function da(e,t){if(!e)return{kind:"unread"};let{faceRole:n,base:o}=e;if(t[n]===o.fontKey)return{kind:"role",role:n};let s=Object.keys(t).filter(a=>t[a]===o.fontKey);return s.length===1?{kind:"role",role:s[0]}:{kind:"custom"}}function ot(e,t,n,o){return ca(Ue(e,t))??da(n,o)}function Ni(e,t,n,o){return ge(ot(e,t,n,o))}function at(e,t){if(!e.length)return null;let n=t(e[0]);return e.every(o=>t(o)===n)?n:null}function ua(e){return Object.values(e).filter(t=>t!==void 0).length}function ha(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 pa(e){return e===0?"style":e>0?`+${e}`:String(e)}function so({face:e,base:t,onPick:n}){let[o,s]=nt(!1),a=tt(null),d=tt(null),h=Do();me(()=>{if(!o)return;let u=v=>{a.current&&!a.current.contains(v.target)&&s(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[o]);let c=e.kind==="role"?e.role:null,p=u=>{n(u),s(!1),d.current?.focus()};return S("div",{className:"sf-part-style-pick",ref:a,children:[S("button",{ref:d,type:"button",className:"sf-part-style-trigger","aria-expanded":o,"aria-controls":h,"aria-label":`Follows ${ge(e)??"no style"} \u2014 change`,onClick:()=>s(u=>!u),onKeyDown:u=>{u.key==="Escape"&&o&&(u.preventDefault(),s(!1))},children:[i("span",{className:"sf-part-style-name",style:{fontFamily:t?.fontKey?`var(${L(t.fontKey)?.cssVar})`:void 0,fontWeight:t?.weight},children:ge(e)}),i("span",{className:"sf-part-style-sign","aria-hidden":"true"})]}),o&&S("div",{className:"sf-multi-menu sf-part-style-menu",id:h,role:"listbox",onKeyDown:u=>{u.key==="Escape"&&(u.preventDefault(),s(!1),d.current?.focus())},children:[S("button",{type:"button",role:"option","aria-selected":c===null,className:`sf-part-style-option${c===null?" is-on":""}`,onClick:()=>p(null),children:[i("span",{className:"sf-part-style-option-name",children:"No style"}),i("span",{className:"sf-note",children:"Section\u2019s own"})]}),Le.map(u=>i("button",{type:"button",role:"option","aria-selected":c===u,className:`sf-part-style-option${c===u?" is-on":""}`,onClick:()=>p(u),children:i("span",{className:"sf-part-style-option-name",style:{fontFamily:`var(--font-role-${u})`},children:Be[u]})},u))]})]})}function ma({parts:e,onEditStyle:t,onClearAll:n,onFollowStyle:o,kindLabel:s}){let d=at(e,v=>la(v.face))?e[0].face:null,h=d?ge(d):null,c=d&&d.kind!=="unread"?e[0].base:null,p=e.reduce((v,P)=>v+ua(P.style),0),u=c?L(c.fontKey)?.label:void 0;return S("div",{className:`sf-part-style${p?" has-overrides":""}`,children:[i("div",{className:"sf-part-style-caption",children:"Style"}),e.length>1&&S("div",{className:"sf-part-style-count",children:[e.length," selected"]}),e.length===1&&s&&S("div",{className:"sf-part-style-count",children:[s," \xB7 every row"]}),h&&c?S(fe,{children:[o&&d?i(so,{face:d,base:c,onPick:o}):i("div",{className:"sf-part-style-name",style:{fontFamily:u?`var(${L(c.fontKey)?.cssVar})`:void 0,fontWeight:c.weight},children:h}),i("div",{className:"sf-part-style-meta",children:[u,`${Math.round(c.sizePx)} px`,ta[c.weight]].filter(Boolean).join(" \xB7 ")})]}):i("div",{className:"sf-part-style-name",children:"Mixed styles"}),S("div",{className:"sf-part-style-top",children:[h?p?S(fe,{children:[S("span",{className:"sf-part-chip",children:[p," changed"]}),i("button",{type:"button",className:"sf-part-link",onClick:n,children:"Clear"})]}):i("span",{className:"sf-part-style-state",children:"This text follows the site style."}):i("span",{className:"sf-part-style-state",children:"Changes apply to all selected."}),i("span",{className:"sf-part-style-gap"}),h&&t&&i("button",{type:"button",className:"sf-part-link",onClick:t,children:"Edit"})]})]})}function ga({sectionName:e,onBack:t,textEditor:n,styleRow:o,children:s}){return S("div",{className:"sf-part-panel",children:[S("button",{type:"button",className:"sf-part-back",onClick:t,children:[i(be,{}),S("span",{children:["All of ",e]})]}),n,o,s]})}function be(){return i("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:i("path",{d:"M15 5 8 12l7 7"})})}function ro({source:e,slug:t}){let n=Rn(),o=Jn[e],s=!o.needsSlug||!!t;return i("div",{className:"sf-note sf-note--source",children:S("p",{className:"sf-field-hint",children:[Zn[e],s?S(fe,{children:[" ",i("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:jn})]}):null]})})}var eo=4,fa=120;function ba({region:e,sizePx:t,face:n,base:o,onFollowStyle:s,source:a,slug:d,onBack:h}){let c=e.follows;return S("div",{className:"sf-note",children:[i("p",{children:i("strong",{children:e.label})}),S("p",{children:["Its size follows Site styles \u25B8 ",c,t?` \u2014 ${Math.round(t)}px right now`:"","."]}),s?S(fe,{children:[i(to,{label:"Style",icon:i(Xo,{}),children:i(so,{face:n,base:o,onPick:s})}),S("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."]})]}):i("p",{className:"sf-field-hint",children:"Only the size follows a site style. This section sets its own font, weight and letter case."}),a?i(ro,{source:a,slug:d}):null,S("button",{type:"button",className:"sf-part-back",onClick:h,children:[i(be,{}),i("span",{children:"Back to the page"})]})]})}function Sa({onBack:e}){return S("div",{className:"sf-note",children:[i("p",{children:i("strong",{children:"This part is no longer here."})}),i("p",{children:"The section it belonged to has been changed or removed."}),S("button",{type:"button",className:"sf-part-back",onClick:e,children:[i(be,{}),i("span",{children:"Back to the page"})]})]})}function ya({onBack:e,partId:t,why:n}){return S("div",{className:"sf-note",children:[i("p",{children:i("strong",{children:"This part's settings did not open."})}),i("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."}),i("p",{className:"sf-note-detail",children:S("code",{children:[t," \u2014 ",n]})}),S("button",{type:"button",className:"sf-part-back",onClick:e,children:[i(be,{}),i("span",{children:"Back to the page"})]})]})}function wa({nodeId:e,propKey:t,onBack:n,onEditStyle:o}){let{getItemById:s,getSelectorForId:a,config:d}=Qo(l=>l),h=_n(),{partStyle:c}=Ft(),{fonts:p}=A(),[u,v]=nt({}),P=tt(null),g=s(e),C=a(e),_=g?d.components[g.type]:void 0,{key:r,row:f}=ie(t),E=_?.fields?.[r],H=f?Kn(E,f):E,D=Xt(e,t),F=g?.props??{},Ie=Wt(H),ke=An(H),Fe=Yt(H),oe=g?Qn(g.type):null,N=f?Ut(F[r],f):F[r],M=!!f&&!(Array.isArray(F[r])&&f.index<F[r].length);me(()=>{P.current?.querySelector(".sf-copybox textarea, .sf-copybox input")?.focus()},[D]);let[I,Pt]=nt(0);me(()=>Pt(0),[D]);let Ae=!!g&&!M&&(!C||!H);me(()=>{if(!Ae||I>=eo)return;let l=setTimeout(()=>Pt(b=>b+1),fa);return()=>clearTimeout(l)},[Ae,I]);let So=Ae&&I<eo;if(!g||M)return i(Sa,{onBack:n});let ae=Dn(g.type),xt=ae?Bn(ae,t):null;if(ae&&xt){let l=c?.partId===D?c:null,b=ae[xt],R=b.writable===!0&&!!C,x=k=>{C&&h.replaceComponent(C.zone,C.index,{...g,props:Ve(F,t,"role",k)})};return i(ba,{region:b,sizePx:l?.base.sizePx??null,face:ot(F,t,l,p),base:l?.base??null,onFollowStyle:R?x:void 0,source:oe,slug:Je(F),onBack:n})}if(!C||!H)return So?i("div",{className:"sf-note","aria-busy":"true"}):i(ya,{onBack:n,partId:D,why:C?"no field":"no selector"});let Oe=l=>{h.replaceComponent(C.zone,C.index,{...g,props:l})},yo=l=>{if(le(l).hidden!==le(N).hidden||!Ie){let R=f?Vt(F,r,f,l):{...F,[r]:l};R&&Oe(R);return}qn({node:g,propKey:t,kind:Ie,zone:C.zone,index:C.index},le(l).text,h.replaceComponent)},wo=N,se=En(g?.type,t),To=Ue(F,se),He=c?.partId===D?c:null,G=[{partKey:se,face:ot(F,se,He,p),sizeGroup:He?.sizeGroup??null,base:He?.base??Ta,style:To}],vo=at(G,l=>l.sizeGroup),W=(l,b)=>{let R=F;for(let x of G)R=Ve(R,x.partKey,l,b);Oe(R)},Co=l=>W("role",l),Eo=()=>{let l=F;for(let b of G)l=Kt(l,b.partKey);Oe(l)},re=l=>{let b=G[0].base;return l==="size"?Math.round(b.sizePx):l==="padding"?b.paddingPx:l==="width"?b.widthPx:0},_t=(l,b)=>{if(l==="line"||l==="letter")return W(l,b);W(l,b===re(l)?null:b)},Ro=(l,b)=>{let R=G.some(K=>K.style[l]!==void 0),x=at(G,K=>ha(K,l)),k=x===null,T=`sf-part-${e}-${t}-${l}`,U=et(l)?Q[l]:null,Nt=!U||!et(l)?void 0:k?"Mixed":l==="line"||l==="letter"?pa(x):l==="width"&&x===Me?"Full":void 0,xo=U&&et(l)?i(On,{value:k?re(l):x,min:U.min,max:U.max,step:U.step,suffix:U.suffix,ariaLabel:b,onChange:K=>_t(l,K),children:Nt}):void 0;return i(to,{label:b,icon:ia[l],value:xo,hint:l==="size"&&vo===null?"Fixed size \u2014 the site\u2019s Text setting doesn\u2019t resize this.":void 0,className:Nt==="style"?"sf-part-field is-style-value":"sf-part-field",changed:R,htmlFor:l==="font"||l==="color"?T:void 0,action:R?i(w,{label:b,onClear:()=>W(l,null)}):void 0,children:Po(l,b,x,k,T)},l)},Po=(l,b,R,x,k)=>{switch(l){case"font":return S("select",{id:k,className:"sf-part-select",value:x?"":String(R),onChange:T=>W("font",T.target.value||null),children:[x&&i("option",{value:"",children:"Mixed"}),!x&&!L(String(R))&&i("option",{value:"",children:"Site style"}),At.map(T=>i("option",{value:T.key,children:T.label},T.key))]});case"weight":return i(Qe,{options:oo,value:x?"":String(R),onChange:T=>T&&W("weight",Number(T)),ariaLabel:b,fit:aa});case"size":case"line":case"letter":case"padding":case"width":return i(B,{min:Q[l].min,max:Q[l].max,step:Q[l].step,value:x?re(l):R,readout:!1,ariaLabel:b,notch:re(l),onChange:T=>_t(l,T)});case"case":return i(Qe,{options:ea,value:x?"":String(R),onChange:T=>T&&W("case",T),ariaLabel:b,fit:oa});case"align":return i(Qe,{options:na,value:x?"":String(R),onChange:T=>T&&W("align",T),ariaLabel:b,fit:sa});case"color":return i(Yn,{value:x?null:String(R),label:b,id:k,onChange:T=>W("color",T)})}};return S(ga,{sectionName:_?.label??g.type,onBack:n,textEditor:i("div",{ref:P,className:"sf-part-text",children:i(Wo,{field:H,name:t,value:wo,onChange:yo,id:`sf-part-${e}-${t}`})}),styleRow:ke||!Fe?void 0:i(ma,{parts:G,onEditStyle:o,onClearAll:Eo,onFollowStyle:Co,kindLabel:Cn[se]}),children:[oe&&i(ro,{source:oe,slug:Je(F)}),!ke&&Fe&&ra.map(l=>{let b=ao.filter(k=>k.group===l),R=b.filter(k=>G.some(T=>T.style[k.key]!==void 0)).length,x=`sf-part-g-${e}-${t}-${l.replace(/\W+/g,"-")}`;return S(Go,{id:x,title:l,open:u[l]!==!0,onToggle:k=>v(T=>({...T,[l]:!k})),count:R,children:[l==="Size & spacing"&&S("p",{className:"sf-note",children:["Line and letter spacing are relative to the style. ",i("strong",{children:"0"})," matches it, and holds when the size changes."]}),b.map(k=>Ro(k.key,k.label))]},l)})]})}var Ta={fontKey:"",sizePx:16,weight:400,lineRatio:1.4,letterEm:0,align:"left",case:"none",paddingPx:0,widthPx:Me};import{jsx as Se}from"react/jsx-runtime";var Ea="Applies to panels, cards, inputs and buttons. Round things \u2014 color swatches, switches, status dots \u2014 stay round.",st="Corners",Ra="Not set";function rt({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Se(va,{label:st,icon:Se(Ca,{}),value:o?Ra:`${e}px`,changed:!o,action:o?null:Se(w,{label:st,what:"change",onClear:()=>t(null)}),hint:n?Ea:void 0,children:Se(B,{min:$e,max:sn,step:1,value:e??$e,readout:!1,ariaLabel:st,onChange:t})})}import{SettingsField as Pa,SettingsSegmented as xa}from"efficient-easel/panel";import{ShadowIcon as _a}from"efficient-easel/icons";import{jsx as ee}from"react/jsx-runtime";var io={none:"None",soft:"Soft",lifted:"Lifted"},Na="Applies to cards \u2014 products, brands, journal entries and filter cells. Round things like swatches and status dots are never shadowed.",Ia={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)"},ka={labelsPx:90.25,widestLabelPx:34.6};function it({value:e,onChange:t,showHint:n=!0}){let o=e===null,s=e??dn;return ee(Pa,{label:"Card shadow",icon:ee(_a,{}),value:o?O:io[e],changed:!o,action:o?void 0:ee(w,{label:"Card shadow",what:"change",onClear:()=>t(null)}),hint:n?Na:void 0,children:ee(xa,{options:cn.map(a=>({id:a,label:io[a],icon:ee("span",{className:"sf-shadow-chip",style:{boxShadow:Ia[a]}})})),value:s,ariaLabel:"Card shadow",fit:ka,onChange:t})})}import{SettingsField as Fa}from"efficient-easel/panel";import{ShadowIcon as Aa}from"efficient-easel/icons";import{Fragment as Ha,jsx as lt,jsxs as La}from"react/jsx-runtime";var Oa="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 ct({value:e,onChange:t,showHint:n=!0}){let o=e===null;return lt(Fa,{label:"Shadow color",icon:lt(Aa,{}),changed:!o,action:La(Ha,{children:[de({value:e??pn,onChange:t,label:"Shadow color",caption:o?O:void 0}),o?null:lt(w,{label:"Shadow color",what:"change",onClear:()=>t(null)})]}),hint:n?Oa:void 0})}import{SettingsField as Ba}from"efficient-easel/panel";import{AlignSeparateIcon as Da}from"efficient-easel/icons";import{jsx as ye}from"react/jsx-runtime";var Wa="The space between the blocks inside a row, a grid or a box. Not set means each one keeps the spacing it already has.",dt="Block gap",Ga=In.Grid;function ut({value:e,onChange:t,showHint:n=!0}){let o=e===null;return ye(Ba,{label:dt,labelId:"sf-block-gap",icon:ye(Da,{}),value:o?"Not set":`${e}px`,changed:!o,action:o?void 0:ye(w,{label:dt,what:"change",onClear:()=>t(null)}),hint:n?Wa:void 0,children:ye(B,{min:ue.min,max:ue.max,step:ue.step,value:o?Ga:e,readout:!1,ariaLabel:dt,onChange:t})})}import{SettingsField as za,SettingsSegmented as Ma}from"efficient-easel/panel";import{HoverIcon as Ua}from"efficient-easel/icons";import{jsx as we}from"react/jsx-runtime";var lo={none:"None",lift:"Lift",highlight:"Highlight"},Va="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 ht({value:e,onChange:t,showHint:n=!0}){let o=e===null,s=e??hn;return we(za,{label:"Hover effect",icon:we(Ua,{}),value:o?O:lo[e],changed:!o,action:o?void 0:we(w,{label:"Hover effect",what:"change",onClear:()=>t(null)}),hint:n?Va:void 0,children:we(Ma,{options:un.map(a=>({id:a,label:lo[a]})),value:s,ariaLabel:"Hover effect",onChange:t})})}import{SettingsField as $a,SettingsSegmented as Xa}from"efficient-easel/panel";import{ImageIcon as Ya}from"efficient-easel/icons";import{jsx as Te}from"react/jsx-runtime";var pt="Hero image",co=[{followsWidth:!1,label:Ye.full},{followsWidth:!0,label:Ye.page}],Ka="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 mt({value:e,onChange:t,showHint:n=!0}){let o=e===null,s=e??!1;return Te($a,{label:pt,icon:Te(Ya,{}),value:o?O:co.find(a=>a.followsWidth===e).label,changed:!o,action:o?void 0:Te(w,{label:pt,what:"change",onClear:()=>t(null)}),hint:n?Ka:void 0,children:Te(Xa,{options:co.map(a=>({id:a.followsWidth,label:a.label})),value:s,ariaLabel:pt,onChange:t})})}import{SettingsField as qa,SettingsSegmented as Za}from"efficient-easel/panel";import{DropIcon as ja}from"efficient-easel/icons";import{jsx as ve}from"react/jsx-runtime";var gt="Photography",uo=[{grayscale:!1,label:"As shot"},{grayscale:!0,label:"Black and white"}],Ja="Black and white photographs return to color on hover. Wheels and tyres keep their real finish either way.";function ft({value:e,onChange:t,showHint:n=!0}){let o=e===null,s=e??!1;return ve(qa,{label:gt,icon:ve(ja,{}),value:o?O:uo.find(a=>a.grayscale===e).label,changed:!o,action:o?void 0:ve(w,{label:gt,what:"change",onClear:()=>t(null)}),hint:n?Ja:void 0,children:ve(Za,{options:uo.map(a=>({id:a.grayscale,label:a.label})),value:s,ariaLabel:gt,onChange:t})})}import{SettingsField as Qa}from"efficient-easel/panel";import{PaddingXIcon as es}from"efficient-easel/icons";import{jsx as Ce}from"react/jsx-runtime";var bt="Side space",ts="Not set",ns=Z.default,os="The room left at the left and right edge of every page.";function St({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Ce(Qa,{label:bt,labelId:"sf-side-space",icon:Ce(es,{}),value:o?ts:`${e}px`,changed:!o,action:o?void 0:Ce(w,{label:bt,what:"change",onClear:()=>t(null)}),hint:n?os:void 0,children:Ce(B,{min:Z.min,max:Z.max,step:Z.step,value:e??ns,readout:!1,ariaLabel:bt,onChange:t})})}import{SettingsField as as}from"efficient-easel/panel";import{WidthIcon as ss}from"efficient-easel/icons";import{jsx as Ee}from"react/jsx-runtime";var yt="Content width",rs="Not set",is=q.default,ls="The standard width every page on this site renders at.";function wt({value:e,onChange:t,showHint:n=!0}){let o=e===null;return Ee(as,{label:yt,labelId:"sf-site-width",icon:Ee(ss,{}),value:o?rs:`${e}px`,changed:!o,action:o?void 0:Ee(w,{label:yt,what:"change",onClear:()=>t(null)}),hint:n?ls:void 0,children:Ee(B,{min:q.min,max:q.max,step:q.step,value:e??is,readout:!1,ariaLabel:yt,onChange:t})})}import{SettingsField as Pe}from"efficient-easel/panel";import{AccentIcon as cs,CaseIcon as ds,StylesIcon as us,TextLinesIcon as po,TextSizeIcon as te,TextSmallIcon as hs,TypeIcon as ps,WeightIcon as ms}from"efficient-easel/icons";import{Fragment as vt,jsx as m,jsxs as Re}from"react/jsx-runtime";var gs=[{role:"heading",title:"Heading 1",group:"heading",step:"headingLarge",base:17,icon:m(te,{})},{role:"heading2",title:"Heading 2",group:"heading",step:"headingMedium",base:15,icon:m(te,{})},{role:"heading3",title:"Heading 3",group:"heading",step:"headingSmall",base:13,icon:m(te,{})},{role:"accent",title:"Accent",step:"accent",base:15,icon:m(cs,{})},{role:"body",title:"Body",group:"body",step:"body",base:14,icon:m(po,{})},{role:"label",title:"Labels",group:"label",step:"label",base:11,icon:m(hs,{})}];var fs=9,X=500,bs=100,Ss=80,ys=4,ws=600,Ts=700,vs=400,Cs="0.18em";function Es({id:e,value:t,onChange:n}){return m("select",{id:e,className:"sf-select w-full min-w-0",value:t,onChange:o=>n(o.target.value),style:{fontFamily:`var(${L(t)?.cssVar??"--font-body"})`},children:Ht().map(([o,s])=>m("optgroup",{label:Ot[o],children:s.map(a=>m("option",{value:a.key,children:a.label},a.key))},o))})}function Rs({label:e,icon:t,readout:n,min:o,max:s,step:a,value:d,onChange:h,action:c,hint:p}){return m(Pe,{label:e,icon:t,value:n,action:c,hint:p,children:m("input",{type:"range",min:o,max:s,step:a,value:d,onChange:u=>h(Number(u.target.value)),className:"h-1 w-full cursor-pointer","aria-label":e})})}function Tt({label:e,icon:t,value:n,fallback:o,min:s,max:a,step:d,suffix:h="",hint:c,onChange:p}){let u=n===null;return m(Rs,{label:e,icon:t,readout:u?"Auto":`${n}${h}`,min:s,max:a,step:d,value:u?o:n,onChange:p,action:u?null:m(w,{label:e,what:"change",onClear:()=>p(null)}),hint:c})}function ho({label:e,icon:t,options:n,value:o,onChange:s,hint:a,action:d}){return m(Pe,{label:e,icon:t,value:n.find(h=>h.value===o)?.label,hint:a,action:d,children:m("div",{className:"sf-rungs",children:n.map(h=>m("button",{type:"button","aria-pressed":h.value===o,onClick:()=>s(h.value),className:`sf-rung${h.value===o?" is-active":""}`,children:h.label},h.value))})})}var Ps=[{value:"authored",label:"As designed"},{value:"sentence",label:"As typed"}],xs=[{value:"normal",label:"Normal"},{value:"tight",label:"Tight"},{value:"compressed",label:"Compressed"}];function _s({fontKey:e,weight:t,fallbackWeight:n,onWeight:o}){let a=(t??n)>=ws,d=Lt(e),h=L(e)?.label??"This face";return m(Pe,{label:"Style",icon:m(us,{}),value:a?"Bold":"Normal",hint:"Bold is the weight above \u2014 one value, two ways to set it.",children:Re("div",{className:"sf-rungs",children:[m("button",{type:"button","aria-pressed":a,"aria-label":"Bold",title:"Bold",onClick:()=>o(a?vs:Ts),className:`sf-rung sf-rung--glyph${a?" is-active":""}`,style:{fontWeight:700},children:"B"}),m("button",{type:"button","aria-pressed":!1,"aria-label":"Italic",disabled:!0,title:d?"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 Ct({fonts:e,compression:t,headingTypography:n,openRole:o,onOpenRole:s,onFontChange:a,sizes:d,onSizeChange:h,onCompressionChange:c,onHeadingTypographyChange:p,livePx:u,savedRole:v=null}){let P=r=>p({...n,...r}),g=r=>r==="accent"?"weightStrong":r==="heading2"?"weight2":r==="heading3"?"weight3":"weight",C=r=>r==="heading2"?"case2":r==="heading3"?"case3":"case",_=fn(t);return m("div",{className:"sf-style-list",children:gs.map(r=>{let f=o===r.role;return m(Nn,{styleKey:r.role,label:r.title,icon:r.icon,value:L(e[r.role])?.label??e[r.role],sampleStyle:Ns(r,e,n,_),open:f,onToggle:()=>s(f?null:r.role),saved:v===r.role,children:f&&Re(vt,{children:[m(Pe,{label:"Font",icon:m(ps,{}),htmlFor:`sf-font-${r.role}`,action:e[r.role]===De[r.role]?null:m(w,{label:"Font",what:"change",onClear:()=>a(r.role,De[r.role])}),children:m(Es,{id:`sf-font-${r.role}`,value:e[r.role],onChange:E=>a(r.role,E)})}),r.step&&h&&m(Tt,{label:"Size",icon:m(te,{}),value:d[r.step],fallback:r.base*2,min:tn,max:nn,step:on,suffix:"px",hint:d[r.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:E=>h(r.step,E)}),(V(r.role)||r.role==="accent")&&Re(vt,{children:[m(Tt,{label:"Weight",icon:m(ms,{}),value:n[g(r.role)],fallback:V(r.role)?X:n.weight??X,min:bn,max:Sn,step:bs,hint:r.role==="accent"?"Auto = the accent phrase takes the heading's own weight.":void 0,onChange:E=>P({[g(r.role)]:E})}),m(_s,{fontKey:e[r.role],weight:n[g(r.role)],fallbackWeight:V(r.role)?X:n.weight??X,onWeight:E=>P({[g(r.role)]:E})})]}),V(r.role)&&Re(vt,{children:[m(ho,{label:"Line & text gap",icon:m(po,{}),options:xs,value:t,onChange:c,hint:_.lineHeight===void 0?"The built-in spacing.":`Line gap ${_.lineHeight} \xB7 text gap ${_.letterSpacing}em.`,action:t===Xe?null:m(w,{label:"Line & text gap",what:"change",onClear:()=>c(Xe)})}),m(ho,{label:"Capitals",icon:m(ds,{}),options:Ps,value:n[C(r.role)],onChange:E=>P({[C(r.role)]:E}),hint:"The only setting that changes a heading's capitals.",action:n[C(r.role)]==="authored"?null:m(w,{label:"Capitals",what:"change",onClear:()=>P({[C(r.role)]:"authored"})})}),m(Tt,{label:"Largest size",icon:m(te,{}),value:n.maxPx,fallback:Ss,min:yn,max:wn,step:ys,suffix:"px",hint:"Caps the biggest heading on the site. Auto = each section's own.",onChange:E=>P({maxPx:E})})]})]})},r.role)})})}function Ns(e,t,n,o){let s=Math.max(fs,e.base),a={fontFamily:`var(${L(t[e.role])?.cssVar??"--font-body"})`,fontSize:`${s.toFixed(1)}px`,lineHeight:1.15};return V(e.role)?(a.fontWeight=n.weight??X,a.textTransform=n.case==="sentence"?"none":"uppercase",o.letterSpacing!==void 0&&(a.letterSpacing=`${o.letterSpacing}em`)):e.role==="accent"?(a.fontWeight=n.weightStrong??n.weight??X,o.letterSpacing!==void 0&&(a.letterSpacing=`${o.letterSpacing}em`)):e.role==="label"&&(a.textTransform="uppercase",a.letterSpacing=Cs),a}import{SettingsTabs as ks}from"efficient-easel/panel";import{ContrastIcon as Fs,NoteIcon as As,SettingsIcon as Os,TypeIcon as Hs}from"efficient-easel/icons";function mo(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 ne,jsx as y,jsxs as Y}from"react/jsx-runtime";var _e="sf-site-styles-tabpanel",Ls=!1,Bs="Show hints";function Ds({shown:e,onChange:t}){return y("div",{className:"sf-hints",children:Y("button",{type:"button","aria-pressed":e,onClick:()=>t(!e),className:`sf-rung sf-hints-toggle${e?" is-active":""}`,children:[y(As,{size:13}),Bs]})})}var vc="text",xe=[{id:"basics",label:"Basics",icon:y(Os,{}),htmlId:"sf-site-styles-tab-basics",panelId:_e},{id:"theme",label:"Theme",icon:y(Fs,{}),htmlId:"sf-site-styles-tab-theme",panelId:_e},{id:"text",label:"Text",icon:y(Hs,{}),htmlId:"sf-site-styles-tab-text",panelId:_e}];function Ws({themeFromDocument:e,persist:t}){let{appState:n,dispatch:o}=Et(p=>p),{theme:s,setTheme:a}=A(),d=n.data,h=d.root?.props??{},c=p=>{if(e){let u={...h,theme:p};o({type:"replaceRoot",root:{...d.root,props:u},recordHistory:!0})}else a(p);t({selected_preset:p.selected,theme_presets:p.themes})};return y(qe,{value:e?h.theme:s,onChange:c})}function Gs(e,t){let[n,o]=Ne(null),s=go(null),a=JSON.stringify(e),d=go(t);return d.current=t,Is(()=>{if(s.current===null){s.current=a;return}if(s.current===a)return;s.current=a;let h=window.setTimeout(()=>o(d.current),700),c=window.setTimeout(()=>o(null),2200);return()=>{window.clearTimeout(h),window.clearTimeout(c)}},[a]),n}function zs({themeFromDocument:e,persist:t}){let{appState:n,dispatch:o}=Et(N=>N),[s,a]=Ne(null),{fonts:d,setFonts:h,sizes:c,setSizes:p,headingCompression:u,setHeadingCompression:v,headingTypography:P,setHeadingTypography:g}=A(),C=n.data,_=C.root?.props??{},r=e?Bt(_.fonts):d,f=e?en:c,E=e?gn(_.headingCompression):u,H=e?Tn(_.headingTypography):P,D=N=>o({type:"replaceRoot",root:{...C.root,props:{..._,...N}},recordHistory:!0}),F=Gs({curFonts:r,curCompression:E,curTypography:H},s);return y(Ct,{fonts:r,sizes:f,compression:E,headingTypography:H,openRole:s,onOpenRole:a,onFontChange:(N,M)=>{let I={...r,[N]:M};e?D({fonts:I}):h(I),t({heading_font:I.heading,body_font:I.body,accent_font:I.accent,label_font:I.label})},onSizeChange:e?void 0:(N,M)=>{let I={...f,[N]:M};p(I),t({heading_size_large_px:I.headingLarge,heading_size_medium_px:I.headingMedium,heading_size_small_px:I.headingSmall,accent_size_px:I.accent,body_size_px:I.body,label_size_px:I.label})},onCompressionChange:N=>{e?D({headingCompression:N}):v(N),t({heading_compression:N})},onHeadingTypographyChange:N=>{e?D({headingTypography:N}):g(N),t(vn(N))},livePx:Us,savedRole:F})}var Ms={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 Us(e){if(typeof document>"u")return null;let n=($()?.contentDocument??document).querySelector(Ms[e]);if(!n)return null;let o=parseFloat(getComputedStyle(n).fontSize);return Number.isFinite(o)?o:null}function Vs({themeFromDocument:e,persist:t,showHint:n}){let{appState:o,dispatch:s}=Et(g=>g),{cornerRadiusPx:a,setCornerRadiusPx:d}=A(),h=o.data,c=h.root?.props??{},p=c.cornerRadiusPx===void 0?rn[an(c.cornerStyle)]:ln(c.cornerRadiusPx),u=e?p:a,v=g=>s({type:"replaceRoot",root:{...h.root,props:{...c,...g}},recordHistory:!0});return y(rt,{value:u,onChange:g=>{e?v({cornerRadiusPx:g}):d(g),t({corner_radius_px:g})},showHint:n})}function $s(e){return{site_width:e}}function Xs({persist:e,showHint:t}){let{siteWidth:n,setSiteWidth:o}=A();return y(wt,{value:n,onChange:a=>{o(a),e($s(a),a===null)},showHint:t})}function Ys(e){return{block_gap:e}}function Ks(e){return{site_gutter:e}}function qs({persist:e,showHint:t}){let{siteGutter:n,setSiteGutter:o}=A();return y(St,{value:n,onChange:a=>{o(a),e(Ks(a),a===null)},showHint:t})}function Zs({persist:e,showHint:t}){let{blockGap:n,setBlockGap:o}=A();return y(ut,{value:n,onChange:a=>{o(a),e(Ys(a),a===null)},showHint:t})}function js({persist:e,showHint:t}){let{heroBackgroundFollowsWidth:n,setHeroBackgroundFollowsWidth:o}=A();return y(mt,{value:n,onChange:a=>{o(a),e({hero_background_follows_width:a},!0)},showHint:t})}function Js({persist:e,showHint:t=!0}){return Y(ne,{children:[y(Xs,{persist:e,showHint:t}),y(qs,{persist:e,showHint:t}),y(Zs,{persist:e,showHint:t}),y(js,{persist:e,showHint:t})]})}function Qs(e){return{card_shadow:e}}function er(e){return e===null?{shadow_color:null}:{shadow_color:mn(e)}}function tr(e){return{hover_effect:e}}function nr({persist:e,showHint:t=!0}){let{cardShadow:n,setCardShadow:o,shadowColor:s,setShadowColor:a,hoverEffect:d,setHoverEffect:h}=A();return Y(ne,{children:[y(it,{value:n,onChange:c=>{o(c),e(Qs(c),!0)},showHint:t}),y(ct,{value:s,onChange:c=>{a(c),e(er(c),c===null)},showHint:t}),y(ht,{value:d,onChange:c=>{h(c),e(tr(c),!0)},showHint:t})]})}function or(e){return{photography_grayscale:e}}function ar({persist:e,showHint:t}){let{photographyGrayscale:n,setPhotographyGrayscale:o}=A();return y(ft,{value:n,onChange:a=>{o(a),e(or(a),!0)},showHint:t})}function sr({persist:e,showHint:t=!0}){return y(ne,{children:y(ar,{persist:e,showHint:t})})}function Cc(){let{websiteName:e}=A();return e?.trim()||Ln}function rr({themeFromDocument:e=!1,tokenRef:t,siteId:n,onNotify:o,tab:s,onTabChange:a}){let{persist:d}=xn({themeFromDocument:e,tokenRef:t,siteId:n,onResult:_=>{let r=mo(_);r&&o?.(r.msg,r.tone)}}),[h,c]=Ne(xe[0].id),p=s!==void 0,u=p?s:h,v=p?a??(()=>{}):c,P=xe.find(_=>_.id===u)??xe[0],[g,C]=Ne(Ls);return Y(ne,{children:[y(ks,{items:xe,activeId:P.id,onSelect:v,ariaLabel:"Site styles"}),Y("div",{id:_e,role:"tabpanel","aria-labelledby":P.htmlId,children:[u==="basics"&&Y(ne,{children:[y(Vs,{themeFromDocument:e,persist:d,showHint:g}),!e&&y(nr,{persist:d,showHint:g}),!e&&y(Js,{persist:d,showHint:g}),!e&&y(sr,{persist:d,showHint:g}),y(Ds,{shown:g,onChange:C})]}),u==="theme"&&y(Ws,{themeFromDocument:e,persist:d}),u==="text"&&y(zs,{themeFromDocument:e,persist:d})]})]})}function xc(e){return{root:{props:{}},content:[e],zones:{}}}function _c(e){return(e.content??[])[0]??null}function ir(e){return Array.isArray(e)&&e.length>0&&e.every(t=>!!t&&typeof t=="object"&&typeof t.type=="string"&&typeof t.props=="object")}function lr(e){let t={...e.props,id:It(e.type)};for(let[n,o]of Object.entries(t))ir(o)&&(t[n]=o.map(lr));return{type:e.type,props:t}}import{createContext as cr,useContext as dr}from"react";import{Fragment as pr,jsx as Rt,jsxs as mr}from"react/jsx-runtime";var ur={mirrorHostStyles:!0,css:null,fontHrefs:[]},fo=cr(ur);function kc({value:e,children:t}){return Rt(fo.Provider,{value:e,children:t})}function hr(){return dr(fo)}function Fc(){let{css:e,fontHrefs:t}=hr();return mr(pr,{children:[t.map(n=>Rt("link",{rel:"stylesheet",href:n},n)),e?Rt("style",{"data-sf-canvas-css":"",children:e}):null]})}import{createContext as gr,useContext as fr}from"react";import{jsx as br}from"react/jsx-runtime";var bo=gr(void 0);function Lc({metadata:e,children:t}){return br(bo.Provider,{value:e,children:t})}var Bc=()=>fr(bo);export{Kn as a,Je as b,Qn as c,Ni as d,ro as e,wa as f,wr as g,Tr as h,vr as i,Cr as j,Er as k,Ls as l,Ds as m,vc as n,xe as o,Cc as p,rr as q,xc as r,_c as s,lr as t,kc as u,hr as v,Fc as w,Lc as x,Bc as y};
@@ -0,0 +1 @@
1
+ import{b as p,c as S,o as b,q as T}from"./chunk-7QXLVNFD.js";import"./chunk-RRHBLOH4.js";import"./chunk-6CP4D6VJ.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
+ "use client";import{W as R}from"./chunk-2XX3N727.js";import"./chunk-J5WPJJCW.js";import"./chunk-MEIUD5LJ.js";import{F as g,G as m,J as d,S as T,V as h,dd as A}from"./chunk-TUB4O4RZ.js";import"./chunk-HVOO2GNE.js";import"./chunk-EKKAVQJX.js";import"./chunk-7QXLVNFD.js";import"./chunk-RRHBLOH4.js";import"./chunk-FU5UZ4UY.js";import"./chunk-6CP4D6VJ.js";import"./chunk-Y6SLVHK3.js";import{Render as S}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[c,r]of Object.entries(t)){if(!L(r))continue;let n=r.map(u),s=e.type===d&&n.every(p=>p.type===g)?m(n):n;(s.length!==r.length||s.some((p,a)=>p!==r[a]))&&(o===t&&(o={...t}),o[c]=s,i=!0)}return i?{...e,props:o}:e}function k(e){let t=e;if(!t||typeof t!="object")return e;let o=!1,i={...e};if(Array.isArray(t.content)){let c=t.content.map(u);c.some((r,n)=>r!==t.content[n])&&(i.content=c,o=!0)}if(t.zones&&typeof t.zones=="object"){let c=!1,r=Object.fromEntries(Object.entries(t.zones).map(([n,s])=>{if(!Array.isArray(s))return[n,s];let p=s.map(u);return p.some((a,f)=>a!==s[f])&&(c=!0),[n,p]}));c&&(i.zones=r,o=!0)}return o?i:e}var _=["DocMasthead","AlloyWheelsListing"],O="titleLevel";function N(e){let t=e;if(!t?.content?.length)return e;let o=!1,i=!1,c=t.content.map(r=>_.includes(r?.type??"")?o?(i=!0,{...r,props:{...r.props??{},[O]:2}}):(o=!0,r):r);return i?{...t,content:c}:e}var x=["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||!x.includes(s))return n;let p=h[s];if(!p?.legacy)return n;let a=n.props??{},f=a[p.slot];if(Array.isArray(f)&&f.length>0)return n;let y=p.legacy(a);if(!y.length)return n;o=!0;let w=String(a.id??s),b=y.map((P,D)=>({type:p.childType,props:{id:`${p.childType}-${w}-${D}`,...P}}));return{...n,props:{...a,[p.slot]:b}}}),c=new Set(T(i)),r=c.size?i.filter((n,s)=>!c.has(s)):i;return c.size&&(o=!0),o?{...e,content:r}:e}import{jsx as z}from"react/jsx-runtime";function l({config:e,data:t}){return z(S,{config:e,data:N(k(A(E(t))))})}import{jsx as H}from"react/jsx-runtime";function G({data:e}){return H(l,{config:R,data:e})}export{G as default};