@sonic-equipment/ui 126.0.0 → 128.0.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.
Files changed (175) hide show
  1. package/dist/address/address.d.ts +6 -1
  2. package/dist/address/address.js +2 -2
  3. package/dist/algolia/filter-section.js +1 -1
  4. package/dist/cards/orderline-card/connected-orderline-card.js +1 -1
  5. package/dist/cards/orderline-card/orderline-card.d.ts +3 -3
  6. package/dist/cards/orderline-card/orderline-card.js +3 -2
  7. package/dist/cards/orderline-card/orderline-card.module.css.js +1 -1
  8. package/dist/cards/product-card/product-card.js +1 -1
  9. package/dist/cart-totals/cart-totals.d.ts +1 -1
  10. package/dist/cart-totals/cart-totals.js +1 -1
  11. package/dist/checkout/adyen-payment.d.ts +3 -5
  12. package/dist/checkout/adyen-payment.js +22 -10
  13. package/dist/checkout/adyen-payment.module.css.js +3 -0
  14. package/dist/checkout/payment-details.d.ts +5 -2
  15. package/dist/checkout/payment-details.js +54 -4
  16. package/dist/checkout/payment.d.ts +8 -3
  17. package/dist/checkout/payment.js +168 -34
  18. package/dist/checkout/payment.module.css.js +3 -0
  19. package/dist/checkout/use-get-adyen-redirect-result.d.ts +1 -0
  20. package/dist/checkout/use-get-adyen-redirect-result.js +13 -0
  21. package/dist/checkout/use-has-returned-from-adyen.d.ts +1 -0
  22. package/dist/checkout/use-has-returned-from-adyen.js +8 -0
  23. package/dist/collapsables/accordion/accordion.d.ts +10 -2
  24. package/dist/collapsables/accordion/accordion.js +20 -1
  25. package/dist/collapsables/accordion/accordion.module.css.js +1 -1
  26. package/dist/exports.d.ts +38 -24
  27. package/dist/forms/checkbox/checkbox.d.ts +2 -1
  28. package/dist/forms/checkbox/checkbox.js +2 -2
  29. package/dist/forms/input/input.js +1 -3
  30. package/dist/forms/label/label.d.ts +1 -1
  31. package/dist/forms/select/select.d.ts +4 -2
  32. package/dist/forms/select/select.js +6 -3
  33. package/dist/forms/select/select.module.css.js +1 -1
  34. package/dist/global-search/search-input/connected-search-input.js +1 -1
  35. package/dist/index.js +41 -27
  36. package/dist/intl/missing-translation-provider.js +9 -2
  37. package/dist/intl/translation-id.d.ts +1 -1
  38. package/dist/loading/loading-overlay.js +1 -1
  39. package/dist/pages/{cart-page → checkout/cart-page}/cart-page.js +20 -20
  40. package/dist/pages/{layouts → checkout/layouts}/checkout-page-layout/checkout-page-layout.js +3 -3
  41. package/dist/pages/checkout/layouts/checkout-page-layout/checkout-page-layout.module.css.js +3 -0
  42. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-content.d.ts +7 -0
  43. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-content.js +9 -0
  44. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-header.d.ts +8 -0
  45. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-header.js +9 -0
  46. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-link.d.ts +4 -0
  47. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section-link.js +8 -0
  48. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section.d.ts +7 -0
  49. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section.js +10 -0
  50. package/dist/pages/checkout/layouts/checkout-page-layout/components/checkout-page-section.module.css.js +3 -0
  51. package/dist/pages/checkout/payment-page/payment-page.d.ts +1 -0
  52. package/dist/pages/checkout/payment-page/payment-page.js +89 -0
  53. package/dist/pages/{shipping-page → checkout/shipping-page}/components/edit-address.d.ts +1 -1
  54. package/dist/pages/{shipping-page → checkout/shipping-page}/components/edit-address.js +13 -13
  55. package/dist/pages/checkout/shipping-page/components/edit-address.module.css.js +3 -0
  56. package/dist/pages/{shipping-page → checkout/shipping-page}/components/readonly-address.d.ts +1 -1
  57. package/dist/pages/checkout/shipping-page/components/readonly-address.js +27 -0
  58. package/dist/pages/checkout/shipping-page/components/readonly-address.module.css.js +3 -0
  59. package/dist/pages/checkout/shipping-page/shipping-page.js +114 -0
  60. package/dist/pages/{page → components/page}/page.d.ts +1 -1
  61. package/dist/pages/{page → components/page}/page.js +3 -5
  62. package/dist/pages/components/page/page.module.css.js +3 -0
  63. package/dist/pages/components/page-container/page-container.module.css.js +3 -0
  64. package/dist/pages/components/page-meta-data/page-meta-data.d.ts +16 -0
  65. package/dist/pages/components/page-meta-data/page-meta-data.js +95 -0
  66. package/dist/pages/error-page/error-page.js +1 -1
  67. package/dist/pages/product/layouts/product-details-page-layout/product-details-page-layout.module.css.js +3 -0
  68. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-images/product-detail-images.d.ts +1 -1
  69. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-images/product-detail-images.js +6 -6
  70. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-images/product-detail-images.module.css.js +1 -1
  71. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-panel/product-details-panel.js +11 -11
  72. package/dist/pages/product/product-details-page/components/product-details-panel/product-details-panel.module.css.js +3 -0
  73. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-recently-viewed/product-details-recently-viewed.d.ts +1 -1
  74. package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-recently-viewed/product-details-recently-viewed.js +4 -4
  75. package/dist/pages/product/product-details-page/product-details-page.js +30 -0
  76. package/dist/pages/{product-details-page → product/product-details-page}/product-details.d.ts +1 -1
  77. package/dist/pages/{product-details-page → product/product-details-page}/product-details.js +7 -7
  78. package/dist/pages/{product-listing-page → product/product-listing-page}/no-results/no-results.js +4 -4
  79. package/dist/pages/product/product-listing-page/no-results/no-results.module.css.js +3 -0
  80. package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-category-carousel/product-listing-page-category-carousel.js +3 -3
  81. package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-data-types.d.ts +3 -1
  82. package/dist/pages/product/product-listing-page/product-listing-page.js +37 -0
  83. package/dist/pages/product/product-listing-page/product-listing-page.module.css.js +3 -0
  84. package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-product-overview/product-listing-product-overview.js +6 -6
  85. package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing.js +16 -16
  86. package/dist/pages/{search-result-page → product/search-result-page}/search-result-product-overview/search-result-product-overview.js +6 -6
  87. package/dist/pages/{search-result-page → product/search-result-page}/search-results-page-category-carousel/search-results-page-category-carousel.js +3 -3
  88. package/dist/pages/{search-result-page → product/search-result-page}/search-results-page.js +22 -17
  89. package/dist/pages/product/search-result-page/search-results-page.module.css.js +3 -0
  90. package/dist/shared/api/bff/model/bff.model.d.ts +14 -0
  91. package/dist/shared/api/bff/services/bff-service.d.ts +1 -1
  92. package/dist/shared/api/bff/services/bff-service.js +1 -0
  93. package/dist/shared/api/shared/hooks/use-awaitable-mutation.d.ts +20 -4
  94. package/dist/shared/api/shared/hooks/use-awaitable-mutation.js +29 -21
  95. package/dist/shared/api/storefront/hooks/authentication/use-patch-session.d.ts +7 -4
  96. package/dist/shared/api/storefront/hooks/authentication/use-patch-session.js +4 -3
  97. package/dist/shared/api/storefront/hooks/cart/use-fetch-current-cart-with-atp.d.ts +2 -1
  98. package/dist/shared/api/storefront/hooks/cart/use-fetch-current-cart-with-atp.js +4 -2
  99. package/dist/shared/api/storefront/hooks/cart/use-fetch-current-cart.d.ts +3 -1
  100. package/dist/shared/api/storefront/hooks/cart/use-fetch-current-cart.js +3 -2
  101. package/dist/shared/api/storefront/hooks/cart/use-patch-cart.d.ts +9 -8
  102. package/dist/shared/api/storefront/hooks/cart/use-patch-cart.js +6 -4
  103. package/dist/shared/api/storefront/hooks/cart/use-place-order.d.ts +10 -4
  104. package/dist/shared/api/storefront/hooks/cart/use-place-order.js +11 -6
  105. package/dist/shared/api/storefront/hooks/customer/use-fetch-fulfillment-methods-by-customer-id.d.ts +4 -0
  106. package/dist/shared/api/storefront/hooks/customer/use-fetch-fulfillment-methods-by-customer-id.js +12 -0
  107. package/dist/shared/api/storefront/hooks/customer/use-fetch-fulfillment-methods-for-current-cart.d.ts +3 -0
  108. package/dist/shared/api/storefront/hooks/customer/use-fetch-fulfillment-methods-for-current-cart.js +12 -0
  109. package/dist/shared/api/storefront/hooks/customer/use-patch-bill-to-address.d.ts +5 -2
  110. package/dist/shared/api/storefront/hooks/customer/use-patch-bill-to-address.js +1 -1
  111. package/dist/shared/api/storefront/hooks/payment/use-invalidate-adyen.d.ts +1 -1
  112. package/dist/shared/api/storefront/hooks/payment/use-invalidate-adyen.js +1 -1
  113. package/dist/shared/api/storefront/model/storefront.model.d.ts +3 -1
  114. package/dist/shared/api/storefront/services/cart-service.d.ts +7 -3
  115. package/dist/shared/api/storefront/services/cart-service.js +11 -8
  116. package/dist/shared/api/storefront/services/customer-service.d.ts +3 -0
  117. package/dist/shared/api/storefront/services/customer-service.js +9 -1
  118. package/dist/shared/api/storefront/services/finance-service.d.ts +13 -0
  119. package/dist/shared/api/storefront/services/finance-service.js +17 -0
  120. package/dist/shared/api/storefront/services/translation-service.js +1 -1
  121. package/dist/shared/hooks/use-css-link.d.ts +3 -0
  122. package/dist/shared/hooks/use-css-link.js +20 -0
  123. package/dist/shared/hooks/use-script.d.ts +15 -0
  124. package/dist/shared/hooks/use-script.js +33 -0
  125. package/dist/shared/providers/react-query-container.js +4 -2
  126. package/dist/shared/routing/route-provider.d.ts +12 -4
  127. package/dist/shared/routing/route-provider.js +14 -10
  128. package/dist/shared/routing/with-routing.js +6 -6
  129. package/dist/shared/utils/string.d.ts +1 -0
  130. package/dist/shared/utils/string.js +6 -1
  131. package/dist/shared/utils/string.test.d.ts +1 -0
  132. package/dist/shared/utils/types.d.ts +3 -0
  133. package/dist/shared/utils/types.js +8 -0
  134. package/dist/styles.css +690 -331
  135. package/dist/tooltip/tooltip.d.ts +2 -2
  136. package/dist/typography/heading/heading.d.ts +4 -2
  137. package/dist/typography/heading/heading.js +3 -2
  138. package/dist/typography/heading/heading.module.css.js +1 -1
  139. package/package.json +1 -1
  140. package/dist/pages/layouts/checkout-page-layout/checkout-page-layout.module.css.js +0 -3
  141. package/dist/pages/layouts/product-details-page-layout/product-details-page-layout.module.css.js +0 -3
  142. package/dist/pages/page/page.module.css.js +0 -3
  143. package/dist/pages/page-container/page-container.module.css.js +0 -3
  144. package/dist/pages/product-details-page/components/product-details-panel/product-details-panel.module.css.js +0 -3
  145. package/dist/pages/product-details-page/product-details-page.js +0 -22
  146. package/dist/pages/product-listing-page/no-results/no-results.module.css.js +0 -3
  147. package/dist/pages/product-listing-page/product-listing-page.js +0 -29
  148. package/dist/pages/product-listing-page/product-listing-page.module.css.js +0 -3
  149. package/dist/pages/search-result-page/search-results-page.module.css.js +0 -3
  150. package/dist/pages/shipping-page/components/edit-address.module.css.js +0 -3
  151. package/dist/pages/shipping-page/components/readonly-address.js +0 -25
  152. package/dist/pages/shipping-page/components/readonly-address.module.css.js +0 -3
  153. package/dist/pages/shipping-page/shipping-page.js +0 -75
  154. package/dist/pages/shipping-page/shipping-page.module.css.js +0 -3
  155. /package/dist/pages/{cart-page → checkout/cart-page}/cart-page.d.ts +0 -0
  156. /package/dist/pages/{layouts → checkout/layouts}/checkout-page-layout/checkout-page-layout.d.ts +0 -0
  157. /package/dist/pages/{shipping-page → checkout/shipping-page}/shipping-page.d.ts +0 -0
  158. /package/dist/pages/{page-container → components/page-container}/page-container.d.ts +0 -0
  159. /package/dist/pages/{page-container → components/page-container}/page-container.js +0 -0
  160. /package/dist/pages/{layouts → product/layouts}/product-details-page-layout/product-details-page-layout.d.ts +0 -0
  161. /package/dist/pages/{layouts → product/layouts}/product-details-page-layout/product-details-page-layout.js +0 -0
  162. /package/dist/pages/{product-details-page → product/product-details-page}/components/product-details-panel/product-details-panel.d.ts +0 -0
  163. /package/dist/pages/{product-details-page → product/product-details-page}/product-details-page.d.ts +0 -0
  164. /package/dist/pages/{product-listing-page → product/product-listing-page}/no-results/no-results.d.ts +0 -0
  165. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-category-carousel/product-listing-page-category-carousel.d.ts +0 -0
  166. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-provider/product-listing-page-context.d.ts +0 -0
  167. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-provider/product-listing-page-context.js +0 -0
  168. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-provider/product-listing-page-provider.d.ts +0 -0
  169. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page-provider/product-listing-page-provider.js +0 -0
  170. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-page.d.ts +0 -0
  171. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing-product-overview/product-listing-product-overview.d.ts +0 -0
  172. /package/dist/pages/{product-listing-page → product/product-listing-page}/product-listing.d.ts +0 -0
  173. /package/dist/pages/{search-result-page → product/search-result-page}/search-result-product-overview/search-result-product-overview.d.ts +0 -0
  174. /package/dist/pages/{search-result-page → product/search-result-page}/search-results-page-category-carousel/search-results-page-category-carousel.d.ts +0 -0
  175. /package/dist/pages/{search-result-page → product/search-result-page}/search-results-page.d.ts +0 -0
