@magento/venia-ui 9.0.0 → 9.2.0-alpha.1

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 (299) hide show
  1. package/i18n/en_US.json +21 -1
  2. package/lib/RootComponents/CMS/__tests__/cms.spec.js +50 -20
  3. package/lib/RootComponents/CMS/cms.js +39 -43
  4. package/lib/RootComponents/CMS/cms.module.css +17 -14
  5. package/lib/RootComponents/Category/NoProductsFound/noProductsFound.js +1 -1
  6. package/lib/RootComponents/Category/__tests__/__snapshots__/category.spec.js.snap +2 -2
  7. package/lib/RootComponents/Category/__tests__/__snapshots__/categoryContent.spec.js.snap +60 -0
  8. package/lib/RootComponents/Category/__tests__/category.spec.js +1 -1
  9. package/lib/RootComponents/Category/__tests__/categoryContent.spec.js +8 -0
  10. package/lib/RootComponents/Category/category.gql.js +2 -1
  11. package/lib/RootComponents/Category/category.js +6 -6
  12. package/lib/RootComponents/Category/categoryContent.js +11 -4
  13. package/lib/components/Accordion/section.js +6 -2
  14. package/lib/components/AccountChip/accountChip.gql.js +1 -1
  15. package/lib/components/AccountInformationPage/accountInformationPage.gql.js +5 -7
  16. package/lib/components/AccountInformationPage/accountInformationPage.js +5 -1
  17. package/lib/components/AccountInformationPage/editForm.js +22 -4
  18. package/lib/components/AccountMenu/accountMenu.js +1 -1
  19. package/lib/components/AccountMenu/accountMenuItems.js +2 -1
  20. package/lib/components/AddressBookPage/__tests__/__snapshots__/addressCard.spec.js.snap +5 -0
  21. package/lib/components/AddressBookPage/addEditDialog.js +36 -10
  22. package/lib/components/AddressBookPage/addressBookPage.js +5 -2
  23. package/lib/components/AddressBookPage/addressCard.js +17 -4
  24. package/lib/components/App/app.js +5 -1
  25. package/lib/components/App/localeProvider.js +2 -1
  26. package/lib/components/Breadcrumbs/breadcrumbs.js +3 -3
  27. package/lib/components/Breadcrumbs/breadcrumbs.module.css +11 -3
  28. package/lib/components/CartPage/GiftCards/giftCard.js +1 -0
  29. package/lib/components/CartPage/GiftCards/giftCards.js +2 -0
  30. package/lib/components/CartPage/PriceAdjustments/CouponCode/couponCode.js +3 -0
  31. package/lib/components/CartPage/PriceAdjustments/GiftOptions/giftOptions.js +3 -0
  32. package/lib/components/CartPage/PriceAdjustments/ShippingMethods/shippingForm.js +10 -2
  33. package/lib/components/CartPage/PriceAdjustments/ShippingMethods/shippingMethods.js +2 -1
  34. package/lib/components/CartPage/PriceAdjustments/ShippingMethods/shippingRadio.js +1 -1
  35. package/lib/components/CartPage/PriceAdjustments/ShippingMethods/shippingRadios.js +1 -1
  36. package/lib/components/CartPage/PriceAdjustments/giftCardSection.ee.js +1 -0
  37. package/lib/components/CartPage/PriceAdjustments/priceAdjustments.js +4 -1
  38. package/lib/components/CartPage/PriceSummary/discountSummary.js +8 -2
  39. package/lib/components/CartPage/PriceSummary/giftCardSummary.ee.js +4 -1
  40. package/lib/components/CartPage/PriceSummary/priceSummary.js +10 -3
  41. package/lib/components/CartPage/PriceSummary/shippingSummary.js +6 -1
  42. package/lib/components/CartPage/PriceSummary/taxSummary.js +1 -1
  43. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productDetail.spec.js.snap +3 -3
  44. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productForm.spec.js.snap +2 -2
  45. package/lib/components/CartPage/ProductListing/EditModal/productDetail.js +1 -1
  46. package/lib/components/CartPage/ProductListing/__tests__/__snapshots__/errorMessage.spec.js.snap +11 -0
  47. package/lib/components/CartPage/ProductListing/__tests__/errorMessage.spec.js +20 -0
  48. package/lib/components/CartPage/ProductListing/__tests__/product.spec.js +1 -0
  49. package/lib/components/CartPage/ProductListing/errorMessage.js +31 -0
  50. package/lib/components/CartPage/ProductListing/errorMessage.module.css +9 -0
  51. package/lib/components/CartPage/ProductListing/product.js +17 -10
  52. package/lib/components/CartPage/ProductListing/productListing.js +6 -1
  53. package/lib/components/CartPage/ProductListing/productListing.module.css +6 -0
  54. package/lib/components/CartPage/ProductListing/quantity.js +3 -0
  55. package/lib/components/CartPage/cartPage.js +1 -1
  56. package/lib/components/CategoryList/__tests__/categoryList.spec.js +2 -0
  57. package/lib/components/CategoryList/categoryList.js +4 -2
  58. package/lib/components/CategoryList/categoryList.module.css +2 -0
  59. package/lib/components/CategoryList/categoryTile.js +2 -0
  60. package/lib/components/CategoryList/categoryTile.module.css +2 -0
  61. package/lib/components/CategoryList/index.js +2 -0
  62. package/lib/components/CategoryTree/categoryBranch.js +2 -1
  63. package/lib/components/CategoryTree/categoryLeaf.js +1 -0
  64. package/lib/components/CategoryTree/categoryTree.js +3 -3
  65. package/lib/components/Checkbox/checkbox.module.css +11 -3
  66. package/lib/components/Checkout/addressForm.js +2 -3
  67. package/lib/components/CheckoutPage/GuestSignIn/guestSignIn.js +6 -2
  68. package/lib/components/CheckoutPage/ItemsReview/__fixtures__/cartItems.js +12 -12
  69. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/item.spec.js.snap +2 -2
  70. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/itemsReview.spec.js.snap +3 -3
  71. package/lib/components/CheckoutPage/ItemsReview/item.js +1 -1
  72. package/lib/components/CheckoutPage/ItemsReview/itemsReview.js +4 -1
  73. package/lib/components/CheckoutPage/OrderConfirmationPage/__tests__/__snapshots__/orderConfirmationPage.spec.js.snap +1 -1
  74. package/lib/components/CheckoutPage/OrderConfirmationPage/createAccount.js +6 -0
  75. package/lib/components/CheckoutPage/OrderConfirmationPage/orderConfirmationPage.js +10 -4
  76. package/lib/components/CheckoutPage/OrderSummary/orderSummary.js +1 -1
  77. package/lib/components/CheckoutPage/PaymentInformation/braintreeSummary.js +2 -1
  78. package/lib/components/CheckoutPage/PaymentInformation/creditCard.js +11 -1
  79. package/lib/components/CheckoutPage/PaymentInformation/editCard.js +1 -1
  80. package/lib/components/CheckoutPage/PaymentInformation/editModal.js +1 -1
  81. package/lib/components/CheckoutPage/PaymentInformation/paymentInformation.js +1 -1
  82. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/guestForm.spec.js.snap +8 -0
  83. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/guestForm.spec.js +56 -1
  84. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/customerForm.js +27 -4
  85. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/guestForm.js +96 -9
  86. package/lib/components/CheckoutPage/ShippingInformation/card.js +1 -1
  87. package/lib/components/CheckoutPage/ShippingInformation/shippingInformation.js +14 -3
  88. package/lib/components/CheckoutPage/ShippingMethod/completedView.js +1 -0
  89. package/lib/components/CheckoutPage/ShippingMethod/shippingMethod.js +2 -1
  90. package/lib/components/CheckoutPage/ShippingMethod/updateModal.js +1 -0
  91. package/lib/components/CheckoutPage/__tests__/__snapshots__/checkoutPage.spec.js.snap +32 -0
  92. package/lib/components/CheckoutPage/__tests__/checkoutPage.spec.js +2 -0
  93. package/lib/components/CheckoutPage/checkoutPage.js +26 -4
  94. package/lib/components/ContactPage/__tests__/__snapshots__/contactLink.spec.js.snap +11 -0
  95. package/lib/components/ContactPage/__tests__/__snapshots__/contactPage.shimmer.spec.js.snap +113 -0
  96. package/lib/components/ContactPage/__tests__/__snapshots__/contactPage.spec.js.snap +312 -0
  97. package/lib/components/ContactPage/__tests__/contactLink.spec.js +58 -0
  98. package/lib/components/ContactPage/__tests__/contactPage.shimmer.spec.js +20 -0
  99. package/lib/components/ContactPage/__tests__/contactPage.spec.js +159 -0
  100. package/lib/components/ContactPage/contactLink.js +21 -0
  101. package/lib/components/ContactPage/contactPage.js +270 -0
  102. package/lib/components/ContactPage/contactPage.module.css +81 -0
  103. package/lib/components/ContactPage/contactPage.shimmer.js +104 -0
  104. package/lib/components/ContactPage/contactPage.shimmer.module.css +27 -0
  105. package/lib/components/ContactPage/index.js +2 -0
  106. package/lib/components/CreateAccount/createAccount.js +5 -0
  107. package/lib/components/Dialog/dialog.js +18 -4
  108. package/lib/components/ErrorMessage/errorMessage.js +7 -2
  109. package/lib/components/ErrorView/errorView.js +4 -2
  110. package/lib/components/Field/field.module.css +10 -6
  111. package/lib/components/FilterModal/CurrentFilters/currentFilter.js +7 -3
  112. package/lib/components/FilterModal/FilterList/__tests__/filterItem.spec.js +34 -5
  113. package/lib/components/FilterModal/FilterList/filterDefault.js +3 -2
  114. package/lib/components/FilterModal/FilterList/filterItem.js +27 -7
  115. package/lib/components/FilterModal/FilterList/filterList.js +6 -1
  116. package/lib/components/FilterModal/filterBlock.js +9 -4
  117. package/lib/components/FilterModal/filterFooter.js +1 -0
  118. package/lib/components/FilterModal/filterModal.js +6 -1
  119. package/lib/components/FilterModalOpenButton/filterModalOpenButton.js +1 -0
  120. package/lib/components/FilterSidebar/filterSidebar.js +6 -1
  121. package/lib/components/Footer/__tests__/__snapshots__/footer.spec.js.snap +15 -0
  122. package/lib/components/Footer/__tests__/footer.spec.js +13 -1
  123. package/lib/components/Footer/footer.js +17 -8
  124. package/lib/components/Footer/footer.module.css +18 -3
  125. package/lib/components/Footer/sampleData.js +8 -3
  126. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.js +3 -0
  127. package/lib/components/ForgotPassword/FormSubmissionSuccessful/formSubmissionSuccessful.js +4 -2
  128. package/lib/components/ForgotPassword/forgotPassword.gql.js +0 -1
  129. package/lib/components/FormError/formError.js +10 -4
  130. package/lib/components/Gallery/__tests__/__snapshots__/addToCartButton.spec.js.snap +0 -3
  131. package/lib/components/Gallery/__tests__/__snapshots__/item.spec.js.snap +1 -0
  132. package/lib/components/Gallery/addToCartButton.js +27 -22
  133. package/lib/components/Gallery/item.js +16 -4
  134. package/lib/components/Gallery/item.module.css +3 -1
  135. package/lib/components/Head/index.js +2 -1
  136. package/lib/components/Header/__tests__/header.spec.js +1 -1
  137. package/lib/components/Header/accountTrigger.js +1 -0
  138. package/lib/components/Header/cartTrigger.js +4 -1
  139. package/lib/components/Header/currencySwitcher.module.css +1 -1
  140. package/lib/components/Header/header.js +1 -1
  141. package/lib/components/Header/header.module.css +100 -96
  142. package/lib/components/Header/navTrigger.js +1 -0
  143. package/lib/components/Header/searchTrigger.js +1 -0
  144. package/lib/components/LegacyMiniCart/cartOptions.gql.js +7 -6
  145. package/lib/components/LegacyMiniCart/cartOptions.js +1 -1
  146. package/lib/components/LegacyMiniCart/editFormFragment.gql.js +7 -3
  147. package/lib/components/LegacyMiniCart/kebab.js +1 -0
  148. package/lib/components/LegacyMiniCart/product.js +1 -1
  149. package/lib/components/LegacyMiniCart/productOptions.js +6 -1
  150. package/lib/components/LegacyMiniCart/section.js +15 -5
  151. package/lib/components/Link/link.js +6 -4
  152. package/lib/components/Mask/mask.js +3 -3
  153. package/lib/components/MegaMenu/__tests__/MegaMenuItem.spec.js +1 -0
  154. package/lib/components/MegaMenu/__tests__/__snapshots__/MegaMenu.spec.js.snap +9 -0
  155. package/lib/components/MegaMenu/__tests__/__snapshots__/MegaMenuItem.spec.js.snap +6 -0
  156. package/lib/components/MegaMenu/__tests__/__snapshots__/Submenu.spec.js.snap +2 -0
  157. package/lib/components/MegaMenu/megaMenu.js +6 -2
  158. package/lib/components/MegaMenu/megaMenu.module.css +8 -11
  159. package/lib/components/MegaMenu/megaMenuItem.js +27 -6
  160. package/lib/components/MegaMenu/megaMenuItem.module.css +0 -5
  161. package/lib/components/MegaMenu/submenu.js +5 -3
  162. package/lib/components/MegaMenu/submenuColumn.js +15 -4
  163. package/lib/components/MiniCart/ProductList/__tests__/__snapshots__/item.spec.js.snap +4 -4
  164. package/lib/components/MiniCart/ProductList/item.js +7 -4
  165. package/lib/components/MiniCart/ProductList/productList.js +5 -1
  166. package/lib/components/MiniCart/__tests__/__snapshots__/miniCart.spec.js.snap +1 -1
  167. package/lib/components/MiniCart/miniCart.gql.js +4 -3
  168. package/lib/components/MiniCart/miniCart.js +9 -4
  169. package/lib/components/MyAccount/ResetPassword/resetPassword.gql.js +1 -1
  170. package/lib/components/Newsletter/__tests__/__snapshots__/newsletter.shimmer.spec.js.snap +40 -0
  171. package/lib/components/Newsletter/__tests__/__snapshots__/newsletter.spec.js.snap +173 -0
  172. package/lib/components/Newsletter/__tests__/newsletter.shimmer.spec.js +10 -0
  173. package/lib/components/Newsletter/__tests__/newsletter.spec.js +143 -0
  174. package/lib/components/Newsletter/index.js +1 -0
  175. package/lib/components/Newsletter/newsletter.js +148 -0
  176. package/lib/components/Newsletter/newsletter.module.css +94 -0
  177. package/lib/components/Newsletter/newsletter.shimmer.js +46 -0
  178. package/lib/components/Newsletter/newsletter.shimmer.module.css +11 -0
  179. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/item.spec.js.snap +1 -1
  180. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/shippingMethod.spec.js.snap +3 -0
  181. package/lib/components/OrderHistoryPage/OrderDetails/billingInformation.js +4 -1
  182. package/lib/components/OrderHistoryPage/OrderDetails/item.js +1 -1
  183. package/lib/components/OrderHistoryPage/OrderDetails/items.js +1 -1
  184. package/lib/components/OrderHistoryPage/OrderDetails/paymentMethod.js +1 -1
  185. package/lib/components/OrderHistoryPage/OrderDetails/shippingInformation.js +4 -1
  186. package/lib/components/OrderHistoryPage/OrderDetails/shippingMethod.js +5 -1
  187. package/lib/components/OrderHistoryPage/orderHistoryPage.js +8 -1
  188. package/lib/components/Pagination/pagination.js +1 -1
  189. package/lib/components/Pagination/tile.js +5 -1
  190. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/__tests__/__snapshots__/boolean.spec.js.snap +20 -0
  191. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/__tests__/boolean.spec.js +52 -0
  192. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/boolean.js +74 -0
  193. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/boolean.module.css +9 -0
  194. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/index.js +1 -0
  195. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/__tests__/__snapshots__/date.spec.js.snap +25 -0
  196. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/__tests__/date.spec.js +52 -0
  197. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/date.js +82 -0
  198. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/date.module.css +9 -0
  199. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/index.js +1 -0
  200. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/__tests__/__snapshots__/dateTime.spec.js.snap +29 -0
  201. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/__tests__/dateTime.spec.js +53 -0
  202. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/dateTime.js +85 -0
  203. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/dateTime.module.css +9 -0
  204. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/index.js +1 -0
  205. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/__tests__/__snapshots__/multiSelect.spec.js.snap +36 -0
  206. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/__tests__/multiSelect.spec.js +88 -0
  207. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/index.js +1 -0
  208. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/multiselect.js +99 -0
  209. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/multiselect.module.css +13 -0
  210. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/__tests__/__snapshots__/price.spec.js.snap +23 -0
  211. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/__tests__/price.spec.js +52 -0
  212. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/index.js +1 -0
  213. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/price.js +74 -0
  214. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/price.module.css +9 -0
  215. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/__tests__/__snapshots__/select.spec.js.snap +36 -0
  216. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/__tests__/select.spec.js +88 -0
  217. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/index.js +1 -0
  218. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/select.js +99 -0
  219. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/select.module.css +13 -0
  220. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/__tests__/__snapshots__/text.spec.js.snap +33 -0
  221. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/__tests__/text.spec.js +74 -0
  222. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/index.js +1 -0
  223. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/text.js +88 -0
  224. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/text.module.css +13 -0
  225. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/__tests__/__snapshots__/textarea.spec.js.snap +33 -0
  226. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/__tests__/textarea.spec.js +74 -0
  227. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/index.js +1 -0
  228. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/textarea.js +88 -0
  229. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/textarea.module.css +13 -0
  230. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/__tests__/__snapshots__/attributeType.spec.js.snap +101 -0
  231. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/__tests__/attributeType.spec.js +173 -0
  232. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/attributeType.js +61 -0
  233. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/index.js +1 -0
  234. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/__snapshots__/customAttributes.spec.js.snap +49 -0
  235. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/customAttributes.spec.js +78 -0
  236. package/lib/components/ProductFullDetail/CustomAttributes/customAttributes.js +66 -0
  237. package/lib/components/ProductFullDetail/CustomAttributes/customAttributes.module.css +14 -0
  238. package/lib/components/ProductFullDetail/CustomAttributes/index.js +1 -0
  239. package/lib/components/ProductFullDetail/__tests__/__snapshots__/productFullDetail.spec.js.snap +39 -0
  240. package/lib/components/ProductFullDetail/__tests__/productFullDetail.spec.js +3 -1
  241. package/lib/components/ProductFullDetail/productFullDetail.js +18 -3
  242. package/lib/components/ProductOptions/__tests__/__snapshots__/option.spec.js.snap +1 -1
  243. package/lib/components/ProductOptions/__tests__/__snapshots__/options.spec.js.snap +2 -2
  244. package/lib/components/ProductOptions/__tests__/__snapshots__/swatch.spec.js.snap +44 -2
  245. package/lib/components/ProductOptions/__tests__/__snapshots__/swatchList.spec.js.snap +22 -1
  246. package/lib/components/ProductOptions/__tests__/swatch.spec.js +0 -2
  247. package/lib/components/ProductOptions/option.js +2 -2
  248. package/lib/components/ProductOptions/swatch.js +7 -5
  249. package/lib/components/ProductOptions/swatch.module.css +11 -0
  250. package/lib/components/ProductOptions/tile.js +1 -0
  251. package/lib/components/ProductSort/__tests__/__snapshots__/sortItem.spec.js.snap +14 -0
  252. package/lib/components/ProductSort/__tests__/sortItem.spec.js +61 -0
  253. package/lib/components/ProductSort/productSort.js +84 -40
  254. package/lib/components/ProductSort/sortItem.js +26 -11
  255. package/lib/components/RadioGroup/radio.module.css +13 -5
  256. package/lib/components/RadioGroup/radioGroup.js +2 -1
  257. package/lib/components/Rating/__tests__/__snapshots__/rating.spec.js.snap +27 -0
  258. package/lib/components/Rating/__tests__/rating.spec.js +13 -0
  259. package/lib/components/Rating/index.js +1 -0
  260. package/lib/components/Rating/rating.js +30 -0
  261. package/lib/components/Rating/rating.module.css +21 -0
  262. package/lib/components/RichContent/richContent.module.css +52 -59
  263. package/lib/components/SearchBar/autocomplete.js +2 -0
  264. package/lib/components/SearchBar/searchBar.js +1 -1
  265. package/lib/components/SearchBar/searchBar.module.css +1 -0
  266. package/lib/components/SearchBar/searchField.js +1 -0
  267. package/lib/components/SearchBar/suggestedCategory.js +1 -1
  268. package/lib/components/SearchBar/suggestedProduct.js +6 -1
  269. package/lib/components/SearchPage/__tests__/__snapshots__/searchPage.spec.js.snap +195 -1
  270. package/lib/components/SearchPage/__tests__/searchPage.spec.js +13 -0
  271. package/lib/components/SearchPage/searchPage.js +20 -6
  272. package/lib/components/Shimmer/shimmer.js +11 -2
  273. package/lib/components/Shimmer/shimmer.module.css +4 -8
  274. package/lib/components/SignIn/__tests__/__snapshots__/signIn.spec.js.snap +126 -0
  275. package/lib/components/SignIn/__tests__/signIn.spec.js +11 -0
  276. package/lib/components/SignIn/signIn.gql.js +8 -4
  277. package/lib/components/SignIn/signIn.js +24 -4
  278. package/lib/components/TextArea/textArea.module.css +9 -0
  279. package/lib/components/TextInput/textInput.module.css +4 -0
  280. package/lib/components/ToastContainer/toast.js +23 -3
  281. package/lib/components/ToastContainer/toast.module.css +3 -0
  282. package/lib/components/Trigger/trigger.js +9 -2
  283. package/lib/components/Wishlist/AddToListButton/addToListButton.ee.js +1 -0
  284. package/lib/components/Wishlist/WishlistDialog/CreateWishlistForm/createWishlistForm.js +2 -0
  285. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.js +1 -0
  286. package/lib/components/Wishlist/WishlistDialog/wishlistDialog.js +1 -0
  287. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistPage.spec.js.snap +5 -5
  288. package/lib/components/WishlistPage/createWishlist.ee.js +2 -0
  289. package/lib/components/WishlistPage/wishlist.js +8 -3
  290. package/lib/components/WishlistPage/wishlistItem.js +17 -4
  291. package/lib/components/WishlistPage/wishlistPage.js +5 -3
  292. package/lib/defaultRoutes.json +6 -0
  293. package/lib/targets/__tests__/venia-ui-targets.spec.js +2 -0
  294. package/lib/util/__tests__/shrinkGETQuery.spec.js +1 -1
  295. package/lib/util/apolloCache.js +2 -2
  296. package/lib/util/formValidators.js +10 -8
  297. package/lib/util/toCamelCase.js +3 -0
  298. package/package.json +17 -14
  299. package/upward.yml +19 -40
