@douyinfe/semi-ui 2.2.2 → 2.3.0-beta.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 (434) hide show
  1. package/_base/_story/a11y.jsx +6 -6
  2. package/_utils/hooks/usePrevFocus.ts +16 -0
  3. package/_utils/index.ts +4 -0
  4. package/anchor/_story/anchor.stories.js +1 -1
  5. package/anchor/index.tsx +5 -2
  6. package/anchor/link.tsx +29 -4
  7. package/autoComplete/index.tsx +28 -1
  8. package/avatar/_story/avatar.stories.js +4 -4
  9. package/avatar/avatarGroup.tsx +1 -1
  10. package/avatar/index.tsx +10 -4
  11. package/banner/index.tsx +2 -1
  12. package/breadcrumb/_story/breadcrumb.stories.js +22 -8
  13. package/breadcrumb/index.tsx +8 -1
  14. package/breadcrumb/item.tsx +1 -1
  15. package/button/Button.tsx +4 -0
  16. package/button/__test__/button.test.js +1 -1
  17. package/button/_story/button.stories.js +10 -10
  18. package/button/buttonGroup.tsx +4 -2
  19. package/button/splitButtonGroup.tsx +5 -2
  20. package/card/_story/card.stories.js +8 -1
  21. package/card/_story/card.stories.tsx +3 -0
  22. package/card/index.tsx +5 -2
  23. package/cascader/index.tsx +33 -5
  24. package/checkbox/_story/checkbox.stories.js +21 -14
  25. package/checkbox/checkbox.tsx +40 -5
  26. package/checkbox/checkboxGroup.tsx +30 -5
  27. package/checkbox/checkboxInner.tsx +25 -2
  28. package/collapse/index.tsx +2 -2
  29. package/collapse/item.tsx +15 -8
  30. package/collapsible/index.tsx +4 -2
  31. package/configProvider/_story/configProvider.stories.tsx +27 -0
  32. package/datePicker/datePicker.tsx +19 -0
  33. package/dist/css/semi.css +8 -3
  34. package/dist/css/semi.min.css +1 -1
  35. package/dist/umd/semi-ui.js +2470 -1242
  36. package/dist/umd/semi-ui.js.map +1 -1
  37. package/dist/umd/semi-ui.min.js +1 -1
  38. package/dist/umd/semi-ui.min.js.map +1 -1
  39. package/dropdown/dropdownItem.tsx +1 -1
  40. package/dropdown/dropdownMenu.tsx +1 -1
  41. package/empty/index.tsx +5 -5
  42. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  43. package/form/_story/Validate/validateDemo.jsx +1 -1
  44. package/form/_story/demo.jsx +12 -3
  45. package/form/_story/form.stories.js +0 -7
  46. package/form/baseForm.tsx +2 -0
  47. package/form/errorMessage.tsx +13 -2
  48. package/form/hoc/withField.tsx +37 -8
  49. package/form/index.tsx +0 -2
  50. package/form/interface.ts +2 -0
  51. package/form/label.tsx +4 -2
  52. package/input/index.tsx +49 -4
  53. package/input/inputGroup.tsx +9 -4
  54. package/input/textarea.tsx +25 -6
  55. package/inputNumber/index.tsx +28 -1
  56. package/layout/Sider.tsx +6 -2
  57. package/layout/index.tsx +4 -3
  58. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  59. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  60. package/lib/cjs/_utils/index.d.ts +1 -0
  61. package/lib/cjs/_utils/index.js +6 -1
  62. package/lib/cjs/anchor/index.d.ts +2 -0
  63. package/lib/cjs/anchor/index.js +6 -1
  64. package/lib/cjs/anchor/link.d.ts +4 -1
  65. package/lib/cjs/anchor/link.js +39 -5
  66. package/lib/cjs/autoComplete/index.d.ts +17 -0
  67. package/lib/cjs/autoComplete/index.js +21 -2
  68. package/lib/cjs/avatar/avatarGroup.js +2 -1
  69. package/lib/cjs/avatar/index.d.ts +4 -3
  70. package/lib/cjs/avatar/index.js +20 -11
  71. package/lib/cjs/banner/index.js +4 -2
  72. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  73. package/lib/cjs/breadcrumb/index.js +10 -4
  74. package/lib/cjs/breadcrumb/item.js +2 -2
  75. package/lib/cjs/button/Button.d.ts +2 -0
  76. package/lib/cjs/button/Button.js +4 -2
  77. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  78. package/lib/cjs/button/buttonGroup.js +8 -4
  79. package/lib/cjs/button/index.d.ts +1 -0
  80. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  81. package/lib/cjs/button/splitButtonGroup.js +5 -2
  82. package/lib/cjs/card/index.d.ts +3 -0
  83. package/lib/cjs/card/index.js +3 -1
  84. package/lib/cjs/cascader/index.d.ts +14 -0
  85. package/lib/cjs/cascader/index.js +35 -7
  86. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  87. package/lib/cjs/checkbox/checkbox.js +51 -17
  88. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  89. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  90. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  91. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  92. package/lib/cjs/collapse/index.js +2 -1
  93. package/lib/cjs/collapse/item.d.ts +2 -1
  94. package/lib/cjs/collapse/item.js +17 -3
  95. package/lib/cjs/collapsible/index.d.ts +1 -0
  96. package/lib/cjs/collapsible/index.js +4 -2
  97. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  98. package/lib/cjs/datePicker/datePicker.js +14 -1
  99. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  100. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  101. package/lib/cjs/empty/index.js +2 -1
  102. package/lib/cjs/form/baseForm.d.ts +9 -0
  103. package/lib/cjs/form/baseForm.js +3 -1
  104. package/lib/cjs/form/errorMessage.d.ts +4 -0
  105. package/lib/cjs/form/errorMessage.js +21 -3
  106. package/lib/cjs/form/field.d.ts +7 -0
  107. package/lib/cjs/form/hoc/withField.js +49 -16
  108. package/lib/cjs/form/index.d.ts +0 -1
  109. package/lib/cjs/form/interface.d.ts +2 -0
  110. package/lib/cjs/form/label.d.ts +2 -0
  111. package/lib/cjs/form/label.js +5 -2
  112. package/lib/cjs/input/index.d.ts +16 -0
  113. package/lib/cjs/input/index.js +51 -15
  114. package/lib/cjs/input/inputGroup.d.ts +2 -1
  115. package/lib/cjs/input/inputGroup.js +11 -1
  116. package/lib/cjs/input/textarea.js +12 -1
  117. package/lib/cjs/inputNumber/index.d.ts +8 -0
  118. package/lib/cjs/inputNumber/index.js +32 -2
  119. package/lib/cjs/layout/Sider.d.ts +4 -0
  120. package/lib/cjs/layout/Sider.js +4 -1
  121. package/lib/cjs/layout/index.js +2 -0
  122. package/lib/cjs/list/item.js +0 -1
  123. package/lib/cjs/modal/Modal.js +2 -0
  124. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  125. package/lib/cjs/modal/ModalContent.js +47 -5
  126. package/lib/cjs/navigation/Item.d.ts +4 -2
  127. package/lib/cjs/navigation/Item.js +25 -5
  128. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  129. package/lib/cjs/navigation/SubNav.js +8 -1
  130. package/lib/cjs/navigation/index.js +2 -0
  131. package/lib/cjs/notification/notice.d.ts +1 -1
  132. package/lib/cjs/notification/notice.js +32 -22
  133. package/lib/cjs/pagination/index.js +16 -6
  134. package/lib/cjs/popover/index.js +7 -3
  135. package/lib/cjs/progress/index.d.ts +8 -0
  136. package/lib/cjs/progress/index.js +42 -9
  137. package/lib/cjs/radio/radio.d.ts +6 -1
  138. package/lib/cjs/radio/radio.js +17 -5
  139. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  140. package/lib/cjs/radio/radioGroup.js +18 -3
  141. package/lib/cjs/radio/radioInner.d.ts +6 -1
  142. package/lib/cjs/radio/radioInner.js +11 -3
  143. package/lib/cjs/rating/index.d.ts +14 -0
  144. package/lib/cjs/rating/index.js +14 -3
  145. package/lib/cjs/rating/item.d.ts +2 -0
  146. package/lib/cjs/rating/item.js +6 -1
  147. package/lib/cjs/select/index.d.ts +16 -0
  148. package/lib/cjs/select/index.js +65 -19
  149. package/lib/cjs/select/option.js +28 -22
  150. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  151. package/lib/cjs/sideSheet/SideSheetContent.js +12 -5
  152. package/lib/cjs/sideSheet/index.d.ts +1 -0
  153. package/lib/cjs/sideSheet/index.js +2 -1
  154. package/lib/cjs/slider/index.d.ts +2 -1
  155. package/lib/cjs/slider/index.js +64 -17
  156. package/lib/cjs/spin/icon.js +2 -4
  157. package/lib/cjs/steps/basicStep.d.ts +3 -0
  158. package/lib/cjs/steps/basicStep.js +23 -25
  159. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  160. package/lib/cjs/steps/basicSteps.js +2 -1
  161. package/lib/cjs/steps/fillStep.d.ts +3 -0
  162. package/lib/cjs/steps/fillStep.js +19 -4
  163. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  164. package/lib/cjs/steps/fillSteps.js +2 -1
  165. package/lib/cjs/steps/navStep.d.ts +3 -0
  166. package/lib/cjs/steps/navStep.js +22 -25
  167. package/lib/cjs/steps/navSteps.d.ts +1 -0
  168. package/lib/cjs/steps/navSteps.js +2 -1
  169. package/lib/cjs/switch/index.d.ts +12 -0
  170. package/lib/cjs/switch/index.js +19 -4
  171. package/lib/cjs/table/Body/BaseRow.js +35 -3
  172. package/lib/cjs/table/Body/index.js +9 -1
  173. package/lib/cjs/table/ColumnFilter.js +4 -0
  174. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  175. package/lib/cjs/table/ColumnSelection.js +6 -2
  176. package/lib/cjs/table/ColumnSorter.js +19 -3
  177. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  178. package/lib/cjs/table/Table.d.ts +2 -0
  179. package/lib/cjs/table/Table.js +31 -15
  180. package/lib/cjs/table/TableCell.d.ts +2 -0
  181. package/lib/cjs/table/TableCell.js +6 -2
  182. package/lib/cjs/table/TableHeaderRow.js +8 -2
  183. package/lib/cjs/tabs/TabBar.js +11 -3
  184. package/lib/cjs/tabs/TabPane.js +3 -1
  185. package/lib/cjs/tabs/index.js +0 -1
  186. package/lib/cjs/tagInput/index.d.ts +4 -1
  187. package/lib/cjs/tagInput/index.js +29 -3
  188. package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
  189. package/lib/cjs/timePicker/TimePicker.js +9 -1
  190. package/lib/cjs/timePicker/index.d.ts +6 -0
  191. package/lib/cjs/timeline/index.d.ts +1 -1
  192. package/lib/cjs/timeline/index.js +1 -0
  193. package/lib/cjs/timeline/item.js +4 -2
  194. package/lib/cjs/toast/toast.js +2 -0
  195. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  196. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  197. package/lib/cjs/tooltip/index.d.ts +16 -12
  198. package/lib/cjs/tooltip/index.js +55 -39
  199. package/lib/cjs/transfer/index.js +32 -14
  200. package/lib/cjs/tree/index.d.ts +1 -0
  201. package/lib/cjs/tree/index.js +15 -6
  202. package/lib/cjs/tree/treeNode.d.ts +12 -4
  203. package/lib/cjs/tree/treeNode.js +44 -4
  204. package/lib/cjs/treeSelect/index.d.ts +16 -0
  205. package/lib/cjs/treeSelect/index.js +60 -12
  206. package/lib/cjs/typography/base.js +18 -7
  207. package/lib/cjs/typography/copyable.js +6 -1
  208. package/lib/cjs/upload/fileCard.js +23 -4
  209. package/lib/cjs/upload/index.js +19 -4
  210. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  211. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  212. package/lib/es/_utils/index.d.ts +1 -0
  213. package/lib/es/_utils/index.js +4 -1
  214. package/lib/es/anchor/index.d.ts +2 -0
  215. package/lib/es/anchor/index.js +6 -1
  216. package/lib/es/anchor/link.d.ts +4 -1
  217. package/lib/es/anchor/link.js +38 -5
  218. package/lib/es/autoComplete/index.d.ts +17 -0
  219. package/lib/es/autoComplete/index.js +21 -2
  220. package/lib/es/avatar/avatarGroup.js +2 -1
  221. package/lib/es/avatar/index.d.ts +4 -3
  222. package/lib/es/avatar/index.js +20 -11
  223. package/lib/es/banner/index.js +4 -2
  224. package/lib/es/breadcrumb/index.d.ts +3 -0
  225. package/lib/es/breadcrumb/index.js +10 -4
  226. package/lib/es/breadcrumb/item.js +2 -2
  227. package/lib/es/button/Button.d.ts +2 -0
  228. package/lib/es/button/Button.js +4 -2
  229. package/lib/es/button/buttonGroup.d.ts +3 -0
  230. package/lib/es/button/buttonGroup.js +8 -4
  231. package/lib/es/button/index.d.ts +1 -0
  232. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  233. package/lib/es/button/splitButtonGroup.js +5 -2
  234. package/lib/es/card/index.d.ts +3 -0
  235. package/lib/es/card/index.js +3 -1
  236. package/lib/es/cascader/index.d.ts +14 -0
  237. package/lib/es/cascader/index.js +35 -7
  238. package/lib/es/checkbox/checkbox.d.ts +21 -1
  239. package/lib/es/checkbox/checkbox.js +50 -17
  240. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  241. package/lib/es/checkbox/checkboxGroup.js +18 -5
  242. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  243. package/lib/es/checkbox/checkboxInner.js +20 -3
  244. package/lib/es/collapse/index.js +2 -1
  245. package/lib/es/collapse/item.d.ts +2 -1
  246. package/lib/es/collapse/item.js +16 -3
  247. package/lib/es/collapsible/index.d.ts +1 -0
  248. package/lib/es/collapsible/index.js +4 -2
  249. package/lib/es/datePicker/datePicker.d.ts +12 -0
  250. package/lib/es/datePicker/datePicker.js +14 -1
  251. package/lib/es/dropdown/dropdownItem.js +3 -1
  252. package/lib/es/dropdown/dropdownMenu.js +4 -1
  253. package/lib/es/empty/index.js +2 -1
  254. package/lib/es/form/baseForm.d.ts +9 -0
  255. package/lib/es/form/baseForm.js +3 -1
  256. package/lib/es/form/errorMessage.d.ts +4 -0
  257. package/lib/es/form/errorMessage.js +21 -3
  258. package/lib/es/form/field.d.ts +7 -0
  259. package/lib/es/form/hoc/withField.js +48 -15
  260. package/lib/es/form/index.d.ts +0 -1
  261. package/lib/es/form/index.js +0 -1
  262. package/lib/es/form/interface.d.ts +2 -0
  263. package/lib/es/form/label.d.ts +2 -0
  264. package/lib/es/form/label.js +5 -2
  265. package/lib/es/input/index.d.ts +16 -0
  266. package/lib/es/input/index.js +51 -15
  267. package/lib/es/input/inputGroup.d.ts +2 -1
  268. package/lib/es/input/inputGroup.js +11 -1
  269. package/lib/es/input/textarea.js +12 -1
  270. package/lib/es/inputNumber/index.d.ts +8 -0
  271. package/lib/es/inputNumber/index.js +33 -2
  272. package/lib/es/layout/Sider.d.ts +4 -0
  273. package/lib/es/layout/Sider.js +4 -1
  274. package/lib/es/layout/index.js +2 -0
  275. package/lib/es/list/item.js +0 -1
  276. package/lib/es/modal/Modal.js +2 -0
  277. package/lib/es/modal/ModalContent.d.ts +3 -1
  278. package/lib/es/modal/ModalContent.js +46 -5
  279. package/lib/es/navigation/Item.d.ts +4 -2
  280. package/lib/es/navigation/Item.js +25 -5
  281. package/lib/es/navigation/SubNav.d.ts +4 -2
  282. package/lib/es/navigation/SubNav.js +8 -1
  283. package/lib/es/navigation/index.js +2 -0
  284. package/lib/es/notification/notice.d.ts +1 -1
  285. package/lib/es/notification/notice.js +33 -24
  286. package/lib/es/pagination/index.js +16 -6
  287. package/lib/es/popover/index.js +7 -3
  288. package/lib/es/progress/index.d.ts +8 -0
  289. package/lib/es/progress/index.js +42 -9
  290. package/lib/es/radio/radio.d.ts +6 -1
  291. package/lib/es/radio/radio.js +16 -5
  292. package/lib/es/radio/radioGroup.d.ts +16 -1
  293. package/lib/es/radio/radioGroup.js +18 -3
  294. package/lib/es/radio/radioInner.d.ts +6 -1
  295. package/lib/es/radio/radioInner.js +11 -3
  296. package/lib/es/rating/index.d.ts +14 -0
  297. package/lib/es/rating/index.js +14 -3
  298. package/lib/es/rating/item.d.ts +2 -0
  299. package/lib/es/rating/item.js +6 -1
  300. package/lib/es/select/index.d.ts +16 -0
  301. package/lib/es/select/index.js +63 -17
  302. package/lib/es/select/option.js +28 -22
  303. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  304. package/lib/es/sideSheet/SideSheetContent.js +12 -5
  305. package/lib/es/sideSheet/index.d.ts +1 -0
  306. package/lib/es/sideSheet/index.js +2 -1
  307. package/lib/es/slider/index.d.ts +2 -1
  308. package/lib/es/slider/index.js +63 -16
  309. package/lib/es/spin/icon.js +2 -4
  310. package/lib/es/steps/basicStep.d.ts +3 -0
  311. package/lib/es/steps/basicStep.js +23 -23
  312. package/lib/es/steps/basicSteps.d.ts +1 -0
  313. package/lib/es/steps/basicSteps.js +2 -1
  314. package/lib/es/steps/fillStep.d.ts +3 -0
  315. package/lib/es/steps/fillStep.js +19 -4
  316. package/lib/es/steps/fillSteps.d.ts +1 -0
  317. package/lib/es/steps/fillSteps.js +2 -1
  318. package/lib/es/steps/navStep.d.ts +3 -0
  319. package/lib/es/steps/navStep.js +22 -23
  320. package/lib/es/steps/navSteps.d.ts +1 -0
  321. package/lib/es/steps/navSteps.js +2 -1
  322. package/lib/es/switch/index.d.ts +12 -0
  323. package/lib/es/switch/index.js +19 -4
  324. package/lib/es/table/Body/BaseRow.js +35 -3
  325. package/lib/es/table/Body/index.js +9 -2
  326. package/lib/es/table/ColumnFilter.js +4 -0
  327. package/lib/es/table/ColumnSelection.d.ts +3 -0
  328. package/lib/es/table/ColumnSelection.js +6 -2
  329. package/lib/es/table/ColumnSorter.js +17 -3
  330. package/lib/es/table/CustomExpandIcon.js +6 -1
  331. package/lib/es/table/Table.d.ts +2 -0
  332. package/lib/es/table/Table.js +31 -15
  333. package/lib/es/table/TableCell.d.ts +2 -0
  334. package/lib/es/table/TableCell.js +6 -2
  335. package/lib/es/table/TableHeaderRow.js +8 -2
  336. package/lib/es/tabs/TabBar.js +11 -3
  337. package/lib/es/tabs/TabPane.js +3 -1
  338. package/lib/es/tabs/index.js +0 -1
  339. package/lib/es/tagInput/index.d.ts +4 -1
  340. package/lib/es/tagInput/index.js +29 -3
  341. package/lib/es/timePicker/TimePicker.d.ts +12 -0
  342. package/lib/es/timePicker/TimePicker.js +9 -1
  343. package/lib/es/timePicker/index.d.ts +6 -0
  344. package/lib/es/timeline/index.d.ts +1 -1
  345. package/lib/es/timeline/index.js +1 -0
  346. package/lib/es/timeline/item.js +4 -2
  347. package/lib/es/toast/toast.js +2 -0
  348. package/lib/es/tooltip/TriangleArrow.js +1 -0
  349. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  350. package/lib/es/tooltip/index.d.ts +16 -12
  351. package/lib/es/tooltip/index.js +53 -39
  352. package/lib/es/transfer/index.js +32 -14
  353. package/lib/es/tree/index.d.ts +1 -0
  354. package/lib/es/tree/index.js +15 -6
  355. package/lib/es/tree/treeNode.d.ts +12 -4
  356. package/lib/es/tree/treeNode.js +44 -4
  357. package/lib/es/treeSelect/index.d.ts +16 -0
  358. package/lib/es/treeSelect/index.js +57 -10
  359. package/lib/es/typography/base.js +17 -7
  360. package/lib/es/typography/copyable.js +5 -1
  361. package/lib/es/upload/fileCard.js +23 -4
  362. package/lib/es/upload/index.js +19 -4
  363. package/list/item.tsx +0 -1
  364. package/modal/Modal.tsx +2 -0
  365. package/modal/ModalContent.tsx +35 -5
  366. package/navigation/Item.tsx +15 -0
  367. package/navigation/SubNav.tsx +13 -1
  368. package/navigation/index.tsx +1 -1
  369. package/notification/notice.tsx +19 -14
  370. package/package.json +8 -8
  371. package/pagination/index.tsx +9 -5
  372. package/popover/index.tsx +5 -0
  373. package/progress/_story/progress.stories.js +18 -18
  374. package/progress/index.tsx +58 -20
  375. package/radio/radio.tsx +12 -2
  376. package/radio/radioGroup.tsx +29 -3
  377. package/radio/radioInner.tsx +10 -1
  378. package/rating/index.tsx +19 -2
  379. package/rating/item.tsx +6 -0
  380. package/select/__test__/select.test.js +45 -0
  381. package/select/_story/select.stories.js +29 -0
  382. package/select/index.tsx +52 -4
  383. package/select/option.tsx +3 -0
  384. package/sideSheet/SideSheetContent.tsx +13 -9
  385. package/sideSheet/index.tsx +3 -2
  386. package/slider/__test__/slider.test.js +9 -0
  387. package/slider/_story/slider.stories.js +1 -1
  388. package/slider/index.tsx +44 -7
  389. package/spin/icon.tsx +3 -3
  390. package/steps/basicStep.tsx +15 -4
  391. package/steps/basicSteps.tsx +3 -2
  392. package/steps/fillStep.tsx +27 -12
  393. package/steps/fillSteps.tsx +2 -0
  394. package/steps/navStep.tsx +15 -4
  395. package/steps/navSteps.tsx +3 -2
  396. package/switch/_story/switch.stories.js +20 -19
  397. package/switch/_story/switch.stories.tsx +13 -13
  398. package/switch/index.tsx +23 -5
  399. package/table/Body/BaseRow.tsx +25 -1
  400. package/table/Body/index.tsx +7 -2
  401. package/table/ColumnFilter.tsx +7 -1
  402. package/table/ColumnSelection.tsx +4 -1
  403. package/table/ColumnSorter.tsx +18 -1
  404. package/table/CustomExpandIcon.tsx +5 -0
  405. package/table/Table.tsx +26 -13
  406. package/table/TableCell.tsx +11 -1
  407. package/table/TableHeaderRow.tsx +16 -2
  408. package/table/__test__/table.test.js +46 -0
  409. package/tabs/TabBar.tsx +8 -5
  410. package/tabs/TabPane.tsx +3 -1
  411. package/tabs/index.tsx +0 -1
  412. package/tagInput/__test__/tagInput.test.js +46 -0
  413. package/tagInput/_story/tagInput.stories.js +2 -2
  414. package/tagInput/index.tsx +31 -8
  415. package/timePicker/TimePicker.tsx +14 -1
  416. package/timeline/_story/timeline.stories.js +1 -1
  417. package/timeline/index.tsx +2 -2
  418. package/timeline/item.tsx +2 -1
  419. package/toast/toast.tsx +2 -0
  420. package/tooltip/TriangleArrow.tsx +1 -1
  421. package/tooltip/TriangleArrowVertical.tsx +1 -1
  422. package/tooltip/_story/tooltip.stories.js +562 -514
  423. package/tooltip/index.tsx +50 -33
  424. package/transfer/index.tsx +29 -25
  425. package/tree/_story/tree.stories.js +3 -3
  426. package/tree/index.tsx +10 -2
  427. package/tree/treeNode.tsx +46 -10
  428. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  429. package/treeSelect/_story/treeSelect.stories.js +12 -0
  430. package/treeSelect/index.tsx +58 -7
  431. package/typography/base.tsx +7 -1
  432. package/typography/copyable.tsx +10 -1
  433. package/upload/fileCard.tsx +13 -15
  434. package/upload/index.tsx +10 -6
