@nevios/storefront-kit 1.0.0 → 1.2.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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { StorefrontClient, Money, Product, ProductMedia, ProductVariant, CollectionDetail, ProductSort, Cart, AddLineInput, CartLine, Checkout, CreateCheckoutInput, SetAddressInput, ShippingQuote, PaymentMethod, OrderStatus, Customer, MagicLinkResult, ReorderResult } from '@nevios/storefront-js';
2
+ import { StorefrontClient, Money, Product, ProductMedia, ProductVariant, CollectionDetail, ProductSort, Cart, AddLineInput, CartLine, Checkout, CreateCheckoutInput, SetAddressInput, ShippingQuote, PaymentMethod, OrderStatus, PaymentState, OrderPhase, PaymentInstructions, Customer, MagicLinkResult, ReorderResult } from '@nevios/storefront-js';
3
3
 
4
4
  /**
5
5
  * NeviosProvider — puts a configured storefront client on React context so
@@ -173,6 +173,32 @@ declare const en: {
173
173
  "order.terminal.cancelled": string;
174
174
  "order.terminal.refunded": string;
175
175
  "order.terminal.returned": string;
176
+ "payment.title": string;
177
+ "payment.amountDue": string;
178
+ "payment.methodLabel": string;
179
+ "payment.payNow": string;
180
+ "payment.finish": string;
181
+ "payment.loading": string;
182
+ "payment.loadError": string;
183
+ "payment.actionError": string;
184
+ "payment.paidTitle": string;
185
+ "payment.paidBody": string;
186
+ "payment.paidAmount": string;
187
+ "payment.verifyingTitle": string;
188
+ "payment.verifyingBody": string;
189
+ "payment.blockedTitle": string;
190
+ "payment.blocked.orderCancelled": string;
191
+ "payment.blocked.alreadyPaid": string;
192
+ "payment.blocked.authorizationHeld": string;
193
+ "payment.blocked.documentIssued": string;
194
+ "payment.account": string;
195
+ "payment.beneficiary": string;
196
+ "payment.variableSymbol": string;
197
+ "payment.amount": string;
198
+ "payment.copy": string;
199
+ "payment.copied": string;
200
+ "payment.qrAlt": string;
201
+ "payment.qrCaption": string;
176
202
  "error.notFound.title": string;
177
203
  "error.notFound.body": string;
178
204
  "error.generic.title": string;
@@ -729,6 +755,27 @@ interface OrderStatusState {
729
755
  }
730
756
  declare function useOrderStatus(statusToken: string | null, initial?: OrderStatus | null): OrderStatusState;
731
757
 
758
+ interface PaymentPageState {
759
+ payment: PaymentState | null;
760
+ methods: PaymentMethod[];
761
+ loading: boolean;
762
+ /** True while a method change or a gateway start is in flight — the moment
763
+ * to disable the buttons, because both mutate the order. */
764
+ busy: boolean;
765
+ error: Error | null;
766
+ reload(): Promise<void>;
767
+ /** Switch method. The order's total can move with it (the fee differs), so
768
+ * the refreshed state is returned and stored, not merged. */
769
+ selectMethod(method: string): Promise<PaymentState | null>;
770
+ /** Open a gateway session. Returns the URL to send the browser to; null when
771
+ * the connector needs no redirect. */
772
+ startPayment(input?: {
773
+ returnUrl?: string;
774
+ cancelUrl?: string;
775
+ }): Promise<string | null>;
776
+ }
777
+ declare function usePayment(token: string | null, initial?: PaymentState | null): PaymentPageState;
778
+
732
779
  /**
733
780
  * OrderConfirmation — the compact post-checkout "thank you" block. Drop it on
734
781
  * the return route after `checkout.complete()` / a gateway redirect back, keyed
@@ -762,9 +809,143 @@ interface OrderStatusPageProps {
762
809
  order?: OrderStatus;
763
810
  /** Contact-support callback (shown when the order allows it). */
764
811
  onContactSupport?: () => void;
