efficient-storefront-blocks 0.86.0 → 0.88.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 (272) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/chunks/{EditorPreviewCheckout-4LNXFNN7.js → EditorPreviewCheckout-ZGPS3Q3X.js} +1 -1
  3. package/dist/chunks/{SiteEditorProvider-A2HMVDKS.js → SiteEditorProvider-HZ47WOEX.js} +1 -1
  4. package/dist/chunks/{chunk-TGBNREUJ.js → chunk-7C2YH2AQ.js} +1 -1
  5. package/dist/chunks/chunk-O7GCI2MP.js +1 -0
  6. package/dist/chunks/chunk-RHNDIM7Z.js +382 -0
  7. package/dist/chunks/chunk-VOK5N3IB.js +1 -0
  8. package/dist/chunks/{fitment-data-TSYW6AFA.js → fitment-data-SH4US3BV.js} +1 -1
  9. package/dist/contract.js +32 -2
  10. package/dist/editor/components/CategorySource.d.ts +8 -1
  11. package/dist/editor/components/CategorySource.js +1 -1
  12. package/dist/editor/components/CollectionPicker.js +1 -1
  13. package/dist/editor/components/EditProductLink.js +1 -1
  14. package/dist/editor/components/FinishPicker.js +1 -1
  15. package/dist/editor/components/FormPicker.js +1 -1
  16. package/dist/editor/components/GalleryShowcaseSource.js +1 -1
  17. package/dist/editor/components/HeaderSettingsPanel.js +1 -1
  18. package/dist/editor/components/ProductHeroSource.js +1 -1
  19. package/dist/editor/components/ProductPicker.js +1 -1
  20. package/dist/editor/components/ReviewsProductSource.js +1 -1
  21. package/dist/editor/components/SocialLinksDoor.js +1 -1
  22. package/dist/editor/components/SpecTableSource.js +1 -1
  23. package/dist/editor/lib/document/blocks/commerce/BundleOffer/fields.js +1 -1
  24. package/dist/editor/lib/document/blocks/commerce/FilterBlock/fields.d.ts +2 -0
  25. package/dist/editor/lib/document/blocks/commerce/FilterBlock/fields.js +1 -0
  26. package/dist/editor/lib/document/blocks/commerce/FilterChipsBlock/fields.d.ts +2 -0
  27. package/dist/editor/lib/document/blocks/commerce/FilterChipsBlock/fields.js +1 -0
  28. package/dist/editor/lib/document/blocks/commerce/GalleryItem/fields.js +1 -1
  29. package/dist/editor/lib/document/blocks/commerce/ProductBuy/fields.d.ts +2 -0
  30. package/dist/editor/lib/document/blocks/commerce/ProductBuy/fields.js +1 -0
  31. package/dist/editor/lib/document/blocks/commerce/ProductBuyButton/fields.d.ts +2 -0
  32. package/dist/editor/lib/document/blocks/commerce/ProductBuyButton/fields.js +1 -0
  33. package/dist/editor/lib/document/blocks/commerce/ProductEyebrow/fields.d.ts +2 -0
  34. package/dist/editor/lib/document/blocks/commerce/ProductEyebrow/fields.js +1 -0
  35. package/dist/editor/lib/document/blocks/commerce/ProductGrid/fields.js +1 -1
  36. package/dist/editor/lib/document/blocks/commerce/ProductName/fields.d.ts +2 -0
  37. package/dist/editor/lib/document/blocks/commerce/ProductName/fields.js +1 -0
  38. package/dist/editor/lib/document/blocks/commerce/ProductPicture/fields.d.ts +2 -0
  39. package/dist/editor/lib/document/blocks/commerce/ProductPicture/fields.js +1 -0
  40. package/dist/editor/lib/document/blocks/commerce/ProductSpecs/fields.d.ts +2 -0
  41. package/dist/editor/lib/document/blocks/commerce/ProductSpecs/fields.js +1 -0
  42. package/dist/editor/lib/document/blocks/commerce/RelatedProducts/fields.js +1 -1
  43. package/dist/editor/lib/document/blocks/commerce/controls.d.ts +4 -0
  44. package/dist/editor/lib/document/blocks/commerce/controls.js +1 -1
  45. package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
  46. package/dist/editor/lib/document/blocks/commerce/index.js +1 -1
  47. package/dist/editor/lib/document/config.js +1 -1
  48. package/dist/editor/lib/document/section-text-regions.js +1 -1
  49. package/dist/editor/lib/editor-words-kept.d.ts +1 -0
  50. package/dist/editor/lib/editor-words-kept.js +1 -0
  51. package/dist/editor/lib/efficient-backend.d.ts +7 -1
  52. package/dist/editor/lib/efficient-backend.js +1 -1
  53. package/dist/editor/lib/storefront-document.js +1 -1
  54. package/dist/editor/lib/storefront-editor-words.d.ts +40 -12
  55. package/dist/editor/lib/storefront-editor-words.js +1 -1
  56. package/dist/editor.css +1 -1
  57. package/dist/fitment.js +1 -1
  58. package/dist/index.js +136 -83
  59. package/dist/links.js +1 -1
  60. package/dist/render/app/fonts/fallbacks.css +8 -0
  61. package/dist/render/app/fonts/jost/OFL.txt +93 -0
  62. package/dist/render/app/fonts/jost/cyrillic-italic.woff2 +0 -0
  63. package/dist/render/app/fonts/jost/cyrillic.woff2 +0 -0
  64. package/dist/render/app/fonts/jost/latin-ext-italic.woff2 +0 -0
  65. package/dist/render/app/fonts/jost/latin-ext.woff2 +0 -0
  66. package/dist/render/app/fonts/jost/latin-italic.woff2 +0 -0
  67. package/dist/render/app/fonts/jost/latin.woff2 +0 -0
  68. package/dist/render/app/globals.css +122 -11
  69. package/dist/render/built-with.json +1 -1
  70. package/dist/render/components/BundleCard.d.ts +2 -1
  71. package/dist/render/components/BundleCard.js +1 -1
  72. package/dist/render/components/Events.js +1 -1
  73. package/dist/render/components/FitmentTable.d.ts +1 -1
  74. package/dist/render/components/FitmentTable.js +1 -1
  75. package/dist/render/components/FooterMenu.d.ts +5 -1
  76. package/dist/render/components/FooterMenu.js +1 -1
  77. package/dist/render/components/GalleryGrid.js +1 -1
  78. package/dist/render/components/GalleryItem.d.ts +11 -1
  79. package/dist/render/components/GalleryItem.js +1 -1
  80. package/dist/render/components/GridCardTemplate.d.ts +40 -0
  81. package/dist/render/components/GridCardTemplate.js +1 -0
  82. package/dist/render/components/MenuLinkBlock.d.ts +5 -1
  83. package/dist/render/components/MenuLinkBlock.js +1 -1
  84. package/dist/render/components/ProductCardChrome.d.ts +1 -1
  85. package/dist/render/components/ProductCardChrome.js +1 -1
  86. package/dist/render/components/ProductGridSection.d.ts +9 -15
  87. package/dist/render/components/ProductGridSection.js +1 -1
  88. package/dist/render/components/ProductHeroPanel.js +1 -1
  89. package/dist/render/components/ProductRef.d.ts +8 -2
  90. package/dist/render/components/ProductRef.js +1 -1
  91. package/dist/render/components/SectionBand.d.ts +3 -2
  92. package/dist/render/components/SectionBand.js +1 -1
  93. package/dist/render/components/StorefrontProviders.d.ts +1 -1
  94. package/dist/render/components/StorefrontProviders.js +1 -1
  95. package/dist/render/components/TyreCard.js +1 -1
  96. package/dist/render/components/TyreFitVerdicts.d.ts +2 -1
  97. package/dist/render/components/TyreFitVerdicts.js +1 -1
  98. package/dist/render/components/TyrePlpCard.js +1 -1
  99. package/dist/render/components/card-pieces/CardBuyButton.d.ts +8 -1
  100. package/dist/render/components/card-pieces/CardBuyButton.js +1 -1
  101. package/dist/render/components/card-pieces/CardEyebrow.d.ts +3 -1
  102. package/dist/render/components/card-pieces/CardEyebrow.js +1 -1
  103. package/dist/render/components/card-pieces/CardName.d.ts +4 -1
  104. package/dist/render/components/card-pieces/CardName.js +1 -1
  105. package/dist/render/components/card-pieces/CardPrice.d.ts +2 -6
  106. package/dist/render/components/card-pieces/CardPrice.js +1 -1
  107. package/dist/render/components/card-pieces/CardProductBadge.d.ts +2 -1
  108. package/dist/render/components/card-pieces/CardProductBadge.js +1 -1
  109. package/dist/render/components/card-pieces/CardProductPicture.d.ts +13 -0
  110. package/dist/render/components/card-pieces/CardProductPicture.js +1 -0
  111. package/dist/render/components/card-pieces/CardSpecs.js +1 -1
  112. package/dist/render/components/card-pieces/HostPart.js +1 -1
  113. package/dist/render/components/card-pieces/ProductCardState.d.ts +25 -6
  114. package/dist/render/components/card-pieces/ProductCardState.js +1 -1
  115. package/dist/render/components/card-pieces/card-text-region.d.ts +18 -0
  116. package/dist/render/components/card-pieces/card-text-region.js +1 -0
  117. package/dist/render/components/catalog/CatalogFilterContext.d.ts +4 -1
  118. package/dist/render/components/catalog/CatalogFilterContext.js +1 -1
  119. package/dist/render/components/catalog/ClearAllButton.d.ts +4 -0
  120. package/dist/render/components/catalog/ClearAllButton.js +1 -0
  121. package/dist/render/components/catalog/FilterPill.d.ts +4 -2
  122. package/dist/render/components/catalog/FilterPill.js +1 -1
  123. package/dist/render/components/catalog/ShopperChips.d.ts +13 -0
  124. package/dist/render/components/catalog/ShopperChips.js +1 -0
  125. package/dist/render/components/catalog/ShopperFilters.d.ts +20 -0
  126. package/dist/render/components/catalog/ShopperFilters.js +1 -0
  127. package/dist/render/components/catalog/ShopperScope.d.ts +72 -0
  128. package/dist/render/components/catalog/ShopperScope.js +3 -0
  129. package/dist/render/components/catalog/SortSelect.js +1 -1
  130. package/dist/render/components/fitment/StockFitmentPart.d.ts +8 -1
  131. package/dist/render/components/fitment/StockFitmentPart.js +1 -1
  132. package/dist/render/components/fitment/fitment-answer-source.d.ts +12 -0
  133. package/dist/render/components/fitment/fitment-answer-source.js +1 -0
  134. package/dist/render/components/pdp-dynamic/DynamicFitmentTable.js +1 -1
  135. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.d.ts +10 -12
  136. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.js +1 -1
  137. package/dist/render/components/pdp-dynamic/DynamicSpecTable.js +1 -1
  138. package/dist/render/components/pdp-dynamic/DynamicTyreSizes.js +1 -1
  139. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  140. package/dist/render/components/wheels-plp/PlpActiveChips.js +1 -1
  141. package/dist/render/components/wheels-plp/PlpCard.d.ts +1 -1
  142. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  143. package/dist/render/components/wheels-plp/PlpPagination.d.ts +2 -1
  144. package/dist/render/components/wheels-plp/PlpPagination.js +1 -1
  145. package/dist/render/components/wheels-plp/PlpSidebar.js +1 -1
  146. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.d.ts +2 -0
  147. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.js +1 -1
  148. package/dist/render/lib/api/index.d.ts +6 -0
  149. package/dist/render/lib/api/index.js +1 -1
  150. package/dist/render/lib/catalog/related-cards.d.ts +4 -1
  151. package/dist/render/lib/catalog/relationships.d.ts +9 -2
  152. package/dist/render/lib/catalog/relationships.js +1 -1
  153. package/dist/render/lib/commerce.d.ts +2 -0
  154. package/dist/render/lib/commerce.js +1 -1
  155. package/dist/render/lib/content/article-body.js +1 -5
  156. package/dist/render/lib/content/field-usage.d.ts +1 -0
  157. package/dist/render/lib/content/field-usage.js +1 -1
  158. package/dist/render/lib/content/filter-card-seed.d.ts +10 -0
  159. package/dist/render/lib/content/filter-card-seed.js +1 -0
  160. package/dist/render/lib/content/product-card-seed.d.ts +34 -0
  161. package/dist/render/lib/content/product-card-seed.js +1 -0
  162. package/dist/render/lib/content/tab-strip.d.ts +17 -0
  163. package/dist/render/lib/content/tab-strip.js +1 -0
  164. package/dist/render/lib/document/blocks/commerce/BundleOffer/meta.js +1 -1
  165. package/dist/render/lib/document/blocks/commerce/BundleOffer/render.js +1 -1
  166. package/dist/render/lib/document/blocks/commerce/FilterBlock/meta.d.ts +8 -0
  167. package/dist/render/lib/document/blocks/commerce/FilterBlock/meta.js +1 -0
  168. package/dist/render/lib/document/blocks/commerce/FilterBlock/render.d.ts +2 -0
  169. package/dist/render/lib/document/blocks/commerce/FilterBlock/render.js +1 -0
  170. package/dist/render/lib/document/blocks/commerce/FilterChipsBlock/meta.d.ts +8 -0
  171. package/dist/render/lib/document/blocks/commerce/FilterChipsBlock/meta.js +1 -0
  172. package/dist/render/lib/document/blocks/commerce/FilterChipsBlock/render.d.ts +2 -0
  173. package/dist/render/lib/document/blocks/commerce/FilterChipsBlock/render.js +1 -0
  174. package/dist/render/lib/document/blocks/commerce/GalleryB/meta.js +1 -1
  175. package/dist/render/lib/document/blocks/commerce/GalleryItem/render.js +1 -1
  176. package/dist/render/lib/document/blocks/commerce/ProductBuy/meta.d.ts +2 -0
  177. package/dist/render/lib/document/blocks/commerce/ProductBuy/meta.js +1 -0
  178. package/dist/render/lib/document/blocks/commerce/ProductBuy/render.d.ts +2 -0
  179. package/dist/render/lib/document/blocks/commerce/ProductBuy/render.js +1 -0
  180. package/dist/render/lib/document/blocks/commerce/ProductBuyButton/meta.d.ts +2 -0
  181. package/dist/render/lib/document/blocks/commerce/ProductBuyButton/meta.js +1 -0
  182. package/dist/render/lib/document/blocks/commerce/ProductBuyButton/render.d.ts +2 -0
  183. package/dist/render/lib/document/blocks/commerce/ProductBuyButton/render.js +1 -0
  184. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/meta.d.ts +2 -0
  185. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/meta.js +1 -0
  186. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/render.d.ts +2 -0
  187. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/render.js +1 -0
  188. package/dist/render/lib/document/blocks/commerce/ProductGrid/meta.d.ts +4 -0
  189. package/dist/render/lib/document/blocks/commerce/ProductGrid/meta.js +1 -1
  190. package/dist/render/lib/document/blocks/commerce/ProductGrid/render.js +1 -1
  191. package/dist/render/lib/document/blocks/commerce/ProductHero/meta.js +1 -1
  192. package/dist/render/lib/document/blocks/commerce/ProductName/meta.d.ts +2 -0
  193. package/dist/render/lib/document/blocks/commerce/ProductName/meta.js +1 -0
  194. package/dist/render/lib/document/blocks/commerce/ProductName/render.d.ts +2 -0
  195. package/dist/render/lib/document/blocks/commerce/ProductName/render.js +1 -0
  196. package/dist/render/lib/document/blocks/commerce/ProductPicture/meta.d.ts +2 -0
  197. package/dist/render/lib/document/blocks/commerce/ProductPicture/meta.js +1 -0
  198. package/dist/render/lib/document/blocks/commerce/ProductPicture/render.d.ts +2 -0
  199. package/dist/render/lib/document/blocks/commerce/ProductPicture/render.js +1 -0
  200. package/dist/render/lib/document/blocks/commerce/ProductPrice/render.js +1 -1
  201. package/dist/render/lib/document/blocks/commerce/ProductSpecs/meta.d.ts +2 -0
  202. package/dist/render/lib/document/blocks/commerce/ProductSpecs/meta.js +1 -0
  203. package/dist/render/lib/document/blocks/commerce/ProductSpecs/render.d.ts +2 -0
  204. package/dist/render/lib/document/blocks/commerce/ProductSpecs/render.js +1 -0
  205. package/dist/render/lib/document/blocks/commerce/RelatedProducts/meta.d.ts +0 -4
  206. package/dist/render/lib/document/blocks/commerce/RelatedProducts/meta.js +1 -1
  207. package/dist/render/lib/document/blocks/commerce/RelatedProducts/render.js +1 -1
  208. package/dist/render/lib/document/blocks/commerce/StockFitment/meta.js +1 -1
  209. package/dist/render/lib/document/blocks/commerce/metas.d.ts +8 -0
  210. package/dist/render/lib/document/blocks/commerce/metas.js +1 -1
  211. package/dist/render/lib/document/blocks/commerce/renders.d.ts +8 -0
  212. package/dist/render/lib/document/blocks/commerce/renders.js +1 -1
  213. package/dist/render/lib/document/blocks/text-part-shapes.json +0 -16
  214. package/dist/render/lib/document/card-templates.d.ts +1 -0
  215. package/dist/render/lib/document/card-templates.js +1 -1
  216. package/dist/render/lib/document/document-nodes.d.ts +24 -0
  217. package/dist/render/lib/document/document-nodes.js +1 -0
  218. package/dist/render/lib/document/footer-page-blocks.js +1 -1
  219. package/dist/render/lib/document/lazy-draws.js +1 -1
  220. package/dist/render/lib/document/render-config.js +1 -1
  221. package/dist/render/lib/document/storefront-root.js +1 -1
  222. package/dist/render/lib/font-table.json +209 -1
  223. package/dist/render/lib/links/link-rules.js +1 -1
  224. package/dist/render/lib/menu-link.d.ts +2 -0
  225. package/dist/render/lib/menu-link.js +1 -1
  226. package/dist/render/lib/next-fonts.js +1 -1
  227. package/dist/render/lib/sections/bundle-to-grid.d.ts +8 -0
  228. package/dist/render/lib/sections/bundle-to-grid.js +1 -0
  229. package/dist/render/lib/sections/catalog-text-size.d.ts +2 -0
  230. package/dist/render/lib/sections/catalog-text-size.js +1 -1
  231. package/dist/render/lib/sections/filter-option-rows.d.ts +37 -0
  232. package/dist/render/lib/sections/filter-option-rows.js +1 -0
  233. package/dist/render/lib/sections/gallery-toolbar.d.ts +27 -0
  234. package/dist/render/lib/sections/gallery-toolbar.js +1 -0
  235. package/dist/render/lib/sections/grid-no-hole.d.ts +4 -0
  236. package/dist/render/lib/sections/grid-no-hole.js +1 -1
  237. package/dist/render/lib/sections/product-card-text-regions.d.ts +3 -0
  238. package/dist/render/lib/sections/product-card-text-regions.js +1 -0
  239. package/dist/render/lib/sections/product-grid-columns.d.ts +13 -1
  240. package/dist/render/lib/sections/product-grid-columns.js +1 -1
  241. package/dist/render/lib/sections/product-grid-pages.d.ts +42 -0
  242. package/dist/render/lib/sections/product-grid-pages.js +1 -0
  243. package/dist/render/lib/sections/related-to-grid.d.ts +8 -0
  244. package/dist/render/lib/sections/related-to-grid.js +1 -0
  245. package/dist/render/lib/sections/shopper-filters.d.ts +45 -0
  246. package/dist/render/lib/sections/shopper-filters.js +1 -0
  247. package/dist/render/lib/storefront-page-groups.d.ts +0 -4
  248. package/dist/render/lib/storefront-page-groups.js +1 -1
  249. package/dist/render/lib/tyres/tyre-vehicle-fitment.d.ts +1 -0
  250. package/dist/render/lib/tyres/tyre-vehicle-fitment.js +1 -1
  251. package/dist/render/lib/wheels/plp-filters.d.ts +6 -3
  252. package/dist/render/lib/wheels/plp-filters.js +1 -1
  253. package/dist/render/lib/wheels/plp-hydrate.d.ts +5 -3
  254. package/dist/render/lib/wheels/plp-hydrate.js +1 -1
  255. package/dist/render/lib/wheels/selected-ranges.d.ts +16 -0
  256. package/dist/render/lib/wheels/selected-ranges.js +1 -0
  257. package/dist/render/lib/wheels/set-mode.d.ts +10 -0
  258. package/dist/render/lib/wheels/set-mode.js +1 -1
  259. package/dist/render/lib/wheels/shopper-first-paint.d.ts +28 -0
  260. package/dist/render/lib/wheels/shopper-first-paint.js +1 -0
  261. package/dist/render/lib/wheels/shopper-scope.d.ts +11 -0
  262. package/dist/render/lib/wheels/shopper-scope.js +1 -0
  263. package/dist/words.d.ts +92 -15
  264. package/dist/words.js +6 -6
  265. package/package.json +4 -4
  266. package/dist/chunks/chunk-EUKK2IN6.js +0 -1
  267. package/dist/chunks/chunk-FJRKNPNN.js +0 -340
  268. package/dist/chunks/chunk-SLRULFYY.js +0 -1
  269. package/dist/render/components/pdp-dynamic/DynamicBundleOffer.d.ts +0 -13
  270. package/dist/render/components/pdp-dynamic/DynamicBundleOffer.js +0 -1
  271. /package/dist/chunks/{chunk-ALMIS7CK.js → chunk-NQLVRCTI.js} +0 -0
  272. /package/dist/chunks/{chunk-FJRKNPNN.js.LEGAL.txt → chunk-RHNDIM7Z.js.LEGAL.txt} +0 -0
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as D,jsxs as r}from"react/jsx-runtime";import{useCallback as H,useEffect as U,useRef as F,useState as O}from"react";import j from"next/link";import{REPEAT_ATTRIBUTE as $,REPEAT_INDEX_ATTRIBUTE as B}from"efficient-easel/draw";import W from"./CountrySelect.js";import{MenuPlaceContext as z}from"./MenuLinkBlock.js";import G from"./ThemeToggle.js";import{CardRowContext as Y,CardTemplateRows as q}from"efficient-web-builder/render/components/CardRowContext";import{renderChrome as _}from"efficient-web-builder/render/components/goldPhrases";import{UTIL_WORDS as X}from"./HeaderTools.js";import{usePhoneMenuTools as J}from"efficient-web-builder/render/components/PhoneMenuTools";import{useSearch as K}from"./SearchContext.js";import{useModalDismiss as Q}from"./useModalDismiss.js";import V from"efficient-easel/screen/components/UiIcon";import{usePreviewMenus as Z}from"./PreviewMenusContext.js";import{FOOTER_MENU_PLACEHOLDER_COUNT as ee,FOOTER_MENU_PLACEHOLDER_HEADING as ne,FOOTER_MENU_PLACEHOLDER_HINT as le}from"../lib/content/menu-placeholder.js";import{say as w}from"efficient-web-builder/format/lib/editor-words";import{UNDER_HEADER_SHEET_CLASS as te}from"../lib/content/header-bar.js";import{isMenuOrphaned as re}from"../lib/menu-source.js";import{legacyBlockAlignOf as ae}from"../lib/content/legacy-block-align.js";import{menuLinkInRange as oe,resolveMenuLinkRange as ie}from"../lib/content/menu-row.js";const se="flex list-none flex-col gap-3 text-[13px]",C="mb-4 font-mono text-[13px] uppercase tracking-[0.2em] text-fg-dim",k="text-[12px] italic text-fg-dim/70",S=(n,l)=>n&&l>0?"border-t border-line pt-3":"",I=n=>({label:n.label??"",href:n.url??""}),ce=Array.from({length:ee},()=>({label:"",href:""}));function L({owner:n,items:l,place:s,wrap:a}){const g=l?l.map(I):ce;return e(z.Provider,{value:l?s:{...s,placeholder:!0},children:e(q,{ownerId:n.id,ownerType:n.type,Template:n.template,rows:g,items:l??void 0,fallback:null,wrapCopy:a,children:c=>c})})}const M=n=>(n.template?.blockCount??0)>0,P="This menu draws no links: its card template is empty. Undo the delete, or delete this Menu and add it again.";function me({owner:n,items:l,label:s,editing:a,linkAlign:g,linkRange:c}){const E=ae(g),p=ie(c),y=!!p&&l!==null&&p.to!==void 0&&p.to<l.length,[f,v]=O(!1),h=F(null),t=J(),{open:m}=K(),R=s||"Menu",N=H(()=>v(!1),[]);Q({active:f,onDismiss:N,scopeRef:h});const T=e(L,{owner:n,items:l,place:{place:"row"},wrap:(d,u)=>{const b=l!==null&&p&&!oe(p,u.index+1)?{"data-menu-out":""}:null;return e("li",{className:"",...b,children:d})}}),o=(d,u,b)=>a?{[$]:`${d}:${b<0?"panel":"dropdown"}`,[B]:`${b+1}.${u.index}`}:null,x=e(L,{owner:n,items:l,place:{place:"panel",onNavigate:N},wrap:(d,u)=>r(D,{children:[e("li",{className:"flex min-h-14 items-center border-b border-line",...o(n.id,u,-1),children:d}),l===null?null:(u.item?.dropdown_items??[]).map((b,A)=>e(Y.Provider,{value:{...u,row:I(b),item:b},children:e("li",{className:"flex min-h-12 items-center border-b border-line pl-5 text-[14px]",...o(n.id,u,A),children:d})},A))]})}),i=t&&(t.search||t.region||t.account||t.theme)?t:null;return!a&&l!==null&&!M(n)&&!i?null:r("nav",{ref:h,"aria-label":R,"data-menu-row":"",...E?{"data-menu-align":E}:null,...y?{"data-menu-part":"lead"}:null,className:"min-w-0",children:[e("ul",{className:"m-0 hidden list-none flex-wrap items-center gap-x-8 gap-y-2 p-0 font-mono text-[13px] uppercase tracking-[0.18em] view-tablet:flex",children:T}),e("button",{type:"button",className:"flex h-11 w-11 items-center justify-center view-tablet:hidden","aria-expanded":f,"aria-label":f?"Close the menu":"Open the menu",onClick:()=>v(d=>!d),children:e("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round","aria-hidden":"true",children:f?e("path",{d:"M6 6l12 12M18 6L6 18"}):e("path",{d:"M4 7h16M4 12h16M4 17h16"})})}),f?r("div",{role:"dialog","aria-label":R,className:`${te} z-[60] flex flex-col overflow-y-auto bg-bg text-fg view-tablet:hidden`,children:[e("ul",{className:"m-0 flex list-none flex-col px-5 py-3 font-mono text-[16px] uppercase tracking-[0.18em]",children:x}),i?r("div",{className:"mt-auto flex flex-col gap-4 border-t border-line bg-surface p-5",children:[i.search?r("button",{type:"button",className:"flex h-12 items-center gap-3 border border-line bg-bg px-4 text-left text-[15px]",onClick:a?void 0:()=>{N(),m()},children:[e(V,{name:"search",size:18,strokeWidth:1.6,rounded:!0}),X.search]}):null,i.account?r("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Account"}),e(j,{href:"/account",onClick:N,className:"mono-eyebrow underline",children:"Your account"})]}):null,i.region?r("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Region"}),e(W,{})]}):null,i.theme?r("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Theme"}),e(G,{})]}):null]}):null]}):null]})}function de({owner:n,menu:l,heading:s,accordionMobile:a=!1,showDividers:g=!1,editing:c=!1,layout:E="column",linkAlign:p,linkRange:y}){const{live:f,ready:v}=Z(),h=re({id:l?.id,handle:l?.handle,editing:c,ready:v,live:f}),t=h?[]:l?.items??[],m=s||l?.name||"",[R,N]=O(!1);if(U(()=>{if(!a)return;const o=window.matchMedia("(max-width: 800px)"),x=()=>N(o.matches);return x(),o.addEventListener("change",x),()=>o.removeEventListener("change",x)},[a]),E==="row"&&c&&!h&&t.length>0&&!M(n))return e("p",{className:k,children:w(P)});if(E==="row")return e(me,{owner:n,items:h?null:t,label:m,editing:c,linkAlign:p,linkRange:y});const T=o=>e("ul",{className:se,children:e(L,{owner:n,items:o,place:{place:"column"},wrap:(x,i)=>e("li",{className:o?S(g,i.index):`text-fg ${S(g,i.index)}`,children:x})})});return h?r("div",{className:"min-w-0",children:[e("h4",{className:C,children:s?_(s):w(ne)}),T(null),e("p",{className:`mt-3 ${k}`,children:w(le)})]}):t.length===0||!M(n)?r("div",{className:"min-w-0",children:[m?e("h4",{className:C,children:_(m)}):null,c?e("p",{className:k,children:t.length===0?w("This menu has no links yet — add them in {place}.",{place:w("Storefront → Menus")}):w(P)}):null]}):a&&R?r("details",{className:"min-w-0 border-b border-line",children:[r("summary",{className:"flex cursor-pointer list-none items-center justify-between py-3 font-mono text-[13px] uppercase tracking-[0.2em] text-fg-dim",children:[_(m),e("span",{"aria-hidden":!0,children:"+"})]}),e("div",{className:"pb-3",children:T(t)})]}):r("div",{className:"min-w-0",children:[m?e("h4",{className:C,children:_(m)}):null,T(t)]})}export{de as default};
1
+ "use client";import{jsx as e,Fragment as H,jsxs as a}from"react/jsx-runtime";import{useCallback as F,useEffect as j,useRef as B,useState as O}from"react";import $ from"next/link";import{REPEAT_ATTRIBUTE as W,REPEAT_INDEX_ATTRIBUTE as Y}from"efficient-easel/draw";import z from"./CountrySelect.js";import{MenuPlaceContext as G}from"./MenuLinkBlock.js";import q from"./ThemeToggle.js";import{CardRowContext as X,CardTemplateRows as J}from"efficient-web-builder/render/components/CardRowContext";import{renderChrome as k}from"efficient-web-builder/render/components/goldPhrases";import{UTIL_WORDS as K}from"./HeaderTools.js";import{usePhoneMenuTools as Q}from"efficient-web-builder/render/components/PhoneMenuTools";import{useSearch as V}from"./SearchContext.js";import{useModalDismiss as Z}from"./useModalDismiss.js";import ee from"efficient-easel/screen/components/UiIcon";import{usePreviewMenus as ne}from"./PreviewMenusContext.js";import{FOOTER_MENU_PLACEHOLDER_COUNT as re,FOOTER_MENU_PLACEHOLDER_HEADING as le,FOOTER_MENU_PLACEHOLDER_HINT as te}from"../lib/content/menu-placeholder.js";import{say as E}from"efficient-web-builder/format/lib/editor-words";import{UNDER_HEADER_SHEET_CLASS as ae}from"../lib/content/header-bar.js";import{isMenuOrphaned as oe}from"../lib/menu-source.js";import{legacyBlockAlignOf as se}from"../lib/content/legacy-block-align.js";import{menuLinkInRange as ie,resolveMenuLinkRange as ce}from"../lib/content/menu-row.js";import{TAB_CELLS as P,currentLinkIndex as me}from"../lib/content/tab-strip.js";import{useCurrentPagePath as de}from"efficient-web-builder/render/lib/site-runtime";const Be="plain",ue="tabs",pe="flex list-none flex-col gap-3 text-[13px]",A="mb-4 font-mono text-[13px] uppercase tracking-[0.2em] text-fg-dim",y="text-[12px] italic text-fg-dim/70",I=(r,n)=>r&&n>0?"border-t border-line pt-3":"",U=r=>({label:r.label??"",href:r.url??""}),fe=Array.from({length:re},()=>({label:"",href:""}));function L({owner:r,items:n,place:s,wrap:i,markCurrent:f=!1}){const c=n?n.map(U):fe,p=de(),h=n&&f?me(n.map(b=>b.url??""),p):-1,d=h<0?null:{index:h,href:n[h].url??""};return e(G.Provider,{value:n?d?{...s,current:d}:s:{...s,placeholder:!0},children:e(J,{ownerId:r.id,ownerType:r.type,Template:r.template,rows:c,items:n??void 0,fallback:null,wrapCopy:i,children:b=>b})})}const M=r=>(r.template?.blockCount??0)>0,D="This menu draws no links: its card template is empty. Undo the delete, or delete this Menu and add it again.";function he({owner:r,items:n,label:s,editing:i,linkAlign:f,linkRange:c,markCurrent:p}){const h=se(f),d=ce(c),b=!!d&&n!==null&&d.to!==void 0&&d.to<n.length,[N,T]=O(!1),_=B(null),x=Q(),{open:g}=V(),u=s||"Menu",o=F(()=>T(!1),[]);Z({active:N,onDismiss:o,scopeRef:_});const R=e(L,{owner:r,items:n,place:{place:"row"},markCurrent:p,wrap:(l,m)=>{const w=n!==null&&d&&!ie(d,m.index+1)?{"data-menu-out":""}:null;return e("li",{className:"",...w,children:l})}}),v=(l,m,w)=>i?{[W]:`${l}:${w<0?"panel":"dropdown"}`,[Y]:`${w+1}.${m.index}`}:null,C=e(L,{owner:r,items:n,place:{place:"panel",onNavigate:o},markCurrent:p,wrap:(l,m)=>a(H,{children:[e("li",{className:"flex min-h-14 items-center border-b border-line",...v(r.id,m,-1),children:l}),n===null?null:(m.item?.dropdown_items??[]).map((w,S)=>e(X.Provider,{value:{...m,row:U(w),item:w},children:e("li",{className:"flex min-h-12 items-center border-b border-line pl-5 text-[14px]",...v(r.id,m,S),children:l})},S))]})}),t=x&&(x.search||x.region||x.account||x.theme)?x:null;return!i&&n!==null&&!M(r)&&!t?null:a("nav",{ref:_,"aria-label":u,"data-menu-row":"",...h?{"data-menu-align":h}:null,...b?{"data-menu-part":"lead"}:null,className:"min-w-0",children:[e("ul",{className:"m-0 hidden list-none flex-wrap items-center gap-x-8 gap-y-2 p-0 font-mono text-[13px] uppercase tracking-[0.18em] view-tablet:flex",children:R}),e("button",{type:"button",className:"flex h-11 w-11 items-center justify-center view-tablet:hidden","aria-expanded":N,"aria-label":N?"Close the menu":"Open the menu",onClick:()=>T(l=>!l),children:e("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round","aria-hidden":"true",children:N?e("path",{d:"M6 6l12 12M18 6L6 18"}):e("path",{d:"M4 7h16M4 12h16M4 17h16"})})}),N?a("div",{role:"dialog","aria-label":u,className:`${ae} z-[60] flex flex-col overflow-y-auto bg-bg text-fg view-tablet:hidden`,children:[e("ul",{className:"m-0 flex list-none flex-col px-5 py-3 font-mono text-[16px] uppercase tracking-[0.18em]",children:C}),t?a("div",{className:"mt-auto flex flex-col gap-4 border-t border-line bg-surface p-5",children:[t.search?a("button",{type:"button",className:"flex h-12 items-center gap-3 border border-line bg-bg px-4 text-left text-[15px]",onClick:i?void 0:()=>{o(),g()},children:[e(ee,{name:"search",size:18,strokeWidth:1.6,rounded:!0}),K.search]}):null,t.account?a("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Account"}),e($,{href:"/account",onClick:o,className:"mono-eyebrow underline",children:"Your account"})]}):null,t.region?a("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Region"}),e(z,{})]}):null,t.theme?a("div",{className:"flex items-center justify-between",children:[e("span",{className:"mono-eyebrow text-fg-dim",children:"Theme"}),e(q,{})]}):null]}):null]}):null]})}function xe({owner:r,items:n,label:s,editing:i,markCurrent:f}){return!i&&(n===null||n.length===0||!M(r))?null:e("nav",{"aria-label":s||"Menu","data-menu-tabs":"",className:"min-w-0",children:e("ul",{className:P.list,children:e(L,{owner:r,items:n,place:{place:"tab"},markCurrent:f,wrap:c=>e("li",{className:P.item,children:c})})})})}function be({owner:r,menu:n,heading:s,accordionMobile:i=!1,showDividers:f=!1,editing:c=!1,layout:p="column",linkAlign:h,linkRange:d,menuStyle:b,currentPage:N}){const T=p==="row"&&N===!0,{live:_,ready:x}=ne(),g=oe({id:n?.id,handle:n?.handle,editing:c,ready:x,live:_}),u=g?[]:n?.items??[],o=s||n?.name||"",[R,v]=O(!1);if(j(()=>{if(!i)return;const t=window.matchMedia("(max-width: 800px)"),l=()=>v(t.matches);return l(),t.addEventListener("change",l),()=>t.removeEventListener("change",l)},[i]),p==="row"&&c&&!g&&u.length>0&&!M(r))return e("p",{className:y,children:E(D)});if(p==="row"&&b===ue)return e(xe,{owner:r,items:g?null:u,label:o,editing:c,markCurrent:T});if(p==="row")return e(he,{owner:r,items:g?null:u,label:o,editing:c,linkAlign:h,linkRange:d,markCurrent:T});const C=t=>e("ul",{className:pe,children:e(L,{owner:r,items:t,place:{place:"column"},wrap:(l,m)=>e("li",{className:t?I(f,m.index):`text-fg ${I(f,m.index)}`,children:l})})});return g?a("div",{className:"min-w-0",children:[e("h4",{className:A,children:s?k(s):E(le)}),C(null),e("p",{className:`mt-3 ${y}`,children:E(te)})]}):u.length===0||!M(r)?a("div",{className:"min-w-0",children:[o?e("h4",{className:A,children:k(o)}):null,c?e("p",{className:y,children:u.length===0?E("This menu has no links yet — add them in {place}.",{place:E("Storefront → Menus")}):E(D)}):null]}):i&&R?a("details",{className:"min-w-0 border-b border-line",children:[a("summary",{className:"flex cursor-pointer list-none items-center justify-between py-3 font-mono text-[13px] uppercase tracking-[0.2em] text-fg-dim",children:[k(o),e("span",{"aria-hidden":!0,children:"+"})]}),e("div",{className:"pb-3",children:C(u)})]}):a("div",{className:"min-w-0",children:[o?e("h4",{className:A,children:k(o)}):null,C(u)]})}export{Be as MENU_STYLE_PLAIN,ue as MENU_STYLE_TABS,be as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as M}from"react/jsx-runtime";import{usePathname as R}from"next/navigation";import{containerGapProps as j}from"efficient-web-builder/format/lib/content/container-gap";import z from"efficient-web-builder/render/components/Btn";import{GALLERY_GRID_ATTR as A,GalleryLinksContext as $}from"./GalleryItem.js";import{useSiteSells as k}from"./SiteRecordContext.js";import{SharedPartKinds as B}from"efficient-web-builder/render/components/PublishedPartStylesContext";import{renderHeadline as O}from"efficient-web-builder/render/components/goldPhrases";import T from"efficient-web-builder/render/components/SectionHeader";import{headIsEmpty as F,ownPadding as K}from"../lib/sections/own-padding.js";import{resolveGridColumns as D,resolveGridMobileColumns as U}from"efficient-web-builder/format/lib/content/grid-span";import{galleryLayoutClass as W,galleryLayoutCss as X,resolveGalleryLayout as Y}from"efficient-web-builder/format/lib/content/gallery-layout";const q="relative z-[2] bg-bg py-[120px] max-view-wide:py-[70px]",H="relative z-[2] bg-bg pt-0 pb-[120px] max-view-wide:pt-0 max-view-wide:pb-[70px]",J="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]";function Q({items:a,num:o,title:l,linkText:n,linkHref:g,galleryHref:r="/gallery",submitHref:f="/contact",previewHover:x,display:y,displayPhone:h,styleOwner:v,layout:d,columns:t,columnsMobile:u,gap:w,gapPhone:N,omitHead:m=!1,padTop:G,padBottom:L,editing:S=!1}){const _=R(),b=k(),E=r!==_&&(b||r!=="/gallery"),c=Y(d),i=c?d:null,C=!c&&t!=null&&t!=="",s=j("GalleryB",w,"both",N),P=i?{className:`sf-card-grid sf-gallery-zone ${W(i)} grid${s.className}`,style:s.style}:C?{className:`sf-card-grid sf-grid-zone grid${s.className}`,style:{...s.style,"--sf-grid-cols":String(D(t)),"--sf-grid-cols-phone":String(U(u,t))}}:{className:`sf-card-grid grid grid-cols-4${s.className} max-[1500px]:grid-cols-3 max-view-wide:grid-cols-1`,style:s.style},p=n?{text:n,href:g||"#"}:void 0,I=l?O(l,!1):void 0;return e("section",{className:m?H:q,style:K(G,L),children:M("div",{className:J,children:[m||!S&&F(o,l,p?.text)?null:e(T,{num:o,title:I,link:p}),i&&e("style",{dangerouslySetInnerHTML:{__html:X(i)}}),a&&e($.Provider,{value:{galleryHref:r,submitHref:f,previewHover:x,display:y,displayPhone:h,styleOwner:v},children:e(B,{children:e("div",{[A]:"",style:{display:"contents"},children:e(a,{...P,minEmptyHeight:320})})})}),E&&e("div",{className:"mt-12 flex flex-col items-center gap-3",children:e(z,{href:r,variant:"ghost",children:"See Gallery"})})]})})}export{Q as default};
1
+ "use client";import{jsx as t,jsxs as Y}from"react/jsx-runtime";import{useCallback as q,useMemo as g,useState as H}from"react";import{usePathname as J}from"next/navigation";import{containerGapProps as Q}from"efficient-web-builder/format/lib/content/container-gap";import Z from"efficient-web-builder/render/components/Btn";import{GALLERY_GRID_ATTR as ee,GalleryLinksContext as se,GalleryTilesContext as re}from"./GalleryItem.js";import{useShopperGallery as te}from"./catalog/ShopperScope.js";import{galleryShownIds as le,galleryToolbarIdle as oe,WALL_PLACED_CELL as ne,WALL_PLACED_CSS as ae,wallSpanAt as ie}from"../lib/sections/gallery-toolbar.js";import{useSiteSells as de}from"./SiteRecordContext.js";import{SharedPartKinds as ce}from"efficient-web-builder/render/components/PublishedPartStylesContext";import{renderHeadline as me}from"efficient-web-builder/render/components/goldPhrases";import pe from"efficient-web-builder/render/components/SectionHeader";import{headIsEmpty as fe,ownPadding as ge}from"../lib/sections/own-padding.js";import{resolveGridColumns as ue,resolveGridMobileColumns as ye}from"efficient-web-builder/format/lib/content/grid-span";import{galleryLayoutClass as xe,galleryLayoutCss as he,resolveGalleryLayout as we}from"efficient-web-builder/format/lib/content/gallery-layout";const ve="relative z-[2] bg-bg py-[120px] max-view-wide:py-[70px]",Le="relative z-[2] bg-bg pt-0 pb-[120px] max-view-wide:pt-0 max-view-wide:pb-[70px]",Se="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]";function Ne({items:p,num:u,title:f,linkText:y,linkHref:G,galleryHref:i="/gallery",submitHref:C="/contact",previewHover:P,display:E,displayPhone:A,styleOwner:I,layout:x,columns:d,columnsMobile:M,gap:R,gapPhone:k,omitHead:h=!1,padTop:O,padBottom:T,editing:j=!1}){const z=J(),$=de(),B=i!==z&&($||i!=="/gallery"),w=we(x),o=w?x:null,D=!w&&d!=null&&d!=="",n=Q("GalleryB",R,"both",k),W=o?{className:`sf-card-grid sf-gallery-zone ${xe(o)} grid${n.className}`,style:n.style}:D?{className:`sf-card-grid sf-grid-zone grid${n.className}`,style:{...n.style,"--sf-grid-cols":String(ue(d)),"--sf-grid-cols-phone":String(ye(M,d))}}:{className:`sf-card-grid grid grid-cols-4${n.className} max-[1500px]:grid-cols-3 max-view-wide:grid-cols-1`,style:n.style},v=y?{text:y,href:G||"#"}:void 0,F=f?me(f,!1):void 0,[L,K]=H({}),S=q((s,r)=>{K(e=>{const m=e[s.id];if(r){if(!m)return e;const{[s.id]:_e,...X}=e;return X}return m&&m.tag===s.tag&&m.name===s.name?e:{...e,[s.id]:s}})},[]),N=p?.blockIds,c=g(()=>(N??[]).map(s=>L[s]).filter(s=>!!s),[N,L]),{ref:U,toolbar:a}=te(c),_=a!==null&&!oe(a,c),l=g(()=>_&&a?le(c,a):null,[_,a,c]),V=g(()=>{const s=new Map((l??[]).map((r,e)=>[r,e]));return{report:S,positionOf:r=>{const e=l?s.get(r):void 0;return e===void 0?null:{index:e+1,total:l.length}}}},[S,l]),b=l?s=>{const r=l.indexOf(s);if(r<0)return{style:{display:"none"}};if(!o)return{style:{order:r}};const e=ie(o,r,l.length);return{className:ne,style:{order:r,"--sf-wall-c":e.col,"--sf-wall-r":e.row,"--sf-wall-cp":e.colPhone,"--sf-wall-rp":e.rowPhone}}}:void 0;return t("section",{ref:U,className:h?Le:ve,style:ge(O,T),children:Y("div",{className:Se,children:[h||!j&&fe(u,f,v?.text)?null:t(pe,{num:u,title:F,link:v}),o&&t("style",{dangerouslySetInnerHTML:{__html:he(o)+(l?ae:"")}}),p&&t(se.Provider,{value:{galleryHref:i,submitHref:C,previewHover:P,display:E,displayPhone:A,styleOwner:I},children:t(re.Provider,{value:V,children:t(ce,{children:t("div",{[ee]:"",style:{display:"contents"},children:t(p,{...W,minEmptyHeight:320,...b?{cell:b}:{}})})})})}),B&&t("div",{className:"mt-12 flex flex-col items-center gap-3",children:t(Z,{href:i,variant:"ghost",children:"See Gallery"})})]})})}export{Ne as default};
@@ -1,4 +1,5 @@
1
1
  import { type GalleryShowcaseCard } from "./GalleryShowcase.js";
