efficient-storefront-blocks 0.60.0 → 0.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/CHANGELOG.md +79 -1
  2. package/README.md +2 -1
  3. package/dist/chunks/{EditorPreviewCheckout-XY2PLPBD.js → EditorPreviewCheckout-BQFPYYBS.js} +1 -1
  4. package/dist/chunks/{SiteEditorProvider-XF374NLZ.js → SiteEditorProvider-3E6XWZIS.js} +1 -1
  5. package/dist/chunks/chunk-4BQ44OLC.js +250 -0
  6. package/dist/chunks/chunk-MT5KWSYX.js +1 -0
  7. package/dist/chunks/chunk-OJ4OD3N6.js +1 -0
  8. package/dist/chunks/{fitment-data-RORHKBID.js → fitment-data-PWZAAUFK.js} +1 -1
  9. package/dist/editor/components/EditorPreviewChat.js +4 -4
  10. package/dist/editor/components/PreviewHeader.d.ts +1 -1
  11. package/dist/editor/components/PreviewHeader.js +4 -4
  12. package/dist/editor/lib/efficient-backend.d.ts +1 -0
  13. package/dist/editor/lib/efficient-backend.js +1 -1
  14. package/dist/editor/lib/efficient-block-sources.d.ts +2 -0
  15. package/dist/editor/lib/efficient-block-sources.js +1 -0
  16. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.d.ts +2 -0
  17. package/dist/editor/lib/puck/blocks/commerce/EuTyreLabelBlock/fields.js +1 -0
  18. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.d.ts +6 -0
  19. package/dist/editor/lib/puck/blocks/commerce/ProductGallery/fields.js +1 -0
  20. package/dist/editor/lib/puck/blocks/commerce/ProductHero/fields.js +1 -1
  21. package/dist/editor/lib/puck/blocks/commerce/index.d.ts +1 -1
  22. package/dist/editor/lib/puck/blocks/commerce/index.js +1 -1
  23. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.d.ts +2 -0
  24. package/dist/editor/lib/puck/blocks/service/RatingBlock/fields.js +1 -0
  25. package/dist/editor/lib/puck/blocks/service/index.d.ts +1 -1
  26. package/dist/editor/lib/puck/blocks/service/index.js +1 -1
  27. package/dist/editor/lib/puck/config.js +1 -1
  28. package/dist/editor/lib/storefront-editor-words.d.ts +1 -0
  29. package/dist/editor/lib/storefront-editor-words.js +1 -1
  30. package/dist/editor.css +1 -1
  31. package/dist/fitment.d.ts +56 -0
  32. package/dist/fitment.js +1 -0
  33. package/dist/index.d.ts +36 -6
  34. package/dist/index.js +101 -81
  35. package/dist/links.js +1 -1
  36. package/dist/render/app/globals.css +70 -14
  37. package/dist/render/built-with.json +1 -1
  38. package/dist/render/components/CartContext.d.ts +1 -0
  39. package/dist/render/components/CartContext.js +1 -1
  40. package/dist/render/components/CartDrawer.d.ts +0 -8
  41. package/dist/render/components/CartDrawer.js +2 -2
  42. package/dist/render/components/ChatWidget.js +1 -1
  43. package/dist/render/components/EuTyreLabels.d.ts +3 -0
  44. package/dist/render/components/EuTyreLabels.js +1 -1
  45. package/dist/render/components/FitmentTable.js +1 -1
  46. package/dist/render/components/FooterMenu.js +1 -1
  47. package/dist/render/components/FormBlock.js +1 -1
  48. package/dist/render/components/GalleryItem.js +1 -1
  49. package/dist/render/components/Header.js +1 -1
  50. package/dist/render/components/LegalLine.js +1 -1
  51. package/dist/render/components/PopupFrame.d.ts +2 -1
  52. package/dist/render/components/PopupFrame.js +1 -1
  53. package/dist/render/components/PopupHost.d.ts +17 -0
  54. package/dist/render/components/PopupHost.js +1 -0
  55. package/dist/render/components/ProductCard.js +1 -1
  56. package/dist/render/components/ProductGallery.d.ts +15 -0
  57. package/dist/render/components/ProductGallery.js +1 -0
  58. package/dist/render/components/ProductHeroPanel.js +1 -1
  59. package/dist/render/components/RatingStars.d.ts +4 -0
  60. package/dist/render/components/RatingStars.js +1 -0
  61. package/dist/render/components/Reviews.js +1 -1
  62. package/dist/render/components/StorefrontProviders.d.ts +1 -3
  63. package/dist/render/components/StorefrontProviders.js +1 -1
  64. package/dist/render/components/SubscribePopupContext.d.ts +3 -15
  65. package/dist/render/components/SubscribePopupContext.js +1 -1
  66. package/dist/render/components/TyrePlpCard.js +1 -1
  67. package/dist/render/components/WheelCardFrame.d.ts +3 -27
  68. package/dist/render/components/WheelCardFrame.js +1 -1
  69. package/dist/render/components/card-pieces/CardBuyButton.d.ts +7 -0
  70. package/dist/render/components/card-pieces/CardBuyButton.js +1 -0
  71. package/dist/render/components/card-pieces/CardFinishSwatches.d.ts +5 -0
  72. package/dist/render/components/card-pieces/CardFinishSwatches.js +1 -0
  73. package/dist/render/components/card-pieces/CardPrice.d.ts +7 -0
  74. package/dist/render/components/card-pieces/CardPrice.js +1 -0
  75. package/dist/render/components/card-pieces/CardProductBadge.d.ts +7 -0
  76. package/dist/render/components/card-pieces/CardProductBadge.js +1 -0
  77. package/dist/render/components/card-pieces/CardSizes.d.ts +9 -0
  78. package/dist/render/components/card-pieces/CardSizes.js +1 -0
  79. package/dist/render/components/card-pieces/ProductCardState.d.ts +53 -0
  80. package/dist/render/components/card-pieces/ProductCardState.js +1 -0
  81. package/dist/render/components/card-pieces/card-row.d.ts +20 -0
  82. package/dist/render/components/card-pieces/card-row.js +1 -0
  83. package/dist/render/components/cart/drawer-parts.d.ts +28 -0
  84. package/dist/render/components/cart/drawer-parts.js +1 -0
  85. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.d.ts +3 -0
  86. package/dist/render/components/pdp-dynamic/DynamicEuTyreLabel.js +1 -1
  87. package/dist/render/components/pdp-dynamic/DynamicProductGallery.d.ts +9 -0
  88. package/dist/render/components/pdp-dynamic/DynamicProductGallery.js +1 -0
  89. package/dist/render/components/useHeaderBar.js +1 -1
  90. package/dist/render/components/useIsLightTheme.d.ts +1 -0
  91. package/dist/render/components/useIsLightTheme.js +1 -0
  92. package/dist/render/components/wheels-plp/AlloyWheelsListing.d.ts +2 -1
  93. package/dist/render/components/wheels-plp/AlloyWheelsListing.js +1 -1
  94. package/dist/render/components/wheels-plp/PlpCard.d.ts +3 -2
  95. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  96. package/dist/render/components/wheels-plp/usePlpCardSelection.d.ts +1 -1
  97. package/dist/render/components/wheels-plp/usePlpCardSelection.js +1 -1
  98. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.d.ts +2 -1
  99. package/dist/render/components/wheels-plp/usePlpFiltersInUrl.js +1 -1
  100. package/dist/render/lib/api/index.d.ts +4 -2
  101. package/dist/render/lib/api/index.js +1 -1
  102. package/dist/render/lib/api/types.d.ts +48 -1
  103. package/dist/render/lib/chrome-load.d.ts +1 -1
  104. package/dist/render/lib/chrome-load.js +1 -1
  105. package/dist/render/lib/content/field-usage.d.ts +0 -1
  106. package/dist/render/lib/content/field-usage.js +1 -1
  107. package/dist/render/lib/content/product-hero.d.ts +1 -0
  108. package/dist/render/lib/content/product-hero.js +1 -1
  109. package/dist/render/lib/header-fit.d.ts +2 -0
  110. package/dist/render/lib/header-fit.js +1 -0
  111. package/dist/render/lib/popup/popup-stores.d.ts +2 -0
  112. package/dist/render/lib/popup/popup-stores.js +1 -0
  113. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.d.ts +2 -0
  114. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/meta.js +1 -0
  115. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.d.ts +2 -0
  116. package/dist/render/lib/puck/blocks/commerce/EuTyreLabelBlock/render.js +1 -0
  117. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.d.ts +2 -0
  118. package/dist/render/lib/puck/blocks/commerce/ProductGallery/meta.js +1 -0
  119. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.d.ts +2 -0
  120. package/dist/render/lib/puck/blocks/commerce/ProductGallery/render.js +1 -0
  121. package/dist/render/lib/puck/blocks/commerce/metas.d.ts +2 -0
  122. package/dist/render/lib/puck/blocks/commerce/metas.js +1 -1
  123. package/dist/render/lib/puck/blocks/commerce/renders.d.ts +2 -0
  124. package/dist/render/lib/puck/blocks/commerce/renders.js +1 -1
  125. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.d.ts +3 -0
  126. package/dist/render/lib/puck/blocks/service/RatingBlock/meta.js +1 -0
  127. package/dist/render/lib/puck/blocks/service/RatingBlock/render.d.ts +2 -0
  128. package/dist/render/lib/puck/blocks/service/RatingBlock/render.js +1 -0
  129. package/dist/render/lib/puck/blocks/service/metas.d.ts +1 -0
  130. package/dist/render/lib/puck/blocks/service/metas.js +1 -1
  131. package/dist/render/lib/puck/blocks/service/renders.d.ts +1 -0
  132. package/dist/render/lib/puck/blocks/service/renders.js +1 -1
  133. package/dist/render/lib/puck/lazy-draws.js +1 -1
  134. package/dist/render/lib/storefront-page-groups.js +1 -1
  135. package/dist/render/lib/wheels/fitment-columns.d.ts +6 -1
  136. package/dist/render/lib/wheels/fitment-columns.js +1 -1
  137. package/dist/render/lib/wheels/plp-fitment-match.d.ts +4 -0
  138. package/dist/render/lib/wheels/plp-fitment-match.js +1 -1
  139. package/dist/render/lib/wheels/plp-hydrate.d.ts +2 -0
  140. package/dist/render/lib/wheels/plp-hydrate.js +1 -1
  141. package/dist/render/lib/wheels/spec-sheet.js +1 -1
  142. package/dist/words.d.ts +2 -2
  143. package/dist/words.js +3 -3
  144. package/package.json +11 -4
  145. package/dist/chunks/chunk-EZQTUHPN.js +0 -1
  146. package/dist/chunks/chunk-FCCEAXMM.js +0 -1
  147. package/dist/chunks/chunk-YNI65Q6Z.js +0 -250
  148. package/dist/render/components/wheels-plp/useWheelCardBottom.d.ts +0 -20
  149. package/dist/render/components/wheels-plp/useWheelCardBottom.js +0 -1
  150. package/dist/render/lib/popup/popup-rules.d.ts +0 -25
  151. package/dist/render/lib/popup/popup-rules.js +0 -1
  152. /package/dist/chunks/{chunk-YNI65Q6Z.js.LEGAL.txt → chunk-4BQ44OLC.js.LEGAL.txt} +0 -0
  153. /package/dist/chunks/{chunk-VT346MLP.js → chunk-FZFBLN7K.js} +0 -0
  154. /package/dist/chunks/{chunk-I6VNNXUI.js → chunk-TRUOK5AD.js} +0 -0
