@shipengine/elements 2.24.1 → 2.25.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 (206) hide show
  1. package/README.md +187 -6
  2. package/dist/cjs/components/field/credit-card-input/credit-card-input.cjs +46 -29
  3. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +29 -5
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +8 -3
  5. package/dist/cjs/components/field/rate-select/rate-select.cjs +26 -5
  6. package/dist/cjs/components/forms/address-form/address-form-schema.cjs +3 -3
  7. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +57 -4
  8. package/dist/cjs/components/service-card/service-card.cjs +4 -4
  9. package/dist/cjs/components/service-card/service-card.styles.cjs +5 -2
  10. package/dist/cjs/components/service-point-display/service-point-display.cjs +1 -36
  11. package/dist/cjs/components/service-point-display/service-point-display.styles.cjs +0 -12
  12. package/dist/cjs/components/shipment-not-found-error/index.cjs +7 -0
  13. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.cjs +40 -0
  14. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.styles.cjs +24 -0
  15. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +11 -3
  16. package/dist/cjs/elements/purchase-label/components/rate-form/rate-form.cjs +13 -3
  17. package/dist/cjs/elements/purchase-label/components/rate-form/rate-schema.cjs +7 -2
  18. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +2 -0
  19. package/dist/cjs/elements/purchase-label/hooks/use-rate-options.cjs +31 -2
  20. package/dist/cjs/elements/purchase-label/hooks/use-rates-form.cjs +14 -18
  21. package/dist/cjs/elements/purchase-label/hooks/use-request-rates.cjs +20 -20
  22. package/dist/cjs/elements/purchase-label/purchase-label.cjs +4 -1
  23. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.cjs +16 -31
  24. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.styles.cjs +0 -19
  25. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.cjs +54 -0
  26. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.styles.cjs +27 -0
  27. package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +56 -18
  28. package/dist/cjs/hooks/use-configure-shipment.cjs +32 -11
  29. package/dist/cjs/hooks/use-helpers.cjs +4 -1
  30. package/dist/cjs/index.cjs +15 -12
  31. package/dist/cjs/locales/en/account-settings.json.cjs +6 -0
  32. package/dist/cjs/locales/en/common.json.cjs +2 -0
  33. package/dist/cjs/locales/en/purchase-label.json.cjs +5 -3
  34. package/dist/cjs/package.json.cjs +1 -1
  35. package/dist/cjs/utilities/address.cjs +29 -0
  36. package/dist/cjs/utilities/index.cjs +3 -0
  37. package/dist/cjs/utilities/money.cjs +14 -0
  38. package/dist/cjs/utilities/rate-warning-messages.cjs +25 -0
  39. package/dist/cjs/utilities/shipengine/warehouses.cjs +2 -1
  40. package/dist/cjs/workflows/connect-external-carrier/connect-external-carrier.cjs +7 -3
  41. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +11 -3
  42. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +1 -1
  43. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +17 -1
  44. package/dist/cjs/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.cjs +4 -1
  45. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +4 -1
  46. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +14 -3
  47. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +12 -12
  48. package/dist/esm/components/field/credit-card-input/credit-card-input.js +47 -30
  49. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +30 -6
  50. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +8 -3
  51. package/dist/esm/components/field/rate-select/rate-select.js +26 -5
  52. package/dist/esm/components/forms/address-form/address-form-schema.js +3 -3
  53. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +58 -5
  54. package/dist/esm/components/service-card/service-card.js +4 -4
  55. package/dist/esm/components/service-card/service-card.styles.js +5 -2
  56. package/dist/esm/components/service-point-display/service-point-display.js +2 -37
  57. package/dist/esm/components/service-point-display/service-point-display.styles.js +0 -12
  58. package/dist/esm/components/shipment-not-found-error/index.js +1 -0
  59. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +38 -0
  60. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.styles.js +22 -0
  61. package/dist/esm/components/suspend-purchase/suspend-purchase.js +11 -3
  62. package/dist/esm/elements/purchase-label/components/rate-form/rate-form.js +14 -4
  63. package/dist/esm/elements/purchase-label/components/rate-form/rate-schema.js +7 -2
  64. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +2 -0
  65. package/dist/esm/elements/purchase-label/hooks/use-rate-options.js +31 -2
  66. package/dist/esm/elements/purchase-label/hooks/use-rates-form.js +14 -18
  67. package/dist/esm/elements/purchase-label/hooks/use-request-rates.js +20 -20
  68. package/dist/esm/elements/purchase-label/purchase-label.js +4 -1
  69. package/dist/esm/elements/shipment-summary/components/label-display/label-card.js +18 -33
  70. package/dist/esm/elements/shipment-summary/components/label-display/label-card.styles.js +0 -19
  71. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.js +52 -0
  72. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.styles.js +25 -0
  73. package/dist/esm/features/payment-method-settings/payment-method-settings.js +57 -19
  74. package/dist/esm/hooks/use-configure-shipment.js +33 -12
  75. package/dist/esm/hooks/use-helpers.js +4 -1
  76. package/dist/esm/index.js +1 -0
  77. package/dist/esm/locales/en/account-settings.json.js +6 -0
  78. package/dist/esm/locales/en/common.json.js +2 -0
  79. package/dist/esm/locales/en/purchase-label.json.js +5 -3
  80. package/dist/esm/package.json.js +1 -1
  81. package/dist/esm/utilities/address.js +26 -0
  82. package/dist/esm/utilities/index.js +1 -0
  83. package/dist/esm/utilities/money.js +14 -1
  84. package/dist/esm/utilities/rate-warning-messages.js +23 -0
  85. package/dist/esm/utilities/shipengine/warehouses.js +2 -1
  86. package/dist/esm/workflows/connect-external-carrier/connect-external-carrier.js +7 -3
  87. package/dist/esm/workflows/label-workflow/label-workflow.js +11 -3
  88. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +1 -1
  89. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +17 -1
  90. package/dist/esm/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.js +4 -1
  91. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +4 -1
  92. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +14 -3
  93. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +12 -12
  94. package/dist/types/components/field/credit-card-input/credit-card-input.d.ts.map +1 -1
  95. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +4 -2
  96. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  97. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +7 -2
  98. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  99. package/dist/types/components/field/rate-select/rate-select.d.ts +1 -0
  100. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  101. package/dist/types/components/forms/address-form/address-form-schema.d.ts.map +1 -1
  102. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -1
  103. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
  104. package/dist/types/components/service-card/service-card.d.ts +1 -1
  105. package/dist/types/components/service-card/service-card.d.ts.map +1 -1
  106. package/dist/types/components/service-card/service-card.styles.d.ts +4 -1
  107. package/dist/types/components/service-card/service-card.styles.d.ts.map +1 -1
  108. package/dist/types/components/service-point-display/service-point-display.d.ts.map +1 -1
  109. package/dist/types/components/service-point-display/service-point-display.styles.d.ts +0 -12
  110. package/dist/types/components/service-point-display/service-point-display.styles.d.ts.map +1 -1
  111. package/dist/types/components/shipment-not-found-error/index.d.ts +2 -0
  112. package/dist/types/components/shipment-not-found-error/index.d.ts.map +1 -0
  113. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +6 -0
  114. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -0
  115. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts +19 -0
  116. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts.map +1 -0
  117. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +4 -2
  118. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  119. package/dist/types/elements/labels-grid/labels-grid.d.ts +11 -1
  120. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  121. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +11 -1
  122. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  123. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +11 -1
  124. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  125. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +11 -1
  126. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  127. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +11 -1
  128. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  129. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +11 -1
  130. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  131. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts +1 -1
  132. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts.map +1 -1
  133. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts +10 -1
  134. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts.map +1 -1
  135. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts +2 -1
  136. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts.map +1 -1
  137. package/dist/types/elements/purchase-label/hooks/use-rate-options.d.ts.map +1 -1
  138. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts +2 -2
  139. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts.map +1 -1
  140. package/dist/types/elements/purchase-label/hooks/use-request-rates.d.ts.map +1 -1
  141. package/dist/types/elements/purchase-label/purchase-label.d.ts +11 -1
  142. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  143. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +11 -1
  144. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  145. package/dist/types/elements/shipment-summary/components/label-display/label-card.d.ts.map +1 -1
  146. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts +0 -19
  147. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts.map +1 -1
  148. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts +8 -0
  149. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts.map +1 -0
  150. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts +22 -0
  151. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts.map +1 -0
  152. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +11 -1
  153. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  154. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  155. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +11 -1
  156. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  157. package/dist/types/elements/theme-creator/theme-creator.d.ts +11 -1
  158. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  159. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +11 -1
  160. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  161. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +11 -1
  162. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  163. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +11 -1
  164. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  165. package/dist/types/elements/void-label/void-label.d.ts +11 -1
  166. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  167. package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
  168. package/dist/types/hooks/use-configure-shipment.d.ts +1 -0
  169. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  170. package/dist/types/hooks/use-helpers.d.ts +2 -0
  171. package/dist/types/hooks/use-helpers.d.ts.map +1 -1
  172. package/dist/types/index.d.ts +1 -1
  173. package/dist/types/index.d.ts.map +1 -1
  174. package/dist/types/locales/en/index.d.ts +11 -1
  175. package/dist/types/locales/en/index.d.ts.map +1 -1
  176. package/dist/types/types/rates.d.ts +1 -0
  177. package/dist/types/types/rates.d.ts.map +1 -1
  178. package/dist/types/utilities/address.d.ts +21 -0
  179. package/dist/types/utilities/address.d.ts.map +1 -0
  180. package/dist/types/utilities/feature-flags/types.d.ts +1 -1
  181. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  182. package/dist/types/utilities/index.d.ts +1 -0
  183. package/dist/types/utilities/index.d.ts.map +1 -1
  184. package/dist/types/utilities/money.d.ts +6 -0
  185. package/dist/types/utilities/money.d.ts.map +1 -1
  186. package/dist/types/utilities/rate-warning-messages.d.ts +15 -0
  187. package/dist/types/utilities/rate-warning-messages.d.ts.map +1 -0
  188. package/dist/types/workflows/account-settings/account-settings.d.ts +11 -1
  189. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  190. package/dist/types/workflows/carrier-services/carrier-services.d.ts +11 -1
  191. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  192. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +11 -1
  193. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  194. package/dist/types/workflows/label-workflow/label-workflow.d.ts +11 -1
  195. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  196. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  197. package/dist/types/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.d.ts.map +1 -1
  198. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +2 -1
  199. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  200. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts +3 -1
  201. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  202. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -0
  203. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  204. package/dist/types/workflows/onboarding/onboarding.d.ts +11 -1
  205. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  206. package/package.json +3 -3