812
+ /** Builds the URL of your payment page from the payment's token. Given one,
813
+ * an unpaid order shows a "finish payment" link; without it the page stays
814
+ * read-only, because a link to a route the shop does not have is worse than
815
+ * no link. */
816
+ payHref?: (paymentToken: string) => string;
817
+ locale?: string;
818
+ }
819
+ declare function OrderStatusPage({ statusToken, order: initial, onContactSupport, payHref, locale, }: OrderStatusPageProps): React.ReactElement;
820
+
821
+ /**
822
+ * Shared presentational parts for the order views — phase timeline, terminal
823
+ * status banner, line items, and totals. Themeable via `--nv-*`. Internal to
824
+ * the order slice.
825
+ */
826
+
827
+ declare function isTerminal(phase: OrderPhase): boolean;
828
+ /** The happy-path progress bar. Hidden for terminal phases (use StatusBanner). */
829
+ declare function PhaseTimeline({ phase }: {
830
+ phase: OrderPhase;
831
+ }): React.ReactElement | null;
832
+ /** Banner shown for terminal phases (cancelled / refunded / returned). */
833
+ declare function StatusBanner({ phase }: {
834
+ phase: OrderPhase;
835
+ }): React.ReactElement | null;
836
+ declare function OrderLines({ order, locale, }: {
837
+ order: OrderStatus;
838
+ locale?: string;
839
+ }): React.ReactElement;
840
+ declare function OrderTotals({ order, locale, }: {
841
+ order: OrderStatus;
842
+ locale?: string;
843
+ }): React.ReactElement;
844
+
845
+ /**
846
+ * PaymentPage — the merchant's own payment page for a placed order.
847
+ *
848
+ * A whole page, not a widget, because of who reaches it: somebody who clicked
849
+ * "finish your payment" in an order e-mail, possibly days later, on a phone,
850
+ * with none of the shop's context around them. It has to answer "what do I owe
851
+ * and what do I do now" on its own.
852
+ *
853
+ * <PaymentPage token={order.payment.token} statusHref={`/order/${t}`} />
854
+ *
855
+ * It renders exactly one of four situations, and the difference between them is
856
+ * the entire job:
857
+ *
858
+ * 1. THERE IS SOMETHING TO PAY — the picker plus one button named after what
859
+ * it does. The surcharge sits on the row and the amount due moves when the
860
+ * method changes, so nobody picks cash-on-delivery and watches the total
861
+ * grow afterwards.
862
+ * 2. BANK TRANSFER — account, variable symbol, amount, QR. No
863
+ * button; the details are the action.
864
+ * 3. ALREADY PAID — a receipt, NOT an error. Arriving at a paid
865
+ * link is the normal end of the happy path (and of every gateway return).
866
+ * 4. LOCKED — one of four reasons, each its own sentence.
867
+ * `blocked_reason` carries four values precisely so the page can say four
868
+ * different things; collapsing them into "cannot pay" sends the customer
869
+ * to support.
870
+ *
871
+ * `token === null` renders nothing at all. The token is minted only while there
872
+ * is something to pay, so its absence is the server saying "no button here" —
873
+ * a disabled button would be a worse answer.
874
+ *
875
+ * **Returning from a gateway.** The page can be the `return_url`. Before it
876
+ * sends the browser to a gateway it remembers that in `sessionStorage`, so on
877
+ * the way back it knows to show "verifying your payment" and poll instead of
878
+ * offering to pay again — the callback often lands a second or two after the
879
+ * customer does, and a payable-looking page at that moment invites a double
880
+ * payment. Needs no cooperation from the route.
881
+ */
882
+
883
+ interface PaymentPageProps {
884
+ /** The payment page's own token — the status page hands it over as
885
+ * `order.payment.token`. `null` renders nothing. */
886
+ token: string | null;
887
+ /** Pre-fetched state (SSR / loader) — skips the first client fetch. */
888
+ payment?: PaymentState | null;
889
+ /** Where the gateway returns the customer after paying. Defaults to the
890
+ * current URL, which makes this page its own return route. */
891
+ returnUrl?: string;
892
+ cancelUrl?: string;
893
+ /** Link to the full order status page, offered once there is nothing to pay. */
894
+ statusHref?: string;
895
+ locale?: string;
896
+ /** Called once the payment reads as settled — e.g. to refresh an order view. */
897
+ onPaid?(payment: PaymentState): void;
898
+ }
899
+ declare function PaymentPage({ token, payment: initial, returnUrl, cancelUrl, statusHref, locale, onPaid, }: PaymentPageProps): React.ReactElement | null;
900
+
901
+ /**
902
+ * PaymentMethodPicker — the ONE payment picker in the kit.
903
+ *
904
+ * Used by both the checkout's payment step and the payment page, and that is
905
+ * the whole point of it existing separately: switching from card to transfer
906
+ * has to look identical in the shop and on the page a customer reaches from an
907
+ * e-mail two days later. Two pickers that drift make the second one feel like
908
+ * somebody else's site — at the exact moment the customer is deciding whether
909
+ * to send money.
910
+ *
911
+ * The surcharge rides on the row because it is the consequence of the choice.
912
+ * Cash on delivery costs 39 Kč more; a picker that hides that until the total
913
+ * moves has let the shopper choose blind.
914
+ */
915
+
916
+ interface PaymentMethodPickerProps {
917
+ methods: PaymentMethod[];
918
+ /** The chosen method's key (`PaymentMethod.method`), or null when none is. */
919
+ value: string | null;
920
+ onSelect(method: string): void;
921
+ /** Currency of the order/checkout — the surcharge is formatted in it. */
922
+ currency: string;
923
+ locale?: string;
924
+ /** Renders the rows unselectable (e.g. while a switch is in flight). */
925
+ disabled?: boolean;
926
+ /** Accessible name for the group. */
927
+ label?: string;
928
+ }
929
+ declare function PaymentMethodPicker({ methods, value, onSelect, currency, locale, disabled, label, }: PaymentMethodPickerProps): React.ReactElement;
930
+
931
+ /**
932
+ * TransferInstructions — where to send the money for a bank-transfer order.
933
+ *
934
+ * Nothing in the kit rendered this until now, which meant a shopper who chose
935
+ * "bank transfer" placed the order and was told nothing about where to pay.
936
+ * The backend has always returned the account, the variable symbol, the amount
937
+ * and a ready-made QR image; it just had no home.
938
+ *
939
+ * There is deliberately NO button here. For a transfer these details ARE the
940
+ * action — the customer leaves for their banking app. A button would either lie
941
+ * about what it does or do nothing.
942
+ */
943
+
944
+ interface TransferInstructionsProps {
945
+ instructions: PaymentInstructions;
765
946
  locale?: string;
766
947
  }
