@propeller-commerce/propeller-v2-react-ui 0.27.0 → 0.28.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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,62 @@ once it reaches 1.0. Until then (the `0.x` line) the public API may change
8
8
  between minor versions; breaking changes are called out below and in
9
9
  [MIGRATION.md](./MIGRATION.md).
10
10
 
11
+ ## [0.28.0] - 2026-10-02
12
+
13
+ ### Added
14
+
15
+ - **`imgComponent` on `<PropellerDepsProvider>` — one setting routes every
16
+ image through the host’s image component.** Components rendered a bare
17
+ `<img src="https://media.…">`, so catalog images were fetched straight from
18
+ the media CDN. That CDN sends no `X-Robots-Tag` and serves no `robots.txt`,
19
+ so those images sat outside the storefront’s crawler directives and got none
20
+ of the host framework’s image optimisation. The existing `imageComponent`
21
+ slot could not close this: it takes a `product`/`cluster` and resolves the
22
+ URL itself, so it only fitted five surfaces, and the other nineteen image
23
+ sites had already resolved a URL string by render time. Set `imgComponent`
24
+ once on the provider and images across the package route through it,
25
+ including components added later. Optional — omitting it keeps the previous
26
+ markup. (PWP-1001)
27
+ - **`<PropellerImg>` and `useImgComponent()` are exported.** Hosts composing
28
+ their own cards get the same seam; `<PropellerImg>` is also on the `/pure`
29
+ entry for Server Components.
30
+ - **`OrderItemCard` accepts `imgComponent` as a prop.** It is `@rsc-safe` and
31
+ reads no context, so the provider cannot reach it — same direct-prop
32
+ convention as its existing `priceComponent` / `stockComponent`.
33
+
34
+ ### Changed
35
+
36
+ - **Nineteen image sites now render `<PropellerImg>`** across `ProductCard`,
37
+ `ClusterCard`, `ProductGallery`, `CartItem`, `OrderItemCard`, `SearchBar`,
38
+ `ProductBundles`, `MachineCard`, `AddToCart`, `QuickOrder`, `ItemsOverview`,
39
+ `FavoriteListItem`, `FavoriteListDetails`, `ClusterOptions`,
40
+ `ClusterConfigurator`, `CartBonusItems` and `DefaultProductImage`. Markup is
41
+ unchanged when no component is injected.
42
+ - **Carrier and payment-provider logos stay plain `<img>`.** Their domains sit
43
+ outside the host’s image allowlist, so routing them through a framework
44
+ image component would stop them loading. They are catalog-external and not
45
+ crawlable.
46
+ - **`npm run check:img` fails the build on a raw `<img>`.** The seam only holds
47
+ if new components use it, and a raw `<img>` opts a surface out silently.
48
+ Wired into `validate` and `prepublishOnly`.
49
+
50
+ ### Fixed
51
+
52
+ - **The "no image" placeholder was two different icons.** Cards, favourites and
53
+ `DefaultProductImage` drew one glyph; cart rows, the cart drawer, bundles, the
54
+ add-to-cart modal and the checkout overview drew another, at a heavier stroke
55
+ weight — so the same missing-image product looked like two different states
56
+ depending on which surface showed it. All of them now use the card icon at a
57
+ consistent stroke weight. The machine card keeps its own glyph, which is
58
+ deliberate.
59
+ - **The cart drawer’s image box did not centre its contents.** It overrides
60
+ `CartItem.Image`’s class, and the override dropped the flex centring, so the
61
+ placeholder sat top-left at its natural size instead of filling the box.
62
+ - **Placeholder icons were exposed to screen readers.** They carry no
63
+ information the row does not already state in text, so they now set
64
+ `aria-hidden`, matching what `DefaultProductImage` already did.
65
+ ---
66
+
11
67
  ## [0.27.0] - 2026-09-28
12
68
 
13
69
  ### Fixed