@logora/debate 0.1.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 (1053) hide show
  1. package/.changeset/config.json +11 -0
  2. package/.eslintrc.js +12 -0
  3. package/.github/dependabot.yml +7 -0
  4. package/.github/workflows/master.yml +121 -0
  5. package/.storybook/main.mjs +47 -0
  6. package/.storybook/preview.js +11 -0
  7. package/LICENSE +661 -0
  8. package/README.md +90 -0
  9. package/package.json +101 -0
  10. package/src/components/action/back_link/BackLink.docs.mdx +25 -0
  11. package/src/components/action/back_link/BackLink.jsx +30 -0
  12. package/src/components/action/back_link/BackLink.module.scss +34 -0
  13. package/src/components/action/back_link/BackLink.stories.jsx +28 -0
  14. package/src/components/action/back_link/BackLink.test.jsx +105 -0
  15. package/src/components/action/back_link/index.js +1 -0
  16. package/src/components/action/button/Button.docs.mdx +43 -0
  17. package/src/components/action/button/Button.examples.jsx +60 -0
  18. package/src/components/action/button/Button.jsx +88 -0
  19. package/src/components/action/button/Button.module.scss +133 -0
  20. package/src/components/action/button/Button.stories.jsx +54 -0
  21. package/src/components/action/button/Button.test.jsx +54 -0
  22. package/src/components/action/button/index.js +1 -0
  23. package/src/components/action/icon_text_link/HomeIcon.dev.jsx +9 -0
  24. package/src/components/action/icon_text_link/IconTextLink.docs.mdx +37 -0
  25. package/src/components/action/icon_text_link/IconTextLink.jsx +57 -0
  26. package/src/components/action/icon_text_link/IconTextLink.module.scss +67 -0
  27. package/src/components/action/icon_text_link/IconTextLink.stories.jsx +44 -0
  28. package/src/components/action/icon_text_link/IconTextLink.test.jsx +134 -0
  29. package/src/components/action/icon_text_link/index.js +1 -0
  30. package/src/components/action/link/Link.docs.mdx +23 -0
  31. package/src/components/action/link/Link.jsx +50 -0
  32. package/src/components/action/link/Link.stories.jsx +43 -0
  33. package/src/components/action/link/Link.test.jsx +91 -0
  34. package/src/components/action/link/index.js +1 -0
  35. package/src/components/ad/ad_unit/AdUnit.docs.mdx +23 -0
  36. package/src/components/ad/ad_unit/AdUnit.jsx +75 -0
  37. package/src/components/ad/ad_unit/AdUnit.module.scss +9 -0
  38. package/src/components/ad/ad_unit/AdUnit.stories.jsx +30 -0
  39. package/src/components/ad/ad_unit/AdUnit.test.jsx +63 -0
  40. package/src/components/ad/ad_unit/index.js +1 -0
  41. package/src/components/ad/use_google_ad_manager/index.js +1 -0
  42. package/src/components/ad/use_google_ad_manager/useGoogleAdManager.docs.mdx +27 -0
  43. package/src/components/ad/use_google_ad_manager/useGoogleAdManager.jsx +37 -0
  44. package/src/components/ad/use_google_ad_manager/useGoogleAdManager.test.jsx +47 -0
  45. package/src/components/ad/with_ad/WithAd.docs.mdx +30 -0
  46. package/src/components/ad/with_ad/WithAd.jsx +51 -0
  47. package/src/components/ad/with_ad/WithAd.test.jsx +104 -0
  48. package/src/components/ad/with_ad/index.js +1 -0
  49. package/src/components/argument/argument/Argument.docs.mdx +60 -0
  50. package/src/components/argument/argument/Argument.jsx +358 -0
  51. package/src/components/argument/argument/Argument.module.scss +233 -0
  52. package/src/components/argument/argument/Argument.stories.jsx +232 -0
  53. package/src/components/argument/argument/Argument.test.jsx +303 -0
  54. package/src/components/argument/argument/ReplyFooter.jsx +47 -0
  55. package/src/components/argument/argument/ReplyFooter.module.scss +77 -0
  56. package/src/components/argument/argument/index.js +2 -0
  57. package/src/components/argument/argument/useRichContent.jsx +18 -0
  58. package/src/components/argument/top_arguments/TopArguments.docs.mdx +22 -0
  59. package/src/components/argument/top_arguments/TopArguments.jsx +90 -0
  60. package/src/components/argument/top_arguments/TopArguments.module.scss +37 -0
  61. package/src/components/argument/top_arguments/TopArguments.stories.jsx +156 -0
  62. package/src/components/argument/top_arguments/TopArguments.test.jsx +67 -0
  63. package/src/components/argument/top_arguments/index.js +1 -0
  64. package/src/components/auth/auth_initializer/AuthInitializer.alltest.js +21 -0
  65. package/src/components/auth/auth_initializer/AuthInitializer.docs.mdx +34 -0
  66. package/src/components/auth/auth_initializer/AuthInitializer.jsx +61 -0
  67. package/src/components/auth/auth_initializer/index.js +1 -0
  68. package/src/components/auth/auth_modal/AuthModal.alltest.js +30 -0
  69. package/src/components/auth/auth_modal/AuthModal.docs.mdx +26 -0
  70. package/src/components/auth/auth_modal/AuthModal.jsx +99 -0
  71. package/src/components/auth/auth_modal/AuthModal.module.scss +9 -0
  72. package/src/components/auth/auth_modal/AuthModal.stories.jsx +90 -0
  73. package/src/components/auth/auth_modal/index.js +1 -0
  74. package/src/components/auth/facebook_login_button/FacebookIcon.jsx +7 -0
  75. package/src/components/auth/facebook_login_button/FacebookLoginButton.docs.mdx +34 -0
  76. package/src/components/auth/facebook_login_button/FacebookLoginButton.jsx +25 -0
  77. package/src/components/auth/facebook_login_button/FacebookLoginButton.module.scss +32 -0
  78. package/src/components/auth/facebook_login_button/FacebookLoginButton.stories.jsx +35 -0
  79. package/src/components/auth/facebook_login_button/FacebookLoginButton.test.jsx +68 -0
  80. package/src/components/auth/facebook_login_button/index.js +1 -0
  81. package/src/components/auth/google_login_button/GoogleIcon.jsx +10 -0
  82. package/src/components/auth/google_login_button/GoogleLoginButton.docs.mdx +43 -0
  83. package/src/components/auth/google_login_button/GoogleLoginButton.jsx +27 -0
  84. package/src/components/auth/google_login_button/GoogleLoginButton.module.scss +28 -0
  85. package/src/components/auth/google_login_button/GoogleLoginButton.stories.jsx +35 -0
  86. package/src/components/auth/google_login_button/GoogleLoginButton.test.jsx +69 -0
  87. package/src/components/auth/google_login_button/index.js +1 -0
  88. package/src/components/auth/login_form/LoginForm.docs.mdx +24 -0
  89. package/src/components/auth/login_form/LoginForm.jsx +65 -0
  90. package/src/components/auth/login_form/LoginForm.module.scss +36 -0
  91. package/src/components/auth/login_form/LoginForm.stories.jsx +42 -0
  92. package/src/components/auth/login_form/LoginForm.test.jsx +94 -0
  93. package/src/components/auth/login_form/index.js +1 -0
  94. package/src/components/auth/oauth2_button/OAuth2Button.docs.mdx +32 -0
  95. package/src/components/auth/oauth2_button/OAuth2Button.jsx +79 -0
  96. package/src/components/auth/oauth2_button/OAuth2Button.module.scss +10 -0
  97. package/src/components/auth/oauth2_button/OAuth2Button.stories.jsx +48 -0
  98. package/src/components/auth/oauth2_button/OAuth2Button.test.jsx +306 -0
  99. package/src/components/auth/oauth2_button/index.js +1 -0
  100. package/src/components/auth/providers/AuthProvider.docs.mdx +35 -0
  101. package/src/components/auth/providers/AuthProvider.js +23 -0
  102. package/src/components/auth/providers/AuthProviderFactory.js +20 -0
  103. package/src/components/auth/providers/FormAuth.js +36 -0
  104. package/src/components/auth/providers/JWTAuth.js +35 -0
  105. package/src/components/auth/providers/OAuth2ServerAuth.js +47 -0
  106. package/src/components/auth/providers/PasswordAuth.js +31 -0
  107. package/src/components/auth/providers/index.js +1 -0
  108. package/src/components/auth/providers/tests/AuthProviderFactory.test.jsx +53 -0
  109. package/src/components/auth/providers/tests/FormAuth.test.jsx +45 -0
  110. package/src/components/auth/providers/tests/JWTAuth.test.jsx +57 -0
  111. package/src/components/auth/providers/tests/OAuth2ServerAuth.test.jsx +78 -0
  112. package/src/components/auth/providers/tests/PasswordAuth.test.jsx +43 -0
  113. package/src/components/auth/signup_form/SignupForm.docs.mdx +29 -0
  114. package/src/components/auth/signup_form/SignupForm.jsx +125 -0
  115. package/src/components/auth/signup_form/SignupForm.module.scss +21 -0
  116. package/src/components/auth/signup_form/SignupForm.stories.jsx +40 -0
  117. package/src/components/auth/signup_form/SignupForm.test.jsx +144 -0
  118. package/src/components/auth/signup_form/index.js +1 -0
  119. package/src/components/auth/social_auth_form/SocialAuthForm.docs.mdx +33 -0
  120. package/src/components/auth/social_auth_form/SocialAuthForm.jsx +170 -0
  121. package/src/components/auth/social_auth_form/SocialAuthForm.module.scss +141 -0
  122. package/src/components/auth/social_auth_form/SocialAuthForm.stories.jsx +82 -0
  123. package/src/components/auth/social_auth_form/SocialAuthForm.test.jsx +201 -0
  124. package/src/components/auth/social_auth_form/index.js +1 -0
  125. package/src/components/auth/sso_form/SSOForm.docs.mdx +39 -0
  126. package/src/components/auth/sso_form/SSOForm.jsx +243 -0
  127. package/src/components/auth/sso_form/SSOForm.module.scss +99 -0
  128. package/src/components/auth/sso_form/SSOForm.stories.jsx +117 -0
  129. package/src/components/auth/sso_form/SSOForm.test.jsx +83 -0
  130. package/src/components/auth/sso_form/index.js +1 -0
  131. package/src/components/auth/use_auth/AuthContext.js +3 -0
  132. package/src/components/auth/use_auth/AuthProvider.jsx +21 -0
  133. package/src/components/auth/use_auth/AuthProvider.test.jsx +26 -0
  134. package/src/components/auth/use_auth/AuthStorage.js +33 -0
  135. package/src/components/auth/use_auth/AuthStorage.test.jsx +165 -0
  136. package/src/components/auth/use_auth/authTokenHandler.js +67 -0
  137. package/src/components/auth/use_auth/authTokenHandler.test.jsx +117 -0
  138. package/src/components/auth/use_auth/index.js +7 -0
  139. package/src/components/auth/use_auth/useAuth.docs.mdx +34 -0
  140. package/src/components/auth/use_auth/useAuth.js +8 -0
  141. package/src/components/auth/use_auth/useAuthActions.js +77 -0
  142. package/src/components/auth/use_auth/useAuthInterceptor.jsx +42 -0
  143. package/src/components/chart/line_chart/LineChart.docs.mdx +34 -0
  144. package/src/components/chart/line_chart/LineChart.jsx +107 -0
  145. package/src/components/chart/line_chart/LineChart.module.scss +54 -0
  146. package/src/components/chart/line_chart/LineChart.stories.jsx +49 -0
  147. package/src/components/chart/line_chart/LineChart.test.jsx +12 -0
  148. package/src/components/chart/line_chart/index.js +1 -0
  149. package/src/components/chart/pie_chart/PieChart.docs.mdx +26 -0
  150. package/src/components/chart/pie_chart/PieChart.jsx +102 -0
  151. package/src/components/chart/pie_chart/PieChart.module.scss +17 -0
  152. package/src/components/chart/pie_chart/PieChart.stories.jsx +36 -0
  153. package/src/components/chart/pie_chart/PieChart.test.jsx +12 -0
  154. package/src/components/chart/pie_chart/index.js +1 -0
  155. package/src/components/consultation/consultation_box/ConsultationBox.docs.mdx +21 -0
  156. package/src/components/consultation/consultation_box/ConsultationBox.jsx +101 -0
  157. package/src/components/consultation/consultation_box/ConsultationBox.module.scss +105 -0
  158. package/src/components/consultation/consultation_box/ConsultationBox.stories.jsx +96 -0
  159. package/src/components/consultation/consultation_box/ConsultationBox.test.jsx +58 -0
  160. package/src/components/consultation/consultation_box/index.js +1 -0
  161. package/src/components/data/axios_client/httpClient.docs.mdx +4 -0
  162. package/src/components/data/axios_client/httpClient.js +11 -0
  163. package/src/components/data/axios_client/index.js +1 -0
  164. package/src/components/data/config_provider/ConfigProvider.docs.mdx +26 -0
  165. package/src/components/data/config_provider/ConfigProvider.jsx +21 -0
  166. package/src/components/data/config_provider/ConfigProvider.test.jsx +39 -0
  167. package/src/components/data/config_provider/index.js +4 -0
  168. package/src/components/data/config_provider/useConfig.jsx +8 -0
  169. package/src/components/data/config_provider/useRoutes.jsx +8 -0
  170. package/src/components/data/config_provider/withConfig.jsx +8 -0
  171. package/src/components/data/data_provider/DataProvider.docs.mdx +52 -0
  172. package/src/components/data/data_provider/DataProvider.jsx +165 -0
  173. package/src/components/data/data_provider/DataProvider.test.jsx +419 -0
  174. package/src/components/data/data_provider/DataProviderContext.jsx +3 -0
  175. package/src/components/data/data_provider/index.js +4 -0
  176. package/src/components/data/data_provider/useData.jsx +9 -0
  177. package/src/components/data/data_provider/useDataProvider.jsx +8 -0
  178. package/src/components/data/data_provider/useDataProvider.test.jsx +38 -0
  179. package/src/components/debate/debate_box/DebateBox.docs.mdx +23 -0
  180. package/src/components/debate/debate_box/DebateBox.jsx +136 -0
  181. package/src/components/debate/debate_box/DebateBox.module.scss +209 -0
  182. package/src/components/debate/debate_box/DebateBox.stories.jsx +157 -0
  183. package/src/components/debate/debate_box/DebateBox.test.jsx +117 -0
  184. package/src/components/debate/debate_box/index.js +1 -0
  185. package/src/components/dialog/announcement_dialog/AnnouncementDialog.docs.mdx +24 -0
  186. package/src/components/dialog/announcement_dialog/AnnouncementDialog.jsx +37 -0
  187. package/src/components/dialog/announcement_dialog/AnnouncementDialog.module.scss +35 -0
  188. package/src/components/dialog/announcement_dialog/AnnouncementDialog.stories.jsx +44 -0
  189. package/src/components/dialog/announcement_dialog/AnnouncementDialog.test.jsx +35 -0
  190. package/src/components/dialog/announcement_dialog/HomeIcon.dev.jsx +9 -0
  191. package/src/components/dialog/announcement_dialog/index.js +1 -0
  192. package/src/components/dialog/confirm_modal/ConfirmModal.docs.mdx +25 -0
  193. package/src/components/dialog/confirm_modal/ConfirmModal.jsx +53 -0
  194. package/src/components/dialog/confirm_modal/ConfirmModal.module.scss +30 -0
  195. package/src/components/dialog/confirm_modal/ConfirmModal.stories.jsx +36 -0
  196. package/src/components/dialog/confirm_modal/ConfirmModal.test.jsx +176 -0
  197. package/src/components/dialog/confirm_modal/index.js +1 -0
  198. package/src/components/dialog/countdown/Countdown.docs.mdx +23 -0
  199. package/src/components/dialog/countdown/Countdown.jsx +36 -0
  200. package/src/components/dialog/countdown/Countdown.stories.jsx +33 -0
  201. package/src/components/dialog/countdown/Countdown.test.jsx +51 -0
  202. package/src/components/dialog/countdown/index.js +1 -0
  203. package/src/components/dialog/dialog_box/DialogBox.docs.mdx +25 -0
  204. package/src/components/dialog/dialog_box/DialogBox.jsx +53 -0
  205. package/src/components/dialog/dialog_box/DialogBox.module.scss +145 -0
  206. package/src/components/dialog/dialog_box/DialogBox.stories.jsx +45 -0
  207. package/src/components/dialog/dialog_box/DialogBox.test.jsx +40 -0
  208. package/src/components/dialog/dialog_box/index.js +1 -0
  209. package/src/components/dialog/drawer/Drawer.docs.mdx +31 -0
  210. package/src/components/dialog/drawer/Drawer.jsx +159 -0
  211. package/src/components/dialog/drawer/Drawer.module.scss +136 -0
  212. package/src/components/dialog/drawer/Drawer.stories.jsx +194 -0
  213. package/src/components/dialog/drawer/Drawer.test.jsx +15 -0
  214. package/src/components/dialog/drawer/index.js +1 -0
  215. package/src/components/dialog/dropdown/Dropdown.docs.mdx +28 -0
  216. package/src/components/dialog/dropdown/Dropdown.jsx +59 -0
  217. package/src/components/dialog/dropdown/Dropdown.module.scss +41 -0
  218. package/src/components/dialog/dropdown/Dropdown.stories.jsx +42 -0
  219. package/src/components/dialog/dropdown/Dropdown.test.jsx +126 -0
  220. package/src/components/dialog/dropdown/index.js +1 -0
  221. package/src/components/dialog/modal/Modal.docs.mdx +39 -0
  222. package/src/components/dialog/modal/Modal.jsx +101 -0
  223. package/src/components/dialog/modal/Modal.module.scss +99 -0
  224. package/src/components/dialog/modal/Modal.stories.jsx +53 -0
  225. package/src/components/dialog/modal/Modal.test.jsx +115 -0
  226. package/src/components/dialog/modal/ModalProvider.jsx +26 -0
  227. package/src/components/dialog/modal/ModalProvider.test.jsx +39 -0
  228. package/src/components/dialog/modal/index.js +3 -0
  229. package/src/components/dialog/modal/useModal.jsx +6 -0
  230. package/src/components/dialog/toast/Toast.docs.mdx +21 -0
  231. package/src/components/dialog/toast/Toast.jsx +44 -0
  232. package/src/components/dialog/toast/Toast.module.scss +66 -0
  233. package/src/components/dialog/toast/Toast.stories.jsx +42 -0
  234. package/src/components/dialog/toast/Toast.test.jsx +21 -0
  235. package/src/components/dialog/toast/index.js +1 -0
  236. package/src/components/dialog/toast_provider/ToastContext.js +3 -0
  237. package/src/components/dialog/toast_provider/ToastProvider.docs.mdx +36 -0
  238. package/src/components/dialog/toast_provider/ToastProvider.jsx +35 -0
  239. package/src/components/dialog/toast_provider/ToastProvider.module.scss +14 -0
  240. package/src/components/dialog/toast_provider/ToastProvider.test.jsx +64 -0
  241. package/src/components/dialog/toast_provider/index.js +2 -0
  242. package/src/components/dialog/toast_provider/useToast.jsx +8 -0
  243. package/src/components/dialog/tooltip/Tooltip.docs.mdx +20 -0
  244. package/src/components/dialog/tooltip/Tooltip.jsx +53 -0
  245. package/src/components/dialog/tooltip/Tooltip.module.scss +92 -0
  246. package/src/components/dialog/tooltip/Tooltip.stories.jsx +76 -0
  247. package/src/components/dialog/tooltip/Tooltip.test.jsx +67 -0
  248. package/src/components/dialog/tooltip/index.js +3 -0
  249. package/src/components/embed/embed_header/EmbedHeader.docs.mdx +25 -0
  250. package/src/components/embed/embed_header/EmbedHeader.jsx +61 -0
  251. package/src/components/embed/embed_header/EmbedHeader.module.scss +148 -0
  252. package/src/components/embed/embed_header/EmbedHeader.stories.jsx +54 -0
  253. package/src/components/embed/embed_header/EmbedHeader.test.jsx +70 -0
  254. package/src/components/embed/embed_header/index.js +1 -0
  255. package/src/components/error/standard_error_boundary/StandardErrorBoundary.docs.mdx +26 -0
  256. package/src/components/error/standard_error_boundary/StandardErrorBoundary.jsx +27 -0
  257. package/src/components/error/standard_error_boundary/StandardErrorBoundary.module.scss +8 -0
  258. package/src/components/error/standard_error_boundary/StandardErrorBoundary.test.jsx +56 -0
  259. package/src/components/error/standard_error_boundary/index.js +1 -0
  260. package/src/components/follow/follow_button/FollowButton.docs.mdx +41 -0
  261. package/src/components/follow/follow_button/FollowButton.jsx +40 -0
  262. package/src/components/follow/follow_button/FollowButton.module.scss +17 -0
  263. package/src/components/follow/follow_button/FollowButton.stories.jsx +58 -0
  264. package/src/components/follow/follow_button/FollowButton.test.jsx +45 -0
  265. package/src/components/follow/follow_button/index.js +1 -0
  266. package/src/components/follow/use_follow/index.js +1 -0
  267. package/src/components/follow/use_follow/useFollow.docs.mdx +24 -0
  268. package/src/components/follow/use_follow/useFollow.jsx +60 -0
  269. package/src/components/follow/use_follow/useFollow.test.jsx +94 -0
  270. package/src/components/forms/form/extract-form-data.js +14 -0
  271. package/src/components/forms/form/form-context.js +3 -0
  272. package/src/components/forms/form/form.docs.mdx +232 -0
  273. package/src/components/forms/form/form.jsx +26 -0
  274. package/src/components/forms/form/form.stories.jsx +119 -0
  275. package/src/components/forms/form/form.test.jsx +3 -0
  276. package/src/components/forms/form/index.js +6 -0
  277. package/src/components/forms/form/use-form-context.js +43 -0
  278. package/src/components/forms/form/use-form.js +4 -0
  279. package/src/components/forms/use_form_validation/index.js +1 -0
  280. package/src/components/forms/use_form_validation/useFormValidation.docs.mdx +40 -0
  281. package/src/components/forms/use_form_validation/useFormValidation.jsx +114 -0
  282. package/src/components/forms/use_form_validation/useFormValidation.test.jsx +91 -0
  283. package/src/components/gamification/badge_box/BadgeBox.docs.mdx +25 -0
  284. package/src/components/gamification/badge_box/BadgeBox.jsx +74 -0
  285. package/src/components/gamification/badge_box/BadgeBox.module.scss +103 -0
  286. package/src/components/gamification/badge_box/BadgeBox.stories.jsx +64 -0
  287. package/src/components/gamification/badge_box/BadgeBox.test.jsx +113 -0
  288. package/src/components/gamification/badge_box/index.js +1 -0
  289. package/src/components/gamification/point_box/PointBox.docs.mdx +19 -0
  290. package/src/components/gamification/point_box/PointBox.jsx +28 -0
  291. package/src/components/gamification/point_box/PointBox.module.scss +38 -0
  292. package/src/components/gamification/point_box/PointBox.stories.jsx +32 -0
  293. package/src/components/gamification/point_box/PointBox.test.jsx +21 -0
  294. package/src/components/gamification/point_box/index.js +1 -0
  295. package/src/components/hooks/use_auth_required/index.js +1 -0
  296. package/src/components/hooks/use_auth_required/useAuthRequired.docs.mdx +22 -0
  297. package/src/components/hooks/use_auth_required/useAuthRequired.jsx +28 -0
  298. package/src/components/hooks/use_auth_required/useAuthRequired.test.jsx +85 -0
  299. package/src/components/hooks/use_css_theme/index.js +1 -0
  300. package/src/components/hooks/use_css_theme/useCssTheme.docs.mdx +34 -0
  301. package/src/components/hooks/use_css_theme/useCssTheme.js +27 -0
  302. package/src/components/hooks/use_css_theme/useCssTheme.stories.jsx +41 -0
  303. package/src/components/hooks/use_css_theme/useCssTheme.test.jsx +31 -0
  304. package/src/components/hooks/use_font_loader/index.js +1 -0
  305. package/src/components/hooks/use_font_loader/useFontLoader.docs.mdx +24 -0
  306. package/src/components/hooks/use_font_loader/useFontLoader.js +16 -0
  307. package/src/components/hooks/use_font_loader/useFontLoader.test.jsx +64 -0
  308. package/src/components/hooks/use_matomo/index.js +1 -0
  309. package/src/components/hooks/use_matomo/useMatomo.docs.mdx +28 -0
  310. package/src/components/hooks/use_matomo/useMatomo.js +17 -0
  311. package/src/components/hooks/use_matomo/useMatomo.test.jsx +24 -0
  312. package/src/components/hooks/use_relative_time/index.js +1 -0
  313. package/src/components/hooks/use_relative_time/useRelativeTime.docs.mdx +35 -0
  314. package/src/components/hooks/use_relative_time/useRelativeTime.jsx +40 -0
  315. package/src/components/hooks/use_relative_time/useRelativeTime.test.jsx +82 -0
  316. package/src/components/hooks/use_responsive/ResponsiveContext.jsx +3 -0
  317. package/src/components/hooks/use_responsive/ResponsiveProvider.jsx +52 -0
  318. package/src/components/hooks/use_responsive/index.js +2 -0
  319. package/src/components/hooks/use_responsive/useResponsive.docs.mdx +46 -0
  320. package/src/components/hooks/use_responsive/useResponsive.jsx +8 -0
  321. package/src/components/hooks/use_responsive/useResponsive.stories.jsx +49 -0
  322. package/src/components/hooks/use_responsive/useResponsive.test.jsx +54 -0
  323. package/src/components/icons/bild_icons/Alarm.jsx +7 -0
  324. package/src/components/icons/bild_icons/Announcement.jsx +16 -0
  325. package/src/components/icons/bild_icons/Arrow.jsx +7 -0
  326. package/src/components/icons/bild_icons/BildIcons.docs.mdx +21 -0
  327. package/src/components/icons/bild_icons/BildIcons.stories.jsx +123 -0
  328. package/src/components/icons/bild_icons/BildIcons.test.jsx +15 -0
  329. package/src/components/icons/bild_icons/Blockquote.jsx +7 -0
  330. package/src/components/icons/bild_icons/Bold.jsx +7 -0
  331. package/src/components/icons/bild_icons/Camera.jsx +8 -0
  332. package/src/components/icons/bild_icons/Chat.jsx +16 -0
  333. package/src/components/icons/bild_icons/Check.jsx +7 -0
  334. package/src/components/icons/bild_icons/CheckCircle.jsx +17 -0
  335. package/src/components/icons/bild_icons/Checkbox.jsx +8 -0
  336. package/src/components/icons/bild_icons/Clap.jsx +9 -0
  337. package/src/components/icons/bild_icons/Clock.jsx +7 -0
  338. package/src/components/icons/bild_icons/Close.jsx +7 -0
  339. package/src/components/icons/bild_icons/Code.jsx +18 -0
  340. package/src/components/icons/bild_icons/Community.jsx +7 -0
  341. package/src/components/icons/bild_icons/Crown.jsx +7 -0
  342. package/src/components/icons/bild_icons/Document.jsx +7 -0
  343. package/src/components/icons/bild_icons/Downvote.jsx +7 -0
  344. package/src/components/icons/bild_icons/Ellipsis.jsx +8 -0
  345. package/src/components/icons/bild_icons/ExpertBadge.jsx +11 -0
  346. package/src/components/icons/bild_icons/Facebook.jsx +7 -0
  347. package/src/components/icons/bild_icons/Flag.jsx +7 -0
  348. package/src/components/icons/bild_icons/Home.jsx +7 -0
  349. package/src/components/icons/bild_icons/Italic.jsx +7 -0
  350. package/src/components/icons/bild_icons/LightArrow.jsx +7 -0
  351. package/src/components/icons/bild_icons/Link.jsx +8 -0
  352. package/src/components/icons/bild_icons/Login.jsx +11 -0
  353. package/src/components/icons/bild_icons/Logora.jsx +24 -0
  354. package/src/components/icons/bild_icons/Mail.jsx +7 -0
  355. package/src/components/icons/bild_icons/MinusCircle.jsx +16 -0
  356. package/src/components/icons/bild_icons/MobileClose.jsx +8 -0
  357. package/src/components/icons/bild_icons/MobileMenu.jsx +10 -0
  358. package/src/components/icons/bild_icons/Next.jsx +10 -0
  359. package/src/components/icons/bild_icons/OpenBlank.jsx +15 -0
  360. package/src/components/icons/bild_icons/OrderedList.jsx +7 -0
  361. package/src/components/icons/bild_icons/PauseCircle.jsx +10 -0
  362. package/src/components/icons/bild_icons/Point.jsx +8 -0
  363. package/src/components/icons/bild_icons/Question.jsx +8 -0
  364. package/src/components/icons/bild_icons/Refresh.jsx +7 -0
  365. package/src/components/icons/bild_icons/Reply.jsx +7 -0
  366. package/src/components/icons/bild_icons/Search.jsx +7 -0
  367. package/src/components/icons/bild_icons/Send.jsx +7 -0
  368. package/src/components/icons/bild_icons/Share.jsx +14 -0
  369. package/src/components/icons/bild_icons/SmallArrow.jsx +11 -0
  370. package/src/components/icons/bild_icons/Source.jsx +7 -0
  371. package/src/components/icons/bild_icons/Suggestion.jsx +7 -0
  372. package/src/components/icons/bild_icons/Twitter.jsx +10 -0
  373. package/src/components/icons/bild_icons/Underline.jsx +7 -0
  374. package/src/components/icons/bild_icons/Upvote.jsx +7 -0
  375. package/src/components/icons/bild_icons/User.jsx +7 -0
  376. package/src/components/icons/bild_icons/Versus.jsx +11 -0
  377. package/src/components/icons/bild_icons/Votebox.jsx +7 -0
  378. package/src/components/icons/bild_icons/index.js +52 -0
  379. package/src/components/icons/hero_icons/Alarm.jsx +7 -0
  380. package/src/components/icons/hero_icons/Announcement.jsx +7 -0
  381. package/src/components/icons/hero_icons/Arrow.jsx +7 -0
  382. package/src/components/icons/hero_icons/Blockquote.jsx +14 -0
  383. package/src/components/icons/hero_icons/Bold.jsx +7 -0
  384. package/src/components/icons/hero_icons/Camera.jsx +8 -0
  385. package/src/components/icons/hero_icons/Chat.jsx +7 -0
  386. package/src/components/icons/hero_icons/Check.jsx +8 -0
  387. package/src/components/icons/hero_icons/CheckCircle.jsx +17 -0
  388. package/src/components/icons/hero_icons/Checkbox.jsx +7 -0
  389. package/src/components/icons/hero_icons/Clap.jsx +7 -0
  390. package/src/components/icons/hero_icons/Clock.jsx +7 -0
  391. package/src/components/icons/hero_icons/Close.jsx +8 -0
  392. package/src/components/icons/hero_icons/Code.jsx +7 -0
  393. package/src/components/icons/hero_icons/Community.jsx +7 -0
  394. package/src/components/icons/hero_icons/Crown.jsx +7 -0
  395. package/src/components/icons/hero_icons/Downvote.jsx +8 -0
  396. package/src/components/icons/hero_icons/Ellipsis.jsx +7 -0
  397. package/src/components/icons/hero_icons/ExpertBadge.jsx +7 -0
  398. package/src/components/icons/hero_icons/Facebook.jsx +7 -0
  399. package/src/components/icons/hero_icons/Flag.jsx +7 -0
  400. package/src/components/icons/hero_icons/HeroIcons.docs.mdx +19 -0
  401. package/src/components/icons/hero_icons/HeroIcons.stories.jsx +121 -0
  402. package/src/components/icons/hero_icons/HeroIcons.test.jsx +15 -0
  403. package/src/components/icons/hero_icons/Home.jsx +7 -0
  404. package/src/components/icons/hero_icons/Italic.jsx +7 -0
  405. package/src/components/icons/hero_icons/LightArrow.jsx +7 -0
  406. package/src/components/icons/hero_icons/Link.jsx +7 -0
  407. package/src/components/icons/hero_icons/Login.jsx +7 -0
  408. package/src/components/icons/hero_icons/Logora.jsx +24 -0
  409. package/src/components/icons/hero_icons/Mail.jsx +7 -0
  410. package/src/components/icons/hero_icons/MinusCircle.jsx +16 -0
  411. package/src/components/icons/hero_icons/MobileClose.jsx +7 -0
  412. package/src/components/icons/hero_icons/MobileMenu.jsx +7 -0
  413. package/src/components/icons/hero_icons/Next.jsx +8 -0
  414. package/src/components/icons/hero_icons/OpenBlank.jsx +7 -0
  415. package/src/components/icons/hero_icons/OrderedList.jsx +19 -0
  416. package/src/components/icons/hero_icons/PauseCircle.jsx +10 -0
  417. package/src/components/icons/hero_icons/Point.jsx +8 -0
  418. package/src/components/icons/hero_icons/Question.jsx +7 -0
  419. package/src/components/icons/hero_icons/Refresh.jsx +7 -0
  420. package/src/components/icons/hero_icons/Reply.jsx +7 -0
  421. package/src/components/icons/hero_icons/Search.jsx +7 -0
  422. package/src/components/icons/hero_icons/Send.jsx +7 -0
  423. package/src/components/icons/hero_icons/Share.jsx +8 -0
  424. package/src/components/icons/hero_icons/SmallArrow.jsx +7 -0
  425. package/src/components/icons/hero_icons/Source.jsx +8 -0
  426. package/src/components/icons/hero_icons/Suggestion.jsx +9 -0
  427. package/src/components/icons/hero_icons/Twitter.jsx +10 -0
  428. package/src/components/icons/hero_icons/Underline.jsx +14 -0
  429. package/src/components/icons/hero_icons/Upvote.jsx +7 -0
  430. package/src/components/icons/hero_icons/User.jsx +7 -0
  431. package/src/components/icons/hero_icons/Versus.jsx +7 -0
  432. package/src/components/icons/hero_icons/Votebox.jsx +7 -0
  433. package/src/components/icons/hero_icons/index.js +51 -0
  434. package/src/components/icons/icon/Icon.docs.mdx +20 -0
  435. package/src/components/icons/icon/Icon.jsx +32 -0
  436. package/src/components/icons/icon/Icon.test.jsx +33 -0
  437. package/src/components/icons/icon/index.js +1 -0
  438. package/src/components/icons/icon_provider/IconProvider.docs.mdx +28 -0
  439. package/src/components/icons/icon_provider/IconProvider.jsx +19 -0
  440. package/src/components/icons/icon_provider/IconProvider.test.jsx +24 -0
  441. package/src/components/icons/icon_provider/index.js +1 -0
  442. package/src/components/icons/krone_icons/Alarm.jsx +27 -0
  443. package/src/components/icons/krone_icons/Announcement.jsx +16 -0
  444. package/src/components/icons/krone_icons/Arrow.jsx +7 -0
  445. package/src/components/icons/krone_icons/Blockquote.jsx +7 -0
  446. package/src/components/icons/krone_icons/Bold.jsx +7 -0
  447. package/src/components/icons/krone_icons/Camera.jsx +8 -0
  448. package/src/components/icons/krone_icons/Chat.jsx +29 -0
  449. package/src/components/icons/krone_icons/Check.jsx +7 -0
  450. package/src/components/icons/krone_icons/CheckBox.jsx +7 -0
  451. package/src/components/icons/krone_icons/CheckCircle.jsx +17 -0
  452. package/src/components/icons/krone_icons/Clap.jsx +29 -0
  453. package/src/components/icons/krone_icons/Clock.jsx +7 -0
  454. package/src/components/icons/krone_icons/Close.jsx +7 -0
  455. package/src/components/icons/krone_icons/Code.jsx +18 -0
  456. package/src/components/icons/krone_icons/Community.jsx +7 -0
  457. package/src/components/icons/krone_icons/Crown.jsx +7 -0
  458. package/src/components/icons/krone_icons/Document.jsx +7 -0
  459. package/src/components/icons/krone_icons/Downvote.jsx +7 -0
  460. package/src/components/icons/krone_icons/Ellipsis.jsx +18 -0
  461. package/src/components/icons/krone_icons/ExpertBadge.jsx +29 -0
  462. package/src/components/icons/krone_icons/Facebook.jsx +7 -0
  463. package/src/components/icons/krone_icons/Flag.jsx +7 -0
  464. package/src/components/icons/krone_icons/Home.jsx +29 -0
  465. package/src/components/icons/krone_icons/Italic.jsx +7 -0
  466. package/src/components/icons/krone_icons/KroneIcons.docs.mdx +21 -0
  467. package/src/components/icons/krone_icons/KroneIcons.stories.jsx +124 -0
  468. package/src/components/icons/krone_icons/KroneIcons.test.jsx +15 -0
  469. package/src/components/icons/krone_icons/LightArrow.jsx +7 -0
  470. package/src/components/icons/krone_icons/Link.jsx +8 -0
  471. package/src/components/icons/krone_icons/Login.jsx +11 -0
  472. package/src/components/icons/krone_icons/Logora.jsx +24 -0
  473. package/src/components/icons/krone_icons/Mail.jsx +7 -0
  474. package/src/components/icons/krone_icons/MinusCircle.jsx +16 -0
  475. package/src/components/icons/krone_icons/MobileClose.jsx +8 -0
  476. package/src/components/icons/krone_icons/MobileMenu.jsx +10 -0
  477. package/src/components/icons/krone_icons/Next.jsx +10 -0
  478. package/src/components/icons/krone_icons/OpenBlank.jsx +15 -0
  479. package/src/components/icons/krone_icons/OrderedList.jsx +7 -0
  480. package/src/components/icons/krone_icons/PauseCircle.jsx +10 -0
  481. package/src/components/icons/krone_icons/Point.jsx +8 -0
  482. package/src/components/icons/krone_icons/Question.jsx +29 -0
  483. package/src/components/icons/krone_icons/Refresh.jsx +7 -0
  484. package/src/components/icons/krone_icons/Reply.jsx +18 -0
  485. package/src/components/icons/krone_icons/Search.jsx +7 -0
  486. package/src/components/icons/krone_icons/Send.jsx +19 -0
  487. package/src/components/icons/krone_icons/Share.jsx +16 -0
  488. package/src/components/icons/krone_icons/SmallArrow.jsx +11 -0
  489. package/src/components/icons/krone_icons/Source.jsx +7 -0
  490. package/src/components/icons/krone_icons/Suggestion.jsx +29 -0
  491. package/src/components/icons/krone_icons/Twitter.jsx +10 -0
  492. package/src/components/icons/krone_icons/Underline.jsx +7 -0
  493. package/src/components/icons/krone_icons/Upvote.jsx +29 -0
  494. package/src/components/icons/krone_icons/User.jsx +30 -0
  495. package/src/components/icons/krone_icons/Versus.jsx +9 -0
  496. package/src/components/icons/krone_icons/Votebox.jsx +29 -0
  497. package/src/components/icons/krone_icons/index.js +52 -0
  498. package/src/components/icons/regular_icons/Alarm.jsx +7 -0
  499. package/src/components/icons/regular_icons/Announcement.jsx +16 -0
  500. package/src/components/icons/regular_icons/Arrow.jsx +7 -0
  501. package/src/components/icons/regular_icons/Blockquote.jsx +7 -0
  502. package/src/components/icons/regular_icons/Bold.jsx +7 -0
  503. package/src/components/icons/regular_icons/Camera.jsx +8 -0
  504. package/src/components/icons/regular_icons/Chat.jsx +10 -0
  505. package/src/components/icons/regular_icons/Check.jsx +7 -0
  506. package/src/components/icons/regular_icons/CheckCircle.jsx +17 -0
  507. package/src/components/icons/regular_icons/Checkbox.jsx +8 -0
  508. package/src/components/icons/regular_icons/Clap.jsx +7 -0
  509. package/src/components/icons/regular_icons/Clock.jsx +7 -0
  510. package/src/components/icons/regular_icons/Close.jsx +7 -0
  511. package/src/components/icons/regular_icons/Code.jsx +18 -0
  512. package/src/components/icons/regular_icons/Community.jsx +7 -0
  513. package/src/components/icons/regular_icons/Crown.jsx +7 -0
  514. package/src/components/icons/regular_icons/Document.jsx +7 -0
  515. package/src/components/icons/regular_icons/Downvote.jsx +7 -0
  516. package/src/components/icons/regular_icons/Ellipsis.jsx +8 -0
  517. package/src/components/icons/regular_icons/ExpertBadge.jsx +11 -0
  518. package/src/components/icons/regular_icons/Facebook.jsx +7 -0
  519. package/src/components/icons/regular_icons/Flag.jsx +7 -0
  520. package/src/components/icons/regular_icons/Home.jsx +7 -0
  521. package/src/components/icons/regular_icons/Italic.jsx +7 -0
  522. package/src/components/icons/regular_icons/LightArrow.jsx +7 -0
  523. package/src/components/icons/regular_icons/Link.jsx +8 -0
  524. package/src/components/icons/regular_icons/Login.jsx +11 -0
  525. package/src/components/icons/regular_icons/Logora.jsx +24 -0
  526. package/src/components/icons/regular_icons/Mail.jsx +7 -0
  527. package/src/components/icons/regular_icons/MinusCircle.jsx +16 -0
  528. package/src/components/icons/regular_icons/MobileClose.jsx +8 -0
  529. package/src/components/icons/regular_icons/MobileMenu.jsx +10 -0
  530. package/src/components/icons/regular_icons/Next.jsx +10 -0
  531. package/src/components/icons/regular_icons/OpenBlank.jsx +15 -0
  532. package/src/components/icons/regular_icons/OrderedList.jsx +7 -0
  533. package/src/components/icons/regular_icons/PauseCircle.jsx +10 -0
  534. package/src/components/icons/regular_icons/Point.jsx +8 -0
  535. package/src/components/icons/regular_icons/Question.jsx +8 -0
  536. package/src/components/icons/regular_icons/Refresh.jsx +7 -0
  537. package/src/components/icons/regular_icons/RegularIcons.docs.mdx +21 -0
  538. package/src/components/icons/regular_icons/RegularIcons.stories.jsx +123 -0
  539. package/src/components/icons/regular_icons/RegularIcons.test.jsx +15 -0
  540. package/src/components/icons/regular_icons/Reply.jsx +7 -0
  541. package/src/components/icons/regular_icons/Search.jsx +7 -0
  542. package/src/components/icons/regular_icons/Send.jsx +7 -0
  543. package/src/components/icons/regular_icons/Share.jsx +14 -0
  544. package/src/components/icons/regular_icons/SmallArrow.jsx +11 -0
  545. package/src/components/icons/regular_icons/Source.jsx +7 -0
  546. package/src/components/icons/regular_icons/Suggestion.jsx +7 -0
  547. package/src/components/icons/regular_icons/Twitter.jsx +10 -0
  548. package/src/components/icons/regular_icons/Underline.jsx +7 -0
  549. package/src/components/icons/regular_icons/Upvote.jsx +7 -0
  550. package/src/components/icons/regular_icons/User.jsx +7 -0
  551. package/src/components/icons/regular_icons/Versus.jsx +9 -0
  552. package/src/components/icons/regular_icons/Votebox.jsx +7 -0
  553. package/src/components/icons/regular_icons/index.js +52 -0
  554. package/src/components/icons/spiegel_icons/Alarm.jsx +7 -0
  555. package/src/components/icons/spiegel_icons/Announcement.jsx +16 -0
  556. package/src/components/icons/spiegel_icons/Arrow.jsx +7 -0
  557. package/src/components/icons/spiegel_icons/Blockquote.jsx +14 -0
  558. package/src/components/icons/spiegel_icons/Bold.jsx +7 -0
  559. package/src/components/icons/spiegel_icons/Camera.jsx +8 -0
  560. package/src/components/icons/spiegel_icons/Chat.jsx +7 -0
  561. package/src/components/icons/spiegel_icons/Check.jsx +11 -0
  562. package/src/components/icons/spiegel_icons/CheckCircle.jsx +8 -0
  563. package/src/components/icons/spiegel_icons/Checkbox.jsx +14 -0
  564. package/src/components/icons/spiegel_icons/Clap.jsx +15 -0
  565. package/src/components/icons/spiegel_icons/Clock.jsx +15 -0
  566. package/src/components/icons/spiegel_icons/Close.jsx +7 -0
  567. package/src/components/icons/spiegel_icons/Code.jsx +18 -0
  568. package/src/components/icons/spiegel_icons/Community.jsx +7 -0
  569. package/src/components/icons/spiegel_icons/Crown.jsx +7 -0
  570. package/src/components/icons/spiegel_icons/Downvote.jsx +7 -0
  571. package/src/components/icons/spiegel_icons/Ellipsis.jsx +8 -0
  572. package/src/components/icons/spiegel_icons/ExpertBadge.jsx +16 -0
  573. package/src/components/icons/spiegel_icons/Facebook.jsx +7 -0
  574. package/src/components/icons/spiegel_icons/Flag.jsx +8 -0
  575. package/src/components/icons/spiegel_icons/Home.jsx +7 -0
  576. package/src/components/icons/spiegel_icons/Italic.jsx +7 -0
  577. package/src/components/icons/spiegel_icons/LightArrow.jsx +7 -0
  578. package/src/components/icons/spiegel_icons/Link.jsx +17 -0
  579. package/src/components/icons/spiegel_icons/Login.jsx +7 -0
  580. package/src/components/icons/spiegel_icons/Logora.jsx +24 -0
  581. package/src/components/icons/spiegel_icons/Mail.jsx +7 -0
  582. package/src/components/icons/spiegel_icons/MinusCircle.jsx +8 -0
  583. package/src/components/icons/spiegel_icons/MobileClose.jsx +8 -0
  584. package/src/components/icons/spiegel_icons/MobileMenu.jsx +10 -0
  585. package/src/components/icons/spiegel_icons/Next.jsx +10 -0
  586. package/src/components/icons/spiegel_icons/OpenBlank.jsx +15 -0
  587. package/src/components/icons/spiegel_icons/OrderedList.jsx +20 -0
  588. package/src/components/icons/spiegel_icons/PauseCircle.jsx +8 -0
  589. package/src/components/icons/spiegel_icons/Point.jsx +8 -0
  590. package/src/components/icons/spiegel_icons/Question.jsx +17 -0
  591. package/src/components/icons/spiegel_icons/Refresh.jsx +7 -0
  592. package/src/components/icons/spiegel_icons/Reply.jsx +7 -0
  593. package/src/components/icons/spiegel_icons/Search.jsx +7 -0
  594. package/src/components/icons/spiegel_icons/Send.jsx +7 -0
  595. package/src/components/icons/spiegel_icons/Share.jsx +14 -0
  596. package/src/components/icons/spiegel_icons/SmallArrow.jsx +7 -0
  597. package/src/components/icons/spiegel_icons/Source.jsx +7 -0
  598. package/src/components/icons/spiegel_icons/SpiegelIcons.docs.mdx +21 -0
  599. package/src/components/icons/spiegel_icons/SpiegelIcons.stories.jsx +121 -0
  600. package/src/components/icons/spiegel_icons/SpiegelIcons.test.jsx +15 -0
  601. package/src/components/icons/spiegel_icons/Suggestion.jsx +7 -0
  602. package/src/components/icons/spiegel_icons/Twitter.jsx +10 -0
  603. package/src/components/icons/spiegel_icons/Underline.jsx +14 -0
  604. package/src/components/icons/spiegel_icons/Upvote.jsx +7 -0
  605. package/src/components/icons/spiegel_icons/User.jsx +7 -0
  606. package/src/components/icons/spiegel_icons/Versus.jsx +11 -0
  607. package/src/components/icons/spiegel_icons/Votebox.jsx +14 -0
  608. package/src/components/icons/spiegel_icons/index.js +51 -0
  609. package/src/components/information/information_box/InformationBox.docs.mdx +28 -0
  610. package/src/components/information/information_box/InformationBox.jsx +54 -0
  611. package/src/components/information/information_box/InformationBox.module.scss +92 -0
  612. package/src/components/information/information_box/InformationBox.stories.jsx +50 -0
  613. package/src/components/information/information_box/InformationBox.test.jsx +94 -0
  614. package/src/components/information/information_box/index.js +1 -0
  615. package/src/components/input/argument_input/ArgumentInput.docs.mdx +29 -0
  616. package/src/components/input/argument_input/ArgumentInput.jsx +420 -0
  617. package/src/components/input/argument_input/ArgumentInput.module.scss +166 -0
  618. package/src/components/input/argument_input/ArgumentInput.stories.jsx +181 -0
  619. package/src/components/input/argument_input/ArgumentInput.test.jsx +482 -0
  620. package/src/components/input/argument_input/index.js +1 -0
  621. package/src/components/input/checkbox/hidden/hidden-checkbox.docs.mdx +4 -0
  622. package/src/components/input/checkbox/hidden/hidden-checkbox.jsx +8 -0
  623. package/src/components/input/checkbox/hidden/hidden-checkbox.module.scss +28 -0
  624. package/src/components/input/checkbox/hidden/hidden-checkbox.stories.jsx +73 -0
  625. package/src/components/input/checkbox/hidden/index.js +1 -0
  626. package/src/components/input/checkbox/indicator/checkbox-indicator.docs.mdx +9 -0
  627. package/src/components/input/checkbox/indicator/checkbox-indicator.jsx +17 -0
  628. package/src/components/input/checkbox/indicator/checkbox-indicator.module.scss +26 -0
  629. package/src/components/input/checkbox/indicator/checkbox-indicator.stories.jsx +51 -0
  630. package/src/components/input/checkbox/indicator/index.js +1 -0
  631. package/src/components/input/checkbox/label/checkbox-label.docs.mdx +39 -0
  632. package/src/components/input/checkbox/label/checkbox-label.jsx +40 -0
  633. package/src/components/input/checkbox/label/checkbox.stories.jsx +57 -0
  634. package/src/components/input/checkbox/label/index.js +1 -0
  635. package/src/components/input/input_provider/InputProvider.docs.mdx +38 -0
  636. package/src/components/input/input_provider/InputProvider.jsx +16 -0
  637. package/src/components/input/input_provider/InputProvider.test.jsx +102 -0
  638. package/src/components/input/input_provider/index.js +2 -0
  639. package/src/components/input/input_provider/useInput.jsx +8 -0
  640. package/src/components/input/search_input/SearchInput.docs.mdx +25 -0
  641. package/src/components/input/search_input/SearchInput.jsx +71 -0
  642. package/src/components/input/search_input/SearchInput.module.scss +18 -0
  643. package/src/components/input/search_input/SearchInput.stories.jsx +45 -0
  644. package/src/components/input/search_input/SearchInput.test.jsx +95 -0
  645. package/src/components/input/search_input/index.js +1 -0
  646. package/src/components/input/select/Select.docs.mdx +37 -0
  647. package/src/components/input/select/Select.jsx +102 -0
  648. package/src/components/input/select/Select.module.scss +72 -0
  649. package/src/components/input/select/Select.stories.jsx +75 -0
  650. package/src/components/input/select/Select.test.jsx +136 -0
  651. package/src/components/input/select/index.js +1 -0
  652. package/src/components/input/text_editor/EditorTheme.js +71 -0
  653. package/src/components/input/text_editor/TextEditor.docs.mdx +31 -0
  654. package/src/components/input/text_editor/TextEditor.jsx +205 -0
  655. package/src/components/input/text_editor/TextEditor.module.scss +140 -0
  656. package/src/components/input/text_editor/TextEditor.stories.jsx +227 -0
  657. package/src/components/input/text_editor/TextEditor.test.jsx +654 -0
  658. package/src/components/input/text_editor/index.js +2 -0
  659. package/src/components/input/text_editor/lexicalToHtml.js +23 -0
  660. package/src/components/input/text_editor/plugins/AutoSavePlugin.jsx +37 -0
  661. package/src/components/input/text_editor/plugins/FocusPlugin.jsx +19 -0
  662. package/src/components/input/text_editor/plugins/MaxLengthPlugin.jsx +44 -0
  663. package/src/components/input/text_editor/plugins/ResetPlugin.jsx +35 -0
  664. package/src/components/input/text_editor/plugins/SetContentPlugin.jsx +24 -0
  665. package/src/components/input/text_editor/plugins/SetRichContentPlugin.jsx +20 -0
  666. package/src/components/input/text_editor/plugins/ToolbarPlugin.jsx +233 -0
  667. package/src/components/input/text_editor/plugins/ToolbarPlugin.module.scss +77 -0
  668. package/src/components/input/text_input/TextInput.docs.mdx +73 -0
  669. package/src/components/input/text_input/TextInput.jsx +46 -0
  670. package/src/components/input/text_input/TextInput.module.scss +146 -0
  671. package/src/components/input/text_input/TextInput.stories.jsx +101 -0
  672. package/src/components/input/text_input/TextInput.test.jsx +64 -0
  673. package/src/components/input/text_input/color-accent.js +16 -0
  674. package/src/components/input/text_input/index.js +3 -0
  675. package/src/components/input/text_input/message.jsx +12 -0
  676. package/src/components/input/toggle/Toggle.docs.mdx +23 -0
  677. package/src/components/input/toggle/Toggle.jsx +25 -0
  678. package/src/components/input/toggle/Toggle.module.scss +73 -0
  679. package/src/components/input/toggle/Toggle.stories.jsx +42 -0
  680. package/src/components/input/toggle/Toggle.test.jsx +39 -0
  681. package/src/components/input/toggle/index.js +1 -0
  682. package/src/components/input/toggle_position/TogglePosition.docs.mdx +20 -0
  683. package/src/components/input/toggle_position/TogglePosition.jsx +55 -0
  684. package/src/components/input/toggle_position/TogglePosition.module.scss +46 -0
  685. package/src/components/input/toggle_position/TogglePosition.stories.jsx +96 -0
  686. package/src/components/input/toggle_position/TogglePosition.test.jsx +66 -0
  687. package/src/components/input/toggle_position/index.js +1 -0
  688. package/src/components/intl/intl_provider/IntlContext.jsx +3 -0
  689. package/src/components/intl/intl_provider/IntlProvider.docs.mdx +37 -0
  690. package/src/components/intl/intl_provider/IntlProvider.jsx +92 -0
  691. package/src/components/intl/intl_provider/IntlProvider.test.jsx +153 -0
  692. package/src/components/intl/intl_provider/index.js +3 -0
  693. package/src/components/intl/intl_provider/locales/en.json +4 -0
  694. package/src/components/intl/intl_provider/locales/es.json +4 -0
  695. package/src/components/intl/intl_provider/locales/fr.json +6 -0
  696. package/src/components/intl/intl_provider/locales/index.js +11 -0
  697. package/src/components/intl/intl_provider/useLocale.jsx +8 -0
  698. package/src/components/list/list_provider/ListProvider.docs.mdx +51 -0
  699. package/src/components/list/list_provider/ListProvider.jsx +32 -0
  700. package/src/components/list/list_provider/ListProvider.stories.jsx +92 -0
  701. package/src/components/list/list_provider/ListProvider.test.jsx +137 -0
  702. package/src/components/list/list_provider/index.js +2 -0
  703. package/src/components/list/list_provider/useList.jsx +8 -0
  704. package/src/components/list/paginated_list/PaginatedList.docs.mdx +68 -0
  705. package/src/components/list/paginated_list/PaginatedList.jsx +397 -0
  706. package/src/components/list/paginated_list/PaginatedList.module.scss +88 -0
  707. package/src/components/list/paginated_list/PaginatedList.stories.jsx +301 -0
  708. package/src/components/list/paginated_list/PaginatedList.test.jsx +1335 -0
  709. package/src/components/list/paginated_list/VotePaginatedList.jsx +26 -0
  710. package/src/components/list/paginated_list/VotePaginatedList.test.jsx +1518 -0
  711. package/src/components/list/paginated_list/action_bar/ActionBar.jsx +132 -0
  712. package/src/components/list/paginated_list/action_bar/ActionBar.module.scss +81 -0
  713. package/src/components/list/paginated_list/index.js +3 -0
  714. package/src/components/list/pagination/Pagination.docs.mdx +32 -0
  715. package/src/components/list/pagination/Pagination.jsx +58 -0
  716. package/src/components/list/pagination/Pagination.module.scss +10 -0
  717. package/src/components/list/pagination/Pagination.stories.jsx +44 -0
  718. package/src/components/list/pagination/Pagination.test.jsx +80 -0
  719. package/src/components/list/pagination/index.js +1 -0
  720. package/src/components/modal/side_modal/SideModal.docs.mdx +31 -0
  721. package/src/components/modal/side_modal/SideModal.jsx +85 -0
  722. package/src/components/modal/side_modal/SideModal.module.scss +83 -0
  723. package/src/components/modal/side_modal/SideModal.stories.jsx +112 -0
  724. package/src/components/modal/side_modal/SideModal.test.jsx +36 -0
  725. package/src/components/modal/side_modal/index.js +1 -0
  726. package/src/components/navbar/navbar_button/NavbarButton.docs.mdx +37 -0
  727. package/src/components/navbar/navbar_button/NavbarButton.jsx +43 -0
  728. package/src/components/navbar/navbar_button/NavbarButton.module.scss +45 -0
  729. package/src/components/navbar/navbar_button/NavbarButton.stories.jsx +93 -0
  730. package/src/components/navbar/navbar_button/NavbarButton.test.jsx +67 -0
  731. package/src/components/navbar/navbar_button/index.js +1 -0
  732. package/src/components/navbar/navbar_modal/NavbarModal.docs.mdx +24 -0
  733. package/src/components/navbar/navbar_modal/NavbarModal.jsx +175 -0
  734. package/src/components/navbar/navbar_modal/NavbarModal.module.scss +132 -0
  735. package/src/components/navbar/navbar_modal/NavbarModal.stories.jsx +96 -0
  736. package/src/components/navbar/navbar_modal/NavbarModal.test.jsx +155 -0
  737. package/src/components/navbar/navbar_modal/index.js +1 -0
  738. package/src/components/notification/notification_item/NotificationItem.docs.mdx +35 -0
  739. package/src/components/notification/notification_item/NotificationItem.jsx +71 -0
  740. package/src/components/notification/notification_item/NotificationItem.module.scss +56 -0
  741. package/src/components/notification/notification_item/NotificationItem.stories.jsx +121 -0
  742. package/src/components/notification/notification_item/NotificationItem.test.jsx +97 -0
  743. package/src/components/notification/notification_item/index.js +1 -0
  744. package/src/components/notification/notification_menu/NotificationMenu.docs.mdx +25 -0
  745. package/src/components/notification/notification_menu/NotificationMenu.jsx +61 -0
  746. package/src/components/notification/notification_menu/NotificationMenu.module.scss +49 -0
  747. package/src/components/notification/notification_menu/NotificationMenu.stories.jsx +94 -0
  748. package/src/components/notification/notification_menu/NotificationMenu.test.jsx +131 -0
  749. package/src/components/notification/notification_menu/index.js +1 -0
  750. package/src/components/progress/loader/Loader.docs.mdx +13 -0
  751. package/src/components/progress/loader/Loader.jsx +9 -0
  752. package/src/components/progress/loader/Loader.module.scss +26 -0
  753. package/src/components/progress/loader/Loader.stories.jsx +11 -0
  754. package/src/components/progress/loader/Loader.test.jsx +11 -0
  755. package/src/components/progress/loader/index.js +3 -0
  756. package/src/components/progress/progress_bar/ProgressBar.docs.mdx +29 -0
  757. package/src/components/progress/progress_bar/ProgressBar.jsx +75 -0
  758. package/src/components/progress/progress_bar/ProgressBar.module.scss +87 -0
  759. package/src/components/progress/progress_bar/ProgressBar.stories.jsx +43 -0
  760. package/src/components/progress/progress_bar/ProgressBar.test.jsx +126 -0
  761. package/src/components/progress/progress_bar/index.js +1 -0
  762. package/src/components/proposal/proposal_box/ProposalBox.docs.mdx +39 -0
  763. package/src/components/proposal/proposal_box/ProposalBox.jsx +108 -0
  764. package/src/components/proposal/proposal_box/ProposalBox.module.scss +80 -0
  765. package/src/components/proposal/proposal_box/ProposalBox.stories.jsx +161 -0
  766. package/src/components/proposal/proposal_box/ProposalBox.test.jsx +137 -0
  767. package/src/components/proposal/proposal_box/index.js +1 -0
  768. package/src/components/report/report_box/ReportBox.docs.mdx +35 -0
  769. package/src/components/report/report_box/ReportBox.jsx +120 -0
  770. package/src/components/report/report_box/ReportBox.module.scss +54 -0
  771. package/src/components/report/report_box/ReportBox.stories.jsx +247 -0
  772. package/src/components/report/report_box/ReportBox.test.jsx +232 -0
  773. package/src/components/report/report_box/index.js +1 -0
  774. package/src/components/section/section_box/SectionBox.docs.mdx +19 -0
  775. package/src/components/section/section_box/SectionBox.jsx +32 -0
  776. package/src/components/section/section_box/SectionBox.module.scss +57 -0
  777. package/src/components/section/section_box/SectionBox.stories.jsx +39 -0
  778. package/src/components/section/section_box/SectionBox.test.jsx +44 -0
  779. package/src/components/section/section_box/index.js +1 -0
  780. package/src/components/share/share_box/ShareBox.docs.mdx +27 -0
  781. package/src/components/share/share_box/ShareBox.jsx +71 -0
  782. package/src/components/share/share_box/ShareBox.module.scss +38 -0
  783. package/src/components/share/share_box/ShareBox.stories.jsx +42 -0
  784. package/src/components/share/share_box/ShareBox.test.jsx +142 -0
  785. package/src/components/share/share_box/index.js +1 -0
  786. package/src/components/share/share_button/ShareButton.docs.mdx +26 -0
  787. package/src/components/share/share_button/ShareButton.jsx +102 -0
  788. package/src/components/share/share_button/ShareButton.module.scss +68 -0
  789. package/src/components/share/share_button/ShareButton.stories.jsx +51 -0
  790. package/src/components/share/share_button/ShareButton.test.jsx +117 -0
  791. package/src/components/share/share_button/index.js +1 -0
  792. package/src/components/share/share_modal/ShareModal.docs.mdx +29 -0
  793. package/src/components/share/share_modal/ShareModal.jsx +49 -0
  794. package/src/components/share/share_modal/ShareModal.module.scss +21 -0
  795. package/src/components/share/share_modal/ShareModal.stories.jsx +48 -0
  796. package/src/components/share/share_modal/ShareModal.test.jsx +70 -0
  797. package/src/components/share/share_modal/index.js +1 -0
  798. package/src/components/skeleton/box_skeleton/BoxSkeleton.docs.mdx +14 -0
  799. package/src/components/skeleton/box_skeleton/BoxSkeleton.jsx +38 -0
  800. package/src/components/skeleton/box_skeleton/BoxSkeleton.stories.jsx +46 -0
  801. package/src/components/skeleton/box_skeleton/BoxSkeleton.test.jsx +39 -0
  802. package/src/components/skeleton/box_skeleton/index.js +1 -0
  803. package/src/components/skeleton/user_content_skeleton/UserContentSkeleton.docs.mdx +15 -0
  804. package/src/components/skeleton/user_content_skeleton/UserContentSkeleton.jsx +56 -0
  805. package/src/components/skeleton/user_content_skeleton/UserContentSkeleton.module.scss +78 -0
  806. package/src/components/skeleton/user_content_skeleton/UserContentSkeleton.stories.jsx +44 -0
  807. package/src/components/skeleton/user_content_skeleton/UserContentSkeleton.test.jsx +55 -0
  808. package/src/components/skeleton/user_content_skeleton/index.js +1 -0
  809. package/src/components/source/context_source_box/ContextSourceBox.docs.mdx +27 -0
  810. package/src/components/source/context_source_box/ContextSourceBox.jsx +38 -0
  811. package/src/components/source/context_source_box/ContextSourceBox.module.scss +50 -0
  812. package/src/components/source/context_source_box/ContextSourceBox.stories.jsx +36 -0
  813. package/src/components/source/context_source_box/ContextSourceBox.test.jsx +46 -0
  814. package/src/components/source/context_source_box/index.js +1 -0
  815. package/src/components/source/context_source_list/ContextSourceList.docs.mdx +37 -0
  816. package/src/components/source/context_source_list/ContextSourceList.jsx +42 -0
  817. package/src/components/source/context_source_list/ContextSourceList.module.scss +38 -0
  818. package/src/components/source/context_source_list/ContextSourceList.stories.jsx +39 -0
  819. package/src/components/source/context_source_list/ContextSourceList.test.jsx +47 -0
  820. package/src/components/source/context_source_list/index.js +1 -0
  821. package/src/components/source/source_box/SourceBox.docs.mdx +23 -0
  822. package/src/components/source/source_box/SourceBox.jsx +43 -0
  823. package/src/components/source/source_box/SourceBox.module.scss +43 -0
  824. package/src/components/source/source_box/SourceBox.stories.jsx +26 -0
  825. package/src/components/source/source_box/SourceBox.test.jsx +30 -0
  826. package/src/components/source/source_box/index.js +1 -0
  827. package/src/components/source/source_list_item/SourceListItem.docs.mdx +23 -0
  828. package/src/components/source/source_list_item/SourceListItem.jsx +28 -0
  829. package/src/components/source/source_list_item/SourceListItem.module.scss +33 -0
  830. package/src/components/source/source_list_item/SourceListItem.stories.jsx +40 -0
  831. package/src/components/source/source_list_item/SourceListItem.test.jsx +41 -0
  832. package/src/components/source/source_list_item/index.js +1 -0
  833. package/src/components/source/source_modal/SourceModal.docs.mdx +29 -0
  834. package/src/components/source/source_modal/SourceModal.jsx +157 -0
  835. package/src/components/source/source_modal/SourceModal.module.scss +45 -0
  836. package/src/components/source/source_modal/SourceModal.stories.jsx +82 -0
  837. package/src/components/source/source_modal/SourceModal.test.jsx +180 -0
  838. package/src/components/source/source_modal/index.js +1 -0
  839. package/src/components/styles/display/_display.scss +127 -0
  840. package/src/components/styles/display/display.docs.mdx +8 -0
  841. package/src/components/styles/display/index.scss +1 -0
  842. package/src/components/styles/flex/_flex.scss +55 -0
  843. package/src/components/styles/flex/flex.docs.mdx +8 -0
  844. package/src/components/styles/flex/index.scss +1 -0
  845. package/src/components/styles/spacing/_spacing.scss +107 -0
  846. package/src/components/styles/spacing/index.scss +1 -0
  847. package/src/components/styles/spacing/spacing.docs.mdx +8 -0
  848. package/src/components/styles/tabs/_tabs.scss +159 -0
  849. package/src/components/styles/tabs/index.scss +1 -0
  850. package/src/components/styles/tabs/tabs.docs.mdx +8 -0
  851. package/src/components/styles/theme/_theme.scss +51 -0
  852. package/src/components/styles/theme/index.scss +1 -0
  853. package/src/components/styles/theme/theme.docs.mdx +89 -0
  854. package/src/components/suggestion/suggestion_banner/SuggestionBanner.docs.mdx +35 -0
  855. package/src/components/suggestion/suggestion_banner/SuggestionBanner.jsx +86 -0
  856. package/src/components/suggestion/suggestion_banner/SuggestionBanner.module.scss +93 -0
  857. package/src/components/suggestion/suggestion_banner/SuggestionBanner.stories.jsx +128 -0
  858. package/src/components/suggestion/suggestion_banner/SuggestionBanner.test.jsx +237 -0
  859. package/src/components/suggestion/suggestion_banner/index.js +1 -0
  860. package/src/components/suggestion/suggestion_box/SuggestionBox.docs.mdx +39 -0
  861. package/src/components/suggestion/suggestion_box/SuggestionBox.jsx +112 -0
  862. package/src/components/suggestion/suggestion_box/SuggestionBox.module.scss +55 -0
  863. package/src/components/suggestion/suggestion_box/SuggestionBox.stories.jsx +147 -0
  864. package/src/components/suggestion/suggestion_box/SuggestionBox.test.jsx +184 -0
  865. package/src/components/suggestion/suggestion_box/index.js +1 -0
  866. package/src/components/suggestion/suggestion_input/SuggestionInput.docs.mdx +19 -0
  867. package/src/components/suggestion/suggestion_input/SuggestionInput.jsx +212 -0
  868. package/src/components/suggestion/suggestion_input/SuggestionInput.module.scss +50 -0
  869. package/src/components/suggestion/suggestion_input/SuggestionInput.stories.jsx +87 -0
  870. package/src/components/suggestion/suggestion_input/SuggestionInput.test.jsx +77 -0
  871. package/src/components/suggestion/suggestion_input/index.js +1 -0
  872. package/src/components/summary/argument_summary_box/ArgumentSummaryBox.docs.mdx +19 -0
  873. package/src/components/summary/argument_summary_box/ArgumentSummaryBox.jsx +40 -0
  874. package/src/components/summary/argument_summary_box/ArgumentSummaryBox.module.scss +67 -0
  875. package/src/components/summary/argument_summary_box/ArgumentSummaryBox.stories.jsx +57 -0
  876. package/src/components/summary/argument_summary_box/ArgumentSummaryBox.test.jsx +18 -0
  877. package/src/components/summary/argument_summary_box/index.js +1 -0
  878. package/src/components/summary/keyword_box/KeywordBox.docs.mdx +21 -0
  879. package/src/components/summary/keyword_box/KeywordBox.jsx +43 -0
  880. package/src/components/summary/keyword_box/KeywordBox.module.scss +54 -0
  881. package/src/components/summary/keyword_box/KeywordBox.stories.jsx +49 -0
  882. package/src/components/summary/keyword_box/KeywordBox.test.jsx +47 -0
  883. package/src/components/summary/keyword_box/index.js +1 -0
  884. package/src/components/summary/summary/Summary.docs.mdx +23 -0
  885. package/src/components/summary/summary/Summary.jsx +93 -0
  886. package/src/components/summary/summary/Summary.module.scss +26 -0
  887. package/src/components/summary/summary/Summary.stories.jsx +95 -0
  888. package/src/components/summary/summary/Summary.test.jsx +116 -0
  889. package/src/components/summary/summary/index.js +1 -0
  890. package/src/components/summary/summary_box/SummaryBox.docs.mdx +19 -0
  891. package/src/components/summary/summary_box/SummaryBox.jsx +39 -0
  892. package/src/components/summary/summary_box/SummaryBox.module.scss +56 -0
  893. package/src/components/summary/summary_box/SummaryBox.stories.jsx +83 -0
  894. package/src/components/summary/summary_box/SummaryBox.test.jsx +47 -0
  895. package/src/components/summary/summary_box/SummaryBoxComposition.module.scss +3 -0
  896. package/src/components/summary/summary_box/index.js +1 -0
  897. package/src/components/tag/tag/Tag.docs.mdx +19 -0
  898. package/src/components/tag/tag/Tag.jsx +35 -0
  899. package/src/components/tag/tag/Tag.module.scss +34 -0
  900. package/src/components/tag/tag/Tag.stories.jsx +70 -0
  901. package/src/components/tag/tag/Tag.test.jsx +29 -0
  902. package/src/components/tag/tag/index.js +1 -0
  903. package/src/components/text/expandable_text/ArrowIcon.jsx +7 -0
  904. package/src/components/text/expandable_text/ExpandableText.docs.mdx +42 -0
  905. package/src/components/text/expandable_text/ExpandableText.jsx +81 -0
  906. package/src/components/text/expandable_text/ExpandableText.module.scss +76 -0
  907. package/src/components/text/expandable_text/ExpandableText.stories.jsx +63 -0
  908. package/src/components/text/expandable_text/ExpandableText.test.jsx +23 -0
  909. package/src/components/text/expandable_text/index.js +1 -0
  910. package/src/components/text/read_more/ReadMore.docs.mdx +23 -0
  911. package/src/components/text/read_more/ReadMore.jsx +104 -0
  912. package/src/components/text/read_more/ReadMore.module.scss +51 -0
  913. package/src/components/text/read_more/ReadMore.stories.jsx +141 -0
  914. package/src/components/text/read_more/ReadMore.test.jsx +87 -0
  915. package/src/components/text/read_more/index.js +1 -0
  916. package/src/components/tools/hash_scroll/HashScroll.docs.mdx +27 -0
  917. package/src/components/tools/hash_scroll/HashScroll.jsx +36 -0
  918. package/src/components/tools/hash_scroll/HashScroll.test.jsx +66 -0
  919. package/src/components/tools/hash_scroll/index.js +1 -0
  920. package/src/components/tools/scroll_to_top/ScrollToTop.docs.mdx +28 -0
  921. package/src/components/tools/scroll_to_top/ScrollToTop.jsx +22 -0
  922. package/src/components/tools/scroll_to_top/ScrollToTop.stories.jsx +40 -0
  923. package/src/components/tools/scroll_to_top/ScrollToTop.test.jsx +36 -0
  924. package/src/components/tools/scroll_to_top/index.js +1 -0
  925. package/src/components/translation/translated_content/TranslatedContent.jsx +24 -0
  926. package/src/components/translation/translated_content/TranslatedContent.test.jsx +30 -0
  927. package/src/components/translation/translated_content/index.js +3 -0
  928. package/src/components/translation/translated_content/useTranslatedContent.docs.mdx +80 -0
  929. package/src/components/translation/translated_content/useTranslatedContent.jsx +57 -0
  930. package/src/components/translation/translated_content/useTranslatedContent.test.jsx +118 -0
  931. package/src/components/translation/translation_button/TranslationButton.docs.mdx +18 -0
  932. package/src/components/translation/translation_button/TranslationButton.jsx +46 -0
  933. package/src/components/translation/translation_button/TranslationButton.module.scss +10 -0
  934. package/src/components/translation/translation_button/TranslationButton.stories.jsx +30 -0
  935. package/src/components/translation/translation_button/TranslationButton.test.jsx +35 -0
  936. package/src/components/translation/translation_button/index.js +1 -0
  937. package/src/components/user/author_box/AuthorBox.docs.mdx +35 -0
  938. package/src/components/user/author_box/AuthorBox.jsx +128 -0
  939. package/src/components/user/author_box/AuthorBox.module.scss +110 -0
  940. package/src/components/user/author_box/AuthorBox.stories.jsx +193 -0
  941. package/src/components/user/author_box/AuthorBox.test.jsx +171 -0
  942. package/src/components/user/author_box/index.js +1 -0
  943. package/src/components/user/avatar/Avatar.docs.mdx +31 -0
  944. package/src/components/user/avatar/Avatar.jsx +63 -0
  945. package/src/components/user/avatar/Avatar.module.scss +30 -0
  946. package/src/components/user/avatar/Avatar.stories.jsx +79 -0
  947. package/src/components/user/avatar/Avatar.test.jsx +114 -0
  948. package/src/components/user/avatar/DefaultAvatar.jsx +13 -0
  949. package/src/components/user/avatar/index.js +1 -0
  950. package/src/components/user/avatar_selector/AvatarSelector.docs.mdx +25 -0
  951. package/src/components/user/avatar_selector/AvatarSelector.jsx +65 -0
  952. package/src/components/user/avatar_selector/AvatarSelector.module.scss +105 -0
  953. package/src/components/user/avatar_selector/AvatarSelector.stories.jsx +46 -0
  954. package/src/components/user/avatar_selector/AvatarSelector.test.jsx +98 -0
  955. package/src/components/user/avatar_selector/index.js +1 -0
  956. package/src/components/user/update_user_info_modal/UpdateUserInfoModal.docs.mdx +22 -0
  957. package/src/components/user/update_user_info_modal/UpdateUserInfoModal.jsx +254 -0
  958. package/src/components/user/update_user_info_modal/UpdateUserInfoModal.module.scss +176 -0
  959. package/src/components/user/update_user_info_modal/UpdateUserInfoModal.stories.jsx +113 -0
  960. package/src/components/user/update_user_info_modal/UpdateUserInfoModal.test.jsx +213 -0
  961. package/src/components/user/update_user_info_modal/index.js +2 -0
  962. package/src/components/user/update_user_info_modal/useUpdateUserInfo.jsx +40 -0
  963. package/src/components/user/user_box/UserBox.docs.mdx +21 -0
  964. package/src/components/user/user_box/UserBox.jsx +59 -0
  965. package/src/components/user/user_box/UserBox.module.scss +86 -0
  966. package/src/components/user/user_box/UserBox.stories.jsx +82 -0
  967. package/src/components/user/user_box/UserBox.test.jsx +95 -0
  968. package/src/components/user/user_box/index.js +1 -0
  969. package/src/components/user/user_box_small/UserBoxSmall.docs.mdx +20 -0
  970. package/src/components/user/user_box_small/UserBoxSmall.jsx +36 -0
  971. package/src/components/user/user_box_small/UserBoxSmall.module.scss +21 -0
  972. package/src/components/user/user_box_small/UserBoxSmall.stories.jsx +38 -0
  973. package/src/components/user/user_box_small/UserBoxSmall.test.jsx +49 -0
  974. package/src/components/user/user_box_small/index.js +1 -0
  975. package/src/components/user_content/content_footer/ContentFooter.docs.mdx +36 -0
  976. package/src/components/user_content/content_footer/ContentFooter.jsx +234 -0
  977. package/src/components/user_content/content_footer/ContentFooter.module.scss +79 -0
  978. package/src/components/user_content/content_footer/ContentFooter.stories.jsx +438 -0
  979. package/src/components/user_content/content_footer/ContentFooter.test.jsx +246 -0
  980. package/src/components/user_content/content_footer/index.js +1 -0
  981. package/src/components/user_content/content_header/ContentHeader.docs.mdx +27 -0
  982. package/src/components/user_content/content_header/ContentHeader.jsx +131 -0
  983. package/src/components/user_content/content_header/ContentHeader.module.scss +111 -0
  984. package/src/components/user_content/content_header/ContentHeader.stories.jsx +221 -0
  985. package/src/components/user_content/content_header/ContentHeader.test.jsx +98 -0
  986. package/src/components/user_content/content_header/index.js +1 -0
  987. package/src/components/user_content/summary_content_box/SummaryContentBox.docs.mdx +25 -0
  988. package/src/components/user_content/summary_content_box/SummaryContentBox.jsx +89 -0
  989. package/src/components/user_content/summary_content_box/SummaryContentBox.module.scss +65 -0
  990. package/src/components/user_content/summary_content_box/SummaryContentBox.stories.jsx +130 -0
  991. package/src/components/user_content/summary_content_box/SummaryContentBox.test.jsx +169 -0
  992. package/src/components/user_content/summary_content_box/index.js +1 -0
  993. package/src/components/user_content/use_delete_content/index.js +1 -0
  994. package/src/components/user_content/use_delete_content/useDeleteContent.docs.mdx +34 -0
  995. package/src/components/user_content/use_delete_content/useDeleteContent.jsx +55 -0
  996. package/src/components/user_content/use_delete_content/useDeleteContent.test.jsx +78 -0
  997. package/src/components/user_content/use_report_content/ReportModal.docs.mdx +54 -0
  998. package/src/components/user_content/use_report_content/ReportModal.jsx +187 -0
  999. package/src/components/user_content/use_report_content/ReportModal.module.scss +121 -0
  1000. package/src/components/user_content/use_report_content/ReportModal.stories.jsx +61 -0
  1001. package/src/components/user_content/use_report_content/ReportModal.test.jsx +51 -0
  1002. package/src/components/user_content/use_report_content/index.js +2 -0
  1003. package/src/components/user_content/use_report_content/useReportContent.docs.mdx +24 -0
  1004. package/src/components/user_content/use_report_content/useReportContent.jsx +32 -0
  1005. package/src/components/user_content/use_report_content/useReportContent.test.jsx +138 -0
  1006. package/src/components/util/lang_emojis/index.js +1 -0
  1007. package/src/components/util/lang_emojis/langEmojis.docs.mdx +10 -0
  1008. package/src/components/util/lang_emojis/langEmojis.js +72 -0
  1009. package/src/components/util/lang_emojis/langEmojis.test.jsx +63 -0
  1010. package/src/components/util/location/Location.docs.mdx +18 -0
  1011. package/src/components/util/location/Location.js +84 -0
  1012. package/src/components/util/location/Location.test.jsx +24 -0
  1013. package/src/components/util/location/index.js +1 -0
  1014. package/src/components/util/unique_by/index.js +1 -0
  1015. package/src/components/util/unique_by/uniqueBy.docs.mdx +24 -0
  1016. package/src/components/util/unique_by/uniqueBy.js +9 -0
  1017. package/src/components/util/unique_by/uniqueBy.test.jsx +29 -0
  1018. package/src/components/vote/suggestion_vote_box/SuggestionVoteBox.docs.mdx +24 -0
  1019. package/src/components/vote/suggestion_vote_box/SuggestionVoteBox.jsx +87 -0
  1020. package/src/components/vote/suggestion_vote_box/SuggestionVoteBox.module.scss +17 -0
  1021. package/src/components/vote/suggestion_vote_box/SuggestionVoteBox.stories.jsx +97 -0
  1022. package/src/components/vote/suggestion_vote_box/SuggestionVoteBox.test.jsx +182 -0
  1023. package/src/components/vote/suggestion_vote_box/index.js +1 -0
  1024. package/src/components/vote/up_down_vote_box/UpDownVoteBox.docs.mdx +24 -0
  1025. package/src/components/vote/up_down_vote_box/UpDownVoteBox.jsx +64 -0
  1026. package/src/components/vote/up_down_vote_box/UpDownVoteBox.module.scss +35 -0
  1027. package/src/components/vote/up_down_vote_box/UpDownVoteBox.stories.jsx +97 -0
  1028. package/src/components/vote/up_down_vote_box/UpDownVoteBox.test.jsx +173 -0
  1029. package/src/components/vote/up_down_vote_box/index.js +1 -0
  1030. package/src/components/vote/use_vote/index.js +1 -0
  1031. package/src/components/vote/use_vote/useVote.docs.mdx +42 -0
  1032. package/src/components/vote/use_vote/useVote.jsx +165 -0
  1033. package/src/components/vote/use_vote/useVote.test.jsx +294 -0
  1034. package/src/components/vote/vote_box/VoteBox.docs.mdx +45 -0
  1035. package/src/components/vote/vote_box/VoteBox.jsx +420 -0
  1036. package/src/components/vote/vote_box/VoteBox.module.scss +254 -0
  1037. package/src/components/vote/vote_box/VoteBox.stories.jsx +319 -0
  1038. package/src/components/vote/vote_box/VoteBox.test.jsx +256 -0
  1039. package/src/components/vote/vote_box/index.js +1 -0
  1040. package/src/components/vote/vote_button/VoteButton.docs.mdx +24 -0
  1041. package/src/components/vote/vote_button/VoteButton.jsx +59 -0
  1042. package/src/components/vote/vote_button/VoteButton.module.scss +35 -0
  1043. package/src/components/vote/vote_button/VoteButton.stories.jsx +97 -0
  1044. package/src/components/vote/vote_button/VoteButton.test.jsx +167 -0
  1045. package/src/components/vote/vote_button/index.js +1 -0
  1046. package/src/components/vote/vote_provider/VoteProvider.docs.mdx +68 -0
  1047. package/src/components/vote/vote_provider/VoteProvider.jsx +63 -0
  1048. package/src/components/vote/vote_provider/VoteProvider.stories.jsx +99 -0
  1049. package/src/components/vote/vote_provider/VoteProvider.test.jsx +137 -0
  1050. package/src/components/vote/vote_provider/index.js +2 -0
  1051. package/src/index.js +127 -0
  1052. package/vitest.config.mjs +52 -0
  1053. package/vitest.setup.js +4 -0
