reso-ui 1.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 (445) hide show
  1. package/.github/workflows/cd.yml +49 -0
  2. package/.github/workflows/ci.yml +55 -0
  3. package/.github/workflows/release.yml +41 -0
  4. package/.husky/commit-msg +4 -0
  5. package/.storybook/main.js +51 -0
  6. package/.storybook/preview.js +9 -0
  7. package/CHANGELOG.md +20 -0
  8. package/README.md +209 -0
  9. package/__mocks__/fileMock.js +2 -0
  10. package/__mocks__/styleMock.js +2 -0
  11. package/commitlint.config.js +6 -0
  12. package/custom.d.ts +8 -0
  13. package/dist/09f84f6035cfbf7c3984b6177d36b516.ttf +0 -0
  14. package/dist/0d5fdfd739931f51a5df.ttf +1 -0
  15. package/dist/0e407c5680c91e584bb084ebfb5c086b.ttf +0 -0
  16. package/dist/2e942562af5b9b655c1f.ttf +1 -0
  17. package/dist/2f6d81277badc25ac944.ttf +1 -0
  18. package/dist/32743a4d0c4282e2070b574e6e5038ab.ttf +0 -0
  19. package/dist/3727d88dec67e1e78cf987dab60d9887.ttf +0 -0
  20. package/dist/3fcedd69c66d642ae94c.ttf +1 -0
  21. package/dist/404e299be26d78e6679447ea7cb2d41f.ttf +0 -0
  22. package/dist/47afb8d0034314dd9508.ttf +1 -0
  23. package/dist/4a24733ca942ad738fa2.ttf +1 -0
  24. package/dist/4e860c8656d815bb2429.ttf +1 -0
  25. package/dist/4e8cea18952c83074ec35f7bf1b176c4.ttf +0 -0
  26. package/dist/4ed78cd5d64af4efc3c714622b9372d4.ttf +0 -0
  27. package/dist/5568b72206d0e08121c5.ttf +1 -0
  28. package/dist/5ccd942a8800a68d44b6d3f5431909ec.ttf +0 -0
  29. package/dist/6fca6423291a2d06943a.ttf +1 -0
  30. package/dist/791134e64e8ef9da3f77.ttf +1 -0
  31. package/dist/8081832fc5cfbf634aa664a9eff0350e.ttf +0 -0
  32. package/dist/8c5e890c33607ed0e632.ttf +1 -0
  33. package/dist/9445d60ed014306b6aec1c69bf9d0174.ttf +0 -0
  34. package/dist/94b768c07879dde09ab4d5f6ad92cbc6.ttf +0 -0
  35. package/dist/9e1bb626874ed49aa343d66b8d66ceaf.ttf +0 -0
  36. package/dist/9e50c04f0efdf7813013.ttf +1 -0
  37. package/dist/9f57e7d4017ef9b93ae75e2c86f00d60.ttf +0 -0
  38. package/dist/a61eaf4c2e4d44d6db6a576706e9e6ae.ttf +0 -0
  39. package/dist/b10e7a6e913ca664cbdcb17894f9b419.ttf +0 -0
  40. package/dist/c0ee626f116bbcc4c721.ttf +1 -0
  41. package/dist/c27d458a5358094ac974.ttf +1 -0
  42. package/dist/c27efdacccfbcbd14ff2.ttf +1 -0
  43. package/dist/c76ea376f095f2e1e5138b226ad0f9cd.ttf +0 -0
  44. package/dist/cc7ee35ca49c83d4cfca932a03139f99.ttf +0 -0
  45. package/dist/cce5625b56ec678e42021270b84ef400.ttf +0 -0
  46. package/dist/ce3fff31c0f262aca227664f6f0d2fa2.ttf +0 -0
  47. package/dist/d01ea7f941ca3838ae97.ttf +1 -0
  48. package/dist/db767bc3ab4b2e42b4b1.ttf +1 -0
  49. package/dist/eacee5bb9c7fee5939aebf2335e5106a.ttf +0 -0
  50. package/dist/eebe2ceaa4fd239fe3fb.ttf +1 -0
  51. package/dist/eef56d4542bc2932ff9f.ttf +1 -0
  52. package/dist/f072662071f642a2e2b9.ttf +1 -0
  53. package/dist/f41b63c0bb0963ace821a2b99458c1cd.ttf +0 -0
  54. package/dist/f456d233db96b6889eeb.ttf +1 -0
  55. package/dist/fb248a35b11180453c6879a29d94eff4.ttf +0 -0
  56. package/dist/fb71f2d88c40660bb2e0.ttf +1 -0
  57. package/dist/main.js +2 -0
  58. package/dist/main.js.LICENSE.txt +20 -0
  59. package/jest-dom-setup.ts +1 -0
  60. package/jest.config.js +194 -0
  61. package/package.json +71 -0
  62. package/public/fallback-image-example.jpg +0 -0
  63. package/public/hero-example.jpg +0 -0
  64. package/public/image-example-2.jpg +0 -0
  65. package/public/image-example-3.jpg +0 -0
  66. package/public/image-example-4.jpg +0 -0
  67. package/public/image-example.jpg +0 -0
  68. package/public/index.html +12 -0
  69. package/release.config.js +29 -0
  70. package/src/App.scss +35 -0
  71. package/src/components/Banners/Banner/Banner.tsx +60 -0
  72. package/src/components/Banners/Banner/__test__/Banner.test.tsx +88 -0
  73. package/src/components/Banners/Banner/index.ts +3 -0
  74. package/src/components/Banners/Banner/stories/Banner.stories.tsx +81 -0
  75. package/src/components/Banners/Banner/stories/storiesStyle.scss +4 -0
  76. package/src/components/Banners/Banner/styles/Banner.layout.scss +51 -0
  77. package/src/components/Banners/Banner-Wrapper/Banner-Wrapper.tsx +45 -0
  78. package/src/components/Banners/Banner-Wrapper/__test__/Banner-Wrapper.test.tsx +72 -0
  79. package/src/components/Banners/Banner-Wrapper/index.ts +3 -0
  80. package/src/components/Banners/Banner-Wrapper/stories/Banner-Wrapper.stories.tsx +90 -0
  81. package/src/components/Banners/Banner-Wrapper/styles/Banner-Wrapper.layout.scss +18 -0
  82. package/src/components/Banners/index.ts +3 -0
  83. package/src/components/Buttons/Back/Back.tsx +80 -0
  84. package/src/components/Buttons/Back/__test__/Back.test.tsx +51 -0
  85. package/src/components/Buttons/Back/index.ts +3 -0
  86. package/src/components/Buttons/Back/stories/Back.stories.tsx +74 -0
  87. package/src/components/Buttons/Back/stories/storiesStyle.scss +11 -0
  88. package/src/components/Buttons/Back/styles/Back.layout.scss +12 -0
  89. package/src/components/Buttons/Back/styles/Back.theme.scss +7 -0
  90. package/src/components/Buttons/Button/Button.tsx +85 -0
  91. package/src/components/Buttons/Button/__test__/Button.test.tsx +66 -0
  92. package/src/components/Buttons/Button/index.ts +2 -0
  93. package/src/components/Buttons/Button/stories/Button.stories.tsx +90 -0
  94. package/src/components/Buttons/Button/stories/storiesStyle.scss +7 -0
  95. package/src/components/Buttons/Button/styles/Button.layout.scss +30 -0
  96. package/src/components/Buttons/Button/styles/Button.theme.scss +42 -0
  97. package/src/components/Buttons/index.ts +3 -0
  98. package/src/components/Card/Card-Container/Card-Container.tsx +59 -0
  99. package/src/components/Card/Card-Container/__test__/Card-Container.test.tsx +62 -0
  100. package/src/components/Card/Card-Container/index.ts +3 -0
  101. package/src/components/Card/Card-Container/stories/Card-Container.stories.tsx +45 -0
  102. package/src/components/Card/Card-Container/styles/Card-Container.layout.scss +8 -0
  103. package/src/components/Card/Card-Container/styles/Card-Container.theme.scss +9 -0
  104. package/src/components/Card/Card-Content/Card-Content.tsx +51 -0
  105. package/src/components/Card/Card-Content/__test__/Card-Content.test.tsx +84 -0
  106. package/src/components/Card/Card-Content/index.ts +3 -0
  107. package/src/components/Card/Card-Content/stories/Card-Content.stories.tsx +62 -0
  108. package/src/components/Card/Card-Content/styles/Card-Content.layout.scss +12 -0
  109. package/src/components/Card/Card-Summary-Value/Card-Summary-Value.tsx +39 -0
  110. package/src/components/Card/Card-Summary-Value/__test__/Card-Summary-Value.test.tsx +43 -0
  111. package/src/components/Card/Card-Summary-Value/index.ts +3 -0
  112. package/src/components/Card/Card-Summary-Value/stories/Card-Summary-Value.stories.tsx +60 -0
  113. package/src/components/Card/Card-Summary-Value/styles/Card-Summary-Value.layout.scss +7 -0
  114. package/src/components/Card/index.ts +4 -0
  115. package/src/components/Containers/Center-Container/Center-Container.tsx +40 -0
  116. package/src/components/Containers/Center-Container/__test__/Center-Container.test.tsx +39 -0
  117. package/src/components/Containers/Center-Container/index.ts +3 -0
  118. package/src/components/Containers/Center-Container/stories/Center-Container.stories.tsx +35 -0
  119. package/src/components/Containers/Center-Container/stories/storiesStyle.scss +10 -0
  120. package/src/components/Containers/Center-Container/styles/Center-Container.layout.scss +6 -0
  121. package/src/components/Containers/Flex/Flex.tsx +93 -0
  122. package/src/components/Containers/Flex/__test__/Flex.test.tsx +359 -0
  123. package/src/components/Containers/Flex/index.ts +3 -0
  124. package/src/components/Containers/Flex/stories/Flex.stories.tsx +73 -0
  125. package/src/components/Containers/Flex/stories/storiesStyle.scss +6 -0
  126. package/src/components/Containers/Flex/styles/Flex.layout.scss +54 -0
  127. package/src/components/Containers/Horizontal-Scroll-Container/Horizontal-Scroll-Container.tsx +51 -0
  128. package/src/components/Containers/Horizontal-Scroll-Container/__test__/Horizontal-Scroll-Container.test.tsx +50 -0
  129. package/src/components/Containers/Horizontal-Scroll-Container/index.ts +3 -0
  130. package/src/components/Containers/Horizontal-Scroll-Container/stories/Horizontal-Scroll-Container.stories.tsx +89 -0
  131. package/src/components/Containers/Horizontal-Scroll-Container/styles/Horizontal-Scroll-Container.layout.scss +12 -0
  132. package/src/components/Containers/Horizontal-Scroll-Item/Horizontal-Scroll-Item.tsx +48 -0
  133. package/src/components/Containers/Horizontal-Scroll-Item/__test__/Horizontal-Scroll-Item.test.tsx +50 -0
  134. package/src/components/Containers/Horizontal-Scroll-Item/index.ts +3 -0
  135. package/src/components/Containers/Horizontal-Scroll-Item/stories/Horizontal-Scroll-Item.stories.tsx +59 -0
  136. package/src/components/Containers/Horizontal-Scroll-Item/styles/Horizontal-Scroll-Item.layout.scss +5 -0
  137. package/src/components/Containers/Loading-Container/Loading-Container.tsx +100 -0
  138. package/src/components/Containers/Loading-Container/__test__/Loading-Container.test.tsx +197 -0
  139. package/src/components/Containers/Loading-Container/index.ts +3 -0
  140. package/src/components/Containers/Loading-Container/stories/Loading-Container.stories.tsx +113 -0
  141. package/src/components/Containers/Loading-Container/styles/Loading-Container.layout.scss +13 -0
  142. package/src/components/Containers/View/View.tsx +57 -0
  143. package/src/components/Containers/View/__test__/View.test.tsx +61 -0
  144. package/src/components/Containers/View/index.ts +3 -0
  145. package/src/components/Containers/View/stories/View.stories.tsx +60 -0
  146. package/src/components/Containers/View/stories/storiesStyle.scss +12 -0
  147. package/src/components/Containers/View/styles/View.layout.scss +6 -0
  148. package/src/components/Containers/View/styles/View.theme.scss +7 -0
  149. package/src/components/Containers/index.ts +7 -0
  150. package/src/components/Date-Selector/Date-Selector.tsx +266 -0
  151. package/src/components/Date-Selector/__test__/Date-Selector.test.tsx +435 -0
  152. package/src/components/Date-Selector/components/Date-Component-Navigation/Date-Component-Navigation.tsx +178 -0
  153. package/src/components/Date-Selector/components/Date-Component-Navigation/__test__/Date-Component-Navigation.test.tsx +297 -0
  154. package/src/components/Date-Selector/components/Date-Component-Navigation/styles/Date-Component-Navigation.layout.scss +26 -0
  155. package/src/components/Date-Selector/components/Date-Component-Navigation/styles/Date-Component-Navigation.theme.scss +12 -0
  156. package/src/components/Date-Selector/components/Date-Day-Name/Date-Day-Name.tsx +52 -0
  157. package/src/components/Date-Selector/components/Date-Day-Name/__test__/Date-Day-Name.test.tsx +52 -0
  158. package/src/components/Date-Selector/components/Date-Day-Name/styles/Date-Day-Name.layout.scss +5 -0
  159. package/src/components/Date-Selector/components/Date-Day-Name/styles/Date-Day-Name.theme.scss +4 -0
  160. package/src/components/Date-Selector/components/Date-Day-Number/Date-Day-Number.tsx +119 -0
  161. package/src/components/Date-Selector/components/Date-Day-Number/__test__/Date-Day-Number.test.tsx +201 -0
  162. package/src/components/Date-Selector/components/Date-Day-Number/styles/Date-Day-Number.layout.scss +22 -0
  163. package/src/components/Date-Selector/components/Date-Day-Number/styles/Date-Day-Number.theme.scss +15 -0
  164. package/src/components/Date-Selector/components/Date-Days-Grid/Date-Days-Grid.tsx +300 -0
  165. package/src/components/Date-Selector/components/Date-Days-Grid/__test__/Date-Days-Grid.test.tsx +536 -0
  166. package/src/components/Date-Selector/components/Date-Days-Grid/styles/Date-Days-Grid.layout.scss +11 -0
  167. package/src/components/Date-Selector/components/Date-Days-Grid/styles/Date-Days-Grid.theme.scss +3 -0
  168. package/src/components/Date-Selector/components/Date-Selector-Header/Date-Selector-Header.tsx +65 -0
  169. package/src/components/Date-Selector/components/Date-Selector-Header/__test__/Date-Selector-Header.test.tsx +101 -0
  170. package/src/components/Date-Selector/components/Date-Selector-Header/styles/Date-Selector-Header.layout.scss +27 -0
  171. package/src/components/Date-Selector/components/Date-Selector-Header/styles/Date-Selector-Header.theme.scss +4 -0
  172. package/src/components/Date-Selector/index.ts +3 -0
  173. package/src/components/Date-Selector/stories/Date-Selector.stories.tsx +140 -0
  174. package/src/components/Date-Selector/stories/storiesStyle.scss +4 -0
  175. package/src/components/Date-Selector/styles/Date-Selector.layout.scss +36 -0
  176. package/src/components/Date-Selector/styles/Date-Selector.shared.scss +4 -0
  177. package/src/components/Date-Selector/styles/Date-Selector.theme.scss +9 -0
  178. package/src/components/Date-Selector/types/index.ts +77 -0
  179. package/src/components/Date-Selector/utils/__test__/Date-Selector-Utils.test.ts +62 -0
  180. package/src/components/Date-Selector/utils/index.ts +76 -0
  181. package/src/components/Dialog/Dialog.tsx +213 -0
  182. package/src/components/Dialog/__test__/Dialog.test.tsx +220 -0
  183. package/src/components/Dialog/index.ts +3 -0
  184. package/src/components/Dialog/stories/Dialog.stories.tsx +124 -0
  185. package/src/components/Dialog/styles/Dialog.layout.scss +38 -0
  186. package/src/components/Dialog/styles/Dialog.theme.scss +21 -0
  187. package/src/components/Errors/Component-Error/Component-Error.tsx +92 -0
  188. package/src/components/Errors/Component-Error/__test__/Component-Error.test.tsx +93 -0
  189. package/src/components/Errors/Component-Error/index.ts +3 -0
  190. package/src/components/Errors/Component-Error/stories/Component-Error.stories.tsx +55 -0
  191. package/src/components/Errors/Component-Error/stories/storiesStyle.scss +4 -0
  192. package/src/components/Errors/Component-Error/styles/Component-Error.layout.scss +27 -0
  193. package/src/components/Errors/Component-Error/styles/Component-Error.theme.scss +12 -0
  194. package/src/components/Errors/Full-Screen-Error/Full-Screen-Error.tsx +91 -0
  195. package/src/components/Errors/Full-Screen-Error/__test__/Full-Screen-Error.test.tsx +81 -0
  196. package/src/components/Errors/Full-Screen-Error/index.ts +3 -0
  197. package/src/components/Errors/Full-Screen-Error/stories/Full-Screen-Error.stories.tsx +69 -0
  198. package/src/components/Errors/Full-Screen-Error/styles/Full-Screen-Error.layout.scss +26 -0
  199. package/src/components/Errors/Full-Screen-Error/styles/Full-Screen-Error.theme.scss +7 -0
  200. package/src/components/Errors/index.ts +3 -0
  201. package/src/components/Example/Example.tsx +51 -0
  202. package/src/components/Example/__test__/Example.test.tsx +12 -0
  203. package/src/components/Example/index.ts +3 -0
  204. package/src/components/Example/stories/Example.stories.tsx +48 -0
  205. package/src/components/Example/stories/storiesStyle.scss +4 -0
  206. package/src/components/Example/styles/Example.layout.scss +3 -0
  207. package/src/components/Example/styles/Example.theme.scss +8 -0
  208. package/src/components/External-Links/External-Links.tsx +93 -0
  209. package/src/components/External-Links/__test__/External-Links.test.tsx +81 -0
  210. package/src/components/External-Links/index.ts +3 -0
  211. package/src/components/External-Links/stories/External-Links.stories.tsx +111 -0
  212. package/src/components/External-Links/stories/storiesStyle.scss +7 -0
  213. package/src/components/External-Links/styles/External-Links.layout.scss +14 -0
  214. package/src/components/External-Links/styles/External-Links.theme.scss +4 -0
  215. package/src/components/Footer/Footer.tsx +56 -0
  216. package/src/components/Footer/__test__/Footer.test.tsx +63 -0
  217. package/src/components/Footer/index.ts +3 -0
  218. package/src/components/Footer/stories/Footer.stories.tsx +52 -0
  219. package/src/components/Footer/stories/storiesStyle.scss +5 -0
  220. package/src/components/Footer/styles/Footer.layout.scss +13 -0
  221. package/src/components/Footer/styles/Footer.theme.scss +4 -0
  222. package/src/components/Form/Form-Container/Form-Container.tsx +62 -0
  223. package/src/components/Form/Form-Container/__test__/Form-Container.test.tsx +75 -0
  224. package/src/components/Form/Form-Container/index.ts +3 -0
  225. package/src/components/Form/Form-Container/stories/Form-Container.stories.tsx +105 -0
  226. package/src/components/Form/Form-Container/styles/Form-Container.layout.scss +2 -0
  227. package/src/components/Form/Form-Container/styles/Form-Container.theme.scss +2 -0
  228. package/src/components/Form/Form-Input-Container/Form-Input-Container.tsx +61 -0
  229. package/src/components/Form/Form-Input-Container/__test__/Form-Input-Container.test.tsx +97 -0
  230. package/src/components/Form/Form-Input-Container/index.ts +3 -0
  231. package/src/components/Form/Form-Input-Container/stories/Form-Input-Container.stories.tsx +72 -0
  232. package/src/components/Form/Form-Input-Container/styles/Form-Input-Container.layout.scss +2 -0
  233. package/src/components/Form/Form-Input-Container/styles/Form-Input-Container.theme.scss +2 -0
  234. package/src/components/Form/Form-Types.ts +20 -0
  235. package/src/components/Form/Inputs/Input-Label/Input-Label.tsx +110 -0
  236. package/src/components/Form/Inputs/Input-Label/index.ts +3 -0
  237. package/src/components/Form/Inputs/Input-Label/styles/Input-Label.layout.scss +35 -0
  238. package/src/components/Form/Inputs/Input-Label/styles/Input-Label.theme.scss +7 -0
  239. package/src/components/Form/Inputs/Submit-Button/Submit-Button.tsx +61 -0
  240. package/src/components/Form/Inputs/Submit-Button/index.ts +3 -0
  241. package/src/components/Form/Inputs/Submit-Button/styles/Submit-Button.layout.scss +11 -0
  242. package/src/components/Form/Inputs/Submit-Button/styles/Submit-Button.theme.scss +6 -0
  243. package/src/components/Form/Inputs/Text-Input/Text-Input.tsx +100 -0
  244. package/src/components/Form/Inputs/Text-Input/index.ts +3 -0
  245. package/src/components/Form/Inputs/Text-Input/styles/Text-Input.layout.scss +12 -0
  246. package/src/components/Form/Inputs/Text-Input/styles/Text-Input.theme.scss +10 -0
  247. package/src/components/Form/Inputs/sharedStyles.scss +11 -0
  248. package/src/components/Form/Modular/Form-Contexts-Repository.ts +26 -0
  249. package/src/components/Form/Modular/Form-Data-Context.ts +11 -0
  250. package/src/components/Form/Modular/Hooks.ts +127 -0
  251. package/src/components/Form/Modular/Parent-Form-Context-Provider.tsx +22 -0
  252. package/src/components/Form/Sub-Form-Container/Sub-Form-Container.tsx +83 -0
  253. package/src/components/Form/Sub-Form-Container/__test__/Sub-Form-Container.test.tsx +82 -0
  254. package/src/components/Form/Sub-Form-Container/index.ts +3 -0
  255. package/src/components/Form/Sub-Form-Container/stories/Sub-Form-Container.stories.tsx +121 -0
  256. package/src/components/Form/Sub-Form-Container/styles/Sub-Form-Container.layout.scss +7 -0
  257. package/src/components/Form/Sub-Form-Container/styles/Sub-Form-Container.theme.scss +19 -0
  258. package/src/components/Form/index.ts +12 -0
  259. package/src/components/Icon/Icon.tsx +71 -0
  260. package/src/components/Icon/__test__/Icon.test.tsx +56 -0
  261. package/src/components/Icon/index.ts +3 -0
  262. package/src/components/Icon/stories/Icon.stories.tsx +98 -0
  263. package/src/components/Icon/styles/Icon.layout.scss +8 -0
  264. package/src/components/Icon/styles/Icon.theme.scss +0 -0
  265. package/src/components/Images/Hero/Hero.tsx +59 -0
  266. package/src/components/Images/Hero/__test__/Hero.test.tsx +102 -0
  267. package/src/components/Images/Hero/index.ts +3 -0
  268. package/src/components/Images/Hero/stories/Hero.stories.tsx +52 -0
  269. package/src/components/Images/Hero/stories/storyStyles.scss +3 -0
  270. package/src/components/Images/Hero/styles/Hero.layout.scss +13 -0
  271. package/src/components/Images/Image/Image.tsx +134 -0
  272. package/src/components/Images/Image/__test__/Image.test.tsx +149 -0
  273. package/src/components/Images/Image/index.ts +3 -0
  274. package/src/components/Images/Image/stories/Image.stories.tsx +90 -0
  275. package/src/components/Images/Image/stories/storyStyles.scss +3 -0
  276. package/src/components/Images/Image/styles/Image.layout.scss +48 -0
  277. package/src/components/Images/Multi-Image-Viewer/Multi-Image-Viewer.tsx +199 -0
  278. package/src/components/Images/Multi-Image-Viewer/__test__/Multi-Image-Viewer.test.tsx +317 -0
  279. package/src/components/Images/Multi-Image-Viewer/index.ts +3 -0
  280. package/src/components/Images/Multi-Image-Viewer/stories/Multi-Image-Viewer.stories.tsx +155 -0
  281. package/src/components/Images/Multi-Image-Viewer/stories/storiesStyle.scss +8 -0
  282. package/src/components/Images/Multi-Image-Viewer/styles/Multi-Image-Viewer.layout.scss +29 -0
  283. package/src/components/Images/Multi-Image-Viewer/styles/Multi-Image-Viewer.theme.scss +3 -0
  284. package/src/components/Images/index.ts +4 -0
  285. package/src/components/Loaders/Loader/Loader.tsx +77 -0
  286. package/src/components/Loaders/Loader/__test__/Loader.test.tsx +51 -0
  287. package/src/components/Loaders/Loader/index.ts +3 -0
  288. package/src/components/Loaders/Loader/stories/Loader.stories.tsx +49 -0
  289. package/src/components/Loaders/Loader/stories/storiesStyle.scss +7 -0
  290. package/src/components/Loaders/Loader/styles/Component-Loader.layout.scss +43 -0
  291. package/src/components/Loaders/Loader/styles/Component-Loader.theme.scss +9 -0
  292. package/src/components/Loaders/index.ts +2 -0
  293. package/src/components/Modal/Modal-Body/Modal-Body.tsx +52 -0
  294. package/src/components/Modal/Modal-Body/__test__/Modal-Body.test.tsx +61 -0
  295. package/src/components/Modal/Modal-Body/index.ts +3 -0
  296. package/src/components/Modal/Modal-Body/stories/Modal-Body.stories.tsx +75 -0
  297. package/src/components/Modal/Modal-Body/styles/Modal-Body.layout.scss +4 -0
  298. package/src/components/Modal/Modal-Container/Modal-Container.tsx +79 -0
  299. package/src/components/Modal/Modal-Container/__test__/Modal-Container.test.tsx +88 -0
  300. package/src/components/Modal/Modal-Container/index.ts +3 -0
  301. package/src/components/Modal/Modal-Container/stories/Modal-Container.stories.tsx +73 -0
  302. package/src/components/Modal/Modal-Container/stories/storiesStyle.scss +5 -0
  303. package/src/components/Modal/Modal-Container/styles/Modal-Container.layout.scss +21 -0
  304. package/src/components/Modal/Modal-Container/styles/Modal-Container.theme.scss +3 -0
  305. package/src/components/Modal/Modal-Header/Modal-Header.tsx +65 -0
  306. package/src/components/Modal/Modal-Header/__test__/Modal-Header.test.tsx +74 -0
  307. package/src/components/Modal/Modal-Header/index.ts +3 -0
  308. package/src/components/Modal/Modal-Header/stories/Modal-Header.stories.tsx +74 -0
  309. package/src/components/Modal/Modal-Header/styles/Modal-Header.layout.scss +15 -0
  310. package/src/components/Modal/Modal-Header/styles/Modal-Header.theme.scss +4 -0
  311. package/src/components/Modal/index.ts +4 -0
  312. package/src/components/Panel/Panel-Container/Panel-Container.tsx +47 -0
  313. package/src/components/Panel/Panel-Container/__test__/Panel-Container.test.tsx +50 -0
  314. package/src/components/Panel/Panel-Container/index.ts +3 -0
  315. package/src/components/Panel/Panel-Container/stories/Panel-Container.stories.tsx +49 -0
  316. package/src/components/Panel/Panel-Container/stories/storiesStyle.scss +3 -0
  317. package/src/components/Panel/Panel-Container/styles/Panel-Container.layout.scss +9 -0
  318. package/src/components/Panel/Panel-Container/styles/Panel-Container.theme.scss +4 -0
  319. package/src/components/Panel/Panel-Row/Panel-Row.tsx +80 -0
  320. package/src/components/Panel/Panel-Row/__test__/Panel-Row.test.tsx +45 -0
  321. package/src/components/Panel/Panel-Row/index.ts +3 -0
  322. package/src/components/Panel/Panel-Row/stories/Panel-Row.stories.tsx +57 -0
  323. package/src/components/Panel/Panel-Row/styles/Panel-Row.layout.scss +16 -0
  324. package/src/components/Panel/Panel-Title/Panel-Title.tsx +47 -0
  325. package/src/components/Panel/Panel-Title/__test__/Panel-Title.test.tsx +28 -0
  326. package/src/components/Panel/Panel-Title/index.ts +3 -0
  327. package/src/components/Panel/Panel-Title/stories/Panel-Title.stories.tsx +47 -0
  328. package/src/components/Panel/Panel-Title/styles/Panel-Title.layout.scss +7 -0
  329. package/src/components/Panel/Panel-Title/styles/Panel-Title.theme.scss +3 -0
  330. package/src/components/Panel/index.ts +4 -0
  331. package/src/components/Quantity-Counter/Quantity-Counter.tsx +73 -0
  332. package/src/components/Quantity-Counter/__test__/Quantity-Counter.test.tsx +75 -0
  333. package/src/components/Quantity-Counter/index.ts +3 -0
  334. package/src/components/Quantity-Counter/stories/Quantity-Counter.stories.tsx +26 -0
  335. package/src/components/Quantity-Counter/styles/Quantity-Counter.layout.scss +18 -0
  336. package/src/components/Quantity-Counter/styles/Quantity-Counter.theme.scss +3 -0
  337. package/src/hooks/useClickOutside.ts +21 -0
  338. package/src/hooks/useDisableBodyScroll.ts +15 -0
  339. package/src/icons/index.ts +50 -0
  340. package/src/icons/svg/ChevronDoubleLeft.svg +4 -0
  341. package/src/icons/svg/ChevronDoubleRight.svg +4 -0
  342. package/src/icons/svg/ChevronSingleLeft.svg +3 -0
  343. package/src/icons/svg/ChevronSingleRight.svg +3 -0
  344. package/src/icons/svg/about.svg +3 -0
  345. package/src/icons/svg/cart.svg +5 -0
  346. package/src/icons/svg/dashboard.svg +13 -0
  347. package/src/icons/svg/delete.svg +3 -0
  348. package/src/icons/svg/dropdown_down.svg +3 -0
  349. package/src/icons/svg/dropdown_up.svg +3 -0
  350. package/src/icons/svg/edit.svg +4 -0
  351. package/src/icons/svg/home.svg +3 -0
  352. package/src/icons/svg/loader.svg +10 -0
  353. package/src/icons/svg/logout.svg +12 -0
  354. package/src/icons/svg/orders.svg +3 -0
  355. package/src/icons/svg/products.svg +11 -0
  356. package/src/icons/svg/profile.svg +3 -0
  357. package/src/icons/svg/settings.svg +3 -0
  358. package/src/icons/svg/star-empty.svg +3 -0
  359. package/src/icons/svg/star-full.svg +3 -0
  360. package/src/icons/svg/star-half.svg +4 -0
  361. package/src/icons/svg/upload.svg +4 -0
  362. package/src/icons/svg/users.svg +15 -0
  363. package/src/index.ts +35 -0
  364. package/src/index.tsx +6 -0
  365. package/src/pending_components/form/check-box/check-box.js +30 -0
  366. package/src/pending_components/form/check-box/check-box.scss +34 -0
  367. package/src/pending_components/form/clickable-button/clickable-button.js +30 -0
  368. package/src/pending_components/form/clickable-button/clickable-button.scss +24 -0
  369. package/src/pending_components/form/dropdown-select/dropdown-select.js +87 -0
  370. package/src/pending_components/form/dropdown-select/dropdown-select.scss +108 -0
  371. package/src/pending_components/form/external-links-array-input/external-link-array-input.scss +39 -0
  372. package/src/pending_components/form/external-links-array-input/external-links-array-input.js +234 -0
  373. package/src/pending_components/form/form/form.js +17 -0
  374. package/src/pending_components/form/form/form.scss +0 -0
  375. package/src/pending_components/form/form-group/form-group.js +20 -0
  376. package/src/pending_components/form/form-group/form-group.scss +21 -0
  377. package/src/pending_components/form/input-field/input-field.js +57 -0
  378. package/src/pending_components/form/input-field/input-field.scss +22 -0
  379. package/src/pending_components/form/input-file/input-file.js +124 -0
  380. package/src/pending_components/form/input-file/input-file.scss +76 -0
  381. package/src/pending_components/form/input-label/input-label.js +47 -0
  382. package/src/pending_components/form/input-label/input-label.scss +17 -0
  383. package/src/pending_components/form/radio-button/radio-button.js +37 -0
  384. package/src/pending_components/form/radio-button/radio-button.scss +18 -0
  385. package/src/pending_components/form/submit-button/submit-button.js +18 -0
  386. package/src/pending_components/form/submit-button/submit-button.scss +24 -0
  387. package/src/pending_components/form/submit-button-fixed-button/submit-button-fixed-button.js +17 -0
  388. package/src/pending_components/form/submit-button-fixed-button/submit-button-fixed-button.scss +23 -0
  389. package/src/pending_components/form/submit-button-fixed-container/submit-button-fixed-container.js +9 -0
  390. package/src/pending_components/form/submit-button-fixed-container/submit-button-fixed-container.scss +15 -0
  391. package/src/pending_components/form/text-area/text-area.js +42 -0
  392. package/src/pending_components/form/text-area/text-area.scss +16 -0
  393. package/src/styles/_defaults.scss +22 -0
  394. package/src/styles/_fonts.scss +153 -0
  395. package/src/styles/_mixins.scss +33 -0
  396. package/src/styles/_spacings.scss +497 -0
  397. package/src/styles/_transitions.scss +27 -0
  398. package/src/styles/_typography.scss +85 -0
  399. package/src/styles/_variables.scss +5 -0
  400. package/src/styles/fonts/Dancing_Script/OFL.txt +93 -0
  401. package/src/styles/fonts/Dancing_Script/README.txt +66 -0
  402. package/src/styles/fonts/Dancing_Script/static/DancingScript-Bold.ttf +0 -0
  403. package/src/styles/fonts/Dancing_Script/static/DancingScript-Medium.ttf +0 -0
  404. package/src/styles/fonts/Dancing_Script/static/DancingScript-Regular.ttf +0 -0
  405. package/src/styles/fonts/Dancing_Script/static/DancingScript-SemiBold.ttf +0 -0
  406. package/src/styles/fonts/Poppins/OFL.txt +93 -0
  407. package/src/styles/fonts/Poppins/Poppins-Black.ttf +0 -0
  408. package/src/styles/fonts/Poppins/Poppins-BlackItalic.ttf +0 -0
  409. package/src/styles/fonts/Poppins/Poppins-Bold.ttf +0 -0
  410. package/src/styles/fonts/Poppins/Poppins-BoldItalic.ttf +0 -0
  411. package/src/styles/fonts/Poppins/Poppins-ExtraBold.ttf +0 -0
  412. package/src/styles/fonts/Poppins/Poppins-ExtraBoldItalic.ttf +0 -0
  413. package/src/styles/fonts/Poppins/Poppins-ExtraLight.ttf +0 -0
  414. package/src/styles/fonts/Poppins/Poppins-ExtraLightItalic.ttf +0 -0
  415. package/src/styles/fonts/Poppins/Poppins-Italic.ttf +0 -0
  416. package/src/styles/fonts/Poppins/Poppins-Light.ttf +0 -0
  417. package/src/styles/fonts/Poppins/Poppins-LightItalic.ttf +0 -0
  418. package/src/styles/fonts/Poppins/Poppins-Medium.ttf +0 -0
  419. package/src/styles/fonts/Poppins/Poppins-MediumItalic.ttf +0 -0
  420. package/src/styles/fonts/Poppins/Poppins-Regular.ttf +0 -0
  421. package/src/styles/fonts/Poppins/Poppins-SemiBold.ttf +0 -0
  422. package/src/styles/fonts/Poppins/Poppins-SemiBoldItalic.ttf +0 -0
  423. package/src/styles/fonts/Poppins/Poppins-Thin.ttf +0 -0
  424. package/src/styles/fonts/Poppins/Poppins-ThinItalic.ttf +0 -0
  425. package/src/styles/global.scss +113 -0
  426. package/src/styles/vars/_colors.scss +48 -0
  427. package/src/styles/vars/_fontSizes.scss +10 -0
  428. package/src/styles/vars/_layout.scss +67 -0
  429. package/src/styles/vars/_palette.scss +27 -0
  430. package/src/styles/vars/_transitions.scss +2 -0
  431. package/src/styles/vars_and_mixins.scss +2 -0
  432. package/src/types/IComponent.ts +9 -0
  433. package/src/types/IImageObject.ts +4 -0
  434. package/src/types/ILink.ts +4 -0
  435. package/src/types/IProduct.ts +6 -0
  436. package/src/types/ISpacingsProps.ts +28 -0
  437. package/src/types/ImageClickable.ts +3 -0
  438. package/src/types/Theme.ts +10 -0
  439. package/src/utils/arrays.ts +3 -0
  440. package/src/utils/styles.ts +128 -0
  441. package/src/utils/validations.ts +23 -0
  442. package/tsconfig.json +24 -0
  443. package/tslint.json +36 -0
  444. package/webpack.config.js +79 -0
  445. package/webpack.prod.js +24 -0
