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,7 +1,7 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
3
3
  import { type CardHoverDrawn } from "efficient-web-builder/format/lib/animation/hover";
4
- import type { FieldUsageAnswer } from "../lib/content/field-usage.js";
4
+ import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
5
5
  export interface ProductCardChrome {
6
6
  imageBackgroundFill: string;
7
7
  hover: CardHoverDrawn;
@@ -1 +1 @@
1
- "use client";import{jsx as l}from"react/jsx-runtime";import{GRID_CARD_SHOW as r}from"../lib/sections/card-show-defaults.js";import{createContext as G,useContext as M,useMemo as P}from"react";import{DEFAULT_CARD_INDEX_FORMAT as D,DEFAULT_CARD_OUTLINE as d}from"efficient-web-builder/format/lib/sections/product-card-style";import{THEME_CARD_IMAGE_BG as S}from"efficient-web-builder/format/lib/content/card-image-background";import{cardHoverOf as v}from"efficient-web-builder/format/lib/animation/hover";import{DEFAULT_COVER_INDEX as R}from"../lib/wheels/cover-rendering.js";import{CARD_IMAGE_SIZES as a}from"../lib/sections/card-image-sizes.js";const p=[],I=v({},"ProductGrid"),F={imageBackgroundFill:S,hover:I,coverIndex:R,indexBadge:D,outline:d,showBadge:!0,fieldUsage:p,reserveEyebrow:!1,showCardPrice:!0,showCardFinishes:!0,...r,imageSizes:a},T=G(F);function B({imageBackgroundFill:o,hover:t=I,coverIndex:e=R,indexBadge:m=D,outline:u=d,showBadge:_=!0,fieldUsage:n=p,reserveEyebrow:C=!1,showCardPrice:E=!0,showCardFinishes:c=!0,showCardSizes:i=r.showCardSizes,showCardBuy:s=r.showCardBuy,showCardPage:f=r.showCardPage,imageSizes:A=a,children:x}){const O=P(()=>({imageBackgroundFill:o,hover:t,coverIndex:e,indexBadge:m,outline:u,showBadge:_,fieldUsage:n,reserveEyebrow:C,showCardPrice:E,showCardFinishes:c,showCardSizes:i,showCardBuy:s,showCardPage:f,imageSizes:A}),[o,t,e,m,u,_,n,C,E,c,i,s,f,A]);return l(T.Provider,{value:O,children:x})}function V(){return M(T)}export{B as ProductCardChromeProvider,V as useProductCardChrome};
1
+ "use client";import{jsx as l}from"react/jsx-runtime";import{GRID_CARD_SHOW as r}from"../lib/sections/card-show-defaults.js";import{createContext as F,useContext as G,useMemo as L}from"react";import{DEFAULT_CARD_INDEX_FORMAT as A,DEFAULT_CARD_OUTLINE as d}from"efficient-web-builder/format/lib/sections/product-card-style";import{THEME_CARD_IMAGE_BG as M}from"efficient-web-builder/format/lib/content/card-image-background";import{cardHoverOf as P}from"efficient-web-builder/format/lib/animation/hover";import{NO_FIELD_ANSWERS as R}from"../lib/content/field-usage.js";import{DEFAULT_COVER_INDEX as p}from"../lib/wheels/cover-rendering.js";import{CARD_IMAGE_SIZES as a}from"../lib/sections/card-image-sizes.js";const I=P({},"ProductGrid"),S={imageBackgroundFill:M,hover:I,coverIndex:p,indexBadge:A,outline:d,showBadge:!0,fieldUsage:R,reserveEyebrow:!1,showCardPrice:!0,showCardFinishes:!0,...r,imageSizes:a},T=F(S);function V({imageBackgroundFill:o,hover:t=I,coverIndex:e=p,indexBadge:m=A,outline:u=d,showBadge:_=!0,fieldUsage:E=R,reserveEyebrow:i=!1,showCardPrice:C=!0,showCardFinishes:n=!0,showCardSizes:c=r.showCardSizes,showCardBuy:f=r.showCardBuy,showCardPage:D=r.showCardPage,imageSizes:s=a,children:x}){const O=L(()=>({imageBackgroundFill:o,hover:t,coverIndex:e,indexBadge:m,outline:u,showBadge:_,fieldUsage:E,reserveEyebrow:i,showCardPrice:C,showCardFinishes:n,showCardSizes:c,showCardBuy:f,showCardPage:D,imageSizes:s}),[o,t,e,m,u,_,E,i,C,n,c,f,D,s]);return l(T.Provider,{value:O,children:x})}function Z(){return G(T)}export{V as ProductCardChromeProvider,Z as useProductCardChrome};
@@ -1,8 +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 { SlotComponent } from "efficient-easel/blocks";
4
3
  import { type FieldUsageAnswer } from "../lib/content/field-usage.js";
5
- import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
6
4
  import type { CategorySourceValue } from "../lib/content/source-values.js";
7
5
  import type { ProductSummary, WheelSummary } from "../lib/api/index.js";
8
6
  export declare const TITLE_SIZES: readonly [{
@@ -45,22 +43,15 @@ interface Props {
45
43
  catalog?: ProductSummary[];
46
44
  kinds?: string[];
47
45
  columns?: number;
46
+ columnsPhone?: unknown;
47
+ columnsTablet?: unknown;
48
48
  limit?: number;
49
49
  editing?: boolean;
50
50
  contentCapped?: boolean;
51
- imageBackground?: CardImageBackground;
52
- cardImage?: number | null;
53
51
  hover?: CardHoverDrawn;
54
- coverIndex?: number;
55
- indexBadge?: CardIndexFormat;
56
- outline?: CardOutline;
57
- showBadge?: boolean;
58
52
  fieldUsage?: readonly FieldUsageAnswer[];
59
- showCardPrice?: boolean;
60
- showCardFinishes?: boolean;
61
- showCardSizes?: boolean;
62
- showCardBuy?: boolean;
63
- showCardPage?: boolean;
53
+ ownerId?: string;
54
+ template?: SlotComponent;
64
55
  }
65
- export default function ProductGridSection({ num, catalog, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, limit, editing, contentCapped, imageBackground, hover, coverIndex, indexBadge, outline, showBadge, fieldUsage, showCardPrice, showCardFinishes, showCardSizes, showCardBuy, showCardPage, cardImage, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
56
+ export default function ProductGridSection({ num, catalog, kinds, title, titleSize, padTop, description, link, products: Products, wheels, source, columns, columnsPhone, columnsTablet, limit, editing, contentCapped, hover, fieldUsage, ownerId, template, gap: gapProp, gapPhone, }: Props): import("react").JSX.Element | null;
66
57
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as x,Fragment as Oe}from"react/jsx-runtime";import{GRID_CARD_SHOW as H}from"../lib/sections/card-show-defaults.js";import{useScopeClass as De}from"../lib/use-scope-class.js";import{useEffect as _,useMemo as p,useState as He}from"react";import{CARD_IMAGE_BG_OFF as Ge,resolveCardImageBackground as Ue}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as je}from"efficient-web-builder/format/lib/content/card-image-shape";import{containerGapProps as We,GAP_ZONE_CLASS as Xe}from"efficient-web-builder/format/lib/content/container-gap";import Ke from"next/link";import Ze from"./ProductCard.js";import{CARD_ROWS_GRID_CLASS as qe,cardRowsGap as Ve,cardRowsGridStyle as Ye}from"./WheelCardFrame.js";import{ProductCardChromeProvider as Je}from"./ProductCardChrome.js";import{gridClassImageSizes as Qe}from"../lib/sections/card-image-sizes.js";import{fillRowCss as er}from"../lib/sections/fill-row.js";import{noHoleBands as re,noHoleCss as te,showsASetCard as se}from"../lib/sections/grid-no-hole.js";import{setIsWide as rr,summarySetBuild as tr}from"../lib/wheels/set-mode.js";import{answersForKind as ie}from"../lib/content/field-usage.js";import{wheelCardEyebrowShows as sr}from"./ProductCardEyebrow.js";import ir from"./NoCurrencyNote.js";import{DEFAULT_CARD_OUTLINE as nr,cardIndexCss as or,parseCardIndexFormat as ar}from"efficient-web-builder/format/lib/sections/product-card-style";import{DEFAULT_COVER_INDEX as lr}from"../lib/wheels/cover-rendering.js";import{SITE_WIDTH_CAP as dr,centredCap as mr}from"efficient-web-builder/format/lib/content/page-width";import{ProductCatalogProvider as cr,SectionWheelsProvider as pr}from"./ProductRef.js";import{useCurrency as gr}from"./CurrencyContext.js";import{COLLECTION_ATTR as ur,useCatalogFilter as hr}from"./catalog/CatalogFilterContext.js";import fr from"./SectionBand.js";import{useInsideSiteGutter as xr}from"efficient-web-builder/render/components/SiteGutterFrame";import{renderGold as G,renderHeadline as wr}from"efficient-web-builder/render/components/goldPhrases";import{applyCatalogFilters as vr}from"../lib/wheels/catalog-filters.js";import{normalizeCatalogRows as yr}from"../lib/wheels/wheel-summary-casing.js";import Cr from"./TyreSummaryCard.js";import{itemKind as U,plpKindNoun as br}from"../lib/catalog/plp-item.js";import{filterBarCategoryOf as Sr,gridKindsOf as Mr,gridRowsOf as $r}from"../lib/wheels/grid-source.js";import{useUnifiedProductCatalog as Nr}from"./useProductCatalog.js";import{STICKY_UNDERHEADER_CLASS as _r}from"efficient-web-builder/render/lib/document/header-clearance";import{finishFamiliesOf as Er}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as Tr}from"../lib/wheels/lug-count.js";import{diametersOf as zr}from"../lib/wheels/size-range.js";import{say as Lr}from"efficient-web-builder/format/lib/editor-words";import{DEFAULT_TITLE_SIZE as Ir}from"../lib/sections/product-grid-title.js";const i={headingMediumUpTo800Xs:"max-view-wide:text-[length:var(--size-headingMedium,28px)]",headingMediumUpTo800Small:"max-view-wide:text-[length:var(--size-headingMedium,32px)]",headingMediumUpTo800Large:"max-view-wide:text-[length:var(--size-headingMedium,36px)]",headingMediumUpTo800Xl:"max-view-wide:text-[length:var(--size-headingMedium,40px)]",body:"text-[length:var(--size-body,13px)]",headingMedium1:"text-[length:var(--size-headingMedium,40px)]",headingMedium2:"text-[length:var(--size-headingMedium,48px)]",headingMedium3:"text-[length:var(--size-headingMedium,56px)]",headingMedium4:"text-[length:var(--size-headingMedium,64px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},ne={1:"grid-cols-1",2:"grid-cols-2 max-view-wide:grid-cols-1",3:"grid-cols-3 max-view-wide:grid-cols-1",4:"grid-cols-4 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1",5:"grid-cols-5 max-view-desktop:grid-cols-2 max-view-wide:grid-cols-1",6:"grid-cols-6 max-view-desktop:grid-cols-3 max-view-wide:grid-cols-1"},oe=[{value:"para",label:"Paragraph size — 13px",cls:`font-mono font-normal uppercase tracking-[0.22em] ${i.labelLarge}`},{value:"sm",label:"Small — 40px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium1} ${i.headingMediumUpTo800Xs}`},{value:"md",label:"Medium — 48px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium2} ${i.headingMediumUpTo800Small}`},{value:"lg",label:"Large — 56px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium3} ${i.headingMediumUpTo800Large}`},{value:"xl",label:"Extra large — 64px",cls:`font-heading2 font-medium tracking-[-0.03em] ${i.headingMedium4} ${i.headingMediumUpTo800Xl}`}];function Pr(w){return(oe.find(g=>g.value===w)??oe.find(g=>g.value===Ir)).cls}function Ar({num:w,catalog:g,kinds:E,title:T,titleSize:ae,padTop:j,description:C,link:v,products:le,wheels:de,source:d,columns:me,limit:n,editing:y,contentCapped:ce=!1,imageBackground:pe,hover:ge,coverIndex:ue,indexBadge:he,outline:fe,showBadge:xe,fieldUsage:u,showCardPrice:we,showCardFinishes:ve,showCardSizes:ye,showCardBuy:Ce,showCardPage:be,cardImage:Se,gap:Me,gapPhone:$e}){const z=p(()=>u?ie(u,"alloy-wheel"):void 0,[u]),Ne=p(()=>u?ie(u,"tyre"):void 0,[u]),e=De("pg"),m=ne[Math.min(6,Math.max(1,me??4))]??ne[4],W=typeof n=="number"&&n>0,X=ce,_e=xr(),K=Nr(y===!0&&!!d),a=p(()=>d?yr($r(d,E,K??g??[])):null,[g,K,d,E]),c=Sr(d),h=c!==null,{filters:b,reportCount:L,reportLugs:I,reportSizes:P,reportFinishes:A,reportCategories:R,vehicle:Z}=hr(),{currency:B}=gr(),k=h&&!!b.process&&b.process!==c,t=p(()=>a?h?vr(a,b,B,Z.fit):a:null,[a,h,b,B,Z.fit]);_(()=>(R(e,c===null?[]:[c]),()=>R(e,[])),[c,R,e]),_(()=>{if(h)return L(e,k?0:t?.length??0),()=>L(e,0)},[h,k,t,L,e]);const Ee=p(()=>{const s=(t??[]).filter(l=>U(l)!=="tyre");if(s.length===0)return!1;const o=s.some(l=>!!l.process);return s.some(l=>!!l.setWords)||sr({kind:!1,brand:!1,process:o},z??[])},[t,z]),S=p(()=>({lugs:Tr(a??[]),sizes:zr(a??[]),finishes:Er(a??[])}),[a]);_(()=>(I(e,S.lugs),P(e,S.sizes),A(e,S.finishes),()=>{I(e,[]),P(e,[]),A(e,[])}),[S,I,P,A,e]);const f=We("ProductGrid",Me,"both",$e),q=f.className.includes(Xe),F=`${e} grid${f.className} bg-[var(--catalog-grid-bg)] ${m}`,Te=q?`${F} ${qe}`:F,ze=q?{...f.style,...Ye(Ve(f))}:f.style,Le=t?t.length>0?r("div",{className:Te,style:ze,children:t.map((s,o)=>U(s)==="tyre"?r(Cr,{item:s,currency:B,editing:y,fieldUsage:Ne},`tyre:${s.slug}-${o}`):r(Ze,{wheel:s,variant:"catalog"},`${s.slug}-${o}`))}):y?r("div",{className:"flex min-h-[320px] items-center justify-center rounded bg-surface-2 p-4 text-center",children:r("span",{className:`font-mono ${i.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:Lr("No products in “{name}” yet",{name:d?.name??""})})}):null:r(le,{className:F,style:f.style,minEmptyHeight:320}),M=t?t.length:null,V=br(Mr(d,E)),Ie=w||T||C||v?x("div",{className:`${_r} sticky top-[var(--sf-header-h,88px)] z-30 mb-5 flex items-center justify-between gap-4 max-view-wide:flex-wrap max-view-wide:gap-y-2 border-b border-line bg-bg/95 py-3 backdrop-blur-md ${X||_e?"":"-mx-[var(--sf-site-gutter,40px)] px-[var(--sf-site-gutter,40px)] max-view-wide:-mx-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]"}`,children:[x("div",{className:"flex min-w-0 items-end gap-6 max-view-wide:flex-col max-view-wide:items-stretch max-view-wide:gap-3",children:[w&&r("span",{className:`font-mono ${i.labelLarge} leading-none uppercase tracking-[0.22em] text-fg-dim`,children:G(w)}),T&&r("h2",{className:`${Pr(ae)} leading-none text-fg max-view-wide:leading-[1] [&>span]:block`,children:wr(T,!1)})]}),(C||v||M!==null)&&x("div",{className:"flex items-center gap-5 max-view-wide:gap-3 view-wide:grow view-wide:justify-end",children:[C&&r("span",{className:`max-w-[340px] truncate font-display ${i.body} leading-[1.4] text-fg-dim max-view-wide:hidden view-wide:w-0 view-wide:grow view-wide:text-right`,children:G(C)}),v&&x(Ke,{href:v.href,className:`inline-flex items-center gap-2 whitespace-nowrap font-mono ${i.labelLarge} uppercase tracking-[0.2em] text-fg-dim transition-colors hover:text-fg`,children:[G(v.text),r("span",{"aria-hidden":!0,children:"→"})]}),M!==null&&x("span",{className:`whitespace-nowrap font-mono ${i.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:[M," ",M===1?V.one:V.many]})]})]}):null,Pe=typeof j=="number"?{"--pg-pt":`${j}px`}:{},Y=ar(he),$=p(()=>{if(!t)return null;const s=t.map(o=>U(o)!=="tyre"&&rr(tr(o))?2:1);return se(s,n)?re(m,s,n):null},[t,m,n]),[Ae,Re]=He("");_(()=>{if(t)return;const s=document.querySelector(`.${e}`);if(!s)return;const o=()=>{const l=[...s.children].map(Fe=>Fe.classList.contains("col-span-2")?2:1);Re(se(l,n)?te(e,re(m,l,n,!1),l.length):"")};o();const D=new MutationObserver(o);return D.observe(s,{childList:!0}),()=>D.disconnect()},[t,e,m,n]);const Be=$?$[0].tracks:t?W?Math.min(t.length,n):t.length:void 0,N=$?te(e,$,t.length):Ae,J=N?"":er(e,m,{limit:n,cards:t?.length}),Q=or(e,Y),ee=x(Oe,{children:[W&&!N&&r("style",{children:`.${e} > *:nth-child(n+${n+1}){display:none}`}),N&&r("style",{children:N}),J&&r("style",{children:J}),Q&&r("style",{children:Q}),Ie,Le,r(ir,{editing:y})]});if(k)return null;const O=r(fr,{attrs:h&&c!==null?{[ur]:c}:void 0,className:"relative z-[2] bg-bg px-[var(--sf-site-gutter,40px)] pt-[var(--pg-pt)] pb-[120px] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:pt-[70px] max-view-wide:pb-[70px]",column:null,style:{...Pe,...je(Se)},defaults:{"--pg-pt":"120px"},children:X?r("div",{style:mr(dr),children:ee}):ee}),ke=a?O:y?r(cr,{children:O}):r(pr,{wheels:de,children:O});return r(Je,{imageSizes:Qe(m,Be),imageBackgroundFill:Ue(pe,Ge),hover:ge,coverIndex:ue??lr,indexBadge:Y,outline:fe??nr,showBadge:xe??!0,fieldUsage:z,reserveEyebrow:Ee,showCardPrice:we??!0,showCardFinishes:ve??!0,showCardSizes:ye??H.showCardSizes,showCardBuy:Ce??H.showCardBuy,showCardPage:be??H.showCardPage,children:ke})}export{oe as TITLE_SIZES,Ar as default};
1
+ "use client";import{jsx as r,jsxs as x,Fragment as Ie}from"react/jsx-runtime";import{useScopeClass as _e}from"../lib/use-scope-class.js";import{useEffect as T,useMemo as p,useState as He}from"react";import{cardHoverOf as Pe}from"efficient-web-builder/format/lib/animation/hover";import{containerGapProps as Be}from"efficient-web-builder/format/lib/content/container-gap";import Oe from"next/link";import{cardRowsGrid as Re,GridCardProvider as Ae,GridCards as Ge,gridIndexCss as ke}from"./GridCardTemplate.js";import{gridClassImageSizes as Fe}from"../lib/sections/card-image-sizes.js";import{fillRowCss as Ue}from"../lib/sections/fill-row.js";import{hiddenCardsRule as je,noHoleBands as J,noHoleCss as Q,showsASetCard as ee}from"../lib/sections/grid-no-hole.js";import{setIsWide as We,summarySetBuild as De}from"../lib/wheels/set-mode.js";import{answersForKind as re,NO_FIELD_ANSWERS as Ke}from"../lib/content/field-usage.js";import{wheelCardEyebrowShows as Xe}from"./ProductCardEyebrow.js";import Ze from"./NoCurrencyNote.js";import{SITE_WIDTH_CAP as qe,centredCap as Ve}from"efficient-web-builder/format/lib/content/page-width";import{ProductCatalogProvider as Ye,SectionWheelsProvider as Je}from"./ProductRef.js";import{useCurrency as Qe}from"./CurrencyContext.js";import{COLLECTION_ATTR as er,useCatalogFilter as rr}from"./catalog/CatalogFilterContext.js";import tr from"./SectionBand.js";import{useInsideBox as nr,useInsideSiteGutter as sr}from"efficient-web-builder/render/components/SiteGutterFrame";import{productGridColumnsClass as ir}from"../lib/sections/product-grid-columns.js";import{renderGold as k,renderHeadline as ar}from"efficient-web-builder/render/components/goldPhrases";import{applyCatalogFilters as or}from"../lib/wheels/catalog-filters.js";import{normalizeCatalogRows as lr}from"../lib/wheels/wheel-summary-casing.js";import dr from"./TyreSummaryCard.js";import{itemKind as F,plpKindNoun as mr}from"../lib/catalog/plp-item.js";import{filterBarCategoryOf as cr,gridKindsOf as pr,gridRowsOf as ur}from"../lib/wheels/grid-source.js";import{useUnifiedProductCatalog as gr}from"./useProductCatalog.js";import{STICKY_UNDERHEADER_CLASS as fr}from"efficient-web-builder/render/lib/document/header-clearance";import{finishFamiliesOf as hr}from"../lib/wheels/finish-defaults.js";import{lugCountsOf as xr}from"../lib/wheels/lug-count.js";import{diametersOf as wr}from"../lib/wheels/size-range.js";import{say as vr}from"efficient-web-builder/format/lib/editor-words";import{DEFAULT_TITLE_SIZE as yr}from"../lib/sections/product-grid-title.js";const br=Pe({},"ProductGrid"),s={headingMediumUpTo800Xs:"max-view-wide:text-[length:var(--size-headingMedium,28px)]",headingMediumUpTo800Small:"max-view-wide:text-[length:var(--size-headingMedium,32px)]",headingMediumUpTo800Large:"max-view-wide:text-[length:var(--size-headingMedium,36px)]",headingMediumUpTo800Xl:"max-view-wide:text-[length:var(--size-headingMedium,40px)]",body:"text-[length:var(--size-body,13px)]",headingMedium1:"text-[length:var(--size-headingMedium,40px)]",headingMedium2:"text-[length:var(--size-headingMedium,48px)]",headingMedium3:"text-[length:var(--size-headingMedium,56px)]",headingMedium4:"text-[length:var(--size-headingMedium,64px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},te=[{value:"para",label:"Paragraph size — 13px",cls:`font-mono font-normal uppercase tracking-[0.22em] ${s.labelLarge}`},{value:"sm",label:"Small — 40px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium1} ${s.headingMediumUpTo800Xs}`},{value:"md",label:"Medium — 48px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium2} ${s.headingMediumUpTo800Small}`},{value:"lg",label:"Large — 56px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium3} ${s.headingMediumUpTo800Large}`},{value:"xl",label:"Extra large — 64px",cls:`font-heading2 font-medium tracking-[-0.03em] ${s.headingMedium4} ${s.headingMediumUpTo800Xl}`}];function Cr(w){return(te.find(u=>u.value===w)??te.find(u=>u.value===yr)).cls}function Sr({num:w,catalog:u,kinds:z,title:E,titleSize:ne,padTop:U,description:b,link:v,products:se,wheels:ie,source:m,columns:ae,columnsPhone:oe,columnsTablet:le,limit:i,editing:g,contentCapped:de=!1,hover:me,fieldUsage:f,ownerId:ce="",template:pe,gap:ue,gapPhone:ge}){const L=p(()=>f?re(f,"alloy-wheel"):void 0,[f]),fe=p(()=>f?re(f,"tyre"):void 0,[f]),e=_e("pg"),d=ir(ae,oe,le),j=typeof i=="number"&&i>0,W=de,he=sr(),xe=nr(),we=he||xe,D=gr(g===!0&&!!m),o=p(()=>m?lr(ur(m,z,D??u??[])):null,[u,D,m,z]),c=cr(m),h=c!==null,{filters:C,reportCount:I,reportLugs:_,reportSizes:H,reportFinishes:P,reportCategories:B,vehicle:K}=rr(),{currency:O}=Qe(),R=h&&!!C.process&&C.process!==c,t=p(()=>o?h?or(o,C,O,K.fit):o:null,[o,h,C,O,K.fit]);T(()=>(B(e,c===null?[]:[c]),()=>B(e,[])),[c,B,e]),T(()=>{if(h)return I(e,R?0:t?.length??0),()=>I(e,0)},[h,R,t,I,e]);const S=p(()=>({lugs:xr(o??[]),sizes:wr(o??[]),finishes:hr(o??[])}),[o]);T(()=>(_(e,S.lugs),H(e,S.sizes),P(e,S.finishes),()=>{_(e,[]),H(e,[]),P(e,[])}),[S,_,H,P,e]);const A=Be("ProductGrid",ue,"both",ge),ve=`${e} grid${A.className} bg-[var(--catalog-grid-bg)] ${d}`,X=Re(A),ye=`${e} grid${X.className} bg-[var(--catalog-grid-bg)] ${d}`,be=X.style,Ce=p(()=>{const n=(t??[]).filter(l=>F(l)!=="tyre");if(n.length===0)return!1;const a=n.some(l=>!!l.process);return n.some(l=>!!l.setWords)||Xe({kind:!1,brand:!1,process:a},L??[])},[t,L]),Se=t?t.length>0?r("div",{className:ye,style:be,children:t.map((n,a)=>F(n)==="tyre"?r(dr,{item:n,currency:O,editing:g,fieldUsage:fe},`tyre:${n.slug}-${a}`):r(Ge,{wheels:[n],children:y=>y},`${n.slug}-${a}`))}):g?r("div",{className:"flex min-h-[320px] items-center justify-center rounded bg-surface-2 p-4 text-center",children:r("span",{className:`font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:vr("No products in “{name}” yet",{name:m?.name??""})})}):null:r(se,{className:ve,style:A.style,minEmptyHeight:320}),$=t?t.length:null,Z=mr(pr(m,z)),$e=w||E||b||v?x("div",{className:`${fr} sticky top-[var(--sf-header-h,88px)] z-30 mb-5 flex items-center justify-between gap-4 max-view-wide:flex-wrap max-view-wide:gap-y-2 border-b border-line bg-bg/95 py-3 backdrop-blur-md ${W||we?"":"-mx-[var(--sf-site-gutter,40px)] px-[var(--sf-site-gutter,40px)] max-view-wide:-mx-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))]"}`,children:[x("div",{className:"flex min-w-0 items-end gap-6 max-view-wide:flex-col max-view-wide:items-stretch max-view-wide:gap-3",children:[w&&r("span",{className:`font-mono ${s.labelLarge} leading-none uppercase tracking-[0.22em] text-fg-dim`,children:k(w)}),E&&r("h2",{className:`${Cr(ne)} leading-none text-fg max-view-wide:leading-[1] [&>span]:block`,children:ar(E,!1)})]}),(b||v||$!==null)&&x("div",{className:"flex items-center gap-5 max-view-wide:gap-3 view-wide:grow view-wide:justify-end",children:[b&&r("span",{className:`max-w-[340px] truncate font-display ${s.body} leading-[1.4] text-fg-dim max-view-wide:hidden view-wide:w-0 view-wide:grow view-wide:text-right`,children:k(b)}),v&&x(Oe,{href:v.href,className:`inline-flex items-center gap-2 whitespace-nowrap font-mono ${s.labelLarge} uppercase tracking-[0.2em] text-fg-dim transition-colors hover:text-fg`,children:[k(v.text),r("span",{"aria-hidden":!0,children:"→"})]}),$!==null&&x("span",{className:`whitespace-nowrap font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-fg-dim`,children:[$," ",$===1?Z.one:Z.many]})]})]}):null,Me=typeof U=="number"?{"--pg-pt":`${U}px`}:{},M=p(()=>{if(!t)return null;const n=t.map(a=>F(a)!=="tyre"&&We(De(a))?2:1);return ee(n,i)?J(d,n,i):null},[t,d,i]),[Ne,Te]=He("");T(()=>{if(t)return;const n=document.querySelector(`.${e}`);if(!n)return;const a=()=>{const l=[...n.children].map(Le=>Le.classList.contains("col-span-2")?2:1);Te(ee(l,i)?Q(e,J(d,l,i,!1),l.length):"")};a();const y=new MutationObserver(a);return y.observe(n,{childList:!0}),()=>y.disconnect()},[t,e,d,i]);const ze=M?M[0].tracks:t?j?Math.min(t.length,i):t.length:void 0,N=M?Q(e,M,t.length):Ne,q=N?"":Ue(e,d,{limit:i,cards:t?.length}),V=ke(e),Y=x(Ie,{children:[j&&!N&&r("style",{children:je(e,i+1)}),N&&r("style",{children:N}),q&&r("style",{children:q}),V&&r("style",{children:V}),$e,Se,r(Ze,{editing:g})]});if(R)return null;const G=r(tr,{attrs:h&&c!==null?{[er]:c}:void 0,className:"relative z-[2] bg-bg px-[var(--sf-site-gutter,40px)] pt-[var(--pg-pt)] pb-[120px] max-view-wide:px-[min(20px,var(--sf-site-gutter,40px))] max-view-wide:pt-[70px] max-view-wide:pb-[70px]",column:null,inAnyBox:!0,style:Me,defaults:{"--pg-pt":"120px"},children:W?r("div",{style:Ve(qe),children:Y}):Y}),Ee=o?G:g?r(Ye,{children:G}):r(Je,{wheels:ie,children:G});return r(Ae,{value:{ownerId:ce,Template:pe,hover:me??br,imageSizes:Fe(d,ze),fieldUsage:L??Ke,reserveEyebrow:Ce,editing:g===!0},children:Ee})}export{te as TITLE_SIZES,Sr as default};
@@ -1 +1 @@
1
- "use client";import{jsx as a}from"react/jsx-runtime";import{createContext as c,useContext as d,useEffect as g,useState as u}from"react";import m from"./ProductCard.js";import{loadProductCatalog as h}from"./useProductCatalog.js";import{say as f}from"efficient-web-builder/format/lib/editor-words";const i=c({wheels:[],loading:!1,live:!1});function p(e,t){return e.find(r=>r.designCode===t)??e.find(r=>r.slug===t)}function S({wheels:e,children:t}){return a(i.Provider,{value:{wheels:e??[],loading:!1,live:!0},children:t})}function b({children:e}){const[t,r]=u([]),[s,o]=u(!0);return g(()=>{let n=!1;return h().then(l=>{n||(r(l),o(!1))}).catch(()=>{n||o(!1)}),()=>{n=!0}},[]),a(i.Provider,{value:{wheels:t,loading:s,live:!1},children:e})}function v({code:e,finish:t,wheel:r}){const{wheels:s,loading:o,live:n}=d(i),l=r??(e?p(s,e):void 0);return l?a(m,{wheel:l,variant:"catalog",defaultFinish:t},`${l.slug}:${t??""}`):n?null:a("div",{className:"sf-card flex aspect-square w-full items-center justify-center bg-surface-2 p-4 text-center",children:a("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:o?f("Loading…"):e||f("Set a design code")})})}export{b as ProductCatalogProvider,S as SectionWheelsProvider,v as default,p as wheelForCode};
1
+ "use client";import{jsx as s}from"react/jsx-runtime";import{createContext as d,useContext as g,useEffect as h,useState as f}from"react";import{GridCards as m}from"./GridCardTemplate.js";import{loadProductCatalog as p}from"./useProductCatalog.js";import{say as u}from"efficient-web-builder/format/lib/editor-words";const a=d({wheels:[],loading:!1,live:!1});function x(e,t){return e.find(r=>r.designCode===t)??e.find(r=>r.slug===t)}function b({wheels:e,children:t}){return s(a.Provider,{value:{wheels:e??[],loading:!1,live:!0},children:t})}function y({children:e}){const[t,r]=f([]),[o,i]=f(!0);return h(()=>{let n=!1;return p().then(l=>{n||(r(l),i(!1))}).catch(()=>{n||i(!1)}),()=>{n=!0}},[]),s(a.Provider,{value:{wheels:t,loading:o,live:!1},children:e})}function v({code:e,finish:t,wheel:r}){const{wheels:o,loading:i,live:n}=g(a),l=r??(e?x(o,e):void 0);return l?s(m,{wheels:[l],finishes:[t],children:c=>c},`${l.slug}:${t??""}`):n?null:s("div",{className:"sf-card flex aspect-square w-full items-center justify-center bg-surface-2 p-4 text-center",children:s("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.2em] text-fg-dim",children:i?u("Loading…"):e||u("Set a design code")})})}export{y as ProductCatalogProvider,b as SectionWheelsProvider,v as default,x as wheelForCode};
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{Render as i}from"efficient-easel/render";import n from"./BoxHeaderBar.js";import{headerRenderConfig as s}from"../lib/document/render-config.js";import{migrateRenamedProps as p}from"efficient-web-builder/format/lib/document/renamed-props";function m({group:e}){const r=p({root:{props:{}},content:[e],zones:{}}),o=e.props??{};return t(n,{sticky:o.sticky,topTextColor:o.topTextColor,heightPx:o.heightPx,theme:o.sectionAccent,children:t(i,{config:s(),data:r})})}export{m as default};
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{Render as n}from"efficient-easel/render";import i from"./BoxHeaderBar.js";import{headerRenderConfig as p}from"../lib/document/render-config.js";import{migrateRenamedProps as m}from"efficient-web-builder/format/lib/document/renamed-props";import{chromeOwnWidth as s}from"efficient-web-builder/format/lib/content/section-width";function a({group:e}){const r=m({root:{props:{}},content:[e],zones:{}}),o=e.props??{};return t(i,{sticky:o.sticky,topTextColor:o.topTextColor,heightPx:o.heightPx,theme:o.sectionAccent,bandCapped:s(e.props??{}).background==="content",children:t(n,{config:p(),data:r})})}export{a as default};
@@ -1,6 +1,6 @@
1
1
  import type { CSSProperties, ReactNode } from "react";
2
2
  export { BAND_CAP } from "../lib/sections/section-band.js";
3
- export default function SectionBand({ className, capped, column, style, defaults, id, attrs, children, }: {
3
+ export default function SectionBand({ className, capped, column, style, defaults, id, attrs, inAnyBox, children, }: {
4
4
  className: string;
5
5
  capped?: boolean;
6
6
  column?: string | null;
@@ -8,5 +8,6 @@ export default function SectionBand({ className, capped, column, style, defaults
8
8
  defaults?: CSSProperties;
9
9
  id?: string;
10
10
  attrs?: Record<string, string>;
11
+ inAnyBox?: boolean;
11
12
  children?: ReactNode;
12
13
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as B}from"efficient-web-builder/format/lib/content/page-width";import{BAND_CAP as A,bandClassesInBox as d}from"../lib/sections/section-band.js";import C from"./SectionBandChoice.js";import{BAND_CAP as j}from"../lib/sections/section-band.js";function N({className:i,capped:p=!1,column:n=B,style:e,defaults:s,id:r,attrs:a,children:t}){const f=d(i),c=n===null?"":d(n),m=o("section",{...a,className:f||void 0,style:e,id:r,children:c?o("div",{className:c,children:t}):t}),l=s?{...s,...e}:e,x=o("section",{...a,className:p?`${A} ${i}`:i,style:l,id:r,children:n===null?t:o("div",{className:n,children:t})});return o(C,{inBox:m,atTop:x})}export{j as BAND_CAP,N as default};
1
+ import{jsx as o}from"react/jsx-runtime";import{EDITORIAL_COLUMN as A}from"efficient-web-builder/format/lib/content/page-width";import{BAND_CAP as C,bandClassesInBox as d}from"../lib/sections/section-band.js";import N from"./SectionBandChoice.js";import{BAND_CAP as v}from"../lib/sections/section-band.js";function _({className:e,capped:f=!1,column:n=A,style:i,defaults:s,id:a,attrs:r,inAnyBox:p=!1,children:t}){const l=d(e),c=n===null?"":d(n),m=o("section",{...r,className:l||void 0,style:i,id:a,children:c?o("div",{className:c,children:t}):t}),x=s?{...s,...i}:i,B=o("section",{...r,className:f?`${C} ${e}`:e,style:x,id:a,children:n===null?t:o("div",{className:n,children:t})});return o(N,{inBox:m,atTop:B,anyBox:p})}export{v as BAND_CAP,_ as default};
@@ -1,5 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- export default function SectionBandChoice({ inBox, atTop }: {
2
+ export default function SectionBandChoice({ inBox, atTop, anyBox }: {
3
3
  inBox: ReactNode;
4
4
  atTop: ReactNode;
5
+ anyBox?: boolean;
5
6
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{Fragment as r,jsx as n}from"react/jsx-runtime";import{useInsideSiteGutter as i}from"efficient-web-builder/render/components/SiteGutterFrame";function o({inBox:e,atTop:t}){return n(r,{children:i()?e:t})}export{o as default};
1
+ "use client";import{Fragment as o,jsx as r}from"react/jsx-runtime";import{useInsideBox as u,useInsideSiteGutter as a}from"efficient-web-builder/render/components/SiteGutterFrame";function c({inBox:e,atTop:t,anyBox:n=!1}){const i=a(),s=u();return r(o,{children:i||n&&s?e:t})}export{c as default};
@@ -1,9 +1,9 @@
1
1
  import type { SlotComponent } from "efficient-easel/blocks";
2
- export default function SectionGroupBody({ place, sections: Sections, editing, fullWidth, navTextCase, menuRow, }: {
2
+ export default function SectionGroupBody({ place, sections: Sections, editing, widths, navTextCase, menuRow, }: {
3
3
  place: "header" | "footer";
4
4
  sections: SlotComponent;
5
5
  editing?: boolean;
6
- fullWidth?: unknown;
6
+ widths: Readonly<Record<string, unknown>>;
7
7
  navTextCase?: unknown;
8
8
  menuRow?: unknown;
9
9
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as o}from"react/jsx-runtime";import{PhoneMenuToolsProvider as i}from"efficient-web-builder/render/components/PhoneMenuTools";import{resolveMenuRow as f,resolveNavTextCase as u}from"../lib/content/header-bar.js";function m({place:e,sections:r,editing:s=!1,fullWidth:n=!1,navTextCase:a,menuRow:d}){const t=o(e==="footer"?"footer":"div",{"data-section-group":e,...e==="header"?{"data-header-nav-case":u(a),"data-header-menu-row":f(d)??"top"}:null,className:s&&e==="footer"?"sf-theme-surfaces bg-bg text-fg":void 0,style:n===!0?{"--sf-site-width":"100vw"}:void 0,children:o(r,{minEmptyHeight:120})});return e==="header"?o(i,{children:t}):t}export{m as default};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{PhoneMenuToolsProvider as m}from"efficient-web-builder/render/components/PhoneMenuTools";import{SectionGroupWidthsProvider as h}from"efficient-web-builder/render/components/SiteGutterFrame";import{chromeOwnWidth as p}from"efficient-web-builder/format/lib/content/section-width";import{centredCap as g,SITE_WIDTH_CAP as v}from"efficient-web-builder/format/lib/content/page-width";import{resolveMenuRow as x,resolveNavTextCase as b}from"../lib/content/header-bar.js";function w({place:o,sections:d,editing:l=!1,widths:c,navTextCase:u,menuRow:i}){const a=o==="footer"?"footer":"div",n=p(c),t=n.content==="full"?"100vw":n.contentMax===null?null:`${n.contentMax}px`,r=o==="footer"&&n.background==="content"?g(v):null,f=t===null&&r===null?void 0:{...r,...t===null?null:{"--sf-site-width":t}},s=e(a,{"data-section-group":o,...o==="header"?{"data-header-nav-case":b(u),"data-header-menu-row":x(i)??"top"}:null,className:l&&o==="footer"?"sf-theme-surfaces bg-bg text-fg":void 0,style:f,children:e(h,{value:{background:n.background,content:n.content==="content"?"content":null},children:e(d,{minEmptyHeight:120})})});return o==="header"?e(m,{children:s}):s}export{w as default};
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from "react";
1
2
  import type { SpecDiagram } from "../lib/wheels/spec-sheet.js";
2
3
  export interface SpecRow {
3
4
  label?: string;
@@ -16,5 +17,6 @@ export interface SpecTableProps {
16
17
  omitHead?: boolean;
17
18
  template?: unknown;
18
19
  capped?: boolean;
20
+ footer?: ReactNode;
19
21
  }
20
- export default function SpecTable({ num, title, description, rows, builtInLabels, diagram, editing, omitHead, nodeId, capped, template, }: SpecTableProps): import("react").JSX.Element;
22
+ export default function SpecTable({ num, title, description, rows, builtInLabels, diagram, editing, omitHead, nodeId, capped, template, footer, }: SpecTableProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{Fragment as z,jsx as e,jsxs as l}from"react/jsx-runtime";import C from"./SectionBand.js";import{SPEC_TABLE_BAND as w}from"../lib/sections/spec-table-band.js";import{useScopeClass as I}from"../lib/use-scope-class.js";import{useState as B}from"react";import D from"efficient-web-builder/render/components/SectionHeader";import{CardTemplateRows as R}from"efficient-web-builder/render/components/CardRowContext";import j from"./WheelSvg.js";import{renderGold as _,renderHeadline as A}from"efficient-web-builder/render/components/goldPhrases";import{inchLabel as y}from"../lib/wheels/spec-format.js";import V from"./DimensionArrowMarkers.js";import W from"./SpecTablePartBridge.js";import{SPEC_REGION_ATTR as P}from"efficient-web-builder/format/lib/sections/spec-table-regions";import{say as T}from"efficient-web-builder/format/lib/editor-words";import{applyShopMark as M}from"efficient-web-builder/format/lib/markup";import{useEnglish as G}from"./EnglishVariant.js";import{sizedImage as H}from"efficient-web-builder/format/lib/sized-image";const $={between:"[&>*+*]:border-t [&>*+*]:border-line",every:"[&>*]:border-t [&>*]:border-line"},E="[&_sup.text-accent.tracking-normal]:static [&_sup.text-accent.tracking-normal]:align-baseline [&_sup.text-accent.tracking-normal]:[font-size:inherit] [&_sup.text-accent.tracking-normal]:text-current [&_sup.text-accent.tracking-normal]:tracking-[inherit]",O="(max-width: 1100px) 80vw, 290px",d={labelSmall:"text-[length:var(--size-label,11px)]",label:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,14px)]"};function r(i,a){return i?{[P]:a}:{}}function F({editing:i,nodeId:a,children:n}){return!i||!a?e(z,{children:n}):e(W,{nodeId:a,children:n})}function L({row:i,topBorder:a,editing:n}){return l("div",{className:`flex items-baseline justify-between gap-6 py-4 font-mono ${d.labelLarge} tracking-[0.05em] ${a?"border-t border-line":""}`,children:[e("span",{...r(n,"rowLabel"),className:"uppercase text-fg-dim",children:i.label}),e("span",{...r(n,"rowValue"),className:`text-right ${i.accent?"text-accent":"text-fg"}`,children:i.value})]})}function Y({diagram:i,editing:a}){const[n,x]=B(!1),o=I("spec"),{wheelName:p,imageSrc:s,diameter:f,width:g,offset:b,holes:v,pcd:S,spokes:m,mesh:c,bore:N}=i,u=!!s&&!n;return l("div",{className:"sf-card bg-surface p-6 max-view-desktop:mt-8",children:[e("div",{...r(a,"diagramTitle"),className:`mb-3 font-mono ${d.label} uppercase tracking-[0.25em] text-fg-dim`,children:"Wheel Dimension Diagram"}),l("div",{className:"relative flex aspect-square items-center justify-center",children:[l("svg",{viewBox:"0 0 320 320",className:"absolute inset-0 h-full w-full text-fg-dim",fill:"none",stroke:"currentColor",children:[e("line",{x1:40,y1:20,x2:280,y2:20,strokeWidth:1,markerStart:`url(#${o}-L)`,markerEnd:`url(#${o}-R)`}),e("line",{x1:40,y1:15,x2:40,y2:25,strokeWidth:1}),e("line",{x1:280,y1:15,x2:280,y2:25,strokeWidth:1}),e(V,{id:o})]}),u?e("img",{...H(s,{fallbackWidth:960}),sizes:O,alt:`${p} — face`,onError:()=>x(!0),loading:"lazy",className:"relative z-[1] block h-[80%] w-[80%] object-contain"}):e(j,{spokes:m,mesh:c,className:"relative z-[1] block h-[72%] w-[72%] text-accent"}),l("span",{...r(a,"diagramCallout"),className:`absolute top-1.5 left-1/2 z-20 -translate-x-1/2 bg-surface px-2 font-mono ${d.label} tracking-[0.2em] text-accent`,children:["⌀ ",y(f)]}),l("span",{...r(a,"diagramCallout"),className:`absolute bottom-1.5 left-1/2 z-20 -translate-x-1/2 bg-surface px-2 font-mono ${d.label} tracking-[0.2em] text-fg`,children:["WIDTH ",y(g)]})]}),l("div",{className:`mt-4 grid grid-cols-5 gap-3 font-mono ${d.labelSmall} uppercase tracking-[0.2em] text-fg-dim max-[480px]:grid-cols-3`,children:[l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Holes"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:v})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"PCD"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:S})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Spokes"}),l("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:[m,c?" + Mesh":""]})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Bore"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:N})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"ET"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-accent",children:b})]})]})]})}function Z({num:i,title:a,description:n,rows:x,builtInLabels:o=!1,diagram:p,editing:s=!1,omitHead:f=!1,nodeId:g,capped:b=!0,template:v}){const S=G(),m=(x??[]).filter(t=>(t?.label??"").trim()||(t?.value??"").trim()).map(t=>o&&t.label?{...t,label:S(t.label)}:t),c=m.length>0?m:s?[{label:T("Label"),value:T("Value")}]:[],N=c.map(t=>({label:t.label??"",value:t.accent&&t.value?M(t.value,0,t.value.length,"highlight").text:t.value??""})),u=t=>p?l("div",{className:"grid grid-cols-[1fr_400px] gap-12 max-view-desktop:grid-cols-1",children:[e("div",{className:t?`${$.between} ${E}`:void 0,children:t??c.map((k,h)=>e(L,{row:k,topBorder:h>0,editing:s},h))}),e(Y,{diagram:p,editing:s})]}):e("div",{className:`grid grid-cols-2 gap-x-16 max-[900px]:grid-cols-1${t?` ${$.every} ${E}`:""}`,children:t??c.map((k,h)=>e(L,{row:k,topBorder:!0,editing:s},h))});return e(C,{className:f?w.ownBox:w.inline,capped:b,children:l(F,{editing:s,nodeId:g,children:[f?null:e(D,{num:i?_(i):void 0,title:a?A(a,!1):void 0,description:n?_(n):void 0,accent:!0}),e(R,{ownerId:g??"",ownerType:"SpecTable",Template:v,rows:N,fallback:u(),children:t=>u(t)})]})})}export{Z as default};
1
+ "use client";import{Fragment as C,jsx as e,jsxs as l}from"react/jsx-runtime";import I from"./SectionBand.js";import{SPEC_TABLE_BAND as y}from"../lib/sections/spec-table-band.js";import{useScopeClass as B}from"../lib/use-scope-class.js";import{useState as D}from"react";import R from"efficient-web-builder/render/components/SectionHeader";import{CardTemplateRows as j}from"efficient-web-builder/render/components/CardRowContext";import A from"./WheelSvg.js";import{renderGold as _,renderHeadline as V}from"efficient-web-builder/render/components/goldPhrases";import{inchLabel as T}from"../lib/wheels/spec-format.js";import W from"./DimensionArrowMarkers.js";import P from"./SpecTablePartBridge.js";import{SPEC_REGION_ATTR as M}from"efficient-web-builder/format/lib/sections/spec-table-regions";import{say as $}from"efficient-web-builder/format/lib/editor-words";import{applyShopMark as G}from"efficient-web-builder/format/lib/markup";import{useEnglish as H}from"./EnglishVariant.js";import{sizedImage as O}from"efficient-web-builder/format/lib/sized-image";const E={between:"[&>*+*]:border-t [&>*+*]:border-line",every:"[&>*]:border-t [&>*]:border-line"},L="[&_sup.text-accent.tracking-normal]:static [&_sup.text-accent.tracking-normal]:align-baseline [&_sup.text-accent.tracking-normal]:[font-size:inherit] [&_sup.text-accent.tracking-normal]:text-current [&_sup.text-accent.tracking-normal]:tracking-[inherit]",F="(max-width: 1100px) 80vw, 290px",d={labelSmall:"text-[length:var(--size-label,11px)]",label:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,14px)]"};function r(i,a){return i?{[M]:a}:{}}function Y({editing:i,nodeId:a,children:n}){return!i||!a?e(C,{children:n}):e(P,{nodeId:a,children:n})}function z({row:i,topBorder:a,editing:n}){return l("div",{className:`flex items-baseline justify-between gap-6 py-4 font-mono ${d.labelLarge} tracking-[0.05em] ${a?"border-t border-line":""}`,children:[e("span",{...r(n,"rowLabel"),className:"uppercase text-fg-dim",children:i.label}),e("span",{...r(n,"rowValue"),className:`text-right ${i.accent?"text-accent":"text-fg"}`,children:i.value})]})}function Z({diagram:i,editing:a}){const[n,b]=D(!1),c=B("spec"),{wheelName:p,imageSrc:s,diameter:f,width:g,offset:v,holes:N,pcd:u,spokes:h,mesh:o,bore:m}=i,S=!!s&&!n;return l("div",{className:"sf-card bg-surface p-6 max-view-desktop:mt-8",children:[e("div",{...r(a,"diagramTitle"),className:`mb-3 font-mono ${d.label} uppercase tracking-[0.25em] text-fg-dim`,children:"Wheel Dimension Diagram"}),l("div",{className:"relative flex aspect-square items-center justify-center",children:[l("svg",{viewBox:"0 0 320 320",className:"absolute inset-0 h-full w-full text-fg-dim",fill:"none",stroke:"currentColor",children:[e("line",{x1:40,y1:20,x2:280,y2:20,strokeWidth:1,markerStart:`url(#${c}-L)`,markerEnd:`url(#${c}-R)`}),e("line",{x1:40,y1:15,x2:40,y2:25,strokeWidth:1}),e("line",{x1:280,y1:15,x2:280,y2:25,strokeWidth:1}),e(W,{id:c})]}),S?e("img",{...O(s,{fallbackWidth:960}),sizes:F,alt:`${p} — face`,onError:()=>b(!0),loading:"lazy",className:"relative z-[1] block h-[80%] w-[80%] object-contain"}):e(A,{spokes:h,mesh:o,className:"relative z-[1] block h-[72%] w-[72%] text-accent"}),l("span",{...r(a,"diagramCallout"),className:`absolute top-1.5 left-1/2 z-20 -translate-x-1/2 bg-surface px-2 font-mono ${d.label} tracking-[0.2em] text-accent`,children:["⌀ ",T(f)]}),l("span",{...r(a,"diagramCallout"),className:`absolute bottom-1.5 left-1/2 z-20 -translate-x-1/2 bg-surface px-2 font-mono ${d.label} tracking-[0.2em] text-fg`,children:["WIDTH ",T(g)]})]}),l("div",{className:`mt-4 grid grid-cols-5 gap-3 font-mono ${d.labelSmall} uppercase tracking-[0.2em] text-fg-dim max-[480px]:grid-cols-3`,children:[l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Holes"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:N})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"PCD"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:u})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Spokes"}),l("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:[h,o?" + Mesh":""]})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"Bore"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-fg",children:m})]}),l("div",{children:[e("div",{...r(a,"diagramStatLabel"),className:"text-fg-dim/60",children:"ET"}),e("div",{...r(a,"diagramStatValue"),className:"mt-1 text-accent",children:v})]})]})]})}function q({num:i,title:a,description:n,rows:b,builtInLabels:c=!1,diagram:p,editing:s=!1,omitHead:f=!1,nodeId:g,capped:v=!0,template:N,footer:u}){const h=H(),o=(b??[]).filter(t=>(t?.label??"").trim()||(t?.value??"").trim()).map(t=>c&&t.label?{...t,label:h(t.label)}:t),m=o.length>0?o:s?[{label:$("Label"),value:$("Value")}]:[],S=m.map(t=>({label:t.label??"",value:t.accent&&t.value?G(t.value,0,t.value.length,"highlight").text:t.value??""})),w=t=>p?l("div",{className:"grid grid-cols-[1fr_400px] gap-12 max-view-desktop:grid-cols-1",children:[e("div",{className:t?`${E.between} ${L}`:void 0,children:t??m.map((k,x)=>e(z,{row:k,topBorder:x>0,editing:s},x))}),e(Z,{diagram:p,editing:s})]}):e("div",{className:`grid grid-cols-2 gap-x-16 max-[900px]:grid-cols-1${t?` ${E.every} ${L}`:""}`,children:t??m.map((k,x)=>e(z,{row:k,topBorder:!0,editing:s},x))});return e(I,{className:f?y.ownBox:y.inline,capped:v,children:l(Y,{editing:s,nodeId:g,children:[f?null:e(R,{num:i?_(i):void 0,title:a?V(a,!1):void 0,description:n?_(n):void 0,accent:!0}),e(j,{ownerId:g??"",ownerType:"SpecTable",Template:N,rows:S,fallback:w(),children:t=>w(t)}),u===void 0?null:e("div",{className:"mt-12 empty:hidden",children:u})]})})}export{q as default};
@@ -1,4 +1,4 @@
1
- import type { ComponentProps, ReactNode } from "react";
1
+ import { type ComponentProps, type ReactNode } from "react";
2
2
  import { CatalogFilterLabelsProvider } from "./catalog/CatalogFilterLabels.js";
