@shipengine/elements 2.25.0 → 2.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/cjs/components/display-term/display-term.cjs +13 -4
  2. package/dist/cjs/components/grid-controller/error-banner/error-banner.cjs +74 -0
  3. package/dist/cjs/components/{error-display/error-display.styles.cjs → grid-controller/error-banner/error-banner.styles.cjs} +8 -4
  4. package/dist/cjs/components/grid-controller/error-banner/index.cjs +7 -0
  5. package/dist/cjs/components/grid-controller/grid-controller.cjs +49 -3
  6. package/dist/cjs/components/grid-controller/grid-controller.styles.cjs +11 -1
  7. package/dist/cjs/components/history/history-card/history-card.cjs +1 -1
  8. package/dist/cjs/components/history/history-card-extension/history-card-extension.cjs +0 -1
  9. package/dist/cjs/components/ups-terms-disclosure/index.cjs +7 -0
  10. package/dist/cjs/components/ups-terms-disclosure/ups-terms-disclosure.cjs +35 -0
  11. package/dist/cjs/elements/labels-grid/hooks/use-labels-grid.cjs +45 -5
  12. package/dist/cjs/elements/labels-grid/labels-grid.cjs +24 -6
  13. package/dist/cjs/elements/shipments-grid/hooks/use-shipments-grid.cjs +41 -3
  14. package/dist/cjs/elements/shipments-grid/shipments-grid.cjs +18 -3
  15. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +9 -10
  16. package/dist/cjs/features/manage-carriers/manage-carriers-row/manage-carriers-row.cjs +6 -1
  17. package/dist/cjs/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.cjs +3 -3
  18. package/dist/cjs/locales/en/grid-controller.json.cjs +13 -0
  19. package/dist/cjs/locales/en/index.cjs +2 -1
  20. package/dist/cjs/locales/en/onboarding.json.cjs +5 -0
  21. package/dist/cjs/package.json.cjs +1 -1
  22. package/dist/cjs/utilities/files.cjs +35 -0
  23. package/dist/cjs/utilities/formatString.cjs +9 -0
  24. package/dist/cjs/utilities/index.cjs +2 -0
  25. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +15 -11
  26. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.cjs +0 -3
  27. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +23 -10
  28. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.cjs +10 -4
  29. package/dist/esm/components/display-term/display-term.js +14 -5
  30. package/dist/esm/components/grid-controller/error-banner/error-banner.js +72 -0
  31. package/dist/esm/components/{error-display/error-display.styles.js → grid-controller/error-banner/error-banner.styles.js} +8 -4
  32. package/dist/esm/components/grid-controller/error-banner/index.js +1 -0
  33. package/dist/esm/components/grid-controller/grid-controller.js +51 -5
  34. package/dist/esm/components/grid-controller/grid-controller.styles.js +11 -1
  35. package/dist/esm/components/history/history-card/history-card.js +1 -1
  36. package/dist/esm/components/history/history-card-extension/history-card-extension.js +0 -1
  37. package/dist/esm/components/ups-terms-disclosure/index.js +1 -0
  38. package/dist/esm/components/ups-terms-disclosure/ups-terms-disclosure.js +33 -0
  39. package/dist/esm/elements/labels-grid/hooks/use-labels-grid.js +46 -6
  40. package/dist/esm/elements/labels-grid/labels-grid.js +24 -6
  41. package/dist/esm/elements/shipments-grid/hooks/use-shipments-grid.js +42 -4
  42. package/dist/esm/elements/shipments-grid/shipments-grid.js +18 -3
  43. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +9 -10
  44. package/dist/esm/features/manage-carriers/manage-carriers-row/manage-carriers-row.js +7 -2
  45. package/dist/esm/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.js +3 -3
  46. package/dist/esm/locales/en/grid-controller.json.js +11 -0
  47. package/dist/esm/locales/en/index.js +2 -1
  48. package/dist/esm/locales/en/onboarding.json.js +5 -0
  49. package/dist/esm/package.json.js +1 -1
  50. package/dist/esm/utilities/files.js +32 -0
  51. package/dist/esm/utilities/formatString.js +9 -1
  52. package/dist/esm/utilities/index.js +1 -0
  53. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +15 -11
  54. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.js +0 -3
  55. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +24 -11
  56. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.js +10 -4
  57. package/dist/types/components/display-term/display-term.d.ts +3 -3
  58. package/dist/types/components/display-term/display-term.d.ts.map +1 -1
  59. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts +10 -0
  60. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts.map +1 -0
  61. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts +24 -0
  62. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts.map +1 -0
  63. package/dist/types/components/grid-controller/error-banner/index.d.ts +2 -0
  64. package/dist/types/components/grid-controller/error-banner/index.d.ts.map +1 -0
  65. package/dist/types/components/grid-controller/grid-controller.d.ts +8 -1
  66. package/dist/types/components/grid-controller/grid-controller.d.ts.map +1 -1
  67. package/dist/types/components/grid-controller/grid-controller.styles.d.ts +10 -0
  68. package/dist/types/components/grid-controller/grid-controller.styles.d.ts.map +1 -1
  69. package/dist/types/components/history/history-card-extension/history-card-extension.d.ts.map +1 -1
  70. package/dist/types/components/ups-terms-disclosure/index.d.ts +2 -0
  71. package/dist/types/components/ups-terms-disclosure/index.d.ts.map +1 -0
  72. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts +2 -0
  73. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts.map +1 -0
  74. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts +7 -2
  75. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts.map +1 -1
  76. package/dist/types/elements/labels-grid/labels-grid.d.ts +18 -2
  77. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  78. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +12 -0
  79. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  80. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +12 -0
  81. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  82. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +12 -0
  83. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  84. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +12 -0
  85. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  86. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +12 -0
  87. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  88. package/dist/types/elements/purchase-label/purchase-label.d.ts +12 -0
  89. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  90. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +12 -0
  91. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  92. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +12 -0
  93. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  94. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts +6 -1
  95. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  96. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +21 -1
  97. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  98. package/dist/types/elements/theme-creator/theme-creator.d.ts +12 -0
  99. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  100. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +12 -0
  101. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  102. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +12 -0
  103. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  104. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +12 -0
  105. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  106. package/dist/types/elements/void-label/void-label.d.ts +12 -0
  107. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  108. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  109. package/dist/types/features/manage-carriers/manage-carriers-row/manage-carriers-row.d.ts.map +1 -1
  110. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts +3 -2
  111. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts.map +1 -1
  112. package/dist/types/locales/en/index.d.ts +12 -0
  113. package/dist/types/locales/en/index.d.ts.map +1 -1
  114. package/dist/types/types/index.d.ts +5 -4
  115. package/dist/types/types/index.d.ts.map +1 -1
  116. package/dist/types/types/terms-with-disclosure.d.ts +7 -0
  117. package/dist/types/types/terms-with-disclosure.d.ts.map +1 -0
  118. package/dist/types/utilities/feature-flags/types.d.ts +4 -0
  119. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  120. package/dist/types/utilities/files.d.ts +12 -0
  121. package/dist/types/utilities/files.d.ts.map +1 -0
  122. package/dist/types/utilities/formatString.d.ts +8 -0
  123. package/dist/types/utilities/formatString.d.ts.map +1 -1
  124. package/dist/types/utilities/index.d.ts +1 -0
  125. package/dist/types/utilities/index.d.ts.map +1 -1
  126. package/dist/types/workflows/account-settings/account-settings.d.ts +12 -0
  127. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  128. package/dist/types/workflows/carrier-services/carrier-services.d.ts +12 -0
  129. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  130. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +12 -0
  131. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  132. package/dist/types/workflows/label-workflow/label-workflow.d.ts +12 -0
  133. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  134. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +2 -1
  135. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  136. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts +0 -3
  137. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts.map +1 -1
  138. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  139. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts +8 -2
  140. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts.map +1 -1
  141. package/dist/types/workflows/onboarding/onboarding.d.ts +12 -0
  142. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  143. package/package.json +1 -1
  144. package/dist/cjs/components/error-display/error-display.cjs +0 -34
  145. package/dist/cjs/components/error-display/index.cjs +0 -7
  146. package/dist/esm/components/error-display/error-display.js +0 -32
  147. package/dist/esm/components/error-display/index.js +0 -1
  148. package/dist/types/components/error-display/error-display.d.ts +0 -7
  149. package/dist/types/components/error-display/error-display.d.ts.map +0 -1
  150. package/dist/types/components/error-display/error-display.styles.d.ts +0 -20
  151. package/dist/types/components/error-display/error-display.styles.d.ts.map +0 -1
  152. package/dist/types/components/error-display/index.d.ts +0 -2
  153. package/dist/types/components/error-display/index.d.ts.map +0 -1