@@ -1 +1 @@
1
- import{keepForFitment as i,orderByAnswers as a}from"../content/field-usage.js";const t=[{fieldKey:"diameter",header:"Diameter",cell:e=>e.diameter},{fieldKey:"width",header:"Width",cell:e=>e.width},{fieldKey:"holes",header:"Holes",cell:e=>e.holes},{fieldKey:"pcd",header:"PCD",cell:e=>e.pcd},{fieldKey:"et",header:"ET",cell:e=>e.et},{fieldKey:"center_bore",header:"C/B",cell:e=>e.cb},{fieldKey:"cap_code",header:"Cap",cell:e=>e.cap},{fieldKey:"bolt_pattern",header:"Bolt Pattern",cell:e=>e.boltPattern},{fieldKey:"load_rating",header:"Load Rating",cell:e=>e.loadRating}];function c(e){if(e.length===0)return t;const d=i(e),r=t.filter(l=>d(l.fieldKey));return a(r,l=>l.fieldKey,e,"fitmentOrder")}export{t as FITMENT_COLUMNS,c as fitmentColumns};
1
+ import{orderByAnswers as h}from"../content/field-usage.js";function B(e){return e.toUpperCase()==="US"?"lbs":"kg"}const s=.45359237,d=/\d[\d,]*(?:\.\d+)?/g,p=/(\d[\d,]*(?:\.\d+)?(?:\s*[–-]\s*\d[\d,]*(?:\.\d+)?)?)\s*(kgs?|lbs?)\b/gi,a=e=>Number(e.replace(/,/g,"")),f=e=>Math.round(e).toLocaleString("en-US");function y(e,t){const o={};for(const[,n,i]of e.matchAll(p)){const u=i.toLowerCase().startsWith("kg")?"kg":"lbs";o[u]??=n}const r=o[t];if(r!==void 0)return`${r.replace(d,n=>f(a(n))).replace(/\s*([–-])\s*/,"$1")} ${t}`;const l=o[t==="kg"?"lbs":"kg"];if(l===void 0)return e.trim();const c=t==="kg"?s:1/s;return`${l.replace(d,n=>f(a(n)*c)).replace(/\s*([–-])\s*/,"$1")} ${t}`}const b=e=>e>0?`+${e}`:e<0?`−${-e}`:"0",m=e=>{const t=/^(\d+)\s*[×x]\s*\d/.exec(e.boltPattern)?.[1];return t!==void 0&&Number(t)===e.holes?e.boltPattern:e.holes>0&&e.pcd?`${e.holes}×${e.pcd}`:e.boltPattern},g=[{fieldKey:"diameter",header:"Size",shownByDefault:!0,cell:e=>`${e.diameter} × ${e.width}`},{fieldKey:"bolt_pattern",header:"Bolt pattern",shownByDefault:!0,cell:m},{fieldKey:"et",header:"Offset",shownByDefault:!0,cell:e=>b(e.et)},{fieldKey:"center_bore",header:"Centre bore",shownByDefault:!1,cell:e=>e.cb},{fieldKey:"cap_code",header:"Cap",shownByDefault:!1,cell:e=>e.cap},{fieldKey:"load_rating",header:"Load",shownByDefault:!0,cell:(e,t)=>y(e.loadRating,t)}];function $(e,t){const o=t.find(r=>r.fieldKey===e.fieldKey)?.fitment;return e.shownByDefault?o!==!1:o===!0}function K(e){const t=g.filter(o=>$(o,e));return e.length===0?t:h(t,o=>o.fieldKey,e,"fitmentOrder")}export{g as FITMENT_COLUMNS,$ as fitmentColumnShown,K as fitmentColumns,y as formatLoad,B as loadUnitFor};
@@ -7,6 +7,10 @@ export interface VehicleFitment {
7
7
  centreBore: number | null;
8
8
  etRange: MmRange | null;
9
9
  }