@@ -1,9 +1,14 @@
1
1
  export interface AddressProps {
2
+ address1?: string;
3
+ address2?: string;
4
+ address3?: string;
2
5
  city?: string;
3
6
  companyName?: string;
4
7
  country?: string;
5
8
  email?: string;
9
+ firstName?: string;
10
+ lastName?: string;
6
11
  phone?: string;
7
12
  postalCode?: string;
8
13
  }
9
- export declare function Address({ city, companyName, country, email, phone, postalCode, }: AddressProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Address({ address1, address2, address3, city, companyName, country, email, firstName, lastName, phone, postalCode, }: AddressProps): import("react/jsx-runtime").JSX.Element;
@@ -2,8 +2,8 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { capitalizeFirstLetter } from '../shared/utils/string.js';
3
3
  import styles from './address.module.css.js';
4
4
 
5
- function Address({ city, companyName, country, email, phone, postalCode, }) {
6
- return (jsxs("address", { className: styles.address, children: [companyName && jsx("p", { children: companyName }), (postalCode || city) && (jsxs("p", { children: [postalCode, " ", city ? capitalizeFirstLetter(city) : ''] })), country && jsx("p", { children: country }), phone && jsx("p", { children: phone }), email && jsx("p", { children: email })] }));
5
+ function Address({ address1, address2, address3, city, companyName, country, email, firstName, lastName, phone, postalCode, }) {
6
+ return (jsxs("address", { className: styles.address, children: [(firstName || lastName) && jsx("p", { children: `${firstName} ${lastName}` }), companyName && jsx("p", { children: companyName }), address1 && jsx("p", { children: address1 }), address2 && jsx("p", { children: address2 }), address3 && jsx("p", { children: address3 }), (postalCode || city) && (jsxs("p", { children: [postalCode, " ", city ? capitalizeFirstLetter(city) : ''] })), country && jsx("p", { children: country }), phone && jsx("p", { children: phone }), email && jsx("p", { children: email })] }));
7
7
  }
8
8
 
9
9
  export { Address };
@@ -21,7 +21,7 @@ function FilterSection({ ...props }) {
21
21
  /* eslint-enable @typescript-eslint/no-unnecessary-condition */
22
22
  }
23
23
  function CollapsibleFilterSection({ children, gap = 'md', initialIsOpen = true, title, variant, }) {
24
- return (jsx("section", { className: clsx(filterSectionStyles['filter-section'], filterSectionStyles[variant], filterSectionStyles[gap]), children: jsx(Accordion, { borderType: "middle", children: jsx(AccordionItem, { id: title, initialIsOpen: initialIsOpen, title: jsx("span", { className: filterSectionStyles['accordion-title'], children: jsx(FormattedMessage, { optional: true, fallbackValue: title, id: `facet.${title.toLowerCase()}` }) }), children: jsx("div", { className: filterSectionStyles.content, children: children }) }) }) }));
24
+ return (jsx("section", { className: clsx(filterSectionStyles['filter-section'], filterSectionStyles[variant], filterSectionStyles[gap]), children: jsx(Accordion, { borderType: "middle", children: jsx(AccordionItem, { id: title, initialIsOpen: initialIsOpen, title: jsx("span", { className: filterSectionStyles['accordion-title'], children: jsx(FormattedMessage, { fallbackValue: title, id: `facet.${title.toLowerCase()}` }) }), children: jsx("div", { className: filterSectionStyles.content, children: children }) }) }) }));
25
25
  }
26
26
  function WithActionFilterSection({ button, children, gap = 'md', title, variant, }) {
27
27
  return (jsxs("section", { className: clsx(filterSectionStyles['filter-section'], filterSectionStyles[variant], filterSectionStyles[gap]), children: [jsxs("div", { className: filterSectionStyles.header, children: [jsx("h3", { className: filterSectionStyles.title, children: title }), jsx("div", { children: button })] }), jsx("div", { className: filterSectionStyles.content, children: children })] }));
@@ -5,7 +5,7 @@ import { ConnectedRemoveButton } from './connected-remove-button.js';
5
5
  import { OrderLineCard } from './orderline-card.js';
6
6
 
7
7
  function ConnectedOrderLineCard({ onRemove, orderLineId, productId, ...props }) {
8
- return (jsx(OrderLineCard, { productId: productId, ...props, addToCartButton: jsx(ConnectedAddToCartButton, { productId: productId }), readonly: false, removeButton: jsx(ConnectedRemoveButton, { id: orderLineId, onRemove: orderLineId => {
8
+ return (jsx(OrderLineCard, { productId: productId, ...props, addToCartButton: jsx(ConnectedAddToCartButton, { productId: productId }), isReadonly: false, removeButton: jsx(ConnectedRemoveButton, { id: orderLineId, onRemove: orderLineId => {
9
9
  onRemove?.(orderLineId);
10
10
  } }) }));
11
11
  }
@@ -5,21 +5,21 @@ export interface BaseOrderLineCardProps {
5
5
  deliveryDate?: Date;
6
6
  href: string;
7
7
  image: ImageSourceType;
8
+ isReadonly: boolean;
8
9
  price: ProductTotalPriceType;
9
10
  productId: string;
10
- readonly: boolean;
11
11
  sku: string;
12
12
  tags?: string[];
13
13
  title: string;
14
14
  }
15
15
  export interface InteractiveOrderLineCardProps extends BaseOrderLineCardProps {
16
16
  addToCartButton: ReactElement;
17
- readonly: false;
17
+ isReadonly: false;
18
18
  removeButton: ReactElement;
19
19
  }
20
20
  export interface ReadonlyOrderLineCardProps extends BaseOrderLineCardProps {
21
+ isReadonly: true;
21
22
  quantity: number;
22
- readonly: true;
23
23
  }
24
24
  export type OrderLineCardProps = InteractiveOrderLineCardProps | ReadonlyOrderLineCardProps;
25
25
  export declare function OrderLineCard(props: OrderLineCardProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import clsx from 'clsx';
2
3
  import { Tag } from '../../badges/tag/tag.js';
3
4
  import { DeliveryTime } from '../../delivery-time/delivery-time.js';
4
5
  import { ProductTotalPrice } from '../../display/product-price/product-total-price.js';
@@ -10,8 +11,8 @@ import { Heading } from '../../typography/heading/heading.js';
10
11
  import styles from './orderline-card.module.css.js';
11
12
 
12
13
  function OrderLineCard(props) {
13
- const { deliveryDate, href, image, price, productId, readonly, sku, tags, title, } = props;
14
- return (jsxs(RouteLink, { className: styles['orderline-card'], href: href, id: productId, children: [jsx("div", { className: styles['image-container'], children: jsx(Image, { ...image }) }), jsxs("div", { className: styles.body, children: [jsxs("div", { className: styles['title-container'], children: [tags && (jsx("div", { className: styles.tag, children: tags.map(tag => (jsx(Tag, { children: jsx(FormattedMessage, { optional: true, fallbackValue: tag, id: `tag.${tag.toLowerCase()}` }) }, tag))) })), jsx(Heading, { className: styles.title, size: "xxxs", tag: "h3", children: title }), jsx("div", { className: styles.sku, children: jsx(ProductSku, { sku: sku }) })] }), readonly ? (jsx("p", { className: styles.amount, children: jsx(FormattedMessage, { id: "Amount: {0}", replacementValues: { '0': props.quantity.toString() } }) })) : (jsx("div", { className: styles['add-to-cart-button'], children: props.addToCartButton })), jsx(ProductTotalPrice, { className: styles.price, originalTotalPrice: price.originalTotalPrice, pricePerUnit: price.pricePerUnit, totalPrice: price.totalPrice }), deliveryDate && (jsx(DeliveryTime, { className: styles.delivery, deliveryDate: deliveryDate })), !readonly && jsx("div", { className: styles.remove, children: props.removeButton })] })] }));
14
+ const { deliveryDate, href, image, isReadonly, price, productId, sku, tags, title, } = props;
15
+ return (jsxs(RouteLink, { className: clsx(styles['orderline-card'], isReadonly && styles.readonly), href: href, id: productId, isDisabled: isReadonly, children: [jsx("div", { className: styles['image-container'], children: jsx(Image, { ...image }) }), jsxs("div", { className: styles.body, children: [jsxs("div", { className: styles['title-container'], children: [tags && (jsx("div", { className: styles.tag, children: tags.map(tag => (jsx(Tag, { children: jsx(FormattedMessage, { fallbackValue: tag, id: `tag.${tag.toLowerCase()}` }) }, tag))) })), jsx(Heading, { className: styles.title, size: "xxxs", tag: "h3", children: title }), jsx("div", { className: styles.sku, children: jsx(ProductSku, { sku: sku }) })] }), isReadonly ? (jsx("p", { className: styles.amount, children: jsx(FormattedMessage, { id: "Amount: {0}", replacementValues: { '0': props.quantity.toString() } }) })) : (jsx("div", { className: styles['add-to-cart-button'], children: props.addToCartButton })), jsx(ProductTotalPrice, { className: styles.price, originalTotalPrice: price.originalTotalPrice, pricePerUnit: price.pricePerUnit, totalPrice: price.totalPrice }), deliveryDate && (jsx(DeliveryTime, { className: styles.delivery, deliveryDate: deliveryDate })), !isReadonly && (jsx("div", { className: styles.remove, children: props.removeButton }))] })] }));
15
16
  }
16
17
 
17
18
  export { OrderLineCard };
@@ -1,3 +1,3 @@
1
- var styles = {"orderline-card":"orderline-card-module-AMTMm","image-container":"orderline-card-module-TlhUg","body":"orderline-card-module-L0kX1","title-container":"orderline-card-module-D-6JE","tag":"orderline-card-module-uiHOY","title":"orderline-card-module-C8xE6","amount":"orderline-card-module-s-u3O","add-to-cart-button":"orderline-card-module-ZjAaX","price":"orderline-card-module-q3yjo","delivery":"orderline-card-module-N-Oe-","remove":"orderline-card-module-0CunP"};
1
+ var styles = {"orderline-card":"orderline-card-module-AMTMm","readonly":"orderline-card-module-NU77X","image-container":"orderline-card-module-TlhUg","body":"orderline-card-module-L0kX1","title-container":"orderline-card-module-D-6JE","tag":"orderline-card-module-uiHOY","title":"orderline-card-module-C8xE6","amount":"orderline-card-module-s-u3O","add-to-cart-button":"orderline-card-module-ZjAaX","price":"orderline-card-module-q3yjo","delivery":"orderline-card-module-N-Oe-","remove":"orderline-card-module-0CunP"};
2
2
 
3
3
  export { styles as default };
@@ -9,7 +9,7 @@ import { RouteLink } from '../../shared/routing/route-link.js';
9
9
  import styles from './product-card.module.css.js';
10
10
 
11
11
  function ProductCard({ addToCartButton: AddToCartButton, favoriteButton: FavoriteButton, href, id, image, onClick, price, sku, tags, title, }) {
12
- return (jsx("div", { className: styles['product-card-container'], children: jsxs(RouteLink, { className: styles['product-card'], "data-product-id": sku, href: href, id: id, onClick: onClick, children: [jsx("div", { className: styles.image, children: jsx(Image, { ...image }) }), jsx("div", { className: styles['favorite-button'], children: FavoriteButton && FavoriteButton }), jsxs("div", { className: styles.content, children: [jsxs("div", { className: styles.top, children: [jsx("div", { className: styles.tag, children: tags?.map(tag => (jsx(Tag, { children: jsx(FormattedMessage, { optional: true, fallbackValue: tag, id: `tag.${tag.toLowerCase()}` }) }, tag))) }), jsx("h2", { className: styles.title, children: title }), jsx(ProductSku, { sku: sku })] }), jsxs("div", { className: styles.bottom, children: [jsx("div", { className: styles.price, children: jsx(ProductPrice, { isVatIncluded: price.isVatIncluded, originalPrice: price.originalPrice, price: price.price }) }), jsx("div", { className: styles['add-to-cart-button'], children: AddToCartButton })] })] })] }) }));
12
+ return (jsx("div", { className: styles['product-card-container'], children: jsxs(RouteLink, { className: styles['product-card'], "data-product-id": sku, href: href, id: id, onClick: onClick, children: [jsx("div", { className: styles.image, children: jsx(Image, { ...image }) }), jsx("div", { className: styles['favorite-button'], children: FavoriteButton && FavoriteButton }), jsxs("div", { className: styles.content, children: [jsxs("div", { className: styles.top, children: [jsx("div", { className: styles.tag, children: tags?.map(tag => (jsx(Tag, { children: jsx(FormattedMessage, { fallbackValue: tag, id: `tag.${tag.toLowerCase()}` }) }, tag))) }), jsx("h2", { className: styles.title, children: title }), jsx(ProductSku, { sku: sku })] }), jsxs("div", { className: styles.bottom, children: [jsx("div", { className: styles.price, children: jsx(ProductPrice, { isVatIncluded: price.isVatIncluded, originalPrice: price.originalPrice, price: price.price }) }), jsx("div", { className: styles['add-to-cart-button'], children: AddToCartButton })] })] })] }) }));
13
13
  }
14
14
 
15
15
  export { ProductCard };
@@ -5,6 +5,6 @@ export interface CartTotalsProps {
5
5
  subtotal: string;
6
6
  tax: string;
7
7
  total: string;
8
- vatPercentage: number;
8
+ vatPercentage: number | undefined;
9
9
  }
10
10
  export declare function CartTotals({ fulfillmentMethod, orderNumber, shippingCost, subtotal, tax, total, vatPercentage, }: CartTotalsProps): import("react/jsx-runtime").JSX.Element;
@@ -4,7 +4,7 @@ import { Heading } from '../typography/heading/heading.js';
4
4
  import styles from './cart-totals.module.css.js';
5
5
 
6
6
  function CartTotals({ fulfillmentMethod, orderNumber, shippingCost, subtotal, tax, total, vatPercentage, }) {
7
- return (jsxs("div", { className: styles['cart-totals'], children: [orderNumber && (jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Order number" }) }), jsx("div", { children: jsx("div", { className: styles.line, children: jsx("p", { className: styles.label, "data-test-selector": "orderConfirmation_orderNumber", children: orderNumber }) }) })] })), fulfillmentMethod && (jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Fulfillment method" }) }), jsx("div", { children: jsx("div", { className: styles.line, children: jsx("p", { className: styles.label, children: fulfillmentMethod }) }) })] })), jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Cost overview" }) }), jsxs("div", { children: [jsxs("div", { className: styles.line, children: [jsxs("p", { className: styles.label, children: [jsx(FormattedMessage, { id: "Subtotal" }), ' ', jsx(FormattedMessage, { id: "Excl. VAT" })] }), jsx("p", { className: styles.value, "data-test-selector": "cartTotal_subTotal", children: subtotal })] }), jsxs("div", { className: styles.line, children: [jsx("p", { className: styles.label, children: jsx(FormattedMessage, { id: "Shipping and handling" }) }), jsx("p", { className: styles.value, children: shippingCost })] }), jsxs("div", { className: styles.line, children: [jsxs("p", { className: styles.label, children: [jsx(FormattedMessage, { id: "VAT" }), " ", `${vatPercentage}%`] }), jsx("p", { className: styles.value, children: tax })] })] })] }), jsx("section", { className: styles.totals, children: jsxs("div", { className: styles.line, children: [jsx("p", { className: styles.label, children: jsx(FormattedMessage, { id: "Total" }) }), jsx("p", { className: styles.value, "data-test-selector": "cartTotal_orderGrandTotalDisplay", children: total })] }) })] }));
7
+ return (jsxs("div", { className: styles['cart-totals'], children: [orderNumber && (jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Order number" }) }), jsx("div", { children: jsx("div", { className: styles.line, children: jsx("p", { className: styles.label, "data-test-selector": "orderConfirmation_orderNumber", children: orderNumber }) }) })] })), fulfillmentMethod && (jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Fulfillment method" }) }), jsx("div", { children: jsx("div", { className: styles.line, children: jsx("p", { className: styles.label, "data-test-selector": "fulfullmentMethod", children: fulfillmentMethod }) }) })] })), jsxs("section", { className: styles.section, children: [jsx(Heading, { className: styles['section-header'], size: "xxxs", tag: "h3", children: jsx(FormattedMessage, { id: "Cost overview" }) }), jsxs("div", { children: [jsxs("div", { className: styles.line, children: [jsxs("p", { className: styles.label, children: [jsx(FormattedMessage, { id: "Subtotal" }), ' ', jsx(FormattedMessage, { id: "Excl. VAT" })] }), jsx("p", { className: styles.value, "data-test-selector": "cartTotal_subTotal", children: subtotal })] }), jsxs("div", { className: styles.line, children: [jsx("p", { className: styles.label, children: jsx(FormattedMessage, { id: "Shipping and handling" }) }), jsx("p", { className: styles.value, "data-test-selector": "shippingCost", children: shippingCost })] }), jsxs("div", { className: styles.line, children: [jsxs("p", { className: styles.label, children: [jsx(FormattedMessage, { id: "VAT" }), ' ', vatPercentage ? `${vatPercentage}%` : ''] }), jsx("p", { className: styles.value, "data-test-selector": "vatAmount", children: tax })] })] })] }), jsx("section", { className: styles.totals, children: jsxs("div", { className: styles.line, children: [jsx("p", { className: styles.label, children: jsx(FormattedMessage, { id: "Total" }) }), jsx("p", { className: styles.value, "data-test-selector": "cartTotal_orderGrandTotalDisplay", children: total })] }) })] }));
8
8
  }
