@onewelcome/react-lib-components 6.0.0 → 6.2.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 (346) hide show
  1. package/dist/cjs/.scope.d.ts +2 -0
  2. package/dist/cjs/Button/Button.module.cjs.js +1 -1
  3. package/dist/cjs/Button/IconButton.module.cjs.js +1 -1
  4. package/dist/cjs/ContextMenu/ContextMenu.cjs.js +1 -1
  5. package/dist/cjs/ContextMenu/ContextMenu.cjs.js.map +1 -1
  6. package/dist/cjs/ContextMenu/ContextMenuItem.module.cjs.js +1 -1
  7. package/dist/cjs/ContextMenu/ContextMenuService.cjs.js +1 -1
  8. package/dist/cjs/ContextMenu/ContextMenuService.cjs.js.map +1 -1
  9. package/dist/cjs/DataGrid/DataGridActions/DataGridColumnsToggle.module.cjs.js +1 -1
  10. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  11. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
  12. package/dist/cjs/Form/Input/Input.module.cjs.js +1 -1
  13. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js +2 -0
  14. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js.map +1 -0
  15. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +2 -0
  16. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -0
  17. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js +2 -0
  18. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js.map +1 -0
  19. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js +2 -0
  20. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js.map +1 -0
  21. package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js +2 -0
  22. package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js.map +1 -0
  23. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js +2 -0
  24. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js.map +1 -0
  25. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js +2 -0
  26. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js.map +1 -0
  27. package/dist/cjs/Form/Select/SelectService.cjs.js +1 -1
  28. package/dist/cjs/Form/Select/SelectService.cjs.js.map +1 -1
  29. package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js +2 -0
  30. package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js.map +1 -0
  31. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +2 -0
  32. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -0
  33. package/dist/cjs/Form/Select/SingleSelect/Select.module.cjs.js +2 -0
  34. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js +2 -0
  35. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js.map +1 -0
  36. package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js +2 -0
  37. package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js.map +1 -0
  38. package/dist/cjs/Form/Select/useSearch.cjs.js +2 -0
  39. package/dist/cjs/Form/Select/useSearch.cjs.js.map +1 -0
  40. package/dist/cjs/Form/Textarea/Textarea.module.cjs.js +1 -1
  41. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.cjs.js +1 -1
  42. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  43. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  44. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.module.cjs.js +1 -1
  45. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.cjs.js +1 -1
  46. package/dist/cjs/Icon/Icon.cjs.js +1 -1
  47. package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
  48. package/dist/cjs/Icon/Icon.module.cjs.js +1 -1
  49. package/dist/cjs/Link/Link.module.cjs.js +1 -1
  50. package/dist/cjs/Notifications/BaseModal/BaseModal.module.cjs.js +1 -1
  51. package/dist/cjs/Notifications/SlideInModal/SlideInModal.module.cjs.js +1 -1
  52. package/dist/cjs/Notifications/Snackbar/SnackbarItem/SnackbarItem.module.cjs.js +1 -1
  53. package/dist/cjs/Pagination/Pagination.cjs.js +1 -1
  54. package/dist/cjs/Pagination/Pagination.cjs.js.map +1 -1
  55. package/dist/cjs/Popover/Popover.cjs.js +1 -1
  56. package/dist/cjs/Popover/Popover.cjs.js.map +1 -1
  57. package/dist/cjs/Popover/Popover.module.cjs.js +1 -1
  58. package/dist/cjs/Stepper/Step.cjs.js +1 -1
  59. package/dist/cjs/Stepper/Step.cjs.js.map +1 -1
  60. package/dist/cjs/Stepper/Step.module.cjs.js +1 -1
  61. package/dist/cjs/Stepper/Stepper.cjs.js +1 -1
  62. package/dist/cjs/Stepper/Stepper.cjs.js.map +1 -1
  63. package/dist/cjs/Tabs/TabButton.module.cjs.js +1 -1
  64. package/dist/cjs/Tag/RemoveButton.cjs.js +2 -0
  65. package/dist/cjs/Tag/RemoveButton.cjs.js.map +1 -0
  66. package/dist/cjs/Tag/RemoveButton.module.cjs.js +2 -0
  67. package/dist/cjs/Tag/RemoveButton.module.cjs.js.map +1 -0
  68. package/dist/cjs/Tag/Tag.cjs.js +1 -1
  69. package/dist/cjs/Tag/Tag.cjs.js.map +1 -1
  70. package/dist/cjs/Tag/Tag.module.cjs.js +1 -1
  71. package/dist/cjs/TextEllipsis/TextEllipsis.module.cjs.js +1 -1
  72. package/dist/cjs/Tiles/Tile.module.cjs.js +1 -1
  73. package/dist/cjs/Tooltip/Tooltip.module.cjs.js +1 -1
  74. package/dist/cjs/Wizard/BaseWizardSteps/BaseWizardSteps.module.cjs.js +1 -1
  75. package/dist/cjs/src/components/ContextMenu/ContextMenu.d.ts +1 -1
  76. package/dist/cjs/src/components/ContextMenu/ContextMenuService.d.ts +4 -1
  77. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
  78. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
  79. package/dist/cjs/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
  80. package/dist/cjs/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
  81. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +47 -1
  82. package/dist/cjs/src/components/Form/Select/SelectService.d.ts +8 -3
  83. package/dist/cjs/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +1 -0
  84. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
  85. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.test.d.ts +63 -0
  86. package/dist/cjs/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
  87. package/dist/cjs/src/components/Form/Select/useSearch.d.ts +29 -0
  88. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
  89. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
  90. package/dist/cjs/src/components/Icon/Icon.d.ts +1 -0
  91. package/dist/cjs/src/components/Stepper/Stepper.d.ts +0 -1
  92. package/dist/cjs/src/components/Tag/RemoveButton.d.ts +7 -0
  93. package/dist/cjs/src/components/Tag/Tag.d.ts +3 -0
  94. package/dist/cjs/src/hooks/usePosition.cjs.js.map +1 -1
  95. package/dist/cjs/src/hooks/usePosition.d.ts +1 -1
  96. package/dist/cjs/src/index.cjs.js +1 -1
  97. package/dist/cjs/src/index.d.ts +7 -4
  98. package/dist/esm/.scope.d.ts +2 -0
  99. package/dist/esm/Button/Button.module.esm.js +1 -1
  100. package/dist/esm/Button/IconButton.module.esm.js +1 -1
  101. package/dist/esm/ContextMenu/ContextMenu.esm.js +1 -1
  102. package/dist/esm/ContextMenu/ContextMenu.esm.js.map +1 -1
  103. package/dist/esm/ContextMenu/ContextMenuItem.module.esm.js +1 -1
  104. package/dist/esm/ContextMenu/ContextMenuService.esm.js +1 -1
  105. package/dist/esm/ContextMenu/ContextMenuService.esm.js.map +1 -1
  106. package/dist/esm/DataGrid/DataGridActions/DataGridColumnsToggle.module.esm.js +1 -1
  107. package/dist/esm/Form/Fieldset/Fieldset.esm.js +1 -1
  108. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  109. package/dist/esm/Form/Input/Input.module.esm.js +1 -1
  110. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js +2 -0
  111. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js.map +1 -0
  112. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +2 -0
  113. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -0
  114. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js +2 -0
  115. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js.map +1 -0
  116. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js +2 -0
  117. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js.map +1 -0
  118. package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js +2 -0
  119. package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js.map +1 -0
  120. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js +2 -0
  121. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js.map +1 -0
  122. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js +2 -0
  123. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js.map +1 -0
  124. package/dist/esm/Form/Select/SelectService.esm.js +1 -1
  125. package/dist/esm/Form/Select/SelectService.esm.js.map +1 -1
  126. package/dist/esm/Form/Select/SingleSelect/Option.esm.js +2 -0
  127. package/dist/esm/Form/Select/SingleSelect/Option.esm.js.map +1 -0
  128. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +2 -0
  129. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -0
  130. package/dist/esm/Form/Select/SingleSelect/Select.module.esm.js +2 -0
  131. package/dist/esm/Form/Select/useAddNewBtn.esm.js +2 -0
  132. package/dist/esm/Form/Select/useAddNewBtn.esm.js.map +1 -0
  133. package/dist/esm/Form/Select/useAddNewBtn.module.esm.js +2 -0
  134. package/dist/esm/Form/Select/useAddNewBtn.module.esm.js.map +1 -0
  135. package/dist/esm/Form/Select/useSearch.esm.js +2 -0
  136. package/dist/esm/Form/Select/useSearch.esm.js.map +1 -0
  137. package/dist/esm/Form/Textarea/Textarea.module.esm.js +1 -1
  138. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.esm.js +1 -1
  139. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +1 -1
  140. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  141. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.module.esm.js +1 -1
  142. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.esm.js +1 -1
  143. package/dist/esm/Icon/Icon.esm.js +1 -1
  144. package/dist/esm/Icon/Icon.esm.js.map +1 -1
  145. package/dist/esm/Icon/Icon.module.esm.js +1 -1
  146. package/dist/esm/Link/Link.module.esm.js +1 -1
  147. package/dist/esm/Notifications/BaseModal/BaseModal.module.esm.js +1 -1
  148. package/dist/esm/Notifications/SlideInModal/SlideInModal.module.esm.js +1 -1
  149. package/dist/esm/Notifications/Snackbar/SnackbarItem/SnackbarItem.module.esm.js +1 -1
  150. package/dist/esm/Pagination/Pagination.esm.js +1 -1
  151. package/dist/esm/Pagination/Pagination.esm.js.map +1 -1
  152. package/dist/esm/Popover/Popover.esm.js +1 -1
  153. package/dist/esm/Popover/Popover.esm.js.map +1 -1
  154. package/dist/esm/Popover/Popover.module.esm.js +1 -1
  155. package/dist/esm/Stepper/Step.esm.js +1 -1
  156. package/dist/esm/Stepper/Step.esm.js.map +1 -1
  157. package/dist/esm/Stepper/Step.module.esm.js +1 -1
  158. package/dist/esm/Stepper/Stepper.esm.js +1 -1
  159. package/dist/esm/Stepper/Stepper.esm.js.map +1 -1
  160. package/dist/esm/Tabs/TabButton.module.esm.js +1 -1
  161. package/dist/esm/Tag/RemoveButton.esm.js +2 -0
  162. package/dist/esm/Tag/RemoveButton.esm.js.map +1 -0
  163. package/dist/esm/Tag/RemoveButton.module.esm.js +2 -0
  164. package/dist/esm/Tag/RemoveButton.module.esm.js.map +1 -0
  165. package/dist/esm/Tag/Tag.esm.js +1 -1
  166. package/dist/esm/Tag/Tag.esm.js.map +1 -1
  167. package/dist/esm/Tag/Tag.module.esm.js +1 -1
  168. package/dist/esm/TextEllipsis/TextEllipsis.module.esm.js +1 -1
  169. package/dist/esm/Tiles/Tile.module.esm.js +1 -1
  170. package/dist/esm/Tooltip/Tooltip.module.esm.js +1 -1
  171. package/dist/esm/Wizard/BaseWizardSteps/BaseWizardSteps.module.esm.js +1 -1
  172. package/dist/esm/src/components/ContextMenu/ContextMenu.d.ts +1 -1
  173. package/dist/esm/src/components/ContextMenu/ContextMenuService.d.ts +4 -1
  174. package/dist/esm/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
  175. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
  176. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.test.d.ts +1 -0
  177. package/dist/esm/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
  178. package/dist/esm/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
  179. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +47 -1
  180. package/dist/esm/src/components/Form/Select/SelectService.d.ts +8 -3
  181. package/dist/esm/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +1 -0
  182. package/dist/esm/src/components/Form/Select/SingleSelect/Option.test.d.ts +1 -0
  183. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
  184. package/dist/esm/src/components/Form/Select/SingleSelect/Select.test.d.ts +63 -0
  185. package/dist/esm/src/components/Form/Select/SingleSelect/SelectKeyboardNavigation.test.d.ts +1 -0
  186. package/dist/esm/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
  187. package/dist/esm/src/components/Form/Select/useSearch.d.ts +29 -0
  188. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
  189. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts +1 -0
  190. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
  191. package/dist/esm/src/components/Icon/Icon.d.ts +1 -0
  192. package/dist/esm/src/components/Stepper/Stepper.d.ts +0 -1
  193. package/dist/esm/src/components/Tag/RemoveButton.d.ts +7 -0
  194. package/dist/esm/src/components/Tag/Tag.d.ts +3 -0
  195. package/dist/esm/src/hooks/usePosition.d.ts +1 -1
  196. package/dist/esm/src/hooks/usePosition.esm.js.map +1 -1
  197. package/dist/esm/src/index.d.ts +7 -4
  198. package/dist/esm/src/index.esm.js +1 -1
  199. package/package.json +49 -46
  200. package/src/components/ContextMenu/ContextMenu.tsx +13 -23
  201. package/src/components/ContextMenu/ContextMenuService.ts +47 -1
  202. package/src/components/Form/Fieldset/Fieldset.tsx +3 -1
  203. package/src/{hooks/useWrapper.test.ts → components/Form/Select/MultiSelect/MultiOption.tsx} +13 -10
  204. package/src/components/Form/Select/{Select.module.scss → MultiSelect/MultiSelect.module.scss} +19 -20
  205. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +363 -0
  206. package/src/components/Form/Select/MultiSelect/SelectButton.module.scss +27 -0
  207. package/src/components/Form/Select/MultiSelect/SelectButton.tsx +37 -0
  208. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +31 -0
  209. package/src/components/Form/Select/MultiSelect/SelectedOptions.tsx +67 -0
  210. package/src/components/Form/Select/Select.interfaces.ts +51 -1
  211. package/src/components/Form/Select/SelectService.ts +46 -13
  212. package/src/components/Form/Select/{Option.tsx → SingleSelect/Option.tsx} +3 -1
  213. package/src/components/Form/Select/SingleSelect/Select.module.scss +232 -0
  214. package/src/components/Form/Select/{Select.tsx → SingleSelect/Select.tsx} +56 -87
  215. package/src/components/Form/Select/useAddNewBtn.module.scss +51 -0
  216. package/src/components/Form/Select/useAddNewBtn.tsx +54 -0
  217. package/src/components/Form/Select/useSearch.tsx +124 -0
  218. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +0 -10
  219. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.module.scss +27 -0
  220. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +84 -0
  221. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.module.scss +0 -4
  222. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +3 -2
  223. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +0 -6
  224. package/src/components/Icon/Icon.module.scss +5 -0
  225. package/src/components/Icon/Icon.tsx +1 -0
  226. package/src/components/Link/Link.module.scss +16 -0
  227. package/src/components/Pagination/Pagination.tsx +2 -2
  228. package/src/components/Popover/Popover.tsx +19 -2
  229. package/src/components/Stepper/Step.tsx +2 -1
  230. package/src/components/Stepper/Stepper.tsx +0 -2
  231. package/src/{hooks/useScroll.test.tsx → components/Tag/RemoveButton.module.scss} +22 -17
  232. package/src/components/Tag/RemoveButton.tsx +52 -0
  233. package/src/components/Tag/Tag.module.scss +23 -2
  234. package/src/components/Tag/Tag.tsx +21 -11
  235. package/src/components/Tooltip/Tooltip.module.scss +1 -0
  236. package/src/font/icomoon.eot +0 -0
  237. package/src/font/icomoon.svg +1 -0
  238. package/src/font/icomoon.ttf +0 -0
  239. package/src/font/icomoon.woff +0 -0
  240. package/src/font/selection.json +1 -1
  241. package/src/hooks/usePosition.ts +1 -1
  242. package/src/index.ts +11 -4
  243. package/src/interfaces.ts +2 -2
  244. package/src/mixins.module.scss +2 -4
  245. package/dist/cjs/Form/Select/Option.cjs.js +0 -2
  246. package/dist/cjs/Form/Select/Option.cjs.js.map +0 -1
  247. package/dist/cjs/Form/Select/Select.cjs.js +0 -2
  248. package/dist/cjs/Form/Select/Select.cjs.js.map +0 -1
  249. package/dist/cjs/Form/Select/Select.module.cjs.js +0 -2
  250. package/dist/cjs/src/components/Form/Select/Select.d.ts +0 -23
  251. package/dist/esm/Form/Select/Option.esm.js +0 -2
  252. package/dist/esm/Form/Select/Option.esm.js.map +0 -1
  253. package/dist/esm/Form/Select/Select.esm.js +0 -2
  254. package/dist/esm/Form/Select/Select.esm.js.map +0 -1
  255. package/dist/esm/Form/Select/Select.module.esm.js +0 -2
  256. package/dist/esm/src/components/Form/Select/Select.d.ts +0 -23
  257. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -64
  258. package/src/components/Button/BaseButton.test.tsx +0 -133
  259. package/src/components/Button/Button.test.tsx +0 -150
  260. package/src/components/Button/IconButton.test.tsx +0 -106
  261. package/src/components/ContextMenu/ContextMenu.test.tsx +0 -358
  262. package/src/components/DataGrid/DataGrid.test.tsx +0 -437
  263. package/src/components/DataGrid/DataGridActions/DataGridActions.test.tsx +0 -204
  264. package/src/components/DataGrid/DataGridActions/DataGridColumnsToggle.test.tsx +0 -99
  265. package/src/components/DataGrid/DataGridBody/DataGridBody.test.tsx +0 -140
  266. package/src/components/DataGrid/DataGridBody/DataGridCell.test.tsx +0 -90
  267. package/src/components/DataGrid/DataGridBody/DataGridRow.test.tsx +0 -117
  268. package/src/components/DataGrid/DataGridHeader/DataGridHeader.test.tsx +0 -276
  269. package/src/components/DataGrid/DataGridHeader/DataGridHeaderCell.test.tsx +0 -144
  270. package/src/components/Form/Checkbox/Checkbox.test.tsx +0 -308
  271. package/src/components/Form/Fieldset/Fieldset.test.tsx +0 -127
  272. package/src/components/Form/FileUpload/FileItem/FileItem.test.tsx +0 -103
  273. package/src/components/Form/FileUpload/FileUpload.test.tsx +0 -374
  274. package/src/components/Form/Form.test.tsx +0 -63
  275. package/src/components/Form/FormControl/FormControl.test.tsx +0 -98
  276. package/src/components/Form/FormGroup/FormGroup.test.tsx +0 -127
  277. package/src/components/Form/FormHelperText/FormHelperText.test.tsx +0 -84
  278. package/src/components/Form/FormSelectorWrapper/FormSelectorWrapper.test.tsx +0 -94
  279. package/src/components/Form/Input/Input.test.tsx +0 -267
  280. package/src/components/Form/Label/Label.test.tsx +0 -68
  281. package/src/components/Form/Radio/Radio.test.tsx +0 -130
  282. package/src/components/Form/Select/Option.test.tsx +0 -57
  283. package/src/components/Form/Select/Select.test.tsx +0 -564
  284. package/src/components/Form/Textarea/Textarea.test.tsx +0 -124
  285. package/src/components/Form/Toggle/Toggle.test.tsx +0 -200
  286. package/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.test.tsx +0 -141
  287. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.test.tsx +0 -211
  288. package/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.test.tsx +0 -117
  289. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.test.tsx +0 -186
  290. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.test.tsx +0 -173
  291. package/src/components/Form/Wrapper/Wrapper/Wrapper.test.tsx +0 -59
  292. package/src/components/Icon/Icon.test.tsx +0 -83
  293. package/src/components/Link/Link.test.tsx +0 -203
  294. package/src/components/Notifications/Banner/Banner.test.tsx +0 -84
  295. package/src/components/Notifications/BaseModal/BaseModal.test.tsx +0 -194
  296. package/src/components/Notifications/BaseModal/BaseModalActions/BaseModalActions.test.tsx +0 -74
  297. package/src/components/Notifications/BaseModal/BaseModalContent/BaseModalContent.test.tsx +0 -71
  298. package/src/components/Notifications/BaseModal/BaseModalHeader/BaseModalHeader.test.tsx +0 -74
  299. package/src/components/Notifications/Dialog/Dialog.test.tsx +0 -118
  300. package/src/components/Notifications/Dialog/DialogActions/DialogActions.test.tsx +0 -61
  301. package/src/components/Notifications/Dialog/DialogTitle/DialogTitle.test.tsx +0 -87
  302. package/src/components/Notifications/DiscardChangesModal/DiscardChangesDialog/DiscardChangesDialog.test.tsx +0 -111
  303. package/src/components/Notifications/DiscardChangesModal/DiscardChangesModal.test.tsx +0 -175
  304. package/src/components/Notifications/Modal/Modal.test.tsx +0 -18
  305. package/src/components/Notifications/NotificationProvider/NotificationContext.test.tsx +0 -449
  306. package/src/components/Notifications/SlideInModal/SlideInModal.test.tsx +0 -90
  307. package/src/components/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.test.tsx +0 -53
  308. package/src/components/Notifications/Snackbar/SnackbarItem/SnackbarItem.test.tsx +0 -77
  309. package/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.test.tsx +0 -219
  310. package/src/components/Notifications/Snackbar/useSnackbar.test.tsx +0 -136
  311. package/src/components/Pagination/Pagination.test.tsx +0 -183
  312. package/src/components/Popover/Popover.test.tsx +0 -103
  313. package/src/components/ProgressBar/ProgressBar.test.tsx +0 -91
  314. package/src/components/Skeleton/Skeleton.test.tsx +0 -112
  315. package/src/components/StatusIndicator/StatusIndicator.test.tsx +0 -143
  316. package/src/components/Stepper/Stepper.test.tsx +0 -83
  317. package/src/components/Tabs/Tab.test.tsx +0 -49
  318. package/src/components/Tabs/TabButton.test.tsx +0 -65
  319. package/src/components/Tabs/Tabs.test.tsx +0 -291
  320. package/src/components/Tag/Tag.test.tsx +0 -89
  321. package/src/components/TextEllipsis/TextEllipsis.test.tsx +0 -96
  322. package/src/components/Tiles/Tile.test.tsx +0 -183
  323. package/src/components/Tiles/Tiles.test.tsx +0 -162
  324. package/src/components/Tooltip/Tooltip.test.tsx +0 -390
  325. package/src/components/Typography/Typography.test.tsx +0 -177
  326. package/src/components/Wizard/BaseWizardSteps/BaseWizardSteps.test.tsx +0 -90
  327. package/src/components/Wizard/Wizard.test.tsx +0 -218
  328. package/src/components/Wizard/WizardActions/WizardActions.test.tsx +0 -187
  329. package/src/components/Wizard/WizardSteps/WizardSteps.test.tsx +0 -125
  330. package/src/components/_BaseStyling_/BaseStyling.test.tsx +0 -55
  331. package/src/hooks/useAnimation.test.tsx +0 -65
  332. package/src/hooks/useBodyClick.test.tsx +0 -55
  333. package/src/hooks/useDebouncedCallback.test.ts +0 -150
  334. package/src/hooks/useDetermineStatusIcon.test.ts +0 -28
  335. package/src/hooks/useFormSelector.test.ts +0 -56
  336. package/src/hooks/usePosition.test.tsx +0 -510
  337. package/src/hooks/useRepeater.test.tsx +0 -156
  338. package/src/hooks/useSpacing.test.ts +0 -86
  339. package/src/hooks/useUploadFile.test.ts +0 -211
  340. package/src/util/helper.test.tsx +0 -403
  341. /package/dist/cjs/Form/Select/{Select.module.cjs.js.map → SingleSelect/Select.module.cjs.js.map} +0 -0
  342. /package/dist/cjs/src/components/Form/Select/{Option.test.d.ts → MultiSelect/MultiSelect.test.d.ts} +0 -0
  343. /package/dist/{esm/src/components/Form/Select → cjs/src/components/Form/Select/SingleSelect}/Option.test.d.ts +0 -0
  344. /package/dist/cjs/src/components/Form/Select/{Select.test.d.ts → SingleSelect/SelectKeyboardNavigation.test.d.ts} +0 -0
  345. /package/dist/{esm/src/components/Form/Select/Select.test.d.ts → cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts} +0 -0
  346. /package/dist/esm/Form/Select/{Select.module.esm.js.map → SingleSelect/Select.module.esm.js.map} +0 -0
