@shipengine/elements 2.24.1 → 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 (300) hide show
  1. package/README.md +187 -6
  2. package/dist/cjs/components/display-term/display-term.cjs +13 -4
  3. package/dist/cjs/components/field/credit-card-input/credit-card-input.cjs +46 -29
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +29 -5
  5. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +8 -3
  6. package/dist/cjs/components/field/rate-select/rate-select.cjs +26 -5
  7. package/dist/cjs/components/forms/address-form/address-form-schema.cjs +3 -3
  8. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +57 -4
  9. package/dist/cjs/components/grid-controller/error-banner/error-banner.cjs +74 -0
  10. package/dist/cjs/components/{error-display/error-display.styles.cjs → grid-controller/error-banner/error-banner.styles.cjs} +8 -4
  11. package/dist/cjs/components/grid-controller/error-banner/index.cjs +7 -0
  12. package/dist/cjs/components/grid-controller/grid-controller.cjs +49 -3
  13. package/dist/cjs/components/grid-controller/grid-controller.styles.cjs +11 -1
  14. package/dist/cjs/components/history/history-card/history-card.cjs +1 -1
  15. package/dist/cjs/components/history/history-card-extension/history-card-extension.cjs +0 -1
  16. package/dist/cjs/components/service-card/service-card.cjs +4 -4
  17. package/dist/cjs/components/service-card/service-card.styles.cjs +5 -2
  18. package/dist/cjs/components/service-point-display/service-point-display.cjs +1 -36
  19. package/dist/cjs/components/service-point-display/service-point-display.styles.cjs +0 -12
  20. package/dist/cjs/components/shipment-not-found-error/index.cjs +7 -0
  21. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.cjs +40 -0
  22. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.styles.cjs +24 -0
  23. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +11 -3
  24. package/dist/cjs/components/ups-terms-disclosure/index.cjs +7 -0
  25. package/dist/cjs/components/ups-terms-disclosure/ups-terms-disclosure.cjs +35 -0
  26. package/dist/cjs/elements/labels-grid/hooks/use-labels-grid.cjs +45 -5
  27. package/dist/cjs/elements/labels-grid/labels-grid.cjs +24 -6
  28. package/dist/cjs/elements/purchase-label/components/rate-form/rate-form.cjs +13 -3
  29. package/dist/cjs/elements/purchase-label/components/rate-form/rate-schema.cjs +7 -2
  30. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +2 -0
  31. package/dist/cjs/elements/purchase-label/hooks/use-rate-options.cjs +31 -2
  32. package/dist/cjs/elements/purchase-label/hooks/use-rates-form.cjs +14 -18
  33. package/dist/cjs/elements/purchase-label/hooks/use-request-rates.cjs +20 -20
  34. package/dist/cjs/elements/purchase-label/purchase-label.cjs +4 -1
  35. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.cjs +16 -31
  36. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.styles.cjs +0 -19
  37. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.cjs +54 -0
  38. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.styles.cjs +27 -0
  39. package/dist/cjs/elements/shipments-grid/hooks/use-shipments-grid.cjs +41 -3
  40. package/dist/cjs/elements/shipments-grid/shipments-grid.cjs +18 -3
  41. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +9 -10
  42. package/dist/cjs/features/manage-carriers/manage-carriers-row/manage-carriers-row.cjs +6 -1
  43. package/dist/cjs/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.cjs +3 -3
  44. package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +56 -18
  45. package/dist/cjs/hooks/use-configure-shipment.cjs +32 -11
  46. package/dist/cjs/hooks/use-helpers.cjs +4 -1
  47. package/dist/cjs/index.cjs +15 -12
  48. package/dist/cjs/locales/en/account-settings.json.cjs +6 -0
  49. package/dist/cjs/locales/en/common.json.cjs +2 -0
  50. package/dist/cjs/locales/en/grid-controller.json.cjs +13 -0
  51. package/dist/cjs/locales/en/index.cjs +2 -1
  52. package/dist/cjs/locales/en/onboarding.json.cjs +5 -0
  53. package/dist/cjs/locales/en/purchase-label.json.cjs +5 -3
  54. package/dist/cjs/package.json.cjs +1 -1
  55. package/dist/cjs/utilities/address.cjs +29 -0
  56. package/dist/cjs/utilities/files.cjs +35 -0
  57. package/dist/cjs/utilities/formatString.cjs +9 -0
  58. package/dist/cjs/utilities/index.cjs +5 -0
  59. package/dist/cjs/utilities/money.cjs +14 -0
  60. package/dist/cjs/utilities/rate-warning-messages.cjs +25 -0
  61. package/dist/cjs/utilities/shipengine/warehouses.cjs +2 -1
  62. package/dist/cjs/workflows/connect-external-carrier/connect-external-carrier.cjs +7 -3
  63. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +11 -3
  64. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +1 -1
  65. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +17 -1
  66. package/dist/cjs/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.cjs +4 -1
  67. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +18 -11
  68. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.cjs +0 -3
  69. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +36 -12
  70. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.cjs +10 -4
  71. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +12 -12
  72. package/dist/esm/components/display-term/display-term.js +14 -5
  73. package/dist/esm/components/field/credit-card-input/credit-card-input.js +47 -30
  74. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +30 -6
  75. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +8 -3
  76. package/dist/esm/components/field/rate-select/rate-select.js +26 -5
  77. package/dist/esm/components/forms/address-form/address-form-schema.js +3 -3
  78. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +58 -5
  79. package/dist/esm/components/grid-controller/error-banner/error-banner.js +72 -0
  80. package/dist/esm/components/{error-display/error-display.styles.js → grid-controller/error-banner/error-banner.styles.js} +8 -4
  81. package/dist/esm/components/grid-controller/error-banner/index.js +1 -0
  82. package/dist/esm/components/grid-controller/grid-controller.js +51 -5
  83. package/dist/esm/components/grid-controller/grid-controller.styles.js +11 -1
  84. package/dist/esm/components/history/history-card/history-card.js +1 -1
  85. package/dist/esm/components/history/history-card-extension/history-card-extension.js +0 -1
  86. package/dist/esm/components/service-card/service-card.js +4 -4
  87. package/dist/esm/components/service-card/service-card.styles.js +5 -2
  88. package/dist/esm/components/service-point-display/service-point-display.js +2 -37
  89. package/dist/esm/components/service-point-display/service-point-display.styles.js +0 -12
  90. package/dist/esm/components/shipment-not-found-error/index.js +1 -0
  91. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +38 -0
  92. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.styles.js +22 -0
  93. package/dist/esm/components/suspend-purchase/suspend-purchase.js +11 -3
  94. package/dist/esm/components/ups-terms-disclosure/index.js +1 -0
  95. package/dist/esm/components/ups-terms-disclosure/ups-terms-disclosure.js +33 -0
  96. package/dist/esm/elements/labels-grid/hooks/use-labels-grid.js +46 -6
  97. package/dist/esm/elements/labels-grid/labels-grid.js +24 -6
  98. package/dist/esm/elements/purchase-label/components/rate-form/rate-form.js +14 -4
  99. package/dist/esm/elements/purchase-label/components/rate-form/rate-schema.js +7 -2
  100. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +2 -0
  101. package/dist/esm/elements/purchase-label/hooks/use-rate-options.js +31 -2
  102. package/dist/esm/elements/purchase-label/hooks/use-rates-form.js +14 -18
  103. package/dist/esm/elements/purchase-label/hooks/use-request-rates.js +20 -20
  104. package/dist/esm/elements/purchase-label/purchase-label.js +4 -1
  105. package/dist/esm/elements/shipment-summary/components/label-display/label-card.js +18 -33
  106. package/dist/esm/elements/shipment-summary/components/label-display/label-card.styles.js +0 -19
  107. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.js +52 -0
  108. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.styles.js +25 -0
  109. package/dist/esm/elements/shipments-grid/hooks/use-shipments-grid.js +42 -4
  110. package/dist/esm/elements/shipments-grid/shipments-grid.js +18 -3
  111. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +9 -10
  112. package/dist/esm/features/manage-carriers/manage-carriers-row/manage-carriers-row.js +7 -2
  113. package/dist/esm/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.js +3 -3
  114. package/dist/esm/features/payment-method-settings/payment-method-settings.js +57 -19
  115. package/dist/esm/hooks/use-configure-shipment.js +33 -12
  116. package/dist/esm/hooks/use-helpers.js +4 -1
  117. package/dist/esm/index.js +1 -0
  118. package/dist/esm/locales/en/account-settings.json.js +6 -0
  119. package/dist/esm/locales/en/common.json.js +2 -0
  120. package/dist/esm/locales/en/grid-controller.json.js +11 -0
  121. package/dist/esm/locales/en/index.js +2 -1
  122. package/dist/esm/locales/en/onboarding.json.js +5 -0
  123. package/dist/esm/locales/en/purchase-label.json.js +5 -3
  124. package/dist/esm/package.json.js +1 -1
  125. package/dist/esm/utilities/address.js +26 -0
  126. package/dist/esm/utilities/files.js +32 -0
  127. package/dist/esm/utilities/formatString.js +9 -1
  128. package/dist/esm/utilities/index.js +2 -0
  129. package/dist/esm/utilities/money.js +14 -1
  130. package/dist/esm/utilities/rate-warning-messages.js +23 -0
  131. package/dist/esm/utilities/shipengine/warehouses.js +2 -1
  132. package/dist/esm/workflows/connect-external-carrier/connect-external-carrier.js +7 -3
  133. package/dist/esm/workflows/label-workflow/label-workflow.js +11 -3
  134. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +1 -1
  135. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +17 -1
  136. package/dist/esm/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.js +4 -1
  137. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +18 -11
  138. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.js +0 -3
  139. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +37 -13
  140. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.js +10 -4
  141. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +12 -12
  142. package/dist/types/components/display-term/display-term.d.ts +3 -3
  143. package/dist/types/components/display-term/display-term.d.ts.map +1 -1
  144. package/dist/types/components/field/credit-card-input/credit-card-input.d.ts.map +1 -1
  145. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +4 -2
  146. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  147. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +7 -2
  148. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  149. package/dist/types/components/field/rate-select/rate-select.d.ts +1 -0
  150. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  151. package/dist/types/components/forms/address-form/address-form-schema.d.ts.map +1 -1
  152. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -1
  153. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
  154. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts +10 -0
  155. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts.map +1 -0
  156. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts +24 -0
  157. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts.map +1 -0
  158. package/dist/types/components/grid-controller/error-banner/index.d.ts +2 -0
  159. package/dist/types/components/grid-controller/error-banner/index.d.ts.map +1 -0
  160. package/dist/types/components/grid-controller/grid-controller.d.ts +8 -1
  161. package/dist/types/components/grid-controller/grid-controller.d.ts.map +1 -1
  162. package/dist/types/components/grid-controller/grid-controller.styles.d.ts +10 -0
  163. package/dist/types/components/grid-controller/grid-controller.styles.d.ts.map +1 -1
  164. package/dist/types/components/history/history-card-extension/history-card-extension.d.ts.map +1 -1
  165. package/dist/types/components/service-card/service-card.d.ts +1 -1
  166. package/dist/types/components/service-card/service-card.d.ts.map +1 -1
  167. package/dist/types/components/service-card/service-card.styles.d.ts +4 -1
  168. package/dist/types/components/service-card/service-card.styles.d.ts.map +1 -1
  169. package/dist/types/components/service-point-display/service-point-display.d.ts.map +1 -1
  170. package/dist/types/components/service-point-display/service-point-display.styles.d.ts +0 -12
  171. package/dist/types/components/service-point-display/service-point-display.styles.d.ts.map +1 -1
  172. package/dist/types/components/shipment-not-found-error/index.d.ts +2 -0
  173. package/dist/types/components/shipment-not-found-error/index.d.ts.map +1 -0
  174. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +6 -0
  175. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -0
  176. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts +19 -0
  177. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts.map +1 -0
  178. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +4 -2
  179. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  180. package/dist/types/components/ups-terms-disclosure/index.d.ts +2 -0
  181. package/dist/types/components/ups-terms-disclosure/index.d.ts.map +1 -0
  182. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts +2 -0
  183. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts.map +1 -0
  184. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts +7 -2
  185. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts.map +1 -1
  186. package/dist/types/elements/labels-grid/labels-grid.d.ts +29 -3
  187. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  188. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +23 -1
  189. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  190. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +23 -1
  191. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  192. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +23 -1
  193. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  194. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +23 -1
  195. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  196. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +23 -1
  197. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  198. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts +1 -1
  199. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts.map +1 -1
  200. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts +10 -1
  201. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts.map +1 -1
  202. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts +2 -1
  203. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts.map +1 -1
  204. package/dist/types/elements/purchase-label/hooks/use-rate-options.d.ts.map +1 -1
  205. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts +2 -2
  206. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts.map +1 -1
  207. package/dist/types/elements/purchase-label/hooks/use-request-rates.d.ts.map +1 -1
  208. package/dist/types/elements/purchase-label/purchase-label.d.ts +23 -1
  209. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  210. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +23 -1
  211. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  212. package/dist/types/elements/shipment-summary/components/label-display/label-card.d.ts.map +1 -1
  213. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts +0 -19
  214. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts.map +1 -1
  215. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts +8 -0
  216. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts.map +1 -0
  217. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts +22 -0
  218. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts.map +1 -0
  219. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +23 -1
  220. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  221. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts +6 -1
  222. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  223. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +32 -2
  224. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  225. package/dist/types/elements/theme-creator/theme-creator.d.ts +23 -1
  226. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  227. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +23 -1
  228. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  229. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +23 -1
  230. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  231. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +23 -1
  232. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  233. package/dist/types/elements/void-label/void-label.d.ts +23 -1
  234. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  235. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  236. package/dist/types/features/manage-carriers/manage-carriers-row/manage-carriers-row.d.ts.map +1 -1
  237. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts +3 -2
  238. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts.map +1 -1
  239. package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
  240. package/dist/types/hooks/use-configure-shipment.d.ts +1 -0
  241. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  242. package/dist/types/hooks/use-helpers.d.ts +2 -0
  243. package/dist/types/hooks/use-helpers.d.ts.map +1 -1
  244. package/dist/types/index.d.ts +1 -1
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/locales/en/index.d.ts +23 -1
  247. package/dist/types/locales/en/index.d.ts.map +1 -1
  248. package/dist/types/types/index.d.ts +5 -4
  249. package/dist/types/types/index.d.ts.map +1 -1
  250. package/dist/types/types/rates.d.ts +1 -0
  251. package/dist/types/types/rates.d.ts.map +1 -1
  252. package/dist/types/types/terms-with-disclosure.d.ts +7 -0
  253. package/dist/types/types/terms-with-disclosure.d.ts.map +1 -0
  254. package/dist/types/utilities/address.d.ts +21 -0
  255. package/dist/types/utilities/address.d.ts.map +1 -0
  256. package/dist/types/utilities/feature-flags/types.d.ts +5 -1
  257. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  258. package/dist/types/utilities/files.d.ts +12 -0
  259. package/dist/types/utilities/files.d.ts.map +1 -0
  260. package/dist/types/utilities/formatString.d.ts +8 -0
  261. package/dist/types/utilities/formatString.d.ts.map +1 -1
  262. package/dist/types/utilities/index.d.ts +2 -0
  263. package/dist/types/utilities/index.d.ts.map +1 -1
  264. package/dist/types/utilities/money.d.ts +6 -0
  265. package/dist/types/utilities/money.d.ts.map +1 -1
  266. package/dist/types/utilities/rate-warning-messages.d.ts +15 -0
  267. package/dist/types/utilities/rate-warning-messages.d.ts.map +1 -0
  268. package/dist/types/workflows/account-settings/account-settings.d.ts +23 -1
  269. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  270. package/dist/types/workflows/carrier-services/carrier-services.d.ts +23 -1
  271. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  272. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +23 -1
  273. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  274. package/dist/types/workflows/label-workflow/label-workflow.d.ts +23 -1
  275. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  276. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  277. package/dist/types/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.d.ts.map +1 -1
  278. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +4 -2
  279. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  280. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts +0 -3
  281. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts.map +1 -1
  282. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts +3 -1
  283. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  284. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts +8 -2
  285. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts.map +1 -1
  286. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -0
  287. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  288. package/dist/types/workflows/onboarding/onboarding.d.ts +23 -1
  289. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  290. package/package.json +3 -3
  291. package/dist/cjs/components/error-display/error-display.cjs +0 -34
  292. package/dist/cjs/components/error-display/index.cjs +0 -7
  293. package/dist/esm/components/error-display/error-display.js +0 -32
  294. package/dist/esm/components/error-display/index.js +0 -1
  295. package/dist/types/components/error-display/error-display.d.ts +0 -7
  296. package/dist/types/components/error-display/error-display.d.ts.map +0 -1
  297. package/dist/types/components/error-display/error-display.styles.d.ts +0 -20
  298. package/dist/types/components/error-display/error-display.styles.d.ts.map +0 -1
  299. package/dist/types/components/error-display/index.d.ts +0 -2
  300. package/dist/types/components/error-display/index.d.ts.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { jsxs, jsx } from '@emotion/react/jsx-runtime';
