@newtonschool/grauity 0.0.14 → 0.1.11

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 (392) hide show
  1. package/README.md +145 -9
  2. package/dist/fonts/grauity-icons.eot +0 -0
  3. package/dist/fonts/grauity-icons.ttf +0 -0
  4. package/dist/fonts/grauity-icons.woff +0 -0
  5. package/dist/fonts/grauity-icons.woff2 +0 -0
  6. package/dist/hooks/index.d.ts +4 -0
  7. package/dist/hooks/index.d.ts.map +1 -0
  8. package/dist/hooks/useClickAway.d.ts +15 -0
  9. package/dist/hooks/useClickAway.d.ts.map +1 -0
  10. package/dist/hooks/useDisableBodyScroll.d.ts +7 -0
  11. package/dist/hooks/useDisableBodyScroll.d.ts.map +1 -0
  12. package/dist/hooks/useKeyboardEvent.d.ts +17 -0
  13. package/dist/hooks/useKeyboardEvent.d.ts.map +1 -0
  14. package/dist/index.d.ts +1109 -39
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/main.cjs +1 -1
  17. package/dist/main.cjs.map +1 -1
  18. package/dist/main.css +10 -1
  19. package/dist/main.css.map +1 -1
  20. package/dist/module.css +10 -1
  21. package/dist/module.css.map +1 -1
  22. package/dist/module.mjs +1 -1
  23. package/dist/module.mjs.map +1 -1
  24. package/dist/stories/atoms/Colors/FoundationColors.stories.d.ts +7 -0
  25. package/dist/stories/atoms/Colors/FoundationColors.stories.d.ts.map +1 -0
  26. package/dist/stories/atoms/Colors/index.stories.d.ts +18 -0
  27. package/dist/stories/atoms/Colors/index.stories.d.ts.map +1 -0
  28. package/dist/stories/atoms/CornerRadius/index.stories.d.ts +7 -0
  29. package/dist/stories/atoms/CornerRadius/index.stories.d.ts.map +1 -0
  30. package/dist/stories/atoms/Spacing/index.stories.d.ts +7 -0
  31. package/dist/stories/atoms/Spacing/index.stories.d.ts.map +1 -0
  32. package/dist/stories/decorators/withEnableBodyScroll.d.ts +8 -0
  33. package/dist/stories/decorators/withEnableBodyScroll.d.ts.map +1 -0
  34. package/dist/stories/decorators/withInlineContainer.d.ts +15 -0
  35. package/dist/stories/decorators/withInlineContainer.d.ts.map +1 -0
  36. package/dist/stories/elements/Alert/Gallery.stories.d.ts +30 -0
  37. package/dist/stories/elements/Alert/Gallery.stories.d.ts.map +1 -0
  38. package/dist/stories/elements/Alert/index.stories.d.ts +30 -0
  39. package/dist/stories/elements/Alert/index.stories.d.ts.map +1 -0
  40. package/dist/stories/elements/AlertBanner/Gallery.stories.d.ts +33 -0
  41. package/dist/stories/elements/AlertBanner/Gallery.stories.d.ts.map +1 -0
  42. package/dist/stories/elements/AlertBanner/index.stories.d.ts +30 -0
  43. package/dist/stories/elements/AlertBanner/index.stories.d.ts.map +1 -0
  44. package/dist/stories/elements/Button/Gallery.stories.d.ts +10 -0
  45. package/dist/stories/elements/Button/Gallery.stories.d.ts.map +1 -0
  46. package/dist/stories/elements/Button/index.stories.d.ts +9 -0
  47. package/dist/stories/elements/Button/index.stories.d.ts.map +1 -0
  48. package/dist/stories/elements/Icon/index.stories.d.ts +14 -0
  49. package/dist/stories/elements/Icon/index.stories.d.ts.map +1 -0
  50. package/dist/stories/elements/IconButton/Gallery.stories.d.ts +10 -0
  51. package/dist/stories/elements/IconButton/Gallery.stories.d.ts.map +1 -0
  52. package/dist/stories/elements/IconButton/index.stories.d.ts +9 -0
  53. package/dist/stories/elements/IconButton/index.stories.d.ts.map +1 -0
  54. package/dist/stories/elements/Modal/ConfirmationDialog.source.d.ts +3 -0
  55. package/dist/stories/elements/Modal/ConfirmationDialog.source.d.ts.map +1 -0
  56. package/dist/stories/elements/Modal/ConfirmationDialog.stories.d.ts +43 -0
  57. package/dist/stories/elements/Modal/ConfirmationDialog.stories.d.ts.map +1 -0
  58. package/dist/stories/elements/Modal/ConfirmationDialogWithTrigger.stories.d.ts +42 -0
  59. package/dist/stories/elements/Modal/ConfirmationDialogWithTrigger.stories.d.ts.map +1 -0
  60. package/dist/stories/elements/Modal/MultiStepModal.stories.d.ts +46 -0
  61. package/dist/stories/elements/Modal/MultiStepModal.stories.d.ts.map +1 -0
  62. package/dist/stories/elements/Modal/index.stories.d.ts +32 -0
  63. package/dist/stories/elements/Modal/index.stories.d.ts.map +1 -0
  64. package/dist/stories/elements/Modal/multiStepArgs.d.ts +4 -0
  65. package/dist/stories/elements/Modal/multiStepArgs.d.ts.map +1 -0
  66. package/dist/stories/elements/Modal/singleStepArgs.d.ts +4 -0
  67. package/dist/stories/elements/Modal/singleStepArgs.d.ts.map +1 -0
  68. package/dist/stories/elements/MultiSelectDropdown/index.stories.d.ts +11 -0
  69. package/dist/stories/elements/MultiSelectDropdown/index.stories.d.ts.map +1 -0
  70. package/dist/stories/elements/SelectDropdown/index.stories.d.ts +11 -0
  71. package/dist/stories/elements/SelectDropdown/index.stories.d.ts.map +1 -0
  72. package/dist/stories/elements/Table/Manual.source.d.ts +3 -0
  73. package/dist/stories/elements/Table/Manual.source.d.ts.map +1 -0
  74. package/dist/stories/elements/Table/Manual.stories.d.ts +54 -0
  75. package/dist/stories/elements/Table/Manual.stories.d.ts.map +1 -0
  76. package/dist/stories/elements/Table/ManualColumnNesting.source.d.ts +3 -0
  77. package/dist/stories/elements/Table/ManualColumnNesting.source.d.ts.map +1 -0
  78. package/dist/stories/elements/Table/ManualColumnNesting.stories.d.ts +53 -0
  79. package/dist/stories/elements/Table/ManualColumnNesting.stories.d.ts.map +1 -0
  80. package/dist/stories/elements/Table/index.stories.d.ts +46 -0
  81. package/dist/stories/elements/Table/index.stories.d.ts.map +1 -0
  82. package/dist/stories/elements/Table/simpleArgs.d.ts +4 -0
  83. package/dist/stories/elements/Table/simpleArgs.d.ts.map +1 -0
  84. package/dist/stories/elements/Typography/TypographyGallery.stories.d.ts +29 -0
  85. package/dist/stories/elements/Typography/TypographyGallery.stories.d.ts.map +1 -0
  86. package/dist/stories/elements/Typography/index.stories.d.ts +28 -0
  87. package/dist/stories/elements/Typography/index.stories.d.ts.map +1 -0
  88. package/dist/stories/helper-components/ColorRenderer/index.d.ts +15 -0
  89. package/dist/stories/helper-components/ColorRenderer/index.d.ts.map +1 -0
  90. package/dist/stories/helper-components/DocPageWithPlayground.d.ts +12 -0
  91. package/dist/stories/helper-components/DocPageWithPlayground.d.ts.map +1 -0
  92. package/dist/stories/helper-components/TokenBlock/index.d.ts +21 -0
  93. package/dist/stories/helper-components/TokenBlock/index.d.ts.map +1 -0
  94. package/dist/stories/helper-components/TokenBlock/index.styles.d.ts +4 -0
  95. package/dist/stories/helper-components/TokenBlock/index.styles.d.ts.map +1 -0
  96. package/dist/stories/utils/index.d.ts +82 -0
  97. package/dist/stories/utils/index.d.ts.map +1 -0
  98. package/dist/ui/core/colors/colorTypes.d.ts +1 -0
  99. package/dist/ui/core/colors/colorTypes.d.ts.map +1 -0
  100. package/dist/ui/core/colors/index.d.ts +1 -0
  101. package/dist/ui/core/colors/index.d.ts.map +1 -0
  102. package/dist/ui/core/icons/iconTags.d.ts +409 -0
  103. package/dist/ui/core/icons/iconTags.d.ts.map +1 -0
  104. package/dist/ui/core/icons/iconTypes.d.ts +399 -0
  105. package/dist/ui/core/icons/iconTypes.d.ts.map +1 -0
  106. package/dist/{core → ui/core}/icons/index.d.ts +1 -1
  107. package/dist/ui/core/icons/index.d.ts.map +1 -0
  108. package/dist/ui/core/index.d.ts +7 -0
  109. package/dist/ui/core/index.d.ts.map +1 -0
  110. package/dist/ui/core/miscellaneous-choices/index.d.ts.map +1 -0
  111. package/dist/ui/core/miscellaneous-choices/miscellaneousTypes.d.ts.map +1 -0
  112. package/dist/ui/core/sizes/index.d.ts.map +1 -0
  113. package/dist/ui/core/sizes/sizeTypes.d.ts +3 -0
  114. package/dist/ui/core/sizes/sizeTypes.d.ts.map +1 -0
  115. package/dist/ui/elements/Alert/Alert.d.ts +8 -0
  116. package/dist/ui/elements/Alert/Alert.d.ts.map +1 -0
  117. package/dist/ui/elements/Alert/Alert.styles.d.ts +7 -0
  118. package/dist/ui/elements/Alert/Alert.styles.d.ts.map +1 -0
  119. package/dist/ui/elements/Alert/Alert.test.d.ts +2 -0
  120. package/dist/ui/elements/Alert/Alert.test.d.ts.map +1 -0
  121. package/dist/ui/elements/Alert/constants.d.ts +140 -0
  122. package/dist/ui/elements/Alert/constants.d.ts.map +1 -0
  123. package/dist/ui/elements/Alert/index.d.ts +7 -0
  124. package/dist/ui/elements/Alert/index.d.ts.map +1 -0
  125. package/dist/ui/elements/Alert/types.d.ts +125 -0
  126. package/dist/ui/elements/Alert/types.d.ts.map +1 -0
  127. package/dist/ui/elements/Alert/utils.d.ts +1 -0
  128. package/dist/ui/elements/Alert/utils.d.ts.map +1 -0
  129. package/dist/ui/elements/AlertBanner/AlertBanner.d.ts +9 -0
  130. package/dist/ui/elements/AlertBanner/AlertBanner.d.ts.map +1 -0
  131. package/dist/ui/elements/AlertBanner/AlertBanner.styles.d.ts +4 -0
  132. package/dist/ui/elements/AlertBanner/AlertBanner.styles.d.ts.map +1 -0
  133. package/dist/ui/elements/AlertBanner/AlertBanner.test.d.ts +2 -0
  134. package/dist/ui/elements/AlertBanner/AlertBanner.test.d.ts.map +1 -0
  135. package/dist/ui/elements/AlertBanner/constants.d.ts +140 -0
  136. package/dist/ui/elements/AlertBanner/constants.d.ts.map +1 -0
  137. package/dist/ui/elements/AlertBanner/index.d.ts +7 -0
  138. package/dist/ui/elements/AlertBanner/index.d.ts.map +1 -0
  139. package/dist/ui/elements/AlertBanner/types.d.ts +111 -0
  140. package/dist/ui/elements/AlertBanner/types.d.ts.map +1 -0
  141. package/dist/ui/elements/AlertBanner/utils.d.ts +105 -0
  142. package/dist/ui/elements/AlertBanner/utils.d.ts.map +1 -0
  143. package/dist/ui/elements/Button/Button.d.ts +11 -0
  144. package/dist/ui/elements/Button/Button.d.ts.map +1 -0
  145. package/dist/ui/elements/Button/Button.styles.d.ts +4 -0
  146. package/dist/ui/elements/Button/Button.styles.d.ts.map +1 -0
  147. package/dist/ui/elements/Button/Button.test.d.ts +2 -0
  148. package/dist/ui/elements/Button/Button.test.d.ts.map +1 -0
  149. package/dist/ui/elements/Button/ButtonGroup.d.ts +11 -0
  150. package/dist/ui/elements/Button/ButtonGroup.d.ts.map +1 -0
  151. package/dist/ui/elements/Button/ButtonGroup.styles.d.ts +2 -0
  152. package/dist/ui/elements/Button/ButtonGroup.styles.d.ts.map +1 -0
  153. package/dist/ui/elements/Button/IconButton.d.ts +8 -0
  154. package/dist/ui/elements/Button/IconButton.d.ts.map +1 -0
  155. package/dist/ui/elements/Button/IconButton.test.d.ts +2 -0
  156. package/dist/ui/elements/Button/IconButton.test.d.ts.map +1 -0
  157. package/dist/ui/elements/Button/constants.d.ts +54 -0
  158. package/dist/ui/elements/Button/constants.d.ts.map +1 -0
  159. package/dist/ui/elements/Button/index.d.ts +9 -0
  160. package/dist/ui/elements/Button/index.d.ts.map +1 -0
  161. package/dist/ui/elements/Button/types.d.ts +226 -0
  162. package/dist/ui/elements/Button/types.d.ts.map +1 -0
  163. package/dist/ui/elements/Button/utils.d.ts +1 -0
  164. package/dist/ui/elements/Button/utils.d.ts.map +1 -0
  165. package/dist/ui/elements/Icon/Icon.d.ts +48 -0
  166. package/dist/ui/elements/Icon/Icon.d.ts.map +1 -0
  167. package/dist/ui/elements/Icon/Icon.styles.d.ts +5 -0
  168. package/dist/ui/elements/Icon/Icon.styles.d.ts.map +1 -0
  169. package/dist/ui/elements/Icon/index.d.ts +3 -0
  170. package/dist/ui/elements/Icon/index.d.ts.map +1 -0
  171. package/dist/ui/elements/Icon/types.d.ts +74 -0
  172. package/dist/ui/elements/Icon/types.d.ts.map +1 -0
  173. package/dist/ui/elements/Modal/ConfirmationDialog/index.d.ts +43 -0
  174. package/dist/ui/elements/Modal/ConfirmationDialog/index.d.ts.map +1 -0
  175. package/dist/ui/elements/Modal/ConfirmationDialog/index.test.d.ts +2 -0
  176. package/dist/ui/elements/Modal/ConfirmationDialog/index.test.d.ts.map +1 -0
  177. package/dist/ui/elements/Modal/Modal.d.ts +21 -0
  178. package/dist/ui/elements/Modal/Modal.d.ts.map +1 -0
  179. package/dist/ui/elements/Modal/Modal.styles.d.ts +18 -0
  180. package/dist/ui/elements/Modal/Modal.styles.d.ts.map +1 -0
  181. package/dist/ui/elements/Modal/Modal.test.d.ts +2 -0
  182. package/dist/ui/elements/Modal/Modal.test.d.ts.map +1 -0
  183. package/dist/ui/elements/Modal/MultiStepModal/index.d.ts +46 -0
  184. package/dist/ui/elements/Modal/MultiStepModal/index.d.ts.map +1 -0
  185. package/dist/ui/elements/Modal/MultiStepModal/index.test.d.ts +2 -0
  186. package/dist/ui/elements/Modal/MultiStepModal/index.test.d.ts.map +1 -0
  187. package/dist/ui/elements/Modal/constants.d.ts +1 -0
  188. package/dist/ui/elements/Modal/constants.d.ts.map +1 -0
  189. package/dist/ui/elements/Modal/index.d.ts +5 -0
  190. package/dist/ui/elements/Modal/index.d.ts.map +1 -0
  191. package/dist/ui/elements/Modal/types.d.ts +312 -0
  192. package/dist/ui/elements/Modal/types.d.ts.map +1 -0
  193. package/dist/ui/elements/Modal/utils.d.ts +1 -0
  194. package/dist/ui/elements/Modal/utils.d.ts.map +1 -0
  195. package/dist/ui/elements/MultiSelectDropdown/DropdownListItem.d.ts +4 -0
  196. package/dist/ui/elements/MultiSelectDropdown/DropdownListItem.d.ts.map +1 -0
  197. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.d.ts +5 -0
  198. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.d.ts.map +1 -0
  199. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.styles.d.ts +14 -0
  200. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.styles.d.ts.map +1 -0
  201. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.test.d.ts +2 -0
  202. package/dist/ui/elements/MultiSelectDropdown/MultiSelectDropdown.test.d.ts.map +1 -0
  203. package/dist/ui/elements/MultiSelectDropdown/index.d.ts +3 -0
  204. package/dist/ui/elements/MultiSelectDropdown/index.d.ts.map +1 -0
  205. package/dist/ui/elements/MultiSelectDropdown/types.d.ts +70 -0
  206. package/dist/ui/elements/MultiSelectDropdown/types.d.ts.map +1 -0
  207. package/dist/ui/elements/SelectDropdown/SelectDropdown.d.ts +5 -0
  208. package/dist/ui/elements/SelectDropdown/SelectDropdown.d.ts.map +1 -0
  209. package/dist/ui/elements/SelectDropdown/SelectDropdown.styles.d.ts +10 -0
  210. package/dist/ui/elements/SelectDropdown/SelectDropdown.styles.d.ts.map +1 -0
  211. package/dist/ui/elements/SelectDropdown/SelectDropdown.test.d.ts +2 -0
  212. package/dist/ui/elements/SelectDropdown/SelectDropdown.test.d.ts.map +1 -0
  213. package/dist/ui/elements/SelectDropdown/index.d.ts +3 -0
  214. package/dist/ui/elements/SelectDropdown/index.d.ts.map +1 -0
  215. package/dist/ui/elements/SelectDropdown/types.d.ts +59 -0
  216. package/dist/ui/elements/SelectDropdown/types.d.ts.map +1 -0
  217. package/dist/ui/elements/Table/Table.d.ts +47 -0
  218. package/dist/ui/elements/Table/Table.d.ts.map +1 -0
  219. package/dist/ui/elements/Table/Table.styles.d.ts +8 -0
  220. package/dist/ui/elements/Table/Table.styles.d.ts.map +1 -0
  221. package/dist/ui/elements/Table/Table.test.d.ts +2 -0
  222. package/dist/ui/elements/Table/Table.test.d.ts.map +1 -0
  223. package/dist/ui/elements/Table/constants.d.ts +1 -0
  224. package/dist/ui/elements/Table/constants.d.ts.map +1 -0
  225. package/dist/ui/elements/Table/index.d.ts +3 -0
  226. package/dist/ui/elements/Table/index.d.ts.map +1 -0
  227. package/dist/ui/elements/Table/types.d.ts +223 -0
  228. package/dist/ui/elements/Table/types.d.ts.map +1 -0
  229. package/dist/ui/elements/Table/utils.d.ts +1 -0
  230. package/dist/ui/elements/Table/utils.d.ts.map +1 -0
  231. package/dist/ui/elements/Typography/Typography.d.ts +36 -0
  232. package/dist/ui/elements/Typography/Typography.d.ts.map +1 -0
  233. package/dist/ui/elements/Typography/Typography.styles.d.ts +6 -0
  234. package/dist/ui/elements/Typography/Typography.styles.d.ts.map +1 -0
  235. package/dist/ui/elements/Typography/constants.d.ts +22 -0
  236. package/dist/ui/elements/Typography/constants.d.ts.map +1 -0
  237. package/dist/ui/elements/Typography/index.d.ts +5 -0
  238. package/dist/ui/elements/Typography/index.d.ts.map +1 -0
  239. package/dist/ui/elements/Typography/types.d.ts +50 -0
  240. package/dist/ui/elements/Typography/types.d.ts.map +1 -0
  241. package/dist/ui/elements/Typography/utils.d.ts +2 -0
  242. package/dist/ui/elements/Typography/utils.d.ts.map +1 -0
  243. package/dist/ui/helpers/classNameBuilders.d.ts.map +1 -0
  244. package/dist/ui/helpers/index.d.ts +3 -0
  245. package/dist/ui/helpers/index.d.ts.map +1 -0
  246. package/dist/ui/index.d.ts +11 -0
  247. package/dist/ui/index.d.ts.map +1 -0
  248. package/dist/{init → ui/init}/GrauityInit.d.ts +15 -3
  249. package/dist/ui/init/GrauityInit.d.ts.map +1 -0
  250. package/dist/ui/init/index.d.ts.map +1 -0
  251. package/dist/ui/themes/GlobalStyle.d.ts +5 -0
  252. package/dist/ui/themes/GlobalStyle.d.ts.map +1 -0
  253. package/dist/ui/themes/ThemeContext.d.ts +24 -0
  254. package/dist/ui/themes/ThemeContext.d.ts.map +1 -0
  255. package/dist/ui/themes/constants.d.ts +6 -0
  256. package/dist/ui/themes/constants.d.ts.map +1 -0
  257. package/dist/ui/themes/darkThemeConstants.d.ts +70 -0
  258. package/dist/ui/themes/darkThemeConstants.d.ts.map +1 -0
  259. package/dist/ui/themes/lightThemeConstants.d.ts +70 -0
  260. package/dist/ui/themes/lightThemeConstants.d.ts.map +1 -0
  261. package/dist/ui/themes/tokens.d.ts +1 -0
  262. package/dist/ui/themes/tokens.d.ts.map +1 -0
  263. package/dist/ui/themes/types.d.ts +73 -0
  264. package/dist/ui/themes/types.d.ts.map +1 -0
  265. package/package.json +59 -28
  266. package/ui/core/colors/colorTypes.ts +2 -20
  267. package/ui/core/colors/index.ts +23 -23
  268. package/ui/core/icons/iconTags.ts +1063 -59
  269. package/ui/core/icons/iconTypes.ts +837 -84
  270. package/ui/core/icons/index.ts +1 -3
  271. package/ui/core/index.ts +7 -10
  272. package/ui/core/sizes/sizeTypes.ts +1 -0
  273. package/ui/css/fonts.scss +0 -8
  274. package/ui/css/index.scss +0 -8
  275. package/ui/css/reset.scss +2 -5
  276. package/ui/elements/Alert/Alert.styles.ts +66 -0
  277. package/ui/elements/Alert/Alert.test.tsx +81 -0
  278. package/ui/elements/Alert/Alert.tsx +153 -0
  279. package/ui/elements/Alert/constants.ts +169 -0
  280. package/ui/elements/Alert/index.ts +6 -0
  281. package/ui/elements/Alert/types.ts +150 -0
  282. package/ui/elements/AlertBanner/AlertBanner.styles.ts +35 -0
  283. package/ui/elements/AlertBanner/AlertBanner.test.tsx +70 -0
  284. package/ui/elements/AlertBanner/AlertBanner.tsx +137 -0
  285. package/ui/elements/AlertBanner/constants.ts +179 -0
  286. package/ui/elements/AlertBanner/index.ts +6 -0
  287. package/ui/elements/AlertBanner/types.ts +133 -0
  288. package/ui/elements/AlertBanner/utils.ts +52 -0
  289. package/ui/elements/Button/Button.styles.ts +88 -0
  290. package/ui/elements/Button/Button.test.tsx +78 -0
  291. package/ui/elements/Button/Button.tsx +134 -0
  292. package/ui/elements/Button/ButtonGroup.styles.ts +7 -0
  293. package/ui/elements/Button/ButtonGroup.tsx +21 -0
  294. package/ui/elements/Button/IconButton.test.tsx +39 -0
  295. package/ui/elements/Button/IconButton.tsx +118 -0
  296. package/ui/elements/Button/constants.ts +304 -0
  297. package/ui/elements/Button/index.ts +8 -0
  298. package/ui/elements/Button/types.ts +282 -0
  299. package/ui/elements/Button/utils.ts +0 -0
  300. package/ui/elements/Icon/Icon.styles.ts +99 -0
  301. package/ui/elements/Icon/Icon.tsx +17 -107
  302. package/ui/elements/Icon/index.ts +1 -2
  303. package/ui/elements/Icon/types.ts +96 -0
  304. package/ui/elements/Modal/ConfirmationDialog/index.test.tsx +116 -0
  305. package/ui/elements/Modal/ConfirmationDialog/index.tsx +151 -0
  306. package/ui/elements/Modal/Modal.styles.ts +230 -0
  307. package/ui/elements/Modal/Modal.test.tsx +117 -0
  308. package/ui/elements/Modal/Modal.tsx +179 -0
  309. package/ui/elements/Modal/MultiStepModal/index.test.tsx +116 -0
  310. package/ui/elements/Modal/MultiStepModal/index.tsx +184 -0
  311. package/ui/elements/Modal/constants.ts +0 -0
  312. package/ui/elements/Modal/index.ts +4 -0
  313. package/ui/elements/Modal/types.ts +379 -0
  314. package/ui/elements/Modal/utils.tsx +0 -0
  315. package/ui/elements/MultiSelectDropdown/DropdownListItem.tsx +33 -0
  316. package/ui/elements/MultiSelectDropdown/MultiSelectDropdown.styles.ts +127 -0
  317. package/ui/elements/MultiSelectDropdown/MultiSelectDropdown.test.tsx +224 -0
  318. package/ui/elements/MultiSelectDropdown/MultiSelectDropdown.tsx +156 -0
  319. package/ui/elements/MultiSelectDropdown/index.ts +2 -0
  320. package/ui/elements/MultiSelectDropdown/types.ts +87 -0
  321. package/ui/elements/SelectDropdown/SelectDropdown.styles.ts +99 -0
  322. package/ui/elements/SelectDropdown/SelectDropdown.test.tsx +86 -0
  323. package/ui/elements/SelectDropdown/SelectDropdown.tsx +94 -0
  324. package/ui/elements/SelectDropdown/index.tsx +2 -0
  325. package/ui/elements/SelectDropdown/types.ts +73 -0
  326. package/ui/elements/Table/Table.styles.ts +178 -0
  327. package/ui/elements/Table/Table.test.tsx +72 -0
  328. package/ui/elements/Table/Table.tsx +118 -0
  329. package/ui/elements/Table/constants.ts +0 -0
  330. package/ui/elements/Table/index.ts +2 -0
  331. package/ui/elements/Table/types.ts +270 -0
  332. package/ui/elements/Table/utils.ts +0 -0
  333. package/ui/elements/Typography/Typography.styles.ts +29 -0
  334. package/ui/elements/Typography/Typography.tsx +70 -0
  335. package/ui/elements/Typography/constants.ts +292 -0
  336. package/ui/elements/Typography/index.ts +9 -0
  337. package/ui/elements/Typography/types.ts +116 -0
  338. package/ui/elements/Typography/utils.ts +11 -0
  339. package/ui/fonts/grauity-icons.eot +0 -0
  340. package/ui/fonts/grauity-icons.ttf +0 -0
  341. package/ui/fonts/grauity-icons.woff +0 -0
  342. package/ui/fonts/grauity-icons.woff2 +0 -0
  343. package/ui/helpers/index.ts +1 -7
  344. package/ui/index.ts +42 -3
  345. package/ui/init/GrauityInit.tsx +30 -7
  346. package/ui/init/index.ts +0 -1
  347. package/ui/themes/GlobalStyle.ts +273 -0
  348. package/ui/themes/ThemeContext.tsx +140 -0
  349. package/ui/themes/constants.ts +8 -0
  350. package/ui/themes/darkThemeConstants.ts +73 -0
  351. package/ui/themes/lightThemeConstants.ts +73 -0
  352. package/ui/themes/tokens.ts +0 -0
  353. package/ui/themes/types.ts +77 -0
  354. package/dist/core/colors/colorTypes.d.ts +0 -3
  355. package/dist/core/colors/colorTypes.d.ts.map +0 -1
  356. package/dist/core/colors/index.d.ts +0 -14
  357. package/dist/core/colors/index.d.ts.map +0 -1
  358. package/dist/core/icons/iconTags.d.ts +0 -158
  359. package/dist/core/icons/iconTags.d.ts.map +0 -1
  360. package/dist/core/icons/iconTypes.d.ts +0 -148
  361. package/dist/core/icons/iconTypes.d.ts.map +0 -1
  362. package/dist/core/icons/index.d.ts.map +0 -1
  363. package/dist/core/index.d.ts +0 -9
  364. package/dist/core/index.d.ts.map +0 -1
  365. package/dist/core/miscellaneous-choices/index.d.ts.map +0 -1
  366. package/dist/core/miscellaneous-choices/miscellaneousTypes.d.ts.map +0 -1
  367. package/dist/core/sizes/index.d.ts.map +0 -1
  368. package/dist/core/sizes/sizeTypes.d.ts +0 -3
  369. package/dist/core/sizes/sizeTypes.d.ts.map +0 -1
  370. package/dist/elements/Icon/Icon.d.ts +0 -115
  371. package/dist/elements/Icon/Icon.d.ts.map +0 -1
  372. package/dist/elements/Icon/index.d.ts +0 -3
  373. package/dist/elements/Icon/index.d.ts.map +0 -1
  374. package/dist/elements/index.d.ts +0 -3
  375. package/dist/elements/index.d.ts.map +0 -1
  376. package/dist/helpers/classNameBuilders.d.ts.map +0 -1
  377. package/dist/helpers/getElementTypeFromProps.d.ts +0 -14
  378. package/dist/helpers/getElementTypeFromProps.d.ts.map +0 -1
  379. package/dist/helpers/index.d.ts +0 -4
  380. package/dist/helpers/index.d.ts.map +0 -1
  381. package/dist/init/GrauityInit.d.ts.map +0 -1
  382. package/dist/init/index.d.ts.map +0 -1
  383. package/ui/css/colors.scss +0 -131
  384. package/ui/css/icons.scss +0 -96
  385. package/ui/elements/index.ts +0 -2
  386. package/ui/helpers/getElementTypeFromProps.ts +0 -32
  387. /package/dist/{core → ui/core}/miscellaneous-choices/index.d.ts +0 -0
  388. /package/dist/{core → ui/core}/miscellaneous-choices/miscellaneousTypes.d.ts +0 -0
  389. /package/dist/{core → ui/core}/sizes/index.d.ts +0 -0
  390. /package/dist/{helpers → ui/helpers}/classNameBuilders.d.ts +0 -0
  391. /package/dist/{init → ui/init}/index.d.ts +0 -0
  392. /package/ui/{css/sizes.scss → elements/Alert/utils.ts} +0 -0
