@broxus/react-uikit 0.22.0 → 0.23.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 (406) hide show
  1. package/dist/assets/accordion.css +135 -0
  2. package/dist/assets/alert.css +120 -0
  3. package/dist/assets/align.css +105 -0
  4. package/dist/assets/animation.css +387 -0
  5. package/dist/assets/article.css +51 -0
  6. package/dist/assets/background.css +209 -0
  7. package/dist/assets/badge.css +46 -0
  8. package/dist/assets/base.css +571 -0
  9. package/dist/assets/breadcrumb.css +69 -0
  10. package/dist/assets/button.css +491 -0
  11. package/dist/assets/card.css +255 -0
  12. package/dist/assets/checkbox.css +240 -0
  13. package/dist/assets/close.css +24 -0
  14. package/dist/assets/column.css +145 -0
  15. package/dist/assets/comment.css +87 -0
  16. package/dist/assets/container.css +171 -0
  17. package/dist/assets/control.css +262 -0
  18. package/dist/assets/cover.css +55 -0
  19. package/dist/assets/datepicker.css +662 -0
  20. package/dist/assets/description-list.css +39 -0
  21. package/dist/assets/divider.css +98 -0
  22. package/dist/assets/dotnav.css +100 -0
  23. package/dist/assets/drawer.css +562 -0
  24. package/dist/assets/drop.css +47 -0
  25. package/dist/assets/dropdown.css +118 -0
  26. package/dist/assets/flex.css +392 -0
  27. package/dist/assets/form.css +486 -0
  28. package/dist/assets/grid.css +545 -0
  29. package/dist/assets/heading.css +175 -0
  30. package/dist/assets/height.css +63 -0
  31. package/dist/assets/icon.css +188 -0
  32. package/dist/assets/iconnav.css +83 -0
  33. package/dist/assets/input-number.css +89 -0
  34. package/dist/assets/input-password.css +24 -0
  35. package/dist/assets/inverse.css +746 -0
  36. package/dist/assets/label.css +70 -0
  37. package/dist/assets/leader.css +44 -0
  38. package/dist/assets/link.css +79 -0
  39. package/dist/assets/list.css +211 -0
  40. package/dist/assets/margin.css +362 -0
  41. package/dist/assets/marker.css +28 -0
  42. package/dist/assets/mixin.css +1 -0
  43. package/dist/assets/mixins.css +1 -0
  44. package/dist/assets/modal.css +227 -0
  45. package/dist/assets/motion.css +492 -0
  46. package/dist/assets/nav.css +406 -0
  47. package/dist/assets/navbar.css +468 -0
  48. package/dist/assets/overlay.css +38 -0
  49. package/dist/assets/padding.css +70 -0
  50. package/dist/assets/pagination.css +78 -0
  51. package/dist/assets/placeholder.css +27 -0
  52. package/dist/assets/position.css +216 -0
  53. package/dist/assets/print.css +43 -0
  54. package/dist/assets/progress.css +79 -0
  55. package/dist/assets/radio.css +196 -0
  56. package/dist/assets/search.css +258 -0
  57. package/dist/assets/section.css +138 -0
  58. package/dist/assets/segmented.css +193 -0
  59. package/dist/assets/select.css +515 -0
  60. package/dist/assets/slider.css +392 -0
  61. package/dist/assets/spinner.css +51 -0
  62. package/dist/assets/sticky.css +31 -0
  63. package/dist/assets/subnav.css +171 -0
  64. package/dist/assets/svg.css +23 -0
  65. package/dist/assets/switch.css +167 -0
  66. package/dist/assets/table.css +224 -0
  67. package/dist/assets/tabs.css +631 -0
  68. package/dist/assets/text.css +385 -0
  69. package/dist/assets/textarea.css +54 -0
  70. package/dist/assets/thumbnav.css +67 -0
  71. package/dist/assets/tile.css +138 -0
  72. package/dist/assets/tooltip.css +47 -0
  73. package/dist/assets/totop.css +32 -0
  74. package/dist/assets/transition.css +154 -0
  75. package/dist/assets/uikit.min.css +1 -0
  76. package/dist/assets/utility.css +494 -0
  77. package/dist/assets/variables.css +1 -0
  78. package/dist/assets/vars.css +89 -0
  79. package/dist/assets/visibility.css +140 -0
  80. package/dist/assets/width.css +538 -0
  81. package/dist/cjs/components/Accordion/Accordion.d.ts +3 -2
  82. package/dist/cjs/components/Accordion/Item.d.ts +1 -5
  83. package/dist/cjs/components/Accordion/Item.js +0 -4
  84. package/dist/cjs/components/Accordion/index.d.ts +1 -1
  85. package/dist/cjs/components/Alert/index.js +1 -3
  86. package/dist/cjs/components/Align/Align.d.ts +1 -1
  87. package/dist/cjs/components/Align/Center.d.ts +1 -1
  88. package/dist/cjs/components/Align/Left.d.ts +1 -1
  89. package/dist/cjs/components/Align/Right.d.ts +1 -1
  90. package/dist/cjs/components/Article/Article.d.ts +1 -1
  91. package/dist/cjs/components/Article/Meta.d.ts +1 -1
  92. package/dist/cjs/components/Article/Title.d.ts +1 -1
  93. package/dist/cjs/components/Badge/index.d.ts +1 -1
  94. package/dist/cjs/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  95. package/dist/cjs/components/Breadcrumb/Item.d.ts +1 -1
  96. package/dist/cjs/components/Button/Group.d.ts +1 -1
  97. package/dist/cjs/components/Card/Badge.d.ts +1 -1
  98. package/dist/cjs/components/Card/Body.d.ts +1 -1
  99. package/dist/cjs/components/Card/Card.d.ts +1 -1
  100. package/dist/cjs/components/Card/Footer.d.ts +1 -1
  101. package/dist/cjs/components/Card/Header.d.ts +1 -1
  102. package/dist/cjs/components/Card/Media.d.ts +1 -1
  103. package/dist/cjs/components/Card/Title.d.ts +1 -1
  104. package/dist/cjs/components/Close/index.d.ts +1 -1
  105. package/dist/cjs/components/Component/index.d.ts +1 -1
  106. package/dist/cjs/components/ConfigProvider/index.d.ts +55 -40
  107. package/dist/cjs/components/Container/index.d.ts +1 -1
  108. package/dist/cjs/components/Control/Checkbox/Checkbox.d.ts +2 -2
  109. package/dist/cjs/components/Control/Checkbox/Group.d.ts +2 -2
  110. package/dist/cjs/components/Control/Checkbox/index.d.ts +1 -1
  111. package/dist/cjs/components/Control/Input/Input.js +2 -2
  112. package/dist/cjs/components/Control/Input/Number/index.js +4 -4
  113. package/dist/cjs/components/Control/Input/useInput.js +2 -1
  114. package/dist/cjs/components/Control/Radio/Group.js +2 -4
  115. package/dist/cjs/components/Control/Radio/index.d.ts +1 -1
  116. package/dist/cjs/components/Control/Select/Select.d.ts +18 -0
  117. package/dist/cjs/components/Control/Select/Select.js +248 -0
  118. package/dist/cjs/components/Control/Select/index.d.ts +4 -21
  119. package/dist/cjs/components/Control/Select/index.js +2 -246
  120. package/dist/cjs/components/Control/Select/placements.d.ts +1 -1
  121. package/dist/cjs/components/Control/TextArea/index.d.ts +3 -3
  122. package/dist/cjs/components/Control/TextArea/index.js +6 -5
  123. package/dist/cjs/components/Cover/index.d.ts +1 -1
  124. package/dist/cjs/components/DatePicker/PickerButton.d.ts +1 -1
  125. package/dist/cjs/components/DatePicker/generatePurePicker.js +1 -3
  126. package/dist/cjs/components/DescriptionList/Description.d.ts +1 -1
  127. package/dist/cjs/components/DescriptionList/DescriptionList.d.ts +1 -1
  128. package/dist/cjs/components/DescriptionList/Term.d.ts +1 -1
  129. package/dist/cjs/components/Divider/index.d.ts +1 -1
  130. package/dist/cjs/components/Dotnav/Dotnav.d.ts +1 -1
  131. package/dist/cjs/components/Dotnav/Item.d.ts +1 -1
  132. package/dist/cjs/components/Drawer/index.d.ts +1 -1
  133. package/dist/cjs/components/Drop/index.d.ts +1 -2
  134. package/dist/cjs/components/Drop/index.js +2 -1
  135. package/dist/cjs/components/Flex/Flex.d.ts +1 -1
  136. package/dist/cjs/components/Flex/Item.d.ts +1 -1
  137. package/dist/cjs/components/Flex/index.d.ts +1 -1
  138. package/dist/cjs/components/Form/Controls.d.ts +1 -1
  139. package/dist/cjs/components/Form/ControlsText.d.ts +1 -1
  140. package/dist/cjs/components/Form/Fieldset.d.ts +1 -1
  141. package/dist/cjs/components/Form/Form.d.ts +1 -1
  142. package/dist/cjs/components/Form/Label.d.ts +1 -1
  143. package/dist/cjs/components/Form/Legend.d.ts +1 -1
  144. package/dist/cjs/components/Grid/index.d.ts +1 -1
  145. package/dist/cjs/components/Heading/index.d.ts +1 -1
  146. package/dist/cjs/components/Icon/Button.d.ts +1 -1
  147. package/dist/cjs/components/Icon/Icon.d.ts +1 -1
  148. package/dist/cjs/components/Icon/Link.d.ts +1 -1
  149. package/dist/cjs/components/Icon/index.d.ts +1 -1
  150. package/dist/cjs/components/Iconnav/Iconnav.d.ts +1 -1
  151. package/dist/cjs/components/Iconnav/Item.d.ts +1 -1
  152. package/dist/cjs/components/Inverse/index.d.ts +2 -2
  153. package/dist/cjs/components/Label/index.d.ts +1 -1
  154. package/dist/cjs/components/List/Item.d.ts +1 -1
  155. package/dist/cjs/components/List/List.d.ts +1 -1
  156. package/dist/cjs/components/Modal/index.d.ts +1 -1
  157. package/dist/cjs/components/Nav/Divider.d.ts +1 -1
  158. package/dist/cjs/components/Nav/Divider.js +4 -8
  159. package/dist/cjs/components/Nav/Group/InternalNavGroup.d.ts +10 -0
  160. package/dist/cjs/components/Nav/Group/{InternalNavItemGroup.js → InternalNavGroup.js} +9 -9
  161. package/dist/cjs/components/Nav/Group/index.d.ts +4 -5
  162. package/dist/cjs/components/Nav/Group/index.js +12 -15
  163. package/dist/cjs/components/Nav/Header.d.ts +1 -3
  164. package/dist/cjs/components/Nav/Header.js +4 -4
  165. package/dist/cjs/components/Nav/Icon/index.d.ts +7 -0
  166. package/dist/cjs/components/Nav/{context/PrivateContext.js → Icon/index.js} +13 -5
  167. package/dist/cjs/components/Nav/Item/InternalNavItem.d.ts +1 -5
  168. package/dist/cjs/components/Nav/Item/InternalNavItem.js +26 -47
  169. package/dist/cjs/components/Nav/Item/LegacyNavItem.js +12 -6
  170. package/dist/cjs/components/Nav/Item/index.d.ts +1 -4
  171. package/dist/cjs/components/Nav/Item/index.js +9 -12
  172. package/dist/cjs/components/Nav/Nav.d.ts +8 -21
  173. package/dist/cjs/components/Nav/Nav.js +84 -89
  174. package/dist/cjs/components/Nav/Sub/InlineSubNavList.d.ts +1 -1
  175. package/dist/cjs/components/Nav/Sub/InlineSubNavList.js +6 -6
  176. package/dist/cjs/components/Nav/Sub/InternalSubNav.d.ts +15 -0
  177. package/dist/cjs/components/Nav/Sub/InternalSubNav.js +196 -0
  178. package/dist/cjs/components/Nav/Sub/PopupTrigger.d.ts +2 -1
  179. package/dist/cjs/components/Nav/Sub/PopupTrigger.js +10 -11
  180. package/dist/cjs/components/Nav/Sub/SubNavList.d.ts +1 -2
  181. package/dist/cjs/components/Nav/Sub/SubNavList.js +5 -5
  182. package/dist/cjs/components/Nav/Sub/index.d.ts +4 -15
  183. package/dist/cjs/components/Nav/Sub/index.js +11 -174
  184. package/dist/cjs/components/Nav/context/NavContext.d.ts +7 -3
  185. package/dist/cjs/components/Nav/context/NavContext.js +6 -6
  186. package/dist/cjs/components/Nav/context/index.d.ts +3 -0
  187. package/dist/cjs/components/Nav/context/index.js +19 -0
  188. package/dist/cjs/components/Nav/hooks/index.d.ts +5 -0
  189. package/dist/cjs/components/Nav/hooks/index.js +21 -0
  190. package/dist/cjs/components/Nav/hooks/useAccessibility.d.ts +11 -0
  191. package/dist/cjs/components/Nav/hooks/useAccessibility.js +97 -99
  192. package/dist/cjs/components/Nav/hooks/useActive.js +5 -13
  193. package/dist/cjs/components/Nav/hooks/useDirectionStyle.js +2 -2
  194. package/dist/cjs/components/Nav/hooks/useKeyRecords.d.ts +3 -3
  195. package/dist/cjs/components/Nav/hooks/useKeyRecords.js +5 -8
  196. package/dist/cjs/components/Nav/types.d.ts +14 -1
  197. package/dist/cjs/components/Nav/utils/alignUtil.d.ts +1 -1
  198. package/dist/cjs/components/Nav/utils/alignUtil.js +1 -4
  199. package/dist/cjs/components/Nav/utils/index.d.ts +5 -0
  200. package/dist/cjs/components/Nav/utils/index.js +21 -0
  201. package/dist/cjs/components/Nav/utils/nodeUtil.d.ts +2 -2
  202. package/dist/cjs/components/Nav/utils/nodeUtil.js +38 -34
  203. package/dist/cjs/components/Nav/utils/warnUtil.js +2 -5
  204. package/dist/cjs/components/Navbar/Center.d.ts +1 -1
  205. package/dist/cjs/components/Navbar/Container.d.ts +1 -1
  206. package/dist/cjs/components/Navbar/Item.d.ts +1 -1
  207. package/dist/cjs/components/Navbar/Left.d.ts +1 -1
  208. package/dist/cjs/components/Navbar/Navbar.d.ts +1 -1
  209. package/dist/cjs/components/Navbar/Right.d.ts +1 -1
  210. package/dist/cjs/components/Navbar/Toggle.d.ts +1 -1
  211. package/dist/cjs/components/Overlay/index.d.ts +1 -1
  212. package/dist/cjs/components/Progress/index.d.ts +1 -1
  213. package/dist/cjs/components/Section/index.d.ts +1 -1
  214. package/dist/cjs/components/Segmented/index.d.ts +1 -1
  215. package/dist/cjs/components/Slider/index.d.ts +1 -2
  216. package/dist/cjs/components/Spinner/index.d.ts +1 -1
  217. package/dist/cjs/components/Subnav/Item.d.ts +1 -1
  218. package/dist/cjs/components/Subnav/Subnav.d.ts +1 -1
  219. package/dist/cjs/components/Tabs/index.d.ts +6 -4
  220. package/dist/cjs/components/Tabs/index.js +8 -7
  221. package/dist/cjs/components/Text/index.d.ts +1 -1
  222. package/dist/cjs/components/Tile/index.d.ts +1 -1
  223. package/dist/cjs/components/Width/Width.d.ts +1 -1
  224. package/dist/cjs/constants.d.ts +12 -0
  225. package/dist/cjs/constants.js +16 -0
  226. package/dist/cjs/index.js +1 -1
  227. package/dist/cjs/utils/motion.d.ts +1 -1
  228. package/dist/esm/components/Accordion/Accordion.d.ts +3 -2
  229. package/dist/esm/components/Accordion/Item.d.ts +1 -5
  230. package/dist/esm/components/Accordion/Item.js +0 -4
  231. package/dist/esm/components/Accordion/index.d.ts +1 -1
  232. package/dist/esm/components/Alert/index.js +1 -3
  233. package/dist/esm/components/Align/Align.d.ts +1 -1
  234. package/dist/esm/components/Align/Center.d.ts +1 -1
  235. package/dist/esm/components/Align/Left.d.ts +1 -1
  236. package/dist/esm/components/Align/Right.d.ts +1 -1
  237. package/dist/esm/components/Article/Article.d.ts +1 -1
  238. package/dist/esm/components/Article/Meta.d.ts +1 -1
  239. package/dist/esm/components/Article/Title.d.ts +1 -1
  240. package/dist/esm/components/Badge/index.d.ts +1 -1
  241. package/dist/esm/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  242. package/dist/esm/components/Breadcrumb/Item.d.ts +1 -1
  243. package/dist/esm/components/Button/Group.d.ts +1 -1
  244. package/dist/esm/components/Card/Badge.d.ts +1 -1
  245. package/dist/esm/components/Card/Body.d.ts +1 -1
  246. package/dist/esm/components/Card/Card.d.ts +1 -1
  247. package/dist/esm/components/Card/Footer.d.ts +1 -1
  248. package/dist/esm/components/Card/Header.d.ts +1 -1
  249. package/dist/esm/components/Card/Media.d.ts +1 -1
  250. package/dist/esm/components/Card/Title.d.ts +1 -1
  251. package/dist/esm/components/Close/index.d.ts +1 -1
  252. package/dist/esm/components/Component/index.d.ts +1 -1
  253. package/dist/esm/components/ConfigProvider/index.d.ts +55 -40
  254. package/dist/esm/components/Container/index.d.ts +1 -1
  255. package/dist/esm/components/Control/Checkbox/Checkbox.d.ts +2 -2
  256. package/dist/esm/components/Control/Checkbox/Group.d.ts +2 -2
  257. package/dist/esm/components/Control/Checkbox/index.d.ts +1 -1
  258. package/dist/esm/components/Control/Input/Input.js +1 -1
  259. package/dist/esm/components/Control/Input/Number/index.js +3 -3
  260. package/dist/esm/components/Control/Input/useInput.js +2 -1
  261. package/dist/esm/components/Control/Radio/Group.js +2 -4
  262. package/dist/esm/components/Control/Radio/index.d.ts +1 -1
  263. package/dist/esm/components/Control/Select/Select.d.ts +18 -0
  264. package/dist/esm/components/Control/Select/Select.js +209 -0
  265. package/dist/esm/components/Control/Select/index.d.ts +4 -21
  266. package/dist/esm/components/Control/Select/index.js +1 -210
  267. package/dist/esm/components/Control/Select/placements.d.ts +1 -1
  268. package/dist/esm/components/Control/TextArea/index.d.ts +3 -3
  269. package/dist/esm/components/Control/TextArea/index.js +5 -4
  270. package/dist/esm/components/Cover/index.d.ts +1 -1
  271. package/dist/esm/components/DatePicker/PickerButton.d.ts +1 -1
  272. package/dist/esm/components/DatePicker/generatePurePicker.js +1 -3
  273. package/dist/esm/components/DescriptionList/Description.d.ts +1 -1
  274. package/dist/esm/components/DescriptionList/DescriptionList.d.ts +1 -1
  275. package/dist/esm/components/DescriptionList/Term.d.ts +1 -1
  276. package/dist/esm/components/Divider/index.d.ts +1 -1
  277. package/dist/esm/components/Dotnav/Dotnav.d.ts +1 -1
  278. package/dist/esm/components/Dotnav/Item.d.ts +1 -1
  279. package/dist/esm/components/Drawer/index.d.ts +1 -1
  280. package/dist/esm/components/Drop/index.d.ts +1 -2
  281. package/dist/esm/components/Drop/index.js +2 -1
  282. package/dist/esm/components/Flex/Flex.d.ts +1 -1
  283. package/dist/esm/components/Flex/Item.d.ts +1 -1
  284. package/dist/esm/components/Flex/index.d.ts +1 -1
  285. package/dist/esm/components/Form/Controls.d.ts +1 -1
  286. package/dist/esm/components/Form/ControlsText.d.ts +1 -1
  287. package/dist/esm/components/Form/Fieldset.d.ts +1 -1
  288. package/dist/esm/components/Form/Form.d.ts +1 -1
  289. package/dist/esm/components/Form/Label.d.ts +1 -1
  290. package/dist/esm/components/Form/Legend.d.ts +1 -1
  291. package/dist/esm/components/Grid/index.d.ts +1 -1
  292. package/dist/esm/components/Heading/index.d.ts +1 -1
  293. package/dist/esm/components/Icon/Button.d.ts +1 -1
  294. package/dist/esm/components/Icon/Icon.d.ts +1 -1
  295. package/dist/esm/components/Icon/Link.d.ts +1 -1
  296. package/dist/esm/components/Icon/index.d.ts +1 -1
  297. package/dist/esm/components/Iconnav/Iconnav.d.ts +1 -1
  298. package/dist/esm/components/Iconnav/Item.d.ts +1 -1
  299. package/dist/esm/components/Inverse/index.d.ts +2 -2
  300. package/dist/esm/components/Label/index.d.ts +1 -1
  301. package/dist/esm/components/List/Item.d.ts +1 -1
  302. package/dist/esm/components/List/List.d.ts +1 -1
  303. package/dist/esm/components/Modal/index.d.ts +1 -1
  304. package/dist/esm/components/Nav/Divider.d.ts +1 -1
  305. package/dist/esm/components/Nav/Divider.js +2 -6
  306. package/dist/esm/components/Nav/Group/InternalNavGroup.d.ts +10 -0
  307. package/dist/esm/components/Nav/Group/InternalNavGroup.js +16 -0
  308. package/dist/esm/components/Nav/Group/index.d.ts +4 -5
  309. package/dist/esm/components/Nav/Group/index.js +7 -7
  310. package/dist/esm/components/Nav/Header.d.ts +1 -3
  311. package/dist/esm/components/Nav/Header.js +3 -3
  312. package/dist/esm/components/Nav/Icon/index.d.ts +7 -0
  313. package/dist/esm/components/Nav/Icon/index.js +14 -0
  314. package/dist/esm/components/Nav/Item/InternalNavItem.d.ts +1 -5
  315. package/dist/esm/components/Nav/Item/InternalNavItem.js +16 -37
  316. package/dist/esm/components/Nav/Item/LegacyNavItem.js +11 -5
  317. package/dist/esm/components/Nav/Item/index.d.ts +1 -4
  318. package/dist/esm/components/Nav/Item/index.js +5 -8
  319. package/dist/esm/components/Nav/Nav.d.ts +8 -21
  320. package/dist/esm/components/Nav/Nav.js +70 -75
  321. package/dist/esm/components/Nav/Sub/InlineSubNavList.d.ts +1 -1
  322. package/dist/esm/components/Nav/Sub/InlineSubNavList.js +3 -3
  323. package/dist/esm/components/Nav/Sub/InternalSubNav.d.ts +15 -0
  324. package/dist/esm/components/Nav/Sub/InternalSubNav.js +157 -0
  325. package/dist/esm/components/Nav/Sub/PopupTrigger.d.ts +2 -1
  326. package/dist/esm/components/Nav/Sub/PopupTrigger.js +9 -10
  327. package/dist/esm/components/Nav/Sub/SubNavList.d.ts +1 -2
  328. package/dist/esm/components/Nav/Sub/SubNavList.js +4 -4
  329. package/dist/esm/components/Nav/Sub/index.d.ts +4 -15
  330. package/dist/esm/components/Nav/Sub/index.js +7 -167
  331. package/dist/esm/components/Nav/context/NavContext.d.ts +7 -3
  332. package/dist/esm/components/Nav/context/NavContext.js +6 -6
  333. package/dist/esm/components/Nav/context/index.d.ts +3 -0
  334. package/dist/esm/components/Nav/context/index.js +3 -0
  335. package/dist/esm/components/Nav/hooks/index.d.ts +5 -0
  336. package/dist/esm/components/Nav/hooks/index.js +5 -0
  337. package/dist/esm/components/Nav/hooks/useAccessibility.d.ts +11 -0
  338. package/dist/esm/components/Nav/hooks/useAccessibility.js +96 -100
  339. package/dist/esm/components/Nav/hooks/useActive.js +5 -13
  340. package/dist/esm/components/Nav/hooks/useDirectionStyle.js +1 -1
  341. package/dist/esm/components/Nav/hooks/useKeyRecords.d.ts +3 -3
  342. package/dist/esm/components/Nav/hooks/useKeyRecords.js +3 -3
  343. package/dist/esm/components/Nav/types.d.ts +14 -1
  344. package/dist/esm/components/Nav/utils/alignUtil.d.ts +1 -1
  345. package/dist/esm/components/Nav/utils/alignUtil.js +1 -4
  346. package/dist/esm/components/Nav/utils/index.d.ts +5 -0
  347. package/dist/esm/components/Nav/utils/index.js +5 -0
  348. package/dist/esm/components/Nav/utils/nodeUtil.d.ts +2 -2
  349. package/dist/esm/components/Nav/utils/nodeUtil.js +38 -31
  350. package/dist/esm/components/Nav/utils/warnUtil.js +1 -1
  351. package/dist/esm/components/Navbar/Center.d.ts +1 -1
  352. package/dist/esm/components/Navbar/Container.d.ts +1 -1
  353. package/dist/esm/components/Navbar/Item.d.ts +1 -1
  354. package/dist/esm/components/Navbar/Left.d.ts +1 -1
  355. package/dist/esm/components/Navbar/Navbar.d.ts +1 -1
  356. package/dist/esm/components/Navbar/Right.d.ts +1 -1
  357. package/dist/esm/components/Navbar/Toggle.d.ts +1 -1
  358. package/dist/esm/components/Overlay/index.d.ts +1 -1
  359. package/dist/esm/components/Progress/index.d.ts +1 -1
  360. package/dist/esm/components/Section/index.d.ts +1 -1
  361. package/dist/esm/components/Segmented/index.d.ts +1 -1
  362. package/dist/esm/components/Slider/index.d.ts +1 -2
  363. package/dist/esm/components/Spinner/index.d.ts +1 -1
  364. package/dist/esm/components/Subnav/Item.d.ts +1 -1
  365. package/dist/esm/components/Subnav/Subnav.d.ts +1 -1
  366. package/dist/esm/components/Tabs/index.d.ts +6 -4
  367. package/dist/esm/components/Tabs/index.js +8 -7
  368. package/dist/esm/components/Text/index.d.ts +1 -1
  369. package/dist/esm/components/Tile/index.d.ts +1 -1
  370. package/dist/esm/components/Width/Width.d.ts +1 -1
  371. package/dist/esm/constants.d.ts +12 -0
  372. package/dist/esm/constants.js +13 -0
  373. package/dist/esm/utils/motion.d.ts +1 -1
  374. package/package.json +23 -20
  375. package/styles/accordion.scss +56 -30
  376. package/styles/alert.scss +6 -5
  377. package/styles/animation.scss +64 -213
  378. package/styles/background.scss +34 -131
  379. package/styles/base.scss +37 -65
  380. package/styles/breadcrumb.scss +6 -9
  381. package/styles/button.scss +22 -62
  382. package/styles/control.scss +1 -0
  383. package/styles/datepicker.scss +3 -2
  384. package/styles/input-number.scss +11 -21
  385. package/styles/leader.scss +2 -2
  386. package/styles/mixins.scss +10 -19
  387. package/styles/nav.scss +7 -28
  388. package/styles/navbar.scss +185 -160
  389. package/styles/search.scss +16 -46
  390. package/styles/select.scss +9 -4
  391. package/styles/subnav.scss +1 -1
  392. package/styles/switch.scss +12 -0
  393. package/styles/tabs.scss +65 -37
  394. package/styles/text.scss +65 -65
  395. package/styles/thumbnav.scss +4 -4
  396. package/styles/variables.scss +36 -19
  397. package/dist/cjs/components/Nav/Group/InternalNavItemGroup.d.ts +0 -14
  398. package/dist/cjs/components/Nav/context/PrivateContext.d.ts +0 -7
  399. package/dist/cjs/components/Nav/hooks/useUUID.d.ts +0 -1
  400. package/dist/cjs/components/Nav/hooks/useUUID.js +0 -56
  401. package/dist/esm/components/Nav/Group/InternalNavItemGroup.d.ts +0 -14
  402. package/dist/esm/components/Nav/Group/InternalNavItemGroup.js +0 -16
  403. package/dist/esm/components/Nav/context/PrivateContext.d.ts +0 -7
  404. package/dist/esm/components/Nav/context/PrivateContext.js +0 -6
  405. package/dist/esm/components/Nav/hooks/useUUID.d.ts +0 -1
  406. package/dist/esm/components/Nav/hooks/useUUID.js +0 -17
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { type NavItemGroupType } from '../../../components/Nav/types';
3
+ export interface NavGroupProps extends Omit<NavItemGroupType, 'children' | 'type' | 'label'> {
4
+ eventKey?: string;
5
+ title?: React.ReactNode;
6
+ warnKey?: boolean;
7
+ }
8
+ export declare const InternalNavGroup: React.ForwardRefExoticComponent<NavGroupProps & {
9
+ children?: React.ReactNode | undefined;
10
+ } & React.RefAttributes<HTMLLIElement>>;
@@ -0,0 +1,16 @@
1
+ import { stopEventPropagate } from '@broxus/js-utils';
2
+ import { omit } from '@rc-component/util';
3
+ import classNames from 'classnames';
4
+ import * as React from 'react';
5
+ import { NavContext } from '../../../components/Nav/context';
6
+ export const InternalNavGroup = React.forwardRef(({ children, className, title, ...props }, ref) => {
7
+ const { prefixCls } = React.useContext(NavContext);
8
+ const groupRootCls = React.useMemo(() => `${prefixCls}-group`, [prefixCls]);
9
+ const subRootCls = React.useMemo(() => `${prefixCls}-sub`, [prefixCls]);
10
+ return (React.createElement("li", { ref: ref, className: classNames(groupRootCls, className), role: "presentation", ...omit(props, ['eventKey', 'warnKey']), onClick: stopEventPropagate },
11
+ React.createElement("div", { className: `${groupRootCls}-header`, "data-uk-tooltip": "", role: "presentation" }, title),
12
+ React.createElement("ul", { className: subRootCls, role: "group" }, children)));
13
+ });
14
+ if (process.env.NODE_ENV !== 'production') {
15
+ InternalNavGroup.displayName = 'Nav.InternalNavGroup';
16
+ }
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
- import { type NavItemGroupProps } from '../../../components/Nav/Group/InternalNavItemGroup';
3
- export declare function Group({ children, eventKey, ...restProps }: NavItemGroupProps): React.JSX.Element;
4
- export declare namespace Group {
5
- var displayName: string;
6
- }
2
+ import { type NavGroupProps } from '../../../components/Nav/Group/InternalNavGroup';
3
+ export declare const Group: React.ForwardRefExoticComponent<NavGroupProps & {
4
+ children?: React.ReactNode | undefined;
5
+ } & React.RefAttributes<HTMLLIElement>>;
@@ -1,17 +1,17 @@
1
- import omit from '@rc-component/util/lib/omit';
1
+ import { omit } from '@rc-component/util';
2
2
  import * as React from 'react';
