@onewelcome/react-lib-components 0.2.1 → 0.2.4

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 (284) hide show
  1. package/dist/Breadcrumbs/Breadcrumbs.d.ts +4 -4
  2. package/dist/Button/BaseButton.d.ts +4 -4
  3. package/dist/Button/Button.d.ts +3 -3
  4. package/dist/Button/IconButton.d.ts +4 -4
  5. package/dist/ContextMenu/ContextMenu.d.ts +5 -5
  6. package/dist/ContextMenu/ContextMenuItem.d.ts +2 -2
  7. package/dist/DataGrid/DataGrid.d.ts +6 -6
  8. package/dist/DataGrid/DataGridActions/DataGridActions.d.ts +4 -4
  9. package/dist/DataGrid/DataGridActions/DataGridColumnsToggle.d.ts +3 -3
  10. package/dist/DataGrid/DataGridBody/DataGridBody.d.ts +3 -3
  11. package/dist/DataGrid/DataGridBody/DataGridCell.d.ts +2 -2
  12. package/dist/DataGrid/DataGridBody/DataGridRow.d.ts +3 -3
  13. package/dist/DataGrid/DataGridHeader/DataGridHeader.d.ts +3 -3
  14. package/dist/DataGrid/DataGridHeader/DataGridHeaderCell.d.ts +3 -3
  15. package/dist/DataGrid/datagrid.interfaces.d.ts +1 -1
  16. package/dist/Form/Checkbox/Checkbox.d.ts +5 -5
  17. package/dist/Form/Fieldset/Fieldset.d.ts +3 -3
  18. package/dist/Form/Form.d.ts +1 -1
  19. package/dist/Form/FormControl/FormControl.d.ts +3 -3
  20. package/dist/Form/FormGroup/FormGroup.d.ts +5 -5
  21. package/dist/Form/FormHelperText/FormHelperText.d.ts +3 -3
  22. package/dist/Form/FormSelectorWrapper/FormSelectorWrapper.d.ts +6 -6
  23. package/dist/Form/Input/Input.d.ts +5 -5
  24. package/dist/Form/Label/Label.d.ts +2 -2
  25. package/dist/Form/Radio/Radio.d.ts +5 -5
  26. package/dist/Form/Select/Option.d.ts +2 -2
  27. package/dist/Form/Select/Select.d.ts +5 -5
  28. package/dist/Form/Textarea/Textarea.d.ts +6 -6
  29. package/dist/Form/Toggle/Toggle.d.ts +3 -3
  30. package/dist/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +4 -4
  31. package/dist/Form/Wrapper/InputWrapper/InputWrapper.d.ts +4 -4
  32. package/dist/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +4 -4
  33. package/dist/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +4 -4
  34. package/dist/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +4 -4
  35. package/dist/Form/Wrapper/Wrapper/Wrapper.d.ts +6 -6
  36. package/dist/Form/form.interfaces.d.ts +2 -2
  37. package/dist/Icon/Icon.d.ts +3 -3
  38. package/dist/Link/Link.d.ts +7 -7
  39. package/dist/Notifications/BaseModal/BaseModal.d.ts +4 -4
  40. package/dist/Notifications/BaseModal/BaseModalActions/BaseModalActions.d.ts +2 -2
  41. package/dist/Notifications/BaseModal/BaseModalContent/BaseModalContent.d.ts +2 -2
  42. package/dist/Notifications/BaseModal/BaseModalHeader/BaseModalHeader.d.ts +2 -2
  43. package/dist/Notifications/Dialog/Dialog.d.ts +5 -5
  44. package/dist/Notifications/Dialog/DialogActions/DialogActions.d.ts +3 -3
  45. package/dist/Notifications/Dialog/DialogTitle/DialogTitle.d.ts +2 -2
  46. package/dist/Notifications/DiscardChangesModal/DiscardChangesDialog/DiscardChangesDialog.d.ts +3 -3
  47. package/dist/Notifications/DiscardChangesModal/DiscardChangesModal.d.ts +7 -7
  48. package/dist/Notifications/Modal/Modal.d.ts +1 -1
  49. package/dist/Notifications/Modal/ModalActions/ModalActions.d.ts +1 -1
  50. package/dist/Notifications/Modal/ModalContent/ModalContent.d.ts +1 -1
  51. package/dist/Notifications/Modal/ModalHeader/ModalHeader.d.ts +1 -1
  52. package/dist/Notifications/SlideInModal/SlideInModal.d.ts +3 -3
  53. package/dist/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.d.ts +3 -3
  54. package/dist/Notifications/Snackbar/SnackbarItem/SnackbarItem.d.ts +2 -2
  55. package/dist/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.d.ts +3 -3
  56. package/dist/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.d.ts +2 -2
  57. package/dist/Notifications/Snackbar/interfaces.d.ts +2 -2
  58. package/dist/Pagination/Pagination.d.ts +3 -3
  59. package/dist/Popover/Popover.d.ts +3 -3
  60. package/dist/Skeleton/Skeleton.d.ts +3 -3
  61. package/dist/StatusIndicator/StatusIndicator.d.ts +5 -5
  62. package/dist/Tabs/Tab.d.ts +1 -1
  63. package/dist/Tabs/TabButton.d.ts +2 -2
  64. package/dist/Tabs/TabPanel.d.ts +2 -2
  65. package/dist/Tabs/Tabs.d.ts +4 -4
  66. package/dist/TextEllipsis/TextEllipsis.d.ts +2 -2
  67. package/dist/Tiles/Tile.d.ts +5 -5
  68. package/dist/Tiles/Tiles.d.ts +2 -2
  69. package/dist/Tooltip/Tooltip.d.ts +3 -3
  70. package/dist/Typography/Typography.d.ts +3 -3
  71. package/dist/Wizard/BaseWizardSteps/BaseWizardSteps.d.ts +2 -2
  72. package/dist/Wizard/Wizard.d.ts +3 -3
  73. package/dist/Wizard/WizardActions/WizardActions.d.ts +2 -2
  74. package/dist/Wizard/WizardStateProvider.d.ts +2 -2
  75. package/dist/Wizard/WizardSteps/WizardSteps.d.ts +2 -2
  76. package/dist/Wizard/wizardStateReducer.d.ts +5 -5
  77. package/dist/_BaseStyling_/BaseStyling.d.ts +1 -1
  78. package/dist/hooks/usePosition.d.ts +5 -5
  79. package/dist/hooks/useRepeater.d.ts +1 -1
  80. package/dist/hooks/useScroll.d.ts +1 -1
  81. package/dist/hooks/useSpacing.d.ts +1 -1
  82. package/dist/hooks/useWrapper.d.ts +1 -1
  83. package/dist/index.d.ts +55 -55
  84. package/dist/interfaces.d.ts +1 -1
  85. package/dist/react-lib-components.cjs.development.js +683 -581
  86. package/dist/react-lib-components.cjs.development.js.map +1 -1
  87. package/dist/react-lib-components.cjs.production.min.js +1 -1
  88. package/dist/react-lib-components.cjs.production.min.js.map +1 -1
  89. package/dist/react-lib-components.esm.js +683 -581
  90. package/dist/react-lib-components.esm.js.map +1 -1
  91. package/package.json +27 -16
  92. package/src/Breadcrumbs/Breadcrumbs.test.tsx +15 -15
  93. package/src/Breadcrumbs/Breadcrumbs.tsx +11 -11
  94. package/src/Button/BaseButton.module.scss +1 -1
  95. package/src/Button/BaseButton.test.tsx +27 -27
  96. package/src/Button/BaseButton.tsx +8 -8
  97. package/src/Button/Button.module.scss +5 -5
  98. package/src/Button/Button.test.tsx +39 -39
  99. package/src/Button/Button.tsx +10 -10
  100. package/src/Button/IconButton.module.scss +5 -5
  101. package/src/Button/IconButton.test.tsx +29 -29
  102. package/src/Button/IconButton.tsx +11 -11
  103. package/src/ContextMenu/ContextMenu.test.tsx +97 -76
  104. package/src/ContextMenu/ContextMenu.tsx +48 -42
  105. package/src/ContextMenu/ContextMenuItem.module.scss +1 -1
  106. package/src/ContextMenu/ContextMenuItem.tsx +8 -5
  107. package/src/DataGrid/DataGrid.test.tsx +193 -193
  108. package/src/DataGrid/DataGrid.tsx +26 -26
  109. package/src/DataGrid/DataGridActions/DataGridActions.test.tsx +63 -63
  110. package/src/DataGrid/DataGridActions/DataGridActions.tsx +15 -15
  111. package/src/DataGrid/DataGridActions/DataGridColumnsToggle.module.scss +1 -1
  112. package/src/DataGrid/DataGridActions/DataGridColumnsToggle.test.tsx +21 -21
  113. package/src/DataGrid/DataGridActions/DataGridColumnsToggle.tsx +20 -20
  114. package/src/DataGrid/DataGridBody/DataGridBody.test.tsx +40 -40
  115. package/src/DataGrid/DataGridBody/DataGridBody.tsx +10 -10
  116. package/src/DataGrid/DataGridBody/DataGridCell.module.scss +1 -1
  117. package/src/DataGrid/DataGridBody/DataGridCell.test.tsx +25 -25
  118. package/src/DataGrid/DataGridBody/DataGridCell.tsx +6 -6
  119. package/src/DataGrid/DataGridBody/DataGridRow.test.tsx +38 -38
  120. package/src/DataGrid/DataGridBody/DataGridRow.tsx +9 -9
  121. package/src/DataGrid/DataGridHeader/DataGridHeader.module.scss +1 -2
  122. package/src/DataGrid/DataGridHeader/DataGridHeader.test.tsx +119 -119
  123. package/src/DataGrid/DataGridHeader/DataGridHeader.tsx +13 -13
  124. package/src/DataGrid/DataGridHeader/DataGridHeaderCell.module.scss +2 -0
  125. package/src/DataGrid/DataGridHeader/DataGridHeaderCell.test.tsx +51 -51
  126. package/src/DataGrid/DataGridHeader/DataGridHeaderCell.tsx +14 -14
  127. package/src/DataGrid/datagrid.interfaces.ts +1 -1
  128. package/src/Form/Checkbox/Checkbox.test.tsx +74 -74
  129. package/src/Form/Checkbox/Checkbox.tsx +27 -27
  130. package/src/Form/Fieldset/Fieldset.module.scss +1 -1
  131. package/src/Form/Fieldset/Fieldset.test.tsx +35 -35
  132. package/src/Form/Fieldset/Fieldset.tsx +27 -27
  133. package/src/Form/Form.test.tsx +18 -18
  134. package/src/Form/Form.tsx +3 -3
  135. package/src/Form/FormControl/FormControl.test.tsx +22 -22
  136. package/src/Form/FormControl/FormControl.tsx +10 -10
  137. package/src/Form/FormGroup/FormGroup.test.tsx +37 -37
  138. package/src/Form/FormGroup/FormGroup.tsx +16 -16
  139. package/src/Form/FormHelperText/FormHelperText.test.tsx +18 -18
  140. package/src/Form/FormHelperText/FormHelperText.tsx +7 -7
  141. package/src/Form/FormSelectorWrapper/FormSelectorWrapper.test.tsx +15 -15
  142. package/src/Form/FormSelectorWrapper/FormSelectorWrapper.tsx +14 -14
  143. package/src/Form/Input/Input.module.scss +20 -44
  144. package/src/Form/Input/Input.test.tsx +121 -73
  145. package/src/Form/Input/Input.tsx +96 -35
  146. package/src/Form/Label/Label.test.tsx +13 -13
  147. package/src/Form/Label/Label.tsx +6 -6
  148. package/src/Form/Radio/Radio.test.tsx +35 -35
  149. package/src/Form/Radio/Radio.tsx +17 -17
  150. package/src/Form/Select/Option.test.tsx +10 -10
  151. package/src/Form/Select/Option.tsx +8 -8
  152. package/src/Form/Select/Select.module.scss +7 -9
  153. package/src/Form/Select/Select.test.tsx +144 -141
  154. package/src/Form/Select/Select.tsx +79 -78
  155. package/src/Form/Textarea/Textarea.module.scss +8 -18
  156. package/src/Form/Textarea/Textarea.test.tsx +27 -27
  157. package/src/Form/Textarea/Textarea.tsx +33 -13
  158. package/src/Form/Toggle/Toggle.module.scss +1 -1
  159. package/src/Form/Toggle/Toggle.test.tsx +22 -22
  160. package/src/Form/Toggle/Toggle.tsx +10 -10
  161. package/src/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.test.tsx +39 -39
  162. package/src/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.tsx +12 -12
  163. package/src/Form/Wrapper/InputWrapper/InputWrapper.module.scss +2 -8
  164. package/src/Form/Wrapper/InputWrapper/InputWrapper.test.tsx +55 -55
  165. package/src/Form/Wrapper/InputWrapper/InputWrapper.tsx +30 -35
  166. package/src/Form/Wrapper/RadioWrapper/RadioWrapper.test.tsx +35 -35
  167. package/src/Form/Wrapper/RadioWrapper/RadioWrapper.tsx +12 -12
  168. package/src/Form/Wrapper/SelectWrapper/SelectWrapper.test.tsx +55 -55
  169. package/src/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +12 -12
  170. package/src/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss +2 -11
  171. package/src/Form/Wrapper/TextareaWrapper/TextareaWrapper.test.tsx +50 -50
  172. package/src/Form/Wrapper/TextareaWrapper/TextareaWrapper.tsx +22 -22
  173. package/src/Form/Wrapper/Wrapper/Wrapper.module.scss +2 -2
  174. package/src/Form/Wrapper/Wrapper/Wrapper.test.tsx +11 -11
  175. package/src/Form/Wrapper/Wrapper/Wrapper.tsx +17 -17
  176. package/src/Form/form.interfaces.ts +2 -2
  177. package/src/Icon/Icon.module.scss +71 -71
  178. package/src/Icon/Icon.test.tsx +18 -18
  179. package/src/Icon/Icon.tsx +70 -70
  180. package/src/Link/Link.module.scss +5 -5
  181. package/src/Link/Link.test.tsx +76 -76
  182. package/src/Link/Link.tsx +27 -27
  183. package/src/Link/types.d.ts +2 -2
  184. package/src/Notifications/BaseModal/BaseModal.module.scss +1 -1
  185. package/src/Notifications/BaseModal/BaseModal.test.tsx +53 -53
  186. package/src/Notifications/BaseModal/BaseModal.tsx +16 -16
  187. package/src/Notifications/BaseModal/BaseModalActions/BaseModalActions.test.tsx +13 -13
  188. package/src/Notifications/BaseModal/BaseModalActions/BaseModalActions.tsx +5 -5
  189. package/src/Notifications/BaseModal/BaseModalContent/BaseModalContent.test.tsx +16 -16
  190. package/src/Notifications/BaseModal/BaseModalContent/BaseModalContent.tsx +5 -5
  191. package/src/Notifications/BaseModal/BaseModalHeader/BaseModalHeader.test.tsx +19 -19
  192. package/src/Notifications/BaseModal/BaseModalHeader/BaseModalHeader.tsx +10 -10
  193. package/src/Notifications/Dialog/Dialog.test.tsx +35 -35
  194. package/src/Notifications/Dialog/Dialog.tsx +19 -19
  195. package/src/Notifications/Dialog/DialogActions/DialogActions.test.tsx +14 -14
  196. package/src/Notifications/Dialog/DialogActions/DialogActions.tsx +6 -6
  197. package/src/Notifications/Dialog/DialogTitle/DialogTitle.test.tsx +12 -12
  198. package/src/Notifications/Dialog/DialogTitle/DialogTitle.tsx +6 -6
  199. package/src/Notifications/DiscardChangesModal/DiscardChangesDialog/DiscardChangesDialog.test.tsx +20 -20
  200. package/src/Notifications/DiscardChangesModal/DiscardChangesDialog/DiscardChangesDialog.tsx +7 -7
  201. package/src/Notifications/DiscardChangesModal/DiscardChangesModal.test.tsx +36 -36
  202. package/src/Notifications/DiscardChangesModal/DiscardChangesModal.tsx +8 -8
  203. package/src/Notifications/Modal/Modal.test.tsx +6 -6
  204. package/src/Notifications/Modal/Modal.tsx +1 -1
  205. package/src/Notifications/Modal/ModalActions/ModalActions.tsx +2 -2
  206. package/src/Notifications/Modal/ModalContent/ModalContent.tsx +2 -2
  207. package/src/Notifications/Modal/ModalHeader/ModalHeader.tsx +2 -2
  208. package/src/Notifications/SlideInModal/SlideInModal.test.tsx +16 -16
  209. package/src/Notifications/SlideInModal/SlideInModal.tsx +16 -11
  210. package/src/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.test.tsx +16 -16
  211. package/src/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.tsx +6 -6
  212. package/src/Notifications/Snackbar/SnackbarItem/SnackbarItem.module.scss +2 -2
  213. package/src/Notifications/Snackbar/SnackbarItem/SnackbarItem.test.tsx +17 -17
  214. package/src/Notifications/Snackbar/SnackbarItem/SnackbarItem.tsx +23 -23
  215. package/src/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.test.tsx +32 -32
  216. package/src/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.tsx +18 -18
  217. package/src/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.tsx +3 -3
  218. package/src/Notifications/Snackbar/interfaces.ts +2 -2
  219. package/src/Notifications/Snackbar/useSnackbar.ts +2 -2
  220. package/src/Pagination/Pagination.module.scss +2 -0
  221. package/src/Pagination/Pagination.test.tsx +47 -47
  222. package/src/Pagination/Pagination.tsx +35 -35
  223. package/src/Popover/Popover.test.tsx +19 -19
  224. package/src/Popover/Popover.tsx +7 -7
  225. package/src/Skeleton/Skeleton.module.scss +2 -2
  226. package/src/Skeleton/Skeleton.test.tsx +29 -29
  227. package/src/Skeleton/Skeleton.tsx +10 -10
  228. package/src/StatusIndicator/StatusIndicator.test.tsx +38 -38
  229. package/src/StatusIndicator/StatusIndicator.tsx +9 -9
  230. package/src/Tabs/Tab.test.tsx +13 -13
  231. package/src/Tabs/Tab.tsx +1 -1
  232. package/src/Tabs/TabButton.test.tsx +28 -28
  233. package/src/Tabs/TabButton.tsx +7 -7
  234. package/src/Tabs/TabPanel.test.tsx +30 -30
  235. package/src/Tabs/TabPanel.tsx +4 -4
  236. package/src/Tabs/Tabs.test.tsx +93 -93
  237. package/src/Tabs/Tabs.tsx +25 -25
  238. package/src/TextEllipsis/TextEllipsis.test.tsx +22 -22
  239. package/src/TextEllipsis/TextEllipsis.tsx +6 -6
  240. package/src/Tiles/Tile.module.scss +1 -1
  241. package/src/Tiles/Tile.test.tsx +42 -42
  242. package/src/Tiles/Tile.tsx +22 -22
  243. package/src/Tiles/Tiles.test.tsx +30 -30
  244. package/src/Tiles/Tiles.tsx +9 -9
  245. package/src/Tooltip/Tooltip.test.tsx +35 -35
  246. package/src/Tooltip/Tooltip.tsx +21 -21
  247. package/src/Typography/Typography.module.scss +1 -1
  248. package/src/Typography/Typography.test.tsx +49 -49
  249. package/src/Typography/Typography.tsx +42 -42
  250. package/src/Wizard/BaseWizardSteps/BaseWizardSteps.module.scss +1 -1
  251. package/src/Wizard/BaseWizardSteps/BaseWizardSteps.test.tsx +26 -26
  252. package/src/Wizard/BaseWizardSteps/BaseWizardSteps.tsx +24 -24
  253. package/src/Wizard/Wizard.test.tsx +56 -56
  254. package/src/Wizard/Wizard.tsx +6 -6
  255. package/src/Wizard/WizardActions/WizardActions.test.tsx +34 -34
  256. package/src/Wizard/WizardActions/WizardActions.tsx +14 -14
  257. package/src/Wizard/WizardStateProvider.tsx +3 -3
  258. package/src/Wizard/WizardSteps/WizardSteps.test.tsx +27 -27
  259. package/src/Wizard/WizardSteps/WizardSteps.tsx +7 -7
  260. package/src/Wizard/wizardStateReducer.ts +9 -9
  261. package/src/_BaseStyling_/BaseStyling.test.tsx +14 -14
  262. package/src/_BaseStyling_/BaseStyling.tsx +50 -50
  263. package/src/hooks/useAnimation.test.tsx +12 -12
  264. package/src/hooks/useAnimation.ts +4 -4
  265. package/src/hooks/useBodyClick.test.tsx +8 -8
  266. package/src/hooks/useBodyClick.ts +3 -3
  267. package/src/hooks/useFormSelector.test.ts +17 -17
  268. package/src/hooks/useFormSelector.ts +4 -4
  269. package/src/hooks/usePosition.test.tsx +215 -215
  270. package/src/hooks/usePosition.ts +73 -72
  271. package/src/hooks/useRepeater.test.tsx +26 -26
  272. package/src/hooks/useRepeater.ts +5 -5
  273. package/src/hooks/useScroll.test.tsx +5 -5
  274. package/src/hooks/useScroll.ts +3 -3
  275. package/src/hooks/useSpacing.test.ts +40 -40
  276. package/src/hooks/useSpacing.ts +3 -3
  277. package/src/hooks/useWrapper.test.ts +12 -12
  278. package/src/hooks/useWrapper.ts +10 -10
  279. package/src/index.ts +67 -67
  280. package/src/interfaces.ts +1 -1
  281. package/src/mixins.module.scss +76 -27
  282. package/src/types.d.ts +1 -1
  283. package/src/util/helper.test.tsx +25 -25
  284. package/src/util/helper.tsx +64 -64