@@ -3,7 +3,7 @@ import { jsxs, jsx, Fragment } from '@emotion/react/jsx-runtime';
3
3
  import { useQueryClient } from '@tanstack/react-query';
4
4
  import { formLogger } from '../../../../utilities/form-logger.js';
5
5
  import { validationResolver } from '../../../../utilities/validation.js';
6
- import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
6
+ import { useRef, useState, useCallback, useMemo, useEffect } from 'react';
7
7
  import { useForm } from 'react-hook-form';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { rateSchema } from './rate-schema.js';
@@ -62,19 +62,28 @@ const RateForm = ({
62
62
  defaultValues: {
63
63
  rate: {
64
64
  isAcknowledged: true,
65
- rateId: undefined
65
+ rateId: undefined,
66
+ labelDisplayScheme: undefined
66
67
  }
67
68
  },
68
69
  mode: "onChange",
69
70
  resolver: validationResolver(rateSchema)
70
71
  });
72
+ const handlePaperlessAcknowledgementChange = useCallback((_usePaperlessLabel, labelDisplayScheme) => {
73
+ form.setValue("rate.labelDisplayScheme", labelDisplayScheme, {
74
+ shouldDirty: true
75
+ });
76
+ }, [form]);
71
77
  const {
72
78
  rateId: selectedRateId
73
79
  } = form.watch("rate");