@@ -0,0 +1,127 @@
1
+ import styled, { css } from 'styled-components';
2
+
3
+ import Button from '../Button';
4
+ import {
5
+ StyledDropdownHeaderProps,
6
+ StyledDropdownItemTextProps,
7
+ StyledDropdownListItemProps,
8
+ StyledDropdownSearchInputProps,
9
+ StyledDropdownWrapperProps,
10
+ } from './types';
11
+
12
+ export const StyledDropdownWrapper = styled.div<StyledDropdownWrapperProps>`
13
+ font-family: Mono Sans, sans-serif;
14
+ height: 100%;
15
+ width: 100%;
16
+ position: relative;
17
+ `;
18
+
19
+ export const StyledDropdownHeader = styled.div<StyledDropdownHeaderProps>`
20
+ display: flex;
21
+ justify-content: space-between;
22
+ align-items: center;
23
+ height: 100%;
24
+ width: 100%;
25
+ padding: var(--spacing-12px, 12px);
26
+ gap: var(--spacing-8px, 8px);
27
+ background: var(--bg-primary, #ffffff);
28
+ border: 1px solid var(--border-neutral, #e1e5ea);
29
+ border-radius: var(--corner-radius-8px, 8px);
30
+ cursor: pointer;
31
+ outline: none;
32
+ `;
33
+
34
+ export const StyledDropdownHeaderTitle = styled.div`
35
+ height: 100%;
36
+ display: flex;
37
+ align-items: center;
38
+ font-weight: 600;
39
+ line-height: var(--spacing-14px, 14px);
40
+ text-align: left;
41
+ color: var(--text-brand, #0673f9);
42
+ overflow: hidden;
43
+ `;
44
+
45
+ export const StyledDropdownContainer = styled.div`
46
+ position: absolute;
47
+ top: calc(100% + var(--spacing-4px, 4px));
48
+ width: 100%;
49
+ max-height: 300px;
50
+ padding: var(--spacing-8px, 8px);
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: flex-start;
54
+ gap: var(--spacing-4px, 4px);
55
+ align-self: stretch;
56
+ border-radius: var(--corner-radius-12px, 12px);
57
+ border: var(--spacing-1px, 1px) solid var(--border-neutral, #e1e5ea);
58
+ background: var(--bg-primary, #fff);
59
+ box-shadow: var(--spacing-2px, 2px) var(--spacing-4px, 4px)
60
+ var(--spacing-8px, 8px) var(--spacing-0px, 0px) rgba(0, 0, 0, 0.06);
61
+ `;
62
+
63
+ export const StyledDropdownList = styled.div`
64
+ width: 100%;
65
+ overflow-y: auto;
66
+ `;
67
+
68
+ export const StyledDropdownListItem = styled.div<StyledDropdownListItemProps>`
69
+ width: 100%;
70
+ outline: none;
71
+ display: flex;
72
+ align-items: center;
73
+ align-self: stretch;
74
+ padding: var(--spacing-8px, 8px) var(--spacing-4px, 4px);
75
+ gap: var(--spacing-8px, 8px);
76
+ cursor: pointer;
77
+
78
+ &:hover {
79
+ background: var(--bg-secondary, #f6f7f9);
80
+ }
81
+ `;
82
+
83
+ export const StyledDropdownItemCheckbox = styled.div`
84
+ display: flex;
85
+ align-items: center;
86
+ justify-content: center;
87
+ `;
88
+
89
+ export const StyledDropdownItemText = styled.div<StyledDropdownItemTextProps>`
90
+ color: var(--text-primary, #16191d);
91
+ font-size: var(--spacing-14px, 14px);
92
+ font-weight: 500;
93
+
94
+ ${({ $selected }) =>
95
+ $selected &&
96
+ css`
97
+ color: var(--text-brand, #0673f9);
98
+ `}
99
+ `;
100
+
101
+ export const StyledDropdownSearchContainer = styled.div`
102
+ width: 100%;
103
+ height: var(--spacing-36px, 36px);
104
+ padding: var(--spacing-12px, 12px);
105
+ display: flex;
106
+ align-items: center;
107
+ align-self: stretch;
108
+ gap: var(--spacing-8px, 8px);
109
+ border-radius: var(--corner-radius-8px, 8px);
110
+ border: var(--spacing-1px, 1px) solid var(--border-neutral, #e1e5ea);
111
+ background: var(--bg-primary, #ffffff);
112
+ `;
113
+
114
+ export const StyledDropdownSearchInput = styled.input<StyledDropdownSearchInputProps>`
115
+ outline: none;
116
+ border: none;
117
+ background: var(--bg-primary, #ffffff);
118
+ color: var(--text-primary, #16191d);
119
+ font-size: var(--spacing-14px, 14px);
120
+ font-style: normal;
121
+ font-weight: 500;
122
+ `;
123
+
124
+ export const StyledApplyButton = styled(Button)`
125
+ width: 100%;
126
+ outline: none;
127
+ `;
@@ -0,0 +1,224 @@
1
+ import '@testing-library/jest-dom';
2
+
3
+ import { fireEvent, render, screen } from '@testing-library/react';
4
+ import React from 'react';
5
+
6
+ import MultiSelectDropdown from './MultiSelectDropdown';
7
+ import { DropdownOption } from './types';
8
+
9
+ const openDropdown = () => {
10
+ const header = screen.getByRole('button');
11
+ fireEvent.click(header);
12
+ };
13
+
14
+ describe('multi-select-dropdown', () => {
15
+ const options: Set<DropdownOption> = new Set([
16
+ { id: 1, label: 'Option 1' },
17
+ { id: 2, label: 'Option 2' },
18
+ { id: 3, label: 'Option 3' },
19
+ ]) as any as Set<DropdownOption>;
20
+
21
+ // Rendering of the component
22
+ it('renders with default props', () => {
23
+ render(<MultiSelectDropdown />);
24
+ const dropdown = screen.getByRole('combobox');
25
+ expect(dropdown).toBeInTheDocument();
26
+ });
27
+
28
+ // Dropdown Icon
29
+ it('icon is chevron-down when dropdown is closed', () => {
30
+ render(<MultiSelectDropdown />);
31
+ const icon = screen.getByTestId('testid-icon');
32
+ expect(icon).toHaveClass('grauity-icon');
33
+ expect(icon).toHaveClass('grauity-icon-chevron-down');
34
+ });
35
+ it('icon is chevron-up when dropdown is opened', () => {
36
+ render(<MultiSelectDropdown />);
37
+ openDropdown();
38
+ const icon = screen.getAllByTestId('testid-icon')[0];
39
+ expect(icon).toHaveClass('grauity-icon');
40
+ expect(icon).toHaveClass('grauity-icon-chevron-up');
41
+ });
42
+
43
+ // Search Box
44
+ it('shows search input when shouldEnableSearch is true', () => {
45
+ render(<MultiSelectDropdown shouldEnableSearch />);
46
+ openDropdown();
47
+ const searchInput = screen.getByRole('searchbox');
48
+ expect(searchInput).toBeInTheDocument();
49
+ });
50
+ it('does not show search input when shouldEnableSearch is false', () => {
51
+ render(<MultiSelectDropdown shouldEnableSearch={false} />);
52
+ openDropdown();
53
+ const searchInput = screen.queryByRole('searchbox');
54
+ expect(searchInput).not.toBeInTheDocument();
55
+ });
56
+ it('renders search box with placeholder text', () => {
57
+ render(
58
+ <MultiSelectDropdown
59
+ shouldEnableSearch
60
+ searchPlaceholder="Search..."
61
+ />
62
+ );
63
+ openDropdown();
64
+ const searchInput = screen.getByRole('searchbox');
65
+ expect(searchInput).toHaveAttribute('placeholder', 'Search...');
66
+ });
67
+
68
+ // Render Options
69
+ it('renders options correctly', () => {
70
+ render(<MultiSelectDropdown options={options} />);
71
+ openDropdown();
72
+ const option1 = screen.getByText('Option 1');
73
+ const option2 = screen.getByText('Option 2');
74
+ const option3 = screen.getByText('Option 3');
75
+ expect(option1).toBeInTheDocument();
76
+ expect(option2).toBeInTheDocument();
77
+ expect(option3).toBeInTheDocument();
78
+ });
79
+
80
+ // Select All Options
81
+ it('shows select all options when shouldEnableAllSelected is true', () => {
82
+ render(<MultiSelectDropdown shouldEnableAllSelected />);
83
+ openDropdown();
84
+ const allOption = screen.getByText('All');
85
+ expect(allOption).toBeInTheDocument();
86
+ });
87
+ it('does not show select all options when shouldEnableAllSelected is false', () => {
88
+ render(<MultiSelectDropdown shouldEnableAllSelected={false} />);
89
+ openDropdown();
90
+ const allOption = screen.queryByText('All');
91
+ expect(allOption).not.toBeInTheDocument();
92
+ });
93
+ it('renders all option text correctly', () => {
94
+ render(
95
+ <MultiSelectDropdown
96
+ shouldEnableAllSelected
97
+ allOptionText="Select all"
98
+ />
99
+ );
100
+ openDropdown();
101
+ const allOption = screen.getByText('Select all');
102
+ expect(allOption).toBeInTheDocument();
103
+ });
104
+
105
+ // No Option Selected
106
+ it('renders no option selected text correctly', () => {
107
+ render(<MultiSelectDropdown noOptionSelctedText="Select option" />);
108
+ const header = screen.getByRole('button');
109
+ expect(header).toHaveTextContent('Select option');
110
+ });
111
+
112
+ // Apply Button
113
+ it('calls onOptionsChange when apply button is clicked', () => {
114
+ const onOptionsChange = jest.fn();
115
+ render(
116
+ <MultiSelectDropdown
117
+ options={options}
118
+ onOptionsChange={onOptionsChange}
119
+ />
120
+ );
121
+ openDropdown();
122
+ const applyButton = screen.getByText('Apply');
123
+ fireEvent.click(applyButton);
124
+ expect(onOptionsChange).toHaveBeenCalledTimes(1);
125
+ });
126
+ it('closes dropdown when apply button is clicked', () => {
127
+ render(<MultiSelectDropdown options={options} />);
128
+ openDropdown();
129
+ const applyButton = screen.getByText('Apply');
130
+ fireEvent.click(applyButton);
131
+ const dropdown = screen.queryByRole('combobox');
132
+ expect(dropdown.children).toHaveLength(1);
133
+ });
134
+
135
+ // Select Options
136
+ it('calls onOptionsChange with selected options when apply button is clicked', () => {
137
+ const onOptionsChange = jest.fn();
138
+ render(
139
+ <MultiSelectDropdown
140
+ options={options}
141
+ onOptionsChange={onOptionsChange}
142
+ />
143
+ );
144
+ openDropdown();
145
+ const option1 = screen.getByText('Option 1');
146
+ const option3 = screen.getByText('Option 3');
147
+ fireEvent.click(option1);
148
+ fireEvent.click(option3);
149
+ const applyButton = screen.getByText('Apply');
150
+ fireEvent.click(applyButton);
151
+ expect(onOptionsChange).toHaveBeenCalledWith(
152
+ new Set([
153
+ { id: 1, label: 'Option 1' },
154
+ { id: 3, label: 'Option 3' },
155
+ ])
156
+ );
157
+ });
158
+ it('calls onOptionsChange with all options when select all is clicked', () => {
159
+ const onOptionsChange = jest.fn();
160
+ render(
161
+ <MultiSelectDropdown
162
+ options={options}
163
+ onOptionsChange={onOptionsChange}
164
+ shouldEnableAllSelected
165
+ />
166
+ );
167
+ openDropdown();
168
+ const allOption = screen.getByText('All');
169
+ fireEvent.click(allOption);
170
+ const applyButton = screen.getByText('Apply');
171
+ fireEvent.click(applyButton);
172
+ expect(onOptionsChange).toHaveBeenCalledWith(options);
173
+ });
174
+
175
+ // Header Text
176
+ it('renders header text correctly', () => {
177
+ render(<MultiSelectDropdown noOptionSelctedText="Select options" />);
178
+ const header = screen.getByRole('button');
179
+ expect(header).toHaveTextContent('Select options');
180
+ });
181
+ it('renders header text correctly when one option is selected', () => {
182
+ render(
183
+ <MultiSelectDropdown
184
+ options={options}
185
+ noOptionSelctedText="Select options"
186
+ />
187
+ );
188
+ openDropdown();
189
+ const option1 = screen.getByText('Option 2');
190
+ fireEvent.click(option1);
191
+ const header = screen.getAllByRole('button')[0];
192
+ expect(header).toHaveTextContent('Option 2');
193
+ });
194
+ it('renders header text correctly when multiple options are selected', () => {
195
+ render(
196
+ <MultiSelectDropdown
197
+ options={options}
198
+ noOptionSelctedText="Select options"
199
+ />
200
+ );
201
+ openDropdown();
202
+ const option1 = screen.getByText('Option 1');
203
+ const option2 = screen.getByText('Option 2');
204
+ fireEvent.click(option1);
205
+ fireEvent.click(option2);
206
+ const header = screen.getAllByRole('button')[0];
207
+ expect(header).toHaveTextContent('2 selected');
208
+ });
209
+ it('renders header text correctly when all options are selected', () => {
210
+ render(
211
+ <MultiSelectDropdown
212
+ options={options}
213
+ noOptionSelctedText="Select options"
214
+ shouldEnableAllSelected
215
+ allOptionText="All Selected"
216
+ />
217
+ );
218
+ openDropdown();
219
+ const allOption = screen.getByText('All Selected');
220
+ fireEvent.click(allOption);
221
+ const header = screen.getAllByRole('button')[0];
222
+ expect(header).toHaveTextContent('All Selected');
223
+ });
224
+ });
@@ -0,0 +1,156 @@
1
+ import { debounce } from 'lodash';
2
+ import React, { forwardRef, useCallback, useEffect, useState } from 'react';
3
+
4
+ import { Icon } from '../Icon';
5
+ import DropdownListItem from './DropdownListItem';
6
+ import {
7
+ StyledApplyButton,
8
+ StyledDropdownContainer,
9
+ StyledDropdownHeader,
10
+ StyledDropdownHeaderTitle,
11
+ StyledDropdownList,
12
+ StyledDropdownSearchContainer,
13
+ StyledDropdownSearchInput,
14
+ StyledDropdownWrapper,
15
+ } from './MultiSelectDropdown.styles';
16
+ import { DropdownOption, MultiSelectDropdownProps } from './types';
17
+
18
+ const MultiSelectDropdown = forwardRef<
19
+ HTMLSelectElement,
20
+ MultiSelectDropdownProps
21
+ >((props, ref) => {
22
+ const {
23
+ noOptionSelctedText = 'Select',
24
+ options = new Set([]),
25
+ shouldEnableSearch = true,
26
+ onSearchInputChange = () => {},
27
+ searchPlaceholder = 'Search',
28
+ shouldEnableAllSelected = true,
29
+ defaultAllSelected = false,
30
+ allOptionText = 'All',
31
+ onOptionsChange = () => {},
32
+ } = props;
33
+
34
+ const [isOpened, setIsOpened] = useState(false);
35
+ const [searchInput, setSearchInput] = useState('');
36
+ const [allOptionsSelected, setAllOptionsSelected] =
37
+ useState(defaultAllSelected);
38
+ const [selectedOptionsIds, setSelectedOptionsIds] = useState<
39
+ Record<string, boolean>
40
+ >({});
41
+
42
+ const clickOnOption = (option: DropdownOption) => {
43
+ const newSelectedOptionsIds = {
44
+ ...selectedOptionsIds,
45
+ [option.id]: !selectedOptionsIds[option.id],
46
+ };
47
+ setAllOptionsSelected(false);
48
+ setSelectedOptionsIds(newSelectedOptionsIds);
49
+ };
50
+
51
+ const clickOnAllOptionsSelect = () => {
52
+ const newSelectedOptionsIds = Array.from(options).reduce(
53
+ (acc: Record<string, boolean>, option) => {
54
+ acc[option.id] = !allOptionsSelected;
55
+ return acc;
56
+ },
57
+ {}
58
+ );
59
+ setAllOptionsSelected(!allOptionsSelected);
60
+ setSelectedOptionsIds(newSelectedOptionsIds);
61
+ };
62
+
63
+ const handleApply = () => {
64
+ const selectedOptions = new Set(
65
+ Array.from(options).filter(
66
+ (option) => selectedOptionsIds[option.id]
67
+ )
68
+ );
69
+ onOptionsChange(selectedOptions);
70
+ setIsOpened(false);
71
+ };
72
+
73
+ const debouncedSearchCallback = useCallback(
74
+ debounce((value: string) => {
75
+ onSearchInputChange(value);
76
+ }, 500),
77
+ []
78
+ );
79
+
80
+ const getHeaderTitle = (): string => {
81
+ if (allOptionsSelected) {
82
+ return allOptionText;
83
+ }
84
+ const selectedOptions = Array.from(options)
85
+ .filter((option) => selectedOptionsIds[option.id])
86
+ .map((option) => option.label);
87
+ if (selectedOptions.length === 0) {
88
+ return noOptionSelctedText;
89
+ }
90
+ if (selectedOptions.length === 1) {
91
+ return selectedOptions[0];
92
+ }
93
+ return `${selectedOptions.length} selected`;
94
+ };
95
+
96
+ useEffect(() => {
97
+ setAllOptionsSelected(defaultAllSelected);
98
+ }, [defaultAllSelected]);
99
+
100
+ return (
101
+ <StyledDropdownWrapper ref={ref} role="combobox">
102
+ <StyledDropdownHeader
103
+ role="button"
104
+ onClick={() => setIsOpened(!isOpened)}
105
+ >
106
+ <StyledDropdownHeaderTitle>
107
+ {getHeaderTitle()}
108
+ </StyledDropdownHeaderTitle>
109
+ <Icon name={isOpened ? 'chevron-up' : 'chevron-down'} />
110
+ </StyledDropdownHeader>
111
+ {isOpened && (
112
+ <StyledDropdownContainer>
113
+ {shouldEnableSearch && (
114
+ <StyledDropdownSearchContainer>
115
+ <Icon name="search" />
116
+ <StyledDropdownSearchInput
117
+ role="searchbox"
118
+ placeholder={searchPlaceholder}
119
+ value={searchInput}
120
+ onChange={(e) => {
121
+ debouncedSearchCallback(e.target.value);
122
+ setSearchInput(e.target.value);
123
+ }}
124
+ />
125
+ </StyledDropdownSearchContainer>
126
+ )}
127
+ <StyledDropdownList>
128
+ {shouldEnableAllSelected && (
129
+ <DropdownListItem
130
+ displayText={allOptionText}
131
+ onClickFn={clickOnAllOptionsSelect}
132
+ isSelected={allOptionsSelected}
133
+ />
134
+ )}
135
+ {Array.from(options || []).map((option) => (
136
+ <DropdownListItem
137
+ key={option.id}
138
+ displayText={option.label}
139
+ onClickFn={() => clickOnOption(option)}
140
+ isSelected={
141
+ allOptionsSelected ||
142
+ selectedOptionsIds[option.id]
143
+ }
144
+ />
145
+ ))}
146
+ </StyledDropdownList>
147
+ <StyledApplyButton onClick={handleApply}>
148
+ Apply
149
+ </StyledApplyButton>
150
+ </StyledDropdownContainer>
151
+ )}
152
+ </StyledDropdownWrapper>
153
+ );
154
+ });
155
+
156
+ export default MultiSelectDropdown;
@@ -0,0 +1,2 @@
1
+ export { default } from './MultiSelectDropdown';
2
+ export type { MultiSelectDropdownProps } from './types';
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+
3
+ export interface DropdownOption {
4
+ id: string;
5
+ label: string;
6
+ }
7
+
8
+ export interface MultiSelectDropdownProps {
9
+ /**
10
+ * Text to display when no option is selected.
11
+ * @default Select
12
+ */
13
+ noOptionSelctedText?: string;
14
+
15
+ /**
16
+ * Set of options available for selection.
17
+ * @default new Set([])
18
+ */
19
+ options?: Set<DropdownOption>;
20
+
21
+ /**
22
+ * Flag to enable or disable the search functionality.
23
+ * @default true
24
+ */
25
+ shouldEnableSearch?: boolean;
26
+
27
+ /**
28
+ * Callback function triggered when the search input value changes.
29
+ * @param value - The current value of the search input.
30
+ */
31
+ onSearchInputChange?: (value: string) => void;
32
+
33
+ /**
34
+ * Placeholder text for the search input field.
35
+ * @default Search
36
+ */
37
+ searchPlaceholder?: string;
38
+
39
+ /**
40
+ * Flag to enable or disable the "Select All" functionality.
41
+ * @default true
42
+ */
43
+ shouldEnableAllSelected?: boolean;
44
+
45
+ /**
46
+ * Flag to set all options as selected by default.
47
+ * @default false
48
+ */
49
+ defaultAllSelected?: boolean;
50
+
51
+ /**
52
+ * Text to display for the "Select All" option.
53
+ * @default All
54
+ */
55
+ allOptionText?: string;
56
+
57
+ /**
58
+ * Callback function triggered when the selected options change.
59
+ * @param options - The current set of selected options.
60
+ */
61
+ onOptionsChange?: (options: Set<DropdownOption>) => void;
62
+ }
63
+
64
+ export interface DropdownListItemProps {
65
+ displayText: string;
66
+ onClickFn: () => void;
67
+ isSelected?: boolean;
68
+ }
69
+
70
+ export interface StyledDropdownWrapperProps
71
+ extends React.SelectHTMLAttributes<HTMLSelectElement> {
72
+ ref?: React.Ref<HTMLSelectElement>;
73
+ }
74
+
75
+ export interface StyledDropdownHeaderProps
76
+ extends React.ButtonHTMLAttributes<HTMLButtonElement> {}
77
+
78
+ export interface StyledDropdownListItemProps
79
+ extends React.ButtonHTMLAttributes<HTMLButtonElement> {}
80
+
81
+ export interface StyledDropdownSearchInputProps
82
+ extends React.InputHTMLAttributes<HTMLInputElement> {}
83
+
84
+ export interface StyledDropdownItemTextProps
85
+ extends React.HTMLAttributes<HTMLDivElement> {
86
+ $selected?: boolean;
87
+ }
@@ -0,0 +1,99 @@
1
+ import styled, { css } from 'styled-components';
2
+
3
+ import Button from '../Button';
4
+ import {
5
+ StyledDivProps,
6
+ StyledDropdownSearchInputProps,
7
+ StyledSelectDropdownItemProps,
8
+ StyledSelectDropdownWrapperProps,
9
+ } from './types';
10
+
11
+ export const StyledSelectDropdownWrapper = styled.div<StyledSelectDropdownWrapperProps>`
12
+ width: 100%;
13
+ height: 100%;
14
+ position: relative;
15
+ `;
16
+
17
+ export const StyledSelectDropdownButton = styled(Button)`
18
+ height: 100%;
19
+ min-height: 0;
20
+ `;
21
+
22
+ export const StyledSelectDropdownContainer = styled.div<StyledDivProps>`
23
+ position: absolute;
24
+ top: calc(100% + var(--spacing-4px, 4px));
25
+ left: 0;
26
+ width: max-content;
27
+ min-width: 100%;
28
+ max-width: 300px;
29
+ max-height: 300px;
30
+ overflow: hidden;
31
+ padding: var(--spacing-8px, 8px);
32
+ font-family: var(--font-family, 'Mono Sans');
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: flex-start;
36
+ gap: var(--spacing-4px, 4px);
37
+ border-radius: var(--spacing-12px, 12px);
38
+ border: var(--spacing-1px, 1px) solid var(--border, #e1e5ea);
39
+ background: var(--bg-primary, #fff);
40
+ box-shadow: var(--spacing-2px, 2px) var(--spacing-4px, 4px)
41
+ var(--spacing-8px, 8px) var(--spacing-0px, 0px) rgba(0, 0, 0, 0.06);
42
+ `;
43
+
44
+ export const StyledSelectDropdownList = styled.div`
45
+ width: 100%;
46
+ overflow: auto;
47
+ `;
48
+
49
+ export const StyledSelectDropdownItem = styled.div<StyledSelectDropdownItemProps>`
50
+ width: 100%;
51
+ display: flex;
52
+ align-items: center;
53
+ align-self: stretch;
54
+ gap: var(--spacing-8px, 8px);
55
+ padding: var(--spacing-8px, 8px) var(--spacing-4px, 4px);
56
+ border-radius: var(--spacing-4px, 4px);
57
+ color: var(--text-secondary, #5b6271);
58
+ font-size: var(--spacing-14px, 14px);
59
+ font-style: normal;
60
+ font-weight: 500;
61
+ cursor: pointer;
62
+
63
+ &:hover {
64
+ background: var(--bg-secondary, #f6f7f9);
65
+ }
66
+
67
+ ${({ $disabled }) =>
68
+ $disabled &&
69
+ css`
70
+ color: var(--text-disabled, #8c95a6);
71
+ cursor: default;
72
+ &:hover {
73
+ background: var(--bg-primary, #fff);
74
+ }
75
+ `}
76
+ `;
77
+
78
+ export const StyledDropdownSearchContainer = styled.div`
79
+ width: 100%;
80
+ height: var(--spacing-36px, 36px);
81
+ padding: var(--spacing-12px, 12px);
82
+ display: flex;
83
+ align-items: center;
84
+ align-self: stretch;
85
+ gap: var(--spacing-8px, 8px);
86
+ border-radius: var(--corner-radius-8px, 8px);
87
+ border: var(--spacing-1px, 1px) solid var(--border-neutral, #e1e5ea);
88
+ background: var(--bg-primary, #ffffff);
89
+ `;
90
+
91
+ export const StyledDropdownSearchInput = styled.input<StyledDropdownSearchInputProps>`
92
+ outline: none;
93
+ border: none;
94
+ background: var(--bg-primary, #ffffff);
95
+ color: var(--text-primary, #16191d);
96
+ font-size: var(--spacing-14px, 14px);
97
+ font-style: normal;
98
+ font-weight: 500;
99
+ `;