pixel-react 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (444) hide show
  1. package/.prettierrc.js +13 -0
  2. package/.storybook/main.ts +26 -0
  3. package/.storybook/preview.ts +26 -0
  4. package/.yarn/install-state.gz +0 -0
  5. package/.yarnrc.yml +1 -0
  6. package/README.md +25 -0
  7. package/dist/tsconfig.tsbuildinfo +1 -0
  8. package/index.scss +0 -0
  9. package/lib/StyleGuide/ColorPalette/ColorPalette.d.ts +3 -0
  10. package/lib/StyleGuide/ColorPalette/ColorPalette.stories.d.ts +6 -0
  11. package/lib/StyleGuide/ColorPalette/colorPaletteList.d.ts +3 -0
  12. package/lib/StyleGuide/ColorPalette/index.d.ts +1 -0
  13. package/lib/StyleGuide/ColorPalette/types.d.ts +15 -0
  14. package/lib/StyleGuide/Typography/Typography.d.ts +3 -0
  15. package/lib/StyleGuide/Typography/Typography.stories.d.ts +6 -0
  16. package/lib/StyleGuide/Typography/TypographyList.d.ts +5 -0
  17. package/lib/StyleGuide/Typography/types.d.ts +8 -0
  18. package/lib/assets/utils/functionUtils.d.ts +1 -0
  19. package/lib/components/Accordion/Accordion.d.ts +8 -0
  20. package/lib/components/Accordion/Accordion.stories.d.ts +6 -0
  21. package/lib/components/Accordion/index.d.ts +1 -0
  22. package/lib/components/Accordion/types.d.ts +27 -0
  23. package/lib/components/AddResourceButton/AddButton.d.ts +4 -0
  24. package/lib/components/AddResourceButton/AddButton.stories.d.ts +8 -0
  25. package/lib/components/AddResourceButton/ArrowsButton/ArrowsButton.d.ts +6 -0
  26. package/lib/components/AddResourceButton/index.d.ts +1 -0
  27. package/lib/components/AddResourceButton/type.d.ts +65 -0
  28. package/lib/components/Button/Button.d.ts +5 -0
  29. package/lib/components/Button/Button.stories.d.ts +12 -0
  30. package/lib/components/Button/index.d.ts +1 -0
  31. package/lib/components/Button/types.d.ts +61 -0
  32. package/lib/components/Charts/DonutChart/DonutChart.d.ts +5 -0
  33. package/lib/components/Charts/DonutChart/DonutChart.stories.d.ts +6 -0
  34. package/lib/components/Charts/DonutChart/index.d.ts +1 -0
  35. package/lib/components/Charts/DonutChart/type.d.ts +13 -0
  36. package/lib/components/Charts/RadialChart/RadialChart.d.ts +5 -0
  37. package/lib/components/Charts/RadialChart/RadialChart.stories.d.ts +6 -0
  38. package/lib/components/Charts/RadialChart/index.d.ts +1 -0
  39. package/lib/components/Charts/RadialChart/types.d.ts +25 -0
  40. package/lib/components/Checkbox/Checkbox.d.ts +6 -0
  41. package/lib/components/Checkbox/Checkbox.stories.d.ts +8 -0
  42. package/lib/components/Checkbox/index.d.ts +1 -0
  43. package/lib/components/Checkbox/types.d.ts +30 -0
  44. package/lib/components/Chip/Chip.d.ts +4 -0
  45. package/lib/components/Chip/Chip.stories.d.ts +14 -0
  46. package/lib/components/Chip/index.d.ts +1 -0
  47. package/lib/components/Chip/types.d.ts +18 -0
  48. package/lib/components/Drawer/Drawer.d.ts +4 -0
  49. package/lib/components/Drawer/Drawer.stories.d.ts +7 -0
  50. package/lib/components/Drawer/Types.d.ts +85 -0
  51. package/lib/components/Drawer/index.d.ts +1 -0
  52. package/lib/components/ExpandableMenu/ExpandableMenu.d.ts +5 -0
  53. package/lib/components/ExpandableMenu/ExpandableMenu.stories.d.ts +7 -0
  54. package/lib/components/ExpandableMenu/index.d.ts +1 -0
  55. package/lib/components/ExpandableMenu/types.d.ts +34 -0
  56. package/lib/components/FileDropzone/Dropzone.d.ts +5 -0
  57. package/lib/components/FileDropzone/FileDropzone.d.ts +4 -0
  58. package/lib/components/FileDropzone/FileDropzone.stories.d.ts +8 -0
  59. package/lib/components/FileDropzone/FilePreview.d.ts +4 -0
  60. package/lib/components/FileDropzone/index.d.ts +1 -0
  61. package/lib/components/FileDropzone/types.d.ts +103 -0
  62. package/lib/components/Form/Form.d.ts +16 -0
  63. package/lib/components/Form/Form.stories.d.ts +6 -0
  64. package/lib/components/Form/index.d.ts +1 -0
  65. package/lib/components/Form/types.d.ts +1 -0
  66. package/lib/components/GridLayout/GridLayout.d.ts +6 -0
  67. package/lib/components/GridLayout/GridLayout.stories.d.ts +8 -0
  68. package/lib/components/GridLayout/index.d.ts +2 -0
  69. package/lib/components/GridLayout/types.d.ts +57 -0
  70. package/lib/components/HighlightText/HighlightText.d.ts +4 -0
  71. package/lib/components/HighlightText/HighlightText.stories.d.ts +6 -0
  72. package/lib/components/HighlightText/index.d.ts +1 -0
  73. package/lib/components/HighlightText/types.d.ts +4 -0
  74. package/lib/components/Icon/Icon.d.ts +4 -0
  75. package/lib/components/Icon/Icon.stories.d.ts +7 -0
  76. package/lib/components/Icon/iconList.d.ts +2 -0
  77. package/lib/components/Icon/index.d.ts +1 -0
  78. package/lib/components/Icon/types.d.ts +10 -0
  79. package/lib/components/Input/Input.d.ts +4 -0
  80. package/lib/components/Input/Input.stories.d.ts +9 -0
  81. package/lib/components/Input/index.d.ts +1 -0
  82. package/lib/components/Input/types.d.ts +74 -0
  83. package/lib/components/InputWithDropdown/InputWithDropdown.d.ts +4 -0
  84. package/lib/components/InputWithDropdown/InputWithDropdown.stories.d.ts +8 -0
  85. package/lib/components/InputWithDropdown/index.d.ts +1 -0
  86. package/lib/components/InputWithDropdown/types.d.ts +88 -0
  87. package/lib/components/LazyLoad/LazyLoad.d.ts +2 -0
  88. package/lib/components/LazyLoad/LazyLoad.stories.d.ts +6 -0
  89. package/lib/components/LazyLoad/LazyLoading.d.ts +2 -0
  90. package/lib/components/LazyLoad/index.d.ts +1 -0
  91. package/lib/components/MenuOption/MenuOption.d.ts +4 -0
  92. package/lib/components/MenuOption/MenuOption.stories.d.ts +15 -0
  93. package/lib/components/MenuOption/index.d.ts +1 -0
  94. package/lib/components/MenuOption/types.d.ts +134 -0
  95. package/lib/components/MiniModal/MiniModal.d.ts +4 -0
  96. package/lib/components/MiniModal/MiniModal.stories.d.ts +9 -0
  97. package/lib/components/MiniModal/index.d.ts +1 -0
  98. package/lib/components/MiniModal/types.d.ts +89 -0
  99. package/lib/components/MultiSelect/Dropdown.d.ts +4 -0
  100. package/lib/components/MultiSelect/MultiSelect.d.ts +4 -0
  101. package/lib/components/MultiSelect/MultiSelect.stories.d.ts +9 -0
  102. package/lib/components/MultiSelect/MultiSelectTypes.d.ts +18 -0
  103. package/lib/components/MultiSelect/dropdownTypes.d.ts +15 -0
  104. package/lib/components/MultiSelect/index.d.ts +1 -0
  105. package/lib/components/RadioButton/RadioButton.d.ts +4 -0
  106. package/lib/components/RadioButton/RadioButton.stories.d.ts +10 -0
  107. package/lib/components/RadioButton/index.d.ts +1 -0
  108. package/lib/components/RadioButton/radioButtonTypes.d.ts +35 -0
  109. package/lib/components/RadioGroup/RadioGroup.d.ts +4 -0
  110. package/lib/components/RadioGroup/RadioGroup.stories.d.ts +8 -0
  111. package/lib/components/RadioGroup/index.d.ts +1 -0
  112. package/lib/components/RadioGroup/radioGroupTypes.d.ts +47 -0
  113. package/lib/components/Search/Search.d.ts +4 -0
  114. package/lib/components/Search/Search.stories.d.ts +6 -0
  115. package/lib/components/Search/index.d.ts +1 -0
  116. package/lib/components/Search/types.d.ts +15 -0
  117. package/lib/components/Select/Select.d.ts +4 -0
  118. package/lib/components/Select/Select.stories.d.ts +13 -0
  119. package/lib/components/Select/components/Dropdown/Dropdown.d.ts +4 -0
  120. package/lib/components/Select/components/Dropdown/dropdownTypes.d.ts +15 -0
  121. package/lib/components/Select/index.d.ts +1 -0
  122. package/lib/components/Select/types.d.ts +68 -0
  123. package/lib/components/Table/Table.d.ts +4 -0
  124. package/lib/components/Table/Table.stories.d.ts +11 -0
  125. package/lib/components/Table/Types.d.ts +98 -0
  126. package/lib/components/Table/index.d.ts +1 -0
  127. package/lib/components/TableTree/TableTree.d.ts +21 -0
  128. package/lib/components/TableTree/TableTree.stories.d.ts +7 -0
  129. package/lib/components/TableTree/data.d.ts +313 -0
  130. package/lib/components/TableTree/index.d.ts +1 -0
  131. package/lib/components/Tabs/Tabs.d.ts +5 -0
  132. package/lib/components/Tabs/Tabs.stories.d.ts +8 -0
  133. package/lib/components/Tabs/index.d.ts +1 -0
  134. package/lib/components/Tabs/types.d.ts +40 -0
  135. package/lib/components/TextArea/Textarea.d.ts +4 -0
  136. package/lib/components/TextArea/Textarea.stories.d.ts +9 -0
  137. package/lib/components/TextArea/Types.d.ts +78 -0
  138. package/lib/components/TextArea/index.d.ts +1 -0
  139. package/lib/components/ThemeProvider/ThemeProvider.d.ts +7 -0
  140. package/lib/components/ThemeProvider/index.d.ts +1 -0
  141. package/lib/components/ThemeProvider/types.d.ts +11 -0
  142. package/lib/components/Toast/Toast.d.ts +5 -0
  143. package/lib/components/Toast/Toast.stories.d.ts +6 -0
  144. package/lib/components/Toast/index.d.ts +1 -0
  145. package/lib/components/Toast/types.d.ts +20 -0
  146. package/lib/components/Toggle/Toggle.d.ts +5 -0
  147. package/lib/components/Toggle/Toggle.stories.d.ts +12 -0
  148. package/lib/components/Toggle/index.d.ts +1 -0
  149. package/lib/components/Toggle/types.d.ts +50 -0
  150. package/lib/components/Tooltip/Tooltip.d.ts +5 -0
  151. package/lib/components/Tooltip/Tooltip.stories.d.ts +15 -0
  152. package/lib/components/Tooltip/index.d.ts +1 -0
  153. package/lib/components/Tooltip/types.d.ts +37 -0
  154. package/lib/components/Typography/Typography.d.ts +5 -0
  155. package/lib/components/Typography/Typography.stories.d.ts +10 -0
  156. package/lib/components/Typography/index.d.ts +1 -0
  157. package/lib/components/Typography/types.d.ts +47 -0
  158. package/lib/hooks/keyboardevents/useEscKeyEvent.d.ts +2 -0
  159. package/lib/hooks/useClickOutside.d.ts +2 -0
  160. package/lib/hooks/useFileDropzone.d.ts +3 -0
  161. package/lib/hooks/usePortalPosition.d.ts +9 -0
  162. package/lib/hooks/useTheme.d.ts +3 -0
  163. package/lib/index.css +404 -0
  164. package/lib/index.d.ts +1286 -0
  165. package/lib/index.esm.css +404 -0
  166. package/lib/index.esm.js +9317 -0
  167. package/lib/index.esm.js.map +1 -0
  168. package/lib/index.js +9376 -0
  169. package/lib/index.js.map +1 -0
  170. package/lib/tsconfig.tsbuildinfo +1 -0
  171. package/lib/utils/TableCell/TableCell.d.ts +1 -0
  172. package/lib/utils/checkEmpty/checkEmpty.d.ts +3 -0
  173. package/lib/utils/checkEmpty/checkEmpty.stories.d.ts +6 -0
  174. package/lib/utils/ffID/ffID.stories.d.ts +6 -0
  175. package/lib/utils/ffID/ffid.d.ts +2 -0
  176. package/lib/utils/getExtension/getExtension.d.ts +4 -0
  177. package/lib/utils/getExtension/getExtension.stories.d.ts +6 -0
  178. package/lib/utils/truncateText/truncateText.d.ts +1 -0
  179. package/lib/utils/truncateText/truncateText.stories.d.ts +6 -0
  180. package/package.json +62 -0
  181. package/rollup.config.mjs +57 -0
  182. package/src/StyleGuide/ColorPalette/ColorPalette.scss +58 -0
  183. package/src/StyleGuide/ColorPalette/ColorPalette.stories.tsx +16 -0
  184. package/src/StyleGuide/ColorPalette/ColorPalette.tsx +61 -0
  185. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +97 -0
  186. package/src/StyleGuide/ColorPalette/index.ts +1 -0
  187. package/src/StyleGuide/ColorPalette/types.ts +17 -0
  188. package/src/StyleGuide/Typography/Typography.scss +100 -0
  189. package/src/StyleGuide/Typography/Typography.stories.tsx +16 -0
  190. package/src/StyleGuide/Typography/Typography.tsx +60 -0
  191. package/src/StyleGuide/Typography/TypographyList.ts +3 -0
  192. package/src/StyleGuide/Typography/types.ts +9 -0
  193. package/src/assets/Themes/BaseTheme.scss +130 -0
  194. package/src/assets/Themes/DarkTheme.scss +131 -0
  195. package/src/assets/Themes/Theme.scss +200 -0
  196. package/src/assets/icons/Arrow.svg +5 -0
  197. package/src/assets/icons/accordion_header_icon.svg +10 -0
  198. package/src/assets/icons/arrow_down.svg +3 -0
  199. package/src/assets/icons/arrow_right.svg +5 -0
  200. package/src/assets/icons/arrow_up.svg +3 -0
  201. package/src/assets/icons/arrows_down_icon.svg +3 -0
  202. package/src/assets/icons/arrows_right_icon.svg +10 -0
  203. package/src/assets/icons/arrows_top_icon.svg +3 -0
  204. package/src/assets/icons/check_mark.svg +3 -0
  205. package/src/assets/icons/close_pill.svg +3 -0
  206. package/src/assets/icons/delete.svg +17 -0
  207. package/src/assets/icons/dropzone_icon.svg +18 -0
  208. package/src/assets/icons/error.svg +17 -0
  209. package/src/assets/icons/file.svg +12 -0
  210. package/src/assets/icons/info.svg +17 -0
  211. package/src/assets/icons/logo.svg +18 -0
  212. package/src/assets/icons/manage_apps.svg +3 -0
  213. package/src/assets/icons/moon_stars.svg +10 -0
  214. package/src/assets/icons/more.svg +11 -0
  215. package/src/assets/icons/plus_icon.svg +11 -0
  216. package/src/assets/icons/remove.svg +12 -0
  217. package/src/assets/icons/replace.svg +12 -0
  218. package/src/assets/icons/search.svg +3 -0
  219. package/src/assets/icons/success.svg +13 -0
  220. package/src/assets/icons/sun_icon.svg +10 -0
  221. package/src/assets/icons/tick_icon.svg +5 -0
  222. package/src/assets/icons/toast_close.svg +3 -0
  223. package/src/assets/icons/warning.svg +17 -0
  224. package/src/assets/icons/wrong_mark.svg +3 -0
  225. package/src/assets/styles/_colors.scss +145 -0
  226. package/src/assets/styles/_fonts.scss +68 -0
  227. package/src/assets/styles/_mixins.scss +20 -0
  228. package/src/assets/utils/functionUtils.ts +5 -0
  229. package/src/components/Accordion/Accordion.scss +45 -0
  230. package/src/components/Accordion/Accordion.stories.tsx +31 -0
  231. package/src/components/Accordion/Accordion.tsx +62 -0
  232. package/src/components/Accordion/index.ts +1 -0
  233. package/src/components/Accordion/types.ts +28 -0
  234. package/src/components/AddResourceButton/AddButton.scss +36 -0
  235. package/src/components/AddResourceButton/AddButton.stories.tsx +126 -0
  236. package/src/components/AddResourceButton/AddButton.tsx +121 -0
  237. package/src/components/AddResourceButton/ArrowsButton/ArrowsButton.scss +160 -0
  238. package/src/components/AddResourceButton/ArrowsButton/ArrowsButton.tsx +38 -0
  239. package/src/components/AddResourceButton/index.ts +1 -0
  240. package/src/components/AddResourceButton/type.ts +60 -0
  241. package/src/components/Button/Button.scss +148 -0
  242. package/src/components/Button/Button.stories.tsx +74 -0
  243. package/src/components/Button/Button.tsx +66 -0
  244. package/src/components/Button/index.ts +1 -0
  245. package/src/components/Button/types.ts +65 -0
  246. package/src/components/Charts/DonutChart/DonutChart.scss +76 -0
  247. package/src/components/Charts/DonutChart/DonutChart.stories.tsx +30 -0
  248. package/src/components/Charts/DonutChart/DonutChart.tsx +241 -0
  249. package/src/components/Charts/DonutChart/index.ts +1 -0
  250. package/src/components/Charts/DonutChart/type.ts +23 -0
  251. package/src/components/Charts/RadialChart/RadialChart.scss +12 -0
  252. package/src/components/Charts/RadialChart/RadialChart.stories.tsx +36 -0
  253. package/src/components/Charts/RadialChart/RadialChart.tsx +174 -0
  254. package/src/components/Charts/RadialChart/index.ts +1 -0
  255. package/src/components/Charts/RadialChart/types.ts +32 -0
  256. package/src/components/Checkbox/Checkbox.scss +89 -0
  257. package/src/components/Checkbox/Checkbox.stories.tsx +47 -0
  258. package/src/components/Checkbox/Checkbox.tsx +61 -0
  259. package/src/components/Checkbox/index.ts +1 -0
  260. package/src/components/Checkbox/types.ts +30 -0
  261. package/src/components/Chip/Chip.scss +70 -0
  262. package/src/components/Chip/Chip.stories.tsx +88 -0
  263. package/src/components/Chip/Chip.tsx +35 -0
  264. package/src/components/Chip/index.ts +1 -0
  265. package/src/components/Chip/types.ts +19 -0
  266. package/src/components/Drawer/Drawer.scss +121 -0
  267. package/src/components/Drawer/Drawer.stories.tsx +88 -0
  268. package/src/components/Drawer/Drawer.tsx +179 -0
  269. package/src/components/Drawer/Types.ts +88 -0
  270. package/src/components/Drawer/index.ts +1 -0
  271. package/src/components/ExpandableMenu/ExpandableMenu.scss +110 -0
  272. package/src/components/ExpandableMenu/ExpandableMenu.stories.tsx +67 -0
  273. package/src/components/ExpandableMenu/ExpandableMenu.tsx +101 -0
  274. package/src/components/ExpandableMenu/index.ts +1 -0
  275. package/src/components/ExpandableMenu/types.ts +34 -0
  276. package/src/components/FileDropzone/Dropzone.tsx +55 -0
  277. package/src/components/FileDropzone/FileDropzone.scss +134 -0
  278. package/src/components/FileDropzone/FileDropzone.stories.tsx +83 -0
  279. package/src/components/FileDropzone/FileDropzone.tsx +98 -0
  280. package/src/components/FileDropzone/FilePreview.tsx +75 -0
  281. package/src/components/FileDropzone/index.ts +1 -0
  282. package/src/components/FileDropzone/types.ts +113 -0
  283. package/src/components/Form/Form.scss +98 -0
  284. package/src/components/Form/Form.stories.tsx +177 -0
  285. package/src/components/Form/Form.tsx +57 -0
  286. package/src/components/Form/index.ts +1 -0
  287. package/src/components/Form/types.ts +1 -0
  288. package/src/components/Form/validation.json +29 -0
  289. package/src/components/GridLayout/GridLayout.scss +71 -0
  290. package/src/components/GridLayout/GridLayout.stories.tsx +128 -0
  291. package/src/components/GridLayout/GridLayout.tsx +30 -0
  292. package/src/components/GridLayout/GridLayoutStory.scss +25 -0
  293. package/src/components/GridLayout/index.ts +1 -0
  294. package/src/components/GridLayout/types.ts +64 -0
  295. package/src/components/HighlightText/HighlightText.scss +3 -0
  296. package/src/components/HighlightText/HighlightText.stories.tsx +22 -0
  297. package/src/components/HighlightText/HighlightText.tsx +33 -0
  298. package/src/components/HighlightText/index.ts +1 -0
  299. package/src/components/HighlightText/types.ts +4 -0
  300. package/src/components/Icon/Icon.stories.tsx +37 -0
  301. package/src/components/Icon/Icon.tsx +43 -0
  302. package/src/components/Icon/Icons.scss +34 -0
  303. package/src/components/Icon/iconList.ts +62 -0
  304. package/src/components/Icon/index.ts +1 -0
  305. package/src/components/Icon/types.ts +10 -0
  306. package/src/components/Input/Input.scss +150 -0
  307. package/src/components/Input/Input.stories.tsx +96 -0
  308. package/src/components/Input/Input.tsx +93 -0
  309. package/src/components/Input/index.ts +1 -0
  310. package/src/components/Input/types.ts +77 -0
  311. package/src/components/InputWithDropdown/InputWithDropdown.scss +185 -0
  312. package/src/components/InputWithDropdown/InputWithDropdown.stories.tsx +114 -0
  313. package/src/components/InputWithDropdown/InputWithDropdown.tsx +85 -0
  314. package/src/components/InputWithDropdown/index.ts +1 -0
  315. package/src/components/InputWithDropdown/types.ts +110 -0
  316. package/src/components/LazyLoad/LazyLoad.d.ts +3 -0
  317. package/src/components/LazyLoad/LazyLoad.stories.tsx +33 -0
  318. package/src/components/LazyLoad/LazyLoad.ts +2 -0
  319. package/src/components/LazyLoad/LazyLoading.tsx +19 -0
  320. package/src/components/LazyLoad/index.ts +1 -0
  321. package/src/components/MenuOption/MenuOption.scss +69 -0
  322. package/src/components/MenuOption/MenuOption.stories.tsx +259 -0
  323. package/src/components/MenuOption/MenuOption.tsx +126 -0
  324. package/src/components/MenuOption/index.ts +1 -0
  325. package/src/components/MenuOption/types.ts +161 -0
  326. package/src/components/MiniModal/MiniModal.scss +139 -0
  327. package/src/components/MiniModal/MiniModal.stories.tsx +475 -0
  328. package/src/components/MiniModal/MiniModal.tsx +218 -0
  329. package/src/components/MiniModal/index.ts +1 -0
  330. package/src/components/MiniModal/types.ts +88 -0
  331. package/src/components/MultiSelect/Dropdown.scss +66 -0
  332. package/src/components/MultiSelect/Dropdown.tsx +77 -0
  333. package/src/components/MultiSelect/MultiSelect.scss +190 -0
  334. package/src/components/MultiSelect/MultiSelect.stories.tsx +85 -0
  335. package/src/components/MultiSelect/MultiSelect.tsx +260 -0
  336. package/src/components/MultiSelect/MultiSelectTypes.ts +19 -0
  337. package/src/components/MultiSelect/dropdownTypes.ts +15 -0
  338. package/src/components/MultiSelect/index.ts +1 -0
  339. package/src/components/RadioButton/RadioButton.scss +99 -0
  340. package/src/components/RadioButton/RadioButton.stories.tsx +43 -0
  341. package/src/components/RadioButton/RadioButton.tsx +32 -0
  342. package/src/components/RadioButton/index.ts +1 -0
  343. package/src/components/RadioButton/radioButtonTypes.tsx +40 -0
  344. package/src/components/RadioGroup/RadioGroup.scss +5 -0
  345. package/src/components/RadioGroup/RadioGroup.stories.tsx +81 -0
  346. package/src/components/RadioGroup/RadioGroup.tsx +30 -0
  347. package/src/components/RadioGroup/index.ts +1 -0
  348. package/src/components/RadioGroup/radioGroupTypes.tsx +54 -0
  349. package/src/components/Search/Search.scss +87 -0
  350. package/src/components/Search/Search.stories.tsx +26 -0
  351. package/src/components/Search/Search.tsx +103 -0
  352. package/src/components/Search/index.ts +1 -0
  353. package/src/components/Search/types.ts +15 -0
  354. package/src/components/Select/Select.scss +247 -0
  355. package/src/components/Select/Select.stories.tsx +156 -0
  356. package/src/components/Select/Select.tsx +368 -0
  357. package/src/components/Select/components/Dropdown/Dropdown.scss +70 -0
  358. package/src/components/Select/components/Dropdown/Dropdown.tsx +89 -0
  359. package/src/components/Select/components/Dropdown/dropdownTypes.ts +19 -0
  360. package/src/components/Select/index.ts +1 -0
  361. package/src/components/Select/types.ts +122 -0
  362. package/src/components/Table/Table.scss +101 -0
  363. package/src/components/Table/Table.stories.tsx +345 -0
  364. package/src/components/Table/Table.tsx +128 -0
  365. package/src/components/Table/Types.ts +100 -0
  366. package/src/components/Table/index.ts +1 -0
  367. package/src/components/TableTree/TableTree.scss +142 -0
  368. package/src/components/TableTree/TableTree.stories.tsx +121 -0
  369. package/src/components/TableTree/TableTree.tsx +216 -0
  370. package/src/components/TableTree/TableTreeStories.scss +22 -0
  371. package/src/components/TableTree/data.ts +573 -0
  372. package/src/components/TableTree/index.ts +1 -0
  373. package/src/components/Tabs/Tabs.scss +76 -0
  374. package/src/components/Tabs/Tabs.stories.tsx +104 -0
  375. package/src/components/Tabs/Tabs.tsx +64 -0
  376. package/src/components/Tabs/index.ts +1 -0
  377. package/src/components/Tabs/types.ts +38 -0
  378. package/src/components/TextArea/Textarea.scss +145 -0
  379. package/src/components/TextArea/Textarea.stories.tsx +92 -0
  380. package/src/components/TextArea/Textarea.tsx +84 -0
  381. package/src/components/TextArea/Types.ts +82 -0
  382. package/src/components/TextArea/index.tsx +1 -0
  383. package/src/components/ThemeProvider/ThemeProvider.tsx +24 -0
  384. package/src/components/ThemeProvider/index.ts +1 -0
  385. package/src/components/ThemeProvider/types.ts +14 -0
  386. package/src/components/Toast/Toast.scss +121 -0
  387. package/src/components/Toast/Toast.stories.tsx +180 -0
  388. package/src/components/Toast/Toast.tsx +116 -0
  389. package/src/components/Toast/index.ts +1 -0
  390. package/src/components/Toast/types.ts +27 -0
  391. package/src/components/Toggle/Toggle.scss +132 -0
  392. package/src/components/Toggle/Toggle.stories.tsx +132 -0
  393. package/src/components/Toggle/Toggle.tsx +96 -0
  394. package/src/components/Toggle/index.ts +1 -0
  395. package/src/components/Toggle/types.ts +43 -0
  396. package/src/components/Tooltip/Tooltip.scss +27 -0
  397. package/src/components/Tooltip/Tooltip.stories.tsx +97 -0
  398. package/src/components/Tooltip/Tooltip.tsx +194 -0
  399. package/src/components/Tooltip/index.ts +1 -0
  400. package/src/components/Tooltip/types.ts +60 -0
  401. package/src/components/Typography/Typography.scss +49 -0
  402. package/src/components/Typography/Typography.stories.tsx +57 -0
  403. package/src/components/Typography/Typography.tsx +39 -0
  404. package/src/components/Typography/index.ts +1 -0
  405. package/src/components/Typography/types.ts +56 -0
  406. package/src/fonts/Montserrat/Montserrat-Medium.ttf +0 -0
  407. package/src/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  408. package/src/fonts/Montserrat/Montserrat-SemiBold.ttf +0 -0
  409. package/src/fonts/Poppins/Poppins-Black.ttf +0 -0
  410. package/src/fonts/Poppins/Poppins-BlackItalic.ttf +0 -0
  411. package/src/fonts/Poppins/Poppins-Bold.ttf +0 -0
  412. package/src/fonts/Poppins/Poppins-BoldItalic.ttf +0 -0
  413. package/src/fonts/Poppins/Poppins-ExtraBold.ttf +0 -0
  414. package/src/fonts/Poppins/Poppins-ExtraBoldItalic.ttf +0 -0
  415. package/src/fonts/Poppins/Poppins-ExtraLight.ttf +0 -0
  416. package/src/fonts/Poppins/Poppins-ExtraLightItalic.ttf +0 -0
  417. package/src/fonts/Poppins/Poppins-Italic.ttf +0 -0
  418. package/src/fonts/Poppins/Poppins-Light.ttf +0 -0
  419. package/src/fonts/Poppins/Poppins-LightItalic.ttf +0 -0
  420. package/src/fonts/Poppins/Poppins-Medium.ttf +0 -0
  421. package/src/fonts/Poppins/Poppins-MediumItalic.ttf +0 -0
  422. package/src/fonts/Poppins/Poppins-Regular.ttf +0 -0
  423. package/src/fonts/Poppins/Poppins-SemiBold.ttf +0 -0
  424. package/src/fonts/Poppins/Poppins-SemiBoldItalic.ttf +0 -0
  425. package/src/fonts/Poppins/Poppins-Thin.ttf +0 -0
  426. package/src/fonts/Poppins/Poppins-ThinItalic.ttf +0 -0
  427. package/src/hooks/keyboardevents/useEscKeyEvent.tsx +31 -0
  428. package/src/hooks/useClickOutside.tsx +30 -0
  429. package/src/hooks/useFileDropzone.tsx +273 -0
  430. package/src/hooks/usePortalPosition.tsx +53 -0
  431. package/src/hooks/useTheme.tsx +13 -0
  432. package/src/index.ts +91 -0
  433. package/src/utils/TableCell/TableCell.ts +16 -0
  434. package/src/utils/checkEmpty/checkEmpty.stories.tsx +34 -0
  435. package/src/utils/checkEmpty/checkEmpty.ts +10 -0
  436. package/src/utils/ffID/ffID.stories.tsx +35 -0
  437. package/src/utils/ffID/ffid.ts +9 -0
  438. package/src/utils/getExtension/getExtension.stories.tsx +23 -0
  439. package/src/utils/getExtension/getExtension.ts +28 -0
  440. package/src/utils/truncateText/truncateText.stories.tsx +37 -0
  441. package/src/utils/truncateText/truncateText.ts +4 -0
  442. package/tsconfig.json +55 -0
  443. package/ui-library.zip +0 -0
  444. package/vite.config.js +30 -0