767
- declare function OrderStatusPage({ statusToken, order: initial, onContactSupport, locale, }: OrderStatusPageProps): React.ReactElement;
948
+ declare function TransferInstructions({ instructions: i, locale, }: TransferInstructionsProps): React.ReactElement;
768
949
 
769
950
  /**
770
951
  * AccountProvider + useAccount — shared logged-in-customer state. Resolves the
@@ -928,4 +1109,4 @@ interface JsonLdProps {
928
1109
  /** Render a JSON-LD `<script>` for the given (already-shaped) data object. */
929
1110
  declare function JsonLd({ data }: JsonLdProps): React.ReactElement;
930
1111
 
931
- export { AccountDashboard, type AccountDashboardProps, AccountProvider, type AccountState, AddToCart, type AddToCartProps, AddressBook, AddressForm, type AddressFormProps, AvailabilityFilter, type AvailabilityFilterProps, BackInStockForm, type BackInStockFormProps, type BreadcrumbItem, BreadcrumbJsonLd, type BreadcrumbJsonLdProps, CartDrawer, type CartDrawerProps, CartLineItem, type CartLineItemProps, CartProvider, type CartState, CartSummary, type CartSummaryProps, CheckoutFlow, type CheckoutFlowProps, CheckoutProvider, type CheckoutState, CollectionPage, type CollectionPageProps, I18nProvider, type I18nProviderProps, type I18nValue, JsonLd, type JsonLdProps, LoginForm, type LoginFormProps, type MarketOption, MarketSwitcher, type MarketSwitcherProps, type MessageKey, type Messages, NeviosProvider, type NeviosProviderProps, OrderConfirmation, type OrderConfirmationProps, OrderHistory, type OrderHistoryProps, OrderStatusPage, type OrderStatusPageProps, type OrderStatusState, OrderSummary, type OrderSummaryProps, OrganizationJsonLd, type OrganizationJsonLdProps, type PayOptions, type PayResult, PaymentSection, type PaymentSectionProps, PriceMoney, type PriceMoneyProps, PriceRangeFilter, type PriceRangeFilterProps, ProductCard, type ProductCardProps, ProductDetailPage, type ProductDetailPageProps, ProductGallery, type ProductGalleryProps, ProductJsonLd, type ProductJsonLdProps, ProfileEditor, ShippingPicker, type ShippingPickerProps, SortSelect, type SortSelectProps, StockBadge, type StockBadgeProps, type StorefrontTheme, type TFunction, type TVars, TagFilter, type TagFilterProps, ThemeProvider, type ThemeProviderProps, VariantPicker, type VariantPickerProps, type VerifyStatus, absoluteUrl, bundledMessages, cs, en, formatCents, formatMoney, serializeJsonLd, stripHtml, themeToCssVars, useAccount, useCart, useCheckout, useI18n, useMagicLinkVerify, useOrderStatus, useStorefront, useStorefrontOptional, useT };
1112
+ export { AccountDashboard, type AccountDashboardProps, AccountProvider, type AccountState, AddToCart, type AddToCartProps, AddressBook, AddressForm, type AddressFormProps, AvailabilityFilter, type AvailabilityFilterProps, BackInStockForm, type BackInStockFormProps, type BreadcrumbItem, BreadcrumbJsonLd, type BreadcrumbJsonLdProps, CartDrawer, type CartDrawerProps, CartLineItem, type CartLineItemProps, CartProvider, type CartState, CartSummary, type CartSummaryProps, CheckoutFlow, type CheckoutFlowProps, CheckoutProvider, type CheckoutState, CollectionPage, type CollectionPageProps, I18nProvider, type I18nProviderProps, type I18nValue, JsonLd, type JsonLdProps, LoginForm, type LoginFormProps, type MarketOption, MarketSwitcher, type MarketSwitcherProps, type MessageKey, type Messages, NeviosProvider, type NeviosProviderProps, OrderConfirmation, type OrderConfirmationProps, OrderHistory, type OrderHistoryProps, OrderLines, OrderStatusPage, type OrderStatusPageProps, type OrderStatusState, OrderSummary, type OrderSummaryProps, OrderTotals, OrganizationJsonLd, type OrganizationJsonLdProps, type PayOptions, type PayResult, PaymentMethodPicker, type PaymentMethodPickerProps, PaymentPage, type PaymentPageProps, type PaymentPageState, PaymentSection, type PaymentSectionProps, PhaseTimeline, PriceMoney, type PriceMoneyProps, PriceRangeFilter, type PriceRangeFilterProps, ProductCard, type ProductCardProps, ProductDetailPage, type ProductDetailPageProps, ProductGallery, type ProductGalleryProps, ProductJsonLd, type ProductJsonLdProps, ProfileEditor, ShippingPicker, type ShippingPickerProps, SortSelect, type SortSelectProps, StatusBanner, StockBadge, type StockBadgeProps, type StorefrontTheme, type TFunction, type TVars, TagFilter, type TagFilterProps, ThemeProvider, type ThemeProviderProps, TransferInstructions, type TransferInstructionsProps, VariantPicker, type VariantPickerProps, type VerifyStatus, absoluteUrl, bundledMessages, cs, en, formatCents, formatMoney, isTerminal, serializeJsonLd, stripHtml, themeToCssVars, useAccount, useCart, useCheckout, useI18n, useMagicLinkVerify, useOrderStatus, usePayment, useStorefront, useStorefrontOptional, useT };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { StorefrontClient, Money, Product, ProductMedia, ProductVariant, CollectionDetail, ProductSort, Cart, AddLineInput, CartLine, Checkout, CreateCheckoutInput, SetAddressInput, ShippingQuote, PaymentMethod, OrderStatus, Customer, MagicLinkResult, ReorderResult } from '@nevios/storefront-js';
2
+ import { StorefrontClient, Money, Product, ProductMedia, ProductVariant, CollectionDetail, ProductSort, Cart, AddLineInput, CartLine, Checkout, CreateCheckoutInput, SetAddressInput, ShippingQuote, PaymentMethod, OrderStatus, PaymentState, OrderPhase, PaymentInstructions, Customer, MagicLinkResult, ReorderResult } from '@nevios/storefront-js';
3
3
 