@@ -0,0 +1,1518 @@
1
+ import React from 'react';
2
+ import { render, screen, waitFor, act } from '@testing-library/react';
3
+ import { IntlProvider } from 'react-intl';
4
+ import { BrowserRouter } from 'react-router-dom';
5
+ import { dataProvider, DataProviderContext } from '@logora/debate/data/data_provider';
6
+ import { ResponsiveProvider } from '@logora/debate/hooks/use_responsive';
7
+ import { ListProvider, useList } from '@logora/debate/list/list_provider';
8
+ import { VotePaginatedList } from './VotePaginatedList';
9
+ import StandardErrorBoundary from "@logora/debate/error/standard_error_boundary";
10
+ import userEvent from '@testing-library/user-event';
11
+ import { IconProvider } from '@logora/debate/icons/icon_provider';
12
+ import * as regularIcons from '@logora/debate/icons/regular_icons';
13
+ import { AuthContext } from '@logora/debate/auth/use_auth';
14
+ import { faker } from '@faker-js/faker';
15
+ import { ConfigProvider } from '@logora/debate/data/config_provider';
16
+ import { ModalProvider } from '@logora/debate/dialog/modal';
17
+
18
+ const httpClient = {
19
+ get: vi.fn(),
20
+ post: vi.fn(),
21
+ patch: vi.fn()
22
+ };
23
+
24
+ const currentUser = {
25
+ id: faker.number.int(),
26
+ }
27
+
28
+ const ListItem = (props) => {
29
+ return (
30
+ <p>{props.item.name}</p>
31
+ )
32
+ }
33
+
34
+ const DefaultList = () => {
35
+ return (
36
+ <BrowserRouter>
37
+ <ConfigProvider config={{}}>
38
+ <IntlProvider locale="en">
39
+ <ListProvider>
40
+ <IconProvider library={regularIcons}>
41
+ <ResponsiveProvider>
42
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
43
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
44
+ <ModalProvider>
45
+ <VotePaginatedList
46
+ currentListId={"itemList"}
47
+ resource={'/items'}
48
+ sort={"-created_at"}
49
+ loadingComponent={null}
50
+ resourcePropName={"item"}
51
+ perPage={10}
52
+ withPagination={false}
53
+ countless={true}
54
+ display="column"
55
+ perPageParam={"porut"}
56
+ >
57
+ <ListItem />
58
+ </VotePaginatedList>
59
+ </ModalProvider>
60
+ </AuthContext.Provider>
61
+ </DataProviderContext.Provider>
62
+ </ResponsiveProvider>
63
+ </IconProvider>
64
+ </ListProvider>
65
+ </IntlProvider>
66
+ </ConfigProvider>
67
+ </BrowserRouter>
68
+ )
69
+ }
70
+
71
+ const data = dataProvider(httpClient, "https://mock.example.api");
72
+
73
+ describe('VotePaginatedList', () => {
74
+ beforeEach(() => {
75
+ httpClient.get.mockClear();
76
+ httpClient.post.mockClear();
77
+ httpClient.patch.mockClear();
78
+ })
79
+
80
+ it('should render a basic list with correct content', async () => {
81
+ httpClient.get.mockResolvedValue({
82
+ status: 200,
83
+ "data": {
84
+ "success": true,
85
+ "data": [
86
+ { id: 1, name: "First item" },
87
+ { id: 2, name: "Second item" },
88
+ { id: 3, name: "Third item" }
89
+ ]
90
+ }
91
+ });
92
+
93
+ await act(async () => {
94
+ render(
95
+ <DefaultList />
96
+ );
97
+ });
98
+
99
+ expect(httpClient.get).toHaveBeenCalled();
100
+ expect(screen.getByText("First item")).toBeTruthy();
101
+ expect(screen.getByText("Second item")).toBeTruthy();
102
+ expect(screen.getByText("Third item")).toBeTruthy();
103
+ });
104
+
105
+ it('should show the specific loader component passed as props ', async () => {
106
+ render(
107
+ <BrowserRouter>
108
+ <ConfigProvider config={{}}>
109
+ <IntlProvider locale="en">
110
+ <ListProvider>
111
+ <IconProvider library={regularIcons}>
112
+ <ResponsiveProvider>
113
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
114
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
115
+ <ModalProvider>
116
+ <VotePaginatedList
117
+ currentListId={"itemList"}
118
+ resource={'/items'}
119
+ sort={"-created_at"}
120
+ resourcePropName={"item"}
121
+ perPage={1}
122
+ withPagination
123
+ countless={false}
124
+ display="column"
125
+ numberElements={3}
126
+ loadingComponent={<p>Loading...</p>}
127
+ >
128
+ <ListItem />
129
+ </VotePaginatedList>
130
+ </ModalProvider>
131
+ </AuthContext.Provider>
132
+ </DataProviderContext.Provider>
133
+ </ResponsiveProvider>
134
+ </IconProvider>
135
+ </ListProvider>
136
+ </IntlProvider>
137
+ </ConfigProvider>
138
+ </BrowserRouter>
139
+ );
140
+
141
+ await act(async () => { expect(screen.getAllByText("Loading...")).toBeTruthy(); })
142
+ });
143
+
144
+ it('should trow an error when data loading fails ', async () => {
145
+ httpClient.get = vi.fn(() => Promise.reject({
146
+ status: 500,
147
+ "data": {}
148
+ }))
149
+
150
+ vi.spyOn(console, 'error').mockImplementation(() => { });
151
+
152
+ await act(async () => {
153
+ render(
154
+ <BrowserRouter>
155
+ <ConfigProvider config={{}}>
156
+ <StandardErrorBoundary>
157
+ <IntlProvider locale="en">
158
+ <ListProvider>
159
+ <IconProvider library={regularIcons}>
160
+ <ResponsiveProvider>
161
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
162
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
163
+ <ModalProvider>
164
+ <VotePaginatedList
165
+ currentListId={"itemList"}
166
+ resource={'/itemss'}
167
+ sort={"-created_at"}
168
+ resourcePropName={"item"}
169
+ perPage={1}
170
+ withPagination
171
+ countless={false}
172
+ display="column"
173
+ numberElements={3}
174
+ loadingComponent={<p>Loading...</p>}
175
+ >
176
+ <ListItem />
177
+ </VotePaginatedList>
178
+ </ModalProvider>
179
+ </AuthContext.Provider>
180
+ </DataProviderContext.Provider>
181
+ </ResponsiveProvider>
182
+ </IconProvider>
183
+ </ListProvider>
184
+ </IntlProvider>
185
+ </StandardErrorBoundary>
186
+ </ConfigProvider>
187
+ </BrowserRouter>
188
+ );
189
+ });
190
+
191
+ expect(screen.getByText("Error when loading content.")).toBeTruthy();
192
+ });
193
+
194
+ it('should render a fallback message when no data is retrieved', async () => {
195
+ httpClient.get.mockResolvedValue({
196
+ status: 200,
197
+ "data": {
198
+ "success": true,
199
+ "data": []
200
+ }
201
+ });
202
+
203
+ await act(async () => {
204
+ render(
205
+ <DefaultList />
206
+ );
207
+ });
208
+
209
+ expect(httpClient.get).toHaveBeenCalled();
210
+ expect(screen.queryByText("First item")).toBeFalsy();
211
+ expect(screen.queryByText("Second item")).toBeFalsy();
212
+ expect(screen.queryByText("Third item")).toBeFalsy();
213
+ expect(screen.queryByText("No items for now.")).toBeTruthy();
214
+ });
215
+
216
+ it('should render a list with a pagination button', async () => {
217
+ httpClient.get.mockResolvedValue({
218
+ status: 200,
219
+ "data": {
220
+ "success": true,
221
+ "data": [
222
+ { id: 1, name: "First item" }
223
+ ]
224
+ }
225
+ });
226
+
227
+ await act(async () => {
228
+ render(
229
+ <BrowserRouter>
230
+ <ConfigProvider config={{}}>
231
+ <IntlProvider locale="en">
232
+ <ListProvider>
233
+ <IconProvider library={regularIcons}>
234
+ <ResponsiveProvider>
235
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
236
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
237
+ <ModalProvider>
238
+ <VotePaginatedList
239
+ currentListId={"itemList"}
240
+ resource={'/items'}
241
+ sort={"-created_at"}
242
+ loadingComponent={null}
243
+ resourcePropName={"item"}
244
+ perPage={1}
245
+ withPagination={true}
246
+ countless={false}
247
+ display="column"
248
+ numberElements={3}
249
+ >
250
+ <ListItem />
251
+ </VotePaginatedList>
252
+ </ModalProvider>
253
+ </AuthContext.Provider>
254
+ </DataProviderContext.Provider>
255
+ </ResponsiveProvider>
256
+ </IconProvider>
257
+ </ListProvider>
258
+ </IntlProvider>
259
+ </ConfigProvider>
260
+ </BrowserRouter>
261
+ );
262
+ });
263
+
264
+ expect(httpClient.get).toHaveBeenCalled();
265
+ expect(screen.getByText("First item")).toBeTruthy();
266
+ expect(screen.queryByText("Second item")).toBeFalsy();
267
+ expect(screen.queryByText("Third item")).toBeFalsy();
268
+ expect(screen.getByText("See more")).toBeTruthy();
269
+ });
270
+
271
+ it('should render a list with a search bar', async () => {
272
+ httpClient.get.mockResolvedValue({
273
+ status: 200,
274
+ "data": {
275
+ "success": true,
276
+ "data": [
277
+ { id: 1, name: "First item" },
278
+ { id: 2, name: "Second item" },
279
+ { id: 3, name: "Third item" }
280
+ ]
281
+ }
282
+ });
283
+
284
+ await act(async () => {
285
+ render(
286
+ <BrowserRouter>
287
+ <ConfigProvider config={{}}>
288
+ <IntlProvider locale="en">
289
+ <ListProvider>
290
+ <IconProvider library={regularIcons}>
291
+ <ResponsiveProvider>
292
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
293
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
294
+ <ModalProvider>
295
+ <VotePaginatedList
296
+ currentListId={"itemList"}
297
+ resource={'/items'}
298
+ sort={"-created_at"}
299
+ loadingComponent={null}
300
+ resourcePropName={"item"}
301
+ perPage={1}
302
+ withPagination
303
+ countless={false}
304
+ display="column"
305
+ numberElements={3}
306
+ searchBar
307
+ >
308
+ <ListItem />
309
+ </VotePaginatedList>
310
+ </ModalProvider>
311
+ </AuthContext.Provider>
312
+ </DataProviderContext.Provider>
313
+ </ResponsiveProvider>
314
+ </IconProvider>
315
+ </ListProvider>
316
+ </IntlProvider>
317
+ </ConfigProvider>
318
+ </BrowserRouter>
319
+ );
320
+ });
321
+
322
+ expect(httpClient.get).toHaveBeenCalled();
323
+ expect(screen.getByText("First item")).toBeTruthy();
324
+ expect(screen.getByText("Second item")).toBeTruthy();
325
+ expect(screen.getByText("Third item")).toBeTruthy();
326
+ expect(screen.getByText("Search")).toBeTruthy();
327
+ });
328
+
329
+ it('should render a list with a title', async () => {
330
+ httpClient.get.mockResolvedValue({
331
+ status: 200,
332
+ "data": {
333
+ "success": true,
334
+ "data": [
335
+ { id: 1, name: "First item" },
336
+ { id: 2, name: "Second item" },
337
+ { id: 3, name: "Third item" }
338
+ ]
339
+ }
340
+ });
341
+
342
+ await act(async () => {
343
+ render(
344
+ <BrowserRouter>
345
+ <ConfigProvider config={{}}>
346
+ <IntlProvider locale="en">
347
+ <ListProvider>
348
+ <IconProvider library={regularIcons}>
349
+ <ResponsiveProvider>
350
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
351
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
352
+ <ModalProvider>
353
+ <VotePaginatedList
354
+ currentListId={"itemList"}
355
+ resource={'/items'}
356
+ sort={"-created_at"}
357
+ loadingComponent={null}
358
+ resourcePropName={"item"}
359
+ perPage={1}
360
+ withPagination
361
+ countless={false}
362
+ display="column"
363
+ numberElements={3}
364
+ title={"My title"}
365
+ >
366
+ <ListItem />
367
+ </VotePaginatedList>
368
+ </ModalProvider>
369
+ </AuthContext.Provider>
370
+ </DataProviderContext.Provider>
371
+ </ResponsiveProvider>
372
+ </IconProvider>
373
+ </ListProvider>
374
+ </IntlProvider>
375
+ </ConfigProvider>
376
+ </BrowserRouter>
377
+ );
378
+ });
379
+
380
+ expect(httpClient.get).toHaveBeenCalled();
381
+ expect(screen.getByText("First item")).toBeTruthy();
382
+ expect(screen.getByText("Second item")).toBeTruthy();
383
+ expect(screen.getByText("Third item")).toBeTruthy();
384
+ expect(screen.getByText("My title")).toBeTruthy();
385
+ });
386
+
387
+ it('should render a list with a sort select', async () => {
388
+ httpClient.get.mockResolvedValue({
389
+ status: 200,
390
+ "data": {
391
+ "success": true,
392
+ "data": [
393
+ { id: 1, name: "First item" },
394
+ { id: 2, name: "Second item" },
395
+ { id: 3, name: "Third item" }
396
+ ]
397
+ }
398
+ });
399
+
400
+ await act(async () => {
401
+ render(
402
+ <BrowserRouter>
403
+ <ConfigProvider config={{}}>
404
+ <IntlProvider locale="en">
405
+ <ListProvider>
406
+ <IconProvider library={regularIcons}>
407
+ <ResponsiveProvider>
408
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
409
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
410
+ <ModalProvider>
411
+ <VotePaginatedList
412
+ currentListId={"itemList"}
413
+ resource={'/items'}
414
+ sort={"-created_at"}
415
+ loadingComponent={null}
416
+ resourcePropName={"item"}
417
+ perPage={1}
418
+ withPagination
419
+ countless={false}
420
+ display="column"
421
+ numberElements={3}
422
+ sortOptions={[
423
+ {
424
+ name: "recent",
425
+ value: "-created_at",
426
+ type: "sort",
427
+ text: "recent",
428
+ },
429
+ {
430
+ name: "old",
431
+ type: "sort",
432
+ value: "+created_at",
433
+ text: "oldest",
434
+ },
435
+ ]}
436
+ >
437
+ <ListItem />
438
+ </VotePaginatedList>
439
+ </ModalProvider>
440
+ </AuthContext.Provider>
441
+ </DataProviderContext.Provider>
442
+ </ResponsiveProvider>
443
+ </IconProvider>
444
+ </ListProvider>
445
+ </IntlProvider>
446
+ </ConfigProvider>
447
+ </BrowserRouter>
448
+ );
449
+ });
450
+
451
+ expect(httpClient.get).toHaveBeenCalled();
452
+ expect(screen.getByText("First item")).toBeTruthy();
453
+ expect(screen.getByText("Second item")).toBeTruthy();
454
+ expect(screen.getByText("Third item")).toBeTruthy();
455
+ expect(screen.queryByText("recent")).toBeTruthy();
456
+ });
457
+
458
+ it('should render an empty list with a component passed as props', async () => {
459
+ httpClient.get.mockResolvedValue({
460
+ status: 200,
461
+ "data": {
462
+ "success": true,
463
+ "data": []
464
+ }
465
+ });
466
+
467
+ await act(async () => {
468
+ render(
469
+ <BrowserRouter>
470
+ <ConfigProvider config={{}}>
471
+ <IntlProvider locale="en">
472
+ <ListProvider>
473
+ <IconProvider library={regularIcons}>
474
+ <ResponsiveProvider>
475
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
476
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
477
+ <ModalProvider>
478
+ <VotePaginatedList
479
+ currentListId={"itemList"}
480
+ resource={'/items'}
481
+ sort={"-created_at"}
482
+ loadingComponent={null}
483
+ resourcePropName={"item"}
484
+ perPage={1}
485
+ withPagination
486
+ countless={false}
487
+ display="column"
488
+ numberElements={3}
489
+ emptyListComponent={<p>Empty list</p>}
490
+ >
491
+ <ListItem />
492
+ </VotePaginatedList>
493
+ </ModalProvider>
494
+ </AuthContext.Provider>
495
+ </DataProviderContext.Provider>
496
+ </ResponsiveProvider>
497
+ </IconProvider>
498
+ </ListProvider>
499
+ </IntlProvider>
500
+ </ConfigProvider>
501
+ </BrowserRouter>
502
+ );
503
+ });
504
+
505
+ expect(httpClient.get).toHaveBeenCalled();
506
+ expect(screen.queryByText("Empty list")).toBeTruthy();
507
+ expect(screen.queryByText("Aucun élément pour le moment.")).toBeFalsy();
508
+ });
509
+
510
+ it('should call api on sort select click', async () => {
511
+ httpClient.get.mockResolvedValue({
512
+ status: 200,
513
+ "data": {
514
+ "success": true,
515
+ "data": [
516
+ { id: 1, name: "First item" },
517
+ { id: 2, name: "Second item" },
518
+ { id: 3, name: "Third item" }
519
+ ]
520
+ }
521
+ });
522
+
523
+ await act(async () => {
524
+ render(
525
+ <BrowserRouter>
526
+ <ConfigProvider config={{}}>
527
+ <IntlProvider locale="en">
528
+ <ListProvider>
529
+ <IconProvider library={regularIcons}>
530
+ <ResponsiveProvider>
531
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
532
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
533
+ <ModalProvider>
534
+ <VotePaginatedList
535
+ currentListId={"itemList"}
536
+ resource={'/items'}
537
+ loadingComponent={null}
538
+ resourcePropName={"item"}
539
+ perPage={1}
540
+ withPagination
541
+ countless={false}
542
+ filters={{}}
543
+ display="column"
544
+ numberElements={3}
545
+ sortOptions={[
546
+ {
547
+ name: "recent",
548
+ value: "-created_at",
549
+ type: "sort",
550
+ text: "recent",
551
+ },
552
+ {
553
+ name: "old",
554
+ type: "sort",
555
+ value: "+created_at",
556
+ text: "oldest",
557
+ },
558
+ ]}
559
+ >
560
+ <ListItem />
561
+ </VotePaginatedList>
562
+ </ModalProvider>
563
+ </AuthContext.Provider>
564
+ </DataProviderContext.Provider>
565
+ </ResponsiveProvider>
566
+ </IconProvider>
567
+ </ListProvider>
568
+ </IntlProvider>
569
+ </ConfigProvider>
570
+ </BrowserRouter>
571
+ );
572
+ });
573
+
574
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
575
+
576
+ const dropdownFirstOption = screen.getByText(/recent/i);
577
+ expect(screen.queryByText(/oldest/i)).toBeNull();
578
+
579
+ userEvent.click(dropdownFirstOption);
580
+
581
+ await waitFor(() => {
582
+ expect(screen.getByText(/oldest/i)).toBeTruthy();
583
+ });
584
+
585
+ const oldestSortButton = screen.getByText(/oldest/i);
586
+ userEvent.click(oldestSortButton);
587
+
588
+ });
589
+
590
+ it('should call api on pagination click', async () => {
591
+ httpClient.get.mockResolvedValue({
592
+ status: 200,
593
+ "data": {
594
+ "success": true,
595
+ "data": [
596
+ { id: 1, name: "First item" },
597
+ { id: 2, name: "Second item" },
598
+ { id: 3, name: "Third item" }
599
+ ]
600
+ }
601
+ });
602
+
603
+ await act(async () => {
604
+ render(
605
+ <BrowserRouter>
606
+ <ConfigProvider config={{}}>
607
+ <IntlProvider locale="en">
608
+ <ListProvider>
609
+ <IconProvider library={regularIcons}>
610
+ <ResponsiveProvider>
611
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
612
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
613
+ <ModalProvider>
614
+ <VotePaginatedList
615
+ currentListId={"itemList"}
616
+ resource={'/items'}
617
+ loadingComponent={null}
618
+ resourcePropName={"item"}
619
+ perPage={1}
620
+ withPagination
621
+ countless={false}
622
+ filters={{}}
623
+ display="column"
624
+ numberElements={3}
625
+ sortOptions={[
626
+ {
627
+ name: "recent",
628
+ value: "-created_at",
629
+ type: "sort",
630
+ text: "recent",
631
+ },
632
+ {
633
+ name: "old",
634
+ type: "sort",
635
+ value: "+created_at",
636
+ text: "oldest",
637
+ },
638
+ ]}
639
+ >
640
+ <ListItem />
641
+ </VotePaginatedList>
642
+ </ModalProvider>
643
+ </AuthContext.Provider>
644
+ </DataProviderContext.Provider>
645
+ </ResponsiveProvider>
646
+ </IconProvider>
647
+ </ListProvider>
648
+ </IntlProvider>
649
+ </ConfigProvider>
650
+ </BrowserRouter>
651
+ );
652
+ });
653
+
654
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
655
+
656
+ const paginationButton = screen.getByText(/See more/i);
657
+ expect(paginationButton).toBeTruthy();
658
+
659
+ await userEvent.click(paginationButton);
660
+ expect(httpClient.get).toHaveBeenCalled();
661
+ });
662
+
663
+ it('should call api with query params if passed as props', async () => {
664
+ httpClient.get.mockResolvedValue({
665
+ status: 200,
666
+ "data": {
667
+ "success": true,
668
+ "data": [
669
+ { id: 1, name: "First item" },
670
+ { id: 2, name: "Second item" },
671
+ { id: 3, name: "Third item" }
672
+ ]
673
+ }
674
+ });
675
+
676
+ await act(async () => {
677
+ render(
678
+ <BrowserRouter>
679
+ <ConfigProvider config={{}}>
680
+ <IntlProvider locale="en">
681
+ <ListProvider>
682
+ <IconProvider library={regularIcons}>
683
+ <ResponsiveProvider>
684
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
685
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
686
+ <ModalProvider>
687
+ <VotePaginatedList
688
+ currentListId={"itemList"}
689
+ resource={'/items'}
690
+ loadingComponent={null}
691
+ resourcePropName={"item"}
692
+ perPage={1}
693
+ withPagination
694
+ countless={false}
695
+ filters={{}}
696
+ display="column"
697
+ numberElements={3}
698
+ query={"test"}
699
+ sortOptions={[
700
+ {
701
+ name: "recent",
702
+ value: "-created_at",
703
+ type: "sort",
704
+ text: "recent",
705
+ },
706
+ {
707
+ name: "old",
708
+ type: "sort",
709
+ value: "+created_at",
710
+ text: "oldest",
711
+ },
712
+ ]}
713
+ >
714
+ <ListItem />
715
+ </VotePaginatedList>
716
+ </ModalProvider>
717
+ </AuthContext.Provider>
718
+ </DataProviderContext.Provider>
719
+ </ResponsiveProvider>
720
+ </IconProvider>
721
+ </ListProvider>
722
+ </IntlProvider>
723
+ </ConfigProvider>
724
+ </BrowserRouter>
725
+ );
726
+ });
727
+
728
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&query=test&api_key=");
729
+ });
730
+
731
+ it('should call api when using searchbar', async () => {
732
+ httpClient.get.mockResolvedValue({
733
+ status: 200,
734
+ "data": {
735
+ "success": true,
736
+ "data": [
737
+ { id: 1, name: "First item" },
738
+ { id: 2, name: "Second item" },
739
+ { id: 3, name: "Third item" }
740
+ ]
741
+ }
742
+ });
743
+
744
+ await act(async () => {
745
+ render(
746
+ <BrowserRouter>
747
+ <ConfigProvider config={{}}>
748
+ <IntlProvider locale="en">
749
+ <ListProvider>
750
+ <IconProvider library={regularIcons}>
751
+ <ResponsiveProvider>
752
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
753
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
754
+ <ModalProvider>
755
+ <VotePaginatedList
756
+ currentListId={"itemList"}
757
+ resource={'/items'}
758
+ loadingComponent={null}
759
+ resourcePropName={"item"}
760
+ perPage={1}
761
+ withPagination
762
+ countless={false}
763
+ filters={{}}
764
+ display="column"
765
+ numberElements={3}
766
+ searchBar
767
+ sortOptions={[
768
+ {
769
+ name: "recent",
770
+ value: "-created_at",
771
+ type: "sort",
772
+ text: "recent",
773
+ },
774
+ {
775
+ name: "old",
776
+ type: "sort",
777
+ value: "+created_at",
778
+ text: "oldest",
779
+ },
780
+ ]}
781
+ >
782
+ <ListItem />
783
+ </VotePaginatedList>
784
+ </ModalProvider>
785
+ </AuthContext.Provider>
786
+ </DataProviderContext.Provider>
787
+ </ResponsiveProvider>
788
+ </IconProvider>
789
+ </ListProvider>
790
+ </IntlProvider>
791
+ </ConfigProvider>
792
+ </BrowserRouter>
793
+ );
794
+ });
795
+
796
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
797
+
798
+ const searchInput = screen.getByTestId("input_search_query");
799
+ await userEvent.click(searchInput);
800
+
801
+ expect(screen.getByText(/Search/i)).toBeTruthy();
802
+ await userEvent.keyboard("test");
803
+ await userEvent.keyboard("[Enter]");
804
+ expect(httpClient.get).toHaveBeenCalled();
805
+ });
806
+
807
+ it('should call onElementClick when clicking list item', async () => {
808
+ httpClient.get.mockResolvedValue({
809
+ status: 200,
810
+ "data": {
811
+ "success": true,
812
+ "data": [
813
+ { id: 1, name: "First item" },
814
+ { id: 2, name: "Second item" },
815
+ { id: 3, name: "Third item" }
816
+ ]
817
+ }
818
+ });
819
+
820
+ const callback = vi.fn();
821
+
822
+ await act(async () => {
823
+ render(
824
+ <BrowserRouter>
825
+ <ConfigProvider config={{}}>
826
+ <IntlProvider locale="en">
827
+ <ListProvider>
828
+ <IconProvider library={regularIcons}>
829
+ <ResponsiveProvider>
830
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
831
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
832
+ <ModalProvider>
833
+ <VotePaginatedList
834
+ currentListId={"itemList"}
835
+ resource={'/items'}
836
+ loadingComponent={null}
837
+ resourcePropName={"item"}
838
+ perPage={1}
839
+ withPagination
840
+ countless={false}
841
+ filters={{}}
842
+ display="column"
843
+ numberElements={3}
844
+ onElementClick={callback}
845
+ sortOptions={[
846
+ {
847
+ name: "recent",
848
+ value: "-created_at",
849
+ type: "sort",
850
+ text: "recent",
851
+ },
852
+ {
853
+ name: "old",
854
+ type: "sort",
855
+ value: "+created_at",
856
+ text: "oldest",
857
+ },
858
+ ]}
859
+ >
860
+ <ListItem />
861
+ </VotePaginatedList>
862
+ </ModalProvider>
863
+ </AuthContext.Provider>
864
+ </DataProviderContext.Provider>
865
+ </ResponsiveProvider>
866
+ </IconProvider>
867
+ </ListProvider>
868
+ </IntlProvider>
869
+ </ConfigProvider>
870
+ </BrowserRouter>
871
+ );
872
+ });
873
+
874
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
875
+ const firstElm = screen.getByText(/First item/i);
876
+ expect(firstElm).toBeTruthy();
877
+
878
+ const secondElm = screen.getByText(/First item/i);
879
+ expect(secondElm).toBeTruthy();
880
+
881
+ await userEvent.click(firstElm);
882
+ expect(callback).toHaveBeenCalled();
883
+
884
+ await userEvent.click(secondElm);
885
+ expect(callback).toHaveBeenCalled();
886
+ });
887
+
888
+ it('should render emptyText prop if no emptyListComponent is passed', async () => {
889
+ httpClient.get.mockResolvedValue({
890
+ status: 200,
891
+ "data": {
892
+ "success": true,
893
+ "data": []
894
+ }
895
+ });
896
+
897
+ const callback = vi.fn();
898
+
899
+ await act(async () => {
900
+ render(
901
+ <BrowserRouter>
902
+ <ConfigProvider config={{}}>
903
+ <IntlProvider locale="en">
904
+ <ListProvider>
905
+ <IconProvider library={regularIcons}>
906
+ <ResponsiveProvider>
907
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
908
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
909
+ <ModalProvider>
910
+ <VotePaginatedList
911
+ currentListId={"itemList"}
912
+ resource={'/items'}
913
+ loadingComponent={null}
914
+ resourcePropName={"item"}
915
+ perPage={1}
916
+ withPagination
917
+ countless={false}
918
+ filters={{}}
919
+ display="column"
920
+ numberElements={3}
921
+ onElementClick={callback}
922
+ emptyText={"Empty text"}
923
+ sortOptions={[
924
+ {
925
+ name: "recent",
926
+ value: "-created_at",
927
+ type: "sort",
928
+ text: "recent",
929
+ },
930
+ {
931
+ name: "old",
932
+ type: "sort",
933
+ value: "+created_at",
934
+ text: "oldest",
935
+ },
936
+ ]}
937
+ >
938
+ <ListItem />
939
+ </VotePaginatedList>
940
+ </ModalProvider>
941
+ </AuthContext.Provider>
942
+ </DataProviderContext.Provider>
943
+ </ResponsiveProvider>
944
+ </IconProvider>
945
+ </ListProvider>
946
+ </IntlProvider>
947
+ </ConfigProvider>
948
+ </BrowserRouter>
949
+ );
950
+ });
951
+
952
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
953
+ const emptyText = screen.getByText(/Empty text/i);
954
+ expect(emptyText).toBeTruthy();
955
+ });
956
+
957
+ it('should call api with countless prop if passed', async () => {
958
+ httpClient.get.mockResolvedValue({
959
+ status: 200,
960
+ "data": {
961
+ "success": true,
962
+ "data": [
963
+ { id: 1, name: "First item" },
964
+ { id: 2, name: "Second item" },
965
+ { id: 3, name: "Third item" }
966
+ ]
967
+ }
968
+ });
969
+
970
+ await act(async () => {
971
+ render(
972
+ <BrowserRouter>
973
+ <ConfigProvider config={{}}>
974
+ <IntlProvider locale="en">
975
+ <ListProvider>
976
+ <IconProvider library={regularIcons}>
977
+ <ResponsiveProvider>
978
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
979
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
980
+ <ModalProvider>
981
+ <VotePaginatedList
982
+ currentListId={"itemList"}
983
+ resource={'/items'}
984
+ loadingComponent={null}
985
+ resourcePropName={"item"}
986
+ perPage={1}
987
+ withPagination
988
+ countless={true}
989
+ filters={{}}
990
+ display="column"
991
+ numberElements={3}
992
+ sortOptions={[
993
+ {
994
+ name: "recent",
995
+ value: "-created_at",
996
+ type: "sort",
997
+ text: "recent",
998
+ },
999
+ {
1000
+ name: "old",
1001
+ type: "sort",
1002
+ value: "+created_at",
1003
+ text: "oldest",
1004
+ },
1005
+ ]}
1006
+ >
1007
+ <ListItem />
1008
+ </VotePaginatedList>
1009
+ </ModalProvider>
1010
+ </AuthContext.Provider>
1011
+ </DataProviderContext.Provider>
1012
+ </ResponsiveProvider>
1013
+ </IconProvider>
1014
+ </ListProvider>
1015
+ </IntlProvider>
1016
+ </ConfigProvider>
1017
+ </BrowserRouter>
1018
+ );
1019
+ });
1020
+
1021
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&countless=true&api_key=");
1022
+ });
1023
+
1024
+ it('should render unique elements', async () => {
1025
+ httpClient.get.mockResolvedValue({
1026
+ status: 200,
1027
+ "data": {
1028
+ "success": true,
1029
+ "data": [
1030
+ { id: 1, name: "First item" },
1031
+ { id: 1, name: "First item" },
1032
+ { id: 3, name: "Third item" }
1033
+ ]
1034
+ }
1035
+ });
1036
+
1037
+ await act(async () => {
1038
+ render(
1039
+ <BrowserRouter>
1040
+ <ConfigProvider config={{}}>
1041
+ <IntlProvider locale="en">
1042
+ <ListProvider>
1043
+ <IconProvider library={regularIcons}>
1044
+ <ResponsiveProvider>
1045
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1046
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1047
+ <ModalProvider>
1048
+ <VotePaginatedList
1049
+ currentListId={"itemList"}
1050
+ resource={'/items'}
1051
+ loadingComponent={null}
1052
+ resourcePropName={"item"}
1053
+ perPage={1}
1054
+ withPagination
1055
+ countless={false}
1056
+ filters={{}}
1057
+ display="column"
1058
+ numberElements={3}
1059
+ sortOptions={[
1060
+ {
1061
+ name: "recent",
1062
+ value: "-created_at",
1063
+ type: "sort",
1064
+ text: "recent",
1065
+ },
1066
+ {
1067
+ name: "old",
1068
+ type: "sort",
1069
+ value: "+created_at",
1070
+ text: "oldest",
1071
+ },
1072
+ ]}
1073
+ >
1074
+ <ListItem />
1075
+ </VotePaginatedList>
1076
+ </ModalProvider>
1077
+ </AuthContext.Provider>
1078
+ </DataProviderContext.Provider>
1079
+ </ResponsiveProvider>
1080
+ </IconProvider>
1081
+ </ListProvider>
1082
+ </IntlProvider>
1083
+ </ConfigProvider>
1084
+ </BrowserRouter>
1085
+ );
1086
+ });
1087
+
1088
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
1089
+ expect(screen.queryAllByText("First item").length).toEqual(1);
1090
+ expect(screen.getByText("First item")).toBeTruthy();
1091
+ expect(screen.queryByText("Second item")).toBeFalsy();
1092
+ expect(screen.getByText("Third item")).toBeTruthy();
1093
+ });
1094
+
1095
+ it('should call api with first sortOption from props (getInitSort func)', async () => {
1096
+ httpClient.get.mockResolvedValue({
1097
+ status: 200,
1098
+ "data": {
1099
+ "success": true,
1100
+ "data": [
1101
+ { id: 1, name: "First item" },
1102
+ { id: 2, name: "Second item" },
1103
+ { id: 3, name: "Third item" }
1104
+ ]
1105
+ }
1106
+ });
1107
+
1108
+ await act(async () => {
1109
+ render(
1110
+ <BrowserRouter>
1111
+ <ConfigProvider config={{}}>
1112
+ <IntlProvider locale="en">
1113
+ <ListProvider>
1114
+ <IconProvider library={regularIcons}>
1115
+ <ResponsiveProvider>
1116
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1117
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1118
+ <ModalProvider>
1119
+ <VotePaginatedList
1120
+ currentListId={"itemList"}
1121
+ resource={'/items'}
1122
+ loadingComponent={null}
1123
+ resourcePropName={"item"}
1124
+ perPage={1}
1125
+ withPagination
1126
+ countless={false}
1127
+ filters={{}}
1128
+ display="column"
1129
+ numberElements={3}
1130
+ sortOptions={[
1131
+ {
1132
+ name: "test",
1133
+ value: "-test",
1134
+ type: "sort",
1135
+ text: "test",
1136
+ },
1137
+ {
1138
+ name: "old",
1139
+ type: "sort",
1140
+ value: "+created_at",
1141
+ text: "oldest",
1142
+ },
1143
+ ]}
1144
+ >
1145
+ <ListItem />
1146
+ </VotePaginatedList>
1147
+ </ModalProvider>
1148
+ </AuthContext.Provider>
1149
+ </DataProviderContext.Provider>
1150
+ </ResponsiveProvider>
1151
+ </IconProvider>
1152
+ </ListProvider>
1153
+ </IntlProvider>
1154
+ </ConfigProvider>
1155
+ </BrowserRouter>
1156
+ );
1157
+ });
1158
+
1159
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-test&api_key=");
1160
+ });
1161
+
1162
+ it('should call onUpdateTotal func if passed as prop and headers["total"] is present', async () => {
1163
+ httpClient.get.mockResolvedValue({
1164
+ status: 200,
1165
+ "headers": {
1166
+ "total": 3
1167
+ },
1168
+ "data": {
1169
+ "success": true,
1170
+ "data": [
1171
+ { id: 1, name: "First item" },
1172
+ { id: 2, name: "Second item" },
1173
+ { id: 3, name: "Third item" }
1174
+ ]
1175
+ }
1176
+ });
1177
+
1178
+ const callback = vi.fn();
1179
+
1180
+ await act(async () => {
1181
+ render(
1182
+ <BrowserRouter>
1183
+ <ConfigProvider config={{}}>
1184
+ <IntlProvider locale="en">
1185
+ <ListProvider>
1186
+ <IconProvider library={regularIcons}>
1187
+ <ResponsiveProvider>
1188
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1189
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1190
+ <ModalProvider>
1191
+ <VotePaginatedList
1192
+ currentListId={"itemList"}
1193
+ resource={'/items'}
1194
+ loadingComponent={null}
1195
+ resourcePropName={"item"}
1196
+ perPage={1}
1197
+ withPagination
1198
+ filters={{}}
1199
+ display="column"
1200
+ onUpdateTotal={callback}
1201
+ sortOptions={[
1202
+ {
1203
+ name: "recent",
1204
+ value: "-created_at",
1205
+ type: "sort",
1206
+ text: "recent",
1207
+ },
1208
+ {
1209
+ name: "old",
1210
+ type: "sort",
1211
+ value: "+created_at",
1212
+ text: "oldest",
1213
+ },
1214
+ ]}
1215
+ >
1216
+ <ListItem />
1217
+ </VotePaginatedList>
1218
+ </ModalProvider>
1219
+ </AuthContext.Provider>
1220
+ </DataProviderContext.Provider>
1221
+ </ResponsiveProvider>
1222
+ </IconProvider>
1223
+ </ListProvider>
1224
+ </IntlProvider>
1225
+ </ConfigProvider>
1226
+ </BrowserRouter>
1227
+ );
1228
+ });
1229
+
1230
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
1231
+ expect(callback).toHaveBeenNthCalledWith(1, 3);
1232
+ });
1233
+
1234
+ it('should call api with first sortOptions filter type from props (getInitFilters func)', async () => {
1235
+ httpClient.get.mockResolvedValue({
1236
+ status: 200,
1237
+ "data": {
1238
+ "success": true,
1239
+ "data": [
1240
+ { id: 1, name: "First item" },
1241
+ { id: 2, name: "Second item" },
1242
+ { id: 3, name: "Third item" }
1243
+ ]
1244
+ }
1245
+ });
1246
+
1247
+ await act(async () => {
1248
+ render(
1249
+ <BrowserRouter>
1250
+ <ConfigProvider config={{}}>
1251
+ <IntlProvider locale="en">
1252
+ <ListProvider>
1253
+ <IconProvider library={regularIcons}>
1254
+ <ResponsiveProvider>
1255
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1256
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1257
+ <ModalProvider>
1258
+ <VotePaginatedList
1259
+ currentListId={"itemList"}
1260
+ resource={'/items'}
1261
+ loadingComponent={null}
1262
+ resourcePropName={"item"}
1263
+ perPage={1}
1264
+ withPagination
1265
+ countless={false}
1266
+ filters={{}}
1267
+ display="column"
1268
+ numberElements={3}
1269
+ sortOptions={[
1270
+ {
1271
+ name: "popular",
1272
+ value: "true",
1273
+ type: "filter",
1274
+ textKey: "info.sort_by_popular",
1275
+ },
1276
+ {
1277
+ name: "recent",
1278
+ value: "-created_at",
1279
+ textKey: "info.sort_by_newest",
1280
+ },
1281
+ {
1282
+ name: "old",
1283
+ value: "+created_at",
1284
+ textKey: "info.sort_by_oldest",
1285
+ }
1286
+ ]}
1287
+ >
1288
+ <ListItem />
1289
+ </VotePaginatedList>
1290
+ </ModalProvider>
1291
+ </AuthContext.Provider>
1292
+ </DataProviderContext.Provider>
1293
+ </ResponsiveProvider>
1294
+ </IconProvider>
1295
+ </ListProvider>
1296
+ </IntlProvider>
1297
+ </ConfigProvider>
1298
+ </BrowserRouter>
1299
+ );
1300
+ });
1301
+
1302
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&popular=true&api_key=");
1303
+ });
1304
+
1305
+ it('should use transformData filter func if passed as prop', async () => {
1306
+ httpClient.get.mockResolvedValue({
1307
+ status: 200,
1308
+ "headers": {
1309
+ "total": 3
1310
+ },
1311
+ "data": {
1312
+ "success": true,
1313
+ "data": [
1314
+ { id: 1, name: "First item" },
1315
+ { id: 2, name: "Second item" },
1316
+ { id: 3, name: "Third item" }
1317
+ ]
1318
+ }
1319
+ });
1320
+
1321
+ await act(async () => {
1322
+ render(
1323
+ <BrowserRouter>
1324
+ <ConfigProvider config={{}}>
1325
+ <IntlProvider locale="en">
1326
+ <ListProvider>
1327
+ <IconProvider library={regularIcons}>
1328
+ <ResponsiveProvider>
1329
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1330
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1331
+ <ModalProvider>
1332
+ <VotePaginatedList
1333
+ currentListId={"itemList"}
1334
+ resource={'/items'}
1335
+ loadingComponent={null}
1336
+ resourcePropName={"item"}
1337
+ perPage={1}
1338
+ withPagination
1339
+ filters={{}}
1340
+ display="column"
1341
+ transformData={elm => elm.id !== 1}
1342
+ sortOptions={[
1343
+ {
1344
+ name: "recent",
1345
+ value: "-created_at",
1346
+ type: "sort",
1347
+ text: "recent",
1348
+ },
1349
+ {
1350
+ name: "old",
1351
+ type: "sort",
1352
+ value: "+created_at",
1353
+ text: "oldest",
1354
+ },
1355
+ ]}
1356
+ >
1357
+ <ListItem />
1358
+ </VotePaginatedList>
1359
+ </ModalProvider>
1360
+ </AuthContext.Provider>
1361
+ </DataProviderContext.Provider>
1362
+ </ResponsiveProvider>
1363
+ </IconProvider>
1364
+ </ListProvider>
1365
+ </IntlProvider>
1366
+ </ConfigProvider>
1367
+ </BrowserRouter>
1368
+ );
1369
+ });
1370
+
1371
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
1372
+ expect(screen.queryByText("First item")).toBeFalsy();
1373
+ expect(screen.getByText("Second item")).toBeTruthy();
1374
+ expect(screen.getByText("Third item")).toBeTruthy();
1375
+ });
1376
+
1377
+ it('should call onElementsLoad if passed as props', async () => {
1378
+ httpClient.get.mockResolvedValue({
1379
+ status: 200,
1380
+ "data": {
1381
+ "success": true,
1382
+ "data": [
1383
+ { id: 1, name: "First item" },
1384
+ { id: 2, name: "Second item" },
1385
+ { id: 3, name: "Third item" }
1386
+ ]
1387
+ }
1388
+ });
1389
+
1390
+ const callback = vi.fn();
1391
+
1392
+ await act(async () => {
1393
+ render(
1394
+ <BrowserRouter>
1395
+ <ConfigProvider config={{}}>
1396
+ <IntlProvider locale="en">
1397
+ <ListProvider>
1398
+ <IconProvider library={regularIcons}>
1399
+ <ResponsiveProvider>
1400
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1401
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1402
+ <ModalProvider>
1403
+ <VotePaginatedList
1404
+ currentListId={"itemList"}
1405
+ resource={'/items'}
1406
+ loadingComponent={null}
1407
+ resourcePropName={"item"}
1408
+ perPage={1}
1409
+ withPagination
1410
+ countless={false}
1411
+ filters={{}}
1412
+ display="column"
1413
+ numberElements={3}
1414
+ onElementsLoad={callback}
1415
+ sortOptions={[
1416
+ {
1417
+ name: "recent",
1418
+ value: "-created_at",
1419
+ type: "sort",
1420
+ text: "recent",
1421
+ },
1422
+ {
1423
+ name: "old",
1424
+ type: "sort",
1425
+ value: "+created_at",
1426
+ text: "oldest",
1427
+ },
1428
+ ]}
1429
+ >
1430
+ <ListItem />
1431
+ </VotePaginatedList>
1432
+ </ModalProvider>
1433
+ </AuthContext.Provider>
1434
+ </DataProviderContext.Provider>
1435
+ </ResponsiveProvider>
1436
+ </IconProvider>
1437
+ </ListProvider>
1438
+ </IntlProvider>
1439
+ </ConfigProvider>
1440
+ </BrowserRouter>
1441
+ );
1442
+ });
1443
+
1444
+ expect(httpClient.get).toHaveBeenNthCalledWith(1, "https://mock.example.api//items?page=1&per_page=1&sort=-created_at&api_key=");
1445
+ expect(callback).toHaveBeenCalled();
1446
+ });
1447
+
1448
+ it('should add elements through useList hook', async () => {
1449
+ const myElements = [
1450
+ { id: 4, name: "Fourth item" },
1451
+ { id: 5, name: "Fifth item" }
1452
+ ];
1453
+
1454
+ const AddElementsComponent = () => {
1455
+ const list = useList();
1456
+
1457
+ const handleAdd = () => {
1458
+ list.add("itemList", myElements);
1459
+ }
1460
+
1461
+ return (
1462
+ <button onClick={handleAdd}>Add elements</button>
1463
+ )
1464
+ }
1465
+
1466
+ const callback = vi.fn();
1467
+
1468
+ await act(async () => {
1469
+ render(
1470
+ <BrowserRouter>
1471
+ <ConfigProvider config={{}}>
1472
+ <IntlProvider locale="en">
1473
+ <ResponsiveProvider>
1474
+ <DataProviderContext.Provider value={{ dataProvider: data }}>
1475
+ <IconProvider library={regularIcons}>
1476
+ <ListProvider>
1477
+ <AuthContext.Provider value={{ currentUser: currentUser, isLoggedIn: true }}>
1478
+ <ModalProvider>
1479
+ <AddElementsComponent />
1480
+ <VotePaginatedList
1481
+ currentListId={"itemList"}
1482
+ resource={'/items'}
1483
+ sort={"-created_at"}
1484
+ loadingComponent={null}
1485
+ resourcePropName={"item"}
1486
+ perPage={10}
1487
+ withPagination={false}
1488
+ countless={true}
1489
+ display="column"
1490
+ onElementsLoad={callback}
1491
+ >
1492
+ <ListItem />
1493
+ </VotePaginatedList>
1494
+ </ModalProvider>
1495
+ </AuthContext.Provider>
1496
+ </ListProvider>
1497
+ </IconProvider>
1498
+ </DataProviderContext.Provider>
1499
+ </ResponsiveProvider>
1500
+ </IntlProvider>
1501
+ </ConfigProvider>
1502
+ </BrowserRouter>
1503
+ );
1504
+ });
1505
+
1506
+ expect(screen.getByText("First item")).toBeTruthy();
1507
+ expect(screen.getByText("Second item")).toBeTruthy();
1508
+ expect(screen.getByText("Third item")).toBeTruthy();
1509
+
1510
+ const addButton = screen.getByText("Add elements");
1511
+ expect(addButton).toBeTruthy();
1512
+
1513
+ await act(async () => { await userEvent.click(addButton) });
1514
+
1515
+ expect(screen.getByText(/Fourth item/i)).toBeTruthy();
1516
+ expect(screen.getByText(/Fifth item/i)).toBeTruthy();
1517
+ });
1518
+ });