@@ -4,17 +4,17 @@ import React, {
4
4
  ReactNode,
5
5
  useEffect,
6
6
  useRef,
7
- useState,
8
- } from 'react';
9
- import { Props as ButtonProps } from '../Button/Button';
10
- import { Props as IconButtonProps } from '../Button/IconButton';
11
- import { Popover } from '../Popover/Popover';
12
- import { Placement, Offset } from '../hooks/usePosition';
13
- import classes from './ContextMenu.module.scss';
14
- import { useBodyClick } from '../hooks/useBodyClick';
15
- import { createPortal } from 'react-dom';
7
+ useState
8
+ } from "react";
9
+ import { Props as ButtonProps } from "../Button/Button";
10
+ import { Props as IconButtonProps } from "../Button/IconButton";
11
+ import { Popover } from "../Popover/Popover";
12
+ import { Placement, Offset } from "../hooks/usePosition";
13
+ import classes from "./ContextMenu.module.scss";
14
+ import { useBodyClick } from "../hooks/useBodyClick";
15
+ import { createPortal } from "react-dom";
16
16
 
17
- export interface Props extends ComponentPropsWithRef<'div'> {
17
+ export interface Props extends ComponentPropsWithRef<"div"> {
18
18
  trigger: ReactElement<ButtonProps> | ReactElement<IconButtonProps>;
19
19
  children: ReactNode;
20
20
  placement?: Placement;
@@ -36,9 +36,9 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
36
36
  show = false,
37
37
  onShow,
38
38
  onClose,
39
- placement = { horizontal: 'right', vertical: 'top' },
39
+ placement = { horizontal: "right", vertical: "top" },
40
40
  offset = { top: 0, bottom: 0, left: 0, right: 0 },
41
- transformOrigin = { horizontal: 'left', vertical: 'top' },
41
+ transformOrigin = { horizontal: "left", vertical: "top" },
42
42
  domRoot = document.body,
43
43
  ...rest
44
44
  }: Props,
@@ -46,6 +46,7 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
46
46
  ) => {
47
47
  const anchorEl = useRef<HTMLButtonElement>(null);
48
48
  const [showContextMenu, setShowContextMenu] = useState(show);
49
+ const [hasBeenClosed, setHasBeenClosed] = useState(false);
49
50
  const [selectedContextMenuItem, setSelectedContextMenuItem] = useState(-1);
50
51
  const [focusedContextMenuItem, setFocusedContextMenuItem] = useState(-1);
51
52
  const [shouldClick, setShouldClick] =
@@ -55,7 +56,7 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
55
56
  const [childrenCount] = useState(React.Children.count(children));
56
57
 
57
58
  if (!id) {
58
- throw new Error('You need to provide an ID to the context menu');
59
+ throw new Error("You need to provide an ID to the context menu");
59
60
  }
60
61
 
61
62
  const onArrowNavigation = (event: React.KeyboardEvent) => {
@@ -64,15 +65,15 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
64
65
  }
65
66
 
66
67
  const codesToPrevenDefault = [
67
- 'ArrowDown',
68
- 'ArrowUp',
69
- 'ArrowLeft',
70
- 'ArrowRight',
71
- 'Enter',
72
- 'Space',
73
- 'Escape',
74
- 'End',
75
- 'Home',
68
+ "ArrowDown",
69
+ "ArrowUp",
70
+ "ArrowLeft",
71
+ "ArrowRight",
72
+ "Enter",
73
+ "Space",
74
+ "Escape",
75
+ "End",
76
+ "Home"
76
77
  ];
77
78
 
78
79
  if (codesToPrevenDefault.includes(event.code)) {
@@ -80,22 +81,22 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
80
81
  }
81
82
 
82
83
  switch (event.code) {
83
- case 'ArrowDown':
84
+ case "ArrowDown":
84
85
  if (!showContextMenu) {
85
86
  setShowContextMenu(true);
86
87
  return;
87
88
  }
88
- setFocusedContextMenuItem((prevState) => {
89
+ setFocusedContextMenuItem(prevState => {
89
90
  return prevState + 1 > childrenCount - 1 ? 0 : prevState + 1;
90
91
  });
91
92
  return;
92
- case 'ArrowUp':
93
- setFocusedContextMenuItem((prevState) => {
93
+ case "ArrowUp":
94
+ setFocusedContextMenuItem(prevState => {
94
95
  return prevState - 1 < 0 ? childrenCount - 1 : prevState - 1;
95
96
  });
96
97
  return;
97
- case 'Enter':
98
- case 'Space':
98
+ case "Enter":
99
+ case "Space":
99
100
  if (!showContextMenu) {
100
101
  setShowContextMenu(true);
101
102
  return;
@@ -105,22 +106,26 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
105
106
  setSelectedContextMenuItem(focusedContextMenuItem);
106
107
  setShowContextMenu(false);
107
108
  return;
108
- case 'Tab':
109
- case 'Escape':
109
+ case "Tab":
110
+ case "Escape":
110
111
  setShowContextMenu(false);
111
112
  return;
112
- case 'End':
113
+ case "End":
113
114
  setFocusedContextMenuItem(childrenCount - 1);
114
115
  return;
115
- case 'Home':
116
+ case "Home":
116
117
  setFocusedContextMenuItem(0);
117
118
  return;
118
119
  }
119
120
  };
120
121
 
121
122
  useBodyClick(
122
- (event) => {
123
- return showContextMenu && anchorEl.current !== event.target;
123
+ event => {
124
+ return (
125
+ showContextMenu &&
126
+ anchorEl.current !== event.target &&
127
+ anchorEl.current !== (event.target as HTMLElement).parentElement
128
+ );
124
129
  },
125
130
  () => {
126
131
  setShowContextMenu(false);
@@ -133,20 +138,21 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
133
138
  onShow && onShow();
134
139
  } else {
135
140
  onClose && onClose();
141
+ !hasBeenClosed && setHasBeenClosed(true);
136
142
  setFocusedContextMenuItem(-1);
137
- anchorEl.current && anchorEl.current.focus();
143
+ hasBeenClosed && anchorEl.current && anchorEl.current.focus();
138
144
  }
139
145
  }, [showContextMenu]);
140
146
 
141
147
  const renderTrigger = () =>
142
148
  React.cloneElement(trigger, {
143
149
  id: id,
144
- 'aria-haspopup': 'true',
145
- 'aria-controls': `${id}-menu`,
146
- 'aria-expanded': showContextMenu,
150
+ "aria-haspopup": "true",
151
+ "aria-controls": `${id}-menu`,
152
+ "aria-expanded": showContextMenu,
147
153
  onClick: () => setShowContextMenu(!showContextMenu),
148
154
  tabIndex: 0,
149
- ref: anchorEl,
155
+ ref: anchorEl
150
156
  });
151
157
 
152
158
  const renderChildren = () => {
@@ -161,13 +167,13 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
161
167
  hasFocus: focusedContextMenuItem === index,
162
168
  isSelected: selectedContextMenuItem === index,
163
169
  contextMenuOpened: showContextMenu,
164
- shouldClick: shouldClick,
170
+ shouldClick: shouldClick
165
171
  });
166
172
  });
167
173
  };
168
174
 
169
175
  return (
170
- <div {...rest} ref={ref} onKeyDown={onArrowNavigation} className={classes['context-menu']}>
176
+ <div {...rest} ref={ref} onKeyDown={onArrowNavigation} className={classes["context-menu"]}>
171
177
  {renderTrigger()}
172
178
  {createPortal(
173
179
  <Popover
@@ -177,7 +183,7 @@ export const ContextMenu = React.forwardRef<HTMLDivElement, Props>(
177
183
  anchorEl={anchorEl}
178
184
  show={showContextMenu}
179
185
  >
180
- <ul className={classes['menu']} id={`${id}-menu`} aria-describedby={id} role="menu">
186
+ <ul className={classes["menu"]} id={`${id}-menu`} aria-describedby={id} role="menu">
181
187
  {renderChildren()}
182
188
  </ul>
183
189
  </Popover>,
@@ -14,7 +14,7 @@
14
14
  }
15
15
 
16
16
  &:after {
17
- content: '';
17
+ content: "";
18
18
  position: absolute;
19
19
  top: 0;
20
20
  left: 0;
@@ -1,7 +1,7 @@
1
- import React, { ComponentPropsWithRef, createRef, RefObject, useEffect } from 'react';
2
- import classes from './ContextMenuItem.module.scss';
1
+ import React, { ComponentPropsWithRef, createRef, RefObject, useEffect } from "react";
2
+ import classes from "./ContextMenuItem.module.scss";
3
3
 
4
- export interface Props extends Omit<ComponentPropsWithRef<'button'>, 'onClick'> {
4
+ export interface Props extends Omit<ComponentPropsWithRef<"button">, "onClick"> {
5
5
  children?: string;
6
6
  hasFocus?: boolean;
7
7
  isSelected?: boolean;
@@ -25,6 +25,7 @@ export const ContextMenuItem = React.forwardRef<HTMLButtonElement, Props>(
25
25
  childIndex,
26
26
  contextMenuOpened,
27
27
  shouldClick,
28
+ className,
28
29
  ...rest
29
30
  }: Props,
30
31
  ref
@@ -45,12 +46,14 @@ export const ContextMenuItem = React.forwardRef<HTMLButtonElement, Props>(
45
46
  }, [hasFocus, innerButtonRef, contextMenuOpened]);
46
47
 
47
48
  return (
48
- <li role="menuitem" className={classes['context-menu-item']}>
49
+ <li role="none" className={`${classes["context-menu-item"]} ${className ?? ""}`}>
49
50
  <button
51
+ role="menuitem"
50
52
  {...rest}
51
53
  ref={innerButtonRef}
52
54
  data-focus={hasFocus}
53
- onClick={(event) => {
55
+ tabIndex={-1}
56
+ onClick={event => {
54
57
  onClick && onClick(event);
55
58
  onSelectedChange && childIndex && onSelectedChange(childIndex);
56
59
  }}