@faststore/ui 2.0.2-alpha.0 → 2.0.4-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/assets/ShoppingCart.d.ts +2 -2
  3. package/dist/assets/ShoppingCart.js.map +1 -1
  4. package/dist/assets/X.d.ts +2 -2
  5. package/dist/assets/X.js.map +1 -1
  6. package/package.json +30 -37
  7. package/src/assets/ShoppingCart.tsx +50 -0
  8. package/src/assets/X.tsx +38 -0
  9. package/src/base/layout.scss +78 -0
  10. package/src/base/tokens.scss +274 -0
  11. package/src/base/typography.scss +64 -0
  12. package/src/components/atoms/Badge/Badge.stories.mdx +156 -0
  13. package/src/components/atoms/Badge/styles.scss +209 -0
  14. package/src/components/atoms/Button/Button.stories.mdx +110 -0
  15. package/src/components/atoms/Button/styles.scss +316 -0
  16. package/src/components/atoms/Checkbox/styles.scss +155 -0
  17. package/src/{atoms → components/atoms}/Incentive/Incentive.tsx +0 -0
  18. package/src/{atoms → components/atoms}/Incentive/index.tsx +0 -0
  19. package/src/{atoms → components/atoms}/Incentive/stories/Incentive.mdx +0 -0
  20. package/src/{atoms → components/atoms}/Incentive/stories/Incentive.stories.tsx +0 -0
  21. package/src/{atoms → components/atoms}/Incentive/stories/assets/Icons.tsx +0 -0
  22. package/src/{atoms → components/atoms}/Input/Input.tsx +0 -0
  23. package/src/{atoms → components/atoms}/Input/index.ts +0 -0
  24. package/src/{atoms → components/atoms}/Input/stories/Input.mdx +0 -0
  25. package/src/{atoms → components/atoms}/Input/stories/Input.stories.tsx +1 -1
  26. package/src/components/atoms/Label/Label.stories.mdx +65 -0
  27. package/src/{atoms → components/atoms}/Link/Link.tsx +1 -1
  28. package/src/{atoms → components/atoms}/Link/index.tsx +0 -0
  29. package/src/{atoms → components/atoms}/Link/stories/Link.mdx +0 -0
  30. package/src/{atoms → components/atoms}/Link/stories/Link.stories.tsx +0 -0
  31. package/src/{atoms → components/atoms}/List/List.tsx +0 -0
  32. package/src/{atoms → components/atoms}/List/index.ts +0 -0
  33. package/src/{atoms → components/atoms}/List/stories/List.mdx +0 -0
  34. package/src/{atoms → components/atoms}/List/stories/List.stories.tsx +1 -1
  35. package/src/{atoms → components/atoms}/Overlay/Overlay.tsx +0 -0
  36. package/src/{atoms → components/atoms}/Overlay/index.ts +0 -0
  37. package/src/{atoms → components/atoms}/Overlay/stories/Overlay.mdx +0 -0
  38. package/src/{atoms → components/atoms}/Overlay/stories/Overlay.stories.tsx +1 -1
  39. package/src/{atoms → components/atoms}/Popover/Popover.tsx +0 -0
  40. package/src/{atoms → components/atoms}/Popover/index.ts +0 -0
  41. package/src/{atoms → components/atoms}/Popover/stories/Popover.mdx +0 -0
  42. package/src/{atoms → components/atoms}/Popover/stories/Popover.stories.tsx +1 -1
  43. package/src/{atoms → components/atoms}/Price/Price.tsx +0 -0
  44. package/src/{atoms → components/atoms}/Price/index.ts +0 -0
  45. package/src/{atoms → components/atoms}/Price/stories/Price.mdx +0 -0
  46. package/src/{atoms → components/atoms}/Price/stories/Price.stories.tsx +1 -1
  47. package/src/components/atoms/Radio/Radio.stories.mdx +101 -0
  48. package/src/components/atoms/Radio/styles.scss +108 -0
  49. package/src/{atoms → components/atoms}/Select/Select.tsx +0 -0
  50. package/src/{atoms → components/atoms}/Select/index.ts +0 -0
  51. package/src/{atoms → components/atoms}/Select/stories/Select.mdx +0 -0
  52. package/src/{atoms → components/atoms}/Select/stories/Select.stories.tsx +1 -1
  53. package/src/{atoms → components/atoms}/Skeleton/Skeleton.tsx +0 -0
  54. package/src/{atoms → components/atoms}/Skeleton/index.ts +0 -0
  55. package/src/{atoms → components/atoms}/Skeleton/stories/Skeleton.mdx +0 -0
  56. package/src/{atoms → components/atoms}/Skeleton/stories/Skeleton.stories.tsx +0 -0
  57. package/src/{atoms → components/atoms}/Slider/Slider.tsx +0 -0
  58. package/src/{atoms → components/atoms}/Slider/index.ts +0 -0
  59. package/src/{atoms → components/atoms}/Slider/stories/Slider.mdx +0 -0
  60. package/src/{atoms → components/atoms}/Slider/stories/Slider.stories.tsx +1 -1
  61. package/src/{atoms → components/atoms}/Spinner/Spinner.tsx +0 -0
  62. package/src/{atoms → components/atoms}/Spinner/index.tsx +0 -0
  63. package/src/{atoms → components/atoms}/Spinner/stories/Spinner.mdx +0 -0
  64. package/src/{atoms → components/atoms}/Spinner/stories/Spinner.stories.tsx +0 -0
  65. package/src/{atoms → components/atoms}/TextArea/TextArea.tsx +0 -0
  66. package/src/{atoms → components/atoms}/TextArea/index.ts +0 -0
  67. package/src/{atoms → components/atoms}/TextArea/stories/TextArea.mdx +0 -0
  68. package/src/{atoms → components/atoms}/TextArea/stories/TextArea.stories.tsx +1 -1
  69. package/src/{molecules → components/molecules}/Accordion/Accordion.tsx +0 -0
  70. package/src/{molecules → components/molecules}/Accordion/AccordionButton.tsx +4 -4
  71. package/src/{molecules → components/molecules}/Accordion/AccordionItem.tsx +1 -1
  72. package/src/{molecules → components/molecules}/Accordion/AccordionPanel.tsx +0 -0
  73. package/src/{molecules → components/molecules}/Accordion/index.ts +0 -0
  74. package/src/{molecules → components/molecules}/Accordion/stories/Accordion.mdx +0 -0
  75. package/src/{molecules → components/molecules}/Accordion/stories/Accordion.stories.tsx +1 -1
  76. package/src/{molecules → components/molecules}/AggregateRating/AggregateRating.tsx +0 -0
  77. package/src/{molecules → components/molecules}/AggregateRating/index.ts +0 -0
  78. package/src/{molecules → components/molecules}/AggregateRating/stories/AggregateRating.mdx +0 -0
  79. package/src/{molecules → components/molecules}/AggregateRating/stories/AggregateRating.stories.tsx +1 -1
  80. package/src/{molecules → components/molecules}/Alert/Alert.tsx +0 -0
  81. package/src/{molecules → components/molecules}/Alert/index.ts +0 -0
  82. package/src/{molecules → components/molecules}/Alert/stories/Alert.mdx +0 -0
  83. package/src/{molecules → components/molecules}/Alert/stories/Alert.stories.tsx +3 -3
  84. package/src/{molecules → components/molecules}/Banner/Banner.tsx +0 -0
  85. package/src/{molecules → components/molecules}/Banner/BannerContent.tsx +0 -0
  86. package/src/{molecules → components/molecules}/Banner/BannerImage.tsx +0 -0
  87. package/src/{molecules → components/molecules}/Banner/BannerLink.tsx +0 -0
  88. package/src/{molecules → components/molecules}/Banner/index.ts +0 -0
  89. package/src/{molecules → components/molecules}/Banner/stories/Banner.mdx +0 -0
  90. package/src/{molecules → components/molecules}/Banner/stories/Banner.stories.tsx +1 -1
  91. package/src/{molecules → components/molecules}/Breadcrumb/Breadcrumb.tsx +0 -0
  92. package/src/{molecules → components/molecules}/Breadcrumb/index.ts +0 -0
  93. package/src/{molecules → components/molecules}/Breadcrumb/stories/Breadcrumb.mdx +0 -0
  94. package/src/{molecules → components/molecules}/Breadcrumb/stories/Breadcrumb.stories.tsx +1 -1
  95. package/src/{molecules → components/molecules}/Bullets/Bullets.tsx +1 -1
  96. package/src/{molecules → components/molecules}/Bullets/index.ts +0 -0
  97. package/src/{molecules → components/molecules}/Bullets/stories/Bullets.mdx +0 -0
  98. package/src/{molecules → components/molecules}/Bullets/stories/Bullets.stories.tsx +1 -1
  99. package/src/{molecules → components/molecules}/Card/Card.tsx +0 -0
  100. package/src/{molecules → components/molecules}/Card/CardActions.tsx +0 -0
  101. package/src/{molecules → components/molecules}/Card/CardContent.tsx +0 -0
  102. package/src/{molecules → components/molecules}/Card/CardImage.tsx +0 -0
  103. package/src/{molecules → components/molecules}/Card/index.tsx +0 -0
  104. package/src/{molecules → components/molecules}/Card/stories/Card.mdx +0 -0
  105. package/src/{molecules → components/molecules}/Card/stories/Card.stories.tsx +5 -5
  106. package/src/{molecules → components/molecules}/Carousel/Arrows.tsx +0 -0
  107. package/src/{molecules → components/molecules}/Carousel/Carousel.tsx +2 -2
  108. package/src/{molecules → components/molecules}/Carousel/CarouselItem.tsx +1 -1
  109. package/src/{molecules → components/molecules}/Carousel/hooks/useSlideVisibility.ts +0 -0
  110. package/src/{molecules → components/molecules}/Carousel/index.ts +0 -0
  111. package/src/{molecules → components/molecules}/Carousel/stories/Carousel.mdx +0 -0
  112. package/src/{molecules → components/molecules}/Carousel/stories/Carousel.stories.tsx +1 -1
  113. package/src/{molecules → components/molecules}/CartItem/CartItem.tsx +0 -0
  114. package/src/{molecules → components/molecules}/CartItem/CartItemActions.tsx +0 -0
  115. package/src/{molecules → components/molecules}/CartItem/CartItemContent.tsx +0 -0
  116. package/src/{molecules → components/molecules}/CartItem/CartItemImage.tsx +0 -0
  117. package/src/{molecules → components/molecules}/CartItem/CartItemPrices.tsx +0 -0
  118. package/src/{molecules → components/molecules}/CartItem/CartItemSummary.tsx +0 -0
  119. package/src/{molecules → components/molecules}/CartItem/CartItemTitle.tsx +0 -0
  120. package/src/{molecules → components/molecules}/CartItem/index.tsx +0 -0
  121. package/src/{molecules → components/molecules}/CartItem/stories/CartItem.mdx +0 -0
  122. package/src/{molecules → components/molecules}/CartItem/stories/CartItem.stories.tsx +1 -1
  123. package/src/components/molecules/CheckboxField/CheckboxField.stories.mdx +38 -0
  124. package/src/components/molecules/CheckboxField/styles.scss +12 -0
  125. package/src/{molecules → components/molecules}/Dropdown/Dropdown.tsx +0 -0
  126. package/src/{molecules → components/molecules}/Dropdown/DropdownButton.tsx +0 -0
  127. package/src/{molecules → components/molecules}/Dropdown/DropdownItem.tsx +0 -0
  128. package/src/{molecules → components/molecules}/Dropdown/DropdownMenu.tsx +0 -0
  129. package/src/{molecules → components/molecules}/Dropdown/contexts/DropdownContext.ts +0 -0
  130. package/src/{molecules → components/molecules}/Dropdown/hooks/useDropdown.ts +0 -0
  131. package/src/{molecules → components/molecules}/Dropdown/hooks/useDropdownPosition.ts +0 -0
  132. package/src/{molecules → components/molecules}/Dropdown/index.ts +0 -0
  133. package/src/{molecules → components/molecules}/Dropdown/stories/Dropdown.mdx +0 -0
  134. package/src/{molecules → components/molecules}/Dropdown/stories/Dropdown.stories.tsx +1 -1
  135. package/src/{molecules → components/molecules}/Dropdown/stories/assets/Caret.tsx +0 -0
  136. package/src/{molecules → components/molecules}/Form/Form.tsx +0 -0
  137. package/src/{molecules → components/molecules}/Form/index.ts +0 -0
  138. package/src/{molecules → components/molecules}/Form/stories/Form.mdx +0 -0
  139. package/src/{molecules → components/molecules}/Form/stories/Form.stories.tsx +2 -1
  140. package/src/{molecules → components/molecules}/Gift/Gift.tsx +2 -3
  141. package/src/{molecules → components/molecules}/Gift/GiftContent.tsx +0 -0
  142. package/src/{molecules → components/molecules}/Gift/GiftImage.tsx +0 -0
  143. package/src/{molecules → components/molecules}/Gift/index.tsx +0 -0
  144. package/src/{molecules → components/molecules}/Gift/stories/Gift.mdx +0 -0
  145. package/src/{molecules → components/molecules}/Gift/stories/Gift.stories.tsx +1 -1
  146. package/src/components/molecules/IconButton/IconButton.stories.mdx +47 -0
  147. package/src/{molecules → components/molecules}/LoadingButton/LoadingButton.tsx +3 -8
  148. package/src/{molecules → components/molecules}/LoadingButton/index.tsx +0 -0
  149. package/src/{molecules → components/molecules}/LoadingButton/stories/LoadingButton.mdx +0 -0
  150. package/src/{molecules → components/molecules}/LoadingButton/stories/LoadingButton.stories.tsx +1 -1
  151. package/src/{molecules → components/molecules}/Modal/Modal.tsx +0 -0
  152. package/src/{molecules → components/molecules}/Modal/ModalContent.tsx +0 -0
  153. package/src/{molecules → components/molecules}/Modal/index.tsx +0 -0
  154. package/src/{molecules → components/molecules}/Modal/stories/Modal.mdx +0 -0
  155. package/src/{molecules → components/molecules}/Modal/stories/Modal.stories.tsx +1 -1
  156. package/src/{molecules → components/molecules}/Modal/useTrapFocus.ts +0 -0
  157. package/src/{molecules → components/molecules}/OrderSummary/OrderSummary.tsx +0 -0
  158. package/src/{molecules → components/molecules}/OrderSummary/index.tsx +0 -0
  159. package/src/{molecules → components/molecules}/OrderSummary/stories/OrderSummary.mdx +0 -0
  160. package/src/{molecules → components/molecules}/OrderSummary/stories/OrderSummary.stories.tsx +0 -0
  161. package/src/{molecules → components/molecules}/PaymentMethods/PaymentMethods.tsx +0 -0
  162. package/src/{molecules → components/molecules}/PaymentMethods/index.tsx +0 -0
  163. package/src/{molecules → components/molecules}/PaymentMethods/stories/PaymentMethods.mdx +0 -0
  164. package/src/{molecules → components/molecules}/PaymentMethods/stories/PaymentMethods.stories.tsx +0 -0
  165. package/src/{molecules → components/molecules}/PaymentMethods/stories/assets/Icons.tsx +0 -0
  166. package/src/{molecules → components/molecules}/PriceRange/PriceRange.tsx +0 -0
  167. package/src/{molecules → components/molecules}/PriceRange/index.ts +0 -0
  168. package/src/{molecules → components/molecules}/PriceRange/stories/PriceRange.mdx +0 -0
  169. package/src/{molecules → components/molecules}/PriceRange/stories/PriceRange.stories.tsx +1 -1
  170. package/src/{molecules → components/molecules}/ProductCard/ProductCard.tsx +0 -0
  171. package/src/{molecules → components/molecules}/ProductCard/ProductCardActions.tsx +0 -0
  172. package/src/{molecules → components/molecules}/ProductCard/ProductCardContent.tsx +0 -0
  173. package/src/{molecules → components/molecules}/ProductCard/ProductCardImage.tsx +0 -0
  174. package/src/{molecules → components/molecules}/ProductCard/index.tsx +0 -0
  175. package/src/{molecules → components/molecules}/ProductCard/stories/ProductCard.mdx +0 -0
  176. package/src/{molecules → components/molecules}/ProductCard/stories/ProductCard.stories.tsx +1 -2
  177. package/src/{molecules → components/molecules}/ProductTitle/ProductTitle.tsx +0 -0
  178. package/src/{molecules → components/molecules}/ProductTitle/index.tsx +0 -0
  179. package/src/{molecules → components/molecules}/ProductTitle/stories/ProductTitle.mdx +0 -0
  180. package/src/{molecules → components/molecules}/ProductTitle/stories/ProductTitle.stories.tsx +3 -3
  181. package/src/{molecules → components/molecules}/QuantitySelector/QuantitySelector.tsx +2 -2
  182. package/src/{molecules → components/molecules}/QuantitySelector/index.ts +0 -0
  183. package/src/{molecules → components/molecules}/QuantitySelector/stories/QuantitySelector.mdx +0 -0
  184. package/src/{molecules → components/molecules}/QuantitySelector/stories/QuantitySelector.stories.tsx +0 -0
  185. package/src/{molecules → components/molecules}/QuantitySelector/stories/assets/Icons.tsx +0 -0
  186. package/src/components/molecules/RadioField/RadioField.stories.mdx +38 -0
  187. package/src/components/molecules/RadioField/styles.scss +12 -0
  188. package/src/{molecules → components/molecules}/RadioGroup/RadioGroup.tsx +0 -0
  189. package/src/{molecules → components/molecules}/RadioGroup/RadioOption.tsx +1 -1
  190. package/src/{molecules → components/molecules}/RadioGroup/index.tsx +0 -0
  191. package/src/{molecules → components/molecules}/RadioGroup/stories/RadioGroup.mdx +0 -0
  192. package/src/{molecules → components/molecules}/RadioGroup/stories/RadioGroup.stories.tsx +0 -0
  193. package/src/{molecules → components/molecules}/RadioGroup/useRadioGroup.ts +0 -0
  194. package/src/{molecules → components/molecules}/SearchInput/SearchInput.tsx +2 -3
  195. package/src/{molecules → components/molecules}/SearchInput/index.ts +0 -0
  196. package/src/{molecules → components/molecules}/SearchInput/stories/SearchInput.mdx +0 -0
  197. package/src/{molecules → components/molecules}/SearchInput/stories/SearchInput.stories.tsx +1 -1
  198. package/src/{molecules → components/molecules}/SearchInput/stories/assets/CustomIcon.tsx +0 -0
  199. package/src/{molecules → components/molecules}/SkuSelector/SkuSelector.tsx +3 -2
  200. package/src/{molecules → components/molecules}/SkuSelector/index.tsx +0 -0
  201. package/src/{molecules → components/molecules}/SkuSelector/stories/SkuSelector.mdx +0 -0
  202. package/src/{molecules → components/molecules}/SkuSelector/stories/SkuSelector.stories.tsx +1 -1
  203. package/src/{molecules → components/molecules}/Table/Table.tsx +0 -0
  204. package/src/{molecules → components/molecules}/Table/TableBody.tsx +0 -0
  205. package/src/{molecules → components/molecules}/Table/TableCell.tsx +0 -0
  206. package/src/{molecules → components/molecules}/Table/TableFooter.tsx +0 -0
  207. package/src/{molecules → components/molecules}/Table/TableHead.tsx +0 -0
  208. package/src/{molecules → components/molecules}/Table/TableRow.tsx +0 -0
  209. package/src/{molecules → components/molecules}/Table/index.ts +0 -0
  210. package/src/{molecules → components/molecules}/Table/stories/Table.mdx +0 -0
  211. package/src/{molecules → components/molecules}/Table/stories/Table.stories.tsx +0 -0
  212. package/src/components/molecules/Tag/Tag.stories.mdx +31 -0
  213. package/src/components/molecules/Tag/styles.scss +99 -0
  214. package/src/{organisms → components/organisms}/Hero/Hero.tsx +0 -0
  215. package/src/{organisms → components/organisms}/Hero/HeroHeading.tsx +0 -0
  216. package/src/{organisms → components/organisms}/Hero/HeroImage.tsx +0 -0
  217. package/src/{organisms → components/organisms}/Hero/index.tsx +0 -0
  218. package/src/{organisms → components/organisms}/Hero/stories/Hero.mdx +0 -0
  219. package/src/{organisms → components/organisms}/Hero/stories/Hero.stories.tsx +1 -1
  220. package/src/{organisms → components/organisms}/OutOfStock/OutOfStock.tsx +0 -0
  221. package/src/{organisms → components/organisms}/OutOfStock/OutOfStockMessage.tsx +0 -0
  222. package/src/{organisms → components/organisms}/OutOfStock/OutOfStockTitle.tsx +0 -0
  223. package/src/{organisms → components/organisms}/OutOfStock/index.tsx +0 -0
  224. package/src/{organisms → components/organisms}/OutOfStock/stories/OutOfStock.mdx +0 -0
  225. package/src/{organisms → components/organisms}/OutOfStock/stories/OutOfStock.stories.tsx +1 -1
  226. package/src/{organisms → components/organisms}/Tiles/Tile.tsx +0 -0
  227. package/src/{organisms → components/organisms}/Tiles/Tiles.tsx +0 -0
  228. package/src/{organisms → components/organisms}/Tiles/index.ts +0 -0
  229. package/src/{organisms → components/organisms}/Tiles/stories/Tiles.mdx +0 -0
  230. package/src/{organisms → components/organisms}/Tiles/stories/Tiles.stories.tsx +0 -0
  231. package/src/index.ts +97 -99
  232. package/src/styles/base.scss +3 -0
  233. package/src/styles/components.scss +10 -0
  234. package/src/styles/global.scss +4 -0
  235. package/src/styles/reset.scss +54 -0
  236. package/src/styles/utilities.scss +75 -0
  237. package/src/typings/utils.d.ts +2 -2
  238. package/dist/assets/index.d.ts +0 -2
  239. package/dist/assets/index.js +0 -3
  240. package/dist/assets/index.js.map +0 -1
  241. package/src/atoms/Badge/Badge.test.tsx +0 -23
  242. package/src/atoms/Badge/Badge.tsx +0 -23
  243. package/src/atoms/Badge/index.ts +0 -2
  244. package/src/atoms/Badge/stories/Badge.mdx +0 -18
  245. package/src/atoms/Badge/stories/Badge.stories.tsx +0 -37
  246. package/src/atoms/Button/Button.test.tsx +0 -12
  247. package/src/atoms/Button/Button.tsx +0 -23
  248. package/src/atoms/Button/index.ts +0 -2
  249. package/src/atoms/Button/stories/Button.mdx +0 -18
  250. package/src/atoms/Button/stories/Button.stories.tsx +0 -36
  251. package/src/atoms/Checkbox/Checkbox.test.tsx +0 -65
  252. package/src/atoms/Checkbox/Checkbox.tsx +0 -27
  253. package/src/atoms/Checkbox/index.ts +0 -2
  254. package/src/atoms/Checkbox/stories/Checkbox.mdx +0 -18
  255. package/src/atoms/Checkbox/stories/Checkbox.stories.tsx +0 -65
  256. package/src/atoms/Icon/Icon.test.tsx +0 -43
  257. package/src/atoms/Icon/Icon.tsx +0 -26
  258. package/src/atoms/Icon/index.ts +0 -2
  259. package/src/atoms/Icon/stories/Icon.mdx +0 -18
  260. package/src/atoms/Icon/stories/Icon.stories.tsx +0 -40
  261. package/src/atoms/Icon/stories/assets/ShoppingCart.tsx +0 -23
  262. package/src/atoms/Incentive/Incentive.test.tsx +0 -36
  263. package/src/atoms/Input/Input.test.tsx +0 -73
  264. package/src/atoms/Label/Label.test.tsx +0 -71
  265. package/src/atoms/Label/Label.tsx +0 -22
  266. package/src/atoms/Label/index.ts +0 -2
  267. package/src/atoms/Label/stories/Label.mdx +0 -18
  268. package/src/atoms/Label/stories/Label.stories.tsx +0 -30
  269. package/src/atoms/Link/Link.test.tsx +0 -53
  270. package/src/atoms/List/List.test.tsx +0 -195
  271. package/src/atoms/Overlay/Overlay.test.tsx +0 -23
  272. package/src/atoms/Popover/Popover.test.tsx +0 -39
  273. package/src/atoms/Price/Price.test.tsx +0 -63
  274. package/src/atoms/Radio/Radio.test.tsx +0 -59
  275. package/src/atoms/Radio/Radio.tsx +0 -24
  276. package/src/atoms/Radio/index.ts +0 -2
  277. package/src/atoms/Radio/stories/Radio.mdx +0 -18
  278. package/src/atoms/Radio/stories/Radio.stories.tsx +0 -41
  279. package/src/atoms/Select/Select.test.tsx +0 -71
  280. package/src/atoms/Skeleton/Skeleton.test.tsx +0 -13
  281. package/src/atoms/Slider/Slider.test.tsx +0 -32
  282. package/src/atoms/Spinner/Spinner.test.tsx +0 -12
  283. package/src/atoms/TextArea/TextArea.test.tsx +0 -77
  284. package/src/hooks/useSlider/useSlider.test.ts +0 -176
  285. package/src/molecules/Accordion/Accordion.test.tsx +0 -226
  286. package/src/molecules/AggregateRating/AggregateRating.test.tsx +0 -87
  287. package/src/molecules/Alert/Alert.test.tsx +0 -23
  288. package/src/molecules/Banner/Banner.test.tsx +0 -67
  289. package/src/molecules/Breadcrumb/Breadcrumb.test.tsx +0 -124
  290. package/src/molecules/Bullets/Bullets.test.tsx +0 -128
  291. package/src/molecules/Card/Card.test.tsx +0 -68
  292. package/src/molecules/Carousel/Carousel.test.tsx +0 -587
  293. package/src/molecules/Carousel/hooks/hooks.test.ts +0 -109
  294. package/src/molecules/CartItem/CartItem.test.tsx +0 -79
  295. package/src/molecules/Dropdown/Dropdown.test.tsx +0 -275
  296. package/src/molecules/Form/Form.test.tsx +0 -61
  297. package/src/molecules/Gift/Gift.test.tsx +0 -53
  298. package/src/molecules/IconButton/IconButton.test.tsx +0 -31
  299. package/src/molecules/IconButton/IconButton.tsx +0 -35
  300. package/src/molecules/IconButton/index.tsx +0 -2
  301. package/src/molecules/IconButton/stories/IconButton.mdx +0 -27
  302. package/src/molecules/IconButton/stories/IconButton.stories.tsx +0 -35
  303. package/src/molecules/LoadingButton/LoadingButton.test.tsx +0 -14
  304. package/src/molecules/Modal/Modal.test.tsx +0 -241
  305. package/src/molecules/OrderSummary/OrderSummary.test.tsx +0 -103
  306. package/src/molecules/PaymentMethods/PaymentMethods.test.tsx +0 -37
  307. package/src/molecules/PriceRange/PriceRange.test.tsx +0 -70
  308. package/src/molecules/ProductCard/ProductCard.test.tsx +0 -75
  309. package/src/molecules/QuantitySelector/QuantitySelector.test.tsx +0 -93
  310. package/src/molecules/RadioGroup/RadioGroup.test.tsx +0 -107
  311. package/src/molecules/SearchInput/SearchInput.test.tsx +0 -34
  312. package/src/molecules/SkuSelector/SkuSelector.test.tsx +0 -42
  313. package/src/molecules/Table/Table.test.tsx +0 -233
  314. package/src/organisms/Hero/Hero.test.tsx +0 -60
  315. package/src/organisms/OutOfStock/OutOfStock.test.tsx +0 -122
  316. package/src/setupTests.ts +0 -7
  317. package/src/utils/toHaveNoIncomplete.ts +0 -76
