rsuite 5.2.1 → 5.3.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 (451) hide show
  1. package/Avatar/styles/index.less +2 -2
  2. package/AvatarGroup/package.json +7 -0
  3. package/AvatarGroup/styles/index.less +19 -0
  4. package/Button/styles/index.less +6 -0
  5. package/ButtonGroup/styles/index.less +0 -18
  6. package/CHANGELOG.md +49 -0
  7. package/CheckTreePicker/styles/index.less +14 -1
  8. package/PanelGroup/styles/index.less +12 -12
  9. package/Table/styles/index.less +0 -4
  10. package/TreePicker/styles/index.less +10 -0
  11. package/cjs/@types/common.d.ts +9 -8
  12. package/cjs/@types/utils.d.ts +12 -0
  13. package/cjs/Affix/Affix.js +5 -5
  14. package/cjs/Animation/Transition.d.ts +21 -12
  15. package/cjs/Animation/Transition.js +4 -1
  16. package/cjs/AutoComplete/AutoComplete.js +1 -1
  17. package/cjs/AutoComplete/utils.d.ts +1 -1
  18. package/cjs/Avatar/Avatar.js +10 -3
  19. package/cjs/AvatarGroup/AvatarGroup.d.ts +15 -0
  20. package/cjs/AvatarGroup/AvatarGroup.js +71 -0
  21. package/cjs/AvatarGroup/index.d.ts +3 -0
  22. package/cjs/AvatarGroup/index.js +11 -0
  23. package/cjs/Breadcrumb/Breadcrumb.js +1 -1
  24. package/cjs/Button/Button.js +8 -2
  25. package/cjs/ButtonGroup/ButtonGroup.js +8 -2
  26. package/cjs/ButtonGroup/ButtonGroupContext.d.ts +7 -0
  27. package/cjs/ButtonGroup/ButtonGroupContext.js +13 -0
  28. package/cjs/ButtonGroup/index.d.ts +2 -0
  29. package/cjs/ButtonGroup/index.js +3 -0
  30. package/cjs/Calendar/Calendar.d.ts +4 -4
  31. package/cjs/Calendar/Calendar.js +5 -2
  32. package/cjs/Calendar/CalendarContext.js +1 -1
  33. package/cjs/Calendar/TableRow.js +1 -1
  34. package/cjs/Calendar/TimeDropdown.js +6 -5
  35. package/cjs/Calendar/types.d.ts +2 -2
  36. package/cjs/Calendar/useCalendarDate.d.ts +2 -2
  37. package/cjs/Carousel/Carousel.d.ts +2 -2
  38. package/cjs/Carousel/Carousel.js +1 -1
  39. package/cjs/Cascader/Cascader.d.ts +1 -1
  40. package/cjs/Cascader/Cascader.js +10 -10
  41. package/cjs/Cascader/DropdownMenu.d.ts +5 -4
  42. package/cjs/Cascader/utils.d.ts +3 -3
  43. package/cjs/CheckPicker/CheckPicker.js +4 -4
  44. package/cjs/CheckTreePicker/CheckTreeNode.d.ts +1 -1
  45. package/cjs/CheckTreePicker/CheckTreeNode.js +7 -9
  46. package/cjs/CheckTreePicker/CheckTreePicker.js +34 -27
  47. package/cjs/CheckTreePicker/utils.d.ts +3 -1
  48. package/cjs/CheckTreePicker/utils.js +12 -10
  49. package/cjs/Checkbox/Checkbox.d.ts +1 -1
  50. package/cjs/CheckboxGroup/CheckboxGroup.js +2 -2
  51. package/cjs/CustomProvider/CustomProvider.d.ts +31 -57
  52. package/cjs/DOMHelper/index.d.ts +12 -12
  53. package/cjs/DatePicker/DatePicker.d.ts +1 -1
  54. package/cjs/DatePicker/DatePicker.js +15 -9
  55. package/cjs/DatePicker/Toolbar.d.ts +12 -9
  56. package/cjs/DatePicker/Toolbar.js +6 -8
  57. package/cjs/DatePicker/types.d.ts +4 -4
  58. package/cjs/DatePicker/utils.d.ts +4 -3
  59. package/cjs/DateRangePicker/Calendar.d.ts +9 -7
  60. package/cjs/DateRangePicker/Calendar.js +27 -6
  61. package/cjs/DateRangePicker/DateRangePicker.d.ts +8 -6
  62. package/cjs/DateRangePicker/DateRangePicker.js +126 -107
  63. package/cjs/DateRangePicker/types.d.ts +2 -1
  64. package/cjs/DateRangePicker/utils.d.ts +6 -6
  65. package/cjs/DateRangePicker/utils.js +7 -2
  66. package/cjs/Disclosure/Disclosure.js +4 -2
  67. package/cjs/Disclosure/DisclosureButton.js +9 -7
  68. package/cjs/Disclosure/DisclosureContent.js +4 -6
  69. package/cjs/Disclosure/DisclosureContext.d.ts +2 -2
  70. package/cjs/Disclosure/useDisclosureContext.d.ts +2 -0
  71. package/cjs/Disclosure/useDisclosureContext.js +20 -0
  72. package/cjs/Dropdown/Dropdown.d.ts +1 -1
  73. package/cjs/Dropdown/DropdownContext.d.ts +2 -2
  74. package/cjs/Dropdown/DropdownItem.js +3 -2
  75. package/cjs/Dropdown/DropdownMenu.d.ts +3 -3
  76. package/cjs/Dropdown/DropdownState.d.ts +1 -1
  77. package/cjs/Dropdown/DropdownToggle.js +2 -1
  78. package/cjs/Dropdown/useRenderDropdownItem.d.ts +1 -1
  79. package/cjs/Form/Form.js +1 -1
  80. package/cjs/Form/FormContext.d.ts +1 -1
  81. package/cjs/FormControl/FormControl.d.ts +1 -1
  82. package/cjs/FormControl/FormControl.js +5 -4
  83. package/cjs/FormGroup/FormGroup.d.ts +1 -1
  84. package/cjs/Input/Input.d.ts +3 -2
  85. package/cjs/InputGroup/InputGroup.d.ts +1 -1
  86. package/cjs/InputNumber/InputNumber.js +6 -2
  87. package/cjs/InputPicker/InputAutosize.js +4 -4
  88. package/cjs/InputPicker/InputPicker.d.ts +2 -2
  89. package/cjs/InputPicker/InputPicker.js +16 -11
  90. package/cjs/List/ListContext.d.ts +1 -1
  91. package/cjs/List/ListContext.js +8 -1
  92. package/cjs/List/helper/AutoScroller.js +4 -2
  93. package/cjs/List/helper/useManager.d.ts +3 -3
  94. package/cjs/List/helper/useManager.js +1 -1
  95. package/cjs/List/helper/useSortHelper.d.ts +3 -3
  96. package/cjs/List/helper/useSortHelper.js +6 -4
  97. package/cjs/List/helper/utils.d.ts +2 -2
  98. package/cjs/MaskedInput/MaskedInput.d.ts +5 -42
  99. package/cjs/MaskedInput/MaskedInput.js +9 -63
  100. package/cjs/MaskedInput/TextMask.d.ts +43 -0
  101. package/cjs/MaskedInput/TextMask.js +80 -0
  102. package/cjs/MaskedInput/adjustCaretPosition.d.ts +6 -6
  103. package/cjs/MaskedInput/conformToMask.js +5 -4
  104. package/cjs/MaskedInput/createTextMaskInputElement.d.ts +2 -2
  105. package/cjs/MaskedInput/utilities.d.ts +1 -1
  106. package/cjs/Menu/Menu.js +60 -41
  107. package/cjs/Menu/MenuContext.d.ts +1 -1
  108. package/cjs/Menu/MenuItem.d.ts +1 -1
  109. package/cjs/Menu/MenuItem.js +31 -23
  110. package/cjs/Menu/Menubar.js +8 -8
  111. package/cjs/Menu/useMenu.js +17 -7
  112. package/cjs/Modal/Modal.js +12 -6
  113. package/cjs/Modal/ModalContext.d.ts +2 -2
  114. package/cjs/Modal/utils.d.ts +1 -1
  115. package/cjs/Modal/utils.js +12 -15
  116. package/cjs/MultiCascader/DropdownMenu.d.ts +4 -4
  117. package/cjs/MultiCascader/MultiCascader.js +6 -6
  118. package/cjs/MultiCascader/utils.d.ts +14 -14
  119. package/cjs/Nav/Nav.d.ts +1 -1
  120. package/cjs/Nav/NavContext.d.ts +1 -1
  121. package/cjs/Nav/NavItem.d.ts +1 -1
  122. package/cjs/Navbar/Navbar.js +1 -1
  123. package/cjs/Navbar/NavbarItem.d.ts +1 -1
  124. package/cjs/Overlay/Modal.d.ts +2 -2
  125. package/cjs/Overlay/Modal.js +41 -31
  126. package/cjs/Overlay/ModalManager.d.ts +17 -8
  127. package/cjs/Overlay/ModalManager.js +11 -20
  128. package/cjs/Overlay/Overlay.d.ts +2 -2
  129. package/cjs/Overlay/Overlay.js +1 -1
  130. package/cjs/Overlay/OverlayTrigger.d.ts +11 -11
  131. package/cjs/Overlay/OverlayTrigger.js +14 -6
  132. package/cjs/Overlay/Position.d.ts +3 -3
  133. package/cjs/Overlay/Position.js +21 -12
  134. package/cjs/Overlay/positionUtils.d.ts +1 -1
  135. package/cjs/Overlay/positionUtils.js +8 -8
  136. package/cjs/Pagination/Pagination.d.ts +1 -1
  137. package/cjs/Pagination/PaginationButton.d.ts +3 -3
  138. package/cjs/Pagination/PaginationGroup.js +5 -3
  139. package/cjs/Panel/Panel.d.ts +1 -1
  140. package/cjs/Panel/Panel.js +2 -2
  141. package/cjs/PanelGroup/PanelGroup.d.ts +2 -2
  142. package/cjs/Picker/DropdownMenu.d.ts +8 -5
  143. package/cjs/Picker/DropdownMenu.js +5 -5
  144. package/cjs/Picker/PickerOverlay.js +4 -3
  145. package/cjs/Picker/PickerToggle.js +11 -8
  146. package/cjs/Picker/PickerToggleTrigger.d.ts +2 -6
  147. package/cjs/Picker/SearchBar.d.ts +1 -1
  148. package/cjs/Picker/SelectedElement.js +2 -1
  149. package/cjs/Picker/VirtualizedList.d.ts +29 -2
  150. package/cjs/Picker/propTypes.d.ts +2 -2
  151. package/cjs/Picker/utils.d.ts +17 -25
  152. package/cjs/Picker/utils.js +71 -46
  153. package/cjs/Placeholder/PlaceholderGrid.js +1 -1
  154. package/cjs/Plaintext/Plaintext.js +2 -1
  155. package/cjs/Radio/Radio.d.ts +1 -1
  156. package/cjs/RadioGroup/RadioGroup.d.ts +2 -2
  157. package/cjs/RadioGroup/RadioGroup.js +3 -3
  158. package/cjs/RangeSlider/RangeSlider.d.ts +2 -2
  159. package/cjs/RangeSlider/RangeSlider.js +6 -4
  160. package/cjs/Rate/Character.js +4 -2
  161. package/cjs/Rate/Rate.js +5 -2
  162. package/cjs/Ripple/Ripple.js +1 -1
  163. package/cjs/SelectPicker/SelectPicker.js +4 -4
  164. package/cjs/Sidenav/Node.d.ts +1 -1
  165. package/cjs/Sidenav/Sidenav.d.ts +4 -4
  166. package/cjs/Sidenav/Sidenav.js +5 -2
  167. package/cjs/Sidenav/SidenavDropdown.js +11 -8
  168. package/cjs/Sidenav/SidenavDropdownItem.js +10 -5
  169. package/cjs/Sidenav/SidenavDropdownMenu.js +9 -5
  170. package/cjs/Sidenav/SidenavItem.d.ts +1 -1
  171. package/cjs/Sidenav/SidenavItem.js +4 -0
  172. package/cjs/Slider/Graduated.d.ts +5 -5
  173. package/cjs/Slider/Handle.d.ts +1 -1
  174. package/cjs/Slider/Handle.js +10 -6
  175. package/cjs/Slider/Mark.d.ts +1 -1
  176. package/cjs/Slider/Slider.d.ts +1 -1
  177. package/cjs/Slider/Slider.js +2 -2
  178. package/cjs/Slider/utils.d.ts +2 -1
  179. package/cjs/Slider/utils.js +4 -5
  180. package/cjs/Steps/StepItem.js +2 -2
  181. package/cjs/TagInput/index.js +1 -1
  182. package/cjs/Toggle/Toggle.js +1 -1
  183. package/cjs/Tree/Tree.d.ts +3 -1
  184. package/cjs/TreePicker/TreeNode.js +6 -8
  185. package/cjs/TreePicker/TreePicker.js +36 -27
  186. package/cjs/Uploader/UploadFileItem.d.ts +1 -1
  187. package/cjs/Uploader/UploadFileItem.js +2 -2
  188. package/cjs/Uploader/UploadTrigger.d.ts +1 -1
  189. package/cjs/Uploader/UploadTrigger.js +2 -3
  190. package/cjs/Uploader/Uploader.d.ts +5 -5
  191. package/cjs/Uploader/Uploader.js +1 -2
  192. package/cjs/index.d.ts +2 -0
  193. package/cjs/index.js +5 -1
  194. package/cjs/locales/index.d.ts +3 -3
  195. package/cjs/toaster/ToastContainer.d.ts +1 -1
  196. package/cjs/toaster/ToastContainer.js +1 -1
  197. package/cjs/toaster/toaster.js +3 -1
  198. package/cjs/utils/BrowserDetection.js +1 -1
  199. package/cjs/utils/ReactChildren.d.ts +2 -2
  200. package/cjs/utils/ajaxUpload.d.ts +1 -1
  201. package/cjs/utils/ajaxUpload.js +5 -4
  202. package/cjs/utils/appendTooltip.d.ts +1 -1
  203. package/cjs/utils/constants.d.ts +4 -4
  204. package/cjs/utils/createChainedFunction.d.ts +1 -1
  205. package/cjs/utils/getDataGroupBy.d.ts +1 -1
  206. package/cjs/utils/mergeRefs.d.ts +2 -2
  207. package/cjs/utils/previewFile.d.ts +1 -1
  208. package/cjs/utils/propTypeChecker.d.ts +6 -2
  209. package/cjs/utils/propTypeChecker.js +7 -6
  210. package/cjs/utils/reactToString.d.ts +2 -1
  211. package/cjs/utils/statusIcons.d.ts +1 -1
  212. package/cjs/utils/stringToObject.d.ts +1 -1
  213. package/cjs/utils/treeUtils.d.ts +32 -29
  214. package/cjs/utils/treeUtils.js +46 -23
  215. package/cjs/utils/useControlled.d.ts +6 -1
  216. package/cjs/utils/useControlled.js +0 -8
  217. package/cjs/utils/useCustom.js +6 -4
  218. package/cjs/utils/useElementResize.d.ts +1 -1
  219. package/cjs/utils/useElementResize.js +11 -6
  220. package/cjs/utils/useFocus.d.ts +2 -2
  221. package/cjs/utils/usePortal.d.ts +1 -1
  222. package/cjs/utils/useRootClose.d.ts +2 -2
  223. package/cjs/utils/useTimeout.d.ts +1 -1
  224. package/cjs/utils/useTimeout.js +5 -3
  225. package/dist/rsuite-rtl.css +85 -165
  226. package/dist/rsuite-rtl.min.css +1 -1
  227. package/dist/rsuite-rtl.min.css.map +1 -1
  228. package/dist/rsuite.css +85 -165
  229. package/dist/rsuite.js +468 -445
  230. package/dist/rsuite.js.map +1 -1
  231. package/dist/rsuite.min.css +1 -1
  232. package/dist/rsuite.min.css.map +1 -1
  233. package/dist/rsuite.min.js +1 -1
  234. package/dist/rsuite.min.js.LICENSE.txt +9 -0
  235. package/dist/rsuite.min.js.map +1 -1
  236. package/esm/@types/common.d.ts +9 -8
  237. package/esm/@types/utils.d.ts +12 -0
  238. package/esm/Affix/Affix.js +5 -5
  239. package/esm/Animation/Transition.d.ts +21 -12
  240. package/esm/Animation/Transition.js +4 -1
  241. package/esm/AutoComplete/AutoComplete.js +1 -1
  242. package/esm/AutoComplete/utils.d.ts +1 -1
  243. package/esm/Avatar/Avatar.js +7 -3
  244. package/esm/AvatarGroup/AvatarGroup.d.ts +15 -0
  245. package/esm/AvatarGroup/AvatarGroup.js +54 -0
  246. package/esm/AvatarGroup/index.d.ts +3 -0
  247. package/esm/AvatarGroup/index.js +2 -0
  248. package/esm/Breadcrumb/Breadcrumb.js +1 -1
  249. package/esm/Button/Button.js +6 -2
  250. package/esm/ButtonGroup/ButtonGroup.js +7 -2
  251. package/esm/ButtonGroup/ButtonGroupContext.d.ts +7 -0
  252. package/esm/ButtonGroup/ButtonGroupContext.js +3 -0
  253. package/esm/ButtonGroup/index.d.ts +2 -0
  254. package/esm/ButtonGroup/index.js +2 -0
  255. package/esm/Calendar/Calendar.d.ts +4 -4
  256. package/esm/Calendar/Calendar.js +5 -2
  257. package/esm/Calendar/CalendarContext.js +1 -1
  258. package/esm/Calendar/TableRow.js +1 -1
  259. package/esm/Calendar/TimeDropdown.js +5 -4
  260. package/esm/Calendar/types.d.ts +2 -2
  261. package/esm/Calendar/useCalendarDate.d.ts +2 -2
  262. package/esm/Carousel/Carousel.d.ts +2 -2
  263. package/esm/Carousel/Carousel.js +1 -1
  264. package/esm/Cascader/Cascader.d.ts +1 -1
  265. package/esm/Cascader/Cascader.js +10 -10
  266. package/esm/Cascader/DropdownMenu.d.ts +5 -4
  267. package/esm/Cascader/utils.d.ts +3 -3
  268. package/esm/CheckPicker/CheckPicker.js +4 -4
  269. package/esm/CheckTreePicker/CheckTreeNode.d.ts +1 -1
  270. package/esm/CheckTreePicker/CheckTreeNode.js +4 -7
  271. package/esm/CheckTreePicker/CheckTreePicker.js +33 -25
  272. package/esm/CheckTreePicker/utils.d.ts +3 -1
  273. package/esm/CheckTreePicker/utils.js +12 -10
  274. package/esm/Checkbox/Checkbox.d.ts +1 -1
  275. package/esm/CheckboxGroup/CheckboxGroup.js +2 -2
  276. package/esm/CustomProvider/CustomProvider.d.ts +31 -57
  277. package/esm/DOMHelper/index.d.ts +12 -12
  278. package/esm/DatePicker/DatePicker.d.ts +1 -1
  279. package/esm/DatePicker/DatePicker.js +14 -9
  280. package/esm/DatePicker/Toolbar.d.ts +12 -9
  281. package/esm/DatePicker/Toolbar.js +6 -8
  282. package/esm/DatePicker/types.d.ts +4 -4
  283. package/esm/DatePicker/utils.d.ts +4 -3
  284. package/esm/DateRangePicker/Calendar.d.ts +9 -7
  285. package/esm/DateRangePicker/Calendar.js +28 -6
  286. package/esm/DateRangePicker/DateRangePicker.d.ts +8 -6
  287. package/esm/DateRangePicker/DateRangePicker.js +124 -107
  288. package/esm/DateRangePicker/types.d.ts +2 -1
  289. package/esm/DateRangePicker/utils.d.ts +6 -6
  290. package/esm/DateRangePicker/utils.js +6 -2
  291. package/esm/Disclosure/Disclosure.js +4 -2
  292. package/esm/Disclosure/DisclosureButton.js +8 -7
  293. package/esm/Disclosure/DisclosureContent.js +5 -7
  294. package/esm/Disclosure/DisclosureContext.d.ts +2 -2
  295. package/esm/Disclosure/useDisclosureContext.d.ts +2 -0
  296. package/esm/Disclosure/useDisclosureContext.js +11 -0
  297. package/esm/Dropdown/Dropdown.d.ts +1 -1
  298. package/esm/Dropdown/DropdownContext.d.ts +2 -2
  299. package/esm/Dropdown/DropdownItem.js +3 -2
  300. package/esm/Dropdown/DropdownMenu.d.ts +3 -3
  301. package/esm/Dropdown/DropdownState.d.ts +1 -1
  302. package/esm/Dropdown/DropdownToggle.js +2 -1
  303. package/esm/Dropdown/useRenderDropdownItem.d.ts +1 -1
  304. package/esm/Form/Form.js +1 -1
  305. package/esm/Form/FormContext.d.ts +1 -1
  306. package/esm/FormControl/FormControl.d.ts +1 -1
  307. package/esm/FormControl/FormControl.js +5 -4
  308. package/esm/FormGroup/FormGroup.d.ts +1 -1
  309. package/esm/Input/Input.d.ts +3 -2
  310. package/esm/InputGroup/InputGroup.d.ts +1 -1
  311. package/esm/InputNumber/InputNumber.js +6 -2
  312. package/esm/InputPicker/InputAutosize.js +4 -4
  313. package/esm/InputPicker/InputPicker.d.ts +2 -2
  314. package/esm/InputPicker/InputPicker.js +16 -11
  315. package/esm/List/ListContext.d.ts +1 -1
  316. package/esm/List/ListContext.js +7 -1
  317. package/esm/List/helper/AutoScroller.js +4 -2
  318. package/esm/List/helper/useManager.d.ts +3 -3
  319. package/esm/List/helper/useManager.js +1 -1
  320. package/esm/List/helper/useSortHelper.d.ts +3 -3
  321. package/esm/List/helper/useSortHelper.js +6 -4
  322. package/esm/List/helper/utils.d.ts +2 -2
  323. package/esm/MaskedInput/MaskedInput.d.ts +5 -42
  324. package/esm/MaskedInput/MaskedInput.js +9 -63
  325. package/esm/MaskedInput/TextMask.d.ts +43 -0
  326. package/esm/MaskedInput/TextMask.js +67 -0
  327. package/esm/MaskedInput/adjustCaretPosition.d.ts +6 -6
  328. package/esm/MaskedInput/conformToMask.js +5 -4
  329. package/esm/MaskedInput/createTextMaskInputElement.d.ts +2 -2
  330. package/esm/MaskedInput/utilities.d.ts +1 -1
  331. package/esm/Menu/Menu.js +59 -43
  332. package/esm/Menu/MenuContext.d.ts +1 -1
  333. package/esm/Menu/MenuItem.d.ts +1 -1
  334. package/esm/Menu/MenuItem.js +30 -23
  335. package/esm/Menu/Menubar.js +7 -8
  336. package/esm/Menu/useMenu.js +17 -7
  337. package/esm/Modal/Modal.js +12 -6
  338. package/esm/Modal/ModalContext.d.ts +2 -2
  339. package/esm/Modal/utils.d.ts +1 -1
  340. package/esm/Modal/utils.js +11 -12
  341. package/esm/MultiCascader/DropdownMenu.d.ts +4 -4
  342. package/esm/MultiCascader/MultiCascader.js +6 -6
  343. package/esm/MultiCascader/utils.d.ts +14 -14
  344. package/esm/Nav/Nav.d.ts +1 -1
  345. package/esm/Nav/NavContext.d.ts +1 -1
  346. package/esm/Nav/NavItem.d.ts +1 -1
  347. package/esm/Navbar/Navbar.js +1 -1
  348. package/esm/Navbar/NavbarItem.d.ts +1 -1
  349. package/esm/Overlay/Modal.d.ts +2 -2
  350. package/esm/Overlay/Modal.js +42 -32
  351. package/esm/Overlay/ModalManager.d.ts +17 -8
  352. package/esm/Overlay/ModalManager.js +11 -20
  353. package/esm/Overlay/Overlay.d.ts +2 -2
  354. package/esm/Overlay/Overlay.js +1 -1
  355. package/esm/Overlay/OverlayTrigger.d.ts +11 -11
  356. package/esm/Overlay/OverlayTrigger.js +14 -6
  357. package/esm/Overlay/Position.d.ts +3 -3
  358. package/esm/Overlay/Position.js +20 -11
  359. package/esm/Overlay/positionUtils.d.ts +1 -1
  360. package/esm/Overlay/positionUtils.js +6 -6
  361. package/esm/Pagination/Pagination.d.ts +1 -1
  362. package/esm/Pagination/PaginationButton.d.ts +3 -3
  363. package/esm/Pagination/PaginationGroup.js +5 -3
  364. package/esm/Panel/Panel.d.ts +1 -1
  365. package/esm/Panel/Panel.js +2 -2
  366. package/esm/PanelGroup/PanelGroup.d.ts +2 -2
  367. package/esm/Picker/DropdownMenu.d.ts +8 -5
  368. package/esm/Picker/DropdownMenu.js +5 -5
  369. package/esm/Picker/PickerOverlay.js +4 -3
  370. package/esm/Picker/PickerToggle.js +11 -8
  371. package/esm/Picker/PickerToggleTrigger.d.ts +2 -6
  372. package/esm/Picker/SearchBar.d.ts +1 -1
  373. package/esm/Picker/SelectedElement.js +2 -1
  374. package/esm/Picker/VirtualizedList.d.ts +29 -2
  375. package/esm/Picker/propTypes.d.ts +2 -2
  376. package/esm/Picker/utils.d.ts +17 -25
  377. package/esm/Picker/utils.js +70 -46
  378. package/esm/Placeholder/PlaceholderGrid.js +1 -1
  379. package/esm/Plaintext/Plaintext.js +2 -1
  380. package/esm/Radio/Radio.d.ts +1 -1
  381. package/esm/RadioGroup/RadioGroup.d.ts +2 -2
  382. package/esm/RadioGroup/RadioGroup.js +3 -3
  383. package/esm/RangeSlider/RangeSlider.d.ts +2 -2
  384. package/esm/RangeSlider/RangeSlider.js +5 -4
  385. package/esm/Rate/Character.js +3 -2
  386. package/esm/Rate/Rate.js +4 -2
  387. package/esm/Ripple/Ripple.js +1 -1
  388. package/esm/SelectPicker/SelectPicker.js +4 -4
  389. package/esm/Sidenav/Node.d.ts +1 -1
  390. package/esm/Sidenav/Sidenav.d.ts +4 -4
  391. package/esm/Sidenav/Sidenav.js +5 -2
  392. package/esm/Sidenav/SidenavDropdown.js +11 -7
  393. package/esm/Sidenav/SidenavDropdownItem.js +11 -5
  394. package/esm/Sidenav/SidenavDropdownMenu.js +9 -5
  395. package/esm/Sidenav/SidenavItem.d.ts +1 -1
  396. package/esm/Sidenav/SidenavItem.js +4 -0
  397. package/esm/Slider/Graduated.d.ts +5 -5
  398. package/esm/Slider/Handle.d.ts +1 -1
  399. package/esm/Slider/Handle.js +10 -6
  400. package/esm/Slider/Mark.d.ts +1 -1
  401. package/esm/Slider/Slider.d.ts +1 -1
  402. package/esm/Slider/Slider.js +2 -2
  403. package/esm/Slider/utils.d.ts +2 -1
  404. package/esm/Slider/utils.js +5 -2
  405. package/esm/Steps/StepItem.js +2 -2
  406. package/esm/TagInput/index.js +1 -1
  407. package/esm/Toggle/Toggle.js +1 -1
  408. package/esm/Tree/Tree.d.ts +3 -1
  409. package/esm/TreePicker/TreeNode.js +4 -7
  410. package/esm/TreePicker/TreePicker.js +35 -25
  411. package/esm/Uploader/UploadFileItem.d.ts +1 -1
  412. package/esm/Uploader/UploadFileItem.js +2 -2
  413. package/esm/Uploader/UploadTrigger.d.ts +1 -1
  414. package/esm/Uploader/UploadTrigger.js +2 -3
  415. package/esm/Uploader/Uploader.d.ts +5 -5
  416. package/esm/Uploader/Uploader.js +1 -2
  417. package/esm/index.d.ts +2 -0
  418. package/esm/index.js +1 -0
  419. package/esm/locales/index.d.ts +3 -3
  420. package/esm/toaster/ToastContainer.d.ts +1 -1
  421. package/esm/toaster/ToastContainer.js +1 -1
  422. package/esm/toaster/toaster.js +3 -1
  423. package/esm/utils/BrowserDetection.js +1 -1
  424. package/esm/utils/ReactChildren.d.ts +2 -2
  425. package/esm/utils/ajaxUpload.d.ts +1 -1
  426. package/esm/utils/ajaxUpload.js +5 -4
  427. package/esm/utils/appendTooltip.d.ts +1 -1
  428. package/esm/utils/constants.d.ts +4 -4
  429. package/esm/utils/createChainedFunction.d.ts +1 -1
  430. package/esm/utils/getDataGroupBy.d.ts +1 -1
  431. package/esm/utils/mergeRefs.d.ts +2 -2
  432. package/esm/utils/previewFile.d.ts +1 -1
  433. package/esm/utils/propTypeChecker.d.ts +6 -2
  434. package/esm/utils/propTypeChecker.js +7 -6
  435. package/esm/utils/reactToString.d.ts +2 -1
  436. package/esm/utils/statusIcons.d.ts +1 -1
  437. package/esm/utils/stringToObject.d.ts +1 -1
  438. package/esm/utils/treeUtils.d.ts +32 -29
  439. package/esm/utils/treeUtils.js +45 -21
  440. package/esm/utils/useControlled.d.ts +6 -1
  441. package/esm/utils/useControlled.js +0 -8
  442. package/esm/utils/useCustom.js +6 -4
  443. package/esm/utils/useElementResize.d.ts +1 -1
  444. package/esm/utils/useElementResize.js +12 -5
  445. package/esm/utils/useFocus.d.ts +2 -2
  446. package/esm/utils/usePortal.d.ts +1 -1
  447. package/esm/utils/useRootClose.d.ts +2 -2
  448. package/esm/utils/useTimeout.d.ts +1 -1
  449. package/esm/utils/useTimeout.js +5 -3
  450. package/package.json +4 -4
  451. package/styles/index.less +1 -0
