efficient-storefront-blocks 0.85.0 → 0.87.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 (218) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/chunks/{EditorPreviewCheckout-4XHYYAT2.js → EditorPreviewCheckout-GD4IJ4WK.js} +1 -1
  3. package/dist/chunks/{SiteEditorProvider-X4YKBAJ4.js → SiteEditorProvider-2UVCJZXS.js} +1 -1
  4. package/dist/chunks/{chunk-NFXV7HDB.js → chunk-H4IHUSCU.js} +1 -1
  5. package/dist/chunks/chunk-QLR6IVWJ.js +369 -0
  6. package/dist/chunks/chunk-SYK5QPNV.js +1 -0
  7. package/dist/chunks/{chunk-VG4SUIRK.js → chunk-XZ46W3NV.js} +1 -1
  8. package/dist/chunks/{fitment-data-2I2FDPXW.js → fitment-data-5GBUMO2O.js} +1 -1
  9. package/dist/contract.js +20 -2
  10. package/dist/editor/lib/document/blocks/commerce/FitmentPicker/fields.d.ts +2 -0
  11. package/dist/editor/lib/document/blocks/commerce/FitmentPicker/fields.js +1 -0
  12. package/dist/editor/lib/document/blocks/commerce/FitmentTable/fields.js +1 -1
  13. package/dist/editor/lib/document/blocks/commerce/ProductBuy/fields.d.ts +2 -0
  14. package/dist/editor/lib/document/blocks/commerce/ProductBuy/fields.js +1 -0
  15. package/dist/editor/lib/document/blocks/commerce/ProductEyebrow/fields.d.ts +2 -0
  16. package/dist/editor/lib/document/blocks/commerce/ProductEyebrow/fields.js +1 -0
  17. package/dist/editor/lib/document/blocks/commerce/ProductGrid/fields.js +1 -1
  18. package/dist/editor/lib/document/blocks/commerce/ProductName/fields.d.ts +2 -0
  19. package/dist/editor/lib/document/blocks/commerce/ProductName/fields.js +1 -0
  20. package/dist/editor/lib/document/blocks/commerce/ProductPicture/fields.d.ts +2 -0
  21. package/dist/editor/lib/document/blocks/commerce/ProductPicture/fields.js +1 -0
  22. package/dist/editor/lib/document/blocks/commerce/ProductSpecs/fields.d.ts +2 -0
  23. package/dist/editor/lib/document/blocks/commerce/ProductSpecs/fields.js +1 -0
  24. package/dist/editor/lib/document/blocks/commerce/RelatedProducts/fields.js +1 -1
  25. package/dist/editor/lib/document/blocks/commerce/SpecTable/fields.js +1 -1
  26. package/dist/editor/lib/document/blocks/commerce/StockFitment/fields.d.ts +2 -0
  27. package/dist/editor/lib/document/blocks/commerce/StockFitment/fields.js +1 -0
  28. package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
  29. package/dist/editor/lib/document/blocks/commerce/index.js +1 -1
  30. package/dist/editor/lib/document/blocks/commerce/page-rules.d.ts +5 -0
  31. package/dist/editor/lib/document/blocks/commerce/page-rules.js +1 -1
  32. package/dist/editor/lib/document/blocks/service/ArticleBody/fields.d.ts +2 -0
  33. package/dist/editor/lib/document/blocks/service/ArticleBody/fields.js +1 -0
  34. package/dist/editor/lib/document/blocks/service/SiteFooter/fields.js +1 -1
  35. package/dist/editor/lib/document/blocks/service/SiteHeader/fields.js +1 -1
  36. package/dist/editor/lib/document/blocks/service/index.d.ts +1 -1
  37. package/dist/editor/lib/document/blocks/service/index.js +1 -1
  38. package/dist/editor/lib/document/box-header.d.ts +1 -1
  39. package/dist/editor/lib/document/box-header.js +1 -1
  40. package/dist/editor/lib/document/config.js +1 -1
  41. package/dist/editor/lib/document/section-text-regions.js +1 -1
  42. package/dist/editor/lib/efficient-block-sources.js +1 -1
  43. package/dist/editor/lib/storefront-editor-words.d.ts +19 -7
  44. package/dist/editor/lib/storefront-editor-words.js +1 -1
  45. package/dist/fitment.js +1 -1
  46. package/dist/index.js +44 -40
  47. package/dist/links.js +1 -1
  48. package/dist/render/app/fonts/fallbacks.css +8 -0
  49. package/dist/render/app/fonts/jost/OFL.txt +93 -0
  50. package/dist/render/app/fonts/jost/cyrillic-italic.woff2 +0 -0
  51. package/dist/render/app/fonts/jost/cyrillic.woff2 +0 -0
  52. package/dist/render/app/fonts/jost/latin-ext-italic.woff2 +0 -0
  53. package/dist/render/app/fonts/jost/latin-ext.woff2 +0 -0
  54. package/dist/render/app/fonts/jost/latin-italic.woff2 +0 -0
  55. package/dist/render/app/fonts/jost/latin.woff2 +0 -0
  56. package/dist/render/app/globals.css +11 -11
  57. package/dist/render/built-with.json +1 -1
  58. package/dist/render/components/ArticleBody.d.ts +7 -0
  59. package/dist/render/components/ArticleBody.js +1 -0
  60. package/dist/render/components/BoxHeaderBar.d.ts +2 -1
  61. package/dist/render/components/BoxHeaderBar.js +1 -1
  62. package/dist/render/components/Events.js +1 -1
  63. package/dist/render/components/FitmentTable.d.ts +1 -1
  64. package/dist/render/components/FitmentTable.js +1 -1
  65. package/dist/render/components/FooterMenu.d.ts +5 -1
  66. package/dist/render/components/FooterMenu.js +1 -1
  67. package/dist/render/components/GridCardTemplate.d.ts +34 -0
  68. package/dist/render/components/GridCardTemplate.js +1 -0
  69. package/dist/render/components/MenuLinkBlock.d.ts +5 -1
  70. package/dist/render/components/MenuLinkBlock.js +1 -1
  71. package/dist/render/components/ProductCardChrome.d.ts +1 -1
  72. package/dist/render/components/ProductCardChrome.js +1 -1
  73. package/dist/render/components/ProductGridSection.d.ts +6 -15
  74. package/dist/render/components/ProductGridSection.js +1 -1
  75. package/dist/render/components/ProductRef.js +1 -1
  76. package/dist/render/components/PublishedHeader.js +1 -1
  77. package/dist/render/components/SectionBand.d.ts +2 -1
  78. package/dist/render/components/SectionBand.js +1 -1
  79. package/dist/render/components/SectionBandChoice.d.ts +2 -1
  80. package/dist/render/components/SectionBandChoice.js +1 -1
  81. package/dist/render/components/SectionGroupBody.d.ts +2 -2
  82. package/dist/render/components/SectionGroupBody.js +1 -1
  83. package/dist/render/components/SpecTable.d.ts +3 -1
  84. package/dist/render/components/SpecTable.js +1 -1
  85. package/dist/render/components/StorefrontProviders.d.ts +1 -1
  86. package/dist/render/components/StorefrontProviders.js +1 -1
  87. package/dist/render/components/TyreCard.js +1 -1
  88. package/dist/render/components/TyreFitVerdicts.d.ts +2 -1
  89. package/dist/render/components/TyreFitVerdicts.js +1 -1
  90. package/dist/render/components/TyrePlpCard.js +1 -1
  91. package/dist/render/components/TyreSizeGrid.d.ts +17 -0
  92. package/dist/render/components/TyreSizeGrid.js +1 -0
  93. package/dist/render/components/card-pieces/CardEyebrow.d.ts +3 -1
  94. package/dist/render/components/card-pieces/CardEyebrow.js +1 -1
  95. package/dist/render/components/card-pieces/CardName.d.ts +3 -1
  96. package/dist/render/components/card-pieces/CardName.js +1 -1
  97. package/dist/render/components/card-pieces/CardPrice.d.ts +2 -6
  98. package/dist/render/components/card-pieces/CardPrice.js +1 -1
  99. package/dist/render/components/card-pieces/CardProductPicture.d.ts +8 -0
  100. package/dist/render/components/card-pieces/CardProductPicture.js +1 -0
  101. package/dist/render/components/card-pieces/card-text-region.d.ts +18 -0
  102. package/dist/render/components/card-pieces/card-text-region.js +1 -0
  103. package/dist/render/components/fitment/FitmentPickerGrid.d.ts +5 -1
  104. package/dist/render/components/fitment/FitmentPickerGrid.js +1 -1
  105. package/dist/render/components/fitment/FitmentPickerPart.d.ts +8 -0
  106. package/dist/render/components/fitment/FitmentPickerPart.js +1 -0
  107. package/dist/render/components/fitment/StockFitmentPart.d.ts +11 -0
  108. package/dist/render/components/fitment/StockFitmentPart.js +1 -0
  109. package/dist/render/components/fitment/fitment-answer-source.d.ts +12 -0
  110. package/dist/render/components/fitment/fitment-answer-source.js +1 -0
  111. package/dist/render/components/fitment/useVehicleFit.d.ts +2 -1
  112. package/dist/render/components/fitment/useVehicleFit.js +1 -1
  113. package/dist/render/components/pdp-dynamic/DynamicFitmentTable.d.ts +5 -0
  114. package/dist/render/components/pdp-dynamic/DynamicFitmentTable.js +1 -1
  115. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.d.ts +10 -12
  116. package/dist/render/components/pdp-dynamic/DynamicRelatedProducts.js +1 -1
  117. package/dist/render/components/pdp-dynamic/DynamicSpecTable.d.ts +1 -0
  118. package/dist/render/components/pdp-dynamic/DynamicSpecTable.js +1 -1
  119. package/dist/render/components/pdp-dynamic/DynamicTyreSizes.js +1 -1
  120. package/dist/render/components/pdp-dynamic/FitmentTableBlock.d.ts +3 -1
  121. package/dist/render/components/pdp-dynamic/FitmentTableBlock.js +1 -1
  122. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  123. package/dist/render/components/wheels-plp/PlpCard.d.ts +1 -1
  124. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  125. package/dist/render/lib/content/article-body-seed.d.ts +9 -0
  126. package/dist/render/lib/content/article-body-seed.js +1 -0
  127. package/dist/render/lib/content/article-body.d.ts +8 -0
  128. package/dist/render/lib/content/article-body.js +5 -0
  129. package/dist/render/lib/content/article-page-seed.d.ts +12 -0
  130. package/dist/render/lib/content/article-page-seed.js +1 -0
  131. package/dist/render/lib/content/field-usage.d.ts +1 -0
  132. package/dist/render/lib/content/field-usage.js +1 -1
  133. package/dist/render/lib/content/product-card-seed.d.ts +29 -0
  134. package/dist/render/lib/content/product-card-seed.js +1 -0
  135. package/dist/render/lib/content/tab-strip.d.ts +17 -0
  136. package/dist/render/lib/content/tab-strip.js +1 -0
  137. package/dist/render/lib/document/blocks/commerce/FitmentPicker/meta.d.ts +2 -0
  138. package/dist/render/lib/document/blocks/commerce/FitmentPicker/meta.js +1 -0
  139. package/dist/render/lib/document/blocks/commerce/FitmentPicker/render.d.ts +2 -0
  140. package/dist/render/lib/document/blocks/commerce/FitmentPicker/render.js +1 -0
  141. package/dist/render/lib/document/blocks/commerce/FitmentTable/meta.js +1 -1
  142. package/dist/render/lib/document/blocks/commerce/FitmentTable/render.js +1 -1
  143. package/dist/render/lib/document/blocks/commerce/ProductBuy/meta.d.ts +2 -0
  144. package/dist/render/lib/document/blocks/commerce/ProductBuy/meta.js +1 -0
  145. package/dist/render/lib/document/blocks/commerce/ProductBuy/render.d.ts +2 -0
  146. package/dist/render/lib/document/blocks/commerce/ProductBuy/render.js +1 -0
  147. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/meta.d.ts +2 -0
  148. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/meta.js +1 -0
  149. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/render.d.ts +2 -0
  150. package/dist/render/lib/document/blocks/commerce/ProductEyebrow/render.js +1 -0
  151. package/dist/render/lib/document/blocks/commerce/ProductGrid/meta.d.ts +4 -0
  152. package/dist/render/lib/document/blocks/commerce/ProductGrid/meta.js +1 -1
  153. package/dist/render/lib/document/blocks/commerce/ProductGrid/render.js +1 -1
  154. package/dist/render/lib/document/blocks/commerce/ProductName/meta.d.ts +2 -0
  155. package/dist/render/lib/document/blocks/commerce/ProductName/meta.js +1 -0
  156. package/dist/render/lib/document/blocks/commerce/ProductName/render.d.ts +2 -0
  157. package/dist/render/lib/document/blocks/commerce/ProductName/render.js +1 -0
  158. package/dist/render/lib/document/blocks/commerce/ProductPicture/meta.d.ts +2 -0
  159. package/dist/render/lib/document/blocks/commerce/ProductPicture/meta.js +1 -0
  160. package/dist/render/lib/document/blocks/commerce/ProductPicture/render.d.ts +2 -0
  161. package/dist/render/lib/document/blocks/commerce/ProductPicture/render.js +1 -0
  162. package/dist/render/lib/document/blocks/commerce/ProductPrice/render.js +1 -1
  163. package/dist/render/lib/document/blocks/commerce/ProductSpecs/meta.d.ts +2 -0
  164. package/dist/render/lib/document/blocks/commerce/ProductSpecs/meta.js +1 -0
  165. package/dist/render/lib/document/blocks/commerce/ProductSpecs/render.d.ts +2 -0
  166. package/dist/render/lib/document/blocks/commerce/ProductSpecs/render.js +1 -0
  167. package/dist/render/lib/document/blocks/commerce/RelatedProducts/meta.d.ts +0 -4
  168. package/dist/render/lib/document/blocks/commerce/RelatedProducts/meta.js +1 -1
  169. package/dist/render/lib/document/blocks/commerce/RelatedProducts/render.js +1 -1
  170. package/dist/render/lib/document/blocks/commerce/SpecTable/render.js +1 -1
  171. package/dist/render/lib/document/blocks/commerce/StockFitment/meta.d.ts +2 -0
  172. package/dist/render/lib/document/blocks/commerce/StockFitment/meta.js +1 -0
  173. package/dist/render/lib/document/blocks/commerce/StockFitment/render.d.ts +2 -0
  174. package/dist/render/lib/document/blocks/commerce/StockFitment/render.js +1 -0
  175. package/dist/render/lib/document/blocks/commerce/metas.d.ts +7 -0
  176. package/dist/render/lib/document/blocks/commerce/metas.js +1 -1
  177. package/dist/render/lib/document/blocks/commerce/renders.d.ts +7 -0
  178. package/dist/render/lib/document/blocks/commerce/renders.js +1 -1
  179. package/dist/render/lib/document/blocks/service/ArticleBody/meta.d.ts +8 -0
  180. package/dist/render/lib/document/blocks/service/ArticleBody/meta.js +1 -0
  181. package/dist/render/lib/document/blocks/service/ArticleBody/render.d.ts +2 -0
  182. package/dist/render/lib/document/blocks/service/ArticleBody/render.js +1 -0
  183. package/dist/render/lib/document/blocks/service/SiteFooter/render.js +1 -1
  184. package/dist/render/lib/document/blocks/service/SiteHeader/render.js +1 -1
  185. package/dist/render/lib/document/blocks/service/metas.d.ts +1 -0
  186. package/dist/render/lib/document/blocks/service/metas.js +1 -1
  187. package/dist/render/lib/document/blocks/service/renders.d.ts +1 -0
  188. package/dist/render/lib/document/blocks/service/renders.js +1 -1
  189. package/dist/render/lib/document/blocks/text-part-shapes.json +0 -16
  190. package/dist/render/lib/document/card-templates.js +1 -1
  191. package/dist/render/lib/document/footer-page-blocks.js +1 -1
  192. package/dist/render/lib/document/lazy-draws.js +1 -1
  193. package/dist/render/lib/font-table.json +209 -1
  194. package/dist/render/lib/menu-link.d.ts +2 -0
  195. package/dist/render/lib/menu-link.js +1 -1
  196. package/dist/render/lib/next-fonts.js +1 -1
  197. package/dist/render/lib/sections/grid-no-hole.d.ts +1 -0
  198. package/dist/render/lib/sections/grid-no-hole.js +1 -1
  199. package/dist/render/lib/sections/product-card-text-regions.d.ts +3 -0
  200. package/dist/render/lib/sections/product-card-text-regions.js +1 -0
  201. package/dist/render/lib/sections/product-grid-columns.d.ts +17 -0
  202. package/dist/render/lib/sections/product-grid-columns.js +1 -0
  203. package/dist/render/lib/sections/related-to-grid.d.ts +8 -0
  204. package/dist/render/lib/sections/related-to-grid.js +1 -0
  205. package/dist/render/lib/storefront-page-groups.d.ts +0 -4
  206. package/dist/render/lib/storefront-page-groups.js +1 -1
  207. package/dist/render/lib/tyres/tyre-vehicle-fitment.d.ts +1 -0
  208. package/dist/render/lib/tyres/tyre-vehicle-fitment.js +1 -1
  209. package/dist/render/lib/wheels/plp-filters.js +1 -1
  210. package/dist/render/lib/wheels/vehicle-memory.d.ts +13 -0
  211. package/dist/render/lib/wheels/vehicle-memory.js +1 -1
  212. package/dist/words.d.ts +69 -8
  213. package/dist/words.js +6 -6
  214. package/package.json +4 -4
  215. package/dist/chunks/chunk-NNBMZAW4.js +0 -340
  216. package/dist/chunks/chunk-Y5LB56KB.js +0 -1
  217. /package/dist/chunks/{chunk-KKKMX6LH.js → chunk-DLWIDJS5.js} +0 -0
  218. /package/dist/chunks/{chunk-NNBMZAW4.js.LEGAL.txt → chunk-QLR6IVWJ.js.LEGAL.txt} +0 -0