2
+ import { Typography } from '@shipengine/giger';
3
+ import { createStyles, scopeTheme } from '../../utilities/styles.js';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ const styles = createStyles({
7
+ upsDisclosure: theme => ({
8
+ display: "flex",
9
+ flexDirection: "column",
10
+ gap: scopeTheme(theme).spacing(1)
11
+ })
12
+ });
13
+ const UPSTermsDisclosure = () => {
14
+ const {
15
+ t
16
+ } = useTranslation();
17
+ return jsxs("div", {
18
+ css: styles.upsDisclosure,
19
+ children: [jsx(Typography, {
20
+ bold: true,
21
+ variant: "body1",
22
+ children: t("onboarding:upsDisclosure.title")
23
+ }), jsx(Typography, {
24
+ variant: "body1",
25
+ children: t("onboarding:upsDisclosure.line1")
26
+ }), jsx(Typography, {
27
+ variant: "body1",
28
+ children: t("onboarding:upsDisclosure.line2")
29
+ })]
30
+ });
31
+ };
32
+
33
+ export { UPSTermsDisclosure };
@@ -1,6 +1,7 @@
1
1
  import { useTheme } from '@emotion/react';
2
2
  import { useGetServiceName } from '../../../hooks/use-get-service-name.js';
3
- import { useListLabels, useListSalesOrderShipments, useGetLabel } from '@shipengine/react-api';
3
+ import { useListLabels, useExportLabels, useListSalesOrderShipments, useGetLabel } from '@shipengine/react-api';
4
+ import { createLocalFileFromBlobResponse } from '../../../utilities/files.js';
4
5
  import { scopeTheme } from '../../../utilities/styles.js';