10
+ export declare function splitBoltPattern(value: string | null | undefined): {
11
+ holes: number | null;
12
+ circleText: string;
13
+ };
10
14
  export declare function parseBoltPattern(value: string | null | undefined): {
11
15
  holes: number | null;
12
16
  circles: number[];
@@ -1 +1 @@
1
- import{lugLabel as M}from"./lug-count.js";import{formatSizeRange as E}from"./size-range.js";import{etRangeLabel as L,inchRangeLabel as N}from"./spec-format.js";const f=5,m=.2;function g(e){if(!e)return{holes:null,circles:[]};const t=e.replace(/\([^)]*\)?/g," ").trim(),n=t.match(/^\s*(\d+)\s*[x×*]\s*(.+)$/i),r=n?Number(n[1]):null,o=(n?n[2]:t).split(/[-/,]/).map(l=>Number(l.trim().replace(/[^\d.]/g,""))).filter(l=>Number.isFinite(l)&&l>0);return{holes:r,circles:o}}function p(e){if(!e||e.length<2)return null;const[t,n]=e;return!Number.isFinite(t)||!Number.isFinite(n)?null:[Math.min(t,n),Math.max(t,n)]}function O(e){if(!e)return null;const t=g(e.pcd||e.boltPattern);if(t.holes===null||t.circles.length===0)return null;const n=t.circles[0],r=p(e.etRange),c=r?[r[0]-f,r[1]+f]:null;return{holes:t.holes,circle:n,centreBore:typeof e.centreBore=="number"&&e.centreBore>0?e.centreBore:null,etRange:c}}function K(e,t){return Math.abs(e-t)<=m}function h(e,t,n){const r=g(e);return(r.holes??t)!==n.holes?!1:r.circles.some(o=>K(o,n.circle))}function x(e,t){return t.centreBore===null?!0:e+m>=t.centreBore}function P(e,t){return e[0]<=t[1]&&e[1]>=t[0]}function u(e,t){const n=`${t.holes}×${t.circle}`;return e.pcds.length===0?{key:"unverifiable",wheel:"",vehicle:n}:e.pcds.some(r=>h(r,e.lugs,t))?t.etRange!==null&&e.etRange!==null&&!P(e.etRange,t.etRange)?{key:"et",wheel:s(e.etRange),vehicle:s(t.etRange)}:e.centreBores.length>0&&!e.centreBores.some(r=>x(r,t))?{key:"bore",wheel:`${e.centreBores.join(" / ")} mm`,vehicle:`${t.centreBore} mm`}:null:{key:"pcd",wheel:e.pcds.join(" / "),vehicle:n}}function F(e){return{pcds:e.spec?.pcds??[],lugs:e.spec?.lugs??null,etRange:p(e.spec?.etRange),centreBores:e.spec?.centreBores??[]}}function d(e){const t=e.et,n=e.rearEt??e.et;return{pcds:e.boltPattern?[e.boltPattern]:[],lugs:null,etRange:t==null||n==null?null:[Math.min(t,n),Math.max(t,n)],centreBores:e.centreBore==null?[]:[e.centreBore]}}function B(e,t){const n=u(e,t);return n===null||n.key!=="et"?n:u(e,{...t,etRange:null})}function V(e,t){return u(F(e),t)}function v(e,t){return u(d(e),t)}function T(e,t){return B(d(e),t)===null}function w(e,t){return t?e.filter(n=>T(n,t)):[...e]}function _(e,t){return B(F(e),t)===null}function D(e,t){return t?e.filter(n=>_(n,t)):e}const R=1;function S(e,t){const n=e.spec?.pcds??[],r=e.spec?.centreBores??[],c=p(e.spec?.etRange);if(!t)return{pcds:n,etRange:c,centreBores:r};const o=e.spec?.lugs??null,l=n.filter(a=>h(a,o,t)),i=r.filter(a=>x(a,t));return{pcds:l.length>0?l:n,etRange:c,centreBores:i.length>0?i:r}}function s(e){return L(e[0],e[1])}function b(e,t=""){const n=`${e.slice(0,R).join(" / ")}${t}`,r=e.length-R;return r>0?`${n} +${r} more`:n}const C="·";function j(e,t){return $(e,t).map(n=>n.text)}function H(e,t,{sizes:n}){const r=$(e,t);if(!n)return r.length>0?r:y(e);const c=[...new Set(e.sizes)].sort((l,i)=>l-i).map(l=>({fieldKey:"diameter",text:N(l,l)})),o=r.length>0?[]:y(e).filter(l=>l.fieldKey==="holes");return[...c,...r,...o]}function y(e){return[{fieldKey:"diameter",text:E(e.sizes)},{fieldKey:"holes",text:M(e.spec?.lugs)}].filter(t=>!!t.text)}function $(e,t){const{pcds:n,etRange:r,centreBores:c}=S(e,t),o=[];return n.length>0&&o.push({fieldKey:"pcd",text:`PCD ${b(n)}`}),r!==null&&o.push({fieldKey:"et",text:s(r)}),c.length>0&&o.push({fieldKey:"center_bore",text:`C/B ${b(c," mm")}`}),o}function X(e,t){return j(e,t).join(` ${C} `)}function k(e){return e?[{key:"pcd",name:"Bolt pattern",value:`${e.holes}×${e.circle}`},{key:"bore",name:"Hub bore",value:e.centreBore!==null?`${e.centreBore} mm bore`:null},{key:"et",name:"Offset",value:e.etRange!==null?s(e.etRange):null}]:[]}function q(e){return k(e).map(t=>t.value).filter(t=>t!==null).join(" · ")}export{f as ET_TOLERANCE_MM,C as FITMENT_FIELD_SEPARATOR,R as FITMENT_LINE_MAX,B as fitmentBlockingFailure,k as fitmentChecks,u as fitmentFitFailure,q as fitmentSummary,g as parseBoltPattern,p as parseMmRange,v as variantFitFailure,d as variantFitment,T as variantFitsVehicle,w as variantsFittingVehicle,O as vehicleFitmentFromStock,H as wheelCardSpecFacts,V as wheelFitFailure,F as wheelFitment,S as wheelFitmentFacts,j as wheelFitmentFields,$ as wheelFitmentKeyedFields,X as wheelFitmentLine,_ as wheelFitsVehicle,y as wheelSizeLugFacts,D as wheelsFittingVehicle};
1
+ import{lugLabel as M}from"./lug-count.js";import{formatSizeRange as T}from"./size-range.js";import{etRangeLabel as E,inchRangeLabel as L}from"./spec-format.js";const f=5,m=.2;function N(e){if(!e)return{holes:null,circleText:""};const t=e.replace(/\([^)]*\)?/g," ").trim(),n=t.match(/^\s*(\d+)\s*[x×*]\s*(.+)$/i);return{holes:n?Number(n[1]):null,circleText:(n?n[2]:t).trim()}}function g(e){const{holes:t,circleText:n}=N(e),r=n.split(/[-/,]/).map(l=>Number(l.trim().replace(/[^\d.]/g,""))).filter(l=>Number.isFinite(l)&&l>0);return{holes:t,circles:r}}function p(e){if(!e||e.length<2)return null;const[t,n]=e;return!Number.isFinite(t)||!Number.isFinite(n)?null:[Math.min(t,n),Math.max(t,n)]}function V(e){if(!e)return null;const t=g(e.pcd||e.boltPattern);if(t.holes===null||t.circles.length===0)return null;const n=t.circles[0],r=p(e.etRange),l=r?[r[0]-f,r[1]+f]:null;return{holes:t.holes,circle:n,centreBore:typeof e.centreBore=="number"&&e.centreBore>0?e.centreBore:null,etRange:l}}function P(e,t){return Math.abs(e-t)<=m}function h(e,t,n){const r=g(e);return(r.holes??t)!==n.holes?!1:r.circles.some(o=>P(o,n.circle))}function x(e,t){return t.centreBore===null?!0:e+m>=t.centreBore}function K(e,t){return e[0]<=t[1]&&e[1]>=t[0]}function u(e,t){const n=`${t.holes}×${t.circle}`;return e.pcds.length===0?{key:"unverifiable",wheel:"",vehicle:n}:e.pcds.some(r=>h(r,e.lugs,t))?t.etRange!==null&&e.etRange!==null&&!K(e.etRange,t.etRange)?{key:"et",wheel:s(e.etRange),vehicle:s(t.etRange)}:e.centreBores.length>0&&!e.centreBores.some(r=>x(r,t))?{key:"bore",wheel:`${e.centreBores.join(" / ")} mm`,vehicle:`${t.centreBore} mm`}:null:{key:"pcd",wheel:e.pcds.join(" / "),vehicle:n}}function F(e){return{pcds:e.spec?.pcds??[],lugs:e.spec?.lugs??null,etRange:p(e.spec?.etRange),centreBores:e.spec?.centreBores??[]}}function d(e){const t=e.et,n=e.rearEt??e.et;return{pcds:e.boltPattern?[e.boltPattern]:[],lugs:null,etRange:t==null||n==null?null:[Math.min(t,n),Math.max(t,n)],centreBores:e.centreBore==null?[]:[e.centreBore]}}function B(e,t){const n=u(e,t);return n===null||n.key!=="et"?n:u(e,{...t,etRange:null})}function v(e,t){return u(F(e),t)}function w(e,t){return u(d(e),t)}function _(e,t){return B(d(e),t)===null}function D(e,t){return t?e.filter(n=>_(n,t)):[...e]}function S(e,t){return B(F(e),t)===null}function H(e,t){return t?e.filter(n=>S(n,t)):e}const R=1;function C(e,t){const n=e.spec?.pcds??[],r=e.spec?.centreBores??[],l=p(e.spec?.etRange);if(!t)return{pcds:n,etRange:l,centreBores:r};const o=e.spec?.lugs??null,c=n.filter(a=>h(a,o,t)),i=r.filter(a=>x(a,t));return{pcds:c.length>0?c:n,etRange:l,centreBores:i.length>0?i:r}}function s(e){return E(e[0],e[1])}function b(e,t=""){const n=`${e.slice(0,R).join(" / ")}${t}`,r=e.length-R;return r>0?`${n} +${r} more`:n}const j="·";function k(e,t){return $(e,t).map(n=>n.text)}function X(e,t,{sizes:n}){const r=$(e,t);if(!n)return r.length>0?r:y(e);const l=[...new Set(e.sizes)].sort((c,i)=>c-i).map(c=>({fieldKey:"diameter",text:L(c,c)})),o=r.length>0?[]:y(e).filter(c=>c.fieldKey==="holes");return[...l,...r,...o]}function y(e){return[{fieldKey:"diameter",text:T(e.sizes)},{fieldKey:"holes",text:M(e.spec?.lugs)}].filter(t=>!!t.text)}function $(e,t){const{pcds:n,etRange:r,centreBores:l}=C(e,t),o=[];return n.length>0&&o.push({fieldKey:"pcd",text:`PCD ${b(n)}`}),r!==null&&o.push({fieldKey:"et",text:s(r)}),l.length>0&&o.push({fieldKey:"center_bore",text:`C/B ${b(l," mm")}`}),o}function q(e,t){return k(e,t).join(` ${j} `)}function A(e){return e?[{key:"pcd",name:"Bolt pattern",value:`${e.holes}×${e.circle}`},{key:"bore",name:"Hub bore",value:e.centreBore!==null?`${e.centreBore} mm bore`:null},{key:"et",name:"Offset",value:e.etRange!==null?s(e.etRange):null}]:[]}function G(e){return A(e).map(t=>t.value).filter(t=>t!==null).join(" · ")}export{f as ET_TOLERANCE_MM,j as FITMENT_FIELD_SEPARATOR,R as FITMENT_LINE_MAX,B as fitmentBlockingFailure,A as fitmentChecks,u as fitmentFitFailure,G as fitmentSummary,g as parseBoltPattern,p as parseMmRange,N as splitBoltPattern,w as variantFitFailure,d as variantFitment,_ as variantFitsVehicle,D as variantsFittingVehicle,V as vehicleFitmentFromStock,X as wheelCardSpecFacts,v as wheelFitFailure,F as wheelFitment,C as wheelFitmentFacts,k as wheelFitmentFields,$ as wheelFitmentKeyedFields,q as wheelFitmentLine,S as wheelFitsVehicle,y as wheelSizeLugFacts,H as wheelsFittingVehicle};
@@ -6,6 +6,7 @@ export declare const PRODUCT_GRID_TYPE = "ProductGrid";
6
6
  export declare const GRID_CATALOG_PROP = "catalog";