@@ -1 +1 @@
1
- "use client";import{useCallback as d,useEffect as f,useMemo as A,useRef as R,useState as F}from"react";import{useFitmentCascade as U}from"./useFitmentCascade.js";import{DEFAULT_VEHICLE as w}from"../../lib/wheels/fitment-options.js";import{vehicleFitmentFromStock as x}from"../../lib/wheels/plp-fitment-match.js";import{clearAppliedVehicle as M}from"../../lib/wheels/applied-vehicle.js";import{isCompleteVehicle as k,vehicleFromParams as P}from"../../lib/wheels/plp-vehicle-params.js";import{storefrontVehicleMemory as h}from"../../lib/wheels/vehicle-memory.js";function p(t,o,s){return t!==o?t:s||o}function j(t,o){return t.make===o.make&&t.model===o.model&&t.modification===o.modification}function n(t,o){return t.make===o.make&&t.model===o.model&&t.year===o.year&&t.modification===o.modification}function _({initialMakes:t=[],editing:o=!1,enabled:s=!0,autoApply:b=!1}={}){const e=U(t,s),{setVehicle:a}=e,[l,m]=F(null),[L,N]=F(!1),u=d(()=>({make:e.makeName,model:e.modelName,modification:e.modName}),[e.makeName,e.modelName,e.modName]);f(()=>{if(o||!s){N(!0);return}const c=P(new URLSearchParams(window.location.search)),r=c?null:h.read(),i=c??r?.vehicle??null;i&&(a(i),m({vehicle:i,labels:r?.labels??{make:i.make,model:i.model,modification:i.modification},stock:null})),N(!0)},[o,s,a]),f(()=>{if(!(o||!s))return h.subscribe(()=>{const c=h.read();m(i=>c?i&&n(i.vehicle,c.vehicle)?j(i.labels,c.labels)?i:{...i,labels:c.labels}:{vehicle:c.vehicle,labels:c.labels,stock:null}:null);const r=c?.vehicle??w;a(i=>n(i,r)?i:r)})},[o,s,a]),f(()=>{!b||!k(e.vehicle)||l&&n(l.vehicle,e.vehicle)||m({vehicle:e.vehicle,labels:u(),stock:e.stock})},[b,l,e.vehicle,e.stock,u]),f(()=>{if(!l||!n(e.vehicle,l.vehicle))return;const c={make:p(e.makeName,e.vehicle.make,l.labels.make),model:p(e.modelName,e.vehicle.model,l.labels.model),modification:p(e.modName,e.vehicle.modification,l.labels.modification)};(l.stock!==e.stock||l.labels.make!==c.make||l.labels.model!==c.model||l.labels.modification!==c.modification)&&m(i=>i&&n(e.vehicle,i.vehicle)?{...i,stock:e.stock,labels:c}:i)},[l,e.vehicle,e.stock,e.makeName,e.modelName,e.modName]);const v=R("");f(()=>{if(!(o||!s))try{if(!l){v.current!==""&&(h.clear(),v.current="");return}const c=JSON.stringify({vehicle:l.vehicle,labels:l.labels});if(c===v.current)return;h.write({vehicle:l.vehicle,labels:l.labels}),v.current=c}catch{}},[l,o,s]);const C=d(()=>{k(e.vehicle)&&m({vehicle:e.vehicle,labels:u(),stock:e.stock})},[e.vehicle,e.stock,u]),E=d(()=>{m(null),a(w),!o&&s&&M()},[o,s,a]),y=A(()=>x(l?.stock),[l?.stock]),V=!!l&&n(e.vehicle,l.vehicle)&&e.loading.stock!==!1,S=l?[l.vehicle.year,l.labels.make,l.labels.model,l.labels.modification].filter(Boolean).join(" "):"";return{cascade:e,applied:l,fit:y,resolving:V,unresolved:!!l&&y===null&&!V,apply:C,clear:E,canApply:k(e.vehicle),appliedName:S,restored:L}}export{_ as useVehicleFit};
1
+ "use client";import{useCallback as k,useEffect as h,useMemo as x,useRef as F,useState as S}from"react";import{useFitmentCascade as M}from"./useFitmentCascade.js";import{DEFAULT_VEHICLE as L}from"../../lib/wheels/fitment-options.js";import{vehicleFitmentFromStock as P}from"../../lib/wheels/plp-fitment-match.js";import{clearAppliedVehicle as j}from"../../lib/wheels/applied-vehicle.js";import{isCompleteVehicle as p,vehicleFromParams as B}from"../../lib/wheels/plp-vehicle-params.js";import{storefrontVehicleMemory as a}from"../../lib/wheels/vehicle-memory.js";function b(t,c,r){return t!==c?t:r||c}function D(t,c){return t.make===c.make&&t.model===c.model&&t.modification===c.modification}function m(t,c){return t.make===c.make&&t.model===c.model&&t.year===c.year&&t.modification===c.modification}function z({initialMakes:t=[],editing:c=!1,enabled:r=!0,autoApply:N=!1,shareStock:y=!1}={}){const e=M(t,r),{setVehicle:n}=e,[l,f]=S(null),[C,w]=S(!1),u=k(()=>({make:e.makeName,model:e.modelName,modification:e.modName}),[e.makeName,e.modelName,e.modName]);h(()=>{if(c||!r){w(!0);return}const o=B(new URLSearchParams(window.location.search)),s=o?null:a.read(),i=o??s?.vehicle??null;i&&(n(i),f({vehicle:i,labels:s?.labels??{make:i.make,model:i.model,modification:i.modification},stock:null})),w(!0)},[c,r,n]),h(()=>{if(!(c||!r))return a.subscribe(()=>{const o=a.read();f(i=>o?i&&m(i.vehicle,o.vehicle)?D(i.labels,o.labels)?i:{...i,labels:o.labels}:{vehicle:o.vehicle,labels:o.labels,stock:null}:null);const s=o?.vehicle??L;n(i=>m(i,s)?i:s)})},[c,r,n]),h(()=>{!N||!p(e.vehicle)||l&&m(l.vehicle,e.vehicle)||f({vehicle:e.vehicle,labels:u(),stock:e.stock})},[N,l,e.vehicle,e.stock,u]),h(()=>{if(!l||!m(e.vehicle,l.vehicle))return;const o={make:b(e.makeName,e.vehicle.make,l.labels.make),model:b(e.modelName,e.vehicle.model,l.labels.model),modification:b(e.modName,e.vehicle.modification,l.labels.modification)};(l.stock!==e.stock||l.labels.make!==o.make||l.labels.model!==o.model||l.labels.modification!==o.modification)&&f(i=>i&&m(e.vehicle,i.vehicle)?{...i,stock:e.stock,labels:o}:i)},[l,e.vehicle,e.stock,e.makeName,e.modelName,e.modName]);const d=F("");h(()=>{if(!(c||!r))try{if(!l){d.current!==""&&(a.clear(),d.current="");return}const o=JSON.stringify({vehicle:l.vehicle,labels:l.labels});if(o===d.current)return;a.write({vehicle:l.vehicle,labels:l.labels}),d.current=o}catch{}},[l,c,r]);const v=F(!1);h(()=>{if(!y||!r)return;if(!l){v.current&&a.writeStock(null),v.current=!1;return}if(!m(e.vehicle,l.vehicle))return;const o=e.loading.stock!==!1,s=a.readStock();s&&m(s.vehicle,l.vehicle)&&s.stock===e.stock&&s.loading===o&&s.error===e.cascadeError||(a.writeStock({vehicle:l.vehicle,stock:e.stock,loading:o,error:e.cascadeError}),v.current=!0)},[y,r,l,e.vehicle,e.stock,e.loading.stock,e.cascadeError]);const A=k(()=>{p(e.vehicle)&&f({vehicle:e.vehicle,labels:u(),stock:e.stock})},[e.vehicle,e.stock,u]),R=k(()=>{f(null),n(L),!c&&r&&j()},[c,r,n]),E=x(()=>P(l?.stock),[l?.stock]),V=!!l&&m(e.vehicle,l.vehicle)&&e.loading.stock!==!1,U=l?[l.vehicle.year,l.labels.make,l.labels.model,l.labels.modification].filter(Boolean).join(" "):"";return{cascade:e,applied:l,fit:E,resolving:V,unresolved:!!l&&E===null&&!V,apply:A,clear:R,canApply:p(e.vehicle),appliedName:U,restored:C}}export{z as useVehicleFit};
@@ -1,6 +1,11 @@
1
1
  import type { ProductKind } from "../../lib/api/index.js";
2
2
  export declare const supportedKinds: readonly ProductKind[];