2
+ import type { GalleryTile } from "../lib/sections/gallery-toolbar.js";
2
3
  export declare const GalleryLinksContext: import("react").Context<{
3
4
  galleryHref?: string;
4
5
  submitHref?: string;
@@ -24,8 +25,16 @@ export declare const GALLERY_TILE_PARTS: readonly [{
24
25
  readonly id: "number";
25
26
  readonly label: "Card number";
26
27
  }];
28
+ export declare const GalleryTilesContext: import("react").Context<{
29
+ report: (tile: GalleryTile, gone?: boolean) => void;
30
+ positionOf: (id: string) => TilePosition | null;
31
+ } | null>;
27
32
  export declare const GALLERY_GRID_ATTR = "data-gallery-grid";
28
33
  export declare const GALLERY_TILE_ATTR = "data-gallery-tile";
34
+ export interface TilePosition {
35
+ index: number;
36
+ total: number;
37
+ }
29
38
  export declare const GALLERY_ITEM_HINTS: {
30
39
  readonly process: "Category";
31
40
  readonly eyebrow: "Subtitle";
@@ -38,5 +47,6 @@ export interface GalleryItemProps extends GalleryShowcaseCard {
38
47
  captionPlace?: string;
39
48
  editing?: boolean;
40
49
  previewHover?: boolean;
50
+ tile?: GalleryTile;
41
51
  }
42
- export default function GalleryItem({ editing, previewHover: ownPreviewHover, ratio, captionPlace, ...card }: GalleryItemProps): import("react").JSX.Element;
52
+ export default function GalleryItem({ editing, previewHover: ownPreviewHover, ratio, captionPlace, tile: toolbarTile, ...card }: GalleryItemProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as n,Fragment as m}from"react/jsx-runtime";import{createContext as G,useCallback as M,useContext as Y,useEffect as B,useRef as W,useState as L}from"react";import S from"next/link";import{slugify as D}from"efficient-shell/format";import F from"./GalleryCard.js";import V,{LightboxClose as q,LIGHTBOX_CLOSE_TINT as U}from"./Lightbox.js";import{useSiteSells as X}from"./SiteRecordContext.js";import{renderGold as p,renderHeadline as I}from"efficient-web-builder/render/components/goldPhrases";import{sizedImage as Z}from"efficient-web-builder/format/lib/sized-image";const J="(max-width: 1100px) 100vw, min(59vw, 1050px)",K=G({}),ge=[{id:"tag",label:"Tag"},{id:"eyebrow",label:"Eyebrow"},{id:"title",label:"Title"},{id:"meta",label:"Meta"},{id:"number",label:"Card number"}],Q="data-gallery-grid",C="data-gallery-tile";function ee(t,o){const[l,s]=L(null);return B(()=>{const c=t.current,a=c?.closest(`[${Q}]`);if(!c||!a)return;const u=()=>{const v=Array.from(a.querySelectorAll(`[${C}]`)),y=v.indexOf(c),h=y>=0?{index:y+1,total:v.length}:null;s(x=>x?.index===h?.index&&x?.total===h?.total?x:h)};if(u(),!o)return;const b=new MutationObserver(u);return b.observe(a,{childList:!0,subtree:!0}),()=>b.disconnect()},[t,o]),l}const ue={process:"Category",eyebrow:"Subtitle",name:"Item name",meta:"Detail"},te=()=>({image:"",href:"#",process:"",eyebrow:"",name:"",meta:""}),be=Array.from({length:6},te);function re(t){const o=(t.photos??[]).map(a=>a?.src).filter(a=>!!a),l=t.image||o[0]||"",s=[l,...o].filter(a=>!!a),c=D(t.name)||"gallery-item";return{car:t.eyebrow??"",wheel:t.name??"",process:t.process??"",finish:t.meta??"",imageLabel:`${c}.jpg`,detailLabel:`${c}-detail.jpg`,imageSrc:l||void 0,detailSrc:o[0]||l||void 0,photos:s,href:t.href}}function oe({editing:t=!1,previewHover:o,ratio:l,captionPlace:s,...c}){const{galleryHref:a="/gallery",submitHref:u="/contact",previewHover:b,display:v,displayPhone:y,styleOwner:h,photosOnly:x=!1}=Y(K),e=re(c),f=X()&&!x,_=!f&&!ne(e),i=e.photos??(e.imageSrc?[e.imageSrc]:[]),P=W(null),T=M(d=>{P.current=d},[]),z=ee(P,t),H=t&&(!!o||!!b),[R,g]=L(!1),[w,N]=L(0),j=()=>N(d=>(d-1+i.length)%i.length),E=()=>N(d=>(d+1)%i.length),k=i[w]??e.imageSrc??"",O=r(F,{build:e,forceHover:H,index:z?.index,total:z?.total,ratio:l,captionPlace:s,display:v,displayPhone:y,styleOwner:h,editing:t});return n(m,{children:[t?r("div",{ref:T,[C]:"",className:"block w-full text-left",children:O}):r("button",{ref:T,[C]:"",type:"button","aria-label":f?`Open ${e.car||"build"} on ${e.wheel||"wheel"}`:A(e),onClick:()=>{N(0),g(!0)},className:"block w-full cursor-pointer text-left focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",children:O}),r(V,{open:R,onClose:()=>g(!1),label:f?`${e.car} on ${e.wheel}`:A(e),onPrev:i.length>1?j:void 0,onNext:i.length>1?E:void 0,className:"flex items-center justify-center p-6 max-[700px]:p-3",children:n("div",{onClick:d=>d.stopPropagation(),className:`relative grid w-[min(1800px,100%)] max-h-[calc(100vh-48px)] ${_?"grid-cols-1":"grid-cols-[1.4fr_1fr]"} overflow-hidden border border-line bg-bg max-view-desktop:grid-cols-1 max-view-desktop:overflow-auto`,style:{boxShadow:"0 60px 120px -20px color-mix(in srgb, var(--sf-shadow-color, #141416) 70%, transparent)"},children:[r(q,{label:"Close popup",className:"absolute right-[24px] top-[24px] z-[5] flex h-[56px] w-[56px] items-center justify-center border border-line font-mono text-[length:var(--size-label,21px)] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:{background:U},children:"✕"}),n("div",{className:"relative flex min-h-[690px] items-center justify-center overflow-hidden bg-surface-2 max-view-desktop:min-h-[450px]",children:[k&&r("img",{...Z(k,{fallbackWidth:1280}),sizes:J,alt:`${(f?e.car:e.wheel||e.car)||"Photo"} — ${w+1} of ${i.length}`,className:"block h-full max-h-[88vh] w-full object-cover"},k),i.length>1&&n(m,{children:[r("button",{type:"button","aria-label":"Previous photo",onClick:j,className:"absolute left-4 top-1/2 flex h-16 w-16 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,24px)] text-fg-dim transition-colors hover:border-accent hover:text-accent",children:"◁"}),r("button",{type:"button","aria-label":"Next photo",onClick:E,className:"absolute right-4 top-1/2 flex h-16 w-16 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,24px)] text-fg-dim transition-colors hover:border-accent hover:text-accent",children:"▷"}),n("span",{className:"absolute bottom-4 left-1/2 -translate-x-1/2 border border-fg-dim/30 bg-overlay-scrim/50 px-4 py-1.5 font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.22em] text-fg-dim backdrop-blur-[4px]",children:[w+1," / ",i.length]})]})]}),f?n("div",{className:"flex flex-col gap-[30px] px-[60px] py-[72px] max-view-desktop:px-9 max-view-desktop:py-[54px]",children:[e.process&&r("span",{className:"font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.3em] text-accent",children:p(e.process)}),e.wheel&&r("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(42px,4.5vw,60px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[0.95] tracking-[-0.025em]",children:I(e.wheel,!1)}),e.car&&n("div",{className:"font-heading3 text-[length:var(--size-headingSmall,27px)] leading-[1.4] text-fg",children:["on ",r("em",{className:"font-serif font-normal italic text-accent tracking-[-0.01em]",children:p(e.car,!0)})]}),n("dl",{className:"mt-3 grid grid-cols-[auto_1fr] gap-x-7 gap-y-[18px] border-y border-line py-[30px] font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.22em]",children:[e.wheel&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Wheel"}),r("dd",{className:"text-fg",children:p(e.wheel)})]}),e.process&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Process"}),r("dd",{className:"text-fg",children:p(e.process)})]}),e.finish&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Finish"}),r("dd",{className:"text-fg",children:p(e.finish)})]}),e.car&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Vehicle"}),r("dd",{className:"text-fg",children:p(e.car)})]})]}),n("div",{className:"mt-auto flex flex-col gap-3.5 pt-6",children:[n(S,{href:e.href||"/wheels",onClick:()=>g(!1),className:"group flex items-center justify-between gap-6 border border-btn bg-btn px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-btn-ink transition-colors hover:border-fg hover:bg-fg",children:[r("span",{children:"View product"}),r("span",{className:"transition-transform group-hover:translate-x-[6px]",children:"→"})]}),n(S,{href:a,onClick:()=>g(!1),className:"flex items-center justify-between gap-6 border border-line px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-fg transition-colors hover:border-accent hover:text-accent",children:[r("span",{children:"See more builds"}),r("span",{children:"→"})]}),n(S,{href:u,onClick:()=>g(!1),className:"flex items-center justify-between gap-6 border border-line px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-fg transition-colors hover:border-accent hover:text-accent",children:[r("span",{children:"Submit your build"}),r("span",{children:"→"})]})]})]}):!_&&r(le,{build:e})]})})]})}function $(t){return[t.process,t.car,t.finish].filter((o,l,s)=>!!o&&o!==t.wheel&&s.indexOf(o)===l)}function ne(t){return!!t.wheel||$(t).length>0}function A(t){const o=t.wheel||t.car;return o?`Open photo of ${o}`:"Open photo"}function le({build:t}){const o=t.wheel,l=$(t);return n("div",{className:"flex flex-col gap-[24px] px-[60px] py-[72px] max-view-desktop:px-9 max-view-desktop:py-[54px]",children:[o&&r("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(42px,4.5vw,60px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[0.95] tracking-[-0.025em]",children:I(o,!1)}),l.map(s=>r("p",{className:"text-[length:var(--size-body,18px)] leading-[1.5] text-fg",children:p(s)},s))]})}export{Q as GALLERY_GRID_ATTR,ue as GALLERY_ITEM_HINTS,be as GALLERY_ITEM_SEEDS,C as GALLERY_TILE_ATTR,ge as GALLERY_TILE_PARTS,K as GalleryLinksContext,oe as default};
1
+ "use client";import{jsx as r,jsxs as n,Fragment as m}from"react/jsx-runtime";import{createContext as R,useCallback as U,useContext as M,useEffect as X,useRef as Z,useState as C}from"react";import _ from"next/link";import{slugify as J}from"efficient-shell/format";import K from"./GalleryCard.js";import Q,{LightboxClose as ee,LIGHTBOX_CLOSE_TINT as te}from"./Lightbox.js";import{useSiteSells as re}from"./SiteRecordContext.js";import{renderGold as p,renderHeadline as Y}from"efficient-web-builder/render/components/goldPhrases";import{sizedImage as oe}from"efficient-web-builder/format/lib/sized-image";import{useIsoLayoutEffect as ne}from"./catalog/ShopperScope.js";const le="(max-width: 1100px) 100vw, min(59vw, 1050px)",se=R({}),Ce=[{id:"tag",label:"Tag"},{id:"eyebrow",label:"Eyebrow"},{id:"title",label:"Title"},{id:"meta",label:"Meta"},{id:"number",label:"Card number"}],ae=R(null),ie="data-gallery-grid",P="data-gallery-tile";function ce(t,o){const[l,a]=C(null);return X(()=>{const i=t.current,s=i?.closest(`[${ie}]`);if(!i||!s)return;const b=()=>{const y=Array.from(s.querySelectorAll(`[${P}]`)),w=y.indexOf(i),f=w>=0?{index:w+1,total:y.length}:null;a(x=>x?.index===f?.index&&x?.total===f?.total?x:f)};if(b(),!o)return;const v=new MutationObserver(b);return v.observe(s,{childList:!0,subtree:!0}),()=>v.disconnect()},[t,o]),l}const _e={process:"Category",eyebrow:"Subtitle",name:"Item name",meta:"Detail"},de=()=>({image:"",href:"#",process:"",eyebrow:"",name:"",meta:""}),Pe=Array.from({length:6},de);function pe(t){const o=(t.photos??[]).map(s=>s?.src).filter(s=>!!s),l=t.image||o[0]||"",a=[l,...o].filter(s=>!!s),i=J(t.name)||"gallery-item";return{car:t.eyebrow??"",wheel:t.name??"",process:t.process??"",finish:t.meta??"",imageLabel:`${i}.jpg`,detailLabel:`${i}-detail.jpg`,imageSrc:l||void 0,detailSrc:o[0]||l||void 0,photos:a,href:t.href}}function me({editing:t=!1,previewHover:o,ratio:l,captionPlace:a,tile:i,...s}){const{galleryHref:b="/gallery",submitHref:v="/contact",previewHover:y,display:w,displayPhone:f,styleOwner:x,photosOnly:D=!1}=M(se),e=pe(s),h=re()&&!D,T=!h&&!fe(e),d=e.photos??(e.imageSrc?[e.imageSrc]:[]),z=Z(null),E=U(c=>{z.current=c},[]),F=ce(z,t),O=M(ae),N=O?.report,u=i?.id,j=i?.tag??"",I=i?.name??"";ne(()=>{if(!N||!u)return;const c={id:u,tag:j,name:I};return N(c),()=>N(c,!0)},[N,u,j,I]);const $=(u?O?.positionOf(u):null)??F,V=t&&(!!o||!!y),[q,g]=C(!1),[k,L]=C(0),A=()=>L(c=>(c-1+d.length)%d.length),G=()=>L(c=>(c+1)%d.length),S=d[k]??e.imageSrc??"",H=r(K,{build:e,forceHover:V,index:$?.index,total:$?.total,ratio:l,captionPlace:a,display:w,displayPhone:f,styleOwner:x,editing:t});return n(m,{children:[t?r("div",{ref:E,[P]:"",className:"block w-full text-left",children:H}):r("button",{ref:E,[P]:"",type:"button","aria-label":h?`Open ${e.car||"build"} on ${e.wheel||"wheel"}`:W(e),onClick:()=>{L(0),g(!0)},className:"block w-full cursor-pointer text-left focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",children:H}),r(Q,{open:q,onClose:()=>g(!1),label:h?`${e.car} on ${e.wheel}`:W(e),onPrev:d.length>1?A:void 0,onNext:d.length>1?G:void 0,className:"flex items-center justify-center p-6 max-[700px]:p-3",children:n("div",{onClick:c=>c.stopPropagation(),className:`relative grid w-[min(1800px,100%)] max-h-[calc(100vh-48px)] ${T?"grid-cols-1":"grid-cols-[1.4fr_1fr]"} overflow-hidden border border-line bg-bg max-view-desktop:grid-cols-1 max-view-desktop:overflow-auto`,style:{boxShadow:"0 60px 120px -20px color-mix(in srgb, var(--sf-shadow-color, #141416) 70%, transparent)"},children:[r(ee,{label:"Close popup",className:"absolute right-[24px] top-[24px] z-[5] flex h-[56px] w-[56px] items-center justify-center border border-line font-mono text-[length:var(--size-label,21px)] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:{background:te},children:"✕"}),n("div",{className:"relative flex min-h-[690px] items-center justify-center overflow-hidden bg-surface-2 max-view-desktop:min-h-[450px]",children:[S&&r("img",{...oe(S,{fallbackWidth:1280}),sizes:le,alt:`${(h?e.car:e.wheel||e.car)||"Photo"} — ${k+1} of ${d.length}`,className:"block h-full max-h-[88vh] w-full object-cover"},S),d.length>1&&n(m,{children:[r("button",{type:"button","aria-label":"Previous photo",onClick:A,className:"absolute left-4 top-1/2 flex h-16 w-16 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,24px)] text-fg-dim transition-colors hover:border-accent hover:text-accent",children:"◁"}),r("button",{type:"button","aria-label":"Next photo",onClick:G,className:"absolute right-4 top-1/2 flex h-16 w-16 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,24px)] text-fg-dim transition-colors hover:border-accent hover:text-accent",children:"▷"}),n("span",{className:"absolute bottom-4 left-1/2 -translate-x-1/2 border border-fg-dim/30 bg-overlay-scrim/50 px-4 py-1.5 font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.22em] text-fg-dim backdrop-blur-[4px]",children:[k+1," / ",d.length]})]})]}),h?n("div",{className:"flex flex-col gap-[30px] px-[60px] py-[72px] max-view-desktop:px-9 max-view-desktop:py-[54px]",children:[e.process&&r("span",{className:"font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.3em] text-accent",children:p(e.process)}),e.wheel&&r("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(42px,4.5vw,60px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[0.95] tracking-[-0.025em]",children:Y(e.wheel,!1)}),e.car&&n("div",{className:"font-heading3 text-[length:var(--size-headingSmall,27px)] leading-[1.4] text-fg",children:["on ",r("em",{className:"font-serif font-normal italic text-accent tracking-[-0.01em]",children:p(e.car,!0)})]}),n("dl",{className:"mt-3 grid grid-cols-[auto_1fr] gap-x-7 gap-y-[18px] border-y border-line py-[30px] font-mono text-[length:var(--size-label,15px)] uppercase tracking-[0.22em]",children:[e.wheel&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Wheel"}),r("dd",{className:"text-fg",children:p(e.wheel)})]}),e.process&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Process"}),r("dd",{className:"text-fg",children:p(e.process)})]}),e.finish&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Finish"}),r("dd",{className:"text-fg",children:p(e.finish)})]}),e.car&&n(m,{children:[r("dt",{className:"text-fg-dim",children:"Vehicle"}),r("dd",{className:"text-fg",children:p(e.car)})]})]}),n("div",{className:"mt-auto flex flex-col gap-3.5 pt-6",children:[n(_,{href:e.href||"/wheels",onClick:()=>g(!1),className:"group flex items-center justify-between gap-6 border border-btn bg-btn px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-btn-ink transition-colors hover:border-fg hover:bg-fg",children:[r("span",{children:"View product"}),r("span",{className:"transition-transform group-hover:translate-x-[6px]",children:"→"})]}),n(_,{href:b,onClick:()=>g(!1),className:"flex items-center justify-between gap-6 border border-line px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-fg transition-colors hover:border-accent hover:text-accent",children:[r("span",{children:"See more builds"}),r("span",{children:"→"})]}),n(_,{href:v,onClick:()=>g(!1),className:"flex items-center justify-between gap-6 border border-line px-9 py-6 font-mono text-[length:var(--size-label,16px)] uppercase tracking-[0.3em] text-fg transition-colors hover:border-accent hover:text-accent",children:[r("span",{children:"Submit your build"}),r("span",{children:"→"})]})]})]}):!T&&r(xe,{build:e})]})})]})}function B(t){return[t.process,t.car,t.finish].filter((o,l,a)=>!!o&&o!==t.wheel&&a.indexOf(o)===l)}function fe(t){return!!t.wheel||B(t).length>0}function W(t){const o=t.wheel||t.car;return o?`Open photo of ${o}`:"Open photo"}function xe({build:t}){const o=t.wheel,l=B(t);return n("div",{className:"flex flex-col gap-[24px] px-[60px] py-[72px] max-view-desktop:px-9 max-view-desktop:py-[54px]",children:[o&&r("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(42px,4.5vw,60px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[0.95] tracking-[-0.025em]",children:Y(o,!1)}),l.map(a=>r("p",{className:"text-[length:var(--size-body,18px)] leading-[1.5] text-fg",children:p(a)},a))]})}export{ie as GALLERY_GRID_ATTR,_e as GALLERY_ITEM_HINTS,Pe as GALLERY_ITEM_SEEDS,P as GALLERY_TILE_ATTR,Ce as GALLERY_TILE_PARTS,se as GalleryLinksContext,ae as GalleryTilesContext,me as default};
@@ -0,0 +1,40 @@
1
+ import { type CSSProperties, type ReactNode } from "react";
2
+ import type { SlotComponent } from "efficient-easel/blocks";
3
+ import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
4
+ import type { SourceRow } from "efficient-web-builder/format/lib/content/block-sources";
5
+ import type { Bundle, WheelSummary } from "../lib/api/index.js";
6
+ import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
7
+ export declare function gridIndexCss(cls: string): string;
8
+ export declare function cardRowsGrid(gapZone: {
9
+ className: string;
10
+ style: CSSProperties;
11
+ }): {
12
+ className: string;
13
+ style: CSSProperties;
14
+ };
15
+ export interface GridCardValues {
16
+ ownerId: string;
17
+ Template: SlotComponent | undefined;
18
+ hover: CardHoverDrawn;
19
+ imageSizes: string;
20
+ fieldUsage: readonly FieldUsageAnswer[];
21
+ reserveEyebrow: boolean;
22
+ editing: boolean;
23
+ }
24
+ export declare function useGridCard(): GridCardValues;
25
+ export declare function GridCardProvider({ value, children }: {
26
+ value: GridCardValues;
27
+ children: ReactNode;
28
+ }): import("react").JSX.Element;
29
+ export declare function productCardRow(wheel: WheelSummary): SourceRow;
30
+ export declare const bundlePagePath: (bundle: Bundle) => string;
31
+ export declare function bundleCardRow(bundle: Bundle): SourceRow;
32
+ export declare function GridCards({ wheels, finishes, children, }: {
33
+ wheels: readonly WheelSummary[];
34
+ finishes?: readonly (string | undefined)[];
35
+ children: (copies: ReactNode) => ReactNode;
36
+ }): import("react").JSX.Element;
37
+ export declare function GridBundleCards({ bundles, children }: {
38
+ bundles: readonly Bundle[];
39
+ children: (copies: ReactNode) => ReactNode;
40
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as t,jsxs as c,Fragment as b}from"react/jsx-runtime";import v from"next/link";import{createContext as h,useContext as g}from"react";import{CardTemplateRows as m}from"efficient-web-builder/render/components/CardRowContext";import{InsideSiteColumn as w}from"efficient-web-builder/render/components/SiteGutterFrame";import{cardHoverOf as S}from"efficient-web-builder/format/lib/animation/hover";import{NO_FIELD_ANSWERS as _}from"../lib/content/field-usage.js";import{CARD_IMAGE_SIZES as y}from"../lib/sections/card-image-sizes.js";import{CardLookContext as f}from"./card-pieces/card-row.js";import{CardBuyDialog as I}from"./card-pieces/CardBuyButton.js";import{BundleCardStateProvider as R,useWheelCardState as E,WheelCardStateProvider as P}from"./card-pieces/ProductCardState.js";import{say as G}from"efficient-web-builder/format/lib/editor-words";import{CARD_INDEX_OPTIONS as T,cardIndexCss as A}from"efficient-web-builder/format/lib/sections/product-card-style";import{SHARED_ROWS_LIST_CLASS as N}from"efficient-web-builder/render/lib/content/box-shared-columns";import{GAP_ZONE_CLASS as D}from"efficient-web-builder/format/lib/content/container-gap";import{CARD_ROWS_GRID_CLASS as L,cardRowsGap as O,cardRowsGridStyle as $}from"./WheelCardFrame.js";function ce(e){return T.map(({value:r})=>r==="off"?"":A(e,r).replace(".sf-card-index::before",`.sf-card-index[data-format="${r}"]::before`)).join("")}function me(e){return e.className.includes(D)?{className:`${e.className} ${L} ${N}`,style:{...e.style,...$(O(e))}}:e}const F={ownerId:"",Template:void 0,hover:S({},"ProductGrid"),imageSizes:y,fieldUsage:_,reserveEyebrow:!1,editing:!1},p=h(F);function d(){return g(p)}function fe({value:e,children:r}){return t(p.Provider,{value:e,children:r})}function k(e){return{name:e.name??"",eyebrow:e.process??"",note:"",href:e.slug?`/wheels/${e.slug}`:""}}const u=e=>`/bundles/${e.slug}`;function W(e){return{name:e.name,eyebrow:"",note:e.subtitle??"",href:u(e)}}const j="sf-card sf-card-fill group relative flex flex-col bg-[var(--card-bg)] transition-colors duration-200 hover:bg-[var(--card-bg-hover)] [.sf-card-rows>&]:mb-[var(--sf-card-row-gap)]",z="sf-card group relative flex flex-col border border-line bg-bg transition-colors hover:border-accent",B="col-span-2 max-view-wide:col-span-1 @max-[720px]:col-span-1 [&:has([data-set-picture=one])]:col-span-1",U="relative z-[2] flex flex-1 flex-col pointer-events-none [&_a]:pointer-events-auto [&_button]:pointer-events-auto [&_input]:pointer-events-auto [&_select]:pointer-events-auto [&_label]:pointer-events-auto",H="relative flex flex-1 flex-col";function x({copy:e,href:r,label:o,wide:n=!1,kit:a=!1,probes:l}){const{editing:i}=d(),s=a?z:j;return c("article",{className:n?`${s} ${B}`:s,children:[l,!i&&r?t(v,{href:r,"aria-label":o,className:"absolute inset-0 z-[1]"}):null,t("div",{className:i?H:U,children:t(w,{children:e})})]})}function Y({copy:e}){const{wheel:r,sel:o,isSet:n}=E();return c(b,{children:[t(x,{copy:e,href:r.slug?`/wheels/${r.slug}`:"",label:r.name,wide:n,probes:o.probes}),t(I,{})]})}function K(e,r,o){const n=r.item;return t(P,{wheel:n,defaultFinish:o?.[r.index],children:t(f.Provider,{value:"catalog",children:t(Y,{copy:e})})})}function pe({wheels:e,finishes:r,children:o}){const{ownerId:n,Template:a,editing:l}=d();return t(m,{ownerId:n,ownerType:"ProductGrid",Template:a,rows:e.map(k),items:e,fallback:l?t(C,{}):null,wrapCopy:(i,s)=>K(i,s,r),children:o})}function M(e,r){const o=r.item;return t(R,{bundle:o,children:t(f.Provider,{value:"catalog",children:t(x,{copy:e,href:u(o),label:o.name,kit:!0})})})}function ue({bundles:e,children:r}){const{ownerId:o,Template:n,editing:a}=d();return t(m,{ownerId:o,ownerType:"ProductGrid",Template:n,rows:e.map(W),items:e,fallback:a?t(C,{}):null,wrapCopy:M,children:r})}function C(){return t("div",{"data-grid-card-empty":"",className:"p-4 text-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:G("The card is empty. Add parts to its card template in Layers.")})}export{ue as GridBundleCards,fe as GridCardProvider,pe as GridCards,W as bundleCardRow,u as bundlePagePath,me as cardRowsGrid,ce as gridIndexCss,k as productCardRow,d as useGridCard};
@@ -1,5 +1,9 @@
1
1
  export interface MenuPlace {
2
- place: "column" | "row" | "panel";
2
+ place: "column" | "row" | "panel" | "tab";
3
+ current?: {
4
+ index: number;
5
+ href: string;
6
+ } | null;
3
7
  placeholder?: boolean;
4
8
  onNavigate?: () => void;
5
9
  }
@@ -1 +1 @@
1
- "use client";import{jsx as l}from"react/jsx-runtime";import{createContext as s,useContext as u}from"react";import p from"next/link";import f from"./HeaderNavItem.js";import m from"./MenuPlaceholderLabel.js";import{useCardRow as b}from"efficient-web-builder/render/components/CardRowContext";import{renderGold as o}from"efficient-web-builder/render/components/goldPhrases";import{isLabelOnlyMenuUrl as h}from"../lib/menu-link.js";const d=s(null),x=e=>/^https?:\/\//i.test(e),c="opacity-80 transition-opacity hover:opacity-100";function i({item:e,label:n,link:r,onNavigate:t}){return h(e.url)?l("span",{className:n,children:o(e.label)}):x(e.url)?l("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",className:r,onClick:t,children:o(e.label)}):l(p,{href:e.url,className:r,onClick:t,children:o(e.label)})}function k(){const e=b(),n=u(d);if(!e||!n)return null;if(n.placeholder)return l(m,{});const r={label:e.row.label??"",url:e.row.href??""};if(n.place==="column")return l(i,{item:r,label:"text-fg",link:"text-fg transition-colors hover:text-accent"});if(n.place==="panel")return l(i,{item:r,label:"",link:` ${c}`,onNavigate:n.onNavigate});const t=e.item?.dropdown_items??[];return t.length?l(f,{item:{href:r.url,label:o(r.label),plainLabel:r.label,dropdownItems:t.map(a=>({href:a.url,label:o(a.label),plainLabel:a.label}))}}):l(i,{item:r,label:"",link:` ${c}`})}export{d as MenuPlaceContext,k as default};
1
+ "use client";import{jsx as n,jsxs as u}from"react/jsx-runtime";import{createContext as p,useContext as d}from"react";import b from"next/link";import h from"./HeaderNavItem.js";import x from"./MenuPlaceholderLabel.js";import{useCardRow as k}from"efficient-web-builder/render/components/CardRowContext";import{renderGold as o}from"efficient-web-builder/render/components/goldPhrases";import{isLabelOnlyMenuUrl as L,menuLinkKind as N}from"../lib/menu-link.js";import{CURRENT_LINE as s,TAB_CELLS as f}from"../lib/content/tab-strip.js";const w=p(null),m="opacity-80 transition-opacity hover:opacity-100";function i({item:e,label:l,link:r,onNavigate:t,current:c=!1,children:a}){return L(e.url)?n("span",{className:l,children:o(e.label)}):N(e.url)==="off-site"?u("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",className:r,onClick:t,children:[o(e.label),a]}):u(b,{href:e.url,className:r,onClick:t,"aria-current":c?"page":void 0,children:[o(e.label),a]})}function C(){const e=k(),l=d(w);if(!e||!l)return null;if(l.placeholder)return n(x,{});const r={label:e.row.label??"",url:e.row.href??""},t=!!l.current&&l.current.index===e.index&&l.current.href===r.url;if(l.place==="tab"){const a=f.tab(e.index===0,t);return n(i,{item:r,label:a,link:a,current:t,children:t?n("span",{className:f.underline}):null})}if(l.place==="column")return n(i,{item:r,label:"text-fg",link:"text-fg transition-colors hover:text-accent",current:t});if(l.place==="panel")return n(i,{item:r,label:"",link:` ${m}`,onNavigate:l.onNavigate,current:t});const c=e.item?.dropdown_items??[];return c.length?n(h,{item:{href:r.url,label:o(r.label),plainLabel:r.label,dropdownItems:c.map(a=>({href:a.url,label:o(a.label),plainLabel:a.label}))}}):t?n(i,{item:r,label:"",link:s.rowLink,current:!0,children:n("span",{"aria-hidden":"true",className:s.row})}):n(i,{item:r,label:"",link:` ${m}`})}export{w as MenuPlaceContext,C as default};
@@ -1,7 +1,7 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
3
3
  import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
4
- import type { FieldUsageAnswer } from "../lib/content/field-usage.js";
4
+ import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
5
5
  export interface ProductCardChrome {
6
6
  imageBackgroundFill: string;
7
7
  hover: CardHoverDrawn;
@@ -1 +1 @@
1
- "use client";import{jsx as l}from"react/jsx-runtime";import{GRID_CARD_SHOW as r}from"../lib/sections/card-show-defaults.js";import{createContext as G,useContext as M,useMemo as P}from"react";import{DEFAULT_CARD_INDEX_FORMAT as D,DEFAULT_CARD_OUTLINE as d}from"efficient-web-builder/format/lib/sections/product-card-style";import{THEME_CARD_IMAGE_BG as S}from"efficient-web-builder/format/lib/content/card-image-background";import{cardHoverOf as v}from"efficient-web-builder/format/lib/animation/hover";import{DEFAULT_COVER_INDEX as R}from"../lib/wheels/cover-rendering.js";import{CARD_IMAGE_SIZES as a}from"../lib/sections/card-image-sizes.js";const p=[],I=v({},"ProductGrid"),F={imageBackgroundFill:S,hover:I,coverIndex:R,indexBadge:D,outline:d,showBadge:!0,fieldUsage:p,reserveEyebrow:!1,showCardPrice:!0,showCardFinishes:!0,...r,imageSizes:a},T=G(F);function B({imageBackgroundFill:o,hover:t=I,coverIndex:e=R,indexBadge:m=D,outline:u=d,showBadge:_=!0,fieldUsage:n=p,reserveEyebrow:C=!1,showCardPrice:E=!0,showCardFinishes:c=!0,showCardSizes:i=r.showCardSizes,showCardBuy:s=r.showCardBuy,showCardPage:f=r.showCardPage,imageSizes:A=a,children:x}){const O=P(()=>({imageBackgroundFill:o,hover:t,coverIndex:e,indexBadge:m,outline:u,showBadge:_,fieldUsage:n,reserveEyebrow:C,showCardPrice:E,showCardFinishes:c,showCardSizes:i,showCardBuy:s,showCardPage:f,imageSizes:A}),[o,t,e,m,u,_,n,C,E,c,i,s,f,A]);return l(T.Provider,{value:O,children:x})}function V(){return M(T)}export{B as ProductCardChromeProvider,V as useProductCardChrome};
1
+ "use client";import{jsx as l}from"react/jsx-runtime";import{GRID_CARD_SHOW as r}from"../lib/sections/card-show-defaults.js";import{createContext as F,useContext as G,useMemo as L}from"react";import{DEFAULT_CARD_INDEX_FORMAT as A,DEFAULT_CARD_OUTLINE as d}from"efficient-web-builder/format/lib/sections/product-card-style";import{THEME_CARD_IMAGE_BG as M}from"efficient-web-builder/format/lib/content/card-image-background";import{cardHoverOf as P}from"efficient-web-builder/format/lib/animation/hover";import{NO_FIELD_ANSWERS as R}from"../lib/content/field-usage.js";import{DEFAULT_COVER_INDEX as p}from"../lib/wheels/cover-rendering.js";import{CARD_IMAGE_SIZES as a}from"../lib/sections/card-image-sizes.js";const I=P({},"ProductGrid"),S={imageBackgroundFill:M,hover:I,coverIndex:p,indexBadge:A,outline:d,showBadge:!0,fieldUsage:R,reserveEyebrow:!1,showCardPrice:!0,showCardFinishes:!0,...r,imageSizes:a},T=F(S);function V({imageBackgroundFill:o,hover:t=I,coverIndex:e=p,indexBadge:m=A,outline:u=d,showBadge:_=!0,fieldUsage:E=R,reserveEyebrow:i=!1,showCardPrice:C=!0,showCardFinishes:n=!0,showCardSizes:c=r.showCardSizes,showCardBuy:f=r.showCardBuy,showCardPage:D=r.showCardPage,imageSizes:s=a,children:x}){const O=L(()=>({imageBackgroundFill:o,hover:t,coverIndex:e,indexBadge:m,outline:u,showBadge:_,fieldUsage:E,reserveEyebrow:i,showCardPrice:C,showCardFinishes:n,showCardSizes:c,showCardBuy:f,showCardPage:D,imageSizes:s}),[o,t,e,m,u,_,E,i,C,n,c,f,D,s]);return l(T.Provider,{value:O,children:x})}function Z(){return G(T)}export{V as ProductCardChromeProvider,Z as useProductCardChrome};
@@ -1,9 +1,8 @@
1
- import { type CardImageBackground } from "efficient-web-builder/format/lib/content/card-image-background";
2
- import type { CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
1
+ import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
3
2
  import type { SlotComponent } from "efficient-easel/blocks";
4
3
  import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
5
- import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
6
4
  import type { CategorySourceValue } from "../lib/content/source-values.js";
5
+ import { type MoreProducts } from "../lib/sections/product-grid-pages.js";
7
6
  import type { ProductSummary, WheelSummary } from "../lib/api/index.js";
8
7
  export declare const TITLE_SIZES: readonly [{
9
8
  readonly value: "para";
@@ -43,25 +42,20 @@ interface Props {
43
42
  wheels?: WheelSummary[];
44
43
  source?: CategorySourceValue;
45
44
  catalog?: ProductSummary[];
45
+ firstCountInChips?: boolean;
46
46
  kinds?: string[];
47
47
  columns?: number;
48
48
  columnsPhone?: unknown;
49
+ columnsTablet?: unknown;
49
50
  limit?: number;
51
+ moreProducts?: MoreProducts;
52
+ perPage?: number;
50
53
  editing?: boolean;
51
54
  contentCapped?: boolean;
52
- imageBackground?: CardImageBackground;
53
- cardImage?: number | null;
54
55
  hover?: CardHoverDrawn;
55
- coverIndex?: number;
56
- indexBadge?: CardIndexFormat;
57
- outline?: CardOutline;
58
- showBadge?: boolean;
59
56
  fieldUsage?: readonly FieldUsageAnswer[];
60
- showCardPrice?: boolean;
61
- showCardFinishes?: boolean;
62
- showCardSizes?: boolean;
63
- showCardBuy?: boolean;
64
- showCardPage?: boolean;
57
+ ownerId?: string;
58
+ template?: SlotComponent;
65
59
  }
66
- export default function ProductGridSection({ num, catalog, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, columnsPhone, limit, editing, contentCapped, imageBackground, hover, coverIndex, indexBadge, outline, showBadge, fieldUsage, showCardPrice, showCardFinishes, showCardSizes, showCardBuy, showCardPage, cardImage, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
60
+ export default function ProductGridSection({ num, catalog, firstCountInChips, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, columnsPhone, columnsTablet, limit: limitProp, moreProducts, perPage, editing, contentCapped, hover, fieldUsage, ownerId, template, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
67
61
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as x,Fragment as De}from"react/jsx-runtime";import{GRID_CARD_SHOW as D}from"../lib/sections/card-show-defaults.js";import{useScopeClass as He}from"../lib/use-scope-class.js";import{useEffect as _,useMemo as p,useState as Ue}from"react";import{CARD_IMAGE_BG_OFF as je,resolveCardImageBackground as We}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as Xe}from"efficient-web-builder/format/lib/content/card-image-shape";import{containerGapProps as Ke,GAP_ZONE_CLASS as Ze}from"efficient-web-builder/format/lib/content/container-gap";import qe from"next/link";import Ve from"./ProductCard.js";import{CARD_ROWS_GRID_CLASS as Ye,cardRowsGap as Je,cardRowsGridStyle as Qe}from"./WheelCardFrame.js";import{ProductCardChromeProvider as er}from"./ProductCardChrome.js";import{gridClassImageSizes as rr}from"../lib/sections/card-image-sizes.js";import{fillRowCss as tr}from"../lib/sections/fill-row.js";import{noHoleBands as re,noHoleCss as te,showsASetCard as ne}from"../lib/sections/grid-no-hole.js";import{setIsWide as nr,summarySetBuild as sr}from"../lib/wheels/set-mode.js";import{answersForKind as se}from"../lib/content/field-usage.js";import{wheelCardEyebrowShows as or}from"./ProductCardEyebrow.js";import ar from"./NoCurrencyNote.js";import{DEFAULT_CARD_OUTLINE as ir,cardIndexCss as lr,parseCardIndexFormat as dr}from"efficient-web-builder/format/lib/sections/product-card-style";import{DEFAULT_COVER_INDEX as mr}from"../lib/wheels/cover-rendering.js";import{SITE_WIDTH_CAP as cr,centredCap as pr}from"efficient-web-builder/format/lib/content/page-width";import{ProductCatalogProvider as ur,SectionWheelsProvider as gr}from"./ProductRef.js";import{useCurrency as hr}from"./CurrencyContext.js";import{COLLECTION_ATTR as fr,useCatalogFilter as xr}from"./catalog/CatalogFilterContext.js";import wr from"./SectionBand.js";import{useInsideBox as vr,useInsideSiteGutter as yr}from"efficient-web-builder/render/components/SiteGutterFrame";import{productGridColumnsClass as Cr}from"../lib/sections/product-grid-columns.js";import{renderGold as H,renderHeadline as br}from"efficient-web-builder/render/components/goldPhrases";import{applyCatalogFilters as Sr}from"../lib/wheels/catalog-filters.js";import{normalizeCatalogRows as $r}from"../lib/wheels/wheel-summary-casing.js";import Mr from"./TyreSummaryCard.js";import{itemKind as U,plpKindNoun as Nr}from"../lib/catalog/plp-item.js";import{filterBarCategoryOf as _r,gridKindsOf as Er,gridRowsOf as Tr}from"../lib/wheels/grid-source.js";import{useUnifiedProductCatalog as zr}from"./useProductCatalog.js";import{STICKY_UNDERHEADER_CLASS as Ir}from"efficient-web-builder/render/lib/document/header-clearance";import{finishFamiliesOf as Lr}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as Ar}from"../lib/wheels/lug-count.js";import{diametersOf as Br}from"../lib/wheels/size-range.js";import{say as Pr}from"efficient-web-builder/format/lib/editor-words";import{DEFAULT_TITLE_SIZE as Rr}from"../lib/sections/product-grid-title.js";const s={headingMediumUpTo800Xs:"max-view-wide:text-[length:var(--size-headingMedium,28px)]",headingMediumUpTo800Small:"max-view-wide:text-[length:var(--size-headingMedium,32px)]",headingMediumUpTo800Large:"max-view-wide:text-[length:var(--size-headingMedium,36px)]",headingMediumUpTo800Xl:"max-view-wide:text-[length:var(--size-headingMedium,40px)]",body:"text-[length:var(--size-body,13px)]",headingMedium1:"text-[length:var(--size-headingMedium,40px)]",headingMedium2:"text-[length:var(--size-headingMedium,48px)]",headingMedium3:"text-[length:var(--size-headingMedium,56px)]",headingMedium4:"text-[length:var(--size-headingMedium,64px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},oe=[{value:"para",label:"Paragraph size — 13px",cls:`font-mono font-normal uppercase tracking-[0.22em] ${s.labelLarge}`},{value:"sm",label:"Small — 40px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium1} ${s.headingMediumUpTo800Xs}`},{value:"md",label:"Medium — 48px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium2} ${s.headingMediumUpTo800Small}`},{value:"lg",label:"Large — 56px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium3} ${s.headingMediumUpTo800Large}`},{value:"xl",label:"Extra large — 64px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium4} ${s.headingMediumUpTo800Xl}`}];function Fr(w){return(oe.find(u=>u.value===w)??oe.find(u=>u.value===Rr)).cls}function Or({num:w,catalog:u,kinds:E,title:T,titleSize:ae,padTop:j,description:C,link:v,products:ie,wheels:le,source:d,columns:de,columnsPhone:me,limit:o,editing:y,contentCapped:ce=!1,imageBackground:pe,hover:ue,coverIndex:ge,indexBadge:he,outline:fe,showBadge:xe,fieldUsage:g,showCardPrice:we,showCardFinishes:ve,showCardSizes:ye,showCardBuy:Ce,showCardPage:be,cardImage:Se,gap:$e,gapPhone:Me}){const z=p(()=>g?se(g,"alloy-wheel"):void 0,[g]),Ne=p(()=>g?se(g,"tyre"):void 0,[g]),e=He("pg"),m=Cr(de,me),W=typeof o=="number"&&o>0,X=ce,_e=yr(),Ee=vr(),Te=_e||Ee,K=zr(y===!0&&!!d),i=p(()=>d?$r(Tr(d,E,K??u??[])):null,[u,K,d,E]),c=_r(d),h=c!==null,{filters:b,reportCount:I,reportLugs:L,reportSizes:A,reportFinishes:B,reportCategories:P,vehicle:Z}=xr(),{currency:R}=hr(),F=h&&!!b.process&&b.process!==c,t=p(()=>i?h?Sr(i,b,R,Z.fit):i:null,[i,h,b,R,Z.fit]);_(()=>(P(e,c===null?[]:[c]),()=>P(e,[])),[c,P,e]),_(()=>{if(h)return I(e,F?0:t?.length??0),()=>I(e,0)},[h,F,t,I,e]);const ze=p(()=>{const n=(t??[]).filter(l=>U(l)!=="tyre");if(n.length===0)return!1;const a=n.some(l=>!!l.process);return n.some(l=>!!l.setWords)||or({kind:!1,brand:!1,process:a},z??[])},[t,z]),S=p(()=>({lugs:Ar(i??[]),sizes:Br(i??[]),finishes:Lr(i??[])}),[i]);_(()=>(L(e,S.lugs),A(e,S.sizes),B(e,S.finishes),()=>{L(e,[]),A(e,[]),B(e,[])}),[S,L,A,B,e]);const f=Ke("ProductGrid",$e,"both",Me),q=f.className.includes(Ze),O=`${e} grid${f.className} bg-[var(--catalog-grid-bg)] ${m}`,Ie=q?`${O} ${Ye}`:O,Le=q?{...f.style,...Qe(Je(f))}:f.style,Ae=t?t.length>0?r("div",{className:Ie,style:Le,children:t.map((n,a)=>U(n)==="tyre"?r(Mr,{item:n,currency:R,editing:y,fieldUsage:Ne},`tyre:${n.slug}-${a}`):r(Ve,{wheel:n,variant:"catalog"},`${n.slug}-${a}`))}):y?r("div",{className:"flex min-h-[320px] items-center justify-center rounded bg-surface-2 p-4 text-center",children:r("span",{className:`font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:Pr("No products in “{name}” yet",{name:d?.name??""})})}):null:r(ie,{className:O,style:f.style,minEmptyHeight:320}),$=t?t.length:null,V=Nr(Er(d,E)),Be=w||T||C||v?x("div",{className:`${Ir} sticky top-[var(--sf-header-h,88px)] z-30 mb-5 flex items-center justify-between gap-4 max-view-wide:flex-wrap max-view-wide:gap-y-2 border-b border-line bg-bg/95 py-3 backdrop-blur-md ${X||Te?"":"-mx-[var(--sf-site-gutter,40px)] px-[var(--sf-site-gutter,40px)] max-view-wide:-mx-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]"}`,children:[x("div",{className:"flex min-w-0 items-end gap-6 max-view-wide:flex-col max-view-wide:items-stretch max-view-wide:gap-3",children:[w&&r("span",{className:`font-mono ${s.labelLarge} leading-none uppercase tracking-[0.22em] text-fg-dim`,children:H(w)}),T&&r("h2",{className:`${Fr(ae)} leading-none text-fg max-view-wide:leading-[1] [&>span]:block`,children:br(T,!1)})]}),(C||v||$!==null)&&x("div",{className:"flex items-center gap-5 max-view-wide:gap-3 view-wide:grow view-wide:justify-end",children:[C&&r("span",{className:`max-w-[340px] truncate font-display ${s.body} leading-[1.4] text-fg-dim max-view-wide:hidden view-wide:w-0 view-wide:grow view-wide:text-right`,children:H(C)}),v&&x(qe,{href:v.href,className:`inline-flex items-center gap-2 whitespace-nowrap font-mono ${s.labelLarge} uppercase tracking-[0.2em] text-fg-dim transition-colors hover:text-fg`,children:[H(v.text),r("span",{"aria-hidden":!0,children:"→"})]}),$!==null&&x("span",{className:`whitespace-nowrap font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:[$," ",$===1?V.one:V.many]})]})]}):null,Pe=typeof j=="number"?{"--pg-pt":`${j}px`}:{},Y=dr(he),M=p(()=>{if(!t)return null;const n=t.map(a=>U(a)!=="tyre"&&nr(sr(a))?2:1);return ne(n,o)?re(m,n,o):null},[t,m,o]),[Re,Fe]=Ue("");_(()=>{if(t)return;const n=document.querySelector(`.${e}`);if(!n)return;const a=()=>{const l=[...n.children].map(ke=>ke.classList.contains("col-span-2")?2:1);Fe(ne(l,o)?te(e,re(m,l,o,!1),l.length):"")};a();const k=new MutationObserver(a);return k.observe(n,{childList:!0}),()=>k.disconnect()},[t,e,m,o]);const Oe=M?M[0].tracks:t?W?Math.min(t.length,o):t.length:void 0,N=M?te(e,M,t.length):Re,J=N?"":tr(e,m,{limit:o,cards:t?.length}),Q=lr(e,Y),ee=x(De,{children:[W&&!N&&r("style",{children:`.${e} > *:nth-child(n+${o+1}){display:none}`}),N&&r("style",{children:N}),J&&r("style",{children:J}),Q&&r("style",{children:Q}),Be,Ae,r(ar,{editing:y})]});if(F)return null;const G=r(wr,{attrs:h&&c!==null?{[fr]:c}:void 0,className:"relative z-[2] bg-bg px-[var(--sf-site-gutter,40px)] pt-[var(--pg-pt)] pb-[120px] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:pt-[70px] max-view-wide:pb-[70px]",column:null,inAnyBox:!0,style:{...Pe,...Xe(Se)},defaults:{"--pg-pt":"120px"},children:X?r("div",{style:pr(cr),children:ee}):ee}),Ge=i?G:y?r(ur,{children:G}):r(gr,{wheels:le,children:G});return r(er,{imageSizes:rr(m,Oe),imageBackgroundFill:We(pe,je),hover:ue,coverIndex:ge??mr,indexBadge:Y,outline:fe??ir,showBadge:xe??!0,fieldUsage:z,reserveEyebrow:ze,showCardPrice:we??!0,showCardFinishes:ve??!0,showCardSizes:ye??D.showCardSizes,showCardBuy:Ce??D.showCardBuy,showCardPage:be??D.showCardPage,children:Ge})}export{oe as TITLE_SIZES,Or as default};
1
+ "use client";import{jsx as t,jsxs as f,Fragment as tt}from"react/jsx-runtime";import{useScopeClass as rt}from"../lib/use-scope-class.js";import{useEffect as A,useMemo as u,useState as me}from"react";import{cardHoverOf as nt}from"efficient-web-builder/format/lib/animation/hover";import{containerGapProps as it}from"efficient-web-builder/format/lib/content/container-gap";import st from"next/link";import{cardRowsGrid as ot,GridCardProvider as at,GridCards as lt,gridIndexCss as mt}from"./GridCardTemplate.js";import{gridClassImageSizes as dt}from"../lib/sections/card-image-sizes.js";import{fillRowCss as de}from"../lib/sections/fill-row.js";import{hiddenCardsRule as ce,noHoleBands as pe,noHoleCss as ue,ONE_WHEEL_MARK as ct,oneWheelScope as ge,pairScope as pt,showsASetCard as fe}from"../lib/sections/grid-no-hole.js";import{setIsWide as ut,summarySetBuild as gt}from"../lib/wheels/set-mode.js";import{answersForKind as he,NO_FIELD_ANSWERS as ft}from"../lib/content/field-usage.js";import{wheelCardEyebrowShows as ht}from"./ProductCardEyebrow.js";import xt from"./NoCurrencyNote.js";import{SITE_WIDTH_CAP as wt,centredCap as vt}from"efficient-web-builder/format/lib/content/page-width";import{ProductCatalogProvider as yt,SectionWheelsProvider as bt}from"./ProductRef.js";import{useCurrency as St}from"./CurrencyContext.js";import{COLLECTION_ATTR as Ct,useCatalogFilter as Mt}from"./catalog/CatalogFilterContext.js";import{useIsoLayoutEffect as $t,useShopperMember as Nt}from"./catalog/ShopperScope.js";import Et from"./wheels-plp/PlpPagination.js";import{CATALOG_TEXT_SIZE as Tt}from"../lib/sections/catalog-text-size.js";import{applyShopperFilters as zt,hasActivePlpFilters as Pt}from"../lib/wheels/plp-filters.js";import Lt from"./catalog/ClearAllButton.js";import{gridPagingOf as It,gridShownOf as _t}from"../lib/sections/product-grid-pages.js";import Ot from"./SectionBand.js";import{useInsideBox as At,useInsideSiteGutter as Ht}from"efficient-web-builder/render/components/SiteGutterFrame";import{productGridColumnsClass as Bt}from"../lib/sections/product-grid-columns.js";import{renderGold as V,renderHeadline as Rt}from"efficient-web-builder/render/components/goldPhrases";import{applyCatalogFilters as Gt}from"../lib/wheels/catalog-filters.js";import{normalizeCatalogRows as kt}from"../lib/wheels/wheel-summary-casing.js";import Ft from"./TyreSummaryCard.js";import{itemKind as Y,plpKindNoun as xe}from"../lib/catalog/plp-item.js";import{filterBarCategoryOf as Wt,gridKindsOf as we,gridRowsOf as jt}from"../lib/wheels/grid-source.js";import{useUnifiedProductCatalog as Ut}from"./useProductCatalog.js";import{STICKY_UNDERHEADER_CLASS as Kt}from"efficient-web-builder/render/lib/document/header-clearance";import{finishFamiliesOf as Xt}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as Dt}from"../lib/wheels/lug-count.js";import{diametersOf as Zt}from"../lib/wheels/size-range.js";import{say as qt}from"efficient-web-builder/format/lib/editor-words";import{DEFAULT_TITLE_SIZE as Vt}from"../lib/sections/product-grid-title.js";const Yt=nt({},"ProductGrid"),i={headingMediumUpTo800Xs:"max-view-wide:text-[length:var(--size-headingMedium,28px)]",headingMediumUpTo800Small:"max-view-wide:text-[length:var(--size-headingMedium,32px)]",headingMediumUpTo800Large:"max-view-wide:text-[length:var(--size-headingMedium,36px)]",headingMediumUpTo800Xl:"max-view-wide:text-[length:var(--size-headingMedium,40px)]",body:"text-[length:var(--size-body,13px)]",headingMedium1:"text-[length:var(--size-headingMedium,40px)]",headingMedium2:"text-[length:var(--size-headingMedium,48px)]",headingMedium3:"text-[length:var(--size-headingMedium,56px)]",headingMedium4:"text-[length:var(--size-headingMedium,64px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},ve=[{value:"para",label:"Paragraph size — 13px",cls:`font-mono font-normal uppercase tracking-[0.22em] ${i.labelLarge}`},{value:"sm",label:"Small — 40px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium1} ${i.headingMediumUpTo800Xs}`},{value:"md",label:"Medium — 48px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium2} ${i.headingMediumUpTo800Small}`},{value:"lg",label:"Large — 56px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium3} ${i.headingMediumUpTo800Large}`},{value:"xl",label:"Extra large — 64px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium4} ${i.headingMediumUpTo800Xl}`}];function Jt(M){return(ve.find(h=>h.value===M)??ve.find(h=>h.value===Vt)).cls}function Qt({num:M,catalog:h,firstCountInChips:ye=!1,kinds:T,title:H,titleSize:be,padTop:J,description:z,link:$,products:Se,wheels:Ce,source:p,columns:Me,columnsPhone:$e,columnsTablet:Ne,limit:Ee,moreProducts:Te,perPage:ze,editing:x,contentCapped:Pe=!1,hover:Le,fieldUsage:w,ownerId:Ie="",template:_e,gap:Oe,gapPhone:Ae}){const B=u(()=>w?he(w,"alloy-wheel"):void 0,[w]),He=u(()=>w?he(w,"tyre"):void 0,[w]),e=rt("pg"),{paged:v,per:y,limit:l,cap:N}=It({moreProducts:Te,perPage:ze,limit:Ee}),d=Bt(Me,$e,Ne),Q=Pe,Be=Ht(),Re=At(),Ge=Be||Re,ee=Ut(x===!0&&!!p),o=u(()=>p?kt(jt(p,T,ee??h??[])):null,[h,ee,p,T]),R=Nt("grid",o),a=o?R.scope:null,g=Wt(p),b=g!==null&&!a,{filters:P,reportCount:G,reportLugs:k,reportSizes:F,reportFinishes:W,reportCategories:j,vehicle:te}=Mt(),{currency:S}=St(),U=b&&!!P.process&&P.process!==g,K=a?.state,n=u(()=>o?K?zt(o,K,S):b?Gt(o,P,S,te.fit):o:null,[o,K,b,P,S,te.fit]),[ke,Fe]=me(1),X=v&&n?Math.max(1,Math.ceil(n.length/y)):1,C=Math.min(X,Math.max(1,a?a.state.page:ke)),{reportShown:D}=R,re=a!==null;$t(()=>{if(!re||!n)return D(null);D(_t(n.length,{paged:v,per:y,cap:N},C))},[re,n,D,v,C,y,N]);const We=r=>a?a.update({page:r}):Fe(r),s=u(()=>v&&n?n.slice((C-1)*y,C*y):n,[v,n,C,y]);A(()=>(j(e,g===null?[]:[g]),()=>j(e,[])),[g,j,e]),A(()=>{if(b)return G(e,U?0:n?.length??0),()=>G(e,0)},[b,U,n,G,e]);const L=u(()=>({lugs:Dt(o??[]),sizes:Zt(o??[]),finishes:Xt(o??[])}),[o]);A(()=>(k(e,L.lugs),F(e,L.sizes),W(e,L.finishes),()=>{k(e,[]),F(e,[]),W(e,[])}),[L,k,F,W,e]);const Z=it("ProductGrid",Oe,"both",Ae),je=`${e} grid${Z.className} bg-[var(--catalog-grid-bg)] ${d}`,ne=ot(Z),Ue=`${e} grid${ne.className} bg-[var(--catalog-grid-bg)] ${d}`,Ke=ne.style,Xe=u(()=>{const r=(n??[]).filter(c=>Y(c)!=="tyre");if(r.length===0)return!1;const m=r.some(c=>!!c.process);return r.some(c=>!!c.setWords)||ht({kind:!1,brand:!1,process:m},B??[])},[n,B]),De=s?s.length>0?t("div",{className:Ue,style:Ke,children:s.map((r,m)=>Y(r)==="tyre"?t(Ft,{item:r,currency:S,editing:x,fieldUsage:He},`tyre:${r.slug}-${m}`):t(lt,{wheels:[r],children:E=>E},`${r.slug}-${m}`))}):a&&Pt(a.state)?f("div",{className:"flex min-h-[320px] flex-col items-center justify-center gap-4 bg-surface-2 p-4 text-center",children:[t("span",{className:`font-mono ${i.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:`No ${xe(we(p,T)).many} match those filters`}),t(Lt,{onClick:a.clear})]}):x?t("div",{className:"flex min-h-[320px] items-center justify-center rounded bg-surface-2 p-4 text-center",children:t("span",{className:`font-mono ${i.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:qt("No products in “{name}” yet",{name:p?.name??""})})}):null:t(Se,{className:je,style:Z.style,minEmptyHeight:320}),Ze=a?a.countInChips:ye,I=n&&!Ze?n.length:null,ie=xe(we(p,T)),qe=M||H||z||$?f("div",{className:`${Kt} sticky top-[var(--sf-header-h,88px)] z-30 mb-5 flex items-center justify-between gap-4 max-view-wide:flex-wrap max-view-wide:gap-y-2 border-b border-line bg-bg/95 py-3 backdrop-blur-md ${Q||Ge?"":"-mx-[var(--sf-site-gutter,40px)] px-[var(--sf-site-gutter,40px)] max-view-wide:-mx-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]"}`,children:[f("div",{className:"flex min-w-0 items-end gap-6 max-view-wide:flex-col max-view-wide:items-stretch max-view-wide:gap-3",children:[M&&t("span",{className:`font-mono ${i.labelLarge} leading-none uppercase tracking-[0.22em] text-fg-dim`,children:V(M)}),H&&t("h2",{className:`${Jt(be)} leading-none text-fg max-view-wide:leading-[1] [&>span]:block`,children:Rt(H,!1)})]}),(z||$||I!==null)&&f("div",{className:"flex items-center gap-5 max-view-wide:gap-3 view-wide:grow view-wide:justify-end",children:[z&&t("span",{className:`max-w-[340px] truncate font-display ${i.body} leading-[1.4] text-fg-dim max-view-wide:hidden view-wide:w-0 view-wide:grow view-wide:text-right`,children:V(z)}),$&&f(st,{href:$.href,className:`inline-flex items-center gap-2 whitespace-nowrap font-mono ${i.labelLarge} uppercase tracking-[0.2em] text-fg-dim transition-colors hover:text-fg`,children:[V($.text),t("span",{"aria-hidden":!0,children:"→"})]}),I!==null&&f("span",{className:`whitespace-nowrap font-mono ${i.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:[I," ",I===1?ie.one:ie.many]})]})]}):null,Ve=typeof J=="number"?{"--pg-pt":`${J}px`}:{},_=u(()=>{if(!s)return null;const r=s.map(m=>Y(m)!=="tyre"&&ut(gt(m))?2:1);return fe(r,l)?pe(d,r,l):null},[s,d,l]),[Ye,Je]=me("");A(()=>{if(s)return;const r=document.querySelector(`.${e}`);if(!r)return;const m=()=>{const c=[...r.children].map(le=>le.classList.contains("col-span-2")&&!le.querySelector(ct)?2:1);Je(fe(c,l)?ue(e,pe(d,c,l,!1),c.length):"")};m();const E=new MutationObserver(m);return E.observe(r,{childList:!0}),()=>E.disconnect()},[s,e,d,l]);const Qe=_?_[0].tracks:s?N?Math.min(s.length,l):s.length:void 0,O=_?ue(pt(e),_,s.length)+(N?ce(ge(e),l+1):"")+de(ge(e),d,{limit:l,cards:s.length}):Ye,se=O?"":de(e,d,{limit:l,cards:s?.length}),oe=mt(e),ae=f(tt,{children:[N&&!O&&t("style",{children:ce(e,l+1)}),O&&t("style",{children:O}),se&&t("style",{children:se}),oe&&t("style",{children:oe}),qe,De,v&&X>1&&t(Et,{textSize:Tt.labelSmall,page:C,pageCount:X,onPage:We}),t(xt,{editing:x})]});if(U)return null;const q=t(Ot,{rootRef:R.ref,attrs:b&&g!==null?{[Ct]:g}:void 0,className:"relative z-[2] bg-bg px-[var(--sf-site-gutter,40px)] pt-[var(--pg-pt)] pb-[120px] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:pt-[70px] max-view-wide:pb-[70px]",column:null,inAnyBox:!0,style:Ve,defaults:{"--pg-pt":"120px"},children:Q?t("div",{style:vt(wt),children:ae}):ae}),et=o?q:x?t(yt,{currency:S,children:q}):t(bt,{wheels:Ce,currency:S,children:q});return t(at,{value:{ownerId:Ie,Template:_e,hover:Le??Yt,imageSizes:dt(d,Qe),fieldUsage:B??ft,reserveEyebrow:Xe,editing:x===!0},children:et})}export{ve as TITLE_SIZES,Qt as default};
@@ -1 +1 @@
1
- "use client";import{jsx as a,Fragment as b,jsxs as n}from"react/jsx-runtime";import Q from"next/link";import{BUY_ROW_CLASS as ye}from"./buy-row.js";import{useEffect as X,useRef as Ne,useState as Se}from"react";import{useCart as we}from"./CartContext.js";import Te from"./QuoteLink.js";import{useSiteTakesOrders as _e}from"./SiteRecordContext.js";import Re from"./EmailCaptureForm.js";import{useEnglish as I}from"./EnglishVariant.js";import Ee from"./QuantityStepper.js";import{MarkedLabel as $,heroView as Ce}from"./product-hero/hero-view.js";import Ae from"./ProductGallery.js";import{useRootIsDark as Le}from"efficient-shell/theme";import{useWishlist as Oe}from"./WishlistContext.js";import{useStockAlertSignup as ze}from"./useStockAlertSignup.js";import{SPARE_WORDS as Ie,productCartLine as $e}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as je}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as Me}from"../lib/catalog/product-options.js";import{STOCK_WORDS as Pe}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 He,DEFAULT_HERO_TEXT_ALIGN as Be,parseHeroLayout as Ue,parseHeroRatio as Ve,parseHeroTextAlign as We}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as Ge,DEFAULT_HERO_IMAGE_FIT as Ke}from"../lib/sections/hero-gallery.js";import{ADD_TO_BASKET_ATTR as qe,MAX_SPARES as Ye,UNITS_PER_SET as Qe,formatPrice as J}from"../lib/commerce.js";import{UNPRICED_LABEL as Xe,formatSelectionPrice as Je,setPriceLabel as Ze}from"../lib/wheels/price-display.js";import{productIsDually as et,productIsTwoObjects as tt,setSuppressesRow as at}from"../lib/wheels/set-mode.js";import{CONTENT_CAP_GUTTER as Z}from"../lib/sections/content-cap-gutter.js";import{CardTemplateRows as nt}from"efficient-web-builder/render/components/CardRowContext";import rt from"./card-pieces/CardPrice.js";import{HeroPriceStateProvider as lt}from"./card-pieces/ProductCardState.js";const ot=4e3;function it(t){return t?[t.year,t.make,t.model,t.modification].join("-"):""}const st=[{}],ct=.72;function dt(t){const r=t.trim().split(/\s+/).filter(Boolean);if(r.length===0)return;const d=r.map((s,c)=>s.length+(r.length>1&&c===r.length-1?1:0));return`calc(100cqi / ${(Math.max(...d)*ct).toFixed(2)})`}function mt({product:t,selection:r,onLightbox:d,editing:s=!1,pricePlacement:c="top",showVehicleFitment:l=!0,heroLayout:p=Fe,imageRatio:w=He,textAlign:te=Be,showSpecTable:ae=!0,showPriceQuote:T=!0,galleryMode:ne=Ge,imageFit:re=Ke,trustBullets:le,nodeId:oe,priceTemplate:j}){const ie=I(),v=Ue(p),M=We(te),y=Ve(w),se=v==="imageRight"?`${100-y}fr ${y}fr`:`${y}fr ${100-y}fr`,{picked:ce,pick:P,qty:D,setQty:de,choice:h,setChoice:N,angleIdx:me,setAngleIdx:pe,showValidation:ue,setShowValidation:_,manualMode:F,vehicle:R,rows:H,facts:fe,part:x,outOfStock:B,offer:m,preOrder:E,canAddToCart:S,currency:k,price:f,set:U,msrpLabel:be}=r,i=Ce(t,r,s),C=et(t),he=tt(t),A=l?i.vehicle:null,ge=l?i.vehicleMemory:null,L=!Le({whenUnset:!0}),{addAndOpen:xe,warmCatalog:V}=we(),g=_e();X(()=>{!s&&g&&V(t.kind)},[s,g,t.kind,V]);const W=H.filter(e=>!E||e.values.length>0),G=W.filter(e=>e.role==="resolves"),O=W.filter(e=>e.role==="describes"&&!at(he,e.key)),K=O.findIndex(e=>e.chosen===null),q=(!A||!i.vehicleAnswersSpecs||r.fitmentSet)&&Me(H,E)?K===-1?O:O.slice(0,K+1):[],ve=[...G,...q],z=a(lt,{value:{kind:"hero",msrpLabel:be||null,amount:C?Ze(f,k):Je(f,k),unitLabel:f.priced?i.unitLabel:null,packBadge:f.setTotal!=null?`${m.quantityLabel}: ${J(U,k)}`:null},children:j?a(nt,{ownerId:oe??"",ownerType:"ProductHero",Template:j,rows:st,fallback:null,children:e=>e}):a(rt,{})}),Y=Ne(null);return X(()=>{s||Y.current===t.slug||(Y.current=t.slug,De({itemId:x?`${t.slug}|${x.id}`:t.slug,itemName:t.name,variant:i.metaValue,pricePerSet:f.setTotal??f.fromSetTotal??0,currency:k}))},[s,t.slug,t.name,i.metaValue,x,f,k]),n(b,{children:[a("nav",{className:`border-b border-line ${Z} pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))]`,style:L?void 0:{background:"var(--section-bg)"},children:t.crumbs.map((e,o)=>n("span",{children:[o>0&&n(b,{children:[a("span",{className:"mx-3 text-accent",children:"/"}),a("wbr",{})]}),e.href?a(Q,{href:e.href,className:"hover:text-fg",children:a($,{text:e.label})}):a("span",{className:"text-fg",children:a($,{text:e.label})})]},`${e.label}-${o}`))}),n("section",{"data-hero-layout":v,"data-hero-align":M,className:[`grid gap-10 ${Z} py-14 max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))] max-view-tablet:py-8`,v==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-view-desktop:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...L?{}:{background:"var(--section-bg)"},...v==="stacked"?{}:{"--hero-cols":se}},children:[a(Ae,{product:t,view:i,angleIdx:me,onSelect:pe,isLight:L,onLightbox:d,galleryMode:ne,imageFit:re,style:v==="imageRight"?{order:2}:void 0}),n("div",{className:["flex flex-col gap-7",M==="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($,{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":dt(i.heading)},children:(()=>{const e=i.heading.lastIndexOf(" ");if(e===-1)return i.heading;const o=i.heading.slice(0,e),u=i.heading.slice(e+1);return n(b,{children:[o," ",n("em",{className:"font-normal italic text-accent",children:[u,"."]})]})})()})]}),c!=="belowSpecs"&&T&&z,ge,G.map(e=>a(ee,{row:e,onPick:P},e.key)),E&&i.preOrder?n(b,{children:[c==="belowSpecs"&&T&&z,i.preOrder]}):n(b,{children:[A,q.map(e=>a(ee,{row:e,onPick:P},e.key)),ae&&a(pt,{facts:fe}),(m.packs.length>0||g&&(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(o=>({...o,unit:e.value})),"aria-pressed":h.unit===e.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",h.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:h.unit===e.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[h.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))})]}),g&&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:h.spares>0,onChange:e=>N(o=>({...o,spares:e.target.checked?Ye:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),m.extra.label]}),g&&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:Ie.howMany}),a("div",{className:"flex flex-col gap-1.5 sm:flex-row sm:flex-wrap",children:m.spareCounts.map(e=>{const o=e.value-Qe,u=h.spares===o;return n("button",{type:"button",onClick:()=>N(ke=>({...ke,spares:o})),"aria-pressed":u,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",u?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:u?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[u&&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)})})]}),g&&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 o=h.spareSide===e.value;return n("button",{type:"button",onClick:()=>N(u=>({...u,spareSide:e.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&&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"&&T&&z,n("div",{className:ye,children:[g&&!(C&&!f.priced)&&a(Ee,{value:D,onChange:de,size:"large"}),!g||C&&!f.priced?a(Te,{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"}):f.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:Pe.outOfStock}):n("button",{type:"button",[qe]:"",onClick:()=>{if(!S){_(!0),window.setTimeout(()=>_(!1),ot);return}if(_(!1),s)return;const e=$e(t,x,ce,{choice:h,qty:D},{fitmentLabel:F?i.specCaption:R.appliedName?`For ${R.appliedName}`:"",fitmentKey:F?`manual|${i.specCaption}`:`vehicle|${it(R.applied?.vehicle)}`});e&&xe(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",f.setTotal!=null?` · ${J(U,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:Xe}),a(ut,{slug:t.slug,name:t.name})]}),B&&x&&a(ft,{partNumbers:x.components.map(e=>e.partNumber),productSlug:t.slug},x.id),ue&&(()=>{const e=ve.filter(u=>u.chosen===null).map(u=>ie(u.prompt).replace(/^Select\s+/i,""));if(A&&i.vehicleAnswersSpecs&&!r.fitmentSet&&e.push("vehicle fitment"),e.length===0)return null;const o=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 ",o," first."]})})()]}),le]})]})]})}function pt({facts:t}){const r=I();return t.length===0?null:a("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:[r(d.label)," ·"]}),a("dd",{className:"font-semibold text-fg",children:d.value.label})]},d.key))})})}function ee({row:t,onPick:r}){const d=I();if(t.values.length===0&&!t.empty)return null;const s=t.values.find(l=>l.value===t.chosen),c=s&&[s.label,s.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[je]: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(Q,{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(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"aria-pressed":p,className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",p?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 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"}),a("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:l.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:l.label})]},l.value)})}):a("div",{className:"flex flex-wrap gap-1.5",children:t.values.map(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"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"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:l.label}),l.note&&a("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:l.note})]},l.value)})})]})}function ut({slug:t,name:r}){const{has:d,toggle:s}=Oe(),c=d(t);return a("button",{type:"button",title:c?"Saved":"Save","aria-label":c?`Remove ${r} from wishlist`:`Save ${r} 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 ft({partNumbers:t,productSlug:r}){const[d,s]=Se(""),{status:c,submit:l,reset:p}=ze();function w(){l({partNumbers:t,email:d,productSlug:r})}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(Re,{className:"-mt-1",email:d,onEmailChange:s,status:c,onResetVerdict:p,onSubmit:w,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{mt as default};
1
+ "use client";import{jsx as a,Fragment as h,jsxs as n}from"react/jsx-runtime";import Q from"next/link";import{BUY_ROW_CLASS as Se}from"./buy-row.js";import{useEffect as J,useRef as we,useState as Te}from"react";import{useCart as Re}from"./CartContext.js";import{useSiteTakesOrders as Ee}from"./SiteRecordContext.js";import _e from"./EmailCaptureForm.js";import{useEnglish as I}from"./EnglishVariant.js";import Ce from"./QuantityStepper.js";import{MarkedLabel as $,heroView as Le}from"./product-hero/hero-view.js";import Ae from"./ProductGallery.js";import{useRootIsDark as Oe}from"efficient-shell/theme";import{useWishlist as Ie}from"./WishlistContext.js";import{useStockAlertSignup as $e}from"./useStockAlertSignup.js";import{SPARE_WORDS as ze,productCartLine as je}from"../lib/catalog/purchase.js";import{OPTION_ROW_ATTR as Me}from"../lib/catalog/store-product.js";import{resolvingRowsAnswered as Pe}from"../lib/catalog/product-options.js";import{trackViewItem as Fe}from"../lib/google-tag.js";import{DEFAULT_HERO_LAYOUT as De,DEFAULT_HERO_RATIO as He,DEFAULT_HERO_TEXT_ALIGN as Be,parseHeroLayout as Ue,parseHeroRatio as Ve,parseHeroTextAlign as We}from"../lib/sections/hero-arrangement.js";import{DEFAULT_HERO_GALLERY_MODE as Ge,DEFAULT_HERO_IMAGE_FIT as qe}from"../lib/sections/hero-gallery.js";import{MAX_SPARES as Ye,UNITS_PER_SET as Ke,formatPrice as Z}from"../lib/commerce.js";import{formatSelectionPrice as Xe,setPriceLabel as Qe}from"../lib/wheels/price-display.js";import{productIsDually as Je,productIsTwoObjects as Ze,setSuppressesRow as et}from"../lib/wheels/set-mode.js";import{CONTENT_CAP_GUTTER as ee}from"../lib/sections/content-cap-gutter.js";import{CardTemplateRows as tt}from"efficient-web-builder/render/components/CardRowContext";import at from"./card-pieces/CardPrice.js";import nt from"./card-pieces/CardBuyButton.js";import{HeroStateProvider as te}from"./card-pieces/ProductCardState.js";const rt=4e3;function lt(t){return t?[t.year,t.make,t.model,t.modification].join("-"):""}const st=[{}],it=.72;function ot(t){const r=t.trim().split(/\s+/).filter(Boolean);if(r.length===0)return;const m=r.map((o,c)=>o.length+(r.length>1&&c===r.length-1?1:0));return`calc(100cqi / ${(Math.max(...m)*it).toFixed(2)})`}function ct({product:t,selection:r,onLightbox:m,editing:o=!1,pricePlacement:c="top",showVehicleFitment:l=!0,heroLayout:p=De,imageRatio:S=He,textAlign:ne=Be,showSpecTable:re=!0,showPriceQuote:w=!0,galleryMode:le=Ge,imageFit:se=qe,trustBullets:ie,nodeId:oe,priceTemplate:z}){const ce=I(),v=Ue(p),j=We(ne),y=Ve(S),me=v==="imageRight"?`${100-y}fr ${y}fr`:`${y}fr ${100-y}fr`,{picked:de,pick:M,qty:P,setQty:pe,choice:b,setChoice:N,angleIdx:ue,setAngleIdx:fe,showValidation:he,setShowValidation:T,manualMode:F,vehicle:R,rows:D,facts:be,part:g,outOfStock:H,offer:d,preOrder:E,canAddToCart:B,currency:k,price:f,set:U,msrpLabel:ge}=r,i=Le(t,r,o),_=Je(t),xe=Ze(t),C=l?i.vehicle:null,ve=l?i.vehicleMemory:null,L=!Oe({whenUnset:!0}),{warmCatalog:V}=Re(),x=Ee();J(()=>{!o&&x&&V(t.kind)},[o,x,t.kind,V]);const W=D.filter(e=>!E||e.values.length>0),G=W.filter(e=>e.role==="resolves"),A=W.filter(e=>e.role==="describes"&&!et(xe,e.key)),q=A.findIndex(e=>e.chosen===null),Y=(!C||!i.vehicleAnswersSpecs||r.fitmentSet)&&Pe(D,E)?q===-1?A:A.slice(0,q+1):[],ke=[...G,...Y];function ye(){return B?(T(!1),o?null:je(t,g,de,{choice:b,qty:P},{fitmentLabel:F?i.specCaption:R.appliedName?`For ${R.appliedName}`:"",fitmentKey:F?`manual|${i.specCaption}`:`vehicle|${lt(R.applied?.vehicle)}`})):(T(!0),window.setTimeout(()=>T(!1),rt),null)}const K={kind:"hero",msrpLabel:ge||null,amount:_?Qe(f,k):Xe(f,k),unitLabel:f.priced?i.unitLabel:null,packBadge:f.setTotal!=null?`${d.quantityLabel}: ${Z(U,k)}`:null,buy:{isSet:_,priced:f.priced,outOfStock:H,canAdd:B,totalLabel:f.setTotal!=null?Z(U,k):null,lineToAdd:ye}},O=a(te,{value:K,children:z?a(tt,{ownerId:oe??"",ownerType:"ProductHero",Template:z,rows:st,fallback:null,children:e=>e}):a(at,{})}),X=we(null);return J(()=>{o||X.current===t.slug||(X.current=t.slug,Fe({itemId:g?`${t.slug}|${g.id}`:t.slug,itemName:t.name,variant:i.metaValue,pricePerSet:f.setTotal??f.fromSetTotal??0,currency:k}))},[o,t.slug,t.name,i.metaValue,g,f,k]),n(h,{children:[a("nav",{className:`border-b border-line ${ee} pt-4 pb-4 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))]`,style:L?void 0:{background:"var(--section-bg)"},children:t.crumbs.map((e,s)=>n("span",{children:[s>0&&n(h,{children:[a("span",{className:"mx-3 text-accent",children:"/"}),a("wbr",{})]}),e.href?a(Q,{href:e.href,className:"hover:text-fg",children:a($,{text:e.label})}):a("span",{className:"text-fg",children:a($,{text:e.label})})]},`${e.label}-${s}`))}),n("section",{"data-hero-layout":v,"data-hero-align":j,className:[`grid gap-10 ${ee} py-14 max-view-tablet:px-[min(20px,var(--sf-site-gutter,40px))] max-view-tablet:py-8`,v==="stacked"?"grid-cols-1":"[grid-template-columns:var(--hero-cols)] max-view-desktop:[grid-template-columns:minmax(0,1fr)]"].join(" "),style:{...L?{}:{background:"var(--section-bg)"},...v==="stacked"?{}:{"--hero-cols":me}},children:[a(Ae,{product:t,view:i,angleIdx:ue,onSelect:fe,isLight:L,onLightbox:m,galleryMode:le,imageFit:se,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($,{text:t.eyebrow})}),t.badge&&n(h,{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":ot(i.heading)},children:(()=>{const e=i.heading.lastIndexOf(" ");if(e===-1)return i.heading;const s=i.heading.slice(0,e),u=i.heading.slice(e+1);return n(h,{children:[s," ",n("em",{className:"font-normal italic text-accent",children:[u,"."]})]})})()})]}),c!=="belowSpecs"&&w&&O,ve,G.map(e=>a(ae,{row:e,onPick:M},e.key)),E&&i.preOrder?n(h,{children:[c==="belowSpecs"&&w&&O,i.preOrder]}):n(h,{children:[C,Y.map(e=>a(ae,{row:e,onPick:M},e.key)),re&&a(mt,{facts:be}),(d.packs.length>0||x&&(d.extra||d.spareCounts.length>0))&&n("div",{className:"border-b border-line pb-[26px]",children:[d.packs.length>0&&n(h,{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:d.packs.map(e=>n("button",{type:"button",onClick:()=>N(s=>({...s,unit:e.value})),"aria-pressed":b.unit===e.value,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",b.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:b.unit===e.value?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[b.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))})]}),x&&d.extra&&n("label",{className:`${d.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:b.spares>0,onChange:e=>N(s=>({...s,spares:e.target.checked?Ye:0})),className:"h-4 w-4 cursor-pointer accent-[var(--accent)]"}),d.extra.label]}),x&&d.spareCounts.length>0&&n(h,{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:d.spareCounts.map(e=>{const s=e.value-Ke,u=b.spares===s;return n("button",{type:"button",onClick:()=>N(Ne=>({...Ne,spares:s})),"aria-pressed":u,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",u?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:u?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[u&&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)})})]}),x&&d.spareSide&&n(h,{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:d.spareSide.label}),a("div",{className:"flex flex-wrap gap-1.5",children:d.spareSide.options.map(e=>{const s=b.spareSide===e.value;return n("button",{type:"button",onClick:()=>N(u=>({...u,spareSide:e.value})),"aria-pressed":s,className:["relative cursor-pointer border-2 px-4 py-3 text-left font-mono uppercase transition-colors",s?"border-accent text-fg outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 text-fg hover:border-accent"].join(" "),style:s?{background:"color-mix(in oklab, var(--accent) 14%, transparent)"}:void 0,children:[s&&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&&O,n("div",{className:Se,children:[x&&!(_&&!f.priced)&&a(Ce,{value:P,onChange:pe,size:"large"}),a(te,{value:K,children:a(nt,{})}),a(dt,{slug:t.slug,name:t.name})]}),H&&g&&a(pt,{partNumbers:g.components.map(e=>e.partNumber),productSlug:t.slug},g.id),he&&(()=>{const e=ke.filter(u=>u.chosen===null).map(u=>ce(u.prompt).replace(/^Select\s+/i,""));if(C&&i.vehicleAnswersSpecs&&!r.fitmentSet&&e.push("vehicle fitment"),e.length===0)return null;const s=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 ",s," first."]})})()]}),ie]})]})]})}function mt({facts:t}){const r=I();return t.length===0?null:a("div",{className:"border-b border-line pb-[26px]",children:a("dl",{className:"flex flex-col gap-2",children:t.map(m=>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(m.label)," ·"]}),a("dd",{className:"font-semibold text-fg",children:m.value.label})]},m.key))})})}function ae({row:t,onPick:r}){const m=I();if(t.values.length===0&&!t.empty)return null;const o=t.values.find(l=>l.value===t.chosen),c=o&&[o.label,o.note].filter(Boolean).join(" · ");return n("div",{className:"border-b border-line pb-[26px]",[Me]: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:[m(t.label)," · ",a("span",{className:"text-accent",children:c??m(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(Q,{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(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"aria-pressed":p,className:["relative flex max-w-full items-center gap-3 border-2 px-3 py-3 text-left transition-colors",p?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 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"}),a("span",{className:"block h-5 w-5 shrink-0 rounded-full border border-fg-dim",style:{background:l.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:l.label})]},l.value)})}):a("div",{className:"flex flex-wrap gap-1.5",children:t.values.map(l=>{const p=l.value===t.chosen;return n("button",{type:"button",onClick:()=>r(t.key,l.value),"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"}),a("span",{className:"block text-[length:var(--size-label,14px)] tracking-[0.18em]",children:l.label}),l.note&&a("span",{className:"mt-1 block text-[length:var(--size-label,11px)] tracking-[0.12em] text-fg-dim",children:l.note})]},l.value)})})]})}function dt({slug:t,name:r}){const{has:m,toggle:o}=Ie(),c=m(t);return a("button",{type:"button",title:c?"Saved":"Save","aria-label":c?`Remove ${r} from wishlist`:`Save ${r} to wishlist`,"aria-pressed":c,onClick:()=>o(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 pt({partNumbers:t,productSlug:r}){const[m,o]=Te(""),{status:c,submit:l,reset:p}=$e();function S(){l({partNumbers:t,email:m,productSlug:r})}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:m,onEmailChange:o,status:c,onResetVerdict:p,onSubmit:S,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{ct as default};
@@ -1,10 +1,16 @@
1
1
  import type { WheelSummary } from "../lib/api/index.js";
2
+ import { type CatalogFilterState } from "../lib/wheels/catalog-filters.js";
3
+ import type { VehicleFitment } from "../lib/wheels/plp-fitment-match.js";
4
+ import type { Currency } from "../lib/wheels/wheels.js";
5
+ export declare function handPickedMatchesBar(wheel: WheelSummary, pickedFinish: string | undefined, filters: CatalogFilterState, currency: Currency, fit: VehicleFitment | null): boolean;
2
6
  export declare function wheelForCode(pool: readonly WheelSummary[], code: string): WheelSummary | undefined;
3
- export declare function SectionWheelsProvider({ wheels, children, }: {
7
+ export declare function SectionWheelsProvider({ wheels, currency, children, }: {
4
8
  wheels: WheelSummary[] | undefined;
9
+ currency?: Currency;
5
10
  children: React.ReactNode;
6
11
  }): import("react").JSX.Element;
7
- export declare function ProductCatalogProvider({ children }: {
12
+ export declare function ProductCatalogProvider({ currency, children }: {
13
+ currency?: Currency;
8
14
  children: React.ReactNode;
9
15
  }): import("react").JSX.Element;
10
16
  interface Props {
@@ -1 +1 @@
1
- "use client";import{jsx as a}from"react/jsx-runtime";import{createContext as c,useContext as d,useEffect as g,useState as u}from"react";import m from"./ProductCard.js";import{loadProductCatalog as h}from"./useProductCatalog.js";import{say as f}from"efficient-web-builder/format/lib/editor-words";const i=c({wheels:[],loading:!1,live:!1});function p(e,t){return e.find(r=>r.designCode===t)??e.find(r=>r.slug===t)}function S({wheels:e,children:t}){return a(i.Provider,{value:{wheels:e??[],loading:!1,live:!0},children:t})}function b({children:e}){const[t,r]=u([]),[s,o]=u(!0);return g(()=>{let n=!1;return h().then(l=>{n||(r(l),o(!1))}).catch(()=>{n||o(!1)}),()=>{n=!0}},[]),a(i.Provider,{value:{wheels:t,loading:s,live:!1},children:e})}function v({code:e,finish:t,wheel:r}){const{wheels:s,loading:o,live:n}=d(i),l=r??(e?p(s,e):void 0);return l?a(m,{wheel:l,variant:"catalog",defaultFinish:t},`${l.slug}:${t??""}`):n?null:a("div",{className:"sf-card flex aspect-square w-full items-center justify-center bg-surface-2 p-4 text-center",children:a("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:o?f("Loading…"):e||f("Set a design code")})})}export{b as ProductCatalogProvider,S as SectionWheelsProvider,v as default,p as wheelForCode};
1
+ "use client";import{jsx as d}from"react/jsx-runtime";import{createContext as P,useContext as b,useEffect as p,useId as B,useMemo as v,useState as x}from"react";import{GridCards as k}from"./GridCardTemplate.js";import{useCatalogFilter as z}from"./catalog/CatalogFilterContext.js";import{loadProductCatalog as F}from"./useProductCatalog.js";import{itemKind as h}from"../lib/catalog/plp-item.js";import{applyCatalogFilters as S}from"../lib/wheels/catalog-filters.js";import{finishFamiliesOf as j}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as L}from"../lib/wheels/lug-count.js";import{diametersOf as N}from"../lib/wheels/size-range.js";import{say as C}from"efficient-web-builder/format/lib/editor-words";const g=P({wheels:[],loading:!1,live:!1,obeysBar:!1,currency:""});function O(e,r,t,n,a){return h(e)==="tyre"?!0:S([y(e,r)],{...t,process:null},n,a).length>0}function y(e,r){const t=r?e.finishes?.find(n=>n.name===r):void 0;return t?{...e,finishes:[t]}:e}function M(e,r){return e.find(t=>t.designCode===r)??e.find(t=>t.slug===r)}function Q({wheels:e,currency:r="",children:t}){return d(g.Provider,{value:{wheels:e??[],loading:!1,live:!0,obeysBar:!0,currency:r},children:t})}function T({currency:e="",children:r}){const[t,n]=x([]),[a,i]=x(!0);return p(()=>{let o=!1;return F().then(l=>{o||(n(l),i(!1))}).catch(()=>{o||i(!1)}),()=>{o=!0}},[]),d(g.Provider,{value:{wheels:t,loading:a,live:!1,obeysBar:!0,currency:e},children:r})}function W({code:e,finish:r,wheel:t}){const{wheels:n,loading:a,live:i,obeysBar:o,currency:l}=b(g),u=t??(e?M(n,e):void 0),s=$(o?u:void 0,r,l);if(u){const c=d(k,{wheels:[u],finishes:[r],children:f=>f},`${u.slug}:${r??""}`);return s?c:i?null:d("div",{"data-bar-hidden":"",className:"opacity-40",children:c})}return i?null:d("div",{className:"sf-card flex aspect-square w-full items-center justify-center bg-surface-2 p-4 text-center",children:d("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:a?C("Loading…"):e||C("Set a design code")})})}function $(e,r,t){const{filters:n,vehicle:a,reportCount:i,reportSizes:o,reportLugs:l,reportFinishes:u}=z(),s=B(),c=v(()=>!e||O(e,r,n,t,a.fit),[e,r,n,t,a.fit]);p(()=>{if(e)return i(s,c?1:0),()=>i(s,0)},[e,c,i,s]);const f=v(()=>{if(!e||h(e)==="tyre")return null;const m=y(e,r);return{sizes:N([m]),lugs:L([m]),finishes:j([m])}},[e,r]);return p(()=>{if(f)return o(s,f.sizes),l(s,f.lugs),u(s,f.finishes),()=>{o(s,[]),l(s,[]),u(s,[])}},[f,o,l,u,s]),c}export{T as ProductCatalogProvider,Q as SectionWheelsProvider,W as default,O as handPickedMatchesBar,M as wheelForCode};
@@ -1,6 +1,6 @@
1
- import type { CSSProperties, ReactNode } from "react";
1
+ import type { CSSProperties, ReactNode, Ref } from "react";
2
2
  export { BAND_CAP } from "../lib/sections/section-band.js";
3
- export default function SectionBand({ className, capped, column, style, defaults, id, attrs, inAnyBox, children, }: {
3
+ export default function SectionBand({ className, capped, column, style, defaults, id, attrs, rootRef, inAnyBox, children, }: {
4
4
  className: string;
5
5
  capped?: boolean;
6
6
  column?: string | null;
@@ -8,6 +8,7 @@ export default function SectionBand({ className, capped, column, style, defaults
8
8
  defaults?: CSSProperties;
9
9
  id?: string;
10
10
  attrs?: Record<string, string>;
11
+ rootRef?: Ref<HTMLElement>;
11
12
  inAnyBox?: boolean;
12
13
  children?: ReactNode;
13
14
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as A}from"efficient-web-builder/format/lib/content/page-width";import{BAND_CAP as C,bandClassesInBox as d}from"../lib/sections/section-band.js";import N from"./SectionBandChoice.js";import{BAND_CAP as v}from"../lib/sections/section-band.js";function _({className:e,capped:f=!1,column:n=A,style:i,defaults:s,id:a,attrs:r,inAnyBox:p=!1,children:t}){const l=d(e),c=n===null?"":d(n),m=o("section",{...r,className:l||void 0,style:i,id:a,children:c?o("div",{className:c,children:t}):t}),x=s?{...s,...i}:i,B=o("section",{...r,className:f?`${C} ${e}`:e,style:x,id:a,children:n===null?t:o("div",{className:n,children:t})});return o(N,{inBox:m,atTop:B,anyBox:p})}export{v as BAND_CAP,_ as default};
1
+ import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as C}from"efficient-web-builder/format/lib/content/page-width";import{BAND_CAP as N,bandClassesInBox as f}from"../lib/sections/section-band.js";import _ from"./SectionBandChoice.js";import{BAND_CAP as y}from"../lib/sections/section-band.js";function u({className:t,capped:p=!1,column:n=C,style:i,defaults:s,id:a,attrs:r,rootRef:c,inAnyBox:l=!1,children:e}){const m=f(t),d=n===null?"":f(n),x=o("section",{ref:c,...r,className:m||void 0,style:i,id:a,children:d?o("div",{className:d,children:e}):e}),B=s?{...s,...i}:i,A=o("section",{ref:c,...r,className:p?`${N} ${t}`:t,style:B,id:a,children:n===null?e:o("div",{className:n,children:e})});return o(_,{inBox:x,atTop:A,anyBox:l})}export{y as BAND_CAP,u as default};
@@ -1,4 +1,4 @@
1
- import type { ComponentProps, ReactNode } from "react";
1
+ import { type ComponentProps, type 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";
@@ -1 +1 @@
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
+ "use client";import{jsx as r}from"react/jsx-runtime";import{useMemo as u}from"react";import{usePathname as c}from"next/navigation";import{SiteRuntimeProvider as p,useSiteRuntime as h}from"efficient-web-builder/render/lib/site-runtime";import{CartProvider as f}from"./CartContext.js";import{CatalogFilterLabelsProvider as P}from"./catalog/CatalogFilterLabels.js";import{SiteMenuLinksProvider as v}from"./catalog/SiteMenuLinks.js";import{CurrencyProvider as g}from"./CurrencyContext.js";import{EnglishVariantProvider as S}from"./EnglishVariant.js";import{SearchProvider as b}from"./SearchContext.js";import{SubscribePopupProvider as x}from"./SubscribePopupContext.js";import{WishlistProvider as C}from"./WishlistContext.js";import{normalizeEnglishVariant as j}from"../lib/content/english-variant.js";function E({catalogFilterLabels:o,englishVariant:t,menuItems:n,currency:m,searchShortcut:a=!0,children:d}){const e=h(),l=c(),i=e.pagePath!==void 0?e.pagePath:l??null,s=u(()=>({...e,pagePath:i}),[e,i]);return r(p,{runtime:s,children:r(S,{variant:j(t),children:r(P,{labels:o,children:r(v,{items:n,children:r(g,{...m,children:r(x,{children:r(C,{children:r(f,{children:r(b,{shortcut:a,children:d})})})})})})})})})}export{E as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as r,Fragment as C}from"react/jsx-runtime";import A from"next/link";import w from"./TyreImage.js";import{priceIn as $,UNPRICED_LABEL as T}from"../lib/wheels/price-display.js";import{keepForSpec as j}from"../lib/content/field-usage.js";import{stockWord as D}from"../lib/content/stock-words.js";import{CARD_INDEX_BADGE_CLASS as I,CARD_INDEX_CLASS as R,cardOutlineClass as k}from"efficient-web-builder/format/lib/sections/product-card-style";const s={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},B=[],F="View tyre",P="flex flex-col bg-[var(--card-bg)] p-5";function g(l,n){const a=l?k(l):"";return[P,n?"relative":"",a].filter(Boolean).join(" ")}function V({outline:l,showIndex:n=!1,size:a,specs:t,prices:x,image:h,inStock:o,href:c,linkLabel:u=F,imageSizes:b="(max-width: 720px) 100vw, (max-width: 1100px) 50vw, 33vw",fieldUsage:N=B,currency:S,formatPrice:_}){const m=$(x,S),v=m===null?T:_(m),y=j(N),d=[["load_index","Load index",t.loadIndex],["speed_rating","Speed",t.speedRating],["construction","Construction",t.construction],["tire_type","Type",t.tireType]].filter(([,,i])=>!!i).filter(([i])=>y(i)),p=r(C,{children:[e(w,{image:h,size:a,type:t.tireType,sizes:b}),e("h3",{className:`mt-4 font-heading3 ${s.headingSmall} font-medium leading-tight`,children:a}),t.treadPattern?e("div",{className:`mt-1 font-mono ${s.labelSmall} uppercase tracking-[0.18em] text-accent`,children:t.treadPattern}):null,d.length>0&&e("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${s.labelSmall}`,children:d.map(([i,E,L])=>r("div",{className:"flex items-baseline justify-between gap-3",children:[e("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:E}),e("dd",{className:"text-right text-fg",children:L})]},i))}),r("div",{className:`mt-4 flex items-baseline justify-between gap-3 border-t border-line pt-3 font-mono ${s.labelLarge}`,children:[e("span",{className:"text-fg",children:v}),e("span",{style:o?{color:"var(--green)"}:void 0,className:o?void 0:"text-fg-dim",children:D(o)})]})]}),f=n?e("span",{"aria-hidden":!0,className:`${R} ${I}`}):null;return c?r(A,{href:c,"aria-label":a?`View ${a} tyre`:"View this tyre",className:`group ${g(l,n)}`,children:[f,p,r("span",{className:`mt-3 inline-flex items-center gap-2 font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-accent transition-colors group-hover:text-fg`,children:[u,e("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]}):r("div",{className:g(l,n),children:[f,p]})}export{V as default};
1
+ "use client";import{jsx as e,jsxs as r,Fragment as C}from"react/jsx-runtime";import A from"next/link";import w from"./TyreImage.js";import{priceIn as $,UNPRICED_LABEL as j}from"../lib/wheels/price-display.js";import{NO_FIELD_ANSWERS as D,keepForSpec as I}from"../lib/content/field-usage.js";import{stockWord as R}from"../lib/content/stock-words.js";import{CARD_INDEX_BADGE_CLASS as T,CARD_INDEX_CLASS as k,cardOutlineClass as B}from"efficient-web-builder/format/lib/sections/product-card-style";const s={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},F="View tyre",V="flex flex-col bg-[var(--card-bg)] p-5";function g(l,n){const a=l?B(l):"";return[V,n?"relative":"",a].filter(Boolean).join(" ")}function P({outline:l,showIndex:n=!1,size:a,specs:t,prices:x,image:h,inStock:o,href:m,linkLabel:u=F,imageSizes:b="(max-width: 720px) 100vw, (max-width: 1100px) 50vw, 33vw",fieldUsage:N=D,currency:S,formatPrice:_}){const c=$(x,S),v=c===null?j:_(c),y=I(N),d=[["load_index","Load index",t.loadIndex],["speed_rating","Speed",t.speedRating],["construction","Construction",t.construction],["tire_type","Type",t.tireType]].filter(([,,i])=>!!i).filter(([i])=>y(i)),p=r(C,{children:[e(w,{image:h,size:a,type:t.tireType,sizes:b}),e("h3",{className:`mt-4 font-heading3 ${s.headingSmall} font-medium leading-tight`,children:a}),t.treadPattern?e("div",{className:`mt-1 font-mono ${s.labelSmall} uppercase tracking-[0.18em] text-accent`,children:t.treadPattern}):null,d.length>0&&e("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${s.labelSmall}`,children:d.map(([i,E,L])=>r("div",{className:"flex items-baseline justify-between gap-3",children:[e("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:E}),e("dd",{className:"text-right text-fg",children:L})]},i))}),r("div",{className:`mt-4 flex items-baseline justify-between gap-3 border-t border-line pt-3 font-mono ${s.labelLarge}`,children:[e("span",{className:"text-fg",children:v}),e("span",{style:o?{color:"var(--green)"}:void 0,className:o?void 0:"text-fg-dim",children:R(o)})]})]}),f=n?e("span",{"aria-hidden":!0,className:`${k} ${T}`}):null;return m?r(A,{href:m,"aria-label":a?`View ${a} tyre`:"View this tyre",className:`group ${g(l,n)}`,children:[f,p,r("span",{className:`mt-3 inline-flex items-center gap-2 font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-accent transition-colors group-hover:text-fg`,children:[u,e("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]}):r("div",{className:g(l,n),children:[f,p]})}export{P as default};
@@ -1,8 +1,9 @@
1
1
  import { type TyreFitAnswer } from "../lib/tyres/tyre-vehicle-fitment.js";
2
2
  import type { TyreVariant } from "../lib/api/index.js";
3
- export default function TyreFitVerdicts({ variants, answer, loading, onRetry, }: {
3
+ export default function TyreFitVerdicts({ variants, answer, loading, onRetry, headline, }: {
4
4
  variants: TyreVariant[];
5
5
  answer: TyreFitAnswer | null;
6
6
  loading?: boolean;
7
7
  onRetry?: () => void;
8
+ headline?: string;
8
9
  }): import("react").JSX.Element | null;