efficient-storefront-blocks 0.60.0 → 0.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +79 -1
  2. package/README.md +2 -1
  3. package/dist/chunks/{EditorPreviewCheckout-XY2PLPBD.js → EditorPreviewCheckout-BQFPYYBS.js} +1 -1
  4. package/dist/chunks/{SiteEditorProvider-XF374NLZ.js → SiteEditorProvider-3E6XWZIS.js} +1 -1
  5. package/dist/chunks/chunk-4BQ44OLC.js +250 -0
  6. package/dist/chunks/chunk-MT5KWSYX.js +1 -0
  7. package/dist/chunks/chunk-OJ4OD3N6.js +1 -0
  8. package/dist/chunks/{fitment-data-RORHKBID.js → fitment-data-PWZAAUFK.js} +1 -1
  9. package/dist/editor/components/EditorPreviewChat.js +4 -4
  10. package/dist/editor/components/PreviewHeader.d.ts +1 -1
  11. package/dist/editor/components/PreviewHeader.js +4 -4
  12. package/dist/editor/lib/efficient-backend.d.ts +1 -0
  13. package/dist/editor/lib/efficient-backend.js +1 -1
  14. package/dist/editor/lib/efficient-block-sources.d.ts +2 -0
  15. package/dist/editor/lib/efficient-block-sources.js +1 -0
  16. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.d.ts +2 -0
  17. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.js +1 -0
  18. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.d.ts +6 -0
  19. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.js +1 -0
  20. package/dist/editor/lib/puck/blocks/commerce/ProductHero/fields.js +1 -1
  21. package/dist/editor/lib/puck/blocks/commerce/index.d.ts +1 -1
  22. package/dist/editor/lib/puck/blocks/commerce/index.js +1 -1
  23. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.d.ts +2 -0
  24. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.js +1 -0
  25. package/dist/editor/lib/puck/blocks/service/index.d.ts +1 -1
  26. package/dist/editor/lib/puck/blocks/service/index.js +1 -1
  27. package/dist/editor/lib/puck/config.js +1 -1
  28. package/dist/editor/lib/storefront-editor-words.d.ts +1 -0
  29. package/dist/editor/lib/storefront-editor-words.js +1 -1
  30. package/dist/editor.css +1 -1
  31. package/dist/fitment.d.ts +56 -0
  32. package/dist/fitment.js +1 -0
  33. package/dist/index.d.ts +36 -6
  34. package/dist/index.js +101 -81
  35. package/dist/links.js +1 -1
  36. package/dist/render/app/globals.css +70 -14
  37. package/dist/render/built-with.json +1 -1
  38. package/dist/render/components/CartContext.d.ts +1 -0
  39. package/dist/render/components/CartContext.js +1 -1
  40. package/dist/render/components/CartDrawer.d.ts +0 -8
  41. package/dist/render/components/CartDrawer.js +2 -2
  42. package/dist/render/components/ChatWidget.js +1 -1
  43. package/dist/render/components/EuTyreLabels.d.ts +3 -0
  44. package/dist/render/components/EuTyreLabels.js +1 -1
  45. package/dist/render/components/FitmentTable.js +1 -1
  46. package/dist/render/components/FooterMenu.js +1 -1
  47. package/dist/render/components/FormBlock.js +1 -1
  48. package/dist/render/components/GalleryItem.js +1 -1
  49. package/dist/render/components/Header.js +1 -1
  50. package/dist/render/components/LegalLine.js +1 -1
  51. package/dist/render/components/PopupFrame.d.ts +2 -1
  52. package/dist/render/components/PopupFrame.js +1 -1
  53. package/dist/render/components/PopupHost.d.ts +17 -0
  54. package/dist/render/components/PopupHost.js +1 -0
  55. package/dist/render/components/ProductCard.js +1 -1
  56. package/dist/render/components/ProductGallery.d.ts +15 -0
  57. package/dist/render/components/ProductGallery.js +1 -0
  58. package/dist/render/components/ProductHeroPanel.js +1 -1
  59. package/dist/render/components/RatingStars.d.ts +4 -0
  60. package/dist/render/components/RatingStars.js +1 -0
  61. package/dist/render/components/Reviews.js +1 -1
  62. package/dist/render/components/StorefrontProviders.d.ts +1 -3
  63. package/dist/render/components/StorefrontProviders.js +1 -1
  64. package/dist/render/components/SubscribePopupContext.d.ts +3 -15
  65. package/dist/render/components/SubscribePopupContext.js +1 -1
  66. package/dist/render/components/TyrePlpCard.js +1 -1
  67. package/dist/render/components/WheelCardFrame.d.ts +3 -27
  68. package/dist/render/components/WheelCardFrame.js +1 -1
  69. package/dist/render/components/card-pieces/CardBuyButton.d.ts +7 -0
  70. package/dist/render/components/card-pieces/CardBuyButton.js +1 -0
  71. package/dist/render/components/card-pieces/CardFinishSwatches.d.ts +5 -0
  72. package/dist/render/components/card-pieces/CardFinishSwatches.js +1 -0
  73. package/dist/render/components/card-pieces/CardPrice.d.ts +7 -0
  74. package/dist/render/components/card-pieces/CardPrice.js +1 -0
  75. package/dist/render/components/card-pieces/CardProductBadge.d.ts +7 -0
  76. package/dist/render/components/card-pieces/CardProductBadge.js +1 -0
  77. package/dist/render/components/card-pieces/CardSizes.d.ts +9 -0
  78. package/dist/render/components/card-pieces/CardSizes.js +1 -0
  79. package/dist/render/components/card-pieces/ProductCardState.d.ts +53 -0
  80. package/dist/render/components/card-pieces/ProductCardState.js +1 -0
  81. package/dist/render/components/card-pieces/card-row.d.ts +20 -0
  82. package/dist/render/components/card-pieces/card-row.js +1 -0
  83. package/dist/render/components/cart/drawer-parts.d.ts +28 -0
  84. package/dist/render/components/cart/drawer-parts.js +1 -0
  85. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.d.ts +3 -0
  86. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.js +1 -1
  87. package/dist/render/components/pdp-dynamic/DynamicProductGallery.d.ts +9 -0
  88. package/dist/render/components/pdp-dynamic/DynamicProductGallery.js +1 -0
  89. package/dist/render/components/useHeaderBar.js +1 -1
  90. package/dist/render/components/useIsLightTheme.d.ts +1 -0
  91. package/dist/render/components/useIsLightTheme.js +1 -0
  92. package/dist/render/components/wheels-plp/AlloyWheelsListing.d.ts +2 -1
  93. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  94. package/dist/render/components/wheels-plp/PlpCard.d.ts +3 -2
  95. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  96. package/dist/render/components/wheels-plp/usePlpCardSelection.d.ts +1 -1
  97. package/dist/render/components/wheels-plp/usePlpCardSelection.js +1 -1
  98. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.d.ts +2 -1
  99. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.js +1 -1
  100. package/dist/render/lib/api/index.d.ts +4 -2
  101. package/dist/render/lib/api/index.js +1 -1
  102. package/dist/render/lib/api/types.d.ts +48 -1
  103. package/dist/render/lib/chrome-load.d.ts +1 -1
  104. package/dist/render/lib/chrome-load.js +1 -1
  105. package/dist/render/lib/content/field-usage.d.ts +0 -1
  106. package/dist/render/lib/content/field-usage.js +1 -1
  107. package/dist/render/lib/content/product-hero.d.ts +1 -0
  108. package/dist/render/lib/content/product-hero.js +1 -1
  109. package/dist/render/lib/header-fit.d.ts +2 -0
  110. package/dist/render/lib/header-fit.js +1 -0
  111. package/dist/render/lib/popup/popup-stores.d.ts +2 -0
  112. package/dist/render/lib/popup/popup-stores.js +1 -0
  113. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.d.ts +2 -0
  114. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.js +1 -0
  115. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.d.ts +2 -0
  116. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.js +1 -0
  117. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.d.ts +2 -0
  118. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.js +1 -0
  119. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.d.ts +2 -0
  120. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.js +1 -0
  121. package/dist/render/lib/puck/blocks/commerce/metas.d.ts +2 -0
  122. package/dist/render/lib/puck/blocks/commerce/metas.js +1 -1
  123. package/dist/render/lib/puck/blocks/commerce/renders.d.ts +2 -0
  124. package/dist/render/lib/puck/blocks/commerce/renders.js +1 -1
  125. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.d.ts +3 -0
  126. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.js +1 -0
  127. package/dist/render/lib/puck/blocks/service/RatingBlock/render.d.ts +2 -0
  128. package/dist/render/lib/puck/blocks/service/RatingBlock/render.js +1 -0
  129. package/dist/render/lib/puck/blocks/service/metas.d.ts +1 -0
  130. package/dist/render/lib/puck/blocks/service/metas.js +1 -1
  131. package/dist/render/lib/puck/blocks/service/renders.d.ts +1 -0
  132. package/dist/render/lib/puck/blocks/service/renders.js +1 -1
  133. package/dist/render/lib/puck/lazy-draws.js +1 -1
  134. package/dist/render/lib/storefront-page-groups.js +1 -1
  135. package/dist/render/lib/wheels/fitment-columns.d.ts +6 -1
  136. package/dist/render/lib/wheels/fitment-columns.js +1 -1
  137. package/dist/render/lib/wheels/plp-fitment-match.d.ts +4 -0
  138. package/dist/render/lib/wheels/plp-fitment-match.js +1 -1
  139. package/dist/render/lib/wheels/plp-hydrate.d.ts +2 -0
  140. package/dist/render/lib/wheels/plp-hydrate.js +1 -1
  141. package/dist/render/lib/wheels/spec-sheet.js +1 -1
  142. package/dist/words.d.ts +2 -2
  143. package/dist/words.js +3 -3
  144. package/package.json +11 -4
  145. package/dist/chunks/chunk-EZQTUHPN.js +0 -1
  146. package/dist/chunks/chunk-FCCEAXMM.js +0 -1
  147. package/dist/chunks/chunk-YNI65Q6Z.js +0 -250
  148. package/dist/render/components/wheels-plp/useWheelCardBottom.d.ts +0 -20
  149. package/dist/render/components/wheels-plp/useWheelCardBottom.js +0 -1
  150. package/dist/render/lib/popup/popup-rules.d.ts +0 -25
  151. package/dist/render/lib/popup/popup-rules.js +0 -1
  152. /package/dist/chunks/{chunk-YNI65Q6Z.js.LEGAL.txt → chunk-4BQ44OLC.js.LEGAL.txt} +0 -0
  153. /package/dist/chunks/{chunk-VT346MLP.js → chunk-FZFBLN7K.js} +0 -0
  154. /package/dist/chunks/{chunk-I6VNNXUI.js → chunk-TRUOK5AD.js} +0 -0
