@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.
- package/Alert.js +3 -3
- package/Announcement.js +1 -1
- package/Autocomplete.js +216 -243
- package/Avatar.js +27 -13
- package/BottomNavigation.js +0 -3
- package/Checkbox.js +0 -2
- package/DatePicker.js +5 -13
- package/DateUtilsContext.js +0 -1
- package/Dialer.js +2 -50
- package/Dialog.js +18 -6
- package/Dropdown.js +0 -7
- package/FocusTrap.js +0 -32
- package/InlineEditable.js +0 -4
- package/Link.js +1 -1
- package/ListItem.js +1 -1
- package/ListNavigation.js +0 -6
- package/Menu.js +1 -1
- package/MenuDivider.js +2 -2
- package/MenuFooter.js +4 -4
- package/MenuHeader.js +4 -4
- package/MenuItem.js +1 -1
- package/MenuItemText.js +1 -1
- package/Modal.js +1 -1
- package/PageHeader.js +6 -4
- package/Popper.js +0 -1
- package/Rating.js +0 -5
- package/SingleFilter.js +0 -1
- package/Slider.js +1 -4
- package/Snackbar.js +0 -14
- package/SortableListItem.js +0 -1
- package/SplitButton.js +1 -3
- package/StatusIndicator.js +1 -1
- package/StepButton.js +2 -3
- package/StepContent.js +3 -8
- package/SubMenu.js +0 -4
- package/SwipeableDrawer.js +37 -162
- package/Switch.js +1 -4
- package/Tab.js +7 -8
- package/TabContext.js +0 -5
- package/TableBody.js +1 -1
- package/TableCell.js +0 -6
- package/TableRow.js +2 -4
- package/Tabs.js +22 -121
- package/Text.js +2 -4
- package/TimePicker.js +7 -46
- package/VirtualizedList.js +6 -39
- package/VirtualizedMenu.js +1 -1
- package/chunks/Alert.js +8 -7
- package/chunks/BottomNavigationItem.js +0 -1
- package/chunks/Button.js +0 -1
- package/chunks/Chip.js +0 -5
- package/chunks/Drawer.js +1 -30
- package/chunks/ListItem.js +3 -6
- package/chunks/Menu.js +6 -5
- package/chunks/MenuDivider.js +2 -3
- package/chunks/MenuItemText.js +3 -3
- package/chunks/MenuList.js +3 -6
- package/chunks/Modal.js +1 -1
- package/chunks/PickerTextField.js +0 -1
- package/chunks/Popover.js +0 -5
- package/chunks/Select.js +2 -39
- package/chunks/Squircle.js +0 -7
- package/chunks/StatusIndicator.js +1 -0
- package/chunks/StepIcon.js +1 -3
- package/chunks/StepperContext.js +0 -7
- package/chunks/Tooltip.js +0 -36
- package/chunks/VirtualizedMenu.js +45 -99
- package/chunks/getFade.js +4 -0
- package/chunks/useFocusTrapStack.js +0 -8
- package/chunks/useHelperTextId.js +0 -24
- package/chunks/useListNavigation.js +5 -17
- package/chunks/useMenuItemSelect.js +9 -22
- package/chunks/useMotionSafeTransition.js +0 -4
- package/chunks/useNestedParentMenu.js +5 -18
- package/chunks/usePrefersReducedMotion.js +6 -12
- package/chunks/useTooltipForceHide.js +0 -4
- package/chunks/useTrayNavigate.js +0 -1
- package/index.css +434 -135
- package/index.js +1 -1
- package/package.json +4 -4
- package/src/Accordion/Accordion.d.ts +1 -1
- package/src/Accordion/Accordion.type.d.ts +0 -21
- package/src/AccordionHeader/AccordionHeader.d.ts +1 -1
- package/src/AccordionHeader/AccordionHeader.type.d.ts +0 -14
- package/src/Alert/Alert.d.ts +1 -1
- package/src/Alert/Alert.type.d.ts +0 -32
- package/src/Animation/components/ExpandCollapseCaret/ExpandCollapseCaret.d.ts +0 -4
- package/src/Animation/components/ShowHideEye/ShowHideEye.d.ts +0 -4
- package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +0 -4
- package/src/Autocomplete/Autocomplete.d.ts +0 -5
- package/src/Autocomplete/Autocomplete.type.d.ts +0 -84
- package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +5 -89
- package/src/Autocomplete/SuggestionList/SuggestionListItem.d.ts +0 -2
- package/src/Autocomplete/SuggestionList/utils/SuggestionListItem.d.ts +1 -13
- package/src/Autocomplete/SuggestionList/utils/useDynamicHeight.d.ts +0 -6
- package/src/Autocomplete/SuggestionList/utils/useHighlightScroll.d.ts +4 -23
- package/src/Autocomplete/SuggestionList/utils/useSuggestionList.d.ts +3 -41
- package/src/Autocomplete/SuggestionList/utils/useSuggestionListGroup.d.ts +0 -49
- package/src/Autocomplete/useAutocomplete.d.ts +5 -66
- package/src/Autocomplete/useAutocompleteTag.d.ts +3 -36
- package/src/Avatar/Avatar.type.d.ts +0 -58
- package/src/AvatarGroup/AvatarGroup.type.d.ts +0 -3
- package/src/Backdrop/Backdrop.type.d.ts +0 -4
- package/src/Badge/Badge.type.d.ts +0 -33
- package/src/Block/Block.type.d.ts +0 -24
- package/src/BlockHeader/BlockHeader.type.d.ts +0 -5
- package/src/BottomNavigation/BottomNavigation.type.d.ts +0 -34
- package/src/BottomNavigationItem/BottomNavigationItem.type.d.ts +0 -39
- package/src/Button/Button.type.d.ts +0 -30
- package/src/CallButton/CallButton.type.d.ts +0 -4
- package/src/Checkbox/Checkbox.type.d.ts +0 -17
- package/src/Chip/Chip.type.d.ts +0 -41
- package/src/CircularProgressIndicator/CircularProgressIndicator.d.ts +1 -1
- package/src/CircularProgressIndicator/CircularProgressIndicator.type.d.ts +0 -19
- package/src/DatePicker/Calendar.d.ts +1 -20
- package/src/DatePicker/DatePicker.type.d.ts +0 -18
- package/src/DatePicker/DatePickerHeader.d.ts +1 -12
- package/src/DatePicker/Day.d.ts +1 -8
- package/src/DatePicker/Year.d.ts +1 -7
- package/src/DatePicker/Years.d.ts +0 -7
- package/src/Dialer/DialDelete/DialDelete.d.ts +0 -3
- package/src/Dialer/DialPad/DialPad.d.ts +0 -106
- package/src/Dialer/DialPad/utils/types.d.ts +0 -5
- package/src/Dialer/DialPad/utils/useDialKeyboard.d.ts +0 -5
- package/src/Dialer/DialPad/utils/useKeyAudio.d.ts +0 -9
- package/src/Dialer/DialPadButton/DialPadButton.d.ts +0 -14
- package/src/Dialer/DialTextField/DialTextField.d.ts +0 -23
- package/src/Dialer/DialTextField/utils/getDialPadValueOnlyRegex.d.ts +0 -3
- package/src/Dialer/DialTextField/utils/useFixedEndSelection.d.ts +0 -3
- package/src/Dialog/Dialog.classes.d.ts +1 -1
- package/src/Dialog/Dialog.d.ts +1 -1
- package/src/Dialog/Dialog.type.d.ts +3 -11
- package/src/Divider/Divider.type.d.ts +0 -17
- package/src/DragHandle/DragHandle.type.d.ts +0 -4
- package/src/Drawer/Drawer.d.ts +1 -29
- package/src/Drawer/Drawer.type.d.ts +0 -84
- package/src/Dropdown/Dropdown.type.d.ts +0 -64
- package/src/EmptyState/EmptyState.d.ts +1 -1
- package/src/EmptyState/EmptyState.type.d.ts +0 -12
- package/src/FabButton/FabButton.type.d.ts +0 -5
- package/src/FocusTrap/FocusTrap.d.ts +0 -38
- package/src/FocusTrap/useFocusTrapStack.d.ts +0 -9
- package/src/FormField/FormField.type.d.ts +0 -26
- package/src/FormField/useHelperTextId.d.ts +0 -25
- package/src/FormLabel/FormLabel.d.ts +1 -1
- package/src/FormLabel/FormLabel.type.d.ts +0 -14
- package/src/Icon/Icon.d.ts +1 -1
- package/src/Icon/Icon.type.d.ts +0 -15
- package/src/IconButton/IconButton.type.d.ts +0 -30
- package/src/IconButton/IconButtonLabel.d.ts +1 -1
- package/src/IconButton/IconButtonLabel.type.d.ts +0 -3
- package/src/IconButtonGroup/IconButtonGroup.type.d.ts +0 -8
- package/src/InlineEditable/InlineEditable.type.d.ts +0 -75
- package/src/LinearProgressIndicator/LinearProgressIndicator.type.d.ts +0 -31
- package/src/Link/Link.classes.d.ts +1 -1
- package/src/Link/Link.type.d.ts +1 -10
- package/src/ListItem/ListItem.type.d.ts +0 -41
- package/src/ListItemText/ListItemText.d.ts +1 -1
- package/src/ListItemText/ListItemText.type.d.ts +0 -21
- package/src/ListNavigation/useListNavigation.d.ts +0 -16
- package/src/Menu/Menu.d.ts +1 -1
- package/src/Menu/Menu.type.d.ts +0 -10
- package/src/MenuFooter/MenuFooter.type.d.ts +0 -4
- package/src/MenuHeader/MenuHeader.type.d.ts +0 -10
- package/src/MenuItem/MenuItem.d.ts +1 -1
- package/src/MenuItem/MenuItem.type.d.ts +0 -19
- package/src/MenuItem/MenuItemSelectContext.d.ts +0 -3
- package/src/MenuItem/useMenuItemSelect.d.ts +0 -21
- package/src/MenuItemText/MenuItemText.d.ts +1 -1
- package/src/MenuItemText/MenuItemText.type.d.ts +0 -17
- package/src/MenuList/MenuList.type.d.ts +0 -4
- package/src/MenuList/MenuListContext.d.ts +0 -6
- package/src/Modal/InnerModal.d.ts +2 -2
- package/src/Modal/InnerModal.type.d.ts +0 -5
- package/src/Modal/Modal.classes.d.ts +1 -1
- package/src/Modal/Modal.d.ts +3 -3
- package/src/Modal/Modal.type.d.ts +0 -11
- package/src/Modal/ModalContext.d.ts +0 -4
- package/src/NestedMenuContext/NestedMenuContext.d.ts +1 -1
- package/src/Option/Option.d.ts +1 -1
- package/src/Option/Option.type.d.ts +0 -3
- package/src/Overlap/Overlap.type.d.ts +0 -11
- package/src/PageHeader/PageHeader.type.d.ts +0 -4
- package/src/PickerTextField/PickerTextField.type.d.ts +0 -10
- package/src/Popover/Popover.d.ts +1 -1
- package/src/Popover/Popover.type.d.ts +0 -29
- package/src/Popper/Popper.d.ts +1 -1
- package/src/Popper/Popper.type.d.ts +0 -61
- package/src/PopperPaper/PopperPaper.d.ts +1 -1
- package/src/Radio/Radio.type.d.ts +0 -5
- package/src/RadioGroup/RadioGroup.d.ts +1 -1
- package/src/RadioGroup/RadioGroup.type.d.ts +0 -4
- package/src/Rating/Rating.d.ts +1 -1
- package/src/Rating/Rating.type.d.ts +0 -74
- package/src/Rating/RatingItem.d.ts +1 -1
- package/src/Select/Select.type.d.ts +0 -84
- package/src/SingleFilter/FilterButton/FilterButton.d.ts +1 -1
- package/src/SingleFilter/FilterButton/FilterButton.type.d.ts +0 -16
- package/src/SingleFilter/SingleFilter.d.ts +1 -1
- package/src/SingleFilter/SingleFilter.type.d.ts +0 -26
- package/src/Skeleton/Skeleton.type.d.ts +0 -1
- package/src/Skeleton/SkeletonContainer/SkeletonContainer.classes.d.ts +1 -1
- package/src/Slider/Slider.classes.d.ts +1 -5
- package/src/Slider/Slider.d.ts +2 -2
- package/src/Slider/Slider.type.d.ts +0 -104
- package/src/Snackbar/Snackbar.type.d.ts +0 -18
- package/src/SortableListItem/SortableListItemOverlay.d.ts +1 -1
- package/src/SplitButton/SplitButton.d.ts +1 -1
- package/src/SplitButton/SplitButton.type.d.ts +0 -21
- package/src/Squircle/Squircle.type.d.ts +0 -3
- package/src/StatusIndicator/StatusIndicator.classes.d.ts +1 -1
- package/src/StatusIndicator/StatusIndicator.type.d.ts +1 -9
- package/src/Step/Step.type.d.ts +0 -29
- package/src/Step/StepContext.d.ts +0 -7
- package/src/StepButton/StepButton.type.d.ts +0 -15
- package/src/StepContent/StepContent.d.ts +1 -1
- package/src/StepContent/StepContent.type.d.ts +0 -7
- package/src/StepIcon/StepIcon.type.d.ts +0 -26
- package/src/StepLabel/StepLabel.d.ts +1 -1
- package/src/StepLabel/StepLabel.type.d.ts +0 -23
- package/src/Stepper/Stepper.type.d.ts +0 -27
- package/src/SubMenu/PopperMenu.d.ts +1 -1
- package/src/SubMenu/SubMenu.d.ts +1 -1
- package/src/SwipeableDrawer/SwipeableDrawer.d.ts +1 -27
- package/src/SwipeableDrawer/SwipeableDrawer.types.d.ts +0 -67
- package/src/SwipeableDrawer/hooks/useDrawerGestures.d.ts +0 -110
- package/src/SwipeableDrawer/hooks/useElementSizeObserver.d.ts +0 -5
- package/src/SwipeableDrawer/hooks/useSnapPoints.d.ts +0 -60
- package/src/Switch/Switch.type.d.ts +0 -9
- package/src/Tab/Tab.classes.d.ts +3 -2
- package/src/Tab/Tab.d.ts +1 -1
- package/src/Tab/Tab.type.d.ts +0 -29
- package/src/TabContext/TabContext.d.ts +0 -4
- package/src/TabContext/TabContext.type.d.ts +0 -7
- package/src/TabPanel/TabPanel.d.ts +1 -1
- package/src/TabPanel/TabPanel.type.d.ts +0 -10
- package/src/Table/Table.type.d.ts +0 -19
- package/src/TableBody/TableBody.type.d.ts +0 -3
- package/src/TableCell/TableCell.d.ts +0 -4
- package/src/TableCell/TableCell.type.d.ts +0 -35
- package/src/TableContainer/TableContainer.type.d.ts +0 -7
- package/src/TableFooter/TableFooter.type.d.ts +0 -3
- package/src/TableHead/TableHead.type.d.ts +0 -6
- package/src/TablePagination/TablePagination.type.d.ts +0 -47
- package/src/TableRow/TableRow.type.d.ts +0 -17
- package/src/Tabs/TabMoreMenu.d.ts +0 -16
- package/src/Tabs/TabScrollButton.d.ts +1 -11
- package/src/Tabs/Tabs.classes.d.ts +1 -1
- package/src/Tabs/Tabs.d.ts +1 -1
- package/src/Tabs/Tabs.type.d.ts +2 -36
- package/src/Tabs/TabsContext.d.ts +2 -0
- package/src/Tabs/hooks/useTabsScroller.d.ts +0 -30
- package/src/Tag/Tag.d.ts +1 -1
- package/src/Tag/Tag.type.d.ts +0 -12
- package/src/Text/Text.type.d.ts +0 -13
- package/src/TextField/TextField.type.d.ts +0 -64
- package/src/Textarea/Textarea.d.ts +1 -1
- package/src/Textarea/Textarea.type.d.ts +0 -13
- package/src/TimePicker/NumberPicker.d.ts +1 -1
- package/src/TimePicker/NumberPicker.type.d.ts +0 -12
- package/src/TimePicker/SelectionView.d.ts +0 -6
- package/src/TimePicker/TimeButton.d.ts +1 -4
- package/src/TimePicker/TimePicker.type.d.ts +0 -11
- package/src/TimePicker/ToggleText.d.ts +1 -1
- package/src/TimePicker/ToggleText.type.d.ts +0 -3
- package/src/TimePicker/utils/TimeBoundary.d.ts +0 -3
- package/src/TimePicker/utils/TimePickerHelper.d.ts +0 -19
- package/src/TimePicker/utils/getNumberPickerBoundary.d.ts +0 -3
- package/src/Tooltip/TooltipTrigger.a11y.d.ts +0 -9
- package/src/Tooltip/TooltipTrigger.type.d.ts +0 -44
- package/src/Tooltip/TooltipView.type.d.ts +0 -25
- package/src/Tooltip/useTooltipForceHide.d.ts +0 -4
- package/src/Tray/Tray.d.ts +1 -1
- package/src/Tray/Tray.type.d.ts +0 -13
- package/src/Tray/TrayContext.d.ts +0 -4
- package/src/Tray/hooks/useTray.d.ts +0 -16
- package/src/Tray/hooks/useTrayPanel.d.ts +0 -3
- package/src/TrayMenu/TrayMenu.d.ts +1 -1
- package/src/TrayMenu/TrayMenuItem.d.ts +1 -1
- package/src/VirtualizedList/VirtualizedList.type.d.ts +0 -27
- package/src/VirtualizedMenu/VirtualizedMenu.classes.d.ts +1 -1
- 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,
|
|
3
|
-
import { useFocusVisible, useActive, useForkRef,
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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();
|