74
80
  const handleSubmit = formLogger.capture(form.handleSubmit(values => __awaiter(void 0, void 0, void 0, function* () {
75
- const rateId = values;
81
+ const {
82
+ rateId,
83
+ labelDisplayScheme
84
+ } = values;
76
85
  try {
77
- yield onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(rateId, selectedServicePoint);
86
+ yield onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(rateId, selectedServicePoint, labelDisplayScheme);
78
87
  } finally {
79
88
  // Invalidate carrier queries after the rate form is submitted, regardless of success.
80
89
  // This allows the carrier balance to refresh if the purchase failed but funding succeeded.
@@ -177,6 +186,7 @@ const RateForm = ({
177
186
  form: form,
178
187
  isCalculatingRates: isCalculatingRates,
179
188
  isSavingRate: isSavingRate,
189
+ onPaperlessAcknowledgementChange: handlePaperlessAcknowledgementChange,
180
190
  onSelectRate: rateId => {
181
191
  const selectedRate = rateOptions.find(r => r.rateId === rateId);
182
192
  if (selectedRate) {
@@ -1,10 +1,15 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ const labelDisplaySchemeEnum = z.enum(["label", "paperless", "qr_code", "label_and_paperless"]);
3
4
  const rateSchema = z.object({
4
5
  rate: z.object({
5
6
  isAcknowledged: z.boolean().refine(v => v === true, "purchase-label:schemaErrors.needToAcknowledge"),
6
- rateId: z.string()
7
+ rateId: z.string(),
8
+ labelDisplayScheme: labelDisplaySchemeEnum.optional()
7
9
  })
8
- }).transform(schema => schema.rate.rateId);
10
+ }).transform(schema => ({
11
+ rateId: schema.rate.rateId,
12
+ labelDisplayScheme: schema.rate.labelDisplayScheme
13
+ }));
9
14
 
10
15
  export { rateSchema };
@@ -21,6 +21,7 @@ const RateView = ({
21
21
  form,
22
22
  isCalculatingRates,
23
23
  isSavingRate,
24
+ onPaperlessAcknowledgementChange,
24
25
  onSelectRate,
25
26
  preferredServiceCodes,
26
27
  pudoServicePointDetails = {
@@ -194,6 +195,7 @@ const RateView = ({
194
195
  label: "Rate",
195
196
  name: "rate",
196
197
  onClick: onSelectRate,
198
+ onPaperlessAcknowledgementChange: onPaperlessAcknowledgementChange,
197
199
  onSelectServicePoint: onSelectServicePoint,
198
200
  options: showHiddenRates ? expandedRateOptionList : collapsedRateOptionList
199
201
  }, rateSelectCommonProps)), expandedRateOptionList.length > COLLAPSED_RATE_VIEW_LIMIT && jsx(LinkAction, {
@@ -9,6 +9,22 @@ import { useWindsorFramework } from './use-windsor-framework.js';
9
9
  import { PudoType } from '../../../types/pudo.js';
10
10
  import { CanadaDeliveredDutyOptions } from '../../../types/canada-ddp.js';
11
11
 
12
+ /* https://auctane.atlassian.net/browse/ENGINE-7329
13
+ * For iteration one we would hardcode services for which it will be available (in the future this data will be in the registry. We will change hardcoding then)
14
+ * carriersWithPaperless and servicesWithPaperless are hardcoded for iteration one
15
+ */
16
+ const hermesPaperlessSupportedServices = ["hermes_domestic_parcelshop_dropoff", "hermes_domestic_parcelshop_dropoff_next_day", "hermes_postable", "hermes_postable_next_day"];
17
+ const paperlessSupportedCarriers = [{
18
+ carrier: "hermes",
19
+ services: hermesPaperlessSupportedServices,
20
+ displaySchemes: ["label_and_paperless"]
21
+ }, {
22
+ carrier: "usps",
23
+ displaySchemes: ["qr_code"]
24
+ }, {
25
+ carrier: "stamps_com",
26
+ displaySchemes: ["qr_code"]
27
+ }];
12
28
  /**
13
29
  * @internal
14
30
  *
@@ -35,6 +51,17 @@ const useRateOptions = (rates, fundingOrigin, preferredRates, carriers, shipment
35
51
  var _a;
36
52
  return ((_a = shipment === null || shipment === void 0 ? void 0 : shipment.advancedOptions) === null || _a === void 0 ? void 0 : _a.canadaDeliveredDuty) === CanadaDeliveredDutyOptions.SENDER_PREPAY;
37
53
  }, [(_a = shipment === null || shipment === void 0 ? void 0 : shipment.advancedOptions) === null || _a === void 0 ? void 0 : _a.canadaDeliveredDuty]);
54
+ const buildSupportedLabelDisplaySchemes = (carrierCode, serviceCode) => {
55
+ const carrier = paperlessSupportedCarriers.find(c => c.carrier === carrierCode);
56
+ if (!carrier || carrier.services && !carrier.services.includes(serviceCode)) {
57
+ return [];
58
+ }
59
+ // Only return USPS/stamps_com display schemes for domestic shipments
60
+ if ((carrierCode === 'usps' || carrierCode === 'stamps_com') && isInternational) {
61
+ return [];
62
+ }
63
+ return [...carrier.displaySchemes];
64
+ };
38
65
  const rateOptionsFilters = useCallback(carrierCode => {
39
66
  return (
40
67
  // Filter out non-USPS carriers for Canada Delivered Duty prepaid shipments
@@ -57,7 +84,8 @@ const useRateOptions = (rates, fundingOrigin, preferredRates, carriers, shipment
57
84
  messages: r.rate.warningMessages,
58
85
  rateAcknowledgementMessage: r.rateAcknowledgementMessage,
59
86
  requiresAcknowledgement: !!r.rateAcknowledgementMessage,
60
- requiresFundedAmount: false
87
+ requiresFundedAmount: false,
88
+ paperlessDisplaySchemes: buildSupportedLabelDisplaySchemes(r.rate.carrierCode, r.rate.serviceCode)
61
89
  }));
62
90
  }, [preferredRates, rateOptionsFilters]);
63
91
  const noRatesForServiceMessage = t("purchase-label:rates.noRateService");
@@ -73,7 +101,8 @@ const useRateOptions = (rates, fundingOrigin, preferredRates, carriers, shipment
73
101
  balance: fundingOrigin === null || fundingOrigin === void 0 ? void 0 : fundingOrigin.balance,
74
102
  messages: r.warningMessages,
75
103
  requiresAcknowledgement: getRateRequiresAcknowledgement(r.serviceCode, r.packageType, !!requireDhlTermsAcknowledgement),
76
- requiresFundedAmount
104
+ requiresFundedAmount,
105
+ paperlessDisplaySchemes: buildSupportedLabelDisplaySchemes(r.carrierCode, r.serviceCode)
77
106
  });
78
107
  if (r.shippingAmount.amount === 0 && !r.warningMessages.includes(noRatesForServiceMessage)) {
79
108
  baseRateOption.messages.push(noRatesForServiceMessage);
@@ -12,11 +12,6 @@ import { useRatesWithCache } from './use-rates-with-cache.js';
12
12
  import { useServicePoints } from './use-service-points.js';
13
13
  import { useElements } from '../../../elements-provider/elements-context-provider.js';
14
14
 
15
- /* https://auctane.atlassian.net/browse/ENGINE-7329
16
- * For iteration one we would hardcode services for which it will be available (in the future this data will be in the registry. We will change hardcoding then)
17
- * carriersWithPaperless and servicesWithPaperless are hardcoded for iteration one
18
- */
19
- const servicesWithPaperless = ["hermes_domestic_parcelshop_dropoff", "hermes_domestic_parcelshop_dropoff_next_day", "hermes_postable", "hermes_postable_next_day"];
20
15
  const useRatesForm = ({
21
16
  getPreferredRates,
22
17
  disabledShippingServices,
@@ -89,17 +84,11 @@ const useRatesForm = ({
89
84
  listServicePointsErrors,
90
85
  servicePointSearchQuery
91
86
  } = useServicePoints(ratesResponse === null || ratesResponse === void 0 ? void 0 : ratesResponse.rates, shipment);
92
- const isDisplaySchemePaperless = rate => {
93
- if ("hermes" === rate.carrierCode) {
94
- return !!servicesWithPaperless.find(service => service === rate.serviceCode);
95
- }
96
- return false;
97
- };
98
- const purchaseLabel = useCallback((rateId, shipment, rate, servicePoint) => __awaiter(void 0, void 0, void 0, function* () {
87
+ const purchaseLabel = useCallback((rateId, shipment, rate, servicePoint, displayScheme) => __awaiter(void 0, void 0, void 0, function* () {
99
88
  var _a;
100
89
  try {
101
90
  const label = yield createLabel({
102
- displayScheme: isDisplaySchemePaperless(rate) ? "label_and_paperless" : "label",
91
+ displayScheme: displayScheme !== null && displayScheme !== void 0 ? displayScheme : "label",
103
92
  labelDownloadType: "url",
104
93
  labelFormat: "pdf",
105
94
  labelLayout: (_a = printLabelLayout === null || printLabelLayout === void 0 ? void 0 : printLabelLayout.toLowerCase()) !== null && _a !== void 0 ? _a : "4x6",
@@ -112,8 +101,15 @@ const useRatesForm = ({
112
101
  } else {
113
102
  yield onLabelCreateFailure === null || onLabelCreateFailure === void 0 ? void 0 : onLabelCreateFailure(rate, shipment);
114
103
  }
115
- } catch (_b) {
116
- yield onLabelCreateFailure === null || onLabelCreateFailure === void 0 ? void 0 : onLabelCreateFailure(rate, shipment);
104
+ } catch (error) {
105
+ // Only return errors from the createLabel mutation in the callback
106
+ let callbackErrors;
107
+ if (Array.isArray(error)) {
108
+ if (error[0] instanceof SE.CodedError) {
109
+ callbackErrors = error;
110
+ }
111
+ }
112
+ yield onLabelCreateFailure === null || onLabelCreateFailure === void 0 ? void 0 : onLabelCreateFailure(rate, shipment, callbackErrors);
117
113
  }
118
114
  }), [createLabel, onLabelCreateFailure, onLabelCreateSuccess, printLabelLayout]);
119
115
  const onUpdatedShipment = useCallback(shipment => __awaiter(void 0, void 0, void 0, function* () {
@@ -187,7 +183,7 @@ const useRatesForm = ({
187
183
  return;
188
184
  }
189
185
  }), [onBeforeRateSaved, onUpdatedShipment, resetRates, shipment, updateShipment]);
190
- const handleSubmit = useCallback((rateId, servicePoint) => __awaiter(void 0, void 0, void 0, function* () {
186
+ const handleSubmit = useCallback((rateId, servicePoint, displayScheme) => __awaiter(void 0, void 0, void 0, function* () {
191
187
  var _a, _b, _c, _d;
192
188
  setBeforeCreateError(undefined);
193
189
  if (!shipment) return;
@@ -235,12 +231,12 @@ const useRatesForm = ({
235
231
  });
236
232
  throw new Error("Insufficient funds. Please add funds before purchasing and try again.");
237
233
  } else {
238
- yield purchaseLabel(rate.rateId, updatedShipment !== null && updatedShipment !== void 0 ? updatedShipment : shipment, rate, servicePoint);
234
+ yield purchaseLabel(rate.rateId, updatedShipment !== null && updatedShipment !== void 0 ? updatedShipment : shipment, rate, servicePoint, displayScheme);
239
235
  return;
240
236
  }
241
237
  }
242
238
  // The user has selected a standard rate and no further action is required before purchase
243
- yield purchaseLabel(rateId, shipment, rate, servicePoint);
239
+ yield purchaseLabel(rateId, shipment, rate, servicePoint, displayScheme);
244
240
  return;
245
241
  } catch (e) {
246
242
  if (Array.isArray(e)) {
@@ -2,7 +2,7 @@ import { __awaiter } from '../../../_virtual/_tslib.js';
2
2
  import { useListCarriers, useListCustomPackageTypes, useCalculateRates } from '@shipengine/react-api';
3
3
  import { omitTime } from '../../../utilities/date.js';
4
4
  import { useCallback, useMemo } from 'react';
5
- import rateMessages from '../../../data/rate-messages.json.js';
5
+ import { buildRateWarningMessages } from '../../../utilities/rate-warning-messages.js';
6
6
  import { useRequestPreferredRates } from './use-request-preferred-rates.js';
7
7
  import { isShippingServiceServiceDisabled } from '../../../utilities/feature-flags/utils.js';
8
8
 
@@ -89,26 +89,26 @@ const useRequestRates = ({
89
89
  }, [ratedShipment]);
90
90
  const ratesCalculating = getPreferredRates ? preferredRatesCalculating || standardRatesCalculating : standardRatesCalculating;
91
91
  ratesResponse = useMemo(() => ratesResponse && Object.assign(Object.assign({}, ratesResponse), {
92
- rates: ratesResponse.rates.map(rate => {
93
- var _a, _b, _c;
94
- return Object.assign(Object.assign({}, rate), {
95
- warningMessages: [
96
- // add additional rateMessages based on combinations of serviceCode, packageType and shipDay
97
- ...((_a = rateMessages[`${rate.serviceCode}:${shipDay}`]) !== null && _a !== void 0 ? _a : []), ...((_b = rateMessages[`${rate.serviceCode}:${rate.packageType}`]) !== null && _b !== void 0 ? _b : []), ...((_c = rateMessages[rate.serviceCode]) !== null && _c !== void 0 ? _c : []), ...rate.warningMessages]
98
- });
99
- })
92
+ rates: ratesResponse.rates.map(rate => Object.assign(Object.assign({}, rate), {
93
+ warningMessages: buildRateWarningMessages({
94
+ serviceCode: rate.serviceCode,
95
+ packageType: rate.packageType,
96
+ shipDay,
97
+ existingWarningMessages: rate.warningMessages
98
+ })
99
+ }))
100
100
  }), [ratesResponse, shipDay]);
101
- const preferredRatesResponse = useMemo(() => preferredResponse && preferredResponse.map(r => {
102
- var _a, _b, _c;
103
- return {
104
- rate: Object.assign(Object.assign({}, r.rate), {
105
- warningMessages: [
106
- // add additional rateMessages based on combinations of serviceCode, packageType and shipDay
107
- ...((_a = rateMessages[`${r.rate.serviceCode}:${shipDay}`]) !== null && _a !== void 0 ? _a : []), ...((_b = rateMessages[`${r.rate.serviceCode}:${r.rate.packageType}`]) !== null && _b !== void 0 ? _b : []), ...((_c = rateMessages[r.rate.serviceCode]) !== null && _c !== void 0 ? _c : []), ...r.rate.warningMessages]
108
- }),
109
- rateAcknowledgementMessage: r.rateAcknowledgementMessage
110
- };
111
- }), [preferredResponse, shipDay]);
101
+ const preferredRatesResponse = useMemo(() => preferredResponse && preferredResponse.map(r => ({
102
+ rate: Object.assign(Object.assign({}, r.rate), {
103
+ warningMessages: buildRateWarningMessages({
104
+ serviceCode: r.rate.serviceCode,
105
+ packageType: r.rate.packageType,
106
+ shipDay,
107
+ existingWarningMessages: r.rate.warningMessages
108
+ })
109
+ }),
110
+ rateAcknowledgementMessage: r.rateAcknowledgementMessage
111
+ })), [preferredResponse, shipDay]);
112
112
  return {
113
113
  isCalculating: ratesCalculating,
114
114
  preferredRatesResponse,
@@ -63,7 +63,8 @@ const Component = _a => {
63
63
  salesOrder,
64
64
  refetchPendingSalesOrderShipments,
65
65
  isLoading,
66
- errors
66
+ errors,
67
+ createNewShipmentForNotFound
67
68
  } = useConfigureShipment({
68
69
  errorWhenShipmentCancelled: features === null || features === void 0 ? void 0 : features.enableErrorWhenShipmentCancelled,
69
70
  externalOrderId,
@@ -90,6 +91,8 @@ const Component = _a => {
90
91
  data: shipment || salesOrder,
91
92
  errors: errors,
92
93
  isLoading: isLoading || insuranceIsLoading,
94
+ onCreateNewShipment: createNewShipmentForNotFound,
95
+ shipmentId: shipmentId,
93
96
  children: jsx(ConfigureShipment, Object.assign({
94
97
  currency: currency,
95
98
  features: features,
@@ -1,12 +1,13 @@
1
1
  import { jsxs, jsx, Fragment } from '@emotion/react/jsx-runtime';
2
2
  import { useToggle } from '../../../../hooks/use-toggle.js';
3
- import { Next, ButtonVariant, Icon, IconSize, Typography, Tag } from '@shipengine/giger';
3
+ import { Icon, IconSize, Tag, Next, Typography } from '@shipengine/giger';
4
4
  import { IconNames } from '@shipengine/giger-theme';
5
5
  import { formatDateDDMMYY } from '../../../../utilities/date.js';
6
6
  import { trackingStatusFormatter } from '../../../../utilities/tracking-formatter.js';
7
- import { useRef } from 'react';
7
+ import { useRef, useMemo } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { styles } from './label-card.styles.js';
10
+ import { PaperlessLabelDisplay } from './paperless-label-display.js';
10
11
  import { ServiceCardContainer, ServiceCardHeader, ServiceCardFooter } from '../../../../components/service-card/service-card.js';
11
12
  import { InsurancePopover } from '../../../../components/insurance-popover/insurance-popover.js';
12
13
  import { useElements } from '../../../../elements-provider/elements-context-provider.js';
@@ -44,7 +45,8 @@ const LabelCard = ({
44
45
  trackable = undefined,
45
46
  trackingNumber = undefined,
46
47
  trackingStatus = undefined,
47
- trackingUrl = undefined
48
+ trackingUrl = undefined,
49
+ qrCodeDownload = undefined
48
50
  } = !displayAsVoided ? label : {};
49
51
  const carrierCode = carrier === null || carrier === void 0 ? void 0 : carrier.carrierCode;
50
52
  const carrierFriendlyName = carrier === null || carrier === void 0 ? void 0 : carrier.friendlyName;
@@ -142,6 +144,18 @@ const LabelCard = ({
142
144
  shippingAmount,
143
145
  showExtendedData: selected
144
146
  };
147
+ const paperlessDownloadProps = useMemo(() => {
148
+ // USPS paperless labels populate the qrCodeDownload property instead of paperlessDownload, use qrCodeDownload href if available and paperlessDownload is empty
149
+ if (!paperlessDownload || Object.keys(paperlessDownload).length === 0) {
150
+ if (qrCodeDownload && qrCodeDownload.href) {
151
+ return {
152
+ href: qrCodeDownload.href
153
+ };
154
+ }
155
+ return undefined;
156
+ }
157
+ return paperlessDownload;
158
+ }, [paperlessDownload, qrCodeDownload]);
145
159
  return jsxs(ServiceCardContainer, {
146
160
  selected: selected,
147
161
  voided: displayAsVoided,
@@ -158,36 +172,7 @@ const LabelCard = ({
158
172
  },
159
173
  voided: displayAsVoided,
160
174
  children: trackable && jsx(TrackingNumberDisplay, {})
161
- }), paperlessDownload && jsxs("div", {
162
- css: styles.paperlessDownloadwrapper,
163
- children: [jsxs("div", {
164
- css: styles.codewrapper,
165
- children: [jsx("img", {
166
- alt: "paperless code",
167
- css: styles.codeImage,
168
- src: paperlessDownload === null || paperlessDownload === void 0 ? void 0 : paperlessDownload.href
169
- }), jsx("div", {
170
- css: styles.handoffCode,
171
- children: paperlessDownload === null || paperlessDownload === void 0 ? void 0 : paperlessDownload.handoffCode.toString()
172
- }), jsxs(Next.Link, {
173
- buttonProps: {
174
- variant: ButtonVariant.OUTLINED
175
- },
176
- css: styles.button,
177
- download: true,
178
- href: paperlessDownload === null || paperlessDownload === void 0 ? void 0 : paperlessDownload.href,
179
- isButton: true,
180
- children: [jsx(Icon, {
181
- name: IconNames.PRINTER,
182
- size: IconSize.SIZE_SMALL
183
- }), jsx("span", {
184
- children: t("view-shipment:actions.download")
185
- })]
186
- })]
187
- }), jsx(Typography, {
188
- children: paperlessDownload === null || paperlessDownload === void 0 ? void 0 : paperlessDownload.instructions
189
- })]
190
- }), showFooter && jsx(ServiceCardFooter, {
175
+ }), paperlessDownloadProps && "href" in paperlessDownloadProps && jsx(PaperlessLabelDisplay, Object.assign({}, paperlessDownloadProps)), showFooter && jsx(ServiceCardFooter, {
191
176
  messages: labelMessages
192
177
  })]
193
178
  });
@@ -1,31 +1,12 @@
1
1
  import { createStyles, scopeTheme } from '../../../../utilities/styles.js';
2
2
 
3
3
  const styles = createStyles({
4
- button: () => ({
5
- cursor: "pointer"
6
- }),
7
- codeImage: () => ({
8
- height: "120px",
9
- maxWidth: "200px",
10
- width: "auto"
11
- }),
12
- codewrapper: () => ({
13
- alignItems: "center",
14
- display: "flex",
15
- flexDirection: "column"
16
- }),
17
- handoffCode: theme => ({
18
- margin: `${scopeTheme(theme).spacing(2)}px 0`
19
- }),
20
4
  insuranceInfoIcon: theme => ({
21
5
  ":hover": {
22
6
  cursor: "pointer"
23
7
  },
24
8
  marginLeft: scopeTheme(theme).spacing(0.5)
25
9
  }),
26
- paperlessDownloadwrapper: theme => ({
27
- padding: scopeTheme(theme).spacing(2)
28
- }),
29
10
  trackingNumber: () => ({
30
11
  maxWidth: "100%",
31
12
  overflow: "hidden",
@@ -0,0 +1,52 @@
1
+ import { jsxs, jsx, Fragment } from '@emotion/react/jsx-runtime';
2
+ import { Next, ButtonVariant, Icon, IconSize, Typography } from '@shipengine/giger';
3
+ import { IconNames } from '@shipengine/giger-theme';
4
+ import { useTranslation } from 'react-i18next';
5
+ import { styles } from './paperless-label-display.styles.js';
6
+ import { Spacer } from '../../../../components/spacer/spacer.js';
7
+
8
+ const PaperlessLabelDisplay = ({
9
+ handoffCode,
10
+ href,
11
+ instructions
12
+ }) => {
13
+ const {
14
+ t
15
+ } = useTranslation();
16
+ return jsxs("div", {
17
+ css: styles.paperlessDownloadwrapper,
18
+ children: [jsxs("div", {
19
+ css: styles.codewrapper,
20
+ children: [jsx("img", {
21
+ alt: "paperless code",
22
+ css: styles.codeImage,
23
+ src: href
24
+ }), handoffCode && jsx("div", {
25
+ css: styles.handoffCode,
26
+ children: handoffCode
27
+ }), jsxs(Next.Link, {
28
+ buttonProps: {
29
+ variant: ButtonVariant.OUTLINED
30
+ },
31
+ css: styles.button,
32
+ download: true,
33
+ href: href,
34
+ isButton: true,
35
+ children: [jsx(Icon, {
36
+ name: IconNames.PRINTER,
37
+ size: IconSize.SIZE_SMALL
38
+ }), jsx("span", {
39
+ children: t("view-shipment:actions.download")
40
+ })]
41
+ })]
42
+ }), instructions && jsxs(Fragment, {
43
+ children: [jsx(Spacer, {
44
+ multiplier: 2
45
+ }), " ", jsx(Typography, {
46
+ children: instructions
47
+ })]
48
+ })]
49
+ });
50
+ };
51
+
52
+ export { PaperlessLabelDisplay };
@@ -0,0 +1,25 @@
1
+ import { createStyles, scopeTheme } from '../../../../utilities/styles.js';
2
+
3
+ const styles = createStyles({
4
+ button: () => ({
5
+ cursor: "pointer"
6
+ }),
7
+ codeImage: () => ({
8
+ height: "120px",
9
+ maxWidth: "200px",
10
+ width: "auto"
11
+ }),
12
+ codewrapper: () => ({
13
+ alignItems: "center",
14
+ display: "flex",
15
+ flexDirection: "column"
16
+ }),
17
+ handoffCode: theme => ({
18
+ margin: `${scopeTheme(theme).spacing(2)}px 0`
19
+ }),
20
+ paperlessDownloadwrapper: theme => ({
21
+ padding: scopeTheme(theme).spacing(2)
22
+ })
23
+ });
24
+
25
+ export { styles };
@@ -1,11 +1,14 @@
1
1
  import { __awaiter } from '../../_virtual/_tslib.js';
2
- import { jsx } from '@emotion/react/jsx-runtime';
2
+ import { jsxs, Fragment, jsx } from '@emotion/react/jsx-runtime';
3
3
  import { useToggle } from '../../hooks/use-toggle.js';
4
+ import { InlineNotification, NotificationType } from '@shipengine/giger';
4
5
  import { useUpdateFundingSource, useListFundingSources } from '@shipengine/react-api';
5
6
  import { useState } from 'react';
6
7
  import { useTranslation } from 'react-i18next';
7
8
  import { EditBillingForm } from '../../components/forms/edit-billing-form/edit-billing-form.js';
8
9
  import { WalletCard } from '../../components/wallet-card/wallet-card.js';
10
+ import { useElements } from '../../elements-provider/elements-context-provider.js';
11
+ import { Spacer } from '../../components/spacer/spacer.js';
9
12
  import { Loader } from '../../components/loader/loader.js';
10
13
  import { ZeroState } from '../../components/zero-state/zero-state.js';
11
14
 
@@ -16,37 +19,72 @@ const PaymentMethodSettings = ({
16
19
  const {
17
20
  t
18
21
  } = useTranslation();
22
+ const {
23
+ globalFeatures
24
+ } = useElements();
25
+ const {
26
+ supportEmailAddress
27
+ } = globalFeatures;
19
28
  const [showEditBilling, toggleShowEditBilling] = useToggle(false);
20
29
  const [isUpdatingBilling, setIsUpdatingBilling] = useState(false);
21
30
  const {
22
- mutateAsync: updateBilling
31
+ error: updateBillingError,
32
+ mutateAsync: updateBilling,
33
+ reset: resetUpdateFundingSource
23
34
  } = useUpdateFundingSource();
24
35
  const {
25
36
  data: fundingSources,
26
37
  refetch: refetchFundingSources,
27
38
  isLoading: fundingSourceLoading
28
39
  } = useListFundingSources();
29
- const fundingSourceId = (_a = fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources[0]) === null || _a === void 0 ? void 0 : _a.fundingSourceId;
40
+ const {
41
+ fundingSourceId,
42
+ billingInfo
43
+ } = (_a = fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources[0]) !== null && _a !== void 0 ? _a : {};
30
44
  const handleUpdateBilling = (billingInfo, creditCardInfo) => __awaiter(void 0, void 0, void 0, function* () {
31
45
  if (fundingSourceId) {
32
- setIsUpdatingBilling(true);
33
- yield updateBilling({
34
- billingInfo,
35
- creditCardInfo,
36
- fundingSourceId
37
- });
38
- yield refetchFundingSources();
39
- toggleShowEditBilling(false);
40
- setIsUpdatingBilling(false);
46
+ try {
47
+ setIsUpdatingBilling(true);
48
+ yield updateBilling({
49
+ billingInfo,
50
+ creditCardInfo,
51
+ fundingSourceId
52
+ });
53
+ yield refetchFundingSources();
54
+ toggleShowEditBilling(false);
55
+ } catch (error) {
56
+ console.error("Error updating billing:", error);
57
+ // error is handled by the mutation
58
+ } finally {
59
+ setIsUpdatingBilling(false);
60
+ }
41
61
  }
42
62
  });
43
- if (showEditBilling) return jsx(EditBillingForm, {
44
- isLoading: isUpdatingBilling,
45
- onCancel: () => {
46
- toggleShowEditBilling(false);
47
- },
48
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
49
- onSubmit: handleUpdateBilling
63
+ if (showEditBilling) return jsxs(Fragment, {
64
+ children: [jsx(EditBillingForm, {
65
+ billingInfo: billingInfo,
66
+ isLoading: isUpdatingBilling,
67
+ onCancel: () => {
68
+ toggleShowEditBilling(false);
69
+ resetUpdateFundingSource();
70
+ },
71
+ onSubmit: (billingInfo, creditCardInfo) => {
72
+ void handleUpdateBilling(billingInfo, creditCardInfo);
73
+ }
74
+ }), (updateBillingError === null || updateBillingError === void 0 ? void 0 : updateBillingError.length) && jsxs(Fragment, {
75
+ children: [jsx(Spacer, {
76
+ multiplier: 2
77
+ }), jsx(InlineNotification, {
78
+ css: {
79
+ textAlign: "left"
80
+ },
81
+ title: t("account-settings:errors.paymentMethod.title"),
82
+ type: NotificationType.ERROR,
83
+ children: t("account-settings:errors.paymentMethod.description", {
84
+ email: supportEmailAddress
85
+ })
86
+ })]
87
+ })]
50
88
  });else {
51
89
  if (fundingSourceLoading) return jsx(Loader, {
52
90
  message: t("loading.paymentMethod")