@ilo-org/react 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/.eslintrc.js +36 -0
  2. package/.storybook/main.js +28 -0
  3. package/.storybook/manager-head.html +7 -0
  4. package/.storybook/manager.js +6 -0
  5. package/.storybook/preview.tsx +33 -0
  6. package/.storybook/styles.scss +1 -0
  7. package/.storybook/theme.js +11 -0
  8. package/.turbo/turbo-build.log +513 -0
  9. package/.turbo/turbo-check.log +5 -0
  10. package/.turbo/turbo-test.log +1676 -0
  11. package/=6.4.0 +115 -0
  12. package/=7.21.4 +21 -0
  13. package/LICENSE +201 -0
  14. package/README.md +11 -0
  15. package/lib/index.esm.js +24 -0
  16. package/lib/index.esm.js.map +1 -0
  17. package/lib/index.js +24 -0
  18. package/lib/index.js.map +1 -0
  19. package/package.json +115 -0
  20. package/rollup.config.js +40 -0
  21. package/src/__tests__/Accordion.test.tsx +52 -0
  22. package/src/__tests__/Button.test.tsx +60 -0
  23. package/src/__tests__/Callout.test.tsx +41 -0
  24. package/src/__tests__/ContextMenu.test.tsx +19 -0
  25. package/src/__tests__/Dropdown.test.tsx +38 -0
  26. package/src/__tests__/Form.test.tsx +34 -0
  27. package/src/__tests__/Heading.test.tsx +51 -0
  28. package/src/__tests__/Hero.test.tsx +22 -0
  29. package/src/__tests__/Image.test.tsx +21 -0
  30. package/src/__tests__/LinkList.test.tsx +17 -0
  31. package/src/__tests__/List.test.tsx +37 -0
  32. package/src/__tests__/Loading.text.tsx +33 -0
  33. package/src/__tests__/Notification.test.tsx +39 -0
  34. package/src/__tests__/Pagination.test.tsx +58 -0
  35. package/src/__tests__/Profile.test.tsx +48 -0
  36. package/src/__tests__/ReadMore.test.tsx +42 -0
  37. package/src/__tests__/RichText.test.tsx +16 -0
  38. package/src/__tests__/SearchField.test.tsx +35 -0
  39. package/src/__tests__/TableOfContents.test.tsx +12 -0
  40. package/src/__tests__/Tag.test.tsx +10 -0
  41. package/src/components/Accordion/Accordion.args.ts +19 -0
  42. package/src/components/Accordion/Accordion.props.d.ts +39 -0
  43. package/src/components/Accordion/Accordion.tsx +70 -0
  44. package/src/components/Accordion/AccordionButton.props.d.ts +13 -0
  45. package/src/components/Accordion/AccordionButton.tsx +60 -0
  46. package/src/components/Accordion/AccordionItem.props.d.ts +25 -0
  47. package/src/components/Accordion/AccordionItem.tsx +33 -0
  48. package/src/components/Accordion/AccordionPanel.props.d.ts +20 -0
  49. package/src/components/Accordion/AccordionPanel.tsx +47 -0
  50. package/src/components/Accordion/index.ts +4 -0
  51. package/src/components/Button/Button.args.ts +353 -0
  52. package/src/components/Button/Button.props.d.ts +74 -0
  53. package/src/components/Button/Button.tsx +67 -0
  54. package/src/components/Button/index.ts +1 -0
  55. package/src/components/Callout/Callout.args.ts +64 -0
  56. package/src/components/Callout/Callout.props.d.ts +61 -0
  57. package/src/components/Callout/Callout.tsx +80 -0
  58. package/src/components/Callout/index.ts +1 -0
  59. package/src/components/Checkbox/Checkbox.args.ts +22 -0
  60. package/src/components/Checkbox/Checkbox.props.d.ts +61 -0
  61. package/src/components/Checkbox/Checkbox.tsx +92 -0
  62. package/src/components/Checkbox/index.ts +1 -0
  63. package/src/components/ChoiceGroup/ChoiceGroup.args.ts +90 -0
  64. package/src/components/ChoiceGroup/ChoiceGroup.props.d.ts +57 -0
  65. package/src/components/ChoiceGroup/ChoiceGroup.tsx +42 -0
  66. package/src/components/ChoiceGroup/index.ts +1 -0
  67. package/src/components/Collapse/Collapse.props.d.ts +92 -0
  68. package/src/components/Collapse/Collapse.tsx +130 -0
  69. package/src/components/Collapse/index.ts +1 -0
  70. package/src/components/ContextMenu/ContextMenu.args.ts +62 -0
  71. package/src/components/ContextMenu/ContextMenu.props.d.ts +28 -0
  72. package/src/components/ContextMenu/ContextMenu.tsx +32 -0
  73. package/src/components/ContextMenu/index.ts +1 -0
  74. package/src/components/Credit/Credit.args.ts +14 -0
  75. package/src/components/Credit/Credit.props.d.ts +11 -0
  76. package/src/components/Credit/Credit.tsx +41 -0
  77. package/src/components/Credit/index.ts +1 -0
  78. package/src/components/DatePicker/DatePicker.args.ts +82 -0
  79. package/src/components/DatePicker/DatePicker.props.d.ts +68 -0
  80. package/src/components/DatePicker/DatePicker.tsx +119 -0
  81. package/src/components/DatePicker/index.ts +1 -0
  82. package/src/components/Dropdown/Dropdown.args.ts +220 -0
  83. package/src/components/Dropdown/Dropdown.props.d.ts +84 -0
  84. package/src/components/Dropdown/Dropdown.tsx +82 -0
  85. package/src/components/Dropdown/index.ts +1 -0
  86. package/src/components/Empty/Empty.args.ts +14 -0
  87. package/src/components/Empty/Empty.props.d.ts +6 -0
  88. package/src/components/Empty/Empty.tsx +16 -0
  89. package/src/components/Empty/index.ts +1 -0
  90. package/src/components/Fieldset/Fieldset.props.d.ts +36 -0
  91. package/src/components/Fieldset/Fieldset.tsx +90 -0
  92. package/src/components/Fieldset/index.ts +1 -0
  93. package/src/components/FileUpload/FileUpload.args.ts +62 -0
  94. package/src/components/FileUpload/FileUpload.props.d.ts +63 -0
  95. package/src/components/FileUpload/FileUpload.tsx +82 -0
  96. package/src/components/FileUpload/index.ts +1 -0
  97. package/src/components/Form/Form.args.ts +265 -0
  98. package/src/components/Form/Form.props.d.ts +84 -0
  99. package/src/components/Form/Form.tsx +83 -0
  100. package/src/components/Form/index.ts +1 -0
  101. package/src/components/FormElement/FormElement.props.d.ts +53 -0
  102. package/src/components/FormElement/FormElement.tsx +26 -0
  103. package/src/components/FormElement/index.ts +1 -0
  104. package/src/components/FormGroup/FormGroup.args.ts +84 -0
  105. package/src/components/FormGroup/FormGroup.props.d.ts +71 -0
  106. package/src/components/FormGroup/FormGroup.tsx +73 -0
  107. package/src/components/FormGroup/index.ts +1 -0
  108. package/src/components/GlobalProvider/GlobalProvider.props.d.ts +15 -0
  109. package/src/components/GlobalProvider/GlobalProvider.tsx +27 -0
  110. package/src/components/GlobalProvider/index.js +4 -0
  111. package/src/components/Heading/Heading.args.ts +46 -0
  112. package/src/components/Heading/Heading.props.d.ts +24 -0
  113. package/src/components/Heading/Heading.tsx +28 -0
  114. package/src/components/Heading/index.ts +1 -0
  115. package/src/components/Hero/Hero.args.ts +296 -0
  116. package/src/components/Hero/Hero.props.d.ts +29 -0
  117. package/src/components/Hero/Hero.tsx +35 -0
  118. package/src/components/Hero/HeroCard.props.d.ts +65 -0
  119. package/src/components/Hero/HeroCard.tsx +53 -0
  120. package/src/components/Hero/index.ts +2 -0
  121. package/src/components/Icon/Icon.args.ts +15 -0
  122. package/src/components/Icon/Icon.props.d.ts +16 -0
  123. package/src/components/Icon/Icon.tsx +25 -0
  124. package/src/components/Icon/index.ts +1 -0
  125. package/src/components/Image/Image.args.ts +35 -0
  126. package/src/components/Image/Image.props.d.ts +38 -0
  127. package/src/components/Image/Image.tsx +51 -0
  128. package/src/components/Image/index.ts +1 -0
  129. package/src/components/Input/Input.args.ts +139 -0
  130. package/src/components/Input/Input.props.d.ts +63 -0
  131. package/src/components/Input/Input.tsx +63 -0
  132. package/src/components/Input/index.ts +1 -0
  133. package/src/components/Link/Link.args.ts +36 -0
  134. package/src/components/Link/Link.props.d.ts +34 -0
  135. package/src/components/Link/Link.tsx +49 -0
  136. package/src/components/Link/index.ts +1 -0
  137. package/src/components/LinkList/LinkList.args.ts +193 -0
  138. package/src/components/LinkList/LinkList.props.d.ts +52 -0
  139. package/src/components/LinkList/LinkList.tsx +59 -0
  140. package/src/components/LinkList/index.ts +1 -0
  141. package/src/components/List/List.args.ts +38 -0
  142. package/src/components/List/List.props.d.ts +36 -0
  143. package/src/components/List/List.tsx +47 -0
  144. package/src/components/List/ListItem.props.d.ts +25 -0
  145. package/src/components/List/ListItem.tsx +23 -0
  146. package/src/components/List/index.ts +2 -0
  147. package/src/components/Loading/Loading.args.ts +55 -0
  148. package/src/components/Loading/Loading.props.d.ts +23 -0
  149. package/src/components/Loading/Loading.tsx +24 -0
  150. package/src/components/Loading/index.ts +1 -0
  151. package/src/components/Notification/Notification.args.ts +157 -0
  152. package/src/components/Notification/Notification.props.d.ts +67 -0
  153. package/src/components/Notification/Notification.tsx +78 -0
  154. package/src/components/Notification/index.ts +1 -0
  155. package/src/components/NumberPicker/NumberPicker.args.ts +58 -0
  156. package/src/components/NumberPicker/NumberPicker.props.d.ts +56 -0
  157. package/src/components/NumberPicker/NumberPicker.tsx +65 -0
  158. package/src/components/NumberPicker/index.ts +1 -0
  159. package/src/components/Pagination/Pagination.args.ts +43 -0
  160. package/src/components/Pagination/Pagination.props.d.ts +66 -0
  161. package/src/components/Pagination/Pagination.tsx +114 -0
  162. package/src/components/Pagination/index.ts +1 -0
  163. package/src/components/Profile/Profile.args.ts +58 -0
  164. package/src/components/Profile/Profile.props.d.ts +43 -0
  165. package/src/components/Profile/Profile.tsx +43 -0
  166. package/src/components/Profile/index.ts +1 -0
  167. package/src/components/Radio/Radio.args.ts +22 -0
  168. package/src/components/Radio/Radio.props.d.ts +61 -0
  169. package/src/components/Radio/Radio.tsx +64 -0
  170. package/src/components/Radio/index.ts +1 -0
  171. package/src/components/ReadMore/ReadMore.props.d.ts +38 -0
  172. package/src/components/ReadMore/ReadMore.tsx +55 -0
  173. package/src/components/ReadMore/index.ts +1 -0
  174. package/src/components/ReadMore/readMore.args.ts +35 -0
  175. package/src/components/RichText/RichText.props.d.ts +11 -0
  176. package/src/components/RichText/RichText.tsx +22 -0
  177. package/src/components/RichText/index.ts +1 -0
  178. package/src/components/RichText/richText.args.ts +15 -0
  179. package/src/components/SearchField/SearchField.args.ts +73 -0
  180. package/src/components/SearchField/SearchField.props.d.ts +35 -0
  181. package/src/components/SearchField/SearchField.tsx +55 -0
  182. package/src/components/SearchField/index.ts +1 -0
  183. package/src/components/TableOfContents/TableOfContents.args.ts +35 -0
  184. package/src/components/TableOfContents/TableOfContents.props.d.ts +23 -0
  185. package/src/components/TableOfContents/TableOfContents.tsx +32 -0
  186. package/src/components/TableOfContents/index.ts +1 -0
  187. package/src/components/Tag/Tag.args.ts +15 -0
  188. package/src/components/Tag/Tag.props.d.ts +34 -0
  189. package/src/components/Tag/Tag.tsx +99 -0
  190. package/src/components/Tag/TagSet.args.ts +39 -0
  191. package/src/components/Tag/TagSet.props.d.ts +36 -0
  192. package/src/components/Tag/TagSet.tsx +71 -0
  193. package/src/components/Tag/index.ts +2 -0
  194. package/src/components/Textarea/Textarea.args.ts +62 -0
  195. package/src/components/Textarea/Textarea.props.d.ts +71 -0
  196. package/src/components/Textarea/Textarea.tsx +67 -0
  197. package/src/components/Textarea/index.ts +1 -0
  198. package/src/components/Tooltip/Tooltip.args.ts +43 -0
  199. package/src/components/Tooltip/Tooltip.props.d.ts +48 -0
  200. package/src/components/Tooltip/Tooltip.tsx +139 -0
  201. package/src/components/Tooltip/index.ts +1 -0
  202. package/src/components/Video/Video.args.ts +81 -0
  203. package/src/components/Video/Video.props.d.ts +82 -0
  204. package/src/components/Video/Video.tsx +29 -0
  205. package/src/components/Video/VideoPlayer.props.d.ts +80 -0
  206. package/src/components/Video/VideoPlayer.tsx +285 -0
  207. package/src/components/Video/index.ts +1 -0
  208. package/src/hooks/useGlobalSettings.ts +13 -0
  209. package/src/hooks/useVideoPlayer.ts +85 -0
  210. package/src/index.ts +19 -0
  211. package/src/public/favicon.ico +0 -0
  212. package/src/public/index.html +43 -0
  213. package/src/public/logo192.png +0 -0
  214. package/src/public/logo512.png +0 -0
  215. package/src/public/manifest.json +25 -0
  216. package/src/public/robots.txt +3 -0
  217. package/src/setup.ts +6 -0
  218. package/src/stories/Accordion.stories.tsx +94 -0
  219. package/src/stories/Button.stories.tsx +491 -0
  220. package/src/stories/Callout.stories.tsx +154 -0
  221. package/src/stories/ContextMenu.stories.tsx +72 -0
  222. package/src/stories/Dropdown.stories.tsx +85 -0
  223. package/src/stories/Empty.stories.tsx +48 -0
  224. package/src/stories/Form.stories.tsx +67 -0
  225. package/src/stories/Heading.stories.tsx +191 -0
  226. package/src/stories/Hero.stories.tsx +129 -0
  227. package/src/stories/Image.stories.tsx +71 -0
  228. package/src/stories/Introduction.stories.mdx +12 -0
  229. package/src/stories/Link.stories.tsx +99 -0
  230. package/src/stories/LinkList.stories.tsx +68 -0
  231. package/src/stories/List.stories.tsx +246 -0
  232. package/src/stories/Loading.stories.tsx +103 -0
  233. package/src/stories/Notification.stories.tsx +154 -0
  234. package/src/stories/Pagination.stories.tsx +63 -0
  235. package/src/stories/Profile.stories.tsx +84 -0
  236. package/src/stories/ReadMore.stories.tsx +80 -0
  237. package/src/stories/RichText.stories.tsx +59 -0
  238. package/src/stories/SearchField.stories.tsx +87 -0
  239. package/src/stories/TableOfContents.stories.tsx +50 -0
  240. package/src/stories/Tag.stories.tsx +194 -0
  241. package/src/stories/Tooltip.stories.tsx +83 -0
  242. package/src/stories/Video.stories.tsx +69 -0
  243. package/src/stories/assets/code-brackets.svg +1 -0
  244. package/src/stories/assets/colors.svg +1 -0
  245. package/src/stories/assets/comments.svg +1 -0
  246. package/src/stories/assets/direction.svg +1 -0
  247. package/src/stories/assets/flow.svg +1 -0
  248. package/src/stories/assets/plugin.svg +1 -0
  249. package/src/stories/assets/repo.svg +1 -0
  250. package/src/stories/assets/stackalt.svg +1 -0
  251. package/src/types/index.ts +49 -0
  252. package/src/types/temp.d.ts +9 -0
  253. package/src/utils/checkArrayDuplicates.ts +3 -0
  254. package/src/utils/createChainedFunction.ts +31 -0
  255. package/src/utils/getDefaultDimensionValue.ts +28 -0
  256. package/src/utils/hoursMinutesSeconds.ts +8 -0
  257. package/src/utils/transitionEndListener.ts +29 -0
  258. package/src/utils/triggerBrowserReflow.ts +4 -0
  259. package/storybook-static/0.f9bb25299a048d2bb825.manager.bundle.js +2 -0
  260. package/storybook-static/0.f9bb25299a048d2bb825.manager.bundle.js.LICENSE.txt +8 -0
  261. package/storybook-static/01daf23af61cc99e9d75.woff2 +0 -0
  262. package/storybook-static/06a2da828c8b6497ba7a.woff +0 -0
  263. package/storybook-static/0fa24adac56865ac7e5f.ttf +0 -0
  264. package/storybook-static/12ec02e7e66abaf38243.eot +0 -0
  265. package/storybook-static/164.8f6e5926.iframe.bundle.js +2 -0
  266. package/storybook-static/164.8f6e5926.iframe.bundle.js.LICENSE.txt +8 -0
  267. package/storybook-static/181.1d6d475b.iframe.bundle.js +1 -0
  268. package/storybook-static/1cc3364249fd0db446ad.ttf +0 -0
  269. package/storybook-static/1dbed2ef5cef8fcb4cbe.ttf +0 -0
  270. package/storybook-static/1fa1c16a4a45d13f0df8.ttf +0 -0
  271. package/storybook-static/23cdaa8575b5e003dcde.eot +0 -0
  272. package/storybook-static/248db78ddf1e3568728d.woff +0 -0
  273. package/storybook-static/27d33755a2b827666dc5.woff +0 -0
  274. package/storybook-static/29.8e0bc9a8.iframe.bundle.js +2 -0
  275. package/storybook-static/29.8e0bc9a8.iframe.bundle.js.LICENSE.txt +102 -0
  276. package/storybook-static/2ac1a95228cf06e17040.woff2 +0 -0
  277. package/storybook-static/337.b8defe66.iframe.bundle.js +2 -0
  278. package/storybook-static/337.b8defe66.iframe.bundle.js.LICENSE.txt +11 -0
  279. package/storybook-static/3579203659b1428de036.eot +0 -0
  280. package/storybook-static/36229f80a738c199462d.woff2 +0 -0
  281. package/storybook-static/409a9c398a28ee4d74ff.eot +0 -0
  282. package/storybook-static/431.8ab7c276.iframe.bundle.js +1 -0
  283. package/storybook-static/431.b32fed6077acc140df7c.manager.bundle.js +1 -0
  284. package/storybook-static/4bf5fc6f93ba10519c82.eot +0 -0
  285. package/storybook-static/51d7da3f5e58e3a24a84.woff +0 -0
  286. package/storybook-static/697.1f42ad69d33c2733c631.manager.bundle.js +1 -0
  287. package/storybook-static/697.9e56beef.iframe.bundle.js +1 -0
  288. package/storybook-static/6a159f0a2005668f1f78.woff +0 -0
  289. package/storybook-static/6f781753b674130d947a.ttf +0 -0
  290. package/storybook-static/70a240717e773fe567b3.woff2 +0 -0
  291. package/storybook-static/720.f44d4e1f5203b6083ae4.manager.bundle.js +1 -0
  292. package/storybook-static/730.1240c246.iframe.bundle.js +1 -0
  293. package/storybook-static/730.7223b772132e3e068755.manager.bundle.js +1 -0
  294. package/storybook-static/73ba1c910e0f7bfc6b18.woff2 +0 -0
  295. package/storybook-static/88739612501023fa15e3.woff +0 -0
  296. package/storybook-static/8a142c29a318c432117a.woff +0 -0
  297. package/storybook-static/914.8ddb80ae2badda1468b0.manager.bundle.js +2 -0
  298. package/storybook-static/914.8ddb80ae2badda1468b0.manager.bundle.js.LICENSE.txt +94 -0
  299. package/storybook-static/978.236a5d9d5736517b960e.manager.bundle.js +2 -0
  300. package/storybook-static/978.236a5d9d5736517b960e.manager.bundle.js.LICENSE.txt +12 -0
  301. package/storybook-static/978.32e8032b.iframe.bundle.js +2 -0
  302. package/storybook-static/978.32e8032b.iframe.bundle.js.LICENSE.txt +12 -0
  303. package/storybook-static/9db5d05810cb98f2831f.ttf +0 -0
  304. package/storybook-static/9ff97e342523931a4992.eot +0 -0
  305. package/storybook-static/a40d436619020fb67db5.woff +0 -0
  306. package/storybook-static/a41d7e330757fb4b2125.woff2 +0 -0
  307. package/storybook-static/ab3494afe25b712485ed.woff +0 -0
  308. package/storybook-static/b53d0e74edc5a5fbef0a.ttf +0 -0
  309. package/storybook-static/b70a9c0ad8e8b43f5e6c.ttf +0 -0
  310. package/storybook-static/c12a83f816844ff94375.ttf +0 -0
  311. package/storybook-static/c5116d16544f932eba4b.eot +0 -0
  312. package/storybook-static/c807e115c00aaffbac11.woff2 +0 -0
  313. package/storybook-static/cadb6b94d6b0ecc3a86a.woff2 +0 -0
  314. package/storybook-static/d0cff1b064bcd84324fe.eot +0 -0
  315. package/storybook-static/d3434771ad7e9030387e.ttf +0 -0
  316. package/storybook-static/d8610c2a4fe5c177f4f6.woff +0 -0
  317. package/storybook-static/d970f426740b938f39e1.woff +0 -0
  318. package/storybook-static/d9c7eba773ff1c8df5bb.eot +0 -0
  319. package/storybook-static/dd4645bdb2f1e1a47ed7.woff2 +0 -0
  320. package/storybook-static/e0a63577ac642885f067.eot +0 -0
  321. package/storybook-static/e2625b8a1277972c9240.ttf +0 -0
  322. package/storybook-static/f469ea3aa8aacf7ad83a.eot +0 -0
  323. package/storybook-static/f632ebfa0d7b7085d542.woff2 +0 -0
  324. package/storybook-static/f93e2252d7112c3bcca5.woff2 +0 -0
  325. package/storybook-static/favicon.ico +0 -0
  326. package/storybook-static/iframe.html +348 -0
  327. package/storybook-static/index.html +59 -0
  328. package/storybook-static/main.01e6a863.iframe.bundle.js +1 -0
  329. package/storybook-static/main.dc406261155f1ebb44ce.manager.bundle.js +1 -0
  330. package/storybook-static/reactPlayerDailyMotion.469cc00f.iframe.bundle.js +1 -0
  331. package/storybook-static/reactPlayerFacebook.1423bb15.iframe.bundle.js +1 -0
  332. package/storybook-static/reactPlayerFilePlayer.e19e24a0.iframe.bundle.js +1 -0
  333. package/storybook-static/reactPlayerKaltura.d1eb0868.iframe.bundle.js +1 -0
  334. package/storybook-static/reactPlayerMixcloud.9f1b1691.iframe.bundle.js +1 -0
  335. package/storybook-static/reactPlayerPreview.9295696b.iframe.bundle.js +1 -0
  336. package/storybook-static/reactPlayerSoundCloud.d420395c.iframe.bundle.js +1 -0
  337. package/storybook-static/reactPlayerStreamable.9b655bf3.iframe.bundle.js +1 -0
  338. package/storybook-static/reactPlayerTwitch.e90e6dea.iframe.bundle.js +1 -0
  339. package/storybook-static/reactPlayerVidyard.a37ae6b3.iframe.bundle.js +1 -0
  340. package/storybook-static/reactPlayerVimeo.a7f367ee.iframe.bundle.js +1 -0
  341. package/storybook-static/reactPlayerWistia.fb351944.iframe.bundle.js +1 -0
  342. package/storybook-static/reactPlayerYouTube.3514e11a.iframe.bundle.js +1 -0
  343. package/storybook-static/runtime~main.012769eac0433a7ec083.manager.bundle.js +1 -0
  344. package/storybook-static/runtime~main.f3168ed5.iframe.bundle.js +1 -0
  345. package/storybook-static/static/css/main.3d116812.css +3 -0
  346. package/storybook-static/static/css/main.3d116812.css.map +1 -0
  347. package/tsconfig.build.json +15 -0
  348. package/tsconfig.json +7 -0