@@ -45,22 +45,21 @@ const useListFundingSourceCarriers = () => {
45
45
  }, insurance.getInsuranceProviderWithFriendlyName(t.termType));
46
46
  });
47
47
  }, [optionalTerms, insuranceProviderAcceptedTerms]);
48
- const normalizeConnectedCarrierCodes = new Set(connectedCarriers === null || connectedCarriers === void 0 ? void 0 : connectedCarriers.map(c => {
49
- var _a;
50
- return c.carrierCode === "usps" || ((_a = c.nickname) === null || _a === void 0 ? void 0 : _a.includes("free")) ? "stamps_com" : c.carrierCode;
51
- }));
52
- const fundingSourceCarrierMetadata = carrierProfiles === null || carrierProfiles === void 0 ? void 0 : carrierProfiles.map(cp => {
48
+ const normalizeCarrierCode = (carrierCode, nickname) => carrierCode === "usps" || (nickname === null || nickname === void 0 ? void 0 : nickname.includes("free")) ? "stamps_com" : carrierCode;
49
+ const normalizeConnectedCarrierCodes = new Set(connectedCarriers === null || connectedCarriers === void 0 ? void 0 : connectedCarriers.map(c => normalizeCarrierCode(c.carrierCode, c.nickname)));
50
+ const fundingSourceCarriersData = carrierProfiles === null || carrierProfiles === void 0 ? void 0 : carrierProfiles.map(cp => {
53
51
  var _a, _b;
54
- return {
52
+ const carrier = {
55
53
  carrierProfile: cp,
56
54
  friendlyName: (_b = (_a = carrierMetadata[cp.carrierCode]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : cp.carrierCode
57
55
  };
56
+ return {
57
+ carrier,
58
+ isConnected: normalizeConnectedCarrierCodes.has(cp.carrierCode)
59
+ };
58
60
  });
59
61
  return {
60
- data: fundingSourceCarrierMetadata === null || fundingSourceCarrierMetadata === void 0 ? void 0 : fundingSourceCarrierMetadata.map(m => ({
61
- carrier: m,
62
- isConnected: normalizeConnectedCarrierCodes.has(m.carrierProfile.carrierCode)
63
- })),
62
+ data: fundingSourceCarriersData,
64
63
  error: error,
65
64
  insuranceProviderProfiles,
66
65
  isLoading: isInitialLoading || isFundingSourceMetadataLoading || isInsuranceProviderAcceptedTermsLoading,
@@ -7,6 +7,7 @@ var reactApi = require('@shipengine/react-api');
7
7
  var React = require('react');
8
8
  var reactI18next = require('react-i18next');
9
9
  var manageCarriersRow_styles = require('./manage-carriers-row.styles.cjs');
10
+ var upsTermsDisclosure = require('../../../components/ups-terms-disclosure/ups-terms-disclosure.cjs');
10
11
  var addressPreferenceContext = require('../../../components/address-preference-context/address-preference-context.cjs');
11
12
  var registerFundingSourceCarrierForm = require('../register-funding-source-carrier-form/register-funding-source-carrier-form.cjs');
12
13
  var carrierIcon = require('../../../components/carrier-icon/carrier-icon.cjs');
@@ -34,6 +35,10 @@ const ManageCarriersRow = ({
34
35
  const requirementTypes = carrierProfile.registrationRequirements.map(r => r.requirementType);
35
36
  const requiresAddress = requirementTypes.includes(reactApi.SE.MetadataRequirement.PickupAddress);
36
37
  const requiresTermsAcceptance = carrierProfile.requiredTerms.length > 0;
38
+ const requiredCarrierTerms = {
39
+ links: carrierProfile.requiredTerms.flatMap(term => term.links),
40
+ disclosure: carrierProfile.carrierCode === "ups_walleted" ? jsxRuntime.jsx(upsTermsDisclosure.UPSTermsDisclosure, {}) : undefined
41
+ };
37
42
  const handleRegister = values => _tslib.__awaiter(void 0, void 0, void 0, function* () {
38
43
  setIsSubmitting(true);
39
44
  showDropDown && setShowDropDown(false);
@@ -96,7 +101,7 @@ const ManageCarriersRow = ({
96
101
  onCancel: () => setShowDropDown(false),
97
102
  onSubmit: handleRegister,
98
103
  requirementTypes: requirementTypes,
99
- terms: carrierProfile.requiredTerms
104
+ terms: requiredCarrierTerms
100
105
  })
101
106
  })
102
107
  })]
@@ -151,9 +151,9 @@ const RegisterFundingSourceCarrierForm = ({
151
151
  children: [jsxRuntime.jsx(giger.Typography, {
152
152
  variant: "heading4",
153
153
  children: t("terms.carriersTitle")
154
- }), terms.map((term, index) => jsxRuntime.jsx(displayTerm.DisplayTerm, {
155
- term: term
156
- }, index))]
154
+ }), jsxRuntime.jsx(displayTerm.DisplayTerm, {
155
+ terms: terms
156
+ })]
157
157
  }), jsxRuntime.jsx(buttonGroup.ButtonGroup, {
158
158
  justify: "end",
159
159
  children: jsxRuntime.jsx(giger.Button, {
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var gridController = {
4
+ "grid-controller": {
5
+ showExportCSV: {
6
+ button: "Export CSV",
7
+ "generic-error-message": "We couldn’t export your CSV. Please try again.",
8
+ "limit-error": "We're sorry, but exporting more than {{LIMIT_GRID_ITEMS_EXPORT}} items is not supported at this time."
9
+ }
10
+ }
11
+ };
12
+
13
+ module.exports = gridController;
@@ -3,6 +3,7 @@
3
3
  var accountSettings = require('./account-settings.json.cjs');
4
4
  var common = require('./common.json.cjs');
5
5
  var connectCarrier = require('./connect-carrier.json.cjs');
6
+ var gridController = require('./grid-controller.json.cjs');
6
7
  var listLabels = require('./list-labels.json.cjs');
7
8
  var listShipments = require('./list-shipments.json.cjs');
8
9
  var manageCarriers = require('./manage-carriers.json.cjs');
@@ -20,6 +21,6 @@ var viewShipment = require('./view-shipment.json.cjs');
20
21
  var voidLabel = require('./void-label.json.cjs');
21
22
  var walletHistory = require('./wallet-history.json.cjs');
22
23
 
23
- var en = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, accountSettings), common.default), connectCarrier), listLabels), listShipments), manageDefaults), manageDefaults), manageFunding), manageWarehouses), onboarding.default), paymentMethod), purchaseLabel), rateDetails), registerCarrier), registerWallet), manageCarriers), vatSettings), viewShipment), voidLabel), walletHistory);
24
+ var en = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, accountSettings), common.default), connectCarrier), listLabels), listShipments), manageDefaults), manageDefaults), manageFunding), manageWarehouses), onboarding.default), paymentMethod), purchaseLabel), rateDetails), registerCarrier), registerWallet), manageCarriers), vatSettings), viewShipment), voidLabel), walletHistory), gridController);
24
25
 