@@ -41,6 +41,10 @@ class Input extends BaseComponent {
41
41
  this.foundation.handleClear(e);
42
42
  };
43
43
 
44
+ this.handleClearEnterPress = e => {
45
+ this.foundation.handleClearEnterPress(e);
46
+ };
47
+
44
48
  this.handleClick = e => {
45
49
  this.foundation.handleClick(e);
46
50
  };
@@ -73,6 +77,10 @@ class Input extends BaseComponent {
73
77
  this.foundation.handleMouseUp(e);
74
78
  };
75
79
 
80
+ this.handleModeEnterPress = e => {
81
+ this.foundation.handleModeEnterPress(e);
82
+ };
83
+
76
84
  this.handleClickPrefixOrSuffix = e => {
77
85
  this.foundation.handleClickPrefixOrSuffix(e);
78
86
  };
@@ -207,8 +215,12 @@ class Input extends BaseComponent {
207
215
 
208
216
  if (allowClear) {
209
217
  return /*#__PURE__*/React.createElement("div", {
218
+ role: "button",
219
+ tabIndex: 0,
220
+ "aria-label": "Clear input value",
210
221
  className: clearCls,
211
- onMouseDown: this.handleClear
222
+ onMouseDown: this.handleClear,
223
+ onKeyPress: this.handleClearEnterPress
212
224
  }, /*#__PURE__*/React.createElement(IconClear, null));
213
225
  }
214
226
 
@@ -229,13 +241,18 @@ class Input extends BaseComponent {
229
241
  const modeCls = cls("".concat(prefixCls, "-modebtn"));
230
242
  const modeIcon = eyeClosed ? /*#__PURE__*/React.createElement(IconEyeClosedSolid, null) : /*#__PURE__*/React.createElement(IconEyeOpened, null);
231
243
  const showModeBtn = mode === 'password' && value && !disabled && (isFocus || isHovering);
244
+ const ariaLabel = eyeClosed ? 'Show password' : 'Hidden password';
232
245
 
233
246
  if (showModeBtn) {
234
247
  return /*#__PURE__*/React.createElement("div", {
248
+ role: "button",
249
+ tabIndex: 0,
250
+ "aria-label": ariaLabel,
235
251
  className: modeCls,
236
252
  onClick: this.handleClickEye,
237
253
  onMouseDown: this.handleMouseDown,
238
- onMouseUp: this.handleMouseUp
254
+ onMouseUp: this.handleMouseUp,
255
+ onKeyPress: this.handleModeEnterPress
239
256
  }, modeIcon);
240
257
  }
241
258
 
@@ -245,7 +262,8 @@ class Input extends BaseComponent {
245
262
  renderPrefix() {
246
263
  const {
247
264
  prefix,
248
- insetLabel
265
+ insetLabel,
266
+ insetLabelId
249
267
  } = this.props;
250
268
  const labelNode = prefix || insetLabel;
251
269
 
@@ -258,11 +276,13 @@ class Input extends BaseComponent {
258
276
  ["".concat(prefixCls, "-inset-label")]: insetLabel,
259
277
  ["".concat(prefixCls, "-prefix-text")]: labelNode && _isString(labelNode),
260
278
  ["".concat(prefixCls, "-prefix-icon")]: isSemiIcon(labelNode)
261
- });
279
+ }); // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
280
+
262
281
  return /*#__PURE__*/React.createElement("div", {
263
282
  className: prefixWrapperCls,
264
283
  onMouseDown: this.handlePreventMouseDown,
265
- onClick: this.handleClickPrefixOrSuffix
284
+ onClick: this.handleClickPrefixOrSuffix,
285
+ id: insetLabelId
266
286
  }, labelNode);
267
287
  }
