efficient-storefront-blocks 0.32.1 → 0.32.3

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,61 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.32.3 — 2026-10-15
4
+
5
+ **Every lightbox opens above the header, and ✕ closes it** (card [ADD] INOVIT
6
+ And Hartes Metal US Websites). On hartesmetal.com's wheel pages the owner
7
+ photos ("Out there.", a Gallery B grid) opened a lightbox whose ✕ sat under the
8
+ fixed site header: pressing it hit the header's logo and opened the homepage,
9
+ at 1440 and on a 390 phone. The dialog said `z-[100]` and the header `z-50`,
10
+ but the dialog was drawn inside its section, which is `relative z-[2]`, and a
11
+ z-index only orders things inside one stacking context.
12
+
13
+ - **One lightbox frame**, `components/Lightbox` (+ `LightboxClose`). The three
14
+ lightboxes each had their own copy of the overlay: the wheel page's image
15
+ viewer (`ProductLightbox`), /gallery's (`GalleryShowcase`) and the
16
+ owner-photo grid's (`GalleryItem`). Each keeps its own content and look; the
17
+ frame now owns what they must do alike:
18
+ - drawn through a portal at the end of the themed `<main>`, out of every
19
+ section, and carrying its section's theme with it (on `<body>` the
20
+ site's accent and faces would be lost);
21
+ - its layer is the named token `--sf-layer-lightbox` (app/globals.css, a
22
+ step of 100; the value is the 100 they wrote by hand, so nothing
23
+ re-orders);
24
+ - ✕, Esc and a click on the backdrop close it; ◁ / ▷ keys flip photos;
25
+ - focus moves in, Tab cannot leave, and focus goes back to the tile that
26
+ opened it (none of the three did this before);
27
+ - the page behind does not scroll.
28
+ - `useLightbox` is state only now; its Esc and scroll lock moved into the frame.
29
+ - `react-dom` is a declared peer of the source (the npm package already had it).
30
+ - Guard: `scripts/test-lightbox-above-the-header.tsx` mounts all three inside a
31
+ `z-index: 2` section beside a fixed `z-index: 50` header.
32
+
33
+ ## 0.32.2 — 2026-10-15
34
+
35
+ **A hand-picked Product Grid draws its wheels on the published page** (card
36
+ [FIX] Hand-Picked Grid Draws Its Wheels; plan
37
+ `_desk/plans/2026-10-15-hand-picked-grid.md`, PR 1 of 3). hartesmetal.com's
38
+ homepage grid (slots `754`, `711`, `747`) drew three grey boxes printing the
39
+ codes. The backend had found the wheels and put them on the GRID as
40
+ `props.wheels`; nothing handed them to the slots, and a slot matched its code
41
+ on `slug` alone (`754` is Crossbow's design code, its slug is `crossbow`).
42
+
43
+ - **One rule for a slot, editor and live alike**: `wheelForCode(pool, code)`
44
+ (`components/ProductRef`) — the wheel's `designCode` first, then its `slug`.
45
+ The editor's pool is the site's catalog, as before; the published page's is
46
+ the section's `props.wheels`, handed to the slots by the new
47
+ `SectionWheelsProvider`.
48
+ - **`WheelSummary.designCode`** (optional) in the generated API types — the
49
+ storefront's `openapi.yml` gains the same line in PR 2, which regenerates to
50
+ this file byte for byte. Until the backend sends it (PR 3), a slot holding a
51
+ SLUG draws now and one holding a design code draws once the backend ships.
52
+ - **On a published page, a slot whose code found no wheel draws nothing** (GG,
53
+ 2026-10-15) — the backend drops a hidden, deleted or other-site code on
54
+ purpose, and a shopper must not see a box printing it. The editor keeps its
55
+ placeholder box.
56
+ - Guard: `scripts/test-hand-picked-grid-live.tsx`, over the grid exactly as
57
+ production served it (`scripts/fixtures/hartes-us-hand-picked-grid.json`).
58
+
3
59
  ## 0.32.1 — 2026-10-15
4
60
 
5
61
  **A wheel card is the same card at rest and on hover** (card [FIX] Wheel
@@ -1 +1 @@
1
- "use client";import{ba as p,l as m}from"./chunk-NT4DZ7W3.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-YHLJWKG3.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};