@dropins/storefront-checkout 0.1.0-alpha33 → 0.1.0-alpha35

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 (359) hide show
  1. package/__generated__/types.d.ts +16556 -0
  2. package/api/errors/errors.d.ts +27 -0
  3. package/api/errors/index.d.ts +2 -0
  4. package/api/estimateShippingMethods/estimateShippingMethods.d.ts +13 -0
  5. package/api/estimateShippingMethods/fixtures.d.ts +8 -0
  6. package/api/estimateShippingMethods/graphql/estimateShippingMethods.graphql.d.ts +2 -0
  7. package/api/estimateShippingMethods/graphql/index.d.ts +2 -0
  8. package/api/estimateShippingMethods/index.d.ts +2 -0
  9. package/api/fetch-graphql/fetch-graphql.d.ts +8 -0
  10. package/api/fetch-graphql/index.d.ts +2 -0
  11. package/api/fetchAddressFormFields/fetchAddressFormFields.d.ts +4 -0
  12. package/api/fetchAddressFormFields/fixtures.d.ts +5 -0
  13. package/api/fetchAddressFormFields/graphql/fetchAddressFormFields.graphql.d.ts +2 -0
  14. package/api/fetchAddressFormFields/index.d.ts +3 -0
  15. package/api/getCart/fixtures.d.ts +12 -0
  16. package/api/getCart/getCart.d.ts +2 -0
  17. package/api/getCart/graphql/getCart.graphql.d.ts +4 -0
  18. package/api/getCart/graphql/index.d.ts +2 -0
  19. package/api/getCart/index.d.ts +2 -0
  20. package/api/getCountries/fixtures.d.ts +6 -0
  21. package/api/getCountries/getCountries.d.ts +4 -0
  22. package/api/getCountries/graphql/getCountries.graphql.d.ts +2 -0
  23. package/api/getCountries/index.d.ts +2 -0
  24. package/api/getCustomer/getCustomer.d.ts +4 -0
  25. package/api/getCustomer/graphql/getCustomer.graphql.d.ts +2 -0
  26. package/api/getCustomer/graphql/index.d.ts +2 -0
  27. package/api/getCustomer/index.d.ts +2 -0
  28. package/api/getRegions/fixtures.d.ts +5 -0
  29. package/api/getRegions/getRegions.d.ts +5 -0
  30. package/api/getRegions/graphql/getRegions.graphql.d.ts +2 -0
  31. package/api/getRegions/index.d.ts +2 -0
  32. package/api/getStoreConfig/getStoreConfig.d.ts +4 -0
  33. package/api/getStoreConfig/graphql/getStoreConfig.graphql.d.ts +2 -0
  34. package/api/getStoreConfig/index.d.ts +2 -0
  35. package/api/index.d.ts +19 -0
  36. package/api/initialize/index.d.ts +2 -0
  37. package/api/initialize/initialize.d.ts +10 -0
  38. package/api/isEmailAvailable/graphql/isEmailAvailable.graphql.d.ts +2 -0
  39. package/api/isEmailAvailable/index.d.ts +2 -0
  40. package/api/isEmailAvailable/isEmailAvailable.d.ts +4 -0
  41. package/api/placeOrder/fixtures.d.ts +6 -0
  42. package/api/placeOrder/graphql/index.d.ts +2 -0
  43. package/api/placeOrder/graphql/placeOrder.graphql.d.ts +2 -0
  44. package/api/placeOrder/index.d.ts +2 -0
  45. package/api/placeOrder/placeOrder.d.ts +2 -0
  46. package/api/redirect/index.d.ts +2 -0
  47. package/api/redirect/redirect.d.ts +2 -0
  48. package/api/setBillingAddress/graphql/setBillingAddress.graphql.d.ts +2 -0
  49. package/api/setBillingAddress/index.d.ts +2 -0
  50. package/api/setBillingAddress/setBillingAddress.d.ts +13 -0
  51. package/api/setGuestEmailOnCart/graphql/setGuestEmailOnCart.graphql.d.ts +2 -0
  52. package/api/setGuestEmailOnCart/index.d.ts +2 -0
  53. package/api/setGuestEmailOnCart/setGuestEmailOnCart.d.ts +2 -0
  54. package/api/setPaymentMethod/graphql/setPaymentMethod.graphql.d.ts +2 -0
  55. package/api/setPaymentMethod/index.d.ts +2 -0
  56. package/api/setPaymentMethod/setPaymentMethod.d.ts +2 -0
  57. package/api/setShippingAddress/graphql/setShippingAddress.graphql.d.ts +2 -0
  58. package/api/setShippingAddress/index.d.ts +2 -0
  59. package/api/setShippingAddress/setShippingAddress.d.ts +30 -0
  60. package/api/setShippingMethods/graphql/setShippingMethodsOnCart.graphql.d.ts +2 -0
  61. package/api/setShippingMethods/index.d.ts +2 -0
  62. package/api/setShippingMethods/setShippingMethods.d.ts +2 -0
  63. package/api/utils/dispatchApiCall.d.ts +41 -0
  64. package/api/utils/enqueueRequest.d.ts +2 -0
  65. package/api/utils/filterControlledErrors.d.ts +18 -0
  66. package/api.d.ts +1 -0
  67. package/api.js +1 -2
  68. package/chunks/BillToShippingAddress2.js +1 -2
  69. package/chunks/BillingForm.js +1 -2
  70. package/chunks/ErrorBanner.js +1 -2
  71. package/chunks/LoginForm.js +1 -2
  72. package/chunks/MergedCartBanner.js +1 -0
  73. package/chunks/PlaceOrder.js +1 -2
  74. package/chunks/ShippingForm.js +1 -2
  75. package/chunks/ShippingMethods.js +1 -2
  76. package/chunks/ToggleButton.js +1 -2
  77. package/chunks/ToggleButton2.js +1 -0
  78. package/chunks/address-form-fields.js +43 -0
  79. package/chunks/constants.js +0 -1
  80. package/chunks/constants2.js +1 -2
  81. package/chunks/constants3.js +1 -2
  82. package/chunks/getCart.graphql.js +10 -173
  83. package/chunks/getStoreConfig.js +4 -14
  84. package/chunks/initialize.js +1 -2
  85. package/chunks/placeOrder2.js +57 -70
  86. package/chunks/setBillingAddress.js +3 -6
  87. package/chunks/setGuestEmailOnCart.js +4 -7
  88. package/chunks/setPaymentMethod.js +3 -6
  89. package/chunks/setShippingAddress.js +4 -7
  90. package/chunks/setShippingMethods.js +4 -7
  91. package/chunks/transform-shipping-methods.js +1 -2
  92. package/components/AddressForm/AddressForm.d.ts +21 -0
  93. package/components/AddressForm/constants.d.ts +4 -0
  94. package/components/AddressForm/index.d.ts +7 -0
  95. package/components/AddressForm/useAddressBackup.d.ts +8 -0
  96. package/components/AddressForm/useAddressForm.d.ts +38 -0
  97. package/components/AddressForm/useCheckoutAddressEventEmitter.d.ts +9 -0
  98. package/components/AddressForm/usePreselectedFields.d.ts +9 -0
  99. package/components/AddressForm/utils.d.ts +13 -0
  100. package/components/BillToShippingAddress/BillToShippingAddress.d.ts +8 -0
  101. package/components/BillToShippingAddress/BillToShippingAddressSkeleton.d.ts +4 -0
  102. package/components/BillToShippingAddress/index.d.ts +4 -0
  103. package/components/Checkout/Checkout.d.ts +25 -0
  104. package/components/Checkout/index.d.ts +3 -0
  105. package/components/EmptyCart/EmptyCart.d.ts +9 -0
  106. package/components/EmptyCart/index.d.ts +3 -0
  107. package/components/FieldsForm/FieldsForm.d.ts +13 -0
  108. package/components/FieldsForm/FieldsFormSkeleton.d.ts +4 -0
  109. package/components/FieldsForm/fieldFactory.d.ts +9 -0
  110. package/components/FieldsForm/fixtures.d.ts +5 -0
  111. package/components/FieldsForm/index.d.ts +6 -0
  112. package/components/FieldsForm/validation.d.ts +18 -0
  113. package/components/Heading/Heading.d.ts +8 -0
  114. package/components/Heading/index.d.ts +3 -0
  115. package/components/LoginForm/Email.d.ts +13 -0
  116. package/components/LoginForm/LoginForm.d.ts +17 -0
  117. package/components/LoginForm/LoginFormSkeleton.d.ts +4 -0
  118. package/components/LoginForm/SignIn.d.ts +9 -0
  119. package/components/LoginForm/SignOut.d.ts +8 -0
  120. package/components/LoginForm/index.d.ts +6 -0
  121. package/components/OutOfStock/OutOfStock.d.ts +9 -0
  122. package/components/OutOfStock/index.d.ts +3 -0
  123. package/components/OverlayLoader/OverlayLoader.d.ts +6 -0
  124. package/components/OverlayLoader/index.d.ts +2 -0
  125. package/components/PaymentMethods/PaymentMethods.d.ts +13 -0
  126. package/components/PaymentMethods/PaymentMethodsSkeleton.d.ts +4 -0
  127. package/components/PaymentMethods/index.d.ts +4 -0
  128. package/components/PlaceOrder/PlaceOrder.d.ts +9 -0
  129. package/components/PlaceOrder/PlaceOrderSkeleton.d.ts +4 -0
  130. package/components/PlaceOrder/index.d.ts +3 -0
  131. package/components/ServerError/ServerError.d.ts +10 -0
  132. package/components/ServerError/index.d.ts +3 -0
  133. package/components/ShippingMethods/ShippingMethods.d.ts +12 -0
  134. package/components/ShippingMethods/ShippingMethodsSkeleton.d.ts +4 -0
  135. package/components/ShippingMethods/index.d.ts +4 -0
  136. package/components/ToggleButton/ToggleButton.d.ts +14 -0
  137. package/components/ToggleButton/assets/icons/index.d.ts +2 -0
  138. package/components/ToggleButton/assets/images/index.d.ts +2 -0
  139. package/components/ToggleButton/index.d.ts +3 -0
  140. package/components/index.d.ts +15 -0
  141. package/containers/BillToShippingAddress/BillToShippingAddress.d.ts +10 -0
  142. package/containers/BillToShippingAddress/constants.d.ts +2 -0
  143. package/containers/BillToShippingAddress/index.d.ts +4 -0
  144. package/containers/BillToShippingAddress.d.ts +3 -0
  145. package/containers/BillToShippingAddress.js +1 -2
  146. package/containers/BillingForm/BillingForm.d.ts +7 -0
  147. package/containers/BillingForm/constants.d.ts +2 -0
  148. package/containers/BillingForm/index.d.ts +4 -0
  149. package/containers/BillingForm.d.ts +3 -0
  150. package/containers/BillingForm.js +1 -2
  151. package/containers/Checkout/Checkout.d.ts +35 -0
  152. package/containers/Checkout/constants.d.ts +2 -0
  153. package/containers/Checkout/index.d.ts +4 -0
  154. package/containers/Checkout.d.ts +3 -0
  155. package/containers/Checkout.js +1 -2
  156. package/containers/ErrorBanner/ErrorBanner.d.ts +5 -0
  157. package/containers/ErrorBanner/index.d.ts +3 -0
  158. package/containers/ErrorBanner.d.ts +3 -0
  159. package/containers/ErrorBanner.js +0 -1
  160. package/containers/LoginForm/LoginForm.d.ts +10 -0
  161. package/containers/LoginForm/constants.d.ts +2 -0
  162. package/containers/LoginForm/index.d.ts +4 -0
  163. package/containers/LoginForm.d.ts +3 -0
  164. package/containers/LoginForm.js +1 -2
  165. package/containers/MergedCartBanner/MergedCartBanner.d.ts +5 -0
  166. package/containers/MergedCartBanner/index.d.ts +3 -0
  167. package/containers/MergedCartBanner.d.ts +3 -0
  168. package/containers/MergedCartBanner.js +1 -0
  169. package/containers/PaymentMethods/PaymentMethods.d.ts +23 -0
  170. package/containers/PaymentMethods/defaultHandlers.d.ts +11 -0
  171. package/containers/PaymentMethods/index.d.ts +3 -0
  172. package/containers/PaymentMethods.d.ts +3 -0
  173. package/containers/PaymentMethods.js +1 -2
  174. package/containers/PlaceOrder/PlaceOrder.d.ts +9 -0
  175. package/containers/PlaceOrder/index.d.ts +3 -0
  176. package/containers/PlaceOrder.d.ts +3 -0
  177. package/containers/PlaceOrder.js +1 -2
  178. package/containers/ShippingForm/ShippingForm.d.ts +9 -0
  179. package/containers/ShippingForm/constants.d.ts +2 -0
  180. package/containers/ShippingForm/index.d.ts +4 -0
  181. package/containers/ShippingForm.d.ts +3 -0
  182. package/containers/ShippingForm.js +1 -2
  183. package/containers/ShippingMethods/ShippingMethods.d.ts +9 -0
  184. package/containers/ShippingMethods/hooks/useShippingEstimateEventEmitter.d.ts +3 -0
  185. package/containers/ShippingMethods/index.d.ts +3 -0
  186. package/containers/ShippingMethods.d.ts +3 -0
  187. package/containers/ShippingMethods.js +1 -2
  188. package/containers/index.d.ts +11 -0
  189. package/context/address-form-fields.d.ts +13 -0
  190. package/context/checkout.d.ts +44 -0
  191. package/context/countries.d.ts +13 -0
  192. package/context/index.d.ts +6 -0
  193. package/context/services.d.ts +13 -0
  194. package/context/store.d.ts +12 -0
  195. package/data/models/acdl.d.ts +99 -0
  196. package/data/models/address-form-fields.d.ts +52 -0
  197. package/data/models/address.d.ts +21 -0
  198. package/data/models/cart.d.ts +14 -0
  199. package/data/models/country.d.ts +5 -0
  200. package/data/models/custom-attribute.d.ts +5 -0
  201. package/data/models/customer.d.ts +25 -0
  202. package/data/models/email-availability.d.ts +2 -0
  203. package/data/models/index.d.ts +14 -0
  204. package/data/models/order.d.ts +46 -0
  205. package/data/models/payment-method.d.ts +5 -0
  206. package/data/models/price.d.ts +5 -0
  207. package/data/models/region.d.ts +6 -0
  208. package/data/models/shipping-estimate.d.ts +17 -0
  209. package/data/models/shipping-method.d.ts +19 -0
  210. package/data/models/store-config.d.ts +9 -0
  211. package/data/transforms/index.d.ts +12 -0
  212. package/data/transforms/transform-acdl.d.ts +6 -0
  213. package/data/transforms/transform-address-form-fields.d.ts +66 -0
  214. package/data/transforms/transform-address.d.ts +79 -0
  215. package/data/transforms/transform-cart.d.ts +7 -0
  216. package/data/transforms/transform-countries.d.ts +5 -0
  217. package/data/transforms/transform-customer.d.ts +14 -0
  218. package/data/transforms/transform-email-availability.d.ts +6 -0
  219. package/data/transforms/transform-order.d.ts +7 -0
  220. package/data/transforms/transform-payment-methods.d.ts +9 -0
  221. package/data/transforms/transform-regions.d.ts +8 -0
  222. package/data/transforms/transform-shipping-estimate.d.ts +5 -0
  223. package/data/transforms/transform-shipping-methods.d.ts +14 -0
  224. package/data/transforms/transform-store-config.d.ts +5 -0
  225. package/hooks/useAuthentication/index.d.ts +2 -0
  226. package/hooks/useAuthentication/useAuthentication.d.ts +2 -0
  227. package/hooks/useLockScroll/index.d.ts +2 -0
  228. package/hooks/useLockScroll/useLockScroll.d.ts +5 -0
  229. package/hooks/useValidity/index.d.ts +2 -0
  230. package/hooks/useValidity/useValidity.d.ts +19 -0
  231. package/i18n/en_US.json.d.ts +86 -0
  232. package/lib/acdl.d.ts +18 -0
  233. package/lib/fetch-error.d.ts +7 -0
  234. package/lib/index.d.ts +4 -0
  235. package/lib/localStorage.d.ts +10 -0
  236. package/lib/network-error.d.ts +6 -0
  237. package/lib/redirect.d.ts +2 -0
  238. package/lib/state.d.ts +7 -0
  239. package/msw/browser.d.ts +2 -0
  240. package/msw/fixtures/fragments/american-regions.d.ts +4 -0
  241. package/msw/fixtures/fragments/available-shipping-methods.d.ts +23 -0
  242. package/msw/fixtures/fragments/billing-address.d.ts +36 -0
  243. package/msw/fixtures/fragments/cart.d.ts +112 -0
  244. package/msw/fixtures/fragments/countries.d.ts +4 -0
  245. package/msw/fixtures/fragments/form-fields.d.ts +4 -0
  246. package/msw/fixtures/fragments/index.d.ts +8 -0
  247. package/msw/fixtures/fragments/shipping-address.d.ts +42 -0
  248. package/msw/fixtures/index.d.ts +4 -0
  249. package/msw/fixtures/mutations/estimate-shipping-methods.d.ts +4 -0
  250. package/msw/fixtures/mutations/index.d.ts +8 -0
  251. package/msw/fixtures/mutations/place-order.d.ts +4 -0
  252. package/msw/fixtures/mutations/set-billing-address.d.ts +5 -0
  253. package/msw/fixtures/mutations/set-guest-email.d.ts +4 -0
  254. package/msw/fixtures/mutations/set-payment-method.d.ts +4 -0
  255. package/msw/fixtures/mutations/set-shipping-address.d.ts +4 -0
  256. package/msw/fixtures/mutations/set-shipping-methods.d.ts +4 -0
  257. package/msw/fixtures/queries/fetch-address-form-fields.d.ts +4 -0
  258. package/msw/fixtures/queries/get-cart.d.ts +4 -0
  259. package/msw/fixtures/queries/get-countries.d.ts +4 -0
  260. package/msw/fixtures/queries/get-customer-cart-stock-status.d.ts +4 -0
  261. package/msw/fixtures/queries/get-customer.d.ts +5 -0
  262. package/msw/fixtures/queries/get-regions.d.ts +4 -0
  263. package/msw/fixtures/queries/get-stock-status.d.ts +4 -0
  264. package/msw/fixtures/queries/get-store-config.d.ts +4 -0
  265. package/msw/fixtures/queries/index.d.ts +10 -0
  266. package/msw/fixtures/queries/is-email-available.d.ts +4 -0
  267. package/msw/handlers.d.ts +4 -0
  268. package/msw/server.d.ts +2 -0
  269. package/package.json +1 -1
  270. package/render/Provider.d.ts +10 -0
  271. package/render/index.d.ts +2 -0
  272. package/render/render.d.ts +6 -0
  273. package/render.d.ts +1 -0
  274. package/render.js +3 -4
  275. package/services/backup.d.ts +17 -0
  276. package/services/index.d.ts +2 -0
  277. package/signals/AuthenticationSignal.d.ts +2 -0
  278. package/signals/CartSignal.d.ts +7 -0
  279. package/signals/CustomerSignal.d.ts +7 -0
  280. package/signals/EstimateShippingMethodsSignal.d.ts +7 -0
  281. package/signals/IsBillToShippingSignal.d.ts +6 -0
  282. package/signals/RegionsSignal.d.ts +12 -0
  283. package/signals/SelectedShippingMethodSignal.d.ts +4 -0
  284. package/signals/index.d.ts +8 -0
  285. package/tests/constants.d.ts +3 -0
  286. package/tests/index.d.ts +2 -0
  287. package/tests/integration/utils/index.d.ts +3 -0
  288. package/tests/integration/utils/setup.d.ts +5 -0
  289. package/tests/integration/utils/user-actions.d.ts +2 -0
  290. package/tests/mocks/svg.d.ts +4 -0
  291. package/tests/render.d.ts +4 -0
  292. package/tests/utils/expectError.d.ts +9 -0
  293. package/tests/utils/index.d.ts +3 -0
  294. package/tests/utils/mockEvents.d.ts +5 -0
  295. package/utils/autocompleteFieldCodes/autocompleteFieldCodes.d.ts +18 -0
  296. package/utils/autocompleteFieldCodes/index.d.ts +2 -0
  297. package/utils/getMultilineValues/getMultilineValues.d.ts +3 -0
  298. package/utils/getMultilineValues/index.d.ts +2 -0
  299. package/utils/index.d.ts +7 -0
  300. package/utils/isEmpty/index.d.ts +2 -0
  301. package/utils/isEmpty/isEmpty.d.ts +2 -0
  302. package/utils/isNullish/index.d.ts +2 -0
  303. package/utils/isNullish/isNullish.d.ts +2 -0
  304. package/utils/parseRegionId/index.d.ts +2 -0
  305. package/utils/parseRegionId/parseRegionId.d.ts +2 -0
  306. package/utils/processFormFields/index.d.ts +2 -0
  307. package/utils/processFormFields/processFormFields.d.ts +21 -0
  308. package/utils/refetchEstimatedShippingMethods/index.d.ts +2 -0
  309. package/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.d.ts +4 -0
  310. package/utils/shippingMethods/index.d.ts +2 -0
  311. package/utils/shippingMethods/isEqual.d.ts +4 -0
  312. package/api.js.map +0 -1
  313. package/chunks/BillToShippingAddress2.js.map +0 -1
  314. package/chunks/BillingForm.js.map +0 -1
  315. package/chunks/CartSummary.js +0 -2
  316. package/chunks/CartSummary.js.map +0 -1
  317. package/chunks/ErrorBanner.js.map +0 -1
  318. package/chunks/LoginForm.js.map +0 -1
  319. package/chunks/OrderSummary.js +0 -2
  320. package/chunks/OrderSummary.js.map +0 -1
  321. package/chunks/PaymentMethods.js +0 -2
  322. package/chunks/PaymentMethods.js.map +0 -1
  323. package/chunks/PlaceOrder.js.map +0 -1
  324. package/chunks/SelectedShippingMethodSignal.js +0 -2
  325. package/chunks/SelectedShippingMethodSignal.js.map +0 -1
  326. package/chunks/ShippingForm.js.map +0 -1
  327. package/chunks/ShippingMethods.js.map +0 -1
  328. package/chunks/ToggleButton.js.map +0 -1
  329. package/chunks/cart-item.js +0 -2
  330. package/chunks/cart-item.js.map +0 -1
  331. package/chunks/constants.js.map +0 -1
  332. package/chunks/constants2.js.map +0 -1
  333. package/chunks/constants3.js.map +0 -1
  334. package/chunks/getCart.graphql.js.map +0 -1
  335. package/chunks/getMultilineValues.js +0 -44
  336. package/chunks/getMultilineValues.js.map +0 -1
  337. package/chunks/getStoreConfig.js.map +0 -1
  338. package/chunks/initialize.js.map +0 -1
  339. package/chunks/placeOrder2.js.map +0 -1
  340. package/chunks/setBillingAddress.js.map +0 -1
  341. package/chunks/setGuestEmailOnCart.js.map +0 -1
  342. package/chunks/setPaymentMethod.js.map +0 -1
  343. package/chunks/setShippingAddress.js.map +0 -1
  344. package/chunks/setShippingMethods.js.map +0 -1
  345. package/chunks/transform-shipping-methods.js.map +0 -1
  346. package/containers/BillToShippingAddress.js.map +0 -1
  347. package/containers/BillingForm.js.map +0 -1
  348. package/containers/CartSummary.js +0 -2
  349. package/containers/CartSummary.js.map +0 -1
  350. package/containers/Checkout.js.map +0 -1
  351. package/containers/ErrorBanner.js.map +0 -1
  352. package/containers/LoginForm.js.map +0 -1
  353. package/containers/OrderSummary.js +0 -2
  354. package/containers/OrderSummary.js.map +0 -1
  355. package/containers/PaymentMethods.js.map +0 -1
  356. package/containers/PlaceOrder.js.map +0 -1
  357. package/containers/ShippingForm.js.map +0 -1
  358. package/containers/ShippingMethods.js.map +0 -1
  359. package/render.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginForm.js","sources":["../../src/components/LoginForm/Email.tsx","../../src/components/LoginForm/SignIn.tsx","../../src/components/LoginForm/LoginForm.tsx","../../src/components/LoginForm/SignOut.tsx","../../src/containers/LoginForm/LoginForm.tsx"],"sourcesContent":["import { Field, Input } from '@adobe/elsie/components';\nimport { useText } from '@adobe/elsie/i18n';\nimport { HTMLAttributes } from 'preact/compat';\nimport { FunctionComponent } from 'preact';\n\nexport interface LoginEmailProps extends HTMLAttributes<HTMLFormElement> {\n value?: string;\n error?: string;\n hint?: string;\n onChange: (e: any) => void;\n onBlur: (e: any) => void;\n onInvalid: (e: any) => void;\n}\n\nexport const Email: FunctionComponent<LoginEmailProps> = ({\n value,\n error,\n hint,\n onChange,\n onBlur,\n onInvalid,\n}) => {\n const translations = useText({\n LoginFormLabel: 'Checkout.LoginForm.ariaLabel',\n LoginFormFloatingLabel: 'Checkout.LoginForm.floatingLabel',\n LoginFormPlaceholder: 'Checkout.LoginForm.placeholder',\n });\n\n return (\n <Field size=\"medium\" error={error} hint={hint}>\n <Input\n id=\"customer-email\"\n name=\"customer-email\"\n type=\"email\"\n value={value}\n autocomplete=\"email\"\n placeholder={translations.LoginFormPlaceholder}\n floatingLabel={translations.LoginFormFloatingLabel}\n onChange={onChange}\n onBlur={onBlur}\n onInvalid={onInvalid}\n required={true}\n aria-label={translations.LoginFormLabel}\n aria-required={true}\n />\n </Field>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { Text } from '@adobe/elsie/i18n';\n\ntype SignInProps = {\n onSignInClick?: (email: string | null) => void;\n email: string | null;\n};\n\nexport const SignIn: FunctionComponent<SignInProps> = ({\n onSignInClick,\n email,\n}) => {\n return (\n <div className=\"checkout-login-form__sign-in\">\n <Text id=\"Checkout.LoginForm.account\" />\n\n <a\n data-testid=\"sign-in-link\"\n className=\"checkout-login-form__link\"\n href=\"#\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={(e) => {\n e.preventDefault();\n onSignInClick?.(email);\n }}\n >\n <Text id=\"Checkout.LoginForm.signIn\" />\n </a>\n </div>\n );\n};\n","import { Email, Heading } from '@/checkout/components';\nimport { SignOut, SignIn } from '@/checkout/components/LoginForm';\nimport '@/checkout/components/LoginForm/LoginForm.css';\nimport { Customer } from '@/checkout/data/models';\nimport { useText } from '@adobe/elsie/i18n';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, HTMLAttributes } from 'preact/compat';\nimport { Divider } from '@adobe/elsie/components';\n\nexport interface LoginFormProps extends HTMLAttributes<HTMLDivElement> {\n currentEmail: string | null;\n hint?: string;\n error?: string | null;\n onEmailChange: (e: any) => void;\n onEmailBlur: (e: any) => void;\n onEmailInvalid: (e: any) => void;\n onSignInClick?: (email: string | null) => void;\n onSignOutClick?: () => void;\n isAuthenticated: boolean;\n customer?: Customer | null;\n}\n\nexport const LoginForm: FunctionComponent<LoginFormProps> = ({\n name,\n className,\n currentEmail,\n hint,\n error = null,\n onEmailChange,\n onEmailBlur,\n onEmailInvalid,\n onSignInClick,\n onSignOutClick,\n isAuthenticated,\n customer,\n ...props\n}) => {\n const translations = useText({\n Title: 'Checkout.LoginForm.title',\n });\n\n return (\n <div\n {...props}\n className={classes(['checkout-login-form', className])}\n data-testid=\"checkout-login-form\"\n >\n <div className=\"checkout-login-form__heading\">\n <Heading level={2} className=\"checkout-login-form__title\">\n {translations.Title}\n </Heading>\n {isAuthenticated ? (\n <SignOut onSignOutClick={onSignOutClick} />\n ) : (\n <SignIn onSignInClick={onSignInClick} email={currentEmail} />\n )}\n </div>\n {customer ? (\n <div className=\"checkout-login-form__customer-details\">\n <div className=\"checkout-login-form__customer-name\">{`${customer?.firstName} ${customer?.lastName}`}</div>\n <div className=\"checkout-login-form__customer-email\">\n {customer?.email}\n </div>\n </div>\n ) : (\n <div className=\"checkout-login-form__content\">\n <form\n className={classes(['dropin-login-form__form', className])}\n name={name}\n noValidate\n >\n {/* Prevent 'Enter' key press from submitting this form. */}\n <button\n type=\"submit\"\n disabled\n style=\"display: none\"\n aria-hidden=\"true\"\n />\n <Email\n value={currentEmail || undefined}\n error={error || ''}\n hint={hint}\n onChange={onEmailChange}\n onBlur={onEmailBlur}\n onInvalid={onEmailInvalid}\n />\n </form>\n </div>\n )}\n <Divider variant=\"primary\" />\n </div>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { Text } from '@adobe/elsie/i18n';\n\ntype SignOutProps = {\n onSignOutClick?: () => void;\n};\n\nexport const SignOut: FunctionComponent<SignOutProps> = ({\n onSignOutClick,\n}) => {\n return (\n <p className=\"checkout-login-form__sign-out\">\n <Text id=\"Checkout.LoginForm.switch\" />\n\n <a\n className=\"checkout-login-form__link\"\n href=\"#\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={(e) => {\n e.preventDefault();\n onSignOutClick?.();\n }}\n >\n <Text id=\"Checkout.LoginForm.signOut\" />\n </a>\n </p>\n );\n};\n","import { isEmailAvailable, setGuestEmailOnCart } from '@/checkout/api';\nimport { LoginForm as LoginFormComponent } from '@/checkout/components/LoginForm';\nimport { useText } from '@adobe/elsie/i18n';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useEffect, useState } from 'preact/hooks';\nimport { LOGIN_FORM_NAME } from './constants';\nimport {\n cartSignal,\n customerSignal,\n isAuthenticatedSignal,\n} from '@/checkout/signals';\nimport { FunctionComponent } from 'preact';\nimport { patterns } from '@/checkout/components';\n\nconst isValidEmail = (email: string) => patterns.email.test(email);\n\nexport interface LoginFormProps extends HTMLAttributes<HTMLDivElement> {\n email?: string;\n onSignInClick?: (email: string | null) => void;\n onSignOutClick?: () => void;\n}\n\nconst DEBOUNCE_TIME = 1000;\n\nexport const LoginForm: FunctionComponent<LoginFormProps> = ({\n className,\n email = null,\n onSignInClick,\n onSignOutClick,\n ...props\n}) => {\n const translations = useText({\n LoginFormInvalidEmailError: 'Checkout.LoginForm.invalidEmailError',\n LoginFormMissingEmailError: 'Checkout.LoginForm.missingEmailError',\n LoginFormEmailExistsAlreadyHaveAccount:\n 'Checkout.LoginForm.emailExists.alreadyHaveAccount',\n LoginFormEmailExistsSignInButton:\n 'Checkout.LoginForm.emailExists.signInButton',\n LoginFormEmailExistsForFasterCheckout:\n 'Checkout.LoginForm.emailExists.forFasterCheckout',\n });\n\n const { data: cartData } = cartSignal.value;\n const cartId = cartData?.id || '';\n const hasCartData = !!cartData;\n\n const [isInitialized, setIsInitialized] = useState(false);\n const [currentEmail, setCurrentEmail] = useState<string | null>(email);\n const [error, setError] = useState<string | null>();\n const [emailAvailability, setEmailAvailability] = useState<boolean>(true);\n\n const errorMessage = (validity: ValidityState): string | null => {\n if (validity.valid) return null;\n if (validity.valueMissing) return translations.LoginFormMissingEmailError;\n return translations.LoginFormInvalidEmailError;\n };\n\n const customer = customerSignal.value.data;\n\n const onEmailChange = (e: any) => {\n const { value } = e.target as HTMLInputElement;\n setCurrentEmail(value);\n setError(null);\n setEmailAvailability(true);\n };\n\n const onEmailBlur = (e: any) => {\n const { validity } = e.target as HTMLInputElement;\n setError(errorMessage(validity));\n };\n\n const onEmailInvalid = (e: any) => {\n const { validity } = e.target as HTMLInputElement;\n setError(errorMessage(validity));\n };\n\n if (!isInitialized && hasCartData) {\n setIsInitialized(true);\n setCurrentEmail(cartData?.email || email);\n }\n\n useEffect(() => {\n if (!currentEmail || error) return;\n\n const timer = setTimeout(() => {\n isEmailAvailable(currentEmail)\n .then((result) => {\n setEmailAvailability(result);\n\n if (cartData?.email === currentEmail) return;\n\n setGuestEmailOnCart({\n cartId,\n email: currentEmail,\n }).catch((e: any) => {\n console.log('set email failed', e);\n });\n })\n .catch((e: any) => {\n // TODO: handle error state\n console.log(e);\n setError(translations.LoginFormInvalidEmailError);\n setEmailAvailability(true);\n });\n }, DEBOUNCE_TIME);\n\n return () => {\n timer && clearTimeout(timer);\n };\n }, [\n currentEmail,\n error,\n translations.LoginFormInvalidEmailError,\n cartData?.email,\n cartId,\n ]);\n\n const hint = emailAvailability ? (\n ''\n ) : (\n <>\n {translations.LoginFormEmailExistsAlreadyHaveAccount}{' '}\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onSignInClick?.(currentEmail);\n }}\n >\n {translations.LoginFormEmailExistsSignInButton}\n </a>{' '}\n {translations.LoginFormEmailExistsForFasterCheckout}\n </>\n );\n\n const onSignInClickHandler = (email: string | null) => {\n const isCurrentEmailValid = currentEmail\n ? isValidEmail(currentEmail)\n : false;\n onSignInClick?.(isCurrentEmailValid ? email : null);\n };\n\n return (\n <LoginFormComponent\n className={className}\n currentEmail={currentEmail}\n error={error}\n hint={hint as any}\n name={LOGIN_FORM_NAME}\n onEmailBlur={onEmailBlur}\n onEmailChange={onEmailChange}\n onEmailInvalid={onEmailInvalid}\n onSignInClick={onSignInClickHandler}\n onSignOutClick={onSignOutClick}\n isAuthenticated={Boolean(isAuthenticatedSignal.value)}\n customer={customer}\n {...props}\n />\n );\n};\n"],"names":["Email","value","error","hint","onChange","onBlur","onInvalid","translations","useText","LoginFormLabel","LoginFormFloatingLabel","LoginFormPlaceholder","_jsx","Field","size","children","Input","id","name","type","autocomplete","placeholder","floatingLabel","required","SignIn","onSignInClick","email","_jsxs","className","Text","href","target","rel","onClick","e","preventDefault","LoginForm","currentEmail","onEmailChange","onEmailBlur","onEmailInvalid","onSignOutClick","isAuthenticated","customer","props","Title","classes","Heading","level","SignOut","firstName","lastName","noValidate","disabled","style","undefined","Divider","variant","isValidEmail","patterns","test","DEBOUNCE_TIME","LoginFormInvalidEmailError","LoginFormMissingEmailError","LoginFormEmailExistsAlreadyHaveAccount","LoginFormEmailExistsSignInButton","LoginFormEmailExistsForFasterCheckout","data","cartData","cartSignal","cartId","hasCartData","isInitialized","setIsInitialized","useState","setCurrentEmail","setError","emailAvailability","setEmailAvailability","errorMessage","validity","valid","valueMissing","customerSignal","useEffect","timer","setTimeout","then","result","setGuestEmailOnCart","catch","log","console","clearTimeout","_Fragment","LoginFormComponent","LOGIN_FORM_NAME","isCurrentEmailValid","Boolean","isAuthenticatedSignal"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{H as N}from"./ToggleButton.js";import"@dropins/tools/preact-hooks.js";import{m as L,i as D}from"./getStoreConfig.js";import"@dropins/tools/event-bus.js";import{s as k}from"./SelectedShippingMethodSignal.js";import{classes as d}from"@dropins/tools/lib.js";import{Card as E,Divider as g,ProgressSpinner as z,Price as y,Skeleton as A,SkeletonRow as v}from"@dropins/tools/components.js";/* empty css */import{jsxs as u,jsx as r,Fragment as I}from"@dropins/tools/preact-jsx-runtime.js";import{Text as n}from"@dropins/tools/i18n.js";const j=({className:o,summary:p,isLoading:t=!1,...T})=>{const{total:m,subtotal:h,shipping:i,tax:c}=p;return u(E,{...T,className:d(["checkout-order-summary",["checkout-order-summary--loading",t],o]),children:[r(N,{level:2,className:"checkout-order-summary__title",children:r(n,{id:"Checkout.OrderSummary.title"})}),r(g,{variant:"primary"}),t&&r(z,{className:"checkout-order-summary__spinner"}),u("div",{"data-testid":"order-summary-subtotal",className:"checkout-order-summary__row",children:[r("p",{children:r(n,{id:"Checkout.OrderSummary.subtotal"})}),r(y,{amount:h.amount,currency:h.currency,className:d(["checkout-order-summary__price",o])})]}),h.isTaxIncl&&r("div",{"data-testid":"order-summary-subtotal-incl-tax",className:"checkout-order-summary__row checkout-order-summary__row--muted",children:r("p",{children:r(n,{id:"Checkout.OrderSummary.includingTaxes"})})}),i!=null&&u("div",{"data-testid":"order-summary-shipping",className:"checkout-order-summary__row",children:[r("p",{"data-testid":"order-summary-shipping-label",children:i.isEstimated?r(n,{id:"Checkout.OrderSummary.estimatedShipping"}):r(n,{id:"Checkout.OrderSummary.shipping"})}),i.amount===0?r("p",{"data-testid":"estimated-shipping",className:"checkout-order-summary__price",children:r(n,{id:"Checkout.OrderSummary.freeShipping"})}):r(y,{"data-testid":"estimated-shipping",amount:i.amount,currency:i.currency,className:d(["checkout-order-summary__price",o])})]}),c!=null&&!c.breakdown&&u("div",{"data-testid":"order-summary-tax",className:"checkout-order-summary__row",children:[r("p",{children:r(n,{id:"Checkout.OrderSummary.tax"})}),r(y,{amount:c.amount,currency:c.currency,className:d(["checkout-order-summary__price",o])})]}),c!=null&&c.breakdown&&u(I,{children:[r(g,{variant:"secondary"}),r("div",{className:"checkout-order-summary__row checkout-order-summary__row--margin-bottom",children:r("p",{children:r(n,{id:"Checkout.OrderSummary.taxBreakdown"})})}),c.breakdown.map(e=>u("div",{"data-testid":"order-summary-tax-breakdown",className:"checkout-order-summary__row checkout-order-summary__row--muted",children:[r("p",{children:e.label}),r(y,{amount:e.amount.value,currency:e.amount.currency,className:d(["checkout-order-summary__price",o])})]},e.label)),u("div",{"data-testid":"order-summary-tax-breakdown-total",className:"checkout-order-summary__row checkout-order-summary__row--strong checkout-order-summary__row--margin-top",children:[r("p",{children:r(n,{id:"Checkout.OrderSummary.taxTotal"})}),r(y,{amount:c.amount,currency:c.currency,className:d(["checkout-order-summary__price",o])})]}),r(g,{variant:"secondary"})]}),u("div",{"data-testid":"order-summary-total-incl-tax",className:"checkout-order-summary__row checkout-order-summary__row--emphasized",children:[r("p",{children:r(n,{id:"Checkout.OrderSummary.total"})}),r(y,{amount:m.inclTax.amount,currency:m.inclTax.currency,className:d(["checkout-order-summary__price",o])})]}),m.exclTax!=null&&u("div",{"data-testid":"order-summary-total-excl-tax",className:"checkout-order-summary__row checkout-order-summary__row--muted",children:[r("p",{children:r(n,{id:"Checkout.OrderSummary.totalExclTax"})}),r(y,{amount:m.exclTax.amount,currency:m.exclTax.currency,className:d(["checkout-order-summary__price",o])})]})]})},F=()=>u(A,{"data-testid":"order-summary-skeleton",className:"order-summary__skeleton",children:[r(v,{variant:"heading",size:"medium"}),r(v,{variant:"empty",size:"medium"}),r(v,{size:"large",fullWidth:!0,lines:3})]}),w=0,G=2,H={isLoading:!0};function P(){const{config:o}=L(),p=o===void 0,t=D.value.data;if(p||t===void 0)return H;const m=o.taxCartDisplay,h=m.shoppingCartDisplaySubtotal===G,i=t==null?void 0:t.shippingAddresses,c=!!(i!=null&&i.length),e=t==null?void 0:t.prices,x=e==null?void 0:e.grand_total,C=!!x,S=h?e==null?void 0:e.subtotal_including_tax:e==null?void 0:e.subtotal_excluding_tax,_=(e==null?void 0:e.applied_taxes)||[],f=!!_.length;if(!C)return{isLoading:!1};const a={total:{inclTax:{amount:x.value,currency:x.currency}},subtotal:{amount:S.value,currency:S.currency,isTaxIncl:h}};if(f){const l=_.reduce((b,O)=>b+O.amount.value,w),s=_[0];a.tax={amount:l,currency:s.amount.currency},m.shoppingCartDisplayFullSummary&&(a.tax.breakdown=_)}if(!f&&m.shoppingCartDisplayZeroTax&&(a.tax={amount:w,currency:a.total.inclTax.currency}),m.shoppingCartDisplayGrandTotal){const l=a.tax?a.total.inclTax.amount-a.tax.amount:a.total.inclTax.amount;a.total.exclTax={amount:l,currency:a.total.inclTax.currency}}if(c){const l=i[0],s=l==null?void 0:l.selectedShippingMethod;return s?(a.shipping={amount:s==null?void 0:s.amount.value,currency:s==null?void 0:s.amount.currency,isEstimated:!1},{isLoading:!1,summary:a}):{isLoading:!1,summary:a}}return k.value?(a.shipping={amount:k.value.amount.value,currency:k.value.amount.currency,isEstimated:!0},a.total.inclTax.amount+=a.shipping.amount,a.total.exclTax&&(a.total.exclTax.amount+=a.shipping.amount),{isLoading:!1,summary:a}):{isLoading:!1,summary:a}}const M=({...o})=>{const{isLoading:p,summary:t}=P();return u("div",{...o,children:[!t&&r(F,{}),t&&r(j,{isLoading:p,summary:t})]})};export{M as O,P as u};
2
- //# sourceMappingURL=OrderSummary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrderSummary.js","sources":["../../src/components/OrderSummary/OrderSummary.tsx","../../src/components/OrderSummary/OrderSummarySkeleton.tsx","../../src/containers/OrderSummary/constants.ts","../../src/containers/OrderSummary/OrderSummary.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport '@/checkout/components/OrderSummary/OrderSummary.css';\nimport { Heading } from '@/checkout/components';\nimport { Text } from '@adobe/elsie/i18n';\nimport { Card, Divider, Price, ProgressSpinner } from '@adobe/elsie/components';\nimport { CartTaxItem } from '@/checkout/__generated__/types';\n\nexport type Summary = {\n total: {\n inclTax: {\n amount: number;\n currency: string;\n };\n exclTax?: {\n amount: number;\n currency: string;\n };\n };\n subtotal: {\n amount: number;\n currency: string;\n isTaxIncl: boolean;\n };\n shipping?: {\n amount: number;\n currency: string;\n isEstimated: boolean;\n };\n tax?: {\n amount: number;\n currency: string;\n breakdown?: CartTaxItem[];\n };\n};\n\nexport interface OrderSummaryProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'summary'> {\n isLoading?: boolean;\n summary: Summary;\n}\n\nexport const OrderSummary: FunctionComponent<OrderSummaryProps> = ({\n className,\n summary,\n isLoading = false,\n ...props\n}) => {\n const { total, subtotal, shipping, tax } = summary;\n\n return (\n <Card\n {...props}\n className={classes([\n 'checkout-order-summary',\n ['checkout-order-summary--loading', isLoading],\n className,\n ])}\n >\n <Heading\n level={2}\n className=\"checkout-order-summary__title\"\n children={<Text id=\"Checkout.OrderSummary.title\" />}\n />\n\n <Divider variant=\"primary\" />\n\n {isLoading && (\n <ProgressSpinner className=\"checkout-order-summary__spinner\" />\n )}\n\n <div\n data-testid=\"order-summary-subtotal\"\n className=\"checkout-order-summary__row\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.subtotal\" />\n </p>\n <Price\n amount={subtotal.amount}\n currency={subtotal.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n </div>\n\n {subtotal.isTaxIncl && (\n <div\n data-testid=\"order-summary-subtotal-incl-tax\"\n className=\"checkout-order-summary__row checkout-order-summary__row--muted\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.includingTaxes\" />\n </p>\n </div>\n )}\n\n {shipping != undefined && (\n <div\n data-testid=\"order-summary-shipping\"\n className=\"checkout-order-summary__row\"\n >\n <p data-testid=\"order-summary-shipping-label\">\n {shipping.isEstimated ? (\n <Text id=\"Checkout.OrderSummary.estimatedShipping\" />\n ) : (\n <Text id=\"Checkout.OrderSummary.shipping\" />\n )}\n </p>\n\n {shipping.amount === 0 ? (\n <p\n data-testid=\"estimated-shipping\"\n className=\"checkout-order-summary__price\"\n >\n <Text id=\"Checkout.OrderSummary.freeShipping\" />\n </p>\n ) : (\n <Price\n data-testid=\"estimated-shipping\"\n amount={shipping.amount}\n currency={shipping.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n )}\n </div>\n )}\n\n {tax != undefined && !tax.breakdown && (\n <div\n data-testid=\"order-summary-tax\"\n className=\"checkout-order-summary__row\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.tax\" />\n </p>\n <Price\n amount={tax.amount}\n currency={tax.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n </div>\n )}\n\n {tax != undefined && tax.breakdown && (\n <>\n <Divider variant=\"secondary\" />\n\n <div className=\"checkout-order-summary__row checkout-order-summary__row--margin-bottom\">\n <p>\n <Text id=\"Checkout.OrderSummary.taxBreakdown\" />\n </p>\n </div>\n\n {tax.breakdown.map((tax) => (\n <div\n data-testid=\"order-summary-tax-breakdown\"\n key={tax.label}\n className=\"checkout-order-summary__row checkout-order-summary__row--muted\"\n >\n <p>{tax.label}</p>\n\n <Price\n amount={tax.amount.value!}\n currency={tax.amount.currency!}\n className={classes([\n 'checkout-order-summary__price',\n className,\n ])}\n />\n </div>\n ))}\n\n <div\n data-testid=\"order-summary-tax-breakdown-total\"\n className=\"checkout-order-summary__row checkout-order-summary__row--strong checkout-order-summary__row--margin-top\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.taxTotal\" />\n </p>\n\n <Price\n amount={tax.amount}\n currency={tax.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n </div>\n\n <Divider variant=\"secondary\" />\n </>\n )}\n\n <div\n data-testid=\"order-summary-total-incl-tax\"\n className=\"checkout-order-summary__row checkout-order-summary__row--emphasized\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.total\" />\n </p>\n\n <Price\n amount={total.inclTax.amount}\n currency={total.inclTax.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n </div>\n\n {total.exclTax != undefined && (\n <div\n data-testid=\"order-summary-total-excl-tax\"\n className=\"checkout-order-summary__row checkout-order-summary__row--muted\"\n >\n <p>\n <Text id=\"Checkout.OrderSummary.totalExclTax\" />\n </p>\n\n <Price\n amount={total.exclTax.amount}\n currency={total.exclTax.currency}\n className={classes(['checkout-order-summary__price', className])}\n />\n </div>\n )}\n </Card>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const OrderSummarySkeleton: FunctionComponent = () => {\n return (\n <Skeleton\n data-testid=\"order-summary-skeleton\"\n className=\"order-summary__skeleton\"\n >\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n </Skeleton>\n );\n};\n","export const ZERO_AMOUNT = 0;\n","import { CartTaxItem } from '@/checkout/__generated__/types';\nimport { OrderSummarySkeleton } from '@/checkout/components';\nimport {\n OrderSummary as OrderSummaryComponent,\n Summary,\n} from '@/checkout/components/OrderSummary/OrderSummary';\nimport { useStore } from '@/checkout/context/store';\nimport { cartSignal, selectedShippingMethodSignal } from '@/checkout/signals';\nimport { Container } from '@adobe/elsie/lib';\nimport { HTMLAttributes } from 'preact/compat';\nimport { ZERO_AMOUNT } from './constants';\n\nexport interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport type OrderSummaryState = {\n isLoading: boolean;\n summary?: Summary;\n};\n\nconst INCLUDE_TAX = 2;\n\nconst loadingState: OrderSummaryState = {\n isLoading: true,\n};\n\nexport function useOrderSummary(): OrderSummaryState {\n const { config } = useStore();\n const isLoadingStoreConfig = config === undefined;\n\n const cartData = cartSignal.value.data;\n const isLoadingCartData = cartData === undefined;\n\n if (isLoadingStoreConfig || isLoadingCartData) return loadingState;\n\n const taxCartDisplay = config.taxCartDisplay;\n const inclTaxInSubtotal =\n taxCartDisplay.shoppingCartDisplaySubtotal === INCLUDE_TAX;\n\n const shippingAddresses = cartData?.shippingAddresses;\n const hasAddresses = !!shippingAddresses?.length;\n\n const prices = cartData?.prices;\n\n const grandTotal = prices?.grand_total;\n const hasGrandTotal = !!grandTotal;\n\n const subtotal = inclTaxInSubtotal\n ? prices?.subtotal_including_tax\n : prices?.subtotal_excluding_tax;\n\n const appliedTaxes = prices?.applied_taxes || [];\n const hasTaxesApplied = !!appliedTaxes.length;\n\n if (!hasGrandTotal) return { isLoading: false };\n\n const summary: Summary = {\n total: {\n inclTax: {\n amount: grandTotal.value!,\n currency: grandTotal.currency!,\n },\n },\n subtotal: {\n amount: subtotal!.value!,\n currency: subtotal!.currency!,\n isTaxIncl: inclTaxInSubtotal,\n },\n };\n\n if (hasTaxesApplied) {\n const totalTaxAmount = appliedTaxes.reduce(\n (total, tax) => total + tax!.amount.value!,\n ZERO_AMOUNT\n );\n\n const firstTax = appliedTaxes[0];\n\n summary.tax = {\n amount: totalTaxAmount,\n currency: firstTax!.amount.currency!,\n };\n\n if (taxCartDisplay.shoppingCartDisplayFullSummary) {\n summary.tax.breakdown = appliedTaxes as CartTaxItem[];\n }\n }\n\n if (!hasTaxesApplied && taxCartDisplay.shoppingCartDisplayZeroTax) {\n summary.tax = {\n amount: ZERO_AMOUNT,\n currency: summary.total.inclTax.currency,\n };\n }\n\n if (taxCartDisplay.shoppingCartDisplayGrandTotal) {\n const totalExclTax = summary.tax\n ? summary.total.inclTax.amount - summary.tax.amount\n : summary.total.inclTax.amount;\n\n summary.total.exclTax = {\n amount: totalExclTax,\n currency: summary.total.inclTax.currency,\n };\n }\n\n if (hasAddresses) {\n const firstAddress = shippingAddresses[0];\n const shippingMethod = firstAddress?.selectedShippingMethod;\n\n if (!shippingMethod) return { isLoading: false, summary };\n\n summary.shipping = {\n amount: shippingMethod?.amount.value!,\n currency: shippingMethod?.amount.currency!,\n isEstimated: false,\n };\n\n return { isLoading: false, summary };\n }\n\n if (!selectedShippingMethodSignal.value) return { isLoading: false, summary };\n\n summary.shipping = {\n amount: selectedShippingMethodSignal.value.amount.value,\n currency: selectedShippingMethodSignal.value.amount.currency,\n isEstimated: true,\n };\n\n summary.total.inclTax.amount += summary.shipping.amount;\n if (summary.total.exclTax) {\n summary.total.exclTax.amount += summary.shipping.amount;\n }\n\n return { isLoading: false, summary };\n}\n\nexport const OrderSummary: Container<OrderSummaryProps> = ({ ...props }) => {\n const { isLoading, summary } = useOrderSummary();\n\n return (\n <div {...props}>\n {!summary && <OrderSummarySkeleton />}\n\n {summary && (\n <OrderSummaryComponent isLoading={isLoading} summary={summary} />\n )}\n </div>\n );\n};\n"],"names":["OrderSummary","className","summary","isLoading","props","total","subtotal","shipping","tax","_jsxs","Card","classes","children","_jsx","Heading","level","Text","id","Divider","variant","ProgressSpinner","Price","amount","currency","isTaxIncl","undefined","isEstimated","breakdown","_Fragment","map","label","value","inclTax","exclTax","OrderSummarySkeleton","Skeleton","SkeletonRow","size","fullWidth","lines","ZERO_AMOUNT","INCLUDE_TAX","loadingState","useOrderSummary","config","useStore","isLoadingStoreConfig","cartData","cartSignal","data","taxCartDisplay","inclTaxInSubtotal","shoppingCartDisplaySubtotal","shippingAddresses","hasAddresses","length","prices","grandTotal","grand_total","hasGrandTotal","subtotal_including_tax","subtotal_excluding_tax","appliedTaxes","applied_taxes","hasTaxesApplied","totalTaxAmount","reduce","firstTax","shoppingCartDisplayFullSummary","shoppingCartDisplayZeroTax","shoppingCartDisplayGrandTotal","totalExclTax","firstAddress","shippingMethod","selectedShippingMethod","selectedShippingMethodSignal","OrderSummaryComponent"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import"@dropins/tools/event-bus.js";import{i as I}from"./getStoreConfig.js";import{s as z}from"./setPaymentMethod.js";import{H as O}from"./ToggleButton.js";import"@dropins/tools/preact-hooks.js";import{classes as f,Slot as x}from"@dropins/tools/lib.js";import{IllustratedMessage as U,Icon as $,ProgressSpinner as q,Divider as Z,Skeleton as F,SkeletonRow as v,RadioButton as G}from"@dropins/tools/components.js";/* empty css */import{jsx as e,jsxs as y,Fragment as J}from"@dropins/tools/preact-jsx-runtime.js";import*as M from"@dropins/tools/preact-compat.js";import{useState as P,useCallback as N,useEffect as T}from"@dropins/tools/preact-compat.js";import{useText as K}from"@dropins/tools/i18n.js";const Q=t=>M.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M19.35 11.64H14.04V14.81H19.35V11.64Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.9304 11.64V8.25H15.1504",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"})),X=({code:t,isLoading:n,isSelected:d,onChange:s,title:o})=>e(ee,{className:"checkout-payment-methods__method",label:o,name:"payment-method",value:t,selected:d,onChange:s,radioButtonProps:{"aria-busy":n}}),Y=({className:t,paymentMethodContent:n,isLoading:d,onChange:s=()=>{},options:o,selection:u})=>{const l=K({Title:"Checkout.PaymentMethods.title",EmptyState:"Checkout.PaymentMethods.emptyState"});return o===void 0?e(D,{}):y("div",{className:f(["checkout-payment-methods",t]),children:[e(O,{level:2,className:"checkout-payment-methods__title",children:l.Title}),!d&&o.length===0&&e(U,{icon:e($,{source:Q}),message:e("p",{children:l.EmptyState})}),y("div",{className:f(["checkout-payment-methods__wrapper"]),children:[d&&e(q,{className:"checkout-payment-methods__spinner"}),e("div",{className:f(["checkout-payment-methods__methods",["checkout-payment-methods--loading",d],["checkout-payment-methods--full-width",o.length%2!==0]]),children:o==null?void 0:o.map(m=>e(X,{code:m.code,onChange:s,isSelected:m.code===u,title:m.title},m.code))}),n&&e("div",{className:"checkout-payment-methods__content",children:n})]}),e(Z,{variant:"primary"})]})},D=()=>y(F,{"data-testid":"payment-methods-skeleton",children:[e(v,{variant:"heading",size:"medium"}),e(v,{variant:"empty",size:"medium"}),e(v,{size:"xlarge",fullWidth:!0}),e(v,{size:"xlarge",fullWidth:!0})]}),ee=({label:t,name:n,value:d,icon:s,selected:o,onChange:u,className:l,children:m,radioButtonProps:g,...h})=>e("div",{className:f(["checkout-toggle-button",l,["checkout-toggle-button__selected",o]]),...h,children:y("label",{className:"checkout-toggle-button__actionButton",children:[e(G,{...g,label:"",name:n,value:d,checked:o,onChange:()=>u(d),"aria-label":t,className:f([l,"checkout-toggle-button__radioButton"])}),y("div",{className:"checkout-toggle-button__content",children:[s&&e(s.type,{...s==null?void 0:s.props,className:"checkout-toggle-button__icon"}),t]})]})}),L={free:{render:t=>{const n=document.createElement("div");n.innerText="",t.replaceHTML(n)}},checkmo:{render:t=>{const n=document.createElement("div");n.innerText="",t.replaceHTML(n)}}};function te(t){var E;const{onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o}=t,[u,l]=P(),[m,g]=P(),[h,_]=P(L),[C,W]=P(!0),{data:a}=I.value,S=(a==null?void 0:a.id)??"",b=!!a,w=!!((E=a==null?void 0:a.shippingAddresses)!=null&&E[0]),i=a==null?void 0:a.availablePaymentMethods,c=a==null?void 0:a.selectedPaymentMethod,k=N(async r=>{try{if(l(r),!w&&o||r===(c==null?void 0:c.code))return;await z({cartId:S,paymentMethod:r})}catch(p){console.error("setting payment method failed:",p)}},[S,w,o,c]);T(()=>{b&&(c!=null&&c.code?(i==null?void 0:i.some(p=>p.code===c.code))?l(c.code):i!=null&&i.length?k(i[0].code):l(void 0):i[0]&&k(m||i[0].code))},[i,b,c,k,m]);const B=async r=>{await k(r),c!=null&&c.code||g(r)},V=N((r,p)=>{if(!r){console.warn("Payment method handler is ignored because it has no code");return}if(!p){console.warn("Payment method handler is ignored because it is empty");return}_(R=>({...R,[r]:p}))},[]),j=s?e(x,{name:"PaymentMethods",slot:s,context:{addPaymentMethodHandler:V,replaceHTML(r){this.replaceWith(r),W(!1)}}}):null,H=u?h[u]:null,A=H?e(x,{name:"PaymentMethodContent",slot:H.render,context:{cartId:S,onPlaceOrder:n,handleServerError:d,replaceHTML(r){this.replaceWith(r)}}},H):void 0;return T(()=>{!C&&h!=L&&console.warn("Payment method handlers you have added are ignored because the default content has been replaced")},[C,h]),{availablePaymentMethods:i,selectedPaymentMethod:u,onPaymentMethodChange:B,paymentMethodContent:A,mainSlotContent:j,isDefaultContentUsed:C}}const ue=t=>{const{onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o=!0}=t,{availablePaymentMethods:u,selectedPaymentMethod:l,onPaymentMethodChange:m,paymentMethodContent:g,mainSlotContent:h,isDefaultContentUsed:_}=te({onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o});return y(J,{children:[h&&e(h.type,{ref:h.ref,...h.props}),_&&e(Y,{options:u,selection:l,onChange:m,paymentMethodContent:g,isLoading:I.value.pending})]})};export{ue as P};
2
- //# sourceMappingURL=PaymentMethods.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentMethods.js","sources":["../../node_modules/@adobe/elsie/src/icons/Wallet.svg","../../src/components/PaymentMethods/PaymentMethods.tsx","../../src/components/PaymentMethods/PaymentMethodsSkeleton.tsx","../../src/components/ToggleButton/ToggleButton.tsx","../../src/containers/PaymentMethods/defaultHandlers.tsx","../../src/containers/PaymentMethods/PaymentMethods.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgWallet = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.35 11.64H14.04V14.81H19.35V11.64Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.9304 11.64V8.25H15.1504\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWallet;\n","import { Heading, ToggleButton } from '@/checkout/components';\nimport { PaymentMethodsSkeleton } from '@/checkout/components/PaymentMethods';\nimport '@/checkout/components/PaymentMethods/PaymentMethods.css';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\nimport {\n Divider,\n Icon,\n IllustratedMessage,\n ProgressSpinner,\n} from '@adobe/elsie/components';\nimport { useText } from '@adobe/elsie/i18n';\nimport { Wallet } from '@adobe/elsie/icons';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface PaymentMethodsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n paymentMethodContent?: VNode;\n isLoading?: boolean;\n onChange?: (value: string) => void;\n options?: PaymentMethod[];\n selection?: string;\n}\n\ninterface PaymentOptionProps {\n code: string;\n isLoading?: boolean;\n isSelected: boolean;\n onChange: (value: string) => void;\n title: string;\n}\n\nconst PaymentOption: FunctionComponent<PaymentOptionProps> = ({\n code,\n isLoading,\n isSelected,\n onChange,\n title,\n}) => {\n return (\n <ToggleButton\n className=\"checkout-payment-methods__method\"\n label={title}\n name=\"payment-method\"\n value={code}\n selected={isSelected}\n onChange={onChange}\n radioButtonProps={{\n 'aria-busy': isLoading,\n }}\n // TODO: Add icon\n />\n );\n};\n\nexport const PaymentMethods: FunctionComponent<PaymentMethodsProps> = ({\n className,\n paymentMethodContent,\n isLoading,\n onChange = () => {},\n options,\n selection,\n}) => {\n const dictionary = useText({\n Title: 'Checkout.PaymentMethods.title',\n EmptyState: 'Checkout.PaymentMethods.emptyState',\n });\n\n if (options === undefined) return <PaymentMethodsSkeleton />;\n\n return (\n <div className={classes(['checkout-payment-methods', className])}>\n <Heading level={2} className=\"checkout-payment-methods__title\">\n {dictionary.Title}\n </Heading>\n\n {!isLoading && options!.length === 0 && (\n <IllustratedMessage\n icon={<Icon source={Wallet} />}\n message={<p>{dictionary.EmptyState}</p>}\n />\n )}\n\n <div className={classes(['checkout-payment-methods__wrapper'])}>\n {isLoading && (\n <ProgressSpinner className=\"checkout-payment-methods__spinner\" />\n )}\n\n <div\n className={classes([\n 'checkout-payment-methods__methods',\n ['checkout-payment-methods--loading', isLoading],\n ['checkout-payment-methods--full-width', options!.length % 2 !== 0],\n ])}\n >\n {options?.map((method) => (\n <PaymentOption\n code={method.code}\n key={method.code}\n onChange={onChange}\n isSelected={method.code === selection}\n title={method.title}\n />\n ))}\n </div>\n\n {paymentMethodContent && (\n <div className=\"checkout-payment-methods__content\">\n {paymentMethodContent}\n </div>\n )}\n </div>\n <Divider variant=\"primary\" />\n </div>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const PaymentMethodsSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"payment-methods-skeleton\">\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"xlarge\" fullWidth={true} />\n <SkeletonRow size=\"xlarge\" fullWidth={true} />\n </Skeleton>\n );\n};\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport '@/checkout/components/ToggleButton/ToggleButton.css';\nimport { RadioButton } from '@adobe/elsie/components';\n\nexport interface ToggleButtonProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'icon'> {\n label: string;\n name: string;\n value: string;\n selected: boolean;\n onChange: (value: string) => void;\n icon?:\n | VNode<HTMLAttributes<SVGSVGElement>>\n | VNode<HTMLAttributes<HTMLImageElement>>;\n radioButtonProps?: Omit<\n HTMLAttributes<HTMLInputElement>,\n 'size' | 'label' | 'name' | 'value' | 'checked' | 'disabled'\n >;\n}\n\nexport const ToggleButton: FunctionComponent<ToggleButtonProps> = ({\n label,\n name,\n value,\n icon,\n selected,\n onChange,\n className,\n children,\n radioButtonProps,\n ...props\n}) => {\n return (\n <div\n className={classes([\n 'checkout-toggle-button',\n className,\n ['checkout-toggle-button__selected', selected],\n ])}\n {...props}\n >\n <label className=\"checkout-toggle-button__actionButton\">\n <RadioButton\n {...radioButtonProps}\n label=\"\"\n name={name}\n value={value}\n checked={selected}\n onChange={() => onChange(value)}\n aria-label={label}\n className={classes([\n className,\n 'checkout-toggle-button__radioButton',\n ])}\n />\n\n <div className=\"checkout-toggle-button__content\">\n {icon && (\n <icon.type\n {...icon?.props}\n className=\"checkout-toggle-button__icon\"\n />\n )}\n\n {label}\n </div>\n </label>\n </div>\n );\n};\n","import { SlotProps } from '@adobe/elsie/lib';\nimport { PaymentMethodContentSlotContext } from '.';\n\nexport interface PaymentMethodHandler {\n render: SlotProps<PaymentMethodContentSlotContext>;\n}\n\nexport interface PaymentMethodHandlers {\n [code: string]: PaymentMethodHandler;\n}\n\nexport const defaultHandlers: PaymentMethodHandlers = {\n free: {\n render: (context) => {\n const $content = document.createElement('div');\n $content.innerText = '';\n context.replaceHTML($content);\n },\n },\n checkmo: {\n render: (context) => {\n const $content = document.createElement('div');\n $content.innerText = '';\n context.replaceHTML($content);\n },\n },\n};\n","import { setPaymentMethod as setPaymentMethodOnCart } from '@/checkout/api';\nimport { PaymentMethods as PaymentMethodsComponent } from '@/checkout/components/PaymentMethods/PaymentMethods';\nimport {\n PaymentMethodHandler,\n defaultHandlers,\n} from '@/checkout/containers/PaymentMethods/defaultHandlers';\nimport { cartSignal } from '@/checkout/signals';\nimport { Container, Slot, SlotProps } from '@adobe/elsie/lib';\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n} from 'preact/compat';\n\nexport interface PaymentMethodSlotContext {\n addPaymentMethodHandler: (\n code: string,\n handler: { render: SlotProps<PaymentMethodContentSlotContext> }\n ) => void;\n replaceHTML: (domElement: HTMLElement) => void;\n}\n\nexport interface PaymentMethodContentSlotContext {\n cartId: string;\n onPlaceOrder: (fn: () => Promise<void>) => void;\n handleServerError: (error: any) => void;\n replaceHTML: (domElement: HTMLElement) => void;\n}\n\nexport interface PaymentMethodsProps extends HTMLAttributes<HTMLDivElement> {\n paymentMethodsSlot?: SlotProps<PaymentMethodSlotContext>;\n onPlaceOrder: (fn: () => Promise<void>) => void;\n handleServerError: (error: any) => void;\n isShippingInfoRequired?: boolean;\n}\n\nfunction usePaymentMethods(props: PaymentMethodsProps) {\n const {\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired,\n } = props;\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n string | undefined\n >();\n const [temporarySelectedPaymentMethod, setTemporarySelectedPaymentMethod] =\n useState<string | undefined>();\n\n const [paymentMethodHandlers, setPaymentMethodHandlers] =\n useState(defaultHandlers);\n\n const [isDefaultContentUsed, setIsDefaultContentUsed] = useState(true);\n\n const { data: cartData } = cartSignal.value;\n const cartId = cartData?.id ?? '';\n const hasCartData = !!cartData;\n const hasAddress = !!cartData?.shippingAddresses?.[0];\n const availablePaymentMethods = cartData?.availablePaymentMethods;\n const cartSelectedPaymentMethod = cartData?.selectedPaymentMethod;\n\n const setAndSelectPaymentMethod = useCallback(\n async (paymentMethod: string) => {\n try {\n setSelectedPaymentMethod(paymentMethod);\n\n if (!hasAddress && isShippingInfoRequired) return;\n\n if (paymentMethod === cartSelectedPaymentMethod?.code) return;\n\n await setPaymentMethodOnCart({ cartId, paymentMethod });\n } catch (error: any) {\n console.error('setting payment method failed:', error);\n }\n },\n [cartId, hasAddress, isShippingInfoRequired, cartSelectedPaymentMethod]\n );\n\n useEffect(() => {\n if (!hasCartData) return;\n\n if (cartSelectedPaymentMethod?.code) {\n const selectedPaymentMethodIsAvailable = availablePaymentMethods?.some(\n (method: any) => method.code === cartSelectedPaymentMethod.code\n );\n\n if (selectedPaymentMethodIsAvailable) {\n // select the method from the backend\n setSelectedPaymentMethod(cartSelectedPaymentMethod.code);\n } else if (availablePaymentMethods?.length) {\n // select the first available method\n setAndSelectPaymentMethod(availablePaymentMethods[0]!.code);\n } else {\n setSelectedPaymentMethod(undefined);\n }\n } else {\n // default to the temporarily selected one or the first one\n availablePaymentMethods![0] &&\n setAndSelectPaymentMethod(\n temporarySelectedPaymentMethod || availablePaymentMethods![0].code\n );\n }\n }, [\n availablePaymentMethods,\n hasCartData,\n cartSelectedPaymentMethod,\n setAndSelectPaymentMethod,\n temporarySelectedPaymentMethod,\n ]);\n\n const onPaymentMethodChange = async (value: string) => {\n await setAndSelectPaymentMethod(value);\n if (!cartSelectedPaymentMethod?.code) {\n setTemporarySelectedPaymentMethod(value);\n }\n };\n\n const addPaymentMethodHandler = useCallback(\n (code: string, handler: PaymentMethodHandler) => {\n if (!code) {\n console.warn(\n 'Payment method handler is ignored because it has no code'\n );\n return;\n }\n\n if (!handler) {\n console.warn('Payment method handler is ignored because it is empty');\n return;\n }\n\n setPaymentMethodHandlers((prevHandlers) => ({\n ...prevHandlers,\n [code]: handler,\n }));\n },\n []\n );\n\n // Run the main payment method container slot callback\n const mainSlotContent = paymentMethodsSlot ? (\n <Slot\n name=\"PaymentMethods\"\n slot={paymentMethodsSlot}\n context={{\n addPaymentMethodHandler,\n replaceHTML(domElement) {\n this.replaceWith(domElement);\n setIsDefaultContentUsed(false);\n },\n }}\n />\n ) : null;\n\n const selectedPaymentMethodHandler = selectedPaymentMethod\n ? paymentMethodHandlers[selectedPaymentMethod]\n : null;\n\n const paymentMethodContent = selectedPaymentMethodHandler ? (\n <Slot\n key={selectedPaymentMethodHandler}\n name=\"PaymentMethodContent\"\n slot={selectedPaymentMethodHandler.render}\n context={{\n cartId,\n onPlaceOrder,\n handleServerError,\n replaceHTML(domElement) {\n this.replaceWith(domElement);\n },\n }}\n />\n ) : undefined;\n\n useEffect(() => {\n // Content has been replaced but payment method handlers have been added\n if (!isDefaultContentUsed && paymentMethodHandlers != defaultHandlers) {\n console.warn(\n 'Payment method handlers you have added are ignored because the default content has been replaced'\n );\n }\n }, [isDefaultContentUsed, paymentMethodHandlers]);\n\n return {\n availablePaymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n paymentMethodContent,\n mainSlotContent,\n isDefaultContentUsed,\n };\n}\n\nexport const PaymentMethods: Container<PaymentMethodsProps> = (props) => {\n const {\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired = true,\n } = props;\n const {\n availablePaymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n paymentMethodContent,\n mainSlotContent,\n isDefaultContentUsed,\n } = usePaymentMethods({\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired,\n });\n\n return (\n <>\n {mainSlotContent && (\n // @ts-ignore\n <mainSlotContent.type\n ref={mainSlotContent.ref}\n {...mainSlotContent.props}\n />\n )}\n {isDefaultContentUsed && (\n <PaymentMethodsComponent\n options={availablePaymentMethods}\n selection={selectedPaymentMethod}\n onChange={onPaymentMethodChange}\n paymentMethodContent={paymentMethodContent}\n isLoading={cartSignal.value.pending}\n />\n )}\n </>\n );\n};\n"],"names":["SvgWallet","props","React","PaymentOption","code","isLoading","isSelected","onChange","title","_jsx","ToggleButton","className","label","name","value","selected","radioButtonProps","PaymentMethods","paymentMethodContent","options","selection","dictionary","useText","Title","EmptyState","undefined","PaymentMethodsSkeleton","_jsxs","classes","children","Heading","level","length","IllustratedMessage","icon","Icon","source","Wallet","message","ProgressSpinner","map","method","Divider","variant","Skeleton","SkeletonRow","size","fullWidth","RadioButton","checked","type","defaultHandlers","free","render","context","$content","document","createElement","innerText","replaceHTML","checkmo","usePaymentMethods","onPlaceOrder","handleServerError","paymentMethodsSlot","isShippingInfoRequired","selectedPaymentMethod","setSelectedPaymentMethod","useState","temporarySelectedPaymentMethod","setTemporarySelectedPaymentMethod","paymentMethodHandlers","setPaymentMethodHandlers","isDefaultContentUsed","setIsDefaultContentUsed","data","cartData","cartSignal","cartId","id","hasCartData","hasAddress","shippingAddresses","availablePaymentMethods","cartSelectedPaymentMethod","setAndSelectPaymentMethod","useCallback","paymentMethod","setPaymentMethodOnCart","error","useEffect","some","onPaymentMethodChange","addPaymentMethodHandler","handler","console","warn","prevHandlers","mainSlotContent","Slot","slot","domElement","replaceWith","selectedPaymentMethodHandler","_Fragment","ref","PaymentMethodsComponent","pending"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PlaceOrder.js","sources":["../../src/components/PlaceOrder/PlaceOrder.tsx","../../src/containers/PlaceOrder/PlaceOrder.tsx"],"sourcesContent":["import { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport '@/checkout/components/PlaceOrder/PlaceOrder.css';\nimport { Button } from '@adobe/elsie/components';\nimport { Text } from '@adobe/elsie/i18n';\n\nexport interface PlaceOrderProps extends HTMLAttributes<HTMLButtonElement> {\n onClick?: (e: any) => void;\n isLoading?: boolean;\n}\n\nexport const PlaceOrder: FunctionComponent<PlaceOrderProps> = ({\n className,\n children,\n ...props\n}) => {\n const { onClick = () => {}, isLoading } = props;\n\n return (\n <div className={classes(['checkout-place-order', className])}>\n <Button\n className={classes(['checkout-place-order__button', className])}\n size=\"medium\"\n variant=\"primary\"\n key=\"placeOrder\"\n type=\"submit\"\n onClick={onClick}\n disabled={isLoading}\n >\n <Text id=\"Checkout.PlaceOrder.button\" />\n </Button>\n </div>\n );\n};\n","import { HTMLAttributes } from 'preact/compat';\nimport { Container } from '@adobe/elsie/lib';\nimport { PlaceOrder as PlaceOrderComponent } from '@/checkout/components/PlaceOrder/PlaceOrder';\nimport {\n BILLING_FORM_NAME,\n LOGIN_FORM_NAME,\n SHIPPING_FORM_NAME,\n} from '@/checkout/containers';\nimport { cartSignal } from '@/checkout/signals';\n\nexport interface PlaceOrderProps extends HTMLAttributes<HTMLDivElement> {\n onClick: () => void;\n handleServerError: (error: any) => void;\n}\n\nconst CHECKOUT_FORMS = [LOGIN_FORM_NAME, SHIPPING_FORM_NAME, BILLING_FORM_NAME];\n\nconst scrollToFirstInvalidField = (form: HTMLFormElement) => {\n const firstInvalidField = form.querySelector(':invalid') as HTMLElement;\n\n if (firstInvalidField) {\n firstInvalidField.scrollIntoView({ behavior: 'smooth' });\n firstInvalidField.focus();\n }\n};\n\nconst canPlaceOrder = () => {\n const formCollection = Array.from(document.forms) || [];\n\n const invalidForms = formCollection\n .filter((form) => {\n return CHECKOUT_FORMS.includes(form.name);\n })\n .filter((form) => {\n // ignore forms that are not visible\n return form.offsetParent !== null;\n })\n .filter((form) => {\n // this will trigger the validation on all the fields\n return !form.checkValidity();\n });\n\n const canPlaceOrder = invalidForms.length === 0;\n\n if (!canPlaceOrder) {\n const firstInvalidForm = invalidForms[0];\n scrollToFirstInvalidField(firstInvalidForm);\n }\n\n return canPlaceOrder;\n};\n\nexport const PlaceOrder: Container<PlaceOrderProps> = (props) => {\n const { onClick, handleServerError } = props;\n\n const handleOrderPlace = async () => {\n if (!canPlaceOrder()) return;\n try {\n await onClick();\n } catch (err) {\n handleServerError(err);\n }\n };\n\n return (\n <PlaceOrderComponent\n onClick={handleOrderPlace}\n isLoading={cartSignal.value.pending}\n />\n );\n};\n"],"names":["PlaceOrder","className","children","props","onClick","isLoading","_jsx","classes","Button","size","variant","type","disabled","Text","id","CHECKOUT_FORMS","LOGIN_FORM_NAME","SHIPPING_FORM_NAME","BILLING_FORM_NAME","scrollToFirstInvalidField","form","firstInvalidField","querySelector","scrollIntoView","behavior","focus","canPlaceOrder","invalidForms","Array","from","document","forms","filter","includes","name","offsetParent","checkValidity","length","firstInvalidForm","handleServerError","PlaceOrderComponent","err","cartSignal","value","pending"],"mappings":"khBAYO,MAAMA,EAAiDA,CAAC,CAC7DC,UAAAA,EACAC,SAAAA,EACA,GAAGC,CACL,IAAM,CACE,KAAA,CAAEC,QAAAA,EAAUA,IAAM,CAAC,EAAGC,UAAAA,CAAcF,EAAAA,EAE1C,OACEG,EAAA,MAAA,CAAKL,UAAWM,EAAQ,CAAC,uBAAwBN,CAAS,CAAC,EAAEC,SAC3DI,EAACE,EAAM,CACLP,UAAWM,EAAQ,CAAC,+BAAgCN,CAAS,CAAC,EAC9DQ,KAAK,SACLC,QAAQ,UAERC,KAAK,SACLP,QAAAA,EACAQ,SAAUP,EAAUH,SAEpBI,EAACO,EAAI,CAACC,GAAG,4BAAA,CAA8B,GALnC,YAME,CAAA,CACL,CAET,ECnBMC,EAAiB,CAACC,EAAiBC,EAAoBC,CAAiB,EAExEC,EAA6BC,GAA0B,CACrDC,MAAAA,EAAoBD,EAAKE,cAAc,UAAU,EAEnDD,IACFA,EAAkBE,eAAe,CAAEC,SAAU,QAAA,CAAU,EACvDH,EAAkBI,MAAM,EAE5B,EAEMC,EAAgBA,IAAM,CAGpBC,MAAAA,GAFiBC,MAAMC,KAAKC,SAASC,KAAK,GAAK,IAGlDC,OAAiBZ,GACTL,EAAekB,SAASb,EAAKc,IAAI,CACzC,EACAF,OAAiBZ,GAETA,EAAKe,eAAiB,IAC9B,EACAH,OAAiBZ,GAET,CAACA,EAAKgB,eACd,EAEGV,EAAgBC,EAAaU,SAAW,EAE9C,GAAI,CAACX,EAAe,CACZY,MAAAA,EAAmBX,EAAa,CAAC,EACvCR,EAA0BmB,CAAgB,CAC5C,CAEOZ,OAAAA,CACT,EAEa1B,EAAoDG,GAAA,CACzD,KAAA,CAAEC,QAAAA,EAASmC,kBAAAA,CAAsBpC,EAAAA,EAWvC,OACEG,EAACkC,EAAmB,CAClBpC,QAXqB,SAAY,CACnC,GAAKsB,EAAc,EACf,GAAA,CACF,MAAMtB,EAAQ,QACPqC,EAAK,CACZF,EAAkBE,CAAG,CACvB,CAAA,EAMEpC,UAAWqC,EAAWC,MAAMC,OAAAA,CAC7B,CAEL"}
@@ -1,2 +0,0 @@
1
- import{k as o}from"./getStoreConfig.js";const i=o(void 0);export{i as s};
2
- //# sourceMappingURL=SelectedShippingMethodSignal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedShippingMethodSignal.js","sources":["../../src/signals/SelectedShippingMethodSignal.ts"],"sourcesContent":["import { signal } from '@preact/signals';\nimport { ShippingMethod } from '@/checkout/data/models';\n\nexport const selectedShippingMethodSignal = signal<ShippingMethod | undefined>(\n undefined\n);\n"],"names":["selectedShippingMethodSignal","signal","undefined"],"mappings":"wCAGaA,MAAAA,EAA+BC,EAC1CC,MACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShippingForm.js","sources":["../../src/containers/ShippingForm/ShippingForm.tsx"],"sourcesContent":["import {\n prepareAddress,\n setBillingAddress,\n setShippingAddress,\n} from '@/checkout/api';\nimport { AddressForm, SaveAddressCommand } from '@/checkout/components/AddressForm';\nimport { SHIPPING_FORM_NAME } from '@/checkout/containers/ShippingForm';\nimport { Container } from '@adobe/elsie/lib';\nimport { HTMLAttributes, useCallback } from 'preact/compat';\nimport { PreselectedAddressFields } from '@/checkout/containers';\nimport { cartSignal, isBillToShippingSignal } from '@/checkout/signals';\nimport { AddressFormType } from '@/checkout/data/models';\n\nexport interface ShippingFormProps extends HTMLAttributes<HTMLDivElement> {\n preselectedFields?: PreselectedAddressFields;\n}\n\nexport const ShippingForm: Container<ShippingFormProps> = ({\n preselectedFields,\n ...props\n}) => {\n const { data: CartData } = cartSignal.value;\n const cartId = CartData?.id || '';\n const isBillToShipping = isBillToShippingSignal.value.checked;\n\n const saveAddressHandler = useCallback(\n (command: SaveAddressCommand) => {\n return setShippingAddress({\n signal: command.signal,\n cartId,\n address: prepareAddress(command.address),\n }).then(() => {\n if (isBillToShipping) {\n return setBillingAddress({\n cartId,\n input: { same_as_shipping: true },\n });\n }\n });\n },\n [cartId, isBillToShipping]\n );\n\n return (\n <AddressForm\n {...props}\n addressType={AddressFormType.SHIPPING}\n headingId=\"Checkout.ShippingAddress.title\"\n name={SHIPPING_FORM_NAME}\n preselectedFields={preselectedFields}\n saveAddressHandler={saveAddressHandler}\n />\n );\n};\n"],"names":["ShippingForm","preselectedFields","props","data","CartData","cartSignal","value","cartId","id","isBillToShipping","isBillToShippingSignal","checked","saveAddressHandler","useCallback","command","setShippingAddress","signal","address","prepareAddress","then","setBillingAddress","input","same_as_shipping","_jsx","AddressForm","addressType","AddressFormType","SHIPPING","headingId","name","SHIPPING_FORM_NAME"],"mappings":"oeAiBO,MAAMA,EAA6CA,CAAC,CACzDC,kBAAAA,EACA,GAAGC,CACL,IAAM,CACE,KAAA,CAAEC,KAAMC,CAAAA,EAAaC,EAAWC,MAChCC,GAASH,GAAAA,YAAAA,EAAUI,KAAM,GACzBC,EAAmBC,EAAuBJ,MAAMK,QAEhDC,EAAqBC,EACxBC,GACQC,EAAmB,CACxBC,OAAQF,EAAQE,OAChBT,OAAAA,EACAU,QAASC,EAAeJ,EAAQG,OAAO,CAAA,CACxC,EAAEE,KAAK,IAAM,CACZ,GAAIV,EACF,OAAOW,EAAkB,CACvBb,OAAAA,EACAc,MAAO,CAAEC,iBAAkB,EAAK,CAAA,CACjC,CACH,CACD,EAEH,CAACf,EAAQE,CAAgB,CAC3B,EAEA,OACEc,EAACC,EAAW,CAAA,GACNtB,EACJuB,YAAaC,EAAgBC,SAC7BC,UAAU,iCACVC,KAAMC,EACN7B,kBAAAA,EACAW,mBAAAA,CAAAA,CACD,CAEL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShippingMethods.js","sources":["../../node_modules/@adobe/elsie/src/icons/Delivery.svg","../../src/components/ShippingMethods/ShippingMethods.tsx","../../src/components/ShippingMethods/ShippingMethodsSkeleton.tsx","../../src/utils/shippingMethods/isEqual.ts","../../src/containers/ShippingMethods/ShippingMethods.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgDelivery = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M2.47266 4.90002H15.1851V10.9645H21.2495L23 12.715V17.6124H20.073\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M15.1758 5.87573H19.0019L21.0394 10.7636\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M9.76151 16.7898C9.76151 18.0525 8.72845 19.076 7.46582 19.076C6.20318 19.076 5.17969 18.0429 5.17969 16.7803C5.17969 15.5176 6.20318 14.4941 7.46582 14.4941C8.72845 14.4941 9.75195 15.5176 9.76151 16.7803C9.76151 16.7803 9.76151 16.7803 9.76151 16.7898Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.8726 16.7898C19.8726 18.062 18.8491 19.0855 17.5769 19.0855C16.3047 19.0855 15.2812 18.062 15.2812 16.7898C15.2812 15.5176 16.3047 14.4941 17.5769 14.4941C18.8491 14.4941 19.8726 15.5176 19.8726 16.7898Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M8.08792 7.63574H1.69824\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M7.11229 10.3619H1\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M5.16084 13.0402H1.92773\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M9.76172 16.7611H15.2809\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M2.38672 16.7611H5.17025\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgDelivery;\n","import { classes } from '@adobe/elsie/lib';\nimport '@/checkout/components/ShippingMethods/ShippingMethods.css';\nimport {\n Divider,\n Icon,\n IllustratedMessage,\n Price,\n ProgressSpinner,\n RadioButton,\n} from '@adobe/elsie/components';\nimport { useText } from '@adobe/elsie/i18n';\nimport { Delivery } from '@adobe/elsie/icons';\nimport { Heading } from '@/checkout/components';\nimport { ShippingMethodsSkeleton } from '@/checkout/components/ShippingMethods';\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { ShippingMethod } from '@/checkout/data/models';\n\nexport interface ShippingMethodsProps extends HTMLAttributes<HTMLDivElement> {\n isLoading?: boolean;\n onSelectionChange?: (method: ShippingMethod) => void;\n options?: ShippingMethod[];\n selection?: ShippingMethod;\n}\n\nexport const ShippingMethods: FunctionComponent<ShippingMethodsProps> = ({\n className,\n isLoading = false,\n onSelectionChange = () => {},\n options,\n selection,\n ...props\n}) => {\n const dictionary = useText({\n Title: 'Checkout.ShippingMethods.title',\n EmptyState: 'Checkout.ShippingMethods.emptyState',\n });\n\n if (options === undefined) return <ShippingMethodsSkeleton />;\n\n return (\n <div\n {...props}\n className={classes(['checkout-shipping-methods', className])}\n >\n <Heading level={3} className=\"checkout-shipping-methods__title\">\n {dictionary.Title}\n </Heading>\n\n {!isLoading && options.length === 0 && (\n <IllustratedMessage\n icon={<Icon source={Delivery} />}\n message={<p>{dictionary.EmptyState}</p>}\n />\n )}\n\n <div className={classes(['checkout-shipping-methods__content'])}>\n {isLoading && (\n <ProgressSpinner className=\"checkout-shipping-methods__spinner\" />\n )}\n\n <div\n className={classes([\n 'checkout-shipping-methods__options',\n ['checkout-shipping-methods__options--loading', isLoading],\n ])}\n >\n {options.map((method: ShippingMethod) => {\n return (\n <RadioButton\n data-testid=\"shipping-method-radiobutton\"\n aria-busy={isLoading}\n id={method.value}\n key={method.value}\n name=\"shipping-method\"\n className=\"checkout-shipping-methods__method\"\n label={\n <>\n <Price\n amount={method.amount.value}\n currency={method.amount.currency}\n />\n &nbsp;\n <span>{method.carrier.title}</span>\n </>\n }\n description={method.title}\n value={method.value}\n checked={selection?.value === method.value}\n onChange={() => onSelectionChange(method)}\n />\n );\n })}\n </div>\n </div>\n <Divider variant=\"primary\" />\n </div>\n );\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const ShippingMethodsSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"shipping-methods-skeleton\">\n <SkeletonRow variant=\"heading\" size=\"small\" />\n <SkeletonRow variant=\"empty\" size=\"small\" />\n <SkeletonRow size=\"medium\" fullWidth={true} />\n <SkeletonRow size=\"medium\" fullWidth={true} />\n </Skeleton>\n );\n};\n","import { ShippingMethod } from '@/checkout/data/models';\n\nexport const isEqual = (a: ShippingMethod, b: ShippingMethod) => {\n return a.code === b.code && a.carrier.code === b.carrier.code;\n};\n","import {\n estimateShippingMethods,\n setShippingMethodsOnCart,\n} from '@/checkout/api';\nimport { ShippingMethods as ShippingMethodsList } from '@/checkout/components/ShippingMethods';\nimport { PreselectedShippingMethod } from '@/checkout/containers/Checkout';\nimport { useStore } from '@/checkout/context/store';\nimport { ShippingMethod } from '@/checkout/data/models';\nimport {\n cartSignal,\n estimateShippingMethodsSignal,\n regionsSignal,\n} from '@/checkout/signals';\nimport { selectedShippingMethodSignal } from '@/checkout/signals/SelectedShippingMethodSignal';\nimport { isEqual } from '@/checkout/utils/shippingMethods';\nimport { Container } from '@adobe/elsie/lib';\nimport { HTMLAttributes, useCallback, useEffect, useMemo } from 'preact/compat';\n\nexport interface ShippingMethodsProps extends HTMLAttributes<HTMLDivElement> {\n preSelectedMethod?: PreselectedShippingMethod;\n}\n\nfunction useShippingMethods(preselectedMethod?: PreselectedShippingMethod) {\n const store = useStore();\n const config = store.config;\n const isLoadingConfig = !config;\n\n const cart = cartSignal.value.data;\n const isLoadingCart = cartSignal.value.pending;\n const estimationShippingMethods = estimateShippingMethodsSignal.value.data;\n const isLoadingEstimation = estimateShippingMethodsSignal.value.pending;\n const localShippingSelection = selectedShippingMethodSignal.value;\n\n const cartId = cart?.id;\n const cartShippingAddresses = cart?.shippingAddresses;\n const primaryAddress = cartShippingAddresses?.[0];\n const isAbleToSetShippingMethod = !!primaryAddress;\n const cartShippingMethods = primaryAddress?.availableShippingMethods;\n const cartShippingSelection = primaryAddress?.selectedShippingMethod;\n\n const shippingOptions = cartShippingMethods || estimationShippingMethods;\n\n const setShippingMethodOnCart = useCallback(\n (method: ShippingMethod) => {\n if (!cartId || !isAbleToSetShippingMethod) return;\n\n const partialMethod = {\n method_code: method.code,\n carrier_code: method.carrier.code,\n };\n\n setShippingMethodsOnCart({\n cartId,\n shippingMethods: [partialMethod],\n }).catch((error) => {\n console.error('setting shipping methods on cart failed:', error);\n });\n },\n [cartId, isAbleToSetShippingMethod]\n );\n\n const onSelectionChange = (method: ShippingMethod) => {\n selectedShippingMethodSignal.value = method;\n };\n\n /**\n * This memo is responsible for determining the selected shipping method\n * based on the current state of the cart and the available shipping methods.\n */\n const selectedShippingOption: ShippingMethod | undefined = useMemo(() => {\n if (!shippingOptions?.length) return;\n\n const fallbackShippingOption = shippingOptions[0];\n const selection = localShippingSelection || cartShippingSelection;\n\n if (!selection) {\n const preselection = shippingOptions.find((method) => {\n return (\n method.carrier.code === preselectedMethod?.carrierCode &&\n method.code === preselectedMethod?.methodCode\n );\n });\n\n return preselection || fallbackShippingOption;\n }\n\n const isAvailable = shippingOptions.some((method) =>\n isEqual(method, selection)\n );\n\n return isAvailable ? selection : fallbackShippingOption;\n }, [\n localShippingSelection,\n cartShippingSelection,\n shippingOptions,\n preselectedMethod,\n ]);\n\n /**\n * This effect is responsible for syncing the local and cart state with the current selection.\n\n * - Initialize the local selection with the data from the cart when needed.\n * - Initialize the local selection and sync the cart when using the first available method.\n * - If the cart gets out of sync, update the cart with the local selection.\n */\n useEffect(() => {\n if (!selectedShippingOption) return;\n\n if (\n !localShippingSelection ||\n !isEqual(selectedShippingOption, localShippingSelection)\n ) {\n selectedShippingMethodSignal.value = selectedShippingOption;\n }\n\n if (\n !cartShippingSelection ||\n !isEqual(selectedShippingOption, cartShippingSelection)\n ) {\n setShippingMethodOnCart(selectedShippingOption);\n }\n }, [\n selectedShippingOption,\n localShippingSelection,\n cartShippingSelection,\n setShippingMethodOnCart,\n ]);\n\n /**\n * This effect is responsible for triggering the shipping methods estimation.\n *\n * - Only triggers if there is cart data and no available shipping methods.\n * - Builds the estimate shipping search fields using the current region data or defaults.\n * - Calls the estimateShipping function with the cartId and search fields.\n */\n useEffect(() => {\n if (!cartId || cartShippingMethods) return;\n\n const {\n country: regionCountry,\n selectedRegion,\n selectedRegionId,\n } = regionsSignal.value;\n\n const country = regionCountry || config?.defaultCountry;\n\n if (country) {\n const criteria = {\n country_code: country,\n region_name: selectedRegion,\n region_id: selectedRegionId,\n };\n\n estimateShippingMethods({ cartId, criteria }).catch((error: any) => {\n estimateShippingMethodsSignal.value = { pending: false, data: [] };\n console.error('shipping methods estimation failed:', error);\n });\n }\n }, [cartId, cartShippingMethods, config]);\n\n return {\n isLoading: isLoadingCart || isLoadingConfig || isLoadingEstimation,\n options: shippingOptions,\n selection: selectedShippingOption,\n onSelectionChange,\n };\n}\n\nexport const ShippingMethods: Container<ShippingMethodsProps> = ({\n preSelectedMethod,\n ...props\n}) => {\n const { isLoading, options, selection, onSelectionChange } =\n useShippingMethods(preSelectedMethod);\n\n return (\n <ShippingMethodsList\n {...props}\n className=\"checkout-shipping-methods\"\n isLoading={isLoading}\n onSelectionChange={onSelectionChange}\n options={options}\n selection={selection}\n />\n );\n};\n"],"names":["SvgDelivery","props","React","ShippingMethods","className","isLoading","onSelectionChange","options","selection","dictionary","useText","Title","EmptyState","undefined","_jsx","ShippingMethodsSkeleton","_jsxs","classes","children","Heading","level","length","IllustratedMessage","icon","Icon","source","Delivery","message","ProgressSpinner","map","method","RadioButton","id","value","name","label","_Fragment","Price","amount","currency","carrier","title","description","checked","onChange","Divider","variant","Skeleton","SkeletonRow","size","fullWidth","isEqual","a","b","code","useShippingMethods","preselectedMethod","config","useStore","isLoadingConfig","cart","cartSignal","data","isLoadingCart","pending","estimationShippingMethods","estimateShippingMethodsSignal","isLoadingEstimation","localShippingSelection","selectedShippingMethodSignal","cartId","cartShippingAddresses","shippingAddresses","primaryAddress","isAbleToSetShippingMethod","cartShippingMethods","availableShippingMethods","cartShippingSelection","selectedShippingMethod","shippingOptions","setShippingMethodOnCart","useCallback","partialMethod","method_code","carrier_code","setShippingMethodsOnCart","shippingMethods","catch","error","selectedShippingOption","useMemo","fallbackShippingOption","some","find","carrierCode","methodCode","useEffect","country","regionCountry","selectedRegion","selectedRegionId","regionsSignal","defaultCountry","estimateShippingMethods","criteria","country_code","region_name","region_id","preSelectedMethod","ShippingMethodsList"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToggleButton.js","sources":["../../src/utils/autocompleteFieldCodes/autocompleteFieldCodes.ts","../../src/utils/isEmpty/isEmpty.ts","../../src/utils/processFormFields/processFormFields.ts","../../src/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.ts","../../src/components/FieldsForm/fieldFactory.tsx","../../src/components/FieldsForm/validation.ts","../../src/components/FieldsForm/FieldsFormSkeleton.tsx","../../src/components/FieldsForm/FieldsForm.tsx","../../node_modules/@adobe/elsie/src/lib/form-values.ts","../../src/components/AddressForm/AddressForm.tsx","../../src/components/AddressForm/useAddressBackup.ts","../../src/hooks/useValidity/useValidity.ts","../../src/components/AddressForm/useAddressForm.ts","../../src/components/AddressForm/usePreselectedFields.ts","../../src/components/AddressForm/utils.ts","../../src/hooks/useBreakpoint/useBreakpoint.ts","../../src/components/Checkout/Checkout.tsx","../../src/components/Heading/Heading.tsx","../../src/hooks/useLockScroll/useLockScroll.ts","../../src/components/OverlayLoader/OverlayLoader.tsx"],"sourcesContent":["export interface fieldCodes {\n firstname: string;\n lastname: string;\n company: string;\n country: string;\n region: string;\n city: string;\n postcode: string;\n telephone: string;\n street: string;\n email: string;\n middlename: string;\n prefix: string;\n suffix: string;\n}\n\n// HTML attribute: autocomplete\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n// https://www.w3.org/TR/WCAG21/#input-purposes\nconst autocompleteFieldCodes: fieldCodes = {\n firstname: 'given-name',\n lastname: 'family-name',\n company: 'organization',\n country: 'country',\n region: 'address-level1',\n city: 'address-level2',\n postcode: 'postal-code',\n telephone: 'tel',\n street: 'address-line1',\n email: 'email',\n middlename: 'additional-name',\n prefix: 'honorific-prefix',\n suffix: 'honorific-suffix',\n};\n\nexport default autocompleteFieldCodes;\n","export function isEmpty(obj: Record<string, any>): boolean {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}","import { AttributeFrontendInputEnum } from '@/checkout/__generated__/types';\nimport {\n AddressFormElement,\n AddressFormErrors,\n AddressFormField,\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n Country,\n Region,\n StoreConfig,\n} from '@/checkout/data/models';\nimport { regionsSignal } from '@/checkout/signals';\n\nimport {\n getMultilineValues,\n refetchEstimatedShippingMethods,\n} from '@/checkout/utils';\nimport { PickerOption } from '@adobe/elsie/components';\nimport { StateUpdater, Dispatch } from 'preact/hooks';\n\nexport type FormFieldsProcessorProps = {\n address: AddressFormValues;\n addressType: AddressFormType;\n availableCountries: Country[] | undefined;\n availableRegions: Region[];\n config: StoreConfig;\n dismissError: (code: string) => void;\n errors: AddressFormErrors;\n fields: AddressFormField[];\n onBlur: (event: Event) => void;\n onChange: (event: Event) => void;\n onInvalid: (event: Event) => void;\n onSelection: (event: Event) => void;\n setAddress: Dispatch<StateUpdater<AddressFormValues>>;\n};\n\nconst transformRegionOptions = (regions: Region[]): PickerOption[] => {\n return regions.map((region) => {\n const value = region?.id?.toString() || region.code;\n return { text: region.name, value };\n });\n};\n\nconst transformCountryOptions = (\n countries: Country[] | undefined\n): PickerOption[] => {\n if (!countries) return [];\n\n return countries.map((country) => ({\n text: country.label,\n value: country.value,\n }));\n};\n\nexport function processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n}: FormFieldsProcessorProps): AddressFormElement[] {\n const resetRegion = () => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.Region]: '',\n [AddressFormFieldCode.RegionId]: '',\n }));\n\n dismissError(AddressFormFieldCode.Region);\n };\n\n const syncRegionId = (regionId: string) => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.RegionId]: regionId,\n }));\n };\n\n return fields.map((field) => {\n let error: string | string[];\n let frontendInput = field.frontendInput;\n let handleSelect;\n let isDisabled = field.isDisabled;\n let isRequired = field.isRequired;\n let options: PickerOption[] = [];\n let value: string | string[];\n\n if (frontendInput === AttributeFrontendInputEnum.Multiline) {\n value = getMultilineValues(field.code, address);\n error = getMultilineValues(field.code, errors);\n } else {\n value = address[field.code];\n error = errors[field.code] || '';\n }\n\n if (field.code === AddressFormFieldCode.Country) {\n options = transformCountryOptions(availableCountries);\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.country = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (value) {\n refetchEstimatedShippingMethods({\n country_code: value,\n });\n }\n\n onSelection(event);\n resetRegion();\n };\n } else {\n handleSelect = onSelection;\n }\n }\n\n if (field.code === AddressFormFieldCode.RegionId) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegionId = value as string;\n }\n }\n\n if (field.code === AddressFormFieldCode.Region) {\n if (addressType === regionsSignal.value.addressType) {\n isDisabled = regionsSignal.value.pending;\n }\n\n isRequired = config!.countriesWithRequiredRegion.includes(\n address?.country_id\n );\n options = transformRegionOptions(availableRegions);\n\n if (!isRequired && !config!.displayStateIfOptional) {\n frontendInput = AttributeFrontendInputEnum.Undefined;\n }\n\n frontendInput =\n options.length > 0\n ? AttributeFrontendInputEnum.Select\n : AttributeFrontendInputEnum.Text;\n\n if (frontendInput === AttributeFrontendInputEnum.Select) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedRegion = target.value;\n\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_id: selectedRegion,\n });\n\n onSelection(event);\n syncRegionId(selectedRegion);\n };\n } else {\n handleSelect = (event: Event) => {\n onSelection(event);\n const target = event.target as HTMLSelectElement;\n const selectedRegion = target.value;\n syncRegionId(selectedRegion);\n };\n }\n } else if (frontendInput === AttributeFrontendInputEnum.Text) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n const defaultOnChange = onChange;\n\n onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (regionsSignal.value.country) {\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_name: value as string,\n });\n }\n\n defaultOnChange(event);\n };\n }\n }\n\n value =\n options.length > 0\n ? options.find((regionOption) => regionOption!.value === value)\n ?.value || ''\n : value;\n }\n\n if (field.code === AddressFormFieldCode.PostCode) {\n isRequired = !config!.countriesWithOptionalZipCode.includes(\n address?.country_id as string\n );\n }\n\n return {\n ...field,\n error,\n frontendInput,\n handleSelect,\n isDisabled,\n isRequired,\n onBlur,\n onChange,\n onInvalid,\n options,\n value,\n };\n });\n}\n\nexport type ProcessedFormFields = ReturnType<typeof processFormFields>;\n","import { cartSignal } from '@/checkout/signals';\nimport { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { ShippingEstimationCriteria, estimateShippingMethods } from '@/checkout/api';\n\nlet estimateShipppingTimer: ReturnType<typeof setTimeout>;\nexport function refetchEstimatedShippingMethods(\n criteria: ShippingEstimationCriteria\n) {\n const cartData = cartSignal.value.data;\n const hasCartData = !!cartData;\n const firstAddress = cartData?.shippingAddresses?.[0];\n const availableShippingMethods = firstAddress?.availableShippingMethods;\n\n if (hasCartData && !availableShippingMethods) {\n clearTimeout(estimateShipppingTimer);\n\n estimateShipppingTimer = setTimeout(() => {\n estimateShippingMethods({ cartId: cartData.id, criteria });\n }, DEBOUNCE_TIME);\n }\n}\n","import { validityProps } from '@/checkout/components/FieldsForm';\nimport { AddressFormElement, AddressFormType } from '@/checkout/data/models';\nimport autocompleteFieldCodes, {\n fieldCodes,\n} from '@/checkout/utils/autocompleteFieldCodes/autocompleteFieldCodes';\nimport { Field, Input, Picker } from '@adobe/elsie/components';\n\ntype FieldFactoryProps = {\n addressType: AddressFormType;\n element: AddressFormElement;\n};\n\nconst generateId = ({\n addressType,\n code,\n index,\n}: {\n addressType: AddressFormType;\n code: string;\n index?: number;\n}) => {\n return index ? `${addressType}-${code}-${index}` : `${addressType}-${code}`;\n};\n\nconst generateClassName = (code: string) => {\n return `checkout-address-form__${code}`;\n};\n\nconst hiddenField = ({ addressType, element }: FieldFactoryProps) => {\n const { code, value, defaultValue } = element;\n\n return (\n <input\n className={generateClassName(code)}\n id={generateId({ addressType, code })}\n key={code}\n name={code}\n type=\"hidden\"\n value={value || defaultValue}\n />\n );\n};\n\nconst textField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n label,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const validity = validityProps(validateRules);\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Input\n aria-label={label}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n className={generateClassName(code)}\n floatingLabel={`${label} ${element.isRequired ? '*' : ''}`}\n id={generateId({ addressType, code })}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n placeholder={label!}\n required={element.isRequired || false}\n type=\"text\"\n // @ts-ignore\n name={code}\n // @ts-ignore\n value={value ?? undefined}\n {...validity}\n />\n </Field>\n );\n};\n\nconst multilineField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n isRequired,\n label,\n multilineCount,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const numOfFields = multilineCount ?? 0;\n const validity = validityProps(validateRules);\n\n return (\n <>\n {Array.from(Array(numOfFields).keys()).map((i) => (\n <Field\n disabled={isDisabled}\n error={(error as string[])?.[i] || ''}\n key={`${code}-${i}`}\n className=\"dropin-field--multiline\"\n >\n <Input\n id={generateId({ addressType, code, index: i })}\n className={generateClassName(code)}\n floatingLabel={`${label} ${i != 0 ? i : ''} ${\n isRequired && i === 0 ? '*' : ''\n }`}\n autocomplete={\n i === 0 ? autocompleteFieldCodes[code as keyof fieldCodes] : 'off'\n }\n aria-label={label!}\n placeholder={`${label} ${i != 0 ? i : ''}`}\n type=\"text\"\n required={isRequired && i === 0}\n onChange={onChange}\n onBlur={onBlur}\n onInvalid={onInvalid}\n // @ts-ignore\n name={`${code}-${i}`}\n // @ts-ignore\n value={(value as string[])?.[i] || undefined}\n {...validity}\n />\n </Field>\n ))}\n </>\n );\n};\n\nconst selectField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n handleSelect,\n isDisabled,\n isRequired,\n label,\n onBlur,\n onInvalid,\n options,\n value,\n } = element;\n\n const handleSelectAttribute = handleSelect ? { handleSelect } : {};\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Picker\n id={generateId({ addressType, code })}\n className={generateClassName(code)}\n key={code}\n name={code}\n floatingLabel={`${label} ${isRequired ? '*' : ''}`}\n required={isRequired}\n placeholder={label!}\n aria-label={label!}\n options={options}\n value={value as string}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n onBlur={onBlur}\n onInvalid={onInvalid}\n {...handleSelectAttribute}\n />\n </Field>\n );\n};\n\nexport const createField = ({ addressType, element }: FieldFactoryProps) => {\n switch (element.frontendInput) {\n case 'BOOLEAN':\n case 'DATE':\n case 'DATETIME':\n case 'FILE':\n case 'GALLERY':\n case 'IMAGE':\n case 'MEDIA_IMAGE':\n case 'MULTISELECT':\n case 'PRICE':\n case 'TEXTAREA':\n case 'UNDEFINED':\n case 'WEIGHT':\n return null;\n case 'HIDDEN':\n return hiddenField({ addressType, element });\n case 'TEXT':\n return textField({ addressType, element });\n case 'MULTILINE':\n return multilineField({ addressType, element });\n case 'SELECT':\n return selectField({ addressType, element });\n default:\n return null;\n }\n};\n","import { AddressFormField } from '@/checkout/data/models/address-form-fields';\nimport { ValidationRuleEnum } from '@/checkout/__generated__/types';\n\nexport type ValidityProps = {\n accept?: string;\n max?: string | number;\n maxLength?: number;\n min?: string | number;\n minLength?: number;\n pattern?: string;\n required?: boolean;\n};\n\nexport type InputValidation =\n | 'alphanumeric'\n | 'alphanumeric-w-space'\n | 'alphanum-with-spaces'\n | 'alpha'\n | 'url'\n | 'numeric'\n | 'email';\n\nexport const validityProps = (\n rules: AddressFormField['validateRules']\n): ValidityProps => {\n if (!rules) return {};\n\n return rules.reduce((props, rule) => {\n switch (rule.name) {\n case ValidationRuleEnum.DateRangeMax:\n return { ...props, max: rule.value };\n case ValidationRuleEnum.DateRangeMin:\n return { ...props, min: rule.value };\n case ValidationRuleEnum.FileExtensions:\n return { ...props, accept: rule.value };\n case ValidationRuleEnum.InputValidation:\n return {\n ...props,\n pattern: patternFor(rule.value as InputValidation),\n };\n case ValidationRuleEnum.MaxFileSize:\n case ValidationRuleEnum.MaxImageHeight:\n case ValidationRuleEnum.MaxImageWidth:\n return props;\n case ValidationRuleEnum.MaxTextLength:\n return { ...props, maxLength: rule.value };\n case ValidationRuleEnum.MinTextLength:\n return { ...props, minLength: rule.value };\n default:\n throw new Error(`Unknown rule: ${rule.name}`);\n }\n }, {});\n};\n\nexport type Patterns = {\n [key in InputValidation]: RegExp;\n};\n\n// TODO allow to override patterns\nexport const patterns: Patterns = {\n alpha: /^[a-zA-Z]+$/,\n alphanumeric: /^[a-zA-Z0-9]+$/,\n 'alphanumeric-w-space': /^[a-zA-Z0-9 ]+$/,\n 'alphanum-with-spaces': /^[a-zA-Z0-9 ]+$/,\n email:\n /^([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i,\n numeric: /^[0-9]+$/,\n url: /^((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w\\-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[.!/\\\\\\w]*))?)$/,\n};\n\nconst patternFor = (type: InputValidation): string => {\n switch (type) {\n case 'alpha':\n return patterns.alpha.source;\n case 'alphanumeric':\n return patterns.alphanumeric.source;\n case 'alphanumeric-w-space':\n return patterns['alphanumeric-w-space'].source;\n case 'alphanum-with-spaces':\n return patterns['alphanum-with-spaces'].source;\n case 'url':\n return patterns.url.source;\n case 'numeric':\n return patterns.numeric.source;\n case 'email':\n return patterns.email.source;\n default:\n throw new Error(`Unknown validation type: ${type}`);\n }\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const FieldsFormSkeleton: FunctionComponent = (props) => {\n return (\n <Skeleton {...props}>\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n </Skeleton>\n );\n};\n","import { Heading } from '@/checkout/components';\nimport { createField } from '@/checkout/components/FieldsForm';\nimport '@/checkout/components/FieldsForm/FieldsForm.css';\nimport {\n AddressFormElement,\n AddressFormType,\n} from '@/checkout/data/models/address-form-fields';\nimport { Text } from '@adobe/elsie/i18n';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, Ref } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface FieldsFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n fields: AddressFormElement[];\n formRef: Ref<HTMLFormElement>;\n headingId: string;\n name: string;\n}\n\nexport const FieldsForm: FunctionComponent<FieldsFormProps> = ({\n addressType,\n className,\n fields,\n formRef,\n headingId,\n name,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['checkout-fields-form', className])}>\n <Heading\n level={2}\n children={<Text id={headingId} />}\n className=\"checkout-fields-form__title\"\n />\n\n <form\n name={name}\n ref={formRef}\n className={classes(['checkout-fields-form__form', className])}\n noValidate\n >\n {fields\n .sort((a, b) => {\n if (!a.sortOrder || !b.sortOrder) return a.code < b.code ? -1 : 1;\n return a.sortOrder - b.sortOrder;\n })\n .map((element) => createField({ element, addressType }))}\n </form>\n </div>\n );\n};\n","export const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","import { getRegions } from '@/checkout/api';\nimport { FieldsFormSkeleton } from '@/checkout/components';\nimport {\n LoadAutoFillProps,\n DefaultValues,\n getCartAddress,\n getCustomerAddress,\n MULTILINE_CUSTOM_ATTR_SPLIT,\n MULTILINE_SUFFIX,\n SaveAddressCommand,\n useAddressForm,\n usePreselectedFields,\n} from '@/checkout/components/AddressForm';\nimport '@/checkout/components/AddressForm/AddressForm.css';\nimport { FieldsForm as Component } from '@/checkout/components/FieldsForm/FieldsForm';\nimport { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n useAddressFormFields,\n useCountries,\n useStore,\n} from '@/checkout/context';\nimport {\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n CustomerAddress,\n Region,\n} from '@/checkout/data/models';\nimport {\n BillingAddress,\n ShippingAddress,\n} from '@/checkout/data/models/address';\nimport { cartSignal, customerSignal } from '@/checkout/signals';\nimport { isEmpty, processFormFields } from '@/checkout/utils';\nimport { getFormErrors } from '@adobe/elsie/lib/form-values';\nimport {\n forwardRef,\n HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'preact/compat';\n\nfunction useDefaultValues(defaultCountry: string | undefined) {\n const [defaultValues, setDefaultValues] = useState<DefaultValues>({});\n\n useEffect(() => {\n if (!defaultCountry) return;\n setDefaultValues((defaultValues) => ({\n ...defaultValues,\n country_id: defaultCountry,\n }));\n }, [defaultCountry]);\n\n return { defaultValues };\n}\n\nfunction useRegions({\n country,\n addressType,\n}: {\n country: string | undefined;\n addressType: AddressFormType;\n}) {\n const [availableRegions, setAvailableRegions] = useState<Region[]>([]);\n\n useEffect(() => {\n if (!country) {\n setAvailableRegions([]);\n return;\n }\n\n getRegions(country, addressType)\n .then((data) => {\n setAvailableRegions(data || []);\n })\n .catch((error) => {\n console.error(error);\n });\n }, [setAvailableRegions, country, addressType]);\n\n return { availableRegions };\n}\n\nfunction useFormFill({\n autoFill,\n addressType,\n loadAutoFill,\n}: {\n autoFill: boolean;\n addressType: AddressFormType;\n loadAutoFill: (props: LoadAutoFillProps) => void;\n}) {\n const [hasAutoFilledForm, setHasAutofilledForm] = useState(false);\n const customer = customerSignal.value.data;\n const hasCustomer = !!customer;\n const cart = cartSignal.value.data;\n const hasCart = !!cart;\n\n useEffect(() => {\n if (!autoFill || !hasCart || hasAutoFilledForm) return;\n\n let autoFillAddress:\n | ShippingAddress\n | BillingAddress\n | CustomerAddress\n | undefined;\n\n let triggerAutoSave = false;\n\n autoFillAddress = getCartAddress({ addressType, cart });\n\n if (!autoFillAddress && hasCustomer) {\n autoFillAddress = getCustomerAddress({ addressType, customer });\n triggerAutoSave = true;\n }\n\n const isMultiline = (value: string) => {\n if (!value) return false;\n const parts = value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n return parts.length > 1;\n };\n\n if (!autoFillAddress) return;\n\n setHasAutofilledForm(true);\n\n const addressFormValues: AddressFormValues = {\n [AddressFormFieldCode.City]: autoFillAddress.city,\n [AddressFormFieldCode.Company]: autoFillAddress.company || '',\n [AddressFormFieldCode.Country]: autoFillAddress.country.value,\n [AddressFormFieldCode.FirstName]: autoFillAddress.firstName,\n [AddressFormFieldCode.LastName]: autoFillAddress.lastName,\n [AddressFormFieldCode.PostCode]: autoFillAddress.postCode || '',\n [AddressFormFieldCode.Telephone]: autoFillAddress.telephone || '',\n [AddressFormFieldCode.Vat]: autoFillAddress.vatId || '',\n };\n\n const region = autoFillAddress.region;\n\n if (region) {\n const regionId = region?.id?.toString();\n\n if (regionId) {\n addressFormValues[AddressFormFieldCode.Region] = regionId;\n addressFormValues[AddressFormFieldCode.RegionId] = regionId;\n } else {\n addressFormValues[AddressFormFieldCode.Region] = region.code;\n }\n }\n\n if (autoFillAddress?.street && autoFillAddress.street.length > 0) {\n autoFillAddress.street.forEach((street, index) => {\n addressFormValues[\n `${AddressFormFieldCode.Street}${MULTILINE_SUFFIX}${index}`\n ] = street!;\n });\n }\n\n const customAttributes = autoFillAddress?.customAttributes || [];\n\n customAttributes.forEach((attribute) => {\n if (!isMultiline(attribute.code)) {\n addressFormValues[attribute.code] = attribute.value;\n } else {\n const values = attribute.value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n values.forEach((value, index) => {\n addressFormValues[`${attribute.code}${MULTILINE_SUFFIX}${index}`] =\n value;\n });\n }\n });\n\n loadAutoFill({ values: addressFormValues, triggerAutoSave });\n }, [\n addressType,\n autoFill,\n cart,\n customer,\n hasAutoFilledForm,\n hasCart,\n hasCustomer,\n loadAutoFill,\n ]);\n}\n\nexport interface AddressFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n autoFill?: boolean;\n headingId: string;\n name: string;\n preselectedFields?: PreselectedAddressFields;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n}\n\nexport type AddressFormHandle = {\n triggerSaveAddress: (\n signal: AbortSignal\n ) => Promise<typeof cartSignal.value.data> | undefined;\n};\n\nexport const AddressForm = forwardRef<AddressFormHandle, AddressFormProps>(\n (\n {\n addressType,\n autoFill = true,\n children,\n headingId,\n name,\n preselectedFields,\n saveAddressHandler,\n ...props\n },\n ref\n ) => {\n const { fields } = useAddressFormFields();\n const { countries: availableCountries } = useCountries();\n const isLoadingCountries = availableCountries === undefined;\n const isLoadingFormFields = fields === undefined;\n const { config } = useStore();\n const isLoadingStoreConfig = config === undefined;\n const { defaultValues } = useDefaultValues(config?.defaultCountry);\n\n const preselection = usePreselectedFields({\n fields,\n preselectedFields,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const {\n address,\n errors,\n loadAutoFill,\n onBlur,\n dismissError,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n } = useAddressForm({\n formRef,\n type: addressType,\n defaultValues,\n preselection,\n saveAddressHandler,\n });\n\n const { availableRegions } = useRegions({\n country: address.country_id,\n addressType,\n });\n\n useImperativeHandle(ref, () => ({\n triggerSaveAddress: (signal: AbortSignal) => {\n if (!formRef.current) return;\n const errors = getFormErrors(formRef.current);\n if (!isEmpty(errors)) return;\n return saveAddressHandler({ signal, address });\n },\n }));\n\n useFormFill({\n addressType,\n autoFill,\n loadAutoFill,\n });\n\n const isLoading =\n isLoadingFormFields || isLoadingCountries || isLoadingStoreConfig;\n\n if (isLoading) {\n return <FieldsFormSkeleton data-testid={`${addressType}-skeleton`} />;\n }\n\n const transformedFields = processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n });\n\n const typeMapping = {\n [AddressFormType.SHIPPING]: 'shipping',\n [AddressFormType.BILLING]: 'billing',\n };\n\n return (\n <Component\n {...props}\n name={name}\n addressType={addressType}\n className={`checkout-${typeMapping[addressType]}-form`}\n data-testid={`${typeMapping[addressType]}-form`}\n fields={transformedFields}\n formRef={formRef}\n headingId={headingId}\n />\n );\n }\n);\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { useServices } from '@/checkout/context';\nimport { events } from '@adobe/event-bus';\nimport { DEBOUNCE_TIME } from './constants';\nimport {\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\n\nexport function useAddressBackup(addressType: AddressFormType) {\n const { backupService } = useServices();\n const [addressBackup, setAddressBackup] = useState<AddressFormValues | null>(\n null\n );\n\n // restore address from local storage\n useEffect(() => {\n const backup = backupService.restore<AddressFormValues>(addressType);\n if (!backup) return;\n setAddressBackup(backup);\n }, [addressType, backupService]);\n\n // remove backup when the order is placed\n useEffect(() => {\n const onOrder = events.on('checkout/order', () => {\n backupService.remove(addressType);\n });\n\n return () => {\n onOrder?.off();\n };\n }, [addressType, backupService]);\n\n const backup = useCallback(\n (address: AddressFormValues) => {\n return setTimeout(() => {\n // we do not want to update the state to avoid re-rendering\n backupService.backup<AddressFormValues>(addressType, address);\n }, DEBOUNCE_TIME);\n },\n [addressType, backupService]\n );\n\n const removeBackup = useCallback(() => {\n backupService.remove(addressType);\n }, [addressType, backupService]);\n\n return { addressBackup, backup, removeBackup };\n}\n","import { useCallback, useState } from 'preact/hooks';\n\nexport type Translations = {\n badInput: string;\n patternMismatch: string;\n rangeOverflow: string;\n rangeUnderflow: string;\n tooLong: string;\n tooShort: string;\n typeMismatch: string;\n valueMissing: string;\n};\n\ntype FormElement = HTMLInputElement | HTMLSelectElement;\n\ntype Constraint =\n | 'badInput'\n | 'patternMismatch'\n | 'rangeOverflow'\n | 'rangeUnderflow'\n | 'tooLong'\n | 'tooShort'\n | 'typeMismatch'\n | 'valueMissing';\n\ntype Attribute = 'aria-label' | 'maxlength' | 'minlength' | 'min' | 'max';\n\nconst attributesMapping: Record<Constraint, Attribute> = {\n badInput: 'aria-label',\n patternMismatch: 'aria-label',\n rangeOverflow: 'max',\n rangeUnderflow: 'min',\n tooLong: 'maxlength',\n tooShort: 'minlength',\n typeMismatch: 'aria-label',\n valueMissing: 'aria-label',\n};\n\nconst constraints: Constraint[] = [\n 'badInput',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\nexport const useValidity = (translations: Translations) => {\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const validateFormElement = useCallback(\n (formElement: FormElement) => {\n const { name, validity, validationMessage } = formElement;\n\n let error = validity.valid ? '' : validationMessage;\n\n constraints.forEach((constraint) => {\n if (!validity[constraint]) return;\n const translation = translations[constraint];\n if (!translation) return;\n const attribute = attributesMapping[constraint];\n error = translation.replace(\n '{field}',\n formElement.getAttribute(attribute) || ''\n );\n });\n\n setErrors((prevErrors) => ({ ...prevErrors, [name]: error }));\n },\n [translations]\n );\n\n const dismissError = (code: string) => {\n if (!errors[code]) return;\n\n setErrors((prevErrors) => {\n // eslint-disable-next-line\n const { [code]: _, ...rest } = prevErrors;\n return rest;\n });\n };\n\n return {\n errors,\n dismissError,\n validateFormElement,\n };\n};\n","import { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { useAddressBackup } from '@/checkout/components/AddressForm/useAddressBackup';\nimport {\n AddressFormErrors,\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models';\nimport {\n Translations as ValidityTranslations,\n useValidity,\n} from '@/checkout/hooks/useValidity';\nimport { cartSignal } from '@/checkout/signals';\nimport { isEmpty } from '@/checkout/utils';\nimport { useText } from '@adobe/elsie/i18n';\nimport { getFormErrors } from '@adobe/elsie/lib';\nimport { RefObject } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nexport type DefaultValues = {\n country_id?: string;\n};\n\nexport type AddressFormState = {\n address: AddressFormValues;\n errors: AddressFormErrors;\n};\n\nexport type SaveAddressCommand = {\n signal?: AbortSignal;\n address: AddressFormValues;\n};\n\nexport type LoadAutoFillProps = {\n values: AddressFormValues;\n triggerAutoSave: boolean;\n};\n\nexport type UseAddressFormProps = {\n formRef: RefObject<HTMLFormElement>;\n type: AddressFormType;\n defaultValues?: DefaultValues;\n preselection?: AddressFormValues;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n};\n\nconst isFormValid = (formRef: RefObject<HTMLFormElement>): boolean => {\n const form = formRef.current;\n if (!form) return false;\n const errors = getFormErrors(form);\n return isEmpty(errors);\n};\n\nexport const useAddressForm = ({\n formRef,\n type,\n defaultValues = {},\n preselection = {},\n saveAddressHandler,\n}: UseAddressFormProps) => {\n const translations = useText({\n badInput: 'Checkout.AddressForm.Validity.badInput',\n patternMismatch: 'Checkout.AddressForm.Validity.patternMismatch',\n rangeUnderflow: 'Checkout.AddressForm.Validity.rangeUnderflow',\n tooLong: 'Checkout.AddressForm.Validity.tooLong',\n tooShort: 'Checkout.AddressForm.Validity.tooShort',\n typeMismatch: 'Checkout.AddressForm.Validity.typeMismatch',\n valueMissing: 'Checkout.AddressForm.Validity.valueMissing',\n }) as ValidityTranslations;\n\n const hasUnsavedChanges = useRef(false);\n const [address, setAddress] = useState<AddressFormValues>({});\n\n const { addressBackup, backup, removeBackup } = useAddressBackup(type);\n\n const { errors, validateFormElement, dismissError } =\n useValidity(translations);\n\n const saveAddressForm = useCallback(\n (command: SaveAddressCommand) => {\n hasUnsavedChanges.current = false;\n saveAddressHandler(command)\n .then(() => {\n removeBackup();\n })\n .catch((error) => {\n hasUnsavedChanges.current = true;\n console.error('Saving address form failed:', error);\n });\n },\n [removeBackup, saveAddressHandler]\n );\n\n const updateField = (code: string, value: string) => {\n setAddress((prevAddress) => ({ ...prevAddress, [code]: value }));\n hasUnsavedChanges.current = true;\n };\n\n const loadAutoFill = ({\n values,\n triggerAutoSave = false,\n }: LoadAutoFillProps) => {\n setAddress((prevAddress) => ({ ...prevAddress, ...values }));\n if (!triggerAutoSave) return;\n hasUnsavedChanges.current = true;\n };\n\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n\n updateField(name, value);\n\n validateFormElement(target);\n };\n\n const onInvalid = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n validateFormElement(target);\n };\n\n const onSelection = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const { name, value } = target;\n updateField(name, value);\n validateFormElement(target);\n };\n\n const onBlur = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n target.checkValidity();\n };\n\n // load default, preselected and backup address\n useEffect(() => {\n setAddress((prevAddress) => {\n return {\n ...defaultValues,\n ...preselection,\n ...addressBackup,\n ...prevAddress,\n };\n });\n }, [defaultValues, preselection, addressBackup]);\n\n // backup address\n useEffect(() => {\n if (!hasUnsavedChanges.current) return;\n const timerId = backup(address);\n return () => {\n clearTimeout(timerId);\n };\n }, [address, backup]);\n\n // sync address with the backend\n useEffect(() => {\n if (!hasUnsavedChanges.current || !isFormValid(formRef)) return;\n\n const controller = new AbortController();\n const signal = controller.signal;\n\n const timer = setTimeout(() => {\n saveAddressForm({ signal, address });\n }, DEBOUNCE_TIME);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [address, formRef, saveAddressForm]);\n\n return {\n address,\n errors,\n loadAutoFill,\n dismissError,\n onChange,\n onSelection,\n onBlur,\n onInvalid,\n setAddress,\n };\n};\n","import { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n AddressFormField,\n AddressFormFieldCode,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\nimport { useMemo } from 'preact/hooks';\n\ntype PreselectedFieldKey = keyof PreselectedAddressFields;\n\nconst FIELD_CODE_MAPPING: {\n [key in PreselectedFieldKey]: AddressFormFieldCode;\n} = {\n countryCode: AddressFormFieldCode.Country,\n region: AddressFormFieldCode.Region,\n postCode: AddressFormFieldCode.PostCode,\n};\n\nexport type UsePreselectedFieldsProps = {\n fields?: AddressFormField[];\n preselectedFields?: PreselectedAddressFields;\n};\n\nexport function usePreselectedFields({\n fields,\n preselectedFields,\n}: UsePreselectedFieldsProps): AddressFormValues {\n return useMemo(() => {\n const hasFields = !!fields && fields.length > 0;\n const hasPreselectedFields = !!preselectedFields;\n\n if (!hasFields || !hasPreselectedFields) return {};\n\n return Object.keys(preselectedFields).reduce((acc, code) => {\n const formCode = FIELD_CODE_MAPPING[code as PreselectedFieldKey];\n if (!formCode) return acc;\n\n const formField = fields.some((field) => field.code === formCode);\n if (!formField) return acc;\n\n return {\n ...acc,\n [formCode]: preselectedFields[code as PreselectedFieldKey],\n };\n }, {});\n }, [fields, preselectedFields]);\n}\n","import { AddressFormType } from '@/checkout/data/models';\nimport { Cart } from '@/checkout/data/models/cart';\nimport { Customer } from '@/checkout/data/models/customer';\n\nexport const getCustomerAddress = ({\n addressType,\n customer,\n}: {\n addressType: AddressFormType;\n customer: Customer;\n}) => {\n return addressType === AddressFormType.BILLING\n ? customer.defaultBillingAddress\n : customer.defaultShippingAddress;\n};\n\nexport const getCartAddress = ({\n addressType,\n cart,\n}: {\n addressType: AddressFormType;\n cart: Cart;\n}) => {\n if (addressType === AddressFormType.BILLING) {\n return cart.billingAddress;\n }\n\n const shippingAddresses = cart.shippingAddresses;\n if (!shippingAddresses || shippingAddresses.length === 0) return;\n return shippingAddresses[0];\n};\n","import { useEffect, useState } from 'preact/hooks';\n\nexport const useBreakpoint = () => {\n const getBreakpoint = () => {\n if (window.innerWidth >= 1920) return 'xxlarge';\n if (window.innerWidth >= 1366) return 'xlarge';\n if (window.innerWidth >= 1024) return 'large';\n if (window.innerWidth >= 768) return 'medium';\n\n return 'small';\n };\n\n const [breakpoint, setBreakpoint] = useState<\n ReturnType<typeof getBreakpoint>\n >(getBreakpoint());\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => setBreakpoint(getBreakpoint()), 50);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, []);\n\n return breakpoint;\n};\n","import { Heading, OverlayLoader } from '@/checkout/components';\nimport { useBreakpoint } from '@/checkout/hooks/useBreakpoint';\nimport { Text } from '@adobe/elsie/i18n';\nimport { VComponent, classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nimport '@/checkout/components/Checkout/Checkout.css';\n\nconst ConditionalWrapper: FunctionComponent<{\n children?: VNode;\n className: string;\n}> = ({ children, className }) => {\n const breakpoint = useBreakpoint();\n if (breakpoint === 'small') return <>{children}</>;\n return <div className={className}>{children}</div>;\n};\n\nexport type AsideSections = {\n cartSummary: VNode;\n orderSummary: VNode;\n};\n\nconst Aside: FunctionComponent<{ sections: AsideSections }> = ({\n sections,\n}) => {\n return (\n <ConditionalWrapper className=\"checkout__aside\">\n <>\n <VComponent node={sections.orderSummary} />\n <VComponent node={sections.cartSummary} />\n </>\n </ConditionalWrapper>\n );\n};\n\nexport type MainSections = {\n billingAddress: VNode;\n billToShippingAddress?: VNode;\n login: VNode;\n paymentMethods: VNode;\n placeOrder: VNode;\n shippingAddress?: VNode;\n shippingMethods?: VNode;\n};\n\nconst MainContent: FunctionComponent<MainSections> = ({\n billingAddress,\n billToShippingAddress,\n login,\n paymentMethods,\n placeOrder,\n shippingAddress,\n shippingMethods,\n}) => {\n return (\n <>\n <VComponent node={login} />\n {shippingAddress && <VComponent node={shippingAddress} />}\n {billToShippingAddress && <VComponent node={billToShippingAddress} />}\n {shippingMethods && <VComponent node={shippingMethods} />}\n <VComponent node={paymentMethods} />\n <VComponent node={billingAddress} />\n <VComponent node={placeOrder} />\n </>\n );\n};\n\nconst Main: FunctionComponent<{\n outOfStock?: VNode;\n sections?: MainSections;\n}> = ({ outOfStock, sections }) => {\n return (\n <ConditionalWrapper className=\"checkout__main\">\n <>\n <Heading level={1} className=\"checkout-title\">\n <Text id=\"Checkout.title\" />\n </Heading>\n\n {outOfStock && (\n <VComponent className=\"checkout-outOfStock\" node={outOfStock} />\n )}\n\n {sections && <MainContent {...sections} />}\n </>\n </ConditionalWrapper>\n );\n};\n\nexport interface CheckoutProps extends HTMLAttributes<HTMLDivElement> {\n banner?: VNode;\n isLoading?: boolean;\n}\n\ninterface CheckoutComponent extends FunctionComponent<CheckoutProps> {\n Main: typeof Main;\n Aside: typeof Aside;\n}\n\nexport const Checkout: CheckoutComponent = ({\n banner,\n children,\n className,\n isLoading = false,\n ...restProps\n}) => {\n return (\n <div\n data-testid=\"checkout\"\n className={classes(['checkout', className])}\n {...restProps}\n >\n {isLoading && <OverlayLoader />}\n {banner && <VComponent className=\"checkout__banner\" node={banner} />}\n <div className=\"checkout__content\">{children}</div>\n </div>\n );\n};\n\nCheckout.Main = Main;\nCheckout.Aside = Aside;\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, JSX } from 'preact/compat';\nimport '@/checkout/components/Heading/Heading.css';\n\nexport interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, 'level'> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport const Heading: FunctionComponent<HeadingProps> = ({\n className,\n children,\n level = 2,\n}) => {\n const Heading =\n level >= 1 && level <= 6\n ? (`h${level}` as keyof JSX.IntrinsicElements)\n : 'h2';\n\n return (\n <Heading className={className}>\n {children}\n </Heading>\n );\n};\n","import { useCallback } from 'preact/hooks';\n\nexport const useScrollLock = () => {\n const lockScroll = useCallback(() => {\n document.body.style.overflow = 'hidden';\n }, []);\n\n const unlockScroll = useCallback(() => {\n document.body.style.overflow = '';\n }, []);\n\n return {\n lockScroll,\n unlockScroll,\n };\n};\n","import '@/checkout/components/OverlayLoader/OverlayLoader.css';\nimport { useScrollLock } from '@/checkout/hooks/useLockScroll';\nimport { ProgressSpinner } from '@adobe/elsie/components';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport const OverlayLoader: FunctionComponent<{ className?: string }> = ({\n className,\n}) => {\n const { lockScroll, unlockScroll } = useScrollLock();\n\n useEffect(() => {\n lockScroll();\n return unlockScroll;\n }, [lockScroll, unlockScroll]);\n\n return (\n <div\n data-testid=\"checkout-overlay-loader\"\n className={classes(['checkout-overlay-loader', className])}\n >\n <ProgressSpinner />\n </div>\n );\n};\n"],"names":["autocompleteFieldCodes","firstname","lastname","company","country","region","city","postcode","telephone","street","email","middlename","prefix","suffix","isEmpty","obj","Object","keys","length","constructor","transformRegionOptions","regions","map","value","id","toString","code","text","name","transformCountryOptions","countries","label","processFormFields","address","addressType","availableCountries","availableRegions","config","dismissError","errors","fields","onBlur","onChange","onInvalid","onSelection","setAddress","resetRegion","AddressFormFieldCode","Region","RegionId","syncRegionId","regionId","field","error","frontendInput","handleSelect","isDisabled","isRequired","options","AttributeFrontendInputEnum","Multiline","getMultilineValues","Country","AddressFormType","SHIPPING","regionsSignal","event","target","refetchEstimatedShippingMethods","country_code","selectedRegionId","pending","countriesWithRequiredRegion","includes","country_id","displayStateIfOptional","Undefined","Select","Text","selectedRegion","region_id","defaultOnChange","region_name","find","regionOption","PostCode","countriesWithOptionalZipCode","estimateShipppingTimer","criteria","cartData","cartSignal","data","hasCartData","firstAddress","shippingAddresses","availableShippingMethods","clearTimeout","setTimeout","estimateShippingMethods","cartId","DEBOUNCE_TIME","generateId","index","generateClassName","hiddenField","element","defaultValue","_jsx","className","type","textField","validateRules","validity","validityProps","Field","disabled","children","Input","autocomplete","floatingLabel","placeholder","required","undefined","multilineField","multilineCount","numOfFields","_Fragment","Array","from","i","selectField","handleSelectAttribute","Picker","createField","rules","reduce","props","rule","ValidationRuleEnum","DateRangeMax","max","DateRangeMin","min","FileExtensions","accept","InputValidation","pattern","patternFor","MaxFileSize","MaxImageHeight","MaxImageWidth","MaxTextLength","maxLength","MinTextLength","minLength","Error","patterns","alpha","alphanumeric","numeric","url","source","FieldsFormSkeleton","_jsxs","Skeleton","SkeletonRow","variant","size","fullWidth","lines","FieldsForm","formRef","headingId","classes","Heading","level","ref","noValidate","sort","a","b","sortOrder","getFormErrors","form","formData","result","key","useDefaultValues","defaultCountry","defaultValues","setDefaultValues","useState","useEffect","useRegions","setAvailableRegions","getRegions","then","catch","console","useFormFill","autoFill","loadAutoFill","hasAutoFilledForm","setHasAutofilledForm","customer","customerSignal","hasCustomer","cart","hasCart","autoFillAddress","triggerAutoSave","getCartAddress","getCustomerAddress","isMultiline","split","MULTILINE_CUSTOM_ATTR_SPLIT","addressFormValues","City","Company","FirstName","firstName","LastName","lastName","postCode","Telephone","Vat","vatId","forEach","Street","MULTILINE_SUFFIX","customAttributes","attribute","values","AddressForm","forwardRef","preselectedFields","saveAddressHandler","useAddressFormFields","useCountries","isLoadingCountries","isLoadingFormFields","useStore","isLoadingStoreConfig","preselection","usePreselectedFields","useRef","useAddressForm","useImperativeHandle","triggerSaveAddress","signal","current","transformedFields","typeMapping","BILLING","Component","useAddressBackup","backupService","useServices","addressBackup","setAddressBackup","backup","restore","onOrder","events","on","remove","off","useCallback","removeBackup","attributesMapping","badInput","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","typeMismatch","valueMissing","constraints","useValidity","translations","setErrors","validateFormElement","formElement","validationMessage","valid","constraint","translation","replace","getAttribute","prevErrors","_","rest","isFormValid","useText","hasUnsavedChanges","saveAddressForm","command","updateField","prevAddress","checkValidity","timerId","controller","AbortController","timer","abort","FIELD_CODE_MAPPING","countryCode","useMemo","acc","formCode","some","defaultBillingAddress","defaultShippingAddress","billingAddress","useBreakpoint","getBreakpoint","window","innerWidth","breakpoint","setBreakpoint","timeoutId","handleResize","addEventListener","removeEventListener","ConditionalWrapper","Aside","sections","VComponent","node","orderSummary","cartSummary","MainContent","billToShippingAddress","login","paymentMethods","placeOrder","shippingAddress","shippingMethods","Main","outOfStock","Checkout","banner","isLoading","restProps","OverlayLoader","useScrollLock","lockScroll","body","style","overflow","unlockScroll","ProgressSpinner"],"mappings":"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","x_google_ignoreList":[8]}
@@ -1,2 +0,0 @@
1
- var o=(r=>(r.InStock="IN_STOCK",r.OutOfStock="OUT_OF_STOCK",r))(o||{}),u=(r=>(r.Simple="SimpleProduct",r.Configurable="ConfigurableProduct",r.Downloadable="DownloadableProduct",r.GiftCard="GiftCardProduct",r.Virtual="VirtualProduct",r.Bundle="BundleProduct",r))(u||{});export{u as I,o as S};
2
- //# sourceMappingURL=cart-item.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cart-item.js","sources":["../../src/data/models/cart-item.ts"],"sourcesContent":["export enum StockStatus {\n InStock = 'IN_STOCK',\n OutOfStock = 'OUT_OF_STOCK',\n}\n\ntype Image = {\n src: string;\n alt?: string;\n};\n\ntype Price = {\n value: number;\n currency: string;\n};\n\nexport enum ItemKind {\n Simple = 'SimpleProduct',\n Configurable = 'ConfigurableProduct',\n Downloadable = 'DownloadableProduct',\n GiftCard = 'GiftCardProduct',\n Virtual = 'VirtualProduct',\n Bundle = 'BundleProduct',\n}\n\ntype BaseItem = {\n url?: string | null;\n discount?: Price;\n discounted: boolean;\n image?: Image;\n kind: ItemKind;\n name: string;\n price: Price;\n priceInclTax: Price;\n quantity: number;\n regularPrice: Price;\n sku: string;\n total: Price;\n totalInclTax: Price;\n onlyXLeftInStock?: number | null;\n uid: string;\n stockStatus: StockStatus;\n};\n\ntype Customizable = {\n customizableOptions: Record<string, string>;\n};\n\ntype SimpleItem = Customizable;\ntype ConfigurableItem = Customizable & {\n configurableOptions: Record<string, string>;\n};\ntype DownloadableItem = Customizable & {\n links: String[];\n};\ntype GiftCardItem = Customizable & {\n senderName: string;\n senderEmail: string;\n recipientName: string;\n recipientEmail: string;\n};\ntype VirtualItem = Customizable;\ntype BundleItem = BaseItem;\n\nexport type Item = BaseItem &\n (\n | SimpleItem\n | ConfigurableItem\n | DownloadableItem\n | GiftCardItem\n | VirtualItem\n | BundleItem\n );\n"],"names":["StockStatus","InStock","OutOfStock","ItemKind","Simple","Configurable","Downloadable","GiftCard","Virtual","Bundle"],"mappings":"AAAYA,IAAAA,GAAAA,IACVC,EAAAA,QAAU,WACVC,EAAAA,WAAa,eAFHF,IAAAA,GAAAA,CAAAA,CAAAA,EAeAG,GAAAA,IACVC,EAAAA,OAAS,gBACTC,EAAAA,aAAe,sBACfC,EAAAA,aAAe,sBACfC,EAAAA,SAAW,kBACXC,EAAAA,QAAU,iBACVC,EAAAA,OAAS,gBANCN,IAAAA,GAAAA,CAAAA,CAAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/containers/ShippingForm/constants.ts"],"sourcesContent":["export const SHIPPING_FORM_NAME = 'shipping_address';\n"],"names":["SHIPPING_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAqB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants2.js","sources":["../../src/containers/LoginForm/constants.ts"],"sourcesContent":["export const LOGIN_FORM_NAME= 'login-form';\n"],"names":["LOGIN_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants3.js","sources":["../../src/containers/BillingForm/constants.ts"],"sourcesContent":["export const BILLING_FORM_NAME = 'billing_address';\n"],"names":["BILLING_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getCart.graphql.js","sources":["../../src/data/transforms/transform-payment-methods.ts","../../src/data/transforms/transform-address.ts","../../src/data/transforms/transform-cart.ts","../../src/data/transforms/transform-cart-item.ts","../../src/api/getCart/graphql/getCart.graphql.ts"],"sourcesContent":["import { GetCartQuery } from '@/checkout/__generated__/types';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\n\ntype SelectedPaymentMethod = NonNullable<\n GetCartQuery['cart']\n>['selected_payment_method'];\n\ntype AvailablePaymentMethods = NonNullable<\n GetCartQuery['cart']\n>['available_payment_methods'];\n\ntype AvailablePaymentMethod = NonNullable<AvailablePaymentMethods>[number];\n\ntype NonNullabePaymentMethod = NonNullable<AvailablePaymentMethod>;\n\nconst transformSelectedPaymentMethod = (\n data: SelectedPaymentMethod\n): PaymentMethod | undefined => {\n if (!data) return;\n return { code: data.code, title: data.title };\n};\n\nconst transformAvailablePaymentMethods = (\n data: AvailablePaymentMethods\n): PaymentMethod[] | undefined => {\n if (!data) return;\n\n return data\n .filter((method) => !!method)\n .map((method) => {\n const { code, title } = method as NonNullabePaymentMethod;\n return { code, title };\n });\n};\n\nexport { transformAvailablePaymentMethods, transformSelectedPaymentMethod };\n","import { GetCartQuery } from '@/checkout/__generated__/types';\nimport {\n Address as AddressModel,\n ShippingAddress as ShippingAddressModel,\n BillingAddress as BillingAddressModel,\n} from '@/checkout/data/models/address';\nimport {\n Region as RegionModel,\n Country as CountryModel,\n CustomAttribute as CustomAttributeModel,\n} from '@/checkout/data/models';\nimport {\n transformSelectedShippingMethod,\n transformShippingMethods,\n} from '@/checkout/data/transforms/transform-shipping-methods';\n\ntype ShippingAddresses = NonNullable<\n GetCartQuery['cart']\n>['shipping_addresses'];\ntype ShippingAddress = ShippingAddresses[0];\ntype NonNullableShippingAddress = NonNullable<ShippingAddress>;\n\ntype AddressRegion = NonNullableShippingAddress['region'];\ntype NonNullableAddressRegion = NonNullable<AddressRegion>;\ntype ValidatedAddressRegion = {\n code: NonNullable<NonNullableAddressRegion['code']>;\n label: NonNullable<NonNullableAddressRegion['label']>;\n region_id: NonNullableAddressRegion['region_id'];\n};\n\ntype AddressCountry = NonNullableShippingAddress['country'];\ntype NonNullableAddressCountry = NonNullable<AddressCountry>;\ntype ValidatedAddressCountry = {\n code: NonNullable<NonNullableAddressCountry['code']>;\n label: NonNullable<NonNullableAddressCountry['label']>;\n};\n\ntype BillingAddress = NonNullable<GetCartQuery['cart']>['billing_address'];\ntype NonNullableBillingAddress = NonNullable<BillingAddress>;\n\ntype CustomAttributes =\n | NonNullableShippingAddress['custom_attributes']\n | NonNullableBillingAddress['custom_attributes'];\n\nconst isValidAddressRegion = (region: AddressRegion): boolean => {\n if (!region) return false;\n return !!region.code && !!region.label;\n};\n\nconst transformAddressRegion = (\n data: AddressRegion\n): RegionModel | undefined => {\n if (!isValidAddressRegion(data)) return;\n const { code, label, region_id } = data as ValidatedAddressRegion;\n if (!region_id) return { code, name: label };\n return { code, name: label, id: region_id };\n};\n\nconst transformAddressCountry = (data: AddressCountry): CountryModel => {\n const { code, label } = data as ValidatedAddressCountry;\n return { value: code, label };\n};\n\nconst isValidCustomAttribute = (attribute: any): boolean => {\n if (!attribute) return false;\n return 'code' in attribute && 'value' in attribute;\n};\n\nexport const transformCustomAttributes = (\n data: CustomAttributes\n): CustomAttributeModel[] => {\n return data.filter(isValidCustomAttribute).map((attribute) => {\n const { code, value } = attribute as { code: string; value: string };\n return { code, value };\n });\n};\n\nconst buildBaseAddress = (\n data: NonNullableShippingAddress | NonNullableBillingAddress\n): AddressModel => {\n const street = data.street.filter(Boolean) as string[];\n\n return {\n firstName: data.firstname,\n lastName: data.lastname,\n company: data.company || undefined,\n city: data.city,\n street,\n postCode: data.postcode || undefined,\n vatId: data.vat_id || undefined,\n telephone: data.telephone || undefined,\n region: transformAddressRegion(data.region),\n country: transformAddressCountry(data.country),\n customAttributes: transformCustomAttributes(data.custom_attributes),\n };\n};\n\nconst transformBillingAddress = (\n data: BillingAddress\n): BillingAddressModel | undefined => {\n if (!data) return;\n return buildBaseAddress(data);\n};\n\nconst transformShippingAddresses = (\n data: ShippingAddresses\n): ShippingAddressModel[] | undefined => {\n return data\n .filter((address) => !!address)\n .map((address) => {\n const {\n available_shipping_methods,\n selected_shipping_method,\n ...baseData\n } = address as NonNullableShippingAddress;\n\n return {\n ...buildBaseAddress(baseData),\n availableShippingMethods: transformShippingMethods(\n available_shipping_methods\n ),\n selectedShippingMethod: transformSelectedShippingMethod(\n selected_shipping_method\n ),\n };\n });\n};\n\nexport {\n ShippingAddress,\n BillingAddress,\n transformBillingAddress,\n transformShippingAddresses,\n};\n","import { GetCartQuery } from '@/checkout/__generated__/types';\nimport { Cart as CartModel } from '@/checkout/data/models';\nimport { transformCartItemsV2 } from '@/checkout/data/transforms';\nimport {\n transformAvailablePaymentMethods,\n transformSelectedPaymentMethod,\n} from '@/checkout/data/transforms/transform-payment-methods';\n\nimport {\n transformShippingAddresses,\n transformBillingAddress,\n} from '@/checkout/data/transforms/transform-address';\n\ntype Cart = NonNullable<GetCartQuery['cart']>;\ntype NonNullableCoupons = NonNullable<Cart['applied_coupons']>;\ntype NonNullableCoupon = NonNullable<NonNullableCoupons[number]>;\n\nexport const transformCoupons = (coupons: Cart['applied_coupons']) => {\n if (!coupons) return [];\n\n return coupons.filter(Boolean).map((coupon) => {\n const { code } = coupon as NonNullableCoupon;\n return { code };\n });\n};\n\nconst transformCart = (cart: Cart): CartModel => {\n return {\n coupons: transformCoupons(cart.applied_coupons),\n availablePaymentMethods: transformAvailablePaymentMethods(\n cart.available_payment_methods\n ),\n billingAddress: transformBillingAddress(cart.billing_address),\n email: cart.email ?? undefined,\n id: cart.id,\n virtual: cart.is_virtual,\n items: transformCartItemsV2(cart.itemsV2),\n prices: cart.prices,\n selectedPaymentMethod: transformSelectedPaymentMethod(\n cart.selected_payment_method\n ),\n shippingAddresses: transformShippingAddresses(cart.shipping_addresses),\n totalQty: cart.total_quantity,\n };\n};\n\nexport { Cart, transformCart };\n","import {\n GetCartQuery,\n ProductStockStatus,\n} from '@/checkout/__generated__/types';\nimport { Item, ItemKind, StockStatus } from '@/checkout/data/models';\n\ntype CartItemsV2 = NonNullable<GetCartQuery['cart']>['itemsV2'];\ntype NonNullableCartItemsV2 = NonNullable<CartItemsV2>;\ntype CartItems = NonNullableCartItemsV2['items'];\ntype NonNullableCartItems = NonNullable<NonNullableCartItemsV2['items']>;\ntype NonNullableCartItem = NonNullable<NonNullableCartItems[number]>;\n\nfunction transformType(typename: string): ItemKind {\n switch (typename) {\n case 'SimpleCartItem':\n return ItemKind.Simple;\n case 'ConfigurableCartItem':\n return ItemKind.Configurable;\n case 'DownloadableCartItem':\n return ItemKind.Downloadable;\n case 'GiftCardCartItem':\n return ItemKind.GiftCard;\n case 'VirtualCartItem':\n return ItemKind.Virtual;\n case 'BundleCartItem':\n return ItemKind.Bundle;\n default:\n throw new Error(`Unknown item kind: ${typename}`);\n }\n}\n\nfunction transformConfigurableOptions(item: NonNullableCartItem) {\n if (item.__typename !== 'ConfigurableCartItem') return;\n\n const configurableOptions: Record<string, string> = {};\n\n for (const option of item.configurable_options) {\n configurableOptions[option!.option_label] = option!.value_label;\n }\n\n return configurableOptions;\n}\n\nfunction transformCustomizableOptions(item: NonNullableCartItem) {\n if (!('customizable_options' in item)) return;\n\n const customizableOptions: Record<string, string> = {};\n\n for (const option of item.customizable_options) {\n customizableOptions[option!.label] = option!.values\n // some customizable option types don't have a label (empty string), so we use the value instead\n .map((optionValue) => optionValue!.label || optionValue!.value)\n .join(', ');\n }\n\n return customizableOptions;\n}\n\nfunction transformImage(item: NonNullableCartItem) {\n const isConfigurable = item.__typename === 'ConfigurableCartItem';\n\n const thumbnail = isConfigurable\n ? item.configured_variant?.thumbnail\n : item.product?.thumbnail;\n\n if (!thumbnail || !thumbnail.url) return;\n\n const image: Item['image'] = { src: thumbnail.url };\n const alt = String(thumbnail.label || item.product.name);\n if (alt !== '') image.alt = alt;\n return image;\n}\n\nfunction transformCartItem(item: NonNullableCartItem) {\n return {\n kind: transformType(item.__typename),\n name: item.product.name!,\n quantity: item.quantity,\n sku: item.product.sku!,\n uid: item.uid,\n url: item.product?.url_key,\n image: transformImage(item),\n price: {\n value: item.prices!.price.value!,\n currency: item.prices!.price.currency!,\n },\n priceInclTax: {\n value: item.prices!.price_including_tax.value!,\n currency: item.prices!.price_including_tax.currency!,\n },\n total: {\n value: item.prices!.row_total.value!,\n currency: item.prices!.row_total.currency!,\n },\n totalInclTax: {\n value: item.prices!.row_total_including_tax.value!,\n currency: item.prices!.row_total_including_tax.currency!,\n },\n discount: {\n value: item.prices!.total_item_discount!.value!,\n currency: item.prices!.total_item_discount!.currency!,\n },\n regularPrice: {\n value: item.product.price_range.maximum_price!.regular_price.value!,\n currency: item.product.price_range.maximum_price!.regular_price.currency!,\n },\n discounted:\n item.product.price_range.maximum_price!.regular_price.value! *\n item.quantity !==\n item.prices!.row_total.value,\n stockStatus:\n item.product.stock_status === ProductStockStatus.OutOfStock\n ? StockStatus.OutOfStock\n : StockStatus.InStock,\n configurableOptions: transformConfigurableOptions(item),\n customizableOptions: transformCustomizableOptions(item),\n links:\n item.__typename === 'DownloadableCartItem'\n ? item.links?.map((option) => option?.title!)\n : undefined,\n onlyXLeftInStock: item.product.only_x_left_in_stock,\n senderName:\n item.__typename === 'GiftCardCartItem' ? item.sender_name : undefined,\n senderEmail:\n item.__typename === 'GiftCardCartItem' ? item.sender_email! : undefined,\n recipientEmail:\n item.__typename === 'GiftCardCartItem'\n ? item.recipient_email!\n : undefined,\n recipientName:\n item.__typename === 'GiftCardCartItem' ? item.recipient_name : undefined,\n message: item.__typename === 'GiftCardCartItem' ? item.message : undefined,\n };\n}\n\nexport function transformCartItems(items: CartItems): Item[] {\n return items\n .filter(Boolean)\n .map((item) => transformCartItem(item as NonNullableCartItem));\n}\n\nexport function transformCartItemsV2(itemsV2: CartItemsV2): Item[] {\n if (!itemsV2) return [];\n\n return transformCartItems(itemsV2.items);\n}\n","export const CART_DATA_FRAGMENT = /* GraphQL */ `\n fragment CartData on Cart {\n is_virtual\n email\n billing_address {\n city\n country {\n code\n label\n }\n firstname\n lastname\n company\n postcode\n vat_id\n region {\n region_id\n code\n label\n }\n street\n telephone\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n }\n shipping_addresses {\n firstname\n lastname\n company\n street\n city\n postcode\n vat_id\n region {\n region_id\n code\n label\n }\n country {\n code\n label\n }\n telephone\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n available_shipping_methods {\n amount {\n currency\n value\n }\n available\n carrier_code\n carrier_title\n error_message\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n selected_shipping_method {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n }\n available_payment_methods {\n code\n title\n }\n selected_payment_method {\n code\n title\n }\n applied_coupons {\n code\n }\n prices {\n grand_total {\n value\n currency\n }\n subtotal_excluding_tax {\n value\n currency\n }\n subtotal_including_tax {\n value\n currency\n }\n applied_taxes {\n label\n amount {\n currency\n value\n }\n }\n }\n }\n`;\n\nexport const CART_SUMMARY_FRAGMENT = /* GraphQL */ `\n fragment CartSummaryItems on Cart {\n total_quantity\n itemsV2(sort: { field: CREATED_AT, order: DESC }) {\n total_count\n items {\n __typename\n uid\n product {\n __typename\n uid\n name\n sku\n url_key\n thumbnail {\n url\n label\n }\n small_image {\n url\n }\n price_range {\n maximum_price {\n regular_price {\n currency\n value\n }\n }\n }\n stock_status\n only_x_left_in_stock\n }\n prices {\n fixed_product_taxes {\n amount {\n currency\n value\n }\n label\n }\n price {\n currency\n value\n }\n price_including_tax {\n currency\n value\n }\n row_total {\n value\n currency\n }\n row_total_including_tax {\n value\n currency\n }\n total_item_discount {\n value\n currency\n }\n }\n quantity\n errors {\n code\n message\n }\n ... on SimpleCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on VirtualCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on ConfigurableCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n configurable_options {\n id\n configurable_product_option_uid\n option_label\n configurable_product_option_value_uid\n value_label\n value_id\n }\n configured_variant {\n thumbnail {\n label\n url\n }\n }\n }\n ... on GiftCardCartItem {\n sender_name\n sender_email\n recipient_name\n recipient_email\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on DownloadableCartItem {\n links {\n title\n }\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n }\n }\n }\n`;\n\nexport const getCartQuery = /* GraphQL */ `\n query getCart($cartId: String!) {\n cart(cart_id: $cartId) {\n id\n ...CartData\n ...CartSummaryItems\n }\n }\n ${CART_DATA_FRAGMENT}\n ${CART_SUMMARY_FRAGMENT}\n`;\n\nexport const getCustomerCartQuery = /* GraphQL */ `\n query getCustomerCart {\n cart: customerCart {\n id\n ...CartData\n ...CartSummaryItems\n }\n }\n ${CART_DATA_FRAGMENT}\n ${CART_SUMMARY_FRAGMENT}\n`;\n"],"names":["transformSelectedPaymentMethod","data","code","title","transformAvailablePaymentMethods","filter","method","map","isValidAddressRegion","region","label","transformAddressRegion","region_id","name","id","transformAddressCountry","value","isValidCustomAttribute","attribute","transformCustomAttributes","buildBaseAddress","street","Boolean","firstName","firstname","lastName","lastname","company","undefined","city","postCode","postcode","vatId","vat_id","telephone","country","customAttributes","custom_attributes","transformBillingAddress","transformShippingAddresses","address","available_shipping_methods","selected_shipping_method","baseData","availableShippingMethods","transformShippingMethods","selectedShippingMethod","transformSelectedShippingMethod","transformCoupons","coupons","coupon","transformCart","cart","applied_coupons","availablePaymentMethods","available_payment_methods","billingAddress","billing_address","email","virtual","is_virtual","items","transformCartItemsV2","itemsV2","prices","selectedPaymentMethod","selected_payment_method","shippingAddresses","shipping_addresses","totalQty","total_quantity","transformType","typename","ItemKind","Simple","Configurable","Downloadable","GiftCard","Virtual","Bundle","Error","transformConfigurableOptions","item","__typename","configurableOptions","option","configurable_options","option_label","value_label","transformCustomizableOptions","customizableOptions","customizable_options","values","optionValue","join","transformImage","thumbnail","configured_variant","product","url","image","src","alt","String","transformCartItem","kind","quantity","sku","uid","url_key","price","currency","priceInclTax","price_including_tax","total","row_total","totalInclTax","row_total_including_tax","discount","total_item_discount","regularPrice","price_range","maximum_price","regular_price","discounted","stockStatus","stock_status","ProductStockStatus","OutOfStock","StockStatus","InStock","links","onlyXLeftInStock","only_x_left_in_stock","senderName","sender_name","senderEmail","sender_email","recipientEmail","recipient_email","recipientName","recipient_name","message","transformCartItems","CART_DATA_FRAGMENT","CART_SUMMARY_FRAGMENT","getCartQuery","getCustomerCartQuery"],"mappings":"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"}