@@ -0,0 +1,58 @@
1
+ import { render } from "@testing-library/react";
2
+ import { Pagination } from "../components/Pagination";
3
+ import paginationArgs from "../components/Pagination/Pagination.args";
4
+
5
+ describe("<Pagination>", () => {
6
+ it("Pagination link should render with a disable class", () => {
7
+ const { container } = render(
8
+ <Pagination {...paginationArgs.firstDisabled} />
9
+ );
10
+ expect(container.children[0]).not.toBeNull();
11
+ const previousPagination = document.querySelector('a[class*="--disable"]');
12
+ expect(previousPagination).not.toBeNull();
13
+ });
14
+
15
+ it("First link should match the args", () => {
16
+ render(<Pagination {...paginationArgs.firstDisabled} />);
17
+ const pagination = document.querySelector('a[class*="--first-page"]');
18
+ expect(pagination).not.toBeNull();
19
+ expect(pagination?.getAttribute("href")).toEqual(
20
+ expect.stringContaining(
21
+ paginationArgs.firstDisabled.firstPageUrl as string
22
+ )
23
+ );
24
+ });
25
+
26
+ it("Previous link should match the args", () => {
27
+ render(<Pagination {...paginationArgs.firstDisabled} />);
28
+ const pagination = document.querySelector('a[class*="--prev-page"]');
29
+ expect(pagination).not.toBeNull();
30
+ expect(pagination?.getAttribute("href")).toEqual(
31
+ expect.stringContaining(
32
+ paginationArgs.firstDisabled.prevPageUrl as string
33
+ )
34
+ );
35
+ });
36
+
37
+ it("Next link should match the args", () => {
38
+ render(<Pagination {...paginationArgs.firstDisabled} />);
39
+ const pagination = document.querySelector('a[class*="--next-page"]');
40
+ expect(pagination).not.toBeNull();
41
+ expect(pagination?.getAttribute("href")).toEqual(
42
+ expect.stringContaining(
43
+ paginationArgs.firstDisabled.nextPageUrl as string
44
+ )
45
+ );
46
+ });
47
+
48
+ it("Last link should match the args", () => {
49
+ render(<Pagination {...paginationArgs.firstDisabled} />);
50
+ const pagination = document.querySelector('a[class*="--last-page"]');
51
+ expect(pagination).not.toBeNull();
52
+ expect(pagination?.getAttribute("href")).toEqual(
53
+ expect.stringContaining(
54
+ paginationArgs.firstDisabled.lastPageUrl as string
55
+ )
56
+ );
57
+ });
58
+ });
@@ -0,0 +1,48 @@
1
+ import { render } from "@testing-library/react";
2
+ import { Profile } from "../components/Profile";
3
+ import profileArgs from "../components/Profile/Profile.args";
4
+
5
+ describe("<Profile>", () => {
6
+ it("Should render Profile with content from name prop.", () => {
7
+ const { container } = render(<Profile {...profileArgs.basic} />);
8
+ expect(container.children[0]).not.toBeNull();
9
+ const nameElement = document.querySelector('[class*="--name"]');
10
+ expect(nameElement?.textContent).toEqual(profileArgs?.basic?.name);
11
+ });
12
+
13
+ it("Should render Profile with content from avatar prop.", () => {
14
+ const { container } = render(<Profile {...profileArgs.basic} />);
15
+ expect(container.children[0]).not.toBeNull();
16
+ const imgElement = document.querySelector('[class*="--avatar"]');
17
+ expect(imgElement).toHaveAttribute("src", profileArgs?.basic?.avatar);
18
+ });
19
+
20
+ it("Should render Profile with content from role prop.", () => {
21
+ const { container } = render(<Profile {...profileArgs.hasrole} />);
22
+ expect(container.children[0]).not.toBeNull();
23
+ const roleElement = document.querySelector('[class*="--role"]');
24
+ expect(roleElement?.textContent).toEqual(profileArgs?.hasrole?.role);
25
+ });
26
+
27
+ it("Should render Profile with content from description prop.", () => {
28
+ const { container } = render(<Profile {...profileArgs.hasdescription} />);
29
+ expect(container.children[0]).not.toBeNull();
30
+ const descriptionElement = document.querySelector(
31
+ '[class*="--description"]'
32
+ );
33
+ expect(descriptionElement?.textContent).toEqual(
34
+ profileArgs?.hasdescription?.description
35
+ );
36
+ });
37
+
38
+ it("Should render Profile with content from link prop.", () => {
39
+ const { container } = render(<Profile {...profileArgs.haslink} />);
40
+ expect(container.children[0]).not.toBeNull();
41
+ const linkElement = document.querySelector('[class*="--link"]');
42
+ expect(linkElement?.textContent).toEqual(profileArgs?.haslink?.link?.label);
43
+ expect(linkElement).toHaveAttribute(
44
+ "href",
45
+ profileArgs?.haslink?.link?.url
46
+ );
47
+ });
48
+ });
@@ -0,0 +1,42 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { ReadMore } from "../components/ReadMore";
4
+ import readMoreArgs from "../components/ReadMore/readMore.args";
5
+
6
+ describe("<ReadMore>", () => {
7
+ it("Should render RichText `div` with content.", () => {
8
+ const { container } = render(<ReadMore {...readMoreArgs.closedatstart} />);
9
+ expect(container.children[0]).not.toBeNull();
10
+ const richTextElement = document.querySelector('div[class*="--richtext"]');
11
+ expect(richTextElement?.textContent).toEqual(
12
+ readMoreArgs.closedatstart.excerpt
13
+ );
14
+ });
15
+
16
+ it("Should render `button` with correct label from prop buttonlabel", () => {
17
+ render(<ReadMore {...readMoreArgs.closedatstart} />);
18
+ const buttonElement = screen.getAllByRole("button");
19
+ expect(buttonElement).not.toBeNull();
20
+ expect(buttonElement[0].textContent).toEqual(
21
+ readMoreArgs?.closedatstart?.buttonlabel?.closed
22
+ );
23
+ });
24
+
25
+ it("Should change contents of RichText `div` with new content.", () => {
26
+ render(<ReadMore {...readMoreArgs.closedatstart} />);
27
+ const richTextElement = document.querySelector(
28
+ 'div[class*="--richtext"]'
29
+ ) as Element;
30
+ userEvent.click(
31
+ screen.getByText(
32
+ readMoreArgs?.closedatstart?.buttonlabel?.closed as string,
33
+ {
34
+ selector: "button",
35
+ }
36
+ )
37
+ );
38
+ expect(richTextElement.textContent).toEqual(
39
+ readMoreArgs.closedatstart.fulltext
40
+ );
41
+ });
42
+ });
@@ -0,0 +1,16 @@
1
+ import { render } from "@testing-library/react";
2
+ import { RichText } from "../components/RichText";
3
+ import richTextArgs from "../components/RichText/richText.args";
4
+
5
+ describe("<RichText>", () => {
6
+ it("Should render `div` with content.", () => {
7
+ const { container } = render(<RichText {...richTextArgs.richtext} />);
8
+ // Parse the content as a domstring and get the text content
9
+ const textContent = new DOMParser().parseFromString(
10
+ richTextArgs.richtext.content,
11
+ "text/html"
12
+ ).documentElement.textContent;
13
+ expect(container.children[0]).not.toBeNull();
14
+ expect(container.children[0].textContent).toEqual(textContent);
15
+ });
16
+ });
@@ -0,0 +1,35 @@
1
+ import { fireEvent, render, screen } from "@testing-library/react";
2
+ import { SearchField } from "../components/SearchField";
3
+ import searchFieldArgs from "../components/SearchField/SearchField.args";
4
+
5
+ describe("<SearchField>", () => {
6
+ it("Should render `search field` with correct label from prop input.placeholder", () => {
7
+ const { container } = render(
8
+ <SearchField {...searchFieldArgs.searchfield} />
9
+ );
10
+ expect(container.children[0]).not.toBeNull();
11
+ const inputElement = screen.getByPlaceholderText(
12
+ searchFieldArgs.searchfield.input.placeholder
13
+ );
14
+ expect(inputElement).not.toBeNull();
15
+ });
16
+
17
+ it("Should render `search field input` with disabled attribute", () => {
18
+ const { container } = render(
19
+ <SearchField {...searchFieldArgs.searchfielddisabled} />
20
+ );
21
+ expect(container.children[0]).not.toBeNull();
22
+ const inputElement = screen.getByPlaceholderText(
23
+ searchFieldArgs.searchfielddisabled.input.placeholder
24
+ );
25
+ expect(inputElement).toHaveAttribute("disabled", "");
26
+ });
27
+
28
+ it('calls "callback" prop on button click', () => {
29
+ const onClick = jest.fn();
30
+ render(<SearchField {...searchFieldArgs.searchfield} callback={onClick} />);
31
+ const buttonElement = screen.getAllByRole("button");
32
+ fireEvent.click(buttonElement[0]);
33
+ expect(onClick).toHaveBeenCalled();
34
+ });
35
+ });
@@ -0,0 +1,12 @@
1
+ import { render } from "@testing-library/react";
2
+ import { TableOfContents } from "../components/TableOfContents";
3
+ import tableOfContentsArgs from "../components/TableOfContents/TableOfContents.args";
4
+
5
+ describe("<TableOfContents>", () => {
6
+ it("Should render `ul` with some items.", () => {
7
+ const { container } = render(
8
+ <TableOfContents {...tableOfContentsArgs.toc} />
9
+ );
10
+ expect(container).not.toBeNull();
11
+ });
12
+ });
@@ -0,0 +1,10 @@
1
+ import { render } from "@testing-library/react";
2
+ import { TagSet } from "../components/Tag";
3
+ import tagSetArgs from "../components/Tag/TagSet.args";
4
+
5
+ describe("<TagSet>", () => {
6
+ it("Should render `button` with correct class name from type prop", () => {
7
+ const { container } = render(<TagSet {...tagSetArgs.tag} />);
8
+ expect(container).not.toBeNull();
9
+ });
10
+ });
@@ -0,0 +1,19 @@
1
+ import { AccordionProps } from "./Accordion.props";
2
+
3
+ const large: AccordionProps = {
4
+ onButtonClick: (e) => {
5
+ console.log(e.target);
6
+ },
7
+ allowMultipleExpanded: true,
8
+ defaultAccordionsExpanded: ["l1", "l2"],
9
+ children: "",
10
+ };
11
+
12
+ /**
13
+ * Sample prop definitions for Accordions's enumerable properties (imported in stories and tests).
14
+ */
15
+ const AccordionArgs = {
16
+ large,
17
+ };
18
+
19
+ export default AccordionArgs;
@@ -0,0 +1,39 @@
1
+ import { MouseEvent } from "react";
2
+ export { default as AccordionItem } from "./AccordionItem";
3
+ import { headingLevel } from "../../types";
4
+ import { getUpdatedItems } from "@ilo-org/utils";
5
+
6
+ export interface AccordionProps {
7
+ /**
8
+ * Specify the content of your Accordion.
9
+ */
10
+ children: ReactElement<AccordionItem> | Array<ReactElement<AccordionItem>>;
11
+
12
+ /**
13
+ * Callback to onButtonClick event;
14
+ */
15
+ onButtonClick?: (e: MouseEvent<HTMLButtonElement>, i: any) => void;
16
+
17
+ /**
18
+ * Allow multiple accordions to be expanded at once, default value is false
19
+ */
20
+ allowMultipleExpanded?: boolean;
21
+
22
+ /**
23
+ * Default accordions expanded on first load
24
+ */
25
+ defaultAccordionsExpanded?: string[];
26
+
27
+ /**
28
+ * Specify an optional className to be added to your accordion.
29
+ */
30
+ className?: string;
31
+ }
32
+
33
+ export interface AccordionContextProps {
34
+ activeItems: string[];
35
+ getUpdatedItems: getUpdatedItems;
36
+ setActiveItems: Dispatch<SetStateAction<string[]>>;
37
+ allowMultipleExpanded: boolean;
38
+ onButtonClick?: (e: MouseEvent<HTMLButtonElement>, i: any) => void;
39
+ }
@@ -0,0 +1,70 @@
1
+ import {
2
+ useState,
3
+ useEffect,
4
+ createContext,
5
+ FC,
6
+ ReactElement,
7
+ Children,
8
+ } from "react";
9
+ import classNames from "classnames";
10
+ import { getUpdatedItems } from "@ilo-org/utils";
11
+ import useGlobalSettings from "../../hooks/useGlobalSettings";
12
+ import { AccordionProps, AccordionContextProps } from "./Accordion.props";
13
+ import { checkArrayDuplicates } from "../../utils/checkArrayDuplicates";
14
+
15
+ export const AccordionContext = createContext({} as AccordionContextProps);
16
+
17
+ const Accordion: FC<AccordionProps> = ({
18
+ children,
19
+ allowMultipleExpanded = false,
20
+ onButtonClick,
21
+ defaultAccordionsExpanded = [],
22
+ className,
23
+ }) => {
24
+ const { prefix } = useGlobalSettings();
25
+ const baseClass = `${prefix}--accordion`;
26
+ const [activeItems, setActiveItems] = useState<string[]>([]);
27
+
28
+ const accordionClasses = classNames(className, {
29
+ [baseClass]: true,
30
+ });
31
+
32
+ const defaultAccordionsExpandedString = JSON.stringify(
33
+ defaultAccordionsExpanded
34
+ );
35
+
36
+ useEffect(() => {
37
+ const expandedOnLoad = allowMultipleExpanded
38
+ ? defaultAccordionsExpanded
39
+ : defaultAccordionsExpanded.length > 0
40
+ ? [defaultAccordionsExpanded[0]]
41
+ : defaultAccordionsExpanded;
42
+ setActiveItems(expandedOnLoad);
43
+ }, [defaultAccordionsExpandedString, allowMultipleExpanded]); //eslint-disable-line react-hooks/exhaustive-deps
44
+
45
+ if (children) {
46
+ const ids: string[] = [];
47
+ Children.forEach(children, (child: ReactElement) => {
48
+ ids.push(child.props.id);
49
+ });
50
+ if (checkArrayDuplicates(ids)) {
51
+ console.warn("Warning: Accordion items must have unique ids.");
52
+ }
53
+ }
54
+
55
+ return (
56
+ <AccordionContext.Provider
57
+ value={{
58
+ activeItems,
59
+ setActiveItems,
60
+ getUpdatedItems,
61
+ allowMultipleExpanded,
62
+ onButtonClick,
63
+ }}
64
+ >
65
+ <ul className={accordionClasses}>{children}</ul>
66
+ </AccordionContext.Provider>
67
+ );
68
+ };
69
+
70
+ export default Accordion;
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export default interface AccordionButtonProps {
4
+ /**
5
+ * Specify the content of your Button.
6
+ */
7
+ children: ReactNode;
8
+
9
+ /**
10
+ * Specify an optional className to be added to your Button.
11
+ */
12
+ className?: string;
13
+ }
@@ -0,0 +1,60 @@
1
+ // prettier-ignore
2
+ import { FC, useContext, MouseEvent } from "react";
3
+ import classNames from "classnames";
4
+ import useGlobalSettings from "../../hooks/useGlobalSettings";
5
+ import { default as AccordionButtonProps } from "./AccordionButton.props";
6
+ import { AccordionContext } from "./Accordion";
7
+ import { AccordionItemContext } from "./AccordionItem";
8
+
9
+ const AccordionButton: FC<AccordionButtonProps> = ({
10
+ children,
11
+ className,
12
+ ...rest
13
+ }) => {
14
+ const { prefix } = useGlobalSettings();
15
+ const baseClass = `${prefix}--accordion--button`;
16
+
17
+ const {
18
+ activeItems,
19
+ setActiveItems,
20
+ getUpdatedItems,
21
+ allowMultipleExpanded,
22
+ onButtonClick,
23
+ } = useContext(AccordionContext);
24
+ const { id } = useContext(AccordionItemContext);
25
+ const open = activeItems.indexOf(id) > -1;
26
+
27
+ const accordionButtonClasses = classNames(className, {
28
+ [baseClass]: true,
29
+ });
30
+
31
+ /**
32
+ * On click, get id of clicked item, and set that item in state to 'open', all others to 'closed'
33
+ */
34
+ const handleClick = (e: MouseEvent<HTMLButtonElement>, id: string) => {
35
+ setActiveItems(
36
+ getUpdatedItems({ id, itemStatuses: activeItems, allowMultipleExpanded })
37
+ );
38
+ if (onButtonClick) {
39
+ onButtonClick(e, id);
40
+ }
41
+ e.currentTarget.blur();
42
+ };
43
+
44
+ return (
45
+ <div className={`${prefix}--h3`}>
46
+ <button
47
+ className={accordionButtonClasses}
48
+ aria-expanded={open}
49
+ onClick={(e) => handleClick(e, id)}
50
+ aria-controls={`panel-${id}`}
51
+ id={`button-${id}`}
52
+ {...rest}
53
+ >
54
+ {children}
55
+ </button>
56
+ </div>
57
+ );
58
+ };
59
+
60
+ export default AccordionButton;
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export interface AccordionItemContextProps {
4
+ /**
5
+ * The accordion item's unique id.
6
+ */
7
+ id: string;
8
+ }
9
+
10
+ export interface AccordionItemProps {
11
+ /**
12
+ * Specify the id of the accordion item.
13
+ */
14
+ id: string;
15
+
16
+ /**
17
+ * Specify the content of your Button.
18
+ */
19
+ children: ReactNode;
20
+
21
+ /**
22
+ * Specify an optional className to be added to your Button.
23
+ */
24
+ className?: string;
25
+ }
@@ -0,0 +1,33 @@
1
+ import { FC, createContext } from "react";
2
+ import classNames from "classnames";
3
+ import useGlobalSettings from "../../hooks/useGlobalSettings";
4
+ import {
5
+ AccordionItemProps,
6
+ AccordionItemContextProps,
7
+ } from "./AccordionItem.props";
8
+
9
+ export const AccordionItemContext = createContext(
10
+ {} as AccordionItemContextProps
11
+ );
12
+
13
+ const AccordionItem: FC<AccordionItemProps> = ({
14
+ children,
15
+ id,
16
+ className,
17
+ ...rest
18
+ }) => {
19
+ const { prefix } = useGlobalSettings();
20
+ const baseClass = `${prefix}--accordion--item`;
21
+ const accordionItemClasses = classNames(className, {
22
+ [baseClass]: true,
23
+ });
24
+ return (
25
+ <AccordionItemContext.Provider value={{ id }}>
26
+ <li className={accordionItemClasses} {...rest}>
27
+ {children}
28
+ </li>
29
+ </AccordionItemContext.Provider>
30
+ );
31
+ };
32
+
33
+ export default AccordionItem;
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export default interface AccordionPanelProps {
4
+ /**
5
+ * Specify the content of your Button.
6
+ */
7
+ children: ReactNode;
8
+
9
+ /**
10
+ * Specify an optional className to be added to your Button.
11
+ */
12
+ className?: string;
13
+
14
+ /**
15
+ * Duration of the collapse animation in milliseconds, to ensure that
16
+ * finishing callbacks are fired even if the original browser transition end
17
+ * events are canceled
18
+ */
19
+ timeout?: number;
20
+ }
@@ -0,0 +1,47 @@
1
+ import { FC, useContext, useLayoutEffect, useRef, useState } from "react";
2
+ import classNames from "classnames";
3
+ import useGlobalSettings from "../../hooks/useGlobalSettings";
4
+ import { default as AccordionPanelProps } from "./AccordionPanel.props";
5
+ import { AccordionContext } from "./Accordion";
6
+ import { AccordionItemContext } from "./AccordionItem";
7
+
8
+ const AccordionPanel: FC<AccordionPanelProps> = ({
9
+ children,
10
+ className,
11
+ timeout = 600,
12
+ ...rest
13
+ }) => {
14
+ const { activeItems } = useContext(AccordionContext);
15
+ const { id } = useContext(AccordionItemContext);
16
+ const [panelHeight, setPanelHeight] = useState(0);
17
+ const open = activeItems.indexOf(id) > -1;
18
+ const { prefix } = useGlobalSettings();
19
+ const baseClass = `${prefix}--accordion--panel`;
20
+
21
+ const accordionaPanelClasses = classNames(className, {
22
+ [baseClass]: true,
23
+ [`${baseClass}--open`]: open,
24
+ });
25
+
26
+ const ref = useRef<HTMLInputElement>();
27
+
28
+ useLayoutEffect(() => {
29
+ ref.current && setPanelHeight(ref.current.scrollHeight);
30
+ });
31
+
32
+ return (
33
+ <div
34
+ className={accordionaPanelClasses}
35
+ id={`panel-${id}`}
36
+ aria-labelledby={`button-${id}`}
37
+ role="region"
38
+ ref={ref as any}
39
+ style={{ ["--height" as any]: `${panelHeight}px` }}
40
+ {...rest}
41
+ >
42
+ <div className={`${prefix}--accordion--innerpanel`}>{children}</div>
43
+ </div>
44
+ );
45
+ };
46
+
47
+ export default AccordionPanel;
@@ -0,0 +1,4 @@
1
+ export { default as AccordionButton } from "./AccordionButton";
2
+ export { default as AccordionPanel } from "./AccordionPanel";
3
+ export { default as AccordionItem } from "./AccordionItem";
4
+ export { default as Accordion } from "./Accordion";