3
+ export interface TyreHead {
4
+ title?: string;
5
+ description?: string;
6
+ }
3
7
  interface Props {
8
+ tyreHead?: TyreHead;
4
9
  num?: string;
5
10
  title?: string;
6
11
  description?: string;
@@ -1 +1 @@
1
- "use client";import{jsx as o}from"react/jsx-runtime";import x from"../FitmentTable.js";import w from"./KindGate.js";import{useCurrentProduct as y}from"../../lib/document/current-product.js";import{useSampleProduct as F}from"./useSampleProduct.js";const T=["alloy-wheel"];function b(t){return o(w,{kinds:T,type:"FitmentTable",editing:t.editing,children:o(g,{...t})})}function g({num:t,title:r,description:s,showFilter:l,tooltipDefaultOn:m,footnote:a,footnoteLinkText:d,footnoteLinkHref:f,editing:n=!1,omitHead:c=!1}){const e=y(),u=F(n&&!e),i=e?.product??u,p=i?.kind==="alloy-wheel"?i.source.fitments??[]:[];return o(x,{num:t,title:r,description:s,rows:p,showFilter:l,tooltipDefaultOn:m,footnote:a,footnoteLinkText:d,footnoteLinkHref:f,editing:n,omitHead:c,fieldUsage:e?.fieldUsage})}export{b as default,T as supportedKinds};
1
+ "use client";import{jsx as n}from"react/jsx-runtime";import k from"../FitmentTable.js";import x from"./KindGate.js";import{TyreSizesContent as F}from"../TyreSizeGrid.js";import{useCurrentProduct as T}from"../../lib/document/current-product.js";import{NO_FIELD_ANSWERS as w}from"../../lib/content/field-usage.js";import{useSampleProduct as b}from"./useSampleProduct.js";const h=["alloy-wheel","tyre"];function y(t){return n(x,{kinds:h,type:"FitmentTable",editing:t.editing,children:n(S,{...t})})}function S({num:t,title:s,description:l,showFilter:f,tooltipDefaultOn:a,footnote:d,footnoteLinkText:u,footnoteLinkHref:c,editing:r=!1,omitHead:m=!1,tyreHead:e}){const o=T(),p=b(r&&!o),i=o?.product??p;if(i?.kind==="tyre")return n(F,{variants:i.source.variants,fieldUsage:o?.fieldUsage??w,num:t,title:e?e.title:s,description:e?e.description:l,editing:r,omitHead:m,keepHiddenHead:e!=null});const g=i?.kind==="alloy-wheel"?i.source.fitments??[]:[];return n(k,{num:t,title:s,description:l,rows:g,showFilter:f,tooltipDefaultOn:a,footnote:d,footnoteLinkText:u,footnoteLinkHref:c,editing:r,omitHead:m,fieldUsage:o?.fieldUsage})}export{y as default,h as supportedKinds};
@@ -1,6 +1,6 @@
1
- import { type CardImageBackground } from "efficient-web-builder/format/lib/content/card-image-background";
2
- import type { CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
1
+ import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
3
2
  import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
3
+ import type { SlotComponent } from "efficient-easel/blocks";
4
4
  export declare const supportedKinds: readonly ("alloy-wheel" | "tyre")[];
5
5
  interface Props {
6
6
  num?: string;
@@ -14,19 +14,17 @@ interface Props {
14
14
  footnoteLinkHref?: string;
15
15
  editing?: boolean;
16
16
  omitHead?: boolean;
17
+ hover?: CardHoverDrawn;
18
+ ownerId?: string;
19
+ template?: SlotComponent;
17
20
  cardImage?: number | null;
18
21
  outline?: CardOutline;
19
22
  indexBadge?: CardIndexFormat;
20
- showBadge?: boolean;
21
- showCardPrice?: boolean;
22
- showCardFinishes?: boolean;
23
- showCardSizes?: boolean;
24
- showCardBuy?: boolean;
25
- showCardPage?: boolean;
26
- coverIndex?: number;
27
- imageBackground?: CardImageBackground;
28
- hover?: CardHoverDrawn;
23
+ columnsPhone?: unknown;
24
+ columnsTablet?: unknown;
25
+ gap?: number | string;
26
+ gapPhone?: unknown;
29
27
  }
30
28
  export default function DynamicRelatedProducts(props: Props): import("react").JSX.Element;
31
- export declare function RelatedProductsBody({ num, title, description, columns, cardCount, relationship: key, footnote, footnoteLinkText, footnoteLinkHref, editing, omitHead, cardImage, outline, indexBadge, showBadge, showCardPrice, showCardFinishes, showCardSizes, showCardBuy, showCardPage, coverIndex, imageBackground, hover, }: Props): import("react").JSX.Element | null;
29
+ export declare function RelatedProductsBody({ num, title, description, columns, cardCount, relationship: key, footnote, footnoteLinkText, footnoteLinkHref, editing, omitHead, hover, ownerId, template, cardImage, outline, indexBadge, columnsPhone, columnsTablet, gap, gapPhone, }: Props): import("react").JSX.Element | null;
32
30
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as F}from"react/jsx-runtime";import A from"../SectionBand.js";import{useScopeClass as W}from"../../lib/use-scope-class.js";import{GRID_CARD_SHOW as I}from"../../lib/sections/card-show-defaults.js";import{useEffect as V,useState as X}from"react";import{resolveCardImageBackground as Z,THEME_CARD_IMAGE_BG as q}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as B}from"efficient-web-builder/format/lib/content/card-image-shape";import{DEFAULT_COVER_INDEX as J}from"../../lib/wheels/cover-rendering.js";import{DEFAULT_CARD_INDEX_FORMAT as Q,DEFAULT_CARD_OUTLINE as Y,cardIndexCss as ee}from"efficient-web-builder/format/lib/sections/product-card-style";import re from"../CompatibleTyres.js";import oe from"../ProductCard.js";import{CARD_ROWS_GRID_CLASS as te,cardRowsGridStyle as ie}from"../WheelCardFrame.js";import{ProductCardChromeProvider as se}from"../ProductCardChrome.js";import{gridClassImageSizes as ae}from"../../lib/sections/card-image-sizes.js";import{fillRowCss as ne}from"../../lib/sections/fill-row.js";import le from"efficient-web-builder/render/components/SectionHeader";import de from"../ViewMoreLink.js";import{useSiteMenuLinks as ce}from"../catalog/SiteMenuLinks.js";import{renderGold as G,renderHeadline as me}from"efficient-web-builder/render/components/goldPhrases";import pe from"./KindGate.js";import{loadProductCatalog as ue}from"../useProductCatalog.js";import{PLP_KINDS as fe}from"../../lib/catalog/plp-item.js";import{relatedCardCount as he,relatedViewMore as ge}from"../../lib/catalog/related-cards.js";import{DEFAULT_RELATIONSHIP as Ce,relationshipApplies as we,relationshipByKey as xe}from"../../lib/catalog/relationships.js";import{useCurrentProduct as ye}from"../../lib/document/current-product.js";import{PLACEHOLDER_RELATED as O}from"../../lib/wheels/placeholder-wheel.js";import{say as T}from"efficient-web-builder/format/lib/editor-words";const H={label:"text-[length:var(--size-label,13px)]"},ve=fe,$={2:"grid-cols-2 max-view-wide:grid-cols-1",3:"grid-cols-3 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1",4:"grid-cols-4 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1"};function be(r){return e(pe,{kinds:ve,type:"RelatedProducts",editing:r.editing,children:e(Se,{...r})})}function Se({num:r,title:t,description:c,columns:a=3,cardCount:b,relationship:S=Ce,footnote:_,footnoteLinkText:k,footnoteLinkHref:E,editing:o=!1,omitHead:C=!1,cardImage:i,outline:m,indexBadge:p,showBadge:w,showCardPrice:x,showCardFinishes:n,showCardSizes:l,showCardBuy:u,showCardPage:f,coverIndex:h,imageBackground:g,hover:y}){const d=ye(),U=ce(),R=he(b),[j,N]=X([]);V(()=>{if(d||!o)return;let P=!1;return ue().then(M=>{const K=M.length>0?M:O;P||N(K)}).catch(()=>{P||N(O)}),()=>{P=!0}},[d,o]);const s=xe(S);if(!s)return null;const D=ge(s,U),L=C?null:e(le,{num:r?G(r):void 0,title:me(t||s.heading,!1),description:c?G(c):void 0,accent:!0});if(!d)return o?e(z,{header:L,wheels:j.slice(0,R),columns:a,viewMore:D,cardImage:i,outline:m,indexBadge:p,showBadge:w,showCardPrice:x,showCardFinishes:n,showCardSizes:l,showCardBuy:u,showCardPage:f,coverIndex:h,imageBackground:g,hover:y}):null;if(!we(s,d.product.kind))return o?e(A,{className:"border-b border-line py-14 max-view-desktop:py-10",style:B(i),children:e("p",{className:`font-mono ${H.label} uppercase tracking-[0.18em] text-fg-dim`,children:T("“{relationship}” does not apply to this product. It is hidden on the live page.",{relationship:T(s.label)})})}):null;const v=s.resolve(d.product,d.relatedWheels);return v.kind==="tyre"?e(re,{omitHead:C,columns:a,cardImage:i,outline:m,indexBadge:p,num:r,title:t||s.heading,description:c,tyres:[...v.tyres].slice(0,R),footnote:_,footnoteLinkText:k,footnoteLinkHref:E,viewMore:D,editing:o}):v.wheels.length===0?o?F(A,{className:"border-b border-line py-[120px] max-view-desktop:py-20",style:B(i),children:[L,e("p",{className:`border-t border-line py-6 font-mono ${H.label} uppercase tracking-[0.18em] text-fg-dim`,children:T("Related products appear here on a product page.")})]}):null:e(z,{header:L,wheels:[...v.wheels].slice(0,R),columns:a,viewMore:D,cardImage:i,outline:m,indexBadge:p,showBadge:w,showCardPrice:x,showCardFinishes:n,showCardSizes:l,showCardBuy:u,showCardPage:f,coverIndex:h,imageBackground:g,hover:y})}function z({header:r,wheels:t,columns:c,viewMore:a,cardImage:b,outline:S,indexBadge:_,showBadge:k,showCardPrice:E,showCardFinishes:o,showCardSizes:C,showCardBuy:i,showCardPage:m,coverIndex:p,imageBackground:w,hover:x}){const n=W("rp");if(t.length===0)return null;const l=$[Math.min(4,Math.max(2,c))]??$[3],u=_??Q,f=ee(n,u),h=ne(n,l,{cards:t.length});return F(A,{className:"border-b border-line py-[120px] max-view-desktop:py-20",style:B(b),children:[f&&e("style",{children:f}),h&&e("style",{children:h}),r,e(se,{imageSizes:ae(l,t.length),imageBackgroundFill:Z(w,q),hover:x,coverIndex:p??J,outline:S??Y,indexBadge:u,showBadge:k??!0,showCardPrice:E??!0,showCardFinishes:o??!0,showCardSizes:C??I.showCardSizes,showCardBuy:i??I.showCardBuy,showCardPage:m??I.showCardPage,children:e("div",{className:`${n} grid gap-[2px] ${te} bg-[var(--catalog-grid-bg)] ${l}`,style:ie("2px"),children:t.map((g,y)=>e(oe,{wheel:g,variant:"catalog"},`${g.slug}-${y}`))})}),e("div",{className:"mt-10 flex",children:e(de,{href:a.href,label:a.label})})]})}export{Se as RelatedProductsBody,be as default,ve as supportedKinds};
1
+ "use client";import{jsx as e,jsxs as T}from"react/jsx-runtime";import P from"../SectionBand.js";import{useScopeClass as z}from"../../lib/use-scope-class.js";import{useEffect as V,useState as W}from"react";import{cardHoverOf as F}from"efficient-web-builder/format/lib/animation/hover";const U=F({},"ProductGrid");import Z from"../CompatibleTyres.js";import{cardRowsGrid as X,GridCardProvider as q,GridCards as J,gridIndexCss as Q}from"../GridCardTemplate.js";import{productGridColumnsClass as Y}from"../../lib/sections/product-grid-columns.js";import{containerGapProps as ee}from"efficient-web-builder/format/lib/content/container-gap";import{cardImageShapeTokens as _}from"efficient-web-builder/format/lib/content/card-image-shape";import{NO_FIELD_ANSWERS as re}from"../../lib/content/field-usage.js";import{gridClassImageSizes as te}from"../../lib/sections/card-image-sizes.js";import{fillRowCss as oe}from"../../lib/sections/fill-row.js";import ie from"efficient-web-builder/render/components/SectionHeader";import ne from"../ViewMoreLink.js";import{useSiteMenuLinks as se}from"../catalog/SiteMenuLinks.js";import{renderGold as I,renderHeadline as le}from"efficient-web-builder/render/components/goldPhrases";import ae from"./KindGate.js";import{loadProductCatalog as de}from"../useProductCatalog.js";import{PLP_KINDS as ce}from"../../lib/catalog/plp-item.js";import{relatedCardCount as pe,relatedViewMore as me}from"../../lib/catalog/related-cards.js";import{DEFAULT_RELATIONSHIP as fe,relationshipApplies as ue,relationshipByKey as he}from"../../lib/catalog/relationships.js";import{useCurrentProduct as ge}from"../../lib/document/current-product.js";import{PLACEHOLDER_RELATED as H}from"../../lib/wheels/placeholder-wheel.js";import{say as L}from"efficient-web-builder/format/lib/editor-words";const A={label:"text-[length:var(--size-label,13px)]"},ye=ce;function be(t){return e(ae,{kinds:ye,type:"RelatedProducts",editing:t.editing,children:e(xe,{...t})})}function xe({num:t,title:o,description:n,columns:c=3,cardCount:h,relationship:g=fe,footnote:y,footnoteLinkText:b,footnoteLinkHref:x,editing:r=!1,omitHead:p=!1,hover:v,ownerId:a="",template:d,cardImage:s,outline:m,indexBadge:f,columnsPhone:C,columnsTablet:M,gap:O,gapPhone:$}){const N={columns:c,columnsPhone:C,columnsTablet:M,gap:O,gapPhone:$,hover:v,ownerId:a,template:d,editing:r},l=ge(),j=se(),S=pe(h),[B,R]=W([]);V(()=>{if(l||!r)return;let E=!1;return de().then(G=>{const K=G.length>0?G:H;E||R(K)}).catch(()=>{E||R(H)}),()=>{E=!0}},[l,r]);const i=he(g);if(!i)return null;const k=me(i,j),w=p?null:e(ie,{num:t?I(t):void 0,title:le(o||i.heading,!1),description:n?I(n):void 0,accent:!0});if(!l)return r?e(D,{header:w,wheels:B.slice(0,S),viewMore:k,...N}):null;if(!ue(i,l.product.kind))return r?e(P,{className:"border-b border-line py-14 max-view-desktop:py-10",style:_(s),children:e("p",{className:`font-mono ${A.label} uppercase tracking-[0.18em] text-fg-dim`,children:L("“{relationship}” does not apply to this product. It is hidden on the live page.",{relationship:L(i.label)})})}):null;const u=i.resolve(l.product,l.relatedWheels);return u.kind==="tyre"?e(Z,{omitHead:p,columns:c,cardImage:s,outline:m,indexBadge:f,num:t,title:o||i.heading,description:n,tyres:[...u.tyres].slice(0,S),footnote:y,footnoteLinkText:b,footnoteLinkHref:x,viewMore:k,editing:r}):u.wheels.length===0?r?T(P,{className:"border-b border-line py-[120px] max-view-desktop:py-20",style:_(s),children:[w,e("p",{className:`border-t border-line py-6 font-mono ${A.label} uppercase tracking-[0.18em] text-fg-dim`,children:L("Related products appear here on a product page.")})]}):null:e(D,{header:w,wheels:[...u.wheels].slice(0,S),viewMore:k,...N})}function D({header:t,wheels:o,viewMore:n,columns:c,columnsPhone:h,columnsTablet:g,gap:y,gapPhone:b,hover:x,ownerId:r,template:p,editing:v}){const a=z("rp");if(o.length===0)return null;const d=Y(c,h,g),s=X(ee("ProductGrid",y,"both",b)),m=Q(a),f=oe(a,d,{cards:o.length});return T(P,{className:"border-b border-line py-[120px] max-view-desktop:py-20",children:[m&&e("style",{children:m}),f&&e("style",{children:f}),t,e(q,{value:{ownerId:r,Template:p,hover:x??U,imageSizes:te(d,o.length),fieldUsage:re,reserveEyebrow:!1,editing:v},children:e(J,{wheels:o,children:C=>e("div",{className:`${a} grid${s.className} bg-[var(--catalog-grid-bg)] ${d}`,style:s.style,children:C})})}),e("div",{className:"mt-10 flex",children:e(ne,{href:n.href,label:n.label})})]})}export{xe as RelatedProductsBody,be as default,ye as supportedKinds};
@@ -9,6 +9,7 @@ interface Props {
9
9
  editing?: boolean;
10
10
  omitHead?: boolean;
11
11
  template?: unknown;
12
+ showEuLabel?: boolean;
12
13
  }
13
14
  export default function DynamicSpecTable(props: Props): import("react").JSX.Element;
14
15
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as l}from"react/jsx-runtime";import h from"../SpecTable.js";import x from"./KindGate.js";import{buildSpecSheet as k,sourceFromWheel as v}from"../../lib/wheels/spec-sheet.js";import{buildTyreSpecSheet as z}from"../../lib/tyres/spec-sheet.js";import{partVariant as I}from"../../lib/catalog/from-wheel.js";import{useCurrentProduct as P}from"../../lib/document/current-product.js";import{applySpecAnswers as b}from"../../lib/content/field-usage.js";import{useSampleProduct as j}from"./useSampleProduct.js";const A=["alloy-wheel","tyre"],E=[];function G(t,r,i){const o=t.variants??[];return(r?o.find(n=>n.sku===r):void 0)??(i?o.find(n=>n.size===i):void 0)??o[0]??null}function K(t){return l(x,{kinds:A,type:"SpecTable",editing:t.editing,children:l(L,{...t})})}function L({num:t,title:r,description:i,showDiagram:o=!0,editing:n=!1,nodeId:d,omitHead:u=!1,template:p}){const e=P(),w=j(n&&!e),a=e?.product??w,c=a?.kind==="tyre"?a.source:null,m=e?.fieldUsage??E;if(c){const g=G(c,e?.selection.part?.id,e?.selection.shown.size),T=z({brand:c.brand,variant:g});return l(h,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:b(T.rows,m),diagram:null,editing:n,nodeId:d,omitHead:u,template:p})}const s=a?.kind==="alloy-wheel"?a.source:null,y=e?e.selection.shown.finish:s?.finishes[0]?.name,S=e&&s?I(s,e.selection.part)?.size??void 0:void 0,f=s?k(v(s),y,S):{rows:[],diagram:null};return l(h,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:b(f.rows,m),diagram:o?f.diagram:null,editing:n,nodeId:d,omitHead:u,template:p})}export{K as default,A as supportedKinds};
1
+ "use client";import{jsx as a}from"react/jsx-runtime";import b from"../SpecTable.js";import k from"./KindGate.js";import{DynamicEuTyreLabelBlock as I}from"./DynamicEuTyreLabel.js";import{buildSpecSheet as L,sourceFromWheel as v}from"../../lib/wheels/spec-sheet.js";import{buildTyreSpecSheet as z}from"../../lib/tyres/spec-sheet.js";import{partVariant as D}from"../../lib/catalog/from-wheel.js";import{useCurrentProduct as E}from"../../lib/document/current-product.js";import{NO_FIELD_ANSWERS as N,applySpecAnswers as h}from"../../lib/content/field-usage.js";import{useSampleProduct as _}from"./useSampleProduct.js";const j=["alloy-wheel","tyre"];function A(t,r,i){const o=t.variants??[];return(r?o.find(n=>n.sku===r):void 0)??(i?o.find(n=>n.size===i):void 0)??o[0]??null}function B(t){return a(k,{kinds:j,type:"SpecTable",editing:t.editing,children:a(F,{...t})})}function F({num:t,title:r,description:i,showDiagram:o=!0,editing:n=!1,nodeId:d,omitHead:u=!1,template:p,showEuLabel:y=!1}){const e=E(),w=_(n&&!e),l=e?.product??w,c=l?.kind==="tyre"?l.source:null,m=e?.fieldUsage??N;if(c){const T=A(c,e?.selection.part?.id,e?.selection.shown.size),x=z({brand:c.brand,variant:T});return a(b,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:h(x.rows,m),diagram:null,editing:n,nodeId:d,omitHead:u,template:p,footer:y?a(I,{editing:n}):void 0})}const s=l?.kind==="alloy-wheel"?l.source:null,S=e?e.selection.shown.finish:s?.finishes[0]?.name,g=e&&s?D(s,e.selection.part)?.size??void 0:void 0,f=s?L(v(s),S,g):{rows:[],diagram:null};return a(b,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:h(f.rows,m),diagram:o?f.diagram:null,editing:n,nodeId:d,omitHead:u,template:p})}export{B as default,j as supportedKinds};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as p}from"react/jsx-runtime";import m from"../SectionBand.js";import b from"../SectionFootnote.js";import h from"efficient-web-builder/render/components/SectionHeader";import S from"../TyreCard.js";import{useCurrency as k}from"../CurrencyContext.js";import{renderGold as l,renderHeadline as N}from"efficient-web-builder/render/components/goldPhrases";import z from"./KindGate.js";import{useCurrentProduct as T}from"../../lib/document/current-product.js";import{TYRE_ILLUSTRATION_NOTE as w}from"../../lib/wheels/tyre-render.js";import{useSampleProduct as _}from"./useSampleProduct.js";import{say as v}from"efficient-web-builder/format/lib/editor-words";const u="border-b border-line py-[120px] max-view-desktop:py-20",f="border-b border-line pt-0 pb-[120px] max-view-desktop:pt-0 max-view-desktop:pb-20",E=[],A=["tyre"];function B(t){return r(z,{kinds:A,type:"TyreSizes",editing:t.editing,children:r(P,{...t})})}function P({num:t,title:s,description:o,editing:i=!1,omitHead:e=!1}){const n=T(),y=_(i&&!n),d=n?.product??y,c=d?.kind==="tyre"?d.source.variants:[],a=e?null:r(h,{num:t?l(t):void 0,title:N(s||"Available *sizes.*",!1),description:l(o||"Every size this tyre is made in, with its own price and stock."),accent:!0});if(c.length===0)return i?p(m,{className:e?f:u,children:[a,r("p",{className:"border-t border-line py-6 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg-dim",children:v("This product’s sizes appear here on a product page.")})]}):null;const x=c.some(g=>!g.image);return p(m,{className:e?f:u,children:[a,r(U,{variants:c,fieldUsage:n?.fieldUsage??E}),r(b,{text:x?w:""})]})}function U({variants:t,fieldUsage:s}){const{currency:o,formatPrice:i}=k();return r("div",{className:"grid grid-cols-3 gap-2 max-view-desktop:grid-cols-2 max-view-tablet:grid-cols-1",children:t.map(e=>r(S,{fieldUsage:s,size:e.size,specs:e.specs,prices:e.prices,image:e.image,inStock:e.inStock,currency:o,formatPrice:i},e.sku))})}export{B as default,A as supportedKinds};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import m from"./KindGate.js";import{TyreSizesContent as u}from"../TyreSizeGrid.js";import{useCurrentProduct as p}from"../../lib/document/current-product.js";import{NO_FIELD_ANSWERS as f}from"../../lib/content/field-usage.js";import{useSampleProduct as l}from"./useSampleProduct.js";const y=["tyre"];function S(t){return r(m,{kinds:y,type:"TyreSizes",editing:t.editing,children:r(x,{...t})})}function x({num:t,title:n,description:s,editing:i=!1,omitHead:d=!1}){const e=p(),a=l(i&&!e),o=e?.product??a,c=o?.kind==="tyre"?o.source.variants:[];return r(u,{variants:c,fieldUsage:e?.fieldUsage??f,num:t,title:n,description:s,editing:i,omitHead:d})}export{S as default,y as supportedKinds};
@@ -1,7 +1,9 @@
1
+ import { type TyreHead } from "./DynamicFitmentTable.js";
1
2
  import { type FitmentTableProps } from "../FitmentTable.js";