@@ -6,9 +6,10 @@ import FilterItem from '../filterItem';
6
6
  const mockOnApply = jest.fn();
7
7
 
8
8
  jest.mock('../filterDefault', () => {
9
- const mockedFilterDefault = jest.fn(({ onClick }) => {
10
- onClick();
11
-
9
+ const mockedFilterDefault = jest.fn(({ onMouseDown }) => {
10
+ onMouseDown({
11
+ button: 0
12
+ });
12
13
  return null;
13
14
  });
14
15
 
@@ -85,7 +86,8 @@ describe('#FilterItem', () => {
85
86
  expect(mockFilterDefault).toHaveBeenCalledWith(
86
87
  expect.objectContaining({
87
88
  isSelected: false,
88
- onClick: expect.any(Function)
89
+ onKeyDown: expect.any(Function),
90
+ onMouseDown: expect.any(Function)
89
91
  }),
90
92
  {}
91
93
  );
@@ -117,10 +119,37 @@ describe('#FilterItem', () => {
117
119
 
118
120
  expect(mockFilterDefault).toHaveBeenCalledWith(
119
121
  expect.objectContaining({
120
- onClick: expect.any(Function),
122
+ onMouseDown: expect.any(Function),
123
+ onKeyDown: expect.any(Function),
121
124
  isSelected: true
122
125
  }),
123
126
  {}
124
127
  );
125
128
  });
129
+
130
+ it('calls onApply when keyboard Enter or space is pressed', () => {
131
+ givenOnApply();
132
+ mockFilterDefault.mockImplementationOnce(({ onKeyDown }) => {
133
+ onKeyDown({
134
+ key: 'Enter',
135
+ preventDefault: jest.fn()
136
+ });
137
+ return null;
138
+ });
139
+
140
+ createTestInstance(<Component />);
141
+ expect(mockOnApply).toHaveBeenCalled();
142
+ });
143
+
144
+ it('does not call onApply with right mouse click', () => {
145
+ givenOnApply();
146
+ mockFilterDefault.mockImplementationOnce(({ onMouseDown }) => {
147
+ onMouseDown({
148
+ button: 1
149
+ });
150
+ return null;
151
+ });
152
+ createTestInstance(<Component />);
153
+ expect(mockOnApply).not.toHaveBeenCalled();
154
+ });
126
155
  });
@@ -17,7 +17,7 @@ const FilterDefault = props => {
17
17
  ? formatMessage(
18
18
  {
19
19
  id: 'filterModal.item.applyFilter',
20
- defaultMessage: 'Apply filter'
20
+ defaultMessage: 'Apply filter "{optionName}".'
21
21
  },
22
22
  {
23
23
  optionName: label
@@ -26,7 +26,7 @@ const FilterDefault = props => {
26
26
  : formatMessage(
27
27
  {
28
28
  id: 'filterModal.item.clearFilter',
29
- defaultMessage: 'Remove filter'
29
+ defaultMessage: 'Remove filter "{optionName}".'
30
30
  },
31
31
  {
32
32
  optionName: label
@@ -40,6 +40,7 @@ const FilterDefault = props => {
40
40
  fieldValue={!!isSelected}
41
41
  label={label}
42
42
  ariaLabel={ariaLabel}
43
+ data-cy="FilterDefault-checkbox"
43
44
  {...restProps}
44
45
  />
45
46
  );
@@ -19,19 +19,39 @@ const FilterItem = props => {
19
19
  [title, value]
20
20
  );
21
21
 
22
- const handleClick = useCallback(() => {
23
- toggleItem({ group, item });
22
+ const handleClick = useCallback(
23
+ e => {
24
+ // use only left click for selection
25
+ if (e.button !== 0) return;
24
26
 
25
- if (typeof onApply === 'function') {
26
- onApply(group, item);
27
- }
28
- }, [group, item, toggleItem, onApply]);
27
+ toggleItem({ group, item });
28
+
29
+ if (typeof onApply === 'function') {
30
+ onApply(group, item);
31
+ }
32
+ },
33
+ [group, item, toggleItem, onApply]
34
+ );
35
+
36
+ const handleKeyDown = useCallback(
37
+ e => {
38
+ if (e.key === 'Enter' || e.key === ' ') {
39
+ e.preventDefault();
40
+ toggleItem({ group, item });
41
+ if (typeof onApply === 'function') {
42
+ onApply(group, item);
43
+ }
44
+ }
45
+ },
46
+ [group, item, onApply, toggleItem]
47
+ );
29
48
 
30
49
  return (
31
50
  <FilterDefault
32
51
  isSelected={isSelected}
33
52
  item={tileItem}
34
- onClick={handleClick}
53
+ onMouseDown={handleClick}
54
+ onKeyDown={handleKeyDown}
35
55
  title={title}
36
56
  value={value}
37
57
  />
@@ -38,7 +38,11 @@ const FilterList = props => {
38
38
 
39
39
  // create an element for each item
40
40
  const element = (
41
- <li key={key} className={classes.item}>
41
+ <li
42
+ key={key}
43
+ className={classes.item}
44
+ data-cy="FilterList-item"
45
+ >
42
46
  <FilterItem
43
47
  filterApi={filterApi}
44
48
  filterState={filterState}
@@ -87,6 +91,7 @@ const FilterList = props => {
87
91
  <button
88
92
  onClick={handleListToggle}
89
93
  className={classes.showMoreLessButton}
94
+ data-cy="FilterList-showMoreLessButton"
90
95
  >
91
96
  {label}
92
97
  </button>
@@ -36,7 +36,7 @@ const FilterBlock = props => {
36
36
  const itemAriaLabel = formatMessage(
37
37
  {
38
38
  id: 'filterModal.item.ariaLabel',
39
- defaultMessage: 'Filter products by'
39
+ defaultMessage: 'Filter products by "{itemName}"'
40
40
  },
41
41
  {
42
42
  itemName: name
@@ -47,7 +47,7 @@ const FilterBlock = props => {
47
47
  ? formatMessage(
48
48
  {
49
49
  id: 'filterModal.item.hideOptions',
50
- defaultMessage: 'Hide filter item options.'
50
+ defaultMessage: 'Hide "{itemName}" filter item options.'
51
51
  },
52
52
  {
53
53
  itemName: name
@@ -56,7 +56,7 @@ const FilterBlock = props => {
56
56
  : formatMessage(
57
57
  {
58
58
  id: 'filterModal.item.showOptions',
59
- defaultMessage: 'Show filter item options.'
59
+ defaultMessage: 'Show "{itemName}" filter item options.'
60
60
  },
61
61
  {
62
62
  itemName: name
@@ -76,10 +76,15 @@ const FilterBlock = props => {
76
76
  ) : null;
77
77
 
78
78
  return (
79
- <li className={classes.root} aria-label={itemAriaLabel}>
79
+ <li
80
+ className={classes.root}
81
+ aria-label={itemAriaLabel}
82
+ data-cy="FilterBlock-root"
83
+ >
80
84
  <button
81
85
  className={classes.trigger}
82
86
  onClick={handleClick}
87
+ data-cy="FilterBlock-triggerButton"
83
88
  type="button"
84
89
  aria-expanded={isExpanded}
85
90
  aria-label={toggleItemOptionsAriaLabel}
@@ -26,6 +26,7 @@ const FilterFooter = props => {
26
26
  <Button
27
27
  disabled={!touched}
28
28
  onClick={applyFilters}
29
+ data-cy="FilterFooter-button"
29
30
  aria-label={buttonLabel}
30
31
  aria-disabled={!touched}
31
32
  priority="high"
@@ -79,6 +79,7 @@ const FilterModal = props => {
79
79
  type="button"
80
80
  onClick={handleReset}
81
81
  ariaLabel={clearAllAriaLabel}
82
+ data-cy="FilterModal-clearButton"
82
83
  >
83
84
  <FormattedMessage
84
85
  id={'filterModal.action'}
@@ -97,7 +98,11 @@ const FilterModal = props => {
97
98
  {/* eslint-disable-next-line jsx-a11y/no-autofocus */}
98
99
  <FocusScope contain restoreFocus autoFocus>
99
100
  {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}
100
- <aside className={modalClass} onKeyDown={handleKeyDownActions}>
101
+ <aside
102
+ className={modalClass}
103
+ onKeyDown={handleKeyDownActions}
104
+ data-cy="FilterModal-root"
105
+ >
101
106
  <div className={classes.body}>
102
107
  <div className={classes.header}>
103
108
  <h2 className={classes.headerTitle}>
@@ -17,6 +17,7 @@ const FilterModalOpenButton = props => {
17
17
  classes={{
18
18
  root_lowPriority: classes.filterButton
19
19
  }}
20
+ data-cy="FilterModalOpenButton-button"
20
21
  onClick={handleOpen}
21
22
  type="button"
22
23
  aria-live="polite"
@@ -80,7 +80,11 @@ const FilterSidebar = props => {
80
80
 
81
81
  const clearAll = filterState.size ? (
82
82
  <div className={classes.action}>
83
- <LinkButton type="button" onClick={handleReset}>
83
+ <LinkButton
84
+ type="button"
85
+ onClick={handleReset}
86
+ data-cy="FilterSidebar-clearButton"
87
+ >
84
88
  <FormattedMessage
85
89
  id={'filterModal.action'}
86
90
  defaultMessage={'Clear all'}
@@ -93,6 +97,7 @@ const FilterSidebar = props => {
93
97
  <aside
94
98
  className={classes.root}
95
99
  ref={filterRef}
100
+ data-cy="FilterSidebar-root"
96
101
  aria-live="polite"
97
102
  aria-busy="false"
98
103
  >
@@ -38,6 +38,20 @@ exports[`footer renders copyright 1`] = `
38
38
  />
39
39
  </a>
40
40
  </li>
41
+ <li
42
+ className="linkItem"
43
+ >
44
+ <a
45
+ className="link"
46
+ href="/comp"
47
+ onClick={[Function]}
48
+ >
49
+ <mock-FormattedMessage
50
+ defaultMessage="comp"
51
+ id="comp"
52
+ />
53
+ </a>
54
+ </li>
41
55
  </ul>
42
56
  <ul
43
57
  className="linkGroup"
@@ -160,6 +174,7 @@ exports[`footer renders copyright 1`] = `
160
174
  </li>
161
175
  </ul>
162
176
  </div>
177
+ <i />
163
178
  </div>
164
179
  <div
165
180
  className="branding"
@@ -17,8 +17,20 @@ jest.mock('@magento/venia-ui/lib/components/Logo', () => {
17
17
  return props => <i {...props} />;
18
18
  });
19
19
 
20
+ jest.mock('@magento/venia-ui/lib/components/Newsletter', () => {
21
+ return props => <i {...props} />;
22
+ });
23
+
24
+ const mockLinkComponent = ({ children }) => {
25
+ return children;
26
+ };
27
+
20
28
  const links = new Map()
21
- .set('ab', [['a', '/a'], ['b', '/b']])
29
+ .set('ab', [
30
+ ['a', '/a'],
31
+ ['b', '/b'],
32
+ ['comp', { path: '/comp', Component: mockLinkComponent }]
33
+ ])
22
34
  .set('12', [['1', '/1'], ['2', '/2']]);
23
35
 
24
36
  test('footer renders copyright', () => {
@@ -1,11 +1,12 @@
1
- import React from 'react';
1
+ import React, { Fragment } from 'react';
2
2
  import { Facebook, Instagram, Twitter } from 'react-feather';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
  import { Link } from 'react-router-dom';
5
5
  import { shape, string } from 'prop-types';
6
6
  import { useFooter } from '@magento/peregrine/lib/talons/Footer/useFooter';
7
7
 
8
- import Logo from '@magento/venia-ui/lib/components/Logo';
8
+ import Logo from '../Logo';
9
+ import Newsletter from '../Newsletter';
9
10
  import { useStyle } from '../../classify';
10
11
  import defaultClasses from './footer.module.css';
11
12
  import { DEFAULT_LINKS, LOREM_IPSUM } from './sampleData';
@@ -18,10 +19,17 @@ const Footer = props => {
18
19
  const { copyrightText } = talonProps;
19
20
 
20
21
  const linkGroups = Array.from(links, ([groupKey, linkProps]) => {
21
- const linkElements = Array.from(linkProps, ([text, path]) => {
22
+ const linkElements = Array.from(linkProps, ([text, pathInfo]) => {
23
+ let path = pathInfo;
24
+ let Component = Fragment;
25
+ if (pathInfo && typeof pathInfo === 'object') {
26
+ path = pathInfo.path;
27
+ Component = pathInfo.Component;
28
+ }
29
+
22
30
  const itemKey = `text: ${text} path:${path}`;
23
31
  const child = path ? (
24
- <Link className={classes.link} to={path}>
32
+ <Link className={classes.link} to={path} data-cy="Footer-link">
25
33
  <FormattedMessage id={text} defaultMessage={text} />
26
34
  </Link>
27
35
  ) : (
@@ -31,9 +39,9 @@ const Footer = props => {
31
39
  );
32
40
 
33
41
  return (
34
- <li key={itemKey} className={classes.linkItem}>
35
- {child}
36
- </li>
42
+ <Component key={itemKey}>
43
+ <li className={classes.linkItem}>{child}</li>
44
+ </Component>
37
45
  );
38
46
  });
39
47
 
@@ -45,7 +53,7 @@ const Footer = props => {
45
53
  });
46
54
 
47
55
  return (
48
- <footer className={classes.root}>
56
+ <footer className={classes.root} data-cy="Footer-root">
49
57
  <div className={classes.links}>
50
58
  {linkGroups}
51
59
  <div className={classes.callout}>
@@ -73,6 +81,7 @@ const Footer = props => {
73
81
  </li>
74
82
  </ul>
75
83
  </div>
84
+ <Newsletter />
76
85
  </div>
77
86
  <div className={classes.branding}>
78
87
  <ul className={classes.legal}>
@@ -27,7 +27,7 @@
27
27
  display: grid;
28
28
  gap: 2rem;
29
29
  grid-area: links;
30
- grid-auto-columns: 12rem;
30
+ grid-auto-columns: 18rem;
31
31
  grid-auto-flow: column;
32
32
  grid-template-columns: repeat(3, 1.5fr) 3fr;
33
33
  padding: 0 2rem;
@@ -55,8 +55,8 @@
55
55
  font-size: var(--venia-typography-body-S-fontSize);
56
56
  justify-self: center;
57
57
  line-height: var(--venia-global-lineHeight-300);
58
- max-width: 16rem;
59
- min-width: 12rem;
58
+ max-width: 20rem;
59
+ min-width: 20rem;
60
60
  }
61
61
 
62
62
  @media (max-width: 960px) {
@@ -138,3 +138,18 @@
138
138
  margin-top: 2.5rem;
139
139
  }
140
140
  }
141
+ @media screen and (min-width: 768px) and (max-width: 991px) {
142
+ .callout {
143
+ min-width: 10rem;
144
+ }
145
+ }
146
+ @media screen and (max-width: 767px) {
147
+ .links {
148
+ padding: 0 1rem;
149
+ grid-template-columns: 1fr 1fr;
150
+ gap: 2rem 10px;
151
+ }
152
+ .callout {
153
+ min-width: 100%;
154
+ }
155
+ }
@@ -1,3 +1,5 @@
1
+ import { ContactLink } from '../ContactPage';
2
+
1
3
  const accountLinks = new Map()
2
4
  .set('Account', null)
3
5
  .set('Sign In', null)
@@ -6,15 +8,18 @@ const accountLinks = new Map()
6
8
  .set('Returns', null);
7
9
 
8
10
  const aboutLinks = new Map()
9
- .set('About Us', null)
11
+ .set('About Us', '/about-us')
10
12
  .set('Our Story', null)
11
13
  .set('Email Signup', null)
12
14
  .set('Give Back', null);
13
15
 
14
16
  const helpLinks = new Map()
15
17
  .set('Help', null)
16
- .set('Live Chat', null)
17
- .set('Contact Us', null)
18
+ .set('Customer Service', '/customer-service')
19
+ .set('Contact Us', {
20
+ path: '/contact-us',
21
+ Component: ContactLink
22
+ })
18
23
  .set('Order Status', null)
19
24
  .set('Returns', null);
20
25
 
@@ -21,6 +21,7 @@ const ForgotPasswordForm = props => {
21
21
  className={classes.root}
22
22
  initialValues={initialValues}
23
23
  onSubmit={onSubmit}
24
+ data-cy="forgotPasswordForm-root"
24
25
  >
25
26
  <Field
26
27
  label={formatMessage({
@@ -32,6 +33,7 @@ const ForgotPasswordForm = props => {
32
33
  autoComplete="email"
33
34
  field="email"
34
35
  validate={isRequired}
36
+ data-cy="email"
35
37
  />
36
38
  </Field>
37
39
  <div className={classes.buttonContainer}>
@@ -52,6 +54,7 @@ const ForgotPasswordForm = props => {
52
54
  disabled={isResettingPassword}
53
55
  type="submit"
54
56
  priority="high"
57
+ data-cy="forgotPasswordForm-submitButton"
55
58
  >
56
59
  <FormattedMessage
57
60
  id={'forgotPasswordForm.submitButtonText'}
@@ -14,7 +14,7 @@ const FormSubmissionSuccessful = props => {
14
14
  {
15
15
  id: 'formSubmissionSuccessful.textMessage',
16
16
  defaultMessage:
17
- 'If there is an account associated with your email address, you will receive an email with a link to change your password.'
17
+ 'If there is an account associated with {email} you will receive an email with a link to change your password.'
18
18
  },
19
19
  { email }
20
20
  );
@@ -27,7 +27,9 @@ const FormSubmissionSuccessful = props => {
27
27
  defaultMessage={'Recover Password'}
28
28
  />
29
29
  </h2>
30
- <p className={classes.text}>{textMessage}</p>
30
+ <p className={classes.text} data-cy="formSubmissionSuccessful-text">
31
+ {textMessage}
32
+ </p>
31
33
  </div>
32
34
  );
33
35
  };
@@ -3,7 +3,6 @@ import gql from 'graphql-tag';
3
3
  export const REQUEST_PASSWORD_RESET_EMAIL_MUTATION = gql`
4
4
  mutation requestPasswordResetEmail($email: String!) {
5
5
  requestPasswordResetEmail(email: $email)
6
- @connection(key: "requestPasswordResetEmail")
7
6
  }
8
7
  `;
9
8
 
@@ -9,9 +9,14 @@ import ErrorMessage from '../ErrorMessage';
9
9
  import defaultClasses from './formError.module.css';
10
10
 
11
11
  const FormError = props => {
12
- const { classes: propClasses, errors, scrollOnError } = props;
13
-
14
- const talonProps = useFormError({ errors });
12
+ const {
13
+ classes: propClasses,
14
+ errors,
15
+ scrollOnError,
16
+ allowErrorMessages
17
+ } = props;
18
+
19
+ const talonProps = useFormError({ errors, allowErrorMessages });
15
20
  const { errorMessage } = talonProps;
16
21
 
17
22
  const errorRef = useRef(null);
@@ -35,7 +40,8 @@ FormError.propTypes = {
35
40
  errorMessage: string
36
41
  }),
37
42
  errors: arrayOf(instanceOf(Error)),
38
- scrollOnError: bool
43
+ scrollOnError: bool,
44
+ allowErrorMessages: bool
39
45
  };
40
46
 
41
47
  FormError.defaultProps = {
@@ -21,7 +21,6 @@ exports[`should render add to cart if in stock 1`] = `
21
21
  <span>
22
22
  <span>
23
23
  <svg
24
- className="icon"
25
24
  fill="none"
26
25
  height={16}
27
26
  stroke="currentColor"
@@ -77,7 +76,6 @@ exports[`should render out of cart if not in stock 1`] = `
77
76
  <span>
78
77
  <span>
79
78
  <svg
80
- className="icon"
81
79
  fill="none"
82
80
  height={16}
83
81
  stroke="currentColor"
@@ -141,7 +139,6 @@ exports[`should render properly 1`] = `
141
139
  <span>
142
140
  <span>
143
141
  <svg
144
- className="icon"
145
142
  fill="none"
146
143
  height={16}
147
144
  stroke="currentColor"
@@ -149,6 +149,7 @@ exports[`renders correctly with valid item data 1`] = `
149
149
  "url_suffix": ".html",
150
150
  }
151
151
  }
152
+ urlSuffix=".html"
152
153
  />
153
154
  </div>
154
155
  </div>
@@ -5,32 +5,35 @@ import { useAddToCartButton } from '@magento/peregrine/lib/talons/Gallery/useAdd
5
5
  import { ShoppingBag, XSquare } from 'react-feather';
6
6
  import Icon from '../Icon';
7
7
  import Button from '../Button';
8
- import { mergeClasses } from '../../classify';
8
+ import { useStyle } from '../../classify';
9
9
  import defaultClasses from './addToCartButton.module.css';
10
10
 
11
- const AddToCartIcon = (
12
- <Icon
13
- classes={{ icon: defaultClasses.icon }}
14
- src={ShoppingBag}
15
- attrs={{ width: 16 }}
16
- />
17
- );
18
- const OutOfStockIcon = (
19
- <Icon
20
- classes={{ icon: defaultClasses.icon }}
21
- src={XSquare}
22
- attrs={{ width: 16 }}
23
- />
24
- );
25
-
26
11
  const AddToCartButton = props => {
12
+ const { item, urlSuffix } = props;
27
13
  const talonProps = useAddToCartButton({
28
- item: props.item
14
+ item,
15
+ urlSuffix
29
16
  });
30
17
  const { handleAddToCart, isDisabled, isInStock } = talonProps;
31
18
  const { formatMessage } = useIntl();
32
19
 
33
- const classes = mergeClasses(defaultClasses, props.classes);
20
+ const classes = useStyle(defaultClasses, props.classes);
21
+
22
+ const AddToCartIcon = (
23
+ <Icon
24
+ classes={{ icon: classes.icon }}
25
+ src={ShoppingBag}
26
+ attrs={{ width: 16 }}
27
+ />
28
+ );
29
+
30
+ const OutOfStockIcon = (
31
+ <Icon
32
+ classes={{ icon: classes.icon }}
33
+ src={XSquare}
34
+ attrs={{ width: 16 }}
35
+ />
36
+ );
34
37
 
35
38
  const buttonInStock = (
36
39
  <Button
@@ -87,13 +90,14 @@ AddToCartButton.propTypes = {
87
90
  root_selected: string
88
91
  }),
89
92
  item: shape({
90
- id: number,
91
- name: string,
93
+ id: number.isRequired,
94
+ uid: string.isRequired,
95
+ name: string.isRequired,
92
96
  small_image: shape({
93
97
  url: string
94
98
  }),
95
99
  stock_status: string.isRequired,
96
- type_id: string.isRequired,
100
+ __typename: string.isRequired,
97
101
  url_key: string.isRequired,
98
102
  url_suffix: string,
99
103
  sku: string.isRequired,
@@ -105,5 +109,6 @@ AddToCartButton.propTypes = {
105
109
  })
106
110
  })
107
111
  })
108
- })
112
+ }),
113
+ urlSuffix: string
109
114
  };