@magento/venia-ui 9.1.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 (290) hide show
  1. package/i18n/en_US.json +22 -7
  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 +10 -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 +14 -7
  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 +14 -0
  122. package/lib/components/Footer/__tests__/footer.spec.js +9 -1
  123. package/lib/components/Footer/footer.js +14 -7
  124. package/lib/components/Footer/sampleData.js +8 -3
  125. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.js +3 -0
  126. package/lib/components/ForgotPassword/FormSubmissionSuccessful/formSubmissionSuccessful.js +4 -2
  127. package/lib/components/ForgotPassword/forgotPassword.gql.js +0 -1
  128. package/lib/components/FormError/formError.js +10 -4
  129. package/lib/components/Gallery/__tests__/__snapshots__/addToCartButton.spec.js.snap +0 -3
  130. package/lib/components/Gallery/__tests__/__snapshots__/item.spec.js.snap +1 -0
  131. package/lib/components/Gallery/addToCartButton.js +24 -20
  132. package/lib/components/Gallery/item.js +15 -4
  133. package/lib/components/Gallery/item.module.css +1 -0
  134. package/lib/components/Head/index.js +2 -1
  135. package/lib/components/Header/__tests__/header.spec.js +1 -1
  136. package/lib/components/Header/accountTrigger.js +1 -0
  137. package/lib/components/Header/cartTrigger.js +4 -1
  138. package/lib/components/Header/header.js +1 -1
  139. package/lib/components/Header/navTrigger.js +1 -0
  140. package/lib/components/Header/searchTrigger.js +1 -0
  141. package/lib/components/LegacyMiniCart/cartOptions.gql.js +4 -3
  142. package/lib/components/LegacyMiniCart/editFormFragment.gql.js +7 -3
  143. package/lib/components/LegacyMiniCart/kebab.js +1 -0
  144. package/lib/components/LegacyMiniCart/productOptions.js +6 -1
  145. package/lib/components/LegacyMiniCart/section.js +15 -5
  146. package/lib/components/Link/link.js +6 -4
  147. package/lib/components/Mask/mask.js +3 -3
  148. package/lib/components/MegaMenu/__tests__/MegaMenuItem.spec.js +1 -0
  149. package/lib/components/MegaMenu/__tests__/__snapshots__/MegaMenu.spec.js.snap +9 -0
  150. package/lib/components/MegaMenu/__tests__/__snapshots__/MegaMenuItem.spec.js.snap +6 -0
  151. package/lib/components/MegaMenu/__tests__/__snapshots__/Submenu.spec.js.snap +2 -0
  152. package/lib/components/MegaMenu/megaMenu.js +6 -2
  153. package/lib/components/MegaMenu/megaMenuItem.js +27 -6
  154. package/lib/components/MegaMenu/megaMenuItem.module.css +0 -5
  155. package/lib/components/MegaMenu/submenu.js +5 -3
  156. package/lib/components/MegaMenu/submenuColumn.js +15 -4
  157. package/lib/components/MiniCart/ProductList/__tests__/__snapshots__/item.spec.js.snap +4 -4
  158. package/lib/components/MiniCart/ProductList/item.js +5 -2
  159. package/lib/components/MiniCart/ProductList/productList.js +5 -1
  160. package/lib/components/MiniCart/__tests__/__snapshots__/miniCart.spec.js.snap +1 -1
  161. package/lib/components/MiniCart/miniCart.gql.js +3 -2
  162. package/lib/components/MiniCart/miniCart.js +9 -4
  163. package/lib/components/MyAccount/ResetPassword/resetPassword.gql.js +1 -1
  164. package/lib/components/Newsletter/__tests__/__snapshots__/newsletter.shimmer.spec.js.snap +40 -0
  165. package/lib/components/Newsletter/__tests__/__snapshots__/newsletter.spec.js.snap +14 -8
  166. package/lib/components/Newsletter/__tests__/newsletter.shimmer.spec.js +10 -0
  167. package/lib/components/Newsletter/__tests__/newsletter.spec.js +25 -2
  168. package/lib/components/Newsletter/newsletter.js +27 -6
  169. package/lib/components/Newsletter/newsletter.shimmer.js +46 -0
  170. package/lib/components/Newsletter/newsletter.shimmer.module.css +11 -0
  171. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/item.spec.js.snap +1 -1
  172. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/shippingMethod.spec.js.snap +3 -0
  173. package/lib/components/OrderHistoryPage/OrderDetails/billingInformation.js +4 -1
  174. package/lib/components/OrderHistoryPage/OrderDetails/item.js +1 -1
  175. package/lib/components/OrderHistoryPage/OrderDetails/items.js +1 -1
  176. package/lib/components/OrderHistoryPage/OrderDetails/paymentMethod.js +1 -1
  177. package/lib/components/OrderHistoryPage/OrderDetails/shippingInformation.js +4 -1
  178. package/lib/components/OrderHistoryPage/OrderDetails/shippingMethod.js +5 -1
  179. package/lib/components/OrderHistoryPage/orderHistoryPage.js +8 -1
  180. package/lib/components/Pagination/pagination.js +1 -1
  181. package/lib/components/Pagination/tile.js +5 -1
  182. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/__tests__/__snapshots__/boolean.spec.js.snap +20 -0
  183. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/__tests__/boolean.spec.js +52 -0
  184. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/boolean.js +74 -0
  185. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/boolean.module.css +9 -0
  186. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Boolean/index.js +1 -0
  187. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/__tests__/__snapshots__/date.spec.js.snap +25 -0
  188. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/__tests__/date.spec.js +52 -0
  189. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/date.js +82 -0
  190. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/date.module.css +9 -0
  191. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Date/index.js +1 -0
  192. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/__tests__/__snapshots__/dateTime.spec.js.snap +29 -0
  193. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/__tests__/dateTime.spec.js +53 -0
  194. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/dateTime.js +85 -0
  195. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/dateTime.module.css +9 -0
  196. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/DateTime/index.js +1 -0
  197. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/__tests__/__snapshots__/multiSelect.spec.js.snap +36 -0
  198. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/__tests__/multiSelect.spec.js +88 -0
  199. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/index.js +1 -0
  200. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/multiselect.js +99 -0
  201. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Multiselect/multiselect.module.css +13 -0
  202. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/__tests__/__snapshots__/price.spec.js.snap +23 -0
  203. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/__tests__/price.spec.js +52 -0
  204. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/index.js +1 -0
  205. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/price.js +74 -0
  206. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Price/price.module.css +9 -0
  207. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/__tests__/__snapshots__/select.spec.js.snap +36 -0
  208. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/__tests__/select.spec.js +88 -0
  209. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/index.js +1 -0
  210. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/select.js +99 -0
  211. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Select/select.module.css +13 -0
  212. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/__tests__/__snapshots__/text.spec.js.snap +33 -0
  213. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/__tests__/text.spec.js +74 -0
  214. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/index.js +1 -0
  215. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/text.js +88 -0
  216. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Text/text.module.css +13 -0
  217. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/__tests__/__snapshots__/textarea.spec.js.snap +33 -0
  218. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/__tests__/textarea.spec.js +74 -0
  219. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/index.js +1 -0
  220. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/textarea.js +88 -0
  221. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/Textarea/textarea.module.css +13 -0
  222. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/__tests__/__snapshots__/attributeType.spec.js.snap +101 -0
  223. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/__tests__/attributeType.spec.js +173 -0
  224. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/attributeType.js +61 -0
  225. package/lib/components/ProductFullDetail/CustomAttributes/AttributeType/index.js +1 -0
  226. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/__snapshots__/customAttributes.spec.js.snap +49 -0
  227. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/customAttributes.spec.js +78 -0
  228. package/lib/components/ProductFullDetail/CustomAttributes/customAttributes.js +66 -0
  229. package/lib/components/ProductFullDetail/CustomAttributes/customAttributes.module.css +14 -0
  230. package/lib/components/ProductFullDetail/CustomAttributes/index.js +1 -0
  231. package/lib/components/ProductFullDetail/__tests__/__snapshots__/productFullDetail.spec.js.snap +39 -0
  232. package/lib/components/ProductFullDetail/__tests__/productFullDetail.spec.js +3 -1
  233. package/lib/components/ProductFullDetail/productFullDetail.js +18 -3
  234. package/lib/components/ProductOptions/__tests__/__snapshots__/option.spec.js.snap +1 -1
  235. package/lib/components/ProductOptions/__tests__/__snapshots__/options.spec.js.snap +2 -2
  236. package/lib/components/ProductOptions/__tests__/__snapshots__/swatch.spec.js.snap +44 -2
  237. package/lib/components/ProductOptions/__tests__/__snapshots__/swatchList.spec.js.snap +22 -1
  238. package/lib/components/ProductOptions/__tests__/swatch.spec.js +0 -2
  239. package/lib/components/ProductOptions/option.js +2 -2
  240. package/lib/components/ProductOptions/swatch.js +7 -5
  241. package/lib/components/ProductOptions/swatch.module.css +11 -0
  242. package/lib/components/ProductOptions/tile.js +1 -0
  243. package/lib/components/ProductSort/__tests__/__snapshots__/sortItem.spec.js.snap +14 -0
  244. package/lib/components/ProductSort/__tests__/sortItem.spec.js +61 -0
  245. package/lib/components/ProductSort/productSort.js +84 -40
  246. package/lib/components/ProductSort/sortItem.js +26 -11
  247. package/lib/components/RadioGroup/radio.module.css +13 -5
  248. package/lib/components/RadioGroup/radioGroup.js +2 -1
  249. package/lib/components/Rating/__tests__/__snapshots__/rating.spec.js.snap +27 -0
  250. package/lib/components/Rating/__tests__/rating.spec.js +13 -0
  251. package/lib/components/Rating/index.js +1 -0
  252. package/lib/components/Rating/rating.js +30 -0
  253. package/lib/components/Rating/rating.module.css +21 -0
  254. package/lib/components/RichContent/richContent.module.css +52 -59
  255. package/lib/components/SearchBar/autocomplete.js +2 -0
  256. package/lib/components/SearchBar/searchBar.js +1 -1
  257. package/lib/components/SearchBar/searchField.js +1 -0
  258. package/lib/components/SearchBar/suggestedCategory.js +1 -1
  259. package/lib/components/SearchBar/suggestedProduct.js +6 -1
  260. package/lib/components/SearchPage/__tests__/__snapshots__/searchPage.spec.js.snap +41 -1
  261. package/lib/components/SearchPage/__tests__/searchPage.spec.js +8 -0
  262. package/lib/components/SearchPage/searchPage.js +12 -6
  263. package/lib/components/Shimmer/shimmer.js +11 -2
  264. package/lib/components/Shimmer/shimmer.module.css +4 -8
  265. package/lib/components/SignIn/__tests__/__snapshots__/signIn.spec.js.snap +126 -0
  266. package/lib/components/SignIn/__tests__/signIn.spec.js +11 -0
  267. package/lib/components/SignIn/signIn.gql.js +8 -4
  268. package/lib/components/SignIn/signIn.js +24 -4
  269. package/lib/components/TextArea/textArea.module.css +9 -0
  270. package/lib/components/TextInput/textInput.module.css +4 -0
  271. package/lib/components/ToastContainer/toast.js +23 -3
  272. package/lib/components/ToastContainer/toast.module.css +3 -0
  273. package/lib/components/Trigger/trigger.js +9 -2
  274. package/lib/components/Wishlist/AddToListButton/addToListButton.ee.js +1 -0
  275. package/lib/components/Wishlist/WishlistDialog/CreateWishlistForm/createWishlistForm.js +2 -0
  276. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.js +1 -0
  277. package/lib/components/Wishlist/WishlistDialog/wishlistDialog.js +1 -0
  278. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistPage.spec.js.snap +5 -5
  279. package/lib/components/WishlistPage/createWishlist.ee.js +2 -0
  280. package/lib/components/WishlistPage/wishlist.js +8 -3
  281. package/lib/components/WishlistPage/wishlistItem.js +17 -4
  282. package/lib/components/WishlistPage/wishlistPage.js +5 -3
  283. package/lib/defaultRoutes.json +6 -0
  284. package/lib/targets/__tests__/venia-ui-targets.spec.js +2 -0
  285. package/lib/util/__tests__/shrinkGETQuery.spec.js +1 -1
  286. package/lib/util/apolloCache.js +2 -2
  287. package/lib/util/formValidators.js +10 -8
  288. package/lib/util/toCamelCase.js +3 -0
  289. package/package.json +17 -14
  290. package/upward.yml +19 -40