3
3
  import { SiteMenuLinksProvider } from "./catalog/SiteMenuLinks.js";
4
4
  import { CurrencyProvider } from "./CurrencyContext.js";
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{CartProvider as l}from"./CartContext.js";import{CatalogFilterLabelsProvider as d}from"./catalog/CatalogFilterLabels.js";import{SiteMenuLinksProvider as a}from"./catalog/SiteMenuLinks.js";import{CurrencyProvider as s}from"./CurrencyContext.js";import{EnglishVariantProvider as c}from"./EnglishVariant.js";import{SearchProvider as f}from"./SearchContext.js";import{SubscribePopupProvider as h}from"./SubscribePopupContext.js";import{WishlistProvider as p}from"./WishlistContext.js";import{normalizeEnglishVariant as u}from"../lib/content/english-variant.js";function v({catalogFilterLabels:i,englishVariant:o,menuItems:e,currency:t,searchShortcut:m=!0,children:n}){return r(c,{variant:u(o),children:r(d,{labels:i,children:r(a,{items:e,children:r(s,{...t,children:r(h,{children:r(p,{children:r(l,{children:r(f,{shortcut:m,children:n})})})})})})})})}export{v as default};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{useMemo as u}from"react";import{usePathname as c}from"next/navigation";import{SiteRuntimeProvider as p,useSiteRuntime as h}from"efficient-web-builder/render/lib/site-runtime";import{CartProvider as f}from"./CartContext.js";import{CatalogFilterLabelsProvider as P}from"./catalog/CatalogFilterLabels.js";import{SiteMenuLinksProvider as v}from"./catalog/SiteMenuLinks.js";import{CurrencyProvider as g}from"./CurrencyContext.js";import{EnglishVariantProvider as S}from"./EnglishVariant.js";import{SearchProvider as b}from"./SearchContext.js";import{SubscribePopupProvider as x}from"./SubscribePopupContext.js";import{WishlistProvider as C}from"./WishlistContext.js";import{normalizeEnglishVariant as j}from"../lib/content/english-variant.js";function E({catalogFilterLabels:o,englishVariant:t,menuItems:n,currency:m,searchShortcut:a=!0,children:d}){const e=h(),l=c(),i=e.pagePath!==void 0?e.pagePath:l??null,s=u(()=>({...e,pagePath:i}),[e,i]);return r(p,{runtime:s,children:r(S,{variant:j(t),children:r(P,{labels:o,children:r(v,{items:n,children:r(g,{...m,children:r(x,{children:r(C,{children:r(f,{children:r(b,{shortcut:a,children:d})})})})})})})})})}export{E as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as r,Fragment as C}from"react/jsx-runtime";import A from"next/link";import w from"./TyreImage.js";import{priceIn as $,UNPRICED_LABEL as T}from"../lib/wheels/price-display.js";import{keepForSpec as j}from"../lib/content/field-usage.js";import{stockWord as D}from"../lib/content/stock-words.js";import{CARD_INDEX_BADGE_CLASS as I,CARD_INDEX_CLASS as R,cardOutlineClass as k}from"efficient-web-builder/format/lib/sections/product-card-style";const s={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},B=[],F="View tyre",P="flex flex-col bg-[var(--card-bg)] p-5";function g(l,n){const a=l?k(l):"";return[P,n?"relative":"",a].filter(Boolean).join(" ")}function V({outline:l,showIndex:n=!1,size:a,specs:t,prices:x,image:h,inStock:o,href:c,linkLabel:u=F,imageSizes:b="(max-width: 720px) 100vw, (max-width: 1100px) 50vw, 33vw",fieldUsage:N=B,currency:S,formatPrice:_}){const m=$(x,S),v=m===null?T:_(m),y=j(N),d=[["load_index","Load index",t.loadIndex],["speed_rating","Speed",t.speedRating],["construction","Construction",t.construction],["tire_type","Type",t.tireType]].filter(([,,i])=>!!i).filter(([i])=>y(i)),p=r(C,{children:[e(w,{image:h,size:a,type:t.tireType,sizes:b}),e("h3",{className:`mt-4 font-heading3 ${s.headingSmall} font-medium leading-tight`,children:a}),t.treadPattern?e("div",{className:`mt-1 font-mono ${s.labelSmall} uppercase tracking-[0.18em] text-accent`,children:t.treadPattern}):null,d.length>0&&e("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${s.labelSmall}`,children:d.map(([i,E,L])=>r("div",{className:"flex items-baseline justify-between gap-3",children:[e("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:E}),e("dd",{className:"text-right text-fg",children:L})]},i))}),r("div",{className:`mt-4 flex items-baseline justify-between gap-3 border-t border-line pt-3 font-mono ${s.labelLarge}`,children:[e("span",{className:"text-fg",children:v}),e("span",{style:o?{color:"var(--green)"}:void 0,className:o?void 0:"text-fg-dim",children:D(o)})]})]}),f=n?e("span",{"aria-hidden":!0,className:`${R} ${I}`}):null;return c?r(A,{href:c,"aria-label":a?`View ${a} tyre`:"View this tyre",className:`group ${g(l,n)}`,children:[f,p,r("span",{className:`mt-3 inline-flex items-center gap-2 font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-accent transition-colors group-hover:text-fg`,children:[u,e("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]}):r("div",{className:g(l,n),children:[f,p]})}export{V as default};
1
+ "use client";import{jsx as e,jsxs as r,Fragment as C}from"react/jsx-runtime";import A from"next/link";import w from"./TyreImage.js";import{priceIn as $,UNPRICED_LABEL as j}from"../lib/wheels/price-display.js";import{NO_FIELD_ANSWERS as D,keepForSpec as I}from"../lib/content/field-usage.js";import{stockWord as R}from"../lib/content/stock-words.js";import{CARD_INDEX_BADGE_CLASS as T,CARD_INDEX_CLASS as k,cardOutlineClass as B}from"efficient-web-builder/format/lib/sections/product-card-style";const s={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},F="View tyre",V="flex flex-col bg-[var(--card-bg)] p-5";function g(l,n){const a=l?B(l):"";return[V,n?"relative":"",a].filter(Boolean).join(" ")}function P({outline:l,showIndex:n=!1,size:a,specs:t,prices:x,image:h,inStock:o,href:m,linkLabel:u=F,imageSizes:b="(max-width: 720px) 100vw, (max-width: 1100px) 50vw, 33vw",fieldUsage:N=D,currency:S,formatPrice:_}){const c=$(x,S),v=c===null?j:_(c),y=I(N),d=[["load_index","Load index",t.loadIndex],["speed_rating","Speed",t.speedRating],["construction","Construction",t.construction],["tire_type","Type",t.tireType]].filter(([,,i])=>!!i).filter(([i])=>y(i)),p=r(C,{children:[e(w,{image:h,size:a,type:t.tireType,sizes:b}),e("h3",{className:`mt-4 font-heading3 ${s.headingSmall} font-medium leading-tight`,children:a}),t.treadPattern?e("div",{className:`mt-1 font-mono ${s.labelSmall} uppercase tracking-[0.18em] text-accent`,children:t.treadPattern}):null,d.length>0&&e("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${s.labelSmall}`,children:d.map(([i,E,L])=>r("div",{className:"flex items-baseline justify-between gap-3",children:[e("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:E}),e("dd",{className:"text-right text-fg",children:L})]},i))}),r("div",{className:`mt-4 flex items-baseline justify-between gap-3 border-t border-line pt-3 font-mono ${s.labelLarge}`,children:[e("span",{className:"text-fg",children:v}),e("span",{style:o?{color:"var(--green)"}:void 0,className:o?void 0:"text-fg-dim",children:R(o)})]})]}),f=n?e("span",{"aria-hidden":!0,className:`${k} ${T}`}):null;return m?r(A,{href:m,"aria-label":a?`View ${a} tyre`:"View this tyre",className:`group ${g(l,n)}`,children:[f,p,r("span",{className:`mt-3 inline-flex items-center gap-2 font-mono ${s.labelSmall} uppercase tracking-[0.2em] text-accent transition-colors group-hover:text-fg`,children:[u,e("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]}):r("div",{className:g(l,n),children:[f,p]})}export{P as default};
@@ -1,8 +1,9 @@
1
1
  import { type TyreFitAnswer } from "../lib/tyres/tyre-vehicle-fitment.js";
2
2
  import type { TyreVariant } from "../lib/api/index.js";
3
- export default function TyreFitVerdicts({ variants, answer, loading, onRetry, }: {
3
+ export default function TyreFitVerdicts({ variants, answer, loading, onRetry, headline, }: {
4
4
  variants: TyreVariant[];
5
5
  answer: TyreFitAnswer | null;
6
6
  loading?: boolean;
7
7
  onRetry?: () => void;
8
+ headline?: string;
8
9
  }): import("react").JSX.Element | null;
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{TYRE_FIT_LABEL as m,tyreFitHeadline as d}from"../lib/tyres/tyre-fit-copy.js";import{variantFitStatus as g}from"../lib/tyres/tyre-vehicle-fitment.js";const t={body:"text-[length:var(--size-body,18px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},p={fits:{className:"font-medium",style:{color:"var(--green)"}},doesNotFit:{className:"text-fg-dim"},unknown:{className:"text-fg-dim"}};function u({variants:c,answer:l,loading:o=!1,onRetry:s}){return l?i("div",{className:"mt-10",children:[e("p",{className:`max-w-[68ch] font-serif ${t.body} italic leading-[1.55] text-fg-dim`,children:d(l)}),l.failed&&s?e("button",{type:"button",onClick:s,className:`mt-4 cursor-pointer font-mono ${t.labelLarge} uppercase tracking-[0.18em] text-accent underline-offset-4 hover:underline`,children:"Try again"}):null,e("ul",{className:"mt-6 grid gap-[2px] border border-line bg-line",children:c.map(a=>{const r=g(l,a.sku),n=p[r];return i("li",{className:"flex items-baseline justify-between gap-6 bg-bg px-5 py-4",children:[e("span",{className:`font-mono ${t.labelLarge} uppercase tracking-[0.14em] text-fg`,children:a.size}),e("span",{className:`font-mono ${t.labelSmall} uppercase tracking-[0.24em] ${n.className}`,style:n.style,children:m[r]})]},a.sku)})})]}):o?e("p",{className:`mt-10 border border-line bg-bg p-6 font-mono ${t.labelLarge} uppercase tracking-[0.24em] text-fg-dim`,children:"Checking your car…"}):null}export{u as default};
1
+ "use client";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{TYRE_FIT_LABEL as d,tyreFitHeadline as g}from"../lib/tyres/tyre-fit-copy.js";import{variantFitStatus as p}from"../lib/tyres/tyre-vehicle-fitment.js";const t={body:"text-[length:var(--size-body,18px)]",labelSmall:"text-[length:var(--size-label,12px)]",labelLarge:"text-[length:var(--size-label,13px)]"},u={fits:{className:"font-medium",style:{color:"var(--green)"}},doesNotFit:{className:"text-fg-dim"},unknown:{className:"text-fg-dim"}};function f({variants:c,answer:l,loading:o=!1,onRetry:s,headline:m}){return l?i("div",{className:"mt-10",children:[e("p",{className:`max-w-[68ch] font-serif ${t.body} italic leading-[1.55] text-fg-dim`,children:m??g(l)}),l.failed&&s?e("button",{type:"button",onClick:s,className:`mt-4 cursor-pointer font-mono ${t.labelLarge} uppercase tracking-[0.18em] text-accent underline-offset-4 hover:underline`,children:"Try again"}):null,e("ul",{className:"mt-6 grid gap-[2px] border border-line bg-line",children:c.map(a=>{const r=p(l,a.sku),n=u[r];return i("li",{className:"flex items-baseline justify-between gap-6 bg-bg px-5 py-4",children:[e("span",{className:`font-mono ${t.labelLarge} uppercase tracking-[0.14em] text-fg`,children:a.size}),e("span",{className:`font-mono ${t.labelSmall} uppercase tracking-[0.24em] ${n.className}`,style:n.style,children:d[r]})]},a.sku)})})]}):o?e("p",{className:`mt-10 border border-line bg-bg p-6 font-mono ${t.labelLarge} uppercase tracking-[0.24em] text-fg-dim`,children:"Checking your car…"}):null}export{f as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import w from"./BrandPlate.js";import g from"./card-pieces/CardBuyButton.js";import C from"./card-pieces/CardFinishSwatches.js";import P from"./card-pieces/CardPrice.js";import b from"./card-pieces/CardSizes.js";import{TyreCardStateProvider as x,useProductCardState as S}from"./card-pieces/ProductCardState.js";import{productCardEyebrow as z}from"./ProductCardEyebrow.js";import B from"./TyreImage.js";import k from"./WheelCardFrame.js";import{keepForCard as T}from"../lib/content/field-usage.js";import{tyreModelLine as L}from"../lib/tyres/tyre-brand-name.js";import{formatSizeRange as E}from"../lib/wheels/size-range.js";const F=[];function j({brand:i,brandLogo:m,brandPlate:s=!0,kindLabel:l=null,showBrand:a=!0,name:d,slug:p,sizes:e,fitSize:t=null,rimDiameters:u,prices:c,image:o,currency:f,editing:h=!1,fieldUsage:n=F}){return r(x,{tyre:{brand:i,brandLogo:m,name:d,slug:p,sizes:e,fitSize:t,rimDiameters:u,prices:c,image:o},currency:f,editing:h,children:r(v,{brandPlate:s,kindLabel:l,showBrand:a,fieldUsage:n})})}function v({brandPlate:i,kindLabel:m,showBrand:s,fieldUsage:l}){const a=S();if(a.kind!=="tyre")throw new Error("TyrePlpCard drew outside its own tyre state.");const{tyre:d,pagePath:p,arm:e}=a,{brand:t,brandLogo:u,name:c,sizes:o,rimDiameters:f,image:h}=d,n=T(l),y=[o.length>0?`${o.length} ${o.length===1?"size":"sizes"}`:null,n("rim_diameter")?E(f):null].filter(Boolean).join(" · ");return r(k,{href:p,identityLink:!0,containerProps:{onPointerEnter:e,onTouchStart:e,onFocusCapture:e},image:r(B,{image:h,className:"h-full w-full",sizes:"(max-width: 640px) 90vw, (max-width: 1024px) 45vw, 280px",showBackground:!1}),plate:i?r(w,{brand:t,logo:u}):null,eyebrow:z(m,s&&n("brand")&&t||null),name:L(t??"",c),spec:y,price:r(P,{}),swatches:r(C,{}),sizes:r(b,{}),buy:r(g,{})})}export{j as default};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import w from"./BrandPlate.js";import g from"./card-pieces/CardBuyButton.js";import C from"./card-pieces/CardFinishSwatches.js";import P from"./card-pieces/CardPrice.js";import b from"./card-pieces/CardSizes.js";import{TyreCardStateProvider as x,useProductCardState as S}from"./card-pieces/ProductCardState.js";import{productCardEyebrow as z}from"./ProductCardEyebrow.js";import B from"./TyreImage.js";import k from"./WheelCardFrame.js";import{keepForCard as L,NO_FIELD_ANSWERS as T}from"../lib/content/field-usage.js";import{tyreModelLine as E}from"../lib/tyres/tyre-brand-name.js";import{formatSizeRange as F}from"../lib/wheels/size-range.js";function _({brand:n,brandLogo:m,brandPlate:l=!0,kindLabel:s=null,showBrand:a=!0,name:d,slug:p,sizes:e,fitSize:t=null,rimDiameters:u,prices:f,image:o,currency:c,editing:h=!1,fieldUsage:i=T}){return r(x,{tyre:{brand:n,brandLogo:m,name:d,slug:p,sizes:e,fitSize:t,rimDiameters:u,prices:f,image:o},currency:c,editing:h,children:r(j,{brandPlate:l,kindLabel:s,showBrand:a,fieldUsage:i})})}function j({brandPlate:n,kindLabel:m,showBrand:l,fieldUsage:s}){const a=S();if(a.kind!=="tyre")throw new Error("TyrePlpCard drew outside its own tyre state.");const{tyre:d,pagePath:p,arm:e}=a,{brand:t,brandLogo:u,name:f,sizes:o,rimDiameters:c,image:h}=d,i=L(s),y=[o.length>0?`${o.length} ${o.length===1?"size":"sizes"}`:null,i("rim_diameter")?F(c):null].filter(Boolean).join(" · ");return r(k,{href:p,identityLink:!0,containerProps:{onPointerEnter:e,onTouchStart:e,onFocusCapture:e},image:r(B,{image:h,className:"h-full w-full",sizes:"(max-width: 640px) 90vw, (max-width: 1024px) 45vw, 280px",showBackground:!1}),plate:n?r(w,{brand:t,logo:u}):null,eyebrow:z(m,l&&i("brand")&&t||null),name:E(t??"",f),spec:y,price:r(P,{}),swatches:r(C,{}),sizes:r(b,{}),buy:r(g,{})})}export{_ as default};
@@ -0,0 +1,17 @@
1
+ import type { FieldUsageAnswer } from "../lib/content/field-usage.js";
2
+ import type { TyreVariant } from "../lib/api/index.js";
3
+ export declare const TYRE_SIZES_HEAD: {
4
+ readonly title: "Available *sizes.*";
5
+ readonly description: "Every size this tyre is made in, with its own price and stock.";
6
+ };
7
+ export interface TyreSizesContentProps {
8
+ variants: readonly TyreVariant[];
9
+ fieldUsage: readonly FieldUsageAnswer[];
10
+ num?: string;
11
+ title?: string;
12
+ description?: string;
13
+ editing?: boolean;
14
+ omitHead?: boolean;
15
+ keepHiddenHead?: boolean;
16
+ }
17
+ export declare function TyreSizesContent({ variants, fieldUsage, num, title, description, editing, omitHead, keepHiddenHead, }: TyreSizesContentProps): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as r,jsxs as f}from"react/jsx-runtime";import u from"./SectionBand.js";import w from"./SectionFootnote.js";import T from"efficient-web-builder/render/components/SectionHeader";import _ from"./TyreCard.js";import{useCurrency as k}from"./CurrencyContext.js";import{renderGold as x,renderHeadline as z}from"efficient-web-builder/render/components/goldPhrases";import{TYRE_ILLUSTRATION_NOTE as E}from"../lib/wheels/tyre-render.js";import{say as A}from"efficient-web-builder/format/lib/editor-words";const g="border-b border-line py-[120px] max-view-desktop:py-20",h="border-b border-line pt-0 pb-[120px] max-view-desktop:pt-0 max-view-desktop:pb-20",b={title:"Available *sizes.*",description:"Every size this tyre is made in, with its own price and stock."};function P({variants:i,fieldUsage:s,num:o,title:n,description:e,editing:y=!1,omitHead:c=!1,keepHiddenHead:N=!1}){const d=(t,a)=>N?t===""?void 0:t??a:t||a,p=d(n,b.title),l=d(e,b.description),m=c?null:r(T,{num:o?x(o):void 0,title:p!=null?z(p,!1):void 0,description:l!=null?x(l):void 0,accent:!0});if(i.length===0)return y?f(u,{className:c?h:g,children:[m,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:A("This product’s sizes appear here on a product page.")})]}):null;const S=i.some(t=>!t.image);return f(u,{className:c?h:g,children:[m,r(D,{variants:i,fieldUsage:s}),r(w,{text:S?E:""})]})}function D({variants:i,fieldUsage:s}){const{currency:o,formatPrice:n}=k();return r("div",{className:"grid grid-cols-3 gap-2 max-view-desktop:grid-cols-2 max-view-tablet:grid-cols-1",children:i.map(e=>r(_,{fieldUsage:s,size:e.size,specs:e.specs,prices:e.prices,image:e.image,inStock:e.inStock,currency:o,formatPrice:n},e.sku))})}export{b as TYRE_SIZES_HEAD,P as TyreSizesContent};
@@ -1,6 +1,8 @@
1
1
  import type { ReactNode } from "react";
2
+ import { type CardTextRegion } from "./card-text-region.js";
2
3
  export interface CardEyebrowSettings {
3
4
  children?: ReactNode;
4
5
  reserve?: boolean;
6
+ region?: CardTextRegion;
5
7
  }
6
- export default function CardEyebrow({ children: eyebrow, reserve }: CardEyebrowSettings): import("react").JSX.Element;
8
+ export default function CardEyebrow({ children: eyebrow, reserve, region }: CardEyebrowSettings): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as e}from"react/jsx-runtime";import{CARD_TEXT_SIZE as o,CardRow as s,useCatalogCard as c}from"./card-row.js";function i({children:a,reserve:n=!1}){const r=c(),t=`font-mono ${o.label} uppercase text-accent ${r?"tracking-[0.3em]":"tracking-[0.25em]"}`,l=a?e("div",{className:t,children:a}):r&&n?e("div",{"aria-hidden":!0,className:t,children:" "}):null;return e(s,{children:l})}export{i as default};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{CARD_TEXT_SIZE as c,CardRow as l,useCatalogCard as s}from"./card-row.js";import{RegionBridge as d,RegionWords as m,regionAttr as u}from"./card-text-region.js";function g({children:o,reserve:a=!1,region:r}){const t=s(),n=`font-mono ${c.label} uppercase text-accent ${t?"tracking-[0.3em]":"tracking-[0.25em]"}`,i=o?e("div",{...u(r,"eyebrow"),className:n,children:e(m,{region:r,at:"eyebrow",children:o})}):t&&a?e("div",{"aria-hidden":!0,className:n,children:" "}):null;return e(d,{region:r,sectionType:"ProductEyebrow",children:e(l,{children:i})})}export{g as default};
@@ -1,4 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- export default function CardName({ children: name }: {
2
+ import { type CardTextRegion } from "./card-text-region.js";
3
+ export default function CardName({ children: name, region }: {
3
4
  children?: ReactNode;
5
+ region?: CardTextRegion;
4
6
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{withRMark as t}from"efficient-web-builder/render/components/RMark";import{CARD_TEXT_SIZE as n,useCatalogCard as d}from"./card-row.js";import{useProductCardStateOrNull as i}from"./ProductCardState.js";function m({children:a}){const o=d(),e=i();return a===void 0&&e?.kind!=="wheel"&&process.env.NODE_ENV!=="production"&&console.warn("[CardName] no name given and no wheel card state: the name block is empty"),r("div",{className:o?`mt-2 h-[60px] overflow-hidden break-words [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[60px] font-heading3 ${n.headingSmall2} font-medium uppercase leading-none tracking-[-0.02em]`:`mt-2 font-heading3 ${n.headingSmall1} font-medium tracking-[-0.02em]`,children:a??(e?.kind==="wheel"?t(e.wheel.name):null)})}export{m as default};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{withRMark as i}from"efficient-web-builder/render/components/RMark";import{CARD_TEXT_SIZE as o,useCatalogCard as d}from"./card-row.js";import{useProductCardStateOrNull as m}from"./ProductCardState.js";import{RegionBridge as l,RegionWords as s,regionAttr as c}from"./card-text-region.js";function h({children:a,region:e}){const t=d(),n=m();return a===void 0&&n?.kind!=="wheel"&&process.env.NODE_ENV!=="production"&&console.warn("[CardName] no name given and no wheel card state: the name block is empty"),r(l,{region:e,sectionType:"ProductName",children:r("div",{...c(e,"name"),className:t?`mt-2 h-[60px] overflow-hidden break-words [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[60px] font-heading3 ${o.headingSmall2} font-medium uppercase leading-none tracking-[-0.02em]`:`mt-2 font-heading3 ${o.headingSmall1} font-medium tracking-[-0.02em]`,children:r(s,{region:e,at:"name",children:a??(n?.kind==="wheel"?i(n.wheel.name):null)})})})}export{h as default};
@@ -1,15 +1,11 @@
1
- import type { PartStyles } from "efficient-web-builder/render/lib/document/part-styles";
1
+ import { type CardTextRegion } from "./card-text-region.js";
2
2
  export interface CardPriceSettings {
3
3
  show?: boolean;
4
4
  quoteSets?: boolean;
5
5
  setTotal?: boolean;
6
6
  wasFollowsSize?: boolean;
7
7
  }
8
- export interface CardPriceRegion {
9
- nodeId?: string;
10
- partStyles?: PartStyles;
11
- editing: boolean;
12
- }
8
+ export type CardPriceRegion = CardTextRegion;
13
9
  export default function CardPrice({ show, region, ...settings }: CardPriceSettings & {
14
10
  region?: CardPriceRegion;
15
11
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as n,jsxs as c,Fragment as b}from"react/jsx-runtime";import P from"efficient-web-builder/render/components/TextRegionRun";import{SectionTextParts as S}from"efficient-web-builder/render/lib/document/editing-bridges";import{TEXT_REGION_ATTR as T}from"efficient-web-builder/format/lib/sections/text-regions";import{formatPrice as v}from"../../lib/commerce.js";import{setLabel as y}from"../../lib/wheels/variants.js";import{wheelCardPriceLine as d}from"../../lib/wheels/set-mode.js";import{EACH_UNIT as N,formatSelectionPrice as _,formatSelectionWasPrice as w,formatWheelPrice as p,formatWheelWasPrice as L,FROM_PREFIX as u,priceIn as k,resolveWheelPrice as f,SET_QUOTE_LABEL as E}from"../../lib/wheels/price-display.js";import{CARD_TEXT_SIZE as h,CardRow as x}from"./card-row.js";import{useHeroPriceStateOrNull as R,useProductCardState as I}from"./ProductCardState.js";function C(e,t){if(e.kind==="tyre"){const m=f(k(e.tyre.prices,e.currency),null);return{was:null,amount:p(m,e.currency,u),note:m.priced?N:null}}const{wheel:o,currency:r,price:i,sel:l,isSet:g}=e,a=f(o.prices[r],o.msrpPrices?.[r]),s=t.setTotal&&i.priced&&i.setTotal!=null&&l.selectedVariant?`${y(l.selectedVariant)} · ${v(i.setTotal,r)}`:null;return g&&t.quoteSets?{was:null,amount:a.priced?d(p(a,r,u),!0):E,note:s}:{was:t.wasFollowsSize?w(i,r):L(a,r),amount:d(_(i,r),i.priced),note:s}}function W({state:e,region:t}){const o=!!t?.editing,r=c("div",{className:"flex items-baseline gap-5 border-t border-line pt-[18px]",children:[e.msrpLabel&&n("div",{className:"font-mono text-[length:var(--size-label,15px)] text-fg-dim line-through",children:e.msrpLabel}),n("div",{className:"font-heading2 text-[length:min(var(--size-headingMedium,36px),var(--sf-heading-max,9999px))] font-bold leading-none tracking-[-0.01em] text-fg",...o?{[T]:"price"}:{},children:n(P,{region:"price",partStyles:t?.partStyles,children:e.amount})}),e.unitLabel&&n("div",{className:"font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:e.unitLabel}),e.packBadge&&n("div",{className:"ml-auto border border-accent px-3 py-2 font-mono text-[length:var(--size-label,13px)] font-bold uppercase tracking-[0.18em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:e.packBadge})]});return!o||!t?.nodeId?r:n(S,{nodeId:t.nodeId,sectionType:"ProductPrice",partStyles:t.partStyles,children:r})}function z({show:e=!0,region:t,...o}){const r=R();return r?n(W,{state:r,region:t}):n(F,{show:e,...o})}function F({show:e,...t}){const o=I(),{was:r,amount:i,note:l}=C(o,t);return c(b,{children:[n(x,{children:e?c("div",{className:`mt-2 font-mono ${h.labelLarge}`,children:[r&&n("span",{className:"mr-2 text-fg-dim line-through",children:r}),i]}):null}),n(x,{children:e&&l?n("div",{className:`mt-[2px] font-mono ${h.labelSmall} tracking-[0.08em] text-fg-dim`,children:l}):null})]})}export{z as default};
1
+ "use client";import{jsx as n,jsxs as c,Fragment as b}from"react/jsx-runtime";import{formatPrice as P}from"../../lib/commerce.js";import{setLabel as v}from"../../lib/wheels/variants.js";import{wheelCardPriceLine as d}from"../../lib/wheels/set-mode.js";import{EACH_UNIT as w,formatSelectionPrice as L,formatSelectionWasPrice as N,formatWheelPrice as u,formatWheelWasPrice as S,FROM_PREFIX as p,priceIn as k,resolveWheelPrice as f,SET_QUOTE_LABEL as T}from"../../lib/wheels/price-display.js";import{CARD_TEXT_SIZE as h,CardRow as g}from"./card-row.js";import{RegionBridge as _,RegionWords as y,regionAttr as C}from"./card-text-region.js";import{useHeroPriceStateOrNull as E,useProductCardState as R}from"./ProductCardState.js";function W(e,t){if(e.kind==="tyre"){const m=f(k(e.tyre.prices,e.currency),null);return{was:null,amount:u(m,e.currency,p),note:m.priced?w:null}}const{wheel:i,currency:r,price:o,sel:l,isSet:x}=e,a=f(i.prices[r],i.msrpPrices?.[r]),s=t.setTotal&&o.priced&&o.setTotal!=null&&l.selectedVariant?`${v(l.selectedVariant)} · ${P(o.setTotal,r)}`:null;return x&&t.quoteSets?{was:null,amount:a.priced?d(u(a,r,p),!0):T,note:s}:{was:t.wasFollowsSize?N(o,r):S(a,r),amount:d(L(o,r),o.priced),note:s}}function z({state:e,region:t}){const i=c("div",{className:"flex items-baseline gap-5 border-t border-line pt-[18px]",children:[e.msrpLabel&&n("div",{className:"font-mono text-[length:var(--size-label,15px)] text-fg-dim line-through",children:e.msrpLabel}),n("div",{className:"font-heading2 text-[length:min(var(--size-headingMedium,36px),var(--sf-heading-max,9999px))] font-bold leading-none tracking-[-0.01em] text-fg",...C(t,"price"),children:n(y,{region:t,at:"price",children:e.amount})}),e.unitLabel&&n("div",{className:"font-mono text-[length:var(--size-label,13px)] font-semibold uppercase tracking-[0.22em] text-fg",children:e.unitLabel}),e.packBadge&&n("div",{className:"ml-auto border border-accent px-3 py-2 font-mono text-[length:var(--size-label,13px)] font-bold uppercase tracking-[0.18em] text-accent",style:{background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:e.packBadge})]});return n(_,{region:t,sectionType:"ProductPrice",children:i})}function F({show:e=!0,region:t,...i}){const r=E();return r?n(z,{state:r,region:t}):n(j,{show:e,...i})}function j({show:e,...t}){const i=R(),{was:r,amount:o,note:l}=W(i,t);return c(b,{children:[n(g,{children:e?c("div",{className:`mt-2 font-mono ${h.labelLarge}`,children:[r&&n("span",{className:"mr-2 text-fg-dim line-through",children:r}),o]}):null}),n(g,{children:e&&l?n("div",{className:`mt-[2px] font-mono ${h.labelSmall} tracking-[0.08em] text-fg-dim`,children:l}):null})]})}export{F as default};
@@ -0,0 +1,8 @@
1
+ export interface CardProductPictureSettings {
2
+ imageBackground?: unknown;
3
+ cardImage?: unknown;
4
+ coverIndex?: unknown;
5
+ indexBadge?: unknown;
6
+ showBadge?: unknown;
7
+ }
8
+ export default function CardProductPicture(settings: CardProductPictureSettings): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as o,Fragment as D,jsxs as g}from"react/jsx-runtime";import E from"next/image";import{useState as $}from"react";import{CARD_INDEX_BADGE_CLASS as j,CARD_INDEX_CLASS as v,parseCardIndexFormat as B}from"efficient-web-builder/format/lib/sections/product-card-style";import{CARD_IMAGE_BG_OFF as N,resolveCardImageBackground as y}from"efficient-web-builder/format/lib/content/card-image-background";import{cardImageShapeTokens as G}from"efficient-web-builder/format/lib/content/card-image-shape";import{setSecondSrc as z}from"../../lib/wheels/set-mode.js";import{coverSrcForWheel as L,parseCoverIndex as R,resolvePaintedSrc as W}from"../../lib/wheels/cover-rendering.js";import O from"../WheelPlaceholder.js";import{cardSpinOf as X}from"../card-spin.js";import{useGridCard as H}from"../GridCardTemplate.js";import M from"./CardPicture.js";import T from"./CardProductBadge.js";import{useHeldCardPicture as q}from"./useHeldCardPicture.js";import{useProductCardState as J}from"./ProductCardState.js";function K(i){const s=J();return s.kind!=="wheel"?null:o(Q,{state:s,...i})}function Q({state:i,imageBackground:s,cardImage:C,coverIndex:w,indexBadge:F,showBadge:_}){const{wheel:a,sel:e,isSet:c}=i,{hover:P,imageSizes:d}=H(),m=X(P),x=L(a,R(w),e.finish?.name,e.shownSrc),[l,A]=$(()=>new Set),f=r=>{e.pictureFailed(r),A(n=>n.has(r)?n:new Set(n).add(r))},h=W({overrideSrc:x,hookSrc:e.shownSrc,failed:l}),u=(r,n)=>o(E,{alt:n,src:r,width:1e3,height:1e3,sizes:d,className:`block h-full w-full object-contain ${m.className}`,style:m.style,draggable:!1,onError:()=>f(r)},r),I=e.finish?`${a.name} — ${e.finish.name}`:a.name,b=c?z(a.finishes?.find(r=>r.name===e.finish?.name),h):null,t=q({src:h,second:b,alt:I,sizes:d,failed:l,onFailed:f,near:e.nearScreen,holdEmpty:e.awaitingProbe}),k=g(D,{children:[t.src?u(t.src,t.alt):o(O,{imageLabel:a.name,spin:m}),t.trial]}),p=B(F),S=p!=="off";return g("div",{style:G(C),children:[S?o("span",{"aria-hidden":!0,"data-format":p,className:`${v} ${j}`}):null,o(T,{show:_!==!1,numbered:S,axleSets:!0}),o(M,{image:k,imageSecond:t.second?u(t.second,`${t.alt} — right`):void 0,wide:c,imageBackgroundFill:y(s,N)})]})}export{K as default};
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ import type { PartStyles } from "efficient-web-builder/render/lib/document/part-styles";
3
+ export interface CardTextRegion {
4
+ nodeId?: string;
5
+ partStyles?: PartStyles;
6
+ editing: boolean;
7
+ }
8
+ export declare function regionAttr(region: CardTextRegion | undefined, key: string): Record<string, string>;
9
+ export declare function RegionWords({ region, at, children }: {
10
+ region?: CardTextRegion;
11
+ at: string;
12
+ children: ReactNode;
13
+ }): import("react").JSX.Element;
14
+ export declare function RegionBridge({ region, sectionType, children }: {
15
+ region?: CardTextRegion;
16
+ sectionType: string;
17
+ children: ReactNode;
18
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{Fragment as o,jsx as n}from"react/jsx-runtime";import i from"efficient-web-builder/render/components/TextRegionRun";import{SectionTextParts as d}from"efficient-web-builder/render/lib/document/editing-bridges";import{TEXT_REGION_ATTR as p}from"efficient-web-builder/format/lib/sections/text-regions";function f(t,r){return t?.editing?{[p]:r}:{}}function c({region:t,at:r,children:e}){return t?n(i,{region:r,partStyles:t.partStyles,children:e}):n(o,{children:e})}function l({region:t,sectionType:r,children:e}){return!t?.editing||!t.nodeId?n(o,{children:e}):n(d,{nodeId:t.nodeId,sectionType:r,partStyles:t.partStyles,children:e})}export{l as RegionBridge,c as RegionWords,f as regionAttr};
@@ -1,6 +1,10 @@
1
1
  import type { FitmentCascade } from "./useFitmentCascade.js";
2
- export default function FitmentPickerGrid({ cascade, compact, editing, }: {
2
+ export type PickerColumns = 1 | 2 | 3 | 4;
3
+ export declare function pickerGridColumns(compact: boolean, columns?: unknown, columnsPhone?: unknown): string;
4
+ export default function FitmentPickerGrid({ cascade, compact, editing, columns, columnsPhone, }: {
3
5
  cascade: FitmentCascade;
4
6
  compact?: boolean;
5
7
  editing?: boolean;
8
+ columns?: unknown;
9
+ columnsPhone?: unknown;
6
10
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as t}from"react/jsx-runtime";import{PickerField as a}from"./PickerField.js";import{vehicleLevelStates as m}from"./vehicle-level-state.js";import{VEHICLE_FIELD_LABEL as n}from"../../lib/wheels/vehicle-field-focus.js";function p({cascade:e,compact:i=!1,editing:d=!1}){const{vehicle:o}=e,l=m(e),s=t("div",{className:["grid gap-[2px] border border-line bg-line",i?"grid-cols-1 @min-[20rem]:grid-cols-2 @min-[39rem]:grid-cols-4":"grid-cols-4 max-view-desktop:grid-cols-2 max-[700px]:grid-cols-1"].join(" "),children:[r(a,{label:n.make,placeholder:l.make.placeholder,disabled:l.make.disabled,value:o.make,options:e.makeOptions,onChange:e.setMake,compact:i,editing:d}),r(a,{label:n.model,placeholder:l.model.placeholder,disabled:l.model.disabled,value:o.model,options:e.modelOptions,onChange:e.setModel,compact:i,editing:d}),r(a,{label:n.year,placeholder:l.year.placeholder,disabled:l.year.disabled,value:o.year!==null?String(o.year):"",options:e.yearOptions,onChange:e.setYear,compact:i,editing:d}),r(a,{label:n.trim,placeholder:l.trim.placeholder,disabled:l.trim.disabled,value:o.modification,options:e.modOptions,onChange:e.setModification,compact:i,editing:d})]});return i?r("div",{className:"@container",children:s}):s}export{p as default};
1
+ "use client";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{PickerField as t}from"./PickerField.js";import{vehicleLevelStates as p}from"./vehicle-level-state.js";import{VEHICLE_FIELD_LABEL as a}from"../../lib/wheels/vehicle-field-focus.js";const b={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4"},u={1:"max-view-tablet:grid-cols-1",2:"max-view-tablet:grid-cols-2",3:"max-view-tablet:grid-cols-3",4:"max-view-tablet:grid-cols-4"},g=e=>e===1||e===2||e===3||e===4?e:void 0;function f(e,i,r){const d=g(i),n=g(r);if(d===void 0&&n===void 0)return e?"grid-cols-1 @min-[20rem]:grid-cols-2 @min-[39rem]:grid-cols-4":"grid-cols-4 max-view-desktop:grid-cols-2 max-[700px]:grid-cols-1";const l=d!==void 0?b[d]:e?"grid-cols-1 @min-[20rem]:grid-cols-2 @min-[39rem]:grid-cols-4":"grid-cols-4 max-view-desktop:grid-cols-2";return n!==void 0?`${l} ${u[n]}`:l}function h({cascade:e,compact:i=!1,editing:r=!1,columns:d,columnsPhone:n}){const{vehicle:l}=e,o=p(e),m=c("div",{className:["grid gap-[2px] border border-line bg-line",f(i,d,n)].join(" "),children:[s(t,{label:a.make,placeholder:o.make.placeholder,disabled:o.make.disabled,value:l.make,options:e.makeOptions,onChange:e.setMake,compact:i,editing:r}),s(t,{label:a.model,placeholder:o.model.placeholder,disabled:o.model.disabled,value:l.model,options:e.modelOptions,onChange:e.setModel,compact:i,editing:r}),s(t,{label:a.year,placeholder:o.year.placeholder,disabled:o.year.disabled,value:l.year!==null?String(l.year):"",options:e.yearOptions,onChange:e.setYear,compact:i,editing:r}),s(t,{label:a.trim,placeholder:o.trim.placeholder,disabled:o.trim.disabled,value:l.modification,options:e.modOptions,onChange:e.setModification,compact:i,editing:r})]});return i?s("div",{className:"@container",children:m}):m}export{h as default,f as pickerGridColumns};
@@ -0,0 +1,8 @@
1
+ export type FitmentPickerLayout = "tall" | "short";
2
+ export interface FitmentPickerPartProps {
3
+ layout?: FitmentPickerLayout;
4
+ pickerColumns?: unknown;
5
+ pickerColumnsPhone?: unknown;
6
+ editing?: boolean;
7
+ }
8
+ export default function FitmentPickerPart({ layout, pickerColumns, pickerColumnsPhone, editing, }: FitmentPickerPartProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as s}from"react/jsx-runtime";import i from"./FitmentPickerGrid.js";import{useVehicleFit as a}from"./useVehicleFit.js";function m({layout:e,pickerColumns:r,pickerColumnsPhone:o,editing:t=!1}){const{cascade:c}=a({editing:t,autoApply:!0,shareStock:!0});return s(i,{cascade:c,compact:e==="short",editing:t,columns:r,columnsPhone:o})}export{m as default};
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ import type { StoreProduct } from "../../lib/catalog/store-product.js";
3
+ export declare function useFitmentAnswerView({ product, editing, label, }: {
4
+ product: StoreProduct | null;
5
+ editing?: boolean;
6
+ label?: string;
7
+ }): ReactNode;
8
+ export default function StockFitmentPart({ editing, label, }: {
9
+ editing?: boolean;
10
+ label?: string;
11
+ }): ReactNode;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{useSyncExternalStore as c}from"react";import{say as m}from"efficient-web-builder/format/lib/editor-words";import h from"./StockFitmentCard.js";import{fitmentAnswerFor as w}from"./fitment-answer-source.js";import l from"../TyreFitVerdicts.js";import{useTyreFitAnswer as S}from"../useTyreFitAnswer.js";import{useSampleProduct as v}from"../pdp-dynamic/useSampleProduct.js";import{useCurrentProduct as A}from"../../lib/document/current-product.js";import{tyreFitQuery as F,unknownAnswer as k}from"../../lib/tyres/tyre-vehicle-fitment.js";import{storefrontVehicleMemory as i}from"../../lib/wheels/vehicle-memory.js";const N=()=>null,x=()=>null,b=k({make:"",model:"",year:0,modification:""});function C({product:o,editing:r=!1,label:s=""}){const n=w(o),a=c(i.subscribeStock,i.readStock,N),u=c(i.subscribe,i.read,x),t=n.source==="tyreVerdicts"?n:null,{answer:p,loading:d,retry:f}=S(t?.slug??"",t&&!r?F(u?.vehicle):null),y=r?e("div",{"data-host-part-sample":"",className:"opacity-60",children:m(s)}):null;return t?r?e("div",{"data-host-part-sample":"",className:"opacity-60",children:e(l,{variants:t.variants,answer:b,headline:m("A sample. On the live page each size shows its own verdict for the shopper's car.")})}):e(l,{variants:t.variants,answer:p,loading:d,onRetry:f}):a?e(h,{loading:a.loading,error:a.error,data:a.stock}):y}function O({editing:o=!1,label:r=""}){const s=A(),n=v(o&&!s);return C({product:s?.product??n,editing:o,label:r})}export{O as default,C as useFitmentAnswerView};
@@ -0,0 +1,12 @@
1
+ import type { ProductKind, TyreVariant } from "../../lib/api/index.js";
2
+ import type { StoreProduct } from "../../lib/catalog/store-product.js";
3
+ export type FitmentAnswerSource = "stockCard" | "tyreVerdicts";
4
+ export declare const FITMENT_ANSWER_BY_KIND: Readonly<Record<ProductKind, FitmentAnswerSource>>;
5
+ export type FitmentAnswer = {
6
+ source: "stockCard";
7
+ } | {
8
+ source: "tyreVerdicts";
9
+ slug: string;
10
+ variants: TyreVariant[];
11
+ };
12
+ export declare function fitmentAnswerFor(product: StoreProduct | null | undefined): FitmentAnswer;
@@ -0,0 +1 @@
1
+ const t={"alloy-wheel":"stockCard",tyre:"tyreVerdicts"},s={source:"stockCard"};function n(e){if(!e)return s;const r=t[e.kind];return r==="tyreVerdicts"&&e.kind==="tyre"&&e.source.variants.length>0?{source:r,slug:e.source.slug,variants:e.source.variants}:s}export{t as FITMENT_ANSWER_BY_KIND,n as fitmentAnswerFor};
@@ -21,9 +21,10 @@ export interface VehicleFit {
21
21
  appliedName: string;
22
22
  restored: boolean;
23
23
  }
24
- export declare function useVehicleFit({ initialMakes, editing, enabled, autoApply, }?: {
24
+ export declare function useVehicleFit({ initialMakes, editing, enabled, autoApply, shareStock, }?: {
25
25
  initialMakes?: FitmentMake[];
26
26
  editing?: boolean;
27
27
  enabled?: boolean;
28
28
  autoApply?: boolean;
29
+ shareStock?: boolean;
29
30
  }): VehicleFit;