@ringcentral/spring-ui 1.7.0 → 1.9.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 (282) hide show
  1. package/Alert.js +3 -3
  2. package/Announcement.js +1 -1
  3. package/Autocomplete.js +216 -243
  4. package/Avatar.js +27 -13
  5. package/BottomNavigation.js +0 -3
  6. package/Checkbox.js +0 -2
  7. package/DatePicker.js +5 -13
  8. package/DateUtilsContext.js +0 -1
  9. package/Dialer.js +2 -50
  10. package/Dialog.js +18 -6
  11. package/Dropdown.js +0 -7
  12. package/FocusTrap.js +0 -32
  13. package/InlineEditable.js +0 -4
  14. package/Link.js +1 -1
  15. package/ListItem.js +1 -1
  16. package/ListNavigation.js +0 -6
  17. package/Menu.js +1 -1
  18. package/MenuDivider.js +2 -2
  19. package/MenuFooter.js +4 -4
  20. package/MenuHeader.js +4 -4
  21. package/MenuItem.js +1 -1
  22. package/MenuItemText.js +1 -1
  23. package/Modal.js +1 -1
  24. package/PageHeader.js +6 -4
  25. package/Popper.js +0 -1
  26. package/Rating.js +0 -5
  27. package/SingleFilter.js +0 -1
  28. package/Slider.js +1 -4
  29. package/Snackbar.js +0 -14
  30. package/SortableListItem.js +0 -1
  31. package/SplitButton.js +1 -3
  32. package/StatusIndicator.js +1 -1
  33. package/StepButton.js +2 -3
  34. package/StepContent.js +3 -8
  35. package/SubMenu.js +0 -4
  36. package/SwipeableDrawer.js +37 -162
  37. package/Switch.js +1 -4
  38. package/Tab.js +7 -8
  39. package/TabContext.js +0 -5
  40. package/TableBody.js +1 -1
  41. package/TableCell.js +0 -6
  42. package/TableRow.js +2 -4
  43. package/Tabs.js +22 -121
  44. package/Text.js +2 -4
  45. package/TimePicker.js +7 -46
  46. package/VirtualizedList.js +6 -39
  47. package/VirtualizedMenu.js +1 -1
  48. package/chunks/Alert.js +8 -7
  49. package/chunks/BottomNavigationItem.js +0 -1
  50. package/chunks/Button.js +0 -1
  51. package/chunks/Chip.js +0 -5
  52. package/chunks/Drawer.js +1 -30
  53. package/chunks/ListItem.js +3 -6
  54. package/chunks/Menu.js +6 -5
  55. package/chunks/MenuDivider.js +2 -3
  56. package/chunks/MenuItemText.js +3 -3
  57. package/chunks/MenuList.js +3 -6
  58. package/chunks/Modal.js +1 -1
  59. package/chunks/PickerTextField.js +0 -1
  60. package/chunks/Popover.js +0 -5
  61. package/chunks/Select.js +2 -39
  62. package/chunks/Squircle.js +0 -7
  63. package/chunks/StatusIndicator.js +1 -0
  64. package/chunks/StepIcon.js +1 -3
  65. package/chunks/StepperContext.js +0 -7
  66. package/chunks/Tooltip.js +0 -36
  67. package/chunks/VirtualizedMenu.js +45 -99
  68. package/chunks/getFade.js +4 -0
  69. package/chunks/useFocusTrapStack.js +0 -8
  70. package/chunks/useHelperTextId.js +0 -24
  71. package/chunks/useListNavigation.js +5 -17
  72. package/chunks/useMenuItemSelect.js +9 -22
  73. package/chunks/useMotionSafeTransition.js +0 -4
  74. package/chunks/useNestedParentMenu.js +5 -18
  75. package/chunks/usePrefersReducedMotion.js +6 -12
  76. package/chunks/useTooltipForceHide.js +0 -4
  77. package/chunks/useTrayNavigate.js +0 -1
  78. package/index.css +434 -135
  79. package/index.js +1 -1
  80. package/package.json +4 -4
  81. package/src/Accordion/Accordion.d.ts +1 -1
  82. package/src/Accordion/Accordion.type.d.ts +0 -21
  83. package/src/AccordionHeader/AccordionHeader.d.ts +1 -1
  84. package/src/AccordionHeader/AccordionHeader.type.d.ts +0 -14
  85. package/src/Alert/Alert.d.ts +1 -1
  86. package/src/Alert/Alert.type.d.ts +0 -32
  87. package/src/Animation/components/ExpandCollapseCaret/ExpandCollapseCaret.d.ts +0 -4
  88. package/src/Animation/components/ShowHideEye/ShowHideEye.d.ts +0 -4
  89. package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +0 -4
  90. package/src/Autocomplete/Autocomplete.d.ts +0 -5
  91. package/src/Autocomplete/Autocomplete.type.d.ts +0 -84
  92. package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +5 -89
  93. package/src/Autocomplete/SuggestionList/SuggestionListItem.d.ts +0 -2
  94. package/src/Autocomplete/SuggestionList/utils/SuggestionListItem.d.ts +1 -13
  95. package/src/Autocomplete/SuggestionList/utils/useDynamicHeight.d.ts +0 -6
  96. package/src/Autocomplete/SuggestionList/utils/useHighlightScroll.d.ts +4 -23
  97. package/src/Autocomplete/SuggestionList/utils/useSuggestionList.d.ts +3 -41
  98. package/src/Autocomplete/SuggestionList/utils/useSuggestionListGroup.d.ts +0 -49
  99. package/src/Autocomplete/useAutocomplete.d.ts +5 -66
  100. package/src/Autocomplete/useAutocompleteTag.d.ts +3 -36
  101. package/src/Avatar/Avatar.type.d.ts +0 -58
  102. package/src/AvatarGroup/AvatarGroup.type.d.ts +0 -3
  103. package/src/Backdrop/Backdrop.type.d.ts +0 -4
  104. package/src/Badge/Badge.type.d.ts +0 -33
  105. package/src/Block/Block.type.d.ts +0 -24
  106. package/src/BlockHeader/BlockHeader.type.d.ts +0 -5
  107. package/src/BottomNavigation/BottomNavigation.type.d.ts +0 -34
  108. package/src/BottomNavigationItem/BottomNavigationItem.type.d.ts +0 -39
  109. package/src/Button/Button.type.d.ts +0 -30
  110. package/src/CallButton/CallButton.type.d.ts +0 -4
  111. package/src/Checkbox/Checkbox.type.d.ts +0 -17
  112. package/src/Chip/Chip.type.d.ts +0 -41
  113. package/src/CircularProgressIndicator/CircularProgressIndicator.d.ts +1 -1
  114. package/src/CircularProgressIndicator/CircularProgressIndicator.type.d.ts +0 -19
  115. package/src/DatePicker/Calendar.d.ts +1 -20
  116. package/src/DatePicker/DatePicker.type.d.ts +0 -18
  117. package/src/DatePicker/DatePickerHeader.d.ts +1 -12
  118. package/src/DatePicker/Day.d.ts +1 -8
  119. package/src/DatePicker/Year.d.ts +1 -7
  120. package/src/DatePicker/Years.d.ts +0 -7
  121. package/src/Dialer/DialDelete/DialDelete.d.ts +0 -3
  122. package/src/Dialer/DialPad/DialPad.d.ts +0 -106
  123. package/src/Dialer/DialPad/utils/types.d.ts +0 -5
  124. package/src/Dialer/DialPad/utils/useDialKeyboard.d.ts +0 -5
  125. package/src/Dialer/DialPad/utils/useKeyAudio.d.ts +0 -9
  126. package/src/Dialer/DialPadButton/DialPadButton.d.ts +0 -14
  127. package/src/Dialer/DialTextField/DialTextField.d.ts +0 -23
  128. package/src/Dialer/DialTextField/utils/getDialPadValueOnlyRegex.d.ts +0 -3
  129. package/src/Dialer/DialTextField/utils/useFixedEndSelection.d.ts +0 -3
  130. package/src/Dialog/Dialog.classes.d.ts +1 -1
  131. package/src/Dialog/Dialog.d.ts +1 -1
  132. package/src/Dialog/Dialog.type.d.ts +3 -11
  133. package/src/Divider/Divider.type.d.ts +0 -17
  134. package/src/DragHandle/DragHandle.type.d.ts +0 -4
  135. package/src/Drawer/Drawer.d.ts +1 -29
  136. package/src/Drawer/Drawer.type.d.ts +0 -84
  137. package/src/Dropdown/Dropdown.type.d.ts +0 -64
  138. package/src/EmptyState/EmptyState.d.ts +1 -1
  139. package/src/EmptyState/EmptyState.type.d.ts +0 -12
  140. package/src/FabButton/FabButton.type.d.ts +0 -5
  141. package/src/FocusTrap/FocusTrap.d.ts +0 -38
  142. package/src/FocusTrap/useFocusTrapStack.d.ts +0 -9
  143. package/src/FormField/FormField.type.d.ts +0 -26
  144. package/src/FormField/useHelperTextId.d.ts +0 -25
  145. package/src/FormLabel/FormLabel.d.ts +1 -1
  146. package/src/FormLabel/FormLabel.type.d.ts +0 -14
  147. package/src/Icon/Icon.d.ts +1 -1
  148. package/src/Icon/Icon.type.d.ts +0 -15
  149. package/src/IconButton/IconButton.type.d.ts +0 -30
  150. package/src/IconButton/IconButtonLabel.d.ts +1 -1
  151. package/src/IconButton/IconButtonLabel.type.d.ts +0 -3
  152. package/src/IconButtonGroup/IconButtonGroup.type.d.ts +0 -8
  153. package/src/InlineEditable/InlineEditable.type.d.ts +0 -75
  154. package/src/LinearProgressIndicator/LinearProgressIndicator.type.d.ts +0 -31
  155. package/src/Link/Link.classes.d.ts +1 -1
  156. package/src/Link/Link.type.d.ts +1 -10
  157. package/src/ListItem/ListItem.type.d.ts +0 -41
  158. package/src/ListItemText/ListItemText.d.ts +1 -1
  159. package/src/ListItemText/ListItemText.type.d.ts +0 -21
  160. package/src/ListNavigation/useListNavigation.d.ts +0 -16
  161. package/src/Menu/Menu.d.ts +1 -1
  162. package/src/Menu/Menu.type.d.ts +0 -10
  163. package/src/MenuFooter/MenuFooter.type.d.ts +0 -4
  164. package/src/MenuHeader/MenuHeader.type.d.ts +0 -10
  165. package/src/MenuItem/MenuItem.d.ts +1 -1
  166. package/src/MenuItem/MenuItem.type.d.ts +0 -19
  167. package/src/MenuItem/MenuItemSelectContext.d.ts +0 -3
  168. package/src/MenuItem/useMenuItemSelect.d.ts +0 -21
  169. package/src/MenuItemText/MenuItemText.d.ts +1 -1
  170. package/src/MenuItemText/MenuItemText.type.d.ts +0 -17
  171. package/src/MenuList/MenuList.type.d.ts +0 -4
  172. package/src/MenuList/MenuListContext.d.ts +0 -6
  173. package/src/Modal/InnerModal.d.ts +2 -2
  174. package/src/Modal/InnerModal.type.d.ts +0 -5
  175. package/src/Modal/Modal.classes.d.ts +1 -1
  176. package/src/Modal/Modal.d.ts +3 -3
  177. package/src/Modal/Modal.type.d.ts +0 -11
  178. package/src/Modal/ModalContext.d.ts +0 -4
  179. package/src/NestedMenuContext/NestedMenuContext.d.ts +1 -1
  180. package/src/Option/Option.d.ts +1 -1
  181. package/src/Option/Option.type.d.ts +0 -3
  182. package/src/Overlap/Overlap.type.d.ts +0 -11
  183. package/src/PageHeader/PageHeader.type.d.ts +0 -4
  184. package/src/PickerTextField/PickerTextField.type.d.ts +0 -10
  185. package/src/Popover/Popover.d.ts +1 -1
  186. package/src/Popover/Popover.type.d.ts +0 -29
  187. package/src/Popper/Popper.d.ts +1 -1
  188. package/src/Popper/Popper.type.d.ts +0 -61
  189. package/src/PopperPaper/PopperPaper.d.ts +1 -1
  190. package/src/Radio/Radio.type.d.ts +0 -5
  191. package/src/RadioGroup/RadioGroup.d.ts +1 -1
  192. package/src/RadioGroup/RadioGroup.type.d.ts +0 -4
  193. package/src/Rating/Rating.d.ts +1 -1
  194. package/src/Rating/Rating.type.d.ts +0 -74
  195. package/src/Rating/RatingItem.d.ts +1 -1
  196. package/src/Select/Select.type.d.ts +0 -84
  197. package/src/SingleFilter/FilterButton/FilterButton.d.ts +1 -1
  198. package/src/SingleFilter/FilterButton/FilterButton.type.d.ts +0 -16
  199. package/src/SingleFilter/SingleFilter.d.ts +1 -1
  200. package/src/SingleFilter/SingleFilter.type.d.ts +0 -26
  201. package/src/Skeleton/Skeleton.type.d.ts +0 -1
  202. package/src/Skeleton/SkeletonContainer/SkeletonContainer.classes.d.ts +1 -1
  203. package/src/Slider/Slider.classes.d.ts +1 -5
  204. package/src/Slider/Slider.d.ts +2 -2
  205. package/src/Slider/Slider.type.d.ts +0 -104
  206. package/src/Snackbar/Snackbar.type.d.ts +0 -18
  207. package/src/SortableListItem/SortableListItemOverlay.d.ts +1 -1
  208. package/src/SplitButton/SplitButton.d.ts +1 -1
  209. package/src/SplitButton/SplitButton.type.d.ts +0 -21
  210. package/src/Squircle/Squircle.type.d.ts +0 -3
  211. package/src/StatusIndicator/StatusIndicator.classes.d.ts +1 -1
  212. package/src/StatusIndicator/StatusIndicator.type.d.ts +1 -9
  213. package/src/Step/Step.type.d.ts +0 -29
  214. package/src/Step/StepContext.d.ts +0 -7
  215. package/src/StepButton/StepButton.type.d.ts +0 -15
  216. package/src/StepContent/StepContent.d.ts +1 -1
  217. package/src/StepContent/StepContent.type.d.ts +0 -7
  218. package/src/StepIcon/StepIcon.type.d.ts +0 -26
  219. package/src/StepLabel/StepLabel.d.ts +1 -1
  220. package/src/StepLabel/StepLabel.type.d.ts +0 -23
  221. package/src/Stepper/Stepper.type.d.ts +0 -27
  222. package/src/SubMenu/PopperMenu.d.ts +1 -1
  223. package/src/SubMenu/SubMenu.d.ts +1 -1
  224. package/src/SwipeableDrawer/SwipeableDrawer.d.ts +1 -27
  225. package/src/SwipeableDrawer/SwipeableDrawer.types.d.ts +0 -67
  226. package/src/SwipeableDrawer/hooks/useDrawerGestures.d.ts +0 -110
  227. package/src/SwipeableDrawer/hooks/useElementSizeObserver.d.ts +0 -5
  228. package/src/SwipeableDrawer/hooks/useSnapPoints.d.ts +0 -60
  229. package/src/Switch/Switch.type.d.ts +0 -9
  230. package/src/Tab/Tab.classes.d.ts +3 -2
  231. package/src/Tab/Tab.d.ts +1 -1
  232. package/src/Tab/Tab.type.d.ts +0 -29
  233. package/src/TabContext/TabContext.d.ts +0 -4
  234. package/src/TabContext/TabContext.type.d.ts +0 -7
  235. package/src/TabPanel/TabPanel.d.ts +1 -1
  236. package/src/TabPanel/TabPanel.type.d.ts +0 -10
  237. package/src/Table/Table.type.d.ts +0 -19
  238. package/src/TableBody/TableBody.type.d.ts +0 -3
  239. package/src/TableCell/TableCell.d.ts +0 -4
  240. package/src/TableCell/TableCell.type.d.ts +0 -35
  241. package/src/TableContainer/TableContainer.type.d.ts +0 -7
  242. package/src/TableFooter/TableFooter.type.d.ts +0 -3
  243. package/src/TableHead/TableHead.type.d.ts +0 -6
  244. package/src/TablePagination/TablePagination.type.d.ts +0 -47
  245. package/src/TableRow/TableRow.type.d.ts +0 -17
  246. package/src/Tabs/TabMoreMenu.d.ts +0 -16
  247. package/src/Tabs/TabScrollButton.d.ts +1 -11
  248. package/src/Tabs/Tabs.classes.d.ts +1 -1
  249. package/src/Tabs/Tabs.d.ts +1 -1
  250. package/src/Tabs/Tabs.type.d.ts +2 -36
  251. package/src/Tabs/TabsContext.d.ts +2 -0
  252. package/src/Tabs/hooks/useTabsScroller.d.ts +0 -30
  253. package/src/Tag/Tag.d.ts +1 -1
  254. package/src/Tag/Tag.type.d.ts +0 -12
  255. package/src/Text/Text.type.d.ts +0 -13
  256. package/src/TextField/TextField.type.d.ts +0 -64
  257. package/src/Textarea/Textarea.d.ts +1 -1
  258. package/src/Textarea/Textarea.type.d.ts +0 -13
  259. package/src/TimePicker/NumberPicker.d.ts +1 -1
  260. package/src/TimePicker/NumberPicker.type.d.ts +0 -12
  261. package/src/TimePicker/SelectionView.d.ts +0 -6
  262. package/src/TimePicker/TimeButton.d.ts +1 -4
  263. package/src/TimePicker/TimePicker.type.d.ts +0 -11
  264. package/src/TimePicker/ToggleText.d.ts +1 -1
  265. package/src/TimePicker/ToggleText.type.d.ts +0 -3
  266. package/src/TimePicker/utils/TimeBoundary.d.ts +0 -3
  267. package/src/TimePicker/utils/TimePickerHelper.d.ts +0 -19
  268. package/src/TimePicker/utils/getNumberPickerBoundary.d.ts +0 -3
  269. package/src/Tooltip/TooltipTrigger.a11y.d.ts +0 -9
  270. package/src/Tooltip/TooltipTrigger.type.d.ts +0 -44
  271. package/src/Tooltip/TooltipView.type.d.ts +0 -25
  272. package/src/Tooltip/useTooltipForceHide.d.ts +0 -4
  273. package/src/Tray/Tray.d.ts +1 -1
  274. package/src/Tray/Tray.type.d.ts +0 -13
  275. package/src/Tray/TrayContext.d.ts +0 -4
  276. package/src/Tray/hooks/useTray.d.ts +0 -16
  277. package/src/Tray/hooks/useTrayPanel.d.ts +0 -3
  278. package/src/TrayMenu/TrayMenu.d.ts +1 -1
  279. package/src/TrayMenu/TrayMenuItem.d.ts +1 -1
  280. package/src/VirtualizedList/VirtualizedList.type.d.ts +0 -27
  281. package/src/VirtualizedMenu/VirtualizedMenu.classes.d.ts +1 -1
  282. package/src/VirtualizedMenu/VirtualizedMenu.type.d.ts +0 -17
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { createContext, useContext, forwardRef, useRef, useEffect, useCallback, useMemo } from 'react';
3
- import { useFocusVisible, useActive, useForkRef, useClasses, useId, useHover, useEventCallback } from '@ringcentral/spring-base';
2
+ import { createContext, useContext, forwardRef, useRef, useLayoutEffect, useCallback, useMemo } from 'react';
3
+ import { useFocusVisible, useActive, useForkRef, useId, useHover, useEventCallback } from '@ringcentral/spring-base';
4
4
  import { CheckBoldMd } from '@ringcentral/spring-icon';