@@ -1,43 +1,6 @@
1
- import React from 'react';
2
- import { MaskType, MaskFunctionType, ConfigType } from './types';
3
- /**
4
- * https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#guide
5
- */
6
- interface TextMaskProps {
7
- /**
8
- * `guide` is a boolean that tells the component whether to be in guide or no guide mode.
9
- */
10
- guide?: boolean;
11
- /**
12
- * `mask` is an array or a function that defines how the user input is going to be masked.
13
- */
14
- mask?: MaskType | MaskFunctionType | boolean;
15
- /**
16
- * `showMask` is a boolean that tells the Text Mask component to display the mask as a placeholder
17
- * in place of the regular placeholder when the input element value is empty.
18
- */
19
- showMask?: boolean;
20
- /** The placeholder character represents the fillable spot in the mask. The default placeholder character is underscore, _. */
21
- placeholderChar?: string;
22
- /** `keepCharPositions` changes the general behavior of the Text Mask component. */
23
- keepCharPositions?: boolean;
24
- /** You can provide a `pipe` function that will give you the opportunity to modify the conformed value before it is displayed on the screen. */
25
- pipe?: (conformedValue: string, config: ConfigType) => string;
26
- }
27
- export declare type MaskedInputProps = TextMaskProps & React.HTMLAttributes<HTMLInputElement> & {
28
- /** Custom rendering DOM */
29
- render?: (ref: React.Ref<HTMLInputElement>, props: React.HTMLAttributes<HTMLInputElement>) => any;
30
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
31
- value?: string | number;
32
- readOnly?: boolean;
33
- disabled?: boolean;
34
- };
35
- declare const MaskedInput: React.ForwardRefExoticComponent<TextMaskProps & React.HTMLAttributes<HTMLInputElement> & {
36
- /** Custom rendering DOM */
37
- render?: (ref: React.Ref<HTMLInputElement>, props: React.HTMLAttributes<HTMLInputElement>) => any;
38
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
39
- value?: string | number;
40
- readOnly?: boolean;
41
- disabled?: boolean;
42
- } & React.RefAttributes<HTMLInputElement>>;
1
+ import { InputProps } from '../Input';
2
+ import type { TextMaskProps } from './TextMask';
3
+ import { RsRefForwardingComponent } from '../@types/common';
4
+ export declare type MaskedInputProps = Omit<TextMaskProps, 'onChange'> & Omit<InputProps, 'type'>;
5
+ declare const MaskedInput: RsRefForwardingComponent<'input', MaskedInputProps>;
43
6
  export default MaskedInput;