268
288
 
@@ -294,7 +314,8 @@ class Input extends BaseComponent {
294
314
  ["".concat(prefixCls, "-suffix-text")]: suffix && _isString(suffix),
295
315
  ["".concat(prefixCls, "-suffix-icon")]: isSemiIcon(suffix),
296
316
  ["".concat(prefixCls, "-suffix-hidden")]: suffixAllowClear && Boolean(hideSuffix)
297
- });
317
+ }); // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
318
+
298
319
  return /*#__PURE__*/React.createElement("div", {
299
320
  className: suffixWrapperCls,
300
321
  onMouseDown: this.handlePreventMouseDown,
@@ -398,20 +419,34 @@ class Input extends BaseComponent {
398
419
  inputProps.minLength = stateMinLength;
399
420
  }
400
421
 
401
- return /*#__PURE__*/React.createElement("div", {
402
- className: wrapperCls,
403
- style: style,
404
- onMouseEnter: e => this.handleMouseOver(e),
405
- onMouseLeave: e => this.handleMouseLeave(e),
406
- onClick: e => this.handleClick(e)
407
- }, this.renderPrepend(), this.renderPrefix(), /*#__PURE__*/React.createElement("input", _Object$assign({}, inputProps, {
408
- ref: ref
409
- })), this.renderClearBtn(), this.renderSuffix(suffixAllowClear), this.renderModeBtn(), this.renderAppend());
422
+ if (validateStatus === 'error') {
423
+ inputProps['aria-invalid'] = "true";
424
+ }
425
+
426
+ return (
427
+ /*#__PURE__*/
428
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
429
+ React.createElement("div", {
430
+ className: wrapperCls,
431
+ style: style,
432
+ onMouseEnter: e => this.handleMouseOver(e),
433
+ onMouseLeave: e => this.handleMouseLeave(e),
434
+ onClick: e => this.handleClick(e)
435
+ }, this.renderPrepend(), this.renderPrefix(), /*#__PURE__*/React.createElement("input", _Object$assign({}, inputProps, {
436
+ ref: ref
437
+ })), this.renderClearBtn(), this.renderSuffix(suffixAllowClear), this.renderModeBtn(), this.renderAppend())
438
+ );
410
439
  }
411
440
 
412
441
  }
