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
package/dist/links.js CHANGED
@@ -1 +1 @@
1
- var g={bold:{open:"**",close:"**",placeholder:"bold text"},italic:{open:"_",close:"_",placeholder:"italic text"},strike:{open:"~~",close:"~~",placeholder:"struck out"},code:{open:"`",close:"`",placeholder:"code"},highlight:{open:"==",close:"==",placeholder:"highlighted text"},quiet:{open:"^^",close:"^^",placeholder:"quiet text"},underline:{open:"[",close:"]{underline}",placeholder:"underlined text"},sup:{open:"[",close:"]{sup}",placeholder:"superscript"},sub:{open:"[",close:"]{sub}",placeholder:"subscript"}};var De={bold:g.bold.placeholder,italic:g.italic.placeholder,strike:g.strike.placeholder,code:g.code.placeholder,highlight:g.highlight.placeholder,quiet:g.quiet.placeholder,link:"link text",underline:g.underline.placeholder,sup:g.sup.placeholder,sub:g.sub.placeholder,color:"colored text",style:"styled text"};var J=[{style:"bold",label:"B",name:"Strong",title:"Strong \xB7 **words** \xB7 \u2318B",shortcut:"b"},{style:"italic",label:"I",name:"Italic",title:"Italic \xB7 _words_ \xB7 \u2318I",shortcut:"i"},{style:"strike",label:"S",name:"Strikethrough",title:"Strikethrough \xB7 ~~words~~"},{style:"highlight",label:"\u25C6",name:"Emphasis",title:"Emphasis \xB7 ==words=="},{style:"quiet",label:"a",name:"Quiet",title:"Quiet \xB7 ^^words^^"},{style:"code",label:"\u2039\u203A",name:"Code",title:"Code"},{style:"link",label:"\u{1F517}",name:"Link",title:"Link \xB7 [words](https://\u2026) \xB7 \u2318K",shortcut:"k"},{style:"bullet",label:"\u2022",name:"Bulleted list",title:"Bulleted list"},{style:"number",label:"1.",name:"Numbered list",title:"Numbered list"},{style:"quote",label:"\u275D",name:"Quote",title:"Quote"},{style:"clear",label:"T\xD7",name:"Clear marks",title:"Clear marks \xB7 \u2318\u21E7X",shortcut:"shift+x"}];var x=[{open:"**",close:"**",kind:"bold"},{open:"==",close:"==",kind:"highlight"},{open:"~~",close:"~~",kind:"strike"},{open:"_",close:"_",kind:"italic",wordBoundary:!0},{open:"^^",close:"^^",kind:"quiet"},{open:"@@",close:"@@",kind:"highlight"},{open:"++",close:"++",kind:"bold",wordStart:!0}],ee=["highlight","quiet"],ze=J.map(e=>e.style).filter(e=>x.some(n=>n.kind===e)).filter(e=>!ee.includes(e)),$e=[...x,{open:"*",close:"*",kind:"accent"}],Be=[...x,{open:"*",close:"*",kind:"accent"},{open:"#",close:"#",kind:"bold",notBefore:"0123456789"},{open:"[",close:"]",kind:"italic",notBefore:"(",notBeforeBlock:!0}];var We=["http","https","mailto","tel"];function v(e){if(e===""||/[\s\u0000-\u001f\u007f]/.test(e))return!1;let n=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(e);return!n||We.includes(n[1].toLowerCase())}var ne=["width","profile","rim"];var Ge=/^\s*(\d{2,3})\s*\/\s*(\d{2,3})\s*[A-Za-z]*\s*(\d{2}(?:\.\d+)?)\s*$/,Ye={width:[100,500],profile:[20,100],rim:[10,30]};function U(e){let n=Ge.exec(e??"");if(!n)return null;let t={width:Number(n[1]),profile:Number(n[2]),rim:Number(n[3])};return ne.every(i=>{let[a,u]=Ye[i];return t[i]>=a&&t[i]<=u})?t:null}function T(e){if(e.width==null)return"";if(e.profile==null)return String(e.width);let n=`${e.width}/${e.profile}`;return e.rim==null?n:`${n} R${e.rim}`}function te(e){return[T({width:e.width}),T({width:e.width,profile:e.profile}),T(e)]}var S=["alloy-wheel","tyre"],re=["alloy-wheel"],L={"alloy-wheel":"Alloy wheels",tyre:"Tyres"};var Xn=S.map(e=>({value:e,label:L[e]}));function w(e){return e==null?[...re]:Array.isArray(e)?S.filter(n=>e.includes(n)):[...re]}var m=e=>e;function f(e){return m(e).kind==="tyre"?"tyre":"alloy-wheel"}function D(e){return m(e).brand??""}function ie(e){return m(e).prices??void 0}function oe(e){return m(e).inStock!==!1}function le(e){let n=m(e),t=f(e)==="tyre"?n.rimDiameters:n.sizes;return Array.isArray(t)?t.filter(r=>typeof r=="number"&&Number.isFinite(r)):[]}function z(e){return f(e)==="tyre"?[]:(m(e).finishes??[]).filter(n=>typeof n?.family=="string").map(n=>({family:n.family,color:n.color??null}))}function se(e){return z(e).map(n=>n.family)}function $(e){if(f(e)==="tyre")return[];let n=m(e);return Array.isArray(n.categories)?n.categories:n.process?[n.process]:[]}function ae(e){return f(e)==="tyre"?[]:m(e).spec?.pcds??[]}function ue(e){return f(e)!=="tyre"?[]:m(e).tyreTypes??[]}function ce(e){return f(e)!=="tyre"?[]:m(e).speedRatings??[]}function pe(e){if(f(e)!=="tyre")return[];let n=m(e).sizes;return Array.isArray(n)?n.map(t=>U(typeof t=="string"?t:null)).filter(t=>t!==null):[]}var B=e=>typeof e=="string"&&e?e:void 0;var de=null;function fe(e,n){return n?e.replace(/\{([A-Za-z][A-Za-z0-9_]*)\}/g,(t,r)=>Object.prototype.hasOwnProperty.call(n,r)?String(n[r]):t):e}function y(e,n){let t=de?de[e]:void 0;if(typeof t=="function"){try{let r=B(t(n??{}));if(r)return r}catch{}return fe(e,n)}return fe(B(t)??e,n)}function W(e){return(e??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function me(e){return typeof e=="string"?e.trim():e&&typeof e=="object"&&typeof e.text=="string"?e.text.trim():""}var he="homepage";var F=[{value:"page",label:"Page"},{value:"anchor",label:"Anchor"},{value:"blog",label:"Blog post",needs:"service"},{value:"product",label:"Product",needs:"commerce"},{value:"popup",label:"Popup"},{value:"custom",label:"Custom URL"}];function _(e){return e.offersCommerce&&e.offersService?F:F.filter(n=>!n.needs||(n.needs==="commerce"?e.offersCommerce:e.offersService))}var G="#popup:";function ge(e){return`${G}${e}`}function ye(e){return e.startsWith(G)&&e.slice(G.length).trim()||null}function P(e){return e===he?"/":`/${e}`}function A(e){return`/journal/${e}`}function R(e){return`/wheels/${e}`}function E(e,n){return`${P(e)}#${n}`}function I(...e){let n=new Set,t=[];for(let r of e)for(let i of r?.content??[]){let a=me(i?.props?.anchor);if(!a)continue;let u=W(a);!u||n.has(u)||(n.add(u),t.push({slug:u,name:a}))}return t}function Pe(e){return/^\/wheels\/[^/?#]+(?:[?#].*)?$/.test(e)}var He=()=>({choosePage:y("Choose a page"),chooseSection:y("Choose a section"),noSections:y("No section anchors yet"),sectionHint:y("Jumps to a section on that page."),choosePost:y("Choose a post"),chooseProduct:y("Choose a product"),choosePopup:y("Choose a popup")});function O(e,n,t){if(!e)return"page";if(ye(e))return"popup";if(e.startsWith("/journal/"))return"blog";if(Pe(e))return"product";if(e.includes("#")){let r=e.slice(0,e.indexOf("#"));if(r===""||r==="/"||n.includes(r))return"anchor"}return e==="/"||n.includes(e)||t&&t.listingPaths.includes(t.targetOf(e))?"page":"custom"}function be(e,n){let t=He(),r=e.pages.map(l=>({value:P(l.slug),label:l.title})),i=n?.pageOptions?n.pageOptions(r):r,a=i.map(l=>l.value),u=e.pages.map(l=>({label:l.title,options:I(...l.docs).map(c=>({value:E(l.slug,c.slug),label:c.name}))})).filter(l=>l.options.length>0),p=l=>{switch(l){case"page":return{type:"select",options:i,placeholder:t.choosePage};case"anchor":return{type:"groups",groups:u,placeholder:u.length?t.chooseSection:t.noSections};case"blog":return{type:"select",options:e.posts.map(c=>({value:A(c.slug),label:c.title||c.slug})),placeholder:t.choosePost};case"product":return{type:"select",options:e.products.map(c=>({value:c.href,label:c.name||c.href})),placeholder:t.chooseProduct};case"popup":return{type:"select",options:(e.popups??[]).map(c=>({value:ge(c.slug),label:c.title||c.slug})),placeholder:t.choosePopup};case"custom":return{type:"text"}}},s=_(e.offers).map(l=>({value:l.value,label:y(l.label),target:p(l.value),...l.value==="anchor"?{hint:t.sectionHint}:{},...l.value==="blog"||l.value==="product"||l.value==="popup"?{hideWhenEmpty:!0}:{}}));if(!n)return{kinds:s,rules:{kindOf:l=>O(l,a),targetOf:l=>l,readFilter:()=>null,withFilter:l=>l}};let o=l=>{let c=n.withFilter(l,null);return n.listingPaths.includes(c)?c:l};return{kinds:s,rules:{kindOf:l=>O(l,a,{listingPaths:n.listingPaths,targetOf:o}),targetOf:o,readFilter:n.readFilter,withFilter:n.withFilter},filtersFor:l=>n.listingPaths.includes(l)?n.filtersFor(l):null}}function Y(e,n){return e.length===0?e:e.filter(t=>t.kind===void 0||t.kind===n)}function Se(e,n){let t=n==="filter"?"filterOrder":"cardOrder",r=new Map;for(let i of e){let a=i[t];if(typeof a!="number"||!Number.isFinite(a))continue;let u=r.get(i.fieldKey);(u===void 0||a<u)&&r.set(i.fieldKey,a)}return i=>i?r.get(i):void 0}function ke(e,n,t,r){let i=new Map;for(let s of t){let o=s[r];typeof o=="number"&&i.set(s.fieldKey,o)}if(i.size===0)return e;let a=[],u=[];e.forEach((s,o)=>{let l=n(s);l&&(a.push(o),u.push({item:s,index:o,order:i.get(l)}))}),u.sort((s,o)=>s.order!==void 0&&o.order!==void 0?s.order-o.order||s.index-o.index:s.order!==void 0?-1:o.order!==void 0?1:s.index-o.index);let p=[...e];return a.forEach((s,o)=>{p[s]=u[o].item}),p.every((s,o)=>s===e[o])?e:p}function xe(e){return je(e,"filter")}var qe="collection";function H(e,n){return{tyreSizes:{},brands:{"alloy-wheel":"brand",tyre:"brand"},finishes:{"alloy-wheel":"wheel_finish_ref"},diameters:{"alloy-wheel":"diameter",tyre:"rim_diameter"},collections:{"alloy-wheel":qe},pcds:{"alloy-wheel":"pcd"},tyreTypes:{tyre:"tire_type"},speedRatings:{tyre:"speed_rating"}}[e]?.[n]}function je(e,n){let t=new Set(e.filter(r=>r[n]===!1).map(r=>r.fieldKey));return r=>!r||!t.has(r)}function Ze(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Te(e,n){let t=e?.[n];return Ze(t)?t:null}function Le(e,n,t,r){if(t==null&&r==null)return!0;let i=Te(e,n);return!(i===null||t!=null&&i<t||r!=null&&i>r)}var Ve={recommended:"Recommended","price-asc":"Price \xB7 low to high","price-desc":"Price \xB7 high to low",new:"Newest",name:"Name A\u2013Z"},Ut=Object.keys(Ve);var we=["tyreSizes","brands","finishes","diameters","collections","pcds","tyreTypes","speedRatings"],Qe={tyreSizes:["tyre"],brands:["alloy-wheel","tyre"],finishes:["alloy-wheel"],diameters:["alloy-wheel","tyre"],collections:["alloy-wheel"],pcds:["alloy-wheel"],tyreTypes:["tyre"],speedRatings:["tyre"]},Xe={diameters:"tyreSizes"};function Je(e){if(e.length===0)return[];let n=we.filter(t=>e.every(r=>Qe[t].includes(r)));return n.filter(t=>{let r=Xe[t];return!r||!n.includes(r)})}function en(e){let n=new Set;for(let t of e)n.add(f(t));return[...n]}var Fe={tyreSizes:[],brands:[],finishes:[],diameters:[],collections:[],pcds:[],tyreTypes:[],speedRatings:[],priceMax:null,inStockOnly:!1,kind:null,sort:"recommended",page:1};function nn(e,n,t,r=null){if(r!=="kind"&&n.kind&&f(e)!==n.kind)return!1;for(let i of we){if(r===i)continue;let a=n[i];if(a.length===0)continue;let u=a.map(String);if(!_e(e,i).some(p=>u.includes(p)))return!1}return!(r!=="price"&&!Le(ie(e),t,null,n.priceMax)||r!=="inStock"&&n.inStockOnly&&!oe(e))}var tn={tyreSizes:"Size",brands:"Brand",finishes:"Colour",diameters:"Size \xB7 diameter",collections:"Collection",pcds:"PCD \xB7 fitment",tyreTypes:"Tyre type",speedRatings:"Speed rating"};function _e(e,n){switch(n){case"tyreSizes":return[...new Set(pe(e).flatMap(te))];case"brands":return D(e)?[D(e)]:[];case"finishes":return se(e);case"diameters":return le(e).map(String);case"collections":return $(e);case"pcds":return ae(e);case"tyreTypes":return ue(e);case"speedRatings":return ce(e)}}function rn(e){let n=new Map;for(let t of e)for(let r of z(t))r.color&&!n.has(r.family)&&n.set(r.family,r.color);return n}function Ae(e,n,t,r=en(e),i=[]){let a=o=>ln(o,r,i),u=rn(e),p=Je(r).filter(o=>o!=="tyreSizes").filter(a).map(o=>{let l=n[o].map(String),c=new Set,M=new Map,k=new Map;for(let d of e){let b=_e(d,o);for(let h of b)c.add(h);for(let h of new Set(b))k.set(h,(k.get(h)??0)+1);if(nn(d,n,t,o))for(let h of new Set(b))M.set(h,(M.get(h)??0)+1)}let Ue=[...c].map(d=>({value:d,label:o==="diameters"?`${d}\u2033`:d,count:M.get(d)??0,checked:l.includes(d),swatch:o==="finishes"?u.get(d)??null:null})).sort((d,b)=>{if(o==="diameters")return Number(d.value)-Number(b.value);let h=(k.get(b.value)??0)-(k.get(d.value)??0);return h!==0?h:d.value.localeCompare(b.value)});return{key:o,label:tn[o],options:Ue}}).filter(o=>o.options.length>on),s=[];for(let o of p){let l=sn(o.key,r,i);l!==void 0&&s.push({fieldKey:o.key,filterOrder:l})}return[...ke(p,o=>o.key,s,"filterOrder")]}var on=1;function Re(e){return e.showCollection===!1?["collections"]:[]}function ln(e,n,t){return n.length===0||t.length===0?!0:n.some(r=>xe(Y(t,r))(H(e,r)))}function sn(e,n,t){if(t.length===0)return;let r;for(let i of n){let a=Se(Y(t,i),"filter")(H(e,i));a!==void 0&&(r===void 0||a<r)&&(r=a)}return r}var q={tyreSizes:"tyreSize",brands:"brand",finishes:"colour",diameters:"size",collections:"collection",pcds:"pcd",tyreTypes:"tyreType",speedRatings:"speed"},j="type";var Ee="AlloyWheelsListing";function Ie(e){return v(e.trim())}var C="/wheels",K="Products";function Oe(e,n){return n>1?`${K} \xB7 ${e}`:K}function Z(...e){for(let n of e){let t=(n?.content??[]).find(r=>r?.type===Ee);if(t)return t.props??{}}return null}function N(...e){return Z(...e)!==null}function Ce(e,n){let t=e.filter(r=>N(...r.docs)).map(r=>P(r.slug));return t.length===0&&n.fallback?[C]:t}var V=[j,...Object.entries(q).filter(([e])=>e!=="tyreSizes").map(([,e])=>e)];function Ke(e){let n=e.indexOf("#"),t=n===-1?"":e.slice(n),r=n===-1?e:e.slice(0,n),i=r.indexOf("?");return{path:i===-1?r:r.slice(0,i),query:i===-1?"":r.slice(i+1),hash:t}}function an(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return e}}function Ne(e){let n=new URLSearchParams(Ke(e).query);for(let t of V){let r=n.get(t);if(r)return{param:t,value:r}}return null}function Q(e,n){let{path:t,query:r,hash:i}=Ke(e),a=r.split("&").filter(u=>u&&!V.includes(an(u.split("=")[0])));return n?.value&&a.push(`${encodeURIComponent(n.param)}=${encodeURIComponent(n.value)}`),`${t}${a.length?`?${a.join("&")}`:""}${i}`}function Me(e,n){let t=Q(e,null);return n.includes(t)?t:e}function un(e,n,t=[]){return O(e,n,{listingPaths:t,targetOf:r=>Me(r,t)})}function cn(e){return Array.isArray(e)?e.filter(n=>typeof n?.kind=="string"&&typeof n.field_key=="string").map(n=>({kind:n.kind,fieldKey:n.field_key,...typeof n.filter=="boolean"?{filter:n.filter}:{},filterOrder:n.filter_order??null})):[]}var ve="Product type",pn="AUD";function X(e,n){let t=n.listing??{},r=w(t.kinds),i=e.filter(s=>r.includes(f(s))),a=Re(t),u=Ae(i,Fe,pn,r,n.fieldUsage).filter(s=>!a.includes(s.key)).map(s=>({param:q[s.key],label:s.label,values:s.options.filter(o=>!o.value.includes(",")).map(o=>({value:o.value,label:o.label}))})).filter(s=>s.values.length>0),p=S.filter(s=>r.includes(s)&&i.some(o=>f(o)===s));return p.length>1&&u.unshift({param:j,label:ve,values:p.map(s=>({value:s,label:L[s]}))}),u}function dn(e){return n=>{let t=Ce(n,{fallback:e.offersCommerce}),r=n.filter(i=>N(...i.docs)).length;return{listingPaths:t,pageOptions:i=>{let a=i.map(u=>{let p=n.find(s=>P(s.slug)===u.value);return p&&N(...p.docs)?{...u,label:Oe(p.title,r)}:u});return r===0&&e.offersCommerce&&!a.some(u=>u.value===C)&&a.push({value:C,label:K}),a},filtersFor:i=>{if(!t.includes(i))return null;let a=n.find(u=>P(u.slug)===i);return X(e.catalogue,{listing:a?Z(...a.docs):null,fieldUsage:e.fieldUsage})},readFilter:Ne,withFilter:Q}}}function fn(e){let n=dn({catalogue:e.catalogue,fieldUsage:e.fieldUsage,offersCommerce:e.offers.offersCommerce})(e.pages),t=be({pages:e.pages,posts:e.posts,products:e.products.map(r=>({href:R(r.slug),name:r.name||r.slug})),offers:e.offers},n);return{...t,rules:{...t.rules,isSafe:Ie},filtersFor:t.filtersFor??(()=>null)}}function or(e,n){return X(e,n)}export{C as BUILT_IN_LISTING_PATH,F as LINK_KINDS,V as LISTING_FILTER_PARAMS,K as LISTING_PAGE_LABEL,ve as PRODUCT_TYPE_FILTER_LABEL,E as anchorPath,cn as fieldUsageFromAdminRows,un as inferLinkKind,N as isProductListingPage,Ie as isSafeLink,_ as linkKindsFor,fn as linkPickerSetup,or as listingFilterFields,Z as listingNode,Oe as listingPageLabel,Me as listingTarget,I as pageAnchors,P as pagePath,A as postPath,Ce as productListingPaths,Ne as readListingFilter,R as wheelPath,Q as withListingFilter};
1
+ var h={bold:{open:"**",close:"**",placeholder:"bold text"},italic:{open:"_",close:"_",placeholder:"italic text"},strike:{open:"~~",close:"~~",placeholder:"struck out"},code:{open:"`",close:"`",placeholder:"code"},highlight:{open:"==",close:"==",placeholder:"highlighted text"},quiet:{open:"^^",close:"^^",placeholder:"quiet text"},underline:{open:"[",close:"]{underline}",placeholder:"underlined text"},sup:{open:"[",close:"]{sup}",placeholder:"superscript"},sub:{open:"[",close:"]{sub}",placeholder:"subscript"}};var Je={bold:h.bold.placeholder,italic:h.italic.placeholder,strike:h.strike.placeholder,code:h.code.placeholder,highlight:h.highlight.placeholder,quiet:h.quiet.placeholder,link:"link text",underline:h.underline.placeholder,sup:h.sup.placeholder,sub:h.sub.placeholder,color:"colored text",style:"styled text"};var ue=[{style:"bold",label:"B",name:"Strong",title:"Strong \xB7 **words** \xB7 \u2318B",shortcut:"b"},{style:"italic",label:"I",name:"Italic",title:"Italic \xB7 _words_ \xB7 \u2318I",shortcut:"i"},{style:"strike",label:"S",name:"Strikethrough",title:"Strikethrough \xB7 ~~words~~"},{style:"highlight",label:"\u25C6",name:"Emphasis",title:"Emphasis \xB7 ==words=="},{style:"quiet",label:"a",name:"Quiet",title:"Quiet \xB7 ^^words^^"},{style:"code",label:"\u2039\u203A",name:"Code",title:"Code"},{style:"link",label:"\u{1F517}",name:"Link",title:"Link \xB7 [words](https://\u2026) \xB7 \u2318K",shortcut:"k"},{style:"bullet",label:"\u2022",name:"Bulleted list",title:"Bulleted list"},{style:"number",label:"1.",name:"Numbered list",title:"Numbered list"},{style:"quote",label:"\u275D",name:"Quote",title:"Quote"},{style:"clear",label:"T\xD7",name:"Clear marks",title:"Clear marks \xB7 \u2318\u21E7X",shortcut:"shift+x"}];var F=[{open:"**",close:"**",kind:"bold"},{open:"==",close:"==",kind:"highlight"},{open:"~~",close:"~~",kind:"strike"},{open:"_",close:"_",kind:"italic",wordBoundary:!0},{open:"^^",close:"^^",kind:"quiet"},{open:"@@",close:"@@",kind:"highlight"},{open:"++",close:"++",kind:"bold",wordStart:!0}],ce=["highlight","quiet"],et=ue.map(e=>e.style).filter(e=>F.some(t=>t.kind===e)).filter(e=>!ce.includes(e)),tt=[...F,{open:"*",close:"*",kind:"accent"}],nt=[...F,{open:"*",close:"*",kind:"accent"},{open:"#",close:"#",kind:"bold",notBefore:"0123456789"},{open:"[",close:"]",kind:"italic",notBefore:"(",notBeforeBlock:!0}];var rt=["http","https","mailto","tel"];function $(e){if(e===""||/[\s\u0000-\u001f\u007f]/.test(e))return!1;let t=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(e);return!t||rt.includes(t[1].toLowerCase())}var pe=["width","profile","rim"];var ot=/^\s*(\d{2,3})\s*\/\s*(\d{2,3})\s*[A-Za-z]*\s*(\d{2}(?:\.\d+)?)\s*$/,it={width:[100,500],profile:[20,100],rim:[10,30]};function B(e){let t=ot.exec(e??"");if(!t)return null;let n={width:Number(t[1]),profile:Number(t[2]),rim:Number(t[3])};return pe.every(o=>{let[i,a]=it[o];return n[o]>=i&&n[o]<=a})?n:null}function _(e){if(e.width==null)return"";if(e.profile==null)return String(e.width);let t=`${e.width}/${e.profile}`;return e.rim==null?t:`${t} R${e.rim}`}function de(e){return[_({width:e.width}),_({width:e.width,profile:e.profile}),_(e)]}var k=["alloy-wheel","tyre"],fe=["alloy-wheel"],R={"alloy-wheel":"Alloy wheels",tyre:"Tyres"};var mn=k.map(e=>({value:e,label:R[e]}));function O(e){return e==null?[...fe]:Array.isArray(e)?k.filter(t=>e.includes(t)):[...fe]}var m=e=>e;function d(e){return m(e).kind==="tyre"?"tyre":"alloy-wheel"}function W(e){return m(e).brand??""}function me(e){return m(e).prices??void 0}function ge(e){return m(e).inStock!==!1}function he(e){let t=m(e),n=d(e)==="tyre"?t.rimDiameters:t.sizes;return Array.isArray(n)?n.filter(r=>typeof r=="number"&&Number.isFinite(r)):[]}function G(e){return d(e)==="tyre"?[]:(m(e).finishes??[]).filter(t=>typeof t?.family=="string").map(t=>({family:t.family,color:t.color??null}))}function ye(e){return G(e).map(t=>t.family)}function H(e){if(d(e)==="tyre")return[];let t=m(e);return Array.isArray(t.categories)?t.categories:t.process?[t.process]:[]}function Pe(e){return d(e)==="tyre"?[]:m(e).spec?.pcds??[]}function Se(e){return d(e)!=="tyre"?[]:m(e).tyreTypes??[]}function be(e){return d(e)!=="tyre"?[]:m(e).speedRatings??[]}function ke(e){if(d(e)!=="tyre")return[];let t=m(e).sizes;return Array.isArray(t)?t.map(n=>B(typeof n=="string"?n:null)).filter(n=>n!==null):[]}var Y=e=>typeof e=="string"&&e?e:void 0;var xe=null;function we(e,t){return t?e.replace(/\{([A-Za-z][A-Za-z0-9_]*)\}/g,(n,r)=>Object.prototype.hasOwnProperty.call(t,r)?String(t[r]):n):e}function y(e,t){let n=xe?xe[e]:void 0;if(typeof n=="function"){try{let r=Y(n(t??{}));if(r)return r}catch{}return we(e,t)}return we(Y(n)??e,t)}function q(e){return(e??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}var E=(e,t,n,r)=>({default:e,min:t,max:n,step:r}),bn=E(30,0,100,10),kn=E(0,0,100,5),xn=E(100,0,100,5),wn=E(2,0,4,.5);function Le(e){return typeof e=="string"?e.trim():e&&typeof e=="object"&&typeof e.text=="string"?e.text.trim():""}var Te="homepage";var A=[{value:"page",label:"Page"},{value:"anchor",label:"Anchor"},{value:"blog",label:"Blog post",needs:"service"},{value:"product",label:"Product",needs:"commerce"},{value:"popup",label:"Popup"},{value:"custom",label:"Custom URL"}];function I(e){return e.offersCommerce&&e.offersService?A:A.filter(t=>!t.needs||(t.needs==="commerce"?e.offersCommerce:e.offersService))}var j="#popup:";function Fe(e){return`${j}${e}`}function _e(e){return e.startsWith(j)&&e.slice(j.length).trim()||null}function P(e){return e===Te?"/":`/${e}`}function N(e){return`/journal/${e}`}function C(e){return`/wheels/${e}`}function K(e,t){return`${P(e)}#${t}`}function v(...e){let t=new Set,n=[];for(let r of e)for(let o of r?.content??[]){let i=Le(o?.props?.anchor);if(!i)continue;let a=q(i);!a||t.has(a)||(t.add(a),n.push({slug:a,name:i}))}return n}function Re(e){return/^\/wheels\/[^/?#]+(?:[?#].*)?$/.test(e)}var st=()=>({choosePage:y("Choose a page"),chooseSection:y("Choose a section"),noSections:y("No section anchors yet"),sectionHint:y("Jumps to a section on that page."),choosePost:y("Choose a post"),chooseProduct:y("Choose a product"),choosePopup:y("Choose a popup")});function D(e,t,n){if(!e)return"page";if(_e(e))return"popup";if(e.startsWith("/journal/"))return"blog";if(Re(e))return"product";if(e.includes("#")){let r=e.slice(0,e.indexOf("#"));if(r===""||r==="/"||t.includes(r))return"anchor"}return e==="/"||t.includes(e)||n&&n.listingPaths.includes(n.targetOf(e))?"page":"custom"}function Oe(e,t){let n=st(),r=e.pages.map(s=>({value:P(s.slug),label:s.title})),o=t?.pageOptions?t.pageOptions(r):r,i=o.map(s=>s.value),a=e.pages.map(s=>({label:s.title,options:v(...s.docs).map(u=>({value:K(s.slug,u.slug),label:u.name}))})).filter(s=>s.options.length>0),p=s=>{switch(s){case"page":return{type:"select",options:o,placeholder:n.choosePage};case"anchor":return{type:"groups",groups:a,placeholder:a.length?n.chooseSection:n.noSections};case"blog":return{type:"select",options:e.posts.map(u=>({value:N(u.slug),label:u.title||u.slug})),placeholder:n.choosePost};case"product":return{type:"select",options:e.products.map(u=>({value:u.href,label:u.name||u.href})),placeholder:n.chooseProduct};case"popup":return{type:"select",options:(e.popups??[]).map(u=>({value:Fe(u.slug),label:u.title||u.slug})),placeholder:n.choosePopup};case"custom":return{type:"text"}}},l=I(e.offers).map(s=>({value:s.value,label:y(s.label),target:p(s.value),...s.value==="anchor"?{hint:n.sectionHint}:{},...s.value==="blog"||s.value==="product"||s.value==="popup"?{hideWhenEmpty:!0}:{}}));if(!t)return{kinds:l,rules:{kindOf:s=>D(s,i),targetOf:s=>s,readFilter:()=>null,withFilter:s=>s}};let c=s=>{let u=t.withFilter(s,null);return t.listingPaths.includes(u)?u:s};return{kinds:l,rules:{kindOf:s=>D(s,i,{listingPaths:t.listingPaths,targetOf:c}),targetOf:c,readFilter:t.readFilter,withFilter:t.withFilter},filtersFor:s=>t.listingPaths.includes(s)?t.filtersFor(s):null}}var Ee=Object.freeze([]);function V(e,t){return e.length===0?e:e.filter(n=>n.kind===void 0||n.kind===t)}function Ae(e,t){let n=t==="filter"?"filterOrder":"cardOrder",r=new Map;for(let o of e){let i=o[n];if(typeof i!="number"||!Number.isFinite(i))continue;let a=r.get(o.fieldKey);(a===void 0||i<a)&&r.set(o.fieldKey,i)}return o=>o?r.get(o):void 0}function Ie(e,t,n,r){let o=new Map;for(let l of n){let c=l[r];typeof c=="number"&&o.set(l.fieldKey,c)}if(o.size===0)return e;let i=[],a=[];e.forEach((l,c)=>{let s=t(l);s&&(i.push(c),a.push({item:l,index:c,order:o.get(s)}))}),a.sort((l,c)=>l.order!==void 0&&c.order!==void 0?l.order-c.order||l.index-c.index:l.order!==void 0?-1:c.order!==void 0?1:l.index-c.index);let p=[...e];return i.forEach((l,c)=>{p[l]=a[c].item}),p.every((l,c)=>l===e[c])?e:p}function Ne(e){return at(e,"filter")}var lt="collection";function Z(e,t){return{tyreSizes:{},brands:{"alloy-wheel":"brand",tyre:"brand"},finishes:{"alloy-wheel":"wheel_finish_ref"},diameters:{"alloy-wheel":"diameter",tyre:"rim_diameter"},collections:{"alloy-wheel":lt},pcds:{"alloy-wheel":"pcd"},tyreTypes:{tyre:"tire_type"},speedRatings:{tyre:"speed_rating"}}[e]?.[t]}function at(e,t){let n=new Set(e.filter(r=>r[t]===!1).map(r=>r.fieldKey));return r=>!r||!n.has(r)}var Q={inStock:"In stock",outOfStock:"Out of stock",notInStockHere:"Not in stock here"};function ut(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Ce(e,t){let n=e?.[t];return ut(n)?n:null}function Ke(e,t,n,r){if(n==null&&r==null)return!0;let o=Ce(e,t);return!(o===null||n!=null&&o<n||r!=null&&o>r)}function ve(e){let t=e.spec?.lugs;return typeof t=="number"?t:null}var ct={recommended:"Recommended","price-asc":"Price \xB7 low to high","price-desc":"Price \xB7 high to low",new:"Newest",name:"Name A\u2013Z"},lr=Object.keys(ct);var X=["tyreSizes","brands","finishes","diameters","collections","pcds","tyreTypes","speedRatings"],J={tyreSizes:["tyre"],brands:["alloy-wheel","tyre"],finishes:["alloy-wheel"],diameters:["alloy-wheel","tyre"],collections:["alloy-wheel"],pcds:["alloy-wheel"],tyreTypes:["tyre"],speedRatings:["tyre"]},pt={diameters:"tyreSizes"};function dt(e){if(e.length===0)return[];let t=X.filter(n=>e.every(r=>J[n].includes(r)));return t.filter(n=>{let r=pt[n];return!r||!t.includes(r)})}function ft(e){let t=new Set;for(let n of e)t.add(d(n));return[...t]}var ee={tyreSizes:[],brands:[],finishes:[],diameters:[],collections:[],pcds:[],tyreTypes:[],speedRatings:[],priceMax:null,inStockOnly:!1,kind:null,sort:"recommended",page:1};function De(e,t,n,r=null,o="fail"){let i=d(e),a=p=>o==="fail"||(p==="lugs"?i==="alloy-wheel":J[p].includes(i));if(r!=="kind"&&t.kind&&i!==t.kind)return!1;for(let p of X){if(r===p)continue;let l=t[p];if(l.length===0||!a(p))continue;let c=l.map(String);if(!Me(e,p).some(s=>c.includes(s)))return!1}if(r!=="lugs"&&t.lugs&&t.lugs.length>0&&a("lugs")){let p=ve(e);if(p===null||!t.lugs.includes(p))return!1}return!(r!=="price"&&!Ke(me(e),n,t.priceMin??null,t.priceMax)||r!=="inStock"&&t.inStockOnly&&!ge(e))}var mt={tyreSizes:"Size",brands:"Brand",finishes:"Colour",diameters:"Size \xB7 diameter",collections:"Collection",pcds:"PCD \xB7 fitment",tyreTypes:"Tyre type",speedRatings:"Speed rating"};function Me(e,t){switch(t){case"tyreSizes":return[...new Set(ke(e).flatMap(de))];case"brands":return W(e)?[W(e)]:[];case"finishes":return ye(e);case"diameters":return he(e).map(String);case"collections":return H(e);case"pcds":return Pe(e);case"tyreTypes":return Se(e);case"speedRatings":return be(e)}}function gt(e){let t=new Map;for(let n of e)for(let r of G(n))r.color&&!t.has(r.family)&&t.set(r.family,r.color);return t}function Ue(e,t,n,r=ft(e),o=Ee,i="fail"){let a=u=>yt(u,r,o),p=gt(e),c=(i==="pass"?X.filter(u=>r.some(b=>J[u].includes(b))):dt(r)).filter(u=>u!=="tyreSizes").filter(a).map(u=>{let b=t[u].map(String),ae=new Set,z=new Map,T=new Map;for(let f of e){let S=Me(f,u);for(let g of S)ae.add(g);for(let g of new Set(S))T.set(g,(T.get(g)??0)+1);if(De(f,t,n,u,i))for(let g of new Set(S))z.set(g,(z.get(g)??0)+1)}let Xe=[...ae].map(f=>({value:f,label:u==="diameters"?`${f}\u2033`:f,count:z.get(f)??0,checked:b.includes(f),swatch:u==="finishes"?p.get(f)??null:null})).sort((f,S)=>{if(u==="diameters")return Number(f.value)-Number(S.value);let g=(T.get(S.value)??0)-(T.get(f.value)??0);return g!==0?g:f.value.localeCompare(S.value)});return{key:u,label:mt[u],options:Xe}}).filter(u=>u.options.length>ht),s=[];for(let u of c){let b=Pt(u.key,r,o);b!==void 0&&s.push({fieldKey:u.key,filterOrder:b})}return[...Ie(c,u=>u.key,s,"filterOrder")]}var ht=1;function ze(e){return e.showCollection===!1?["collections"]:[]}function yt(e,t,n){return t.length===0||n.length===0?!0:t.some(r=>Ne(V(n,r))(Z(e,r)))}function Pt(e,t,n){if(n.length===0)return;let r;for(let o of t){let i=Ae(V(n,o),"filter")(Z(e,o));i!==void 0&&(r===void 0||i<r)&&(r=i)}return r}var te={tyreSizes:"tyreSize",brands:"brand",finishes:"colour",diameters:"size",collections:"collection",pcds:"pcd",tyreTypes:"tyreType",speedRatings:"speed"},ne="type";var x="FilterBlock";function $e(e){let t=e;return!!t&&typeof t=="object"&&typeof t.type=="string"&&!!t.props&&typeof t.props=="object"}function St(e){return Object.entries(e.props??{}).filter(t=>Array.isArray(t[1])&&t[1].length>0&&t[1].every($e))}function bt(e){let t=e??{},n=[];Array.isArray(t.content)&&n.push(t.content);for(let r of Object.values(t.zones??{}))Array.isArray(r)&&n.push(r);return n}function Be(e){let t=[],n=(r,o)=>{let i=[r,...o];for(let a of r)if($e(a)){t.push({node:a,order:t.length,lists:i});for(let[,p]of St(a))n(p,i)}};for(let r of bt(e))n(r,[]);return t}function w(e){return Be(e).map(t=>t.node)}var re={vehicle:"My Car",process:"Process",size:"Size",lugs:"Lugs",finish:"Finish",price:"Price"};var Pr=[{value:"inStock",label:Q.inStock},{value:"category",label:"Category"},{value:"lugs",label:re.lugs},{value:"price",label:re.price}];var Ge="AlloyWheelsListing";function He(e){return $(e.trim())}var L="/wheels",M="Products";function Ye(e,t){return t>1?`${M} \xB7 ${e}`:M}function oe(...e){for(let t of[Ge,x])for(let n of e){let r=w({content:n?.content}).find(o=>o.type===t);if(r)return r.props??{}}return null}function U(...e){return oe(...e)!==null}function qe(e,t){let n=e.filter(r=>U(...r.docs)).map(r=>P(r.slug));return t.fallback&&!n.includes(L)?[...n,L]:n}var ie=[ne,...Object.entries(te).filter(([e])=>e!=="tyreSizes").map(([,e])=>e)];function je(e){let t=e.indexOf("#"),n=t===-1?"":e.slice(t),r=t===-1?e:e.slice(0,t),o=r.indexOf("?");return{path:o===-1?r:r.slice(0,o),query:o===-1?"":r.slice(o+1),hash:n}}function wt(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return e}}function Ve(e){let t=new URLSearchParams(je(e).query);for(let n of ie){let r=t.get(n);if(r)return{param:n,value:r}}return null}function se(e,t){let{path:n,query:r,hash:o}=je(e),i=r.split("&").filter(a=>a&&!ie.includes(wt(a.split("=")[0])));return t?.value&&i.push(`${encodeURIComponent(t.param)}=${encodeURIComponent(t.value)}`),`${n}${i.length?`?${i.join("&")}`:""}${o}`}function Ze(e,t){let n=se(e,null);return t.includes(n)?n:e}function Lt(e,t,n=[]){return D(e,t,{listingPaths:n,targetOf:r=>Ze(r,n)})}function Tt(e){return Array.isArray(e)?e.filter(t=>typeof t?.kind=="string"&&typeof t.field_key=="string").map(t=>({kind:t.kind,fieldKey:t.field_key,...typeof t.filter=="boolean"?{filter:t.filter}:{},filterOrder:t.filter_order??null})):[]}var Qe="Product type",Ft="AUD";function le(e,t){let n=t.listing??{},r=O(n.kinds),o=e.filter(l=>r.includes(d(l))),i=ze(n),a=Ue(o,ee,Ft,r,t.fieldUsage).filter(l=>!i.includes(l.key)).map(l=>({param:te[l.key],label:l.label,values:l.options.filter(c=>!c.value.includes(",")).map(c=>({value:c.value,label:c.label}))})).filter(l=>l.values.length>0),p=k.filter(l=>r.includes(l)&&o.some(c=>d(c)===l));return p.length>1&&a.unshift({param:ne,label:Qe,values:p.map(l=>({value:l,label:R[l]}))}),a}function _t(e){return t=>{let n=qe(t,{fallback:e.offersCommerce}),r=t.filter(o=>U(...o.docs)).length;return{listingPaths:n,pageOptions:o=>{let i=o.map(a=>{let p=t.find(l=>P(l.slug)===a.value);return p&&U(...p.docs)?{...a,label:Ye(p.title,r)}:a});return r===0&&e.offersCommerce&&!i.some(a=>a.value===L)&&i.push({value:L,label:M}),i},filtersFor:o=>{if(!n.includes(o))return null;let i=t.find(a=>P(a.slug)===o);return le(e.catalogue,{listing:i?oe(...i.docs):null,fieldUsage:e.fieldUsage})},readFilter:Ve,withFilter:se}}}function Rt(e){let t=_t({catalogue:e.catalogue,fieldUsage:e.fieldUsage,offersCommerce:e.offers.offersCommerce})(e.pages),n=Oe({pages:e.pages,posts:e.posts,products:e.products.map(r=>({href:C(r.slug),name:r.name||r.slug})),offers:e.offers},t);return{...n,rules:{...n.rules,isSafe:He},filtersFor:n.filtersFor??(()=>null)}}function ao(e,t){return le(e,t)}export{L as BUILT_IN_LISTING_PATH,A as LINK_KINDS,ie as LISTING_FILTER_PARAMS,M as LISTING_PAGE_LABEL,Qe as PRODUCT_TYPE_FILTER_LABEL,K as anchorPath,Tt as fieldUsageFromAdminRows,Lt as inferLinkKind,U as isProductListingPage,He as isSafeLink,I as linkKindsFor,Rt as linkPickerSetup,ao as listingFilterFields,oe as listingNode,Ye as listingPageLabel,Ze as listingTarget,v as pageAnchors,P as pagePath,N as postPath,qe as productListingPaths,Ve as readListingFilter,C as wheelPath,se as withListingFilter};
@@ -131,3 +131,11 @@
131
131
  line-gap-override: 0.00%;
132
132
  size-adjust: 92.87%;
133
133
  }
134
+ @font-face {
135
+ font-family: "Jost Fallback";
136
+ src: local("Arial");
137
+ ascent-override: 111.45%;
138
+ descent-override: 39.06%;
139
+ line-gap-override: 0.00%;
140
+ size-adjust: 96.01%;
141
+ }
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The Jost Project Authors (https://github.com/indestructible-type)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -850,7 +850,7 @@
850
850
 
851
851
  /* ─── End card look (card 66332) ─────────────────────────────────────── */
852
852
 
853
- /* ─── Shadow steps (cookie banner build, PR 3; design final 2026-10-23) ─────
853
+ /* ─── Shadow steps ─────
854
854
  ONE LIST OF SHADOW VALUES, for the site's card shadow (the card-look block
855
855
  above reads `--sf-shadow-step`) and a Box's own Shadow row alike. A Box names
856
856
  its step with `data-sf-box-shadow` (efficient-web-builder
@@ -859,7 +859,7 @@
859
859
  [data-sf-card-shadow="soft"], [data-sf-box-shadow="soft"] { --sf-shadow-step: 0 1px 2px color-mix(in srgb, var(--sf-shadow-color, #141416) 7%, transparent), 0 4px 12px -4px color-mix(in srgb, var(--sf-shadow-color, #141416) 10%, transparent); }
860
860
  [data-sf-card-shadow="lifted"], [data-sf-box-shadow="lifted"] { --sf-shadow-step: 0 2px 4px color-mix(in srgb, var(--sf-shadow-color, #141416) 6%, transparent), 0 14px 30px -10px color-mix(in srgb, var(--sf-shadow-color, #141416) 22%, transparent); }
861
861
  [data-sf-box-shadow] { box-shadow: var(--sf-shadow-step); }
862
- /* A Box's own Shadow per view (three-views plan 5e, part B2): the builder writes
862
+ /* A Box's own Shadow per view: the builder writes
863
863
  `data-sf-box-shadow-tablet` / `-phone` = `on` | `off` only where a view's
864
864
  answer differs from the desktop's. Same widths as the Block spacing views. */
865
865
  @media (min-width: 720px) and (max-width: 1099.98px) {
@@ -870,7 +870,7 @@
870
870
  [data-sf-box-shadow-phone="on"] { box-shadow: var(--sf-shadow-step); }
871
871
  [data-sf-box-shadow-phone="off"] { box-shadow: none; }
872
872
  }
873
- /* A Box's Fill colour and Darken per view (three-views plan 5e, part B3). The
873
+ /* A Box's Fill colour and Darken per view. The
874
874
  desktop answer stays INLINE (`background-color` on the Box or its card layer,
875
875
  `background` on its Darken wash layer); the builder adds
876
876
  `sf-fill-tablet` / `-phone` + `--sf-fill-tablet` / `-phone`, and
@@ -1157,7 +1157,7 @@ body .sf-site-header[data-header-ink="dark"] {
1157
1157
 
1158
1158
  /* ─── THE BOX HEADER'S MENU ALIGNMENT ─────────────────────────────────
1159
1159
  Where the old header put its menu, as the page Menu's `Link alignment` and
1160
- `Show links` (lib/content/menu-row; Lewis 2026-10-12, Q2 and Q4 option B).
1160
+ `Show links` (lib/content/menu-row; Lewis 2026-10-12).
1161
1161
  The bar stays ONE FLAT ROW — Logo, Menu, tools — so the phone and mid-width
1162
1162
  rules above keep working; these only place the menu where the bar is one
1163
1163
  row, and step aside where it stacks.
@@ -1341,7 +1341,7 @@ body:has([data-page-width="full"]) footer {
1341
1341
  from it the wide one (`view-wide:`). Under the v1 rules it is 800, the line
1342
1342
  the hand-typed 800px classes drew before they took these names, and it compiles to
1343
1343
  the same `width < 800px` / `width >= 800px`. The switch to the v2 rules
1344
- (three-views plan PR 11) moves it to 720, the Tablet view's edge, in this
1344
+ moves it to 720, the Tablet view's edge, in this
1345
1345
  one line; the same guard holds it to the rules in force. */
1346
1346
  --breakpoint-view-wide: 800px;
1347
1347
  }
@@ -1515,6 +1515,54 @@ body:has([data-page-width="full"]) footer {
1515
1515
  position: static;
1516
1516
  }
1517
1517
 
1518
+ /* Where a pin stops under the header: `--sf-pin-header`, read by
1519
+ efficient-web-builder, which writes efficient-shell's `--motion-pin-top` on a
1520
+ pinned node as `calc(var(--sf-pin-header, var(--sf-header-h, 88px)) +
1521
+ <distance>)`. The shell's pin knows no host's header, so the host says it
1522
+ here. It is set on <body> because app/layout.tsx and useHeaderBar publish
1523
+ `--sf-header-h` there too (an inline value on <body> shadows <html>). When the
1524
+ header does not stay pinned (`data-header-sticky` "none" / "on_scroll_up" on
1525
+ <html>), there is no header to stop under: the stop is the screen top.
1526
+ In `@layer base` with the other <body> rules (scripts/test-css-layers.ts);
1527
+ the name is used nowhere else, so the layer cannot lose it to another rule.
1528
+ scripts/test-pin-header-var.ts. */
1529
+ @layer base {
1530
+ body {
1531
+ --sf-pin-header: var(--sf-header-h, 88px);
1532
+ }
1533
+ :root[data-header-sticky="none"] body,
1534
+ :root[data-header-sticky="on_scroll_up"] body {
1535
+ --sf-pin-header: 0px;
1536
+ }
1537
+ }
1538
+
1539
+ /* Each view's answer for efficient-shell's pin. The shell reads ONE
1540
+ `--motion-pin-top` and ONE `--motion-pin-position`. efficient-web-builder
1541
+ writes each view's answer on the pinned node: `--sf-pin-distance` and
1542
+ `--sf-pin-position`, and a `-tablet` / `-phone` pair only where that view's
1543
+ answer differs from the desktop's (its view-var split). So an unwritten phone
1544
+ value equals the desktop's: the phone falls back to the desktop, never to the
1545
+ tablet. The stop is the header stop above plus the distance; a node that
1546
+ stops at the screen top (the Scroll-Over intro) sets `--sf-pin-header: 0px`
1547
+ on itself. The widths are the tablet and phone blocks' of `.sf-section-stick`
1548
+ below. scripts/test-pin-header-var.ts §4. */
1549
+ [data-motion-pin] {
1550
+ --motion-pin-top: calc(var(--sf-pin-header, var(--sf-header-h, 88px)) + var(--sf-pin-distance, 0px));
1551
+ --motion-pin-position: var(--sf-pin-position, sticky);
1552
+ }
1553
+ @media (min-width: 720px) and (max-width: 1099.98px) {
1554
+ [data-motion-pin] {
1555
+ --motion-pin-top: calc(var(--sf-pin-header, var(--sf-header-h, 88px)) + var(--sf-pin-distance-tablet, var(--sf-pin-distance, 0px)));
1556
+ --motion-pin-position: var(--sf-pin-position-tablet, var(--sf-pin-position, sticky));
1557
+ }
1558
+ }
1559
+ @media not all and (min-width: 720px) {
1560
+ [data-motion-pin] {
1561
+ --motion-pin-top: calc(var(--sf-pin-header, var(--sf-header-h, 88px)) + var(--sf-pin-distance-phone, var(--sf-pin-distance, 0px)));
1562
+ --motion-pin-position: var(--sf-pin-position-phone, var(--sf-pin-position, sticky));
1563
+ }
1564
+ }
1565
+
1518
1566
  /* Stick to top — the pin any section or card can be given (efficient-web-builder
1519
1567
  lib/content/section-sticky.ts, card [ADD] Every Section Can Stick To The Top).
1520
1568
  The pass wraps a node that sticks in `.sf-section-stick` and publishes the
@@ -1556,7 +1604,7 @@ body:has([data-page-width="full"]) footer {
1556
1604
  position: relative;
1557
1605
  z-index: 2;
1558
1606
  }
1559
- /* The tablet's own answer (three-views plan 2026-11-02, PR 5c): the Tablet
1607
+ /* The tablet's own answer: the Tablet
1560
1608
  view's widths, efficient-easel's VIEW_TABLET_MIN (720) up to, not including,
1561
1609
  VIEW_DESKTOP_MIN (1100), the builder's lib/content/view-values `TABLET_MEDIA`.
1562
1610
  The builder adds `-tablet-on` / `-tablet-off` and `--sf-stick-distance-tablet`
@@ -2660,7 +2708,7 @@ em.text-accent {
2660
2708
  gap: var(--sf-gap-len-phone, calc(var(--sf-gap-len) / 2));
2661
2709
  }
2662
2710
  }
2663
- /* The Tablet view's own Gap (three-views plan PR 5b; the reviewer 2026-11-03), on
2711
+ /* The Tablet view's own Gap, on
2664
2712
  `--sf-gap-len-tablet`, which efficient-web-builder's `containerGapProps`
2665
2713
  writes only when a tablet value is drawn, as it does the phone's. The widths
2666
2714
  are the Tablet view's: efficient-easel's VIEW_TABLET_MIN (720) up to, not
@@ -3080,7 +3128,7 @@ em.text-accent {
3080
3128
  border-color: var(--sf-border-color, var(--site-line));
3081
3129
  border-width: var(--sf-border-top-width, 0) var(--sf-border-right-width, 0) var(--sf-border-bottom-width, 0) var(--sf-border-left-width, 0);
3082
3130
  }
3083
- /* The tablet's own Border (three-views plan 2026-11-02, PR 5c), in the Tablet
3131
+ /* The tablet's own Border, in the Tablet
3084
3132
  view's widths (720 up to, not including, 1100; the builder's `TABLET_MEDIA`).
3085
3133
  The `-tablet` properties come first and the desktop ones are the fallback, one
3086
3134
  property at a time, so a node with no tablet value draws as before.
@@ -3163,7 +3211,7 @@ em.text-accent {
3163
3211
  .sf-section-corners > .sf-ticker-join { border-radius: 0; overflow: visible; }
3164
3212
  .sf-section-corners > .sf-ticker-join > * { border-radius: var(--sf-section-radius, 0); overflow: clip; }
3165
3213
 
3166
- /* ── A padding's TABLET value (three-views plan 2026-10-23, PR 3a) ───────────
3214
+ /* ── A padding's TABLET value ───────────
3167
3215
  The same split as the phone block below: the desktop padding is INLINE, and
3168
3216
  efficient-web-builder (lib/content/section-padding, `sectionPadAttrs`) adds
3169
3217
  `.sf-pad-<side>-tablet` and its variable only for a side whose tablet value
@@ -3276,7 +3324,7 @@ em.text-accent {
3276
3324
  padding-right: 0;
3277
3325
  }
3278
3326
 
3279
- /* The tablet's own Height (three-views plan 2026-11-02, PR 5c): the same pair
3327
+ /* The tablet's own Height: the same pair
3280
3328
  as the phone's (next block), in the Tablet view's widths (720 up to, not including,
3281
3329
  1100; the builder's `TABLET_MEDIA`). The builder adds the class only when the
3282
3330
  tablet draws a height of its own. scripts/test-tablet-section-css.ts. */
@@ -3389,7 +3437,22 @@ em.text-accent {
3389
3437
  padding-block: 0;
3390
3438
  }
3391
3439
 
3392
- /* A Box's own Block spacing per view (three-views plan 5e, part B2). The
3440
+ /* THE CARD LIST'S ITEMS (lib/document/lazy-draws `CardList`):
3441
+ a Card list in a Box draws its items inside ONE `display: contents`
3442
+ element (`[data-sf-box-items]`), and each item is a copy of its template
3443
+ (`[data-sf-repeat]`, a `<div>` or, for an item that acts, a `<button>`)
3444
+ round the template's slot. The items are blocks of the Box all the same,
3445
+ so its Gap only reaches the element itself and the blocks in each copy,
3446
+ in the shapes above. Unlayered, like the rules above, for their reason. */
3447
+ .sf-box-gap-only > [data-sf-box-items] > *,
3448
+ .sf-box-gap-only > [data-sf-box-items] > [data-sf-repeat] > * > *,
3449
+ .sf-box-gap-only > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > *,
3450
+ .sf-box-gap-only > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > *,
3451
+ .sf-box-gap-only > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > * {
3452
+ padding-block: 0;
3453
+ }
3454
+
3455
+ /* A Box's own Block spacing per view. The
3393
3456
  builder (efficient-web-builder Flex) writes the desktop answer as above and,
3394
3457
  only where a view's answer differs from the desktop's, `sf-box-each-tablet` /
3395
3458
  `sf-box-gap-only-tablet` (and `-phone`; a phone that follows the tablet
@@ -3419,6 +3482,22 @@ em.text-accent {
3419
3482
  .sf-box-each-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
3420
3483
  padding-block: revert-layer;
3421
3484
  }
3485
+ /* …and the Card list's items (THE CARD LIST'S ITEMS, above). */
3486
+ .sf-box-each-tablet > [data-sf-box-items] > *,
3487
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > *,
3488
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > *,
3489
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > *,
3490
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > * {
3491
+ padding-block: revert-layer;
3492
+ }
3493
+ /* …keeping an Overlap block's own padding, as above. */
3494
+ .sf-box-each-tablet > [data-sf-box-items] > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3495
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3496
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3497
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3498
+ .sf-box-each-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both) {
3499
+ padding-block: var(--sf-gap-overlap-eff);
3500
+ }
3422
3501
  /* …but `revert-layer` also drops a nested Box's own Overlap padding (its
3423
3502
  unlayered `.sf-gap-overlap-*` rule, above), which an Each Box draws: so a
3424
3503
  block shape that IS an Overlap Box takes its overlap padding back here. */
@@ -3458,6 +3537,14 @@ em.text-accent {
3458
3537
  .sf-box-gap-only-tablet > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
3459
3538
  padding-block: 0;
3460
3539
  }
3540
+ /* …and the Card list's items, as above. */
3541
+ .sf-box-gap-only-tablet > [data-sf-box-items] > *,
3542
+ .sf-box-gap-only-tablet > [data-sf-box-items] > [data-sf-repeat] > * > *,
3543
+ .sf-box-gap-only-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > *,
3544
+ .sf-box-gap-only-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > *,
3545
+ .sf-box-gap-only-tablet > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > * {
3546
+ padding-block: 0;
3547
+ }
3461
3548
  }
3462
3549
  @media not all and (min-width: 720px) {
3463
3550
  .sf-box-each-phone > *,
@@ -3478,6 +3565,22 @@ em.text-accent {
3478
3565
  .sf-box-each-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
3479
3566
  padding-block: revert-layer;
3480
3567
  }
3568
+ /* …and the Card list's items (THE CARD LIST'S ITEMS, above). */
3569
+ .sf-box-each-phone > [data-sf-box-items] > *,
3570
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > *,
3571
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > *,
3572
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > *,
3573
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > * {
3574
+ padding-block: revert-layer;
3575
+ }
3576
+ /* …keeping an Overlap block's own padding, as above. */
3577
+ .sf-box-each-phone > [data-sf-box-items] > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3578
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3579
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3580
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > :is(.sf-gap-overlap-block, .sf-gap-overlap-both),
3581
+ .sf-box-each-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > :is(.sf-gap-overlap-block, .sf-gap-overlap-both) {
3582
+ padding-block: var(--sf-gap-overlap-eff);
3583
+ }
3481
3584
  /* …but `revert-layer` also drops a nested Box's own Overlap padding (its
3482
3585
  unlayered `.sf-gap-overlap-*` rule, above), which an Each Box draws: so a
3483
3586
  block shape that IS an Overlap Box takes its overlap padding back here. */
@@ -3517,6 +3620,14 @@ em.text-accent {
3517
3620
  .sf-box-gap-only-phone > [data-easel-block] > [data-sf-part-host] > .sf-block-size > .sf-entrance > .sf-section-pad > * {
3518
3621
  padding-block: 0;
3519
3622
  }
3623
+ /* …and the Card list's items, as above. */
3624
+ .sf-box-gap-only-phone > [data-sf-box-items] > *,
3625
+ .sf-box-gap-only-phone > [data-sf-box-items] > [data-sf-repeat] > * > *,
3626
+ .sf-box-gap-only-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-entrance > *,
3627
+ .sf-box-gap-only-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-section-pad > *,
3628
+ .sf-box-gap-only-phone > [data-sf-box-items] > [data-sf-repeat] > * > .sf-block-size > * {
3629
+ padding-block: 0;
3630
+ }
3520
3631
  }
3521
3632
 
3522
3633
  /* ── THE VISITOR'S OWN "REDUCE MOTION" SETTING ──────────────────────────────
@@ -1,3 +1,3 @@
1
1
  {
2
- "efficient-web-builder": "55.0.0"
2
+ "efficient-web-builder": "57.1.0"
3
3
  }
@@ -1,5 +1,6 @@
1
1
  import type { Bundle, Currency } from "../lib/api/index.js";
2
- export declare function bundleSaving(bundle: Bundle, currency: Currency): string | null;
2
+ import { bundleSaving } from "../lib/commerce.js";
3
+ export { bundleSaving };
3
4
  export default function BundleCard({ bundle, currency, }: {
4
5
  bundle: Bundle;
5
6
  currency: Currency;
@@ -1 +1 @@
1
- "use client";import{jsx as a,jsxs as r}from"react/jsx-runtime";import i from"next/link";import o from"next/image";import{formatPrice as c}from"../lib/commerce.js";function m(e,s){const t=e.savings[s];if(t===void 0)return null;const n=c(t,s);return e.savingIsFrom?`Save from ${n}`:`Save ${n}`}function l({bundle:e,currency:s}){const t=m(e,s);return r(i,{href:`/bundles/${e.slug}`,className:"sf-card group flex flex-col border border-line bg-bg transition-colors hover:border-accent",children:[r("div",{className:"sf-card-image relative aspect-[4/3] overflow-hidden bg-surface",children:[e.image?a(o,{src:e.image,alt:e.name,fill:!0,sizes:"(max-width: 640px) 100vw, 33vw",className:"object-cover transition-transform duration-500 group-hover:scale-[1.03]"}):r("div",{className:"flex h-full items-center justify-center font-mono text-[10px] uppercase tracking-[0.3em] text-fg-dim",children:[e.components.length," piece",e.components.length===1?"":"s"]}),t&&a("span",{className:"absolute left-0 top-4 bg-accent px-3 py-2 font-mono text-[10px] uppercase tracking-[0.24em] text-bg",children:t})]}),r("div",{className:"flex flex-1 flex-col gap-2 px-5 py-4",children:[a("span",{className:"font-display text-[18px] font-medium tracking-[-0.015em] text-fg",children:e.name}),e.subtitle&&a("span",{className:"text-[13px] leading-snug text-fg-dim",children:e.subtitle}),!e.inStock&&a("span",{className:"mt-1 font-mono text-[9px] uppercase tracking-[0.24em] text-fg-dim",children:"Currently unavailable"})]})]})}export{m as bundleSaving,l as default};
1
+ "use client";import{jsx as t,jsxs as a}from"react/jsx-runtime";import n from"next/link";import o from"next/image";import{bundleSaving as r}from"../lib/commerce.js";function c({bundle:e,currency:i}){const s=r(e,i);return a(n,{href:`/bundles/${e.slug}`,className:"sf-card group flex flex-col border border-line bg-bg transition-colors hover:border-accent",children:[a("div",{className:"sf-card-image relative aspect-[4/3] overflow-hidden bg-surface",children:[e.image?t(o,{src:e.image,alt:e.name,fill:!0,sizes:"(max-width: 640px) 100vw, 33vw",className:"object-cover transition-transform duration-500 group-hover:scale-[1.03]"}):a("div",{className:"flex h-full items-center justify-center font-mono text-[10px] uppercase tracking-[0.3em] text-fg-dim",children:[e.components.length," piece",e.components.length===1?"":"s"]}),s&&t("span",{className:"absolute left-0 top-4 bg-accent px-3 py-2 font-mono text-[10px] uppercase tracking-[0.24em] text-bg",children:s})]}),a("div",{className:"flex flex-1 flex-col gap-2 px-5 py-4",children:[t("span",{className:"font-display text-[18px] font-medium tracking-[-0.015em] text-fg",children:e.name}),e.subtitle&&t("span",{className:"text-[13px] leading-snug text-fg-dim",children:e.subtitle}),!e.inStock&&t("span",{className:"mt-1 font-mono text-[9px] uppercase tracking-[0.24em] text-fg-dim",children:"Currently unavailable"})]})]})}export{r as bundleSaving,c as default};
@@ -1 +1 @@
1
- import{jsx as n,jsxs as l}from"react/jsx-runtime";import{useState as G}from"react";import{useScopeClass as xe}from"../lib/use-scope-class.js";import{containerGapProps as he}from"efficient-web-builder/format/lib/content/container-gap";import be from"efficient-web-builder/render/components/SectionHeader";import v from"efficient-web-builder/render/components/PostCard";import ve from"efficient-web-builder/render/components/Placeholder";import{SiteLink as F}from"efficient-web-builder/render/lib/site-runtime";import{renderGold as g,renderHeadline as N}from"efficient-web-builder/render/components/goldPhrases";import{say as w}from"efficient-web-builder/format/lib/editor-words";import{cardImageShapeTokens as Ne}from"efficient-web-builder/format/lib/content/card-image-shape";import{SITE_COLUMN as K}from"efficient-web-builder/format/lib/content/page-width";import{fillRowCss as we}from"../lib/sections/fill-row.js";import{headIsEmpty as ye,ownPadding as Ee}from"../lib/sections/own-padding.js";const Te=4;function st(t){if(!Array.isArray(t))return;const a=t.filter(e=>typeof e=="string"&&!!e.trim()).map(e=>e.trim()).slice(0,Te);return a.length?a:void 0}function ot(t){if(!t||typeof t!="object"||Array.isArray(t))return;const a={};for(const[e,r]of Object.entries(t))if(e.trim()){if(typeof r=="string")r.trim()&&(a[e]=r.trim());else if(Array.isArray(r)){const o=r.filter(c=>typeof c=="string"&&!!c.trim()).map(c=>c.trim());o.length&&(a[e]=o)}}return Object.keys(a).length?a:void 0}function H(t,a){const e=t.facets?.[a];return e===void 0?[]:typeof e=="string"?[e]:e}const Ae=new Intl.Collator("en",{numeric:!0,sensitivity:"base"});function _e(t){const a=[],e=new Map;for(const r of t)for(const o of Object.keys(r.facets??{})){e.has(o)||(a.push(o),e.set(o,new Set));for(const c of H(r,o))e.get(o).add(c)}return a.map(r=>({label:r,values:[...e.get(r)].sort(Ae.compare)}))}function Ce(t,a){return Object.entries(a).every(([e,r])=>r===""||H(t,e).includes(r))}const W=3,X="featured",J="tabs",q="portrait",x="spread",Q="count",lt=[{label:"Even grid",value:"even"},{label:"Featured first",value:X},{label:"Tabs",value:J},{label:"Photo cards",value:q},{label:"Staggered spread",value:x},{label:"Count",value:Q}],Le=[q,x],it="even",z={min:2,max:11,step:1,fallback:7,unit:"of 12"},Se="bottom-left",$e=55,Oe="bottom";function ke(t){const a=typeof t=="number"?t:Number.parseFloat(String(t??"")),e=Number.isFinite(a)?Math.min(z.max,Math.max(z.min,Math.round(a))):z.fallback;return`${e}fr ${12-e}fr`}const Z={1:"grid-cols-1",2:"grid-cols-2 max-view-wide:grid-cols-1",3:"grid-cols-3 max-view-wide:grid-cols-1",4:"grid-cols-4 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1"},ee={2:"grid-cols-2",3:"grid-cols-3 max-view-wide:grid-cols-2",4:"grid-cols-4 max-view-desktop:grid-cols-3 max-view-wide:grid-cols-2"},Fe="Find by name",ze="Nobody by that name.",Re="Nobody matches.",Me="Any";function Ue(t,a){const e=o=>o.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLocaleLowerCase().trim(),r=e(a);return r===""||e(t).includes(r)}function te({typed:t,onType:a,wide:e=!1}){return l("label",{className:`flex max-w-[360px] flex-col gap-1.5${e?" w-full":""}`,children:[n("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim",children:Fe}),n("input",{type:"search",value:t,onChange:r=>a(r.target.value),autoComplete:"off",className:"rounded-[var(--sf-button-radius,6px)] border border-line bg-bg px-4 py-2.5 text-[length:var(--size-body,15px)] text-fg outline-none focus:border-accent"})]})}function ne({tags:t}){return n("ul",{"aria-label":"Details",className:"flex gap-1.5 overflow-hidden",children:t.map((a,e)=>n("li",{className:"shrink-0 rounded-[var(--sf-button-radius,4px)] border border-line px-2 py-0.5 text-[length:var(--size-label,12px)] text-fg-dim",children:a},`${a}-${e}`))})}function De({card:t,scaffold:a,lower:e=!1}){return l(F,{href:t.href||"#",className:`sf-card group relative isolate flex aspect-[3/4] overflow-hidden bg-surface${e?" min-[801px]:mt-16":""}`,"aria-disabled":a||void 0,tabIndex:a?-1:void 0,children:[n("div",{className:"absolute inset-0 transition-transform duration-700 group-hover:scale-[1.03] motion-reduce:transition-none motion-reduce:group-hover:scale-100",children:n(ve,{label:`card-${t.slug}`,src:t.cover||void 0,sizes:"(max-width: 800px) 50vw, 25vw"})}),n("div",{"aria-hidden":!0,className:"absolute inset-0 z-0",style:{background:"linear-gradient(180deg, transparent 45%, color-mix(in srgb, var(--bg) 88%, transparent) 100%)"}}),t.meta&&n("span",{className:"absolute left-3 top-3 z-[1] rounded-[var(--sf-button-radius,999px)] bg-bg/85 px-2.5 py-1 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.16em] text-accent",children:g(t.meta)}),l("div",{className:"relative z-[1] mt-auto flex w-full flex-col gap-1 p-4 max-view-wide:p-3",children:[n("h3",{className:"font-heading3 text-[length:var(--size-headingSmall,24px)] leading-[1.1] tracking-[-0.01em] text-fg",children:N(t.title,!1)}),t.dateLabel&&n("p",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-accent",children:g(t.dateLabel)}),t.tags&&t.tags.length>0&&n(ne,{tags:t.tags}),t.excerpt&&n("p",{className:"line-clamp-2 text-[length:var(--size-body,14px)] leading-[1.45] text-fg-dim",children:g(t.excerpt)})]})]})}function Ie({cards:t,scaffold:a}){return n("nav",{"aria-label":"Days",className:"-mx-1 [scrollbar-width:none] max-view-wide:overflow-x-auto [&::-webkit-scrollbar]:hidden",children:n("ul",{className:"flex flex-wrap gap-2 px-1 pb-1 max-view-wide:min-w-max max-view-wide:flex-nowrap",children:t.map((e,r)=>{const o=!!e.meta;return n("li",{children:l(F,{href:e.href||"#","aria-current":o?"page":void 0,"aria-disabled":a||void 0,tabIndex:a?-1:void 0,className:`flex flex-col gap-0.5 rounded-[var(--sf-button-radius,999px)] border px-5 py-2.5 transition-colors ${o?"border-accent bg-accent text-accent-ink":"border-line text-fg hover:border-accent hover:text-accent"}`,children:[n("span",{className:"font-heading3 text-[length:var(--size-body,15px)] leading-[1.2]",children:N(e.title,!1)}),e.excerpt&&n("span",{className:`font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.14em] ${o?"opacity-80":"text-fg-dim"}`,children:g(e.excerpt)})]})},`${e.slug}-${r}`)})})})}function Pe({count:t,words:a,href:e}){const r=l("span",{className:"inline-flex items-baseline gap-3",children:[n("span",{className:"font-heading text-[length:var(--size-headingLarge,64px)] leading-none text-accent",children:t}),a!==void 0&&n("span",{className:"font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg",children:a})]});return e?n(F,{href:e,className:"inline-flex hover:opacity-85",children:r}):r}const je="relative z-[2] bg-bg py-[120px] max-view-wide:py-[70px]",Ve="relative z-[2] bg-bg pt-0 pb-[120px] max-view-wide:pt-0 max-view-wide:pb-[70px]",Ye="relative z-[2] bg-bg py-[32px] max-view-wide:py-[24px]";function Be({num:t,title:a,link:e,posts:r,columns:o,limit:c,showAll:y=!1,editing:E=!1,cardImage:ae,gap:re,gapPhone:se,layout:p,featuredWidth:oe,listCover:le=!0,featuredDarken:ie,omitHead:h=!1,sample:T,nameFilter:ce=!1,padTop:de,padBottom:fe}){const[A,R]=G(""),[M,pe]=G({}),_=xe("ev"),U=r??[],D=y?U.length:typeof c=="number"&&c>0?c:W,C=U.slice(0,D),m=E&&C.length===0;if(C.length===0&&!E)return null;const I=y?W:D,d=m?T?.length?T.slice(0,y?T.length:I):Array.from({length:I},(s,i)=>({slug:`placeholder-${i}`,title:w("Blog post title"),excerpt:w("A short summary of the post appears here."),cover:"",meta:w("Journal"),dateLabel:w("Date")})):C,f=he("Events",re,"both",se),L=p===X&&d.length>1,me=ke(oe),S=p===J,P=p===Q,j=Le.includes(p??""),$=ce&&!S&&!P&&!L,O=$?_e(d):[],b=$?d.filter(s=>Ue(s.title,A)&&Ce(s,M)):d,k=Ee(de,fe),ge=!E&&ye(t,a,e?.text),V=p===x?"grid-cols-3 max-view-wide:grid-cols-2":ee[Math.min(4,Math.max(2,o??3))]??ee[3],Y=Z[Math.min(4,Math.max(1,o??3))]??Z[3],B=S||L||p===x?"":we(_,j?V:Y,{cards:b.length});return P?n("section",{className:Ye,style:Object.keys(k).length?k:void 0,children:n("div",{className:K,children:n(Pe,{count:d.length,words:h||a===void 0?void 0:N(a,!1),href:h?void 0:e?.href})})}):n("section",{className:h?Ve:je,style:{...Ne(ae),...k},children:l("div",{className:K,children:[h||ge?null:n(be,{num:t!==void 0?g(t):void 0,title:a!==void 0?N(a,!1):void 0,link:e?{text:g(e.text),href:e.href}:void 0}),$&&l("div",{className:"mb-6 flex flex-col gap-2",children:[O.length===0?n(te,{typed:A,onType:R}):l("div",{className:"flex flex-wrap items-end gap-3",children:[n(te,{typed:A,onType:R,wide:!0}),O.map(({label:s,values:i})=>l("label",{className:"flex min-w-[140px] flex-col gap-1.5 max-view-wide:flex-1",children:[n("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim",children:s}),l("select",{value:M[s]??"",onChange:u=>pe(ue=>({...ue,[s]:u.target.value})),className:"rounded-[var(--sf-button-radius,6px)] border border-line bg-bg px-4 py-2.5 text-[length:var(--size-body,15px)] text-fg outline-none focus:border-accent",children:[n("option",{value:"",children:Me}),i.map(u=>n("option",{value:u,children:u},u))]})]},s))]}),b.length===0&&n("p",{role:"status",className:"text-[length:var(--size-body,14px)] text-fg-dim",children:O.length===0?ze:Re})]}),B&&n("style",{children:B}),S?n(Ie,{cards:d,scaffold:m}):j?n("div",{className:`${_} sf-card-grid grid${f.className} ${V}`,style:f.style,children:b.map((s,i)=>n(De,{card:s,scaffold:m,lower:p===x&&i%3===1},`${s.slug}-${i}`))}):L?l("div",{className:`sf-card-grid grid grid-cols-[var(--sf-events-split)] max-view-wide:grid-cols-1${f.className}`,style:{...f.style,"--sf-events-split":me},children:[n(v,{post:d[0],href:d[0].href,scaffold:m,layout:"cover",darken:ie??$e,darkenStyle:Oe,placement:Se},`${d[0].slug}-0`),n("div",{className:`grid auto-rows-min${f.className}`,style:f.style,children:d.slice(1).map((s,i)=>n(v,{post:s,href:s.href,scaffold:m,showCover:le},`${s.slug}-${i+1}`))})]}):n("div",{className:`${_} sf-card-grid grid${f.className} ${Y}`,style:f.style,children:b.map((s,i)=>s.tags&&s.tags.length>0?l("div",{className:"flex flex-col gap-2",children:[n(v,{post:s,href:s.href,scaffold:m}),n(ne,{tags:s.tags})]},`${s.slug}-${i}`):n(v,{post:s,href:s.href,scaffold:m},`${s.slug}-${i}`))})]})})}export{z as EVENTS_FEATURED_WIDTH,lt as EVENTS_LAYOUTS,Q as EVENTS_LAYOUT_COUNT,it as EVENTS_LAYOUT_FALLBACK,X as EVENTS_LAYOUT_FEATURED,q as EVENTS_LAYOUT_PORTRAIT,x as EVENTS_LAYOUT_SPREAD,J as EVENTS_LAYOUT_TABS,Le as EVENTS_PHOTO_LAYOUTS,Te as MAX_CARD_TAGS,Be as default,_e as facetChoices,Ce as matchesFacets,Ue as matchesName,ot as readFacets,st as readTags};
1
+ import{jsx as n,jsxs as o}from"react/jsx-runtime";import{useState as K}from"react";import{TAB_PILLS as z}from"../lib/content/tab-strip.js";import{useScopeClass as xe}from"../lib/use-scope-class.js";import{containerGapProps as be}from"efficient-web-builder/format/lib/content/container-gap";import ve from"efficient-web-builder/render/components/SectionHeader";import v from"efficient-web-builder/render/components/PostCard";import Ne from"efficient-web-builder/render/components/Placeholder";import{SiteLink as k}from"efficient-web-builder/render/lib/site-runtime";import{renderGold as g,renderHeadline as N}from"efficient-web-builder/render/components/goldPhrases";import{say as y}from"efficient-web-builder/format/lib/editor-words";import{cardImageShapeTokens as ye}from"efficient-web-builder/format/lib/content/card-image-shape";import{SITE_COLUMN as H}from"efficient-web-builder/format/lib/content/page-width";import{fillRowCss as Ee}from"../lib/sections/fill-row.js";import{headIsEmpty as Te,ownPadding as we}from"../lib/sections/own-padding.js";const Ae=4;function ot(t){if(!Array.isArray(t))return;const a=t.filter(e=>typeof e=="string"&&!!e.trim()).map(e=>e.trim()).slice(0,Ae);return a.length?a:void 0}function it(t){if(!t||typeof t!="object"||Array.isArray(t))return;const a={};for(const[e,s]of Object.entries(t))if(e.trim()){if(typeof s=="string")s.trim()&&(a[e]=s.trim());else if(Array.isArray(s)){const l=s.filter(c=>typeof c=="string"&&!!c.trim()).map(c=>c.trim());l.length&&(a[e]=l)}}return Object.keys(a).length?a:void 0}function W(t,a){const e=t.facets?.[a];return e===void 0?[]:typeof e=="string"?[e]:e}const _e=new Intl.Collator("en",{numeric:!0,sensitivity:"base"});function Le(t){const a=[],e=new Map;for(const s of t)for(const l of Object.keys(s.facets??{})){e.has(l)||(a.push(l),e.set(l,new Set));for(const c of W(s,l))e.get(l).add(c)}return a.map(s=>({label:s,values:[...e.get(s)].sort(_e.compare)}))}function Ce(t,a){return Object.entries(a).every(([e,s])=>s===""||W(t,e).includes(s))}const X=3,J="featured",q="tabs",Q="portrait",h="spread",Z="count",ct=[{label:"Even grid",value:"even"},{label:"Featured first",value:J},{label:"Tabs",value:q},{label:"Photo cards",value:Q},{label:"Staggered spread",value:h},{label:"Count",value:Z}],Se=[Q,h],dt="even",R={min:2,max:11,step:1,fallback:7,unit:"of 12"},Oe="bottom-left",$e=55,Fe="bottom";function ze(t){const a=typeof t=="number"?t:Number.parseFloat(String(t??"")),e=Number.isFinite(a)?Math.min(R.max,Math.max(R.min,Math.round(a))):R.fallback;return`${e}fr ${12-e}fr`}const ee={1:"grid-cols-1",2:"grid-cols-2 max-view-wide:grid-cols-1",3:"grid-cols-3 max-view-wide:grid-cols-1",4:"grid-cols-4 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1"},te={2:"grid-cols-2",3:"grid-cols-3 max-view-wide:grid-cols-2",4:"grid-cols-4 max-view-desktop:grid-cols-3 max-view-wide:grid-cols-2"},ke="Find by name",Re="Nobody by that name.",Ie="Nobody matches.",Me="Any";function Ue(t,a){const e=l=>l.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLocaleLowerCase().trim(),s=e(a);return s===""||e(t).includes(s)}function ne({typed:t,onType:a,wide:e=!1}){return o("label",{className:`flex max-w-[360px] flex-col gap-1.5${e?" w-full":""}`,children:[n("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim",children:ke}),n("input",{type:"search",value:t,onChange:s=>a(s.target.value),autoComplete:"off",className:"rounded-[var(--sf-button-radius,6px)] border border-line bg-bg px-4 py-2.5 text-[length:var(--size-body,15px)] text-fg outline-none focus:border-accent"})]})}function ae({tags:t}){return n("ul",{"aria-label":"Details",className:"flex gap-1.5 overflow-hidden",children:t.map((a,e)=>n("li",{className:"shrink-0 rounded-[var(--sf-button-radius,4px)] border border-line px-2 py-0.5 text-[length:var(--size-label,12px)] text-fg-dim",children:a},`${a}-${e}`))})}function De({card:t,scaffold:a,lower:e=!1}){return o(k,{href:t.href||"#",className:`sf-card group relative isolate flex aspect-[3/4] overflow-hidden bg-surface${e?" min-[801px]:mt-16":""}`,"aria-disabled":a||void 0,tabIndex:a?-1:void 0,children:[n("div",{className:"absolute inset-0 transition-transform duration-700 group-hover:scale-[1.03] motion-reduce:transition-none motion-reduce:group-hover:scale-100",children:n(Ne,{label:`card-${t.slug}`,src:t.cover||void 0,sizes:"(max-width: 800px) 50vw, 25vw"})}),n("div",{"aria-hidden":!0,className:"absolute inset-0 z-0",style:{background:"linear-gradient(180deg, transparent 45%, color-mix(in srgb, var(--bg) 88%, transparent) 100%)"}}),t.meta&&n("span",{className:"absolute left-3 top-3 z-[1] rounded-[var(--sf-button-radius,999px)] bg-bg/85 px-2.5 py-1 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.16em] text-accent",children:g(t.meta)}),o("div",{className:"relative z-[1] mt-auto flex w-full flex-col gap-1 p-4 max-view-wide:p-3",children:[n("h3",{className:"font-heading3 text-[length:var(--size-headingSmall,24px)] leading-[1.1] tracking-[-0.01em] text-fg",children:N(t.title,!1)}),t.dateLabel&&n("p",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.16em] text-accent",children:g(t.dateLabel)}),t.tags&&t.tags.length>0&&n(ae,{tags:t.tags}),t.excerpt&&n("p",{className:"line-clamp-2 text-[length:var(--size-body,14px)] leading-[1.45] text-fg-dim",children:g(t.excerpt)})]})]})}function Pe({cards:t,scaffold:a}){return n("nav",{"aria-label":"Days",className:z.nav,children:n("ul",{className:z.list,children:t.map((e,s)=>{const l=!!e.meta;return n("li",{children:o(k,{href:e.href||"#","aria-current":l?"page":void 0,"aria-disabled":a||void 0,tabIndex:a?-1:void 0,className:z.tab(l),children:[n("span",{className:"font-heading3 text-[length:var(--size-body,15px)] leading-[1.2]",children:N(e.title,!1)}),e.excerpt&&n("span",{className:`font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.14em] ${l?"opacity-80":"text-fg-dim"}`,children:g(e.excerpt)})]})},`${e.slug}-${s}`)})})})}function je({count:t,words:a,href:e}){const s=o("span",{className:"inline-flex items-baseline gap-3",children:[n("span",{className:"font-heading text-[length:var(--size-headingLarge,64px)] leading-none text-accent",children:t}),a!==void 0&&n("span",{className:"font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg",children:a})]});return e?n(k,{href:e,className:"inline-flex hover:opacity-85",children:s}):s}const Be="relative z-[2] bg-bg py-[120px] max-view-wide:py-[70px]",Ve="relative z-[2] bg-bg pt-0 pb-[120px] max-view-wide:pt-0 max-view-wide:pb-[70px]",Ye="relative z-[2] bg-bg py-[32px] max-view-wide:py-[24px]";function Ge({num:t,title:a,link:e,posts:s,columns:l,limit:c,showAll:E=!1,editing:T=!1,cardImage:se,gap:re,gapPhone:le,layout:p,featuredWidth:oe,listCover:ie=!0,featuredDarken:ce,omitHead:x=!1,sample:w,nameFilter:de=!1,padTop:fe,padBottom:pe}){const[A,I]=K(""),[M,me]=K({}),_=xe("ev"),U=s??[],D=E?U.length:typeof c=="number"&&c>0?c:X,L=U.slice(0,D),m=T&&L.length===0;if(L.length===0&&!T)return null;const P=E?X:D,d=m?w?.length?w.slice(0,E?w.length:P):Array.from({length:P},(r,i)=>({slug:`placeholder-${i}`,title:y("Blog post title"),excerpt:y("A short summary of the post appears here."),cover:"",meta:y("Journal"),dateLabel:y("Date")})):L,f=be("Events",re,"both",le),C=p===J&&d.length>1,ge=ze(oe),S=p===q,j=p===Z,B=Se.includes(p??""),O=de&&!S&&!j&&!C,$=O?Le(d):[],b=O?d.filter(r=>Ue(r.title,A)&&Ce(r,M)):d,F=we(fe,pe),ue=!T&&Te(t,a,e?.text),V=p===h?"grid-cols-3 max-view-wide:grid-cols-2":te[Math.min(4,Math.max(2,l??3))]??te[3],Y=ee[Math.min(4,Math.max(1,l??3))]??ee[3],G=S||C||p===h?"":Ee(_,B?V:Y,{cards:b.length});return j?n("section",{className:Ye,style:Object.keys(F).length?F:void 0,children:n("div",{className:H,children:n(je,{count:d.length,words:x||a===void 0?void 0:N(a,!1),href:x?void 0:e?.href})})}):n("section",{className:x?Ve:Be,style:{...ye(se),...F},children:o("div",{className:H,children:[x||ue?null:n(ve,{num:t!==void 0?g(t):void 0,title:a!==void 0?N(a,!1):void 0,link:e?{text:g(e.text),href:e.href}:void 0}),O&&o("div",{className:"mb-6 flex flex-col gap-2",children:[$.length===0?n(ne,{typed:A,onType:I}):o("div",{className:"flex flex-wrap items-end gap-3",children:[n(ne,{typed:A,onType:I,wide:!0}),$.map(({label:r,values:i})=>o("label",{className:"flex min-w-[140px] flex-col gap-1.5 max-view-wide:flex-1",children:[n("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.18em] text-fg-dim",children:r}),o("select",{value:M[r]??"",onChange:u=>me(he=>({...he,[r]:u.target.value})),className:"rounded-[var(--sf-button-radius,6px)] border border-line bg-bg px-4 py-2.5 text-[length:var(--size-body,15px)] text-fg outline-none focus:border-accent",children:[n("option",{value:"",children:Me}),i.map(u=>n("option",{value:u,children:u},u))]})]},r))]}),b.length===0&&n("p",{role:"status",className:"text-[length:var(--size-body,14px)] text-fg-dim",children:$.length===0?Re:Ie})]}),G&&n("style",{children:G}),S?n(Pe,{cards:d,scaffold:m}):B?n("div",{className:`${_} sf-card-grid grid${f.className} ${V}`,style:f.style,children:b.map((r,i)=>n(De,{card:r,scaffold:m,lower:p===h&&i%3===1},`${r.slug}-${i}`))}):C?o("div",{className:`sf-card-grid grid grid-cols-[var(--sf-events-split)] max-view-wide:grid-cols-1${f.className}`,style:{...f.style,"--sf-events-split":ge},children:[n(v,{post:d[0],href:d[0].href,scaffold:m,layout:"cover",darken:ce??$e,darkenStyle:Fe,placement:Oe},`${d[0].slug}-0`),n("div",{className:`grid auto-rows-min${f.className}`,style:f.style,children:d.slice(1).map((r,i)=>n(v,{post:r,href:r.href,scaffold:m,showCover:ie},`${r.slug}-${i+1}`))})]}):n("div",{className:`${_} sf-card-grid grid${f.className} ${Y}`,style:f.style,children:b.map((r,i)=>r.tags&&r.tags.length>0?o("div",{className:"flex flex-col gap-2",children:[n(v,{post:r,href:r.href,scaffold:m}),n(ae,{tags:r.tags})]},`${r.slug}-${i}`):n(v,{post:r,href:r.href,scaffold:m},`${r.slug}-${i}`))})]})})}export{R as EVENTS_FEATURED_WIDTH,ct as EVENTS_LAYOUTS,Z as EVENTS_LAYOUT_COUNT,dt as EVENTS_LAYOUT_FALLBACK,J as EVENTS_LAYOUT_FEATURED,Q as EVENTS_LAYOUT_PORTRAIT,h as EVENTS_LAYOUT_SPREAD,q as EVENTS_LAYOUT_TABS,Se as EVENTS_PHOTO_LAYOUTS,Ae as MAX_CARD_TAGS,Ge as default,Le as facetChoices,Ce as matchesFacets,Ue as matchesName,it as readFacets,ot as readTags};
@@ -1,5 +1,5 @@
1
1
  import type { FitmentRow } from "../lib/wheels/fitments.js";
2
- import type { FieldUsageAnswer } from "../lib/content/field-usage.js";
2
+ import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
3
3
  export interface FitmentTableProps {
4
4
  num?: string;
5
5
  title?: string;
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as l,Fragment as D}from"react/jsx-runtime";import F from"./SectionBand.js";import{useEffect as J,useState as A}from"react";import E from"efficient-web-builder/render/components/SectionHeader";import M from"./SectionFootnote.js";import{renderGold as u,renderHeadline as _}from"efficient-web-builder/render/components/goldPhrases";import Q from"./fitment/FitmentRowFit.js";import{useVehicleFit as Y}from"./fitment/useVehicleFit.js";import{fitmentRowAnswer as ee}from"../lib/wheels/fitment-row-fit.js";import{fitmentColumns as te,loadUnitFor as ne}from"../lib/wheels/fitment-columns.js";import{useActiveCountry as le}from"./CurrencyContext.js";import{say as T}from"efficient-web-builder/format/lib/editor-words";import{useEnglish as re}from"./EnglishVariant.js";const o={body:"text-[length:var(--size-body,12px)]",labelXs:"text-[length:var(--size-label,11px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]",labelXl:"text-[length:var(--size-label,14px)]"},oe=[],ae="whitespace-nowrap border-b border-line px-4 py-4",X=`relative cursor-pointer border-2 px-4 py-2 font-mono ${o.labelSmall} font-semibold uppercase tracking-[0.18em] text-fg transition-colors`,j="border-b border-line py-[120px] max-view-desktop:py-20",L="border-b border-line pt-0 pb-[120px] max-view-desktop:pt-0 max-view-desktop:pb-20",R={background:"color-mix(in oklab, var(--accent) 14%, transparent)"},B=(a,i,s)=>i.map(f=>f.cell(a,s)).join("|");function ie({num:a,title:i,description:s,rows:f,showFilter:I=!0,tooltipDefaultOn:b=!0,footnote:H,footnoteLinkText:O,footnoteLinkHref:W,editing:y=!1,omitHead:p=!1,fieldUsage:G=oe}){const N=f??[],c=te(G),K=re(),h=ne(le()),[x,k]=A(null),[r,S]=A(b);J(()=>S(b),[b]);const P=Y({editing:y}),$=c.length===0;if(N.length===0||$)return y?l(F,{className:p?L:j,children:[p?null:t(E,{num:a!=null?u(a):void 0,title:i!=null?_(i,!1):void 0,description:s!=null?u(s):void 0,accent:!0}),t("p",{className:`border-t border-line py-6 font-mono ${o.labelLarge} uppercase tracking-[0.18em] text-fg-dim`,children:$?T("Every fitment column is hidden in Product Types — show one to draw this table."):T("No fitment data for this wheel — pick a wheel with fitment specs.")})]}):null;const z=new Set,g=N.filter(e=>{const n=B(e,c,h);return z.has(n)?!1:(z.add(n),!0)}),w=Array.from(new Set(g.map(e=>e.diameter))).sort((e,n)=>e-n),d=x!==null&&w.includes(x)?x:null,v=d===null?g:g.filter(e=>e.diameter===d),V=I&&w.length>1,U=e=>{if(e===0)return!1;const n=v[e-1],m=v[e];return n.diameter!==m.diameter||n.width!==m.width};return l(F,{className:p?L:j,children:[p?null:t(E,{num:a!=null?u(a):void 0,title:i!=null?_(i,!1):void 0,description:s!=null?u(s):void 0,accent:!0}),l("div",{className:"mb-6 flex flex-wrap items-center gap-x-2 gap-y-3",children:[V&&l(D,{children:[t("span",{className:`mr-2 font-mono ${o.labelSmall} uppercase tracking-[0.24em] text-fg-dim max-view-tablet:mr-0 max-view-tablet:mb-1 max-view-tablet:w-full`,children:"Filter by size:"}),l("button",{type:"button",onClick:()=>k(null),className:`${X} ${d===null?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"}`,style:d===null?R:void 0,children:[d===null&&t("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),"All"]}),w.map(e=>{const n=e===d;return l("button",{type:"button",onClick:()=>k(n?null:e),className:`${X} ${n?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"}`,style:n?R:void 0,children:[n&&t("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e,'"']},e)})]}),l("button",{type:"button",onClick:()=>S(e=>!e),"aria-pressed":r,"aria-label":r?"Hide vehicle tooltip":"Show vehicle tooltip",className:`ml-auto inline-flex items-center gap-3 font-mono ${o.labelSmall} uppercase tracking-[0.24em] text-fg-dim transition-colors hover:text-fg max-view-tablet:hidden`,children:[t("span",{children:"Vehicle tooltip"}),t("span",{className:`relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 transition-colors ${r?"border-accent":"border-fg-dim/50"}`,style:r?{background:"color-mix(in oklab, var(--accent) 30%, transparent)"}:void 0,"aria-hidden":!0,children:t("span",{className:`block h-3 w-3 rounded-full transition-transform ${r?"translate-x-[18px] bg-accent":"translate-x-[2px] bg-fg-dim"}`})}),t("span",{className:r?"text-accent":"text-fg-dim",children:r?"On":"Off"})]})]}),t("div",{className:"-mx-1 overflow-x-auto",children:l("table",{className:`w-full border-collapse font-mono ${o.labelXl} tracking-[0.06em] text-fg`,children:[t("thead",{children:t("tr",{children:c.map(({header:e},n)=>t("th",{className:`whitespace-nowrap border-b border-line bg-surface px-4 py-4 text-left ${o.body} font-normal uppercase tracking-[0.22em] text-fg-dim`,children:K(e)},n))})}),t("tbody",{children:v.map((e,n)=>t("tr",{className:`group transition-colors hover:[&>td]:bg-surface ${U(n)?"[&>td]:border-t [&>td]:border-line":""}`,children:c.map((m,Z)=>{const C=Z===c.length-1,q=m.fieldKey==="diameter";return l("td",{className:`${C?"relative ":""}${ae}${q?" text-accent":""}`,children:[m.cell(e,h),C&&r&&t("span",{role:"tooltip",className:`pointer-events-none absolute top-1/2 right-0 z-20 hidden w-[520px] -translate-y-1/2 whitespace-normal bg-[var(--tooltip-bg)] px-3 py-2 text-right font-mono ${o.labelXs} normal-case tracking-[0.12em] text-fg shadow-lg group-hover:block max-view-tablet:!hidden`,children:t(Q,{answer:ee(e,P)})})]},m.fieldKey)})},B(e,c,h)))})]})}),t(M,{text:H,linkText:O,linkHref:W})]})}export{ie as default};
1
+ "use client";import{jsx as t,jsxs as l,Fragment as q}from"react/jsx-runtime";import C from"./SectionBand.js";import{useEffect as J,useState as E}from"react";import _ from"efficient-web-builder/render/components/SectionHeader";import M from"./SectionFootnote.js";import{renderGold as u,renderHeadline as A}from"efficient-web-builder/render/components/goldPhrases";import Q from"./fitment/FitmentRowFit.js";import{useVehicleFit as Y}from"./fitment/useVehicleFit.js";import{fitmentRowAnswer as ee}from"../lib/wheels/fitment-row-fit.js";import{fitmentColumns as te,loadUnitFor as ne}from"../lib/wheels/fitment-columns.js";import{useActiveCountry as le}from"./CurrencyContext.js";import{NO_FIELD_ANSWERS as re}from"../lib/content/field-usage.js";import{say as T}from"efficient-web-builder/format/lib/editor-words";import{useEnglish as oe}from"./EnglishVariant.js";const o={body:"text-[length:var(--size-body,12px)]",labelXs:"text-[length:var(--size-label,11px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]",labelXl:"text-[length:var(--size-label,14px)]"},ae="whitespace-nowrap border-b border-line px-4 py-4",L=`relative cursor-pointer border-2 px-4 py-2 font-mono ${o.labelSmall} font-semibold uppercase tracking-[0.18em] text-fg transition-colors`,X="border-b border-line py-[120px] max-view-desktop:py-20",j="border-b border-line pt-0 pb-[120px] max-view-desktop:pt-0 max-view-desktop:pb-20",I={background:"color-mix(in oklab, var(--accent) 14%, transparent)"},R=(a,i,s)=>i.map(f=>f.cell(a,s)).join("|");function ie({num:a,title:i,description:s,rows:f,showFilter:B=!0,tooltipDefaultOn:b=!0,footnote:H,footnoteLinkText:O,footnoteLinkHref:W,editing:y=!1,omitHead:p=!1,fieldUsage:G=re}){const N=f??[],c=te(G),K=oe(),h=ne(le()),[x,k]=E(null),[r,S]=E(b);J(()=>S(b),[b]);const P=Y({editing:y}),$=c.length===0;if(N.length===0||$)return y?l(C,{className:p?j:X,children:[p?null:t(_,{num:a!=null?u(a):void 0,title:i!=null?A(i,!1):void 0,description:s!=null?u(s):void 0,accent:!0}),t("p",{className:`border-t border-line py-6 font-mono ${o.labelLarge} uppercase tracking-[0.18em] text-fg-dim`,children:$?T("Every fitment column is hidden in Product Types — show one to draw this table."):T("No fitment data for this wheel — pick a wheel with fitment specs.")})]}):null;const F=new Set,g=N.filter(e=>{const n=R(e,c,h);return F.has(n)?!1:(F.add(n),!0)}),w=Array.from(new Set(g.map(e=>e.diameter))).sort((e,n)=>e-n),d=x!==null&&w.includes(x)?x:null,v=d===null?g:g.filter(e=>e.diameter===d),V=B&&w.length>1,D=e=>{if(e===0)return!1;const n=v[e-1],m=v[e];return n.diameter!==m.diameter||n.width!==m.width};return l(C,{className:p?j:X,children:[p?null:t(_,{num:a!=null?u(a):void 0,title:i!=null?A(i,!1):void 0,description:s!=null?u(s):void 0,accent:!0}),l("div",{className:"mb-6 flex flex-wrap items-center gap-x-2 gap-y-3",children:[V&&l(q,{children:[t("span",{className:`mr-2 font-mono ${o.labelSmall} uppercase tracking-[0.24em] text-fg-dim max-view-tablet:mr-0 max-view-tablet:mb-1 max-view-tablet:w-full`,children:"Filter by size:"}),l("button",{type:"button",onClick:()=>k(null),className:`${L} ${d===null?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"}`,style:d===null?I:void 0,children:[d===null&&t("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),"All"]}),w.map(e=>{const n=e===d;return l("button",{type:"button",onClick:()=>k(n?null:e),className:`${L} ${n?"border-accent outline outline-1 outline-accent -outline-offset-1":"border-fg-dim/50 hover:border-accent"}`,style:n?I:void 0,children:[n&&t("span",{"aria-hidden":!0,className:"absolute inset-y-0 left-0 w-[3px] bg-accent"}),e,'"']},e)})]}),l("button",{type:"button",onClick:()=>S(e=>!e),"aria-pressed":r,"aria-label":r?"Hide vehicle tooltip":"Show vehicle tooltip",className:`ml-auto inline-flex items-center gap-3 font-mono ${o.labelSmall} uppercase tracking-[0.24em] text-fg-dim transition-colors hover:text-fg max-view-tablet:hidden`,children:[t("span",{children:"Vehicle tooltip"}),t("span",{className:`relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 transition-colors ${r?"border-accent":"border-fg-dim/50"}`,style:r?{background:"color-mix(in oklab, var(--accent) 30%, transparent)"}:void 0,"aria-hidden":!0,children:t("span",{className:`block h-3 w-3 rounded-full transition-transform ${r?"translate-x-[18px] bg-accent":"translate-x-[2px] bg-fg-dim"}`})}),t("span",{className:r?"text-accent":"text-fg-dim",children:r?"On":"Off"})]})]}),t("div",{className:"-mx-1 overflow-x-auto",children:l("table",{className:`w-full border-collapse font-mono ${o.labelXl} tracking-[0.06em] text-fg`,children:[t("thead",{children:t("tr",{children:c.map(({header:e},n)=>t("th",{className:`whitespace-nowrap border-b border-line bg-surface px-4 py-4 text-left ${o.body} font-normal uppercase tracking-[0.22em] text-fg-dim`,children:K(e)},n))})}),t("tbody",{children:v.map((e,n)=>t("tr",{className:`group transition-colors hover:[&>td]:bg-surface ${D(n)?"[&>td]:border-t [&>td]:border-line":""}`,children:c.map((m,U)=>{const z=U===c.length-1,Z=m.fieldKey==="diameter";return l("td",{className:`${z?"relative ":""}${ae}${Z?" text-accent":""}`,children:[m.cell(e,h),z&&r&&t("span",{role:"tooltip",className:`pointer-events-none absolute top-1/2 right-0 z-20 hidden w-[520px] -translate-y-1/2 whitespace-normal bg-[var(--tooltip-bg)] px-3 py-2 text-right font-mono ${o.labelXs} normal-case tracking-[0.12em] text-fg shadow-lg group-hover:block max-view-tablet:!hidden`,children:t(Q,{answer:ee(e,P)})})]},m.fieldKey)})},R(e,c,h)))})]})}),t(M,{text:H,linkText:O,linkHref:W})]})}export{ie as default};
@@ -21,5 +21,9 @@ export interface FooterMenuProps {
21
21
  layout?: "column" | "row";
22
22
  linkAlign?: unknown;
23
23
  linkRange?: unknown;
24
+ menuStyle?: unknown;
25
+ currentPage?: unknown;
24
26
  }
25
- export default function FooterMenu({ owner, menu, heading, accordionMobile, showDividers, editing, layout, linkAlign, linkRange, }: FooterMenuProps): import("react").JSX.Element;
27
+ export declare const MENU_STYLE_PLAIN = "plain";
28
+ export declare const MENU_STYLE_TABS = "tabs";
29
+ export default function FooterMenu({ owner, menu, heading, accordionMobile, showDividers, editing, layout, linkAlign, linkRange, menuStyle, currentPage, }: FooterMenuProps): import("react").JSX.Element;