5
6
  import { useState, useCallback, useEffect, useMemo } from 'react';
6
7
  import { useTrackingStatusFilter } from './use-tracking-status-filter.js';
@@ -14,9 +15,10 @@ const useLabelsGrid = ({
14
15
  showStatusFilter,
15
16
  showTrackingStatusFilter,
16
17
  fetchShipments,
17
- sortDir
18
+ sortDir,
19
+ columns
18
20
  }) => {
19
- var _a, _b, _c, _d, _e, _f, _g, _h;
21
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
20
22
  const initialFilters = {
21
23
  labelId: {
22
24
  enabled: !!showLabelIdFilter,
@@ -45,6 +47,7 @@ const useLabelsGrid = ({
45
47
  pagerProps
46
48
  } = usePager(PAGE_SIZE);
47
49
  const [filters, setFilters] = useState(initialFilters);
50
+ const [enabledLabelsExport, setEnabledLabelsExport] = useState(false);
48
51
  const clearAllFilters = () => {
49
52
  setFilters(initialFilters);
50
53
  };
@@ -132,6 +135,39 @@ const useLabelsGrid = ({
132
135
  sortDir: sortDir !== null && sortDir !== void 0 ? sortDir : "desc"
133
136
  }
134
137
  });
138
+ const {
139
+ data: exportLabelsData,
140
+ isInitialLoading: isExportLabelsinitialLoading,
141
+ isRefetching,
142
+ isError: isExportLabelsError
143
+ } = useExportLabels({
144
+ enabled: enabledLabelsExport,
145
+ queryFnParams: {
146
+ labelStatus: ((_g = filters.status) === null || _g === void 0 ? void 0 : _g.value) || labelStatus,
147
+ labelId: ((_h = filters.labelId) === null || _h === void 0 ? void 0 : _h.value) || undefined,
148
+ shipmentId: filters.shipmentId.value || undefined,
149
+ sortDir: sortDir !== null && sortDir !== void 0 ? sortDir : "desc",
150
+ columns
151
+ }
152
+ });
153
+ useEffect(() => {
154
+ if (exportLabelsData && !isExportLabelsinitialLoading && !isRefetching) {
155
+ createLocalFileFromBlobResponse("label", exportLabelsData);
156
+ setEnabledLabelsExport(false);
157
+ }
158
+ }, [isExportLabelsinitialLoading, isRefetching, exportLabelsData]);
159
+ // This function will be called when the error display duration ends
160
+ const onExportErrorDurationEnd = () => {
161
+ setEnabledLabelsExport(false);
162
+ };
163
+ const onClickExportLabelsCSV = () => {
164
+ if (exportLabelsData) {
165
+ createLocalFileFromBlobResponse("label", exportLabelsData);
166
+ setEnabledLabelsExport(false);
167
+ } else {
168
+ setEnabledLabelsExport(true);
169
+ }
170
+ };
135
171
  const labels = useMemo(() => {
136
172
  // If tracking status filter is active, use the filtered labels from the hook
137
173
  if (isTrackingStatusFilterActive) {
@@ -167,8 +203,8 @@ const useLabelsGrid = ({
167
203
  data: labelFilterData,
168
204
  isError: isLabelFilterError,
169
205
  isInitialLoading: isLabelFilterLoading
170
- } = useGetLabel(((_g = filters.labelId) === null || _g === void 0 ? void 0 : _g.value) || undefined);
171
- const isLabelFilterActive = (_h = filters.labelId) === null || _h === void 0 ? void 0 : _h.value;
206
+ } = useGetLabel(((_j = filters.labelId) === null || _j === void 0 ? void 0 : _j.value) || undefined);
207
+ const isLabelFilterActive = (_k = filters.labelId) === null || _k === void 0 ? void 0 : _k.value;
172
208
  const isStatusFilteredOut = (status, filter) => {
173
209
  return (filter === null || filter === void 0 ? void 0 : filter.length) && !filter.includes(status);
174
210
  };
@@ -225,13 +261,16 @@ const useLabelsGrid = ({
225
261
  return [];
226
262
  };
227
263
  return {
264
+ onClickExportLabelsCSV,
228
265
  clearAllFilters,
229
266
  filters,
230
267
  getGridData,
231
268
  hasMoreUnfetchedResults: isTrackingStatusFilterActive ? hasMoreUnfetchedResults : false,
232
269
  isAnyFilterActive,
270
+ isExportLabelsError,
233
271
  isError: isListLabelsError || isListShipmentsError && fetchShipments,
234
272
  isFetchingNextPage: isTrackingStatusFilterActive ? isFetchingNextPage : false,
273
+ onExportErrorDurationEnd,
235
274
  // Calculate isLoading based on which query should be active
236
275
  isLoading:
237
276
  // Always include label filter loading when label ID filter is active
@@ -249,7 +288,8 @@ const useLabelsGrid = ({
249
288
  totalElements: labelFilteredById ? 1 : isTrackingStatusFilterActive ? (statusFilteredPaginationInfo === null || statusFilteredPaginationInfo === void 0 ? void 0 : statusFilteredPaginationInfo.totalCount) || 0 : (listLabelsData === null || listLabelsData === void 0 ? void 0 : listLabelsData.total) || 0
250
289
  },
251
290
  setFilters: onSetFilters,
252
- shouldShowFilters: isAnyFilterEnabled
291
+ shouldShowFilters: isAnyFilterEnabled,
292
+ isExportLabelsLoading: isExportLabelsinitialLoading || isRefetching
253
293
  };
254
294
  };
255
295
 
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
2
2
  import { useSortableQuery } from '../../hooks/use-sortable-query.js';
3
3
  import { EmptyState, Button, Tag, TagColor, TagVariant, Typography, Next } from '@shipengine/giger';
4
+ import { toSnakeCase } from '../../utilities/formatString.js';
4
5
  import { useRef, useMemo, useEffect, useCallback } from 'react';
5
6
  import { useTranslation } from 'react-i18next';
6
7
  import { useLabelsGrid } from './hooks/use-labels-grid.js';
@@ -30,9 +31,10 @@ const Component = ({
30
31
  onRowClick,
31
32
  onClickExternalOrderId,
32
33
  onClickExternalShipmentId,
33
- onClickShipmentNumber
34
+ onClickShipmentNumber,
35
+ onLabelsCSVExportClick
34
36
  }) => {
35
- var _a, _b, _c;
37
+ var _a, _b, _c, _d;
36
38
  const {
37
39
  t
38
40
  } = useTranslation(["common", "list-labels"]);
@@ -74,6 +76,7 @@ const Component = ({
74
76
  const showShipmentIdFilter = shipmentIdColumn && ((_b = shipmentIdColumn.allowFilter) !== null && _b !== void 0 ? _b : true);
75
77
  const showStatusFilter = statusColumn && ((_c = statusColumn.allowFilter) !== null && _c !== void 0 ? _c : true);
76
78
  const showTrackingStatusFilter = trackingStatusColumn && !!trackingStatusColumn.allowFilter;
79
+ const columnsArray = (_d = features === null || features === void 0 ? void 0 : features.columns) === null || _d === void 0 ? void 0 : _d.map(column => toSnakeCase(column.name));
77
80
  const {
78
81
  labels,
79
82
  getGridData,
@@ -86,7 +89,11 @@ const Component = ({
86
89
  pageConfig,
87
90
  isAnyFilterActive,
88
91
  shouldShowFilters,
89
- clearAllFilters
92
+ clearAllFilters,
93
+ onClickExportLabelsCSV,
94
+ isExportLabelsError,
95
+ isExportLabelsLoading,
96
+ onExportErrorDurationEnd
90
97
  } = useLabelsGrid({
91
98
  fetchShipments: !!shipmentNumberColumn,
92
99
  labelStatus,
@@ -94,7 +101,8 @@ const Component = ({
94
101
  showShipmentIdFilter,
95
102
  showStatusFilter,
96
103
  showTrackingStatusFilter,
97
- sortDir: sortState.dir
104
+ sortDir: sortState.dir,
105
+ columns: columnsArray
98
106
  });
99
107
  useEffect(() => {
100
108
  if (prevStatus.current !== labelStatus) {
@@ -381,7 +389,7 @@ const Component = ({
381
389
  });
382
390
  }
383
391
  return cols;
384
- }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
392
+ }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, onClickTrackingNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
385
393
  const emptyContentComponent = useMemo(() => {
386
394
  if (isLoading) {
387
395
  return undefined;
@@ -432,8 +440,18 @@ const Component = ({
432
440
  showPagination: pageConfig.showPagination,
433
441
  total: pageConfig.totalElements
434
442
  }),
443
+ hasExportCSVError: isExportLabelsError,
444
+ hasTrackingStatusFilter: showTrackingStatusFilter,
445
+ isExportCSVLoading: isExportLabelsLoading,
435
446
  isLoading: isLoading,
436
- onRowClick: onRowClick
447
+ onClickExportCSV: () => {
448
+ onClickExportLabelsCSV();
449
+ onLabelsCSVExportClick === null || onLabelsCSVExportClick === void 0 ? void 0 : onLabelsCSVExportClick();
450
+ },
451
+ onExportErrorDurationEnd: onExportErrorDurationEnd,
452
+ onRowClick: onRowClick,
453
+ showExportCSV: features === null || features === void 0 ? void 0 : features.showExportCSVButton,
454
+ totalAmountGridItems: pageConfig.totalElements
437
455
  }), globalFeatures.poweredByShipEngine && jsxs(Fragment, {
438
456
  children: [jsx(Spacer, {}), jsx(PoweredByShipEngine, {})]
439
457
  })]
@@ -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",