3
- import { useFullPath, useMeasure } from '../../../components/Nav/context/PathContext';
4
- import { InternalNavItemGroup } from '../../../components/Nav/Group/InternalNavItemGroup';
5
- import { parseChildren } from '../../../components/Nav/utils/nodeUtil';
6
- export function Group({ children, eventKey, ...restProps }) {
3
+ import { useFullPath, useMeasure } from '../../../components/Nav/context';
4
+ import { InternalNavGroup } from '../../../components/Nav/Group/InternalNavGroup';
5
+ import { parseChildren } from '../../../components/Nav/utils';
6
+ export const Group = React.forwardRef(({ children, eventKey, ...props }, ref) => {
7
7
  const connectedKeyPath = useFullPath(eventKey);
8
8
  const measure = useMeasure();
9
9
  const childList = parseChildren(children, connectedKeyPath);
10
10
  if (measure) {
11
11
  return childList;
12
12
  }
13
- return React.createElement(InternalNavItemGroup, { ...omit(restProps, ['warnKey']) }, childList);
14
- }
13
+ return (React.createElement(InternalNavGroup, { ref: ref, ...omit(props, ['warnKey']) }, childList));
14
+ });
15
15
  if (process.env.NODE_ENV !== 'production') {
16
16
  Group.displayName = 'Nav.Group';
17
17
  }
