efficient-storefront-blocks 0.79.0 → 0.80.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 (80) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/chunks/{EditorPreviewCheckout-6S2Q3GXI.js → EditorPreviewCheckout-PSONSVRR.js} +1 -1
  3. package/dist/chunks/{SiteEditorProvider-B6JGOUMX.js → SiteEditorProvider-PWHW2UA6.js} +1 -1
  4. package/dist/chunks/{chunk-WYNB6IMA.js → chunk-3Q66B5NU.js} +1 -1
  5. package/dist/chunks/chunk-6MHGEO3D.js +320 -0
  6. package/dist/chunks/{chunk-ZA227AIS.js → chunk-MCCDGDRW.js} +1 -1
  7. package/dist/chunks/{fitment-data-KCPZ77HO.js → fitment-data-Q2TJ6FBU.js} +1 -1
  8. package/dist/contract.js +1 -1
  9. package/dist/editor/lib/document/blocks/commerce/ProductColour/fields.d.ts +2 -0
  10. package/dist/editor/lib/document/blocks/commerce/ProductColour/fields.js +1 -0
  11. package/dist/editor/lib/document/blocks/commerce/ProductPrice/fields.d.ts +2 -0
  12. package/dist/editor/lib/document/blocks/commerce/ProductPrice/fields.js +1 -0
  13. package/dist/editor/lib/document/blocks/commerce/ProductSize/fields.d.ts +2 -0
  14. package/dist/editor/lib/document/blocks/commerce/ProductSize/fields.js +1 -0
  15. package/dist/editor/lib/document/blocks/commerce/SpecTable/fields.js +1 -1
  16. package/dist/editor/lib/document/blocks/commerce/index.d.ts +1 -1
  17. package/dist/editor/lib/document/blocks/commerce/index.js +1 -1
  18. package/dist/editor/lib/document/config.d.ts +1 -0
  19. package/dist/editor/lib/document/config.js +1 -1
  20. package/dist/editor/lib/storefront-editor-words.d.ts +0 -1
  21. package/dist/editor/lib/storefront-editor-words.js +1 -1
  22. package/dist/index.js +28 -28
  23. package/dist/render/app/globals.css +7 -0
  24. package/dist/render/built-with.json +1 -1
  25. package/dist/render/components/EuTyreLabelCard.js +1 -1
  26. package/dist/render/components/ProductCard.js +1 -1
  27. package/dist/render/components/SpecTable.d.ts +2 -1
  28. package/dist/render/components/SpecTable.js +1 -1
  29. package/dist/render/components/WheelCardFrame.d.ts +3 -15
  30. package/dist/render/components/WheelCardFrame.js +1 -1
  31. package/dist/render/components/card-pieces/CardEyebrow.d.ts +6 -0
  32. package/dist/render/components/card-pieces/CardEyebrow.js +1 -0
  33. package/dist/render/components/card-pieces/CardName.d.ts +4 -0
  34. package/dist/render/components/card-pieces/CardName.js +1 -0
  35. package/dist/render/components/card-pieces/CardPicture.d.ts +18 -0
  36. package/dist/render/components/card-pieces/CardPicture.js +1 -0
  37. package/dist/render/components/card-pieces/CardSpecs.d.ts +20 -0
  38. package/dist/render/components/card-pieces/CardSpecs.js +1 -0
  39. package/dist/render/components/card-pieces/HostPart.d.ts +6 -0
  40. package/dist/render/components/card-pieces/HostPart.js +1 -0
  41. package/dist/render/components/card-pieces/ProductCardState.d.ts +1 -0
  42. package/dist/render/components/card-pieces/ProductCardState.js +1 -1
  43. package/dist/render/components/pdp-dynamic/DynamicSpecTable.d.ts +1 -0
  44. package/dist/render/components/pdp-dynamic/DynamicSpecTable.js +1 -1
  45. package/dist/render/components/wheels-plp/PlpCard.d.ts +1 -1
  46. package/dist/render/components/wheels-plp/PlpCard.js +1 -1
  47. package/dist/render/lib/document/blocks/commerce/ProductColour/meta.d.ts +2 -0
  48. package/dist/render/lib/document/blocks/commerce/ProductColour/meta.js +1 -0
  49. package/dist/render/lib/document/blocks/commerce/ProductColour/render.d.ts +2 -0
  50. package/dist/render/lib/document/blocks/commerce/ProductColour/render.js +1 -0
  51. package/dist/render/lib/document/blocks/commerce/ProductPrice/meta.d.ts +2 -0
  52. package/dist/render/lib/document/blocks/commerce/ProductPrice/meta.js +1 -0
  53. package/dist/render/lib/document/blocks/commerce/ProductPrice/render.d.ts +2 -0
  54. package/dist/render/lib/document/blocks/commerce/ProductPrice/render.js +1 -0
  55. package/dist/render/lib/document/blocks/commerce/ProductSize/meta.d.ts +2 -0
  56. package/dist/render/lib/document/blocks/commerce/ProductSize/meta.js +1 -0
  57. package/dist/render/lib/document/blocks/commerce/ProductSize/render.d.ts +2 -0
  58. package/dist/render/lib/document/blocks/commerce/ProductSize/render.js +1 -0
  59. package/dist/render/lib/document/blocks/commerce/SpecTable/meta.d.ts +6 -0
  60. package/dist/render/lib/document/blocks/commerce/SpecTable/meta.js +1 -1
  61. package/dist/render/lib/document/blocks/commerce/SpecTable/render.js +1 -1
  62. package/dist/render/lib/document/blocks/commerce/metas.d.ts +3 -0
  63. package/dist/render/lib/document/blocks/commerce/metas.js +1 -1
  64. package/dist/render/lib/document/blocks/commerce/renders.d.ts +3 -0
  65. package/dist/render/lib/document/blocks/commerce/renders.js +1 -1
  66. package/dist/render/lib/document/card-templates.js +1 -1
  67. package/dist/render/lib/document/lazy-draws.js +1 -1
  68. package/dist/render/lib/document/render-config.d.ts +1 -0
  69. package/dist/render/lib/document/render-config.js +1 -1
  70. package/dist/render/lib/document/section-to-box-rows-spec.d.ts +1 -0
  71. package/dist/render/lib/document/section-to-box-rows-spec.js +1 -0
  72. package/dist/render/lib/tyres/spec-sheet.d.ts +0 -2
  73. package/dist/render/lib/tyres/spec-sheet.js +1 -1
  74. package/dist/words.d.ts +1 -1
  75. package/dist/words.js +2 -2
  76. package/package.json +8 -3
  77. package/dist/chunks/chunk-NE47RYTU.js +0 -320
  78. /package/dist/chunks/{chunk-NE47RYTU.js.LEGAL.txt → chunk-6MHGEO3D.js.LEGAL.txt} +0 -0
  79. /package/dist/chunks/{chunk-PBU5KHED.js → chunk-JUGY3EKR.js} +0 -0
  80. /package/dist/chunks/{chunk-IL5OJ6VZ.js → chunk-X5W6GJLI.js} +0 -0
