@propeller-commerce/propeller-v2-react-ui 0.24.0 → 0.26.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,72 @@ 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.26.0] - 2026-09-28
12
+
13
+ ### Added
14
+
15
+ - **Price-on-request is now a first-class state.** A product whose
16
+ `priceData.display` is `ON_REQUEST` carries no price the customer may be
17
+ quoted, but `price.gross`/`price.net` are still populated — almost always
18
+ with 0 — so every surface that rendered them unguarded showed a real-looking
19
+ "€ 0,00" beside a working add-to-cart button. `isPriceOnRequest()` (exported)
20
+ detects it, resolving a cluster through its default product, and
21
+ `ProductPrice`, `ProductCard`, `ClusterCard` and `SearchBar` render a
22
+ translatable `priceOnRequest` label instead of an amount.
23
+
24
+ - **`RequestPriceButton` + `usePriceRequest` + `PriceRequestList`** — the
25
+ quote funnel these products need. The button replaces add-to-cart on the PDP;
26
+ the list is a parallel basket in `localStorage`, backed by
27
+ `useSyncExternalStore` so the server snapshot is empty and hydration matches;
28
+ the component renders it as an editable SKU/quantity table with one comment
29
+ field. Deliberately NOT the cart: a quoted product cannot be paid for, and
30
+ mixing the two would put an unpriced line into a payable order.
31
+
32
+ There is no SDK mutation for this, so delivery is the host's, supplied as
33
+ `onSubmit`. Without it the list still works and `submit` reports the omission
34
+ rather than reporting a success that never left the browser.
35
+
36
+ - `ProductInfoProps.onRequestPrice` / `priceRequestAdded`, and
37
+ `QuickOrderMatch.priceOnRequest`.
38
+
39
+ ### Changed
40
+
41
+ - **`ProductPriceProps.price` is now optional.** It is unread when
42
+ `priceOnRequest` renders in its place, and a card for such a product may
43
+ carry no price object at all. Existing callers are unaffected.
44
+
45
+ - **The PDP gates add-to-cart in the WordPress plugin's order**: `orderable`
46
+ first, then the display mode. A non-orderable product gets neither control, a
47
+ quoted one gets the request button, and an anonymous visitor gets the log-in
48
+ action rather than a list they cannot be quoted from.
49
+
50
+ - **Quick order excludes quoted products.** A bulk upload reports the code as
51
+ unresolved instead of adding a line priced at 0; picking one from the
52
+ typeahead clears the row with a notice. Matches the plugin, which drops them
53
+ from quick-order search results server-side.
54
+
55
+ ## [0.25.0] - 2026-09-25
56
+
57
+ ### Added
58
+
59
+ - `CartOverviewProps.paymethodLabels` — maps a lowercased payment-method code
60
+ to its display name, the same contract `CartPaymethods` and `OrderSummary`
61
+ already use.
62
+
63
+ ### Fixed
64
+
65
+ - **The checkout review step printed the raw payment-method code** (e.g.
66
+ "Betaling: ON_ACCOUNT") while the step before it showed the method's name for
67
+ the same selection. `CartOverview` had no way to map the stored code, so it
68
+ was the one place in checkout where the enum leaked to the customer. Pass
69
+ `paymethodLabels` to resolve it; it still falls back to the raw value.
70
+ (PWP-1028)
71
+
72
+ - **The cart line's delete button had no accessible name.** It is icon-only,
73
+ with no `aria-label`, `title` or visually-hidden text, so assistive
74
+ technology announced it as just "button". It now carries both, via a
75
+ `deleteLabel` label key. (PWP-1030)
76
+
11
77
  ## [0.24.0] - 2026-09-25
12
78
 
13
79
  ### Added