@@ -38,7 +38,7 @@ export interface Position {
38
38
  bottom: PositionType;
39
39
  left: PositionType;
40
40
  }
41
- type PositionType = number | "initial";
41
+ export type PositionType = number | "initial";
42
42
  export declare const usePosition: (providedConfigObject?: ConfigObject) => {
43
43
  top: PositionType;
44
44
  bottom: PositionType;
@@ -1 +1 @@
1
- {"version":3,"file":"usePosition.esm.js","sources":["../../../../../../src/hooks/usePosition.ts"],"sourcesContent":["/*\n * Copyright 2022 OneWelcome B.V.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useState } from \"react\";\nimport { useDebouncedCallback } from \"./useDebouncedCallback\";\n\nexport interface ConfigObject {\n relativeElement: RefElement;\n elementToBePositioned: RefElement;\n transformOrigin?: Placement;\n placement?: Placement;\n offset?: Offset;\n debounceAmount?: number;\n}\n\nexport enum horizontal {\n LEFT = \"left\",\n CENTER = \"center\",\n CENTER_H = \"centerh\",\n RIGHT = \"right\"\n}\n\nexport enum vertical {\n TOP = \"top\",\n CENTER = \"center\",\n CENTER_V = \"centerv\",\n BOTTOM = \"bottom\"\n}\n\nexport type HorizontalPlacement = `${horizontal}`;\nexport type VerticalPlacement = `${vertical}`;\n\ntype Axis = \"vertical\" | \"horizontal\";\ntype RefElement = React.RefObject<HTMLOrSVGElement> | undefined;\n\ninterface DomRectObject {\n top: number;\n right: number;\n bottom: number;\n left: number;\n center: number;\n centerh: number;\n centerv: number;\n width: number;\n height: number;\n x: number;\n y: number;\n}\n\nexport interface Placement {\n horizontal: HorizontalPlacement;\n vertical: VerticalPlacement;\n}\n\nexport interface Offset {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Position {\n top: PositionType;\n right: PositionType;\n bottom: PositionType;\n left: PositionType;\n}\n\ninterface Dimensions {\n height: number;\n width: number;\n}\n\ntype PositionType = number | \"initial\";\n\nconst defaultConfigObject: ConfigObject = {\n relativeElement: undefined,\n elementToBePositioned: undefined,\n transformOrigin: {\n horizontal: \"left\",\n vertical: \"top\"\n },\n placement: {\n horizontal: \"left\",\n vertical: \"top\"\n },\n offset: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n debounceAmount: 20\n};\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain*/\nexport const usePosition = (providedConfigObject: ConfigObject = defaultConfigObject) => {\n const configObject = { ...defaultConfigObject, ...providedConfigObject };\n const [initialCalculationDone, setInitialCalculationDone] = useState(false);\n\n if (configObject.transformOrigin === undefined) {\n configObject.transformOrigin = defaultConfigObject.transformOrigin;\n }\n\n if (configObject.placement === undefined) {\n configObject.placement = defaultConfigObject.placement;\n }\n\n if (configObject.offset === undefined) {\n configObject.offset = defaultConfigObject.offset;\n }\n\n const [position, setPosition] = useState<Position>({\n left: 0,\n top: 0,\n right: \"initial\",\n bottom: \"initial\"\n });\n\n const _fixPossibleViewportOverflow = (\n value: number,\n transformOrigin: Placement,\n requestedReturnValue: Axis,\n elDimensions: Dimensions\n ) => {\n let returnValue = value;\n\n if (\n (transformOrigin[requestedReturnValue] === \"left\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"top\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"center\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"bottom\" && returnValue < 0)\n ) {\n returnValue = 0;\n }\n\n if (\n (transformOrigin[requestedReturnValue] === \"left\" &&\n returnValue > window.innerWidth - elDimensions.width) ||\n (transformOrigin[requestedReturnValue] === \"center\" &&\n requestedReturnValue === \"horizontal\" &&\n returnValue > window.innerWidth - elDimensions.width)\n ) {\n returnValue = window.innerWidth - elDimensions.width;\n }\n\n if (\n (transformOrigin[requestedReturnValue] === \"top\" &&\n returnValue > window.innerHeight - elDimensions.height) ||\n (transformOrigin[requestedReturnValue] === \"center\" &&\n requestedReturnValue === \"vertical\" &&\n returnValue > window.innerHeight - elDimensions.height)\n ) {\n returnValue = window.innerHeight - elDimensions.height;\n }\n\n if (\n transformOrigin[requestedReturnValue] === \"right\" &&\n returnValue > window.innerWidth - elDimensions.width\n ) {\n returnValue = window.innerWidth - elDimensions.width;\n }\n\n if (\n transformOrigin[requestedReturnValue] === \"bottom\" &&\n returnValue > window.innerHeight - elDimensions.height\n ) {\n returnValue = window.innerHeight - elDimensions.height;\n }\n\n return returnValue;\n };\n\n const _applyOffsetToPlacementValue = (\n value: number,\n requestedReturnValue: Axis,\n transformOrigin: Placement\n ) => {\n let returnValue = value;\n if (\n (requestedReturnValue === \"horizontal\" && configObject.offset?.left !== 0) ||\n (requestedReturnValue === \"horizontal\" && configObject.offset?.right !== 0)\n ) {\n if (\n transformOrigin[requestedReturnValue] === \"left\" ||\n transformOrigin[requestedReturnValue] === \"center\"\n ) {\n returnValue += configObject.offset?.left!;\n returnValue -= configObject.offset?.right!;\n }\n\n if (transformOrigin[requestedReturnValue] === \"right\") {\n returnValue -= configObject.offset?.left!;\n returnValue += configObject.offset?.right!;\n }\n }\n\n if (\n (requestedReturnValue === \"vertical\" && configObject.offset?.top !== 0) ||\n (requestedReturnValue === \"vertical\" && configObject.offset?.bottom !== 0)\n ) {\n if (\n transformOrigin[requestedReturnValue] === \"top\" ||\n transformOrigin[requestedReturnValue] === \"center\"\n ) {\n returnValue += configObject.offset?.top!;\n returnValue -= configObject.offset?.bottom!;\n }\n\n if (transformOrigin[requestedReturnValue] === \"bottom\") {\n returnValue -= configObject.offset?.top!;\n returnValue += configObject.offset?.bottom!;\n }\n }\n\n return returnValue;\n };\n\n const _calculateInitialPlacementValue = (\n transformOrigin: Placement,\n requestedReturnValue: Axis,\n relEl: DomRectObject,\n placementOriginDefinition: HorizontalPlacement | VerticalPlacement,\n elDimensions: Dimensions\n ) => {\n let value = 0;\n\n if (\n transformOrigin[requestedReturnValue] === \"left\" ||\n transformOrigin[requestedReturnValue] === \"top\"\n ) {\n value = relEl[placementOriginDefinition];\n } else if (transformOrigin[requestedReturnValue] === \"center\") {\n value =\n relEl[placementOriginDefinition] -\n elDimensions[requestedReturnValue === \"horizontal\" ? \"width\" : \"height\"] / 2;\n } else if (\n transformOrigin[requestedReturnValue] === \"right\" ||\n transformOrigin[requestedReturnValue] === \"bottom\"\n ) {\n value =\n window[requestedReturnValue === \"horizontal\" ? \"innerWidth\" : \"innerHeight\"] -\n relEl[placementOriginDefinition];\n }\n\n return value;\n };\n\n /**\n *\n * @param requestedReturnValue whether the requested return value is for the horizontal or vertical axis\n * @returns either the horizontally centered placement definition (centerh) or the vertically centered one (centerv)\n */\n const _determineCenteredPlacementOrigin = (requestedReturnValue: Axis) => {\n if (requestedReturnValue === \"horizontal\") {\n return \"centerh\";\n } else if (requestedReturnValue === \"vertical\") {\n return \"centerv\";\n }\n throw new Error(\n `the requested return value isn't \"vertical\" or \"horizontal\" ${requestedReturnValue} was given.`\n );\n };\n\n const _calculatePlacementValue = (\n transformOrigin: Placement,\n placement: HorizontalPlacement | VerticalPlacement,\n requestedReturnValue: Axis,\n relEl: DomRectObject,\n elDimensions: Dimensions\n ): number => {\n const placementOriginDefinition =\n placement === \"center\" ? _determineCenteredPlacementOrigin(requestedReturnValue) : placement;\n\n const value = _calculateInitialPlacementValue(\n transformOrigin,\n requestedReturnValue,\n relEl,\n placementOriginDefinition,\n elDimensions\n );\n\n const valueWithOffset = _applyOffsetToPlacementValue(\n value,\n requestedReturnValue,\n transformOrigin\n );\n\n const valueCorrectionForViewportOverflow = _fixPossibleViewportOverflow(\n valueWithOffset,\n transformOrigin,\n requestedReturnValue,\n elDimensions\n );\n\n return valueCorrectionForViewportOverflow;\n };\n\n const _calculatePlacement = (relEl: DomRectObject, elDimensions: Dimensions, axis: Axis) => {\n const placementValue = _calculatePlacementValue(\n configObject.transformOrigin!,\n configObject.placement![axis]!,\n axis,\n relEl,\n elDimensions\n );\n\n let direction = \"left\";\n let oppositeDirection = \"right\";\n\n if (axis === \"horizontal\" && configObject.transformOrigin?.horizontal === \"right\") {\n direction = \"right\";\n oppositeDirection = \"left\";\n } else if (axis === \"horizontal\") {\n direction = \"left\";\n oppositeDirection = \"right\";\n }\n\n if (axis === \"vertical\" && configObject.transformOrigin?.vertical === \"bottom\") {\n direction = \"bottom\";\n oppositeDirection = \"top\";\n } else if (axis === \"vertical\") {\n direction = \"top\";\n oppositeDirection = \"bottom\";\n }\n\n setPosition(prevState => ({\n ...prevState,\n [direction]: placementValue,\n [oppositeDirection]: \"initial\"\n }));\n };\n\n const calculatePosition = useDebouncedCallback(() => {\n if (!configObject.relativeElement?.current || !configObject.elementToBePositioned?.current)\n return;\n const relativeElRect = (configObject.relativeElement!\n .current as HTMLElement)!.getBoundingClientRect();\n const elementToBePositionedDimensions: Dimensions = {\n height: (configObject.elementToBePositioned!.current as HTMLElement).offsetHeight,\n width: (configObject.elementToBePositioned!.current as HTMLElement).offsetWidth\n };\n\n /** We want to add a center (horizontal and vertical) property to the DOMRect object. Since it's a special object we can't modify so we clone it and add it. */\n const clonedRelEl = {\n top: relativeElRect.top,\n right: relativeElRect.right,\n bottom: relativeElRect.bottom,\n center: 0,\n centerv: relativeElRect.top + relativeElRect.height / 2,\n centerh: relativeElRect.left + relativeElRect.width / 2,\n left: relativeElRect.left,\n width: relativeElRect.width,\n height: relativeElRect.height,\n x: relativeElRect.x,\n y: relativeElRect.y\n };\n\n _calculatePlacement(clonedRelEl, elementToBePositionedDimensions, \"horizontal\");\n _calculatePlacement(clonedRelEl, elementToBePositionedDimensions, \"vertical\");\n\n if (!initialCalculationDone) {\n setInitialCalculationDone(true);\n }\n }, configObject.debounceAmount ?? 20);\n\n return {\n top: position.top,\n bottom: position.bottom,\n left: position.left,\n right: position.right,\n calculatePosition,\n initialCalculationDone\n };\n};\n"],"names":["horizontal","vertical","defaultConfigObject","relativeElement","undefined","elementToBePositioned","transformOrigin","placement","offset","top","right","bottom","left","debounceAmount","usePosition","providedConfigObject","configObject","initialCalculationDone","setInitialCalculationDone","useState","position","setPosition","_fixPossibleViewportOverflow","value","requestedReturnValue","elDimensions","returnValue","window","innerWidth","width","innerHeight","height","_applyOffsetToPlacementValue","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_calculateInitialPlacementValue","relEl","placementOriginDefinition","_determineCenteredPlacementOrigin","Error","_calculatePlacementValue","valueWithOffset","valueCorrectionForViewportOverflow","_calculatePlacement","axis","placementValue","direction","oppositeDirection","prevState","calculatePosition","useDebouncedCallback","current","relativeElRect","getBoundingClientRect","elementToBePositionedDimensions","offsetHeight","offsetWidth","clonedRelEl","center","centerv","centerh","x","y"],"mappings":"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"}
1
+ {"version":3,"file":"usePosition.esm.js","sources":["../../../../../../src/hooks/usePosition.ts"],"sourcesContent":["/*\n * Copyright 2022 OneWelcome B.V.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useState } from \"react\";\nimport { useDebouncedCallback } from \"./useDebouncedCallback\";\n\nexport interface ConfigObject {\n relativeElement: RefElement;\n elementToBePositioned: RefElement;\n transformOrigin?: Placement;\n placement?: Placement;\n offset?: Offset;\n debounceAmount?: number;\n}\n\nexport enum horizontal {\n LEFT = \"left\",\n CENTER = \"center\",\n CENTER_H = \"centerh\",\n RIGHT = \"right\"\n}\n\nexport enum vertical {\n TOP = \"top\",\n CENTER = \"center\",\n CENTER_V = \"centerv\",\n BOTTOM = \"bottom\"\n}\n\nexport type HorizontalPlacement = `${horizontal}`;\nexport type VerticalPlacement = `${vertical}`;\n\ntype Axis = \"vertical\" | \"horizontal\";\ntype RefElement = React.RefObject<HTMLOrSVGElement> | undefined;\n\ninterface DomRectObject {\n top: number;\n right: number;\n bottom: number;\n left: number;\n center: number;\n centerh: number;\n centerv: number;\n width: number;\n height: number;\n x: number;\n y: number;\n}\n\nexport interface Placement {\n horizontal: HorizontalPlacement;\n vertical: VerticalPlacement;\n}\n\nexport interface Offset {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Position {\n top: PositionType;\n right: PositionType;\n bottom: PositionType;\n left: PositionType;\n}\n\ninterface Dimensions {\n height: number;\n width: number;\n}\n\nexport type PositionType = number | \"initial\";\n\nconst defaultConfigObject: ConfigObject = {\n relativeElement: undefined,\n elementToBePositioned: undefined,\n transformOrigin: {\n horizontal: \"left\",\n vertical: \"top\"\n },\n placement: {\n horizontal: \"left\",\n vertical: \"top\"\n },\n offset: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n debounceAmount: 20\n};\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain*/\nexport const usePosition = (providedConfigObject: ConfigObject = defaultConfigObject) => {\n const configObject = { ...defaultConfigObject, ...providedConfigObject };\n const [initialCalculationDone, setInitialCalculationDone] = useState(false);\n\n if (configObject.transformOrigin === undefined) {\n configObject.transformOrigin = defaultConfigObject.transformOrigin;\n }\n\n if (configObject.placement === undefined) {\n configObject.placement = defaultConfigObject.placement;\n }\n\n if (configObject.offset === undefined) {\n configObject.offset = defaultConfigObject.offset;\n }\n\n const [position, setPosition] = useState<Position>({\n left: 0,\n top: 0,\n right: \"initial\",\n bottom: \"initial\"\n });\n\n const _fixPossibleViewportOverflow = (\n value: number,\n transformOrigin: Placement,\n requestedReturnValue: Axis,\n elDimensions: Dimensions\n ) => {\n let returnValue = value;\n\n if (\n (transformOrigin[requestedReturnValue] === \"left\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"top\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"center\" && returnValue < 0) ||\n (transformOrigin[requestedReturnValue] === \"bottom\" && returnValue < 0)\n ) {\n returnValue = 0;\n }\n\n if (\n (transformOrigin[requestedReturnValue] === \"left\" &&\n returnValue > window.innerWidth - elDimensions.width) ||\n (transformOrigin[requestedReturnValue] === \"center\" &&\n requestedReturnValue === \"horizontal\" &&\n returnValue > window.innerWidth - elDimensions.width)\n ) {\n returnValue = window.innerWidth - elDimensions.width;\n }\n\n if (\n (transformOrigin[requestedReturnValue] === \"top\" &&\n returnValue > window.innerHeight - elDimensions.height) ||\n (transformOrigin[requestedReturnValue] === \"center\" &&\n requestedReturnValue === \"vertical\" &&\n returnValue > window.innerHeight - elDimensions.height)\n ) {\n returnValue = window.innerHeight - elDimensions.height;\n }\n\n if (\n transformOrigin[requestedReturnValue] === \"right\" &&\n returnValue > window.innerWidth - elDimensions.width\n ) {\n returnValue = window.innerWidth - elDimensions.width;\n }\n\n if (\n transformOrigin[requestedReturnValue] === \"bottom\" &&\n returnValue > window.innerHeight - elDimensions.height\n ) {\n returnValue = window.innerHeight - elDimensions.height;\n }\n\n return returnValue;\n };\n\n const _applyOffsetToPlacementValue = (\n value: number,\n requestedReturnValue: Axis,\n transformOrigin: Placement\n ) => {\n let returnValue = value;\n if (\n (requestedReturnValue === \"horizontal\" && configObject.offset?.left !== 0) ||\n (requestedReturnValue === \"horizontal\" && configObject.offset?.right !== 0)\n ) {\n if (\n transformOrigin[requestedReturnValue] === \"left\" ||\n transformOrigin[requestedReturnValue] === \"center\"\n ) {\n returnValue += configObject.offset?.left!;\n returnValue -= configObject.offset?.right!;\n }\n\n if (transformOrigin[requestedReturnValue] === \"right\") {\n returnValue -= configObject.offset?.left!;\n returnValue += configObject.offset?.right!;\n }\n }\n\n if (\n (requestedReturnValue === \"vertical\" && configObject.offset?.top !== 0) ||\n (requestedReturnValue === \"vertical\" && configObject.offset?.bottom !== 0)\n ) {\n if (\n transformOrigin[requestedReturnValue] === \"top\" ||\n transformOrigin[requestedReturnValue] === \"center\"\n ) {\n returnValue += configObject.offset?.top!;\n returnValue -= configObject.offset?.bottom!;\n }\n\n if (transformOrigin[requestedReturnValue] === \"bottom\") {\n returnValue -= configObject.offset?.top!;\n returnValue += configObject.offset?.bottom!;\n }\n }\n\n return returnValue;\n };\n\n const _calculateInitialPlacementValue = (\n transformOrigin: Placement,\n requestedReturnValue: Axis,\n relEl: DomRectObject,\n placementOriginDefinition: HorizontalPlacement | VerticalPlacement,\n elDimensions: Dimensions\n ) => {\n let value = 0;\n\n if (\n transformOrigin[requestedReturnValue] === \"left\" ||\n transformOrigin[requestedReturnValue] === \"top\"\n ) {\n value = relEl[placementOriginDefinition];\n } else if (transformOrigin[requestedReturnValue] === \"center\") {\n value =\n relEl[placementOriginDefinition] -\n elDimensions[requestedReturnValue === \"horizontal\" ? \"width\" : \"height\"] / 2;\n } else if (\n transformOrigin[requestedReturnValue] === \"right\" ||\n transformOrigin[requestedReturnValue] === \"bottom\"\n ) {\n value =\n window[requestedReturnValue === \"horizontal\" ? \"innerWidth\" : \"innerHeight\"] -\n relEl[placementOriginDefinition];\n }\n\n return value;\n };\n\n /**\n *\n * @param requestedReturnValue whether the requested return value is for the horizontal or vertical axis\n * @returns either the horizontally centered placement definition (centerh) or the vertically centered one (centerv)\n */\n const _determineCenteredPlacementOrigin = (requestedReturnValue: Axis) => {\n if (requestedReturnValue === \"horizontal\") {\n return \"centerh\";\n } else if (requestedReturnValue === \"vertical\") {\n return \"centerv\";\n }\n throw new Error(\n `the requested return value isn't \"vertical\" or \"horizontal\" ${requestedReturnValue} was given.`\n );\n };\n\n const _calculatePlacementValue = (\n transformOrigin: Placement,\n placement: HorizontalPlacement | VerticalPlacement,\n requestedReturnValue: Axis,\n relEl: DomRectObject,\n elDimensions: Dimensions\n ): number => {\n const placementOriginDefinition =\n placement === \"center\" ? _determineCenteredPlacementOrigin(requestedReturnValue) : placement;\n\n const value = _calculateInitialPlacementValue(\n transformOrigin,\n requestedReturnValue,\n relEl,\n placementOriginDefinition,\n elDimensions\n );\n\n const valueWithOffset = _applyOffsetToPlacementValue(\n value,\n requestedReturnValue,\n transformOrigin\n );\n\n const valueCorrectionForViewportOverflow = _fixPossibleViewportOverflow(\n valueWithOffset,\n transformOrigin,\n requestedReturnValue,\n elDimensions\n );\n\n return valueCorrectionForViewportOverflow;\n };\n\n const _calculatePlacement = (relEl: DomRectObject, elDimensions: Dimensions, axis: Axis) => {\n const placementValue = _calculatePlacementValue(\n configObject.transformOrigin!,\n configObject.placement![axis]!,\n axis,\n relEl,\n elDimensions\n );\n\n let direction = \"left\";\n let oppositeDirection = \"right\";\n\n if (axis === \"horizontal\" && configObject.transformOrigin?.horizontal === \"right\") {\n direction = \"right\";\n oppositeDirection = \"left\";\n } else if (axis === \"horizontal\") {\n direction = \"left\";\n oppositeDirection = \"right\";\n }\n\n if (axis === \"vertical\" && configObject.transformOrigin?.vertical === \"bottom\") {\n direction = \"bottom\";\n oppositeDirection = \"top\";\n } else if (axis === \"vertical\") {\n direction = \"top\";\n oppositeDirection = \"bottom\";\n }\n\n setPosition(prevState => ({\n ...prevState,\n [direction]: placementValue,\n [oppositeDirection]: \"initial\"\n }));\n };\n\n const calculatePosition = useDebouncedCallback(() => {\n if (!configObject.relativeElement?.current || !configObject.elementToBePositioned?.current)\n return;\n const relativeElRect = (configObject.relativeElement!\n .current as HTMLElement)!.getBoundingClientRect();\n const elementToBePositionedDimensions: Dimensions = {\n height: (configObject.elementToBePositioned!.current as HTMLElement).offsetHeight,\n width: (configObject.elementToBePositioned!.current as HTMLElement).offsetWidth\n };\n\n /** We want to add a center (horizontal and vertical) property to the DOMRect object. Since it's a special object we can't modify so we clone it and add it. */\n const clonedRelEl = {\n top: relativeElRect.top,\n right: relativeElRect.right,\n bottom: relativeElRect.bottom,\n center: 0,\n centerv: relativeElRect.top + relativeElRect.height / 2,\n centerh: relativeElRect.left + relativeElRect.width / 2,\n left: relativeElRect.left,\n width: relativeElRect.width,\n height: relativeElRect.height,\n x: relativeElRect.x,\n y: relativeElRect.y\n };\n\n _calculatePlacement(clonedRelEl, elementToBePositionedDimensions, \"horizontal\");\n _calculatePlacement(clonedRelEl, elementToBePositionedDimensions, \"vertical\");\n\n if (!initialCalculationDone) {\n setInitialCalculationDone(true);\n }\n }, configObject.debounceAmount ?? 20);\n\n return {\n top: position.top,\n bottom: position.bottom,\n left: position.left,\n right: position.right,\n calculatePosition,\n initialCalculationDone\n };\n};\n"],"names":["horizontal","vertical","defaultConfigObject","relativeElement","undefined","elementToBePositioned","transformOrigin","placement","offset","top","right","bottom","left","debounceAmount","usePosition","providedConfigObject","configObject","initialCalculationDone","setInitialCalculationDone","useState","position","setPosition","_fixPossibleViewportOverflow","value","requestedReturnValue","elDimensions","returnValue","window","innerWidth","width","innerHeight","height","_applyOffsetToPlacementValue","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_calculateInitialPlacementValue","relEl","placementOriginDefinition","_determineCenteredPlacementOrigin","Error","_calculatePlacementValue","valueWithOffset","valueCorrectionForViewportOverflow","_calculatePlacement","axis","placementValue","direction","oppositeDirection","prevState","calculatePosition","useDebouncedCallback","current","relativeElRect","getBoundingClientRect","elementToBePositionedDimensions","offsetHeight","offsetWidth","clonedRelEl","center","centerv","centerh","x","y"],"mappings":"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"}
@@ -83,14 +83,17 @@ export { InputWrapper } from "./components/Form/Wrapper/InputWrapper/InputWrappe
83
83
  export type { Props as InputWrapperProps } from "./components/Form/Wrapper/InputWrapper/InputWrapper";
84
84
  export { Label } from "./components/Form/Label/Label";
85
85
  export type { Props as LabelProps } from "./components/Form/Label/Label";
86
- export { Option } from "./components/Form/Select/Option";
87
- export type { Props as OptionProps } from "./components/Form/Select/Option";
88
86
  export { Radio } from "./components/Form/Radio/Radio";
89
87
  export type { Props as RadioProps } from "./components/Form/Radio/Radio";
90
88
  export { RadioWrapper } from "./components/Form/Wrapper/RadioWrapper/RadioWrapper";
91
89
  export type { Props as RadioWrapperProps } from "./components/Form/Wrapper/RadioWrapper/RadioWrapper";
92
- export { Select } from "./components/Form/Select/Select";
93
- export type { Props as SelectProps } from "./components/Form/Select/Select";
90
+ export { Select } from "./components/Form/Select/SingleSelect/Select";
91
+ export { MultiSelect } from "./components/Form/Select/MultiSelect/MultiSelect";
92
+ export type { SingleSelectProps, MultiSelectProps, SingleSelectProps as SelectProps } from "./components/Form/Select/Select.interfaces";
93
+ export { Option } from "./components/Form/Select/SingleSelect/Option";
94
+ export type { Props as OptionProps } from "./components/Form/Select/SingleSelect/Option";
95
+ export { MultiOption } from "./components/Form/Select/MultiSelect/MultiOption";
96
+ export type { Props as MultiOptionProps } from "./components/Form/Select/MultiSelect/MultiOption";
94
97
  export { Textarea } from "./components/Form/Textarea/Textarea";
95
98
  export type { Props as TextareaProps } from "./components/Form/Textarea/Textarea";
96
99
  export { Toggle } from "./components/Form/Toggle/Toggle";
@@ -1,2 +1,2 @@
1
- export{BaseStyling}from"../_BaseStyling_/BaseStyling.esm.js";export{Button}from"../Button/Button.esm.js";export{Breadcrumbs}from"../Breadcrumbs/Breadcrumbs.esm.js";export{ContextMenu}from"../ContextMenu/ContextMenu.esm.js";export{ContextMenuItem}from"../ContextMenu/ContextMenuItem.esm.js";export{Link}from"../Link/Link.esm.js";export{Icon,Icons}from"../Icon/Icon.esm.js";export{IconButton}from"../Button/IconButton.esm.js";export{Tab}from"../Tabs/Tab.esm.js";export{Tabs}from"../Tabs/Tabs.esm.js";export{Tag}from"../Tag/Tag.esm.js";export{TextEllipsis}from"../TextEllipsis/TextEllipsis.esm.js";export{Tile}from"../Tiles/Tile.esm.js";export{Tiles}from"../Tiles/Tiles.esm.js";export{Tooltip}from"../Tooltip/Tooltip.esm.js";export{Typography}from"../Typography/Typography.esm.js";export{ProgressBar}from"../ProgressBar/ProgressBar.esm.js";export{Skeleton}from"../Skeleton/Skeleton.esm.js";export{StatusIndicator}from"../StatusIndicator/StatusIndicator.esm.js";export{Stepper}from"../Stepper/Stepper.esm.js";export{Pagination}from"../Pagination/Pagination.esm.js";export{useRepeater}from"./hooks/useRepeater.esm.js";export{usePosition}from"./hooks/usePosition.esm.js";export{useDebouncedCallback}from"./hooks/useDebouncedCallback.esm.js";export{debounce,generateID,throttle}from"./util/helper.esm.js";export{BaseModal as Modal}from"../Notifications/BaseModal/BaseModal.esm.js";export{useSnackbar}from"../Notifications/Snackbar/useSnackbar.esm.js";export{Dialog}from"../Notifications/Dialog/Dialog.esm.js";export{DiscardChangesModal}from"../Notifications/DiscardChangesModal/DiscardChangesModal.esm.js";export{BaseModalActions as ModalActions}from"../Notifications/BaseModal/BaseModalActions/BaseModalActions.esm.js";export{BaseModalContent as ModalContent}from"../Notifications/BaseModal/BaseModalContent/BaseModalContent.esm.js";export{BaseModalHeader as ModalHeader}from"../Notifications/BaseModal/BaseModalHeader/BaseModalHeader.esm.js";export{NotificationProvider,useNotificationContext}from"../Notifications/NotificationProvider/NotificationContext.esm.js";export{SlideInModal}from"../Notifications/SlideInModal/SlideInModal.esm.js";export{SnackbarProvider}from"../Notifications/Snackbar/SnackbarProvider/SnackbarProvider.esm.js";export{Checkbox}from"../Form/Checkbox/Checkbox.esm.js";export{Fieldset}from"../Form/Fieldset/Fieldset.esm.js";export{Form}from"../Form/Form.esm.js";export{FormControl}from"../Form/FormControl/FormControl.esm.js";export{FormGroup}from"../Form/FormGroup/FormGroup.esm.js";export{FormHelperText}from"../Form/FormHelperText/FormHelperText.esm.js";export{Input}from"../Form/Input/Input.esm.js";export{InputWrapper}from"../Form/Wrapper/InputWrapper/InputWrapper.esm.js";export{Label}from"../Form/Label/Label.esm.js";export{Option}from"../Form/Select/Option.esm.js";export{Radio}from"../Form/Radio/Radio.esm.js";export{RadioWrapper}from"../Form/Wrapper/RadioWrapper/RadioWrapper.esm.js";export{Select}from"../Form/Select/Select.esm.js";export{Textarea}from"../Form/Textarea/Textarea.esm.js";export{Toggle}from"../Form/Toggle/Toggle.esm.js";export{CheckboxWrapper}from"../Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js";export{TextareaWrapper}from"../Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js";export{SelectWrapper}from"../Form/Wrapper/SelectWrapper/SelectWrapper.esm.js";export{Wizard}from"../Wizard/Wizard.esm.js";export{WizardActions}from"../Wizard/WizardActions/WizardActions.esm.js";export{WizardSteps}from"../Wizard/WizardSteps/WizardSteps.esm.js";export{BaseWizardSteps}from"../Wizard/BaseWizardSteps/BaseWizardSteps.esm.js";export{DataGrid}from"../DataGrid/DataGrid.esm.js";export{DataGridRow}from"../DataGrid/DataGridBody/DataGridRow.esm.js";export{DataGridCell}from"../DataGrid/DataGridBody/DataGridCell.esm.js";export{Banner}from"../Notifications/Banner/Banner.esm.js";
1
+ export{BaseStyling}from"../_BaseStyling_/BaseStyling.esm.js";export{Button}from"../Button/Button.esm.js";export{Breadcrumbs}from"../Breadcrumbs/Breadcrumbs.esm.js";export{ContextMenu}from"../ContextMenu/ContextMenu.esm.js";export{ContextMenuItem}from"../ContextMenu/ContextMenuItem.esm.js";export{Link}from"../Link/Link.esm.js";export{Icon,Icons}from"../Icon/Icon.esm.js";export{IconButton}from"../Button/IconButton.esm.js";export{Tab}from"../Tabs/Tab.esm.js";export{Tabs}from"../Tabs/Tabs.esm.js";export{Tag}from"../Tag/Tag.esm.js";export{TextEllipsis}from"../TextEllipsis/TextEllipsis.esm.js";export{Tile}from"../Tiles/Tile.esm.js";export{Tiles}from"../Tiles/Tiles.esm.js";export{Tooltip}from"../Tooltip/Tooltip.esm.js";export{Typography}from"../Typography/Typography.esm.js";export{ProgressBar}from"../ProgressBar/ProgressBar.esm.js";export{Skeleton}from"../Skeleton/Skeleton.esm.js";export{StatusIndicator}from"../StatusIndicator/StatusIndicator.esm.js";export{Stepper}from"../Stepper/Stepper.esm.js";export{Pagination}from"../Pagination/Pagination.esm.js";export{useRepeater}from"./hooks/useRepeater.esm.js";export{usePosition}from"./hooks/usePosition.esm.js";export{useDebouncedCallback}from"./hooks/useDebouncedCallback.esm.js";export{debounce,generateID,throttle}from"./util/helper.esm.js";export{BaseModal as Modal}from"../Notifications/BaseModal/BaseModal.esm.js";export{useSnackbar}from"../Notifications/Snackbar/useSnackbar.esm.js";export{Dialog}from"../Notifications/Dialog/Dialog.esm.js";export{DiscardChangesModal}from"../Notifications/DiscardChangesModal/DiscardChangesModal.esm.js";export{BaseModalActions as ModalActions}from"../Notifications/BaseModal/BaseModalActions/BaseModalActions.esm.js";export{BaseModalContent as ModalContent}from"../Notifications/BaseModal/BaseModalContent/BaseModalContent.esm.js";export{BaseModalHeader as ModalHeader}from"../Notifications/BaseModal/BaseModalHeader/BaseModalHeader.esm.js";export{NotificationProvider,useNotificationContext}from"../Notifications/NotificationProvider/NotificationContext.esm.js";export{SlideInModal}from"../Notifications/SlideInModal/SlideInModal.esm.js";export{SnackbarProvider}from"../Notifications/Snackbar/SnackbarProvider/SnackbarProvider.esm.js";export{Checkbox}from"../Form/Checkbox/Checkbox.esm.js";export{Fieldset}from"../Form/Fieldset/Fieldset.esm.js";export{Form}from"../Form/Form.esm.js";export{FormControl}from"../Form/FormControl/FormControl.esm.js";export{FormGroup}from"../Form/FormGroup/FormGroup.esm.js";export{FormHelperText}from"../Form/FormHelperText/FormHelperText.esm.js";export{Input}from"../Form/Input/Input.esm.js";export{InputWrapper}from"../Form/Wrapper/InputWrapper/InputWrapper.esm.js";export{Label}from"../Form/Label/Label.esm.js";export{Radio}from"../Form/Radio/Radio.esm.js";export{RadioWrapper}from"../Form/Wrapper/RadioWrapper/RadioWrapper.esm.js";export{Select}from"../Form/Select/SingleSelect/Select.esm.js";export{MultiSelect}from"../Form/Select/MultiSelect/MultiSelect.esm.js";export{Option}from"../Form/Select/SingleSelect/Option.esm.js";export{MultiOption}from"../Form/Select/MultiSelect/MultiOption.esm.js";export{Textarea}from"../Form/Textarea/Textarea.esm.js";export{Toggle}from"../Form/Toggle/Toggle.esm.js";export{CheckboxWrapper}from"../Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js";export{TextareaWrapper}from"../Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js";export{SelectWrapper}from"../Form/Wrapper/SelectWrapper/SelectWrapper.esm.js";export{Wizard}from"../Wizard/Wizard.esm.js";export{WizardActions}from"../Wizard/WizardActions/WizardActions.esm.js";export{WizardSteps}from"../Wizard/WizardSteps/WizardSteps.esm.js";export{BaseWizardSteps}from"../Wizard/BaseWizardSteps/BaseWizardSteps.esm.js";export{DataGrid}from"../DataGrid/DataGrid.esm.js";export{DataGridRow}from"../DataGrid/DataGridBody/DataGridRow.esm.js";export{DataGridCell}from"../DataGrid/DataGridBody/DataGridCell.esm.js";export{Banner}from"../Notifications/Banner/Banner.esm.js";
2
2
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "homepage": "http://onewelcome.github.io/react-lib-components",
3
3
  "name": "@onewelcome/react-lib-components",
4
- "version": "6.0.0",
4
+ "version": "6.2.0",
5
5
  "license": "Apache-2.0",
6
6
  "author": "OneWelcome B.V.",
7
7
  "main": "dist/cjs/src/index.cjs.js",
@@ -9,7 +9,9 @@
9
9
  "typings": "dist/cjs/src/index.d.ts",
10
10
  "files": [
11
11
  "dist",
12
- "src"
12
+ "src",
13
+ "!*/**/*.test.tsx",
14
+ "!*/**/*.test.ts"
13
15
  ],
14
16
  "sideEffects": [
15
17
  "*.css",
@@ -50,8 +52,8 @@
50
52
  "node": ">=16"
51
53
  },
52
54
  "devDependencies": {
53
- "@babel/core": "^7.23.3",
54
- "@babel/preset-env": "^7.23.3",
55
+ "@babel/core": "^7.23.9",
56
+ "@babel/preset-env": "^7.23.9",
55
57
  "@babel/preset-react": "^7.23.3",
56
58
  "@babel/preset-typescript": "^7.23.3",
57
59
  "@mdx-js/react": "^3.0.0",
@@ -59,74 +61,75 @@
59
61
  "@onewelcome/storybook-addon-basestyling": "^1.0.0",
60
62
  "@rollup/plugin-commonjs": "^25.0.7",
61
63
  "@rollup/plugin-node-resolve": "^15.2.3",
62
- "@rollup/plugin-typescript": "^11.1.5",
63
- "@storybook/addon-a11y": "^7.5.3",
64
- "@storybook/addon-actions": "^7.5.3",
65
- "@storybook/addon-docs": "^7.5.3",
66
- "@storybook/addon-essentials": "^7.5.3",
67
- "@storybook/addon-interactions": "^7.5.3",
68
- "@storybook/addon-links": "^7.5.3",
69
- "@storybook/blocks": "^7.5.3",
70
- "@storybook/components": "^7.5.3",
64
+ "@rollup/plugin-typescript": "^11.1.6",
65
+ "@storybook/addon-a11y": "^7.6.12",
66
+ "@storybook/addon-actions": "^7.6.12",
67
+ "@storybook/addon-docs": "^7.6.12",
68
+ "@storybook/addon-essentials": "^7.6.12",
69
+ "@storybook/addon-interactions": "^7.6.12",
70
+ "@storybook/addon-links": "^7.6.12",
71
+ "@storybook/blocks": "^7.6.12",
72
+ "@storybook/components": "^7.6.12",
71
73
  "@storybook/jest": "^0.2.3",
72
- "@storybook/manager-api": "^7.5.3",
73
- "@storybook/react": "^7.5.3",
74
- "@storybook/react-webpack5": "^7.5.3",
74
+ "@storybook/manager-api": "^7.6.12",
75
+ "@storybook/react": "^7.6.12",
76
+ "@storybook/react-webpack5": "^7.6.12",
75
77
  "@storybook/testing-library": "^0.2.2",
76
- "@storybook/theming": "^7.5.3",
77
- "@testing-library/dom": "^9.3.3",
78
- "@testing-library/jest-dom": "^6.1.4",
79
- "@testing-library/react": "^14.0.0",
80
- "@testing-library/user-event": "^14.5.1",
81
- "@types/jest": "^29.5.8",
82
- "@types/mdx": "^2.0.10",
83
- "@types/react": "^18.2.37",
84
- "@types/react-dom": "^18.2.15",
78
+ "@storybook/theming": "^7.6.12",
79
+ "@testing-library/dom": "^9.3.4",
80
+ "@testing-library/jest-dom": "^6.4.2",
81
+ "@testing-library/react": "^14.2.1",
82
+ "@testing-library/user-event": "^14.5.2",
83
+ "@types/jest": "^29.5.12",
84
+ "@types/mdx": "^2.0.11",
85
+ "@types/react": "^18.2.54",
86
+ "@types/react-dom": "^18.2.18",
85
87
  "@types/react-router": "^5.1.20",
86
88
  "@types/react-router-dom": "^5.3.3",
87
- "@typescript-eslint/eslint-plugin": "^6.9.0",
88
- "@typescript-eslint/parser": "^6.9.0",
89
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
90
+ "@typescript-eslint/parser": "^6.21.0",
89
91
  "babel-loader": "^9.1.3",
90
- "chromatic": "^7.5.4",
91
- "css-loader": "^6.8.1",
92
- "eslint": "^8.52.0",
93
- "eslint-config-prettier": "^9.0.0",
92
+ "chromatic": "^10.7.1",
93
+ "css-loader": "^6.10.0",
94
+ "eslint": "^8.56.0",
95
+ "eslint-config-prettier": "^9.1.0",
94
96
  "eslint-plugin-cypress": "^2.15.1",
95
- "eslint-plugin-jest": "^27.6.0",
97
+ "eslint-plugin-export-scope": "^2.0.5",
98
+ "eslint-plugin-jest": "^27.6.3",
96
99
  "eslint-plugin-license-header": "^0.6.0",
97
- "eslint-plugin-prettier": "^5.0.1",
100
+ "eslint-plugin-prettier": "^5.1.3",
98
101
  "eslint-plugin-react": "^7.33.2",
99
102
  "eslint-plugin-react-hooks": "^4.6.0",
100
103
  "eslint-plugin-storybook": "^0.6.15",
101
- "husky": "^8.0.3",
104
+ "husky": "^9.0.10",
102
105
  "identity-obj-proxy": "^3.0.0",
103
106
  "jest": "^29.7.0",
104
107
  "jest-environment-jsdom": "^29.7.0",
105
108
  "jest-junit": "^16.0.0",
106
109
  "jest-sonar-reporter": "^2.0.0",
107
- "lint-staged": "^15.0.2",
108
- "mini-css-extract-plugin": "^2.7.6",
110
+ "lint-staged": "^15.2.2",
111
+ "mini-css-extract-plugin": "^2.8.0",
109
112
  "npm-run-all": "^4.1.5",
110
- "postcss": "^8.4.31",
113
+ "postcss": "^8.4.34",
111
114
  "postcss-modules": "^6.0.0",
112
115
  "postcss-url": "^10.1.3",
113
- "prettier": "^3.0.3",
116
+ "prettier": "^3.2.5",
114
117
  "react": "^18.2.0",
115
118
  "react-dom": "^18.2.0",
116
119
  "react-is": "^18.2.0",
117
- "react-router-dom": "^6.19.0",
120
+ "react-router-dom": "^6.22.0",
118
121
  "remark-gfm": "^4.0.0",
119
122
  "rollup": "^2.79.1",
120
123
  "rollup-plugin-postcss": "^4.0.2",
121
124
  "rollup-plugin-terser": "^7.0.2",
122
- "sass": "^1.69.5",
123
- "sass-loader": "^13.3.2",
124
- "size-limit": "^10.0.1",
125
- "storybook": "^7.5.3",
125
+ "sass": "^1.70.0",
126
+ "sass-loader": "^14.1.0",
127
+ "size-limit": "^11.0.2",
128
+ "storybook": "^7.6.12",
126
129
  "storybook-addon-pseudo-states": "^2.1.2",
127
- "style-loader": "^3.3.3",
128
- "ts-jest": "^29.1.1",
130
+ "style-loader": "^3.3.4",
131
+ "ts-jest": "^29.1.2",
129
132
  "tslib": "^2.6.2",
130
- "typescript": "^5.3.2"
133
+ "typescript": "^5.3.3"
131
134
  }
132
135
  }