@@ -1 +1 @@
1
- "use client";import{jsx as r,Fragment as I,jsxs as s}from"react/jsx-runtime";import te from"next/link";import{usePathname as Ke}from"next/navigation";import{useCallback as Ve,useEffect as O,useState as p}from"react";import{useCart as qe}from"./CartContext.js";import{useSearch as Ye}from"./SearchContext.js";import Je,{useCountrySelectShows as Xe}from"./CountrySelect.js";import{resolveCountryShowAs as Qe}from"../lib/content/country-show-as.js";import ne from"./HeaderNavItem.js";import Ze from"efficient-web-builder/render/components/Logo";import et from"./MenuPlaceholderLabel.js";import{withRMark as oe}from"efficient-web-builder/render/components/RMark";import{AccountButton as tt,CartButton as nt,SearchButton as ot}from"./HeaderTools.js";import{useHeaderBar as rt}from"./useHeaderBar.js";import{useModalDismiss as st}from"./useModalDismiss.js";import lt from"./ThemeToggle.js";import{products as at}from"../lib/api/index.js";import{shouldFetchPublicHeaderSettings as it}from"../lib/header-settings-fetch.js";import{HEADER_MENU_PLACEHOLDER_COUNT as ct}from"../lib/content/menu-placeholder.js";import{DEFAULT_SWITCH_SHOWN as dt}from"efficient-web-builder/format/lib/theme";import{chromeWidthStyle as mt,resolveChromeWidth as ut}from"efficient-web-builder/format/lib/content/page-width";import{headerThemeWrap as ht}from"../lib/content/header-theme.js";import{headerSolidBackground as ft,isProductPage as pt}from"../lib/content/header-bar.js";import{surfaceIsLight as gt}from"../lib/logo/surface-is-light.js";import{HEADER_HEIGHT_PX as xt,HEADER_SET_HEIGHT_CSS as bt}from"efficient-web-builder/render/lib/puck/header-clearance";import{HEADER_INK_ATTR as yt,HEADER_INK_OVERRIDE_ATTR as vt,resolveHeaderInkMode as wt}from"efficient-web-builder/render/lib/puck/header-ink";const re={stacked:{grid:"hidden min-[1501px]:grid",flex:"hidden min-[1501px]:flex"},inline:{grid:"hidden min-[801px]:grid",flex:"hidden min-[801px]:flex"}},St=Array.from({length:ct},()=>({href:"#",label:r(et,{})}));function kt({previewSettings:g,initialSettings:$,editorPreview:T,showThemeToggle:se,wordmark:le,hideLogo:ae,hideMenu:ie,siteName:L,commerceEnabled:v=!0}={}){const M=Ke(),[ce,de]=p(!1);O(()=>{const e=b.current?.ownerDocument??document,t=()=>de(e.querySelector(`[${yt}="light"]`)!=null);t();const f=requestAnimationFrame(t);return()=>cancelAnimationFrame(f)},[M]);const z=pt(M),[c,w]=p(!1),{open:me,totals:ue}=qe(),{open:he}=Ye(),[C,fe]=p(!1),[pe,ge]=p(null),[xe,be]=p(null),[n,ye]=p($??null),o=g??(n?{logoUrl:n.logoUrl,reverseLogo:n.reverseLogo,logoReversed:n.logoReversed,logoInkIsDark:n.logoInkIsDark,logoPosition:n.logoPosition,logoSize:n.logoSize,logoSizePx:n.logoSizePx,menuItems:(n.menuItems??[]).map(e=>({label:e.label,url:e.url,dropdown_menu:null,dropdown_items:e.dropdownItems??[]})),menuSplit:n.menuSplit??3,menuPosition:n.menuPosition,menuRow:n.menuRow,menuGapPx:n.menuGapPx??null,searchEnabled:n.searchEnabled,searchPosition:n.searchPosition,searchRow:n.searchRow,countrySelectorEnabled:n.countrySelectorEnabled,countrySelectorShowAs:n.countrySelectorShowAs,countryUrls:n.countryUrls,accountEnabled:n.accountEnabled,cartEnabled:n.cartEnabled,utilStyle:n.utilStyle,navTextCase:n.navTextCase,lightReverseText:n.lightReverseText,topTextColor:n.topTextColor,transparentTop:n.transparentTop,surface:n.surface,theme:n.theme,width:n.width,heightPx:n.heightPx,sticky:n.sticky}:null),ve=ae?null:o?.logoUrl??null,we=o?.reverseLogo??!1,Se=o?.logoReversed??null,ke=o?.logoInkIsDark??null,i=o?.logoPosition??"center",Ne=o?.logoSize??"medium",Ee=o?.logoSizePx??null,B=Math.min(Math.max(o?.menuSplit??3,1),4),Pe=(o?.menuPosition??"left")==="center",Ie=(o?.menuPosition??"left")==="beside",U=(o?.menuRow??"top")==="inline",F=o?.menuGapPx??null,$e=F!=null?{gap:`${F}px`}:void 0,S=U?re.inline:re.stacked,Te=o?.searchEnabled??!1,G=o?.searchPosition??"right",Le=o?.countrySelectorEnabled??!0,Ce=Qe(o?.countrySelectorShowAs),_=o?.accountEnabled??!0,_e=o?.cartEnabled??!0,A=(o?.utilStyle??"icon")==="text",l=`mono-eyebrow${(o?.navTextCase??"uppercase")==="capitalised"?" mono-eyebrow-plain":""}`,W=o?.countryUrls??{},Ae=ut(o?.width),De=mt(Ae)??void 0,Re=o?.heightPx??xt.default,K=o?.sticky??"always",k=wt(o?.topTextColor),m=ht(o?.theme),N=Object.keys(W),V=Xe(N.length?N:void 0),x=Le?r(Je,{countries:N.length?N:void 0,urls:g?void 0:W,showAs:Ce}):null,{headerRef:b,scrolled:q,navHidden:He}=rt({stickyMode:K,heightPx:Re}),je=m?JSON.stringify(m.style):null;O(()=>{const e=b.current?.ownerDocument??document,t=e.defaultView??window,f=ee=>ee?gt(t.getComputedStyle(ee).getPropertyValue("--bg")):null,Z=()=>{fe(e.documentElement.getAttribute("data-theme")==="light"),ge(f(e.body)),be(f(b.current))};Z();const j=new MutationObserver(Z);return j.observe(e.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),e.body&&j.observe(e.body,{attributes:!0,attributeFilter:["style"]}),()=>j.disconnect()},[b,je]);const y=se??dt?r(lt,{}):null;O(()=>{if(!it({editorPreview:!!T,hasPreviewSettings:!!g,hasInitialSettings:!!$}))return;let e=!1;return at.getHeaderSettings().then(t=>!e&&ye(t)).catch(t=>{console.warn("[header] settings fetch failed; using built-in defaults",t)}),()=>{e=!0}},[T,g,$]);const E=q||z,Y=ft(C,z),J=k==="auto"?ce:k==="light",Oe=E||!J,Me=E?xe??C:(pe??C)&&!J,ze=k==="auto"?null:{[vt]:k},Be=Ve(()=>w(!1),[]);st({active:c,onDismiss:Be});const d=(e,t,f="start")=>r(ne,{item:e,dropdownAlign:f},t),Ue=!ie&&(o?.menuItems?.length??0)>0,X=!!T||!!g,a=Ue?o.menuItems.map(e=>({href:e.url||"",label:oe(e.label),plainLabel:e.label,dropdownItems:(e.dropdown_items??[]).map(t=>({href:t.url||"",label:oe(t.label),plainLabel:t.label}))})):X?St.map(e=>({...e,plainLabel:"Menu item",dropdownItems:[]})):[],Fe=a.length>0||v&&_||!!x&&V||!!y,Ge=i==="center"?a.slice(0,B):i==="right"?a:[],We=i==="center"?a.slice(B):i==="left"?a:[],P=Te?r(ot,{onClick:X?void 0:he,asText:A}):null,D=v&&_?r(tt,{asText:A}):null,R=e=>v&&_e?r(nt,{onClick:me,count:ue.sets,asText:A,className:e}):null,u=s(I,{children:[G==="left"?P:null,x,y,D,R(),G==="right"?P:null]}),H=(e,t=!1)=>r(te,{href:"/","aria-label":L?`${L} home`:"Home",className:e,children:r(Ze,{variant:"header",scrolled:Oe,src:ve,reverse:we,onLightSurface:Me,reversedSrc:Se,inkIsDark:ke,size:Ne,sizePx:Ee,wordmark:le,siteName:L,fitToContainer:t})}),h=H("inline-flex shrink-0 items-center justify-center"),Q="flex min-w-0 flex-1 items-center overflow-x-clip [container-type:inline-size]";return s(I,{children:[r("header",{ref:b,"data-scrolled":q||void 0,...ze,className:["sf-site-header",...m?[m.className]:[],K==="none"?"absolute":"fixed","inset-x-0 top-0 z-50","flex items-center","px-[var(--sf-site-gutter,40px)] max-[800px]:px-[min(20px,var(--sf-site-gutter,40px))]",E?"border-b border-line backdrop-blur-md":"border-b border-transparent","transition-[background,border-color,transform] duration-300 ease-out"].join(" "),style:{...m?m.style:null,minHeight:bt,...He?{transform:"translateY(-100%)"}:null,...E?{background:Y,color:"var(--fg)","--sf-header-ground":Y}:{color:"var(--sf-header-overlay-fg)","--sf-header-ground":"var(--sf-header-overlay-ground)"}},children:s("div",{className:"w-full",style:De,children:[Pe?s("div",{className:`${S.grid} grid-cols-[1fr_auto_1fr] items-center gap-8`,children:[i==="right"?r("nav",{className:`${l} flex items-center gap-8`,children:u}):r("div",{className:"flex items-center",children:h}),r("nav",{className:`${l} flex items-center justify-center gap-8`,children:a.map((e,t)=>d(e,`${e.href}-${t}`,"center"))}),i==="right"?r("div",{className:"flex items-center justify-end",children:h}):r("nav",{className:`${l} flex items-center justify-end gap-8`,children:u})]}):i==="center"?s("div",{className:`${S.grid} grid-cols-[1fr_auto_1fr] items-center gap-8`,children:[r("nav",{className:`${l} flex items-center gap-8`,children:Ge.map((e,t)=>d(e,`${e.href}-${t}`))}),h,s("nav",{className:`${l} flex items-center justify-end gap-8`,children:[We.map((e,t)=>d(e,`${e.href}-${t}`,"end")),u]})]}):Ie?s("div",{className:`${S.flex} items-center justify-between gap-8`,children:[s("div",{className:"flex items-center gap-8",style:$e,children:[h,r("nav",{className:`${l} flex items-center gap-8`,children:a.map((e,t)=>d(e,`${e.href}-${t}`))})]}),r("nav",{className:`${l} flex items-center justify-end gap-8`,children:u})]}):r("div",{className:`${S.flex} items-center justify-between gap-8`,children:i==="right"?s(I,{children:[s("nav",{className:`${l} flex items-center gap-8`,children:[a.map((e,t)=>d(e,`${e.href}-${t}`)),u]}),h]}):s(I,{children:[h,s("nav",{className:`${l} flex items-center gap-8`,children:[a.map((e,t)=>d(e,`${e.href}-${t}`)),u]})]})}),!U&&s("div",{className:"hidden min-[801px]:max-[1500px]:flex flex-col gap-3",children:[s("div",{className:"flex items-center justify-between",children:[H(Q,!0),s("div",{className:`${l} flex shrink-0 items-center gap-5`,children:[P,x,y,D,R()]})]}),r("nav",{className:`${l} flex items-center gap-6 border-t border-line/60 pt-3`,children:a.map((e,t)=>d(e,`${e.href}-${t}`))})]}),s("div",{className:"hidden max-[800px]:flex items-center justify-between",children:[H(Q,!0),s("div",{className:"flex shrink-0 items-center gap-4",children:[P,D,R(l),Fe&&s("button",{type:"button","aria-label":c?"Close menu":"Open menu","aria-expanded":c,onClick:()=>w(e=>!e),className:"flex h-11 w-11 flex-col items-center justify-center gap-2",children:[r("span",{className:`block h-px w-5 bg-current transition-transform ${c?"translate-y-[3px] rotate-45":""}`}),r("span",{className:`block h-px w-5 bg-current transition-transform ${c?"opacity-0":""}`}),r("span",{className:`block h-px w-5 bg-current transition-transform ${c?"-translate-y-[3px] -rotate-45":""}`})]})]})]})]})}),c&&s("div",{className:"fixed inset-x-0 top-0 bottom-0 z-40 hidden overflow-y-auto max-[800px]:flex max-[800px]:flex-col max-[800px]:gap-8 max-[800px]:bg-bg max-[800px]:px-6 max-[800px]:pt-24 max-[800px]:pb-10",children:[a.map((e,t)=>r(ne,{item:e,mobile:!0,onNavigate:()=>w(!1)},`${e.href}-${t}`)),s("div",{className:"mt-auto flex flex-col gap-4 border-t border-line pt-6",children:[v&&_&&s("div",{className:"flex items-center justify-between",children:[r("span",{className:"mono-eyebrow text-fg-dim",children:"Account"}),r(te,{href:"/account",onClick:()=>w(!1),className:"mono-eyebrow underline",children:"Your account"})]}),x&&V&&s("div",{className:"flex items-center justify-between",children:[r("span",{className:"mono-eyebrow text-fg-dim",children:"Region"}),x]}),y&&s("div",{className:"flex items-center justify-between",children:[r("span",{className:"mono-eyebrow text-fg-dim",children:"Theme"}),y]})]})]})]})}export{kt as default};
1
+ "use client";import{jsx as o,Fragment as I,jsxs as s}from"react/jsx-runtime";import te from"next/link";import{usePathname as Ke}from"next/navigation";import{useCallback as Ve,useEffect as O,useState as p}from"react";import{useCart as qe}from"./CartContext.js";import{useSearch as Ye}from"./SearchContext.js";import Je,{useCountrySelectShows as Xe}from"./CountrySelect.js";import{resolveCountryShowAs as Qe}from"../lib/content/country-show-as.js";import ne from"./HeaderNavItem.js";import Ze from"efficient-web-builder/render/components/Logo";import et from"./MenuPlaceholderLabel.js";import{withRMark as re}from"efficient-web-builder/render/components/RMark";import{AccountButton as tt,CartButton as nt,SearchButton as rt}from"./HeaderTools.js";import{useHeaderBar as ot}from"./useHeaderBar.js";import{useModalDismiss as st}from"./useModalDismiss.js";import at from"./ThemeToggle.js";import{products as lt}from"../lib/api/index.js";import{shouldFetchPublicHeaderSettings as it}from"../lib/header-settings-fetch.js";import{HEADER_MENU_PLACEHOLDER_COUNT as ct}from"../lib/content/menu-placeholder.js";import{DEFAULT_SWITCH_SHOWN as dt}from"efficient-web-builder/format/lib/theme";import{chromeWidthStyle as mt,resolveChromeWidth as ut}from"efficient-web-builder/format/lib/content/page-width";import{headerThemeWrap as ht}from"../lib/content/header-theme.js";import{headerSolidBackground as ft,isProductPage as pt}from"../lib/content/header-bar.js";import{surfaceIsLight as gt}from"../lib/logo/surface-is-light.js";import{HEADER_HEIGHT_PX as bt,HEADER_SET_HEIGHT_CSS as xt}from"efficient-web-builder/render/lib/puck/header-clearance";import{HEADER_INK_ATTR as vt,HEADER_INK_OVERRIDE_ATTR as yt,resolveHeaderInkMode as wt}from"efficient-web-builder/render/lib/puck/header-ink";const oe={stacked:{grid:"hidden min-[1501px]:grid",flex:"hidden min-[1501px]:flex"},inline:{grid:"hidden view-tablet:grid",flex:"hidden view-tablet:flex"}},St=Array.from({length:ct},()=>({href:"#",label:o(et,{})}));function kt({previewSettings:g,initialSettings:$,editorPreview:T,showThemeToggle:se,wordmark:ae,hideLogo:le,hideMenu:ie,siteName:L,commerceEnabled:y=!0}={}){const M=Ke(),[ce,de]=p(!1);O(()=>{const e=x.current?.ownerDocument??document,t=()=>de(e.querySelector(`[${vt}="light"]`)!=null);t();const f=requestAnimationFrame(t);return()=>cancelAnimationFrame(f)},[M]);const z=pt(M),[c,w]=p(!1),{open:me,totals:ue}=qe(),{open:he}=Ye(),[C,fe]=p(!1),[pe,ge]=p(null),[be,xe]=p(null),[n,ve]=p($??null),r=g??(n?{logoUrl:n.logoUrl,reverseLogo:n.reverseLogo,logoReversed:n.logoReversed,logoInkIsDark:n.logoInkIsDark,logoPosition:n.logoPosition,logoSize:n.logoSize,logoSizePx:n.logoSizePx,menuItems:(n.menuItems??[]).map(e=>({label:e.label,url:e.url,dropdown_menu:null,dropdown_items:e.dropdownItems??[]})),menuSplit:n.menuSplit??3,menuPosition:n.menuPosition,menuRow:n.menuRow,menuGapPx:n.menuGapPx??null,searchEnabled:n.searchEnabled,searchPosition:n.searchPosition,searchRow:n.searchRow,countrySelectorEnabled:n.countrySelectorEnabled,countrySelectorShowAs:n.countrySelectorShowAs,countryUrls:n.countryUrls,accountEnabled:n.accountEnabled,cartEnabled:n.cartEnabled,utilStyle:n.utilStyle,navTextCase:n.navTextCase,lightReverseText:n.lightReverseText,topTextColor:n.topTextColor,transparentTop:n.transparentTop,surface:n.surface,theme:n.theme,width:n.width,heightPx:n.heightPx,sticky:n.sticky}:null),ye=le?null:r?.logoUrl??null,we=r?.reverseLogo??!1,Se=r?.logoReversed??null,ke=r?.logoInkIsDark??null,i=r?.logoPosition??"center",Ne=r?.logoSize??"medium",Ee=r?.logoSizePx??null,B=Math.min(Math.max(r?.menuSplit??3,1),4),Pe=(r?.menuPosition??"left")==="center",Ie=(r?.menuPosition??"left")==="beside",U=(r?.menuRow??"top")==="inline",F=r?.menuGapPx??null,$e=F!=null?{gap:`${F}px`}:void 0,S=U?oe.inline:oe.stacked,Te=r?.searchEnabled??!1,G=r?.searchPosition??"right",Le=r?.countrySelectorEnabled??!0,Ce=Qe(r?.countrySelectorShowAs),_=r?.accountEnabled??!0,_e=r?.cartEnabled??!0,A=(r?.utilStyle??"icon")==="text",a=`mono-eyebrow${(r?.navTextCase??"uppercase")==="capitalised"?" mono-eyebrow-plain":""}`,W=r?.countryUrls??{},Ae=ut(r?.width),De=mt(Ae)??void 0,Re=r?.heightPx??bt.default,K=r?.sticky??"always",k=wt(r?.topTextColor),m=ht(r?.theme),N=Object.keys(W),V=Xe(N.length?N:void 0),b=Le?o(Je,{countries:N.length?N:void 0,urls:g?void 0:W,showAs:Ce}):null,{headerRef:x,scrolled:q,navHidden:He}=ot({stickyMode:K,heightPx:Re}),je=m?JSON.stringify(m.style):null;O(()=>{const e=x.current?.ownerDocument??document,t=e.defaultView??window,f=ee=>ee?gt(t.getComputedStyle(ee).getPropertyValue("--bg")):null,Z=()=>{fe(e.documentElement.getAttribute("data-theme")==="light"),ge(f(e.body)),xe(f(x.current))};Z();const j=new MutationObserver(Z);return j.observe(e.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),e.body&&j.observe(e.body,{attributes:!0,attributeFilter:["style"]}),()=>j.disconnect()},[x,je]);const v=se??dt?o(at,{}):null;O(()=>{if(!it({editorPreview:!!T,hasPreviewSettings:!!g,hasInitialSettings:!!$}))return;let e=!1;return lt.getHeaderSettings().then(t=>!e&&ve(t)).catch(t=>{console.warn("[header] settings fetch failed; using built-in defaults",t)}),()=>{e=!0}},[T,g,$]);const E=q||z,Y=ft(C,z),J=k==="auto"?ce:k==="light",Oe=E||!J,Me=E?be??C:(pe??C)&&!J,ze=k==="auto"?null:{[yt]:k},Be=Ve(()=>w(!1),[]);st({active:c,onDismiss:Be});const d=(e,t,f="start")=>o(ne,{item:e,dropdownAlign:f},t),Ue=!ie&&(r?.menuItems?.length??0)>0,X=!!T||!!g,l=Ue?r.menuItems.map(e=>({href:e.url||"",label:re(e.label),plainLabel:e.label,dropdownItems:(e.dropdown_items??[]).map(t=>({href:t.url||"",label:re(t.label),plainLabel:t.label}))})):X?St.map(e=>({...e,plainLabel:"Menu item",dropdownItems:[]})):[],Fe=l.length>0||y&&_||!!b&&V||!!v,Ge=i==="center"?l.slice(0,B):i==="right"?l:[],We=i==="center"?l.slice(B):i==="left"?l:[],P=Te?o(rt,{onClick:X?void 0:he,asText:A}):null,D=y&&_?o(tt,{asText:A}):null,R=e=>y&&_e?o(nt,{onClick:me,count:ue.sets,asText:A,className:e}):null,u=s(I,{children:[G==="left"?P:null,b,v,D,R(),G==="right"?P:null]}),H=(e,t=!1)=>o(te,{href:"/","aria-label":L?`${L} home`:"Home",className:e,children:o(Ze,{variant:"header",scrolled:Oe,src:ye,reverse:we,onLightSurface:Me,reversedSrc:Se,inkIsDark:ke,size:Ne,sizePx:Ee,wordmark:ae,siteName:L,fitToContainer:t})}),h=H("inline-flex shrink-0 items-center justify-center"),Q="flex min-w-0 flex-1 items-center overflow-x-clip [container-type:inline-size]";return s(I,{children:[o("header",{ref:x,"data-scrolled":q||void 0,...ze,className:["sf-site-header",...m?[m.className]:[],K==="none"?"absolute":"fixed","inset-x-0 top-0 z-50","flex items-center","px-[var(--sf-site-gutter,40px)] max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))]",E?"border-b border-line backdrop-blur-md":"border-b border-transparent","transition-[background,border-color,transform] duration-300 ease-out"].join(" "),style:{...m?m.style:null,minHeight:xt,...He?{transform:"translateY(-100%)"}:null,...E?{background:Y,color:"var(--fg)","--sf-header-ground":Y}:{color:"var(--sf-header-overlay-fg)","--sf-header-ground":"var(--sf-header-overlay-ground)"}},children:s("div",{className:"w-full",style:De,children:[Pe?s("div",{"data-header-band":"",className:`${S.grid} grid-cols-[1fr_auto_1fr] items-center gap-8`,children:[i==="right"?o("nav",{className:`${a} flex items-center gap-8`,children:u}):o("div",{className:"flex items-center",children:h}),o("nav",{className:`${a} flex items-center justify-center gap-8`,children:l.map((e,t)=>d(e,`${e.href}-${t}`,"center"))}),i==="right"?o("div",{className:"flex items-center justify-end",children:h}):o("nav",{className:`${a} flex items-center justify-end gap-8`,children:u})]}):i==="center"?s("div",{"data-header-band":"",className:`${S.grid} grid-cols-[1fr_auto_1fr] items-center gap-8`,children:[o("nav",{className:`${a} flex items-center gap-8`,children:Ge.map((e,t)=>d(e,`${e.href}-${t}`))}),h,s("nav",{className:`${a} flex items-center justify-end gap-8`,children:[We.map((e,t)=>d(e,`${e.href}-${t}`,"end")),u]})]}):Ie?s("div",{"data-header-band":"",className:`${S.flex} items-center justify-between gap-8`,children:[s("div",{className:"flex items-center gap-8",style:$e,children:[h,o("nav",{className:`${a} flex items-center gap-8`,children:l.map((e,t)=>d(e,`${e.href}-${t}`))})]}),o("nav",{className:`${a} flex items-center justify-end gap-8`,children:u})]}):o("div",{"data-header-band":"",className:`${S.flex} items-center justify-between gap-8`,children:i==="right"?s(I,{children:[s("nav",{className:`${a} flex items-center gap-8`,children:[l.map((e,t)=>d(e,`${e.href}-${t}`)),u]}),h]}):s(I,{children:[h,s("nav",{className:`${a} flex items-center gap-8`,children:[l.map((e,t)=>d(e,`${e.href}-${t}`)),u]})]})}),!U&&s("div",{"data-header-band":"",className:"hidden view-tablet:max-[1501px]:flex flex-col gap-3",children:[s("div",{className:"flex items-center justify-between",children:[H(Q,!0),s("div",{className:`${a} flex shrink-0 items-center gap-5`,children:[P,b,v,D,R()]})]}),o("nav",{className:`${a} flex items-center gap-6 border-t border-line/60 pt-3`,children:l.map((e,t)=>d(e,`${e.href}-${t}`))})]}),s("div",{"data-header-phone":"",className:"hidden max-view-tablet:flex items-center justify-between",children:[H(Q,!0),s("div",{className:"flex shrink-0 items-center gap-4",children:[P,D,R(a),Fe&&s("button",{type:"button","aria-label":c?"Close menu":"Open menu","aria-expanded":c,onClick:()=>w(e=>!e),className:"flex h-11 w-11 flex-col items-center justify-center gap-2",children:[o("span",{className:`block h-px w-5 bg-current transition-transform ${c?"translate-y-[3px] rotate-45":""}`}),o("span",{className:`block h-px w-5 bg-current transition-transform ${c?"opacity-0":""}`}),o("span",{className:`block h-px w-5 bg-current transition-transform ${c?"-translate-y-[3px] -rotate-45":""}`})]})]})]})]})}),c&&s("div",{"data-header-phone-menu":"",className:"fixed inset-x-0 top-0 bottom-0 z-40 hidden flex-col gap-8 overflow-y-auto bg-bg px-6 pt-24 pb-10 max-view-tablet:flex",children:[l.map((e,t)=>o(ne,{item:e,mobile:!0,onNavigate:()=>w(!1)},`${e.href}-${t}`)),s("div",{className:"mt-auto flex flex-col gap-4 border-t border-line pt-6",children:[y&&_&&s("div",{className:"flex items-center justify-between",children:[o("span",{className:"mono-eyebrow text-fg-dim",children:"Account"}),o(te,{href:"/account",onClick:()=>w(!1),className:"mono-eyebrow underline",children:"Your account"})]}),b&&V&&s("div",{className:"flex items-center justify-between",children:[o("span",{className:"mono-eyebrow text-fg-dim",children:"Region"}),b]}),v&&s("div",{className:"flex items-center justify-between",children:[o("span",{className:"mono-eyebrow text-fg-dim",children:"Theme"}),v]})]})]})]})}export{kt as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as s,jsxs as t}from"react/jsx-runtime";import{readHidable as l}from"efficient-easel/screen/lib/puck/hidable";import{useSiteCopyright as p}from"./SiteRecordContext.js";import{useConsentControls as c}from"./ConsentContext.js";import{CONSENT_TEXT_BUTTON as d}from"./ConsentBanner.js";function m({copyright:i}={}){const o=p(),r=l(i),a=r.hidden?null:r.text.trim()||o,n=c();return t("div",{className:"flex flex-wrap justify-between gap-x-6 gap-y-3 border-t border-line pt-6 font-mono text-[13px] uppercase tracking-[0.15em] text-fg-dim max-[800px]:flex-col max-[800px]:gap-3",children:[a!==null&&e("span",{children:a}),t("span",{className:"flex flex-wrap items-center gap-3 min-[801px]:ml-auto",children:[e("span",{children:"Privacy"}),e("span",{"aria-hidden":!0,children:"·"}),e("span",{children:"Terms"}),e("span",{"aria-hidden":!0,children:"·"}),e("span",{children:"Cookies"}),n?.ready&&t(s,{children:[e("span",{"aria-hidden":!0,children:"·"}),e("button",{type:"button",className:`${d} text-left`,onClick:n.openPanel,children:n.rule.footerLink})]})]})]})}export{m as default};
1
+ "use client";import{jsx as e,Fragment as l,jsxs as n}from"react/jsx-runtime";import{readHidable as s}from"efficient-easel/screen/lib/puck/hidable";import{useSiteCopyright as p}from"./SiteRecordContext.js";import{useConsentControls as c}from"./ConsentContext.js";import{CONSENT_TEXT_BUTTON as d}from"./ConsentBanner.js";function m({copyright:i}={}){const o=p(),r=s(i),a=r.hidden?null:r.text.trim()||o,t=c();return n("div",{className:"flex flex-wrap justify-between gap-x-6 gap-y-3 border-t border-line pt-6 font-mono text-[13px] uppercase tracking-[0.15em] text-fg-dim max-view-tablet:flex-col max-view-tablet:gap-3",children:[a!==null&&e("span",{children:a}),n("span",{className:"flex flex-wrap items-center gap-3 view-tablet:ml-auto",children:[e("span",{children:"Privacy"}),e("span",{"aria-hidden":!0,children:"·"}),e("span",{children:"Terms"}),e("span",{"aria-hidden":!0,children:"·"}),e("span",{children:"Cookies"}),t?.ready&&n(l,{children:[e("span",{"aria-hidden":!0,children:"·"}),e("button",{type:"button",className:`${d} text-left`,onClick:t.openPanel,children:t.rule.footerLink})]})]})]})}export{m as default};
@@ -1,10 +1,11 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { PopupLook } from "efficient-web-builder/format/lib/popup/look";
3
3
  export declare function tintOf(hex: string, opacity: number): string;
