@ringcentral/spring-ui 1.9.3 → 1.11.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 (404) hide show
  1. package/Alert.js +1 -1
  2. package/Announcement.js +4 -2
  3. package/Autocomplete.js +40 -7
  4. package/Avatar.js +42 -27
  5. package/DatePicker.js +45 -38
  6. package/DateUtilsContext.js +18 -1
  7. package/Dialer.js +1 -1
  8. package/Dialog.js +24 -15
  9. package/NestedMenuContext.js +3 -2
  10. package/Option.js +5 -5
  11. package/PickerTextField.js +2 -2
  12. package/Popper.js +1 -1
  13. package/Snackbar.js +7 -5
  14. package/SortableListDndContext.js +3 -3
  15. package/SortableListItem.js +21 -9
  16. package/SplitButton.js +1 -1
  17. package/SubMenu.js +204 -63
  18. package/SwipeableDrawer.js +1 -9
  19. package/Switch.js +15 -5
  20. package/TablePagination.js +11 -21
  21. package/TableRow.js +1 -1
  22. package/Text.js +2 -2
  23. package/Textarea.js +1 -1
  24. package/TimePicker.js +1 -1
  25. package/chunks/Alert.js +1 -1
  26. package/chunks/Drawer.js +1 -1
  27. package/chunks/Menu.js +25 -6
  28. package/chunks/Modal.js +7 -3
  29. package/chunks/PickerTextField.js +18 -7
  30. package/chunks/TextField.js +0 -1
  31. package/chunks/Tooltip.js +1 -1
  32. package/chunks/VirtualizedMenu.js +1 -1
  33. package/chunks/useMenuItemSelect.js +44 -16
  34. package/chunks/useNestedMenuItem.js +16 -5
  35. package/chunks/useNestedParentMenu.js +77 -5
  36. package/chunks/useTrayNavigate.js +1 -1
  37. package/index.css +543 -398
  38. package/index.js +1 -1
  39. package/package.json +4 -4
  40. package/src/Accordion/Accordion.classes.d.ts +3 -3
  41. package/src/Accordion/Accordion.d.ts +1 -1
  42. package/src/Accordion/Accordion.type.d.ts +1 -1
  43. package/src/Accordion/AccordionContext.d.ts +1 -1
  44. package/src/AccordionHeader/AccordionHeader.classes.d.ts +3 -3
  45. package/src/AccordionHeader/AccordionHeader.d.ts +1 -1
  46. package/src/AccordionHeader/AccordionHeader.type.d.ts +1 -1
  47. package/src/Alert/Alert.classes.d.ts +3 -3
  48. package/src/Alert/Alert.d.ts +3 -3
  49. package/src/Alert/Alert.type.d.ts +7 -7
  50. package/src/Alert/AlertTitle.classes.d.ts +3 -3
  51. package/src/Animation/components/ExpandCollapseCaret/ExpandCollapseCaret.classes.d.ts +3 -3
  52. package/src/Animation/components/ExpandCollapseCaret/ExpandCollapseCaret.d.ts +2 -2
  53. package/src/Animation/components/Fade/Fade.d.ts +1 -1
  54. package/src/Animation/components/Fade/getFade.d.ts +1 -1
  55. package/src/Animation/components/Grow/Grow.d.ts +1 -1
  56. package/src/Animation/components/Grow/getGrow.d.ts +4 -4
  57. package/src/Animation/components/ShowHideEye/ShowHideEye.classes.d.ts +3 -3
  58. package/src/Animation/components/ShowHideEye/ShowHideEye.d.ts +1 -1
  59. package/src/Animation/components/SlideIn/SlideIn.d.ts +1 -1
  60. package/src/Animation/components/SlideIn/getSlideIn.d.ts +2 -2
  61. package/src/Animation/components/SortableArrow/SortableArrow.classes.d.ts +3 -3
  62. package/src/Animation/components/SortableArrow/SortableArrow.d.ts +1 -1
  63. package/src/Animation/components/types.d.ts +2 -2
  64. package/src/Announcement/Announcement.classes.d.ts +3 -3
  65. package/src/Announcement/Announcement.type.d.ts +1 -1
  66. package/src/Autocomplete/Autocomplete.classes.d.ts +6 -6
  67. package/src/Autocomplete/Autocomplete.type.d.ts +6 -5
  68. package/src/Autocomplete/SuggestionList/SuggestionList.classes.d.ts +3 -3
  69. package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +3 -3
  70. package/src/Autocomplete/SuggestionList/SuggestionListItem.d.ts +2 -2
  71. package/src/Autocomplete/SuggestionList/utils/SuggestionListItem.d.ts +1 -1
  72. package/src/Autocomplete/SuggestionList/utils/useDynamicHeight.d.ts +1 -1
  73. package/src/Autocomplete/SuggestionList/utils/useHighlightScroll.d.ts +1 -1
  74. package/src/Autocomplete/SuggestionList/utils/useSuggestionList.d.ts +11 -11
  75. package/src/Autocomplete/SuggestionList/utils/useSuggestionListGroup.d.ts +2 -2
  76. package/src/Autocomplete/useAutocomplete.d.ts +20 -20
  77. package/src/Autocomplete/useAutocompleteTag.d.ts +12 -12
  78. package/src/Avatar/Avatar.classes.d.ts +5 -5
  79. package/src/Avatar/Avatar.type.d.ts +7 -7
  80. package/src/AvatarGroup/AvatarGroup.classes.d.ts +3 -3
  81. package/src/AvatarGroup/AvatarGroup.type.d.ts +6 -6
  82. package/src/Backdrop/Backdrop.classes.d.ts +3 -3
  83. package/src/Backdrop/Backdrop.type.d.ts +1 -1
  84. package/src/Badge/Badge.classes.d.ts +5 -5
  85. package/src/Badge/Badge.type.d.ts +7 -7
  86. package/src/Block/Block.classes.d.ts +3 -3
  87. package/src/Block/Block.type.d.ts +6 -6
  88. package/src/BlockHeader/BlockHeader.classes.d.ts +3 -3
  89. package/src/BlockHeader/BlockHeader.type.d.ts +4 -4
  90. package/src/BottomNavigation/BottomNavigation.classes.d.ts +3 -3
  91. package/src/BottomNavigation/BottomNavigation.type.d.ts +2 -2
  92. package/src/BottomNavigation/BottomNavigationContext.d.ts +1 -1
  93. package/src/BottomNavigation/BottomNavigationGroup/BottomNavigationGroup.classes.d.ts +3 -3
  94. package/src/BottomNavigation/BottomNavigationGroup/BottomNavigationGroup.type.d.ts +1 -1
  95. package/src/BottomNavigationItem/BottomNavigationItem.classes.d.ts +3 -3
  96. package/src/BottomNavigationItem/BottomNavigationItem.type.d.ts +1 -1
  97. package/src/Button/Button.classes.d.ts +3 -3
  98. package/src/Button/Button.type.d.ts +8 -8
  99. package/src/CallButton/CallButton.classes.d.ts +3 -3
  100. package/src/CallButton/CallButton.type.d.ts +5 -5
  101. package/src/Checkbox/Checkbox.classes.d.ts +3 -3
  102. package/src/Checkbox/Checkbox.d.ts +2 -2
  103. package/src/Checkbox/Checkbox.type.d.ts +2 -2
  104. package/src/Chip/Chip.classes.d.ts +3 -3
  105. package/src/Chip/Chip.type.d.ts +5 -5
  106. package/src/CircularProgressIndicator/CircularProgressIndicator.classes.d.ts +4 -4
  107. package/src/CircularProgressIndicator/CircularProgressIndicator.d.ts +1 -1
  108. package/src/CircularProgressIndicator/CircularProgressIndicator.type.d.ts +4 -4
  109. package/src/ComponentsProps.d.ts +1 -1
  110. package/src/DatePicker/Calendar.d.ts +1 -1
  111. package/src/DatePicker/DatePicker.classes.d.ts +3 -3
  112. package/src/DatePicker/DatePicker.d.ts +1 -1
  113. package/src/DatePicker/DatePicker.type.d.ts +3 -3
  114. package/src/DatePicker/DatePickerHeader.d.ts +3 -2
  115. package/src/DatePicker/Day.d.ts +2 -2
  116. package/src/DatePicker/SlideDirection.d.ts +1 -1
  117. package/src/DatePicker/Year.d.ts +2 -2
  118. package/src/DatePicker/Years.d.ts +1 -1
  119. package/src/DatePicker/utils/DatePickerAriaLabelUtils.d.ts +12 -4
  120. package/src/DatePicker/utils/DatePickerUtils.d.ts +1 -1
  121. package/src/DatePicker/utils/findClosestEnabledDate.d.ts +1 -1
  122. package/src/DateUtilsContext/DateUtilsContext.d.ts +8 -2
  123. package/src/Dialer/DialDelete/DialDelete.d.ts +1 -1
  124. package/src/Dialer/DialPad/DialPad.classes.d.ts +3 -3
  125. package/src/Dialer/DialPad/DialPad.d.ts +2 -2
  126. package/src/Dialer/DialPad/utils/DialPadUtils.d.ts +3 -3
  127. package/src/Dialer/DialPad/utils/types.d.ts +2 -2
  128. package/src/Dialer/DialPad/utils/useDialKeyboard.d.ts +1 -1
  129. package/src/Dialer/DialPad/utils/useKeyAudio.d.ts +1 -1
  130. package/src/Dialer/DialPadButton/DialPadButton.classes.d.ts +3 -3
  131. package/src/Dialer/DialPadButton/DialPadButton.d.ts +1 -1
  132. package/src/Dialer/DialTextField/DialTextField.d.ts +2 -2
  133. package/src/Dialer/Dialer.d.ts +1 -1
  134. package/src/Dialer/utils/DialerContext.d.ts +1 -1
  135. package/src/Dialog/Dialog.classes.d.ts +14 -14
  136. package/src/Dialog/Dialog.d.ts +1 -1
  137. package/src/Dialog/Dialog.type.d.ts +5 -4
  138. package/src/Divider/Divider.classes.d.ts +4 -4
  139. package/src/Divider/Divider.type.d.ts +7 -7
  140. package/src/DragHandle/DragHandle.classes.d.ts +3 -3
  141. package/src/DragHandle/DragHandle.type.d.ts +5 -5
  142. package/src/Drawer/Drawer.classes.d.ts +5 -5
  143. package/src/Drawer/Drawer.d.ts +1 -1
  144. package/src/Drawer/Drawer.type.d.ts +4 -4
  145. package/src/Dropdown/Dropdown.classes.d.ts +3 -3
  146. package/src/Dropdown/Dropdown.type.d.ts +1 -1
  147. package/src/EmptyState/EmptyState.classes.d.ts +3 -3
  148. package/src/EmptyState/EmptyState.d.ts +1 -1
  149. package/src/EmptyState/EmptyState.type.d.ts +1 -1
  150. package/src/FabButton/FabButton.classes.d.ts +3 -3
  151. package/src/FabButton/FabButton.type.d.ts +5 -5
  152. package/src/FocusTrap/FocusTrap.d.ts +2 -2
  153. package/src/FormField/FormField.classes.d.ts +4 -4
  154. package/src/FormField/FormField.type.d.ts +3 -3
  155. package/src/FormLabel/FormLabel.classes.d.ts +4 -4
  156. package/src/FormLabel/FormLabel.d.ts +1 -1
  157. package/src/FormLabel/FormLabel.type.d.ts +2 -2
  158. package/src/FormLabel/FormLabelContext.d.ts +1 -1
  159. package/src/Icon/Icon.classes.d.ts +3 -3
  160. package/src/Icon/Icon.d.ts +1 -1
  161. package/src/Icon/Icon.type.d.ts +2 -2
  162. package/src/IconButton/IconButton.classes.d.ts +3 -3
  163. package/src/IconButton/IconButton.type.d.ts +9 -9
  164. package/src/IconButton/IconButtonLabel.classes.d.ts +3 -3
  165. package/src/IconButton/IconButtonLabel.d.ts +1 -1
  166. package/src/IconButton/IconButtonLabel.type.d.ts +1 -1
  167. package/src/IconButtonGroup/IconButtonGroup.classes.d.ts +3 -3
  168. package/src/IconButtonGroup/IconButtonGroup.type.d.ts +4 -4
  169. package/src/InlineEditable/InlineEditable.classes.d.ts +4 -4
  170. package/src/InlineEditable/InlineEditable.type.d.ts +5 -5
  171. package/src/LinearProgressIndicator/LinearProgressIndicator.classes.d.ts +4 -4
  172. package/src/LinearProgressIndicator/LinearProgressIndicator.type.d.ts +2 -2
  173. package/src/Link/Link.classes.d.ts +4 -4
  174. package/src/Link/Link.type.d.ts +4 -4
  175. package/src/List/List.classes.d.ts +3 -3
  176. package/src/List/List.type.d.ts +1 -1
  177. package/src/ListItem/HoverActions.d.ts +1 -1
  178. package/src/ListItem/ListItem.classes.d.ts +3 -3
  179. package/src/ListItem/ListItem.d.ts +1 -1
  180. package/src/ListItem/ListItem.type.d.ts +1 -1
  181. package/src/ListItemText/ListItemText.classes.d.ts +4 -4
  182. package/src/ListItemText/ListItemText.d.ts +1 -1
  183. package/src/ListItemText/ListItemText.type.d.ts +2 -2
  184. package/src/ListNavigation/ListNavigationContext.d.ts +1 -1
  185. package/src/ListNavigation/useListNavigation.d.ts +6 -6
  186. package/src/Menu/Menu.classes.d.ts +3 -3
  187. package/src/Menu/Menu.d.ts +1 -1
  188. package/src/Menu/Menu.type.d.ts +1 -1
  189. package/src/Menu/MenuContext.d.ts +1 -1
  190. package/src/MenuActions/MenuActions.classes.d.ts +6 -6
  191. package/src/MenuActions/MenuActions.type.d.ts +1 -1
  192. package/src/MenuDivider/MenuDivider.classes.d.ts +3 -3
  193. package/src/MenuDivider/MenuDivider.type.d.ts +1 -1
  194. package/src/MenuFooter/MenuFooter.classes.d.ts +3 -3
  195. package/src/MenuFooter/MenuFooter.type.d.ts +1 -1
  196. package/src/MenuHeader/MenuHeader.classes.d.ts +3 -3
  197. package/src/MenuHeader/MenuHeader.type.d.ts +1 -1
  198. package/src/MenuItem/MenuItem.classes.d.ts +3 -3
  199. package/src/MenuItem/MenuItem.d.ts +1 -1
  200. package/src/MenuItem/MenuItem.type.d.ts +1 -1
  201. package/src/MenuItem/MenuItemSelectContext.d.ts +1 -1
  202. package/src/MenuItem/useMenuItem.d.ts +1 -1
  203. package/src/MenuItem/useMenuItemSelect.d.ts +5 -5
  204. package/src/MenuItem/useVirtualizedMenuItem.d.ts +2 -1
  205. package/src/MenuItemText/MenuItemText.classes.d.ts +3 -3
  206. package/src/MenuItemText/MenuItemText.d.ts +1 -1
  207. package/src/MenuItemText/MenuItemText.type.d.ts +1 -1
  208. package/src/MenuList/MenuList.classes.d.ts +3 -3
  209. package/src/MenuList/MenuList.type.d.ts +1 -1
  210. package/src/MenuList/MenuListContext.d.ts +1 -1
  211. package/src/Modal/InnerModal.d.ts +1 -1
  212. package/src/Modal/InnerModal.type.d.ts +2 -2
  213. package/src/Modal/Modal.classes.d.ts +3 -3
  214. package/src/Modal/Modal.d.ts +1 -1
  215. package/src/Modal/Modal.type.d.ts +1 -1
  216. package/src/Modal/ModalContext.d.ts +1 -1
  217. package/src/NestedMenuContext/MenuOverlayGroupContext.d.ts +15 -0
  218. package/src/NestedMenuContext/NestedMenuContext.d.ts +19 -5
  219. package/src/NestedMenuContext/pointerGrace.d.ts +8 -0
  220. package/src/NestedMenuContext/useNestedChildMenu.d.ts +2 -1
  221. package/src/NestedMenuContext/useNestedMenuItem.d.ts +8 -3
  222. package/src/NestedMenuContext/useNestedParentMenu.d.ts +8 -1
  223. package/src/Option/Option.d.ts +1 -1
  224. package/src/Option/Option.type.d.ts +1 -1
  225. package/src/Overlap/Overlap.classes.d.ts +3 -3
  226. package/src/Overlap/Overlap.type.d.ts +8 -8
  227. package/src/PageHeader/PageHeader.classes.d.ts +15 -15
  228. package/src/PageHeader/PageHeader.type.d.ts +6 -6
  229. package/src/PickerTextField/PickerTextField.classes.d.ts +3 -3
  230. package/src/PickerTextField/PickerTextField.d.ts +1 -1
  231. package/src/PickerTextField/PickerTextField.type.d.ts +2 -2
  232. package/src/Popover/Popover.classes.d.ts +3 -3
  233. package/src/Popover/Popover.d.ts +1 -1
  234. package/src/Popover/Popover.type.d.ts +2 -2
  235. package/src/Popper/Popper.d.ts +1 -1
  236. package/src/Popper/Popper.type.d.ts +4 -4
  237. package/src/PopperPaper/PopperPaper.classes.d.ts +3 -3
  238. package/src/PopperPaper/PopperPaper.d.ts +1 -1
  239. package/src/PopperPaper/PopperPaper.type.d.ts +1 -1
  240. package/src/Radio/Radio.classes.d.ts +3 -3
  241. package/src/Radio/Radio.d.ts +2 -2
  242. package/src/Radio/Radio.type.d.ts +1 -1
  243. package/src/RadioGroup/RadioGroup.classes.d.ts +3 -3
  244. package/src/RadioGroup/RadioGroup.context.d.ts +1 -1
  245. package/src/RadioGroup/RadioGroup.d.ts +1 -1
  246. package/src/RadioGroup/RadioGroup.type.d.ts +1 -1
  247. package/src/Rating/Rating.classes.d.ts +3 -3
  248. package/src/Rating/Rating.d.ts +1 -1
  249. package/src/Rating/Rating.type.d.ts +2 -2
  250. package/src/Rating/RatingItem.d.ts +1 -1
  251. package/src/Select/Select.classes.d.ts +4 -4
  252. package/src/Select/Select.type.d.ts +5 -5
  253. package/src/Select/useSelect.d.ts +1 -1
  254. package/src/SingleFilter/FilterButton/FilterButton.classes.d.ts +3 -3
  255. package/src/SingleFilter/FilterButton/FilterButton.d.ts +1 -1
  256. package/src/SingleFilter/FilterButton/FilterButton.type.d.ts +2 -2
  257. package/src/SingleFilter/SingleFilter.classes.d.ts +3 -3
  258. package/src/SingleFilter/SingleFilter.d.ts +1 -1
  259. package/src/SingleFilter/SingleFilter.type.d.ts +2 -2
  260. package/src/Skeleton/Skeleton.classes.d.ts +3 -3
  261. package/src/Skeleton/Skeleton.type.d.ts +1 -1
  262. package/src/Skeleton/SkeletonContainer/SkeletonContainer.classes.d.ts +3 -3
  263. package/src/Skeleton/SkeletonContainer/SkeletonContainer.type.d.ts +5 -5
  264. package/src/Slider/Slider.classes.d.ts +4 -4
  265. package/src/Slider/Slider.d.ts +3 -3
  266. package/src/Slider/Slider.type.d.ts +2 -2
  267. package/src/Slider/SliderThumb.d.ts +1 -1
  268. package/src/Snackbar/Snackbar.classes.d.ts +3 -3
  269. package/src/Snackbar/Snackbar.d.ts +1 -1
  270. package/src/Snackbar/Snackbar.type.d.ts +1 -1
  271. package/src/Snackbar/SnackbarContent/SnackbarContent.classes.d.ts +3 -3
  272. package/src/Snackbar/SnackbarContent/SnackbarContent.type.d.ts +1 -1
  273. package/src/SortableList/SortableList.type.d.ts +1 -1
  274. package/src/SortableListDndContext/SortableListDndContext.type.d.ts +2 -2
  275. package/src/SortableListItem/SortableListItem.d.ts +1 -1
  276. package/src/SortableListItem/SortableListItem.type.d.ts +2 -2
  277. package/src/SortableListItem/SortableListItemOverlay.d.ts +1 -1
  278. package/src/SortableListItem/SortableListItemOverlay.type.d.ts +1 -1
  279. package/src/SortableVirtualizedList/SortableVirtualizedList.type.d.ts +1 -1
  280. package/src/SplitButton/SplitButton.classes.d.ts +3 -3
  281. package/src/SplitButton/SplitButton.d.ts +1 -1
  282. package/src/SplitButton/SplitButton.type.d.ts +1 -1
  283. package/src/Squircle/Squircle.type.d.ts +5 -5
  284. package/src/Squircle/squircle.classes.d.ts +3 -3
  285. package/src/StatusIndicator/StatusIndicator.classes.d.ts +3 -3
  286. package/src/StatusIndicator/StatusIndicator.type.d.ts +1 -1
  287. package/src/Step/Step.classes.d.ts +3 -3
  288. package/src/Step/Step.type.d.ts +5 -5
  289. package/src/Step/StepContext.d.ts +1 -1
  290. package/src/StepButton/StepButton.classes.d.ts +3 -3
  291. package/src/StepButton/StepButton.type.d.ts +5 -5
  292. package/src/StepConnector/StepConnector.classes.d.ts +3 -3
  293. package/src/StepConnector/StepConnector.type.d.ts +1 -1
  294. package/src/StepContent/StepContent.classes.d.ts +3 -3
  295. package/src/StepContent/StepContent.d.ts +1 -1
  296. package/src/StepContent/StepContent.type.d.ts +1 -1
  297. package/src/StepIcon/StepIcon.classes.d.ts +3 -3
  298. package/src/StepIcon/StepIcon.type.d.ts +1 -1
  299. package/src/StepLabel/StepLabel.classes.d.ts +4 -4
  300. package/src/StepLabel/StepLabel.d.ts +1 -1
  301. package/src/StepLabel/StepLabel.type.d.ts +1 -1
  302. package/src/Stepper/Stepper.classes.d.ts +3 -3
  303. package/src/Stepper/Stepper.type.d.ts +6 -6
  304. package/src/Stepper/StepperContext.d.ts +1 -1
  305. package/src/SubMenu/PopperMenu.classes.d.ts +3 -3
  306. package/src/SubMenu/PopperMenu.d.ts +1 -1
  307. package/src/SubMenu/PopperMenu.type.d.ts +1 -1
  308. package/src/SubMenu/SubMenu.d.ts +1 -1
  309. package/src/SubMenu/SubMenu.type.d.ts +1 -1
  310. package/src/SubMenu/useSubMenuInteractionState.d.ts +13 -0
  311. package/src/SubMenu/useSubMenuPointerGrace.d.ts +15 -0
  312. package/src/SwipeableDrawer/SwipeableDrawer.classes.d.ts +3 -3
  313. package/src/SwipeableDrawer/SwipeableDrawer.d.ts +1 -1
  314. package/src/SwipeableDrawer/SwipeableDrawer.types.d.ts +2 -2
  315. package/src/SwipeableDrawer/hooks/useSnapPoints.d.ts +1 -1
  316. package/src/Switch/Switch.classes.d.ts +3 -3
  317. package/src/Switch/Switch.d.ts +4 -2
  318. package/src/Switch/Switch.type.d.ts +4 -1
  319. package/src/Tab/Tab.classes.d.ts +4 -4
  320. package/src/Tab/Tab.d.ts +1 -1
  321. package/src/Tab/Tab.type.d.ts +4 -4
  322. package/src/TabContext/TabContext.type.d.ts +1 -1
  323. package/src/TabPanel/TabPanel.classes.d.ts +3 -3
  324. package/src/TabPanel/TabPanel.d.ts +1 -1
  325. package/src/TabPanel/TabPanel.type.d.ts +1 -1
  326. package/src/Table/Table.classes.d.ts +3 -3
  327. package/src/Table/Table.type.d.ts +5 -5
  328. package/src/Table/TableContext.d.ts +1 -1
  329. package/src/Table/Tablelvl2Context.d.ts +1 -1
  330. package/src/TableBody/TableBody.classes.d.ts +3 -3
  331. package/src/TableBody/TableBody.type.d.ts +5 -5
  332. package/src/TableCell/TableCell.classes.d.ts +3 -3
  333. package/src/TableCell/TableCell.type.d.ts +7 -7
  334. package/src/TableContainer/TableContainer.classes.d.ts +3 -3
  335. package/src/TableContainer/TableContainer.type.d.ts +6 -6
  336. package/src/TableFooter/TableFooter.classes.d.ts +3 -3
  337. package/src/TableFooter/TableFooter.d.ts +1 -1
  338. package/src/TableFooter/TableFooter.type.d.ts +1 -1
  339. package/src/TableHead/TableHead.classes.d.ts +3 -3
  340. package/src/TableHead/TableHead.type.d.ts +5 -5
  341. package/src/TablePagination/TablePagination.classes.d.ts +3 -3
  342. package/src/TablePagination/TablePagination.type.d.ts +8 -6
  343. package/src/TableRow/TableRow.classes.d.ts +3 -3
  344. package/src/TableRow/TableRow.type.d.ts +5 -5
  345. package/src/Tabs/TabMoreMenu.d.ts +2 -2
  346. package/src/Tabs/TabScrollButton.d.ts +2 -2
  347. package/src/Tabs/Tabs.classes.d.ts +9 -9
  348. package/src/Tabs/Tabs.d.ts +1 -1
  349. package/src/Tabs/Tabs.type.d.ts +2 -2
  350. package/src/Tabs/TabsContext.d.ts +1 -1
  351. package/src/Tabs/hooks/useTabsScroller.d.ts +3 -3
  352. package/src/Tag/Tag.classes.d.ts +3 -3
  353. package/src/Tag/Tag.d.ts +1 -1
  354. package/src/Tag/Tag.type.d.ts +2 -2
  355. package/src/Text/Text.classes.d.ts +3 -3
  356. package/src/Text/Text.type.d.ts +5 -5
  357. package/src/TextField/TextField.classes.d.ts +3 -3
  358. package/src/TextField/TextField.d.ts +1 -1
  359. package/src/TextField/TextField.type.d.ts +9 -9
  360. package/src/Textarea/Textarea.classes.d.ts +4 -4
  361. package/src/Textarea/Textarea.d.ts +1 -1
  362. package/src/Textarea/Textarea.type.d.ts +3 -3
  363. package/src/TimePicker/NumberPicker.d.ts +1 -1
  364. package/src/TimePicker/NumberPicker.type.d.ts +3 -3
  365. package/src/TimePicker/PickerView.type.d.ts +3 -3
  366. package/src/TimePicker/SelectionView.d.ts +1 -1
  367. package/src/TimePicker/TimeButton.d.ts +1 -1
  368. package/src/TimePicker/TimePicker.classes.d.ts +3 -3
  369. package/src/TimePicker/TimePicker.type.d.ts +1 -1
  370. package/src/TimePicker/ToggleText.d.ts +1 -1
  371. package/src/TimePicker/ToggleText.type.d.ts +2 -2
  372. package/src/TimePicker/utils/TimeBoundary.d.ts +3 -3
  373. package/src/TimePicker/utils/TimePickerHelper.d.ts +5 -5
  374. package/src/TimePicker/utils/getNumberPickerBoundary.d.ts +1 -1
  375. package/src/TimePicker/utils/runKeyHandler.d.ts +1 -1
  376. package/src/Tooltip/Tooltip.type.d.ts +1 -1
  377. package/src/Tooltip/TooltipTrigger.a11y.d.ts +4 -4
  378. package/src/Tooltip/TooltipTrigger.type.d.ts +1 -1
  379. package/src/Tooltip/TooltipView.classes.d.ts +3 -3
  380. package/src/Tooltip/TooltipView.type.d.ts +2 -2
  381. package/src/Tooltip/withTooltip/withTooltip.d.ts +1 -1
  382. package/src/Tray/Tray.classes.d.ts +6 -6
  383. package/src/Tray/Tray.d.ts +1 -1
  384. package/src/Tray/Tray.type.d.ts +2 -2
  385. package/src/Tray/TrayContext.d.ts +1 -1
  386. package/src/Tray/TrayPanel.d.ts +1 -1
  387. package/src/Tray/hooks/useTray.d.ts +2 -2
  388. package/src/Tray/hooks/useTrayPanel.d.ts +2 -2
  389. package/src/Tray/types.d.ts +2 -2
  390. package/src/TrayMenu/TrayMenu.d.ts +1 -1
  391. package/src/TrayMenu/TrayMenu.type.d.ts +1 -1
  392. package/src/TrayMenu/TrayMenuItem.d.ts +2 -2
  393. package/src/VirtualizedList/VirtualizedItemPropsContext.d.ts +1 -1
  394. package/src/VirtualizedList/VirtualizedList.type.d.ts +2 -2
  395. package/src/VirtualizedList/VirtuosoContextType.d.ts +1 -1
  396. package/src/VirtualizedMenu/VirtualizedMenu.classes.d.ts +3 -3
  397. package/src/VirtualizedMenu/VirtualizedMenu.context.d.ts +1 -1
  398. package/src/VirtualizedMenu/VirtualizedMenu.type.d.ts +1 -1
  399. package/src/VirtualizedMenu/VirtualizedMenuList.d.ts +1 -1
  400. package/src/VisuallyHidden/VisuallyHidden.classes.d.ts +3 -3
  401. package/src/VisuallyHidden/VisuallyHidden.type.d.ts +1 -1
  402. package/src/internal/utils/composeEventHandlers.d.ts +7 -0
  403. package/src/internal/utils/index.d.ts +1 -0
  404. package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +0 -6