4
4
  /**
5
5
  * NeviosProvider — puts a configured storefront client on React context so
@@ -173,6 +173,32 @@ declare const en: {
173
173
  "order.terminal.cancelled": string;
174
174
  "order.terminal.refunded": string;
175
175
  "order.terminal.returned": string;
176
+ "payment.title": string;
177
+ "payment.amountDue": string;
178
+ "payment.methodLabel": string;
179
+ "payment.payNow": string;
180
+ "payment.finish": string;
181
+ "payment.loading": string;
182
+ "payment.loadError": string;
183
+ "payment.actionError": string;
184
+ "payment.paidTitle": string;
185
+ "payment.paidBody": string;
186
+ "payment.paidAmount": string;
187
+ "payment.verifyingTitle": string;
188
+ "payment.verifyingBody": string;
189
+ "payment.blockedTitle": string;
190
+ "payment.blocked.orderCancelled": string;
191
+ "payment.blocked.alreadyPaid": string;
192
+ "payment.blocked.authorizationHeld": string;
193
+ "payment.blocked.documentIssued": string;
194
+ "payment.account": string;
195
+ "payment.beneficiary": string;
196
+ "payment.variableSymbol": string;
197
+ "payment.amount": string;
198
+ "payment.copy": string;
199
+ "payment.copied": string;
200
+ "payment.qrAlt": string;
201
+ "payment.qrCaption": string;
176
202
  "error.notFound.title": string;
177
203
  "error.notFound.body": string;
178
204
  "error.generic.title": string;
@@ -729,6 +755,27 @@ interface OrderStatusState {
729
755
  }
730
756
  declare function useOrderStatus(statusToken: string | null, initial?: OrderStatus | null): OrderStatusState;
731
757
 
758
+ interface PaymentPageState {
759
+ payment: PaymentState | null;
760
+ methods: PaymentMethod[];
761
+ loading: boolean;
762
+ /** True while a method change or a gateway start is in flight — the moment
763
+ * to disable the buttons, because both mutate the order. */
764
+ busy: boolean;
765
+ error: Error | null;
766
+ reload(): Promise<void>;
767
+ /** Switch method. The order's total can move with it (the fee differs), so
768
+ * the refreshed state is returned and stored, not merged. */
769
+ selectMethod(method: string): Promise<PaymentState | null>;
770
+ /** Open a gateway session. Returns the URL to send the browser to; null when
771
+ * the connector needs no redirect. */
772
+ startPayment(input?: {
773
+ returnUrl?: string;
774
+ cancelUrl?: string;
775
+ }): Promise<string | null>;
776
+ }
777
+ declare function usePayment(token: string | null, initial?: PaymentState | null): PaymentPageState;
778
+
732
779
  /**
733
780
  * OrderConfirmation — the compact post-checkout "thank you" block. Drop it on
734
781
  * the return route after `checkout.complete()` / a gateway redirect back, keyed
@@ -762,9 +809,143 @@ interface OrderStatusPageProps {
762
809
  order?: OrderStatus;
763
810
  /** Contact-support callback (shown when the order allows it). */