413
442
 
414
443
  Input.propTypes = {
444
+ 'aria-label': PropTypes.string,
445
+ 'aria-labelledby': PropTypes.string,
446
+ 'aria-invalid': PropTypes.bool,
447
+ 'aria-errormessage': PropTypes.string,
448
+ 'aria-describedby': PropTypes.string,
449
+ 'aria-required': PropTypes.bool,
415
450
  addonBefore: PropTypes.node,
416
451
  addonAfter: PropTypes.node,
417
452
  prefix: PropTypes.node,
@@ -440,6 +475,7 @@ Input.propTypes = {
440
475
  onKeyPress: PropTypes.func,
441
476
  onEnterPress: PropTypes.func,
442
477
  insetLabel: PropTypes.node,
478
+ insetLabelId: PropTypes.string,
443
479
  inputStyle: PropTypes.object,
444
480
  getValueLength: PropTypes.func
445
481
  };
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BaseComponent from '../_base/baseComponent';
4
+ import { LabelProps } from '../form/label';
4
5
  import { noop } from '@douyinfe/semi-foundation/lib/es/utils/function';
5
6
  export declare type InputSize = 'small' | 'large' | 'default';
6
7
  export interface InputGroupProps {
@@ -10,7 +11,7 @@ export interface InputGroupProps {
10
11
  style?: Record<string, any>;
11
12
  onBlur?: (e: React.FocusEvent<HTMLSpanElement>) => void;
12
13
  onFocus?: (e: React.FocusEvent<HTMLSpanElement>) => void;
13
- label?: Record<string, any>;
14
+ label?: LabelProps;
14
15
  labelPosition?: string;
15
16
  disabled?: boolean;
16
17
  }
@@ -51,9 +51,16 @@ export default class inputGroup extends BaseComponent {
51
51
  [_concatInstanceProperty(_context = "".concat(prefixCls, "-")).call(_context, size)]: size !== 'default'
52
52
  }); // const labelCls = cls(label.className, '');
53
53
 
54
+ const defaultName = 'input-group';
54
55
  return /*#__PURE__*/React.createElement("div", {
56
+ role: "group",
57
+ "aria-label": "Input group",
58
+ "aria-disabled": this.props.disabled,
55
59
  className: groupWrapperCls
56
- }, label && label.text ? /*#__PURE__*/React.createElement(Label, _Object$assign({}, label)) : null, /*#__PURE__*/React.createElement("span", {
60
+ }, label && label.text ? /*#__PURE__*/React.createElement(Label, _Object$assign({
61
+ name: defaultName
62
+ }, label)) : null, /*#__PURE__*/React.createElement("span", {
63
+ id: label && label.name || defaultName,
57
64
  className: groupCls,
58
65
  style: this.props.style,
59
66
  onFocus: this.props.onFocus,
@@ -109,6 +116,9 @@ export default class inputGroup extends BaseComponent {
109
116
  }
110
117
 
111
118
  return /*#__PURE__*/React.createElement("span", {
119
+ role: "group",
120
+ "aria-label": "Input group",
121
+ "aria-disabled": this.props.disabled,
112
122
  className: groupCls,
113
123
  style: style,
114
124
  onFocus: this.props.onFocus,
@@ -37,6 +37,10 @@ class TextArea extends BaseComponent {
37
37
  this.foundation.handleClear(e);
38
38
  };
39
39
 
40
+ this.handleClearEnterPress = e => {
41
+ this.foundation.handleClearEnterPress(e);
42
+ };
43
+
40
44
  this.setRef = node => {
41
45
  this.libRef.current = node;
42
46
  const {
@@ -162,8 +166,12 @@ class TextArea extends BaseComponent {
162
166
 
163
167
  if (showClear) {
164
168
  return /*#__PURE__*/React.createElement("div", {
169
+ role: "button",
170
+ tabIndex: 0,
171
+ "aria-label": "Clear textarea value",
165
172
  className: clearCls,
166
- onClick: this.handleClear
173
+ onClick: this.handleClear,
174
+ onKeyPress: this.handleClearEnterPress
167
175
  }, /*#__PURE__*/React.createElement(IconClear, null));
168
176
  }
169
177
 
@@ -189,6 +197,9 @@ class TextArea extends BaseComponent {
189
197
  ["".concat(prefixCls, "-textarea-counter-exceed")]: current > total
190
198
  });
191
199
  counter = /*#__PURE__*/React.createElement("div", {
200
+ "aria-label": "Textarea value length counter",
201
+ "aria-valuemax": maxCount,
202
+ "aria-valuenow": current,
192
203
  className: countCls
193
204
  }, current, total ? '/' : null, total);
194
205
  } else {
@@ -16,6 +16,7 @@ export interface InputNumberProps extends InputProps {
16
16
  hideButtons?: boolean;
17
17
  innerButtons?: boolean;
18
18
  insetLabel?: React.ReactNode;
19
+ insetLabelId?: string;
19
20
  keepFocus?: boolean;
20
21
  max?: number;
21
22
  min?: number;
@@ -47,6 +48,12 @@ export interface InputNumberState {
47
48
  }
48
49
  declare class InputNumber extends BaseComponent<InputNumberProps, InputNumberState> {
49
50
  static propTypes: {
51
+ 'aria-label': PropTypes.Requireable<string>;
52
+ 'aria-labelledby': PropTypes.Requireable<string>;
53
+ 'aria-invalid': PropTypes.Requireable<boolean>;
54
+ 'aria-errormessage': PropTypes.Requireable<string>;
55
+ 'aria-describedby': PropTypes.Requireable<string>;
56
+ 'aria-required': PropTypes.Requireable<boolean>;
50
57
  autofocus: PropTypes.Requireable<boolean>;
51
58
  className: PropTypes.Requireable<string>;
52
59
  defaultValue: PropTypes.Requireable<string | number>;
@@ -56,6 +63,7 @@ declare class InputNumber extends BaseComponent<InputNumberProps, InputNumberSta
56
63
  hideButtons: PropTypes.Requireable<boolean>;
57
64
  innerButtons: PropTypes.Requireable<boolean>;
58
65
  insetLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
66
+ insetLabelId: PropTypes.Requireable<string>;
59
67
  keepFocus: PropTypes.Requireable<boolean>;
60
68
  max: PropTypes.Requireable<number>;
61
69
  min: PropTypes.Requireable<number>;
@@ -110,6 +110,8 @@ class InputNumber extends BaseComponent {
110
110
  return /*#__PURE__*/React.createElement("div", {
111
111
  className: suffixChildrenCls
112
112
  }, /*#__PURE__*/React.createElement("span", {
113
+ role: "button",
114
+ tabIndex: -1,
113
115
  className: upClassName,
114
116
  onMouseDown: notAllowedUp ? _noop : this.handleUpClick,
115
117
  onMouseUp: this.handleMouseUp,
@@ -117,6 +119,8 @@ class InputNumber extends BaseComponent {
117
119
  }, /*#__PURE__*/React.createElement(IconChevronUp, {
118
120
  size: "extra-small"
119
121
  })), /*#__PURE__*/React.createElement("span", {
122
+ role: "button",
123
+ tabIndex: -1,
120
124
  className: downClassName,
121
125
  onMouseDown: notAllowedDown ? _noop : this.handleDownClick,
122
126
  onMouseUp: this.handleMouseUp,
@@ -413,19 +417,39 @@ class InputNumber extends BaseComponent {
413
417
  rest = __rest(_a, ["disabled", "className", "prefixCls", "min", "max", "step", "shiftStep", "precision", "formatter", "parser", "forwardedRef", "onUpClick", "onDownClick", "pressInterval", "pressTimeout", "suffix", "size", "hideButtons", "innerButtons", "style", "onNumberChange", "keepFocus"]);
414
418
 
415
419
  const {
416
- value
420
+ value,
421
+ number
417
422
  } = this.state;
418
423
  const inputNumberCls = classnames(className, "".concat(prefixCls, "-number"), {
419
424
  [_concatInstanceProperty(_context = "".concat(prefixCls, "-number-size-")).call(_context, size)]: size
420
425
  });
421
426
  const buttons = this.renderButtons();
427
+ const ariaProps = {
428
+ 'aria-disabled': disabled,
429
+ step
430
+ };
431
+
432
+ if (number) {
433
+ ariaProps['aria-valuenow'] = number;
434
+ }
435
+
436
+ if (max !== Infinity) {
437
+ ariaProps['aria-valuemax'] = max;
438
+ }
439
+
440
+ if (min !== -Infinity) {
441
+ ariaProps['aria-valuemin'] = min;
442
+ }
443
+
422
444
  const input = /*#__PURE__*/React.createElement("div", {
423
445
  className: inputNumberCls,
424
446
  style: style,
425
447
  onMouseMove: e => this.handleInputMouseMove(e),
426
448
  onMouseEnter: e => this.handleInputMouseEnter(e),
427
449
  onMouseLeave: e => this.handleInputMouseLeave(e)
428
- }, /*#__PURE__*/React.createElement(Input, _Object$assign({}, rest, {
450
+ }, /*#__PURE__*/React.createElement(Input, _Object$assign({
451
+ role: "spinbutton"
452
+ }, ariaProps, rest, {
429
453
  size: size,
430
454
  disabled: disabled,
431
455
  ref: this.setInputRef,
@@ -442,6 +466,12 @@ class InputNumber extends BaseComponent {
442
466
  }
443
467
 
444
468
  InputNumber.propTypes = {
469
+ 'aria-label': PropTypes.string,
470
+ 'aria-labelledby': PropTypes.string,
471
+ 'aria-invalid': PropTypes.bool,
472
+ 'aria-errormessage': PropTypes.string,
473
+ 'aria-describedby': PropTypes.string,
474
+ 'aria-required': PropTypes.bool,
445
475
  autofocus: PropTypes.bool,
446
476
  className: PropTypes.string,
447
477
  defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -451,6 +481,7 @@ InputNumber.propTypes = {
451
481
  hideButtons: PropTypes.bool,
452
482
  innerButtons: PropTypes.bool,
453
483
  insetLabel: PropTypes.node,
484
+ insetLabelId: PropTypes.string,
454
485
  keepFocus: PropTypes.bool,
455
486
  max: PropTypes.number,
456
487
  min: PropTypes.number,
@@ -14,6 +14,8 @@ export interface SiderProps {
14
14
  className?: string;
15
15
  breakpoint?: Array<keyof ResponsiveMap>;
16
16
  onBreakpoint?: (screen: keyof ResponsiveMap, match: boolean) => void;
17
+ 'aria-label'?: React.AriaAttributes['aria-label'];
18
+ 'role'?: React.AriaRole;
17
19
  }
18
20
  declare class Sider extends React.PureComponent<SiderProps> {
19
21
  static propTypes: {
@@ -22,6 +24,8 @@ declare class Sider extends React.PureComponent<SiderProps> {
22
24
  className: PropTypes.Requireable<string>;
23
25
  breakpoint: PropTypes.Requireable<string[]>;
24
26
  onBreakpoint: PropTypes.Requireable<(...args: any[]) => any>;
27
+ 'aria-label': PropTypes.Requireable<string>;
28
+ role: PropTypes.Requireable<string>;
25
29
  };
26
30
  static defaultProps: {
27
31
  prefixCls: string;
@@ -114,6 +114,7 @@ class Sider extends React.PureComponent {
114
114
  });
115
115
  return /*#__PURE__*/React.createElement("aside", _Object$assign({
116
116
  className: classString,
117
+ "aria-label": this.props['aria-label'],
117
118
  style: style
118
119
  }, getDataAttr(others)), /*#__PURE__*/React.createElement("div", {
119
120
  className: "".concat(prefixCls, "-sider-children")
@@ -127,7 +128,9 @@ Sider.propTypes = {
127
128
  style: PropTypes.object,
128
129
  className: PropTypes.string,
129
130
  breakpoint: PropTypes.arrayOf(PropTypes.oneOf(bpt)),
130
- onBreakpoint: PropTypes.func
131
+ onBreakpoint: PropTypes.func,
132
+ 'aria-label': PropTypes.string,
133
+ role: PropTypes.string
131
134
  };
132
135
  Sider.defaultProps = {
133
136
  prefixCls: cssClasses.PREFIX
@@ -35,6 +35,8 @@ function generator(type) {
35
35
  return BasicComponent => class Adapter extends React.PureComponent {
36
36
  render() {
37
37
  return /*#__PURE__*/React.createElement(BasicComponent, _Object$assign({
38
+ role: this.props.role,
39
+ "aria-label": this.props['aria-label'],
38
40
  type: typeName,
39
41
  tagName: tagName
40
42
  }, this.props));
@@ -79,7 +79,6 @@ export default class ListItem extends PureComponent {
79
79
  }
80
80
 
81
81
  let content = /*#__PURE__*/React.createElement("li", {
82
- role: "list-item",
83
82
  className: itemCls,
84
83
  style: style,
85
84
  onClick: handleClick,
@@ -75,6 +75,7 @@ class Modal extends BaseComponent {
75
75
  return null;
76
76
  } else {
77
77
  return /*#__PURE__*/React.createElement(Button, _Object$assign({
78
+ "aria-label": "cancel",
78
79
  onClick: this.handleCancel,
79
80
  loading: cancelLoading,
80
81
  type: "tertiary"
@@ -85,6 +86,7 @@ class Modal extends BaseComponent {
85
86
  return /*#__PURE__*/React.createElement(LocaleConsumer, {
86
87
  componentName: "Modal"
87
88
  }, (locale, localeCode) => /*#__PURE__*/React.createElement("div", null, getCancelButton(locale), /*#__PURE__*/React.createElement(Button, _Object$assign({
89
+ "aria-label": "confirm",
88
90
  type: okType,
89
91
  theme: "solid",
90
92
  loading: confirmLoading,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BaseComponent from '../_base/baseComponent';
4
- import { ModalContentAdapter, ModalContentProps, ModalContentState } from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
4
+ import ModalContentFoundation, { ModalContentAdapter, ModalContentProps, ModalContentState } from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
5
5
  export default class ModalContent extends BaseComponent<ModalContentProps, ModalContentState> {
6
6
  static contextType: React.Context<import("../configProvider/context").ContextValue>;
7
7
  static propTypes: {
@@ -19,6 +19,8 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
19
19
  };
20
20
  dialogId: string;
21
21
  private timeoutId;
22
+ modalDialogRef: React.MutableRefObject<HTMLDivElement>;
23
+ foundation: ModalContentFoundation;
22
24
  constructor(props: ModalContentProps);
23
25
  get adapter(): ModalContentAdapter;
24
26
  componentDidMount(): void;
@@ -1,3 +1,5 @@
1
+ import _get from "lodash/get";
2
+ import _isFunction from "lodash/isFunction";
1
3
  import _noop from "lodash/noop";
2
4
  import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of";
3
5
  import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
@@ -30,6 +32,7 @@ import BaseComponent from '../_base/baseComponent'; // eslint-disable-next-line
30
32
 
31
33
  import ModalContentFoundation from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
32
34
  import { IconClose } from '@douyinfe/semi-icons';
35
+ import { getActiveElement } from '../_utils';
33
36
  let uuid = 0;
34
37
  export default class ModalContent extends BaseComponent {
35
38
  constructor(props) {
@@ -89,6 +92,7 @@ export default class ModalContent extends BaseComponent {
89
92
  if (closable) {
90
93
  const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, null);
91
94
  closer = /*#__PURE__*/React.createElement(Button, {
95
+ "aria-label": "close",
92
96
  className: "".concat(cssClasses.DIALOG, "-close"),
93
97
  key: "close-btn",
94
98
  onClick: this.close,
@@ -125,7 +129,8 @@ export default class ModalContent extends BaseComponent {
125
129
  className: "".concat(cssClasses.DIALOG, "-header")
126
130
  }, icon, /*#__PURE__*/React.createElement(Typography.Title, {
127
131
  heading: 5,
128
- className: "".concat(cssClasses.DIALOG, "-title")
132
+ className: "".concat(cssClasses.DIALOG, "-title"),
133
+ id: "".concat(cssClasses.DIALOG, "-title")
129
134
  }, title), closer);
130
135
  };
131
136
 
@@ -143,6 +148,7 @@ export default class ModalContent extends BaseComponent {
143
148
  const hasHeader = title !== null && title !== undefined || 'header' in this.props;
144
149
  return hasHeader ? /*#__PURE__*/React.createElement("div", {
145
150
  className: bodyCls,
151
+ id: "".concat(cssClasses.DIALOG, "-body"),
146
152
  style: bodyStyle
147
153
  }, children) : /*#__PURE__*/React.createElement("div", {
148
154
  className: "".concat(cssClasses.DIALOG, "-body-wrapper")
@@ -182,13 +188,21 @@ export default class ModalContent extends BaseComponent {
182
188
  const footer = props.footer ? /*#__PURE__*/React.createElement("div", {
183
189
  className: "".concat(cssClasses.DIALOG, "-footer")
184
190
  }, props.footer) : null;
185
- const dialogElement = /*#__PURE__*/React.createElement("div", {
191
+ const dialogElement =
192
+ /*#__PURE__*/
193
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
194
+ React.createElement("div", {
186
195
  key: "dialog-element",
187
196
  className: digCls,
188
197
  onMouseDown: this.onDialogMouseDown,
189
198
  style: _Object$assign(_Object$assign({}, props.style), style),
190
199
  id: this.dialogId
191
200
  }, /*#__PURE__*/React.createElement("div", {
201
+ role: "dialog",
202
+ ref: this.modalDialogRef,
203
+ "aria-modal": "true",
204
+ "aria-labelledby": "".concat(cssClasses.DIALOG, "-title"),
205
+ "aria-describedby": "".concat(cssClasses.DIALOG, "-body"),
192
206
  onAnimationEnd: props.onAnimationEnd,
193
207
  className: cls(["".concat(cssClasses.DIALOG, "-content"), props.contentClassName, {
194
208
  ["".concat(cssClasses.DIALOG, "-content-fullScreen")]: props.isFullScreen
@@ -199,10 +213,12 @@ export default class ModalContent extends BaseComponent {
199
213
  };
200
214
 
201
215
  this.state = {
202
- dialogMouseDown: false
216
+ dialogMouseDown: false,
217
+ prevFocusElement: getActiveElement()
203
218
  };
204
219
  this.foundation = new ModalContentFoundation(this.adapter);
205
220
  this.dialogId = "dialog-".concat(uuid++);
221
+ this.modalDialogRef = /*#__PURE__*/React.createRef();
206
222
  }
207
223
 
208
224
  get adapter() {
@@ -239,12 +255,37 @@ export default class ModalContent extends BaseComponent {
239
255
  document.removeEventListener('keydown', _bindInstanceProperty(_context3 = this.foundation.handleKeyDown).call(_context3, this.foundation));
240
256
  }
241
257
  },
242
- getMouseState: () => this.state.dialogMouseDown
258
+ getMouseState: () => this.state.dialogMouseDown,
259
+ modalDialogFocus: () => {
260
+ let activeElementInDialog;
261
+
262
+ if (this.modalDialogRef) {
263
+ const activeElement = getActiveElement();
264
+ activeElementInDialog = this.modalDialogRef.current.contains(activeElement);
265
+ }
266
+
267
+ if (!activeElementInDialog) {
268
+ this.modalDialogRef && this.modalDialogRef.current.focus();
269
+ }
270
+ },
271
+ modalDialogBlur: () => {
272
+ this.modalDialogRef && this.modalDialogRef.current.blur();
273
+ },
274
+ prevFocusElementReFocus: () => {
275
+ const {
276
+ prevFocusElement
277
+ } = this.state;
278
+
279
+ const focus = _get(prevFocusElement, 'focus');
280
+
281
+ _isFunction(focus) && prevFocusElement.focus();
282
+ }
243
283
  });
244
284
  }
245
285
 
246
286
  componentDidMount() {
247
287
  this.foundation.handleKeyDownEventListenerMount();
288
+ this.foundation.modalDialogFocus();
248
289
  }
249
290
 
250
291
  componentWillUnmount() {
@@ -272,7 +313,7 @@ export default class ModalContent extends BaseComponent {
272
313
  const elem = /*#__PURE__*/React.createElement("div", {
273
314
  className: classList
274
315
  }, this.getMaskElement(), /*#__PURE__*/React.createElement("div", {
275
- role: "modal",
316
+ role: "none",
276
317
  tabIndex: -1,
277
318
  className: "".concat(cssClasses.DIALOG, "-wrap"),
278
319
  onClick: maskClosable ? this.onMaskClick : null,
@@ -1,7 +1,7 @@
1
1
  import BaseComponent, { BaseProps } from '../_base/baseComponent';
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import { ItemProps, SelectedItemProps, ItemAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/itemFoundation';
4
+ import ItemFoundation, { ItemProps, SelectedItemProps, ItemAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/itemFoundation';
5
5
  export interface NavItemProps extends ItemProps, BaseProps {
6
6
  children?: React.ReactNode;
7
7
  disabled?: boolean;
@@ -59,12 +59,14 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
59
59
  onMouseLeave: (...args: any[]) => void;
60
60
  disabled: boolean;
61
61
  };
62
+ foundation: ItemFoundation;
62
63
  constructor(props: NavItemProps);
63
64
  _invokeContextFunc(funcName: string, ...args: any[]): any;
64
65
  get adapter(): ItemAdapter<NavItemProps, NavItemState>;
65
66
  renderIcon(icon: React.ReactNode, pos: string, isToggleIcon?: boolean): JSX.Element;
66
67
  setItemRef: (ref: HTMLLIElement) => void;
67
68
  wrapTooltip: (node: React.ReactNode) => JSX.Element;
68
- handleClick: (e: React.MouseEvent) => any;
69
+ handleClick: (e: React.MouseEvent) => void;
70
+ handleKeyPress: (e: React.KeyboardEvent) => void;
69
71
  render(): {} | React.ReactElement<any, string | React.JSXElementConstructor<any>>;
70
72
  }
@@ -45,6 +45,8 @@ export default class NavItem extends BaseComponent {
45
45
 
46
46
  this.handleClick = e => this.foundation.handleClick(e);
47
47
 
48
+ this.handleKeyPress = e => this.foundation.handleKeyPress(e);
49
+
48
50
  this.state = {
49
51
  tooltipShow: false
50
52
  };
@@ -103,12 +105,17 @@ export default class NavItem extends BaseComponent {
103
105
  var _context;
104
106
 
105
107
  return Boolean(this.context && this.context.selectedKeys && _includesInstanceProperty(_context = this.context.selectedKeys).call(_context, this.props.itemKey));
108
+ },
109
+ getIsOpen: () => {
110
+ var _context2;
111
+
112
+ return Boolean(this.context && this.context.openKeys && _includesInstanceProperty(_context2 = this.context.openKeys).call(_context2, this.props.itemKey));
106
113
  }
107
114
  });
108
115
  }
109
116
 
110
117
  renderIcon(icon, pos) {
111
- var _context2;
118
+ var _context3;
112
119
 
113
120
  let isToggleIcon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
114
121
 
@@ -127,7 +134,7 @@ export default class NavItem extends BaseComponent {
127
134
  }
128
135
 
129
136
  const className = cls("".concat(clsPrefix, "-icon"), {
130
- [_concatInstanceProperty(_context2 = "".concat(clsPrefix, "-icon-toggle-")).call(_context2, this.context.toggleIconPosition)]: isToggleIcon,
137
+ [_concatInstanceProperty(_context3 = "".concat(clsPrefix, "-icon-toggle-")).call(_context3, this.context.toggleIconPosition)]: isToggleIcon,
131
138
  ["".concat(clsPrefix, "-icon-info")]: !isToggleIcon
132
139
  });
133
140
  return /*#__PURE__*/React.createElement("i", {
@@ -215,14 +222,27 @@ export default class NavItem extends BaseComponent {
215
222
  ["".concat(clsPrefix, "-collapsed")]: isCollapsed,
216
223
  ["".concat(clsPrefix, "-disabled")]: disabled
217
224
  });
218
- itemDom = /*#__PURE__*/React.createElement("li", {
225
+ const ariaProps = {
226
+ 'aria-disabled': disabled
227
+ };
228
+
229
+ if (isSubNav) {
230
+ const isOpen = this.adapter.getIsOpen();
231
+ ariaProps['aria-expanded'] = isOpen;
232
+ }
233
+
234
+ itemDom = /*#__PURE__*/React.createElement("li", _Object$assign({
235
+ role: "menuitem",
236
+ tabIndex: -1
237
+ }, ariaProps, {
219
238
  style: style,
220
239
  ref: this.setItemRef,
221
240
  className: popoverItemCls,
222
241
  onClick: this.handleClick,
223
242
  onMouseEnter: onMouseEnter,
224
- onMouseLeave: onMouseLeave
225
- }, itemChildren);
243
+ onMouseLeave: onMouseLeave,
244
+ onKeyPress: this.handleKeyPress
245
+ }), itemChildren);
226
246
  } // Display Tooltip when disabled and SubNav
227
247
 
228
248
 
@@ -2,7 +2,7 @@ import BaseComponent, { BaseProps } from '../_base/baseComponent';
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';
5
- import { SubNavAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';
5
+ import SubNavFoundation, { SubNavAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';
6
6
  export interface ToggleIcon {
7
7
  open?: string;
8
8
  closed?: string;
@@ -88,13 +88,15 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
88
88
  };
89
89
  titleRef: React.RefObject<HTMLDivElement>;
90
90
  itemRef: React.RefObject<HTMLLIElement>;
91
+ foundation: SubNavFoundation;
91
92
  constructor(props: SubNavProps);
92
93
  setItemRef: (ref: HTMLLIElement | React.RefObject<HTMLLIElement>) => void;
93
94
  setTitleRef: (ref: HTMLDivElement | React.RefObject<HTMLDivElement>) => void;
94
95
  _invokeContextFunc(funcName: string, ...args: any[]): any;
95
96
  get adapter(): SubNavAdapter<SubNavProps, SubNavState>;
96
97
  handleClick: (e: React.MouseEvent) => void;
97
- handleDropdownVisible: (visible: boolean) => any;
98
+ handleKeyPress: (e: React.KeyboardEvent) => void;
99
+ handleDropdownVisible: (visible: boolean) => void;
98
100
  renderIcon(icon: React.ReactNode, pos: string, withTransition?: boolean, isToggleIcon?: boolean, key?: number | string): JSX.Element;
99
101
  renderTitleDiv(): JSX.Element;
100
102
  renderSubUl(): JSX.Element;