@@ -0,0 +1,88 @@
1
+ import React from "react";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
+ import { Banner } from "@components/Banners/Banner";
4
+
5
+ // import from index does not work for jest.spyOn
6
+ import * as ButtonModule from "@components/Buttons/Button/Button";
7
+
8
+ describe("Banner Component Unit Tests", () => {
9
+ beforeEach(() => {
10
+ jest
11
+ .spyOn(ButtonModule, "Button")
12
+ .mockImplementation(({ rootClassName, rootStyles, onClick, text }) => {
13
+ return (
14
+ <button
15
+ data-testid="banner-close-button"
16
+ className={rootClassName}
17
+ style={rootStyles}
18
+ onClick={onClick}
19
+ >
20
+ {text}
21
+ </button>
22
+ );
23
+ });
24
+ });
25
+
26
+ afterEach(() => {
27
+ jest.restoreAllMocks();
28
+ });
29
+
30
+ test("should render info banner without crashing", () => {
31
+ const { debug } = render(<Banner text="banner text test" type="info" />);
32
+
33
+ // debug();
34
+ const component = screen.queryByTestId("banner-root");
35
+ expect(component).toBeInTheDocument();
36
+
37
+ expect(component).toHaveClass("banner_container_info");
38
+ });
39
+
40
+ test("should render success banner without crashing", () => {
41
+ const { debug } = render(<Banner text="banner text test" type="success" />);
42
+
43
+ // debug();
44
+ const component = screen.queryByTestId("banner-root");
45
+ expect(component).toBeInTheDocument();
46
+
47
+ expect(component).toHaveClass("banner_container_success");
48
+ });
49
+
50
+ test("should render warning banner without crashing", () => {
51
+ const { debug } = render(<Banner text="banner text test" type="warning" />);
52
+
53
+ // debug();
54
+ const component = screen.queryByTestId("banner-root");
55
+ expect(component).toBeInTheDocument();
56
+
57
+ expect(component).toHaveClass("banner_container_warning");
58
+ });
59
+
60
+ test("should render error banner without crashing", () => {
61
+ const { debug } = render(<Banner text="banner text test" type="error" />);
62
+
63
+ // debug();
64
+ const component = screen.queryByTestId("banner-root");
65
+ expect(component).toBeInTheDocument();
66
+
67
+ expect(component).toHaveClass("banner_container_error");
68
+ });
69
+
70
+ test("should render info banner with text without crashing", () => {
71
+ const { debug } = render(<Banner text="banner text test" type="info" />);
72
+
73
+ // debug();
74
+ const component = screen.queryByTestId("banner-root");
75
+ expect(component).toHaveTextContent("banner text test");
76
+ });
77
+
78
+ test("should not render info banner when close button is clicked", () => {
79
+ const { debug } = render(<Banner text="banner text test" type="info" />);
80
+
81
+ // debug();
82
+ const closeButton = screen.queryByTestId("banner-close-button");
83
+ closeButton.click();
84
+
85
+ const component = screen.queryByTestId("banner-root");
86
+ expect(component).not.toBeInTheDocument();
87
+ });
88
+ });
@@ -0,0 +1,3 @@
1
+ /* istanbul ignore file */
2
+ import "@styles/global.scss";
3
+ export * from "./Banner";
@@ -0,0 +1,81 @@
1
+ import React from "react";
2
+ import { ComponentStory, ComponentMeta } from "@storybook/react";
3
+
4
+ // always import from index to include global styles
5
+ import { Banner } from "@components/Banners/Banner";
6
+ import "./storiesStyle.scss";
7
+
8
+ import dedent from "ts-dedent";
9
+
10
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
11
+ export default {
12
+ title: "Banners/Banner",
13
+ component: Banner,
14
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
15
+ argTypes: {
16
+ // backgroundColor: { control: "color" },
17
+ },
18
+ parameters: {
19
+ docs: {
20
+ description: {
21
+ component: dedent`
22
+ A generic Banner component with various types.
23
+
24
+ Import statement: \`import { Banner } from 'reso-ui/Banner'\`
25
+ `,
26
+ },
27
+ },
28
+ },
29
+ } as ComponentMeta<typeof Banner>;
30
+
31
+ const ComponentTemplate: ComponentStory<typeof Banner> = (args) => {
32
+ const storyProps = {
33
+ text: "Some Information",
34
+ ...args,
35
+ };
36
+ return <Banner {...storyProps} />;
37
+ };
38
+
39
+ export const DefaultInfo = ComponentTemplate.bind({});
40
+ DefaultInfo.args = {
41
+ type: "info",
42
+ };
43
+
44
+ export const DefaultSuccess = ComponentTemplate.bind({});
45
+ DefaultSuccess.args = {
46
+ type: "success",
47
+ };
48
+
49
+ export const DefaultWarning = ComponentTemplate.bind({});
50
+ DefaultWarning.args = {
51
+ type: "warning",
52
+ };
53
+
54
+ export const DefaultError = ComponentTemplate.bind({});
55
+ DefaultError.args = {
56
+ type: "error",
57
+ };
58
+
59
+ export const WithCustomStyle = ComponentTemplate.bind({});
60
+ WithCustomStyle.args = {
61
+ type: "info",
62
+ rootStyles: {
63
+ borderStyle: "solid",
64
+ borderColor: "green",
65
+ borderWidth: "3px",
66
+ background: "yellow",
67
+ color: "black",
68
+ },
69
+ };
70
+
71
+ export const WithCustomClass = ComponentTemplate.bind({});
72
+ WithCustomClass.args = {
73
+ type: "info",
74
+ rootClassName: "banner_generic_custom_class",
75
+ };
76
+
77
+ export const OverflowBehaviour = ComponentTemplate.bind({});
78
+ OverflowBehaviour.args = {
79
+ type: "info",
80
+ text: "is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries",
81
+ };
@@ -0,0 +1,4 @@
1
+ .banner_generic_custom_class {
2
+ background-color: grey;
3
+ border: 2px solid black;
4
+ }
@@ -0,0 +1,51 @@
1
+ // padding-right must be the same with the width of close button
2
+ .banner_container {
3
+ // border: 2px solid red;
4
+ width: 100%;
5
+ height: auto;
6
+ max-height: 140px;
7
+ overflow-y: auto;
8
+ padding: $padding-small;
9
+ padding-right: $padding-large;
10
+ text-align: center;
11
+ //text
12
+ font-weight: 600;
13
+ font-size: $font-size-default;
14
+ }
15
+
16
+ .banner_close_button {
17
+ // border: 2px solid blue;
18
+ background: unset;
19
+ border-radius: 0;
20
+ color: inherit;
21
+ border: none;
22
+ width: $padding-large;
23
+ height: 100%;
24
+ position: absolute;
25
+ top: 0;
26
+ right: 0;
27
+ &:hover {
28
+ background-color: $primary-grey-dark-transparent;
29
+ color: inherit;
30
+ }
31
+ }
32
+
33
+ .banner_container_info {
34
+ background-color: $blue;
35
+ color: $fc-light;
36
+ }
37
+
38
+ .banner_container_warning {
39
+ background-color: $primary-yellow;
40
+ color: $fc-light;
41
+ }
42
+
43
+ .banner_container_error {
44
+ background-color: $bg-alert-banner-error;
45
+ color: $fc-light;
46
+ }
47
+
48
+ .banner_container_success {
49
+ background-color: $bg-alert-banner-success;
50
+ color: $fc-light;
51
+ }
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+
3
+ // import base interface
4
+ import IComponent from "@interfaces/IComponent";
5
+
6
+ // styles
7
+ import "./styles/Banner-Wrapper.layout.scss";
8
+
9
+ // utils
10
+ import { createComponentStyles, createLayoutStyles } from "@utils/styles";
11
+
12
+ export interface IBannerWrapperProps extends IComponent {
13
+ children: React.ReactNode;
14
+ positionAbsolute?: boolean;
15
+ hasMaxHeight?: boolean;
16
+ }
17
+
18
+ export const BannerWrapper = ({
19
+ children,
20
+ positionAbsolute = false,
21
+ hasMaxHeight = false,
22
+ rootClassName,
23
+ rootStyles = {},
24
+ }: IBannerWrapperProps) => {
25
+ const containerStyles = createComponentStyles(
26
+ createLayoutStyles(
27
+ {
28
+ banner_wrapper_container: true,
29
+ banner_wrapper_container_positionAbsolute: positionAbsolute,
30
+ banner_wrapper_container_scroll: hasMaxHeight,
31
+ },
32
+ rootClassName
33
+ )
34
+ );
35
+
36
+ return (
37
+ <div
38
+ className={containerStyles}
39
+ style={rootStyles}
40
+ data-testid="banner-wrapper-root"
41
+ >
42
+ {children}
43
+ </div>
44
+ );
45
+ };
@@ -0,0 +1,72 @@
1
+ import React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { BannerWrapper } from "@components/Banners/Banner-Wrapper";
4
+
5
+ const SampleComponent = () => {
6
+ return (
7
+ <div data-testid="banner-wrapper-child-test">
8
+ <p>This is a sample component</p>
9
+ </div>
10
+ );
11
+ };
12
+
13
+ describe("Panel Wrapper Unit Tests", () => {
14
+ test("should render itself and children without error", () => {
15
+ const { debug } = render(
16
+ <BannerWrapper>
17
+ <SampleComponent />
18
+ </BannerWrapper>
19
+ );
20
+
21
+ // debug();
22
+ const component = screen.queryByTestId("banner-wrapper-root");
23
+ expect(component).toBeTruthy();
24
+
25
+ const child = screen.queryByTestId("banner-wrapper-child-test");
26
+ expect(child).toBeTruthy();
27
+ });
28
+
29
+ test("should apply positionAbsolute className when provided as prop", () => {
30
+ render(
31
+ <BannerWrapper positionAbsolute>
32
+ <SampleComponent />
33
+ </BannerWrapper>
34
+ );
35
+
36
+ const component = screen.queryByTestId("banner-wrapper-root");
37
+ expect(component).toHaveClass("banner_wrapper_container_positionAbsolute");
38
+ });
39
+
40
+ test("should apply scroll className when hasMaxheight is true", () => {
41
+ render(
42
+ <BannerWrapper hasMaxHeight>
43
+ <SampleComponent />
44
+ </BannerWrapper>
45
+ );
46
+
47
+ const component = screen.queryByTestId("banner-wrapper-root");
48
+ expect(component).toHaveClass("banner_wrapper_container_scroll");
49
+ });
50
+
51
+ test("should apply custom className when provided as prop", () => {
52
+ render(
53
+ <BannerWrapper rootClassName="sample_class">
54
+ <SampleComponent />
55
+ </BannerWrapper>
56
+ );
57
+
58
+ const component = screen.queryByTestId("banner-wrapper-root");
59
+ expect(component).toHaveClass("sample_class");
60
+ });
61
+
62
+ test("should apply custom styles when provided as prop", () => {
63
+ render(
64
+ <BannerWrapper rootStyles={{ border: "2px solid red" }}>
65
+ <SampleComponent />
66
+ </BannerWrapper>
67
+ );
68
+
69
+ const component = screen.queryByTestId("banner-wrapper-root");
70
+ expect(component).toHaveStyle("border: 2px solid red");
71
+ });
72
+ });
@@ -0,0 +1,3 @@
1
+ /* istanbul ignore file */
2
+ import "@styles/global.scss";
3
+ export * from "./Banner-Wrapper";
@@ -0,0 +1,90 @@
1
+ import React from "react";
2
+ import { ComponentStory, ComponentMeta } from "@storybook/react";
3
+
4
+ // always import from index to include global styles
5
+ import { Banner } from "@components/Banners/Banner";
6
+ import { BannerWrapper } from "@components/Banners/Banner-Wrapper";
7
+
8
+ import dedent from "ts-dedent";
9
+
10
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
11
+ export default {
12
+ title: "Banners/Wrapper",
13
+ component: BannerWrapper,
14
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
15
+ argTypes: {
16
+ // backgroundColor: { control: "color" },
17
+ },
18
+ parameters: {
19
+ docs: {
20
+ description: {
21
+ component: dedent`
22
+ A wrapper component to put and stack all Banners.
23
+
24
+ You can use it as it is (which behaves like any other block element), or place it as \`position: absolute\`, by enabling the
25
+ *positionAbsolute* property.
26
+
27
+ You can set *hasMaxHeight* to true to enable scrolling, if you wish to set the Banner Wrapper a maximum height.
28
+
29
+ Only conditionally render this component, to prevent empty Divs (when all the Banners are closed) on your rendered dom.
30
+
31
+ Import statement: \`import { Banner Wrapper } from 'reso-ui/Banner-Wrapper'\`
32
+ `,
33
+ },
34
+ },
35
+ },
36
+ } as ComponentMeta<typeof BannerWrapper>;
37
+
38
+ const ComponentTemplateDefault: ComponentStory<typeof BannerWrapper> = (
39
+ args
40
+ ) => (
41
+ <BannerWrapper {...args}>
42
+ <Banner type="info" text="Some information" />
43
+ <Banner type="success" text="Some information" />
44
+ </BannerWrapper>
45
+ );
46
+
47
+ const ComponentTemplatePositionAbsolute: ComponentStory<typeof BannerWrapper> =
48
+ (args) => (
49
+ <div
50
+ style={{
51
+ width: "100%",
52
+ height: "240px",
53
+ position: "relative",
54
+ border: "2px solid red",
55
+ paddingTop: "120px",
56
+ }}
57
+ >
58
+ <BannerWrapper {...args}>
59
+ <Banner type="info" text="Some information" />
60
+ <Banner type="success" text="Some information" />
61
+ <Banner type="warning" text="Some information" />
62
+ </BannerWrapper>
63
+ <p>Other content</p>
64
+ </div>
65
+ );
66
+
67
+ export const Default = ComponentTemplateDefault.bind({});
68
+ Default.args = {};
69
+
70
+ export const WithCustomStyle = ComponentTemplateDefault.bind({});
71
+ WithCustomStyle.args = {
72
+ rootStyles: {
73
+ border: "4px solid red",
74
+ },
75
+ };
76
+
77
+ export const WithPositionAbsolute = ComponentTemplatePositionAbsolute.bind({});
78
+ WithPositionAbsolute.args = {
79
+ positionAbsolute: true,
80
+ };
81
+
82
+ export const WithPositionAbsoluteAndHasMaxHeight =
83
+ ComponentTemplatePositionAbsolute.bind({});
84
+ WithPositionAbsoluteAndHasMaxHeight.args = {
85
+ positionAbsolute: true,
86
+ hasMaxHeight: true,
87
+ rootStyles: {
88
+ maxHeight: "120px",
89
+ },
90
+ };
@@ -0,0 +1,18 @@
1
+ .banner_wrapper_container {
2
+ // border: 2px solid green;
3
+ display: block;
4
+ margin-bottom: $margin-xxlarge;
5
+ width: 100%;
6
+ }
7
+
8
+ .banner_wrapper_container_positionAbsolute {
9
+ position: absolute;
10
+ left: 0;
11
+ top: 0;
12
+ z-index: 3;
13
+ }
14
+
15
+ .banner_wrapper_container_scroll {
16
+ border-bottom: 1px solid $primary-grey-medium;
17
+ overflow-y: auto;
18
+ }
@@ -0,0 +1,3 @@
1
+ /* istanbul ignore file */
2
+ export * from "./Banner";
3
+ export * from "./Banner-Wrapper";
@@ -0,0 +1,80 @@
1
+ import React from "react";
2
+
3
+ // import base interface
4
+ import IComponent from "@interfaces/IComponent";
5
+ import IThemeProps from "@interfaces/Theme";
6
+ import { IMarginProps } from "@interfaces/ISpacingsProps";
7
+
8
+ // styles
9
+ import "./styles/Back.layout.scss";
10
+ import "./styles/Back.theme.scss";
11
+
12
+ // utils
13
+ import {
14
+ createComponentStyles,
15
+ createLayoutStyles,
16
+ createThemeStyles,
17
+ withSpacingsProps,
18
+ } from "@utils/styles";
19
+
20
+ export interface IBackProps extends IComponent, IThemeProps, IMarginProps {
21
+ to: string;
22
+ text?: string;
23
+ disabled?: boolean;
24
+ linkClassName?: string;
25
+ linkStyles?: React.CSSProperties;
26
+ }
27
+
28
+ export const Back = ({
29
+ to,
30
+ text = "Back",
31
+ disabled = false,
32
+ rootClassName,
33
+ rootStyles = {},
34
+ linkClassName,
35
+ linkStyles = {},
36
+ theme = "light",
37
+ ...spacingsProps
38
+ }: IBackProps) => {
39
+ const containerStyles = createComponentStyles(
40
+ createLayoutStyles(
41
+ withSpacingsProps(
42
+ {
43
+ back_container: true,
44
+ button_text: true,
45
+ },
46
+ spacingsProps
47
+ ),
48
+ rootClassName,
49
+ {
50
+ disabled,
51
+ no_select: true,
52
+ }
53
+ ),
54
+ createThemeStyles("back_theme_", theme)
55
+ );
56
+
57
+ const linkClasses = createComponentStyles(
58
+ createLayoutStyles({}, linkClassName),
59
+ createThemeStyles("back_link_theme", theme)
60
+ );
61
+
62
+ return (
63
+ <div
64
+ data-testid="back-root"
65
+ className={containerStyles}
66
+ style={rootStyles}
67
+ role="navigation"
68
+ >
69
+ <a
70
+ rel="noreferrer"
71
+ href={to}
72
+ className={linkClasses}
73
+ style={linkStyles}
74
+ data-testid="back-link"
75
+ >
76
+ {"<"} {text}
77
+ </a>
78
+ </div>
79
+ );
80
+ };
@@ -0,0 +1,51 @@
1
+ import React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import { Back } from "@components/Buttons/Back";
4
+
5
+ describe("Back Button Component Unit Tests", () => {
6
+ test("should render itself with default text without error", () => {
7
+ const { debug } = render(<Back to="/" />);
8
+
9
+ // debug();
10
+ const component = screen.queryByTestId("back-root");
11
+ expect(component).toBeInTheDocument();
12
+ expect(component).toHaveTextContent("Back");
13
+ });
14
+
15
+ test("should render itself with custom text without error", () => {
16
+ const { debug } = render(<Back to="/" text="Return" />);
17
+
18
+ // debug();
19
+ const component = screen.queryByTestId("back-root");
20
+ expect(component).toBeInTheDocument();
21
+ expect(component).toHaveTextContent("Return");
22
+ });
23
+
24
+ test("should apply custom className when provided as prop", () => {
25
+ render(<Back to="/" rootClassName="sample_back_root_className" />);
26
+
27
+ const component = screen.queryByTestId("back-root");
28
+ expect(component).toHaveClass("sample_back_root_className");
29
+ });
30
+
31
+ test("should apply custom styles when provided as prop", () => {
32
+ render(<Back to="/" rootStyles={{ border: "2px solid red" }} />);
33
+
34
+ const component = screen.queryByTestId("back-root");
35
+ expect(component).toHaveStyle("border: 2px solid red");
36
+ });
37
+
38
+ test("should apply link className when provided as prop", () => {
39
+ render(<Back to="/" linkClassName="sample_back_className" />);
40
+
41
+ const component = screen.queryByTestId("back-link");
42
+ expect(component).toHaveClass("sample_back_className");
43
+ });
44
+
45
+ test("should apply custom link styles when provided as prop", () => {
46
+ render(<Back to="/" linkStyles={{ color: "orange" }} />);
47
+
48
+ const component = screen.queryByTestId("back-link");
49
+ expect(component).toHaveStyle("color: orange");
50
+ });
51
+ });
@@ -0,0 +1,3 @@
1
+ /* istanbul ignore file */
2
+ import "@styles/global.scss";
3
+ export * from "./Back";
@@ -0,0 +1,74 @@
1
+ import React from "react";
2
+ import { ComponentStory, ComponentMeta } from "@storybook/react";
3
+
4
+ // always import from index to include global styles
5
+ import { Back } from "@components/Buttons/Back";
6
+ import "./storiesStyle.scss";
7
+
8
+ import dedent from "ts-dedent";
9
+
10
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
11
+ export default {
12
+ title: "Buttons/Back",
13
+ component: Back,
14
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
15
+ argTypes: {
16
+ // backgroundColor: { control: "color" },
17
+ },
18
+ parameters: {
19
+ docs: {
20
+ description: {
21
+ component: dedent`
22
+ A Back Button component.
23
+
24
+ It supports Margin props.
25
+
26
+ You can customize hover and behaviour via linkClassName.
27
+
28
+ Import statement: \`import { Back } from 'reso-ui/Back'\`
29
+ `,
30
+ },
31
+ },
32
+ },
33
+ } as ComponentMeta<typeof Back>;
34
+
35
+ const ComponentTemplate: ComponentStory<typeof Back> = (args) => {
36
+ const storyProps = {
37
+ to: "/",
38
+ text: "Back",
39
+ ...args,
40
+ };
41
+ return <Back {...storyProps} />;
42
+ };
43
+
44
+ export const Default = ComponentTemplate.bind({});
45
+ Default.args = {};
46
+
47
+ export const WithCustomContainerClassName = ComponentTemplate.bind({});
48
+ WithCustomContainerClassName.args = {
49
+ rootClassName: "back-stories-sample",
50
+ };
51
+
52
+ export const WithCustomContainerStyles = ComponentTemplate.bind({});
53
+ WithCustomContainerStyles.args = {
54
+ rootStyles: {
55
+ backgroundColor: "red",
56
+ },
57
+ };
58
+
59
+ export const WithCustomLinkClassName = ComponentTemplate.bind({});
60
+ WithCustomLinkClassName.args = {
61
+ linkClassName: "back-stories-sample-link",
62
+ };
63
+
64
+ export const WithCustomLinkStyles = ComponentTemplate.bind({});
65
+ WithCustomLinkStyles.args = {
66
+ linkStyles: {
67
+ color: "red",
68
+ },
69
+ };
70
+
71
+ export const Disabled = ComponentTemplate.bind({});
72
+ Disabled.args = {
73
+ disabled: true,
74
+ };
@@ -0,0 +1,11 @@
1
+ .back-stories-sample {
2
+ background-color: yellow;
3
+ color: white;
4
+ }
5
+
6
+ .back-stories-sample-link {
7
+ color: blue;
8
+ &:hover {
9
+ color: green;
10
+ }
11
+ }