@@ -2,13 +2,11 @@ import * as React from 'react';
2
2
  export interface HeaderProps {
3
3
  children: React.ReactNode;
4
4
  className?: string;
5
- /** @private Internal filled key. Do not set it directly */
6
5
  eventKey?: string;
7
6
  style?: React.CSSProperties;
8
- /** @private Do not use. Private warning empty usage */
9
7
  warnKey?: boolean;
10
8
  }
11
- export declare function Header({ className, ...props }: HeaderProps): React.JSX.Element;
9
+ export declare function Header({ className, ...props }: HeaderProps): React.ReactElement;
12
10
  export declare namespace Header {
13
11
  var displayName: string;
14
12
  }
@@ -1,10 +1,10 @@
1
- import omit from '@rc-component/util/lib/omit';
1
+ import { omit } from '@rc-component/util';
2
2
  import classNames from 'classnames';
3
3
  import * as React from 'react';
4
- import { NavContext } from '../../components/Nav/context/NavContext';
4
+ import { NavContext } from '../../components/Nav/context';
5
5
  export function Header({ className, ...props }) {
6
6
  const { prefixCls } = React.useContext(NavContext);
7
- return React.createElement("li", { className: classNames(`${prefixCls}-header`, className), ...omit(props, ['eventKey', 'warnKey']) });
7
+ return (React.createElement("li", { className: classNames(`${prefixCls}-header`, className), role: "presentation", ...omit(props, ['eventKey', 'warnKey']) }));
8
8
  }
