@broxus/react-uikit 0.21.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 (565) 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/Accordion.js +2 -2
  83. package/dist/cjs/components/Accordion/Item.d.ts +1 -5
  84. package/dist/cjs/components/Accordion/Item.js +2 -7
  85. package/dist/cjs/components/Accordion/index.d.ts +1 -1
  86. package/dist/cjs/components/Alert/index.js +4 -6
  87. package/dist/cjs/components/Align/Align.d.ts +2 -2
  88. package/dist/cjs/components/Align/Align.js +3 -3
  89. package/dist/cjs/components/Align/Center.d.ts +1 -1
  90. package/dist/cjs/components/Align/Left.d.ts +1 -1
  91. package/dist/cjs/components/Align/Right.d.ts +1 -1
  92. package/dist/cjs/components/Article/Article.d.ts +1 -1
  93. package/dist/cjs/components/Article/Article.js +2 -2
  94. package/dist/cjs/components/Article/Meta.d.ts +4 -4
  95. package/dist/cjs/components/Article/Meta.js +3 -3
  96. package/dist/cjs/components/Article/Title.d.ts +4 -4
  97. package/dist/cjs/components/Article/Title.js +3 -3
  98. package/dist/cjs/components/Article/context.d.ts +2 -2
  99. package/dist/cjs/components/Badge/index.d.ts +4 -4
  100. package/dist/cjs/components/Badge/index.js +2 -2
  101. package/dist/cjs/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  102. package/dist/cjs/components/Breadcrumb/Breadcrumb.js +2 -2
  103. package/dist/cjs/components/Breadcrumb/Item.d.ts +1 -1
  104. package/dist/cjs/components/Breadcrumb/Item.js +2 -3
  105. package/dist/cjs/components/Button/Button.d.ts +2 -2
  106. package/dist/cjs/components/Button/Button.js +2 -2
  107. package/dist/cjs/components/Button/Group.d.ts +1 -1
  108. package/dist/cjs/components/Button/Group.js +2 -2
  109. package/dist/cjs/components/Card/Badge.d.ts +1 -1
  110. package/dist/cjs/components/Card/Badge.js +3 -3
  111. package/dist/cjs/components/Card/Body.d.ts +4 -4
  112. package/dist/cjs/components/Card/Body.js +3 -3
  113. package/dist/cjs/components/Card/Card.d.ts +4 -4
  114. package/dist/cjs/components/Card/Card.js +4 -4
  115. package/dist/cjs/components/Card/Footer.d.ts +4 -4
  116. package/dist/cjs/components/Card/Footer.js +3 -3
  117. package/dist/cjs/components/Card/Header.d.ts +4 -4
  118. package/dist/cjs/components/Card/Header.js +3 -3
  119. package/dist/cjs/components/Card/Media.d.ts +4 -4
  120. package/dist/cjs/components/Card/Media.js +3 -3
  121. package/dist/cjs/components/Card/Title.d.ts +4 -4
  122. package/dist/cjs/components/Card/Title.js +3 -3
  123. package/dist/cjs/components/Close/index.d.ts +1 -1
  124. package/dist/cjs/components/Close/index.js +2 -2
  125. package/dist/cjs/components/Component/index.d.ts +1 -1
  126. package/dist/cjs/components/Component/index.js +1 -4
  127. package/dist/cjs/components/ConfigProvider/index.d.ts +55 -40
  128. package/dist/cjs/components/ConfigProvider/index.js +3 -3
  129. package/dist/cjs/components/Container/index.d.ts +7 -2
  130. package/dist/cjs/components/Container/index.js +6 -6
  131. package/dist/cjs/components/Control/Checkbox/Checkbox.d.ts +2 -2
  132. package/dist/cjs/components/Control/Checkbox/Checkbox.js +2 -2
  133. package/dist/cjs/components/Control/Checkbox/Group.d.ts +2 -2
  134. package/dist/cjs/components/Control/Checkbox/Group.js +2 -2
  135. package/dist/cjs/components/Control/Checkbox/index.d.ts +1 -1
  136. package/dist/cjs/components/Control/Input/Input.js +3 -6
  137. package/dist/cjs/components/Control/Input/Number/index.js +4 -4
  138. package/dist/cjs/components/Control/Input/Password/index.js +2 -2
  139. package/dist/cjs/components/Control/Input/useInput.js +2 -1
  140. package/dist/cjs/components/Control/Radio/Group.js +4 -6
  141. package/dist/cjs/components/Control/Radio/Radio.js +2 -2
  142. package/dist/cjs/components/Control/Radio/index.d.ts +1 -1
  143. package/dist/cjs/components/Control/Select/Select.d.ts +18 -0
  144. package/dist/cjs/components/Control/Select/Select.js +248 -0
  145. package/dist/cjs/components/Control/Select/index.d.ts +4 -23
  146. package/dist/cjs/components/Control/Select/index.js +2 -253
  147. package/dist/cjs/components/Control/Select/placements.d.ts +1 -1
  148. package/dist/cjs/components/Control/TextArea/index.d.ts +3 -3
  149. package/dist/cjs/components/Control/TextArea/index.js +8 -7
  150. package/dist/cjs/components/Cover/index.d.ts +1 -1
  151. package/dist/cjs/components/Cover/index.js +2 -2
  152. package/dist/cjs/components/DatePicker/PickerButton.d.ts +1 -1
  153. package/dist/cjs/components/DatePicker/PickerButton.js +4 -2
  154. package/dist/cjs/components/DatePicker/generatePurePicker.js +1 -3
  155. package/dist/cjs/components/DescriptionList/Description.d.ts +1 -1
  156. package/dist/cjs/components/DescriptionList/DescriptionList.d.ts +1 -1
  157. package/dist/cjs/components/DescriptionList/DescriptionList.js +2 -2
  158. package/dist/cjs/components/DescriptionList/Term.d.ts +1 -1
  159. package/dist/cjs/components/Divider/index.d.ts +1 -1
  160. package/dist/cjs/components/Divider/index.js +2 -2
  161. package/dist/cjs/components/Dotnav/Dotnav.d.ts +1 -1
  162. package/dist/cjs/components/Dotnav/Dotnav.js +2 -2
  163. package/dist/cjs/components/Dotnav/Item.d.ts +1 -1
  164. package/dist/cjs/components/Dotnav/Item.js +2 -3
  165. package/dist/cjs/components/Drawer/index.d.ts +3 -3
  166. package/dist/cjs/components/Drawer/index.js +2 -2
  167. package/dist/cjs/components/Drop/index.d.ts +5 -6
  168. package/dist/cjs/components/Drop/index.js +4 -3
  169. package/dist/cjs/components/Dropdown/index.js +2 -2
  170. package/dist/cjs/components/Flex/Flex.d.ts +2 -2
  171. package/dist/cjs/components/Flex/Flex.js +3 -3
  172. package/dist/cjs/components/Flex/Item.d.ts +2 -2
  173. package/dist/cjs/components/Flex/Item.js +3 -3
  174. package/dist/cjs/components/Flex/context.d.ts +2 -2
  175. package/dist/cjs/components/Flex/index.d.ts +1 -1
  176. package/dist/cjs/components/Form/Controls.d.ts +1 -1
  177. package/dist/cjs/components/Form/Controls.js +2 -2
  178. package/dist/cjs/components/Form/ControlsText.d.ts +1 -1
  179. package/dist/cjs/components/Form/ControlsText.js +2 -2
  180. package/dist/cjs/components/Form/Fieldset.d.ts +1 -1
  181. package/dist/cjs/components/Form/Fieldset.js +2 -2
  182. package/dist/cjs/components/Form/Form.d.ts +2 -2
  183. package/dist/cjs/components/Form/Form.js +3 -3
  184. package/dist/cjs/components/Form/Label.d.ts +1 -1
  185. package/dist/cjs/components/Form/Label.js +2 -2
  186. package/dist/cjs/components/Form/Legend.d.ts +1 -1
  187. package/dist/cjs/components/Form/Legend.js +2 -2
  188. package/dist/cjs/components/Form/context.d.ts +2 -2
  189. package/dist/cjs/components/Grid/index.d.ts +4 -4
  190. package/dist/cjs/components/Grid/index.js +3 -3
  191. package/dist/cjs/components/Heading/index.d.ts +4 -4
  192. package/dist/cjs/components/Heading/index.js +2 -2
  193. package/dist/cjs/components/Icon/Button.d.ts +1 -1
  194. package/dist/cjs/components/Icon/Icon.d.ts +4 -4
  195. package/dist/cjs/components/Icon/Icon.js +3 -3
  196. package/dist/cjs/components/Icon/Link.d.ts +1 -1
  197. package/dist/cjs/components/Icon/index.d.ts +1 -1
  198. package/dist/cjs/components/Iconnav/Iconnav.d.ts +1 -1
  199. package/dist/cjs/components/Iconnav/Iconnav.js +2 -2
  200. package/dist/cjs/components/Iconnav/Item.d.ts +1 -1
  201. package/dist/cjs/components/Iconnav/Item.js +2 -3
  202. package/dist/cjs/components/Inverse/index.d.ts +2 -2
  203. package/dist/cjs/components/Inverse/index.js +4 -3
  204. package/dist/cjs/components/Label/index.d.ts +1 -1
  205. package/dist/cjs/components/Label/index.js +2 -2
  206. package/dist/cjs/components/Link/index.d.ts +2 -2
  207. package/dist/cjs/components/Link/index.js +3 -3
  208. package/dist/cjs/components/List/Item.d.ts +1 -3
  209. package/dist/cjs/components/List/List.d.ts +1 -1
  210. package/dist/cjs/components/List/List.js +2 -2
  211. package/dist/cjs/components/Modal/index.d.ts +1 -1
  212. package/dist/cjs/components/Modal/index.js +2 -2
  213. package/dist/cjs/components/Nav/Divider.d.ts +1 -1
  214. package/dist/cjs/components/Nav/Divider.js +5 -10
  215. package/dist/cjs/components/Nav/Group/InternalNavGroup.d.ts +10 -0
  216. package/dist/cjs/components/Nav/Group/{InternalNavItemGroup.js → InternalNavGroup.js} +9 -9
  217. package/dist/cjs/components/Nav/Group/index.d.ts +4 -2
  218. package/dist/cjs/components/Nav/Group/index.js +9 -12
  219. package/dist/cjs/components/Nav/Header.d.ts +1 -3
  220. package/dist/cjs/components/Nav/Header.js +5 -6
  221. package/dist/cjs/components/Nav/Icon/index.d.ts +7 -0
  222. package/dist/cjs/components/Nav/{context/PrivateContext.js → Icon/index.js} +13 -5
  223. package/dist/cjs/components/Nav/Item/InternalNavItem.d.ts +1 -5
  224. package/dist/cjs/components/Nav/Item/InternalNavItem.js +26 -47
  225. package/dist/cjs/components/Nav/Item/LegacyNavItem.js +12 -6
  226. package/dist/cjs/components/Nav/Item/index.d.ts +1 -1
  227. package/dist/cjs/components/Nav/Item/index.js +6 -9
  228. package/dist/cjs/components/Nav/Nav.d.ts +8 -21
  229. package/dist/cjs/components/Nav/Nav.js +86 -91
  230. package/dist/cjs/components/Nav/Sub/InlineSubNavList.d.ts +1 -1
  231. package/dist/cjs/components/Nav/Sub/InlineSubNavList.js +6 -6
  232. package/dist/cjs/components/Nav/Sub/InternalSubNav.d.ts +15 -0
  233. package/dist/cjs/components/Nav/Sub/InternalSubNav.js +196 -0
  234. package/dist/cjs/components/Nav/Sub/PopupTrigger.d.ts +2 -1
  235. package/dist/cjs/components/Nav/Sub/PopupTrigger.js +10 -11
  236. package/dist/cjs/components/Nav/Sub/SubNavList.d.ts +1 -2
  237. package/dist/cjs/components/Nav/Sub/SubNavList.js +5 -5
  238. package/dist/cjs/components/Nav/Sub/index.d.ts +4 -15
  239. package/dist/cjs/components/Nav/Sub/index.js +11 -174
  240. package/dist/cjs/components/Nav/context/NavContext.d.ts +7 -3
  241. package/dist/cjs/components/Nav/context/NavContext.js +6 -6
  242. package/dist/cjs/components/Nav/context/index.d.ts +3 -0
  243. package/dist/cjs/components/Nav/context/index.js +19 -0
  244. package/dist/cjs/components/Nav/hooks/index.d.ts +5 -0
  245. package/dist/cjs/components/Nav/hooks/index.js +21 -0
  246. package/dist/cjs/components/Nav/hooks/useAccessibility.d.ts +11 -0
  247. package/dist/cjs/components/Nav/hooks/useAccessibility.js +97 -99
  248. package/dist/cjs/components/Nav/hooks/useActive.js +5 -13
  249. package/dist/cjs/components/Nav/hooks/useDirectionStyle.js +2 -2
  250. package/dist/cjs/components/Nav/hooks/useKeyRecords.d.ts +3 -3
  251. package/dist/cjs/components/Nav/hooks/useKeyRecords.js +5 -8
  252. package/dist/cjs/components/Nav/types.d.ts +16 -3
  253. package/dist/cjs/components/Nav/utils/alignUtil.d.ts +1 -1
  254. package/dist/cjs/components/Nav/utils/alignUtil.js +1 -4
  255. package/dist/cjs/components/Nav/utils/index.d.ts +5 -0
  256. package/dist/cjs/components/Nav/utils/index.js +21 -0
  257. package/dist/cjs/components/Nav/utils/nodeUtil.d.ts +2 -2
  258. package/dist/cjs/components/Nav/utils/nodeUtil.js +38 -34
  259. package/dist/cjs/components/Nav/utils/warnUtil.js +2 -5
  260. package/dist/cjs/components/Navbar/Center.d.ts +2 -2
  261. package/dist/cjs/components/Navbar/Center.js +3 -3
  262. package/dist/cjs/components/Navbar/Container.d.ts +2 -2
  263. package/dist/cjs/components/Navbar/Container.js +3 -3
  264. package/dist/cjs/components/Navbar/Item.d.ts +2 -2
  265. package/dist/cjs/components/Navbar/Item.js +3 -3
  266. package/dist/cjs/components/Navbar/Left.d.ts +2 -2
  267. package/dist/cjs/components/Navbar/Left.js +3 -3
  268. package/dist/cjs/components/Navbar/Nav.d.ts +1 -1
  269. package/dist/cjs/components/Navbar/Nav.js +2 -2
  270. package/dist/cjs/components/Navbar/Navbar.d.ts +1 -1
  271. package/dist/cjs/components/Navbar/Navbar.js +2 -2
  272. package/dist/cjs/components/Navbar/Right.d.ts +2 -2
  273. package/dist/cjs/components/Navbar/Right.js +3 -3
  274. package/dist/cjs/components/Navbar/Toggle.d.ts +2 -2
  275. package/dist/cjs/components/Navbar/Toggle.js +3 -3
  276. package/dist/cjs/components/Overlay/index.d.ts +1 -1
  277. package/dist/cjs/components/Overlay/index.js +3 -3
  278. package/dist/cjs/components/Progress/index.d.ts +1 -1
  279. package/dist/cjs/components/Progress/index.js +2 -2
  280. package/dist/cjs/components/Section/index.d.ts +2 -2
  281. package/dist/cjs/components/Section/index.js +3 -3
  282. package/dist/cjs/components/Segmented/index.d.ts +1 -1
  283. package/dist/cjs/components/Segmented/index.js +2 -2
  284. package/dist/cjs/components/Slider/index.d.ts +3 -0
  285. package/dist/cjs/components/{Nav/hooks/useUUID.js → Slider/index.js} +10 -17
  286. package/dist/cjs/components/Spinner/index.d.ts +1 -1
  287. package/dist/cjs/components/Spinner/index.js +2 -2
  288. package/dist/cjs/components/Subnav/Item.d.ts +1 -1
  289. package/dist/cjs/components/Subnav/Subnav.d.ts +1 -1
  290. package/dist/cjs/components/Subnav/Subnav.js +2 -2
  291. package/dist/cjs/components/Switch/index.d.ts +2 -2
  292. package/dist/cjs/components/Switch/index.js +2 -3
  293. package/dist/cjs/components/Tabs/index.d.ts +6 -4
  294. package/dist/cjs/components/Tabs/index.js +10 -9
  295. package/dist/cjs/components/Text/index.d.ts +4 -4
  296. package/dist/cjs/components/Text/index.js +3 -3
  297. package/dist/cjs/components/Tile/index.d.ts +4 -4
  298. package/dist/cjs/components/Tile/index.js +3 -3
  299. package/dist/cjs/components/Width/Width.d.ts +2 -2
  300. package/dist/cjs/components/Width/Width.js +3 -3
  301. package/dist/cjs/constants.d.ts +12 -0
  302. package/dist/cjs/constants.js +16 -0
  303. package/dist/cjs/index.d.ts +1 -0
  304. package/dist/cjs/index.js +2 -1
  305. package/dist/cjs/utils/motion.d.ts +1 -1
  306. package/dist/esm/components/Accordion/Accordion.d.ts +3 -2
  307. package/dist/esm/components/Accordion/Accordion.js +2 -2
  308. package/dist/esm/components/Accordion/Item.d.ts +1 -5
  309. package/dist/esm/components/Accordion/Item.js +2 -7
  310. package/dist/esm/components/Accordion/index.d.ts +1 -1
  311. package/dist/esm/components/Alert/index.js +4 -6
  312. package/dist/esm/components/Align/Align.d.ts +2 -2
  313. package/dist/esm/components/Align/Align.js +3 -3
  314. package/dist/esm/components/Align/Center.d.ts +1 -1
  315. package/dist/esm/components/Align/Left.d.ts +1 -1
  316. package/dist/esm/components/Align/Right.d.ts +1 -1
  317. package/dist/esm/components/Article/Article.d.ts +1 -1
  318. package/dist/esm/components/Article/Article.js +2 -2
  319. package/dist/esm/components/Article/Meta.d.ts +4 -4
  320. package/dist/esm/components/Article/Meta.js +3 -3
  321. package/dist/esm/components/Article/Title.d.ts +4 -4
  322. package/dist/esm/components/Article/Title.js +3 -3
  323. package/dist/esm/components/Article/context.d.ts +2 -2
  324. package/dist/esm/components/Badge/index.d.ts +4 -4
  325. package/dist/esm/components/Badge/index.js +2 -2
  326. package/dist/esm/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  327. package/dist/esm/components/Breadcrumb/Breadcrumb.js +2 -2
  328. package/dist/esm/components/Breadcrumb/Item.d.ts +1 -1
  329. package/dist/esm/components/Breadcrumb/Item.js +2 -3
  330. package/dist/esm/components/Button/Button.d.ts +2 -2
  331. package/dist/esm/components/Button/Button.js +2 -2
  332. package/dist/esm/components/Button/Group.d.ts +1 -1
  333. package/dist/esm/components/Button/Group.js +2 -2
  334. package/dist/esm/components/Card/Badge.d.ts +1 -1
  335. package/dist/esm/components/Card/Badge.js +3 -3
  336. package/dist/esm/components/Card/Body.d.ts +4 -4
  337. package/dist/esm/components/Card/Body.js +3 -3
  338. package/dist/esm/components/Card/Card.d.ts +4 -4
  339. package/dist/esm/components/Card/Card.js +4 -4
  340. package/dist/esm/components/Card/Footer.d.ts +4 -4
  341. package/dist/esm/components/Card/Footer.js +3 -3
  342. package/dist/esm/components/Card/Header.d.ts +4 -4
  343. package/dist/esm/components/Card/Header.js +3 -3
  344. package/dist/esm/components/Card/Media.d.ts +4 -4
  345. package/dist/esm/components/Card/Media.js +3 -3
  346. package/dist/esm/components/Card/Title.d.ts +4 -4
  347. package/dist/esm/components/Card/Title.js +3 -3
  348. package/dist/esm/components/Close/index.d.ts +1 -1
  349. package/dist/esm/components/Close/index.js +2 -2
  350. package/dist/esm/components/Component/index.d.ts +1 -1
  351. package/dist/esm/components/Component/index.js +1 -4
  352. package/dist/esm/components/ConfigProvider/index.d.ts +55 -40
  353. package/dist/esm/components/ConfigProvider/index.js +3 -3
  354. package/dist/esm/components/Container/index.d.ts +7 -2
  355. package/dist/esm/components/Container/index.js +4 -4
  356. package/dist/esm/components/Control/Checkbox/Checkbox.d.ts +2 -2
  357. package/dist/esm/components/Control/Checkbox/Checkbox.js +2 -2
  358. package/dist/esm/components/Control/Checkbox/Group.d.ts +2 -2
  359. package/dist/esm/components/Control/Checkbox/Group.js +2 -2
  360. package/dist/esm/components/Control/Checkbox/index.d.ts +1 -1
  361. package/dist/esm/components/Control/Input/Input.js +2 -5
  362. package/dist/esm/components/Control/Input/Number/index.js +3 -3
  363. package/dist/esm/components/Control/Input/Password/index.js +2 -2
  364. package/dist/esm/components/Control/Input/useInput.js +2 -1
  365. package/dist/esm/components/Control/Radio/Group.js +4 -6
  366. package/dist/esm/components/Control/Radio/Radio.js +2 -2
  367. package/dist/esm/components/Control/Radio/index.d.ts +1 -1
  368. package/dist/esm/components/Control/Select/Select.d.ts +18 -0
  369. package/dist/esm/components/Control/Select/Select.js +209 -0
  370. package/dist/esm/components/Control/Select/index.d.ts +4 -23
  371. package/dist/esm/components/Control/Select/index.js +1 -217
  372. package/dist/esm/components/Control/Select/placements.d.ts +1 -1
  373. package/dist/esm/components/Control/TextArea/index.d.ts +3 -3
  374. package/dist/esm/components/Control/TextArea/index.js +7 -6
  375. package/dist/esm/components/Cover/index.d.ts +1 -1
  376. package/dist/esm/components/Cover/index.js +2 -2
  377. package/dist/esm/components/DatePicker/PickerButton.d.ts +1 -1
  378. package/dist/esm/components/DatePicker/PickerButton.js +3 -1
  379. package/dist/esm/components/DatePicker/generatePurePicker.js +1 -3
  380. package/dist/esm/components/DescriptionList/Description.d.ts +1 -1
  381. package/dist/esm/components/DescriptionList/DescriptionList.d.ts +1 -1
  382. package/dist/esm/components/DescriptionList/DescriptionList.js +2 -2
  383. package/dist/esm/components/DescriptionList/Term.d.ts +1 -1
  384. package/dist/esm/components/Divider/index.d.ts +1 -1
  385. package/dist/esm/components/Divider/index.js +2 -2
  386. package/dist/esm/components/Dotnav/Dotnav.d.ts +1 -1
  387. package/dist/esm/components/Dotnav/Dotnav.js +2 -2
  388. package/dist/esm/components/Dotnav/Item.d.ts +1 -1
  389. package/dist/esm/components/Dotnav/Item.js +2 -3
  390. package/dist/esm/components/Drawer/index.d.ts +3 -3
  391. package/dist/esm/components/Drawer/index.js +2 -2
  392. package/dist/esm/components/Drop/index.d.ts +5 -6
  393. package/dist/esm/components/Drop/index.js +4 -3
  394. package/dist/esm/components/Dropdown/index.js +2 -2
  395. package/dist/esm/components/Flex/Flex.d.ts +2 -2
  396. package/dist/esm/components/Flex/Flex.js +3 -3
  397. package/dist/esm/components/Flex/Item.d.ts +2 -2
  398. package/dist/esm/components/Flex/Item.js +3 -3
  399. package/dist/esm/components/Flex/context.d.ts +2 -2
  400. package/dist/esm/components/Flex/index.d.ts +1 -1
  401. package/dist/esm/components/Form/Controls.d.ts +1 -1
  402. package/dist/esm/components/Form/Controls.js +2 -2
  403. package/dist/esm/components/Form/ControlsText.d.ts +1 -1
  404. package/dist/esm/components/Form/ControlsText.js +2 -2
  405. package/dist/esm/components/Form/Fieldset.d.ts +1 -1
  406. package/dist/esm/components/Form/Fieldset.js +2 -2
  407. package/dist/esm/components/Form/Form.d.ts +2 -2
  408. package/dist/esm/components/Form/Form.js +3 -3
  409. package/dist/esm/components/Form/Label.d.ts +1 -1
  410. package/dist/esm/components/Form/Label.js +2 -2
  411. package/dist/esm/components/Form/Legend.d.ts +1 -1
  412. package/dist/esm/components/Form/Legend.js +2 -2
  413. package/dist/esm/components/Form/context.d.ts +2 -2
  414. package/dist/esm/components/Grid/index.d.ts +4 -4
  415. package/dist/esm/components/Grid/index.js +3 -3
  416. package/dist/esm/components/Heading/index.d.ts +4 -4
  417. package/dist/esm/components/Heading/index.js +2 -2
  418. package/dist/esm/components/Icon/Button.d.ts +1 -1
  419. package/dist/esm/components/Icon/Icon.d.ts +4 -4
  420. package/dist/esm/components/Icon/Icon.js +3 -3
  421. package/dist/esm/components/Icon/Link.d.ts +1 -1
  422. package/dist/esm/components/Icon/index.d.ts +1 -1
  423. package/dist/esm/components/Iconnav/Iconnav.d.ts +1 -1
  424. package/dist/esm/components/Iconnav/Iconnav.js +2 -2
  425. package/dist/esm/components/Iconnav/Item.d.ts +1 -1
  426. package/dist/esm/components/Iconnav/Item.js +2 -3
  427. package/dist/esm/components/Inverse/index.d.ts +2 -2
  428. package/dist/esm/components/Inverse/index.js +2 -2
  429. package/dist/esm/components/Label/index.d.ts +1 -1
  430. package/dist/esm/components/Label/index.js +2 -2
  431. package/dist/esm/components/Link/index.d.ts +2 -2
  432. package/dist/esm/components/Link/index.js +3 -3
  433. package/dist/esm/components/List/Item.d.ts +1 -3
  434. package/dist/esm/components/List/List.d.ts +1 -1
  435. package/dist/esm/components/List/List.js +2 -2
  436. package/dist/esm/components/Modal/index.d.ts +1 -1
  437. package/dist/esm/components/Modal/index.js +2 -2
  438. package/dist/esm/components/Nav/Divider.d.ts +1 -1
  439. package/dist/esm/components/Nav/Divider.js +3 -8
  440. package/dist/esm/components/Nav/Group/InternalNavGroup.d.ts +10 -0
  441. package/dist/esm/components/Nav/Group/InternalNavGroup.js +16 -0
  442. package/dist/esm/components/Nav/Group/index.d.ts +4 -2
  443. package/dist/esm/components/Nav/Group/index.js +6 -6
  444. package/dist/esm/components/Nav/Header.d.ts +1 -3
  445. package/dist/esm/components/Nav/Header.js +4 -5
  446. package/dist/esm/components/Nav/Icon/index.d.ts +7 -0
  447. package/dist/esm/components/Nav/Icon/index.js +14 -0
  448. package/dist/esm/components/Nav/Item/InternalNavItem.d.ts +1 -5
  449. package/dist/esm/components/Nav/Item/InternalNavItem.js +16 -37
  450. package/dist/esm/components/Nav/Item/LegacyNavItem.js +11 -5
  451. package/dist/esm/components/Nav/Item/index.d.ts +1 -1
  452. package/dist/esm/components/Nav/Item/index.js +4 -7
  453. package/dist/esm/components/Nav/Nav.d.ts +8 -21
  454. package/dist/esm/components/Nav/Nav.js +72 -77
  455. package/dist/esm/components/Nav/Sub/InlineSubNavList.d.ts +1 -1
  456. package/dist/esm/components/Nav/Sub/InlineSubNavList.js +3 -3
  457. package/dist/esm/components/Nav/Sub/InternalSubNav.d.ts +15 -0
  458. package/dist/esm/components/Nav/Sub/InternalSubNav.js +157 -0
  459. package/dist/esm/components/Nav/Sub/PopupTrigger.d.ts +2 -1
  460. package/dist/esm/components/Nav/Sub/PopupTrigger.js +9 -10
  461. package/dist/esm/components/Nav/Sub/SubNavList.d.ts +1 -2
  462. package/dist/esm/components/Nav/Sub/SubNavList.js +4 -4
  463. package/dist/esm/components/Nav/Sub/index.d.ts +4 -15
  464. package/dist/esm/components/Nav/Sub/index.js +7 -167
  465. package/dist/esm/components/Nav/context/NavContext.d.ts +7 -3
  466. package/dist/esm/components/Nav/context/NavContext.js +6 -6
  467. package/dist/esm/components/Nav/context/index.d.ts +3 -0
  468. package/dist/esm/components/Nav/context/index.js +3 -0
  469. package/dist/esm/components/Nav/hooks/index.d.ts +5 -0
  470. package/dist/esm/components/Nav/hooks/index.js +5 -0
  471. package/dist/esm/components/Nav/hooks/useAccessibility.d.ts +11 -0
  472. package/dist/esm/components/Nav/hooks/useAccessibility.js +96 -100
  473. package/dist/esm/components/Nav/hooks/useActive.js +5 -13
  474. package/dist/esm/components/Nav/hooks/useDirectionStyle.js +1 -1
  475. package/dist/esm/components/Nav/hooks/useKeyRecords.d.ts +3 -3
  476. package/dist/esm/components/Nav/hooks/useKeyRecords.js +3 -3
  477. package/dist/esm/components/Nav/types.d.ts +16 -3
  478. package/dist/esm/components/Nav/utils/alignUtil.d.ts +1 -1
  479. package/dist/esm/components/Nav/utils/alignUtil.js +1 -4
  480. package/dist/esm/components/Nav/utils/index.d.ts +5 -0
  481. package/dist/esm/components/Nav/utils/index.js +5 -0
  482. package/dist/esm/components/Nav/utils/nodeUtil.d.ts +2 -2
  483. package/dist/esm/components/Nav/utils/nodeUtil.js +38 -31
  484. package/dist/esm/components/Nav/utils/warnUtil.js +1 -1
  485. package/dist/esm/components/Navbar/Center.d.ts +2 -2
  486. package/dist/esm/components/Navbar/Center.js +3 -3
  487. package/dist/esm/components/Navbar/Container.d.ts +2 -2
  488. package/dist/esm/components/Navbar/Container.js +3 -3
  489. package/dist/esm/components/Navbar/Item.d.ts +2 -2
  490. package/dist/esm/components/Navbar/Item.js +3 -3
  491. package/dist/esm/components/Navbar/Left.d.ts +2 -2
  492. package/dist/esm/components/Navbar/Left.js +3 -3
  493. package/dist/esm/components/Navbar/Nav.d.ts +1 -1
  494. package/dist/esm/components/Navbar/Nav.js +2 -2
  495. package/dist/esm/components/Navbar/Navbar.d.ts +1 -1
  496. package/dist/esm/components/Navbar/Navbar.js +2 -2
  497. package/dist/esm/components/Navbar/Right.d.ts +2 -2
  498. package/dist/esm/components/Navbar/Right.js +3 -3
  499. package/dist/esm/components/Navbar/Toggle.d.ts +2 -2
  500. package/dist/esm/components/Navbar/Toggle.js +3 -3
  501. package/dist/esm/components/Overlay/index.d.ts +1 -1
  502. package/dist/esm/components/Overlay/index.js +3 -3
  503. package/dist/esm/components/Progress/index.d.ts +1 -1
  504. package/dist/esm/components/Progress/index.js +2 -2
  505. package/dist/esm/components/Section/index.d.ts +2 -2
  506. package/dist/esm/components/Section/index.js +3 -3
  507. package/dist/esm/components/Segmented/index.d.ts +1 -1
  508. package/dist/esm/components/Segmented/index.js +2 -2
  509. package/dist/esm/components/Slider/index.d.ts +3 -0
  510. package/dist/esm/components/Slider/index.js +10 -0
  511. package/dist/esm/components/Spinner/index.d.ts +1 -1
  512. package/dist/esm/components/Spinner/index.js +2 -2
  513. package/dist/esm/components/Subnav/Item.d.ts +1 -1
  514. package/dist/esm/components/Subnav/Subnav.d.ts +1 -1
  515. package/dist/esm/components/Subnav/Subnav.js +2 -2
  516. package/dist/esm/components/Switch/index.d.ts +2 -2
  517. package/dist/esm/components/Switch/index.js +2 -3
  518. package/dist/esm/components/Tabs/index.d.ts +6 -4
  519. package/dist/esm/components/Tabs/index.js +10 -9
  520. package/dist/esm/components/Text/index.d.ts +4 -4
  521. package/dist/esm/components/Text/index.js +3 -3
  522. package/dist/esm/components/Tile/index.d.ts +4 -4
  523. package/dist/esm/components/Tile/index.js +3 -3
  524. package/dist/esm/components/Width/Width.d.ts +2 -2
  525. package/dist/esm/components/Width/Width.js +3 -3
  526. package/dist/esm/constants.d.ts +12 -0
  527. package/dist/esm/constants.js +13 -0
  528. package/dist/esm/index.d.ts +1 -0
  529. package/dist/esm/index.js +1 -0
  530. package/dist/esm/utils/motion.d.ts +1 -1
  531. package/package.json +30 -29
  532. package/styles/_import.components.scss +3 -5
  533. package/styles/_import.scss +5 -8
  534. package/styles/accordion.scss +56 -30
  535. package/styles/alert.scss +6 -5
  536. package/styles/animation.scss +64 -213
  537. package/styles/background.scss +34 -131
  538. package/styles/base.scss +37 -65
  539. package/styles/breadcrumb.scss +6 -9
  540. package/styles/button.scss +22 -62
  541. package/styles/control.scss +1 -0
  542. package/styles/datepicker.scss +3 -2
  543. package/styles/input-number.scss +11 -21
  544. package/styles/leader.scss +2 -2
  545. package/styles/mixins.scss +40 -31
  546. package/styles/nav.scss +7 -28
  547. package/styles/navbar.scss +185 -160
  548. package/styles/search.scss +16 -46
  549. package/styles/select.scss +111 -292
  550. package/styles/slider.scss +521 -0
  551. package/styles/subnav.scss +1 -1
  552. package/styles/switch.scss +12 -0
  553. package/styles/tabs.scss +65 -37
  554. package/styles/text.scss +65 -65
  555. package/styles/thumbnav.scss +4 -4
  556. package/styles/variables.scss +85 -28
  557. package/dist/cjs/components/Nav/Group/InternalNavItemGroup.d.ts +0 -14
  558. package/dist/cjs/components/Nav/context/PrivateContext.d.ts +0 -7
  559. package/dist/cjs/components/Nav/hooks/useUUID.d.ts +0 -1
  560. package/dist/esm/components/Nav/Group/InternalNavItemGroup.d.ts +0 -14
  561. package/dist/esm/components/Nav/Group/InternalNavItemGroup.js +0 -16
  562. package/dist/esm/components/Nav/context/PrivateContext.d.ts +0 -7
  563. package/dist/esm/components/Nav/context/PrivateContext.js +0 -6
  564. package/dist/esm/components/Nav/hooks/useUUID.d.ts +0 -1
  565. package/dist/esm/components/Nav/hooks/useUUID.js +0 -17