@@ -1,80 +1,26 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  exports.__esModule = true;
8
6
  exports.default = void 0;
9
7
 
10
- var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
-
12
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
9
 
14
- var _react = _interopRequireWildcard(require("react"));
15
-
16
- var _omit = _interopRequireDefault(require("lodash/omit"));
10
+ var _react = _interopRequireDefault(require("react"));
17
11
 
18
- var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _TextMask = _interopRequireDefault(require("./TextMask"));
19
13
 
20
- var _createTextMaskInputElement = _interopRequireDefault(require("./createTextMaskInputElement"));
21
-
22
- var _utils = require("../utils");
23
-
24
- var defaultRender = function defaultRender(ref, props) {
25
- return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
26
- ref: ref
27
- }, props));
28
- };
14
+ var _Input = _interopRequireDefault(require("../Input"));
29
15
 
30
16
  var MaskedInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
31
- var mask = props.mask,
32
- _props$guide = props.guide,
33
- guide = _props$guide === void 0 ? true : _props$guide,
34
- placeholderChar = props.placeholderChar,
35
- value = props.value,
36
- showMask = props.showMask,
37
- pipe = props.pipe,
38
- _props$render = props.render,
39
- render = _props$render === void 0 ? defaultRender : _props$render,
40
- onChange = props.onChange,
41
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["mask", "guide", "placeholderChar", "value", "showMask", "pipe", "render", "onChange"]);
42
- var inputRef = (0, _react.useRef)(null);
43
- var textMaskInputElement = (0, _react.useRef)();
44
- var initTextMask = (0, _react.useCallback)(function () {
45
- var _textMaskInputElement;
46
-
47
- textMaskInputElement.current = (0, _createTextMaskInputElement.default)((0, _extends2.default)({
48
- inputElement: inputRef.current
49
- }, props));
50
- (_textMaskInputElement = textMaskInputElement.current) === null || _textMaskInputElement === void 0 ? void 0 : _textMaskInputElement.update(value);
51
- }, [props, value]);
52
- var handleChange = (0, _react.useCallback)(function (event) {
53
- var _textMaskInputElement2;
54
-
55
- (_textMaskInputElement2 = textMaskInputElement.current) === null || _textMaskInputElement2 === void 0 ? void 0 : _textMaskInputElement2.update();
56
- onChange === null || onChange === void 0 ? void 0 : onChange(event);
57
- }, [onChange]);
58
- (0, _react.useEffect)(function () {
59
- initTextMask();
60
- }, [guide, placeholderChar, showMask, pipe, mask, value, initTextMask]);
61
- return render((0, _utils.mergeRefs)(inputRef, ref), (0, _extends2.default)({
62
- onChange: handleChange,
63
- defaultValue: value
64
- }, (0, _omit.default)(rest, ['keepCharPositions'])));
17
+ var _props$as = props.as,
18
+ inputAs = _props$as === void 0 ? _TextMask.default : _props$as;
19
+ return /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({}, props, {
20
+ as: inputAs,
21
+ ref: ref
22
+ }));
65
23
  });