9
9
  if (process.env.NODE_ENV !== 'production') {
10
10
  Header.displayName = 'Nav.Header';
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { type RenderIconInfo, type RenderIconType } from '../../../components/Nav/types';
3
+ export interface IconProps {
4
+ icon?: RenderIconType;
5
+ props: RenderIconInfo;
6
+ }
7
+ export default function Icon({ children, icon, props }: React.PropsWithChildren<IconProps>): React.ReactNode;
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ export default function Icon({ children, icon, props }) {
3
+ let iconNode;
4
+ if (icon === null || icon === false) {
5
+ return null;
6
+ }
7
+ if (typeof icon === 'function') {
8
+ iconNode = React.createElement(icon, { ...props });
9
+ }
10
+ else if (typeof icon !== 'boolean') {
11
+ iconNode = icon;
12
+ }
13
+ return iconNode || children || null;
14
+ }
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { type NavItemType } from '../../../components/Nav/types';
3
3
  export interface NavItemProps extends Omit<NavItemType, 'label' | 'key'>, Omit<React.HTMLAttributes<HTMLLIElement>, 'onClick' | 'onMouseEnter' | 'onMouseLeave' | 'onSelect'> {
4
- children?: React.ReactNode;
5
4
  /**
6
5
  * Internal filled key. Do not set it directly
7
6
  * @private
@@ -13,7 +12,4 @@ export interface NavItemProps extends Omit<NavItemType, 'label' | 'key'>, Omit<R
13
12
  */
14
13
  warnKey?: boolean;
15
14
  }
16
- export declare function InternalNavItem({ children, className, disabled, eventKey, itemIcon, role, style, warnKey, onClick, onFocus, onKeyDown, onMouseEnter, onMouseLeave, ...restProps }: NavItemProps): React.JSX.Element;
17
- export declare namespace InternalNavItem {
18
- var displayName: string;
19
- }
15
+ export declare const InternalNavItem: React.ForwardRefExoticComponent<NavItemProps & React.RefAttributes<HTMLElement>>;
@@ -1,24 +1,21 @@
1
- import KeyCode from '@rc-component/util/lib/KeyCode';
2
- import warning from '@rc-component/util/lib/warning';
1
+ import { omit, useComposeRef, warning } from '@rc-component/util';
3
2
  import classNames from 'classnames';
4
3
  import * as React from 'react';
5
4
  import { useConfig } from '../../../components/ConfigProvider';
6
- import { useNavId } from '../../../components/Nav/context/IdContext';
7
- import { NavContext } from '../../../components/Nav/context/NavContext';
8
- import { useFullPath } from '../../../components/Nav/context/PathContext';
9
- import { PrivateContext } from '../../../components/Nav/context/PrivateContext';
10
- import { useActive } from '../../../components/Nav/hooks/useActive';
11
- import { useDirectionStyle } from '../../../components/Nav/hooks/useDirectionStyle';
5
+ import { NavContext, useFullPath, useNavId } from '../../../components/Nav/context';
6
+ import { useActive, useDirectionStyle } from '../../../components/Nav/hooks';
7
+ import Icon from '../../../components/Nav/Icon';
12
8
  import { LegacyNavItem } from '../../../components/Nav/Item/LegacyNavItem';
13
- import { warnItemProp } from '../../../components/Nav/utils/warnUtil';
14
- export function InternalNavItem({ children, className, disabled, eventKey, itemIcon, role, style, warnKey, onClick, onFocus, onKeyDown, onMouseEnter, onMouseLeave, ...restProps }) {
9
+ import { warnItemProp } from '../../../components/Nav/utils';
10
+ import { KeyCode } from '../../../constants';
11
+ export const InternalNavItem = React.forwardRef(({ children, className, disabled, eventKey, itemIcon, role, style, warnKey, onClick, onFocus, onKeyDown, onMouseEnter, onMouseLeave, ...props }, ref) => {
15
12
  const config = useConfig();
16
13
  const domDataId = useNavId(eventKey);
17
14
  const { disabled: contextDisabled = disabled, itemIcon: contextItemIcon, overflowDisabled, selectedKeys, onActive, onItemClick, } = React.useContext(NavContext);
18
- const { _internalRenderMenuItem } = React.useContext(PrivateContext);
19
15
  const legacyNavItemRef = React.useRef(null);
20
16
  const elementRef = React.useRef(null);
21
17
  const mergedDisabled = contextDisabled || disabled;
18
+ const mergedEleRef = useComposeRef(ref, elementRef);
22
19
  const connectedKeys = useFullPath(eventKey);
23
20
  // ================================ Warn ================================
24
21
  if (process.env.NODE_ENV !== 'production' && warnKey) {
@@ -32,6 +29,8 @@ export function InternalNavItem({ children, className, disabled, eventKey, itemI
32
29
  // Note: For legacy code is reversed which not like other antd component
33
30
  keyPath: [...connectedKeys].reverse(),
34
31
  });
32
+ // ============================= Icon =============================
33
+ const mergedItemIcon = itemIcon || contextItemIcon;
35
34
  // ============================ Active ============================
36
35
  const { active, ...activeProps } = useActive(eventKey, disabled, onMouseEnter, onMouseLeave);
37
36
  // ============================ Select ============================
@@ -49,7 +48,7 @@ export function InternalNavItem({ children, className, disabled, eventKey, itemI
49
48
  };
50
49
  const onInternalKeyDown = event => {
51
50
  onKeyDown?.(event);
52
- if (event.which === KeyCode.ENTER) {
51
+ if (event.code === KeyCode.Enter) {
53
52
  const info = getEventInfo(event);
54
53
  // Legacy. Key will also trigger click event
55
54
  onClick?.(warnItemProp(info));
@@ -70,34 +69,14 @@ export function InternalNavItem({ children, className, disabled, eventKey, itemI
70
69
  if (role === 'option') {
71
70
  optionRoleProps['aria-selected'] = selected || false;
72
71
  }
73
- let renderNode = (React.createElement(LegacyNavItem, { ref: legacyNavItemRef, "aria-disabled": disabled, className: classNames({
72
+ return (React.createElement(LegacyNavItem, { ref: legacyNavItemRef, "data-nav-id": overflowDisabled && domDataId ? null : domDataId, elementRef: mergedEleRef, role: (role === null || disabled) ? 'none' : role || 'menuitem', tabIndex: disabled ? null : -1, ...omit(props, ['extra']), ...activeProps, ...optionRoleProps, "aria-disabled": disabled, className: classNames(className, {
74
73
  [`${config.prefixCls}-active`]: selected,
75
74
  [`${config.prefixCls}-disabled`]: disabled,
76
75
  [`${config.prefixCls}-hover`]: active,
77
- }, className), component: "li", "data-nav-id": overflowDisabled && domDataId ? null : domDataId, elementRef: elementRef, role: role === null ? 'none' : role || 'menuitem', style: {
78
- ...directionStyle,
79
- ...style,
80
- }, tabIndex: disabled ? null : -1, ...optionRoleProps, ...restProps, ...activeProps, onClick: onInternalClick, onFocus: onInternalFocus, onKeyDown: onInternalKeyDown },
81
- itemIcon || contextItemIcon,
82
- children));
83
- if (_internalRenderMenuItem) {
84
- renderNode = _internalRenderMenuItem(renderNode, {
85
- children,
86
- className,
87
- disabled,
88
- itemIcon,
89
- role,
90
- style,
91
- onClick,
92
- onFocus,
93
- onKeyDown,
94
- onMouseEnter,
95
- onMouseLeave,
96
- ...restProps,
97
- }, { selected });
98
- }
99
- return renderNode;
100
- }
76
+ }), component: "li", style: { ...directionStyle, ...style }, onClick: onInternalClick, onFocus: onInternalFocus, onKeyDown: onInternalKeyDown },
77
+ children,
78
+ React.createElement(Icon, { icon: mergedItemIcon, props: { ...props, isSelected: selected } })));
79
+ });
101
80
  if (process.env.NODE_ENV !== 'production') {
102
81
  InternalNavItem.displayName = 'Nav.InternalNavItem';
103
82
  }
@@ -1,12 +1,18 @@
1
- import omit from '@rc-component/util/lib/omit';
2
- import warning from '@rc-component/util/lib/warning';
1
+ import { omit, warning } from '@rc-component/util';
3
2
  import Overflow from 'rc-overflow';
4
3
  import * as React from 'react';
5
4
  export class LegacyNavItem extends React.Component {
6
5
  render() {
7
- const { attribute, elementRef, title, ...restProps } = this.props;
8
- const passedProps = omit(restProps, ['eventKey', 'warnKey']);
6
+ const { attribute, elementRef, ...props } = this.props;
7
+ const passedProps = omit(props, [
8
+ 'eventKey',
9
+ 'popupClassName',
10
+ 'popupOffset',
11
+ 'title',
12
+ 'warnKey',
13
+ 'onTitleClick',
14
+ ]);
9
15
  warning(!attribute, '`attribute` of Nav.Item is deprecated. Please pass attribute directly.');
10
- return (React.createElement(Overflow.Item, { ...attribute, title: typeof title === 'string' ? title : undefined, ...passedProps, ref: elementRef }));
16
+ return React.createElement(Overflow.Item, { ref: elementRef, ...attribute, ...passedProps });
11
17
  }
12
18
  }
@@ -1,6 +1,3 @@
1
1
  import * as React from 'react';
2
2
  import { type NavItemProps } from '../../../components/Nav/Item/InternalNavItem';
3
- export declare function Item({ eventKey, ...restProps }: NavItemProps): React.JSX.Element | null;
4
- export declare namespace Item {
5
- var displayName: string;
6
- }
3
+ export declare const Item: React.ForwardRefExoticComponent<NavItemProps & React.RefAttributes<HTMLElement>>;
@@ -1,12 +1,12 @@
1
1
  import { noop } from '@broxus/js-utils';
2
2
  import * as React from 'react';
3
- import { useFullPath, useMeasure } from '../../../components/Nav/context/PathContext';
3
+ import { useFullPath, useMeasure } from '../../../components/Nav/context';
4
4
  import { InternalNavItem } from '../../../components/Nav/Item/InternalNavItem';
5
- export function Item({ eventKey, ...restProps }) {
5
+ export const Item = React.forwardRef(({ eventKey, ...props }, ref) => {
6
6
  const measure = useMeasure();
7
7
  const connectedKeyPath = useFullPath(eventKey);
8
8
  React.useEffect(() => {
9
- if (eventKey !== undefined) {
9
+ if (eventKey) {
10
10
  measure?.registerPath(eventKey, connectedKeyPath);
11
11
  return () => {
12
12
  measure?.unregisterPath(eventKey, connectedKeyPath);
@@ -14,11 +14,8 @@ export function Item({ eventKey, ...restProps }) {
14
14
  }
15
15
  return noop;
16
16
  }, [connectedKeyPath, eventKey, measure]);
17
- if (measure) {
18
- return null;
19
- }
20
- return React.createElement(InternalNavItem, { eventKey: eventKey, ...restProps });
21
- }
17
+ return measure ? null : React.createElement(InternalNavItem, { ref: ref, eventKey: eventKey, ...props });
18
+ });
22
19
  if (process.env.NODE_ENV !== 'production') {
23
20
  Item.displayName = 'Nav.Item';
24
21
  }
@@ -1,28 +1,12 @@
1
- import { type CSSMotionProps } from 'rc-motion';
1
+ import { type CSSMotionProps } from '@rc-component/motion';
2
2
  import * as React from 'react';
3
- import { type BuiltinPlacements, type ItemType, type NavClickEventHandler, type NavMode, type NavModifier, type NavRef, type RenderIconType, type SelectEventHandler, type TriggerSubNavAction } from '../../components/Nav/types';
3
+ import { type SemanticName } from '../../components/Nav/Sub/InternalSubNav';
4
+ import { type BuiltinPlacements, type ItemType, type NavClickEventHandler, type NavMode, type NavModifier, type NavPopupRender, type NavRef, type RenderIconType, type SelectEventHandler, type TriggerSubNavAction } from '../../components/Nav/types';
4
5
  import { type Direction } from '../../types';
5
6
  export interface NavProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onClick' | 'onSelect' | 'dir'> {
6
- /**
7
- * @private Only used for `pro-layout`. Do not use in your prod directly,
8
- * and we do not promise any compatibility for this.
9
- */
10
- _internalRenderMenuItem?: (originNode: React.ReactElement, menuItemProps: any, stateProps: {
11
- selected: boolean;
12
- }) => React.ReactElement;
13
- /**
14
- * @private Only used for `pro-layout`. Do not use in your prod directly,
15
- * and we do not promise any compatibility for this.
16
- */
17
- _internalRenderSubMenuItem?: (originNode: React.ReactElement, subMenuItemProps: any, stateProps: {
18
- active: boolean;
19
- disabled: boolean;
20
- open: boolean;
21
- selected: boolean;
22
- }) => React.ReactElement;
23
7
  activeKey?: string;
24
8
  builtinPlacements?: BuiltinPlacements;
25
- children?: React.ReactNode;
9
+ classNames?: Partial<Record<SemanticName, string>>;
26
10
  defaultActiveFirst?: boolean;
27
11
  defaultMotions?: Partial<{
28
12
  [key in NavMode | 'other']: CSSMotionProps;
@@ -31,7 +15,6 @@ export interface NavProps extends Omit<React.HTMLAttributes<HTMLUListElement>, '
31
15
  defaultSelectedKeys?: string[];
32
16
  direction?: Direction;
33
17
  disabled?: boolean;
34
- disabledOverflow?: boolean;
35
18
  expandIcon?: RenderIconType;
36
19
  forceSubNavRender?: boolean;
37
20
  getPopupContainer?: (node: HTMLElement) => HTMLElement;
@@ -43,12 +26,16 @@ export interface NavProps extends Omit<React.HTMLAttributes<HTMLUListElement>, '
43
26
  motion?: CSSMotionProps;
44
27
  multiple?: boolean;
45
28
  openKeys?: string[];
29
+ overflowDisabled?: boolean;
46
30
  overflowedIndicator?: React.ReactNode;
47
31
  overflowedIndicatorPopupClassName?: string;
48
32
  popupPrefixCls?: string;
33
+ popupRender?: NavPopupRender;
49
34
  prefixCls?: string;
35
+ rootClassName?: string;
50
36
  selectable?: boolean;
51
37
  selectedKeys?: string[];
38
+ styles?: Partial<Record<SemanticName, React.CSSProperties>>;
52
39
  subNavCloseDelay?: number;
53
40
  subNavOpenDelay?: number;
54
41
  triggerSubNavAction?: TriggerSubNavAction;
@@ -1,26 +1,20 @@
1
+ import { useControlledState } from '@rc-component/util';
2
+ import useId from '@rc-component/util/es/hooks/useId';
3
+ import isEqual from '@rc-component/util/es/isEqual';
1
4
  import classNames from 'classnames';
2
5
  import Overflow from 'rc-overflow';
3
- import useMergedState from 'rc-util/lib/hooks/useMergedState';
4
- import isEqual from 'rc-util/lib/isEqual';
5
6
  import * as React from 'react';
6
7
  import * as ReactDOM from 'react-dom';
7
8
  import { useConfig } from '../../components/ConfigProvider';
8
- import { getNavId, IdContext } from '../../components/Nav/context/IdContext';
9
- import { NavContextProvider } from '../../components/Nav/context/NavContext';
10
- import { PathRegisterContext, PathUserContext } from '../../components/Nav/context/PathContext';
11
- import { PrivateContext } from '../../components/Nav/context/PrivateContext';
12
- import { useAccessibility } from '../../components/Nav/hooks/useAccessibility';
13
- import { OVERFLOW_KEY, useKeyRecords } from '../../components/Nav/hooks/useKeyRecords';
14
- import { useMemoCallback } from '../../components/Nav/hooks/useMemoCallback';
15
- import { useUUID } from '../../components/Nav/hooks/useUUID';
9
+ import { IdContext, NavContextProvider, PathRegisterContext, PathUserContext } from '../../components/Nav/context';
10
+ import { getFocusableElements, OVERFLOW_KEY, refreshElements, useAccessibility, useKeyRecords, useMemoCallback, } from '../../components/Nav/hooks';
16
11
  import { Item } from '../../components/Nav/Item';
17
12
  import { Sub } from '../../components/Nav/Sub';
18
- import { parseItems } from '../../components/Nav/utils/nodeUtil';
19
- import { warnItemProp } from '../../components/Nav/utils/warnUtil';
13
+ import { parseItems, warnItemProp } from '../../components/Nav/utils';
20
14
  import { useMounted } from '../../hooks';
21
15
  import { getCollapseMotion, getMotionName } from '../../utils';
22
- const EMPTY_LIST = [];
23
- export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderSubMenuItem, activeKey, builtinPlacements, children, className, defaultActiveFirst, defaultOpenKeys, defaultSelectedKeys, direction, disabled, disabledOverflow, expandIcon, forceSubNavRender, id, inlineCollapsed, itemIcon, items, mode = 'inline', modifiers, motion, multiple = false, openKeys, overflowedIndicator = '...', overflowedIndicatorPopupClassName, selectable = false, selectedKeys, style, subNavCloseDelay = 0.1, subNavOpenDelay = 0.1, tabIndex = 0, triggerSubNavAction = 'hover', onClick, onDeselect, onKeyDown, onOpenChange, onSelect, ...props }, ref) => {
16
+ const EmptyList = [];
17
+ export const Nav = React.forwardRef(({ activeKey, builtinPlacements, children, className, classNames: navClassNames, defaultActiveFirst, defaultOpenKeys, defaultSelectedKeys, direction, disabled, expandIcon, forceSubNavRender, id, inlineCollapsed, itemIcon, items, mode = 'inline', modifiers, motion, multiple = false, openKeys, overflowDisabled, overflowedIndicator = '...', overflowedIndicatorPopupClassName, popupRender, selectable = false, selectedKeys, style, styles, subNavCloseDelay = 0.1, subNavOpenDelay = 0.1, tabIndex = 0, triggerSubNavAction = 'hover', onClick, onDeselect, onKeyDown, onOpenChange, onSelect, ...props }, ref) => {
24
18
  const config = useConfig();
25
19
  const { prefixCls = config.prefixCls, defaultMotions = {
26
20
  horizontal: {
@@ -32,16 +26,14 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
32
26
  motionName: getMotionName(prefixCls || config.prefixCls, 'zoom'),
33
27
  },
34
28
  }, getPopupContainer = config.getPopupContainer, popupPrefixCls = `${config.prefixCls}-dropdown`, ...restProps } = props;
35
- const childList = React.useMemo(() => parseItems(children, items, EMPTY_LIST), [children, items]);
29
+ const childList = React.useMemo(() => parseItems(children, items, EmptyList, {}, prefixCls), [children, items, prefixCls]);
36
30
  const mounted = useMounted();
37
31
  const containerRef = React.useRef(null);
38
- const uuid = useUUID(id);
32
+ const uuid = useId(id);
39
33
  const isRtl = direction === 'rtl';
40
34
  // ========================= Open =========================
41
- const [mergedOpenKeys, setMergedOpenKeys] = useMergedState(defaultOpenKeys, {
42
- postState: keys => keys || EMPTY_LIST,
43
- value: openKeys,
44
- });
35
+ const [innerOpenKeys, setMergedOpenKeys] = useControlledState(defaultOpenKeys, openKeys);
36
+ const mergedOpenKeys = innerOpenKeys || EmptyList;
45
37
  // React 18 will merge mouse event which means we open key will not sync
46
38
  // ref: https://github.com/ant-design/ant-design/issues/38818
47
39
  const triggerOpenKeys = React.useCallback((keys, forceFlush = false) => {
@@ -68,7 +60,7 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
68
60
  }, [mode, inlineCollapsed]);
69
61
  const isInlineMode = mergedMode === 'inline';
70
62
  const [internalMode, setInternalMode] = React.useState(mergedMode);
71
- const [, setInternalInlineCollapsed] = React.useState(mergedInlineCollapsed);
63
+ const [internalInlineCollapsed, setInternalInlineCollapsed] = React.useState(mergedInlineCollapsed);
72
64
  React.useEffect(() => {
73
65
  setInternalMode(mergedMode);
74
66
  setInternalInlineCollapsed(mergedInlineCollapsed);
@@ -81,7 +73,7 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
81
73
  }
82
74
  else {
83
75
  // Trigger open event in case it`s in control
84
- triggerOpenKeys(EMPTY_LIST);
76
+ triggerOpenKeys(EmptyList);
85
77
  }
86
78
  }, [
87
79
  mergedMode,
@@ -95,7 +87,7 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
95
87
  const [lastVisibleIndex, setLastVisibleIndex] = React.useState(0);
96
88
  const allVisible = lastVisibleIndex >= childList.length - 1
97
89
  || internalMode !== 'horizontal'
98
- || disabledOverflow;
90
+ || overflowDisabled;
99
91
  // Cache
100
92
  React.useEffect(() => {
101
93
  if (isInlineMode) {
@@ -114,11 +106,11 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
114
106
  const pathUserContext = React.useMemo(() => ({ isSubPathKey }), [isSubPathKey]);
115
107
  React.useEffect(() => {
116
108
  refreshOverflowKeys(allVisible
117
- ? EMPTY_LIST
109
+ ? EmptyList
118
110
  : childList.slice(lastVisibleIndex + 1).map(child => child.key));
119
111
  }, [lastVisibleIndex, allVisible, refreshOverflowKeys, childList]);
120
112
  // ======================== Active ========================
121
- const [mergedActiveKey, setMergedActiveKey] = useMergedState(activeKey || ((defaultActiveFirst && childList[0]?.key)), { value: activeKey });
113
+ const [mergedActiveKey, setMergedActiveKey] = useControlledState(activeKey || (defaultActiveFirst && childList[0]?.key), activeKey);
122
114
  const onActive = useMemoCallback((key) => {
123
115
  setMergedActiveKey(key);
124
116
  });
@@ -126,32 +118,49 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
126
118
  setMergedActiveKey(undefined);
127
119
  });
128
120
  React.useImperativeHandle(ref, () => ({
121
+ findItem: ({ key: itemKey }) => {
122
+ const keys = getKeys();
123
+ const { key2element } = refreshElements(keys, uuid);
124
+ return key2element.get(itemKey) || null;
125
+ },
129
126
  focus: options => {
130
- const shouldFocusKey = mergedActiveKey
131
- ?? childList.find(node => !node.props.disabled)?.key;
132
- if (shouldFocusKey) {
133
- containerRef.current
134
- ?.querySelector(`li[data-nav-id='${getNavId(uuid, shouldFocusKey)}']`)
135
- ?.focus?.(options);
127
+ if (!containerRef.current) {
128
+ return;
129
+ }
130
+ const keys = getKeys();
131
+ const { element2key, elements, key2element } = refreshElements(keys, uuid);
132
+ const focusableElements = getFocusableElements(containerRef.current, elements);
133
+ let shouldFocusKey;
134
+ if (mergedActiveKey && keys.includes(mergedActiveKey)) {
135
+ shouldFocusKey = mergedActiveKey;
136
+ }
137
+ else {
138
+ shouldFocusKey = focusableElements[0]
139
+ ? element2key.get(focusableElements[0])
140
+ : childList.find(node => !node.props.disabled)?.key;
141
+ }
142
+ if (!shouldFocusKey) {
143
+ return;
144
+ }
145
+ const elementToFocus = key2element.get(shouldFocusKey);
146
+ if (shouldFocusKey && elementToFocus) {
147
+ elementToFocus?.focus?.(options);
136
148
  }
137
149
  },
138
150
  list: containerRef.current,
139
151
  }));
140
152
  // ======================== Select ========================
141
153
  // >>>>> Select keys
142
- const [mergedSelectKeys, setMergedSelectKeys] = useMergedState(defaultSelectedKeys || [], {
143
- // Legacy convert key to array
144
- postState: keys => {
145
- if (Array.isArray(keys)) {
146
- return keys;
147
- }
148
- if (keys === null || keys === undefined) {
149
- return EMPTY_LIST;
150
- }
151
- return [keys];
152
- },
153
- value: selectedKeys,
154
- });
154
+ const [internalSelectKeys, setMergedSelectKeys] = useControlledState(defaultSelectedKeys || EmptyList, selectedKeys);
155
+ const mergedSelectKeys = React.useMemo(() => {
156
+ if (Array.isArray(internalSelectKeys)) {
157
+ return internalSelectKeys;
158
+ }
159
+ if (internalSelectKeys === null || internalSelectKeys === undefined) {
160
+ return EmptyList;
161
+ }
162
+ return [internalSelectKeys];
163
+ }, [internalSelectKeys]);
155
164
  // >>>>> Trigger select
156
165
  const triggerSelection = (info) => {
157
166
  if (selectable) {
@@ -172,10 +181,7 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
172
181
  }
173
182
  setMergedSelectKeys(newSelectKeys);
174
183
  // Trigger event
175
- const selectInfo = {
176
- ...info,
177
- selectedKeys: newSelectKeys,
178
- };
184
+ const selectInfo = { ...info, selectedKeys: newSelectKeys };
179
185
  if (exist) {
180
186
  onDeselect?.(selectInfo);
181
187
  }
@@ -185,7 +191,7 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
185
191
  }
186
192
  // Whatever selectable, always close it
187
193
  if (!multiple && mergedOpenKeys?.length && internalMode !== 'inline') {
188
- triggerOpenKeys(EMPTY_LIST);
194
+ triggerOpenKeys(EmptyList);
189
195
  }
190
196
  };
191
197
  // ========================= Open =========================
@@ -210,37 +216,28 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
210
216
  triggerOpenKeys(newOpenKeys, true);
211
217
  }
212
218
  });
213
- const getInternalPopupContainer = useMemoCallback(getPopupContainer);
214
219
  // ==================== Accessibility =====================
215
220
  const triggerAccessibilityOpen = (key, open) => {
216
221
  const nextOpen = open ?? !mergedOpenKeys?.includes(key);
217
222
  onInternalOpenChange?.(key, nextOpen);
218
223
  };
219
224
  const onInternalKeyDown = useAccessibility(internalMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown);
220
- // ======================= Context ========================
221
- const privateContext = React.useMemo(() => ({
222
- _internalRenderMenuItem,
223
- _internalRenderSubMenuItem,
224
- }), [_internalRenderMenuItem, _internalRenderSubMenuItem]);
225
225
  // ======================== Render ========================
226
+ const rootCls = React.useMemo(() => config.getRootPrefixCls(prefixCls || config.prefixCls, 'nav'), [config, prefixCls]);
227
+ const modifiersClasses = React.useMemo(() => (Array.isArray(modifiers) ? modifiers : [modifiers])
228
+ .filter(e => e)
229
+ .map(mod => `${rootCls}-${mod}`), [modifiers, rootCls]);
226
230
  // >>>>> Children
227
- const wrappedChildList = mergedMode !== 'horizontal' || disabledOverflow
231
+ const wrappedChildList = mergedMode !== 'horizontal' || overflowDisabled
228
232
  ? childList
229
233
  // Need wrap for overflow dropdown that do not response for open
230
234
  : childList.map((child, index) => (
231
235
  // Always wrap provider to avoid sub node re-mount
232
- React.createElement(NavContextProvider, { key: child.key, overflowDisabled: index > lastVisibleIndex }, child)));
233
- const rootCls = React.useMemo(() => config.getRootPrefixCls(prefixCls || config.prefixCls, 'nav'), [config, prefixCls]);
234
- const container = (React.createElement(Overflow, { ref: containerRef, className: classNames({
235
- [rootCls]: mergedMode !== 'horizontal',
236
- }, (Array.isArray(modifiers) ? modifiers : [modifiers])
237
- .filter(e => e)
238
- .map(mod => `${rootCls}-${mod}`), {
239
- [`${rootCls}-${mergedMode}`]: rootCls && mergedMode,
240
- [`${rootCls}-rtl`]: rootCls && isRtl,
241
- }, className), component: "ul", data: wrappedChildList, "data-menu-list": true, dir: direction, id: id, itemComponent: Item, maxCount: (mergedMode !== 'horizontal' || disabledOverflow)
242
- ? Overflow.INVALIDATE
243
- : Overflow.RESPONSIVE, prefixCls: rootCls, renderRawItem: node => node, renderRawRest: omitItems => {
236
+ React.createElement(NavContextProvider, { key: child.key, classNames: navClassNames, overflowDisabled: index > lastVisibleIndex, styles: styles }, child)));
237
+ const container = (React.createElement(Overflow, { ref: containerRef, className: classNames(className, { [rootCls]: internalMode !== 'horizontal' }, `${rootCls}-${internalMode}`, modifiersClasses, {
238
+ [`${rootCls}-inline-collapsed`]: internalInlineCollapsed,
239
+ [`${rootCls}-rtl`]: isRtl,
240
+ }), component: "ul", data: wrappedChildList, "data-nav-list": true, dir: direction, id: id, itemComponent: Item, maxCount: (internalMode !== 'horizontal' || overflowDisabled) ? Overflow.INVALIDATE : Overflow.RESPONSIVE, prefixCls: rootCls, renderRawItem: node => node, renderRawRest: omitItems => {
244
241
  // We use origin list since wrapped list use context to prevent open
245
242
  const len = omitItems.length;
246
243
  const originOmitItems = len ? childList.slice(-len) : null;
@@ -248,11 +245,9 @@ export const Nav = React.forwardRef(({ _internalRenderMenuItem, _internalRenderS
248
245
  }, role: "menu", ssr: "full", style: style, tabIndex: tabIndex, onKeyDown: onInternalKeyDown, onVisibleChange: newLastIndex => {
249
246
  setLastVisibleIndex(newLastIndex);
250
247
  }, ...restProps }));
251
- // >>>>> Render
252
- return (React.createElement(PrivateContext.Provider, { value: privateContext },
253
- React.createElement(IdContext.Provider, { value: uuid },
254
- React.createElement(NavContextProvider, { activeKey: mergedActiveKey, builtinPlacements: builtinPlacements, defaultMotions: mounted ? defaultMotions : undefined, disabled: disabled, expandIcon: expandIcon, forceSubNavRender: forceSubNavRender, getPopupContainer: getInternalPopupContainer, itemIcon: itemIcon, mode: mergedMode, motion: mounted ? motion : undefined, openKeys: mergedOpenKeys, popupPrefixCls: popupPrefixCls, prefixCls: rootCls, rtl: isRtl, selectedKeys: mergedSelectKeys, subNavCloseDelay: subNavCloseDelay, subNavOpenDelay: subNavOpenDelay, triggerSubNavAction: triggerSubNavAction, onActive: onActive, onInactive: onInactive, onItemClick: onInternalClick, onOpenChange: onInternalOpenChange },
255
- React.createElement(PathUserContext.Provider, { value: pathUserContext }, container),
256
- React.createElement("div", { "aria-hidden": true, style: { display: 'none' } },
257
- React.createElement(PathRegisterContext.Provider, { value: registerPathContext }, childList))))));
248
+ return (React.createElement(IdContext.Provider, { value: uuid },
249
+ React.createElement(NavContextProvider, { activeKey: mergedActiveKey, builtinPlacements: builtinPlacements, defaultMotions: mounted ? defaultMotions : undefined, disabled: disabled, expandIcon: expandIcon, forceSubNavRender: forceSubNavRender, getPopupContainer: getPopupContainer, itemIcon: itemIcon, mode: mergedMode, motion: mounted ? motion : undefined, openKeys: mergedOpenKeys, popupPrefixCls: popupPrefixCls, popupRender: popupRender, prefixCls: rootCls, rtl: isRtl, selectedKeys: mergedSelectKeys, subNavCloseDelay: subNavCloseDelay, subNavOpenDelay: subNavOpenDelay, triggerSubNavAction: triggerSubNavAction, onActive: onActive, onInactive: onInactive, onItemClick: onInternalClick, onOpenChange: onInternalOpenChange },
250
+ React.createElement(PathUserContext.Provider, { value: pathUserContext }, container),
251
+ React.createElement("div", { "aria-hidden": true, style: { display: 'none' } },
252
+ React.createElement(PathRegisterContext.Provider, { value: registerPathContext }, childList)))));
258
253
  });
@@ -5,7 +5,7 @@ export interface InlineSubNavListProps {
5
5
  keyPath: string[];
6
6
  open: boolean;
7
7
  }
8
- export declare function InlineSubNavList({ children, id, keyPath, open }: InlineSubNavListProps): React.JSX.Element | null;
8
+ export declare function InlineSubNavList({ children, id, keyPath, open }: InlineSubNavListProps): React.ReactElement | null;
9
9
  export declare namespace InlineSubNavList {
10
10
  var displayName: string;
11
11
  }