9
9
 
10
10
  export { CartTotals };
@@ -4,18 +4,16 @@ import { AdyenPaymentModel } from 'shared/api/storefront/model/storefront.model'
4
4
  import '@adyen/adyen-web/dist/adyen.css';
5
5
  interface AdyenPaymentProps {
6
6
  amount: number;
7
- billToId: string;
8
7
  cartId: string;
9
8
  countryCode: string;
10
9
  currencyCode: string;
10
+ customerId: string;
11
11
  dropinRef: MutableRefObject<Dropin | null>;
12
12
  environment: 'test' | 'live' | 'live-us' | 'live-au' | 'live-apse' | 'live-in';
13
- locale: string;
14
13
  onComplete: (result: AdyenPaymentModel) => Promise<void>;
15
- onError: (error: unknown, result: AdyenPaymentModel) => void;
14
+ onError: (error: unknown, result: AdyenPaymentModel | null) => void;
16
15
  orderAmount: number;
17
- redirectResult: string | undefined;
18
16
  returnUrl: string;
19
17
  }
20
- export declare function AdyenPayment({ amount, billToId, cartId, countryCode, currencyCode, dropinRef, environment, locale, onComplete, onError, orderAmount, redirectResult, returnUrl, }: AdyenPaymentProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function AdyenPayment({ amount, cartId, countryCode, currencyCode, customerId, dropinRef, environment, onComplete, onError, orderAmount, returnUrl, }: AdyenPaymentProps): import("react/jsx-runtime").JSX.Element;
21
19
  export {};
@@ -1,13 +1,20 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useRef, useEffect } from 'react';
3
3
  import AdyenCheckout from '@adyen/adyen-web';