package/Text.js CHANGED
@@ -17,7 +17,7 @@ import './chunks/useFocusTrapStack.js';
17
17
  import './chunks/Backdrop.js';
18
18
  import './chunks/PopperPaper.js';
19
19
 
20
- var Text$1 = {"sui-text-root":"sui-text-root","sui-text-no-wrap":"sui-text-no-wrap","sui-text-flex-full":"sui-text-flex-full","sui-text-highlight-term":"sui-text-highlight-term"};
20
+ var Text$1 = {"sui-text-root":"sui-text-root","sui-text-no-wrap":"sui-text-no-wrap","sui-text-highlight-term":"sui-text-highlight-term"};
21
21
 
22
22
  const Text = forwardRef((inProps, ref) => {
23
23
  const props = useThemeProps({ props: inProps, name: 'Text' });
@@ -31,7 +31,7 @@ const Text = forwardRef((inProps, ref) => {
31
31
  const cls = useClasses('text', {}, className);
32
32
  const title = isShowTitle || useTooltip
33
33
  ?
34
- _title ?? (isString(children) ? children : undefined)
34
+ (_title ?? (isString(children) ? children : undefined))
35
35
  : undefined;
36
36
  const showTooltip = Boolean(useTooltip) && isShowTitle && !!title && !!children;
37
37
  if (!showTooltip) {
package/Textarea.js CHANGED
@@ -24,7 +24,7 @@ import './chunks/useFocusTrapStack.js';
24
24
  import './chunks/Backdrop.js';
25
25
  import './chunks/PopperPaper.js';
26
26
 
27
- var Textarea$1 = {"sui-textarea-form-field-content":"sui-textarea-form-field-content","sui-textarea-form-field-content-xlarge":"sui-textarea-form-field-content-xlarge","sui-textarea-form-field-content-large":"sui-textarea-form-field-content-large","sui-textarea-form-field-content-medium":"sui-textarea-form-field-content-medium","sui-textarea-input":"sui-textarea-input","sui-textarea-input-xlarge":"sui-textarea-input-xlarge","sui-textarea-input-large":"sui-textarea-input-large","sui-textarea-input-medium":"sui-textarea-input-medium","sui-textarea-standard-input":"sui-textarea-standard-input","sui-textarea-clear":"sui-textarea-clear","sui-textarea-clear-xlarge":"sui-textarea-clear-xlarge","sui-textarea-clear-large":"sui-textarea-clear-large","sui-textarea-clear-medium":"sui-textarea-clear-medium","sui-textarea-clear-standard":"sui-textarea-clear-standard"};
27
+ var Textarea$1 = {"sui-textarea-form-field-content":"sui-textarea-form-field-content","sui-textarea-form-field-content-xlarge":"sui-textarea-form-field-content-xlarge","sui-textarea-form-field-content-large":"sui-textarea-form-field-content-large","sui-textarea-form-field-content-medium":"sui-textarea-form-field-content-medium","sui-textarea-input":"sui-textarea-input","sui-textarea-clear":"sui-textarea-clear","sui-textarea-input-xlarge":"sui-textarea-input-xlarge","sui-textarea-input-large":"sui-textarea-input-large","sui-textarea-input-medium":"sui-textarea-input-medium","sui-textarea-standard-input":"sui-textarea-standard-input","sui-textarea-clear-xlarge":"sui-textarea-clear-xlarge","sui-textarea-clear-large":"sui-textarea-clear-large","sui-textarea-clear-medium":"sui-textarea-clear-medium","sui-textarea-clear-standard":"sui-textarea-clear-standard"};
28
28
 
29
29
  const Textarea = forwardRef((inProps, ref) => {
30
30
  const props = useThemeProps({ props: inProps, name: 'Textarea' });
package/TimePicker.js CHANGED
@@ -22,10 +22,10 @@ import './chunks/Backdrop.js';
22
22
  import './chunks/PopperPaper.js';
23
23
  import './chunks/Popover.js';
24
24
  import './chunks/getGrow.js';
25
+ import './chunks/useHelperTextId.js';
25
26
  import './chunks/TextField.js';
26
27
  import './chunks/ShowHideEye.js';
27
28
  import './chunks/useMotionSafeTransition.js';
28
- import './chunks/useHelperTextId.js';
29
29
  import './chunks/VisuallyHidden.js';
30
30
 
31
31
  const TimePickerClassesContext = createContext(() => '');
package/chunks/Alert.js CHANGED
@@ -45,4 +45,4 @@ const AlertTitle = ({ className, classes, ...rest }) => {
45
45
  return jsx("div", { className: cls('root'), ...rest });
46
46
  };
47
47
 
48
- export { Alert as A, AlertTitle as a };
48
+ export { AlertTitle as A, Alert as a };
package/chunks/Drawer.js CHANGED
@@ -23,7 +23,7 @@ const Drawer = forwardRef((inProps, ref) => {
23
23
  toggleOnTransition: motionTransition['neutral-01-fast'],
24
24
  toggleOffTransition: motionTransition['neutral-01-fast'],
25
25
  });
26
- return (jsx(Modal, { open: open, onClose: onClose, blocking: blocking, disableScrollLock: !blocking, disableBackdropClick: !blocking, disableEscapeKeyDown: !blocking, hideBackdrop: !blocking, className: clsx(cls('root', `anchor-${anchor}`, {
26
+ return (jsx(Modal, { open: open, onClose: onClose, blocking: blocking, className: clsx(cls('root', `anchor-${anchor}`, {
27
27
  'non-blocking': !blocking,
28
28
  })), ...rest, children: jsxs(motion.div, { role: "dialog", "aria-modal": blocking, ...slideInProps, ...bodyProps, ref: ref, className: clsx(cls('body', `body-${anchor}`), bodyProps?.className), tabIndex: blocking ? -1 : undefined, children: [header && (jsx("div", { ref: headerRef, ...headerProps, className: clsx(cls('header'), headerProps?.className), children: header })), jsx("div", { ref: contentRef, className: cls('content'), children: children }), footer && (jsx("div", { ref: footerRef, className: cls('footer'), children: footer }))] }) }));
29
29
  });
package/chunks/Menu.js CHANGED
@@ -1,10 +1,28 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { createContext, useContext, forwardRef, useMemo } from 'react';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { createContext, useContext, useState, useMemo, forwardRef } from 'react';
3
3
  import { useEventCallback } from '@ringcentral/spring-base';
4
4
  import { useThemeProps, useClassesWithMode } from '@ringcentral/spring-theme';
5
5
  import { a as useNestedParentMenu, N as NestedMenuContext } from './useNestedParentMenu.js';
6
6
  import { P as Popover } from './Popover.js';
7
7
 
8
+ const overlayContainerStyle = {
9
+ display: 'contents',
10
+ };
11
+ const MenuOverlayGroupContext = createContext(null);
12
+ const useMenuOverlayGroupContext = () => useContext(MenuOverlayGroupContext);
13
+ const useMenuOverlayGroupValue = () => {
14
+ const [container, setContainer] = useState(null);
15
+ const value = useMemo(() => ({ container }), [container]);
16
+ return {
17
+ setContainer,
18
+ value,
19
+ };
20
+ };
21
+ const MenuOverlayGroupContainer = (props) => {
22
+ const { setContainer } = props;
23
+ return (jsx("div", { "data-sui-menu-overlay-container": "", ref: setContainer, style: overlayContainerStyle }));
24
+ };
25
+
8
26
  const MenuContext = createContext(null);
9
27
  const useMenuContext = () => {
10
28
  return useContext(MenuContext);
@@ -22,10 +40,11 @@ const Menu = forwardRef((inProps, ref) => {
22
40
  bottom: padding.bottom ?? 16,
23
41
  left: padding.left ?? 16,
24
42
  }
25
- : padding ?? 16;
26
- const { contextValue } = useNestedParentMenu({
43
+ : (padding ?? 16);
44
+ const { contentClickHandlers, contentPointerHandlers, contextValue } = useNestedParentMenu({
27
45
  open,
28
46
  });
47
+ const { setContainer: setOverlayContainer, value: overlayGroupValue } = useMenuOverlayGroupValue();
29
48
  const closeHandler = useEventCallback(() => {
30
49
  onClose?.(undefined, 'Other');
31
50
  });
@@ -35,8 +54,8 @@ const Menu = forwardRef((inProps, ref) => {
35
54
  }, [autoFocus, closeHandler, open]);
36
55
  return (jsx(Popover, { bordered: true, className: cls('root'), PopperProps: { ...PopperProps, padding: popperPadding }, ...rest, open: open, onClose: (e, reason) => {
37
56
  onClose?.(e, reason);
38
- }, ref: ref, children: jsx("div", { className: cls('paper'), children: jsx(MenuContext.Provider, { value: menuContextValue, children: jsx(NestedMenuContext.Provider, { value: contextValue, children: children }) }) }) }));
57
+ }, ref: ref, children: jsxs(MenuOverlayGroupContext.Provider, { value: overlayGroupValue, children: [jsx("div", { className: cls('paper'), onClickCapture: contentClickHandlers.onClickCapture, onPointerMove: contentPointerHandlers.onPointerMove, children: jsx(MenuContext.Provider, { value: menuContextValue, children: jsx(NestedMenuContext.Provider, { value: contextValue, children: children }) }) }), jsx(MenuOverlayGroupContainer, { setContainer: setOverlayContainer })] }) }));
39
58
  });
40
59
  Menu.displayName = 'SuiMenu';
41
60
 
42
- export { Menu as M, MenuContext as a, useMenuContext as u };
61
+ export { Menu as M, MenuContext as a, useMenuOverlayGroupContext as b, useMenuContext as u };
package/chunks/Modal.js CHANGED
@@ -14,7 +14,10 @@ const ModalContext = createContext(null);
14
14
  const useModalContext = () => useContext(ModalContext);
15
15
 
16
16
  const InnerModal = forwardRef((props, ref) => {
17
- const { hideBackdrop, children, motionProps, disableBackdropClick = false, onBackdropClick, disableEscapeKeyDown = false, onEscapeKeyDown, onClose, onKeyDown, disableAutoFocus, disableEnforceFocus, disableRestoreFocus, classes, className, backdropProps, open, isEnabled, blocking = true, ...rest } = props;
17
+ const { hideBackdrop: hideBackdropProp, children, motionProps, disableBackdropClick: disableBackdropClickProp, onBackdropClick, disableEscapeKeyDown: disableEscapeKeyDownProp, onEscapeKeyDown, onClose, onKeyDown, disableAutoFocus, disableEnforceFocus, disableRestoreFocus, classes, className, backdropProps, open, isEnabled, blocking = true, ...rest } = props;
18
+ const hideBackdrop = hideBackdropProp ?? !blocking;
19
+ const disableBackdropClick = disableBackdropClickProp ?? !blocking;
20
+ const disableEscapeKeyDown = disableEscapeKeyDownProp ?? !blocking;
18
21
  const { ariaHideOutsideRef, ariaHideEnabled } = useAriaHideOutside({
19
22
  enable: blocking,
20
23
  });
@@ -45,7 +48,8 @@ InnerModal.displayName = 'SuiInnerModal';
45
48
 
46
49
  const Modal = forwardRef((inProps, ref) => {
47
50
  const props = useThemeProps({ props: inProps, name: 'Modal' });
48
- const { children, open, container: containerProp, disablePortal, onExitComplete, disableBackdropAnimation, motionProps, disableScrollLock = false, ...rest } = props;
51
+ const { children, open, container: containerProp, disablePortal, onExitComplete, disableBackdropAnimation, motionProps, disableScrollLock: disableScrollLockProp, blocking = true, ...rest } = props;
52
+ const disableScrollLock = disableScrollLockProp ?? !blocking;
49
53
  const [shouldRender, setShouldRender] = useState(open);
50
54
  const [modalElement, setModalElement] = useState(null);
51
55
  const handleRef = useForkRef(setModalElement, ref);
@@ -74,7 +78,7 @@ const Modal = forwardRef((inProps, ref) => {
74
78
  setShouldRender(false);
75
79
  }
76
80
  };
77
- return shouldRender ? (jsx(Portal, { disablePortal: disablePortal, container: container, children: jsx("div", { ...scopeProps, children: jsx(InnerModal, { ...rest, ref: handleRef, open: open, isEnabled: isEnabled, motionProps: {
81
+ return shouldRender ? (jsx(Portal, { disablePortal: disablePortal, container: container, children: jsx("div", { ...scopeProps, children: jsx(InnerModal, { ...rest, ref: handleRef, open: open, blocking: blocking, isEnabled: isEnabled, motionProps: {
78
82
  ...(motionProps ?? getFade({ prefersReducedMotion, toggle: open })),
79
83
  onAnimationComplete,
80
84
  }, children: children }) }) })) : null;
@@ -3,20 +3,31 @@ import { forwardRef, useState, useRef, useImperativeHandle, useMemo } from 'reac
3
3
  import { useId, useClasses, useForkRef, useA11yKeyEvent, useEventCallback, combineClasses } from '@ringcentral/spring-base';
4
4
  import { I as Icon } from './Icon.js';
5
5
  import { P as Popover } from './Popover.js';
6
+ import { u as useHelperTextId } from './useHelperTextId.js';
6
7
  import { T as TextField } from './TextField.js';
7
8
  import { V as VisuallyHidden } from './VisuallyHidden.js';
8
9
 
9
10
  const PICKER_DISPLAY_NAME = 'SuiPickerTextField';
10
11
  const PickerTextField = forwardRef((props, ref) => {
11
- const { disabled, value, defaultValue, onClear, action, inputProps = {}, announcementText, PopoverProps, children, endIconSymbol, clearText, clearBtn, ClearButtonProps, onKeyDown, onClick, onClose, classes, textInputClasses, className, ...rest } = props;
12
- const idForInput = useId(PICKER_DISPLAY_NAME, true);
12
+ const { disabled, value, defaultValue, onClear, action, inputProps = {}, announcementText, PopoverProps, children, endIconSymbol, clearText, clearBtn, ClearButtonProps, onKeyDown, onClick, onClose, classes, textInputClasses, className, id: idProp, ...rest } = props;
13
+ const generatedId = useId(PICKER_DISPLAY_NAME, true);
14
+ const idForInput = idProp ?? inputProps.id ?? generatedId;
13
15
  const [open, setOpen] = useState(false);
14
16
  const [isPopoverExited, setIsPopoverExited] = useState(!open);
15
17
  const cls = useClasses('picker-text-field', classes, className);
16
18
  const anchorRef = useRef(null);
17
19
  const handleRef = useForkRef(ref, anchorRef);
18
- const idForHelperText = `${idForInput}-helper-text`;
19
- const idForInstruction = `${idForInput}-instruction`;
20
+ const idForHelperText = useHelperTextId({
21
+ helperText: rest.helperText,
22
+ id: idForInput,
23
+ FormHelperTextProps: rest.FormHelperTextProps,
24
+ });
25
+ const idForInstruction = announcementText
26
+ ? `${idForInput}-instruction`
27
+ : undefined;
28
+ const ariaDescribedBy = Array.from(new Set([inputProps['aria-describedby'], idForHelperText, idForInstruction]
29
+ .filter(Boolean)
30
+ .flatMap((value) => `${value}`.split(/\s+/).filter(Boolean)))).join(' ');
20
31
  const handleA11yKeydown = useA11yKeyEvent(() => {
21
32
  handleOpen(true);
22
33
  });
@@ -43,7 +54,7 @@ const PickerTextField = forwardRef((props, ref) => {
43
54
  }),
44
55
  input: cls('input'),
45
56
  }), [cls, textInputClasses, value]);
46
- return (jsxs(Fragment, { children: [jsx(TextField, { classes: toClasses, value: value, defaultValue: defaultValue, endAdornment: endIconSymbol && (jsx(Icon, { className: cls('end-icon'), symbol: endIconSymbol })), id: idForInput, ref: handleRef, focused: open || (!open && !isPopoverExited), disabled: disabled, clearBtn: clearBtn, onClick: (e) => {
57
+ return (jsxs(Fragment, { children: [jsx(TextField, { classes: toClasses, value: value, defaultValue: defaultValue, endAdornment: endIconSymbol && (jsx(Icon, { className: cls('end-icon'), symbol: endIconSymbol })), id: idForInput, ref: handleRef, focused: open || (!open && !isPopoverExited), disabled: disabled, clearBtn: clearBtn, clearText: clearText, ClearButtonProps: ClearButtonProps, onClick: (e) => {
47
58
  handleOpen(true);
48
59
  onClick?.(e);
49
60
  }, onKeyDown: (e) => {
@@ -52,9 +63,9 @@ const PickerTextField = forwardRef((props, ref) => {
52
63
  handleA11yKeydown(e);
53
64
  onKeyDown?.(e);
54
65
  }, inputProps: {
55
- 'aria-describedby': `${idForHelperText} ${idForInstruction}`,
56
66
  'aria-haspopup': true,
57
67
  ...inputProps,
68
+ 'aria-describedby': ariaDescribedBy || undefined,
58
69
  }, ...rest, readOnly: true, onClear: (e) => {
59
70
  onClear?.(e);
60
71
  e.stopPropagation();
@@ -67,7 +78,7 @@ const PickerTextField = forwardRef((props, ref) => {
67
78
  }, ...PopoverProps, onExitComplete: () => {
68
79
  PopoverProps?.onExitComplete?.();
69
80
  setIsPopoverExited(true);
70
- }, children: children }), jsx(VisuallyHidden, { id: idForInstruction, children: announcementText })] }));
81
+ }, children: children }), idForInstruction && (jsx(VisuallyHidden, { id: idForInstruction, children: announcementText }))] }));
71
82
  });
72
83
  PickerTextField.displayName = PICKER_DISPLAY_NAME;
73
84
 
@@ -47,7 +47,6 @@ const TextFieldComponent = (inProps, ref) => {
47
47
  let helperText = helperTextProp;
48
48
  if (showCharacterCount &&
49
49
  inputProps?.maxLength !== undefined &&
50
- props.onChange &&
51
50
  props.value !== undefined) {
52
51
  helperText = (jsxs("div", { className: cls('helper-text'), children: [jsx("span", { children: helperText }), jsxs("span", { children: [props.value?.length ?? 0, "/", inputProps.maxLength] })] }));
53
52
  }
package/chunks/Tooltip.js CHANGED
@@ -187,7 +187,7 @@ const TooltipView = forwardRef((props, ref) => {
187
187
  bottom: padding.bottom ?? 16,
188
188
  left: padding.left ?? 16,
189
189
  }
190
- : padding ?? 16;
190
+ : (padding ?? 16);
191
191
  return (jsx(Popper, { role: "tooltip", placement: placement, offset: 4, ...PopperProps, padding: popperPadding, className: cls('root', {
192
192
  'force-hide': tooltipForceHide,
193
193
  'disable-interactions': disableInteractions,
@@ -55,7 +55,7 @@ const VirtualizedMenu = forwardRef((inProps, ref) => {
55
55
  bottom: padding.bottom ?? 16,
56
56
  left: padding.left ?? 16,
57
57
  }
58
- : padding ?? 16;
58
+ : (padding ?? 16);
59
59
  const popperActions = useRef(null);
60
60
  const handlePopperActions = useForkRef(popperActions, popperActionsProp);
61
61
  const menuContextValue = useMemo(() => {
@@ -20,6 +20,15 @@ const SubMenuTriggerNestedIdContext = createContext(null);
20
20
  const MenuItemSelectContext = createContext(null);
21
21
  const useMenuItemSelectContext = () => useContext(MenuItemSelectContext);
22
22
 
23
+ const composeEventHandlers = (externalEventHandler, internalEventHandler, options = {}) => (event, ...args) => {
24
+ const { checkForDefaultPrevented = true } = options;
25
+ externalEventHandler?.(event, ...args);
26
+ if (checkForDefaultPrevented && event.defaultPrevented) {
27
+ return;
28
+ }
29
+ internalEventHandler?.(event, ...args);
30
+ };
31
+
23
32
  const useMenuItem = (props) => {
24
33
  const { onBlur, onFocus, onKeyDown, onKeyUp, onClick, ref, disabled, autoClose, } = props;
25
34
  const { keyboardNavHandlers, itemRef } = useItemNavigation() ?? {};
@@ -34,17 +43,20 @@ const useMenuItem = (props) => {
34
43
  },
35
44
  });
36
45
  const { close: closeMenu } = useMenuContext() ?? {};
46
+ const handleClick = disabled
47
+ ? undefined
48
+ : composeEventHandlers(onClick, () => {
49
+ if (autoClose)
50
+ closeMenu?.();
51
+ });
37
52
  const { active, activeHandlers } = useActive({
53
+ disabled,
38
54
  onKeyDown: (e) => {
39
55
  onKeyDown?.(e);
40
56
  keyboardNavHandlers?.onKeyDown(e);
41
57
  },
42
58
  onKeyUp,
43
- onClick: (e) => {
44
- onClick?.(e);
45
- if (autoClose)
46
- closeMenu?.();
47
- },
59
+ onClick: handleClick,
48
60
  });
49
61
  const handleItemRef = useForkRef(ref, focusVisibleRef, itemRef);
50
62
  const getRootProps = (otherProps) => {
@@ -62,7 +74,7 @@ const useMenuItem = (props) => {
62
74
  };
63
75
 
64
76
  const useVirtualizedMenuItem = (props) => {
65
- const { onBlur, onFocus, onKeyDown, onKeyUp, onClick, autoClose, ref } = props;
77
+ const { onBlur, onFocus, onKeyDown, onKeyUp, onClick, disabled, autoClose, ref, } = props;
66
78
  const { keyboardNavHandlers, itemRef } = useItemNavigation() ?? {};
67
79
  const vlItemProps = useVirtualizedItemPropsContext();
68
80
  const { focusVisible, focusVisibleRef, focusVisibleHandlers } = useFocusVisible({
@@ -76,17 +88,20 @@ const useVirtualizedMenuItem = (props) => {
76
88
  },
77
89
  });
78
90
  const { close: closeMenu } = useMenuContext() ?? {};
91
+ const handleClick = disabled
92
+ ? undefined
93
+ : composeEventHandlers(onClick, () => {
94
+ if (autoClose)
95
+ closeMenu?.();
96
+ });
79
97
  const { active, activeHandlers } = useActive({
98
+ disabled,
80
99
  onKeyDown: (e) => {
81
100
  onKeyDown?.(e);
82
101
  keyboardNavHandlers?.onKeyDown(e);
83
102
  },
84
103
  onKeyUp,
85
- onClick: (e) => {
86
- onClick?.(e);
87
- if (autoClose)
88
- closeMenu?.();
89
- },
104
+ onClick: handleClick,
90
105
  });
91
106
  const handleItemRef = useForkRef(ref, focusVisibleRef, itemRef);
92
107
  const getRootProps = (otherProps) => {
@@ -105,7 +120,7 @@ const useVirtualizedMenuItem = (props) => {
105
120
 
106
121
  const MenuItem = forwardRef((inProps, ref) => {
107
122
  const props = useThemeProps({ props: inProps, name: 'MenuItem' });
108
- const { classes, className, children, selected, disabled, onMouseEnter, onMouseLeave, highlighted = false, focused = false, autoClose = true, autoFocus, ...rest } = props;
123
+ const { classes, className, children, selected, disabled, onMouseEnter, onMouseLeave, onPointerMove, highlighted = false, focused = false, autoClose = true, autoFocus, ...rest } = props;
109
124
  const cls = useClassesWithMode('menu-item', classes, className);
110
125
  const vlItemProps = useVirtualizedItemPropsContext();
111
126
  const isInVlRef = useRef(Boolean(vlItemProps));
@@ -133,8 +148,21 @@ const MenuItem = forwardRef((inProps, ref) => {
133
148
  const subMenuTriggerNestedId = useContext(SubMenuTriggerNestedIdContext);
134
149
  const generatedId = useId();
135
150
  const id = subMenuTriggerNestedId ?? generatedId;
136
- const { hover, hoverHandlers } = useHover({ onMouseEnter, onMouseLeave });
137
- useNestedMenuItem({ hovered: hover, id });
151
+ const isSubMenuTrigger = Boolean(subMenuTriggerNestedId);
152
+ const { requestItemHover } = useNestedMenuItem({ id });
153
+ const { hoverHandlers } = useHover({
154
+ onMouseEnter,
155
+ onMouseLeave,
156
+ });
157
+ const handlePointerMove = (event) => {
158
+ if (event.pointerType === 'mouse' &&
159
+ !requestItemHover(event, {
160
+ closeOpenedSubMenu: !isSubMenuTrigger,
161
+ })) {
162
+ event.preventDefault();
163
+ }
164
+ onPointerMove?.(event);
165
+ };
138
166
  useLayoutEffect(() => {
139
167
  if (autoFocus) {
140
168
  itemRef.current?.focus();
@@ -159,7 +187,7 @@ const MenuItem = forwardRef((inProps, ref) => {
159
187
  highlighted,
160
188
  focused,
161
189
  nowrap: menuListContextValue.nowrap,
162
- }), ...getRootProps(rest), ...hoverHandlers, children: jsxs("div", { className: cls('container'), children: [selectable && (jsx("div", { className: cls('select-indicator'), children: selectMode === 'single' ? (jsx("span", { className: cls('select-dot') })) : (jsx(Icon, { symbol: CheckBoldMd, size: "small" })) })), children] }) }));
190
+ }), ...getRootProps(rest), ...hoverHandlers, onPointerMove: handlePointerMove, children: jsxs("div", { className: cls('container'), children: [selectable && (jsx("div", { className: cls('select-indicator'), children: selectMode === 'single' ? (jsx("span", { className: cls('select-dot') })) : (jsx(Icon, { symbol: CheckBoldMd, size: "small" })) })), children] }) }));
163
191
  });
164
192
  MenuItem.displayName = 'SuiMenuItem';
165
193
 
@@ -240,4 +268,4 @@ const useMenuItemSelect = (props) => {
240
268
  };
241
269
  };
242
270
 
243
- export { Action as A, MenuItem as M, SubMenuTriggerNestedIdContext as S, MenuItemSelectContext as a, useMenuItem as b, useMenuItemSelect as c, useVirtualizedMenuItem as d, MenuListContext as e, useMenuListContext as f, useMenuItemSelectContext as u };
271
+ export { Action as A, MenuItem as M, SubMenuTriggerNestedIdContext as S, MenuItemSelectContext as a, useMenuItem as b, useMenuItemSelect as c, useVirtualizedMenuItem as d, MenuListContext as e, useMenuListContext as f, composeEventHandlers as g, useMenuItemSelectContext as u };
@@ -1,16 +1,27 @@
1
- import { useEffect } from 'react';
1
+ import { useCallback, useEffect } from 'react';
2
2
  import { u as useNestedMenuContext } from './useNestedParentMenu.js';
3
3
 
4
4
  const useNestedMenuItem = (props) => {
5
5
  const context = useNestedMenuContext();
6
6
  const { hovered, id } = props;
7
- const { registHoveredItem } = context ?? {};
7
+ const { isPointerMovingToSubMenu: isPointerMovingToSubMenuContext, onPointerGraceIntentChange, registHoveredItem, } = context ?? {};
8
+ const requestItemHover = useCallback((event, options) => {
9
+ const canApplyHover = registHoveredItem?.(id, event, options);
10
+ return canApplyHover ?? true;
11
+ }, [id, registHoveredItem]);
8
12
  useEffect(() => {
9
13
  if (hovered) {
10
- return registHoveredItem?.(id);
14
+ requestItemHover();
11
15
  }
12
- return undefined;
13
- }, [hovered, id, registHoveredItem]);
16
+ }, [hovered, requestItemHover]);
17
+ const isPointerMovingToSubMenu = useCallback((event, intent) => {
18
+ return isPointerMovingToSubMenuContext?.(event, intent) ?? false;
19
+ }, [isPointerMovingToSubMenuContext]);
20
+ return {
21
+ isPointerMovingToSubMenu,
22
+ onPointerGraceIntentChange,
23
+ requestItemHover,
24
+ };
14
25
  };
15
26
 
16
27
  export { useNestedMenuItem as u };
@@ -1,20 +1,82 @@
1
- import { createContext, useContext, useRef, useMemo, useLayoutEffect } from 'react';
1
+ import { createContext, useContext, useRef, useCallback, useMemo, useLayoutEffect } from 'react';
2
2
 
3
3
  const NestedMenuContext = createContext(null);
4
4
  const useNestedMenuContext = () => {
5
5
  return useContext(NestedMenuContext);
6
6
  };
7
7
 
8
+ const getPointFromPointerEvent = (event) => ({
9
+ x: event.clientX,
10
+ y: event.clientY,
11
+ });
12
+ const isPointInPolygon = (point, polygon) => {
13
+ let inside = false;
14
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
15
+ const pointI = polygon[i];
16
+ const pointJ = polygon[j];
17
+ const intersects = pointI.y > point.y !== pointJ.y > point.y &&
18
+ point.x <
19
+ ((pointJ.x - pointI.x) * (point.y - pointI.y)) / (pointJ.y - pointI.y) +
20
+ pointI.x;
21
+ if (intersects) {
22
+ inside = !inside;
23
+ }
24
+ }
25
+ return inside;
26
+ };
27
+ const isPointerInGraceArea = (event, area) => {
28
+ if (!area)
29
+ return false;
30
+ return isPointInPolygon(getPointFromPointerEvent(event), area);
31
+ };
32
+
8
33
  const useNestedParentMenu = (props) => {
9
34
  const openedSubMenuSymbolRef = useRef(null);
35
+ const pointerGraceIntentRef = useRef(null);
36
+ const pointerDirRef = useRef('right');
37
+ const lastPointerXRef = useRef(0);
10
38
  const { open } = props;
39
+ const onPointerGraceIntentChange = useCallback((intent) => {
40
+ pointerGraceIntentRef.current = intent;
41
+ }, []);
42
+ const isPointerMovingToSubMenu = useCallback((event, intentArg) => {
43
+ const intent = intentArg === undefined ? pointerGraceIntentRef.current : intentArg;
44
+ const isMovingTowards = pointerDirRef.current === intent?.side;
45
+ return isMovingTowards && isPointerInGraceArea(event, intent?.area);
46
+ }, []);
47
+ const onContentPointerMove = useCallback((event) => {
48
+ const pointerXHasChanged = lastPointerXRef.current !== event.clientX;
49
+ if (pointerXHasChanged) {
50
+ pointerDirRef.current =
51
+ event.clientX > lastPointerXRef.current ? 'right' : 'left';
52
+ lastPointerXRef.current = event.clientX;
53
+ }
54
+ }, []);
55
+ const onContentClickCapture = useCallback((event) => {
56
+ const target = event.target;
57
+ const openedSubMenu = openedSubMenuSymbolRef.current;
58
+ if (!target || !event.currentTarget.contains(target)) {
59
+ return;
60
+ }
61
+ if (openedSubMenu?.getAnchorElement?.()?.contains(target)) {
62
+ return;
63
+ }
64
+ openedSubMenu?.closeSubMenu();
65
+ }, []);
11
66
  const contextValue = useMemo(() => {
12
67
  return {
13
- registHoveredItem: (id) => {
68
+ registHoveredItem: (id, event, options) => {
14
69
  const symbol = openedSubMenuSymbolRef.current;
15
- if (symbol && id !== symbol.anchorId) {
70
+ if (!symbol || id === symbol.anchorId) {
71
+ return true;
72
+ }
73
+ if (event && isPointerMovingToSubMenu(event)) {
74
+ return false;
75
+ }
76
+ if (options?.closeOpenedSubMenu ?? true) {
16
77
  symbol.closeSubMenu();
17
78
  }
79
+ return true;
18
80
  },
19
81
  registOpenedSubMenu: (menuItemSymbol) => {
20
82
  openedSubMenuSymbolRef.current?.closeSubMenu();
@@ -25,14 +87,24 @@ const useNestedParentMenu = (props) => {
25
87
  }
26
88
  };
27
89
  },
90
+ isPointerMovingToSubMenu,
91
+ onPointerGraceIntentChange,
28
92
  };
29
- }, []);
93
+ }, [isPointerMovingToSubMenu, onPointerGraceIntentChange]);
30
94
  useLayoutEffect(() => {
31
95
  if (!open) {
32
96
  openedSubMenuSymbolRef.current?.closeSubMenu();
97
+ openedSubMenuSymbolRef.current = null;
98
+ onPointerGraceIntentChange(null);
33
99
  }
34
- }, [open]);
100
+ }, [onPointerGraceIntentChange, open]);
35
101
  return {
102
+ contentClickHandlers: {
103
+ onClickCapture: onContentClickCapture,
104
+ },
105
+ contentPointerHandlers: {
106
+ onPointerMove: onContentPointerMove,
107
+ },
36
108
  contextValue,
37
109
  getHaveOpenedSubMenu: () => Boolean(openedSubMenuSymbolRef.current),
38
110
  };
@@ -23,7 +23,7 @@ const useTray = (parameters) => {
23
23
  setValue(newValue);
24
24
  onChange?.(e, newValue);
25
25
  if (stack.includes(newValue)) {
26
- setStack([...stack.slice(0, stack.indexOf(newValue) + 1)]);
26
+ setStack(stack.slice(0, stack.indexOf(newValue) + 1));
27
27
  setDirection('left');
28
28
  }
29
29
  else {