4
- export default function PopupFrame({ look, open, inline, onClose, label, children, }: {
4
+ export default function PopupFrame({ look, open, inline, modal, onClose, label, children, }: {
5
5
  look: PopupLook;
6
6
  open?: boolean;
7
7
  inline?: boolean;
8
+ modal?: boolean;
8
9
  onClose?: () => void;
9
10
  label: string;
10
11
  children?: ReactNode;
@@ -1 +1 @@
1
- "use client";import{jsx as u,jsxs as m}from"react/jsx-runtime";import{useCallback as p,useRef as x}from"react";import{useModalDismiss as g}from"./useModalDismiss.js";const h={"top-left":{justifyContent:"flex-start",alignItems:"flex-start"},"top-center":{justifyContent:"center",alignItems:"flex-start"},"top-right":{justifyContent:"flex-end",alignItems:"flex-start"},left:{justifyContent:"flex-start",alignItems:"center"},center:{justifyContent:"center",alignItems:"center"},right:{justifyContent:"flex-end",alignItems:"center"},"bottom-left":{justifyContent:"flex-start",alignItems:"flex-end"},"bottom-center":{justifyContent:"center",alignItems:"flex-end"},"bottom-right":{justifyContent:"flex-end",alignItems:"flex-end"}};function b(t,n){const e=Number.parseInt(t.slice(1),16),s=e>>16&255,i=e>>8&255,r=e&255;return`rgba(${s}, ${i}, ${r}, ${Math.round(n)/100})`}function y({look:t,open:n=!0,inline:e=!1,onClose:s,label:i,children:r}){const o=x(null),l=p(()=>s?.(),[s]);if(g({active:!e&&n,onDismiss:l,focusRef:o}),!e&&!n)return null;const c=f=>{e||!t.outsideClick||f.target===f.currentTarget&&l()},a=t.height==="full",d=m("div",{ref:o,tabIndex:-1,"data-popup-panel":"",className:"relative bg-bg text-fg outline-none",style:{width:t.fullWidth?"100%":`min(${t.width}px, 100%)`,height:a?"100%":void 0,maxHeight:"100%",overflow:"auto",borderRadius:t.fullWidth||a?0:"var(--sf-section-radius, 0px)"},children:[t.closeButton!=="none"?u("button",{type:"button","aria-label":"Close",onClick:e?void 0:l,"data-popup-close":t.closeButton,className:"absolute z-[5] flex h-[38px] w-[38px] items-center justify-center border border-line bg-bg font-mono text-[14px] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:t.closeButton==="outside"?{top:-46,right:0}:{top:12,right:12},children:"×"}):null,r]});return u("div",{role:"dialog","aria-modal":e?void 0:!0,"aria-label":i,"data-popup-frame":e?"inline":"live",onClick:c,className:e?"relative flex min-h-[100vh] w-full":"fixed inset-0 z-[90] flex",style:{...h[t.placement],background:b(t.tintColor,t.tintOpacity),padding:t.fullWidth||a?0:24},children:d})}export{y as default,b as tintOf};
1
+ "use client";import{jsx as c,jsxs as g}from"react/jsx-runtime";import{useCallback as m,useRef as h}from"react";import{useModalDismiss as b}from"./useModalDismiss.js";const y={"top-left":{justifyContent:"flex-start",alignItems:"flex-start"},"top-center":{justifyContent:"center",alignItems:"flex-start"},"top-right":{justifyContent:"flex-end",alignItems:"flex-start"},left:{justifyContent:"flex-start",alignItems:"center"},center:{justifyContent:"center",alignItems:"center"},right:{justifyContent:"flex-end",alignItems:"center"},"bottom-left":{justifyContent:"flex-start",alignItems:"flex-end"},"bottom-center":{justifyContent:"center",alignItems:"flex-end"},"bottom-right":{justifyContent:"flex-end",alignItems:"flex-end"}};function C(t,s){const e=Number.parseInt(t.slice(1),16),n=e>>16&255,r=e>>8&255,i=e&255;return`rgba(${n}, ${r}, ${i}, ${Math.round(s)/100})`}function j({look:t,open:s=!0,inline:e=!1,modal:n=!0,onClose:r,label:i,children:d}){const f=h(null),l=m(()=>r?.(),[r]),a=n&&!e;if(b({active:a&&s,onDismiss:l,focusRef:f}),!e&&!s)return null;const p=u=>{!a||!t.outsideClick||u.target===u.currentTarget&&l()},o=t.height==="full",x=g("div",{ref:f,tabIndex:-1,"data-popup-panel":"",className:"relative bg-bg text-fg outline-none",style:{width:t.fullWidth?"100%":`min(${t.width}px, 100%)`,height:o?"100%":void 0,maxHeight:"100%",overflow:"auto",borderRadius:t.fullWidth||o?0:"var(--sf-section-radius, 0px)",...n||e?null:{pointerEvents:"auto"}},children:[t.closeButton!=="none"?c("button",{type:"button","aria-label":"Close",onClick:e?void 0:l,"data-popup-close":t.closeButton,className:"absolute z-[5] flex h-[38px] w-[38px] items-center justify-center border border-line bg-bg font-mono text-[14px] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:t.closeButton==="outside"?{top:-46,right:0}:{top:12,right:12},children:"×"}):null,d]});return c("div",{role:n||e?"dialog":"region","aria-modal":a?!0:void 0,"aria-label":i,"data-popup-frame":e?"inline":"live",onClick:p,className:e?"relative flex min-h-[100vh] w-full":"fixed inset-0 z-[90] flex",style:{...y[t.placement],background:C(t.tintColor,t.tintOpacity),padding:t.fullWidth||o?0:24,...n||e?null:{pointerEvents:"none"}},children:x})}export{j as default,C as tintOf};
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from "react";
2
+ import type { PopupLook } from "efficient-web-builder/format/lib/popup/look";
3
+ export interface HostedPopup {
4
+ slug: string;
5
+ title: string;
6
+ settings: Record<string, unknown>;
7
+ look?: PopupLook;
8
+ body?: ReactNode;
9
+ }
10
+ interface PopupScope {
11
+ markSent: () => void;
12
+ }
13
+ export declare function usePopupScope(): PopupScope | null;
14
+ export default function PopupHost({ popups }: {
15
+ popups: readonly HostedPopup[];
16
+ }): import("react").JSX.Element | null;
17
+ export {};
@@ -0,0 +1 @@
1
+ "use client";import{jsx as b}from"react/jsx-runtime";import{usePathname as D}from"next/navigation";import{createContext as T,useCallback as k,useContext as _,useEffect as O,useMemo as y,useRef as m,useState as B}from"react";import{SUBSCRIBE_POPUP_SLUG as H}from"efficient-web-builder/format/lib/content/subscribe";import{GRID_PHONE_BREAKPOINT as K}from"efficient-web-builder/format/lib/content/grid-span";import{popupSlugOf as A}from"efficient-web-builder/format/lib/links/page-link-rules";import{resolvePopupBehavior as I}from"efficient-web-builder/format/lib/popup/behavior";import{effectiveTrigger as U,localDay as j,markPopupClosed as M,markPopupSent as F,pickAutoPopup as G,popupAllowedOnPath as N,scrolledPercent as Y}from"efficient-web-builder/format/lib/popup/rules";import $ from"./PopupFrame.js";import{useSubscribePopup as q}from"./SubscribePopupContext.js";import{isEditorRoute as z}from"../lib/editor-route.js";import{POPUP_STORES as h}from"../lib/popup/popup-stores.js";const x=T(null);function le(){return _(x)}function J(){try{return window.matchMedia("(hover: hover) and (pointer: fine)").matches}catch{return!1}}function Q(){try{return window.matchMedia(`(max-width: ${K-1}px)`).matches}catch{return!1}}function V({popups:i}){const v=q(),[r,w]=B(null),c=D()??"/",u=z(c),P=m(c);P.current=c;const g=m(!1),f=y(()=>i.map(e=>({...e,id:e.slug,behavior:I(e.settings)})),[i]),S=f.filter(e=>e.behavior.autoOpen&&N(c,e.behavior.showOn,e.behavior.showOnPages)).map(e=>e.slug).join(" "),d=m(v);d.current=v;const E=m(i);E.current=i;const l=k((e,t)=>{if(e===H){t?d.current.openByItself():d.current.open();return}E.current.some(o=>o.slug===e&&o.body!==void 0)&&w(e)},[]);O(()=>{if(u)return;const e=t=>{if(t.defaultPrevented||t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;const o=t.target?.closest?.("a[href]"),s=o?A(o.getAttribute("href")??""):null;s&&(t.preventDefault(),l(s,!1))};return document.addEventListener("click",e,!0),()=>document.removeEventListener("click",e,!0)},[u,l]),O(()=>{if(u||g.current||!S)return;const e=G(f,{path:P.current,isPhone:Q(),today:j(new Date),inEditor:u},h,Date.now());if(!e)return;const t=()=>{g.current=!0,l(e.slug,!0)},o=e.behavior,s=U(o.trigger,J());if(s==="scroll"){const n=()=>{Y(window.scrollY,window.innerHeight,document.documentElement.scrollHeight)>=o.scrollPercent&&(window.removeEventListener("scroll",n),t())};return window.addEventListener("scroll",n,{passive:!0}),()=>window.removeEventListener("scroll",n)}if(s==="exit"){const n=p=>{p.relatedTarget===null&&p.clientY<=0&&(document.removeEventListener("mouseout",n),t())};return document.addEventListener("mouseout",n),()=>document.removeEventListener("mouseout",n)}const C=window.setTimeout(t,o.autoOpenDelaySec*1e3);return()=>window.clearTimeout(C)},[u,S,f,l]);const L=k(()=>{r&&M(r,h,Date.now()),w(null)},[r]),R=y(()=>({markSent:()=>{r&&F(r,h,Date.now())}}),[r]),a=r?i.find(e=>e.slug===r):void 0;return a?.look?b(x.Provider,{value:R,children:b($,{look:a.look,label:a.title,open:!0,onClose:L,children:a.body})}):null}export{V as default,le as usePopupScope};
@@ -1 +1 @@
1
- "use client";import{jsx as r,Fragment as le,jsxs as me}from"react/jsx-runtime";import pe from"next/image";import{useMemo as ue,useState as fe}from"react";import{formatSelectionPrice as he,formatWheelPrice as ge,FROM_PREFIX as Se,resolveSelectionPrice as be,formatWheelWasPrice as Ce,resolveWheelPrice as we,SET_QUOTE_LABEL as ve}from"../lib/wheels/price-display.js";import{setBuildLabel as Fe,setIsWide as Pe,setSecondSrc as xe,summarySetBuild as Ee,wheelCardPriceLine as u}from"../lib/wheels/set-mode.js";import{wheelCardSpecFacts as Be}from"../lib/wheels/plp-fitment-match.js";import{isRenderableFinish as Ie}from"../lib/wheels/renderable-finishes.js";import{CARD_INDEX_BADGE_CLASS as ye,CARD_INDEX_CLASS as Le}from"efficient-web-builder/format/lib/sections/product-card-style";import{coverSrcForWheel as We,resolvePaintedSrc as _e}from"../lib/wheels/cover-rendering.js";import{useCurrency as ke}from"./CurrencyContext.js";import{applyCardAnswers as $e}from"../lib/content/field-usage.js";import{wheelCardEyebrow as Ae,withSetChip as ze}from"./ProductCardEyebrow.js";import Re from"./FinishSwatches.js";import{useFinishSelection as je}from"./useFinishSelection.js";import{withRMark as _}from"efficient-web-builder/render/components/RMark";import De from"./WheelPlaceholder.js";import{useProductCardChrome as Ne}from"./ProductCardChrome.js";import{usePlpCardSelection as He}from"./wheels-plp/usePlpCardSelection.js";import{useWheelCardBottom as Me}from"./wheels-plp/useWheelCardBottom.js";import Oe,{cardSpecFields as Xe,WheelCardBadge as k,WheelCardCorners as Te}from"./WheelCardFrame.js";function Ue({wheel:e,variant:f="compact",defaultFinish:$}){const i=f==="catalog",h=ue(()=>e.finishes.filter(Ie),[e.finishes]),A=e.coverImage??null,{currency:s}=ke(),{imageBackgroundFill:z,spinOnHover:R,coverIndex:j,indexBadge:g,outline:D,showBadge:N,fieldUsage:S,reserveEyebrow:H,showCardPrice:M,showCardFinishes:b,showCardSizes:O,showCardBuy:C,showCardPage:w,imageSizes:X}=Ne(),c=i&&(C||w),d=we(e.prices[s],e.msrpPrices?.[s]),v=ge(d,s,Se),T=Ce(d,s),F=Ee(e),t=Pe(F),P=Fe(F),U=$e(Be(e,null,{sizes:O}),S).map(o=>o.text),{selectedIdx:G,setSelectedIdx:Q,hoverIdx:V,setHoverIdx:q,availability:J,finish:n,shownSrc:x,showSwatches:K,probes:Y}=je(h,A,$??e.defaultFinish??void 0),Z=We(e,j,n?.name,x),ee="h-full w-full",oe=R?`transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] ${i?"group-hover:rotate-[72deg]":"group-hover:rotate-[60deg]"}`:"",[E,re]=fe(()=>new Set),se=o=>re(a=>a.has(o)?a:new Set(a).add(o)),l=_e({overrideSrc:Z,hookSrc:x,failed:E}),B=(o,a)=>r(pe,{src:o,alt:a,width:1e3,height:1e3,sizes:X,className:`block object-contain ${oe} ${ee}`,draggable:!1,onError:()=>se(o)},o),I=n?`${e.name} — ${n.name}`:e.name,te=l?B(l,I):r(De,{imageLabel:e.name}),m=t?xe(e.finishes?.find(o=>o.name===n?.name),l):null,ie=m&&!E.has(m)?B(m,`${I} — right`):void 0,ne=i?r(Te,{set:t,numbered:g!=="off",right:[P?r(k,{tone:"outline",children:P}):N&&e.badge?r(k,{tone:e.badge==="new"?"solid":"outline",children:e.badge==="new"?"New":"Bestseller"}):null]}):null,y=Ae({kindLabel:null,brand:null,process:e.process?_(e.process):null},S),ae=t&&!i?ze(y):y,ce=g!=="off"?r("span",{"aria-hidden":!0,className:`${Le} ${ye}`}):null,L=He(e),p=be(e,L.selectedVariant,s,1),W=Me({wheel:e,sel:L,price:p,show:{buy:c&&C,page:c&&w}}),de=b&&K?r(Re,{finishes:h,availability:J,selectedIdx:G,hoverIdx:V,activeFinish:n,onSelect:Q,onHover:q,showLabel:!1}):null;return me(le,{children:[r(Oe,{variant:f,wide:t&&i,href:`/wheels/${e.slug}`,outline:D,imageBackgroundFill:z,probes:Y,reserveEyebrow:H,indexBadge:ce,badges:ne,image:te,imageSecond:ie,eyebrow:ae,name:_(e.name),spec:Xe(U),was:t?void 0:T,price:t?d.priced?u(v,!0):ve:c?u(he(p,s),p.priced):u(v,d.priced),swatches:de,reserveSwatches:b,showPrice:M,identityLink:c,wholeCardLink:!0,actions:W.actions}),W.dialog]})}export{Ue as default};
1
+ "use client";import{jsx as r,Fragment as X,jsxs as q}from"react/jsx-runtime";import G from"next/image";import{useState as H}from"react";import{setSecondSrc as M}from"../lib/wheels/set-mode.js";import{wheelCardSpecFacts as O}from"../lib/wheels/plp-fitment-match.js";import{CARD_INDEX_BADGE_CLASS as U,CARD_INDEX_CLASS as J}from"efficient-web-builder/format/lib/sections/product-card-style";import{coverSrcForWheel as K,resolvePaintedSrc as Q}from"../lib/wheels/cover-rendering.js";import{applyCardAnswers as T}from"../lib/content/field-usage.js";import{wheelCardEyebrow as V,withSetChip as Y}from"./ProductCardEyebrow.js";import{withRMark as S}from"efficient-web-builder/render/components/RMark";import Z from"./WheelPlaceholder.js";import{useProductCardChrome as ee}from"./ProductCardChrome.js";import re,{CardBuyDialog as oe}from"./card-pieces/CardBuyButton.js";import te from"./card-pieces/CardFinishSwatches.js";import se from"./card-pieces/CardPrice.js";import ae from"./card-pieces/CardProductBadge.js";import{useWheelCardState as ie,WheelCardStateProvider as ne}from"./card-pieces/ProductCardState.js";import de,{cardSpecFields as ce}from"./WheelCardFrame.js";function le({wheel:i,variant:s="compact",defaultFinish:e}){return r(ne,{wheel:i,defaultFinish:e,children:r(me,{variant:s})})}function me({variant:i}){const s=i==="catalog",{wheel:e,sel:t,isSet:n}=ie(),{imageBackgroundFill:b,spinOnHover:F,coverIndex:y,indexBadge:m,outline:B,showBadge:x,fieldUsage:h,reserveEyebrow:E,showCardPrice:P,showCardFinishes:k,showCardSizes:v,showCardBuy:u,showCardPage:f,imageSizes:$}=ee(),d=s&&(u||f),_=T(O(e,null,{sizes:v}),h).map(o=>o.text),A=K(e,y,t.finish?.name,t.shownSrc),z="h-full w-full",D=F?`transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] ${s?"group-hover:rotate-[72deg]":"group-hover:rotate-[60deg]"}`:"",[p,I]=H(()=>new Set),L=o=>I(a=>a.has(o)?a:new Set(a).add(o)),c=Q({overrideSrc:A,hookSrc:t.shownSrc,failed:p}),w=(o,a)=>r(G,{src:o,alt:a,width:1e3,height:1e3,sizes:$,className:`block object-contain ${D} ${z}`,draggable:!1,onError:()=>L(o)},o),g=t.finish?`${e.name} — ${t.finish.name}`:e.name,j=c?w(c,g):r(Z,{imageLabel:e.name}),l=n?M(e.finishes?.find(o=>o.name===t.finish?.name),c):null,W=l&&!p.has(l)?w(l,`${g} — right`):void 0,C=V({kindLabel:null,brand:null,process:e.process?S(e.process):null},h),N=n&&!s?Y(C):C,R=m!=="off"?r("span",{"aria-hidden":!0,className:`${J} ${U}`}):null;return q(X,{children:[r(de,{variant:i,wide:n&&s,href:`/wheels/${e.slug}`,outline:B,imageBackgroundFill:b,probes:t.probes,reserveEyebrow:E,indexBadge:R,badges:r(ae,{show:x,numbered:m!=="off",axleSets:!0}),image:j,imageSecond:W,eyebrow:N,name:S(e.name),spec:ce(_),price:r(se,{show:P,quoteSets:!0}),swatches:r(te,{show:k}),identityLink:d,wholeCardLink:!0,buy:r(re,{buy:d&&u,page:d&&f})}),r(oe,{})]})}export{le as default};
@@ -0,0 +1,15 @@
1
+ import type { CSSProperties } from "react";
2
+ import { type HeroView } from "./product-hero/hero-view.js";
3
+ import type { StoreProduct } from "../lib/catalog/store-product.js";
4
+ import { type HeroGalleryMode, type HeroImageFit } from "../lib/sections/hero-gallery.js";
5
+ export default function ProductGallery({ product, view, angleIdx, onSelect, isLight, onLightbox, galleryMode, imageFit, style, }: {
6
+ product: StoreProduct;
7
+ view: HeroView;
8
+ angleIdx: number;
9
+ onSelect: (i: number) => void;
10
+ isLight: boolean;
11
+ onLightbox: (src: string, alt: string) => void;
12
+ galleryMode?: HeroGalleryMode;
13
+ imageFit?: HeroImageFit;
14
+ style?: CSSProperties;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as t,jsxs as r,Fragment as b}from"react/jsx-runtime";import{photoLabel as h}from"./product-hero/hero-view.js";import{stageControls as H,useHeldStagePhoto as k}from"./product-hero/stage-photo.js";import{DEFAULT_HERO_GALLERY_MODE as z,DEFAULT_HERO_IMAGE_FIT as L,parseHeroGalleryMode as M,parseHeroImageFit as S,resolveHeroImageFit as $}from"../lib/sections/hero-gallery.js";import{productHasComposedRender as F}from"../lib/wheels/set-mode.js";function A({product:a,view:e,angleIdx:s,onSelect:m,isLight:c,onLightbox:p,galleryMode:i=z,imageFit:x=L,style:o}){const l=M(i),d=$(S(x),F(a));return r("div",{"data-hero-gallery":l,"data-hero-fit":d,className:l==="tiled"?"flex items-start gap-3 max-[720px]:gap-2":void 0,style:o,children:[r("div",{className:l==="tiled"?"min-w-0 flex-1":void 0,children:[t(R,{name:a.name,view:e,angleIdx:s,onSelect:m,isLight:c,onLightbox:p,fit:d}),e.referenceNote&&t("p",{"data-hero-reference-note":!0,className:"mt-2 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.18em] text-fg-dim",children:e.referenceNote}),e.galleryHint&&t("p",{"data-hero-gallery-hint":!0,className:"mt-2 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.18em] text-fg-dim",children:e.galleryHint})]}),l!=="main"&&t(T,{name:a.name,view:e,angleIdx:s,onSelect:m,isLight:c,tiled:l==="tiled"})]})}function y(a){return a.photos.length>0?a.photos.length:a.thumbFallbackCells}const E=6;function R({name:a,view:e,angleIdx:s,onSelect:m,isLight:c,onLightbox:p,fit:i}){const x=e.photos[Math.min(s,e.photos.length-1)],o=k(e.photos,x),l=y(e),d=l>=2,N=String(l).padStart(2,"0"),f=Math.min(s,Math.max(e.photos.length-1,0)),_=d||e.captions[f]?h(e,f):"",u=[a,e.metaValue,_].filter(Boolean).join(" — "),g="max-[720px]:static",j=["relative flex aspect-square items-center justify-center overflow-hidden max-[720px]:col-span-2",c?"bg-bg":""].join(" ");return r("div",{className:"relative max-[720px]:grid max-[720px]:grid-cols-[minmax(0,1fr)_auto] max-[720px]:items-start max-[720px]:gap-x-3 max-[720px]:gap-y-2",style:{color:e.tint},children:[r("div",{className:`absolute left-0 top-0 z-10 flex items-center gap-3 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-fg ${g} max-[720px]:min-w-0 max-[720px]:flex-wrap max-[720px]:gap-x-2 max-[720px]:gap-y-1`,children:[d&&r(b,{children:[r("span",{className:"text-accent",children:[String(s+1).padStart(2,"0")," / ",N]}),t("span",{className:"text-fg-dim",children:"·"})]}),t("span",{children:a}),e.metaValue&&r(b,{children:[t("span",{className:"text-fg-dim",children:"·"}),t("span",{className:"text-accent",children:e.metaValue})]})]}),d&&t("div",{className:`absolute right-5 top-5 z-10 flex gap-1 ${g}`,children:H(s,l,m).map(n=>t("button",{type:"button","aria-label":n.label,title:n.label,onClick:n.onClick,className:"flex h-7 w-7 items-center justify-center border border-fg-dim/60 text-fg transition-colors hover:border-accent hover:text-accent",children:n.glyph},n.label))}),r("div",{className:j,children:[["top-3 left-3","top-3 right-3","bottom-3 left-3","bottom-3 right-3"].map((n,C)=>t("span",{className:`absolute ${n} h-3 w-3 border border-fg-dim/40`,style:{borderTop:n.includes("top")?"1px solid var(--site-line)":"none",borderBottom:n.includes("bottom")?"1px solid var(--site-line)":"none",borderLeft:n.includes("left")?"1px solid var(--site-line)":"none",borderRight:n.includes("right")?"1px solid var(--site-line)":"none"}},C)),e.stageImage({photo:o,alt:u,label:`Open ${[a,e.metaValue].filter(Boolean).join(" ")} at full resolution`,onZoom:()=>p(o,u),fit:i})]}),r("div",{className:`absolute bottom-5 left-5 right-5 z-10 flex items-center justify-between gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim ${g} max-[720px]:col-span-2 max-[720px]:flex-wrap`,children:[t("span",{children:e.specCaption}),t("span",{children:e.originCaption})]})]})}function T({name:a,view:e,angleIdx:s,onSelect:m,isLight:c,tiled:p=!1}){const i=y(e);return i<2?null:t("div",{className:p?"order-[-1] flex w-16 flex-col gap-2 max-[720px]:w-12 max-[720px]:gap-1":"mt-2 grid grid-cols-4 gap-2 max-[720px]:gap-1",style:!p&&i>4?{gridTemplateColumns:`repeat(${Math.min(i,E)}, minmax(0, 1fr))`}:void 0,children:Array.from({length:i}).map((x,o)=>{const l=e.photos[o];return r("button",{type:"button",onClick:()=>m(o),"aria-label":`View ${h(e,o)}`,className:["relative flex aspect-square items-center justify-center overflow-hidden transition-colors",c?"bg-bg":"",o===s?"border border-accent":"border border-transparent hover:border-fg-dim"].join(" "),style:{color:e.tint},children:[t("span",{className:"absolute top-1.5 left-2 z-10 font-mono text-[length:var(--size-label,8px)] uppercase tracking-[0.18em] text-fg-dim",children:String(o+1).padStart(2,"0")}),e.thumbImage({photo:l,alt:`${a} — ${h(e,o)}`})]},o)})})}export{A as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as n,Fragment as u}from"react/jsx-runtime";import ce from"next/link";import{BUY_ROW_CLASS as Ce}from"./buy-row.js";import{useEffect as V,useRef as Te,useState as de}from"react";import{useCart as ze}from"./CartContext.js";import Re from"./QuoteLink.js";import{useSiteTakesOrders as we}from"./SiteRecordContext.js";import Ee from"./EmailCaptureForm.js";import{useEnglish as U}from"./EnglishVariant.js";import Le from"./QuantityStepper.js";import{MarkedLabel as W,heroView as Ae,photoLabel as q}from"./product-hero/hero-view.js";import{useProductHeroContent as Oe}from"./product-hero/hero-content.js";import{stageControls as $e,useHeldStagePhoto as je}from"./product-hero/stage-photo.js";import{useWishlist as Ie}from"./WishlistContext.js";import{useStockAlertSignup as Me}from"./useStockAlertSignup.js";import{SPARE_WORDS as He,productCartLine as Be}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as Fe}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as De}from"../lib/catalog/product-options.js";import{HERO_BULLET_SEPARATOR as Pe}from"../lib/content/product-hero.js";import{STOCK_WORDS as Ve}from"../lib/content/stock-words.js";import{trackViewItem as Ue}from"../lib/google-tag.js";import{DEFAULT_HERO_LAYOUT as We,DEFAULT_HERO_RATIO as qe,DEFAULT_HERO_TEXT_ALIGN as Ge,parseHeroLayout as Ke,parseHeroRatio as Xe,parseHeroTextAlign as Ye}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as Qe,DEFAULT_HERO_IMAGE_FIT as Ze,parseHeroGalleryMode as Je,parseHeroImageFit as et,resolveHeroImageFit as tt}from"../lib/sections/hero-gallery.js";import{ADD_TO_BASKET_ATTR as at,MAX_SPARES as nt,UNITS_PER_SET as rt,formatPrice as me}from"../lib/commerce.js";import{UNPRICED_LABEL as lt,formatSelectionPrice as ot,setPriceLabel as st}from"../lib/wheels/price-display.js";import{productHasComposedRender as it,productIsDually as ct,productIsTwoObjects as dt,setSuppressesRow as mt}from"../lib/wheels/set-mode.js";const pt=4e3;function ft(t){return t?[t.year,t.make,t.model,t.modification].join("-"):""}const gt=.72;function ht(t){const r=t.trim().split(/\s+/).filter(Boolean);if(r.length===0)return;const s=r.map((c,d)=>c.length+(r.length>1&&d===r.length-1?1:0));return`calc(100cqi / ${(Math.max(...s)*gt).toFixed(2)})`}function xt({product:t,selection:r,onLightbox:s,editing:c=!1,pricePlacement:d="top",showVehicleFitment:l=!0,heroLayout:m=We,imageRatio:_=qe,textAlign:g=Ge,showSpecTable:y=!0,showPriceQuote:N=!0,galleryMode:O=Qe,imageFit:w=Ze}){const $=U(),b=Ke(m),C=Ye(g),T=Xe(_),z=Je(O),p=tt(et(w),it(t)),j=b==="imageRight"?`${100-T}fr ${T}fr`:`${T}fr ${100-T}fr`,{picked:ge,pick:G,qty:K,setQty:he,choice:v,setChoice:E,angleIdx:X,setAngleIdx:Y,showValidation:xe,setShowValidation:I,manualMode:Q,vehicle:M,rows:Z,facts:ue,part:S,outOfStock:J,offer:f,preOrder:H,canAddToCart:L,currency:R,price:x,set:ee,msrpLabel:te}=r,i=Ae(t,r,c),{bullets:ae}=Oe(),B=ct(t),be=dt(t),F=l?i.vehicle:null,ve=l?i.vehicleMemory:null,[A,ke]=de(!1);V(()=>{const a=()=>{ke(document.documentElement.getAttribute("data-theme")==="light")};a();const o=new MutationObserver(a);return o.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>o.disconnect()},[]);const{add:ye,open:Ne,warmCatalog:ne}=ze(),k=we();V(()=>{!c&&k&&ne(t.kind)},[c,k,t.kind,ne]);const re=Z.filter(a=>!H||a.values.length>0),le=re.filter(a=>a.role==="resolves"),D=re.filter(a=>a.role==="describes"&&!mt(be,a.key)),oe=D.findIndex(a=>a.chosen===null),se=(!F||!i.vehicleAnswersSpecs||r.fitmentSet)&&De(Z,H)?oe===-1?D:D.slice(0,oe+1):[],Se=[...le,...se],P=n("div",{className:"flex items-baseline gap-5 border-t border-line pt-[18px]",children:[te&&e("div",{className:"font-mono text-[length:var(--size-label,15px)] text-fg-dim line-through",children:te}),e("div",{className:"font-heading2 text-[length:min(var(--size-headingMedium,36px),var(--sf-heading-max,9999px))] font-bold leading-none tracking-[-0.01em] text-fg",children:B?st(x,R):ot(x,R)}),x.priced&&e("div",{className:"font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:i.unitLabel}),x.setTotal!=null&&n("div",{className:"ml-auto border border-accent px-3 py-2 font-mono text-[length:var(--size-label,13px)] font-bold uppercase tracking-[0.18em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:[f.quantityLabel,": ",me(ee,R)]})]}),ie=Te(null);return V(()=>{c||ie.current===t.slug||(ie.current=t.slug,Ue({itemId:S?`${t.slug}|${S.id}`:t.slug,itemName:t.name,variant:i.metaValue,pricePerSet:x.setTotal??x.fromSetTotal??0,currency:R}))},[c,t.slug,t.name,i.metaValue,S,x,R]),n(u,{children:[e("nav",{className:"border-b border-line px-[max(var(--sf-site-gutter,40px),calc((100%_-_var(--sf-content-cap,100%))/2_+_var(--sf-site-gutter,40px)))] pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))]",style:A?void 0:{background:"var(--section-bg)"},children:t.crumbs.map((a,o)=>n("span",{children:[o>0&&n(u,{children:[e("span",{className:"mx-3 text-accent",children:"/"}),e("wbr",{})]}),a.href?e(ce,{href:a.href,className:"hover:text-fg",children:e(W,{text:a.label})}):e("span",{className:"text-fg",children:e(W,{text:a.label})})]},`${a.label}-${o}`))}),n("section",{"data-hero-layout":b,"data-hero-align":C,className:["grid gap-10 px-[max(var(--sf-site-gutter,40px),calc((100%_-_var(--sf-content-cap,100%))/2_+_var(--sf-site-gutter,40px)))] py-14 max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[720px]:py-8",b==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-[1100px]:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...A?{}:{background:"var(--section-bg)"},...b==="stacked"?{}:{"--hero-cols":j}},children:[n("div",{"data-hero-gallery":z,"data-hero-fit":p,className:z==="tiled"?"flex items-start gap-3 max-[720px]:gap-2":void 0,style:b==="imageRight"?{order:2}:void 0,children:[n("div",{className:z==="tiled"?"min-w-0 flex-1":void 0,children:[e(vt,{name:t.name,view:i,angleIdx:X,onSelect:Y,isLight:A,onLightbox:s,fit:p}),i.referenceNote&&e("p",{"data-hero-reference-note":!0,className:"mt-2 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.18em] text-fg-dim",children:i.referenceNote}),i.galleryHint&&e("p",{"data-hero-gallery-hint":!0,className:"mt-2 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.18em] text-fg-dim",children:i.galleryHint})]}),z!=="main"&&e(kt,{name:t.name,view:i,angleIdx:X,onSelect:Y,isLight:A,tiled:z==="tiled"})]}),n("div",{className:["flex flex-col gap-7",C==="center"?"items-center text-center":""].filter(Boolean).join(" "),style:b==="imageRight"?{order:1}:void 0,children:[n("div",{className:"w-full [container-type:inline-size]",children:[n("div",{className:"mb-2.5 flex items-center gap-2.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-accent",children:[e("span",{children:e(W,{text:t.eyebrow})}),t.badge&&n(u,{children:[e("span",{children:"·"}),e("span",{children:t.badge})]})]}),e("h1",{className:"font-heading2 text-[length:min(min(var(--size-headingMedium,clamp(48px,5.5vw,84px)),var(--hero-name-fit,9999px)),var(--sf-heading-max,9999px))] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[0.92] tracking-[-0.035em]",style:{"--hero-name-fit":ht(i.heading)},children:(()=>{const a=i.heading.lastIndexOf(" ");if(a===-1)return i.heading;const o=i.heading.slice(0,a),h=i.heading.slice(a+1);return n(u,{children:[o," ",n("em",{className:"font-normal italic text-accent",children:[h,"."]})]})})()})]}),d!=="belowSpecs"&&N&&P,ve,le.map(a=>e(pe,{row:a,onPick:G},a.key)),H&&i.preOrder?n(u,{children:[d==="belowSpecs"&&N&&P,i.preOrder]}):n(u,{children:[F,se.map(a=>e(pe,{row:a,onPick:G},a.key)),y&&e(ut,{facts:ue}),(f.packs.length>0||k&&(f.extra||f.spareCounts.length>0))&&n("div",{className:"border-b border-line pb-[26px]",children:[f.packs.length>0&&n(u,{children:[e("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:"How many"}),e("div",{className:"flex flex-wrap gap-1.5",children:f.packs.map(a=>n("button",{type:"button",onClick:()=>E(o=>({...o,unit:a.value})),"aria-pressed":v.unit===a.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",v.unit===a.value?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:v.unit===a.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[v.unit===a.value&&e("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:a.label})]},a.value))})]}),k&&f.extra&&n("label",{className:`${f.packs.length>0?"mt-3.5 ":""}flex cursor-pointer items-center gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-fg`,children:[e("input",{type:"checkbox",checked:v.spares>0,onChange:a=>E(o=>({...o,spares:a.target.checked?nt:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),f.extra.label]}),k&&f.spareCounts.length>0&&n(u,{children:[e("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:He.howMany}),e("div",{className:"flex flex-col gap-1.5 sm:flex-row sm:flex-wrap",children:f.spareCounts.map(a=>{const o=a.value-rt,h=v.spares===o;return n("button",{type:"button",onClick:()=>E(_e=>({..._e,spares:o})),"aria-pressed":h,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",h?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:h?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[h&&e("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),n("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:[a.value," · ",a.label]})]},a.value)})})]}),k&&f.spareSide&&n(u,{children:[e("div",{className:"mb-3.5 mt-[26px] font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:f.spareSide.label}),e("div",{className:"flex flex-wrap gap-1.5",children:f.spareSide.options.map(a=>{const o=v.spareSide===a.value;return n("button",{type:"button",onClick:()=>E(h=>({...h,spareSide:a.value})),"aria-pressed":o,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",o?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:o?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[o&&e("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:a.label})]},a.value)})})]})]}),d==="belowSpecs"&&N&&P,n("div",{className:Ce,children:[k&&!(B&&!x.priced)&&e(Le,{value:K,onChange:he,size:"large"}),!k||B&&!x.priced?e(Re,{className:"flex-1 cursor-pointer bg-btn px-6 py-4 text-center font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-btn-ink transition-colors hover:bg-fg"}):x.priced?J?e("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Ve.outOfStock}):n("button",{type:"button",[at]:"",onClick:()=>{if(!L){I(!0),window.setTimeout(()=>I(!1),pt);return}if(I(!1),c)return;const a=Be(t,S,ge,{choice:v,qty:K},{fitmentLabel:Q?i.specCaption:M.appliedName?`For ${M.appliedName}`:"",fitmentKey:Q?`manual|${i.specCaption}`:`vehicle|${ft(M.applied?.vehicle)}`});a&&(ye(a),Ne())},"aria-disabled":!L,className:["flex-1 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] transition-colors",L?"cursor-pointer bg-btn text-btn-ink hover:bg-fg hover:text-bg":"cursor-pointer border-2 border-dashed border-accent/50 text-accent/80 hover:border-accent hover:text-accent"].join(" "),style:L?void 0:{background:"color-mix(in oklab, var(--accent) 6%, transparent)"},children:["Add to Cart",x.setTotal!=null?` · ${me(ee,R)}`:""]}):e("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:lt}),e(yt,{slug:t.slug,name:t.name})]}),J&&S&&e(Nt,{partNumbers:S.components.map(a=>a.partNumber),productSlug:t.slug},S.id),xe&&(()=>{const a=Se.filter(h=>h.chosen===null).map(h=>$(h.prompt).replace(/^Select\s+/i,""));if(F&&i.vehicleAnswersSpecs&&!r.fitmentSet&&a.push("vehicle fitment"),a.length===0)return null;const o=a.length===1?a[0]:a.length===2?`${a[0]} and ${a[1]}`:`${a.slice(0,-1).join(", ")}, and ${a.at(-1)}`;return n("p",{role:"alert",className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em]",style:{color:"var(--alert)"},children:["Please select ",o," first."]})})()]}),ae.length>0&&e("ul",{className:"flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-line pt-5 font-mono text-[length:var(--size-label,13px)] tracking-[0.05em] text-fg",children:ae.map((a,o)=>n("li",{children:[e("strong",{className:"font-bold text-accent",children:a.label}),a.detail?` ${Pe} ${a.detail}`:""]},`${a.label}-${o}`))})]})]})]})}function ut({facts:t}){const r=U();return t.length===0?null:n("div",{className:"border-b border-line pb-[26px]",children:[e("dl",{className:"flex flex-col gap-2",children:t.map(s=>n("div",{className:"flex flex-wrap items-baseline gap-x-2 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em]",children:[n("dt",{className:"text-fg-dim",children:[r(s.label)," ·"]}),e("dd",{className:"font-semibold text-fg",children:s.value.label})]},s.key))}),e("p",{className:"mt-3 font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:"Only one of each is left, so there is nothing to choose here."})]})}function pe({row:t,onPick:r}){const s=U();if(t.values.length===0&&!t.empty)return null;const c=t.values.find(l=>l.value===t.chosen),d=c&&[c.label,c.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[Fe]:t.key,children:[n("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:[s(t.label)," · ",e("span",{className:"text-accent",children:d??s(t.prompt)})]}),t.values.length===0?n("p",{className:"font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:[t.empty.text," ",e(ce,{href:t.empty.href,className:"text-accent hover:underline",children:t.empty.linkText})]}):t.display==="swatch"?e("div",{className:"flex flex-wrap gap-2",children:t.values.map(l=>{const m=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",m?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"].join(" "),style:m?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[m&&e("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:l.swatch}}),e("span",{className:"block min-w-0 break-words font-mono text-[length:var(--size-label,12px)] font-bold uppercase tracking-[0.18em] text-fg",children:l.label})]},l.value)})}):e("div",{className:"flex flex-wrap gap-1.5",children:t.values.map(l=>{const m=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",m?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:m?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[m&&e("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:l.label}),l.note&&e("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:l.note})]},l.value)})})]})}function fe(t){return t.photos.length>0?t.photos.length:t.thumbFallbackCells}const bt=6;function vt({name:t,view:r,angleIdx:s,onSelect:c,isLight:d,onLightbox:l,fit:m}){const _=r.photos[Math.min(s,r.photos.length-1)],g=je(r.photos,_),y=fe(r),N=y>=2,O=String(y).padStart(2,"0"),w=Math.min(s,Math.max(r.photos.length-1,0)),$=N||r.captions[w]?q(r,w):"",b=[t,r.metaValue,$].filter(Boolean).join(" — "),C="max-[720px]:static",T=["relative flex aspect-square items-center justify-center overflow-hidden max-[720px]:col-span-2",d?"bg-bg":""].join(" ");return n("div",{className:"relative max-[720px]:grid max-[720px]:grid-cols-[minmax(0,1fr)_auto] max-[720px]:items-start max-[720px]:gap-x-3 max-[720px]:gap-y-2",style:{color:r.tint},children:[n("div",{className:`absolute left-0 top-0 z-10 flex items-center gap-3 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-fg ${C} max-[720px]:min-w-0 max-[720px]:flex-wrap max-[720px]:gap-x-2 max-[720px]:gap-y-1`,children:[N&&n(u,{children:[n("span",{className:"text-accent",children:[String(s+1).padStart(2,"0")," / ",O]}),e("span",{className:"text-fg-dim",children:"·"})]}),e("span",{children:t}),r.metaValue&&n(u,{children:[e("span",{className:"text-fg-dim",children:"·"}),e("span",{className:"text-accent",children:r.metaValue})]})]}),N&&e("div",{className:`absolute right-5 top-5 z-10 flex gap-1 ${C}`,children:$e(s,y,c).map(p=>e("button",{type:"button","aria-label":p.label,title:p.label,onClick:p.onClick,className:"flex h-7 w-7 items-center justify-center border border-fg-dim/60 text-fg transition-colors hover:border-accent hover:text-accent",children:p.glyph},p.label))}),n("div",{className:T,children:[["top-3 left-3","top-3 right-3","bottom-3 left-3","bottom-3 right-3"].map((p,j)=>e("span",{className:`absolute ${p} h-3 w-3 border border-fg-dim/40`,style:{borderTop:p.includes("top")?"1px solid var(--site-line)":"none",borderBottom:p.includes("bottom")?"1px solid var(--site-line)":"none",borderLeft:p.includes("left")?"1px solid var(--site-line)":"none",borderRight:p.includes("right")?"1px solid var(--site-line)":"none"}},j)),r.stageImage({photo:g,alt:b,label:`Open ${[t,r.metaValue].filter(Boolean).join(" ")} at full resolution`,onZoom:()=>l(g,b),fit:m})]}),n("div",{className:`absolute bottom-5 left-5 right-5 z-10 flex items-center justify-between gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim ${C} max-[720px]:col-span-2 max-[720px]:flex-wrap`,children:[e("span",{children:r.specCaption}),e("span",{children:r.originCaption})]})]})}function kt({name:t,view:r,angleIdx:s,onSelect:c,isLight:d,tiled:l=!1}){const m=fe(r);return m<2?null:e("div",{className:l?"order-[-1] flex w-16 flex-col gap-2 max-[720px]:w-12 max-[720px]:gap-1":"mt-2 grid grid-cols-4 gap-2 max-[720px]:gap-1",style:!l&&m>4?{gridTemplateColumns:`repeat(${Math.min(m,bt)}, minmax(0, 1fr))`}:void 0,children:Array.from({length:m}).map((_,g)=>{const y=r.photos[g];return n("button",{type:"button",onClick:()=>c(g),"aria-label":`View ${q(r,g)}`,className:["relative flex aspect-square items-center justify-center overflow-hidden transition-colors",d?"bg-bg":"",g===s?"border border-accent":"border border-transparent hover:border-fg-dim"].join(" "),style:{color:r.tint},children:[e("span",{className:"absolute top-1.5 left-2 z-10 font-mono text-[length:var(--size-label,8px)] uppercase tracking-[0.18em] text-fg-dim",children:String(g+1).padStart(2,"0")}),r.thumbImage({photo:y,alt:`${t} — ${q(r,g)}`})]},g)})})}function yt({slug:t,name:r}){const{has:s,toggle:c}=Ie(),d=s(t);return e("button",{type:"button",title:d?"Saved":"Save","aria-label":d?`Remove ${r} from wishlist`:`Save ${r} to wishlist`,"aria-pressed":d,onClick:()=>c(t),className:["h-12 w-12 cursor-pointer border-2 bg-transparent transition-colors",d?"border-accent text-accent":"border-fg-dim/50 text-fg hover:border-accent hover:text-accent"].join(" "),children:d?"♥":"♡"})}function Nt({partNumbers:t,productSlug:r}){const[s,c]=de(""),{status:d,submit:l,reset:m}=Me();function _(){l({partNumbers:t,email:s,productSlug:r})}return d==="sent"?e("p",{className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-accent",children:"We'll email you when it's back."}):e(Ee,{className:"-mt-1",email:s,onEmailChange:c,status:d,onResetVerdict:m,onSubmit:_,inputAriaLabel:"Email for the back-in-stock alert",submitLabel:"Notify me when back",buttonClassName:"cursor-pointer whitespace-nowrap border-2 border-btn px-4 font-mono text-[length:var(--size-label,11px)] font-bold uppercase tracking-[0.22em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-btn",errorMessage:"Couldn't save that — please try again."})}export{xt as default};
1
+ "use client";import{jsx as a,jsxs as n,Fragment as b}from"react/jsx-runtime";import X from"next/link";import{BUY_ROW_CLASS as xe}from"./buy-row.js";import{useEffect as J,useRef as ve,useState as ke}from"react";import{useCart as ye}from"./CartContext.js";import Ne from"./QuoteLink.js";import{useSiteTakesOrders as Se}from"./SiteRecordContext.js";import _e from"./EmailCaptureForm.js";import{useEnglish as $}from"./EnglishVariant.js";import we from"./QuantityStepper.js";import{MarkedLabel as I,heroView as Te}from"./product-hero/hero-view.js";import{useProductHeroContent as Ee}from"./product-hero/hero-content.js";import Re from"./ProductGallery.js";import{useIsLightTheme as Ae}from"./useIsLightTheme.js";import{useWishlist as Le}from"./WishlistContext.js";import{useStockAlertSignup as Oe}from"./useStockAlertSignup.js";import{SPARE_WORDS as ze,productCartLine as Ce}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as $e}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as Ie}from"../lib/catalog/product-options.js";import{HERO_BULLET_SEPARATOR as je}from"../lib/content/product-hero.js";import{STOCK_WORDS as Me}from"../lib/content/stock-words.js";import{trackViewItem as De}from"../lib/google-tag.js";import{DEFAULT_HERO_LAYOUT as Fe,DEFAULT_HERO_RATIO as Pe,DEFAULT_HERO_TEXT_ALIGN as Be,parseHeroLayout as He,parseHeroRatio as Ue,parseHeroTextAlign as Ve}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as We,DEFAULT_HERO_IMAGE_FIT as Ge}from"../lib/sections/hero-gallery.js";import{ADD_TO_BASKET_ATTR as Ke,MAX_SPARES as qe,UNITS_PER_SET as Ye,formatPrice as Z}from"../lib/commerce.js";import{UNPRICED_LABEL as Qe,formatSelectionPrice as Xe,setPriceLabel as Je}from"../lib/wheels/price-display.js";import{productIsDually as Ze,productIsTwoObjects as et,setSuppressesRow as tt}from"../lib/wheels/set-mode.js";const at=4e3;function nt(t){return t?[t.year,t.make,t.model,t.modification].join("-"):""}const rt=.72;function lt(t){const l=t.trim().split(/\s+/).filter(Boolean);if(l.length===0)return;const d=l.map((s,c)=>s.length+(l.length>1&&c===l.length-1?1:0));return`calc(100cqi / ${(Math.max(...d)*rt).toFixed(2)})`}function ot({product:t,selection:l,onLightbox:d,editing:s=!1,pricePlacement:c="top",showVehicleFitment:o=!0,heroLayout:f=Fe,imageRatio:_=Pe,textAlign:te=Be,showSpecTable:ae=!0,showPriceQuote:w=!0,galleryMode:ne=We,imageFit:re=Ge}){const le=$(),v=He(f),j=Ve(te),y=Ue(_),oe=v==="imageRight"?`${100-y}fr ${y}fr`:`${y}fr ${100-y}fr`,{picked:ie,pick:M,qty:D,setQty:se,choice:g,setChoice:N,angleIdx:ce,setAngleIdx:de,showValidation:me,setShowValidation:T,manualMode:F,vehicle:E,rows:P,facts:pe,part:x,outOfStock:B,offer:m,preOrder:R,canAddToCart:S,currency:k,price:u,set:H,msrpLabel:U}=l,i=Te(t,l,s),{bullets:V}=Ee(),A=Ze(t),fe=et(t),L=o?i.vehicle:null,ue=o?i.vehicleMemory:null,O=Ae(),{addAndOpen:be,warmCatalog:W}=ye(),h=Se();J(()=>{!s&&h&&W(t.kind)},[s,h,t.kind,W]);const G=P.filter(e=>!R||e.values.length>0),K=G.filter(e=>e.role==="resolves"),z=G.filter(e=>e.role==="describes"&&!tt(fe,e.key)),q=z.findIndex(e=>e.chosen===null),Y=(!L||!i.vehicleAnswersSpecs||l.fitmentSet)&&Ie(P,R)?q===-1?z:z.slice(0,q+1):[],ge=[...K,...Y],C=n("div",{className:"flex items-baseline gap-5 border-t border-line pt-[18px]",children:[U&&a("div",{className:"font-mono text-[length:var(--size-label,15px)] text-fg-dim line-through",children:U}),a("div",{className:"font-heading2 text-[length:min(var(--size-headingMedium,36px),var(--sf-heading-max,9999px))] font-bold leading-none tracking-[-0.01em] text-fg",children:A?Je(u,k):Xe(u,k)}),u.priced&&a("div",{className:"font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:i.unitLabel}),u.setTotal!=null&&n("div",{className:"ml-auto border border-accent px-3 py-2 font-mono text-[length:var(--size-label,13px)] font-bold uppercase tracking-[0.18em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:[m.quantityLabel,": ",Z(H,k)]})]}),Q=ve(null);return J(()=>{s||Q.current===t.slug||(Q.current=t.slug,De({itemId:x?`${t.slug}|${x.id}`:t.slug,itemName:t.name,variant:i.metaValue,pricePerSet:u.setTotal??u.fromSetTotal??0,currency:k}))},[s,t.slug,t.name,i.metaValue,x,u,k]),n(b,{children:[a("nav",{className:"border-b border-line px-[max(var(--sf-site-gutter,40px),calc((100%_-_var(--sf-content-cap,100%))/2_+_var(--sf-site-gutter,40px)))] pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))]",style:O?void 0:{background:"var(--section-bg)"},children:t.crumbs.map((e,r)=>n("span",{children:[r>0&&n(b,{children:[a("span",{className:"mx-3 text-accent",children:"/"}),a("wbr",{})]}),e.href?a(X,{href:e.href,className:"hover:text-fg",children:a(I,{text:e.label})}):a("span",{className:"text-fg",children:a(I,{text:e.label})})]},`${e.label}-${r}`))}),n("section",{"data-hero-layout":v,"data-hero-align":j,className:["grid gap-10 px-[max(var(--sf-site-gutter,40px),calc((100%_-_var(--sf-content-cap,100%))/2_+_var(--sf-site-gutter,40px)))] py-14 max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[720px]:py-8",v==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-[1100px]:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...O?{}:{background:"var(--section-bg)"},...v==="stacked"?{}:{"--hero-cols":oe}},children:[a(Re,{product:t,view:i,angleIdx:ce,onSelect:de,isLight:O,onLightbox:d,galleryMode:ne,imageFit:re,style:v==="imageRight"?{order:2}:void 0}),n("div",{className:["flex flex-col gap-7",j==="center"?"items-center text-center":""].filter(Boolean).join(" "),style:v==="imageRight"?{order:1}:void 0,children:[n("div",{className:"w-full [container-type:inline-size]",children:[n("div",{className:"mb-2.5 flex items-center gap-2.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.2em] text-accent",children:[a("span",{children:a(I,{text:t.eyebrow})}),t.badge&&n(b,{children:[a("span",{children:"·"}),a("span",{children:t.badge})]})]}),a("h1",{className:"font-heading2 text-[length:min(min(var(--size-headingMedium,clamp(48px,5.5vw,84px)),var(--hero-name-fit,9999px)),var(--sf-heading-max,9999px))] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[0.92] tracking-[-0.035em]",style:{"--hero-name-fit":lt(i.heading)},children:(()=>{const e=i.heading.lastIndexOf(" ");if(e===-1)return i.heading;const r=i.heading.slice(0,e),p=i.heading.slice(e+1);return n(b,{children:[r," ",n("em",{className:"font-normal italic text-accent",children:[p,"."]})]})})()})]}),c!=="belowSpecs"&&w&&C,ue,K.map(e=>a(ee,{row:e,onPick:M},e.key)),R&&i.preOrder?n(b,{children:[c==="belowSpecs"&&w&&C,i.preOrder]}):n(b,{children:[L,Y.map(e=>a(ee,{row:e,onPick:M},e.key)),ae&&a(it,{facts:pe}),(m.packs.length>0||h&&(m.extra||m.spareCounts.length>0))&&n("div",{className:"border-b border-line pb-[26px]",children:[m.packs.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:"How many"}),a("div",{className:"flex flex-wrap gap-1.5",children:m.packs.map(e=>n("button",{type:"button",onClick:()=>N(r=>({...r,unit:e.value})),"aria-pressed":g.unit===e.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",g.unit===e.value?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:g.unit===e.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[g.unit===e.value&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:e.label})]},e.value))})]}),h&&m.extra&&n("label",{className:`${m.packs.length>0?"mt-3.5 ":""}flex cursor-pointer items-center gap-3 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-fg`,children:[a("input",{type:"checkbox",checked:g.spares>0,onChange:e=>N(r=>({...r,spares:e.target.checked?qe:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),m.extra.label]}),h&&m.spareCounts.length>0&&n(b,{children:[a("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:ze.howMany}),a("div",{className:"flex flex-col gap-1.5 sm:flex-row sm:flex-wrap",children:m.spareCounts.map(e=>{const r=e.value-Ye,p=g.spares===r;return n("button",{type:"button",onClick:()=>N(he=>({...he,spares:r})),"aria-pressed":p,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",p?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:p?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[p&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),n("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:[e.value," · ",e.label]})]},e.value)})})]}),h&&m.spareSide&&n(b,{children:[a("div",{className:"mb-3.5 mt-[26px] font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:m.spareSide.label}),a("div",{className:"flex flex-wrap gap-1.5",children:m.spareSide.options.map(e=>{const r=g.spareSide===e.value;return n("button",{type:"button",onClick:()=>N(p=>({...p,spareSide:e.value})),"aria-pressed":r,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",r?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:r?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[r&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:e.label})]},e.value)})})]})]}),c==="belowSpecs"&&w&&C,n("div",{className:xe,children:[h&&!(A&&!u.priced)&&a(we,{value:D,onChange:se,size:"large"}),!h||A&&!u.priced?a(Ne,{className:"flex-1 cursor-pointer bg-btn px-6 py-4 text-center font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-btn-ink transition-colors hover:bg-fg"}):u.priced?B?a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Me.outOfStock}):n("button",{type:"button",[Ke]:"",onClick:()=>{if(!S){T(!0),window.setTimeout(()=>T(!1),at);return}if(T(!1),s)return;const e=Ce(t,x,ie,{choice:g,qty:D},{fitmentLabel:F?i.specCaption:E.appliedName?`For ${E.appliedName}`:"",fitmentKey:F?`manual|${i.specCaption}`:`vehicle|${nt(E.applied?.vehicle)}`});e&&be(e)},"aria-disabled":!S,className:["flex-1 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] transition-colors",S?"cursor-pointer bg-btn text-btn-ink hover:bg-fg hover:text-bg":"cursor-pointer border-2 border-dashed border-accent/50 text-accent/80 hover:border-accent hover:text-accent"].join(" "),style:S?void 0:{background:"color-mix(in oklab, var(--accent) 6%, transparent)"},children:["Add to Cart",u.setTotal!=null?` · ${Z(H,k)}`:""]}):a("button",{type:"button",disabled:!0,"aria-disabled":!0,className:"flex-1 cursor-not-allowed border-2 border-dashed border-fg-dim/20 px-6 py-4 font-mono text-[length:var(--size-label,14px)] font-bold uppercase tracking-[0.32em] text-fg-dim/40",children:Qe}),a(st,{slug:t.slug,name:t.name})]}),B&&x&&a(ct,{partNumbers:x.components.map(e=>e.partNumber),productSlug:t.slug},x.id),me&&(()=>{const e=ge.filter(p=>p.chosen===null).map(p=>le(p.prompt).replace(/^Select\s+/i,""));if(L&&i.vehicleAnswersSpecs&&!l.fitmentSet&&e.push("vehicle fitment"),e.length===0)return null;const r=e.length===1?e[0]:e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")}, and ${e.at(-1)}`;return n("p",{role:"alert",className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em]",style:{color:"var(--alert)"},children:["Please select ",r," first."]})})()]}),V.length>0&&a("ul",{className:"flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-line pt-5 font-mono text-[length:var(--size-label,13px)] tracking-[0.05em] text-fg",children:V.map((e,r)=>n("li",{children:[a("strong",{className:"font-bold text-accent",children:e.label}),e.detail?` ${je} ${e.detail}`:""]},`${e.label}-${r}`))})]})]})]})}function it({facts:t}){const l=$();return t.length===0?null:n("div",{className:"border-b border-line pb-[26px]",children:[a("dl",{className:"flex flex-col gap-2",children:t.map(d=>n("div",{className:"flex flex-wrap items-baseline gap-x-2 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em]",children:[n("dt",{className:"text-fg-dim",children:[l(d.label)," ·"]}),a("dd",{className:"font-semibold text-fg",children:d.value.label})]},d.key))}),a("p",{className:"mt-3 font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:"Only one of each is left, so there is nothing to choose here."})]})}function ee({row:t,onPick:l}){const d=$();if(t.values.length===0&&!t.empty)return null;const s=t.values.find(o=>o.value===t.chosen),c=s&&[s.label,s.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[$e]:t.key,children:[n("div",{className:"mb-3.5 font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:[d(t.label)," · ",a("span",{className:"text-accent",children:c??d(t.prompt)})]}),t.values.length===0?n("p",{className:"font-mono text-[length:var(--size-body,12px)] leading-relaxed tracking-[0.1em] text-fg-dim",children:[t.empty.text," ",a(X,{href:t.empty.href,className:"text-accent hover:underline",children:t.empty.linkText})]}):t.display==="swatch"?a("div",{className:"flex flex-wrap gap-2",children:t.values.map(o=>{const f=o.value===t.chosen;return n("button",{type:"button",onClick:()=>l(t.key,o.value),className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",f?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"].join(" "),style:f?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[f&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:o.swatch}}),a("span",{className:"block min-w-0 break-words font-mono text-[length:var(--size-label,12px)] font-bold uppercase tracking-[0.18em] text-fg",children:o.label})]},o.value)})}):a("div",{className:"flex flex-wrap gap-1.5",children:t.values.map(o=>{const f=o.value===t.chosen;return n("button",{type:"button",onClick:()=>l(t.key,o.value),className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",f?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:f?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[f&&a("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:o.label}),o.note&&a("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:o.note})]},o.value)})})]})}function st({slug:t,name:l}){const{has:d,toggle:s}=Le(),c=d(t);return a("button",{type:"button",title:c?"Saved":"Save","aria-label":c?`Remove ${l} from wishlist`:`Save ${l} to wishlist`,"aria-pressed":c,onClick:()=>s(t),className:["h-12 w-12 cursor-pointer border-2 bg-transparent transition-colors",c?"border-accent text-accent":"border-fg-dim/50 text-fg hover:border-accent hover:text-accent"].join(" "),children:c?"♥":"♡"})}function ct({partNumbers:t,productSlug:l}){const[d,s]=ke(""),{status:c,submit:o,reset:f}=Oe();function _(){o({partNumbers:t,email:d,productSlug:l})}return c==="sent"?a("p",{className:"-mt-1 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-accent",children:"We'll email you when it's back."}):a(_e,{className:"-mt-1",email:d,onEmailChange:s,status:c,onResetVerdict:f,onSubmit:_,inputAriaLabel:"Email for the back-in-stock alert",submitLabel:"Notify me when back",buttonClassName:"cursor-pointer whitespace-nowrap border-2 border-btn px-4 font-mono text-[length:var(--size-label,11px)] font-bold uppercase tracking-[0.22em] text-btn transition-colors hover:bg-btn hover:text-btn-ink disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-btn",errorMessage:"Couldn't save that — please try again."})}export{ot as default};
@@ -0,0 +1,4 @@
1
+ export declare const RATING_STARS = 5;
2
+ export default function RatingStars({ rating }: {
3
+ rating: number;
4
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as n}from"react/jsx-runtime";const o={body:"text-[length:var(--size-body,17px)]"},t=5;function s({rating:r}){const a=Math.min(t,Math.max(0,Math.round(r)));return n("div",{role:"img","aria-label":`${a} out of ${t} stars`,className:`flex gap-1 ${o.body} leading-none`,children:Array.from({length:t}).map((i,e)=>n("span",{"aria-hidden":!0,className:e<a?"text-accent":"text-fg-dim/30",children:"★"},e))})}export{t as RATING_STARS,s as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as b,jsxs as l}from"react/jsx-runtime";import w from"efficient-web-builder/render/components/SectionEyebrow";import{renderHeadline as y,splitParagraphs as N}from"efficient-web-builder/render/components/goldPhrases";import{useStorefrontReviews as M}from"./useStorefrontReviews.js";import{say as a}from"efficient-web-builder/format/lib/editor-words";const i={headingMediumUpTo800:"max-[800px]:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",headingMedium:"text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))]",bodySmall:"text-[length:var(--size-body,15px)]",body:"text-[length:var(--size-body,17px)]",bodyLarge:"text-[length:var(--size-body,19px)]",label:"text-[length:var(--size-label,12px)]"},S=()=>[{id:"sample-review-1",authorName:a("Sample reviewer"),rating:5,title:a("Sample review title"),body:a("Approved customer reviews appear here automatically — this card is only a preview of the section's shape."),designCode:"",createdAt:""},{id:"sample-review-2",authorName:a("Sample reviewer"),rating:4,title:"",body:a("Reviews are collected by the Review Form section and wait for your approval before they show."),designCode:"",createdAt:""},{id:"sample-review-3",authorName:a("Sample reviewer"),rating:5,title:a("Another sample"),body:a("Set a product design code on this section to show one product's reviews; leave it blank for the whole store."),designCode:"",createdAt:""}];function A(n){const t=new Date(n);return Number.isNaN(t.getTime())?"":t.toLocaleDateString("en-US",{month:"long",year:"numeric"})}function R({rating:n}){const t=Math.min(5,Math.max(0,Math.round(n)));return e("div",{role:"img","aria-label":`${t} out of 5 stars`,className:`flex gap-1 ${i.body} leading-none`,children:Array.from({length:5}).map((m,o)=>e("span",{"aria-hidden":!0,className:o<t?"text-accent":"text-fg-dim/30",children:"★"},o))})}const _="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] py-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",$="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] pt-0 pb-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]";function k({look:n,eyebrow:t,title:m,columns:o,limit:h,designCode:f,omitHead:d=!1,editing:p=!1}={}){const s=M(h??6,f),u=Math.min(3,Math.max(1,o??3)),c=!(s&&s.length>0)&&p,x=s&&s.length>0?s:c?S():[];return!p&&x.length===0?null:e("section",{className:"relative z-[2] border-t border-line bg-surface",children:l("div",{className:d?$:_,children:[d?null:l(b,{children:[(t??"").trim()&&e(w,{text:t??"",look:n,className:"mb-4 block"}),(m??"").trim()&&e("h2",{className:`mb-12 font-heading2 ${i.headingMedium} font-medium uppercase leading-none tracking-[-0.02em] text-fg max-[800px]:mb-8 ${i.headingMediumUpTo800}`,children:y(m??"",!1)})]}),e("div",{className:"sf-card grid grid-cols-1 gap-px border border-line bg-line min-[700px]:[grid-template-columns:repeat(var(--rv-cols),minmax(0,1fr))]",style:{"--rv-cols":String(u)},children:x.map(r=>l("article",{className:["flex flex-col gap-4 bg-bg p-10 max-[800px]:p-8",c?"opacity-60":""].join(" "),children:[e(R,{rating:r.rating}),r.title.trim()&&e("h3",{className:`font-display ${i.bodyLarge} font-medium uppercase leading-[1.2] tracking-[-0.01em] text-fg`,children:r.title}),e("div",{className:`flex-1 font-serif ${i.bodySmall} leading-[1.65] text-fg-dim`,children:N(r.body).map((v,g)=>e("p",{className:g?"mt-3":"",children:v},g))}),l("footer",{className:"flex items-baseline justify-between gap-4 border-t border-line pt-5",children:[e("span",{className:`font-mono ${i.label} uppercase tracking-[0.22em] text-fg`,children:r.authorName}),e("span",{className:`font-mono ${i.label} uppercase tracking-[0.18em] text-fg-dim`,children:A(r.createdAt)})]})]},r.id))})]})})}export{k as default};
1
+ "use client";import{jsx as e,Fragment as b,jsxs as n}from"react/jsx-runtime";import w from"efficient-web-builder/render/components/SectionEyebrow";import{renderHeadline as y,splitParagraphs as N}from"efficient-web-builder/render/components/goldPhrases";import S from"./RatingStars.js";import{useStorefrontReviews as M}from"./useStorefrontReviews.js";import{say as t}from"efficient-web-builder/format/lib/editor-words";const i={headingMediumUpTo800:"max-[800px]:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",headingMedium:"text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))]",bodySmall:"text-[length:var(--size-body,15px)]",bodyLarge:"text-[length:var(--size-body,19px)]",label:"text-[length:var(--size-label,12px)]"},A=()=>[{id:"sample-review-1",authorName:t("Sample reviewer"),rating:5,title:t("Sample review title"),body:t("Approved customer reviews appear here automatically — this card is only a preview of the section's shape."),designCode:"",createdAt:""},{id:"sample-review-2",authorName:t("Sample reviewer"),rating:4,title:"",body:t("Reviews are collected by the Review Form section and wait for your approval before they show."),designCode:"",createdAt:""},{id:"sample-review-3",authorName:t("Sample reviewer"),rating:5,title:t("Another sample"),body:t("Set a product design code on this section to show one product's reviews; leave it blank for the whole store."),designCode:"",createdAt:""}];function R(o){const r=new Date(o);return Number.isNaN(r.getTime())?"":r.toLocaleDateString("en-US",{month:"long",year:"numeric"})}const k="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] py-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",_="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] pt-0 pb-[84px] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]";function z({look:o,eyebrow:r,title:l,columns:x,limit:h,designCode:f,omitHead:m=!1,editing:p=!1}={}){const s=M(h??6,f),u=Math.min(3,Math.max(1,x??3)),d=!(s&&s.length>0)&&p,c=s&&s.length>0?s:d?A():[];return!p&&c.length===0?null:e("section",{className:"relative z-[2] border-t border-line bg-surface",children:n("div",{className:m?_:k,children:[m?null:n(b,{children:[(r??"").trim()&&e(w,{text:r??"",look:o,className:"mb-4 block"}),(l??"").trim()&&e("h2",{className:`mb-12 font-heading2 ${i.headingMedium} font-medium uppercase leading-none tracking-[-0.02em] text-fg max-[800px]:mb-8 ${i.headingMediumUpTo800}`,children:y(l??"",!1)})]}),e("div",{className:"sf-card grid grid-cols-1 gap-px border border-line bg-line min-[700px]:[grid-template-columns:repeat(var(--rv-cols),minmax(0,1fr))]",style:{"--rv-cols":String(u)},children:c.map(a=>n("article",{className:["flex flex-col gap-4 bg-bg p-10 max-[800px]:p-8",d?"opacity-60":""].join(" "),children:[e(S,{rating:a.rating}),a.title.trim()&&e("h3",{className:`font-display ${i.bodyLarge} font-medium uppercase leading-[1.2] tracking-[-0.01em] text-fg`,children:a.title}),e("div",{className:`flex-1 font-serif ${i.bodySmall} leading-[1.65] text-fg-dim`,children:N(a.body).map((v,g)=>e("p",{className:g?"mt-3":"",children:v},g))}),n("footer",{className:"flex items-baseline justify-between gap-4 border-t border-line pt-5",children:[e("span",{className:`font-mono ${i.label} uppercase tracking-[0.22em] text-fg`,children:a.authorName}),e("span",{className:`font-mono ${i.label} uppercase tracking-[0.18em] text-fg-dim`,children:R(a.createdAt)})]})]},a.id))})]})})}export{z as default};
@@ -2,14 +2,12 @@ import type { ComponentProps, ReactNode } from "react";
2
2
  import { CatalogFilterLabelsProvider } from "./catalog/CatalogFilterLabels.js";
3
3
  import { SiteMenuLinksProvider } from "./catalog/SiteMenuLinks.js";
4
4
  import { CurrencyProvider } from "./CurrencyContext.js";
5
- import { SubscribePopupProvider } from "./SubscribePopupContext.js";
6
5
  export interface StorefrontProvidersProps {
7
6
  catalogFilterLabels?: ComponentProps<typeof CatalogFilterLabelsProvider>["labels"];
8
7
  englishVariant?: string | null;
9
8
  menuItems?: ComponentProps<typeof SiteMenuLinksProvider>["items"];
10
9
  currency: Omit<ComponentProps<typeof CurrencyProvider>, "children">;
11
- subscribe: Omit<ComponentProps<typeof SubscribePopupProvider>, "children">;
12
10
  searchShortcut?: boolean;
13
11
  children: ReactNode;
14
12
  }
15
- export default function StorefrontProviders({ catalogFilterLabels, englishVariant, menuItems, currency, subscribe, searchShortcut, children, }: StorefrontProvidersProps): import("react").JSX.Element;
13
+ export default function StorefrontProviders({ catalogFilterLabels, englishVariant, menuItems, currency, searchShortcut, children, }: StorefrontProvidersProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{CartProvider as d}from"./CartContext.js";import{CatalogFilterLabelsProvider as a}from"./catalog/CatalogFilterLabels.js";import{SiteMenuLinksProvider as s}from"./catalog/SiteMenuLinks.js";import{CurrencyProvider as c}from"./CurrencyContext.js";import{EnglishVariantProvider as f}from"./EnglishVariant.js";import{SearchProvider as h}from"./SearchContext.js";import{SubscribePopupProvider as p}from"./SubscribePopupContext.js";import{WishlistProvider as u}from"./WishlistContext.js";import{normalizeEnglishVariant as v}from"../lib/content/english-variant.js";function P({catalogFilterLabels:i,englishVariant:o,menuItems:e,currency:t,subscribe:m,searchShortcut:n=!0,children:l}){return r(f,{variant:v(o),children:r(a,{labels:i,children:r(s,{items:e,children:r(c,{...t,children:r(p,{...m,children:r(u,{children:r(d,{children:r(h,{shortcut:n,children:l})})})})})})})})}export{P as default};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{CartProvider as l}from"./CartContext.js";import{CatalogFilterLabelsProvider as d}from"./catalog/CatalogFilterLabels.js";import{SiteMenuLinksProvider as a}from"./catalog/SiteMenuLinks.js";import{CurrencyProvider as s}from"./CurrencyContext.js";import{EnglishVariantProvider as c}from"./EnglishVariant.js";import{SearchProvider as f}from"./SearchContext.js";import{SubscribePopupProvider as h}from"./SubscribePopupContext.js";import{WishlistProvider as p}from"./WishlistContext.js";import{normalizeEnglishVariant as u}from"../lib/content/english-variant.js";function v({catalogFilterLabels:i,englishVariant:o,menuItems:e,currency:t,searchShortcut:m=!0,children:n}){return r(c,{variant:u(o),children:r(d,{labels:i,children:r(a,{items:e,children:r(s,{...t,children:r(h,{children:r(p,{children:r(l,{children:r(f,{shortcut:m,children:n})})})})})})})})}export{v as default};
@@ -1,4 +1,3 @@
1
- import type { PopupHideAfter, PopupShowOn, PopupTrigger } from "efficient-web-builder/format/lib/content/subscribe";
2
1
  import { type NewsletterSource } from "../lib/newsletter-signup.js";
3
2
  export interface SubscribeHandover {
4
3
  email?: string;
@@ -9,25 +8,14 @@ interface PopupCtx {
9
8
  isOpen: boolean;
10
9
  mode: PopupMode;
11
10
  open: (handover?: SubscribeHandover) => void;
11
+ openByItself: () => void;
12
12
  close: () => void;
13
13
  markSent: () => void;
14
14
  prefillEmail: string;
15
15
  signupSource: NewsletterSource;
16
16
  }
17
- export interface PopupBehaviour {
18
- autoOpen?: boolean;
19
- autoOpenDelaySec?: number;
20
- trigger?: PopupTrigger;
21
- scrollPercent?: number;
22
- showOn?: PopupShowOn;
23
- showOnPages?: readonly string[];
24
- hideAfter?: PopupHideAfter;
25
- hideDays?: number;
26
- }
27
- interface ProviderProps extends PopupBehaviour {
17
+ export declare function SubscribePopupProvider({ children }: {
28
18
  children: React.ReactNode;
29
- disableAutoTrigger?: boolean;
30
- }
31
- export declare function SubscribePopupProvider({ children, disableAutoTrigger, autoOpen, autoOpenDelaySec, trigger, scrollPercent, showOn, showOnPages, hideAfter, hideDays, }: ProviderProps): import("react").JSX.Element;
19
+ }): import("react").JSX.Element;
32
20
  export declare function useSubscribePopup(): PopupCtx;
33
21
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as A}from"react/jsx-runtime";import{usePathname as G}from"next/navigation";import{createContext as j,useCallback as n,useContext as D,useEffect as I,useMemo as N,useRef as U,useState as u}from"react";import{isEditorRoute as F}from"../lib/editor-route.js";import{NEWSLETTER_SOURCE as W}from"../lib/newsletter-signup.js";import{effectiveTrigger as q,markPopupClosed as O,mayAutoOpen as z,popupAllowedOnPath as B,scrolledPercent as J}from"../lib/popup/popup-rules.js";import{safeLocalStorage as K,safeSessionStorage as Q}from"efficient-web-builder/format/lib/safe-storage";const y=j(null),a={session:Q,local:K};function V(){try{return window.matchMedia("(hover: hover) and (pointer: fine)").matches}catch{return!1}}const X=15,Z=[];function ie({children:t,disableAutoTrigger:l,autoOpen:m=!1,autoOpenDelaySec:p=X,trigger:d="delay",scrollPercent:f=50,showOn:v="all",showOnPages:w=Z,hideAfter:E="visit",hideDays:h=7}){const[S,r]=u(!1),[P,x]=u("chosen"),[s,b]=u({}),i=G()??"/",L=F(i),Y=B(i,v,w),T=U(!1),C=n(_=>{b(_??{}),x("newsletter"),r(!0)},[]),o=n(()=>{T.current=!0,b({}),x("chosen"),r(!0)},[]),R=n(()=>O(a,Date.now()),[]),M=n(()=>{r(!1),O(a,Date.now())},[]);I(()=>{if(l||T.current||!z({autoOpen:m,inEditor:L,path:i,showOn:v,showOnPages:w,hideAfter:E,hideDays:h},a,Date.now()))return;const H=q(d,V());if(H==="scroll"){const e=()=>{J(window.scrollY,window.innerHeight,document.documentElement.scrollHeight)>=f&&(window.removeEventListener("scroll",e),o())};return window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)}if(H==="exit"){const e=c=>{c.relatedTarget===null&&c.clientY<=0&&(document.removeEventListener("mouseout",e),o())};return document.addEventListener("mouseout",e),()=>document.removeEventListener("mouseout",e)}const k=window.setTimeout(o,Math.max(0,p)*1e3);return()=>window.clearTimeout(k)},[l,m,L,Y,d,p,f,E,h,o]);const g=N(()=>({isOpen:S,mode:P,open:C,close:M,markSent:R,prefillEmail:s.email??"",signupSource:s.source??W.popup}),[S,P,C,M,R,s]);return A(y.Provider,{value:g,children:t})}function ce(){const t=D(y);if(!t)throw new Error("useSubscribePopup() must be called inside <SubscribePopupProvider>. Mount the provider in app/layout.tsx.");return t}export{ie as SubscribePopupProvider,ce as useSubscribePopup};
1
+ "use client";import{jsx as x}from"react/jsx-runtime";import{createContext as v,useCallback as o,useContext as E,useMemo as C,useState as s}from"react";import{SUBSCRIBE_POPUP_SLUG as P}from"efficient-web-builder/format/lib/content/subscribe";import{NEWSLETTER_SOURCE as h}from"../lib/newsletter-signup.js";import{markPopupClosed as O,markPopupSent as w}from"efficient-web-builder/format/lib/popup/rules";import{POPUP_STORES as S}from"../lib/popup/popup-stores.js";const f=v(null);function M({children:e}){const[n,t]=s(!1),[u,p]=s("chosen"),[r,c]=s({}),i=o(b=>{c(b??{}),p("newsletter"),t(!0)},[]),a=o(()=>{c({}),p("chosen"),t(!0)},[]),l=o(()=>w(P,S,Date.now()),[]),m=o(()=>{t(!1),O(P,S,Date.now())},[]),d=C(()=>({isOpen:n,mode:u,open:i,openByItself:a,close:m,markSent:l,prefillEmail:r.email??"",signupSource:r.source??h.popup}),[n,u,i,a,m,l,r]);return x(f.Provider,{value:d,children:e})}function T(){const e=E(f);if(!e)throw new Error("useSubscribePopup() must be called inside <SubscribePopupProvider>. Mount the provider in app/layout.tsx.");return e}export{M as SubscribePopupProvider,T as useSubscribePopup};
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as a}from"react/jsx-runtime";import Y from"next/link";import{useCallback as Z,useEffect as J,useMemo as ee,useState as L}from"react";import te from"./BrandPlate.js";import{productCardEyebrow as re}from"./ProductCardEyebrow.js";import oe from"./TyreImage.js";import{useCart as ne}from"./CartContext.js";import ae from"./QuoteLink.js";import{useSiteTakesOrders as ce}from"./SiteRecordContext.js";import{useCurrency as se}from"./CurrencyContext.js";import{useTyreDetail as ie}from"./useTyreDetail.js";import le,{CARD_CHIP_CLASS as me,CARD_CHIP_LIST_CLASS as pe,CARD_CHIP_MORE_CLASS as de,CARD_CHIP_ROW_CLASS as ue,CARD_CHIP_SHAPE_CLASS as Ce,CARD_CTA_GHOST_CLASS as he,CARD_CTA_PRIMARY_CLASS as x,CARD_CTA_STACK_CLASS as fe}from"./WheelCardFrame.js";import{DEFAULT_PURCHASE_STATE as k}from"../lib/catalog/purchase.js";import{ADD_TO_BASKET_ATTR as _e}from"../lib/commerce.js";import{keepForCard as Se}from"../lib/content/field-usage.js";import{tyreModelLine as Ae}from"../lib/tyres/tyre-brand-name.js";import{tyrePagePath as Te}from"../lib/tyres/tyre-page-path.js";import{canOrderTyreVariant as ye,tyreCartLine as ge}from"../lib/tyres/tyre-purchase.js";import{EACH_UNIT as be,formatWheelPrice as Pe,FROM_PREFIX as Re,priceIn as Le,resolveWheelPrice as xe}from"../lib/wheels/price-display.js";import{formatSizeRange as ke}from"../lib/wheels/size-range.js";const N={label:"text-[length:var(--size-label,11px)]"},Ne=2,ve=[];function Ee({brand:u,brandLogo:v,brandPlate:E=!0,kindLabel:I=null,showBrand:D=!0,name:w,slug:c,sizes:s,fitSize:_=null,rimDiameters:H,prices:O,image:z,currency:S,editing:C=!1,fieldUsage:F=ve}){const A=Se(F),{add:j,open:B,warmCatalog:T}=ne(),i=ce();J(()=>{!C&&i&&T("tyre")},[C,i,T]);const{currency:W}=se(),l=xe(Le(O,S),null),$=Pe(l,S,Re),M=[s.length>0?`${s.length} ${s.length===1?"size":"sizes"}`:null,A("rim_diameter")?ke(H):null].filter(Boolean).join(" · "),m=Te(c),[U,K]=L(!1),h=Z(()=>{c&&K(!0)},[c]),{state:y,tyre:p}=ie(c??null,U),r=ee(()=>p?.variants??[],[p]),[X,q]=L(null),G=r.length===1?r[0].size:null,f=X??G,d=r.find(e=>e.size===f),n=d!=null&&ye(d,W),o=y==="ready",g=!m||y==="error"||o&&r.length===0;function Q(){!p||!d||!n||C||(j(ge(p,d,k.choice,k.qty)),B())}const b=o&&r.length>0?r.map(e=>e.size):s,P=b.slice(0,Ne),R=b.length-P.length,V=e=>["cursor-pointer transition-colors",Ce,e?"border-accent bg-accent text-bg":"border-accent/60 text-accent hover:border-accent hover:bg-accent/10"].join(" ");return t(le,{href:m,identityLink:!0,containerProps:{onPointerEnter:h,onTouchStart:h,onFocusCapture:h},image:t(oe,{image:z,className:"h-full w-full",sizes:"(max-width: 640px) 90vw, (max-width: 1024px) 45vw, 280px",showBackground:!1}),plate:E?t(te,{brand:u,logo:v}):null,eyebrow:re(I,D&&A("brand")&&u||null),name:Ae(u??"",w),spec:M,price:$,metaLine:l.priced?be:null,chips:a("div",{children:[_&&a("p",{className:`font-mono ${N.label} font-medium uppercase tracking-[0.14em] text-green`,children:["Fits · ",_]}),a("div",{className:ue,children:[t("div",{className:pe,children:P.map(e=>o&&r.length>0?t("button",{type:"button",title:e,"aria-label":e,"aria-pressed":f===e,onClick:()=>q(e),className:V(f===e),children:e},e):t("span",{className:me,children:e},e))}),R>0&&a("span",{className:de,children:["+",R]})]})]}),actions:a("div",{className:fe,children:[!g&&l.priced&&!i&&t(ae,{className:x}),!g&&l.priced&&i&&t("button",{type:"button",onClick:Q,[_e]:"",disabled:o&&!n,className:n||!o?`${x}${n?"":" opacity-80"}`:`cursor-not-allowed border border-dashed border-accent/50 px-4 py-3 font-mono ${N.label} font-bold uppercase tracking-[0.24em] text-accent/70`,children:o&&!n?"Select a size":"Add to basket"}),m&&t(Y,{href:m,className:he,children:"Open product page"})]})})}export{Ee as default};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import w from"./BrandPlate.js";import g from"./card-pieces/CardBuyButton.js";import C from"./card-pieces/CardFinishSwatches.js";import P from"./card-pieces/CardPrice.js";import b from"./card-pieces/CardSizes.js";import{TyreCardStateProvider as x,useProductCardState as S}from"./card-pieces/ProductCardState.js";import{productCardEyebrow as z}from"./ProductCardEyebrow.js";import B from"./TyreImage.js";import k from"./WheelCardFrame.js";import{keepForCard as T}from"../lib/content/field-usage.js";import{tyreModelLine as L}from"../lib/tyres/tyre-brand-name.js";import{formatSizeRange as E}from"../lib/wheels/size-range.js";const F=[];function j({brand:i,brandLogo:m,brandPlate:s=!0,kindLabel:l=null,showBrand:a=!0,name:d,slug:p,sizes:e,fitSize:t=null,rimDiameters:u,prices:c,image:o,currency:f,editing:h=!1,fieldUsage:n=F}){return r(x,{tyre:{brand:i,brandLogo:m,name:d,slug:p,sizes:e,fitSize:t,rimDiameters:u,prices:c,image:o},currency:f,editing:h,children:r(v,{brandPlate:s,kindLabel:l,showBrand:a,fieldUsage:n})})}function v({brandPlate:i,kindLabel:m,showBrand:s,fieldUsage:l}){const a=S();if(a.kind!=="tyre")throw new Error("TyrePlpCard drew outside its own tyre state.");const{tyre:d,pagePath:p,arm:e}=a,{brand:t,brandLogo:u,name:c,sizes:o,rimDiameters:f,image:h}=d,n=T(l),y=[o.length>0?`${o.length} ${o.length===1?"size":"sizes"}`:null,n("rim_diameter")?E(f):null].filter(Boolean).join(" · ");return r(k,{href:p,identityLink:!0,containerProps:{onPointerEnter:e,onTouchStart:e,onFocusCapture:e},image:r(B,{image:h,className:"h-full w-full",sizes:"(max-width: 640px) 90vw, (max-width: 1024px) 45vw, 280px",showBackground:!1}),plate:i?r(w,{brand:t,logo:u}):null,eyebrow:z(m,s&&n("brand")&&t||null),name:L(t??"",c),spec:y,price:r(P,{}),swatches:r(C,{}),sizes:r(b,{}),buy:r(g,{})})}export{j as default};
@@ -2,11 +2,6 @@ import type { ComponentProps, CSSProperties, ReactNode } from "react";
2
2
  import { type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
3
3
  export declare const CARD_ROWS_GRID_CLASS = "sf-card-rows";
4
4
  export declare const cardRowsGridStyle: (rowGap: string) => CSSProperties;
5
- export declare const CARD_CHIP_ROW_CLASS = "mt-3 flex h-[26px] items-center gap-1";
6
- export declare const CARD_CHIP_LIST_CLASS = "flex min-w-0 items-center gap-1 overflow-hidden";
7
- export declare const CARD_CHIP_MORE_CLASS: string;
8
- export declare const CARD_CHIP_SHAPE_CLASS: string;
9
- export declare const CARD_CHIP_CLASS: string;
10
5
  export declare const setPlateWidthCss: (gap: number | string) => string;
11
6
  export declare const GRID_GAP_PX = 2;
12
7
  export declare const CARD_PAD_X_PX = 32;
@@ -21,22 +16,7 @@ export type CardSpecField = string | {
21
16
  readonly accent: boolean;
22
17
  };
23
18
  export declare function cardSpecFields(fields: readonly CardSpecField[], separator?: string): ReactNode;
24
- export declare const CARD_CTA_STACK_CLASS = "mt-3 flex flex-col gap-2";
25
- export declare const CARD_CTA_PRIMARY_CLASS: string;
26
- export declare const CARD_CTA_GHOST_CLASS: string;
27
- export declare const CARD_BADGE_ANCHOR_CLASS = "absolute right-[18px] top-[18px] z-10";
28
- export declare const CARD_BADGE_ANCHOR_LEFT_CLASS = "absolute left-[18px] top-[18px] z-10";
29
- export declare function WheelCardBadge({ tone, className, children, }: {
30
- tone: "solid" | "outline";
31
- className?: string;
32
- children: ReactNode;
33
- }): import("react").JSX.Element;
34
- export declare function WheelCardCorners({ set, numbered, right, }: {
35
- set: boolean;
36
- numbered: boolean;
37
- right: ReactNode[];
38
- }): import("react").JSX.Element;
39
- export default function WheelCardFrame({ variant, wide, setGridGap, href, identityLink, outline, imageBackgroundFill, containerProps, probes, indexBadge, badges, image, imageSecond, plate, eyebrow, reserveEyebrow, name, spec, was, price, metaLine, swatches, showPrice, reserveSwatches, chips, actions, wholeCardLink, }: {
19
+ export default function WheelCardFrame({ variant, wide, setGridGap, href, identityLink, outline, imageBackgroundFill, containerProps, probes, indexBadge, badges, image, imageSecond, plate, eyebrow, reserveEyebrow, name, spec, price, swatches, sizes, buy, wholeCardLink, }: {
40
20
  variant?: "compact" | "catalog";
41
21
  wide?: boolean;
42
22
  setGridGap?: string;
@@ -55,13 +35,9 @@ export default function WheelCardFrame({ variant, wide, setGridGap, href, identi
55
35
  reserveEyebrow?: boolean;
56
36
  name: ReactNode;
57
37
  spec?: ReactNode;
58
- was?: ReactNode;
59
38
  price?: ReactNode;
60
- metaLine?: ReactNode;
61
39
  swatches?: ReactNode;
62
- showPrice?: boolean;
63
- reserveSwatches?: boolean;
64
- chips?: ReactNode;
65
- actions?: ReactNode;
40
+ sizes?: ReactNode;
41
+ buy?: ReactNode;
66
42
  wholeCardLink?: boolean;
67
43
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as l,Fragment as f}from"react/jsx-runtime";import j from"next/link";import{Fragment as z}from"react";import{cardOutlineClass as te}from"efficient-web-builder/format/lib/sections/product-card-style";import{CARD_IMAGE_BG_OFF as re,cardImageBackgroundPaints as ae,THEME_CARD_IMAGE_BG as le}from"efficient-web-builder/format/lib/content/card-image-background";const a={headingSmall1:"text-[length:var(--size-headingSmall,22px)]",headingSmall2:"text-[length:var(--size-headingSmall,30px)]",labelSmall:"text-[length:var(--size-label,11px)]",label:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},Ce="sf-card-rows",ve=e=>({rowGap:0,"--sf-card-row-gap":e}),Ae="mt-3 flex h-[26px] items-center gap-1",we="flex min-w-0 items-center gap-1 overflow-hidden",Re=`shrink-0 border border-line px-2 py-0.5 font-mono ${a.labelSmall} tracking-[0.08em] text-fg-dim`,ne=`border px-2 py-0.5 font-mono ${a.labelSmall} tracking-[0.08em] whitespace-nowrap`,$e=`${ne} border-accent/60 text-accent`,oe=e=>`calc((100% - ${typeof e=="number"?`${e}px`:e}) / 2)`,F=2,se=32,H=e=>F+2*se+(e?16:0),B=(e,r)=>r===void 0?`${H(e)}px`:`calc(${r} + ${H(e)-F}px)`,Ee=252,ce=16,Ne=800,ie="whitespace-nowrap",de=e=>typeof e=="string"?e:e.text;function De(e,r="·"){return e.map((n,o)=>{const s=de(n),d=typeof n!="string"&&n.accent;return l(z,{children:[t("span",{className:`${ie}${d?" text-accent":""}`,children:o<e.length-1?`${s} ${r}`:s}),o<e.length-1?" ":null]},s)})}const Le="mt-3 flex flex-col gap-2",ye=`cursor-pointer bg-btn px-4 py-3 font-mono ${a.labelSmall} font-bold uppercase tracking-[0.24em] text-btn-ink transition-colors hover:bg-fg`,Pe=`border border-btn px-4 py-3 text-center font-mono ${a.labelSmall} font-bold uppercase tracking-[0.24em] text-btn transition-colors hover:bg-btn hover:text-btn-ink`,pe=`border px-2 py-1 font-mono ${a.labelSmall} uppercase tracking-[0.3em]`,me="absolute right-[18px] top-[18px] z-10",xe="absolute left-[18px] top-[18px] z-10";function fe({tone:e,className:r,children:n}){return t("span",{className:[r,pe,e==="solid"?"border-accent bg-accent text-bg":"border-accent text-accent"].filter(Boolean).join(" "),children:n})}function Te({set:e,numbered:r,right:n}){const o=e?t(fe,{tone:"solid",children:"Set"}):null,s=[r?o:null,...n].filter(Boolean);return l(f,{children:[o&&!r&&t("div",{className:`${xe} pointer-events-none flex flex-col items-start gap-1`,children:o}),s.length>0&&t("div",{className:`${me} pointer-events-none flex flex-col items-end gap-1`,children:s.map((d,p)=>t(z,{children:d},p))})]})}function ge({variant:e="catalog",wide:r=!1,setGridGap:n,href:o,identityLink:s=!1,outline:d="none",imageBackgroundFill:p=re,containerProps:v,probes:g,indexBadge:h,badges:_,image:x,imageSecond:O,plate:A,eyebrow:w,reserveEyebrow:X=!1,name:W,spec:M,was:R,price:q,metaLine:$,swatches:E,showPrice:N=!0,reserveSwatches:K=!0,chips:D,actions:L,wholeCardLink:Y=!1}){const c=e==="catalog",m=ae(p),y=m&&p===le,P=y?"bg-[var(--wheel-stage)] p-2":m?"p-2":"",T=m&&!y?{backgroundColor:p}:{},k=C=>t("figure",{className:"m-0 aspect-square [flex:0_0_auto] max-w-full w-[var(--sf-set-plate-w)] max-[800px]:w-full",style:{"--sf-set-plate-w":oe(B(m,n))},children:C}),Z=c?l("div",{className:r?`relative mt-2 mb-5 flex items-center justify-center [&_img]:object-top max-[800px]:flex-col ${P}`:`relative mt-2 mb-5 flex aspect-square items-center justify-center overflow-hidden [&_img]:object-top ${P}`,style:r?{...T,borderRadius:10,columnGap:B(m,n),rowGap:ce}:{...T,borderRadius:"var(--sf-card-image-radius, 10px)"},children:[r?l(f,{children:[k(x),k(O??x)]}):x,A]}):l("div",{className:"relative mb-5 aspect-square overflow-hidden bg-bg p-8 [&_img]:object-top",style:{borderRadius:"var(--sf-card-image-radius, 10px)"},children:[x,A]}),G=`font-mono ${a.label} uppercase text-accent ${c?"tracking-[0.3em]":"tracking-[0.25em]"}`,J=w?t("div",{className:G,children:w}):c&&X?t("div",{"aria-hidden":!0,className:G,children:" "}):null,Q=t("div",{className:c?`mt-2 h-[60px] overflow-hidden break-words [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[60px] font-heading3 ${a.headingSmall2} font-medium uppercase leading-none tracking-[-0.02em]`:`mt-2 font-heading3 ${a.headingSmall1} font-medium tracking-[-0.02em]`,children:W}),U=t("div",{className:c?`mt-2 h-[38px] overflow-hidden [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[76px] font-mono ${a.labelLarge} leading-[19px] tracking-[0.14em] text-fg-dim`:`mt-[4px] font-mono ${a.labelLarge} tracking-[0.1em] text-fg-dim`,children:M}),V=N?l("div",{className:`mt-2 font-mono ${a.labelLarge}`,children:[R&&t("span",{className:"mr-2 text-fg-dim line-through",children:R}),q]}):null,ee=N&&$?t("div",{className:`mt-[2px] font-mono ${a.labelSmall} tracking-[0.08em] text-fg-dim`,children:$}):null,I=c&&!E?K?t("div",{"aria-hidden":!0,className:"mt-4 h-4"}):null:E,u=[c?"sf-card sf-card-fill group relative flex min-h-[460px] flex-col bg-[var(--card-bg)] px-8 pt-8 pb-8 transition-colors duration-200 hover:bg-[var(--card-bg-hover)] [.sf-card-rows>&]:row-span-9 [.sf-card-rows>&]:mb-[var(--sf-card-row-gap)] [.sf-card-rows>&]:grid [.sf-card-rows>&]:grid-rows-subgrid [.sf-card-rows>&]:gap-y-0":"sf-card sf-card-fill group relative block bg-[var(--card-bg)] p-5 transition-colors duration-300 hover:bg-[var(--card-bg-hover)]",te(d),r?"col-span-2 max-[800px]:col-span-1 @max-[720px]:col-span-1":""].filter(Boolean).join(" "),i=C=>C??(c?t("div",{"aria-hidden":!0}):null),b=l(f,{children:[Z,i(J),Q]}),S=l(f,{children:[U,i(V),i(ee),i(I?t("div",{className:"relative z-10",children:I}):null),i(D?t("div",{className:"relative z-10",children:D}):null),i(L?t("div",{className:"relative z-10 [.sf-card-rows>*>&]:self-end",children:L}):null)]});return o?s?l("article",{...v,className:u,children:[g,h,_,t(j,{href:o,className:`flex flex-col ${Y?"after:absolute after:inset-0 after:content-['']":""} [.sf-card-rows>*>&]:row-span-3 [.sf-card-rows>*>&]:grid [.sf-card-rows>*>&]:grid-rows-subgrid [.sf-card-rows>*>&]:gap-y-0`,children:b}),S]}):l(j,{href:o,className:u,children:[g,h,_,b,S]}):l("article",{...v,className:u,children:[g,h,_,b,S]})}export{me as CARD_BADGE_ANCHOR_CLASS,xe as CARD_BADGE_ANCHOR_LEFT_CLASS,$e as CARD_CHIP_CLASS,we as CARD_CHIP_LIST_CLASS,Re as CARD_CHIP_MORE_CLASS,Ae as CARD_CHIP_ROW_CLASS,ne as CARD_CHIP_SHAPE_CLASS,Pe as CARD_CTA_GHOST_CLASS,ye as CARD_CTA_PRIMARY_CLASS,Le as CARD_CTA_STACK_CLASS,se as CARD_PAD_X_PX,Ce as CARD_ROWS_GRID_CLASS,ie as CARD_SPEC_FIELD_CLASS,F as GRID_GAP_PX,Ee as SET_PLATE_PX,ce as SET_STACK_GAP_PX,Ne as SET_STACK_MAX_PX,fe as WheelCardBadge,Te as WheelCardCorners,ve as cardRowsGridStyle,De as cardSpecFields,ge as default,B as setBandGapCss,H as setBandGapPx,oe as setPlateWidthCss};
1
+ "use client";import{jsx as r,jsxs as a,Fragment as p}from"react/jsx-runtime";import N from"next/link";import{Fragment as z}from"react";import{CARD_TEXT_SIZE as d,CardLookContext as J,CardRow as n}from"./card-pieces/card-row.js";import{cardOutlineClass as Q}from"efficient-web-builder/format/lib/sections/product-card-style";import{CARD_IMAGE_BG_OFF as U,cardImageBackgroundPaints as V,THEME_CARD_IMAGE_BG as Y}from"efficient-web-builder/format/lib/content/card-image-background";const pe="sf-card-rows",fe=e=>({rowGap:0,"--sf-card-row-gap":e}),ee=e=>`calc((100% - ${typeof e=="number"?`${e}px`:e}) / 2)`,G=2,re=32,j=e=>G+2*re+(e?16:0),k=(e,t)=>t===void 0?`${j(e)}px`:`calc(${t} + ${j(e)-G}px)`,xe=252,ae=16,ge=800,te="whitespace-nowrap",se=e=>typeof e=="string"?e:e.text;function he(e,t="·"){return e.map((s,o)=>{const l=se(s),f=typeof s!="string"&&s.accent;return a(z,{children:[r("span",{className:`${te}${f?" text-accent":""}`,children:o<e.length-1?`${l} ${t}`:l}),o<e.length-1?" ":null]},l)})}function oe({variant:e="catalog",wide:t=!1,setGridGap:s,href:o,identityLink:l=!1,outline:f="none",imageBackgroundFill:x=U,containerProps:S,probes:g,indexBadge:h,badges:u,image:m,imageSecond:D,plate:A,eyebrow:$,reserveEyebrow:X=!1,name:F,spec:I,price:L,swatches:M,sizes:W,buy:q,wholeCardLink:O=!1}){const c=e==="catalog",i=V(x),E=i&&x===Y,y=E?"bg-[var(--wheel-stage)] p-2":i?"p-2":"",P=i&&!E?{backgroundColor:x}:{},R=C=>r("figure",{className:"m-0 aspect-square [flex:0_0_auto] max-w-full w-[var(--sf-set-plate-w)] max-[800px]:w-full",style:{"--sf-set-plate-w":ee(k(i,s))},children:C}),B=c?a("div",{className:t?`relative mt-2 mb-5 flex items-center justify-center [&_img]:object-top max-[800px]:flex-col ${y}`:`relative mt-2 mb-5 flex aspect-square items-center justify-center overflow-hidden [&_img]:object-top ${y}`,style:t?{...P,borderRadius:10,columnGap:k(i,s),rowGap:ae}:{...P,borderRadius:"var(--sf-card-image-radius, 10px)"},children:[t?a(p,{children:[R(m),R(D??m)]}):m,A]}):a("div",{className:"relative mb-5 aspect-square overflow-hidden bg-bg p-8 [&_img]:object-top",style:{borderRadius:"var(--sf-card-image-radius, 10px)"},children:[m,A]}),T=`font-mono ${d.label} uppercase text-accent ${c?"tracking-[0.3em]":"tracking-[0.25em]"}`,K=$?r("div",{className:T,children:$}):c&&X?r("div",{"aria-hidden":!0,className:T,children:" "}):null,Z=r("div",{className:c?`mt-2 h-[60px] overflow-hidden break-words [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[60px] font-heading3 ${d.headingSmall2} font-medium uppercase leading-none tracking-[-0.02em]`:`mt-2 font-heading3 ${d.headingSmall1} font-medium tracking-[-0.02em]`,children:F}),H=r("div",{className:c?`mt-2 h-[38px] overflow-hidden [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[76px] font-mono ${d.labelLarge} leading-[19px] tracking-[0.14em] text-fg-dim`:`mt-[4px] font-mono ${d.labelLarge} tracking-[0.1em] text-fg-dim`,children:I}),_=[c?"sf-card sf-card-fill group relative flex min-h-[460px] flex-col bg-[var(--card-bg)] px-8 pt-8 pb-8 transition-colors duration-200 hover:bg-[var(--card-bg-hover)] [.sf-card-rows>&]:row-span-9 [.sf-card-rows>&]:mb-[var(--sf-card-row-gap)] [.sf-card-rows>&]:grid [.sf-card-rows>&]:grid-rows-subgrid [.sf-card-rows>&]:gap-y-0":"sf-card sf-card-fill group relative block bg-[var(--card-bg)] p-5 transition-colors duration-300 hover:bg-[var(--card-bg-hover)]",Q(f),t?"col-span-2 max-[800px]:col-span-1 @max-[720px]:col-span-1":""].filter(Boolean).join(" "),w=a(p,{children:[B,r(n,{children:K}),Z]}),b=a(p,{children:[H,L??a(p,{children:[r(n,{}),r(n,{})]}),M??r(n,{}),W??r(n,{}),q??r(n,{})]}),v=C=>r(J.Provider,{value:e,children:C});return v(o?l?a("article",{...S,className:_,children:[g,h,u,r(N,{href:o,className:`flex flex-col ${O?"after:absolute after:inset-0 after:content-['']":""} [.sf-card-rows>*>&]:row-span-3 [.sf-card-rows>*>&]:grid [.sf-card-rows>*>&]:grid-rows-subgrid [.sf-card-rows>*>&]:gap-y-0`,children:w}),b]}):a(N,{href:o,className:_,children:[g,h,u,w,b]}):a("article",{...S,className:_,children:[g,h,u,w,b]}))}export{re as CARD_PAD_X_PX,pe as CARD_ROWS_GRID_CLASS,te as CARD_SPEC_FIELD_CLASS,G as GRID_GAP_PX,xe as SET_PLATE_PX,ae as SET_STACK_GAP_PX,ge as SET_STACK_MAX_PX,fe as cardRowsGridStyle,he as cardSpecFields,oe as default,k as setBandGapCss,j as setBandGapPx,ee as setPlateWidthCss};
@@ -0,0 +1,7 @@
1
+ export declare const CARD_PAGE_WORDS = "View sizes & fitment";
2
+ export interface CardBuyButtonSettings {
3
+ buy?: boolean;
4
+ page?: boolean;
5
+ }
6
+ export default function CardBuyButton({ buy, page }: CardBuyButtonSettings): import("react").JSX.Element;
7
+ export declare function CardBuyDialog(): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as r,jsxs as b}from"react/jsx-runtime";import O from"next/link";import{useEffect as h}from"react";import{useCart as g}from"../CartContext.js";import C from"../QuoteLink.js";import{useSiteTakesOrders as S}from"../SiteRecordContext.js";import D from"../wheels-plp/PlpNotifyMeDialog.js";import{DEFAULT_PURCHASE_STATE as k}from"../../lib/catalog/purchase.js";import{ADD_TO_BASKET_ATTR as _}from"../../lib/commerce.js";import{tyreCartLine as R}from"../../lib/tyres/tyre-purchase.js";import{priceIn as E,resolveWheelPrice as v}from"../../lib/wheels/price-display.js";import{isOneWheelDesign as B,setLabel as z}from"../../lib/wheels/variants.js";import{splitWheelName as L}from"../../lib/wheels/wheel-name.js";import{CARD_TEXT_SIZE as A,CardButtonRow as N}from"./card-row.js";import{useProductCardState as $,useWheelCardState as P}from"./ProductCardState.js";const T="mt-3 flex flex-col gap-2",u=`cursor-pointer bg-btn px-4 py-3 font-mono ${A.labelSmall} font-bold uppercase tracking-[0.24em] text-btn-ink transition-colors hover:bg-fg`,w=`border border-btn px-4 py-3 text-center font-mono ${A.labelSmall} font-bold uppercase tracking-[0.24em] text-btn transition-colors hover:bg-btn hover:text-btn-ink`,W="View sizes & fitment",j="mt-3 block font-mono text-[length:var(--size-label,11px)] font-bold uppercase tracking-[0.18em] text-accent underline-offset-4 group-hover:underline";function V({wheel:t,sel:e,price:o,editing:i}){const{addAndOpen:s,warmCatalog:c}=g();h(()=>{i||c()},[i,c]);const{arm:a}=e;h(()=>{a()},[a]);function l(){const n=e.selectedVariant;!n||!e.canAdd||o.priced&&(i||s({id:`${t.slug}|${n.finishName}|${n.size}|quick`,slug:t.slug,name:L(t.name),process:t.process,positionNo:"01",config:[{label:n.size},{label:n.finishName,gold:!0},{label:z(n)}],finishName:n.finishName,size:n.size,components:n.components,qty:1}))}return r("button",{type:"button",onClick:l,[_]:"",disabled:!e.canAdd,className:e.canAdd?u:`${u} opacity-80`,children:"Add to basket"})}function q(t,e,o){return B(t)?e.outOfStock?"notify":e.unsellable||!o||e.detailState==="ready"&&!e.canAdd?"choose":"add":"choose"}function F({state:t,buy:e,page:o}){const{wheel:i,sel:s,price:c,editing:a,setNotifyOpen:l}=t,n=S(),d=q(i,s,c.priced),m=e?d==="notify"?r("button",{type:"button",onClick:()=>l(!0),className:u,children:"Notify me when back"}):d==="add"?n?r(V,{wheel:i,sel:s,price:c,editing:a}):r(C,{className:u}):null:null,f=!o||m?null:b("span",{"aria-hidden":!0,className:j,children:[W," →"]});return r(N,{children:m||f?b("div",{className:T,children:[m,f]}):null})}function G({state:t}){const{tyre:e,currency:o,pagePath:i,detail:s,variant:c,canAdd:a,detailReady:l,unsellable:n,editing:d}=t,{addAndOpen:m,warmCatalog:f}=g(),p=S();h(()=>{!d&&p&&f("tyre")},[d,p,f]);const y=v(E(e.prices,o),null).priced;function x(){!s||!c||!a||d||m(R(s,c,k.choice,k.qty))}return r(N,{children:b("div",{className:T,children:[!n&&y&&!p&&r(C,{className:u}),!n&&y&&p&&r("button",{type:"button",onClick:x,[_]:"",disabled:l&&!a,className:a||!l?`${u}${a?"":" opacity-80"}`:`cursor-not-allowed border border-dashed border-accent/50 px-4 py-3 font-mono ${A.labelSmall} font-bold uppercase tracking-[0.24em] text-accent/70`,children:l&&!a?"Select a size":"Add to basket"}),i&&r(O,{href:i,className:w,children:"Open product page"})]})})}function I({buy:t=!0,page:e=!0}){const o=$();return o.kind==="tyre"?r(G,{state:o}):r(F,{state:o,buy:t,page:e})}function ae(){const{wheel:t,sel:e,editing:o,notifyOpen:i,setNotifyOpen:s}=P();return i?r(D,{wheelName:t.name,productSlug:t.slug,finishName:e.confirmedFinishName,variants:e.outOfStockVariants,initialSize:e.selectedVariant?.size,onClose:()=>s(!1),editing:o}):null}export{W as CARD_PAGE_WORDS,ae as CardBuyDialog,I as default};
@@ -0,0 +1,5 @@
1
+ export interface CardFinishSwatchesSettings {
2
+ show?: boolean;
3
+ showSingle?: boolean;
4
+ }
5
+ export default function CardFinishSwatches({ show, showSingle }: CardFinishSwatchesSettings): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import n from"../FinishSwatches.js";import{CardControlRow as a,useCatalogCard as d}from"./card-row.js";import{useProductCardState as c}from"./ProductCardState.js";function h({show:i=!0,showSingle:l=!1}){const s=c(),o=d(),e=s.kind==="wheel"?s.sel:null,r=e!=null&&(l?e.finishes.length>0&&e.availability.some(Boolean):e.showSwatches);return i&&e&&r?t(a,{children:t(n,{finishes:e.finishes,availability:e.availability,selectedIdx:e.selectedIdx,hoverIdx:e.hoverIdx,activeFinish:e.finish,onSelect:e.setSelectedIdx,onHover:e.setHoverIdx,showLabel:!1})}):t(a,{children:o&&i?t("div",{"aria-hidden":!0,className:"mt-4 h-4"}):null})}export{h as default};
@@ -0,0 +1,7 @@
1
+ export interface CardPriceSettings {
2
+ show?: boolean;
3
+ quoteSets?: boolean;
4
+ setTotal?: boolean;
5
+ wasFollowsSize?: boolean;
6
+ }
7
+ export default function CardPrice({ show, ...settings }: CardPriceSettings): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as c,jsxs as m,Fragment as _}from"react/jsx-runtime";import{formatPrice as w}from"../../lib/commerce.js";import{setLabel as x}from"../../lib/wheels/variants.js";import{wheelCardPriceLine as u}from"../../lib/wheels/set-mode.js";import{EACH_UNIT as T,formatSelectionPrice as E,formatSelectionWasPrice as C,formatWheelPrice as d,formatWheelWasPrice as W,FROM_PREFIX as f,priceIn as g,resolveWheelPrice as p,SET_QUOTE_LABEL as y}from"../../lib/wheels/price-display.js";import{CARD_TEXT_SIZE as h,CardRow as P}from"./card-row.js";import{useProductCardState as F}from"./ProductCardState.js";function L(r,n){if(r.kind==="tyre"){const s=p(g(r.tyre.prices,r.currency),null);return{was:null,amount:d(s,r.currency,f),note:s.priced?T:null}}const{wheel:l,currency:e,price:t,sel:o,isSet:S}=r,i=p(l.prices[e],l.msrpPrices?.[e]),a=n.setTotal&&t.priced&&t.setTotal!=null&&o.selectedVariant?`${x(o.selectedVariant)} · ${w(t.setTotal,e)}`:null;return S&&n.quoteSets?{was:null,amount:i.priced?u(d(i,e,f),!0):y,note:a}:{was:n.wasFollowsSize?C(t,e):W(i,e),amount:u(E(t,e),t.priced),note:a}}function j({show:r=!0,...n}){const l=F(),{was:e,amount:t,note:o}=L(l,n);return m(_,{children:[c(P,{children:r?m("div",{className:`mt-2 font-mono ${h.labelLarge}`,children:[e&&c("span",{className:"mr-2 text-fg-dim line-through",children:e}),t]}):null}),c(P,{children:r&&o?c("div",{className:`mt-[2px] font-mono ${h.labelSmall} tracking-[0.08em] text-fg-dim`,children:o}):null})]})}export{j as default};