2
3
  interface Props extends Omit<FitmentTableProps, "rows"> {
3
4
  dynamic?: unknown;
4
5
  wheel?: unknown;
6
+ tyreHead?: TyreHead;
5
7
  }
6
- export default function FitmentTableBlock({ dynamic, wheel, omitHead, ...rest }: Props): import("react").JSX.Element;
8
+ export default function FitmentTableBlock({ dynamic, wheel, omitHead, tyreHead, ...rest }: Props): import("react").JSX.Element;
7
9
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as m}from"react/jsx-runtime";import e from"./DynamicFitmentTable.js";import a from"../FitmentTable.js";import{useCurrentProduct as f}from"../../lib/document/current-product.js";import{isEditorOnDynamicPage as s}from"efficient-web-builder/format/lib/document/editor-page-context";import{fitmentTableIsDynamic as c}from"../../lib/document/fitment-table-dynamic.js";import{getFitments as l}from"../../lib/wheels/fitments.js";function p({dynamic:r,wheel:t,omitHead:i=!1,...o}){const n=f()!==null||!!o.editing&&s();return c({dynamic:r,wheel:t},n)?m(e,{...o,omitHead:i}):m(a,{...o,omitHead:i,rows:l(typeof t=="string"?t:"")})}export{p as default};
1
+ "use client";import{jsx as m}from"react/jsx-runtime";import a from"./DynamicFitmentTable.js";import f from"../FitmentTable.js";import{useCurrentProduct as s}from"../../lib/document/current-product.js";import{isEditorOnDynamicPage as c}from"efficient-web-builder/format/lib/document/editor-page-context";import{fitmentTableIsDynamic as l}from"../../lib/document/fitment-table-dynamic.js";import{getFitments as p}from"../../lib/wheels/fitments.js";function u({dynamic:r,wheel:t,omitHead:i=!1,tyreHead:n,...o}){const e=s()!==null||!!o.editing&&c();return l({dynamic:r,wheel:t},e)?m(a,{...o,omitHead:i,tyreHead:n}):m(f,{...o,omitHead:i,rows:p(typeof t=="string"?t:"")})}export{u as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as p,Fragment as se}from"react/jsx-runtime";import{LISTING_CARD_SHOW as O}from"../../lib/sections/card-show-defaults.js";import{useScopeClass as Qe}from"../../lib/use-scope-class.js";import{useCallback as d,useEffect as Ze,useMemo as i,useRef as et,useState as tt}from"react";import{CARD_IMAGE_BG_OFF as ot,resolveCardImageBackground as rt}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as nt}from"efficient-web-builder/format/lib/content/card-image-shape";import{cardIndexCss as st,DEFAULT_CARD_INDEX_FORMAT as it,DEFAULT_CARD_OUTLINE as lt}from"efficient-web-builder/format/lib/sections/product-card-style";import{answersForKind as ie}from"../../lib/content/field-usage.js";import{useCurrency as at}from"../CurrencyContext.js";import ct from"../NoCurrencyNote.js";import{usePreviewDevice as pt}from"efficient-easel/screen/components/PreviewDeviceContext";import{renderGold as dt,renderHeadline as mt}from"efficient-web-builder/render/components/goldPhrases";import{useUnifiedProductCatalog as ht}from"../useProductCatalog.js";import{scrollBehavior as ut}from"efficient-web-builder/render/components/useReducedMotion";import{normalizePlpColumns as ft,PLP_GRID_GAP_VAR as gt,plpGridVars as yt}from"../../lib/wheels/plp-grid.js";import{plpCardImageSizes as St}from"../../lib/sections/card-image-sizes.js";import{CARD_ROWS_GRID_CLASS as xt,cardRowsGridStyle as wt}from"../WheelCardFrame.js";import{applyPlpFilters as bt,buildPlpFacets as Ct,buildPlpTypeOptions as Pt,buildTyreSizeBoxes as kt,EMPTY_PLP_FILTERS as le,hasActivePlpFilters as vt,paginatePlp as Nt,pickTyreSize as Tt,plpTyreSizeBoxesShown as _t,plpInStockCount as At,plpOpeningSort as zt,plpPriceBounds as Ft,plpShownKinds as Bt,plpSortKeysFor as It,PLP_SORT_LABELS as Ot}from"../../lib/wheels/plp-filters.js";import{itemKind as z,itemSlug as R,itemTyreSizes as Rt,plpBrandVaries as Lt,plpProcessVaries as Vt,plpItemsOfKinds as Et,plpKindNoun as L,resolvePlpKinds as Dt}from"../../lib/catalog/plp-item.js";import{plpGateWords as Gt,plpVehicleCopy as Kt}from"../../lib/catalog/plp-vehicle-copy.js";import{oemBadgeSize as jt,oemTyreSizes as Mt}from"../../lib/tyres/tyre-vehicle-fitment.js";import $t from"../TyreSummaryCard.js";import{wheelsFittingVehicle as Wt}from"../../lib/wheels/plp-fitment-match.js";import Ut from"./PlpActiveChips.js";import{DEFAULT_COVER_INDEX as Ht}from"../../lib/wheels/cover-rendering.js";import Xt from"./PlpCard.js";import Yt from"./PlpPagination.js";import qt from"./PlpSidebar.js";import{PlpResultRange as Jt,PlpToolbar as Qt}from"./PlpToolbar.js";import Zt from"../catalog/SortSelect.js";import eo from"./PlpVehicleBar.js";import to from"./PlpVehicleGate.js";import{useVehicleCatalog as oo}from"./useVehicleCatalog.js";import{useVehicleFit as ro}from"../fitment/useVehicleFit.js";import{usePlpFiltersInUrl as no}from"./usePlpFiltersInUrl.js";import{say as V}from"efficient-web-builder/format/lib/editor-words";const Wo={heading:"Let's find wheels that fit your car.",intro:"Tell us what you drive and we'll show you every set that bolts straight on — bolt pattern, offset and hub bore checked for you."};function so({level:C,className:P,children:k}){return r(C===2?"h2":"h1",{className:P,children:k})}const io=[];function lo({heading:C="",intro:P="",askForCar:k=!0,gateHeading:E="",gateIntro:ae="",perPage:D=24,columns:ce,defaultSort:pe="recommended",hiddenFacets:de=[],fieldUsage:f=io,showPrice:G=!0,showInStock:me=!0,kinds:he,products:ue,wheels:fe,requestQuery:ge,editing:m=!1,coverIndex:ye=Ht,cardImage:Se,hover:xe,imageBackground:we,showBadge:be=!0,showCardSizes:Ce,showCardBuy:Pe,showCardPage:ke,showCardPrice:ve,showCardFinishes:Ne,outline:Te=lt,indexBadge:K=it,titleLevel:_e}){const{currency:l}=at(),Ae=rt(we,ot),h=Dt(he),j=pt(),M=ft(ce),ze=yt(M,m?j:null),Fe=St(M,m?j:null),$=Qe("plp"),F=st($,K),Be=ht(),W=ue??fe??Be??[],U=i(()=>Et(W,h),[W,h.join(",")]),o=ro({editing:m,enabled:k,autoApply:!0}),[Ie,B]=tt(!1),Oe=zt(pe,h),g=o.applied?.vehicle??null,[e,x]=no({editing:m,openingSort:Oe,appliedVehicle:g,vehicleRestored:o.restored,requestQuery:ge}),c=Bt(h,e.kind),s=d(t=>x(t),[x]),H=d((t,u)=>{const a=e[t],qe=a.map(String).includes(u)?a.filter(Je=>String(Je)!==u):[...a,t==="diameters"?Number(u):u];s({...e,[t]:qe,page:1})},[e,s]),X=d(t=>s({...e,priceMax:t,page:1}),[e,s]),Y=d(t=>s({...e,inStockOnly:t,page:1}),[e,s]),q=d(t=>s({...le,kind:t,inStockOnly:e.inStockOnly,priceMax:e.priceMax,sort:e.sort}),[e.inStockOnly,e.priceMax,e.sort,s]),Re=d(t=>s({...e,sort:t,page:1}),[e,s]),Le=d(t=>{s({...e,page:t}),typeof window<"u"&&window.scrollTo({top:0,behavior:ut()})},[e,s]),J=d(()=>s({...le,sort:e.sort}),[e.sort,s]),{clear:N}=o,Q=d(()=>{N(),B(!0),x(t=>({...t,page:1}))},[N]),Ve=d(()=>{N(),B(!1),x(t=>({...t,page:1}))},[N]),T=g?[g.make,g.model,g.year,g.modification].join("|"):"",_=et(null);Ze(()=>{if(o.restored){if(_.current===null){_.current=T;return}_.current!==T&&(_.current=T,x(t=>t.page===1?t:{...t,page:1}))}},[o.restored,T,x]);const A=oo({catalog:U,shownKinds:h,vehicle:g,editing:m}),n=i(()=>{if(!o.fit)return A;const t=A.filter(a=>z(a)==="alloy-wheel"),u=new Set(Wt(t,o.fit).map(a=>a.slug));return A.filter(a=>z(a)!=="alloy-wheel"||u.has(R(a)))},[A,o.fit]),w=de.join(","),Ee=i(()=>{const t=new Set(w?w.split(","):[]);return Ct(n,e,l,c,f).filter(u=>!t.has(u.key))},[n,e,l,w,c.join(","),f]),y=i(()=>bt(n,e,l),[n,e,l]),Z=c.length>1,De=i(()=>ie(f,"alloy-wheel"),[f]),Ge=i(()=>ie(f,"tyre"),[f]),ee=i(()=>Lt(y),[y]),Ke=i(()=>Vt(y),[y]),je=i(()=>G?Ft(n,l):null,[n,l,G]),Me=i(()=>At(n,e,l),[n,e,l]),$e=i(()=>Pt(n,h,e,l),[n,h.join(","),e,l]),We=d((t,u)=>{const a=Tt(n.flatMap(Rt),e.tyreSizes[0]??"",t,u);s({...e,tyreSizes:a?[a]:[],page:1})},[n,e,s]),Ue=i(()=>{const t=new Set(w?w.split(","):[]);return!_t(n,c)||t.has("tyreSizes")?null:kt(n,e,l)},[n,e,l,w,c.join(","),f]),S=i(()=>Nt(y,e.page,D),[y,e.page,D]),b=L(c),I=Kt(c),te=Gt(E,ae,c,h),oe=c.length===1&&c[0]==="tyre",re=o.applied?.stock??null,v=i(()=>Mt(re),[re]),He=i(()=>n.filter(t=>c.includes(z(t))).length,[n,c.join(",")]),ne=U.length===0,Xe=!ne&&n.length===0,Ye=k&&!m&&!o.applied&&!Ie;return h.length===0?null:p("section",{style:nt(Se),children:[k&&r(eo,{cascade:o.cascade,appliedName:o.appliedName,fit:o.fit,fitSummary:oe&&v.length>0?`Takes ${v.join(" · ")}`:null,resolving:o.resolving,unresolved:oe?!!o.applied&&!o.resolving&&v.length===0:o.unresolved,matchCount:He,copy:I,onAmend:Ve,onClear:Q}),Ye&&r(to,{cascade:o.cascade,heading:te.heading,intro:te.intro,ready:o.restored,copy:I,onSkip:()=>B(!0)}),p("div",{className:"px-5 py-10 md:px-[max(2.5rem,calc((100%_-_var(--sf-content-cap,100%))/2_+_2.5rem))]",children:[(C||P)&&p("header",{className:"mb-6",children:[C&&r(so,{level:_e,className:"font-display text-[clamp(28px,4vw,40px)] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[1.05] tracking-[-0.02em]",children:mt(C,!1)}),P&&r("p",{className:"mt-2 max-w-[60ch] text-[15px] text-fg-dim",children:dt(P)})]}),p("div",{className:"flex flex-col gap-8 lg:flex-row lg:items-start",children:[r(qt,{facets:Ee,filters:e,typeOptions:$e,sizeBoxes:Ue,sizeMatches:e.tyreSizes.length>0?y.length:null,noun:b,priceBounds:je,inStockCount:me?Me:null,onToggle:H,onPickType:q,onPickSize:We,onPriceMax:X,onInStockOnly:Y,onClearAll:J}),p("div",{className:"min-w-0 flex-1",children:[r(Qt,{className:"mb-4",start:p(se,{children:[r(Jt,{total:S.total,range:{from:S.from,to:S.to},noun:b}),r(Ut,{filters:e,onToggle:H,onPriceMax:X,onInStockOnly:Y,onPickType:q})]}),end:r(Zt,{value:e.sort,keys:It(h),labels:Ot,onChange:Re})}),ne?r("div",{className:"border border-dashed border-line p-10",children:r("p",{className:"font-mono text-[12px] uppercase tracking-[0.16em] text-fg-dim",children:m?b.many==="wheels"?V("No wheels in this website's catalog yet — curate products to see them here."):b.many==="tyres"?V("No tyres in this website's catalog yet — curate products to see them here."):V("No products in this website's catalog yet — curate products to see them here."):"Our catalog is being updated. Please check back shortly."})}):Xe?p("div",{className:"border border-line p-10",children:[p("h3",{className:"font-display text-[22px] font-medium uppercase tracking-[-0.01em]",children:["No confirmed fit for your ",o.appliedName]}),r("p",{className:"mt-2 max-w-[52ch] text-[14px] text-fg-dim",children:I.nothingFits}),p("button",{type:"button",onClick:Q,className:"mt-4 cursor-pointer bg-btn px-4 py-3 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-btn-ink hover:bg-fg",children:["Show all ",b.many]})]}):S.total===0?p("div",{className:"border border-line p-10",children:[p("h3",{className:"font-display text-[22px] font-medium uppercase tracking-[-0.01em]",children:["No ",b.many," match those filters"]}),r("p",{className:"mt-2 max-w-[46ch] text-[14px] text-fg-dim",children:"Try widening the price range or clearing a filter."}),vt(e)&&r("button",{type:"button",onClick:J,className:"mt-4 cursor-pointer bg-btn px-4 py-3 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-btn-ink hover:bg-fg",children:"Clear all filters"})]}):p(se,{children:[F&&r("style",{children:F}),r("div",{className:`${F?`${$} plp-card-grid`:"plp-card-grid"} ${xt}`,style:{...ze,...wt(`var(${gt})`)},children:S.items.map(t=>z(t)==="tyre"?r($t,{item:t,currency:l,fitSize:v.length>0?jt(t.sizes,v):null,kindLabel:Z?L(["tyre"]).one:null,showBrand:ee,editing:m,fieldUsage:Ge},`tyre:${R(t)}`):r(Xt,{wheel:t,colours:e.finishes,fit:o.fit,editing:m,kindLabel:Z?L(["alloy-wheel"]).one:null,showBrand:ee,coverIndex:ye,fieldUsage:De,showProcess:Ke,hover:xe,imageBackgroundFill:Ae,showBadge:be,outline:Te,indexBadge:K,showCardSizes:Ce??O.showCardSizes,showCardBuy:Pe??O.showCardBuy,showCardPage:ke??O.showCardPage,showCardPrice:ve??!0,showCardFinishes:Ne??!0,imageSizes:Fe},`wheel:${R(t)}`))})]}),r(Yt,{page:S.page,pageCount:S.pageCount,onPage:Le}),r(ct,{editing:m})]})]})]})]})}export{Wo as PLP_GATE_DEFAULTS,lo as default};
1
+ "use client";import{jsx as r,jsxs as p,Fragment as se}from"react/jsx-runtime";import{LISTING_CARD_SHOW as O}from"../../lib/sections/card-show-defaults.js";import{useScopeClass as Qe}from"../../lib/use-scope-class.js";import{useCallback as d,useEffect as Ze,useMemo as i,useRef as et,useState as tt}from"react";import{CARD_IMAGE_BG_OFF as ot,resolveCardImageBackground as rt}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as nt}from"efficient-web-builder/format/lib/content/card-image-shape";import{cardIndexCss as st,DEFAULT_CARD_INDEX_FORMAT as it,DEFAULT_CARD_OUTLINE as lt}from"efficient-web-builder/format/lib/sections/product-card-style";import{NO_FIELD_ANSWERS as at,answersForKind as ie}from"../../lib/content/field-usage.js";import{useCurrency as ct}from"../CurrencyContext.js";import pt from"../NoCurrencyNote.js";import{usePreviewDevice as dt}from"efficient-easel/screen/components/PreviewDeviceContext";import{renderGold as mt,renderHeadline as ht}from"efficient-web-builder/render/components/goldPhrases";import{useUnifiedProductCatalog as ut}from"../useProductCatalog.js";import{scrollBehavior as ft}from"efficient-web-builder/render/components/useReducedMotion";import{normalizePlpColumns as gt,PLP_GRID_GAP_VAR as yt,plpGridVars as St}from"../../lib/wheels/plp-grid.js";import{plpCardImageSizes as xt}from"../../lib/sections/card-image-sizes.js";import{CARD_ROWS_GRID_CLASS as wt,cardRowsGridStyle as bt}from"../WheelCardFrame.js";import{applyPlpFilters as Ct,buildPlpFacets as Pt,buildPlpTypeOptions as kt,buildTyreSizeBoxes as vt,EMPTY_PLP_FILTERS as le,hasActivePlpFilters as Nt,paginatePlp as _t,pickTyreSize as Tt,plpTyreSizeBoxesShown as At,plpInStockCount as zt,plpOpeningSort as Ft,plpPriceBounds as It,plpShownKinds as Bt,plpSortKeysFor as Ot,PLP_SORT_LABELS as Lt}from"../../lib/wheels/plp-filters.js";import{itemKind as z,itemSlug as L,itemTyreSizes as Rt,plpBrandVaries as Vt,plpProcessVaries as Et,plpItemsOfKinds as Dt,plpKindNoun as R,resolvePlpKinds as Gt}from"../../lib/catalog/plp-item.js";import{plpGateWords as Kt,plpVehicleCopy as jt}from"../../lib/catalog/plp-vehicle-copy.js";import{oemBadgeSize as Mt,oemTyreSizes as $t}from"../../lib/tyres/tyre-vehicle-fitment.js";import Wt from"../TyreSummaryCard.js";import{wheelsFittingVehicle as Ut}from"../../lib/wheels/plp-fitment-match.js";import Ht from"./PlpActiveChips.js";import{DEFAULT_COVER_INDEX as Xt}from"../../lib/wheels/cover-rendering.js";import Yt from"./PlpCard.js";import qt from"./PlpPagination.js";import Jt from"./PlpSidebar.js";import{PlpResultRange as Qt,PlpToolbar as Zt}from"./PlpToolbar.js";import eo from"../catalog/SortSelect.js";import to from"./PlpVehicleBar.js";import oo from"./PlpVehicleGate.js";import{useVehicleCatalog as ro}from"./useVehicleCatalog.js";import{useVehicleFit as no}from"../fitment/useVehicleFit.js";import{usePlpFiltersInUrl as so}from"./usePlpFiltersInUrl.js";import{say as V}from"efficient-web-builder/format/lib/editor-words";const Wo={heading:"Let's find wheels that fit your car.",intro:"Tell us what you drive and we'll show you every set that bolts straight on — bolt pattern, offset and hub bore checked for you."};function io({level:C,className:P,children:k}){return r(C===2?"h2":"h1",{className:P,children:k})}function lo({heading:C="",intro:P="",askForCar:k=!0,gateHeading:E="",gateIntro:ae="",perPage:D=24,columns:ce,defaultSort:pe="recommended",hiddenFacets:de=[],fieldUsage:f=at,showPrice:G=!0,showInStock:me=!0,kinds:he,products:ue,wheels:fe,requestQuery:ge,editing:m=!1,coverIndex:ye=Xt,cardImage:Se,hover:xe,imageBackground:we,showBadge:be=!0,showCardSizes:Ce,showCardBuy:Pe,showCardPage:ke,showCardPrice:ve,showCardFinishes:Ne,outline:_e=lt,indexBadge:K=it,titleLevel:Te}){const{currency:l}=ct(),Ae=rt(we,ot),h=Gt(he),j=dt(),M=gt(ce),ze=St(M,m?j:null),Fe=xt(M,m?j:null),$=Qe("plp"),F=st($,K),Ie=ut(),W=ue??fe??Ie??[],U=i(()=>Dt(W,h),[W,h.join(",")]),o=no({editing:m,enabled:k,autoApply:!0}),[Be,I]=tt(!1),Oe=Ft(pe,h),g=o.applied?.vehicle??null,[e,x]=so({editing:m,openingSort:Oe,appliedVehicle:g,vehicleRestored:o.restored,requestQuery:ge}),c=Bt(h,e.kind),s=d(t=>x(t),[x]),H=d((t,u)=>{const a=e[t],qe=a.map(String).includes(u)?a.filter(Je=>String(Je)!==u):[...a,t==="diameters"?Number(u):u];s({...e,[t]:qe,page:1})},[e,s]),X=d(t=>s({...e,priceMax:t,page:1}),[e,s]),Y=d(t=>s({...e,inStockOnly:t,page:1}),[e,s]),q=d(t=>s({...le,kind:t,inStockOnly:e.inStockOnly,priceMax:e.priceMax,sort:e.sort}),[e.inStockOnly,e.priceMax,e.sort,s]),Le=d(t=>s({...e,sort:t,page:1}),[e,s]),Re=d(t=>{s({...e,page:t}),typeof window<"u"&&window.scrollTo({top:0,behavior:ft()})},[e,s]),J=d(()=>s({...le,sort:e.sort}),[e.sort,s]),{clear:N}=o,Q=d(()=>{N(),I(!0),x(t=>({...t,page:1}))},[N]),Ve=d(()=>{N(),I(!1),x(t=>({...t,page:1}))},[N]),_=g?[g.make,g.model,g.year,g.modification].join("|"):"",T=et(null);Ze(()=>{if(o.restored){if(T.current===null){T.current=_;return}T.current!==_&&(T.current=_,x(t=>t.page===1?t:{...t,page:1}))}},[o.restored,_,x]);const A=ro({catalog:U,shownKinds:h,vehicle:g,editing:m}),n=i(()=>{if(!o.fit)return A;const t=A.filter(a=>z(a)==="alloy-wheel"),u=new Set(Ut(t,o.fit).map(a=>a.slug));return A.filter(a=>z(a)!=="alloy-wheel"||u.has(L(a)))},[A,o.fit]),w=de.join(","),Ee=i(()=>{const t=new Set(w?w.split(","):[]);return Pt(n,e,l,c,f).filter(u=>!t.has(u.key))},[n,e,l,w,c.join(","),f]),y=i(()=>Ct(n,e,l),[n,e,l]),Z=c.length>1,De=i(()=>ie(f,"alloy-wheel"),[f]),Ge=i(()=>ie(f,"tyre"),[f]),ee=i(()=>Vt(y),[y]),Ke=i(()=>Et(y),[y]),je=i(()=>G?It(n,l):null,[n,l,G]),Me=i(()=>zt(n,e,l),[n,e,l]),$e=i(()=>kt(n,h,e,l),[n,h.join(","),e,l]),We=d((t,u)=>{const a=Tt(n.flatMap(Rt),e.tyreSizes[0]??"",t,u);s({...e,tyreSizes:a?[a]:[],page:1})},[n,e,s]),Ue=i(()=>{const t=new Set(w?w.split(","):[]);return!At(n,c)||t.has("tyreSizes")?null:vt(n,e,l)},[n,e,l,w,c.join(","),f]),S=i(()=>_t(y,e.page,D),[y,e.page,D]),b=R(c),B=jt(c),te=Kt(E,ae,c,h),oe=c.length===1&&c[0]==="tyre",re=o.applied?.stock??null,v=i(()=>$t(re),[re]),He=i(()=>n.filter(t=>c.includes(z(t))).length,[n,c.join(",")]),ne=U.length===0,Xe=!ne&&n.length===0,Ye=k&&!m&&!o.applied&&!Be;return h.length===0?null:p("section",{style:nt(Se),children:[k&&r(to,{cascade:o.cascade,appliedName:o.appliedName,fit:o.fit,fitSummary:oe&&v.length>0?`Takes ${v.join(" · ")}`:null,resolving:o.resolving,unresolved:oe?!!o.applied&&!o.resolving&&v.length===0:o.unresolved,matchCount:He,copy:B,onAmend:Ve,onClear:Q}),Ye&&r(oo,{cascade:o.cascade,heading:te.heading,intro:te.intro,ready:o.restored,copy:B,onSkip:()=>I(!0)}),p("div",{className:"px-5 py-10 md:px-[max(2.5rem,calc((100%_-_var(--sf-content-cap,100%))/2_+_2.5rem))]",children:[(C||P)&&p("header",{className:"mb-6",children:[C&&r(io,{level:Te,className:"font-display text-[clamp(28px,4vw,40px)] [font-weight:var(--sf-heading-weight,500)] [text-transform:var(--sf-heading-case,uppercase)] leading-[1.05] tracking-[-0.02em]",children:ht(C,!1)}),P&&r("p",{className:"mt-2 max-w-[60ch] text-[15px] text-fg-dim",children:mt(P)})]}),p("div",{className:"flex flex-col gap-8 lg:flex-row lg:items-start",children:[r(Jt,{facets:Ee,filters:e,typeOptions:$e,sizeBoxes:Ue,sizeMatches:e.tyreSizes.length>0?y.length:null,noun:b,priceBounds:je,inStockCount:me?Me:null,onToggle:H,onPickType:q,onPickSize:We,onPriceMax:X,onInStockOnly:Y,onClearAll:J}),p("div",{className:"min-w-0 flex-1",children:[r(Zt,{className:"mb-4",start:p(se,{children:[r(Qt,{total:S.total,range:{from:S.from,to:S.to},noun:b}),r(Ht,{filters:e,onToggle:H,onPriceMax:X,onInStockOnly:Y,onPickType:q})]}),end:r(eo,{value:e.sort,keys:Ot(h),labels:Lt,onChange:Le})}),ne?r("div",{className:"border border-dashed border-line p-10",children:r("p",{className:"font-mono text-[12px] uppercase tracking-[0.16em] text-fg-dim",children:m?b.many==="wheels"?V("No wheels in this website's catalog yet — curate products to see them here."):b.many==="tyres"?V("No tyres in this website's catalog yet — curate products to see them here."):V("No products in this website's catalog yet — curate products to see them here."):"Our catalog is being updated. Please check back shortly."})}):Xe?p("div",{className:"border border-line p-10",children:[p("h3",{className:"font-display text-[22px] font-medium uppercase tracking-[-0.01em]",children:["No confirmed fit for your ",o.appliedName]}),r("p",{className:"mt-2 max-w-[52ch] text-[14px] text-fg-dim",children:B.nothingFits}),p("button",{type:"button",onClick:Q,className:"mt-4 cursor-pointer bg-btn px-4 py-3 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-btn-ink hover:bg-fg",children:["Show all ",b.many]})]}):S.total===0?p("div",{className:"border border-line p-10",children:[p("h3",{className:"font-display text-[22px] font-medium uppercase tracking-[-0.01em]",children:["No ",b.many," match those filters"]}),r("p",{className:"mt-2 max-w-[46ch] text-[14px] text-fg-dim",children:"Try widening the price range or clearing a filter."}),Nt(e)&&r("button",{type:"button",onClick:J,className:"mt-4 cursor-pointer bg-btn px-4 py-3 font-mono text-[11px] font-bold uppercase tracking-[0.24em] text-btn-ink hover:bg-fg",children:"Clear all filters"})]}):p(se,{children:[F&&r("style",{children:F}),r("div",{className:`${F?`${$} plp-card-grid`:"plp-card-grid"} ${wt}`,style:{...ze,...bt(`var(${yt})`)},children:S.items.map(t=>z(t)==="tyre"?r(Wt,{item:t,currency:l,fitSize:v.length>0?Mt(t.sizes,v):null,kindLabel:Z?R(["tyre"]).one:null,showBrand:ee,editing:m,fieldUsage:Ge},`tyre:${L(t)}`):r(Yt,{wheel:t,colours:e.finishes,fit:o.fit,editing:m,kindLabel:Z?R(["alloy-wheel"]).one:null,showBrand:ee,coverIndex:ye,fieldUsage:De,showProcess:Ke,hover:xe,imageBackgroundFill:Ae,showBadge:be,outline:_e,indexBadge:K,showCardSizes:Ce??O.showCardSizes,showCardBuy:Pe??O.showCardBuy,showCardPage:ke??O.showCardPage,showCardPrice:ve??!0,showCardFinishes:Ne??!0,imageSizes:Fe},`wheel:${L(t)}`))})]}),r(qt,{page:S.page,pageCount:S.pageCount,onPage:Re}),r(pt,{editing:m})]})]})]})]})}export{Wo as PLP_GATE_DEFAULTS,lo as default};
@@ -1,7 +1,7 @@
1
1
  import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