@@ -1,5 +1,4 @@
1
1
  import React, { useCallback } from 'react';
2
- import { FormattedMessage } from 'react-intl';
3
2
  import { Check } from 'react-feather';
4
3
  import { bool, func, shape, string } from 'prop-types';
5
4
 
@@ -11,21 +10,37 @@ const SortItem = props => {
11
10
  const { active, onClick, sortItem } = props;
12
11
  const classes = useStyle(defaultClasses, props.classes);
13
12
 
14
- const handleClick = useCallback(() => {
15
- onClick(sortItem);
16
- }, [sortItem, onClick]);
13
+ const handleClick = useCallback(
14
+ e => {
15
+ // use only left click for selection
16
+ if (e.button === 0) {
17
+ onClick(sortItem);
18
+ }
19
+ },
20
+ [sortItem, onClick]
21
+ );
22
+
23
+ const handleKeyDown = useCallback(
24
+ e => {
25
+ if (e.key === 'Enter' || e.key === ' ') {
26
+ e.preventDefault();
27
+ onClick(sortItem);
28
+ }
29
+ },
30
+ [onClick, sortItem]
31
+ );
17
32
 
18
33
  const activeIcon = active ? <Icon size={20} src={Check} /> : null;
19
34
 
20
35
  return (
21
- <button className={classes.root} onClick={handleClick}>
36
+ <button
37
+ className={classes.root}
38
+ data-cy={active ? 'SortItem-activeButton' : 'SortItem-button'}
39
+ onMouseDown={handleClick}
40
+ onKeyDown={handleKeyDown}
41
+ >
22
42
  <span className={classes.content}>
23
- <span className={classes.text}>
24
- <FormattedMessage
25
- id={sortItem.id}
26
- defaultMessage={sortItem.text}
27
- />
28
- </span>
43
+ <span className={classes.text}>{sortItem.text}</span>
29
44
  {activeIcon}
30
45
  </span>
31
46
  </button>
@@ -11,17 +11,21 @@
11
11
  line-height: 1.5rem;
12
12
  }
13
13
 
14
+ .input_base {
15
+ border-radius: 50%;
16
+ height: 1.5rem;
17
+ margin: 0;
18
+ width: 1.5rem;
19
+ z-index: 2;
20
+ }
21
+
14
22
  .input {
23
+ composes: input_base;
15
24
  -webkit-appearance: none;
16
25
  background: none;
17
26
  background-clip: content-box;
18
27
  border: 7px solid transparent;
19
- border-radius: 50%;
20
28
  grid-area: input;
21
- height: 1.5rem;
22
- margin: 0;
23
- width: 1.5rem;
24
- z-index: 2;
25
29
  }
26
30
 
27
31
  .icon {
@@ -54,3 +58,7 @@
54
58
  box-shadow: -3px 3px rgb(var(--venia-brand-color-1-100));
55
59
  outline: none;
56
60
  }
61
+
62
+ .input_shimmer {
63
+ composes: input_base;
64
+ }
@@ -26,6 +26,7 @@ const RadioGroup = props => {
26
26
  children ||
27
27
  items.map(({ value, ...item }) => (
28
28
  <Radio
29
+ data-cy=""
29
30
  key={value}
30
31
  disabled={disabled}
31
32
  {...item}
@@ -40,7 +41,7 @@ const RadioGroup = props => {
40
41
 
41
42
  return (
42
43
  <Fragment>
43
- <div className={classes.root}>
44
+ <div data-cy="RadioGroup-root" className={classes.root}>
44
45
  <InformedRadioGroup {...rest} field={field} id={id}>
45
46
  {options}
46
47
  </InformedRadioGroup>
@@ -0,0 +1,27 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`renders the correct tree 1`] = `
4
+ <div>
5
+ <span>
6
+ 0.1
7
+ </span>
8
+
9
+ <span>
10
+ <svg
11
+ fill="none"
12
+ height={18}
13
+ stroke="currentColor"
14
+ strokeLinecap="round"
15
+ strokeLinejoin="round"
16
+ strokeWidth="2"
17
+ viewBox="0 0 24 24"
18
+ width={18}
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ >
21
+ <polygon
22
+ points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"
23
+ />
24
+ </svg>
25
+ </span>
26
+ </div>
27
+ `;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import TestRenderer from 'react-test-renderer';
3
+ import Rating from '../rating';
4
+
5
+ const props = {
6
+ rating: 3
7
+ };
8
+
9
+ test('renders the correct tree', () => {
10
+ const tree = TestRenderer.create(<Rating {...props} />).toJSON();
11
+
12
+ expect(tree).toMatchSnapshot();
13
+ });
@@ -0,0 +1 @@
1
+ export { default } from './rating';
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { string, number, shape } from 'prop-types';
3
+ import { Star } from 'react-feather';
4
+ import Icon from '../Icon';
5
+ import { useStyle } from '../../classify';
6
+ import defaultClasses from './rating.module.css';
7
+
8
+ const Rating = props => {
9
+ const { rating } = props;
10
+
11
+ const classes = useStyle(defaultClasses, props.classes);
12
+
13
+ return (
14
+ <div className={classes.ratingAverage}>
15
+ <span className={classes.ratingValue}>
16
+ {((rating * 5) / 100).toFixed(1)}
17
+ </span>{' '}
18
+ <Icon size={18} src={Star} classes={{ root: classes.ratingIcon }} />
19
+ </div>
20
+ );
21
+ };
22
+ Rating.propTypes = {
23
+ classes: shape({
24
+ ratingAverage: string,
25
+ ratingValue: string,
26
+ ratingIcon: string
27
+ }),
28
+ rating: number.isRequired
29
+ };
30
+ export default Rating;
@@ -0,0 +1,21 @@
1
+ .ratingAverage {
2
+ position: absolute;
3
+ bottom: 0.75rem;
4
+ right: 0.75rem;
5
+ display: grid;
6
+ grid-template-columns: auto auto;
7
+ padding: 0.5rem;
8
+ align-items: center;
9
+ column-gap: 0.5rem;
10
+ background-color: rgb(var(--venia-global-color-gray-darker));
11
+ color: rgb(var(--venia-global-color-gray-50));
12
+ }
13
+
14
+ .ratingValue {
15
+ font-weight: var(--venia-global-fontWeight-semibold);
16
+ }
17
+
18
+ .ratingIcon {
19
+ composes: root from '../Icon/icon.module.css';
20
+ --stroke: rgb(var(--venia-global-color-gray-50));
21
+ }
@@ -4,138 +4,131 @@
4
4
  .root h4,
5
5
  .root h5,
6
6
  .root h6 {
7
- word-break: break-word;
8
- line-height: 1.25em;
9
- margin-bottom: 0.5em;
10
- margin-top: 1rem;
7
+ margin-bottom: 0.5rem;
8
+ line-height: 1.25;
11
9
  }
12
10
 
13
11
  .root h1 {
14
- font-size: 2rem;
15
- margin-top: 0.9em;
16
- font-weight: 300;
12
+ margin-top: 0.75rem;
13
+ font-size: 1.875rem;
14
+ font-weight: 400;
17
15
  }
16
+
18
17
  .root h2 {
19
- font-size: 1.625rem;
18
+ margin-top: 1rem;
19
+ font-size: 1.5rem;
20
20
  font-weight: 400;
21
21
  }
22
+
22
23
  .root h3 {
23
- font-size: 1.375rem;
24
+ margin-top: 1rem;
25
+ font-size: 1.25rem;
24
26
  font-weight: 400;
25
27
  }
28
+
26
29
  .root h4 {
30
+ margin-top: 1rem;
27
31
  font-size: 1.125rem;
28
32
  font-weight: 600;
29
33
  }
34
+
30
35
  .root h5 {
36
+ margin-top: 1rem;
31
37
  font-size: 1rem;
32
38
  font-weight: 600;
33
39
  }
40
+
34
41
  .root h6 {
42
+ margin-top: 1rem;
35
43
  font-size: 0.875rem;
36
44
  font-weight: 600;
37
45
  }
46
+
38
47
  .root p {
39
48
  margin-bottom: 1rem;
40
- line-height: 1.65em;
49
+ line-height: 1.5;
41
50
  }
51
+
52
+ .root p:last-child {
53
+ margin-bottom: 0;
54
+ }
55
+
42
56
  .root img {
43
57
  max-width: 100%;
44
58
  margin: 1rem 0;
45
59
  }
60
+
46
61
  .root ol,
47
62
  .root ul {
48
- margin-block-start: 1.2em;
49
- margin-block-end: 1.2em;
50
- padding-left: 2em;
63
+ padding-left: 1.5rem;
64
+ margin-top: 1rem;
65
+ margin-bottom: 1rem;
66
+ line-height: 1.5;
51
67
  }
68
+
52
69
  .root p + ol,
53
70
  .root p + ul {
54
- margin-block-start: 0.2em;
71
+ margin-top: 0;
55
72
  }
73
+
56
74
  .root ol {
57
75
  list-style-type: decimal;
58
76
  }
77
+
59
78
  .root ul {
60
79
  list-style-type: disc;
61
80
  }
62
- .root ol li,
63
- .root ul li {
64
- line-height: 1.65em;
65
- padding: 1px 0.5rem;
66
- }
81
+
67
82
  .root a {
68
83
  text-decoration: underline;
69
84
  }
85
+
70
86
  .root blockquote {
71
- font-size: 1.375rem;
72
- line-height: 1.875rem;
73
87
  margin: 1rem 0;
74
- font-weight: 300;
88
+ font-size: 1.25rem;
75
89
  font-style: italic;
76
90
  }
91
+
77
92
  .root table {
78
93
  width: 100%;
79
- margin: 1rem 0;
80
- border-spacing: 0;
81
- border-left: 1px solid rgb(var(--venia-global-color-border));
82
- border-top: 1px solid rgb(var(--venia-global-color-border));
83
- }
84
- .root table td,
85
- .root table th {
86
94
  text-align: left;
87
- padding: 1rem;
88
- font-size: 0.875rem;
89
- line-height: 1.125em;
90
- border-right: 1px solid rgb(var(--venia-global-color-border));
91
- border-bottom: 1px solid rgb(var(--venia-global-color-border));
92
- }
93
- .root table th {
94
- background-color: rgb(var(--venia-global-color-gray));
95
- }
96
- .root :global .cms-content-important {
97
- background: rgb(var(--venia-global-color-gray));
98
- padding: 1.2rem 1rem;
99
- font-size: 1.125rem;
100
- border: 1px solid rgb(var(--venia-global-color-border));
101
95
  }
96
+
102
97
  .root pre {
98
+ padding: 1rem;
99
+ border: 1px solid rgb(var(--venia-global-color-border));
103
100
  background: rgb(var(--venia-global-color-gray));
101
+ }
102
+
103
+ .root :global .cms-content-important {
104
104
  padding: 1rem;
105
105
  border: 1px solid rgb(var(--venia-global-color-border));
106
+ background: rgb(var(--venia-global-color-gray));
107
+ font-size: 1.125rem;
106
108
  }
107
109
 
108
110
  @media only screen and (min-width: 769px) {
109
111
  .root h1 {
110
112
  font-size: 3rem;
111
- margin-top: 0.75em;
112
- line-height: 1.05em;
113
113
  }
114
+
114
115
  .root h2 {
115
116
  font-size: 2.25rem;
116
- line-height: 1.25em;
117
117
  }
118
+
118
119
  .root h3 {
119
- font-size: 1.75rem;
120
- line-height: 1.25em;
120
+ font-size: 1.875rem;
121
121
  }
122
+
122
123
  .root h4 {
123
- font-size: 1.375rem;
124
- line-height: 1.25em;
125
- font-weight: 400;
124
+ font-size: 1.5rem;
126
125
  }
126
+
127
127
  .root h5 {
128
128
  font-size: 1.125rem;
129
- line-height: 1.22em;
130
- margin-bottom: 0.75em;
131
129
  }
130
+
132
131
  .root h6 {
133
132
  font-size: 1rem;
134
- line-height: 1.22em;
135
- margin-bottom: 0.75em;
136
- }
137
- .root p {
138
- margin-bottom: 1rem;
139
- line-height: 1.5em;
140
133
  }
141
134
  }
@@ -21,8 +21,10 @@ const GET_AUTOCOMPLETE_RESULTS = gql`
21
21
  value
22
22
  }
23
23
  }
24
+ # eslint-disable-next-line @graphql-eslint/require-id-when-available
24
25
  items {
25
26
  id
27
+ uid
26
28
  name
27
29
  small_image {
28
30
  url
@@ -26,7 +26,7 @@ const SearchBar = React.forwardRef((props, ref) => {
26
26
  const rootClassName = isOpen ? classes.root_open : classes.root;
27
27
 
28
28
  return (
29
- <div className={rootClassName} ref={ref}>
29
+ <div className={rootClassName} data-cy="SearchBar-root" ref={ref}>
30
30
  <div ref={containerRef} className={classes.container}>
31
31
  <Form
32
32
  autoComplete="off"
@@ -23,6 +23,7 @@ const SearchField = props => {
23
23
  after={resetButton}
24
24
  before={searchIcon}
25
25
  field="search_query"
26
+ data-cy="SearchField-textInput"
26
27
  onFocus={onFocus}
27
28
  onValueChange={onChange}
28
29
  forwardedRef={inputRef}
@@ -24,7 +24,7 @@ const SuggestedCategory = props => {
24
24
  <span className={classes.label}>
25
25
  <FormattedMessage
26
26
  id={'searchBar.label'}
27
- defaultMessage={' in category'}
27
+ defaultMessage={' in {label}'}
28
28
  values={{
29
29
  label
30
30
  }}
@@ -26,7 +26,12 @@ const SuggestedProduct = props => {
26
26
  ]);
27
27
 
28
28
  return (
29
- <Link className={classes.root} to={uri} onClick={handleClick}>
29
+ <Link
30
+ className={classes.root}
31
+ to={uri}
32
+ onClick={handleClick}
33
+ data-cy="SuggestedProduct-root"
34
+ >
30
35
  <Image
31
36
  alt={name}
32
37
  classes={{ image: classes.thumbnail, root: classes.image }}
@@ -495,6 +495,16 @@ exports[`Search Page Component search results heading renders a generic message
495
495
  className="headerButtons"
496
496
  >
497
497
  <ProductSort
498
+ availableSortMethods={
499
+ Array [
500
+ Object {
501
+ "attribute": "position",
502
+ "id": "sortItem.positionAsc",
503
+ "sortDirection": "ASC",
504
+ "text": "Position Asc",
505
+ },
506
+ ]
507
+ }
498
508
  sortProps={
499
509
  Array [
500
510
  Object {
@@ -573,7 +583,7 @@ exports[`Search Page Component search results heading renders a specific message
573
583
  className="searchInfo"
574
584
  >
575
585
  <mock-FormattedMessage
576
- defaultMessage="Showing results:"
586
+ defaultMessage="Showing results for <highlight>{term}</highlight>{category, select, null {} other { in <highlight>{category}</highlight>}}:"
577
587
  id="searchPage.searchTerm"
578
588
  values={
579
589
  Object {
@@ -593,6 +603,16 @@ exports[`Search Page Component search results heading renders a specific message
593
603
  className="headerButtons"
594
604
  >
595
605
  <ProductSort
606
+ availableSortMethods={
607
+ Array [
608
+ Object {
609
+ "attribute": "position",
610
+ "id": "sortItem.positionAsc",
611
+ "sortDirection": "ASC",
612
+ "text": "Position Asc",
613
+ },
614
+ ]
615
+ }
596
616
  sortProps={
597
617
  Array [
598
618
  Object {
@@ -806,6 +826,16 @@ exports[`Search Page Component sort button/container renders when total count >
806
826
  className="headerButtons"
807
827
  >
808
828
  <ProductSort
829
+ availableSortMethods={
830
+ Array [
831
+ Object {
832
+ "attribute": "position",
833
+ "id": "sortItem.positionAsc",
834
+ "sortDirection": "ASC",
835
+ "text": "Position Asc",
836
+ },
837
+ ]
838
+ }
809
839
  sortProps={
810
840
  Array [
811
841
  Object {
@@ -950,6 +980,16 @@ exports[`Search Page Component total count renders results from data 1`] = `
950
980
  className="headerButtons"
951
981
  >
952
982
  <ProductSort
983
+ availableSortMethods={
984
+ Array [
985
+ Object {
986
+ "attribute": "position",
987
+ "id": "sortItem.positionAsc",
988
+ "sortDirection": "ASC",
989
+ "text": "Position Asc",
990
+ },
991
+ ]
992
+ }
953
993
  sortProps={
954
994
  Array [
955
995
  Object {
@@ -43,6 +43,14 @@ jest.mock('../../../components/Head', () => ({
43
43
  }));
44
44
 
45
45
  const talonProps = {
46
+ availableSortMethods: [
47
+ {
48
+ id: 'sortItem.positionAsc',
49
+ text: 'Position Asc',
50
+ attribute: 'position',
51
+ sortDirection: 'ASC'
52
+ }
53
+ ],
46
54
  data: {
47
55
  products: {
48
56
  items: [{}]
@@ -26,6 +26,7 @@ const SearchPage = props => {
26
26
  const classes = useStyle(defaultClasses, props.classes);
27
27
  const talonProps = useSearchPage();
28
28
  const {
29
+ availableSortMethods,
29
30
  data,
30
31
  error,
31
32
  filters,
@@ -71,7 +72,7 @@ const SearchPage = props => {
71
72
 
72
73
  if (data.products.items.length === 0) {
73
74
  return (
74
- <div className={classes.noResult}>
75
+ <div className={classes.noResult} data-cy="SearchPage-noResult">
75
76
  <FormattedMessage
76
77
  id={'searchPage.noResultImportant'}
77
78
  defaultMessage={'No results found!'}
@@ -109,7 +110,7 @@ const SearchPage = props => {
109
110
  const shouldShowFilterShimmer = filters === null;
110
111
 
111
112
  // If there are no products we can hide the sort button.
112
- const shouldShowSortButtons = productsCount;
113
+ const shouldShowSortButtons = productsCount && availableSortMethods;
113
114
  const shouldShowSortShimmer = !productsCount && loading;
114
115
 
115
116
  const maybeFilterButtons = shouldShowFilterButtons ? (
@@ -129,7 +130,12 @@ const SearchPage = props => {
129
130
  ) : null;
130
131
 
131
132
  const maybeSortButton = shouldShowSortButtons ? (
132
- <ProductSort sortProps={sortProps} />
133
+ availableSortMethods && (
134
+ <ProductSort
135
+ sortProps={sortProps}
136
+ availableSortMethods={availableSortMethods}
137
+ />
138
+ )
133
139
  ) : shouldShowSortShimmer ? (
134
140
  <ProductSortShimmer />
135
141
  ) : null;
@@ -152,7 +158,7 @@ const SearchPage = props => {
152
158
  category: searchCategory,
153
159
  term: searchTerm
154
160
  }}
155
- defaultMessage={'Showing results:'}
161
+ defaultMessage="Showing results for <highlight>{term}</highlight>{category, select, null {} other { in <highlight>{category}</highlight>}}:"
156
162
  />
157
163
  ) : (
158
164
  <FormattedMessage
@@ -167,7 +173,7 @@ const SearchPage = props => {
167
173
  {formatMessage(
168
174
  {
169
175
  id: 'searchPage.totalPages',
170
- defaultMessage: `items`
176
+ defaultMessage: '{totalCount} items'
171
177
  },
172
178
  { totalCount: productsCount }
173
179
  )}
@@ -181,7 +187,7 @@ const SearchPage = props => {
181
187
  .join(' - ');
182
188
 
183
189
  return (
184
- <article className={classes.root}>
190
+ <article className={classes.root} data-cy="SearchPage-root">
185
191
  <div className={classes.sidebar}>
186
192
  <Suspense fallback={<FilterSidebarShimmer />}>
187
193
  {maybeSidebar}
@@ -4,6 +4,17 @@ import { node, number, oneOf, oneOfType, shape, string } from 'prop-types';
4
4
  import { useStyle } from '../../classify';
5
5
  import defaultClasses from './shimmer.module.css';
6
6
 
7
+ /**
8
+ * @kind functional component
9
+ *
10
+ * @param {Object} classes Styles to apply to the `root` of the Shimmer. Available classes are `root` and `root_[TYPE]`.
11
+ * @param {string|number} borderRadius Border radius for the shimmer.
12
+ * @param {string|number} height Sets the height of the Shimmer. Numbers are in `rem` units. Strings are used directly (Example: '100px').
13
+ * @param {string|number} width Sets the width of the Shimmer. Numbers are in `rem` units. Strings are used directly (Example: '100px').
14
+ * @param {Object} style CSS styles to apply to the Shimmer.
15
+ * @param {'rectangle'|'button'|'checkbox'|'radio'|'textArea'|'textInput'} type The base element shape to apply to the Shimmer.
16
+ * @param {node} children Children to output within the Shimmer. Useful for setting image placeholders.
17
+ */
7
18
  const Shimmer = props => {
8
19
  const {
9
20
  classes: propClasses,
@@ -44,8 +55,6 @@ const Shimmer = props => {
44
55
  };
45
56
 
46
57
  /**
47
- * @typedef props
48
- *
49
58
  * @property {Object} classes is an object containing the class names for the
50
59
  * Shimmer component.
51
60
  * @property {string} classes.root is the class for the container
@@ -42,28 +42,24 @@
42
42
  }
43
43
 
44
44
  .root_checkbox {
45
- composes: input from '../Checkbox/checkbox.module.css';
45
+ composes: input_shimmer from '../Checkbox/checkbox.module.css';
46
46
  composes: root;
47
- border: none;
48
47
  }
49
48
 
50
49
  .root_radio {
51
- composes: input from '../RadioGroup/radio.module.css';
50
+ composes: input_shimmer from '../RadioGroup/radio.module.css';
52
51
  composes: root;
53
52
  border: none;
54
53
  }
55
54
 
56
55
  .root_textArea {
57
- composes: input from '../TextArea/textArea.module.css';
56
+ composes: input_shimmer from '../TextArea/textArea.module.css';
58
57
  composes: root;
59
- min-height: 6.75rem;
60
- border: none;
61
58
  }
62
59
 
63
60
  .root_textInput {
64
- composes: input from '../TextInput/textInput.module.css';
61
+ composes: input_shimmer from '../TextInput/textInput.module.css';
65
62
  composes: root;
66
- border: none;
67
63
  }
68
64
 
69
65
  @-webkit-keyframes shimmerAnimation {