7
7
  export declare const CATALOG_FILTER_BAR_TYPE = "CatalogFilterBar";
8
8
  export declare const FIELD_USAGE_PROP = "fieldUsage";
9
+ export declare const LISTING_QUERY_PROP = "requestQuery";
9
10
  interface ContentNode {
10
11
  type?: string;
11
12
  props?: Record<string, unknown>;
@@ -16,6 +17,7 @@ export declare function hydrateFieldUsage(data: Data, answers: readonly FieldUsa
16
17
  export declare function listingCatalogKinds(data: Data | null | undefined): ProductKind[];
17
18
  export declare function listingWantsWheelsOnly(kinds: readonly ProductKind[]): boolean;
18
19
  export declare function hydrateWheelsListing(data: Data, products: ProductSummary[] | WheelSummary[]): Data;
20
+ export declare function stampListingQuery(data: Data, query: string): Data;
19
21
  export declare function dehydrateWheelsListing(data: Data): Data;
20
22
  export declare function dehydrateWheelsListingNode<T extends ContentNode>(node: T): T;
21
23
  export {};
@@ -1 +1 @@
1
- import{resolvePlpKinds as y}from"../catalog/plp-item.js";import{isLinkedSource as m,rowsForGridSource as O}from"./grid-source.js";const p="AlloyWheelsListing",G="ProductGrid",L="catalog",W="CatalogFilterBar",c="fieldUsage";function x(t){return t.props?.source}function i(t){return t?.type===G&&m(x(t))}function l(t){return t?.type===W}function f(t){return t?.type===p||i(t)||l(t)}function a(t){const r=t.content??[],e=t.zones??{};return[...r,...Object.values(e).flat()]}function S(t){return t?a(t).some(r=>r?.type===p||i(r)):!1}function T(t){return t?a(t).some(f):!1}function U(t,r){return r.length===0?t:_(t,f,e=>({...e,props:{...e.props??{},[c]:r}}))}function k(t){if(!t)return[];const r=new Set;for(const e of a(t))if(!(e?.type!==p&&!i(e)))for(const n of y(e.props?.kinds))r.add(n);return[...r]}function C(t){return t.length===1&&t[0]==="alloy-wheel"}function I(t,r){return F(t,e=>i(e)?{...e,props:{...g(e).props,[L]:O(x(e)??{},E(r,y(e.props?.kinds)))}}:{...e,props:{...h(e).props,products:r}})}function z(t){return _(t,f,r=>l(r)?w(r):i(r)?g(r):h(r))}function w(t){if(!t.props||!(c in t.props))return t;const{[c]:r,...e}=t.props;return{...t,props:e}}function g(t){const{[L]:r,[c]:e,...n}=t.props??{},s=n.source;if(s&&"wheels"in s){const{wheels:u,...o}=s;n.source=o}return{...t,props:n}}function E(t,r){const e=new Set(r);return t.filter(n=>{const s=n.kind??"alloy-wheel";return e.has(s)})}function N(t){return i(t)?g(t):l(t)?w(t):t?.type===p?h(t):t}function h(t){const{wheels:r,products:e,[c]:n,...s}=t.props??{};return{...t,props:s}}function F(t,r){return _(t,e=>e?.type===p||i(e),r)}function _(t,r,e){const n=o=>r(o)?e(o):o,s=t,u={...t};return s.content&&(u.content=s.content.map(n)),s.zones&&(u.zones=Object.fromEntries(Object.entries(s.zones).map(([o,P])=>[o,P.map(n)]))),u}export{p as ALLOY_WHEELS_LISTING_TYPE,W as CATALOG_FILTER_BAR_TYPE,c as FIELD_USAGE_PROP,L as GRID_CATALOG_PROP,G as PRODUCT_GRID_TYPE,z as dehydrateWheelsListing,N as dehydrateWheelsListingNode,U as hydrateFieldUsage,I as hydrateWheelsListing,k as listingCatalogKinds,C as listingWantsWheelsOnly,S as pageHasWheelsListing,T as pageReadsFieldUsage};
1
+ import{resolvePlpKinds as y}from"../catalog/plp-item.js";import{isLinkedSource as O,rowsForGridSource as G}from"./grid-source.js";const c="AlloyWheelsListing",E="ProductGrid",L="catalog",R="CatalogFilterBar",u="fieldUsage",x="requestQuery";function P(r){return r.props?.source}function i(r){return r?.type===E&&O(P(r))}function f(r){return r?.type===R}function a(r){return r?.type===c||i(r)||f(r)}function g(r){const t=r.content??[],e=r.zones??{};return[...t,...Object.values(e).flat()]}function A(r){return r?g(r).some(t=>t?.type===c||i(t)):!1}function I(r){return r?g(r).some(a):!1}function U(r,t){return t.length===0?r:l(r,a,e=>({...e,props:{...e.props??{},[u]:t}}))}function k(r){if(!r)return[];const t=new Set;for(const e of g(r))if(!(e?.type!==c&&!i(e)))for(const s of y(e.props?.kinds))t.add(s);return[...t]}function C(r){return r.length===1&&r[0]==="alloy-wheel"}function N(r,t){return F(r,e=>i(e)?{...e,props:{...h(e).props,[L]:G(P(e)??{},W(t,y(e.props?.kinds)))}}:{...e,props:{..._(e).props,products:t}})}function z(r,t){const e=t.replace(/^\?/,"");return e?l(r,s=>s?.type===c,s=>({...s,props:{...s.props??{},[x]:e}})):r}function Y(r){return l(r,a,t=>f(t)?m(t):i(t)?h(t):_(t))}function m(r){if(!r.props||!(u in r.props))return r;const{[u]:t,...e}=r.props;return{...r,props:e}}function h(r){const{[L]:t,[u]:e,...s}=r.props??{},n=s.source;if(n&&"wheels"in n){const{wheels:p,...o}=n;s.source=o}return{...r,props:s}}function W(r,t){const e=new Set(t);return r.filter(s=>{const n=s.kind??"alloy-wheel";return e.has(n)})}function D(r){return i(r)?h(r):f(r)?m(r):r?.type===c?_(r):r}function _(r){const{wheels:t,products:e,[u]:s,[x]:n,...p}=r.props??{};return{...r,props:p}}function F(r,t){return l(r,e=>e?.type===c||i(e),t)}function l(r,t,e){const s=o=>t(o)?e(o):o,n=r,p={...r};return n.content&&(p.content=n.content.map(s)),n.zones&&(p.zones=Object.fromEntries(Object.entries(n.zones).map(([o,w])=>[o,w.map(s)]))),p}export{c as ALLOY_WHEELS_LISTING_TYPE,R as CATALOG_FILTER_BAR_TYPE,u as FIELD_USAGE_PROP,L as GRID_CATALOG_PROP,x as LISTING_QUERY_PROP,E as PRODUCT_GRID_TYPE,Y as dehydrateWheelsListing,D as dehydrateWheelsListingNode,U as hydrateFieldUsage,N as hydrateWheelsListing,k as listingCatalogKinds,C as listingWantsWheelsOnly,A as pageHasWheelsListing,I as pageReadsFieldUsage,z as stampListingQuery};
@@ -1 +1 @@
1
- import{getWheelBySlug as v}from"./wheels.js";import{getWheelSpec as y}from"./wheel-specs.js";import{getFitments as K}from"./fitments.js";import{COLLECTION_FIELD_KEY as L}from"../content/field-usage.js";import{parseBoltPattern as R}from"./plp-fitment-match.js";import{etRangeLabel as B,trimDecimal as w}from"./spec-format.js";import{variantSpecLabel as C}from"./variant-spec.js";import{findVariant as P}from"./variants.js";import{lugDigits as d}from"./lug-count.js";function m(e){return e&&e.trim()?e:"—"}function h(e){return e[0]?.replace(/^\s*\d+\s*[×x]\s*/,"")||"—"}function p(e,t,i,n,l){const o=R(l?.boltPattern).holes,s=o!=null&&o>0?o:e.lugs,c=d(s),r=e.pcds.length?e.pcds.join(" · "):"—",a=e.centreBores.length?`${e.centreBores.join(" / ")} mm`:"—",u=e.etRange.length>=2?B(e.etRange[0],e.etRange[1]):"—",f=n??"",S=l?C(l):"—";return{rows:[{label:"Your Selection",value:"—",accent:!0},{label:"Finish",value:i,fieldKey:"wheel_finish_ref"},{label:"Size",value:f},{label:"Wheel Spec",value:S},{label:"Lug Count",value:m(c&&`${c}-lug`),fieldKey:"holes"},{label:"Bolt Pattern",value:r,fieldKey:"bolt_pattern"},{label:"Offset (ET)",value:u,fieldKey:"et"},{label:"Process",value:m(t),fieldKey:L},{label:"Centre Bore",value:a,fieldKey:"center_bore"},{label:"Load Rating",value:m(e.loadRating),fieldKey:"load_rating"},{label:"Bump Profile",value:m(e.bumpProfile),fieldKey:"hump"},{label:"Rim Profile",value:m(e.rimProfile),fieldKey:"flange"},{label:"Cap Code",value:m(e.cap),fieldKey:"cap_code"}],size:f}}function g(e){return e.length?e[Math.ceil(e.length/2)-1]:void 0}function _(e,t){const i=e?.diameter??g(t?.sizes??[]),n=e?.width??g(t?.widths??[]),l=t?.etRange??[],[o,s]=l,c=e?.et??(l.length>=2&&o===s?o:void 0),r=a=>m(a!=null?w(a):void 0);return{diameter:r(i),width:r(n),offset:r(c)}}function b(e,t){const i=e?.centreBore??g(t.centreBores);return{..._(e,t),bore:m(i!=null?`${i} mm`:void 0)}}function O(e){return{slug:e.slug,name:e.name,process:e.process,spokes:e.spokes,mesh:e.mesh,spec:e.spec??null,finishes:e.finishes.map(t=>({name:t.name,image:t.src||t.angles?.[0]||null})),coverImage:e.coverImage??null,variants:e.variants}}function T(e,t,i){const n=e?.spec;if(!e||!n)return{rows:[],diagram:null};const l=e.finishes.find(u=>u.name===t)??e.finishes[0],o=P(e.variants??[],l?.name,i),{rows:s,size:c}=p(n,e.process,l?.name??"—",i,o),r=b(o,n),a={wheelName:e.name,imageSrc:l?.image??e.coverImage??null,...r,holes:d(n.lugs),pcd:h(n.pcds),spokes:e.spokes,mesh:e.mesh};return{rows:s,diagram:a}}function $(e,t,i){const n=v(e),l=y(e);if(!n||!l)return{rows:[],diagram:null};const o=K(e),s=n.finishes.find(f=>f.name===t)??n.finishes[0],{rows:c,size:r}=p(l,n.process,s?.name??"—",i,void 0),a=b(void 0,l),u={wheelName:n.name,imageSrc:s?.angles?.[0]??s?.src??null,...a,holes:o[0]?.holes?.toString()??d(l.lugs),pcd:o[0]?.pcd??h(l.pcds),spokes:n.spokes,mesh:n.mesh};return{rows:c,diagram:u}}export{$ as buildLegacySpecSheet,T as buildSpecSheet,_ as dimensionCallouts,O as sourceFromWheel};
1
+ import{getWheelBySlug as v}from"./wheels.js";import{getWheelSpec as y}from"./wheel-specs.js";import{getFitments as K}from"./fitments.js";import{COLLECTION_FIELD_KEY as L}from"../content/field-usage.js";import{parseBoltPattern as B,splitBoltPattern as R}from"./plp-fitment-match.js";import{etRangeLabel as P,trimDecimal as w}from"./spec-format.js";import{variantSpecLabel as C}from"./variant-spec.js";import{findVariant as _}from"./variants.js";import{lugDigits as d}from"./lug-count.js";function m(e){return e&&e.trim()?e:"—"}function h(e){return R(e[0]).circleText||"—"}function p(e,t,i,n,l){const o=B(l?.boltPattern).holes,s=o!=null&&o>0?o:e.lugs,c=d(s),r=e.pcds.length?e.pcds.join(" · "):"—",a=e.centreBores.length?`${e.centreBores.join(" / ")} mm`:"—",u=e.etRange.length>=2?P(e.etRange[0],e.etRange[1]):"—",f=n??"",S=l?C(l):"—";return{rows:[{label:"Your Selection",value:"—",accent:!0},{label:"Finish",value:i,fieldKey:"wheel_finish_ref"},{label:"Size",value:f},{label:"Wheel Spec",value:S},{label:"Lug Count",value:m(c&&`${c}-lug`),fieldKey:"holes"},{label:"Bolt Pattern",value:r,fieldKey:"bolt_pattern"},{label:"Offset (ET)",value:u,fieldKey:"et"},{label:"Process",value:m(t),fieldKey:L},{label:"Centre Bore",value:a,fieldKey:"center_bore"},{label:"Load Rating",value:m(e.loadRating),fieldKey:"load_rating"},{label:"Bump Profile",value:m(e.bumpProfile),fieldKey:"hump"},{label:"Rim Profile",value:m(e.rimProfile),fieldKey:"flange"},{label:"Cap Code",value:m(e.cap),fieldKey:"cap_code"}],size:f}}function g(e){return e.length?e[Math.ceil(e.length/2)-1]:void 0}function x(e,t){const i=e?.diameter??g(t?.sizes??[]),n=e?.width??g(t?.widths??[]),l=t?.etRange??[],[o,s]=l,c=e?.et??(l.length>=2&&o===s?o:void 0),r=a=>m(a!=null?w(a):void 0);return{diameter:r(i),width:r(n),offset:r(c)}}function b(e,t){const i=e?.centreBore??g(t.centreBores);return{...x(e,t),bore:m(i!=null?`${i} mm`:void 0)}}function O(e){return{slug:e.slug,name:e.name,process:e.process,spokes:e.spokes,mesh:e.mesh,spec:e.spec??null,finishes:e.finishes.map(t=>({name:t.name,image:t.src||t.angles?.[0]||null})),coverImage:e.coverImage??null,variants:e.variants}}function $(e,t,i){const n=e?.spec;if(!e||!n)return{rows:[],diagram:null};const l=e.finishes.find(u=>u.name===t)??e.finishes[0],o=_(e.variants??[],l?.name,i),{rows:s,size:c}=p(n,e.process,l?.name??"—",i,o),r=b(o,n),a={wheelName:e.name,imageSrc:l?.image??e.coverImage??null,...r,holes:d(n.lugs),pcd:h(n.pcds),spokes:e.spokes,mesh:e.mesh};return{rows:s,diagram:a}}function j(e,t,i){const n=v(e),l=y(e);if(!n||!l)return{rows:[],diagram:null};const o=K(e),s=n.finishes.find(f=>f.name===t)??n.finishes[0],{rows:c,size:r}=p(l,n.process,s?.name??"—",i,void 0),a=b(void 0,l),u={wheelName:n.name,imageSrc:s?.angles?.[0]??s?.src??null,...a,holes:o[0]?.holes?.toString()??d(l.lugs),pcd:o[0]?.pcd??h(l.pcds),spokes:n.spokes,mesh:n.mesh};return{rows:c,diagram:u}}export{j as buildLegacySpecSheet,$ as buildSpecSheet,x as dimensionCallouts,O as sourceFromWheel};
package/dist/words.d.ts CHANGED
@@ -176,6 +176,7 @@ export type WebBuilderPhrase =
176
176
  | "Background color"
177
177
  | "Background image"
178
178
  | "Background images"
179
+ | "Background width"
179
180
  | "Badge"
180
181
  | "Banner"
181
182
  | "Banner headline"
@@ -1060,7 +1061,6 @@ export type WebBuilderPhrase =
1060
1061
  | "Success heading"
1061
1062
  | "Success message"
1062
1063
  | "Superscript"
1063
- | "Surfaces"
1064
1064
  | "Switch now"
1065
1065
  | "Switch to Box footer"
1066
1066
  | "Synced from the blog post."
@@ -1150,7 +1150,6 @@ export type WebBuilderPhrase =
1150
1150
  | "Three across"
1151
1151
  | "Three ladder"
1152
1152
  | "Three stagger"
1153
- | "Ticker"
1154
1153
  | "Ticker items"
1155
1154
  | "TikTok"
1156
1155
  | "Timeline entries"
@@ -1750,6 +1749,7 @@ export type StorefrontBlocksPhrase =
1750
1749
  | "Price · low to high"
1751
1750
  | "Priority handling."
1752
1751
  | "Process"
1752
+ | "Product Gallery"
1753
1753
  | "Product hero"
1754
1754
  | "Product link"
1755
1755
  | "Product photos"