25
26
  module.exports = en;
@@ -26,6 +26,11 @@ var onboarding = {
26
26
  title: "Activate ShipEngine Services",
27
27
  subtitle: "Your account includes access to services from these partners."
28
28
  },
29
+ upsDisclosure: {
30
+ title: "UPS Promotional Rates and Technology Agreements",
31
+ line1: "I have read and agree to the Terms and Conditions and the Privacy Policy, and I confirm that information I have provided is accurate and truthful.",
32
+ line2: "To start shipping with UPS, you must first agree to the following: UPS®, the UPS brandmark, UPS Ready® and the color brown are trademarks of the United Parcel Service of America, Inc. All Rights Reserved."
33
+ },
29
34
  warehouse: {
30
35
  title: "Ship From Address",
31
36
  subtitle: "Enter your default Ship From Address",
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var version = "2.25.0";
3
+ var version = "2.26.0";
4
4
 
5
5
  exports.version = version;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Creates a local file from an AxiosResponse containing a blob.
5
+ */
6
+ const createLocalFileFromBlobResponse = (type, {
7
+ data: blob
8
+ }) => {
9
+ const url = URL.createObjectURL(new Blob([blob], {
10
+ type: blob.type
11
+ }));
12
+ const fileName = type === "label" ? "labels-download" : "shipments-download";
13
+ triggerDownload(url, fileName);
14
+ };
15
+ /**
16
+ * Triggers the download of the sent URL.
17
+ * @param {string} url - The URL for the download.
18
+ * @param {string} filename - The filename for the download.
19
+ */
20
+ const triggerDownload = (url, filename) => {
21
+ const downloadLink = createInvisibleAnchor(url, filename);
22
+ document.body.appendChild(downloadLink);
23
+ downloadLink.click();
24
+ document.body.removeChild(downloadLink);
25
+ };
26
+ const createInvisibleAnchor = (url, filename) => {
27
+ const downloadLink = document.createElement("a");
28
+ downloadLink.setAttribute("href", url);
29
+ downloadLink.setAttribute("download", filename);
30
+ downloadLink.style.display = "none";
31
+ return downloadLink;
32
+ };
33
+
34
+ exports.createLocalFileFromBlobResponse = createLocalFileFromBlobResponse;
35
+ exports.triggerDownload = triggerDownload;
@@ -19,9 +19,18 @@ const replaceSpacesWithDashes = str => str === null || str === void 0 ? void 0 :
19
19
  const addSpaceBetweenWords = str => str.replace(/([a-z])([A-Z])/g, "$1 $2") // add space if there is a lowercase letter followed by an uppercase letter
20
20
  .replace(/(?<=[a-zA-Z])(\d)/g, " $1") // add space if there is a letter followed by a number
21
21
  .trim();
22
+ /**
23
+ * Converts a string from camelCase or PascalCase to snake_case
24
+ *
25
+ * @example
26
+ * toSnakeCase("helloWorld") // returns "hello_world"
27
+ * toSnakeCase("HelloWorld") // returns "hello_world"
28
+ */
29
+ const toSnakeCase = str => str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
22
30
 
23
31
  exports.addSpaceBetweenWords = addSpaceBetweenWords;
24
32
  exports.capitalizeFirstLetter = capitalizeFirstLetter;
25
33
  exports.capitalizeFirstLetterOfEachWord = capitalizeFirstLetterOfEachWord;
26
34
  exports.pascalize = pascalize;
27
35
  exports.replaceSpacesWithDashes = replaceSpacesWithDashes;
36
+ exports.toSnakeCase = toSnakeCase;
@@ -2,6 +2,7 @@
2
2
 
3
3
  var styles = require('./styles.cjs');
4
4
  var checks = require('./checks.cjs');
5
+ var files = require('./files.cjs');
5
6
  var address = require('./address.cjs');
6
7
  var featureFlags = require('./feature-flags/feature-flags.cjs');
7
8
 
@@ -12,6 +13,7 @@ exports.scopeTheme = styles.scopeTheme;
12
13
  exports.getSellerIdFromToken = checks.getSellerIdFromToken;
13
14
  exports.isOnboarded = checks.isOnboarded;
14
15
  exports.validateShipFromAddress = checks.validateShipFromAddress;
16
+ exports.createLocalFileFromBlobResponse = files.createLocalFileFromBlobResponse;
15
17
  exports.getCountries = address.getCountries;
16
18
  exports.getUsStates = address.getUsStates;
17
19
  exports.getDefaultFeatures = featureFlags.getDefaultFeatures;
@@ -88,34 +88,38 @@ const TermsAgreementForm = ({
88
88
  variant: "body1",
89
89
  children: t("terms.shipEngineTitle")
90
90
  }), jsxRuntime.jsx(displayTerm.DisplayTerm, {
91
- term: {
91
+ terms: {
92
92
  links: [{
93
93
  link: "https://www.shipengine.com/terms-of-service/",
94
- locale: "en-US",
95
- title: t("onboarding:termsAndAgreementLinkText.shipEngineToS")
94
+ title: "ShipEngine Terms of Service",
95
+ locale: "en-US"
96
96
  }, {
97
- link: "https://auctane.com/legal/privacy-policy/",
98
- locale: "en-US",
99
- title: t("onboarding:termsAndAgreementLinkText.auctanePrivacyPolicy")
97
+ link: "https://www.auctane.com/terms-of-service/",
98
+ title: "Auctane Terms of Service",
99
+ locale: "en-US"
100
+ }, {
101
+ link: "https://www.stamps.com/wallet-terms-of-service/",
102
+ title: "Stamps Wallet Terms of Service",
103
+ locale: "en-US"
100
104
  }]
101
105
  }
102
106
  }), requiredTerms.map(term => jsxRuntime.jsx(displayTerm.DisplayTerm, {
103
- term: term
107
+ terms: term
104
108
  }, term.termType)), !!carrierTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
105
109
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(giger.Typography, {
106
110
  bold: true,
107
111
  variant: "body1",
108
112
  children: t("terms.carriersTitle")
109
- }), carrierTerms.map(term => jsxRuntime.jsx(displayTerm.DisplayTerm, {
110
- term: term
111
- }, term.termType))]
113
+ }), carrierTerms.map((term, idx) => jsxRuntime.jsx(displayTerm.DisplayTerm, {
114
+ terms: term
115
+ }, idx))]
112
116
  }), enableParcelGuard && !!insuranceProviderTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