2
2
  import type { WheelSummary } from "../../lib/api/index.js";
3
3
  import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
4
- import type { FieldUsageAnswer } from "../../lib/content/field-usage.js";
4
+ import { type FieldUsageAnswer } from "../../lib/content/field-usage.js";
5
5
  import { type VehicleFitment } from "../../lib/wheels/plp-fitment-match.js";
6
6
  export interface PlpCardProps {
7
7
  wheel: WheelSummary;
@@ -1 +1 @@
1
- "use client";import{jsx as r,Fragment as T,jsxs as G}from"react/jsx-runtime";import{CARD_IMAGE_SIZES as M}from"../../lib/sections/card-image-sizes.js";import{LISTING_CARD_SHOW as B}from"../../lib/sections/card-show-defaults.js";import U from"next/image";import{useHeldCardPicture as X}from"../card-pieces/useHeldCardPicture.js";import{useState as H}from"react";import V from"../BrandPlate.js";import Z,{CardBuyDialog as q}from"../card-pieces/CardBuyButton.js";import J from"../card-pieces/CardFinishSwatches.js";import K from"../card-pieces/CardPrice.js";import Q from"../card-pieces/CardProductBadge.js";import{useWheelCardState as Y,WheelCardStateProvider as ee}from"../card-pieces/ProductCardState.js";import{wheelCardEyebrow as re,wheelCardEyebrowShows as oe}from"../ProductCardEyebrow.js";import{withRMark as k}from"efficient-web-builder/render/components/RMark";import ae from"../WheelPlaceholder.js";import{cardSpinOf as se}from"../card-spin.js";import{cardHoverOf as te}from"efficient-web-builder/format/lib/animation/hover";import{CardSpecFacts as ne}from"../card-pieces/CardSpecs.js";import ie from"../WheelCardFrame.js";import{CARD_IMAGE_BG_OFF as le}from"efficient-web-builder/format/lib/content/card-image-background";import{itemBrand as de}from"../../lib/catalog/plp-item.js";import{CARD_INDEX_BADGE_CLASS as me,CARD_INDEX_CLASS as ce,DEFAULT_CARD_INDEX_FORMAT as he,DEFAULT_CARD_OUTLINE as pe}from"efficient-web-builder/format/lib/sections/product-card-style";import{setSecondSrc as ue}from"../../lib/wheels/set-mode.js";import{PLP_GRID_GAP_VAR as fe}from"../../lib/wheels/plp-grid.js";import{FITMENT_FIELD_SEPARATOR as we}from"../../lib/wheels/plp-fitment-match.js";import{coverSrcForWheel as Se,DEFAULT_COVER_INDEX as Ce,resolvePaintedSrc as ge}from"../../lib/wheels/cover-rendering.js";const _e=[],Ee=te({},"AlloyWheelsListing");function Ae({wheel:i,colours:p,fit:l=null,editing:d=!1,brandPlate:m=!1,kindLabel:u=null,showBrand:t=!0,showProcess:f=!1,coverIndex:w=Ce,fieldUsage:S=_e,hover:C=Ee,imageBackgroundFill:g=le,showBadge:_=!0,outline:E=pe,indexBadge:A=he,showCardSizes:F=B.showCardSizes,showCardBuy:b=B.showCardBuy,showCardPage:c=B.showCardPage,showCardPrice:o=!0,showCardFinishes:e=!0,imageSizes:h=M}){return r(ee,{wheel:i,colours:p,editing:d,children:r(Fe,{fit:l,brandPlate:m,kindLabel:u,showBrand:t,showProcess:f,coverIndex:w,fieldUsage:S,hover:C,imageBackgroundFill:g,showBadge:_,outline:E,indexBadge:A,showCardSizes:F,showCardBuy:b,showCardPage:c,showCardPrice:o,showCardFinishes:e,imageSizes:h})})}function Fe({fit:i,brandPlate:p,kindLabel:l,showBrand:d,showProcess:m,coverIndex:u,fieldUsage:t,hover:f,imageBackgroundFill:w,showBadge:S,outline:C,indexBadge:g,showCardSizes:_,showCardBuy:E,showCardPage:A,showCardPrice:F,showCardFinishes:b,imageSizes:c}){const{wheel:o,sel:e,isSet:h}=Y(),x=Se(o,u,e.finish?.name,e.shownSrc,i?.holes),[D,O]=H(()=>new Set),y=a=>{e.pictureFailed(a),O(n=>n.has(a)?n:new Set(n).add(a))},R=ge({overrideSrc:x,hookSrc:e.shownSrc,failed:D}),P=de(o),I=se(f),L=(a,n)=>r(U,{alt:n,src:a,width:800,height:800,sizes:c,className:["block h-full w-full object-contain",I.className].filter(Boolean).join(" "),style:I.style,draggable:!1,onError:()=>y(a)},a),W=e.finish?`${o.name} — ${e.finish.name}`:o.name,v=h?ue(o.finishes?.find(a=>a.name===e.finish?.name),R):null,s=X({src:R,second:v,alt:W,sizes:c,failed:D,onFailed:y,near:e.nearScreen,holdEmpty:e.awaitingProbe}),$=G(T,{children:[s.src?L(s.src,s.alt):r(ae,{imageLabel:o.name,spin:I}),s.trial]}),j=s.second?L(s.second,`${s.alt} — right`):void 0,N=g!=="off"?r("span",{"aria-hidden":!0,className:`${ce} ${me}`}):null,z=re({kindLabel:l,brand:d&&P?k(P):null,process:m&&o.process?k(o.process):null},t);return G(T,{children:[r(ie,{href:`/wheels/${o.slug}`,wide:h,setGridGap:`var(${fe})`,identityLink:!0,containerProps:{onPointerEnter:e.arm,onTouchStart:e.arm,onFocusCapture:e.arm},probes:e.probes,outline:C,imageBackgroundFill:w,indexBadge:N,badges:r(Q,{show:S,numbered:N!=null,sale:!0}),image:$,imageSecond:j,plate:p?r(V,{brand:P,logo:o.brandLogo}):null,eyebrow:z,wholeCardLink:!0,reserveEyebrow:oe({kind:!!l,brand:d,process:m},t),spec:r(ne,{sizes:_,fieldUsage:t,car:i,separator:we}),price:r(K,{show:F,setTotal:!0,wasFollowsSize:!0}),swatches:r(J,{show:b,showSingle:!0}),buy:r(Z,{buy:E,page:A})}),r(q,{})]})}export{Ae as default};
1
+ "use client";import{jsx as r,Fragment as T,jsxs as G}from"react/jsx-runtime";import{CARD_IMAGE_SIZES as M}from"../../lib/sections/card-image-sizes.js";import{LISTING_CARD_SHOW as D}from"../../lib/sections/card-show-defaults.js";import U from"next/image";import{useHeldCardPicture as X}from"../card-pieces/useHeldCardPicture.js";import{useState as H}from"react";import V from"../BrandPlate.js";import Z,{CardBuyDialog as q}from"../card-pieces/CardBuyButton.js";import J from"../card-pieces/CardFinishSwatches.js";import K from"../card-pieces/CardPrice.js";import Q from"../card-pieces/CardProductBadge.js";import{useWheelCardState as Y,WheelCardStateProvider as ee}from"../card-pieces/ProductCardState.js";import{wheelCardEyebrow as re,wheelCardEyebrowShows as oe}from"../ProductCardEyebrow.js";import{withRMark as k}from"efficient-web-builder/render/components/RMark";import ae from"../WheelPlaceholder.js";import{cardSpinOf as te}from"../card-spin.js";import{cardHoverOf as se}from"efficient-web-builder/format/lib/animation/hover";import{CardSpecFacts as ie}from"../card-pieces/CardSpecs.js";import ne from"../WheelCardFrame.js";import{CARD_IMAGE_BG_OFF as le}from"efficient-web-builder/format/lib/content/card-image-background";import{itemBrand as de}from"../../lib/catalog/plp-item.js";import{CARD_INDEX_BADGE_CLASS as me,CARD_INDEX_CLASS as ce,DEFAULT_CARD_INDEX_FORMAT as he,DEFAULT_CARD_OUTLINE as pe}from"efficient-web-builder/format/lib/sections/product-card-style";import{NO_FIELD_ANSWERS as fe}from"../../lib/content/field-usage.js";import{setSecondSrc as ue}from"../../lib/wheels/set-mode.js";import{PLP_GRID_GAP_VAR as we}from"../../lib/wheels/plp-grid.js";import{FITMENT_FIELD_SEPARATOR as Se}from"../../lib/wheels/plp-fitment-match.js";import{coverSrcForWheel as Ce,DEFAULT_COVER_INDEX as ge,resolvePaintedSrc as _e}from"../../lib/wheels/cover-rendering.js";const Ee=se({},"AlloyWheelsListing");function Fe({wheel:n,colours:p,fit:l=null,editing:d=!1,brandPlate:m=!1,kindLabel:f=null,showBrand:s=!0,showProcess:u=!1,coverIndex:w=ge,fieldUsage:S=fe,hover:C=Ee,imageBackgroundFill:g=le,showBadge:_=!0,outline:E=pe,indexBadge:F=he,showCardSizes:A=D.showCardSizes,showCardBuy:b=D.showCardBuy,showCardPage:c=D.showCardPage,showCardPrice:o=!0,showCardFinishes:e=!0,imageSizes:h=M}){return r(ee,{wheel:n,colours:p,editing:d,children:r(Ae,{fit:l,brandPlate:m,kindLabel:f,showBrand:s,showProcess:u,coverIndex:w,fieldUsage:S,hover:C,imageBackgroundFill:g,showBadge:_,outline:E,indexBadge:F,showCardSizes:A,showCardBuy:b,showCardPage:c,showCardPrice:o,showCardFinishes:e,imageSizes:h})})}function Ae({fit:n,brandPlate:p,kindLabel:l,showBrand:d,showProcess:m,coverIndex:f,fieldUsage:s,hover:u,imageBackgroundFill:w,showBadge:S,outline:C,indexBadge:g,showCardSizes:_,showCardBuy:E,showCardPage:F,showCardPrice:A,showCardFinishes:b,imageSizes:c}){const{wheel:o,sel:e,isSet:h}=Y(),x=Ce(o,f,e.finish?.name,e.shownSrc,n?.holes),[B,O]=H(()=>new Set),y=a=>{e.pictureFailed(a),O(i=>i.has(a)?i:new Set(i).add(a))},L=_e({overrideSrc:x,hookSrc:e.shownSrc,failed:B}),I=de(o),P=te(u),R=(a,i)=>r(U,{alt:i,src:a,width:800,height:800,sizes:c,className:["block h-full w-full object-contain",P.className].filter(Boolean).join(" "),style:P.style,draggable:!1,onError:()=>y(a)},a),W=e.finish?`${o.name} — ${e.finish.name}`:o.name,v=h?ue(o.finishes?.find(a=>a.name===e.finish?.name),L):null,t=X({src:L,second:v,alt:W,sizes:c,failed:B,onFailed:y,near:e.nearScreen,holdEmpty:e.awaitingProbe}),$=G(T,{children:[t.src?R(t.src,t.alt):r(ae,{imageLabel:o.name,spin:P}),t.trial]}),j=t.second?R(t.second,`${t.alt} — right`):void 0,N=g!=="off"?r("span",{"aria-hidden":!0,className:`${ce} ${me}`}):null,z=re({kindLabel:l,brand:d&&I?k(I):null,process:m&&o.process?k(o.process):null},s);return G(T,{children:[r(ne,{href:`/wheels/${o.slug}`,wide:h,setGridGap:`var(${we})`,identityLink:!0,containerProps:{onPointerEnter:e.arm,onTouchStart:e.arm,onFocusCapture:e.arm},probes:e.probes,outline:C,imageBackgroundFill:w,indexBadge:N,badges:r(Q,{show:S,numbered:N!=null,sale:!0}),image:$,imageSecond:j,plate:p?r(V,{brand:I,logo:o.brandLogo}):null,eyebrow:z,wholeCardLink:!0,reserveEyebrow:oe({kind:!!l,brand:d,process:m},s),spec:r(ie,{sizes:_,fieldUsage:s,car:n,separator:Se}),price:r(K,{show:A,setTotal:!0,wasFollowsSize:!0}),swatches:r(J,{show:b,showSingle:!0}),buy:r(Z,{buy:E,page:F})}),r(q,{})]})}export{Fe as default};
@@ -0,0 +1,9 @@
1
+ import { type SeededNode } from "efficient-web-builder/format/lib/document/seed-parts";
2
+ type Props = Record<string, unknown>;
3
+ export declare const ARTICLE_BODY_BLOCK = "ArticleBody";
4
+ export declare const ARTICLE_HEADING_LOOK: Props;
5
+ export declare const ARTICLE_PARAGRAPH_LOOK: Props;
6
+ export declare const ARTICLE_MEASURE = 640;
7
+ export declare function articleBodySeed(nodeId: string): SeededNode[];
8
+ export declare function withArticleBodyTemplate(props: Props): Props;
9
+ export {};
@@ -0,0 +1 @@
1
+ import{CARDS_BODY_LOOK as a,rowFieldTextSeed as n}from"efficient-web-builder/format/lib/document/blocks/general/Cards/card-seed";import{DIM as o,TEXT as d,seedNodes as c,token as g}from"efficient-web-builder/format/lib/document/seed-parts";const l="ArticleBody",h={textStyle:"heading-3",...g("headingSmall",20),weight:500,lineHeight:1.4,align:"center"},A={...a,align:"center"},i=640,m=[n("heading",{...d,tag:"h2",align:"center",maxWidth:i},h),n("paragraph",{...o,tag:"p",align:"center",maxWidth:i},A)];function x(e){return c(m,(t,r)=>`${e}~${r==="0"?"heading":"paragraph"}`)}function O(e){if(e.template!==void 0)return e;const t=typeof e.id=="string"&&e.id.trim()?e.id:l;return{...e,template:x(t)}}export{l as ARTICLE_BODY_BLOCK,h as ARTICLE_HEADING_LOOK,i as ARTICLE_MEASURE,A as ARTICLE_PARAGRAPH_LOOK,x as articleBodySeed,O as withArticleBodyTemplate};
@@ -0,0 +1,8 @@
1
+ export declare const BLOG_POST_RECORD_TYPE = "blog-post";
2
+ export declare const ARTICLE_BODY_FIELD = "body";
3
+ export type ArticleRow = {
4
+ heading: string;
5
+ paragraph: string;
6
+ };
7
+ export declare function articleRows(body: unknown): ArticleRow[];
8
+ export declare function sampleArticleRows(): ArticleRow[];
@@ -0,0 +1,5 @@
1
+ import{say as t}from"efficient-web-builder/format/lib/editor-words";import{sanitizeHtml as o}from"efficient-web-builder/render/lib/document/sanitize";const g="blog-post",l="body",p={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&apos;":"'","&nbsp;":" ","&rsquo;":"’","&lsquo;":"‘","&ldquo;":"“","&rdquo;":"”","&mdash;":"—","&ndash;":"–","&hellip;":"…"};function n(r){return r.replace(/&[a-z]+;|&#\d+;/gi,a=>p[a.toLowerCase()]??a)}function i(r){return r?(/<[a-z][\s\S]*?>/i.test(r)?r.replace(/<\/(p|div|h[1-6]|li|blockquote|section|article|ul|ol)>/gi,`
2
+
3
+ `).replace(/<br\s*\/?>/gi,`
4
+
5
+ `).replace(/<[^>]+>/g,""):r).split(/\n{2,}/).map(e=>n(e).replace(/[ \t]+/g," ").trim()).filter(Boolean):[]}function s(r){return r.length<60&&/^[A-Z][^.]*\.$/.test(r.trim())}function u(r){return typeof r!="string"||!r.trim()?[]:i(o(r)).map(a=>s(a)?{heading:a,paragraph:""}:{heading:"",paragraph:a})}function d(){return[{heading:t("A subhead."),paragraph:""},{heading:"",paragraph:t("Each paragraph of the post's body is drawn by the card template.")},{heading:"",paragraph:t("Another paragraph.")}]}export{l as ARTICLE_BODY_FIELD,g as BLOG_POST_RECORD_TYPE,u as articleRows,d as sampleArticleRows};
@@ -0,0 +1,12 @@
1
+ type Props = Record<string, unknown>;
2
+ export declare function articlePageDocument(): {
3
+ root: {
4
+ props: Props;
5
+ };
6
+ content: {
7
+ type: string;
8
+ props: Props;
9
+ }[];
10
+ zones: Props;
11
+ };
12
+ export {};
@@ -0,0 +1 @@
1
+ import{CARD_ROW_FIELD_PROP as s}from"efficient-web-builder/format/lib/content/card-template";import{RECORD_TITLE_FIELD as m}from"efficient-web-builder/format/lib/content/record-row";import{TEMPLATE_RECORD_TYPE_PROP as _}from"efficient-web-builder/format/lib/content/record-types";import{BOX_TYPE as n,CONTAINER_BLOCKS_SLOT as r}from"efficient-web-builder/format/lib/document/container-blocks";import{BOX as g,DIM as c,TEXT as E,boxPadding as p,seedNodes as O,token as d}from"efficient-web-builder/format/lib/document/seed-parts";import{BLOG_POST_RECORD_TYPE as P}from"./article-body.js";import{ARTICLE_BODY_BLOCK as l,ARTICLE_HEADING_LOOK as T,ARTICLE_MEASURE as y,ARTICLE_PARAGRAPH_LOOK as R,articleBodySeed as B}from"./article-body-seed.js";const a={...g,direction:"column",align:"center"},i=(e,o,t)=>({type:"Text",props:{...o,text:"",[s]:e,align:"center",maxWidth:y,_partStyles:{text:{...t,align:"center"}}}}),L=[{type:n,props:{...a,name:"Title",gap:16,...p(64,32,40,20),sectionPaddingBottom:16,sectionPaddingBottomPhone:16},slots:{[r]:[i("category",{...c,tag:"p"},{textStyle:"body-1",...d("label",13),case:"upper",letterSpacing:.2}),i(m,{...E,tag:"h1"},T),i("excerpt",{...c,tag:"p"},R)]}},{type:n,props:{...a,align:"stretch",name:"Cover",...p(0,0,0,0)},slots:{[r]:[{type:"ImageBlock",props:{[s]:"cover",aspect:"16/9",contained:!0,widthMode:"page",...p(0,32,0,20)}}]}},{type:n,props:{...a,name:"Body",...p(0,32,0,20),sectionPaddingBottom:64,sectionPaddingBottomPhone:40},slots:{[r]:[{type:l,props:{}}]}},{type:n,props:{...a,align:"stretch",name:"Breadcrumb",...p(0,0,0,0)},slots:{[r]:[{type:"Breadcrumb",props:{items:[{label:"Home",href:"/"},{label:"Journal",href:"/journal"}],meta:"",[s]:m}}]}}];function x(){const e=O(L,(o,t)=>`article-${o}-${t.replace(/\./g,"-")}`).map(u);return{root:{props:{[_]:P}},content:e,zones:{}}}function u(e){const o=e.props[r];return Array.isArray(o)?{...e,props:{...e.props,[r]:o.map(t=>t.type===l?{...t,props:{...t.props,template:B(String(t.props.id))}}:t)}}:e}export{x as articlePageDocument};
@@ -12,6 +12,7 @@ export interface FieldUsageAnswer {
12
12
  specOrder?: number | null;
13
13
  fitmentOrder?: number | null;
14
14
  }
15
+ export declare const NO_FIELD_ANSWERS: readonly FieldUsageAnswer[];
15
16
  export declare function answersForKind(answers: readonly FieldUsageAnswer[], kind: string): readonly FieldUsageAnswer[];
16
17
  export declare function applyCardAnswers<T extends {
17
18
  fieldKey?: string;
@@ -1 +1 @@
1
- function g(e,n){return e.length===0?e:e.filter(o=>o.kind===void 0||o.kind===n)}function k(e,n){if(n.length===0)return e;const o=y(n);return s(e.filter(r=>o(r.fieldKey)),r=>r.fieldKey,n,"cardOrder")}function K(e,n){const o=n==="filter"?"filterOrder":"cardOrder",r=new Map;for(const t of e){const d=t[o];if(typeof d!="number"||!Number.isFinite(d))continue;const l=r.get(t.fieldKey);(l===void 0||d<l)&&r.set(t.fieldKey,d)}return t=>t?r.get(t):void 0}function a(e){return c(e,"spec")}function w(e,n){if(n.length===0)return e;const o=a(n),r=e.filter(t=>o(t.fieldKey));return s(r,t=>t.fieldKey,n,"specOrder")}function s(e,n,o,r){const t=new Map;for(const i of o){const f=i[r];typeof f=="number"&&t.set(i.fieldKey,f)}if(t.size===0)return e;const d=[],l=[];e.forEach((i,f)=>{const p=n(i);p&&(d.push(f),l.push({item:i,index:f,order:t.get(p)}))}),l.sort((i,f)=>i.order!==void 0&&f.order!==void 0?i.order-f.order||i.index-f.index:i.order!==void 0?-1:f.order!==void 0?1:i.index-f.index);const u=[...e];return d.forEach((i,f)=>{u[i]=l[f].item}),u.every((i,f)=>i===e[f])?e:u}function y(e){return c(e,"card")}function F(e){return c(e,"filter")}const h="collection";function m(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":h},pcds:{"alloy-wheel":"pcd"},tyreTypes:{tyre:"tire_type"},speedRatings:{tyre:"speed_rating"}}[e]?.[n]}function x(e){return{size:"size",finish:"wheel_finish_ref",loadIndex:"load_index",speedRating:"speed_rating",tyreType:"tire_type",boltPattern:"bolt_pattern",et:"et",centreBore:"center_bore"}[e]}function _(e,n,o){const r=x(e);if(!r)return n;const t=o.find(d=>d.fieldKey===r)?.variant;return t===void 0?n:t==="none"?null:t}function O(e,n){if(n.length===0)return e;const o=[];let r=!1;for(const t of e){const d=_(t.key,t.role,n);if(d===null){r=!0;continue}if(d===t.role){o.push(t);continue}r=!0,o.push({...t,role:d})}return r?o:e}function c(e,n){const o=new Set(e.filter(r=>r[n]===!1).map(r=>r.fieldKey));return r=>!r||!o.has(r)}export{h as COLLECTION_FIELD_KEY,K as answerOrder,g as answersForKind,k as applyCardAnswers,w as applySpecAnswers,O as applyVariantAnswers,m as facetFieldKey,y as keepForCard,F as keepForFilter,a as keepForSpec,x as optionFieldKey,s as orderByAnswers,_ as variantRoleFor};
1
+ const g=Object.freeze([]);function k(e,n){return e.length===0?e:e.filter(o=>o.kind===void 0||o.kind===n)}function K(e,n){if(n.length===0)return e;const o=y(n);return s(e.filter(r=>o(r.fieldKey)),r=>r.fieldKey,n,"cardOrder")}function w(e,n){const o=n==="filter"?"filterOrder":"cardOrder",r=new Map;for(const t of e){const d=t[o];if(typeof d!="number"||!Number.isFinite(d))continue;const l=r.get(t.fieldKey);(l===void 0||d<l)&&r.set(t.fieldKey,d)}return t=>t?r.get(t):void 0}function a(e){return c(e,"spec")}function F(e,n){if(n.length===0)return e;const o=a(n),r=e.filter(t=>o(t.fieldKey));return s(r,t=>t.fieldKey,n,"specOrder")}function s(e,n,o,r){const t=new Map;for(const i of o){const f=i[r];typeof f=="number"&&t.set(i.fieldKey,f)}if(t.size===0)return e;const d=[],l=[];e.forEach((i,f)=>{const p=n(i);p&&(d.push(f),l.push({item:i,index:f,order:t.get(p)}))}),l.sort((i,f)=>i.order!==void 0&&f.order!==void 0?i.order-f.order||i.index-f.index:i.order!==void 0?-1:f.order!==void 0?1:i.index-f.index);const u=[...e];return d.forEach((i,f)=>{u[i]=l[f].item}),u.every((i,f)=>i===e[f])?e:u}function y(e){return c(e,"card")}function O(e){return c(e,"filter")}const h="collection";function m(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":h},pcds:{"alloy-wheel":"pcd"},tyreTypes:{tyre:"tire_type"},speedRatings:{tyre:"speed_rating"}}[e]?.[n]}function x(e){return{size:"size",finish:"wheel_finish_ref",loadIndex:"load_index",speedRating:"speed_rating",tyreType:"tire_type",boltPattern:"bolt_pattern",et:"et",centreBore:"center_bore"}[e]}function _(e,n,o){const r=x(e);if(!r)return n;const t=o.find(d=>d.fieldKey===r)?.variant;return t===void 0?n:t==="none"?null:t}function E(e,n){if(n.length===0)return e;const o=[];let r=!1;for(const t of e){const d=_(t.key,t.role,n);if(d===null){r=!0;continue}if(d===t.role){o.push(t);continue}r=!0,o.push({...t,role:d})}return r?o:e}function c(e,n){const o=new Set(e.filter(r=>r[n]===!1).map(r=>r.fieldKey));return r=>!r||!o.has(r)}export{h as COLLECTION_FIELD_KEY,g as NO_FIELD_ANSWERS,w as answerOrder,k as answersForKind,K as applyCardAnswers,F as applySpecAnswers,E as applyVariantAnswers,m as facetFieldKey,y as keepForCard,O as keepForFilter,a as keepForSpec,x as optionFieldKey,s as orderByAnswers,_ as variantRoleFor};
@@ -0,0 +1,29 @@
1
+ import { type BlockSeed, type SeededNode } from "efficient-web-builder/format/lib/document/seed-parts";
2
+ type Props = Record<string, unknown>;
3
+ export declare const PRODUCT_PICTURE_BLOCK = "ProductPicture";
4
+ export declare const PRODUCT_SPECS_BLOCK = "ProductSpecs";
5
+ export declare const PRODUCT_BUY_BLOCK = "ProductBuy";
6
+ export declare const PRODUCT_PRICE_BLOCK = "ProductPrice";
7
+ export declare const PRODUCT_COLOUR_BLOCK = "ProductColour";
8
+ export declare const PRODUCT_SIZE_BLOCK = "ProductSize";
9
+ export declare const PRODUCT_EYEBROW_BLOCK = "ProductEyebrow";
10
+ export declare const PRODUCT_NAME_BLOCK = "ProductName";
11
+ export declare const PRODUCT_CARD_SLOT_BLOCKS: readonly ["ProductPicture", "ProductEyebrow", "ProductName", "ProductSpecs", "ProductPrice", "ProductColour", "ProductSize", "ProductBuy"];
12
+ export declare const PRODUCT_CARD_FIELDS: readonly [{
13
+ readonly key: "name";
14
+ readonly label: "Name";
15
+ }, {
16
+ readonly key: "eyebrow";
17
+ readonly label: "Eyebrow";
18
+ }, {
19
+ readonly key: "href";
20
+ readonly label: "Product page";
21
+ readonly kind: "link";
22
+ }];
23
+ export interface ProductCardSeedOptions {
24
+ legacyWellHonoured?: boolean;
25
+ }
26
+ export declare function productCardSeed(props: Props, options?: ProductCardSeedOptions): BlockSeed;
27
+ export declare function productCardTemplate(props: Props, options?: ProductCardSeedOptions): SeededNode[];
28
+ export declare function withProductCardTemplate(props: Props, options?: ProductCardSeedOptions): Props;
29
+ export {};
@@ -0,0 +1 @@
1
+ import{BOX_TYPE as m,CONTAINER_BLOCKS_SLOT as R}from"efficient-web-builder/format/lib/document/container-blocks";import{INNER_BOX as f,boxPadding as l,seedNodes as p}from"efficient-web-builder/format/lib/document/seed-parts";import{THEME_CARD_IMAGE_BG as h,resolveBoundCardImageBackground as D}from"efficient-web-builder/format/lib/content/card-image-background";import{SHARED_ROWS_KEY as E}from"efficient-web-builder/render/lib/content/box-shared-columns";import{GRID_CARD_SHOW as i}from"../sections/card-show-defaults.js";const s="ProductPicture",C="ProductSpecs",_="ProductBuy",P="ProductPrice",O="ProductColour",T="ProductSize",B="ProductEyebrow",g="ProductName",A=[s,B,g,C,P,O,T,_],N=[{key:"name",label:"Name"},{key:"eyebrow",label:"Eyebrow"},{key:"href",label:"Product page",kind:"link"}],x={...f,gap:0,gapPhone:0,...l(32,32,32,32),[E]:"shared"},w=e=>typeof e.id=="string"&&e.id.trim()?e.id:"ProductGrid",n=(e,o)=>typeof e=="boolean"?e:o;function S(e,o={}){const a=e.dynamic===!0,r={},d=a?o.legacyWellHonoured?e.imageBackground??h:D(e.imageBackground):e.imageBackground;d!==void 0&&(r.imageBackground=d);for(const c of["cardImage","coverIndex","indexBadge","showBadge"])e[c]!==void 0&&(r[c]=e[c]);const t={price:n(e.showCardPrice,!0),finishes:n(e.showCardFinishes,!0),sizes:n(e.showCardSizes,i.showCardSizes),buy:n(e.showCardBuy,i.showCardBuy),page:n(e.showCardPage,i.showCardPage)},u={...x,name:"Card"};e.outline==="hairline"&&(u.sectionBorder={width:1,style:"solid"});const y=[{type:s,props:r},{type:B},{type:g},{type:C,props:{sizes:t.sizes}},...t.price?[{type:P}]:[],...t.finishes?[{type:O}]:[],...t.buy||t.page?[{type:_,props:{buy:t.buy,page:t.page}}]:[]];return{type:m,props:u,slots:{[R]:y}}}function b(e,o={}){const a=w(e);return p([S(e,o)],(r,d)=>`${a}~card-${d}-${r}`)}function z(e,o={}){return e.template!==void 0?e:{...e,template:b(e,o)}}export{_ as PRODUCT_BUY_BLOCK,N as PRODUCT_CARD_FIELDS,A as PRODUCT_CARD_SLOT_BLOCKS,O as PRODUCT_COLOUR_BLOCK,B as PRODUCT_EYEBROW_BLOCK,g as PRODUCT_NAME_BLOCK,s as PRODUCT_PICTURE_BLOCK,P as PRODUCT_PRICE_BLOCK,T as PRODUCT_SIZE_BLOCK,C as PRODUCT_SPECS_BLOCK,S as productCardSeed,b as productCardTemplate,z as withProductCardTemplate};
@@ -0,0 +1,17 @@
1
+ export declare const CURRENT_LINE: {
2
+ readonly rowLink: "relative opacity-100";
3
+ readonly row: "pointer-events-none absolute inset-x-0 -bottom-2 h-[2px] bg-accent";
4
+ readonly tab: "absolute inset-x-0 -bottom-px h-[2px] bg-accent";
5
+ };
6
+ export declare const TAB_CELLS: {
7
+ readonly list: "m-0 flex list-none items-stretch gap-0 overflow-auto p-0 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
8
+ readonly item: "flex";
9
+ readonly tab: (first: boolean, current: boolean) => string;
10
+ readonly underline: "absolute inset-x-0 -bottom-px h-[2px] bg-accent";
11
+ };
12
+ export declare const TAB_PILLS: {
13
+ readonly nav: "-mx-1 [scrollbar-width:none] max-view-wide:overflow-x-auto [&::-webkit-scrollbar]:hidden";
14
+ readonly list: "flex flex-wrap gap-2 px-1 pb-1 max-view-wide:min-w-max max-view-wide:flex-nowrap";
15
+ readonly tab: (current: boolean) => string;
16
+ };
17
+ export declare function currentLinkIndex(hrefs: readonly string[], pagePath: string | null | undefined): number;
@@ -0,0 +1 @@
1
+ import{normalizePath as r}from"efficient-web-builder/format/lib/popup/rules";import{menuLinkKind as i}from"../menu-link.js";const a="[scrollbar-width:none] [&::-webkit-scrollbar]:hidden",x="text-[length:var(--size-label,13px)]",l={rowLink:"relative opacity-100",row:"pointer-events-none absolute inset-x-0 -bottom-2 h-[2px] bg-accent",tab:"absolute inset-x-0 -bottom-px h-[2px] bg-accent"},b={list:`m-0 flex list-none items-stretch gap-0 overflow-auto p-0 ${a}`,item:"flex",tab:(e,t)=>[`relative block whitespace-nowrap border-r border-line px-[26px] py-[18px] font-mono ${x} uppercase tracking-[0.22em] transition-colors`,e?"border-l border-line":"",t?"text-fg":"text-fg-dim hover:text-fg"].join(" "),underline:l.tab},s={nav:"-mx-1 [scrollbar-width:none] max-view-wide:overflow-x-auto [&::-webkit-scrollbar]:hidden",list:"flex flex-wrap gap-2 px-1 pb-1 max-view-wide:min-w-max max-view-wide:flex-nowrap",tab:e=>`flex flex-col gap-0.5 rounded-[var(--sf-button-radius,999px)] border px-5 py-2.5 transition-colors ${e?"border-accent bg-accent text-accent-ink":"border-line text-fg hover:border-accent hover:text-accent"}`};function d(e,t){if(!t)return-1;const n=r(t);return e.findIndex(o=>i(o)==="page"&&r(o)===n)}export{l as CURRENT_LINE,b as TAB_CELLS,s as TAB_PILLS,d as currentLinkIndex};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FitmentPickerMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Fitment picker",defaultProps:{}};export{e as FitmentPickerMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FitmentPickerRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import i from"../../../../../components/fitment/FitmentPickerPart.js";import{phoneKey as o}from"efficient-easel/draw";import{FitmentPickerMeta as r}from"./meta.js";const s={...r,render:e=>t(i,{layout:e.layout==="short"?"short":"tall",pickerColumns:e.pickerColumns,pickerColumnsPhone:e[o("pickerColumns")],editing:!!e.editor?.isEditing})};export{s as FitmentPickerRender};
@@ -1 +1 @@
1
- import{PH as t}from"efficient-web-builder/format/lib/document/blocks/placeholders";const o={num:t.sectionNumber,title:"Specifications *table.*",description:t.body,footnote:"Add a short footnote here.",footnoteLinkText:"Contact us"},n={label:"Fitment Table",defaultProps:{dynamic:!1,num:"",title:"",description:"",wheel:"",showFilter:!0,tooltipDefaultOn:!0,footnote:"",footnoteLinkText:"",footnoteLinkHref:""}};export{o as FITMENTTABLE_PH,n as FitmentTableMeta};
1
+ import{PH as t}from"efficient-web-builder/format/lib/document/blocks/placeholders";const e={num:t.sectionNumber,title:"Specifications *table.*",description:t.body,footnote:"Add a short footnote here.",footnoteLinkText:"Contact us"},n={label:"Sizes",defaultProps:{dynamic:!1,num:"",title:"",description:"",wheel:"",showFilter:!0,tooltipDefaultOn:!0,footnote:"",footnoteLinkText:"",footnoteLinkHref:""}};export{e as FITMENTTABLE_PH,n as FitmentTableMeta};
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import f from"../../../../../components/pdp-dynamic/FitmentTableBlock.js";import{hidableText as l}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as a}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as e}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{FitmentTableMeta as r,FITMENTTABLE_PH as o}from"./meta.js";const w={...r,render:t=>{const n=a(t.headPlacement)==="own-box",i=d=>n?void 0:d;return m(f,{dynamic:t.dynamic,wheel:t.wheel,num:i(e(t.num,o.num,t.editor)),title:i(e(t.title,o.title,t.editor)),description:i(e(t.description,o.description,t.editor)),omitHead:n,showFilter:t.showFilter,tooltipDefaultOn:t.tooltipDefaultOn,footnote:e(t.footnote,o.footnote,t.editor),footnoteLinkText:e(t.footnoteLinkText,o.footnoteLinkText,t.editor),footnoteLinkHref:l(t.footnoteLinkHref),editing:t.editor?.isEditing})}};export{w as FitmentTableRender};
1
+ import{jsx as l}from"react/jsx-runtime";import r from"../../../../../components/pdp-dynamic/FitmentTableBlock.js";import{TYRE_SIZES_HEAD as d}from"../../../../../components/TyreSizeGrid.js";import{hidableText as a}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as c}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as e,phHideDefault as m}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{FitmentTableMeta as T,FITMENTTABLE_PH as i}from"./meta.js";const F={...T,render:t=>{const o=c(t.headPlacement)==="own-box",n=f=>o?void 0:f;return l(r,{dynamic:t.dynamic,wheel:t.wheel,num:n(e(t.num,i.num,t.editor)),title:n(e(t.title,i.title,t.editor)),description:n(e(t.description,i.description,t.editor)),tyreHead:o?void 0:{title:m(t.title,d.title,t.editor),description:m(t.description,d.description,t.editor)},omitHead:o,showFilter:t.showFilter,tooltipDefaultOn:t.tooltipDefaultOn,footnote:e(t.footnote,i.footnote,t.editor),footnoteLinkText:e(t.footnoteLinkText,i.footnoteLinkText,t.editor),footnoteLinkHref:a(t.footnoteLinkHref),editing:t.editor?.isEditing})}};export{F as FitmentTableRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductBuyMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Buy",defaultProps:{buy:!0,page:!0}};export{e as ProductBuyMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductBuyRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import o from"../../../../../components/card-pieces/HostPart.js";import a from"../../../../../components/card-pieces/CardBuyButton.js";import{ProductBuyMeta as t}from"./meta.js";const n={...t,render:e=>r(o,{label:t.label??"",editing:!!e.editor?.isEditing,children:r(a,{buy:e.buy!==!1,page:e.page!==!1})})};export{n as ProductBuyRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductEyebrowMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Eyebrow",defaultProps:{}};export{e as ProductEyebrowMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductEyebrowRender: BlockRender;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as o}from"react/jsx-runtime";import{withRMark as s}from"efficient-web-builder/render/components/RMark";import l from"../../../../../components/card-pieces/CardEyebrow.js";import{readPartStyles as a}from"efficient-web-builder/render/lib/document/part-styles";import m from"../../../../../components/card-pieces/HostPart.js";import{useProductCardState as c}from"../../../../../components/card-pieces/ProductCardState.js";import{useGridCard as f}from"../../../../../components/GridCardTemplate.js";import{wheelCardEyebrow as u}from"../../../../../components/ProductCardEyebrow.js";import{ProductEyebrowMeta as t}from"./meta.js";function w({region:e}){const r=c(),{fieldUsage:i,reserveEyebrow:n}=f(),d=r.kind==="wheel"&&r.wheel.process?s(r.wheel.process):null;return o(l,{reserve:n,region:e,children:u({kindLabel:null,brand:null,process:d},i)})}const x={...t,render:e=>{const r=!!e.editor?.isEditing;return o(m,{label:t.label??"",editing:r,children:o(w,{region:{nodeId:typeof e.id=="string"?e.id:void 0,partStyles:a(e),editing:r}})})}};export{x as ProductEyebrowRender};
@@ -3,5 +3,9 @@ export declare const ProductGridSlots: {
3
3
  products: {
4
4
  type: "slot";
5
5
  };
6
+ template: {
7
+ allow: string[];
8
+ type: "slot";
9
+ };
6
10
  };
7
11
  export declare const ProductGridMeta: Omit<BlockRender, "render">;
@@ -1 +1 @@
1
- import{DEFAULT_TITLE_SIZE as t}from"../../../../sections/product-grid-title.js";import{DEFAULT_COVER_INDEX as o}from"../../../../wheels/cover-rendering.js";import{DEFAULT_CARD_OUTLINE as e,DEFAULT_CARD_INDEX_FORMAT as r}from"efficient-web-builder/format/lib/sections/product-card-style";const i={products:{type:"slot"}},n={label:"Product Grid",fields:i,defaultProps:{dynamic:!1,num:"",title:"",titleSize:t,padTop:120,description:"",linkText:"",linkHref:"",columns:4,limit:8,showAll:!1,coverIndex:String(o),outline:e,indexBadge:r,showBadge:!0,source:null}};export{n as ProductGridMeta,i as ProductGridSlots};
1
+ import{DEFAULT_TITLE_SIZE as o}from"../../../../sections/product-grid-title.js";import{cardTemplateSlot as l}from"efficient-web-builder/format/lib/content/card-template";import{PRODUCT_CARD_SLOT_BLOCKS as e}from"../../../../content/product-card-seed.js";const t=l(),r={products:{type:"slot"},template:{...t,allow:[...t.allow,...e]}},d={label:"Product Grid",fields:r,defaultProps:{dynamic:!1,num:"",title:"",titleSize:o,padTop:120,description:"",linkText:"",linkHref:"",columns:4,limit:8,showAll:!1,source:null}};export{d as ProductGridMeta,r as ProductGridSlots};
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import{phoneKey as w}from"efficient-easel/draw";import f from"../../../../../components/pdp-dynamic/DynamicRelatedProducts.js";import{DEFAULT_RELATIONSHIP as C}from"../../../../catalog/relationships.js";import{resolveWidth as s}from"efficient-web-builder/format/lib/content/section-width";import P from"../../../../../components/ProductGridSection.js";import{resolveBoundCardImageBackground as B}from"efficient-web-builder/format/lib/content/card-image-background";import{hidableText as x}from"efficient-easel/screen/lib/document/hidable";import{parseCoverIndex as k}from"../../../../wheels/cover-rendering.js";import{cardHoverOf as c}from"efficient-web-builder/format/lib/animation/hover";import{parseSectionHeadPlacement as I}from"efficient-web-builder/format/lib/sections/section-head-placement";import{parseCardOutline as u,parseCardIndexFormat as g}from"efficient-web-builder/format/lib/sections/product-card-style";import{PH as t}from"efficient-web-builder/format/lib/document/blocks/placeholders";import{phHide as i}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{PRODUCTGRID_PH as a}from"../placeholders.js";import{ProductGridMeta as y}from"./meta.js";const K={...y,render:e=>{if(e.dynamic)return m(f,{num:i(e.num,a.num,e.editor),title:i(e.title,t.sectionHeading,e.editor),description:i(e.description,t.body,e.editor),columns:typeof e.columns=="number"?e.columns:3,relationship:C,cardImage:e.cardImage,outline:u(e.outline),indexBadge:g(e.indexBadge),showBadge:e.showBadge??!0,hover:c(e,"ProductGrid"),imageBackground:B(e.imageBackground),showCardPrice:e.showCardPrice,showCardFinishes:e.showCardFinishes,showCardSizes:e.showCardSizes,showCardBuy:e.showCardBuy,showCardPage:e.showCardPage,editing:e.editor?.isEditing});const n=i(e.linkText,a.link,e.editor),o=e.source,h=s(e,"full"),r=I(e.headPlacement)==="own-box",d=l=>r?void 0:l;return m(P,{gap:e.gap,gapPhone:e[w("gap")],contentCapped:h.mode==="page",num:d(i(e.num,a.num,e.editor)),title:d(i(e.title,t.sectionHeading,e.editor)),titleSize:e.titleSize,padTop:r?0:e.padTop,description:d(i(e.description,t.body,e.editor)),link:d(n?{text:n,href:x(e.linkHref)||"#"}:void 0),products:e.products,wheels:e.wheels,source:o?.slug?o:void 0,catalog:e.catalog,kinds:e.kinds,fieldUsage:e.fieldUsage,columns:e.columns,limit:e.showAll?void 0:e.limit,editing:e.editor?.isEditing,imageBackground:e.imageBackground,cardImage:e.cardImage,hover:c(e,"ProductGrid"),coverIndex:k(e.coverIndex),outline:u(e.outline),indexBadge:g(e.indexBadge),showBadge:e.showBadge??!0,showCardPrice:e.showCardPrice,showCardFinishes:e.showCardFinishes,showCardSizes:e.showCardSizes,showCardBuy:e.showCardBuy,showCardPage:e.showCardPage})}};export{K as ProductGridRender};
1
+ import{jsx as g}from"react/jsx-runtime";import{phoneKey as d,tabletKey as h}from"efficient-easel/draw";import b from"../../../../../components/pdp-dynamic/DynamicRelatedProducts.js";import{DEFAULT_RELATIONSHIP as y}from"../../../../catalog/relationships.js";import{resolveWidth as T}from"efficient-web-builder/format/lib/content/section-width";import I from"../../../../../components/ProductGridSection.js";import{relatedCardCount as k}from"../../../../catalog/related-cards.js";import{hidableText as G}from"efficient-easel/screen/lib/document/hidable";import{cardHoverOf as P}from"efficient-web-builder/format/lib/animation/hover";import{parseSectionHeadPlacement as x}from"efficient-web-builder/format/lib/sections/section-head-placement";import{PH as o}from"efficient-web-builder/format/lib/document/blocks/placeholders";import{phHide as t}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{PRODUCTGRID_PH as l}from"../placeholders.js";import{ProductGridMeta as C}from"./meta.js";const F={...C,render:e=>{const a=typeof e.id=="string"?e.id:"",c=e.template;if(e.dynamic){const n=x(e.headPlacement)==="own-box",m=H=>n?void 0:H;return g(b,{num:m(t(e.num,l.num,e.editor)),title:m(t(e.title,o.sectionHeading,e.editor)),description:m(t(e.description,o.body,e.editor)),omitHead:n,columns:typeof e.columns=="number"?e.columns:3,columnsPhone:e[d("columns")],columnsTablet:e[h("columns")],gap:e.gap,gapPhone:e[d("gap")],cardCount:k(e.limit),relationship:typeof e.relationship=="string"?e.relationship:y,hover:P(e,"ProductGrid"),ownerId:a,template:c,cardImage:e.cardImage,outline:e.outline,indexBadge:e.indexBadge,editing:e.editor?.isEditing})}const u=t(e.linkText,l.link,e.editor),r=e.source,w=T(e,"full"),f=x(e.headPlacement)==="own-box",i=n=>f?void 0:n;return g(I,{gap:e.gap,gapPhone:e[d("gap")],contentCapped:w.mode==="page",num:i(t(e.num,l.num,e.editor)),title:i(t(e.title,o.sectionHeading,e.editor)),titleSize:e.titleSize,padTop:f?0:e.padTop,description:i(t(e.description,o.body,e.editor)),link:i(u?{text:u,href:G(e.linkHref)||"#"}:void 0),products:e.products,wheels:e.wheels,source:r?.slug?r:void 0,catalog:e.catalog,kinds:e.kinds,fieldUsage:e.fieldUsage,columns:e.columns,columnsPhone:e[d("columns")],columnsTablet:e[h("columns")],limit:e.showAll?void 0:e.limit,editing:e.editor?.isEditing,hover:P(e,"ProductGrid"),ownerId:a,template:c})}};export{F as ProductGridRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductNameMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Name",defaultProps:{}};export{e as ProductNameMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductNameRender: BlockRender;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import o from"../../../../../components/card-pieces/CardName.js";import{readPartStyles as d}from"efficient-web-builder/render/lib/document/part-styles";import n from"../../../../../components/card-pieces/HostPart.js";import{ProductNameMeta as i}from"./meta.js";const c={...i,render:e=>{const t=!!e.editor?.isEditing;return r(n,{label:i.label??"",editing:t,children:r(o,{region:{nodeId:typeof e.id=="string"?e.id:void 0,partStyles:d(e),editing:t}})})}};export{c as ProductNameRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductPictureMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ import{DEFAULT_CARD_INDEX_FORMAT as e}from"efficient-web-builder/format/lib/sections/product-card-style";const r={label:"Picture",defaultProps:{indexBadge:e,showBadge:!0}};export{r as ProductPictureMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductPictureRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import a from"../../../../../components/card-pieces/CardProductPicture.js";import i from"../../../../../components/card-pieces/HostPart.js";import{ProductPictureMeta as d}from"./meta.js";const g={...d,render:e=>r(i,{label:d.label??"",editing:!!e.editor?.isEditing,children:r(a,{imageBackground:e.imageBackground,cardImage:e.cardImage,coverIndex:e.coverIndex,indexBadge:e.indexBadge,showBadge:e.showBadge})})};export{g as ProductPictureRender};