@@ -35,7 +35,8 @@ import { useBodyClick } from "../../hooks/useBodyClick";
35
35
  import { Props as ContextMenuItemProps } from "./ContextMenuItem";
36
36
  import { createPortal } from "react-dom";
37
37
  import { useGetDomRoot } from "../../hooks/useGetDomRoot";
38
- import { useArrowNavigation, useDefaultOffset } from "./ContextMenuService";
38
+ import { useArrowNavigation, useDefaultOffset, useFocusAnchorElement } from "./ContextMenuService";
39
+ import { generateID } from "../../util/helper";
39
40
 
40
41
  export interface Props extends Omit<ComponentPropsWithRef<"div">, "onChange"> {
41
42
  trigger: ReactElement<ButtonProps> | ReactElement<IconButtonProps>;
@@ -45,7 +46,7 @@ export interface Props extends Omit<ComponentPropsWithRef<"div">, "onChange"> {
45
46
  transformOrigin?: Placement;
46
47
  offset?: Offset;
47
48
  debounceAmount?: number;
48
- id: string;
49
+ id?: string;
49
50
  show?: boolean;
50
51
  domRoot?: HTMLElement;
51
52
  onShow?: () => void;
@@ -60,7 +61,7 @@ const ContextMenuComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
60
61
  trigger,
61
62
  children,
62
63
  decorativeElement,
63
- id,
64
+ id = `ID-${generateID()}`,
64
65
  show = false,
65
66
  onShow,
66
67
  onClose,
@@ -79,7 +80,6 @@ const ContextMenuComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
79
80
  const anchorEl = useRef<HTMLButtonElement>(null);
80
81
  const wrappingDivRef = (ref as RefObject<HTMLDivElement>) || createRef<HTMLDivElement>();
81
82
  const [showContextMenu, setShowContextMenu] = useState(show);
82
- const [hasBeenClosed, setHasBeenClosed] = useState(false);
83
83
  const [selectedContextMenuItem, setSelectedContextMenuItem] = useState(-1);
84
84
  const [focusedContextMenuItem, setFocusedContextMenuItem] = useState(-1);
85
85
  const [shouldClick, setShouldClick] =
@@ -90,10 +90,6 @@ const ContextMenuComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
90
90
 
91
91
  const { root } = useGetDomRoot(domRoot, wrappingDivRef);
92
92
 
93
- if (!id) {
94
- throw new Error("You need to provide an ID to the context menu");
95
- }
96
-
97
93
  const syncSelectedContextMenuItem = setSelectedContextMenuItem;
98
94
 
99
95
  useEffect(() => {
@@ -128,21 +124,15 @@ const ContextMenuComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
128
124
  showContextMenu
129
125
  );
130
126
 
131
- useEffect(() => {
132
- if (showContextMenu === true) {
133
- onShow?.();
134
- } else {
135
- onClose?.();
136
- !hasBeenClosed && setHasBeenClosed(true);
137
- setFocusedContextMenuItem(-1);
138
- // If the user clicks on the trigger button, we want to focus it again after the context menu has been closed,
139
- // but only if the option doesn't open another window (such as a modal),
140
- // otherwise pressing enter wouldn't fire the primary action of the modal.
141
- if (document.activeElement?.closest(`.${wrappingDivRef.current?.className}`)) {
142
- hasBeenClosed && anchorEl.current && anchorEl.current.focus();
143
- }
144
- }
145
- }, [showContextMenu]);
127
+ useFocusAnchorElement(
128
+ anchorEl,
129
+ id,
130
+ showContextMenu,
131
+ setShowContextMenu,
132
+ setFocusedContextMenuItem,
133
+ onShow,
134
+ onClose
135
+ );
146
136
 
147
137
  const renderTrigger = () =>
148
138
  React.cloneElement(trigger, {
@@ -14,7 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { Placement, Offset, vertical, horizontal } from "../../hooks/usePosition";
17
+ import { SetStateAction, useEffect } from "react";
18
+ import { horizontal, Offset, Placement, vertical } from "../../hooks/usePosition";
18
19
  import { remToPx } from "../../util/helper";
19
20
 
20
21
  interface UseArrowNavigation {
@@ -28,6 +29,7 @@ interface UseArrowNavigation {
28
29
  setShouldClick: React.Dispatch<React.SetStateAction<boolean>>;
29
30
  }
30
31
 
32
+ /** @scope . */
31
33
  export const useArrowNavigation = ({
32
34
  selectedContextMenuItem,
33
35
  setSelectedContextMenuItem,
@@ -123,3 +125,47 @@ export const useDefaultOffset = () => {
123
125
 
124
126
  return { calculateDefaultOffset };
125
127
  };
128
+
129
+ export const useFocusAnchorElement = (
130
+ anchorEl: React.RefObject<HTMLElement>,
131
+ id: string,
132
+ showContextMenu: boolean,
133
+ setShowContextMenu: React.Dispatch<SetStateAction<boolean>>,
134
+ setFocusedContextMenuItem: React.Dispatch<SetStateAction<number>>,
135
+ onShow?: () => void,
136
+ onClose?: () => void
137
+ ) => {
138
+ const handleEscapeKeyPress = (e: KeyboardEvent) => {
139
+ if (e.key === "Escape") {
140
+ setShowContextMenu(false);
141
+ anchorEl.current?.focus();
142
+ }
143
+ };
144
+
145
+ const escapeKeyEventHandlerManager = () => {
146
+ if (showContextMenu) {
147
+ document.addEventListener("keydown", handleEscapeKeyPress);
148
+ } else {
149
+ document.removeEventListener("keydown", handleEscapeKeyPress);
150
+ }
151
+ };
152
+
153
+ const emitContextMenuEvent = () => {
154
+ if (showContextMenu) {
155
+ onShow?.();
156
+ } else {
157
+ onClose?.();
158
+
159
+ if (document.activeElement?.closest(`#${id}-menu`)) {
160
+ anchorEl.current?.focus();
161
+ }
162
+
163
+ setFocusedContextMenuItem(-1);
164
+ }
165
+ };
166
+
167
+ useEffect(() => {
168
+ escapeKeyEventHandlerManager();
169
+ emitContextMenuEvent();
170
+ }, [showContextMenu]);
171
+ };
@@ -19,7 +19,8 @@ import readyclasses from "../../../readyclasses.module.scss";
19
19
  import classes from "./Fieldset.module.scss";
20
20
  import { Typography, Variant } from "../../Typography/Typography";
21
21
  import { Input } from "../Input/Input";
22
- import { Select } from "../Select/Select";
22
+ import { Select } from "../Select/SingleSelect/Select";
23
+ import { MultiSelect } from "../Select/MultiSelect/MultiSelect";
23
24
  import { Radio } from "../Radio/Radio";
24
25
  import { Checkbox } from "../Checkbox/Checkbox";
25
26
  import { Textarea } from "../Textarea/Textarea";
@@ -73,6 +74,7 @@ const FieldsetComponent: ForwardRefRenderFunction<HTMLFieldSetElement, Props> =
73
74
  const allowedComponents: React.ComponentPropsWithRef<any>[] = [
74
75
  Input,
75
76
  Select,
77
+ MultiSelect,
76
78
  Radio,
77
79
  Checkbox,
78
80
  Textarea,
@@ -14,15 +14,18 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { renderHook } from "@testing-library/react";
18
- import { useWrapper } from "./useWrapper";
17
+ import React, { ForwardRefRenderFunction } from "react";
18
+ import { Props as SelectOptionProps, Option as SelectOption } from "../SingleSelect/Option";
19
19
 
20
- describe("it should give the correct results based on no value, no placeholder and default text input", () => {
21
- it("should execute correctly", () => {
22
- const { result } = renderHook(() => useWrapper());
20
+ export interface Props extends SelectOptionProps {
21
+ fixed?: boolean;
22
+ }
23
23
 
24
- expect(result.current.helperId).toHaveLength(20);
25
- expect(result.current.errorId).toHaveLength(20);
26
- expect(result.current.labelId).toHaveLength(20);
27
- });
28
- });
24
+ const MultiOptionComponent: ForwardRefRenderFunction<HTMLLIElement, Props> = (
25
+ { fixed: _fixed, ...rest }: Props,
26
+ ref
27
+ ) => {
28
+ return <SelectOption ref={ref} {...rest} />;
29
+ };
30
+
31
+ export const MultiOption = React.forwardRef(MultiOptionComponent);
@@ -17,7 +17,7 @@
17
17
  @use "src/mixins.module";
18
18
  @use "src/variables";
19
19
 
20
- $listItemHeight: 2.125rem;
20
+ $listItemHeight: 2.5rem;
21
21
 
22
22
  .select {
23
23
  position: relative;
@@ -40,7 +40,7 @@ $listItemHeight: 2.125rem;
40
40
  }
41
41
 
42
42
  &:not(.expanded) {
43
- button:focus:not(.error) {
43
+ .custom-select:focus:not(.error) {
44
44
  border: var(--input-border-width-focus) solid var(--color-focus);
45
45
  padding: 0
46
46
  calc(variables.$form-element-horizontal-padding-mobile - var(--input-border-width-focus));
@@ -48,7 +48,7 @@ $listItemHeight: 2.125rem;
48
48
  }
49
49
 
50
50
  &:hover:not(.disabled):not(.expanded):not(.error) {
51
- button:not(:focus) {
51
+ .custom-select:not(:focus) {
52
52
  border-color: var(--default);
53
53
  border-width: var(--input-border-width);
54
54
  background-color: var(--color-blue-grey25);
@@ -56,7 +56,7 @@ $listItemHeight: 2.125rem;
56
56
  }
57
57
 
58
58
  .custom-select {
59
- position: relative;
59
+ box-sizing: border-box;
60
60
  width: 100%;
61
61
  min-height: calc(2.625rem - (2 * var(--input-border-width)));
62
62
  padding: 0 calc(variables.$form-element-horizontal-padding-mobile - var(--input-border-width));
@@ -66,7 +66,6 @@ $listItemHeight: 2.125rem;
66
66
  border-width: var(--input-border-width);
67
67
  border-radius: var(--input-border-radius);
68
68
  font-size: var(--form-control-font-size);
69
- cursor: pointer;
70
69
  @include mixins.transition(all, 0.2s, ease-in-out);
71
70
 
72
71
  &:focus {
@@ -75,7 +74,6 @@ $listItemHeight: 2.125rem;
75
74
 
76
75
  &.error {
77
76
  border-color: var(--error);
78
- color: var(--error);
79
77
  }
80
78
 
81
79
  &.error:focus {
@@ -84,6 +82,14 @@ $listItemHeight: 2.125rem;
84
82
 
85
83
  &.disabled {
86
84
  border-color: var(--color-disabled);
85
+ pointer-events: none;
86
+ }
87
+
88
+ .display-container {
89
+ flex: 1;
90
+ display: flex;
91
+ align-items: center;
92
+ padding: 0.1875rem 0;
87
93
  }
88
94
  }
89
95
 
@@ -113,14 +119,17 @@ $listItemHeight: 2.125rem;
113
119
  border-radius: var(--input-border-radius);
114
120
  color: var(--default);
115
121
  text-align: left;
122
+ overflow: auto;
116
123
  max-height: calc($listItemHeight * 10);
117
124
 
118
125
  li {
119
- padding: 0.5rem 0.75rem;
126
+ padding: 0.62rem 0.75rem;
120
127
  font-size: var(--form-control-font-size);
121
128
  margin: 0;
122
129
  position: relative;
123
- line-height: var(--default-line-height);
130
+ line-height: 1.25rem;
131
+ box-sizing: border-box;
132
+ min-height: $listItemHeight;
124
133
  cursor: pointer;
125
134
 
126
135
  &:after {
@@ -171,18 +180,8 @@ $listItemHeight: 2.125rem;
171
180
  color: var(--color-primary);
172
181
  }
173
182
 
174
- .selected {
175
- position: absolute;
176
- top: 50%;
177
- transform: translateY(-50%);
178
- pointer-events: none;
179
- }
180
-
181
183
  .status {
182
- position: absolute;
183
- top: 50%;
184
- right: 0.8125rem;
185
- transform: translateY(-50%);
184
+ padding: 0.3125rem;
186
185
  display: flex;
187
186
  align-items: center;
188
187
 
@@ -236,7 +235,7 @@ $listItemHeight: 2.125rem;
236
235
  }
237
236
 
238
237
  &:not(.expanded) {
239
- button:focus:not(.error) {
238
+ .custom-select:focus:not(.error) {
240
239
  padding: 0
241
240
  calc(variables.$form-element-horizontal-padding-desktop - var(--input-border-width-focus));
242
241
  }