117
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(giger.Typography, {
114
118
  bold: true,
115
119
  variant: "body1",
116
120
  children: t("terms.insuranceProvidersTitle")
117
121
  }), insuranceProviderTerms.map(term => jsxRuntime.jsx(displayTerm.DisplayTerm, {
118
- term: term
122
+ terms: term
119
123
  }, term.termType))]
120
124
  })]
121
125
  }), jsxRuntime.jsx(buttonGroup.ButtonGroup, {
@@ -15,9 +15,6 @@ const styles = styles$1.createStyles({
15
15
  display: "inline-flex",
16
16
  fontWeight: styles$1.scopeTheme(theme).typography.fontWeight.normal
17
17
  }),
18
- fullWidth: {
19
- width: "100%"
20
- },
21
18
  termsWell: theme => ({
22
19
  backgroundColor: styles$1.scopeTheme(theme).palette.gray.ultraLight,
23
20
  marginBottom: styles$1.scopeTheme(theme).spacing(6),
@@ -8,8 +8,10 @@ var termsAgreementStep_styles = require('./terms-agreement-step.styles.cjs');
8
8
  var termsAgreementForm = require('../terms-agreement-form/terms-agreement-form.cjs');
9
9
  var useCarrierMetadata = require('../../../../features/manage-carriers/hooks/use-carrier-metadata.cjs');
10
10
  var elementsContextProvider = require('../../../../elements-provider/elements-context-provider.cjs');
11
+ var upsTermsDisclosure = require('../../../../components/ups-terms-disclosure/ups-terms-disclosure.cjs');
11
12
  var spacer = require('../../../../components/spacer/spacer.cjs');
12
13
  var stepHeader = require('../step-header/step-header.cjs');
14
+ var carrierIcon = require('../../../../components/carrier-icon/carrier-icon.cjs');
13
15
  var carrierLogo = require('../../../../components/carrier-logo/carrier-logo.cjs');
14
16
 
15
17
  const TermsAgreementStep = ({
@@ -31,11 +33,17 @@ const TermsAgreementStep = ({
31
33
  } = elementsContextProvider.useElements();
32
34
  const carrierFriendlyNames = useCarrierMetadata.useCarrierMetadata();
33
35
  const hideTerms = carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
34
- const carrierTerms = carrierProfilesToRegister.flatMap(c => c.requiredTerms);
36
+ const carrierTerms = carrierProfilesToRegister.map(c => {
37
+ const disclosure = c.carrierCode === "ups_walleted" ? jsxRuntime.jsx(upsTermsDisclosure.UPSTermsDisclosure, {}) : undefined;
38
+ return {
39
+ links: c.requiredTerms.flatMap(term => term.links),
40
+ disclosure
41
+ };
42
+ });
35
43
  const insuranceProviderTerms = (_a = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.flatMap(p => p.terms)) !== null && _a !== void 0 ? _a : [];
36
44
  const showParcelGuard = enableParcelGuard && ((_b = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _b !== void 0 ? _b : 0) > 0;
37
45
  const hasInsuranceToRegister = showParcelGuard && ((_c = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _c !== void 0 ? _c : 0) > 0;
38
- const hasEnabledCarriersConfigurationError = !enabledCarrierProfiles || (enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) === 0;
46
+ const hasEnabledCarriersConfigurationError = !showStampsLogo && (!enabledCarrierProfiles || (enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) === 0);
39
47
  const hasAlreadyConnectedCarriers = ((_d = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _d !== void 0 ? _d : 0) > 0 && carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
40
48
  const hasCarriersToRegister = ((_e = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _e !== void 0 ? _e : 0) > 0 && carrierProfilesToRegister.length > 0;
41
49
  // Handle case where partner has not correctly enabled carriers and there is no insurance to register
@@ -50,28 +58,33 @@ const TermsAgreementStep = ({
50
58
  children: t("errors.noCarriers.subtitle")
51
59
  });
52
60
  }
53
- const renderCarrierLogos = () => {
61
+ const renderCarrierIcons = () => {
54
62
  var _a;
55
- if (!carrierProfilesToRegister.length) return null;
56
63
  const stampsCarrierProfile = {
57
64
  carrierCode: "stamps_com",
58
65
  carrierName: (_a = carrierFriendlyNames["stamps_com"]) === null || _a === void 0 ? void 0 : _a.name
59
66
  };
67
+ let carriersToDisplay;
60
68
  // kind of a goofy way to just display stamps/usps logo without sending it in the payload to register
61
69
  // we don't want to register stamps as a carrier if it's not being used as the primary payment method
62
- const carriersToDisplay = showStampsLogo ? [stampsCarrierProfile, ...carrierProfilesToRegister] : carrierProfilesToRegister;
70
+ if (showStampsLogo) {
71
+ carriersToDisplay = [stampsCarrierProfile, ...carrierProfilesToRegister];
72
+ } else {
73
+ carriersToDisplay = carrierProfilesToRegister;
74
+ }
63
75
  return carriersToDisplay.map(p => {
64
76
  var _a;
65
- return jsxRuntime.jsx(carrierLogo.CarrierLogo, {
77
+ return jsxRuntime.jsx(carrierIcon.CarrierIcon, {
66
78
  carrierCode: p.carrierCode,
67
79
  carrierName: ((_a = carrierFriendlyNames[p.carrierCode]) === null || _a === void 0 ? void 0 : _a.name) || p.carrierCode,
68
- size: "lg"
80
+ size: giger.IconSize.SIZE_EXTRA_LARGE
69
81
  }, p.carrierCode);
70
82
  });
71
83
  };
72
84
  const renderInsuranceLogos = () => {
73
85
  if (!hasInsuranceToRegister) return null;
74
- return jsxRuntime.jsxs(jsxRuntime.Fragment, {
86
+ return jsxRuntime.jsxs("div", {
87
+ css: termsAgreementStep_styles.styles.insuranceLogosContainer,
75
88
  children: [hasCarriersToRegister && jsxRuntime.jsx(giger.Icon, {
76
89
  css: termsAgreementStep_styles.styles.plus,
77
90
  name: gigerTheme.IconNames.PLUS,
@@ -97,13 +110,13 @@ const TermsAgreementStep = ({
97
110
  }), jsxRuntime.jsx(spacer.Spacer, {
98
111
  multiplier: 4
99
112
  })]
100
- }), (hasCarriersToRegister || hasInsuranceToRegister) && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
+ }), (hasCarriersToRegister || hasInsuranceToRegister || showStampsLogo) && jsxRuntime.jsxs(jsxRuntime.Fragment, {
101
114
  children: [jsxRuntime.jsx(stepHeader.StepHeader, {
102
115
  subtitle: t("termsAgreement.subtitle"),
103
116
  title: t("termsAgreement.title")
104
117
  }), jsxRuntime.jsxs("div", {
105
118
  css: termsAgreementStep_styles.styles.carrierLogos,
106
- children: [renderCarrierLogos(), renderInsuranceLogos()]
119
+ children: [renderCarrierIcons(), renderInsuranceLogos()]
107
120
  })]
108
121
  }), jsxRuntime.jsx("div", {
109
122
  css: termsAgreementStep_styles.styles.fullWidth,
@@ -9,7 +9,8 @@ const styles = styles$1.createStyles({
9
9
  flexWrap: "wrap",
10
10
  gap: styles$1.scopeTheme(theme).spacing(1),
11
11
  justifyContent: "center",
12
- padding: `${styles$1.scopeTheme(theme).spacing(3)}px 0`
12
+ alignItems: "center",
13
+ padding: `${styles$1.scopeTheme(theme).spacing(2)}px 0`
13
14
  }),
14
15
  container: theme => ({
15
16
  alignItems: "center",
@@ -22,9 +23,14 @@ const styles = styles$1.createStyles({
22
23
  fullWidth: {
23
24
  width: "100%"
24
25
  },
25
- plus: () => ({
26
- alignItems: "center",
27
- display: "flex"
26
+ plus: theme => ({
27
+ alignSelf: "center",
28
+ paddingBottom: styles$1.scopeTheme(theme).spacing(1)
29
+ }),
30
+ insuranceLogosContainer: theme => ({
31
+ display: "flex",
32
+ gap: styles$1.scopeTheme(theme).spacing(1),
33
+ paddingTop: styles$1.scopeTheme(theme).spacing(1)
28
34
  })
29
35
  });
30
36
 
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from '@emotion/react/jsx-runtime';
1
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
2
2
  import { Link, Icon, IconSize } from '@shipengine/giger';
3
3
  import { IconNames } from '@shipengine/giger-theme';
4
4
  import { encode } from 'js-base64';
@@ -6,14 +6,23 @@ import { useTranslation } from 'react-i18next';
6
6
  import { styles } from './display-term.styles.js';
7
7
 
8
8
  const DisplayTerm = ({
9
- term
9
+ terms
10
10
  }) => {
11
11
  const {
12
12
  t
13
13
  } = useTranslation();
14
- return jsx("ul", {
14
+ const {
15
+ links,
16
+ disclosure
17
+ } = terms;
18
+ return jsxs("ul", {
15
19
  css: styles.container,
16
- children: term.links.map(({
20
+ children: [disclosure && jsx("li", {
21
+ css: {
22
+ listStyle: "none"
23
+ },
24
+ children: disclosure
25
+ }), links.map(({
17
26
  link,
18
27
  title
19
28
  }) => jsx("li", {
@@ -31,7 +40,7 @@ const DisplayTerm = ({
31
40
  size: IconSize.SIZE_SMALL
32
41
  })]
33
42
  })
34
- }, title))
43
+ }, title))]
35
44
  });
36
45
  };
37
46
 
@@ -0,0 +1,72 @@
1
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
2
+ import { Icon, Typography } from '@shipengine/giger';
3
+ import { IconNames } from '@shipengine/giger-theme';
4
+ import { useState, useRef, useEffect } from 'react';
5
+ import SvgReload from '../../../assets/reload.svg.js';
6
+ import { styles } from './error-banner.styles.js';
7
+ import { Label } from '../../history/history-card/label/label.js';
8
+ import { LinkAction } from '../../link-action/link-action.js';
9
+
10
+ // This component is a temporary solution to handle error display, design is working to improve more error patterns to display
11
+ const ErrorBanner = ({
12
+ labelText,
13
+ linkTitle,
14
+ onClick,
15
+ showReloadIcon,
16
+ duration,
17
+ onDurationEnd
18
+ }) => {
19
+ const [isVisible, setIsVisible] = useState(true);
20
+ const timerRef = useRef(null);
21
+ // Set up the timer when the component mounts or duration changes
22
+ useEffect(() => {
23
+ if (duration && duration > 0) {
24
+ // Clear any existing timer
25
+ if (timerRef.current) clearTimeout(timerRef.current);
26
+ // Set up a new timer to hide the component after the specified duration
27
+ timerRef.current = setTimeout(() => {
28
+ setIsVisible(false);
29
+ // Call the onDurationEnd callback if provided
30
+ if (onDurationEnd) {
31
+ onDurationEnd();
32
+ }
33
+ }, duration);
34
+ }
35
+ // Clean up the timer when the component unmounts or duration changes
36
+ return () => {
37
+ if (timerRef.current) clearTimeout(timerRef.current);
38
+ };
39
+ }, [duration, onDurationEnd]);
40
+ if (!isVisible) return null;
41
+ return jsxs("div", {
42
+ css: styles.errorContainer,
43
+ children: [showReloadIcon && jsx(SvgReload, {
44
+ height: 24,
45
+ width: 24
46
+ }), linkTitle && !labelText && !onClick && jsxs("div", {
47
+ css: styles.errorContent,
48
+ children: [jsx(Icon, {
49
+ name: IconNames.ALERT
50
+ }), jsx(Typography, {
51
+ component: "p",
52
+ variant: "body2",
53
+ children: linkTitle
54
+ })]
55
+ }), linkTitle && labelText && onClick && jsx(Label, {
56
+ spacing: 0,
57
+ text: labelText !== null && labelText !== void 0 ? labelText : "",
58
+ textProps: {
59
+ css: styles.errorHeading
60
+ },
61
+ variant: "subtitle",
62
+ children: jsx(LinkAction, {
63
+ css: styles.errorCTA,
64
+ isBold: false,
65
+ onClick: onClick,
66
+ title: linkTitle
67
+ })
68
+ })]
69
+ });
70
+ };
71
+
72
+ export { ErrorBanner };
@@ -1,13 +1,11 @@
1
- import { createStyles, scopeTheme } from '../../utilities/styles.js';
1
+ import { createStyles, scopeTheme } from '../../../utilities/styles.js';
2
2
 
3
3
  const styles = createStyles({
4
4
  errorContainer: theme => ({
5
5
  alignItems: "center",
6
- backgroundColor: scopeTheme(theme).palette.gray.ultraLight,
6
+ backgroundColor: scopeTheme(theme).palette.error.light,
7
7
  display: "flex",
8
8
  flexDirection: "column",
9
- paddingBottom: scopeTheme(theme).spacing(2),
10
- paddingTop: scopeTheme(theme).spacing(2),
11
9
  rowGap: scopeTheme(theme).spacing(1)
12
10
  }),
13
11
  errorCTA: theme => ({
@@ -17,6 +15,12 @@ const styles = createStyles({
17
15
  }),
18
16
  errorHeading: theme => ({
19
17
  fontSize: scopeTheme(theme).typography.fontSize.S
18
+ }),
19
+ errorContent: theme => ({
20
+ display: "flex",
21
+ alignItems: "center",
22
+ gap: scopeTheme(theme).spacing(),
23
+ color: scopeTheme(theme).palette.error.main
20
24
  })
21
25
  });
22
26
 
@@ -0,0 +1 @@
1
+ export { ErrorBanner } from './error-banner.js';
@@ -1,8 +1,13 @@
1
- import { jsx, jsxs } from '@emotion/react/jsx-runtime';
2
- import { TableRow, TableBodyCell, Skeleton, SkeletonVariant, SkeletonAnimation, Table, TableBody, Checkbox, TableHeader, TableHeaderRow, TableHeaderCell, TableFooter } from '@shipengine/giger';
1
+ import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
2
+ import { TableRow, TableBodyCell, Skeleton, SkeletonVariant, SkeletonAnimation, Button, ButtonVariant, IconTooltip, IconSize, Icon, Table, TableBody, Checkbox, TableHeader, TableHeaderRow, TableHeaderCell, TableFooter } from '@shipengine/giger';
3
+ import { IconNames } from '@shipengine/giger-theme';
3
4
  import { useState, useMemo, useCallback } from 'react';
5
+ import { useTranslation } from 'react-i18next';
4
6
  import { styles } from './grid-controller.styles.js';
7
+ import { ErrorBanner } from './error-banner/error-banner.js';
5
8
 
9
+ const LIMIT_GRID_ITEMS_EXPORT = 10000;
10
+ const ERROR_DISPLAY_DURATION = 7000;
6
11
  /**
7
12
  * @internal
8
13
  *
@@ -20,10 +25,23 @@ const GridController = ({
20
25
  isLoading = false,
21
26
  useCheckboxes = false,
22
27
  filters,
23
- emptyContent
28
+ emptyContent,
29
+ showExportCSV = false,
30
+ onClickExportCSV,
31
+ totalAmountGridItems,
32
+ hasTrackingStatusFilter,
33
+ hasExportCSVError = false,
34
+ isExportCSVLoading = false,
35
+ onExportErrorDurationEnd
24
36
  }) => {
25
37
  var _a, _b, _c;
26
38
  const [isChecked, setIsChecked] = useState((_a = data === null || data === void 0 ? void 0 : data.map(() => false)) !== null && _a !== void 0 ? _a : []);
39
+ const {
40
+ t
41
+ } = useTranslation(["common", "grid-controller"]);
42
+ const dataAvailable = !!data.length;
43
+ const isItemsOverExportLimit = !!((totalAmountGridItems !== null && totalAmountGridItems !== void 0 ? totalAmountGridItems : 0) > LIMIT_GRID_ITEMS_EXPORT);
44
+ const isDisableExportButton = isItemsOverExportLimit || !dataAvailable;
27
45
  const columnHeaderContents = useMemo(() => columns.map(column => column.headerContent), [columns]);
28
46
  const loadingRows = useMemo(() => {
29
47
  const items = [];
@@ -63,8 +81,36 @@ const GridController = ({
63
81
  css: styles.wrapper,
64
82
  children: [filters && jsx("div", {
65
83
  css: styles.filters,
66
- children: filters
67
- }), data.length === 0 && emptyContent ? emptyContent : jsx(Table, {
84
+ children: jsxs(Fragment, {
85
+ children: [filters, showExportCSV && !hasTrackingStatusFilter && jsxs(Button, {
86
+ bold: false,
87
+ css: styles.button,
88
+ disabled: isItemsOverExportLimit || !dataAvailable || hasExportCSVError,
89
+ isLoading: isExportCSVLoading && !isDisableExportButton,
90
+ onClick: onClickExportCSV,
91
+ type: "button",
92
+ variant: ButtonVariant.FILLED,
93
+ children: [isItemsOverExportLimit ? jsx(IconTooltip, {
94
+ css: styles.iconTooltip,
95
+ icon: IconNames.DOWNLOAD,
96
+ size: IconSize.SIZE_MEDIUM,
97
+ children: jsx("div", {
98
+ children: t("grid-controller:showExportCSV.limit-error", {
99
+ LIMIT_GRID_ITEMS_EXPORT: new Intl.NumberFormat().format(LIMIT_GRID_ITEMS_EXPORT)
100
+ })
101
+ })
102
+ }) : jsx(Icon, {
103
+ css: styles.iconTooltip,
104
+ name: IconNames.UPLOAD,
105
+ size: IconSize.SIZE_MEDIUM
106
+ }), t("grid-controller:showExportCSV.button")]
107
+ })]
108
+ })
109
+ }), hasExportCSVError && !isDisableExportButton && jsx(ErrorBanner, {
110
+ duration: ERROR_DISPLAY_DURATION,
111
+ linkTitle: t("grid-controller:showExportCSV.generic-error-message"),
112
+ onDurationEnd: onExportErrorDurationEnd
113
+ }), !dataAvailable && emptyContent ? emptyContent : jsx(Table, {
68
114
  "data-testid": "grid",
69
115
  footer: footerContent && !isLoading && jsx(TableFooter, {
70
116
  css: styles.tableFooter,
@@ -5,10 +5,17 @@ const styles = createStyles({
5
5
  width: scopeTheme(theme).spacing(6)
6
6
  }),
7
7
  filters: theme => ({
8
+ display: "flex",
8
9
  backgroundColor: scopeTheme(theme).palette.white,
9
10
  borderBottom: `1px solid ${scopeTheme(theme).palette.gray[200]}`,
10
11
  padding: scopeTheme(theme).spacing()
11
12
  }),
13
+ button: () => ({
14
+ marginLeft: "auto"
15
+ }),
16
+ iconTooltip: theme => ({
17
+ marginRight: scopeTheme(theme).spacing()
18
+ }),
12
19
  skeletonTableRow: () => ({
13
20
  height: "68px"
14
21
  }),
@@ -28,7 +35,10 @@ const styles = createStyles({
28
35
  wrapper: theme => Object.assign({
29
36
  height: "auto",
30
37
  overflow: "hidden"
31
- }, scopeTheme(theme).getComponentOverride("Table"))
38
+ }, scopeTheme(theme).getComponentOverride("Table")),
39
+ filtersWrapper: () => ({
40
+ display: "flex"
41
+ })
32
42
  });
33
43
 
34
44
  export { styles };
@@ -6,8 +6,8 @@ import { useMemo } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
  import SvgFunding from '../../../assets/funding.svg.js';
8
8
  import { styles } from './history-card.styles.js';
9
- import { Label } from './label/label.js';
10
9
  import { useElements } from '../../../elements-provider/elements-context-provider.js';
10
+ import { Label } from './label/label.js';
11
11
 
12
12
  const HistoryCard = ({
13
13
  transaction,