5
- import { useThemeProps } from '@ringcentral/spring-theme';
5
+ import { useThemeProps, useClassesWithMode } from '@ringcentral/spring-theme';
6
6
  import { I as Icon } from './Icon.js';
7
7
  import './useNestedParentMenu.js';
8
8
  import { u as useNestedMenuItem } from './useNestedMenuItem.js';
@@ -15,9 +15,7 @@ const MenuListContext = createContext({
15
15
  });
16
16
  const useMenuListContext = () => useContext(MenuListContext);
17
17
 
18
- const MenuItemSelectContext =
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- createContext(null);
18
+ const MenuItemSelectContext = createContext(null);
21
19
  const useMenuItemSelectContext = () => useContext(MenuItemSelectContext);
22
20
 
23
21
  const useMenuItem = (props) => {
@@ -47,7 +45,6 @@ const useMenuItem = (props) => {
47
45
  },
48
46
  });
49
47
  const handleItemRef = useForkRef(ref, focusVisibleRef, itemRef);
50
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
48
  const getRootProps = (otherProps) => {
52
49
  return {
53
50
  role: 'menuitem',
@@ -66,9 +63,7 @@ const useVirtualizedMenuItem = (props) => {
66
63
  const { onBlur, onFocus, onKeyDown, onKeyUp, onClick, autoClose, ref } = props;
67
64
  const { keyboardNavHandlers, itemRef } = useItemNavigation() ?? {};
68
65
  const vlItemProps = useVirtualizedItemPropsContext();
69
- const { focusVisible, focusVisibleRef, focusVisibleHandlers } =
70
- // eslint-disable-next-line react-hooks/rules-of-hooks
71
- useFocusVisible({
66
+ const { focusVisible, focusVisibleRef, focusVisibleHandlers } = useFocusVisible({
72
67
  onFocus: (e) => {
73
68
  keyboardNavHandlers?.onFocus(e);
74
69
  onFocus?.(e);
@@ -92,7 +87,6 @@ const useVirtualizedMenuItem = (props) => {
92
87
  },
93
88
  });
94
89
  const handleItemRef = useForkRef(ref, focusVisibleRef, itemRef);
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
90
  const getRootProps = (otherProps) => {
97
91
  return {
98
92
  role: 'menuitem',
@@ -110,7 +104,7 @@ const useVirtualizedMenuItem = (props) => {
110
104
  const MenuItem = forwardRef((inProps, ref) => {
111
105
  const props = useThemeProps({ props: inProps, name: 'MenuItem' });
112
106
  const { classes, className, children, selected, disabled, onMouseEnter, onMouseLeave, highlighted = false, focused = false, autoClose = true, autoFocus, ...rest } = props;
113
- const cls = useClasses('menu-item', classes, className);
107
+ const cls = useClassesWithMode('menu-item', classes, className);
114
108
  const vlItemProps = useVirtualizedItemPropsContext();
115
109
  const isInVlRef = useRef(Boolean(vlItemProps));
116
110
  const useMenuItemHook = (() => {
@@ -137,13 +131,11 @@ const MenuItem = forwardRef((inProps, ref) => {
137
131
  const id = useId();
138
132
  const { hover, hoverHandlers } = useHover({ onMouseEnter, onMouseLeave });
139
133
  useNestedMenuItem({ hovered: hover, id });
140
- useEffect(() => {
134
+ useLayoutEffect(() => {
141
135
  if (autoFocus) {
142
136
  itemRef.current?.focus();
143
137
  requestAnimationFrame(() => {
144
- if (
145
- // jsdom doesn't support scrollIntoView, this avoids users needing to bring their own mock
146
- process.env.NODE_ENV === 'test' &&
138
+ if (process.env.NODE_ENV === 'test' &&
147
139
  typeof itemRef.current?.scrollIntoView !== 'function') {
148
140
  return;
149
141
  }
@@ -153,8 +145,7 @@ const MenuItem = forwardRef((inProps, ref) => {
153
145
  });
154
146
  });
155
147
  }
156
- // eslint-disable-next-line react-hooks/exhaustive-deps
157
- }, []);
148
+ }, [autoFocus]);
158
149
  return (jsx("div", { className: cls('root', {
159
150
  selectable,
160
151
  selected,
@@ -194,9 +185,6 @@ const useMenuItemSelect = (props) => {
194
185
  autoFocus = value[0] === itemValue;
195
186
  }
196
187
  const menuItemRole = selectMode === 'single' ? 'menuitemradio' : 'menuitemcheckbox';
197
- // Use appropriate ARIA attributes based on widget type and role:
198
- // - For listbox/option pattern: use aria-selected
199
- // - For menu with selectable items: use menuitemradio/menuitemcheckbox with aria-checked
200
188
  const ariaProps = widget === 'menu'
201
189
  ? { 'aria-checked': selected }
202
190
  : { 'aria-selected': selected };
@@ -210,7 +198,6 @@ const useMenuItemSelect = (props) => {
210
198
  const handleSelect = useEventCallback((itemValue) => {
211
199
  let action = Action.SELECT;
212
200
  if (isSingleMode) {
213
- // User clicked on an already selected item
214
201
  if (value === itemValue) {
215
202
  onClose?.();
216
203
  }
@@ -1,10 +1,6 @@
1
1
  import { motionTransition } from '@ringcentral/spring-theme';
2
2
  import { u as usePrefersReducedMotion } from './usePrefersReducedMotion.js';
3
3
 
4
- /**
5
- * A hook that returns an instant transition if the user has reduced motion enabled.
6
- * If reduced motion is not enabled, returns the given motion transition.
7
- */
8
4
  const useMotionSafeTransition = (transition) => {
9
5
  const prefersReducedMotion = usePrefersReducedMotion();
10
6
  return prefersReducedMotion ? motionTransition.instant : transition;
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, useRef, useState, useMemo, useEffect, useLayoutEffect } from 'react';
1
+ import { createContext, useContext, useRef, useMemo, useLayoutEffect } from 'react';
2
2
 
3
3
  const NestedMenuContext = createContext(null);
4
4
  const useNestedMenuContext = () => {
@@ -7,19 +7,14 @@ const useNestedMenuContext = () => {
7
7
 
8
8
  const useNestedParentMenu = (props) => {
9
9
  const openedSubMenuSymbolRef = useRef(null);
10
- const [hoveredItemId, setHoveredItemId] = useState();
11
10
  const { open } = props;
12
11
  const contextValue = useMemo(() => {
13
12
  return {
14
13
  registHoveredItem: (id) => {
15
- setHoveredItemId(id);
16
- return () => {
17
- setHoveredItemId((pre) => {
18
- if (pre === id)
19
- return undefined;
20
- return pre;
21
- });
22
- };
14
+ const symbol = openedSubMenuSymbolRef.current;
15
+ if (symbol && id !== symbol.anchorId) {
16
+ symbol.closeSubMenu();
17
+ }
23
18
  },
24
19
  registOpenedSubMenu: (menuItemSymbol) => {
25
20
  openedSubMenuSymbolRef.current?.closeSubMenu();
@@ -32,14 +27,6 @@ const useNestedParentMenu = (props) => {
32
27
  },
33
28
  };
34
29
  }, []);
35
- useEffect(() => {
36
- const symbol = openedSubMenuSymbolRef.current;
37
- // symbol existed means subMenu exited
38
- if (symbol && hoveredItemId && hoveredItemId !== symbol.anchorId) {
39
- symbol.closeSubMenu();
40
- }
41
- }, [hoveredItemId]);
42
- // Ensure that all menus can be visually closed at the same time
43
30
  useLayoutEffect(() => {
44
31
  if (!open) {
45
32
  openedSubMenuSymbolRef.current?.closeSubMenu();
@@ -2,14 +2,9 @@ import { useGlobalListener } from '@ringcentral/spring-base';
2
2
  import { MotionConfigContext } from 'framer-motion';
3
3
  import { useState, useContext } from 'react';
4
4
 
5
- /**
6
- * in all component that uses this hook, we always use same instance of MediaQueryList
7
- * so we can cache the instance here
8
- */
9
5
  let instance;
10
6
  const getPrefersReducedMotionMediaQuery = () => {
11
7
  if (!instance ||
12
- // in test environment, we need to reassign the instance to the window object
13
8
  process.env.NODE_ENV === 'test') {
14
9
  instance = window?.matchMedia?.('(prefers-reduced-motion)');
15
10
  }
@@ -25,15 +20,14 @@ const usePrefersReducedMotion = () => {
25
20
  target: mediaQuery,
26
21
  customKey: 'prefers-reduced-motion',
27
22
  });
28
- /**
29
- * As we're determining the reduced motion state ourselves after the initial mount,
30
- * we need to check the MotionConfigContext to see how the prefers-reduced-motion
31
- * state should be handled.
32
- */
33
- if (context.reducedMotion === 'always') {
23
+ if (context.reducedMotion === 'user') {
24
+ return shouldReduceMotion;
25
+ }
26
+ if (context.reducedMotion === 'always' ||
27
+ process.env.NODE_ENV === 'test') {
34
28
  return true;
35
29
  }
36
- else if (context.reducedMotion === 'never') {
30
+ if (context.reducedMotion === 'never') {
37
31
  return false;
38
32
  }
39
33
  return shouldReduceMotion;
@@ -1,9 +1,5 @@
1
1
  import { useState, useRef, useCallback, useEffect } from 'react';
2
2
 
3
- /**
4
- * store tooltip open state when forceHide is true and set tooltip open to false
5
- * restore open state once forceHide changed to false
6
- */
7
3
  const useTooltipForceHide = (forceHide) => {
8
4
  const [open, setOpen] = useState(false);
9
5
  const openStateStore = useRef();
@@ -43,7 +43,6 @@ const useTray = (parameters) => {
43
43
  return;
44
44
  }
45
45
  if (handledValue === null) {
46
- // return to previous TrayPanel when value is false
47
46
  handledValue = stack[stack.length - 2];
48
47
  }
49
48
  containerRef.current?.focus();