@@ -1,172 +1,12 @@
1
1
  import { noop } from '@broxus/js-utils';
2
- import warning from '@rc-component/util/lib/warning';
3
- import classNames from 'classnames';
4
- import Overflow from 'rc-overflow';
5
2
  import * as React from 'react';
6
- import { useNavId } from '../../../components/Nav/context/IdContext';
7
- import { NavContext, NavContextProvider } from '../../../components/Nav/context/NavContext';
8
- import { PathTrackerContext, PathUserContext, useFullPath, useMeasure, } 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';
12
- import { useMemoCallback } from '../../../components/Nav/hooks/useMemoCallback';
13
- import { InlineSubNavList } from '../../../components/Nav/Sub/InlineSubNavList';
14
- import { PopupTrigger } from '../../../components/Nav/Sub/PopupTrigger';
15
- import { SubNavList } from '../../../components/Nav/Sub/SubNavList';
16
- import { parseChildren } from '../../../components/Nav/utils/nodeUtil';
17
- import { warnItemProp } from '../../../components/Nav/utils/warnUtil';
18
- function InternalSubNav(props) {
19
- const { children, className, disabled, eventKey, expandIcon, internalPopupClose, itemIcon, popupClassName, popupOffset, style, title, warnKey, onClick, onMouseEnter, onMouseLeave, onTitleClick, onTitleMouseEnter, onTitleMouseLeave, ...restProps } = props;
20
- const domDataId = useNavId(eventKey);
21
- const { activeKey, disabled: contextDisabled, expandIcon: contextExpandIcon, itemIcon: contextItemIcon, mode, openKeys, overflowDisabled, popupPrefixCls, selectedKeys, onActive, onItemClick, onOpenChange, } = React.useContext(NavContext);
22
- const pathUser = React.useContext(PathUserContext);
23
- const connectedPath = useFullPath();
24
- const { _internalRenderSubMenuItem } = React.useContext(PrivateContext);
25
- const mergedDisabled = contextDisabled || disabled;
26
- const elementRef = React.useRef(null);
27
- const popupRef = React.useRef(null);
28
- // ================================ Warn ================================
29
- if (process.env.NODE_ENV !== 'production' && warnKey) {
30
- warning(false, 'SubNav should not leave undefined `key`.');
31
- }
32
- // ================================ Icon ================================
33
- const mergedItemIcon = itemIcon || contextItemIcon;
34
- const mergedExpandIcon = expandIcon || contextExpandIcon;
35
- // ================================ Open ================================
36
- const originOpen = eventKey ? openKeys.includes(eventKey) : false;
37
- const open = !overflowDisabled && originOpen;
38
- // =============================== Select ===============================
39
- const childrenSelected = eventKey ? pathUser?.isSubPathKey(selectedKeys, eventKey) : false;
40
- // =============================== Active ===============================
41
- const { active, ...activeProps } = useActive(eventKey, disabled, onTitleMouseEnter, onTitleMouseLeave);
42
- // Fallback of active check to avoid hover on menu title or disabled item
43
- const [childrenActive, setChildrenActive] = React.useState(false);
44
- const triggerChildrenActive = (newActive) => {
45
- if (!disabled) {
46
- setChildrenActive(newActive);
47
- }
48
- };
49
- const onInternalMouseEnter = domEvent => {
50
- triggerChildrenActive(true);
51
- if (eventKey) {
52
- onMouseEnter?.({
53
- domEvent,
54
- key: eventKey,
55
- });
56
- }
57
- };
58
- const onInternalMouseLeave = domEvent => {
59
- triggerChildrenActive(false);
60
- if (eventKey) {
61
- onMouseLeave?.({
62
- domEvent,
63
- key: eventKey,
64
- });
65
- }
66
- };
67
- const mergedActive = React.useMemo(() => {
68
- if (active) {
69
- return active;
70
- }
71
- if (mode !== 'inline' && eventKey) {
72
- return childrenActive || pathUser?.isSubPathKey([activeKey], eventKey);
73
- }
74
- return false;
75
- }, [active, mode, eventKey, childrenActive, pathUser, activeKey]);
76
- // ========================== DirectionStyle ==========================
77
- const directionStyle = useDirectionStyle(connectedPath.length);
78
- // =============================== Events ===============================
79
- // Title click
80
- const onInternalTitleClick = e => {
81
- // Skip if disabled
82
- if (disabled) {
83
- return;
84
- }
85
- if (eventKey) {
86
- onTitleClick?.({
87
- domEvent: e,
88
- key: eventKey,
89
- });
90
- }
91
- // Trigger open by click when mode is `inline`
92
- if (mode === 'inline' && eventKey) {
93
- onOpenChange(eventKey, !originOpen);
94
- }
95
- };
96
- // Context for children click
97
- const onMergedItemClick = useMemoCallback((info) => {
98
- onClick?.(warnItemProp(info));
99
- onItemClick?.(info);
100
- });
101
- // Visible change
102
- const onPopupVisibleChange = (newVisible) => {
103
- if (mode !== 'inline' && eventKey) {
104
- onOpenChange(eventKey, newVisible);
105
- }
106
- };
107
- /**
108
- * Used for accessibility. Helper will focus element without keyboard.
109
- * We should manually trigger an active
110
- */
111
- const onInternalFocus = () => {
112
- if (eventKey) {
113
- onActive(eventKey);
114
- }
115
- };
116
- // =============================== Render ===============================
117
- const popupId = domDataId ? `${domDataId}-dropdown` : undefined;
118
- // Title
119
- let titleNode = (React.createElement("a", { ref: elementRef, "aria-controls": popupId, "aria-disabled": disabled, "aria-expanded": open, "aria-haspopup": true, "data-nav-id": overflowDisabled && domDataId ? null : domDataId, role: disabled ? undefined : 'menuitem', style: { ...directionStyle }, tabIndex: disabled ? undefined : -1, title: typeof title === 'string' ? title : undefined, onClick: onInternalTitleClick, onFocus: onInternalFocus, ...activeProps },
120
- React.createElement(React.Fragment, { key: "children" },
121
- title,
122
- typeof mergedExpandIcon === 'function' ? mergedExpandIcon({
123
- disabled,
124
- isOpen: open,
125
- isSubNav: true,
126
- }) : mergedExpandIcon)));
127
- // Cache mode if it changes to `inline` which do not have popup motion
128
- const triggerModeRef = React.useRef(mode);
129
- if (mode !== 'inline' && connectedPath.length > 1) {
130
- triggerModeRef.current = 'vertical';
131
- }
132
- else {
133
- triggerModeRef.current = mode;
134
- }
135
- if (!overflowDisabled) {
136
- const triggerMode = triggerModeRef.current;
137
- // Still wrap with Trigger here since we need avoid react re-mount dom node
138
- // Which makes motion failed
139
- titleNode = (React.createElement(PopupTrigger, { disabled: disabled, mode: triggerMode, popup: (React.createElement(NavContextProvider
140
- // Special handle of horizontal mode
141
- , {
142
- // Special handle of horizontal mode
143
- mode: triggerMode === 'horizontal' ? 'vertical' : triggerMode },
144
- React.createElement(SubNavList, { ref: popupRef, className: `${popupPrefixCls}-nav`, id: popupId }, children))), popupClassName: popupClassName, popupOffset: popupOffset, prefixCls: popupPrefixCls, visible: !internalPopupClose && open && mode !== 'inline', onVisibleChange: onPopupVisibleChange }, titleNode));
145
- }
146
- // List node
147
- let listNode = (React.createElement(Overflow.Item, { className: classNames('uk-parent', className, {
148
- 'uk-active': childrenSelected,
149
- 'uk-disabled': disabled,
150
- 'uk-hover': mergedActive,
151
- 'uk-open': open,
152
- }), role: "none", ...restProps, component: "li", style: style, onMouseEnter: onInternalMouseEnter, onMouseLeave: onInternalMouseLeave },
153
- titleNode,
154
- !overflowDisabled && (React.createElement(InlineSubNavList, { id: popupId, keyPath: connectedPath, open: open }, children))));
155
- if (_internalRenderSubMenuItem) {
156
- listNode = _internalRenderSubMenuItem(listNode, props, {
157
- active: !!mergedActive,
158
- disabled: !!mergedDisabled,
159
- open,
160
- selected: !!childrenSelected,
161
- });
162
- }
163
- return (React.createElement(NavContextProvider, { expandIcon: mergedExpandIcon, itemIcon: mergedItemIcon, mode: mode === 'horizontal' ? 'vertical' : mode, onItemClick: onMergedItemClick }, listNode));
164
- }
165
- // eslint-disable-next-line react/no-multi-comp
166
- export function Sub({ children, eventKey, ...restProps }) {
3
+ import { PathTrackerContext, useFullPath, useMeasure } from '../../../components/Nav/context';
4
+ import { InternalSubNav } from '../../../components/Nav/Sub/InternalSubNav';
5
+ import { parseChildren } from '../../../components/Nav/utils';
6
+ export const Sub = React.forwardRef(({ children, eventKey, ...props }, ref) => {
167
7
  const connectedKeyPath = useFullPath(eventKey);
168
- const childList = parseChildren(children, connectedKeyPath);
169
8
  const measure = useMeasure();
9
+ const childList = parseChildren(children, connectedKeyPath);
170
10
  React.useEffect(() => {
171
11
  if (measure && eventKey) {
172
12
  measure.registerPath(eventKey, connectedKeyPath);
@@ -176,8 +16,8 @@ export function Sub({ children, eventKey, ...restProps }) {
176
16
  }
177
17
  return noop;
178
18
  }, [connectedKeyPath, eventKey, measure]);
179
- return (React.createElement(PathTrackerContext.Provider, { value: connectedKeyPath }, measure ? childList : React.createElement(InternalSubNav, { eventKey: eventKey, ...restProps }, childList)));
180
- }
19
+ return (React.createElement(PathTrackerContext.Provider, { value: connectedKeyPath }, measure ? childList : (React.createElement(InternalSubNav, { ref: ref, eventKey: eventKey, ...props }, childList))));
20
+ });
181
21
  if (process.env.NODE_ENV !== 'production') {
182
22
  Sub.displayName = 'Nav.Sub';
183
23
  }
@@ -1,9 +1,11 @@
1
1
  import { type CSSMotionProps } from '@rc-component/motion';
2
2
  import * as React from 'react';
3
- import { type BuiltinPlacements, type NavClickEventHandler, type NavMode, type RenderIconType, type TriggerSubNavAction } from '../../../components/Nav/types';
3
+ import { type SemanticName } from '../../../components/Nav/Sub/InternalSubNav';
4
+ import { type BuiltinPlacements, type NavClickEventHandler, type NavMode, type NavPopupRender, type RenderIconType, type TriggerSubNavAction } from '../../../components/Nav/types';
4
5
  export interface NavContextProps {
5
6
  activeKey: string;
6
7
  builtinPlacements?: BuiltinPlacements;
8
+ classNames?: Partial<Record<SemanticName, string>>;
7
9
  defaultMotions?: Partial<{
8
10
  [key in NavMode | 'other']: CSSMotionProps;
9
11
  }>;
@@ -18,9 +20,12 @@ export interface NavContextProps {
18
20
  openKeys: string[];
19
21
  overflowDisabled?: boolean;
20
22
  popupPrefixCls: string;
23
+ popupRender?: NavPopupRender;
21
24
  prefixCls: string;
25
+ rootClassName?: string;
22
26
  rtl?: boolean;
23
27
  selectedKeys: string[];
28
+ styles?: Partial<Record<SemanticName, React.CSSProperties>>;
24
29
  subNavCloseDelay: number;
25
30
  subNavOpenDelay: number;
26
31
  triggerSubNavAction?: TriggerSubNavAction;
@@ -31,7 +36,6 @@ export interface NavContextProps {
31
36
  }
32
37
  export declare const NavContext: React.Context<NavContextProps>;
33
38
  export interface InheritableContextProps extends Partial<NavContextProps> {
34
- children?: React.ReactNode;
35
39
  locked?: boolean;
36
40
  }
37
- export declare function NavContextProvider({ children, locked, ...restProps }: InheritableContextProps): React.JSX.Element;
41
+ export declare function NavContextProvider({ children, locked, ...props }: React.PropsWithChildren<InheritableContextProps>): React.ReactElement;
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import useMemo from '@rc-component/util/lib/hooks/useMemo';
2
+ import useMemo from '@rc-component/util/es/hooks/useMemo';
3
+ import isEqual from '@rc-component/util/es/isEqual';
3
4
  import * as React from 'react';
4
- import shallowEqual from 'shallowequal';
5
5
  import { useConfig } from '../../../components/ConfigProvider';
6
6
  export const NavContext = React.createContext({
7
7
  popupPrefixCls: 'dropdown',
@@ -19,16 +19,16 @@ function mergeProps(origin, target) {
19
19
  });
20
20
  return clone;
21
21
  }
22
- export function NavContextProvider({ children, locked, ...restProps }) {
22
+ export function NavContextProvider({ children, locked, ...props }) {
23
23
  const config = useConfig();
24
24
  const context = React.useContext(NavContext);
25
25
  const inheritableContext = useMemo(() => mergeProps({
26
26
  ...context,
27
27
  popupPrefixCls: context.popupPrefixCls ?? `${config.prefixCls}-dropdown`,
28
28
  prefixCls: context.prefixCls ?? `${config.prefixCls}-nav`,
29
- }, restProps),
30
- // eslint-disable-next-line react-hooks/exhaustive-deps
31
- [context, restProps], (prev, next) => !locked && (prev[0] !== next[0] || !shallowEqual(prev[1], next[1])));
29
+ }, props), [config.prefixCls, context, props], (prev, next) => !locked && (prev[0] !== next[0]
30
+ || !isEqual(prev[1], next[1], true)
31
+ || !isEqual(prev[2], next[2], true)));
32
32
  return React.createElement(NavContext.Provider, { value: inheritableContext }, children);
33
33
  }
34
34
  if (process.env.NODE_ENV !== 'production') {
@@ -0,0 +1,3 @@
1
+ export * from '../../../components/Nav/context/IdContext';
2
+ export * from '../../../components/Nav/context/NavContext';
3
+ export * from '../../../components/Nav/context/PathContext';
@@ -0,0 +1,3 @@
1
+ export * from '../../../components/Nav/context/IdContext';
2
+ export * from '../../../components/Nav/context/NavContext';
3
+ export * from '../../../components/Nav/context/PathContext';
@@ -0,0 +1,5 @@
1
+ export * from '../../../components/Nav/hooks/useAccessibility';
2
+ export * from '../../../components/Nav/hooks/useActive';
3
+ export * from '../../../components/Nav/hooks/useDirectionStyle';
4
+ export * from '../../../components/Nav/hooks/useKeyRecords';
5
+ export * from '../../../components/Nav/hooks/useMemoCallback';
@@ -0,0 +1,5 @@
1
+ export * from '../../../components/Nav/hooks/useAccessibility';
2
+ export * from '../../../components/Nav/hooks/useActive';
3
+ export * from '../../../components/Nav/hooks/useDirectionStyle';
4
+ export * from '../../../components/Nav/hooks/useKeyRecords';
5
+ export * from '../../../components/Nav/hooks/useMemoCallback';
@@ -1,3 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { type NavMode } from '../../../components/Nav/types';
3
+ /**
4
+ * Get focusable elements from the element set under provided container
5
+ */
6
+ export declare function getFocusableElements(container: HTMLElement, elements: Set<HTMLElement>): HTMLElement[];
7
+ type RefreshElements = {
8
+ element2key: Map<HTMLElement, string>;
9
+ elements: Set<HTMLElement>;
10
+ key2element: Map<string, HTMLElement>;
11
+ };
12
+ export declare function refreshElements(keys: string[], id: string): RefreshElements;
3
13
  export declare function useAccessibility<T extends HTMLElement>(mode: NavMode, activeKey: string, isRtl: boolean, id: string, containerRef: React.RefObject<HTMLUListElement | null>, getKeys: () => string[], getKeyPath: (key: string, includeOverflow?: boolean) => string[], triggerActiveKey: (key: string) => void, triggerAccessibilityOpen: (key: string, open?: boolean) => void, originOnKeyDown?: React.KeyboardEventHandler<T>): React.KeyboardEventHandler<T>;
14
+ export {};
@@ -1,39 +1,47 @@
1
- import { getFocusNodeList } from '@rc-component/util/lib/Dom/focus';
2
- import KeyCode from '@rc-component/util/lib/KeyCode';
3
- import raf from '@rc-component/util/lib/raf';
1
+ import { getFocusNodeList } from '@rc-component/util/es/Dom/focus';
2
+ import raf from '@rc-component/util/es/raf';
4
3
  import * as React from 'react';
5
- import { getNavId } from '../../../components/Nav/context/IdContext';
6
- // destruct to reduce minify size
7
- const { DOWN, ENTER, ESC, LEFT, RIGHT, UP } = KeyCode;
8
- const ArrowKeys = [UP, DOWN, LEFT, RIGHT];
9
- function getOffset(mode, isRootLevel, isRtl, which) {
4
+ import { getNavId } from '../../../components/Nav/context';
5
+ import { KeyCode } from '../../../constants';
6
+ const ArrowKeys = [
7
+ KeyCode.ArrowDown,
8
+ KeyCode.ArrowLeft,
9
+ KeyCode.ArrowRight,
10
+ KeyCode.ArrowUp,
11
+ ];
12
+ const EdgeKeys = [KeyCode.Home, KeyCode.End];
13
+ const EnteringKeys = [KeyCode.Enter, KeyCode.Space];
14
+ function getOffset(mode, isRootLevel, isRtl, isShiftKey, keyCode) {
10
15
  const prev = 'prev';
11
16
  const next = 'next';
12
17
  const children = 'children';
13
18
  const parent = 'parent';
14
19
  // Inline enter is special that we use unique operation
15
- if (mode === 'inline' && which === ENTER) {
16
- return {
17
- inlineTrigger: true,
18
- };
20
+ if (mode === 'inline' && [KeyCode.Enter.toString(), KeyCode.Space.toString()].includes(keyCode)) {
21
+ return { inlineTrigger: true };
19
22
  }
20
23
  const inline = {
21
- [DOWN]: next,
22
- [UP]: prev,
24
+ [KeyCode.ArrowDown]: next,
25
+ [KeyCode.ArrowUp]: prev,
26
+ [KeyCode.Tab]: isShiftKey ? prev : next,
23
27
  };
24
28
  const horizontal = {
25
- [DOWN]: children,
26
- [ENTER]: children,
27
- [LEFT]: isRtl ? next : prev,
28
- [RIGHT]: isRtl ? prev : next,
29
+ [KeyCode.ArrowDown]: children,
30
+ [KeyCode.ArrowLeft]: isRtl ? next : prev,
31
+ [KeyCode.ArrowRight]: isRtl ? prev : next,
32
+ [KeyCode.Enter]: children,
33
+ [KeyCode.Space]: children,
34
+ [KeyCode.Tab]: isShiftKey ? prev : next,
29
35
  };
30
36
  const vertical = {
31
- [DOWN]: next,
32
- [ENTER]: children,
33
- [ESC]: parent,
34
- [LEFT]: isRtl ? children : parent,
35
- [RIGHT]: isRtl ? parent : children,
36
- [UP]: prev,
37
+ [KeyCode.ArrowDown]: next,
38
+ [KeyCode.ArrowLeft]: isRtl ? children : parent,
39
+ [KeyCode.ArrowRight]: isRtl ? parent : children,
40
+ [KeyCode.ArrowUp]: prev,
41
+ [KeyCode.Enter]: children,
42
+ [KeyCode.Escape]: parent,
43
+ [KeyCode.Space]: children,
44
+ [KeyCode.Tab]: isShiftKey ? prev : next,
37
45
  };
38
46
  const offsets = {
39
47
  horizontal,
@@ -43,42 +51,30 @@ function getOffset(mode, isRootLevel, isRtl, which) {
43
51
  vertical,
44
52
  verticalSub: vertical,
45
53
  };
46
- const type = offsets[`${mode}${isRootLevel ? '' : 'Sub'}`]?.[which];
54
+ // @ts-ignore .....
55
+ const type = offsets[`${mode}${isRootLevel ? '' : 'Sub'}`]?.[keyCode];
47
56
  switch (type) {
48
57
  case prev:
49
- return {
50
- offset: -1,
51
- sibling: true,
52
- };
58
+ return { offset: -1, sibling: true };
53
59
  case next:
54
- return {
55
- offset: 1,
56
- sibling: true,
57
- };
60
+ return { offset: 1, sibling: true };
58
61
  case parent:
59
- return {
60
- offset: -1,
61
- sibling: false,
62
- };
62
+ return { offset: -1, sibling: false };
63
63
  case children:
64
- return {
65
- offset: 1,
66
- sibling: false,
67
- };
64
+ return { offset: 1, sibling: false };
68
65
  default:
69
- return null;
66
+ return undefined;
70
67
  }
71
68
  }
72
69
  function findContainerUL(element) {
73
70
  let current = element;
74
71
  while (current) {
75
- if (current.getAttribute('data-nav-list')) {
72
+ if (current.hasAttribute('data-nav-list')) {
76
73
  return current;
77
74
  }
78
75
  current = current.parentElement;
79
76
  }
80
77
  // Normally should not reach this line
81
- /* istanbul ignore next */
82
78
  return null;
83
79
  }
84
80
  /**
@@ -92,25 +88,25 @@ function getFocusElement(activeElement, elements) {
92
88
  }
93
89
  current = current.parentElement;
94
90
  }
95
- return null;
91
+ return undefined;
96
92
  }
97
93
  /**
98
94
  * Get focusable elements from the element set under provided container
99
95
  */
100
- function getFocusableElements(container, elements) {
96
+ export function getFocusableElements(container, elements) {
101
97
  const list = getFocusNodeList(container, true);
102
98
  return list.filter(ele => elements.has(ele));
103
99
  }
104
- function getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offset = 1) {
100
+ function getNextFocusElement(parentQueryContainer, elements, focusNavElement, offset = 1) {
105
101
  // Key on the menu item will not get validate parent container
106
102
  if (!parentQueryContainer) {
107
103
  return undefined;
108
104
  }
109
105
  // List current level menu item elements
110
- const sameLevelFocusableMenuElementList = getFocusableElements(parentQueryContainer, elements);
106
+ const sameLevelFocusableNavElementList = getFocusableElements(parentQueryContainer, elements);
111
107
  // Find next focus index
112
- const count = sameLevelFocusableMenuElementList.length;
113
- let focusIndex = sameLevelFocusableMenuElementList.findIndex(ele => focusMenuElement === ele);
108
+ const count = sameLevelFocusableNavElementList.length;
109
+ let focusIndex = sameLevelFocusableNavElementList.findIndex(ele => focusNavElement === ele);
114
110
  if (offset < 0) {
115
111
  if (focusIndex === -1) {
116
112
  focusIndex = count - 1;
@@ -124,7 +120,21 @@ function getNextFocusElement(parentQueryContainer, elements, focusMenuElement, o
124
120
  }
125
121
  focusIndex = (focusIndex + count) % count;
126
122
  // Focus menu item
127
- return sameLevelFocusableMenuElementList[focusIndex];
123
+ return sameLevelFocusableNavElementList[focusIndex];
124
+ }
125
+ export function refreshElements(keys, id) {
126
+ const elements = new Set();
127
+ const key2element = new Map();
128
+ const element2key = new Map();
129
+ keys.forEach(key => {
130
+ const element = document.querySelector(`[data-nav-id='${getNavId(id, key)}']`);
131
+ if (element) {
132
+ elements.add(element);
133
+ element2key.set(element, key);
134
+ key2element.set(key, element);
135
+ }
136
+ });
137
+ return { element2key, elements, key2element };
128
138
  }
129
139
  export function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKeys, getKeyPath, triggerActiveKey, triggerAccessibilityOpen, originOnKeyDown) {
130
140
  const rafRef = React.useRef(undefined);
@@ -137,50 +147,33 @@ export function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKe
137
147
  cleanRaf();
138
148
  }, []);
139
149
  return event => {
140
- const { which } = event;
141
- if ([...ArrowKeys, ENTER, ESC].includes(which)) {
142
- // Convert key to elements
143
- let element2key = new Map(), elements = new Set(), key2element = new Map();
144
- // >>> Wrap as function since we use raf for some case
145
- const refreshElements = () => {
146
- elements = new Set();
147
- key2element = new Map();
148
- element2key = new Map();
149
- const keys = getKeys();
150
- keys.forEach(key => {
151
- const element = document.querySelector(`[data-nav-id='${getNavId(id, key)}']`);
152
- if (element) {
153
- elements.add(element);
154
- element2key.set(element, key);
155
- key2element.set(key, element);
156
- }
157
- });
158
- return elements;
159
- };
160
- refreshElements();
150
+ if ([...ArrowKeys, ...EdgeKeys, ...EnteringKeys, KeyCode.Escape, KeyCode.Tab].includes(event.code)) {
151
+ const keys = getKeys();
152
+ let refreshedElements = refreshElements(keys, id);
153
+ const { element2key, elements, key2element } = refreshedElements;
161
154
  // First we should find current focused MenuItem/SubMenu element
162
155
  const activeElement = key2element.get(activeKey);
163
156
  const focusMenuElement = getFocusElement(activeElement, elements);
164
- const focusMenuKey = focusMenuElement ? element2key.get(focusMenuElement) : undefined;
165
- const offsetObj = getOffset(mode, focusMenuKey !== undefined && getKeyPath(focusMenuKey, true).length === 1, isRtl, which);
157
+ const focusMenuKey = focusMenuElement ? element2key.get(focusMenuElement) : null;
158
+ const offsetObj = getOffset(mode, focusMenuKey != null ? getKeyPath(focusMenuKey, true).length === 1 : true, isRtl, event.shiftKey, event.code);
166
159
  // Some mode do not have fully arrow operation like inline
167
- if (!offsetObj) {
160
+ if (!offsetObj && event.code !== KeyCode.Home && event.code !== KeyCode.End) {
168
161
  return;
169
162
  }
170
163
  // Arrow prevent default to avoid page scroll
171
- if (ArrowKeys.includes(which)) {
164
+ if ([...ArrowKeys, ...EdgeKeys, KeyCode.Enter, KeyCode.Tab].includes(event.code)) {
172
165
  event.preventDefault();
173
166
  }
174
- const tryFocus = (menuElement) => {
175
- if (menuElement) {
176
- let focusTargetElement = menuElement;
167
+ const tryFocus = (navElement) => {
168
+ if (navElement) {
169
+ let focusTargetElement = navElement;
177
170
  // Focus to link instead of menu item if possible
178
- const link = menuElement.querySelector('a');
171
+ const link = navElement.querySelector('a');
179
172
  if (link?.getAttribute('href')) {
180
173
  focusTargetElement = link;
181
174
  }
182
- const targetKey = element2key.get(menuElement);
183
- if (targetKey !== undefined) {
175
+ const targetKey = element2key.get(navElement);
176
+ if (targetKey != null) {
184
177
  triggerActiveKey(targetKey);
185
178
  }
186
179
  /**
@@ -196,25 +189,28 @@ export function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKe
196
189
  });
197
190
  }
198
191
  };
199
- if (offsetObj.sibling || !focusMenuElement) {
192
+ // @ts-ignore .....
193
+ if (EdgeKeys.includes(event.code) || offsetObj?.sibling || !focusMenuElement) {
200
194
  // ========================== Sibling ==========================
201
195
  // Find walkable focus menu element container
202
- let parentQueryContainer;
203
- if (!focusMenuElement || mode === 'inline') {
204
- parentQueryContainer = containerRef.current;
205
- }
206
- else {
207
- parentQueryContainer = findContainerUL(focusMenuElement);
208
- }
196
+ const parentQueryContainer = (!focusMenuElement || mode === 'inline')
197
+ ? containerRef.current
198
+ : findContainerUL(focusMenuElement);
209
199
  if (parentQueryContainer == null) {
210
200
  return;
211
201
  }
212
202
  // Get next focus element
213
- const targetElement = getNextFocusElement(parentQueryContainer,
214
- // @ts-ignore bla bla ts
215
- elements,
216
- // @ts-ignore bla bla ts
217
- focusMenuElement, offsetObj.offset);
203
+ let targetElement;
204
+ const focusableElements = getFocusableElements(parentQueryContainer, elements);
205
+ if (event.code === KeyCode.Home) {
206
+ [targetElement] = focusableElements;
207
+ }
208
+ else if (event.code === KeyCode.End) {
209
+ targetElement = focusableElements[focusableElements.length - 1];
210
+ }
211
+ else {
212
+ targetElement = getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offsetObj?.offset);
213
+ }
218
214
  if (targetElement == null) {
219
215
  return;
220
216
  }
@@ -222,17 +218,17 @@ export function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKe
222
218
  tryFocus(targetElement);
223
219
  }
224
220
  // ======================= InlineTrigger =======================
225
- else if (offsetObj.inlineTrigger && focusMenuKey !== undefined) {
221
+ else if (offsetObj?.inlineTrigger && focusMenuKey) {
226
222
  // Inline trigger no need switch to sub menu item
227
223
  triggerAccessibilityOpen(focusMenuKey);
228
224
  }
229
225
  // =========================== Level ===========================
230
- else if (offsetObj.offset && focusMenuKey !== undefined) {
226
+ else if ((offsetObj?.offset ?? 0) > 0 && focusMenuKey) {
231
227
  triggerAccessibilityOpen(focusMenuKey, true);
232
228
  cleanRaf();
233
229
  rafRef.current = raf(() => {
234
230
  // Async should re-sync elements
235
- refreshElements();
231
+ refreshedElements = refreshElements(keys, id);
236
232
  const controlId = focusMenuElement.getAttribute('aria-controls');
237
233
  if (controlId == null) {
238
234
  return;
@@ -250,12 +246,12 @@ export function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKe
250
246
  tryFocus(targetElement);
251
247
  }, 5);
252
248
  }
253
- else if ((!offsetObj.offset || offsetObj.offset < 0) && focusMenuKey !== undefined) {
249
+ else if ((offsetObj?.offset ?? 0) < 0 && focusMenuKey) {
254
250
  const keyPath = getKeyPath(focusMenuKey, true);
255
251
  const parentKey = keyPath[keyPath.length - 2];
256
- const parentMenuElement = key2element.get(parentKey);
257
252
  // Focus menu item
258
253
  triggerAccessibilityOpen(parentKey, false);
254
+ const parentMenuElement = key2element.get(parentKey);
259
255
  if (parentMenuElement == null) {
260
256
  return;
261
257
  }
@@ -1,10 +1,8 @@
1
1
  import * as React from 'react';
2
- import { NavContext } from '../../../components/Nav/context/NavContext';
2
+ import { NavContext } from '../../../components/Nav/context';
3
3
  export function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) {
4
- const {
5
- // Active
6
- activeKey, onActive, onInactive, } = React.useContext(NavContext);
7
- if (eventKey === undefined) {
4
+ const { activeKey, onActive, onInactive } = React.useContext(NavContext);
5
+ if (eventKey == null) {
8
6
  return { active: false };
9
7
  }
10
8
  const ret = {
@@ -13,17 +11,11 @@ export function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) {
13
11
  // Skip when disabled
14
12
  if (!disabled) {
15
13
  ret.onMouseEnter = domEvent => {
16
- onMouseEnter?.({
17
- domEvent,
18
- key: eventKey,
19
- });
14
+ onMouseEnter?.({ domEvent, key: eventKey });
20
15
  onActive(eventKey);
21
16
  };
22
17
  ret.onMouseLeave = domEvent => {
23
- onMouseLeave?.({
24
- domEvent,
25
- key: eventKey,
26
- });
18
+ onMouseLeave?.({ domEvent, key: eventKey });
27
19
  onInactive(eventKey);
28
20
  };
29
21
  }