4
+ import clsx from 'clsx';
4
5
  import qs from 'query-string';
6
+ import { useCultureCode } from '../intl/use-culture-code.js';
5
7
  import { useCreateAdyenSession } from '../shared/api/storefront/hooks/payment/use-create-adyen-session.js';
6
8
  import { useFetchAdyenConfig } from '../shared/api/storefront/hooks/payment/use-fetch-adyen-config.js';
7
9
  import { getAdyenPaymentDetails, postAdyenPayment } from '../shared/api/storefront/services/cart-service.js';
8
10
  import { parseAmount } from './parse-amount.js';
11
+ import styles from './adyen-payment.module.css.js';
9
12
 
10
- function AdyenPayment({ amount, billToId, cartId, countryCode, currencyCode, dropinRef, environment, locale, onComplete, onError, orderAmount, redirectResult, returnUrl, }) {
13
+ function AdyenPayment({ amount, cartId, countryCode, currencyCode, customerId, dropinRef, environment, onComplete, onError, orderAmount, returnUrl, }) {
14
+ const cultureCode = useCultureCode();
15
+ // Get and remove Adyen query string params and keep them in a ref
16
+ const queryStringParams = useRef(getAndRemoveAdyenQueryParams());
17
+ const { amount: adyenAmount, customerId: adyenCustomerId, redirectResult, } = queryStringParams.current;
11
18
  const dropinDivRef = useRef(null);
12
19
  const { data: adyenSettings } = useFetchAdyenConfig();
13
20
  const { data: adyenSession, error, mutate: createAdyenSession, } = useCreateAdyenSession();
@@ -29,22 +36,23 @@ function AdyenPayment({ amount, billToId, cartId, countryCode, currencyCode, dro
29
36
  clientKey: adyenSettings.clientKey,
30
37
  countryCode,
31
38
  environment,
32
- locale,
39
+ locale: cultureCode,
33
40
  onAdditionalDetails: (async (state, _component) => {
41
+ dropinDivRef.current?.classList.add(styles.loading);
34
42
  if (!state.details.redirectResult) {
35
- throw new Error('No redirectResult');
43
+ return onError(new Error('No redirectResult'), null);
36
44
  }
37
45
  const result = await getAdyenPaymentDetails({
38
46
  redirectResult: state.details.redirectResult,
39
47
  });
40
- const { amount: adyenAmount, customerId: adyenCustomerId } = getAndRemoveAdyenQueryParams();
41
48
  if (amount.toFixed(2).replaceAll(/[,.]/gi, '') !== adyenAmount)
42
49
  return onError(new Error('Invalid amount'), result);
43
- if (billToId !== adyenCustomerId)
50
+ if (customerId !== adyenCustomerId)
44
51
  return onError(new Error('Invalid customer'), result);
45
52
  return handlePaymentResponse(result, onComplete, onError);
46
53
  }),
47
54
  onSubmit: (async (state, _component) => {
55
+ dropinDivRef.current?.classList.add(styles.loading);
48
56
  if (state.data.paymentMethod.type === 'paybybank') {
49
57
  state.data.countryCode = countryCode;
50
58
  }
@@ -59,7 +67,7 @@ function AdyenPayment({ amount, billToId, cartId, countryCode, currencyCode, dro
59
67
  if (result.action.type === 'redirect') {
60
68
  return handleRedirectPaymentAction(result);
61
69
  }
62
- throw new Error('Invalid payment response');
70
+ return onError(new Error('Invalid payment response'), result);
63
71
  }
64
72
  return handlePaymentResponse(result, onComplete, onError);
65
73
  }),
@@ -76,29 +84,33 @@ function AdyenPayment({ amount, billToId, cartId, countryCode, currencyCode, dro
76
84
  const dropIn = checkout.create('dropin');
77
85
  if (redirectResult)
78
86
  checkout.submitDetails({ details: { redirectResult } });
87
+ // Remove Adyen query strings params from ref
88
+ queryStringParams.current = {};
79
89
  if (dropinRef.current)
80
90
  dropinRef.current.unmount();
81
91
  dropinRef.current = dropIn.mount(dropinDivRef.current);
82
92
  })();
83
93
  }, [
84
- billToId,
94
+ customerId,
85
95
  adyenSettings,
86
96
  adyenSession,
87
97
  amount,
88
98
  countryCode,
89
99
  currencyCode,
90
100
  environment,
91
- locale,
101
+ cultureCode,
92
102
  orderAmount,
93
103
  redirectResult,
94
104
  returnUrl,
95
105
  dropinRef,
96
106
  onComplete,
97
107
  onError,
108
+ adyenAmount,
109
+ adyenCustomerId,
98
110
  ]);
99
111
  if (error)
100
112
  return jsx("div", { children: String(error) });
101
- return jsx("div", { ref: dropinDivRef, id: "dropin" });
113
+ return (jsx("div", { ref: dropinDivRef, className: clsx(Boolean(redirectResult) && styles.loading), id: "dropin" }));
102
114
  }
103
115
  function getAndRemoveAdyenQueryParams() {
104
116
  if (typeof window === 'undefined')
@@ -115,7 +127,7 @@ async function handlePaymentResponse(result, onSubmit, onError) {
115
127
  try {
116
128
  if (result.action) {
117
129
  if (result.action.type === 'redirect') {
118
- handleRedirectPaymentAction(result);
130
+ return handleRedirectPaymentAction(result);
119
131
  }
120
132
  else {
121
133
  throw new Error('Adyen_Error');
@@ -0,0 +1,3 @@
1
+ var styles = {"loading":"adyen-payment-module-liZWP"};
2
+
3
+ export { styles as default };
@@ -1,5 +1,8 @@
1
- import { CartModel } from '../shared/api/storefront/model/storefront.model';
2
- export declare function PaymentDetails({ cart, onCartChanged, }: {
1
+ import { CartModel, CheckoutAtpEntry } from '../shared/api/storefront/model/storefront.model';
2
+ export declare function PaymentDetails({ atp, cart, fulfillmentMethods, isDisabled, onCartChanged, }: {
3
+ atp: CheckoutAtpEntry[];
3
4
  cart: CartModel;
5
+ fulfillmentMethods: string[];
6
+ isDisabled: boolean;
4
7
  onCartChanged: (cart: CartModel) => void;
5
8
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,21 +1,71 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useState, useEffect } from 'react';
3
+ import { Checkbox } from '../forms/checkbox/checkbox.js';
4
+ import { Select } from '../forms/select/select.js';
3
5
  import { TextField } from '../forms/text-field/text-field.js';
6
+ import { FormattedMessage } from '../intl/formatted-message.js';
4
7
  import { useFormattedMessage } from '../intl/use-formatted-message.js';
5
8
  import { useDebouncedCallback } from '../shared/hooks/use-debounced-callback.js';
9
+ import { Tooltip } from '../tooltip/tooltip.js';
10
+ import styles from './payment.module.css.js';
6
11
 
7
- function PaymentDetails({ cart, onCartChanged, }) {
12
+ function PaymentDetails({ atp, cart, fulfillmentMethods, isDisabled, onCartChanged, }) {
8
13
  const [vatNumber, setVatNumber] = useState(cart.customerVatNumber);
9
14
  const [poNumber, setPONumber] = useState(cart.poNumber);
15
+ const [industry, setIndustry] = useState(cart.properties.industry);
16
+ const [deliveryDate, setDeliveryDate] = useState(cart.requestedDeliveryDate);
17
+ const [asSoonAsPossible, setAsSoonAsPossible] = useState(false);
18
+ const [fulfillmentMethod, setFulfillmentMethod] = useState();
19
+ const [paymentMethod, setPaymentMethod] = useState(cart.paymentOptions?.paymentMethods?.[0]?.name || 'ADY');
10
20
  const t = useFormattedMessage();
11
21
  const onCartChangedDebounced = useDebouncedCallback(onCartChanged, 500);
12
22
  useEffect(() => {
13
23
  if (!vatNumber || !poNumber)
14
24
  return;
15
- onCartChangedDebounced({ ...cart, customerVatNumber: vatNumber, poNumber });
25
+ onCartChangedDebounced({
26
+ ...cart,
27
+ customerVatNumber: vatNumber,
28
+ fulfillmentMethod: 'Ship',
29
+ poNumber,
30
+ properties: { ...cart.properties, industry: industry || '' },
31
+ requestedDeliveryDate: deliveryDate || '',
32
+ requestedPickupDate: deliveryDate || '',
33
+ });
16
34
  // eslint-disable-next-line react-hooks/exhaustive-deps
17
- }, [vatNumber, poNumber]);
18
- return (jsxs(Fragment, { children: [jsx(TextField, { isRequired: true, showLabel: true, label: t('VAT Number'), minLength: 8, onChange: setVatNumber, value: vatNumber }), jsx(TextField, { isRequired: true, showLabel: true, label: t('PO Number'), onChange: setPONumber, value: poNumber })] }));
35
+ }, [vatNumber, poNumber, industry, deliveryDate]);
36
+ const atpSelectOptions = atp
37
+ .filter(atp => atp.date !== null)
38
+ .reduce((acc, atp) => ({
39
+ ...acc,
40
+ [atp.date || '']: atp.displayDate,
41
+ }), {});
42
+ const fulfillmentMethodOptions = fulfillmentMethods.reduce((acc, method) => ({
43
+ ...acc,
44
+ [method.toLocaleLowerCase()]: t(`fulfillmentMethod.${method}`),
45
+ }), {});
46
+ const paymentMethodOptions = cart.paymentOptions?.paymentMethods?.reduce((acc, method) => {
47
+ acc[method.name] = t(`paymentMethod.${method.description}`);
48
+ return acc;
49
+ }, {});
50
+ return (jsxs(Fragment, { children: [jsxs("div", { className: styles['delivery-date'], children: [jsx(Select, { isRequired: true, showLabel: true, "data-test-selector": "delivery-date", defaultSelectedOption: atp[0]?.date ?? undefined, isDisabled: asSoonAsPossible, label: t('Select a desired delivery date'), onChange: value => setDeliveryDate(value), options: atpSelectOptions, selectedOption: deliveryDate, variant: "solid" }), jsxs("div", { className: styles['asap-checkbox'], children: [jsx(Checkbox, { "data-test-selector": "asapCheckbox", isSelected: asSoonAsPossible, onChange: checked => {
51
+ setAsSoonAsPossible(checked);
52
+ if (checked)
53
+ setDeliveryDate('');
54
+ }, children: jsx(FormattedMessage, { id: "As soon as possible" }) }), jsx(Tooltip, { text: t('Selecting As Soon As Possible will enable us to send the products to you as they become available.') })] })] }), jsx(Select, { showLabel: true, isDisabled: fulfillmentMethods.length <= 1, label: t('Fulfillment method'), onChange: setFulfillmentMethod, options: fulfillmentMethodOptions, selectedOption: fulfillmentMethod, variant: "solid" }), jsx(Select, { isRequired: true, label: t('Industry'), onChange: value => setIndustry(value), options: {
55
+ /* eslint-disable sort-keys-fix/sort-keys-fix */
56
+ PP: 'Private User',
57
+ AU: 'Automotive',
58
+ MC: 'Motorcycle',
59
+ BC: 'Bicycle',
60
+ TR: 'Truck',
61
+ AG: 'Agricultural',
62
+ AV: 'Aviation',
63
+ MA: 'Maritime',
64
+ OT: 'Other',
65
+ /* eslint-enable sort-keys-fix/sort-keys-fix */
66
+ }, selectedOption: industry, variant: "solid" }), jsx(TextField, { showLabel: true, isDisabled: isDisabled, label: t('VAT Number'), minLength: 8, name: "vatNumber", onChange: setVatNumber, value: vatNumber }), jsx(TextField, { showLabel: true, isDisabled: isDisabled, label: t('PO Number'), onChange: setPONumber, value: poNumber }), paymentMethodOptions && (jsx(Select, { isDisabled: (cart.paymentOptions?.paymentMethods &&
67
+ cart.paymentOptions.paymentMethods.length <= 1) ??
68
+ true, label: t('Payment method'), onChange: value => setPaymentMethod(value), options: paymentMethodOptions, selectedOption: paymentMethod, variant: "solid" }))] }));
19
69
  }
20
70
 
21
71
  export { PaymentDetails };
@@ -1,6 +1,11 @@
1
- import { AdyenPaymentModel, CartModel } from '../shared/api/storefront/model/storefront.model';
2
- export declare function Payment({ cart: _cart, onError, onPaymentComplete, }: {
1
+ import { AdyenPaymentModel, CartModel, CheckoutAtpEntry } from '../shared/api/storefront/model/storefront.model';
2
+ export declare function Payment({ atp, cart: _cart, form, fulfillmentMethods, onError: _onError, onPaymentComplete, onProcessing, onValidating, }: {
3
+ atp: CheckoutAtpEntry[];
3
4
  cart: CartModel;
4
- onError: (error: unknown, result: AdyenPaymentModel) => void;
5
+ form: string;
6
+ fulfillmentMethods: string[];
7
+ onError?: (error: unknown, result: AdyenPaymentModel | null) => void;
5
8
  onPaymentComplete: () => void;
9
+ onProcessing: (processing: boolean) => void;
10
+ onValidating: (validating: boolean) => void;
6
11
  }): import("react/jsx-runtime").JSX.Element;