@@ -1,587 +0,0 @@
1
- import React from 'react'
2
- import { render, fireEvent, act, createEvent } from '@testing-library/react'
3
- import { axe } from 'jest-axe'
4
-
5
- import Carousel from './Carousel'
6
-
7
- const wait = (amount = 0) =>
8
- new Promise((resolve) => setTimeout(resolve, amount))
9
-
10
- const SLIDING_TRANSITION_DURATION = 100
11
-
12
- describe('Carousel component', () => {
13
- it('should have `data-fs-carousel` attribute in the section tag', () => {
14
- const { getByTestId } = render(
15
- <Carousel>
16
- <div>Slide 1</div>
17
- <div>Slide 2</div>
18
- <div>Slide 3</div>
19
- </Carousel>
20
- )
21
-
22
- const carouselSection = getByTestId('store-carousel')
23
-
24
- expect(carouselSection).toHaveAttribute('data-fs-carousel')
25
- })
26
-
27
- it('should have `data-fs-carousel-track-container` and `data-fs-carousel-track` attributes', () => {
28
- const { getByTestId } = render(
29
- <Carousel>
30
- <div>Slide 1</div>
31
- <div>Slide 2</div>
32
- <div>Slide 3</div>
33
- <div>Slide 4</div>
34
- <div>Slide 5</div>
35
- </Carousel>
36
- )
37
-
38
- const carouselSection = getByTestId('store-carousel')
39
-
40
- const trackContainer = carouselSection.querySelectorAll(
41
- '[data-fs-carousel-track-container]'
42
- )
43
-
44
- const track = carouselSection.querySelectorAll('[data-fs-carousel-track]')
45
-
46
- expect(trackContainer).toHaveLength(1)
47
- expect(trackContainer[0]).toBeInTheDocument()
48
-
49
- expect(track).toHaveLength(1)
50
- expect(track[0]).toBeInTheDocument()
51
- })
52
-
53
- it('should have `data-fs-carousel-controls` and `data-fs-carousel-bullets` attributes', () => {
54
- const { getByTestId } = render(
55
- <Carousel>
56
- <div>Slide 1</div>
57
- <div>Slide 2</div>
58
- <div>Slide 3</div>
59
- </Carousel>
60
- )
61
-
62
- const carouselSection = getByTestId('store-carousel')
63
-
64
- const controls = carouselSection.querySelectorAll(
65
- '[data-fs-carousel-controls]'
66
- )
67
-
68
- const bulletsContainer = carouselSection.querySelectorAll(
69
- '[data-fs-carousel-bullets]'
70
- )
71
-
72
- expect(controls).toHaveLength(1)
73
- expect(controls[0]).toBeInTheDocument()
74
-
75
- expect(bulletsContainer).toHaveLength(1)
76
- expect(bulletsContainer[0]).toBeInTheDocument()
77
- })
78
-
79
- it('should render 5 slides with `data-fs-carousel-item` attributes', () => {
80
- const { getByTestId } = render(
81
- <Carousel infiniteMode={false}>
82
- <div>Slide 1</div>
83
- <div>Slide 2</div>
84
- <div>Slide 3</div>
85
- <div>Slide 4</div>
86
- <div>Slide 5</div>
87
- </Carousel>
88
- )
89
-
90
- const carouselSection = getByTestId('store-carousel')
91
- const items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
92
-
93
- expect(items).toHaveLength(5)
94
- })
95
-
96
- it('should add `data-fs-carousel-item-visible` attribute to currently visible carousel items', () => {
97
- const { getByTestId } = render(
98
- <Carousel>
99
- <div>Slide 1</div>
100
- <div>Slide 2</div>
101
- <div>Slide 3</div>
102
- <div>Slide 4</div>
103
- <div>Slide 5</div>
104
- </Carousel>
105
- )
106
-
107
- const carouselSection = getByTestId('store-carousel')
108
-
109
- const items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
110
-
111
- expect(items).toHaveLength(7)
112
-
113
- // Only the first item should have `data-fs-carousel-item-visible` attributes
114
- expect(items[0]).not.toHaveAttribute('data-fs-carousel-item-visible')
115
- expect(items[1]).toHaveAttribute('data-fs-carousel-item-visible')
116
- expect(items[2]).not.toHaveAttribute('data-fs-carousel-item-visible')
117
- expect(items[3]).not.toHaveAttribute('data-fs-carousel-item-visible')
118
- expect(items[4]).not.toHaveAttribute('data-fs-carousel-item-visible')
119
- expect(items[5]).not.toHaveAttribute('data-fs-carousel-item-visible')
120
- expect(items[6]).not.toHaveAttribute('data-fs-carousel-item-visible')
121
- })
122
-
123
- it('should allow users to navigate through pages using the `Arrows` controls', async () => {
124
- const { getByTestId, getByLabelText } = render(
125
- <Carousel
126
- transition={{
127
- property: 'transform',
128
- duration: SLIDING_TRANSITION_DURATION,
129
- }}
130
- infiniteMode={false}
131
- >
132
- <div>Slide 1</div>
133
- <div>Slide 2</div>
134
- <div>Slide 3</div>
135
- <div>Slide 4</div>
136
- <div>Slide 5</div>
137
- </Carousel>
138
- )
139
-
140
- const carouselSection = getByTestId('store-carousel')
141
- const goToNextPageButton = getByLabelText('next')
142
- const goToPreviousPageButton = getByLabelText('previous')
143
- const carouselTrack = carouselSection.querySelector(
144
- '[data-fs-carousel-track]'
145
- )
146
-
147
- expect(goToNextPageButton).toBeInTheDocument()
148
- expect(goToPreviousPageButton).toBeInTheDocument()
149
-
150
- // Go from page 0 to 1
151
- act(() => {
152
- fireEvent.click(goToNextPageButton)
153
- })
154
-
155
- let items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
156
-
157
- // Only the second item should be visible
158
- expect(items[0]).not.toHaveAttribute('data-fs-carousel-item-visible')
159
- expect(items[1]).toHaveAttribute('data-fs-carousel-item-visible')
160
- expect(items[2]).not.toHaveAttribute('data-fs-carousel-item-visible')
161
- expect(items[3]).not.toHaveAttribute('data-fs-carousel-item-visible')
162
- expect(items[4]).not.toHaveAttribute('data-fs-carousel-item-visible')
163
-
164
- // Go from page 1 back to 0
165
- await act(async () => {
166
- /**
167
- * These two lines simulate what happens after a user navigates:
168
- *
169
- * 1. Wait for the animation triggered by the `goToNextPageButton` click
170
- * to finish.
171
- * 2. `onTransitionEnd` event is triggered.
172
- * 3. User is then able to click the `goToPreviousPageButton` button.
173
- *
174
- * react-testing-library (or dom-testing-library) doesn't trigger the
175
- * `onTransitionEnd` event, so we need to do it manually.
176
- */
177
- await wait(SLIDING_TRANSITION_DURATION)
178
- carouselTrack && fireEvent.transitionEnd(carouselTrack)
179
-
180
- fireEvent.click(goToPreviousPageButton)
181
- })
182
-
183
- items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
184
-
185
- // Only the first item should be visible
186
- expect(items[0]).toHaveAttribute('data-fs-carousel-item-visible')
187
- expect(items[1]).not.toHaveAttribute('data-fs-carousel-item-visible')
188
- expect(items[2]).not.toHaveAttribute('data-fs-carousel-item-visible')
189
- expect(items[3]).not.toHaveAttribute('data-fs-carousel-item-visible')
190
- expect(items[4]).not.toHaveAttribute('data-fs-carousel-item-visible')
191
- })
192
-
193
- it('should allow users to navigate through pages by clicking on a pagination bullet', async () => {
194
- const { getByTestId, queryAllByTestId, getByLabelText } = render(
195
- <Carousel
196
- transition={{
197
- property: 'transform',
198
- duration: SLIDING_TRANSITION_DURATION,
199
- }}
200
- infiniteMode={false}
201
- >
202
- <div>Slide 1</div>
203
- <div>Slide 2</div>
204
- <div>Slide 3</div>
205
- <div>Slide 4</div>
206
- <div>Slide 5</div>
207
- </Carousel>
208
- )
209
-
210
- const carouselSection = getByTestId('store-carousel')
211
- const bullets = queryAllByTestId('store-bullets-bullet')
212
- const carouselTrack = carouselSection.querySelector(
213
- '[data-fs-carousel-track]'
214
- )
215
-
216
- expect(bullets).toHaveLength(5)
217
-
218
- const secondPageBullet = getByLabelText('Go to page 2')
219
-
220
- act(() => {
221
- fireEvent.click(secondPageBullet)
222
- })
223
-
224
- let items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
225
-
226
- // Only the second item should be visible
227
- expect(items[0]).not.toHaveAttribute('data-fs-carousel-item-visible')
228
- expect(items[1]).toHaveAttribute('data-fs-carousel-item-visible')
229
- expect(items[2]).not.toHaveAttribute('data-fs-carousel-item-visible')
230
- expect(items[3]).not.toHaveAttribute('data-fs-carousel-item-visible')
231
- expect(items[4]).not.toHaveAttribute('data-fs-carousel-item-visible')
232
-
233
- const thirdPageBullet = getByLabelText('Go to page 3')
234
-
235
- await act(async () => {
236
- /**
237
- * These two lines simulate what happens after a user navigates.
238
- *
239
- * 1. Wait for the animation triggered by the `secondPageBullet` click
240
- * to finish.
241
- * 2. `onTransitionEnd` event is triggered.
242
- * 3. User is then able to click the `thirdPageBullet` button.
243
- *
244
- * react-testing-library (or dom-testing-library) doesn't trigger the
245
- * `onTransitionEnd` event, so we need to do it manually.
246
- */
247
- await wait(SLIDING_TRANSITION_DURATION)
248
- carouselTrack && fireEvent.transitionEnd(carouselTrack)
249
-
250
- fireEvent.click(thirdPageBullet)
251
- })
252
-
253
- items = carouselSection.querySelectorAll('[data-fs-carousel-item]')
254
-
255
- // Only the 3rd item should be visible
256
- expect(items[0]).not.toHaveAttribute('data-fs-carousel-item-visible')
257
- expect(items[1]).not.toHaveAttribute('data-fs-carousel-item-visible')
258
- expect(items[2]).toHaveAttribute('data-fs-carousel-item-visible')
259
- expect(items[3]).not.toHaveAttribute('data-fs-carousel-item-visible')
260
- expect(items[4]).not.toHaveAttribute('data-fs-carousel-item-visible')
261
- })
262
-
263
- describe('Accessibility', () => {
264
- it('should have no violations on a default use case', async () => {
265
- const { container } = render(
266
- <Carousel>
267
- <div>Slide 1</div>
268
- <div>Slide 2</div>
269
- <div>Slide 3</div>
270
- </Carousel>
271
- )
272
-
273
- expect(await axe(container)).toHaveNoViolations()
274
- })
275
-
276
- it('should have no violations with infiniteMode false', async () => {
277
- const { container } = render(
278
- <Carousel infiniteMode={false}>
279
- <div>Slide 1</div>
280
- <div>Slide 2</div>
281
- <div>Slide 3</div>
282
- </Carousel>
283
- )
284
-
285
- expect(await axe(container)).toHaveNoViolations()
286
- })
287
-
288
- it('should have necessary roles and aria-roledescriptions attributes', () => {
289
- const { getByTestId, getAllByRole } = render(
290
- <Carousel infiniteMode={false}>
291
- <div>Slide 1</div>
292
- <div>Slide 2</div>
293
- <div>Slide 3</div>
294
- </Carousel>
295
- )
296
-
297
- // Check aria-roledescriptions
298
- expect(getByTestId('store-carousel')).toHaveAttribute(
299
- 'aria-roledescription',
300
- 'carousel'
301
- )
302
- expect(
303
- getByTestId('store-carousel').querySelectorAll(
304
- '[aria-roledescription="slide"]'
305
- )
306
- ).toHaveLength(3)
307
-
308
- // Check roles
309
- expect(getAllByRole('tablist')).toHaveLength(1)
310
- expect(getAllByRole('tab')).toHaveLength(3)
311
- expect(getAllByRole('tab', { selected: true })).toHaveLength(1)
312
-
313
- // Check bullets aria-controls
314
- expect(
315
- getByTestId('store-bullets').querySelectorAll('[aria-controls]')
316
- ).toHaveLength(3)
317
- })
318
-
319
- describe('Tablist', () => {
320
- it('should be focused when a component with role `tablist` or `tab` is focused', () => {
321
- const { getByRole, getAllByRole } = render(
322
- <Carousel>
323
- <div>Slide 1</div>
324
- <div>Slide 2</div>
325
- <div>Slide 3</div>
326
- </Carousel>
327
- )
328
-
329
- const tablist = getByRole('tablist')
330
-
331
- fireEvent.focus(tablist)
332
-
333
- expect(tablist).toHaveFocus()
334
-
335
- const [, sndTab] = getAllByRole('tab')
336
-
337
- fireEvent.focus(sndTab)
338
- expect(tablist).toHaveFocus()
339
- })
340
-
341
- describe('Keyboard navigation', () => {
342
- it('should slide to the next page on `ArrowRight` press', async () => {
343
- const { getAllByRole, getByRole, getByTestId } = render(
344
- <Carousel
345
- transition={{
346
- duration: 0,
347
- property: 'transform',
348
- }}
349
- >
350
- <div>Slide 1</div>
351
- <div>Slide 2</div>
352
- <div>Slide 3</div>
353
- </Carousel>
354
- )
355
-
356
- const carouselTrack = getByTestId('store-carousel').querySelector(
357
- '[data-fs-carousel-track]'
358
- ) as Element
359
-
360
- const tabs = getAllByRole('tab')
361
-
362
- // Select last tab
363
- fireEvent.click(tabs[2])
364
- fireEvent.transitionEnd(carouselTrack)
365
-
366
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
367
-
368
- const tablist = getByRole('tablist')
369
-
370
- fireEvent.focus(tablist)
371
- // Loop
372
- fireEvent.keyDown(tablist, {
373
- key: 'ArrowRight',
374
- })
375
- fireEvent.transitionEnd(carouselTrack)
376
-
377
- expect(tabs[2]).toHaveAttribute('aria-selected', 'false')
378
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
379
- })
380
-
381
- it('should not slide to the next page on `ArrowRight` when infiniteMode is false', () => {
382
- const { getAllByRole, getByRole, getByTestId } = render(
383
- <Carousel
384
- transition={{
385
- duration: 0,
386
- property: 'transform',
387
- }}
388
- infiniteMode={false}
389
- >
390
- <div>Slide 1</div>
391
- <div>Slide 2</div>
392
- <div>Slide 3</div>
393
- </Carousel>
394
- )
395
-
396
- const carouselTrack = getByTestId('store-carousel').querySelector(
397
- '[data-fs-carousel-track]'
398
- ) as Element
399
-
400
- const tabs = getAllByRole('tab')
401
-
402
- // Select last tab
403
- fireEvent.click(tabs[2])
404
- fireEvent.transitionEnd(carouselTrack)
405
-
406
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
407
-
408
- const tablist = getByRole('tablist')
409
-
410
- fireEvent.focus(tablist)
411
- // Try to loop
412
- fireEvent.keyDown(tablist, {
413
- key: 'ArrowRight',
414
- })
415
- fireEvent.transitionEnd(carouselTrack)
416
-
417
- expect(tabs[0]).toHaveAttribute('aria-selected', 'false')
418
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
419
- })
420
-
421
- it('should slide to the next page on `ArrowLeft` press', () => {
422
- const { getAllByRole, getByRole, getByTestId } = render(
423
- <Carousel
424
- transition={{
425
- duration: 0,
426
- property: 'transform',
427
- }}
428
- >
429
- <div>Slide 1</div>
430
- <div>Slide 2</div>
431
- <div>Slide 3</div>
432
- </Carousel>
433
- )
434
-
435
- const carouselTrack = getByTestId('store-carousel').querySelector(
436
- '[data-fs-carousel-track]'
437
- ) as Element
438
-
439
- const tabs = getAllByRole('tab')
440
-
441
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
442
-
443
- const tablist = getByRole('tablist')
444
-
445
- fireEvent.focus(tablist)
446
- // Loop back. From first to last
447
- fireEvent.keyDown(tablist, {
448
- key: 'ArrowLeft',
449
- })
450
- fireEvent.transitionEnd(carouselTrack)
451
-
452
- expect(tabs[0]).toHaveAttribute('aria-selected', 'false')
453
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
454
- })
455
-
456
- it('should not slide to the next page on `ArrowLeft` press when infiniteMode is false', () => {
457
- const { getAllByRole, getByRole, getByTestId } = render(
458
- <Carousel
459
- transition={{
460
- duration: 0,
461
- property: 'transform',
462
- }}
463
- infiniteMode={false}
464
- >
465
- <div>Slide 1</div>
466
- <div>Slide 2</div>
467
- <div>Slide 3</div>
468
- </Carousel>
469
- )
470
-
471
- const carouselTrack = getByTestId('store-carousel').querySelector(
472
- '[data-fs-carousel-track]'
473
- ) as Element
474
-
475
- const tabs = getAllByRole('tab')
476
-
477
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
478
-
479
- const tablist = getByRole('tablist')
480
-
481
- fireEvent.focus(tablist)
482
- // Try to loop back. From first to last
483
- fireEvent.keyDown(tablist, {
484
- key: 'ArrowLeft',
485
- })
486
- fireEvent.transitionEnd(carouselTrack)
487
-
488
- expect(tabs[2]).toHaveAttribute('aria-selected', 'false')
489
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
490
- })
491
-
492
- it('should slide to the first slide on `Home` press', () => {
493
- const { getAllByRole, getByRole, getByTestId } = render(
494
- <Carousel
495
- transition={{
496
- duration: 0,
497
- property: 'transform',
498
- }}
499
- >
500
- <div>Slide 1</div>
501
- <div>Slide 2</div>
502
- <div>Slide 3</div>
503
- </Carousel>
504
- )
505
-
506
- const carouselTrack = getByTestId('store-carousel').querySelector(
507
- '[data-fs-carousel-track]'
508
- ) as Element
509
-
510
- const tabs = getAllByRole('tab')
511
-
512
- // Select last tab
513
- fireEvent.click(tabs[2])
514
- fireEvent.transitionEnd(carouselTrack)
515
-
516
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
517
-
518
- const tablist = getByRole('tablist')
519
-
520
- fireEvent.focus(tablist)
521
- fireEvent.keyDown(tablist, {
522
- key: 'Home',
523
- })
524
- fireEvent.transitionEnd(carouselTrack)
525
-
526
- expect(tabs[2]).toHaveAttribute('aria-selected', 'false')
527
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
528
- })
529
-
530
- it('should slide to the last slide on `End` press', () => {
531
- const { getAllByRole, getByRole, getByTestId } = render(
532
- <Carousel
533
- transition={{
534
- duration: 0,
535
- property: 'transform',
536
- }}
537
- >
538
- <div>Slide 1</div>
539
- <div>Slide 2</div>
540
- <div>Slide 3</div>
541
- </Carousel>
542
- )
543
-
544
- const carouselTrack = getByTestId('store-carousel').querySelector(
545
- '[data-fs-carousel-track]'
546
- ) as Element
547
-
548
- const tabs = getAllByRole('tab')
549
-
550
- expect(tabs[0]).toHaveAttribute('aria-selected', 'true')
551
-
552
- const tablist = getByRole('tablist')
553
-
554
- fireEvent.focus(tablist)
555
- fireEvent.keyDown(tablist, {
556
- key: 'End',
557
- })
558
- fireEvent.transitionEnd(carouselTrack)
559
-
560
- expect(tabs[0]).toHaveAttribute('aria-selected', 'false')
561
- expect(tabs[2]).toHaveAttribute('aria-selected', 'true')
562
- })
563
-
564
- it('check the tablist event is not prevented from propagating', () => {
565
- const mockPreventDefault = jest.fn()
566
- const { getByRole } = render(
567
- <Carousel>
568
- <div>Slide 1</div>
569
- <div>Slide 2</div>
570
- <div>Slide 3</div>
571
- </Carousel>
572
- )
573
-
574
- const tablist = getByRole('tablist')
575
- const event = createEvent.keyDown(tablist, { key: 'Tab' })
576
-
577
- event.preventDefault = mockPreventDefault
578
-
579
- fireEvent.focus(tablist)
580
- fireEvent(tablist, event)
581
-
582
- expect(mockPreventDefault).not.toHaveBeenCalled()
583
- })
584
- })
585
- })
586
- })
587
- })
@@ -1,109 +0,0 @@
1
- import { renderHook } from '@testing-library/react-hooks'
2
-
3
- import useSlideVisibility from './useSlideVisibility'
4
- import type { UseSlideVisibilityArgs } from './useSlideVisibility'
5
-
6
- describe('useSlideVisibility', () => {
7
- /**
8
- * Let's assume we're working with an hypothetical carousel that has 10 items
9
- * and displays 3 of them per page in all of the tests below.
10
- */
11
- const slideIndexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
12
-
13
- describe('shouldRenderItem function', () => {
14
- it('should return `true` for slides that have been seen across state updates', () => {
15
- const { result, rerender } = renderHook(
16
- (props: UseSlideVisibilityArgs) =>
17
- useSlideVisibility({
18
- currentSlide: props.currentSlide,
19
- itemsPerPage: props.itemsPerPage,
20
- totalItems: props.totalItems,
21
- }),
22
- { initialProps: { currentSlide: 0, itemsPerPage: 3, totalItems: 10 } }
23
- )
24
-
25
- let currentResultsArray = slideIndexes.map((index) =>
26
- result.current.shouldRenderItem(index)
27
- )
28
-
29
- // The first three values in the resulting array should be `true`.
30
- const firstExpectedTruthyValues = currentResultsArray
31
- .slice(0, 3)
32
- .filter((item) => Boolean(item))
33
-
34
- expect(firstExpectedTruthyValues).toHaveLength(3)
35
-
36
- // This represents the carousel currently in the second page.
37
- rerender({ currentSlide: 3, itemsPerPage: 3, totalItems: 10 })
38
-
39
- currentResultsArray = slideIndexes.map((index) =>
40
- result.current.shouldRenderItem(index)
41
- )
42
-
43
- // The first six values in the resulting array should be `true`.
44
- const secondExpectedTruthyValues = currentResultsArray
45
- .slice(0, 6)
46
- .filter((item) => Boolean(item))
47
-
48
- expect(secondExpectedTruthyValues).toHaveLength(6)
49
-
50
- // This represents the carousel currently in the first page again.
51
- rerender({ currentSlide: 0, itemsPerPage: 3, totalItems: 10 })
52
-
53
- currentResultsArray = slideIndexes.map((index) =>
54
- result.current.shouldRenderItem(index)
55
- )
56
-
57
- // The first six values in the resulting array should be `true`,
58
- // same as the previous test.
59
- const thirdExpectedTruthyValues = currentResultsArray
60
- .slice(0, 6)
61
- .filter((item) => Boolean(item))
62
-
63
- expect(thirdExpectedTruthyValues).toHaveLength(6)
64
- })
65
- })
66
-
67
- describe('isItemVisible function', () => {
68
- it('should return `true` for slides that are currently visible given a certain state', () => {
69
- const { result, rerender } = renderHook(
70
- (props: UseSlideVisibilityArgs) =>
71
- useSlideVisibility({
72
- currentSlide: props.currentSlide,
73
- itemsPerPage: props.itemsPerPage,
74
- totalItems: props.totalItems,
75
- }),
76
- { initialProps: { currentSlide: 0, itemsPerPage: 3, totalItems: 10 } }
77
- )
78
-
79
- let currentResultsArray = slideIndexes.map((index) =>
80
- result.current.isItemVisible(index)
81
- )
82
-
83
- // The first three values in the resulting array should be `true`.
84
- const firstExpectedTruthyValues = currentResultsArray
85
- .slice(0, 3)
86
- .filter((item) => Boolean(item))
87
-
88
- expect(firstExpectedTruthyValues).toHaveLength(3)
89
-
90
- // This represents the carousel currently in the second page.
91
- rerender({ currentSlide: 3, itemsPerPage: 3, totalItems: 10 })
92
-
93
- currentResultsArray = slideIndexes.map((index) =>
94
- result.current.isItemVisible(index)
95
- )
96
-
97
- // The elements at indexes 3, 4 and 5 in the resulting array should be
98
- // `true`.
99
- const secondExpectedTruthyValues = currentResultsArray
100
- .slice(3, 6)
101
- .filter((item) => Boolean(item))
102
-
103
- const truthyValues = currentResultsArray.filter((item) => Boolean(item))
104
-
105
- expect(secondExpectedTruthyValues).toHaveLength(3)
106
- expect(truthyValues).toHaveLength(3)
107
- })
108
- })
109
- })