@@ -1311,6 +1311,13 @@ body:has([data-page-width="full"]) footer {
1311
1311
  @theme {
1312
1312
  --breakpoint-view-tablet: 720px;
1313
1313
  --breakpoint-view-desktop: 1100px;
1314
+ /* THE WIDE LINE: below it a page draws its phone layout (`max-view-wide:`),
1315
+ from it the wide one (`view-wide:`). Under the v1 rules it is 800, the line
1316
+ every hand-typed `max-[800px]:` / `min-[800px]:` drew, and it compiles to
1317
+ the same `width < 800px` / `width >= 800px`. The switch to the v2 rules
1318
+ (three-views plan PR 11) moves it to 720, the Tablet view's edge, in this
1319
+ one line; the same guard holds it to the rules in force. */
1320
+ --breakpoint-view-wide: 800px;
1314
1321
  }
1315
1322
 
1316
1323
  @theme inline {
@@ -1,3 +1,3 @@
1
1
  {
2
- "efficient-web-builder": "48.1.1"
2
+ "efficient-web-builder": "48.2.0"
3
3
  }
@@ -1 +1 @@
1
- import{jsx as a,jsxs as l}from"react/jsx-runtime";import{noiseLabel as i}from"../lib/tyres/eu-tyre-label.js";const n={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,11px)]",labelLarge:"text-[length:var(--size-label,12px)]"};function o(e){const r=[];e.fuelClass&&r.push({key:"Fuel efficiency",value:e.fuelClass}),e.wetGripClass&&r.push({key:"Wet grip",value:e.wetGripClass});const t=i(e);return t&&r.push({key:"Rolling noise",value:t}),r}function c(e){const r=[];return e.severeSnow&&r.push("3PMSF severe snow"),e.iceGrip&&r.push("Ice grip"),r}function m({label:e}){const r=o(e),t=c(e);return l("div",{className:"flex flex-col bg-[var(--card-bg)] p-5",children:[a("h3",{className:`font-heading3 ${n.headingSmall} font-medium leading-tight`,children:e.size}),a("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${n.labelLarge}`,children:r.map(s=>l("div",{className:"flex items-baseline justify-between gap-3",children:[a("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:s.key}),a("dd",{className:"text-right text-fg",children:s.value})]},s.key))}),t.length>0?a("ul",{className:"mt-3 flex flex-wrap gap-2",children:t.map(s=>a("li",{className:`border border-line px-2 py-1 font-mono ${n.labelSmall} uppercase tracking-[0.14em] text-fg-dim`,children:s},s))}):null,l("a",{href:e.eprelUrl,target:"_blank",rel:"noopener noreferrer",className:`group mt-4 inline-flex items-center gap-2 border-t border-line pt-3 font-mono ${n.labelLarge} uppercase tracking-[0.2em] text-accent transition-colors hover:text-fg`,children:[`EPREL ${e.registrationNumber}`,a("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]})}export{m as default};
1
+ import{jsx as a,jsxs as i}from"react/jsx-runtime";import{noiseLabel as l}from"../lib/tyres/eu-tyre-label.js";const n={headingSmall:"text-[length:var(--size-headingSmall,22px)]",labelSmall:"text-[length:var(--size-label,11px)]",labelLarge:"text-[length:var(--size-label,12px)]"};function o(e){const r=[];e.fuelClass&&r.push({key:"Fuel efficiency",value:e.fuelClass}),e.wetGripClass&&r.push({key:"Wet grip",value:e.wetGripClass});const t=l(e);return t&&r.push({key:"Rolling noise",value:t}),e.loadIndicator&&r.push({key:"Reinforced",value:e.loadIndicator}),r}function c(e){const r=[];return e.severeSnow&&r.push("3PMSF severe snow"),e.iceGrip&&r.push("Ice grip"),r}function m({label:e}){const r=o(e),t=c(e);return i("div",{className:"flex flex-col bg-[var(--card-bg)] p-5",children:[a("h3",{className:`font-heading3 ${n.headingSmall} font-medium leading-tight`,children:e.size}),a("dl",{className:`mt-3 flex flex-col gap-2 font-mono ${n.labelLarge}`,children:r.map(s=>i("div",{className:"flex items-baseline justify-between gap-3",children:[a("dt",{className:"uppercase tracking-[0.14em] text-fg-dim",children:s.key}),a("dd",{className:"text-right text-fg",children:s.value})]},s.key))}),t.length>0?a("ul",{className:"mt-3 flex flex-wrap gap-2",children:t.map(s=>a("li",{className:`border border-line px-2 py-1 font-mono ${n.labelSmall} uppercase tracking-[0.14em] text-fg-dim`,children:s},s))}):null,i("a",{href:e.eprelUrl,target:"_blank",rel:"noopener noreferrer",className:`group mt-4 inline-flex items-center gap-2 border-t border-line pt-3 font-mono ${n.labelLarge} uppercase tracking-[0.2em] text-accent transition-colors hover:text-fg`,children:[`EPREL ${e.registrationNumber}`,a("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-1",children:"→"})]})]})}export{m as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,Fragment as X,jsxs as q}from"react/jsx-runtime";import G from"next/image";import{useState as H}from"react";import{setSecondSrc as M}from"../lib/wheels/set-mode.js";import{wheelCardSpecFacts as O}from"../lib/wheels/plp-fitment-match.js";import{CARD_INDEX_BADGE_CLASS as U,CARD_INDEX_CLASS as J}from"efficient-web-builder/format/lib/sections/product-card-style";import{coverSrcForWheel as K,resolvePaintedSrc as Q}from"../lib/wheels/cover-rendering.js";import{applyCardAnswers as T}from"../lib/content/field-usage.js";import{wheelCardEyebrow as V,withSetChip as Y}from"./ProductCardEyebrow.js";import{withRMark as S}from"efficient-web-builder/render/components/RMark";import Z from"./WheelPlaceholder.js";import{useProductCardChrome as ee}from"./ProductCardChrome.js";import re,{CardBuyDialog as oe}from"./card-pieces/CardBuyButton.js";import te from"./card-pieces/CardFinishSwatches.js";import se from"./card-pieces/CardPrice.js";import ae from"./card-pieces/CardProductBadge.js";import{useWheelCardState as ie,WheelCardStateProvider as ne}from"./card-pieces/ProductCardState.js";import de,{cardSpecFields as ce}from"./WheelCardFrame.js";function le({wheel:i,variant:s="compact",defaultFinish:e}){return r(ne,{wheel:i,defaultFinish:e,children:r(me,{variant:s})})}function me({variant:i}){const s=i==="catalog",{wheel:e,sel:t,isSet:n}=ie(),{imageBackgroundFill:b,spinOnHover:F,coverIndex:y,indexBadge:m,outline:B,showBadge:x,fieldUsage:h,reserveEyebrow:E,showCardPrice:P,showCardFinishes:k,showCardSizes:v,showCardBuy:u,showCardPage:f,imageSizes:$}=ee(),d=s&&(u||f),_=T(O(e,null,{sizes:v}),h).map(o=>o.text),A=K(e,y,t.finish?.name,t.shownSrc),z="h-full w-full",D=F?`transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] ${s?"group-hover:rotate-[72deg]":"group-hover:rotate-[60deg]"}`:"",[p,I]=H(()=>new Set),L=o=>I(a=>a.has(o)?a:new Set(a).add(o)),c=Q({overrideSrc:A,hookSrc:t.shownSrc,failed:p}),w=(o,a)=>r(G,{src:o,alt:a,width:1e3,height:1e3,sizes:$,className:`block object-contain ${D} ${z}`,draggable:!1,onError:()=>L(o)},o),g=t.finish?`${e.name} — ${t.finish.name}`:e.name,j=c?w(c,g):r(Z,{imageLabel:e.name}),l=n?M(e.finishes?.find(o=>o.name===t.finish?.name),c):null,W=l&&!p.has(l)?w(l,`${g} — right`):void 0,C=V({kindLabel:null,brand:null,process:e.process?S(e.process):null},h),N=n&&!s?Y(C):C,R=m!=="off"?r("span",{"aria-hidden":!0,className:`${J} ${U}`}):null;return q(X,{children:[r(de,{variant:i,wide:n&&s,href:`/wheels/${e.slug}`,outline:B,imageBackgroundFill:b,probes:t.probes,reserveEyebrow:E,indexBadge:R,badges:r(ae,{show:x,numbered:m!=="off",axleSets:!0}),image:j,imageSecond:W,eyebrow:N,name:S(e.name),spec:ce(_),price:r(se,{show:P,quoteSets:!0}),swatches:r(te,{show:k}),identityLink:d,wholeCardLink:!0,buy:r(re,{buy:d&&u,page:d&&f})}),r(oe,{})]})}export{le as default};
1
+ "use client";import{jsx as e,Fragment as N,jsxs as R}from"react/jsx-runtime";import U from"next/image";import{useState as X}from"react";import{setSecondSrc as q}from"../lib/wheels/set-mode.js";import{CARD_INDEX_BADGE_CLASS as G,CARD_INDEX_CLASS as H}from"efficient-web-builder/format/lib/sections/product-card-style";import{coverSrcForWheel as M,resolvePaintedSrc as O}from"../lib/wheels/cover-rendering.js";import{wheelCardEyebrow as J,withSetChip as K}from"./ProductCardEyebrow.js";import{withRMark as Q}from"efficient-web-builder/render/components/RMark";import T from"./WheelPlaceholder.js";import{useProductCardChrome as V}from"./ProductCardChrome.js";import Y,{CardBuyDialog as Z}from"./card-pieces/CardBuyButton.js";import ee from"./card-pieces/CardFinishSwatches.js";import re from"./card-pieces/CardPrice.js";import oe from"./card-pieces/CardProductBadge.js";import{useWheelCardState as te,WheelCardStateProvider as se}from"./card-pieces/ProductCardState.js";import{CardSpecFacts as ie}from"./card-pieces/CardSpecs.js";import ae from"./WheelCardFrame.js";function ne({wheel:a,variant:s="compact",defaultFinish:r}){return e(se,{wheel:a,defaultFinish:r,children:e(de,{variant:s})})}function de({variant:a}){const s=a==="catalog",{wheel:r,sel:t,isSet:n}=te(),{imageBackgroundFill:S,spinOnHover:b,coverIndex:B,indexBadge:m,outline:y,showBadge:F,fieldUsage:h,reserveEyebrow:x,showCardPrice:E,showCardFinishes:P,showCardSizes:k,showCardBuy:u,showCardPage:f,imageSizes:v}=V(),d=s&&(u||f),$=M(r,B,t.finish?.name,t.shownSrc),_="h-full w-full",z=b?`transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] ${s?"group-hover:rotate-[72deg]":"group-hover:rotate-[60deg]"}`:"",[g,A]=X(()=>new Set),D=o=>A(i=>i.has(o)?i:new Set(i).add(o)),c=O({overrideSrc:$,hookSrc:t.shownSrc,failed:g}),p=(o,i)=>e(U,{src:o,alt:i,width:1e3,height:1e3,sizes:v,className:`block object-contain ${z} ${_}`,draggable:!1,onError:()=>D(o)},o),w=t.finish?`${r.name} — ${t.finish.name}`:r.name,I=c?p(c,w):e(T,{imageLabel:r.name}),l=n?q(r.finishes?.find(o=>o.name===t.finish?.name),c):null,L=l&&!g.has(l)?p(l,`${w} — right`):void 0,C=J({kindLabel:null,brand:null,process:r.process?Q(r.process):null},h),j=n&&!s?K(C):C,W=m!=="off"?e("span",{"aria-hidden":!0,className:`${H} ${G}`}):null;return R(N,{children:[e(ae,{variant:a,wide:n&&s,href:`/wheels/${r.slug}`,outline:y,imageBackgroundFill:S,probes:t.probes,reserveEyebrow:x,indexBadge:W,badges:e(oe,{show:F,numbered:m!=="off",axleSets:!0}),image:I,imageSecond:L,eyebrow:j,spec:e(ie,{sizes:k,fieldUsage:h}),price:e(re,{show:E,quoteSets:!0}),swatches:e(ee,{show:P}),identityLink:d,wholeCardLink:!0,buy:e(Y,{buy:d&&u,page:d&&f})}),e(Z,{})]})}export{ne as default};
@@ -14,6 +14,7 @@ export interface SpecTableProps {
14
14
  editing?: boolean;
15
15
  nodeId?: string;
16
16
  omitHead?: boolean;
17
+ template?: unknown;
17
18
  capped?: boolean;
18
19
  }
19
- export default function SpecTable({ num, title, description, rows, builtInLabels, diagram, editing, omitHead, nodeId, capped, }: SpecTableProps): import("react").JSX.Element;
20
+ export default function SpecTable({ num, title, description, rows, builtInLabels, diagram, editing, omitHead, nodeId, capped, template, }: SpecTableProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{Fragment as y,jsx as e,jsxs as l}from"react/jsx-runtime";import L from"./SectionBand.js";import{useScopeClass as E}from"../lib/use-scope-class.js";import{useState as z}from"react";import T from"efficient-web-builder/render/components/SectionHeader";import $ from"./WheelSvg.js";import{renderGold as v,renderHeadline as I}from"efficient-web-builder/render/components/goldPhrases";import{inchLabel as S}from"../lib/wheels/spec-format.js";import D from"./DimensionArrowMarkers.js";import _ from"./SpecTablePartBridge.js";import{SPEC_REGION_ATTR as j}from"efficient-web-builder/format/lib/sections/spec-table-regions";import{say as N}from"efficient-web-builder/format/lib/editor-words";import{useEnglish as V}from"./EnglishVariant.js";import{sizedImage as W}from"efficient-web-builder/format/lib/sized-image";const B="(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?{[j]:a}:{}}function C({editing:i,nodeId:a,children:s}){return!i||!a?e(y,{children:s}):e(_,{nodeId:a,children:s})}function k({row:i,topBorder:a,editing:s}){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(s,"rowLabel"),className:"uppercase text-fg-dim",children:i.label}),e("span",{...r(s,"rowValue"),className:`text-right ${i.accent?"text-accent":"text-fg"}`,children:i.value})]})}function R({diagram:i,editing:a}){const[s,g]=z(!1),n=E("spec"),{wheelName:p,imageSrc:m,diameter:f,width:h,offset:u,holes:b,pcd:x,spokes:o,mesh:t,bore:c}=i,w=!!m&&!s;return l("div",{className:"sf-card bg-surface p-6 max-[1100px]: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(#${n}-L)`,markerEnd:`url(#${n}-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(D,{id:n})]}),w?e("img",{...W(m,{fallbackWidth:960}),sizes:B,alt:`${p} — face`,onError:()=>g(!0),loading:"lazy",className:"relative z-[1] block h-[80%] w-[80%] object-contain"}):e($,{spokes:o,mesh:t,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:["⌀ ",S(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 ",S(h)]})]}),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:b})]}),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:x})]}),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:[o,t?" + 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:c})]}),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:u})]})]})]})}function A({num:i,title:a,description:s,rows:g,builtInLabels:n=!1,diagram:p,editing:m=!1,omitHead:f=!1,nodeId:h,capped:u=!0}){const b=V(),x=(g??[]).filter(t=>(t?.label??"").trim()||(t?.value??"").trim()).map(t=>n&&t.label?{...t,label:b(t.label)}:t),o=x.length>0?x:m?[{label:N("Label"),value:N("Value")}]:[];return e(L,{className:f?"border-b border-line pt-0 pb-[120px] max-[1100px]:pt-0 max-[1100px]:pb-20":"border-b border-line py-[120px] max-[1100px]:py-20",capped:u,children:l(C,{editing:m,nodeId:h,children:[f?null:e(T,{num:i?v(i):void 0,title:a?I(a,!1):void 0,description:s?v(s):void 0,accent:!0}),p?l("div",{className:"grid grid-cols-[1fr_400px] gap-12 max-[1100px]:grid-cols-1",children:[e("div",{children:o.map((t,c)=>e(k,{row:t,topBorder:c>0,editing:m},c))}),e(R,{diagram:p,editing:m})]}):e("div",{className:"grid grid-cols-2 gap-x-16 max-[900px]:grid-cols-1",children:o.map((t,c)=>e(k,{row:t,topBorder:!0,editing:m},c))})]})})}export{A as default};
1
+ "use client";import{Fragment as E,jsx as e,jsxs as l}from"react/jsx-runtime";import z from"./SectionBand.js";import{useScopeClass as I}from"../lib/use-scope-class.js";import{useState as C}from"react";import R from"efficient-web-builder/render/components/SectionHeader";import{CardTemplateRows as D}from"efficient-web-builder/render/components/CardRowContext";import j from"./WheelSvg.js";import{renderGold as w,renderHeadline as V}from"efficient-web-builder/render/components/goldPhrases";import{inchLabel as y}from"../lib/wheels/spec-format.js";import W from"./DimensionArrowMarkers.js";import B from"./SpecTablePartBridge.js";import{SPEC_REGION_ATTR as A}from"efficient-web-builder/format/lib/sections/spec-table-regions";import{say as _}from"efficient-web-builder/format/lib/editor-words";import{applyShopMark as M}from"efficient-web-builder/format/lib/markup";import{useEnglish as P}from"./EnglishVariant.js";import{sizedImage as G}from"efficient-web-builder/format/lib/sized-image";const $={between:"[&>*+*]:border-t [&>*+*]:border-line",every:"[&>*]:border-t [&>*]:border-line"},T="[&_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]",H="(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?{[A]:a}:{}}function O({editing:i,nodeId:a,children:n}){return!i||!a?e(E,{children:n}):e(B,{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 F({diagram:i,editing:a}){const[n,b]=C(!1),o=I("spec"),{wheelName:p,imageSrc:s,diameter:f,width:x,offset:h,holes:v,pcd:S,spokes:m,mesh:c,bore:N}=i,g=!!s&&!n;return l("div",{className:"sf-card bg-surface p-6 max-[1100px]: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(W,{id:o})]}),g?e("img",{...G(s,{fallbackWidth:960}),sizes:H,alt:`${p} — face`,onError:()=>b(!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(x)]})]}),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:h})]})]})]})}function Y({num:i,title:a,description:n,rows:b,builtInLabels:o=!1,diagram:p,editing:s=!1,omitHead:f=!1,nodeId:x,capped:h=!0,template:v}){const S=P(),m=(b??[]).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:_("Label"),value:_("Value")}]:[],N=c.map(t=>({label:t.label??"",value:t.accent&&t.value?M(t.value,0,t.value.length,"highlight").text:t.value??""})),g=t=>p?l("div",{className:"grid grid-cols-[1fr_400px] gap-12 max-[1100px]:grid-cols-1",children:[e("div",{className:t?`${$.between} ${T}`:void 0,children:t??c.map((k,u)=>e(L,{row:k,topBorder:u>0,editing:s},u))}),e(F,{diagram:p,editing:s})]}):e("div",{className:`grid grid-cols-2 gap-x-16 max-[900px]:grid-cols-1${t?` ${$.every} ${T}`:""}`,children:t??c.map((k,u)=>e(L,{row:k,topBorder:!0,editing:s},u))});return e(z,{className:f?"border-b border-line pt-0 pb-[120px] max-[1100px]:pt-0 max-[1100px]:pb-20":"border-b border-line py-[120px] max-[1100px]:py-20",capped:h,children:l(O,{editing:s,nodeId:x,children:[f?null:e(R,{num:i?w(i):void 0,title:a?V(a,!1):void 0,description:n?w(n):void 0,accent:!0}),e(D,{ownerId:x??"",ownerType:"SpecTable",Template:v,rows:N,fallback:g(),children:t=>g(t)})]})})}export{Y as default};
@@ -5,20 +5,8 @@ export declare const cardRowsGridStyle: (rowGap: string) => CSSProperties;
5
5
  export declare const cardRowsGap: (zone: {
6
6
  style: CSSProperties;
7
7
  }) => string;
8
- export declare const setPlateWidthCss: (gap: number | string) => string;
9
- export declare const GRID_GAP_PX = 2;
10
- export declare const CARD_PAD_X_PX = 32;
11
- export declare const setBandGapPx: (showImageBackground: boolean) => number;
12
- export declare const setBandGapCss: (showImageBackground: boolean, gridGap?: string) => string;
13
- export declare const SET_PLATE_PX = 252;
14
- export declare const SET_STACK_GAP_PX = 16;
15
- export declare const SET_STACK_MAX_PX = 800;
16
- export declare const CARD_SPEC_FIELD_CLASS = "whitespace-nowrap";
17
- export type CardSpecField = string | {
18
- readonly text: string;
19
- readonly accent: boolean;
20
- };
21
- export declare function cardSpecFields(fields: readonly CardSpecField[], separator?: string): ReactNode;
8
+ export { CARD_PAD_X_PX, GRID_GAP_PX, SET_PLATE_PX, SET_STACK_GAP_PX, SET_STACK_MAX_PX, setBandGapCss, setBandGapPx, setPlateWidthCss, } from "./card-pieces/CardPicture.js";
9
+ export { CARD_SPEC_FIELD_CLASS, cardSpecFields, type CardSpecField } from "./card-pieces/CardSpecs.js";
22
10
  export default function WheelCardFrame({ variant, wide, setGridGap, href, identityLink, outline, imageBackgroundFill, containerProps, probes, indexBadge, badges, image, imageSecond, plate, eyebrow, reserveEyebrow, name, spec, price, swatches, sizes, buy, wholeCardLink, }: {
23
11
  variant?: "compact" | "catalog";
24
12
  wide?: boolean;
@@ -36,7 +24,7 @@ export default function WheelCardFrame({ variant, wide, setGridGap, href, identi
36
24
  plate?: ReactNode;
37
25
  eyebrow?: ReactNode;
38
26
  reserveEyebrow?: boolean;
39
- name: ReactNode;
27
+ name?: ReactNode;
40
28
  spec?: ReactNode;
41
29
  price?: ReactNode;
42
30
  swatches?: ReactNode;
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as a,Fragment as m}from"react/jsx-runtime";import{GAP_LENGTH_VAR as Z,GAP_PHONE_LENGTH_VAR as z}from"efficient-web-builder/format/lib/content/container-gap";import N from"next/link";import{Fragment as J}from"react";import{CARD_TEXT_SIZE as d,CardLookContext as Q,CardRow as n}from"./card-pieces/card-row.js";import{cardOutlineClass as U}from"efficient-web-builder/format/lib/sections/product-card-style";import{CARD_IMAGE_BG_OFF as Y,cardImageBackgroundPaints as rr,THEME_CARD_IMAGE_BG as er}from"efficient-web-builder/format/lib/content/card-image-background";const gr="sf-card-rows",ur=r=>({rowGap:0,"--sf-card-row-gap":r}),hr=r=>z in r.style?"var(--sf-card-row-gap-auto)":`var(${Z})`,ar=r=>`calc((100% - ${typeof r=="number"?`${r}px`:r}) / 2)`,T=2,tr=32,j=r=>T+2*tr+(r?16:0),k=(r,t)=>t===void 0?`${j(r)}px`:`calc(${t} + ${j(r)-T}px)`,_r=252,sr=16,wr=800,or="whitespace-nowrap",cr=r=>typeof r=="string"?r:r.text;function vr(r,t="·"){return r.map((s,o)=>{const l=cr(s),f=typeof s!="string"&&s.accent;return a(J,{children:[e("span",{className:`${or}${f?" text-accent":""}`,children:o<r.length-1?`${l} ${t}`:l}),o<r.length-1?" ":null]},l)})}function nr({variant:r="catalog",wide:t=!1,setGridGap:s,href:o,identityLink:l=!1,outline:f="none",imageBackgroundFill:x=Y,containerProps:A,probes:g,indexBadge:u,badges:h,image:p,imageSecond:D,plate:E,eyebrow:S,reserveEyebrow:L=!1,name:X,spec:F,price:I,swatches:H,sizes:M,buy:O,wholeCardLink:W=!1}){const c=r==="catalog",i=rr(x),$=i&&x===er,P=$?"bg-[var(--wheel-stage)] p-2":i?"p-2":"",R=i&&!$?{backgroundColor:x}:{},G=C=>e("figure",{className:"m-0 aspect-square [flex:0_0_auto] max-w-full w-[var(--sf-set-plate-w)] max-[800px]:w-full",style:{"--sf-set-plate-w":ar(k(i,s))},children:C}),q=c?a("div",{className:t?`relative mt-2 mb-5 flex items-center justify-center [&_img]:object-top max-[800px]:flex-col ${P}`:`relative mt-2 mb-5 flex aspect-square items-center justify-center overflow-hidden [&_img]:object-top ${P}`,style:t?{...R,borderRadius:10,columnGap:k(i,s),rowGap:sr}:{...R,borderRadius:"var(--sf-card-image-radius, 10px)"},children:[t?a(m,{children:[G(p),G(D??p)]}):p,E]}):a("div",{className:"relative mb-5 aspect-square overflow-hidden bg-bg p-8 [&_img]:object-top",style:{borderRadius:"var(--sf-card-image-radius, 10px)"},children:[p,E]}),y=`font-mono ${d.label} uppercase text-accent ${c?"tracking-[0.3em]":"tracking-[0.25em]"}`,B=S?e("div",{className:y,children:S}):c&&L?e("div",{"aria-hidden":!0,className:y,children:" "}):null,K=e("div",{className:c?`mt-2 h-[60px] overflow-hidden break-words [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[60px] font-heading3 ${d.headingSmall2} font-medium uppercase leading-none tracking-[-0.02em]`:`mt-2 font-heading3 ${d.headingSmall1} font-medium tracking-[-0.02em]`,children:X}),V=e("div",{className:c?`mt-2 h-[38px] overflow-hidden [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[76px] font-mono ${d.labelLarge} leading-[19px] tracking-[0.14em] text-fg-dim`:`mt-[4px] font-mono ${d.labelLarge} tracking-[0.1em] text-fg-dim`,children:F}),_=[c?"sf-card sf-card-fill group relative flex min-h-[460px] flex-col bg-[var(--card-bg)] px-8 pt-8 pb-8 transition-colors duration-200 hover:bg-[var(--card-bg-hover)] [.sf-card-rows>&]:row-span-9 [.sf-card-rows>&]:mb-[var(--sf-card-row-gap)] [.sf-card-rows>&]:grid [.sf-card-rows>&]:grid-rows-subgrid [.sf-card-rows>&]:gap-y-0":"sf-card sf-card-fill group relative block bg-[var(--card-bg)] p-5 transition-colors duration-300 hover:bg-[var(--card-bg-hover)]",U(f),t?"col-span-2 max-[800px]:col-span-1 @max-[720px]:col-span-1":""].filter(Boolean).join(" "),w=a(m,{children:[q,e(n,{children:B}),K]}),v=a(m,{children:[V,I??a(m,{children:[e(n,{}),e(n,{})]}),H??e(n,{}),M??e(n,{}),O??e(n,{})]}),b=C=>e(Q.Provider,{value:r,children:C});return b(o?l?a("article",{...A,className:_,children:[g,u,h,e(N,{href:o,className:`flex flex-col ${W?"after:absolute after:inset-0 after:content-['']":""} [.sf-card-rows>*>&]:row-span-3 [.sf-card-rows>*>&]:grid [.sf-card-rows>*>&]:grid-rows-subgrid [.sf-card-rows>*>&]:gap-y-0`,children:w}),v]}):a(N,{href:o,className:_,children:[g,u,h,w,v]}):a("article",{...A,className:_,children:[g,u,h,w,v]}))}export{tr as CARD_PAD_X_PX,gr as CARD_ROWS_GRID_CLASS,or as CARD_SPEC_FIELD_CLASS,T as GRID_GAP_PX,_r as SET_PLATE_PX,sr as SET_STACK_GAP_PX,wr as SET_STACK_MAX_PX,hr as cardRowsGap,ur as cardRowsGridStyle,vr as cardSpecFields,nr as default,k as setBandGapCss,j as setBandGapPx,ar as setPlateWidthCss};
1
+ "use client";import{jsx as r,Fragment as p,jsxs as o}from"react/jsx-runtime";import{GAP_LENGTH_VAR as y,GAP_PHONE_LENGTH_VAR as j}from"efficient-web-builder/format/lib/content/container-gap";import g from"next/link";import{CardLookContext as k,CardRow as s}from"./card-pieces/card-row.js";import I from"./card-pieces/CardEyebrow.js";import O from"./card-pieces/CardName.js";import W from"./card-pieces/CardPicture.js";import{CardSpecLine as B}from"./card-pieces/CardSpecs.js";import{cardOutlineClass as H}from"efficient-web-builder/format/lib/sections/product-card-style";import{CARD_IMAGE_BG_OFF as K}from"efficient-web-builder/format/lib/content/card-image-background";const ar="sf-card-rows",or=a=>({rowGap:0,"--sf-card-row-gap":a}),sr=a=>j in a.style?"var(--sf-card-row-gap-auto)":`var(${y})`;import{CARD_PAD_X_PX as cr,GRID_GAP_PX as ir,SET_PLATE_PX as lr,SET_STACK_GAP_PX as dr,SET_STACK_MAX_PX as nr,setBandGapCss as fr,setBandGapPx as pr,setPlateWidthCss as mr}from"./card-pieces/CardPicture.js";import{CARD_SPEC_FIELD_CLASS as gr,cardSpecFields as wr}from"./card-pieces/CardSpecs.js";function M({variant:a="catalog",wide:m=!1,setGridGap:w,href:e,identityLink:C=!1,outline:x="none",imageBackgroundFill:u=K,containerProps:_,probes:t,indexBadge:c,badges:i,image:h,imageSecond:A,plate:G,eyebrow:P,reserveEyebrow:v=!1,name:S,spec:R,price:b,swatches:E,sizes:L,buy:D,wholeCardLink:F=!1}){const N=a==="catalog",T=r(W,{image:h,imageSecond:A,plate:G,wide:m,imageBackgroundFill:u,setGridGap:w}),l=[N?"sf-card sf-card-fill group relative flex min-h-[460px] flex-col bg-[var(--card-bg)] px-8 pt-8 pb-8 transition-colors duration-200 hover:bg-[var(--card-bg-hover)] [.sf-card-rows>&]:row-span-9 [.sf-card-rows>&]:mb-[var(--sf-card-row-gap)] [.sf-card-rows>&]:grid [.sf-card-rows>&]:grid-rows-subgrid [.sf-card-rows>&]:gap-y-0":"sf-card sf-card-fill group relative block bg-[var(--card-bg)] p-5 transition-colors duration-300 hover:bg-[var(--card-bg-hover)]",H(x),m?"col-span-2 max-[800px]:col-span-1 @max-[720px]:col-span-1":""].filter(Boolean).join(" "),d=o(p,{children:[T,r(I,{reserve:v,children:P}),r(O,{children:S})]}),n=o(p,{children:[r(B,{children:R}),b??o(p,{children:[r(s,{}),r(s,{})]}),E??r(s,{}),L??r(s,{}),D??r(s,{})]}),f=X=>r(k.Provider,{value:a,children:X});return f(e?C?o("article",{..._,className:l,children:[t,c,i,r(g,{href:e,className:`flex flex-col ${F?"after:absolute after:inset-0 after:content-['']":""} [.sf-card-rows>*>&]:row-span-3 [.sf-card-rows>*>&]:grid [.sf-card-rows>*>&]:grid-rows-subgrid [.sf-card-rows>*>&]:gap-y-0`,children:d}),n]}):o(g,{href:e,className:l,children:[t,c,i,d,n]}):o("article",{..._,className:l,children:[t,c,i,d,n]}))}export{cr as CARD_PAD_X_PX,ar as CARD_ROWS_GRID_CLASS,gr as CARD_SPEC_FIELD_CLASS,ir as GRID_GAP_PX,lr as SET_PLATE_PX,dr as SET_STACK_GAP_PX,nr as SET_STACK_MAX_PX,sr as cardRowsGap,or as cardRowsGridStyle,wr as cardSpecFields,M as default,fr as setBandGapCss,pr as setBandGapPx,mr as setPlateWidthCss};
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ export interface CardEyebrowSettings {
3
+ children?: ReactNode;
4
+ reserve?: boolean;
5
+ }
6
+ export default function CardEyebrow({ children: eyebrow, reserve }: CardEyebrowSettings): import("react").JSX.Element;
@@ -0,0 +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};
@@ -0,0 +1,4 @@
1
+ import type { ReactNode } from "react";
2
+ export default function CardName({ children: name }: {
3
+ children?: ReactNode;
4
+ }): import("react").JSX.Element;
@@ -0,0 +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};
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from "react";
2
+ export declare const setPlateWidthCss: (gap: number | string) => string;
3
+ export declare const GRID_GAP_PX = 2;
4
+ export declare const CARD_PAD_X_PX = 32;
5
+ export declare const setBandGapPx: (showImageBackground: boolean) => number;
6
+ export declare const setBandGapCss: (showImageBackground: boolean, gridGap?: string) => string;
7
+ export declare const SET_PLATE_PX = 252;
8
+ export declare const SET_STACK_GAP_PX = 16;
9
+ export declare const SET_STACK_MAX_PX = 800;
10
+ export interface CardPictureSettings {
11
+ image: ReactNode;
12
+ imageSecond?: ReactNode;
13
+ plate?: ReactNode;
14
+ wide?: boolean;
15
+ imageBackgroundFill?: string;
16
+ setGridGap?: string;
17
+ }
18
+ export default function CardPicture({ image, imageSecond, plate, wide, imageBackgroundFill, setGridGap, }: CardPictureSettings): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as b,Fragment as P,jsxs as o}from"react/jsx-runtime";import{CARD_IMAGE_BG_OFF as C,cardImageBackgroundPaints as A,THEME_CARD_IMAGE_BG as v}from"efficient-web-builder/format/lib/content/card-image-background";import{useCatalogCard as g}from"./card-row.js";const h=e=>`calc((100% - ${typeof e=="number"?`${e}px`:e}) / 2)`,x=2,j=32,_=e=>x+2*j+(e?16:0),d=(e,s)=>s===void 0?`${_(e)}px`:`calc(${s} + ${_(e)-x}px)`,S=252,w=16,X=800;function E({image:e,imageSecond:s,plate:l,wide:a=!1,imageBackgroundFill:r=C,setGridGap:c}){const f=g(),t=A(r),n=t&&r===v,p=n?"bg-[var(--wheel-stage)] p-2":t?"p-2":"",i=t&&!n?{backgroundColor:r}:{},m=u=>b("figure",{className:"m-0 aspect-square [flex:0_0_auto] max-w-full w-[var(--sf-set-plate-w)] max-[800px]:w-full",style:{"--sf-set-plate-w":h(d(t,c))},children:u});return f?o("div",{className:a?`relative mt-2 mb-5 flex items-center justify-center [&_img]:object-top max-[800px]:flex-col ${p}`:`relative mt-2 mb-5 flex aspect-square items-center justify-center overflow-hidden [&_img]:object-top ${p}`,style:a?{...i,borderRadius:10,columnGap:d(t,c),rowGap:w}:{...i,borderRadius:"var(--sf-card-image-radius, 10px)"},children:[a?o(P,{children:[m(e),m(s??e)]}):e,l]}):o("div",{className:"relative mb-5 aspect-square overflow-hidden bg-bg p-8 [&_img]:object-top",style:{borderRadius:"var(--sf-card-image-radius, 10px)"},children:[e,l]})}export{j as CARD_PAD_X_PX,x as GRID_GAP_PX,S as SET_PLATE_PX,w as SET_STACK_GAP_PX,X as SET_STACK_MAX_PX,E as default,d as setBandGapCss,_ as setBandGapPx,h as setPlateWidthCss};
@@ -0,0 +1,20 @@
1
+ import { type ReactNode } from "react";
2
+ import { type FieldUsageAnswer } from "../../lib/content/field-usage.js";
3
+ import { type VehicleFitment } from "../../lib/wheels/plp-fitment-match.js";
4
+ export declare const CARD_SPEC_FIELD_CLASS = "whitespace-nowrap";
5
+ export type CardSpecField = string | {
6
+ readonly text: string;
7
+ readonly accent: boolean;
8
+ };
9
+ export declare function cardSpecFields(fields: readonly CardSpecField[], separator?: string): ReactNode;
10
+ export declare function CardSpecLine({ children }: {
11
+ children?: ReactNode;
12
+ }): import("react").JSX.Element;
13
+ export interface CardSpecsSettings {
14
+ sizes?: boolean;
15
+ car?: VehicleFitment | null;
16
+ separator?: string;
17
+ fieldUsage?: readonly FieldUsageAnswer[];
18
+ }
19
+ export declare function CardSpecFacts({ sizes, car, separator, fieldUsage }: CardSpecsSettings): import("react").JSX.Element | null;
20
+ export default function CardSpecs(settings: CardSpecsSettings): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as a,jsxs as m,Fragment as l}from"react/jsx-runtime";import{Fragment as i}from"react";import{applyCardAnswers as d}from"../../lib/content/field-usage.js";import{wheelCardSpecFacts as x}from"../../lib/wheels/plp-fitment-match.js";import{CARD_TEXT_SIZE as s,useCatalogCard as u}from"./card-row.js";import{useProductCardState as f}from"./ProductCardState.js";const g="whitespace-nowrap",h=t=>typeof t=="string"?t:t.text;function C(t,r="·"){return t.map((n,o)=>{const e=h(n),c=typeof n!="string"&&n.accent;return m(i,{children:[a("span",{className:`${g}${c?" text-accent":""}`,children:o<t.length-1?`${e} ${r}`:e}),o<t.length-1?" ":null]},e)})}function S({children:t}){const r=u();return a("div",{className:r?`mt-2 h-[38px] overflow-hidden [.sf-card-rows_&]:h-auto [.sf-card-rows_&]:max-h-[76px] font-mono ${s.labelLarge} leading-[19px] tracking-[0.14em] text-fg-dim`:`mt-[4px] font-mono ${s.labelLarge} tracking-[0.1em] text-fg-dim`,children:t})}function _({sizes:t=!1,car:r=null,separator:n,fieldUsage:o=[]}){const e=f();if(e.kind!=="wheel")return null;const c=d(x(e.wheel,r,{sizes:t}),o).map(p=>p.text);return a(l,{children:C(c,n)})}function w(t){return a(S,{children:a(_,{...t})})}export{g as CARD_SPEC_FIELD_CLASS,_ as CardSpecFacts,S as CardSpecLine,C as cardSpecFields,w as default};
@@ -0,0 +1,6 @@
1
+ import type { ReactNode } from "react";
2
+ export default function HostPart({ label, editing, children }: {
3
+ label: string;
4
+ editing: boolean;
5
+ children: ReactNode;
6
+ }): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ "use client";import{Fragment as o,jsx as r}from"react/jsx-runtime";import{say as s}from"efficient-web-builder/format/lib/editor-words";import{useProductCardStateOrNull as i}from"./ProductCardState.js";function n({label:t,editing:a,children:e}){return i()?r(o,{children:e}):a?r("div",{"data-host-part-sample":"",className:"opacity-60",children:s(t)}):null}export{n as default};
@@ -37,6 +37,7 @@ export interface TyreCardState {
37
37
  }
38
38
  export type ProductCardState = WheelCardState | TyreCardState;
39
39
  export declare function useProductCardState(): ProductCardState;
40
+ export declare function useProductCardStateOrNull(): ProductCardState | null;
40
41
  export declare function useWheelCardState(): WheelCardState;
41
42
  export declare function WheelCardStateProvider({ wheel, colours, defaultFinish, editing, children, }: {
42
43
  wheel: WheelSummary;
@@ -1 +1 @@
1
- "use client";import{jsx as v}from"react/jsx-runtime";import{createContext as k,useCallback as z,useContext as A,useMemo as W,useState as p}from"react";import{useCurrency as P}from"../CurrencyContext.js";import{useTyreDetail as b}from"../useTyreDetail.js";import{usePlpCardSelection as B}from"../wheels-plp/usePlpCardSelection.js";import{tyrePagePath as T}from"../../lib/tyres/tyre-page-path.js";import{canOrderTyreVariant as j}from"../../lib/tyres/tyre-purchase.js";import{resolveSelectionPrice as E}from"../../lib/wheels/price-display.js";import{setBuildLabel as L,setIsWide as N,summarySetBuild as R}from"../../lib/wheels/set-mode.js";const y=k(null);function V(){const e=A(y);if(!e)throw new Error("A product card piece was drawn outside a product card (no ProductCardState).");return e}function K(){const e=V();if(e.kind!=="wheel")throw new Error("A wheel card piece was drawn on a tyre card.");return e}const _=[];function Q({wheel:e,colours:c=_,defaultFinish:i,editing:l=!1,children:a}){const{currency:t}=P(),r=B(e,c,i),[d,u]=p(!1),s=R(e),n={kind:"wheel",wheel:e,sel:r,currency:t,price:E(e,r.selectedVariant,t,1),isSet:N(s),setWords:L(s),editing:l,notifyOpen:d,setNotifyOpen:u};return v(y.Provider,{value:n,children:a})}function X({tyre:e,currency:c,editing:i=!1,children:l}){const{currency:a}=P(),{slug:t}=e,r=T(t),[d,u]=p(!1),s=z(()=>{t&&u(!0)},[t]),{state:n,tyre:m}=b(t??null,d),o=W(()=>m?.variants??[],[m]),[h,x]=p(null),w=o.length===1?o[0].size:null,C=h??w,f=o.find(g=>g.size===C),S=n==="ready",O={kind:"tyre",tyre:e,currency:c,activeCurrency:a,pagePath:r,arm:s,detailState:n,detail:m,variants:o,chosen:C,setSize:x,variant:f,canAdd:f!=null&&j(f,a),detailReady:S,unsellable:!r||n==="error"||S&&o.length===0,editing:i};return v(y.Provider,{value:O,children:l})}export{X as TyreCardStateProvider,Q as WheelCardStateProvider,V as useProductCardState,K as useWheelCardState};
1
+ "use client";import{jsx as v}from"react/jsx-runtime";import{createContext as z,useCallback as A,useContext as P,useMemo as W,useState as y}from"react";import{useCurrency as h}from"../CurrencyContext.js";import{useTyreDetail as b}from"../useTyreDetail.js";import{usePlpCardSelection as B}from"../wheels-plp/usePlpCardSelection.js";import{tyrePagePath as N}from"../../lib/tyres/tyre-page-path.js";import{canOrderTyreVariant as T}from"../../lib/tyres/tyre-purchase.js";import{resolveSelectionPrice as j}from"../../lib/wheels/price-display.js";import{setBuildLabel as E,setIsWide as L,summarySetBuild as R}from"../../lib/wheels/set-mode.js";const c=z(null);function V(){const e=P(c);if(!e)throw new Error("A product card piece was drawn outside a product card (no ProductCardState).");return e}function K(){return P(c)}function Q(){const e=V();if(e.kind!=="wheel")throw new Error("A wheel card piece was drawn on a tyre card.");return e}const _=[];function X({wheel:e,colours:i=_,defaultFinish:u,editing:l=!1,children:a}){const{currency:t}=h(),r=B(e,i,u),[d,f]=y(!1),s=R(e),n={kind:"wheel",wheel:e,sel:r,currency:t,price:j(e,r.selectedVariant,t,1),isSet:L(s),setWords:E(s),editing:l,notifyOpen:d,setNotifyOpen:f};return v(c.Provider,{value:n,children:a})}function Y({tyre:e,currency:i,editing:u=!1,children:l}){const{currency:a}=h(),{slug:t}=e,r=N(t),[d,f]=y(!1),s=A(()=>{t&&f(!0)},[t]),{state:n,tyre:m}=b(t??null,d),o=W(()=>m?.variants??[],[m]),[x,w]=y(null),O=o.length===1?o[0].size:null,C=x??O,p=o.find(k=>k.size===C),S=n==="ready",g={kind:"tyre",tyre:e,currency:i,activeCurrency:a,pagePath:r,arm:s,detailState:n,detail:m,variants:o,chosen:C,setSize:w,variant:p,canAdd:p!=null&&T(p,a),detailReady:S,unsellable:!r||n==="error"||S&&o.length===0,editing:u};return v(c.Provider,{value:g,children:l})}export{Y as TyreCardStateProvider,X as WheelCardStateProvider,V as useProductCardState,K as useProductCardStateOrNull,Q as useWheelCardState};
@@ -8,6 +8,7 @@ interface Props {
8
8
  showDiagram?: boolean;
9
9
  editing?: boolean;
10
10
  omitHead?: boolean;
11
+ template?: unknown;
11
12
  }
12
13
  export default function DynamicSpecTable(props: Props): import("react").JSX.Element;
13
14
  export {};
@@ -1 +1 @@
1
- "use client";import{jsx as c}from"react/jsx-runtime";import b from"../SpecTable.js";import L from"./KindGate.js";import{useEuTyreLabels as v}from"../useEuTyreLabels.js";import{buildSpecSheet as A,sourceFromWheel as E}from"../../lib/wheels/spec-sheet.js";import{buildTyreSpecSheet as I}from"../../lib/tyres/spec-sheet.js";import{partVariant as P}from"../../lib/catalog/from-wheel.js";import{useCurrentProduct as k}from"../../lib/document/current-product.js";import{applySpecAnswers as h}from"../../lib/content/field-usage.js";import{useSampleProduct as V}from"./useSampleProduct.js";const _=["alloy-wheel","tyre"],j=[],G=[];function K(n,r,s){const i=n.variants??[];return(r?i.find(t=>t.sku===r):void 0)??(s?i.find(t=>t.size===s):void 0)??i[0]??null}function M(n){return c(L,{kinds:_,type:"SpecTable",editing:n.editing,children:c(N,{...n})})}function N({num:n,title:r,description:s,showDiagram:i=!0,editing:t=!1,nodeId:u,omitHead:d=!1}){const e=k(),w=V(t&&!e),a=e?.product??w,l=a?.kind==="tyre"?a.source:null,y=v(l?.variants??j),p=e?.fieldUsage??G;if(l){const f=K(l,e?.selection.part?.id,e?.selection.shown.size),g=y.find(z=>z.size===f?.size)??null,x=I({brand:l.brand,variant:f,euLabel:g});return c(b,{capped:!1,builtInLabels:!0,num:n,title:r,description:s,rows:h(x.rows,p),diagram:null,editing:t,nodeId:u,omitHead:d})}const o=a?.kind==="alloy-wheel"?a.source:null,S=e?e.selection.shown.finish:o?.finishes[0]?.name,T=e&&o?P(o,e.selection.part)?.size??void 0:void 0,m=o?A(E(o),S,T):{rows:[],diagram:null};return c(b,{capped:!1,builtInLabels:!0,num:n,title:r,description:s,rows:h(m.rows,p),diagram:i?m.diagram:null,editing:t,nodeId:u,omitHead:d})}export{M as default,_ as supportedKinds};
1
+ "use client";import{jsx as l}from"react/jsx-runtime";import h from"../SpecTable.js";import x from"./KindGate.js";import{buildSpecSheet as k,sourceFromWheel as v}from"../../lib/wheels/spec-sheet.js";import{buildTyreSpecSheet as z}from"../../lib/tyres/spec-sheet.js";import{partVariant as I}from"../../lib/catalog/from-wheel.js";import{useCurrentProduct as P}from"../../lib/document/current-product.js";import{applySpecAnswers as b}from"../../lib/content/field-usage.js";import{useSampleProduct as j}from"./useSampleProduct.js";const A=["alloy-wheel","tyre"],E=[];function G(t,r,i){const o=t.variants??[];return(r?o.find(n=>n.sku===r):void 0)??(i?o.find(n=>n.size===i):void 0)??o[0]??null}function K(t){return l(x,{kinds:A,type:"SpecTable",editing:t.editing,children:l(L,{...t})})}function L({num:t,title:r,description:i,showDiagram:o=!0,editing:n=!1,nodeId:d,omitHead:u=!1,template:p}){const e=P(),w=j(n&&!e),a=e?.product??w,c=a?.kind==="tyre"?a.source:null,m=e?.fieldUsage??E;if(c){const g=G(c,e?.selection.part?.id,e?.selection.shown.size),T=z({brand:c.brand,variant:g});return l(h,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:b(T.rows,m),diagram:null,editing:n,nodeId:d,omitHead:u,template:p})}const s=a?.kind==="alloy-wheel"?a.source:null,y=e?e.selection.shown.finish:s?.finishes[0]?.name,S=e&&s?I(s,e.selection.part)?.size??void 0:void 0,f=s?k(v(s),y,S):{rows:[],diagram:null};return l(h,{capped:!1,builtInLabels:!0,num:t,title:r,description:i,rows:b(f.rows,m),diagram:o?f.diagram:null,editing:n,nodeId:d,omitHead:u,template:p})}export{K as default,A as supportedKinds};
@@ -1,6 +1,6 @@
1
1
  import type { WheelSummary } from "../../lib/api/index.js";
2
2
  import { type CardIndexFormat, type CardOutline } from "efficient-web-builder/format/lib/sections/product-card-style";
3
- import { type FieldUsageAnswer } from "../../lib/content/field-usage.js";
3
+ import type { FieldUsageAnswer } from "../../lib/content/field-usage.js";
4
4
  import { type VehicleFitment } from "../../lib/wheels/plp-fitment-match.js";
5
5
  export interface PlpCardProps {
6
6
  wheel: WheelSummary;
@@ -1 +1 @@
1
- "use client";import{jsx as o,Fragment as $,jsxs as j}from"react/jsx-runtime";import{CARD_IMAGE_SIZES as M}from"../../lib/sections/card-image-sizes.js";import{LISTING_CARD_SHOW as P}from"../../lib/sections/card-show-defaults.js";import X from"next/image";import{useState as U}from"react";import H from"../BrandPlate.js";import V,{CardBuyDialog as Z}from"../card-pieces/CardBuyButton.js";import q from"../card-pieces/CardFinishSwatches.js";import J from"../card-pieces/CardPrice.js";import K from"../card-pieces/CardProductBadge.js";import{useWheelCardState as Q,WheelCardStateProvider as Y}from"../card-pieces/ProductCardState.js";import{wheelCardEyebrow as ee,wheelCardEyebrowShows as re}from"../ProductCardEyebrow.js";import{withRMark as I}from"efficient-web-builder/render/components/RMark";import oe from"../WheelPlaceholder.js";import ae,{cardSpecFields as te}from"../WheelCardFrame.js";import{CARD_IMAGE_BG_OFF as ne}from"efficient-web-builder/format/lib/content/card-image-background";import{itemBrand as se}from"../../lib/catalog/plp-item.js";import{CARD_INDEX_BADGE_CLASS as ie,CARD_INDEX_CLASS as le,DEFAULT_CARD_INDEX_FORMAT as de,DEFAULT_CARD_OUTLINE as me}from"efficient-web-builder/format/lib/sections/product-card-style";import{applyCardAnswers as ce}from"../../lib/content/field-usage.js";import{setSecondSrc as he}from"../../lib/wheels/set-mode.js";import{PLP_GRID_GAP_VAR as ue}from"../../lib/wheels/plp-grid.js";import{FITMENT_FIELD_SEPARATOR as pe,wheelCardSpecFacts as fe}from"../../lib/wheels/plp-fitment-match.js";import{coverSrcForWheel as we,DEFAULT_COVER_INDEX as Se,resolvePaintedSrc as Ce}from"../../lib/wheels/cover-rendering.js";const ge=[];function _e({wheel:s,colours:c,fit:i=null,editing:l=!1,brandPlate:d=!1,kindLabel:h=null,showBrand:t=!0,showProcess:u=!1,coverIndex:p=Se,fieldUsage:f=ge,spinOnHover:w=!1,imageBackgroundFill:S=ne,showBadge:C=!0,outline:g=me,indexBadge:_=de,showCardSizes:E=P.showCardSizes,showCardBuy:b=P.showCardBuy,showCardPage:A=P.showCardPage,showCardPrice:e=!0,showCardFinishes:r=!0,imageSizes:m=M}){return o(Y,{wheel:s,colours:c,editing:l,children:o(Ee,{fit:i,brandPlate:d,kindLabel:h,showBrand:t,showProcess:u,coverIndex:p,fieldUsage:f,spinOnHover:w,imageBackgroundFill:S,showBadge:C,outline:g,indexBadge:_,showCardSizes:E,showCardBuy:b,showCardPage:A,showCardPrice:e,showCardFinishes:r,imageSizes:m})})}function Ee({fit:s,brandPlate:c,kindLabel:i,showBrand:l,showProcess:d,coverIndex:h,fieldUsage:t,spinOnHover:u,imageBackgroundFill:p,showBadge:f,outline:w,indexBadge:S,showCardSizes:C,showCardBuy:g,showCardPage:_,showCardPrice:E,showCardFinishes:b,imageSizes:A}){const{wheel:e,sel:r,isSet:m}=Q(),T=we(e,h,r.finish?.name,r.shownSrc,s?.holes),[R,x]=U(()=>new Set),k=a=>x(n=>n.has(a)?n:new Set(n).add(a)),F=Ce({overrideSrc:T,hookSrc:r.shownSrc,failed:R}),B=se(e),G=u?"transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] group-hover:rotate-[72deg]":"",y=(a,n)=>o(X,{src:a,alt:n,width:800,height:800,sizes:A,className:["block h-full w-full object-contain",G].filter(Boolean).join(" "),draggable:!1,onError:()=>k(a)},a),L=r.finish?`${e.name} — ${r.finish.name}`:e.name,O=F?y(F,L):o(oe,{imageLabel:e.name}),D=m?he(e.finishes?.find(a=>a.name===r.finish?.name),F):null,v=D&&!R.has(D)?y(D,`${L} — right`):void 0,N=S!=="off"?o("span",{"aria-hidden":!0,className:`${le} ${ie}`}):null,z=ce(fe(e,s,{sizes:C}),t).map(a=>a.text),W=ee({kindLabel:i,brand:l&&B?I(B):null,process:d&&e.process?I(e.process):null},t);return j($,{children:[o(ae,{href:`/wheels/${e.slug}`,wide:m,setGridGap:`var(${ue})`,identityLink:!0,containerProps:{onPointerEnter:r.arm,onTouchStart:r.arm,onFocusCapture:r.arm},probes:r.probes,outline:w,imageBackgroundFill:p,indexBadge:N,badges:o(K,{show:f,numbered:N!=null,sale:!0}),image:O,imageSecond:v,plate:c?o(H,{brand:B,logo:e.brandLogo}):null,eyebrow:W,wholeCardLink:!0,reserveEyebrow:re({kind:!!i,brand:l,process:d},t),name:I(e.name),spec:te(z,pe),price:o(J,{show:E,setTotal:!0,wasFollowsSize:!0}),swatches:o(q,{show:b,showSingle:!0}),buy:o(V,{buy:g,page:_})}),o(Z,{})]})}export{_e as default};
1
+ "use client";import{jsx as e,Fragment as W,jsxs as $}from"react/jsx-runtime";import{CARD_IMAGE_SIZES as j}from"../../lib/sections/card-image-sizes.js";import{LISTING_CARD_SHOW as P}from"../../lib/sections/card-show-defaults.js";import M from"next/image";import{useState as U}from"react";import X from"../BrandPlate.js";import H,{CardBuyDialog as V}from"../card-pieces/CardBuyButton.js";import Z from"../card-pieces/CardFinishSwatches.js";import q from"../card-pieces/CardPrice.js";import J from"../card-pieces/CardProductBadge.js";import{useWheelCardState as K,WheelCardStateProvider as Q}from"../card-pieces/ProductCardState.js";import{wheelCardEyebrow as Y,wheelCardEyebrowShows as ee}from"../ProductCardEyebrow.js";import{withRMark as N}from"efficient-web-builder/render/components/RMark";import re from"../WheelPlaceholder.js";import{CardSpecFacts as oe}from"../card-pieces/CardSpecs.js";import ae from"../WheelCardFrame.js";import{CARD_IMAGE_BG_OFF as te}from"efficient-web-builder/format/lib/content/card-image-background";import{itemBrand as ne}from"../../lib/catalog/plp-item.js";import{CARD_INDEX_BADGE_CLASS as se,CARD_INDEX_CLASS as ie,DEFAULT_CARD_INDEX_FORMAT as le,DEFAULT_CARD_OUTLINE as de}from"efficient-web-builder/format/lib/sections/product-card-style";import{setSecondSrc as me}from"../../lib/wheels/set-mode.js";import{PLP_GRID_GAP_VAR as ce}from"../../lib/wheels/plp-grid.js";import{FITMENT_FIELD_SEPARATOR as he}from"../../lib/wheels/plp-fitment-match.js";import{coverSrcForWheel as ue,DEFAULT_COVER_INDEX as fe,resolvePaintedSrc as pe}from"../../lib/wheels/cover-rendering.js";const we=[];function Se({wheel:s,colours:c,fit:i=null,editing:l=!1,brandPlate:d=!1,kindLabel:h=null,showBrand:t=!0,showProcess:u=!1,coverIndex:f=fe,fieldUsage:p=we,spinOnHover:w=!1,imageBackgroundFill:S=te,showBadge:g=!0,outline:C=de,indexBadge:_=le,showCardSizes:E=P.showCardSizes,showCardBuy:b=P.showCardBuy,showCardPage:A=P.showCardPage,showCardPrice:r=!0,showCardFinishes:o=!0,imageSizes:m=j}){return e(Q,{wheel:s,colours:c,editing:l,children:e(ge,{fit:i,brandPlate:d,kindLabel:h,showBrand:t,showProcess:u,coverIndex:f,fieldUsage:p,spinOnHover:w,imageBackgroundFill:S,showBadge:g,outline:C,indexBadge:_,showCardSizes:E,showCardBuy:b,showCardPage:A,showCardPrice:r,showCardFinishes:o,imageSizes:m})})}function ge({fit:s,brandPlate:c,kindLabel:i,showBrand:l,showProcess:d,coverIndex:h,fieldUsage:t,spinOnHover:u,imageBackgroundFill:f,showBadge:p,outline:w,indexBadge:S,showCardSizes:g,showCardBuy:C,showCardPage:_,showCardPrice:E,showCardFinishes:b,imageSizes:A}){const{wheel:r,sel:o,isSet:m}=K(),T=ue(r,h,o.finish?.name,o.shownSrc,s?.holes),[I,k]=U(()=>new Set),x=a=>k(n=>n.has(a)?n:new Set(n).add(a)),F=pe({overrideSrc:T,hookSrc:o.shownSrc,failed:I}),B=ne(r),G=u?"transition-transform duration-700 [transition-timing-function:cubic-bezier(.2,.6,.2,1)] group-hover:rotate-[72deg]":"",R=(a,n)=>e(M,{src:a,alt:n,width:800,height:800,sizes:A,className:["block h-full w-full object-contain",G].filter(Boolean).join(" "),draggable:!1,onError:()=>x(a)},a),y=o.finish?`${r.name} — ${o.finish.name}`:r.name,O=F?R(F,y):e(re,{imageLabel:r.name}),D=m?me(r.finishes?.find(a=>a.name===o.finish?.name),F):null,v=D&&!I.has(D)?R(D,`${y} — right`):void 0,L=S!=="off"?e("span",{"aria-hidden":!0,className:`${ie} ${se}`}):null,z=Y({kindLabel:i,brand:l&&B?N(B):null,process:d&&r.process?N(r.process):null},t);return $(W,{children:[e(ae,{href:`/wheels/${r.slug}`,wide:m,setGridGap:`var(${ce})`,identityLink:!0,containerProps:{onPointerEnter:o.arm,onTouchStart:o.arm,onFocusCapture:o.arm},probes:o.probes,outline:w,imageBackgroundFill:f,indexBadge:L,badges:e(J,{show:p,numbered:L!=null,sale:!0}),image:O,imageSecond:v,plate:c?e(X,{brand:B,logo:r.brandLogo}):null,eyebrow:z,wholeCardLink:!0,reserveEyebrow:ee({kind:!!i,brand:l,process:d},t),spec:e(oe,{sizes:g,fieldUsage:t,car:s,separator:he}),price:e(q,{show:E,setTotal:!0,wasFollowsSize:!0}),swatches:e(Z,{show:b,showSingle:!0}),buy:e(H,{buy:C,page:_})}),e(V,{})]})}export{Se as default};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductColourMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const o={label:"Colour",defaultProps:{}};export{o as ProductColourMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductColourRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";import e from"../../../../../components/card-pieces/CardFinishSwatches.js";import i from"../../../../../components/card-pieces/HostPart.js";import{ProductColourMeta as r}from"./meta.js";const n={...r,render:t=>o(i,{label:r.label??"",editing:!!t.editor?.isEditing,children:o(e,{})})};export{n as ProductColourRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductPriceMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Price",defaultProps:{}};export{e as ProductPriceMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductPriceRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import i from"../../../../../components/card-pieces/CardPrice.js";import t from"../../../../../components/card-pieces/HostPart.js";import{ProductPriceMeta as o}from"./meta.js";const n={...o,render:e=>r(t,{label:o.label??"",editing:!!e.editor?.isEditing,children:r(i,{})})};export{n as ProductPriceRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductSizeMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e={label:"Size",defaultProps:{}};export{e as ProductSizeMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const ProductSizeRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import i from"../../../../../components/card-pieces/CardSizes.js";import t from"../../../../../components/card-pieces/HostPart.js";import{ProductSizeMeta as o}from"./meta.js";const s={...o,render:e=>r(t,{label:o.label??"",editing:!!e.editor?.isEditing,children:r(i,{})})};export{s as ProductSizeRender};
@@ -4,4 +4,10 @@ export declare const SPECTABLE_PH: {
4
4
  title: string;
5
5
  description: string;
6
6
  };
7
+ export declare const SpecTableSlots: {
8
+ template: {
9
+ type: "slot";
10
+ allow: string[];
11
+ };
12
+ };
7
13
  export declare const SpecTableMeta: Omit<BlockRender, "render">;
@@ -1 +1 @@
1
- import{PH as e}from"efficient-web-builder/format/lib/document/blocks/placeholders";const i={num:e.sectionNumber,title:"Specifications *table.*",description:e.body},o={label:"Spec Table",defaultProps:{dynamic:!1,num:"",title:"",description:"",source:null,finish:"",size:"",showDiagram:!0,rows:[]}};export{i as SPECTABLE_PH,o as SpecTableMeta};
1
+ import{cardTemplateSlot as t}from"efficient-web-builder/format/lib/content/card-template";import{PH as e}from"efficient-web-builder/format/lib/document/blocks/placeholders";const r={num:e.sectionNumber,title:"Specifications *table.*",description:e.body},o={template:t()},s={label:"Spec Table",fields:o,defaultProps:{dynamic:!1,num:"",title:"",description:"",source:null,finish:"",size:"",showDiagram:!0,rows:[]}};export{r as SPECTABLE_PH,s as SpecTableMeta,o as SpecTableSlots};
@@ -1 +1 @@
1
- import{jsx as g}from"react/jsx-runtime";import h from"../../../../../components/pdp-dynamic/DynamicSpecTable.js";import w from"../../../../../components/SpecTable.js";import{buildSpecSheet as b,buildLegacySpecSheet as y}from"../../../../wheels/spec-sheet.js";import{parseSectionHeadPlacement as S}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as n}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{SpecTableMeta as x,SPECTABLE_PH as d}from"./meta.js";const z={...x,render:e=>{const o=S(e.headPlacement)==="own-box",t=i=>o?void 0:i;if(e.dynamic)return g(h,{nodeId:typeof e.id=="string"?e.id:void 0,num:t(n(e.num,d.num,e.editor)),title:t(n(e.title,d.title,e.editor)),description:t(n(e.description,d.description,e.editor)),showDiagram:e.showDiagram!==!1,omitHead:o,editing:e.editor?.isEditing});const a=e.source??null,m=e.wheel,r=!a?.slug&&typeof m=="string"?m:"",s=typeof e.finish=="string"?e.finish:"",f=typeof e.size=="string"?e.size:"";let l,u=!0,c=null;if(a?.slug&&a.spec){const i=b(a,s,f);l=i.rows,c=e.showDiagram===!1?null:i.diagram}else if(r){const i=y(r,s,f);l=i.rows,c=e.showDiagram===!1?null:i.diagram}else l=e.rows??[],u=!1;return g(w,{capped:!1,nodeId:typeof e.id=="string"?e.id:void 0,num:t(n(e.num,d.num,e.editor)),title:t(n(e.title,d.title,e.editor)),description:t(n(e.description,d.description,e.editor)),rows:l,builtInLabels:u,diagram:c,omitHead:o,editing:e.editor?.isEditing})}};export{z as SpecTableRender};
1
+ import{jsx as g}from"react/jsx-runtime";import h from"../../../../../components/pdp-dynamic/DynamicSpecTable.js";import w from"../../../../../components/SpecTable.js";import{buildSpecSheet as b,buildLegacySpecSheet as y}from"../../../../wheels/spec-sheet.js";import{parseSectionHeadPlacement as S}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as n}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{SpecTableMeta as x,SPECTABLE_PH as a}from"./meta.js";const z={...x,render:e=>{const m=S(e.headPlacement)==="own-box",t=i=>m?void 0:i;if(e.dynamic)return g(h,{nodeId:typeof e.id=="string"?e.id:void 0,num:t(n(e.num,a.num,e.editor)),title:t(n(e.title,a.title,e.editor)),description:t(n(e.description,a.description,e.editor)),showDiagram:e.showDiagram!==!1,omitHead:m,editing:e.editor?.isEditing,template:e.template});const d=e.source??null,o=e.wheel,r=!d?.slug&&typeof o=="string"?o:"",s=typeof e.finish=="string"?e.finish:"",f=typeof e.size=="string"?e.size:"";let l,u=!0,c=null;if(d?.slug&&d.spec){const i=b(d,s,f);l=i.rows,c=e.showDiagram===!1?null:i.diagram}else if(r){const i=y(r,s,f);l=i.rows,c=e.showDiagram===!1?null:i.diagram}else l=e.rows??[],u=!1;return g(w,{capped:!1,nodeId:typeof e.id=="string"?e.id:void 0,num:t(n(e.num,a.num,e.editor)),title:t(n(e.title,a.title,e.editor)),description:t(n(e.description,a.description,e.editor)),rows:l,builtInLabels:u,diagram:c,omitHead:m,editing:e.editor?.isEditing,template:e.template})}};export{z as SpecTableRender};
@@ -30,4 +30,7 @@ export declare const COMMERCE_METAS: {
30
30
  ThemeSwitchBlock: Omit<BlockRender, "render">;
31
31
  TyreFitment: Omit<BlockRender, "render">;
32
32
  TyreSizes: Omit<BlockRender, "render">;
33
+ ProductSize: Omit<BlockRender, "render">;
34
+ ProductColour: Omit<BlockRender, "render">;
35
+ ProductPrice: Omit<BlockRender, "render">;
33
36
  };
@@ -1 +1 @@
1
- import{AccountBlockMeta as t}from"./AccountBlock/meta.js";import{AlloyWheelsListingMeta as e}from"./AlloyWheelsListing/meta.js";import{BundleOfferMeta as r}from"./BundleOffer/meta.js";import{CartBlockMeta as o}from"./CartBlock/meta.js";import{CatalogFilterBarMeta as m}from"./CatalogFilterBar/meta.js";import{CheckoutCTAMeta as a}from"./CheckoutCTA/meta.js";import{CollectionCardMeta as i}from"./CollectionCard/meta.js";import{CollectionsMeta as l}from"./Collections/meta.js";import{CompatibleTyresMeta as c}from"./CompatibleTyres/meta.js";import{CountrySwitchBlockMeta as p}from"./CountrySwitchBlock/meta.js";import{DeliveryOptionsMeta as f}from"./DeliveryOptions/meta.js";import{DetailRowsMeta as M}from"./DetailRows/meta.js";import{EuTyreLabelMeta as y}from"./EuTyreLabel/meta.js";import{EuTyreLabelBlockMeta as n}from"./EuTyreLabelBlock/meta.js";import{FitmentFinderMeta as d}from"./FitmentFinder/meta.js";import{FitmentTableMeta as u}from"./FitmentTable/meta.js";import{GalleryBMeta as C}from"./GalleryB/meta.js";import{GalleryItemMeta as T}from"./GalleryItem/meta.js";import{GalleryMeta as B}from"./Gallery/meta.js";import{HeaderMeta as s}from"./Header/meta.js";import{ProductGalleryMeta as k}from"./ProductGallery/meta.js";import{ProductGridMeta as h}from"./ProductGrid/meta.js";import{ProductHeroMeta as S}from"./ProductHero/meta.js";import{ProductRefMeta as b}from"./ProductRef/meta.js";import{RelatedProductsMeta as F}from"./RelatedProducts/meta.js";import{SearchBlockMeta as G}from"./SearchBlock/meta.js";import{SpecTableMeta as P}from"./SpecTable/meta.js";import{ThemeSwitchBlockMeta as A}from"./ThemeSwitchBlock/meta.js";import{TyreFitmentMeta as E}from"./TyreFitment/meta.js";import{TyreSizesMeta as R}from"./TyreSizes/meta.js";const it={AccountBlock:t,AlloyWheelsListing:e,BundleOffer:r,CartBlock:o,CatalogFilterBar:m,CheckoutCTA:a,CollectionCard:i,Collections:l,CompatibleTyres:c,CountrySwitchBlock:p,DeliveryOptions:f,DetailRows:M,EuTyreLabel:y,EuTyreLabelBlock:n,FitmentFinder:d,FitmentTable:u,Gallery:B,GalleryB:C,GalleryItem:T,Header:s,ProductGallery:k,ProductGrid:h,ProductHero:S,ProductRef:b,RelatedProducts:F,SearchBlock:G,SpecTable:P,ThemeSwitchBlock:A,TyreFitment:E,TyreSizes:R};export{it as COMMERCE_METAS};
1
+ import{AccountBlockMeta as r}from"./AccountBlock/meta.js";import{AlloyWheelsListingMeta as t}from"./AlloyWheelsListing/meta.js";import{BundleOfferMeta as o}from"./BundleOffer/meta.js";import{CartBlockMeta as e}from"./CartBlock/meta.js";import{CatalogFilterBarMeta as m}from"./CatalogFilterBar/meta.js";import{CheckoutCTAMeta as i}from"./CheckoutCTA/meta.js";import{CollectionCardMeta as a}from"./CollectionCard/meta.js";import{CollectionsMeta as l}from"./Collections/meta.js";import{CompatibleTyresMeta as c}from"./CompatibleTyres/meta.js";import{CountrySwitchBlockMeta as p}from"./CountrySwitchBlock/meta.js";import{DeliveryOptionsMeta as f}from"./DeliveryOptions/meta.js";import{DetailRowsMeta as M}from"./DetailRows/meta.js";import{EuTyreLabelMeta as u}from"./EuTyreLabel/meta.js";import{EuTyreLabelBlockMeta as d}from"./EuTyreLabelBlock/meta.js";import{FitmentFinderMeta as y}from"./FitmentFinder/meta.js";import{FitmentTableMeta as n}from"./FitmentTable/meta.js";import{GalleryBMeta as C}from"./GalleryB/meta.js";import{GalleryItemMeta as T}from"./GalleryItem/meta.js";import{GalleryMeta as B}from"./Gallery/meta.js";import{HeaderMeta as P}from"./Header/meta.js";import{ProductGalleryMeta as s}from"./ProductGallery/meta.js";import{ProductGridMeta as k}from"./ProductGrid/meta.js";import{ProductHeroMeta as S}from"./ProductHero/meta.js";import{ProductRefMeta as h}from"./ProductRef/meta.js";import{RelatedProductsMeta as b}from"./RelatedProducts/meta.js";import{SearchBlockMeta as F}from"./SearchBlock/meta.js";import{SpecTableMeta as G}from"./SpecTable/meta.js";import{ThemeSwitchBlockMeta as A}from"./ThemeSwitchBlock/meta.js";import{TyreFitmentMeta as E}from"./TyreFitment/meta.js";import{TyreSizesMeta as R}from"./TyreSizes/meta.js";import{ProductSizeMeta as w}from"./ProductSize/meta.js";import{ProductColourMeta as L}from"./ProductColour/meta.js";import{ProductPriceMeta as O}from"./ProductPrice/meta.js";const ur={AccountBlock:r,AlloyWheelsListing:t,BundleOffer:o,CartBlock:e,CatalogFilterBar:m,CheckoutCTA:i,CollectionCard:a,Collections:l,CompatibleTyres:c,CountrySwitchBlock:p,DeliveryOptions:f,DetailRows:M,EuTyreLabel:u,EuTyreLabelBlock:d,FitmentFinder:y,FitmentTable:n,Gallery:B,GalleryB:C,GalleryItem:T,Header:P,ProductGallery:s,ProductGrid:k,ProductHero:S,ProductRef:h,RelatedProducts:b,SearchBlock:F,SpecTable:G,ThemeSwitchBlock:A,TyreFitment:E,TyreSizes:R,ProductSize:w,ProductColour:L,ProductPrice:O};export{ur as COMMERCE_METAS};
@@ -30,5 +30,8 @@ export declare const COMMERCE_RENDERS: {
30
30
  ThemeSwitchBlock: BlockRender;
31
31
  TyreFitment: BlockRender;
32
32
  TyreSizes: BlockRender;
33
+ ProductSize: BlockRender;
34
+ ProductColour: BlockRender;
35
+ ProductPrice: BlockRender;
33
36
  };
34
37
  export type CommerceBlockType = keyof typeof COMMERCE_RENDERS;
@@ -1 +1 @@
1
- import{AccountBlockRender as e}from"./AccountBlock/render.js";import{AlloyWheelsListingRender as r}from"./AlloyWheelsListing/render.js";import{BundleOfferRender as o}from"./BundleOffer/render.js";import{CartBlockRender as t}from"./CartBlock/render.js";import{CatalogFilterBarRender as m}from"./CatalogFilterBar/render.js";import{CheckoutCTARender as i}from"./CheckoutCTA/render.js";import{CollectionCardRender as l}from"./CollectionCard/render.js";import{CollectionsRender as n}from"./Collections/render.js";import{CompatibleTyresRender as d}from"./CompatibleTyres/render.js";import{CountrySwitchBlockRender as c}from"./CountrySwitchBlock/render.js";import{DeliveryOptionsRender as R}from"./DeliveryOptions/render.js";import{DetailRowsRender as p}from"./DetailRows/render.js";import{EuTyreLabelRender as a}from"./EuTyreLabel/render.js";import{EuTyreLabelBlockRender as f}from"./EuTyreLabelBlock/render.js";import{FitmentFinderRender as y}from"./FitmentFinder/render.js";import{FitmentTableRender as u}from"./FitmentTable/render.js";import{GalleryRender as C}from"./Gallery/render.js";import{GalleryBRender as B}from"./GalleryB/render.js";import{GalleryItemRender as T}from"./GalleryItem/render.js";import{HeaderRender as s}from"./Header/render.js";import{ProductGalleryRender as k}from"./ProductGallery/render.js";import{ProductGridRender as h}from"./ProductGrid/render.js";import{ProductHeroRender as S}from"./ProductHero/render.js";import{ProductRefRender as b}from"./ProductRef/render.js";import{RelatedProductsRender as F}from"./RelatedProducts/render.js";import{SearchBlockRender as G}from"./SearchBlock/render.js";import{SpecTableRender as P}from"./SpecTable/render.js";import{ThemeSwitchBlockRender as E}from"./ThemeSwitchBlock/render.js";import{TyreFitmentRender as w}from"./TyreFitment/render.js";import{TyreSizesRender as A}from"./TyreSizes/render.js";const le={AccountBlock:e,AlloyWheelsListing:r,BundleOffer:o,CartBlock:t,CatalogFilterBar:m,CheckoutCTA:i,CollectionCard:l,Collections:n,CompatibleTyres:d,CountrySwitchBlock:c,DeliveryOptions:R,DetailRows:p,EuTyreLabel:a,EuTyreLabelBlock:f,FitmentFinder:y,FitmentTable:u,Gallery:C,GalleryB:B,GalleryItem:T,Header:s,ProductGallery:k,ProductGrid:h,ProductHero:S,ProductRef:b,RelatedProducts:F,SearchBlock:G,SpecTable:P,ThemeSwitchBlock:E,TyreFitment:w,TyreSizes:A};export{le as COMMERCE_RENDERS};
1
+ import{AccountBlockRender as r}from"./AccountBlock/render.js";import{AlloyWheelsListingRender as e}from"./AlloyWheelsListing/render.js";import{BundleOfferRender as o}from"./BundleOffer/render.js";import{CartBlockRender as t}from"./CartBlock/render.js";import{CatalogFilterBarRender as m}from"./CatalogFilterBar/render.js";import{CheckoutCTARender as i}from"./CheckoutCTA/render.js";import{CollectionCardRender as l}from"./CollectionCard/render.js";import{CollectionsRender as d}from"./Collections/render.js";import{CompatibleTyresRender as n}from"./CompatibleTyres/render.js";import{CountrySwitchBlockRender as c}from"./CountrySwitchBlock/render.js";import{DeliveryOptionsRender as R}from"./DeliveryOptions/render.js";import{DetailRowsRender as p}from"./DetailRows/render.js";import{EuTyreLabelRender as f}from"./EuTyreLabel/render.js";import{EuTyreLabelBlockRender as a}from"./EuTyreLabelBlock/render.js";import{FitmentFinderRender as u}from"./FitmentFinder/render.js";import{FitmentTableRender as y}from"./FitmentTable/render.js";import{GalleryRender as C}from"./Gallery/render.js";import{GalleryBRender as B}from"./GalleryB/render.js";import{GalleryItemRender as P}from"./GalleryItem/render.js";import{HeaderRender as T}from"./Header/render.js";import{ProductGalleryRender as s}from"./ProductGallery/render.js";import{ProductGridRender as k}from"./ProductGrid/render.js";import{ProductHeroRender as S}from"./ProductHero/render.js";import{ProductRefRender as h}from"./ProductRef/render.js";import{RelatedProductsRender as b}from"./RelatedProducts/render.js";import{SearchBlockRender as F}from"./SearchBlock/render.js";import{SpecTableRender as G}from"./SpecTable/render.js";import{ThemeSwitchBlockRender as E}from"./ThemeSwitchBlock/render.js";import{TyreFitmentRender as w}from"./TyreFitment/render.js";import{TyreSizesRender as A}from"./TyreSizes/render.js";import{ProductSizeRender as L}from"./ProductSize/render.js";import{ProductColourRender as D}from"./ProductColour/render.js";import{ProductPriceRender as O}from"./ProductPrice/render.js";const fr={AccountBlock:r,AlloyWheelsListing:e,BundleOffer:o,CartBlock:t,CatalogFilterBar:m,CheckoutCTA:i,CollectionCard:l,Collections:d,CompatibleTyres:n,CountrySwitchBlock:c,DeliveryOptions:R,DetailRows:p,EuTyreLabel:f,EuTyreLabelBlock:a,FitmentFinder:u,FitmentTable:y,Gallery:C,GalleryB:B,GalleryItem:P,Header:T,ProductGallery:s,ProductGrid:k,ProductHero:S,ProductRef:h,RelatedProducts:b,SearchBlock:F,SpecTable:G,ThemeSwitchBlock:E,TyreFitment:w,TyreSizes:A,ProductSize:L,ProductColour:D,ProductPrice:O};export{fr as COMMERCE_RENDERS};
@@ -1 +1 @@
1
- import{registerCardTemplates as e}from"efficient-web-builder/format/lib/content/card-template";const l=[{block:"Reviews",fields:[{key:"quote",label:"Quote"},{key:"title",label:"Title"},{key:"name",label:"Name"},{key:"role",label:"Role · location"},{key:"rating",label:"Rating"},{key:"dateLabel",label:"Date"}]}];e(l);export{l as STOREFRONT_CARD_TEMPLATES};
1
+ import{registerCardTemplates as e}from"efficient-web-builder/format/lib/content/card-template";const l=[{block:"Reviews",fields:[{key:"quote",label:"Quote"},{key:"title",label:"Title"},{key:"name",label:"Name"},{key:"role",label:"Role · location"},{key:"rating",label:"Rating"},{key:"dateLabel",label:"Date"}]},{block:"SpecTable",fields:[{key:"label",label:"Label"},{key:"value",label:"Value"}]}];e(l);export{l as STOREFRONT_CARD_TEMPLATES};