764
811
  onContactSupport?: () => void;
812
+ /** Builds the URL of your payment page from the payment's token. Given one,
813
+ * an unpaid order shows a "finish payment" link; without it the page stays
814
+ * read-only, because a link to a route the shop does not have is worse than
815
+ * no link. */
816
+ payHref?: (paymentToken: string) => string;
817
+ locale?: string;
818
+ }
819
+ declare function OrderStatusPage({ statusToken, order: initial, onContactSupport, payHref, locale, }: OrderStatusPageProps): React.ReactElement;
820
+
821
+ /**
822
+ * Shared presentational parts for the order views — phase timeline, terminal
823
+ * status banner, line items, and totals. Themeable via `--nv-*`. Internal to
824
+ * the order slice.
825
+ */
826
+
827
+ declare function isTerminal(phase: OrderPhase): boolean;
828
+ /** The happy-path progress bar. Hidden for terminal phases (use StatusBanner). */
829
+ declare function PhaseTimeline({ phase }: {
830
+ phase: OrderPhase;
831
+ }): React.ReactElement | null;
832
+ /** Banner shown for terminal phases (cancelled / refunded / returned). */
833
+ declare function StatusBanner({ phase }: {
834
+ phase: OrderPhase;
835
+ }): React.ReactElement | null;
836
+ declare function OrderLines({ order, locale, }: {
837
+ order: OrderStatus;
838
+ locale?: string;
839
+ }): React.ReactElement;
840
+ declare function OrderTotals({ order, locale, }: {
841
+ order: OrderStatus;
842
+ locale?: string;
843
+ }): React.ReactElement;
844
+
845
+ /**
846
+ * PaymentPage — the merchant's own payment page for a placed order.
847
+ *
848
+ * A whole page, not a widget, because of who reaches it: somebody who clicked
849
+ * "finish your payment" in an order e-mail, possibly days later, on a phone,
850
+ * with none of the shop's context around them. It has to answer "what do I owe
851
+ * and what do I do now" on its own.
852
+ *
853
+ * <PaymentPage token={order.payment.token} statusHref={`/order/${t}`} />
854
+ *
855
+ * It renders exactly one of four situations, and the difference between them is
856
+ * the entire job:
857
+ *
858
+ * 1. THERE IS SOMETHING TO PAY — the picker plus one button named after what
859
+ * it does. The surcharge sits on the row and the amount due moves when the
860
+ * method changes, so nobody picks cash-on-delivery and watches the total
861
+ * grow afterwards.
862
+ * 2. BANK TRANSFER — account, variable symbol, amount, QR. No
863
+ * button; the details are the action.
864
+ * 3. ALREADY PAID — a receipt, NOT an error. Arriving at a paid
865
+ * link is the normal end of the happy path (and of every gateway return).
866
+ * 4. LOCKED — one of four reasons, each its own sentence.
867
+ * `blocked_reason` carries four values precisely so the page can say four
868
+ * different things; collapsing them into "cannot pay" sends the customer
869
+ * to support.
870
+ *
871
+ * `token === null` renders nothing at all. The token is minted only while there
872
+ * is something to pay, so its absence is the server saying "no button here" —
873
+ * a disabled button would be a worse answer.
874
+ *
875
+ * **Returning from a gateway.** The page can be the `return_url`. Before it
876
+ * sends the browser to a gateway it remembers that in `sessionStorage`, so on
877
+ * the way back it knows to show "verifying your payment" and poll instead of
878
+ * offering to pay again — the callback often lands a second or two after the
879
+ * customer does, and a payable-looking page at that moment invites a double
880
+ * payment. Needs no cooperation from the route.
881
+ */
882
+
883
+ interface PaymentPageProps {
884
+ /** The payment page's own token — the status page hands it over as
885
+ * `order.payment.token`. `null` renders nothing. */
886
+ token: string | null;
887
+ /** Pre-fetched state (SSR / loader) — skips the first client fetch. */
888
+ payment?: PaymentState | null;
889
+ /** Where the gateway returns the customer after paying. Defaults to the
890
+ * current URL, which makes this page its own return route. */
891
+ returnUrl?: string;
892
+ cancelUrl?: string;
893
+ /** Link to the full order status page, offered once there is nothing to pay. */
894
+ statusHref?: string;
895
+ locale?: string;
896
+ /** Called once the payment reads as settled — e.g. to refresh an order view. */
897
+ onPaid?(payment: PaymentState): void;
898
+ }
899
+ declare function PaymentPage({ token, payment: initial, returnUrl, cancelUrl, statusHref, locale, onPaid, }: PaymentPageProps): React.ReactElement | null;
900
+
901
+ /**
902
+ * PaymentMethodPicker — the ONE payment picker in the kit.
903
+ *
904
+ * Used by both the checkout's payment step and the payment page, and that is
905
+ * the whole point of it existing separately: switching from card to transfer
906
+ * has to look identical in the shop and on the page a customer reaches from an
907
+ * e-mail two days later. Two pickers that drift make the second one feel like
908
+ * somebody else's site — at the exact moment the customer is deciding whether
909
+ * to send money.
910
+ *
911
+ * The surcharge rides on the row because it is the consequence of the choice.
912
+ * Cash on delivery costs 39 Kč more; a picker that hides that until the total
913
+ * moves has let the shopper choose blind.
914
+ */
915
+
916
+ interface PaymentMethodPickerProps {
917
+ methods: PaymentMethod[];
918
+ /** The chosen method's key (`PaymentMethod.method`), or null when none is. */
919
+ value: string | null;
920
+ onSelect(method: string): void;
921
+ /** Currency of the order/checkout — the surcharge is formatted in it. */
922
+ currency: string;
923
+ locale?: string;
924
+ /** Renders the rows unselectable (e.g. while a switch is in flight). */
925
+ disabled?: boolean;
926
+ /** Accessible name for the group. */
927
+ label?: string;
928
+ }
929
+ declare function PaymentMethodPicker({ methods, value, onSelect, currency, locale, disabled, label, }: PaymentMethodPickerProps): React.ReactElement;
930
+
931
+ /**
932
+ * TransferInstructions — where to send the money for a bank-transfer order.
933
+ *
934
+ * Nothing in the kit rendered this until now, which meant a shopper who chose
935
+ * "bank transfer" placed the order and was told nothing about where to pay.
936
+ * The backend has always returned the account, the variable symbol, the amount
937
+ * and a ready-made QR image; it just had no home.
938
+ *
939
+ * There is deliberately NO button here. For a transfer these details ARE the
940
+ * action — the customer leaves for their banking app. A button would either lie
941
+ * about what it does or do nothing.
942
+ */
943
+
944
+ interface TransferInstructionsProps {
945
+ instructions: PaymentInstructions;
765
946
  locale?: string;
766
947
  }