@@ -0,0 +1,30 @@
1
+ import { Meta, StoryObj } from '@storybook/react/*';
2
+ import DonutChart from './DonutChart';
3
+
4
+ const meta: Meta<typeof DonutChart> = {
5
+ title: 'Components/DonutChart',
6
+ component: DonutChart,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ tags: ['autodocs'],
11
+ };
12
+ export default meta;
13
+
14
+ type Story = StoryObj<typeof DonutChart>;
15
+
16
+ export const Default: Story = {
17
+ args: {
18
+ radius: 70,
19
+ lineWidth: 15,
20
+ legendDetailsType: 'Scripts',
21
+ isLegendDetails: true,
22
+ statusValues: [
23
+ { status: 'Passed', value: 60 },
24
+ { status: 'failed', value: 20 },
25
+ { status: 'Warning', value: 10 },
26
+ { status: 'skipped', value: 10 },
27
+ ],
28
+ gapAngle: 0.06,
29
+ },
30
+ };
@@ -0,0 +1,241 @@
1
+ import React, { useState } from 'react';
2
+ import './DonutChart.scss';
3
+ import { Status, DonutChartProps, StatusValue } from './type';
4
+
5
+ const calculateArc = (
6
+ x: number,
7
+ y: number,
8
+ radius: number,
9
+ startAngle: number,
10
+ endAngle: number
11
+ ): string => {
12
+ const startX = x + radius * Math.cos(startAngle);
13
+ const startY = y + radius * Math.sin(startAngle);
14
+ const endX = x + radius * Math.cos(endAngle);
15
+ const endY = y + radius * Math.sin(endAngle);
16
+ const largeArcFlag = endAngle - startAngle > Math.PI ? 1 : 0;
17
+
18
+ return `M ${startX} ${startY} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`;
19
+ };
20
+
21
+ const useColorMappings = () => ({
22
+ colorMapping: {
23
+ passed: 'var(--status-success-text-color)',
24
+ failed: 'var(--status-rejected-text-color)',
25
+ warning: 'var(--status-warning-text-color)',
26
+ skipped: 'var(--status-skipped-text-color)',
27
+ default: 'var(--brand-color)',
28
+ },
29
+ hoverMapping: {
30
+ passed: 'var(--status-success-bg-color)',
31
+ failed: 'var(--status-rejected-bg-color)',
32
+ warning: 'var(--status-warning-bg-color)',
33
+ skipped: 'var(--status-skipped-bg-color)',
34
+ default: 'var(--status-percentage-growth-bg-color)',
35
+ },
36
+ });
37
+
38
+ const DonutChart: React.FC<DonutChartProps> = ({
39
+ radius = 60,
40
+ lineWidth = 15,
41
+ statusValues = [],
42
+ gapAngle = 0.06,
43
+ legendDetailsType = '',
44
+ isLegendDetails = true,
45
+ }) => {
46
+ const [hoveredStatus, setHoveredStatus] = useState<Status | null>(null);
47
+ const { colorMapping, hoverMapping } = useColorMappings();
48
+ const total = statusValues?.reduce((acc, { value }) => acc + value, 0);
49
+ const nonZeroValues = statusValues?.filter(({ value }) => value > 0);
50
+ const statusColors = ['passed', 'failed', 'warning', 'skipped'];
51
+ // Calculate angles and gaps
52
+ const TOTAL_GAP_ANGLE = gapAngle * nonZeroValues.length;
53
+ let remainingAngle = 2 * Math.PI - TOTAL_GAP_ANGLE;
54
+ let currentAngle = Math.PI / 2;
55
+
56
+ const MIN_PERCENTAGE = 1;
57
+ const MIN_ANGLE = (MIN_PERCENTAGE / 100) * (2 * Math.PI);
58
+ let minAngleTotal = 0;
59
+
60
+ // Adjust for small angles
61
+ nonZeroValues.forEach(({ value }) => {
62
+ const valuePercentage = value / total;
63
+ const angle = Math.max(valuePercentage * (2 * Math.PI), MIN_ANGLE);
64
+ minAngleTotal += angle;
65
+ remainingAngle -= angle;
66
+ });
67
+
68
+ const handleMouseEnter = (status: Status) => setHoveredStatus(status);
69
+ const handleMouseLeave = () => setHoveredStatus(null);
70
+
71
+ const SVG_PADDING = 4;
72
+ const DONUT_SVG_SIZE = (radius + lineWidth) * 2 + SVG_PADDING * 2;
73
+
74
+ const renderArc = (statusValue: StatusValue, endAngle: number, i: number) => {
75
+ const normalizedStatus = statusValue?.status?.toLowerCase() as Status;
76
+ const isFullCircle = nonZeroValues.length === 1;
77
+
78
+ // Full circle handling
79
+ const foregroundArcPath = isFullCircle
80
+ ? calculateArc(0, 0, radius, 0, 2 * Math.PI)
81
+ : calculateArc(0, 0, radius, currentAngle, endAngle);
82
+
83
+ // Outer arc for hover effect
84
+ const outerArcRadius = radius + lineWidth - 1;
85
+ const outerArcPath = isFullCircle
86
+ ? calculateArc(0, 0, outerArcRadius, 0, 2 * Math.PI)
87
+ : calculateArc(0, 0, outerArcRadius, currentAngle, endAngle);
88
+
89
+ currentAngle = endAngle + gapAngle;
90
+
91
+ return (
92
+ <g key={i}>
93
+ {/* Main arc */}
94
+ <path
95
+ d={foregroundArcPath}
96
+ fill="none"
97
+ stroke={colorMapping[normalizedStatus as keyof typeof colorMapping]}
98
+ strokeWidth={lineWidth}
99
+ onMouseEnter={() => handleMouseEnter(normalizedStatus)}
100
+ onMouseLeave={handleMouseLeave}
101
+ strokeOpacity={0.8}
102
+ />
103
+ {/* Hover effect */}
104
+ {hoveredStatus === normalizedStatus && (
105
+ <path
106
+ d={outerArcPath}
107
+ fill="none"
108
+ stroke={colorMapping[normalizedStatus as keyof typeof colorMapping]}
109
+ strokeWidth={4}
110
+ strokeOpacity={0.3}
111
+ />
112
+ )}
113
+ </g>
114
+ );
115
+ };
116
+
117
+ const renderLegendItem = (statusKey: Status) => {
118
+ const statusData = statusValues?.find(
119
+ (s) => s.status?.toLowerCase() === statusKey?.toLowerCase()
120
+ );
121
+ const value = Math.round(statusData?.value || 0);
122
+ const percentage = ((statusData?.value || 0) / total) * 100;
123
+
124
+ return (
125
+ <div
126
+ key={statusKey}
127
+ className={`ff-status-item ${
128
+ hoveredStatus === null || hoveredStatus === statusKey
129
+ ? 'ff-highlighted'
130
+ : 'ff-fade'
131
+ }`}
132
+ >
133
+ <div className="ff-status-label">
134
+ <div
135
+ className="ff-status-color"
136
+ style={{
137
+ backgroundColor:
138
+ colorMapping[statusKey as keyof typeof colorMapping],
139
+ }}
140
+ />
141
+ <div className="ff-status-text">
142
+ {statusKey?.charAt(0)?.toUpperCase() +
143
+ statusKey?.slice(1)?.toLowerCase()}
144
+ </div>
145
+ </div>
146
+ <div className="ff-status-details">
147
+ <div className="ff-status-details-script-count">
148
+ {value}
149
+ <span>{legendDetailsType}</span>
150
+ </div>
151
+ <div className="ff-status-details-script-percentage">
152
+ ({percentage?.toFixed(2)}%)
153
+ </div>
154
+ </div>
155
+ </div>
156
+ );
157
+ };
158
+
159
+ return (
160
+ <div className="ff-donut-chart-section">
161
+ <div className="ff-donut-chart-svg-container">
162
+ <svg
163
+ width={DONUT_SVG_SIZE}
164
+ height={DONUT_SVG_SIZE}
165
+ viewBox={`0 0 ${DONUT_SVG_SIZE} ${DONUT_SVG_SIZE}`}
166
+ >
167
+ <g
168
+ transform={`translate(${radius + lineWidth + SVG_PADDING}, ${
169
+ radius + lineWidth + SVG_PADDING
170
+ })`}
171
+ >
172
+ {nonZeroValues?.map((status, i) => {
173
+ const valuePercentage = status.value / total;
174
+ let angle = Math.max(valuePercentage * (2 * Math.PI), MIN_ANGLE);
175
+ angle += remainingAngle * (valuePercentage / (total / total));
176
+ const endAngle = currentAngle + angle;
177
+
178
+ return renderArc(status, endAngle, i);
179
+ })}
180
+ <text x="0" y="-18" textAnchor="middle" fill={colorMapping.default}>
181
+ {hoveredStatus ? hoveredStatus?.toUpperCase() : 'TOTAL'}
182
+ </text>
183
+ <text x="0" y="5" textAnchor="middle" fill={colorMapping.skipped}>
184
+ {hoveredStatus
185
+ ? `${
186
+ statusValues?.find(
187
+ (s) => s?.status?.toLowerCase() === hoveredStatus
188
+ )?.value
189
+ } ${legendDetailsType}`
190
+ : `${total} ${legendDetailsType}`}
191
+ </text>
192
+ <rect
193
+ x={-17}
194
+ y={14}
195
+ width={34}
196
+ height={18}
197
+ fill={
198
+ hoveredStatus
199
+ ? hoverMapping[
200
+ hoveredStatus?.toLowerCase() as keyof typeof hoverMapping
201
+ ]
202
+ : hoverMapping.default
203
+ }
204
+ rx="5"
205
+ ry="5"
206
+ />
207
+ <text
208
+ x="0"
209
+ y="26"
210
+ textAnchor="middle"
211
+ fill={
212
+ hoveredStatus
213
+ ? colorMapping[
214
+ hoveredStatus?.toLowerCase() as keyof typeof colorMapping
215
+ ]
216
+ : colorMapping['default' as keyof typeof colorMapping]
217
+ }
218
+ >
219
+ {hoveredStatus
220
+ ? `${(
221
+ ((statusValues?.find(
222
+ (s) => s?.status?.toLowerCase() === hoveredStatus
223
+ )?.value || 0) /
224
+ total) *
225
+ 100
226
+ )?.toFixed(2)}%`
227
+ : '100%'}
228
+ </text>
229
+ </g>
230
+ </svg>
231
+ </div>
232
+ {isLegendDetails && (
233
+ <div className="ff-status-container">
234
+ {statusColors?.map((status) => renderLegendItem(status as Status))}
235
+ </div>
236
+ )}
237
+ </div>
238
+ );
239
+ };
240
+
241
+ export default DonutChart;
@@ -0,0 +1 @@
1
+ export { default } from './DonutChart';
@@ -0,0 +1,23 @@
1
+ export type Status =
2
+ | 'passed'
3
+ | 'failed'
4
+ | 'warning'
5
+ | 'skipped'
6
+ | 'Passed'
7
+ | 'Failed'
8
+ | 'Skipped'
9
+ | 'Warning';
10
+
11
+ export type StatusValue = {
12
+ status: Status;
13
+ value: number;
14
+ };
15
+
16
+ export type DonutChartProps = {
17
+ radius: number;
18
+ lineWidth: number;
19
+ statusValues: StatusValue[];
20
+ legendDetailsType: string;
21
+ isLegendDetails: boolean;
22
+ gapAngle?: number;
23
+ };
@@ -0,0 +1,12 @@
1
+ @import '../../../assets/styles/fonts';
2
+
3
+ .ff-radial-chart-container {
4
+ cursor: pointer;
5
+ svg {
6
+ text {
7
+ @extend .font-size-8;
8
+ font-size: var(--fontSize) !important;
9
+ font-weight: 400;
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,36 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import RadialChart from './RadialChart';
3
+
4
+ const meta: Meta<typeof RadialChart> = {
5
+ title: 'Components/RadialChart',
6
+ component: RadialChart,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ tags: ['autodocs'],
11
+ argTypes: {
12
+ radius: { control: 'number' },
13
+ lineWidth: { control: 'number' },
14
+ statusValues: { control: 'object' },
15
+ onClick: { action: 'clicked' },
16
+ fontSize: { control: 'number' },
17
+ },
18
+ };
19
+
20
+ export default meta;
21
+ type Story = StoryObj<typeof RadialChart>;
22
+
23
+ export const ChartWithStatus: Story = {
24
+ args: {
25
+ radius: 15,
26
+ lineWidth: 5,
27
+ statusValues: [
28
+ { status: 'Passed', value: 40 },
29
+ { status: 'Failed', value: 20 },
30
+ { status: 'Warning', value: 20 },
31
+ { status: 'Skipped', value: 20 },
32
+ ],
33
+ onClick: () => {},
34
+ fontSize: 8,
35
+ },
36
+ };
@@ -0,0 +1,174 @@
1
+ import React, { useMemo } from 'react';
2
+ import './RadialChart.scss';
3
+ import {
4
+ RadialChartProps,
5
+ ArcParams,
6
+ ArcResult,
7
+ ArcAnglesResult,
8
+ } from './types';
9
+
10
+ const useColorMappings = () =>
11
+ useMemo(() => {
12
+ return {
13
+ colorMapping: {
14
+ passed: 'var(--status-success-text-color)',
15
+ failed: 'var(--status-rejected-text-color)',
16
+ warning: 'var(--status-warning-text-color)',
17
+ skipped: 'var(--status-skipped-text-color)',
18
+ },
19
+ backgroundColorMapping: {
20
+ passed: 'var(--status-success-bg-color)',
21
+ failed: 'var(--status-rejected-bg-color)',
22
+ warning: 'var(--status-warning-bg-color)',
23
+ skipped: 'var(--status-skipped-bg-color)',
24
+ },
25
+ };
26
+ }, []);
27
+
28
+ // Function to generate SVG arc paths
29
+ const calculateArc = ({
30
+ x,
31
+ y,
32
+ radius,
33
+ startAngle,
34
+ endAngle,
35
+ }: ArcParams): ArcResult => {
36
+ const startX = x + radius * Math.cos(startAngle);
37
+ const startY = y + radius * Math.sin(startAngle);
38
+ const endX = x + radius * Math.cos(endAngle);
39
+ const endY = y + radius * Math.sin(endAngle);
40
+ const largeArcFlag = endAngle - startAngle > Math.PI ? 1 : 0;
41
+
42
+ return `M ${startX} ${startY} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${endX} ${endY}`;
43
+ };
44
+
45
+ // Function to calculate arc paths and angles
46
+ const calculateArcAngles = (
47
+ statusValue: number,
48
+ total: number,
49
+ currentAngle: number,
50
+ radius: number
51
+ ): ArcAnglesResult => {
52
+ if (total === 0) {
53
+ const backgroundArcPath = calculateArc({
54
+ x: 0,
55
+ y: 0,
56
+ radius,
57
+ startAngle: 0,
58
+ endAngle: 2 * Math.PI,
59
+ });
60
+ return {
61
+ endAngle: currentAngle,
62
+ backgroundArcPath,
63
+ foregroundArcPath: '',
64
+ percentage: 0,
65
+ };
66
+ }
67
+
68
+ const percentage = statusValue / total;
69
+ const angleIncrement = percentage * 2 * Math.PI;
70
+ let startAngle = currentAngle;
71
+ let endAngle = startAngle + angleIncrement;
72
+
73
+ // Scenario when statusValue is equal to total
74
+ if (statusValue === total) {
75
+ startAngle = 0;
76
+ endAngle = 2 * Math.PI;
77
+ }
78
+
79
+ const backgroundArcPath = calculateArc({
80
+ x: 0,
81
+ y: 0,
82
+ radius,
83
+ startAngle: 0,
84
+ endAngle: 2 * Math.PI,
85
+ });
86
+ const foregroundArcPath = calculateArc({
87
+ x: 0,
88
+ y: 0,
89
+ radius,
90
+ startAngle,
91
+ endAngle,
92
+ });
93
+
94
+ return { endAngle, backgroundArcPath, foregroundArcPath, percentage };
95
+ };
96
+
97
+ // RadialChart component
98
+ const RadialChart: React.FC<RadialChartProps> = ({
99
+ radius = 15,
100
+ lineWidth = 5,
101
+ statusValues = [],
102
+ onClick = () => {},
103
+ fontSize = 6,
104
+ }) => {
105
+ const { colorMapping, backgroundColorMapping } = useColorMappings();
106
+ const total = statusValues.reduce((acc, status) => acc + status.value, 0);
107
+ let currentAngle = -Math.PI / 2;
108
+ const svgSize = 2 * (radius + lineWidth);
109
+ return (
110
+ <div
111
+ className="ff-radial-chart-container"
112
+ style={{ '--fontSize': `${fontSize}px` } as React.CSSProperties}
113
+ >
114
+ {statusValues.map((status) => {
115
+ const normalizedStatus = status.status.toLowerCase();
116
+ const { endAngle, backgroundArcPath, foregroundArcPath, percentage } =
117
+ calculateArcAngles(status.value, total, currentAngle, radius);
118
+ currentAngle = endAngle;
119
+ return (
120
+ <svg
121
+ key={status.status}
122
+ width={svgSize}
123
+ height={svgSize}
124
+ viewBox={`0 0 ${svgSize} ${svgSize}`}
125
+ onClick={() => onClick(status)}
126
+ role="img"
127
+ aria-label={`${status.status}: ${Math.round(percentage * 100)}%`}
128
+ >
129
+ <g
130
+ transform={`translate(${radius + lineWidth}, ${
131
+ radius + lineWidth
132
+ })`}
133
+ >
134
+ {/* Background Circle */}
135
+ <path
136
+ d={backgroundArcPath}
137
+ fill="none"
138
+ stroke={
139
+ backgroundColorMapping[
140
+ normalizedStatus as keyof typeof colorMapping
141
+ ]
142
+ }
143
+ strokeWidth={lineWidth}
144
+ />
145
+ {/* Status Arc */}
146
+ <path
147
+ d={foregroundArcPath}
148
+ fill="none"
149
+ stroke={
150
+ colorMapping[normalizedStatus as keyof typeof colorMapping]
151
+ }
152
+ strokeWidth={lineWidth}
153
+ />
154
+ {/* Percentage Text */}
155
+ <text
156
+ x="0"
157
+ y="0"
158
+ fill={
159
+ colorMapping[normalizedStatus as keyof typeof colorMapping]
160
+ }
161
+ textAnchor="middle"
162
+ dominantBaseline="central"
163
+ >
164
+ {`${Math.round(percentage * 100)}%`}
165
+ </text>
166
+ </g>
167
+ </svg>
168
+ );
169
+ })}
170
+ </div>
171
+ );
172
+ };
173
+
174
+ export default RadialChart;
@@ -0,0 +1 @@
1
+ export { default } from './RadialChart';
@@ -0,0 +1,32 @@
1
+ export type Status = {
2
+ status: 'Passed' | 'Failed' | 'Warning' | 'Skipped' | 'passed' | 'failed' | 'warning' | 'skipped';
3
+ value: number;
4
+ };
5
+ //main component type
6
+ export interface RadialChartProps {
7
+ radius: number;
8
+ lineWidth: number;
9
+ statusValues: Status[];
10
+ onClick?: (status: Status) => void;
11
+ fontSize: number;
12
+ }
13
+
14
+ //type for the calculateArc function
15
+ export type ArcParams = {
16
+ x: number;
17
+ y: number;
18
+ radius: number;
19
+ startAngle: number;
20
+ endAngle: number;
21
+ };
22
+
23
+ // type for the calculateArc function
24
+ export type ArcResult = string;
25
+
26
+ // type for the calculateArcAngles function
27
+ export type ArcAnglesResult = {
28
+ endAngle: number;
29
+ backgroundArcPath: string;
30
+ foregroundArcPath: string;
31
+ percentage: number;
32
+ };
@@ -0,0 +1,89 @@
1
+ @use '../../assets/styles/fonts';
2
+ @use '../../assets/styles/mixins';
3
+
4
+ .ff-checkbox--overlay {
5
+ @include mixins.center-content();
6
+ cursor: pointer;
7
+ position: relative;
8
+
9
+ .ff-checkbox-input {
10
+ display: none;
11
+ }
12
+
13
+ .ff-checkbox-custom {
14
+ @include mixins.box(16px, 1px solid var(--checkbox-border-color));
15
+ box-sizing: border-box;
16
+ border-radius: 2px;
17
+ margin-right: 8px;
18
+ background-color: var(--checkbox-bg-color);
19
+ position: relative;
20
+ @include mixins.center-content;
21
+ @include mixins.transition(border-color, background-color);
22
+
23
+ &::before {
24
+ content: '';
25
+ width: 9px;
26
+ height: 2px;
27
+ background-color: var(--checkbox-partial-color);
28
+ border-radius: 2px;
29
+ position: absolute;
30
+ top: 50%;
31
+ left: 50%;
32
+ transform: translate(-50%, -50%) rotate(180deg);
33
+ opacity: 0;
34
+ @include mixins.transition(border-color, background-color);
35
+ }
36
+
37
+ &::after {
38
+ content: '';
39
+ @include mixins.box(16px, 4px solid var(--checkbox-hover-color));
40
+ border-radius: 4px;
41
+ position: absolute;
42
+ opacity: 0;
43
+ background-color: var(--checkbox-hover-color);
44
+ z-index: -1;
45
+ @include mixins.transition(border-color, background-color);
46
+ }
47
+ &:hover {
48
+ border-color: var(--brand-color);
49
+ &::after {
50
+ opacity: 1;
51
+ }
52
+ }
53
+ }
54
+
55
+ .ff-checkbox-input:checked + .ff-checkbox-custom {
56
+ background: var(--brand-color);
57
+ border-color: var(--brand-color);
58
+ }
59
+
60
+ .ff-checkbox-input:checked:hover + .ff-checkbox-custom {
61
+ background: var(--brand-color);
62
+ &::after {
63
+ opacity: 1;
64
+ }
65
+ }
66
+
67
+ .ff-checkbox-input:disabled + .ff-checkbox-custom {
68
+ opacity: 0.5;
69
+ cursor: not-allowed;
70
+ border: 1px solid var(--checkbox-border-color);
71
+ &::after {
72
+ opacity: 0;
73
+ }
74
+ }
75
+ .ff-storybook-checkbox--partial {
76
+ background-color: var(--brand-color);
77
+ border: none;
78
+ &::before {
79
+ opacity: 1;
80
+ }
81
+
82
+ &:hover {
83
+ background-color: var(--brand-color);
84
+ &::after {
85
+ opacity: 1;
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,47 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import Checkbox from './Checkbox';
3
+ import { useState } from 'react';
4
+
5
+ const meta: Meta<typeof Checkbox> = {
6
+ component: Checkbox,
7
+ title: 'Components/Checkbox',
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'centered',
11
+ },
12
+ };
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof meta>;
16
+
17
+ export const Default: Story = {
18
+ args: {
19
+ label: 'Enter label',
20
+ },
21
+ };
22
+
23
+ export const Partial: Story = {
24
+ args: {
25
+ label: 'Enter label',
26
+ partial: true,
27
+ },
28
+ };
29
+
30
+ export const Controlled: Story = {
31
+ render: () => {
32
+ const [checked, setChecked] = useState(false);
33
+
34
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
35
+ setChecked((event.target as HTMLInputElement).checked);
36
+ };
37
+
38
+ return (
39
+ <Checkbox
40
+ label="click here to proceed with controlled component"
41
+ disabled={false}
42
+ checked={checked}
43
+ onChange={handleChange}
44
+ />
45
+ );
46
+ },
47
+ };