66
24
 
67
- MaskedInput.displayName = 'MaskedInput';
68
- MaskedInput.propTypes = {
69
- render: _propTypes.default.func,
70
- onChange: _propTypes.default.func,
71
- mask: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.func, _propTypes.default.bool]).isRequired,
72
- guide: _propTypes.default.bool,
73
- value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
74
- pipe: _propTypes.default.func,
75
- placeholderChar: _propTypes.default.string,
76
- keepCharPositions: _propTypes.default.bool,
77
- showMask: _propTypes.default.bool
78
- };
79
25
  var _default = MaskedInput;
80
26
  exports.default = _default;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { MaskType, MaskFunctionType, ConfigType } from './types';
3
+ /**
4
+ * https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#guide
5
+ */
6
+ interface TextMaskBaseProps {
7
+ /**
8
+ * `guide` is a boolean that tells the component whether to be in guide or no guide mode.
9
+ */
10
+ guide?: boolean;
11
+ /**
12
+ * `mask` is an array or a function that defines how the user input is going to be masked.
13
+ */
14
+ mask?: MaskType | MaskFunctionType | boolean;
15
+ /**
16
+ * `showMask` is a boolean that tells the Text Mask component to display the mask as a placeholder
17
+ * in place of the regular placeholder when the input element value is empty.
18
+ */
19
+ showMask?: boolean;
20
+ /** The placeholder character represents the fillable spot in the mask. The default placeholder character is underscore, _. */
21
+ placeholderChar?: string;
22
+ /** `keepCharPositions` changes the general behavior of the Text Mask component. */
23
+ keepCharPositions?: boolean;
24
+ /** You can provide a `pipe` function that will give you the opportunity to modify the conformed value before it is displayed on the screen. */
25
+ pipe?: (conformedValue: string, config: ConfigType) => string;
26
+ }
27
+ export declare type TextMaskProps = TextMaskBaseProps & React.HTMLAttributes<HTMLInputElement> & {
28
+ /** Custom rendering DOM */
29
+ render?: (ref: React.Ref<HTMLInputElement>, props: React.HTMLAttributes<HTMLInputElement>) => any;
30
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
31
+ value?: string | number;
32
+ readOnly?: boolean;
33
+ disabled?: boolean;
34
+ };
35
+ declare const TextMask: React.ForwardRefExoticComponent<TextMaskBaseProps & React.HTMLAttributes<HTMLInputElement> & {
36
+ /** Custom rendering DOM */
37
+ render?: ((ref: React.Ref<HTMLInputElement>, props: React.HTMLAttributes<HTMLInputElement>) => any) | undefined;
38
+ onChange?: ((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined;
39
+ value?: string | number | undefined;
40
+ readOnly?: boolean | undefined;
41
+ disabled?: boolean | undefined;
42
+ } & React.RefAttributes<HTMLInputElement>>;
43
+ export default TextMask;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _omit = _interopRequireDefault(require("lodash/omit"));
17
+
18
+ var _propTypes = _interopRequireDefault(require("prop-types"));
19
+
20
+ var _createTextMaskInputElement = _interopRequireDefault(require("./createTextMaskInputElement"));
21
+
22
+ var _utils = require("../utils");
23
+
24
+ var defaultRender = function defaultRender(ref, props) {
25
+ return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
26
+ ref: ref
27
+ }, props));
28
+ };
29
+
30
+ var TextMask = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
31
+ var mask = props.mask,
32
+ _props$guide = props.guide,
33
+ guide = _props$guide === void 0 ? true : _props$guide,
34
+ placeholderChar = props.placeholderChar,
35
+ value = props.value,
36
+ showMask = props.showMask,
37
+ pipe = props.pipe,
38
+ _props$render = props.render,
39
+ render = _props$render === void 0 ? defaultRender : _props$render,
40
+ onChange = props.onChange,
41
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["mask", "guide", "placeholderChar", "value", "showMask", "pipe", "render", "onChange"]);
42
+ var inputRef = (0, _react.useRef)(null);
43
+ var textMaskInputElement = (0, _react.useRef)();
44
+ var initTextMask = (0, _react.useCallback)(function () {
45
+ var _textMaskInputElement;
46
+
47
+ textMaskInputElement.current = (0, _createTextMaskInputElement.default)((0, _extends2.default)({
48
+ inputElement: inputRef.current
49
+ }, props));
50
+ (_textMaskInputElement = textMaskInputElement.current) === null || _textMaskInputElement === void 0 ? void 0 : _textMaskInputElement.update(value);
51
+ }, [props, value]);
52
+ var handleChange = (0, _react.useCallback)(function (event) {
53
+ var _textMaskInputElement2;
54
+
55
+ (_textMaskInputElement2 = textMaskInputElement.current) === null || _textMaskInputElement2 === void 0 ? void 0 : _textMaskInputElement2.update();
56
+ onChange === null || onChange === void 0 ? void 0 : onChange(event);
57
+ }, [onChange]);
58
+ (0, _react.useEffect)(function () {
59
+ initTextMask();
60
+ }, [guide, placeholderChar, showMask, pipe, mask, value, initTextMask]);
61
+ return render((0, _utils.mergeRefs)(inputRef, ref), (0, _extends2.default)({
62
+ onChange: handleChange,
63
+ defaultValue: value
64
+ }, (0, _omit.default)(rest, ['keepCharPositions'])));
65
+ });
66
+
67
+ TextMask.displayName = 'TextMask';
68
+ TextMask.propTypes = {
69
+ render: _propTypes.default.func,
70
+ onChange: _propTypes.default.func,
71
+ mask: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.func, _propTypes.default.bool]).isRequired,
72
+ guide: _propTypes.default.bool,
73
+ value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
74
+ pipe: _propTypes.default.func,
75
+ placeholderChar: _propTypes.default.string,
76
+ keepCharPositions: _propTypes.default.bool,
77
+ showMask: _propTypes.default.bool
78
+ };
79
+ var _default = TextMask;
80
+ exports.default = _default;
@@ -1,11 +1,11 @@
1
1
  export default function adjustCaretPosition({ previousConformedValue, previousPlaceholder, currentCaretPosition, conformedValue, rawValue, placeholderChar, placeholder, indexesOfPipedChars, caretTrapIndexes }: {
2
- previousConformedValue?: string;
3
- previousPlaceholder?: string;
4
- currentCaretPosition?: number;
2
+ previousConformedValue?: string | undefined;
3
+ previousPlaceholder?: string | undefined;
4
+ currentCaretPosition?: number | undefined;
5
5
  conformedValue: any;
6
6
  rawValue: any;
7
7
  placeholderChar: any;
8
8
  placeholder: any;
9
- indexesOfPipedChars?: any[];
10
- caretTrapIndexes?: any[];
11
- }): number;
9
+ indexesOfPipedChars?: string[] | undefined;
10
+ caretTrapIndexes?: number[] | undefined;
11
+ }): number | undefined;
@@ -49,7 +49,8 @@ function conformToMask(rawValue, mask, config) {
49
49
  placeholderChar = _config$placeholderCh === void 0 ? _utilities.defaultPlaceholderChar : _config$placeholderCh,
50
50
  _config$placeholder = _config.placeholder,
51
51
  placeholder = _config$placeholder === void 0 ? (0, _utilities.convertMaskToPlaceholder)(mask, placeholderChar) : _config$placeholder,
52
- currentCaretPosition = _config.currentCaretPosition,
52
+ _config$currentCaretP = _config.currentCaretPosition,
53
+ currentCaretPosition = _config$currentCaretP === void 0 ? 0 : _config$currentCaretP,
53
54
  keepCharPositions = _config.keepCharPositions; // The configs below indicate that the user wants the algorithm to work in *no guide* mode
54
55
 
55
56
  var suppressGuide = guide === false && previousConformedValue !== undefined; // Calculate lengths once for performance
@@ -130,9 +131,9 @@ function conformToMask(rawValue, mask, config) {
130
131
  // or we find at least one character that we can map.
131
132
  while (rawValueArr.length > 0) {
132
133
  // Let's retrieve the first user character in the queue of characters we have left
133
- var _rawValueArr$shift = rawValueArr.shift(),
134
- rawValueChar = _rawValueArr$shift.char,
135
- isNew = _rawValueArr$shift.isNew; // If the character we got from the user input is a placeholder character (which happens
134
+ var _ref = rawValueArr.shift(),
135
+ rawValueChar = _ref.char,
136
+ isNew = _ref.isNew; // If the character we got from the user input is a placeholder character (which happens
136
137
  // regularly because user input could be something like (540) 90_-____, which includes
137
138
  // a bunch of `_` which are placeholder characters) and we are not in *no guide* mode,
138
139
  // then we map this placeholder character to the current spot in the placeholder
@@ -1,7 +1,7 @@
1
1
  export default function createTextMaskInputElement(config: any): {
2
2
  state: {
3
- previousConformedValue: any;
4
- previousPlaceholder: any;
3
+ previousConformedValue: undefined;
4
+ previousPlaceholder: undefined;
5
5
  };
6
6
  update(rawValue: any, { inputElement, mask: providedMask, guide, pipe, placeholderChar, keepCharPositions, showMask }?: any): void;
7
7
  };
@@ -3,5 +3,5 @@ export declare const defaultPlaceholderChar = "_";
3
3
  export declare function convertMaskToPlaceholder(mask?: MaskType | MaskFunctionType, placeholderChar?: string): string;
4
4
  export declare function processCaretTraps(mask: any): {
5
5
  maskWithoutCaretTraps: any;
6
- indexes: any[];
6
+ indexes: number[];
7
7
  };
package/cjs/Menu/Menu.js CHANGED
@@ -13,6 +13,8 @@ var _react = _interopRequireWildcard(require("react"));
13
13
 
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
 
16
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
17
+
16
18
  var _MenuContext = _interopRequireWildcard(require("./MenuContext"));
17
19
 
18
20
  var _utils = require("../utils");
@@ -21,7 +23,7 @@ var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
21
23
 
22
24
  var _useMenu = _interopRequireDefault(require("./useMenu"));
23
25
 
24
- var _useFocus = _interopRequireDefault(require("../utils/useFocus"));
26
+ var _useFocus2 = _interopRequireDefault(require("../utils/useFocus"));
25
27
 
26
28
  var _useClickOutside = _interopRequireDefault(require("../utils/useClickOutside"));
27
29
 
@@ -45,8 +47,8 @@ function Menu(props) {
45
47
  renderMenuButton = props.renderMenuButton,
46
48
  renderMenuPopup = props.renderMenuPopup,
47
49
  onToggleMenu = props.onToggleMenu;
48
- var buttonElementRef = (0, _react.useRef)();
49
- var menuElementRef = (0, _react.useRef)();
50
+ var buttonElementRef = (0, _react.useRef)(null);
51
+ var menuElementRef = (0, _react.useRef)(null);
50
52
  var parentMenu = (0, _react.useContext)(_MenuContext.default);
51
53
  var isSubmenu = !!parentMenu;
52
54
  var menu = (0, _useMenu.default)();
@@ -59,8 +61,11 @@ function Menu(props) {
59
61
  var _useCustom = (0, _utils.useCustom)('Menu'),
60
62
  rtl = _useCustom.rtl;
61
63
 
62
- var activeItem = (_items$activeItemInde = items[activeItemIndex]) === null || _items$activeItemInde === void 0 ? void 0 : _items$activeItemInde.element;
63
- var menuFocus = (0, _useFocus.default)(menuElementRef);
64
+ var activeItem = (0, _isNil.default)(activeItemIndex) ? null : (_items$activeItemInde = items[activeItemIndex]) === null || _items$activeItemInde === void 0 ? void 0 : _items$activeItemInde.element;
65
+
66
+ var _useFocus = (0, _useFocus2.default)(menuElementRef),
67
+ grabFocus = _useFocus.grab;
68
+
64
69
  var openMenu = (0, _react.useCallback)(function (event) {
65
70
  dispatch({
66
71
  type: _MenuContext.MenuActionTypes.OpenMenu
@@ -74,8 +79,8 @@ function Menu(props) {
74
79
  }
75
80
 
76
81
  onToggleMenu === null || onToggleMenu === void 0 ? void 0 : onToggleMenu(true, event);
77
- menuFocus.grab();
78
- }, [dispatch, onToggleMenu, menuFocus]);
82
+ grabFocus();
83
+ }, [dispatch, onToggleMenu, grabFocus]);
79
84
  var closeMenu = (0, _react.useCallback)(function (event, returnFocusToButton) {
80
85
  if (returnFocusToButton === void 0) {
81
86
  returnFocusToButton = true;
@@ -91,7 +96,9 @@ function Menu(props) {
91
96
  onToggleMenu === null || onToggleMenu === void 0 ? void 0 : onToggleMenu(false, event);
92
97
 
93
98
  if (returnFocusToButton) {
94
- buttonElementRef.current.focus({
99
+ var _buttonElementRef$cur;
100
+
101
+ (_buttonElementRef$cur = buttonElementRef.current) === null || _buttonElementRef$cur === void 0 ? void 0 : _buttonElementRef$cur.focus({
95
102
  preventScroll: true
96
103
  });
97
104
  }
@@ -106,7 +113,9 @@ function Menu(props) {
106
113
  (0, _useClickOutside.default)({
107
114
  enabled: open,
108
115
  isOutside: function isOutside(event) {
109
- return !buttonElementRef.current.contains(event.target) && !menuElementRef.current.contains(event.target);
116
+ var _buttonElementRef$cur2, _menuElementRef$curre;
117
+
118
+ return !((_buttonElementRef$cur2 = buttonElementRef.current) !== null && _buttonElementRef$cur2 !== void 0 && _buttonElementRef$cur2.contains(event.target)) && !((_menuElementRef$curre = menuElementRef.current) !== null && _menuElementRef$curre !== void 0 && _menuElementRef$curre.contains(event.target));
110
119
  },
111
120
  // fixme if clicking on a focusable element, don't move focus to menu button
112
121
  handle: function handle(event) {
@@ -170,39 +179,48 @@ function Menu(props) {
170
179
  if (disabled) return;
171
180
  openMenu(event);
172
181
  }, [open, disabled, openMenu]);
173
- var buttonEventHandlers = {
174
- onKeyDown: handleButtonKeydown
175
- };
176
- /**
177
- * Bind event of trigger,
178
- * not used in in the expanded state of '<Sidenav>'
179
- */
180
-
181
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
182
- buttonEventHandlers.onClick = handleButtonClick;
183
- }
182
+ var buttonEventHandlers = (0, _react.useMemo)(function () {
183
+ var buttonEventHandlers = {
184
+ onKeyDown: handleButtonKeydown
185
+ };
186
+ /**
187
+ * Bind event of trigger,
188
+ * not used in in the expanded state of '<Sidenav>'
189
+ */
190
+
191
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
192
+ buttonEventHandlers.onClick = handleButtonClick;
193
+ }
184
194
 
185
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
186
- buttonEventHandlers.onContextMenu = handleButtonContextMenu;
187
- }
195
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
196
+ buttonEventHandlers.onContextMenu = handleButtonContextMenu;
197
+ }
188
198
 
199
+ return buttonEventHandlers;
200
+ }, [openMenuOn, handleButtonKeydown, handleButtonClick, handleButtonContextMenu]);
189
201
  var buttonId = (0, _useUniqueId.default)('menubutton-');
190
- var menuId = (0, _useUniqueId.default)('menu-'); // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
191
-
192
- var buttonAriaAttributes = {
193
- role: 'button',
194
- 'aria-haspopup': 'menu',
195
- 'aria-expanded': open || undefined,
196
- // it's recommend to remove aria-expanded when menu is hidden
197
- 'aria-controls': menuId
198
- };
199
- var buttonProps = (0, _extends2.default)({
200
- id: buttonId
201
- }, buttonAriaAttributes, buttonEventHandlers, {
202
- // render props
203
- open: open
204
- });
205
- var customMenuButton = renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
202
+ var menuId = (0, _useUniqueId.default)('menu-');
203
+ var buttonAriaAttributes = (0, _react.useMemo)(function () {
204
+ // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
205
+ return {
206
+ role: 'button',
207
+ 'aria-haspopup': 'menu',
208
+ 'aria-expanded': open || undefined,
209
+ // it's recommend to remove aria-expanded when menu is hidden
210
+ 'aria-controls': menuId
211
+ };
212
+ }, [open, menuId]);
213
+ var buttonProps = (0, _react.useMemo)(function () {
214
+ return (0, _extends2.default)({
215
+ id: buttonId
216
+ }, buttonAriaAttributes, buttonEventHandlers, {
217
+ // render props
218
+ open: open
219
+ });
220
+ }, [buttonId, buttonAriaAttributes, buttonEventHandlers, open]);
221
+ var customMenuButton = (0, _react.useMemo)(function () {
222
+ return renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
223
+ }, [renderMenuButton, buttonProps, buttonElementRef]);
206
224
  var buttonElement = customMenuButton !== null && customMenuButton !== void 0 ? customMenuButton : /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({
207
225
  ref: buttonElementRef
208
226
  }, buttonProps), menuButtonText);
@@ -336,7 +354,8 @@ function Menu(props) {
336
354
  });
337
355
  var customMenuPopup = renderMenuPopup === null || renderMenuPopup === void 0 ? void 0 : renderMenuPopup((0, _extends2.default)({}, menuProps, {
338
356
  open: open
339
- }), menuElementRef);
357
+ }), menuElementRef); // fixme Wrong children here
358
+
340
359
  var menuElement = customMenuPopup !== null && customMenuPopup !== void 0 ? customMenuPopup : /*#__PURE__*/_react.default.createElement("ul", (0, _extends2.default)({
341
360
  ref: menuElementRef
342
361
  }, menuProps, {
@@ -352,7 +371,7 @@ function Menu(props) {
352
371
  closeMenu(e);
353
372
  }
354
373
  }, [disabled, closeMenu]);
355
- var rootElementRef = (0, _react.useRef)();
374
+ var rootElementRef = (0, _react.useRef)(null);
356
375
  var handleContainerBlur = (0, _react.useCallback)(function (event) {
357
376
  if ((0, _events.isFocusLeaving)(event)) {
358
377
  closeMenu(event, false);
@@ -47,5 +47,5 @@ export declare type MenuAction = {
47
47
  to: MoveFocusTo.Specific;
48
48
  id: string;
49
49
  };
50
- declare const MenuContext: React.Context<MenuContextProps>;
50
+ declare const MenuContext: React.Context<MenuContextProps | null>;
51
51
  export default MenuContext;
@@ -8,7 +8,7 @@ export interface MenuItemProps {
8
8
  /** Render prop */
9
9
  children: (menuitem: React.LiHTMLAttributes<HTMLLIElement> & MenuitemRenderProps, ref: React.Ref<HTMLLIElement>) => React.ReactElement;
10
10
  /** Callback when menuitem is being activated */
11
- onActivate?: (event: React.SyntheticEvent) => void;
11
+ onActivate?: React.MouseEventHandler;
12
12
  }
13
13
  export interface MenuitemRenderProps {
14
14
  selected: boolean;
@@ -11,6 +11,8 @@ var _react = require("react");
11
11
 
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
15
+
14
16
  var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
15
17
 
16
18
  var _MenuContext = _interopRequireWildcard(require("./MenuContext"));
@@ -19,22 +21,24 @@ var _MenuContext = _interopRequireWildcard(require("./MenuContext"));
19
21
  * Headless ARIA `menuitem`
20
22
  */
21
23
  function MenuItem(props) {
22
- var _menuState$items$menu;
23
-
24
24
  var children = props.children,
25
- selected = props.selected,
26
- disabled = props.disabled,
25
+ _props$selected = props.selected,
26
+ selected = _props$selected === void 0 ? false : _props$selected,
27
+ _props$disabled = props.disabled,
28
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
27
29
  onActivate = props.onActivate;
28
- var menuitemRef = (0, _react.useRef)();
30
+ var menuitemRef = (0, _react.useRef)(null);
29
31
  var menuitemId = (0, _useUniqueId.default)('menuitem-');
30
- var menu = (0, _react.useContext)(_MenuContext.default); // fixme make sure <MenuItem> is used inside a <Menu>
32
+ var menu = (0, _react.useContext)(_MenuContext.default);
31
33
 
32
- var _ref = menu !== null && menu !== void 0 ? menu : [],
33
- menuState = _ref[0],
34
- dispatch = _ref[1]; // Whether this menuitem has focus (indicated by `aria-activedescendant` from parent menu)
34
+ if (!menu) {
35
+ throw new Error('<MenuItem> must be rendered within a <Menu>');
36
+ }
35
37
 
38
+ var menuState = menu[0],
39
+ dispatch = menu[1]; // Whether this menuitem has focus (indicated by `aria-activedescendant` from parent menu)
36
40
 
37
- var hasFocus = (menuState === null || menuState === void 0 ? void 0 : (_menuState$items$menu = menuState.items[menuState === null || menuState === void 0 ? void 0 : menuState.activeItemIndex]) === null || _menuState$items$menu === void 0 ? void 0 : _menuState$items$menu.element) === menuitemRef.current && !!menuitemRef.current;
41
+ var hasFocus = !(0, _isNil.default)(menuitemRef.current) && !(0, _isNil.default)(menuState.activeItemIndex) && menuState.items[menuState.activeItemIndex].element === menuitemRef.current;
38
42
  var handleClick = (0, _react.useCallback)(function (event) {
39
43
  if (disabled) {
40
44
  return;
@@ -44,20 +48,24 @@ function MenuItem(props) {
44
48
  }, [disabled, onActivate]); // Gain/release focus on mousedown in `menubar`
45
49
 
46
50
  var handleMouseDown = (0, _react.useCallback)(function () {
47
- dispatch({
48
- type: _MenuContext.MenuActionTypes.MoveFocus,
49
- to: _MenuContext.MoveFocusTo.Specific,
50
- id: menuitemRef.current.id
51
- });
51
+ if (!(0, _isNil.default)(menuitemRef.current) && !hasFocus) {
52
+ dispatch({
53
+ type: _MenuContext.MenuActionTypes.MoveFocus,
54
+ to: _MenuContext.MoveFocusTo.Specific,
55
+ id: menuitemRef.current.id
56
+ });
57
+ }
52
58
  }, [dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
53
59
 
54
60
  var handleMouseMove = (0, _react.useCallback)(function () {
55
- dispatch({
56
- type: _MenuContext.MenuActionTypes.MoveFocus,
57
- to: _MenuContext.MoveFocusTo.Specific,
58
- id: menuitemRef.current.id
59
- });
60
- }, [dispatch]);
61
+ if (!(0, _isNil.default)(menuitemRef.current) && !hasFocus) {
62
+ dispatch({
63
+ type: _MenuContext.MenuActionTypes.MoveFocus,
64
+ to: _MenuContext.MoveFocusTo.Specific,
65
+ id: menuitemRef.current.id
66
+ });
67
+ }
68
+ }, [hasFocus, dispatch]);
61
69
  var handleMouseLeave = (0, _react.useCallback)(function () {
62
70
  dispatch({
63
71
  type: _MenuContext.MenuActionTypes.MoveFocus,
@@ -66,7 +74,7 @@ function MenuItem(props) {
66
74
  }, [dispatch]);
67
75
  (0, _react.useEffect)(function () {
68
76
  var menuitemElement = menuitemRef.current;
69
- dispatch === null || dispatch === void 0 ? void 0 : dispatch({
77
+ dispatch({
70
78
  type: _MenuContext.MenuActionTypes.RegisterItem,
71
79
  element: menuitemElement,
72
80
  props: {
@@ -74,7 +82,7 @@ function MenuItem(props) {
74
82
  }
75
83
  });
76
84
  return function () {
77
- dispatch === null || dispatch === void 0 ? void 0 : dispatch({
85
+ dispatch({
78
86
  type: _MenuContext.MenuActionTypes.UnregisterItem,
79
87
  id: menuitemElement.id
80
88
  });