767
- declare function OrderStatusPage({ statusToken, order: initial, onContactSupport, locale, }: OrderStatusPageProps): React.ReactElement;
948
+ declare function TransferInstructions({ instructions: i, locale, }: TransferInstructionsProps): React.ReactElement;
768
949
 
769
950
  /**
770
951
  * AccountProvider + useAccount — shared logged-in-customer state. Resolves the
@@ -928,4 +1109,4 @@ interface JsonLdProps {
928
1109
  /** Render a JSON-LD `<script>` for the given (already-shaped) data object. */
929
1110
  declare function JsonLd({ data }: JsonLdProps): React.ReactElement;
930
1111
 
931
- export { AccountDashboard, type AccountDashboardProps, AccountProvider, type AccountState, AddToCart, type AddToCartProps, AddressBook, AddressForm, type AddressFormProps, AvailabilityFilter, type AvailabilityFilterProps, BackInStockForm, type BackInStockFormProps, type BreadcrumbItem, BreadcrumbJsonLd, type BreadcrumbJsonLdProps, CartDrawer, type CartDrawerProps, CartLineItem, type CartLineItemProps, CartProvider, type CartState, CartSummary, type CartSummaryProps, CheckoutFlow, type CheckoutFlowProps, CheckoutProvider, type CheckoutState, CollectionPage, type CollectionPageProps, I18nProvider, type I18nProviderProps, type I18nValue, JsonLd, type JsonLdProps, LoginForm, type LoginFormProps, type MarketOption, MarketSwitcher, type MarketSwitcherProps, type MessageKey, type Messages, NeviosProvider, type NeviosProviderProps, OrderConfirmation, type OrderConfirmationProps, OrderHistory, type OrderHistoryProps, OrderStatusPage, type OrderStatusPageProps, type OrderStatusState, OrderSummary, type OrderSummaryProps, OrganizationJsonLd, type OrganizationJsonLdProps, type PayOptions, type PayResult, PaymentSection, type PaymentSectionProps, PriceMoney, type PriceMoneyProps, PriceRangeFilter, type PriceRangeFilterProps, ProductCard, type ProductCardProps, ProductDetailPage, type ProductDetailPageProps, ProductGallery, type ProductGalleryProps, ProductJsonLd, type ProductJsonLdProps, ProfileEditor, ShippingPicker, type ShippingPickerProps, SortSelect, type SortSelectProps, StockBadge, type StockBadgeProps, type StorefrontTheme, type TFunction, type TVars, TagFilter, type TagFilterProps, ThemeProvider, type ThemeProviderProps, VariantPicker, type VariantPickerProps, type VerifyStatus, absoluteUrl, bundledMessages, cs, en, formatCents, formatMoney, serializeJsonLd, stripHtml, themeToCssVars, useAccount, useCart, useCheckout, useI18n, useMagicLinkVerify, useOrderStatus, useStorefront, useStorefrontOptional, useT };
1112
+ export { AccountDashboard, type AccountDashboardProps, AccountProvider, type AccountState, AddToCart, type AddToCartProps, AddressBook, AddressForm, type AddressFormProps, AvailabilityFilter, type AvailabilityFilterProps, BackInStockForm, type BackInStockFormProps, type BreadcrumbItem, BreadcrumbJsonLd, type BreadcrumbJsonLdProps, CartDrawer, type CartDrawerProps, CartLineItem, type CartLineItemProps, CartProvider, type CartState, CartSummary, type CartSummaryProps, CheckoutFlow, type CheckoutFlowProps, CheckoutProvider, type CheckoutState, CollectionPage, type CollectionPageProps, I18nProvider, type I18nProviderProps, type I18nValue, JsonLd, type JsonLdProps, LoginForm, type LoginFormProps, type MarketOption, MarketSwitcher, type MarketSwitcherProps, type MessageKey, type Messages, NeviosProvider, type NeviosProviderProps, OrderConfirmation, type OrderConfirmationProps, OrderHistory, type OrderHistoryProps, OrderLines, OrderStatusPage, type OrderStatusPageProps, type OrderStatusState, OrderSummary, type OrderSummaryProps, OrderTotals, OrganizationJsonLd, type OrganizationJsonLdProps, type PayOptions, type PayResult, PaymentMethodPicker, type PaymentMethodPickerProps, PaymentPage, type PaymentPageProps, type PaymentPageState, PaymentSection, type PaymentSectionProps, PhaseTimeline, PriceMoney, type PriceMoneyProps, PriceRangeFilter, type PriceRangeFilterProps, ProductCard, type ProductCardProps, ProductDetailPage, type ProductDetailPageProps, ProductGallery, type ProductGalleryProps, ProductJsonLd, type ProductJsonLdProps, ProfileEditor, ShippingPicker, type ShippingPickerProps, SortSelect, type SortSelectProps, StatusBanner, StockBadge, type StockBadgeProps, type StorefrontTheme, type TFunction, type TVars, TagFilter, type TagFilterProps, ThemeProvider, type ThemeProviderProps, TransferInstructions, type TransferInstructionsProps, VariantPicker, type VariantPickerProps, type VerifyStatus, absoluteUrl, bundledMessages, cs, en, formatCents, formatMoney, isTerminal, serializeJsonLd, stripHtml, themeToCssVars, useAccount, useCart, useCheckout, useI18n, useMagicLinkVerify, useOrderStatus, usePayment, useStorefront, useStorefrontOptional, useT };