efficient-storefront-blocks 0.32.0 → 0.32.2

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,59 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.32.2 — 2026-10-15
4
+
5
+ **A hand-picked Product Grid draws its wheels on the published page** (card
6
+ [FIX] Hand-Picked Grid Draws Its Wheels; plan
7
+ `_desk/plans/2026-10-15-hand-picked-grid.md`, PR 1 of 3). hartesmetal.com's
8
+ homepage grid (slots `754`, `711`, `747`) drew three grey boxes printing the
9
+ codes. The backend had found the wheels and put them on the GRID as
10
+ `props.wheels`; nothing handed them to the slots, and a slot matched its code
11
+ on `slug` alone (`754` is Crossbow's design code, its slug is `crossbow`).
12
+
13
+ - **One rule for a slot, editor and live alike**: `wheelForCode(pool, code)`
14
+ (`components/ProductRef`) — the wheel's `designCode` first, then its `slug`.
15
+ The editor's pool is the site's catalog, as before; the published page's is
16
+ the section's `props.wheels`, handed to the slots by the new
17
+ `SectionWheelsProvider`.
18
+ - **`WheelSummary.designCode`** (optional) in the generated API types — the
19
+ storefront's `openapi.yml` gains the same line in PR 2, which regenerates to
20
+ this file byte for byte. Until the backend sends it (PR 3), a slot holding a
21
+ SLUG draws now and one holding a design code draws once the backend ships.
22
+ - **On a published page, a slot whose code found no wheel draws nothing** (GG,
23
+ 2026-10-15) — the backend drops a hidden, deleted or other-site code on
24
+ purpose, and a shopper must not see a box printing it. The editor keeps its
25
+ placeholder box.
26
+ - Guard: `scripts/test-hand-picked-grid-live.tsx`, over the grid exactly as
27
+ production served it (`scripts/fixtures/hartes-us-hand-picked-grid.json`).
28
+
29
+ ## 0.32.1 — 2026-10-15
30
+
31
+ **A wheel card is the same card at rest and on hover** (card [FIX] Wheel
32
+ Cards Change On Hover; Lewis on hartesmetal.com/wheels, One-Piece Cast). The
33
+ chip row and the main button were drawn from the design summary at rest and
34
+ from the fetched variants once the pointer arrived, so Patriot went from
35
+ `12×20 · 14×22` and ADD TO BASKET to `20" × 12 · 20" × 12 · 22" × 14 · +1`
36
+ and a dashed SELECT A SIZE that grew the card 2px. Both wheel cards (the
37
+ listing's and the Product Grid's) share the one bottom this changes.
38
+
39
+ - **One chip per SIZE, one format.** The chips are the design's sizes from
40
+ the summary, `20" × 9` (diameter first, the product page's own format,
41
+ `wheelSizeLabel`), each printed once; `+N` counts the sizes left over,
42
+ never variants. Strike reads `20" × 9 · 20" × 10 · 22" × 10 · +1`, at rest
43
+ and on hover. A chip that does not fit a narrow card is left off whole
44
+ (and counted), never cut in half.
45
+ - **The chips are information, not a picker.** A size is sold in several
46
+ bolt patterns and offsets, so a size chip cannot know which wheel to add;
47
+ the old picker added whichever variant came first.
48
+ - **The button, in one line:** "Add to basket" only on a design sold as one
49
+ wheel (one size, one bolt pattern, one offset — `isOneWheelDesign`, read
50
+ from the summary); every other card says "Select a size" and opens the
51
+ product page. Same box in every state. A one-wheel card's button resolves
52
+ its wheel as it mounts, so the Product Grid's button (which nothing armed)
53
+ works too; out of stock it reads "Notify me when back".
54
+ - `sizePairLabel` (`7.5×17`) stays as it was: it is the pre-order key the
55
+ backend parses, not a display label any more.
56
+
3
57
  ## 0.32.0 — 2026-10-15
4
58
 
5
59
  **The B3 save bar: Publish as the main action, and Preview opens the saved
@@ -1 +1 @@
1
- "use client";import{ba as p,l as m}from"./chunk-ARXXIF4I.js";import{Pc as u,Pd as d,jg as c}from"./chunk-QOXKQV6L.js";import"./chunk-GD6ZFQC7.js";import"./chunk-NEQXU52M.js";import{Ga as s,La as a,Ma as f,Qa as g}from"./chunk-IKG5YKP7.js";import"./chunk-VBQY6H55.js";import"./chunk-Y6SLVHK3.js";import{Render as P}from"efficient-easel/render";import{jsx as k}from"react/jsx-runtime";function i({footerBlock:r,rootProps:e,headerSettings:o,siteName:t,legalName:l,foundedYear:n,socialLinks:v}){let I=m({root:{props:{...e??{},kind:d}},content:[r],zones:{}});return k(s.Provider,{value:{logoUrl:o?.logoUrl??null,logoReversed:o?.logoReversed??null,logoInkIsDark:o?.logoInkIsDark??null,siteName:t,legalName:l??null,foundedYear:n??null,socialLinks:v??g},children:k(P,{config:p,data:I})})}import{jsx as h}from"react/jsx-runtime";function F(){let{footerBlock:r,editFooter:e}=c(),{settings:o,websiteName:t}=a();if(!r)return null;let l=o?{logoUrl:o.logoUrl,logoReversed:o.logoReversed??null,logoInkIsDark:o.logoInkIsDark??null}:null;return h("div",{className:"sf-preview-footer-pick",onClick:e?n=>{n.stopPropagation(),e()}:void 0,style:e?{cursor:"pointer"}:void 0,title:e?u("Edit the site footer \u2192"):void 0,children:h(i,{footerBlock:r,headerSettings:l,siteName:t?.trim()||f})})}export{F as default};
1
+ "use client";import{ba as p,l as m}from"./chunk-5XYF5FZK.js";import{Pc as u,Pd as d,jg as c}from"./chunk-QOXKQV6L.js";import"./chunk-GD6ZFQC7.js";import"./chunk-NEQXU52M.js";import{Ga as s,La as a,Ma as f,Qa as g}from"./chunk-IKG5YKP7.js";import"./chunk-VBQY6H55.js";import"./chunk-Y6SLVHK3.js";import{Render as P}from"efficient-easel/render";import{jsx as k}from"react/jsx-runtime";function i({footerBlock:r,rootProps:e,headerSettings:o,siteName:t,legalName:l,foundedYear:n,socialLinks:v}){let I=m({root:{props:{...e??{},kind:d}},content:[r],zones:{}});return k(s.Provider,{value:{logoUrl:o?.logoUrl??null,logoReversed:o?.logoReversed??null,logoInkIsDark:o?.logoInkIsDark??null,siteName:t,legalName:l??null,foundedYear:n??null,socialLinks:v??g},children:k(P,{config:p,data:I})})}import{jsx as h}from"react/jsx-runtime";function F(){let{footerBlock:r,editFooter:e}=c(),{settings:o,websiteName:t}=a();if(!r)return null;let l=o?{logoUrl:o.logoUrl,logoReversed:o.logoReversed??null,logoInkIsDark:o.logoInkIsDark??null}:null;return h("div",{className:"sf-preview-footer-pick",onClick:e?n=>{n.stopPropagation(),e()}:void 0,style:e?{cursor:"pointer"}:void 0,title:e?u("Edit the site footer \u2192"):void 0,children:h(i,{footerBlock:r,headerSettings:l,siteName:t?.trim()||f})})}export{F as default};