@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
@@ -9,6 +9,12 @@ export declare type InputSize = 'small' | 'large' | 'default';
9
9
  export declare type InputMode = 'password';
10
10
  export declare type ValidateStatus = "default" | "error" | "warning" | "success";
11
11
  export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'prefix' | 'size' | 'autoFocus' | 'placeholder' | 'onFocus' | 'onBlur'> {
12
+ 'aria-label'?: React.AriaAttributes['aria-label'];
13
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
14
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
15
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
16
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
17
+ 'aria-required'?: React.AriaAttributes['aria-required'];
12
18
  addonBefore?: React.ReactNode;
13
19
  addonAfter?: React.ReactNode;
14
20
  prefix?: React.ReactNode;
@@ -24,6 +30,7 @@ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
24
30
  hideSuffix?: boolean;
25
31
  placeholder?: React.ReactText;
26
32
  insetLabel?: React.ReactNode;
33
+ insetLabelId?: string;
27
34
  size?: InputSize;
28
35
  className?: string;
29
36
  style?: React.CSSProperties;
@@ -54,6 +61,12 @@ export interface InputState {
54
61
  }
55
62
  declare class Input extends BaseComponent<InputProps, InputState> {
56
63
  static propTypes: {
64
+ 'aria-label': PropTypes.Requireable<string>;
65
+ 'aria-labelledby': PropTypes.Requireable<string>;
66
+ 'aria-invalid': PropTypes.Requireable<boolean>;
67
+ 'aria-errormessage': PropTypes.Requireable<string>;
68
+ 'aria-describedby': PropTypes.Requireable<string>;
69
+ 'aria-required': PropTypes.Requireable<boolean>;
57
70
  addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
58
71
  addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
59
72
  prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -82,6 +95,7 @@ declare class Input extends BaseComponent<InputProps, InputState> {
82
95
  onKeyPress: PropTypes.Requireable<(...args: any[]) => any>;
83
96
  onEnterPress: PropTypes.Requireable<(...args: any[]) => any>;
84
97
  insetLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
98
+ insetLabelId: PropTypes.Requireable<string>;
85
99
  inputStyle: PropTypes.Requireable<object>;
86
100
  getValueLength: PropTypes.Requireable<(...args: any[]) => any>;
87
101
  };
@@ -147,6 +161,7 @@ declare class Input extends BaseComponent<InputProps, InputState> {
147
161
  static getDerivedStateFromProps(props: InputProps, state: InputState): Partial<InputState>;
148
162
  componentDidUpdate(prevProps: InputProps): void;
149
163
  handleClear: (e: React.MouseEvent<HTMLInputElement>) => void;
164
+ handleClearEnterPress: (e: React.KeyboardEvent<HTMLDivElement>) => void;
150
165
  handleClick: (e: React.MouseEvent<HTMLDivElement>) => void;
151
166
  handleMouseOver: (e: React.MouseEvent<HTMLDivElement>) => void;
152
167
  handleMouseLeave: (e: React.MouseEvent<HTMLDivElement>) => void;
@@ -154,6 +169,7 @@ declare class Input extends BaseComponent<InputProps, InputState> {
154
169
  handleClickEye: (e: React.MouseEvent<HTMLInputElement>) => void;
155
170
  handleMouseDown: (e: React.MouseEvent<HTMLInputElement>) => void;
156
171
  handleMouseUp: (e: React.MouseEvent<HTMLInputElement>) => void;
172
+ handleModeEnterPress: (e: React.KeyboardEvent<HTMLDivElement>) => void;
157
173
  handleClickPrefixOrSuffix: (e: React.MouseEvent<HTMLInputElement>) => void;
158
174
  handlePreventMouseDown: (e: React.MouseEvent<HTMLInputElement>) => void;
159
175
  renderPrepend(): JSX.Element;
@@ -68,6 +68,10 @@ class Input extends _baseComponent.default {
68
68
  this.foundation.handleClear(e);
69
69
  };
70
70
 
71
+ this.handleClearEnterPress = e => {
72
+ this.foundation.handleClearEnterPress(e);
73
+ };
74
+
71
75
  this.handleClick = e => {
72
76
  this.foundation.handleClick(e);
73
77
  };
@@ -100,6 +104,10 @@ class Input extends _baseComponent.default {
100
104
  this.foundation.handleMouseUp(e);
101
105
  };
102
106
 
107
+ this.handleModeEnterPress = e => {
108
+ this.foundation.handleModeEnterPress(e);
109
+ };
110
+
103
111
  this.handleClickPrefixOrSuffix = e => {
104
112
  this.foundation.handleClickPrefixOrSuffix(e);
105
113
  };
@@ -234,8 +242,12 @@ class Input extends _baseComponent.default {
234
242
 
235
243
  if (allowClear) {
236
244
  return /*#__PURE__*/_react.default.createElement("div", {
245
+ role: "button",
246
+ tabIndex: 0,
247
+ "aria-label": "Clear input value",
237
248
  className: clearCls,
238
- onMouseDown: this.handleClear
249
+ onMouseDown: this.handleClear,
250
+ onKeyPress: this.handleClearEnterPress
239
251
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClear, null));
240
252
  }
241
253
 
@@ -256,13 +268,18 @@ class Input extends _baseComponent.default {
256
268
  const modeCls = (0, _classnames.default)("".concat(prefixCls, "-modebtn"));
257
269
  const modeIcon = eyeClosed ? /*#__PURE__*/_react.default.createElement(_semiIcons.IconEyeClosedSolid, null) : /*#__PURE__*/_react.default.createElement(_semiIcons.IconEyeOpened, null);
258
270
  const showModeBtn = mode === 'password' && value && !disabled && (isFocus || isHovering);
271
+ const ariaLabel = eyeClosed ? 'Show password' : 'Hidden password';
259
272
 
260
273
  if (showModeBtn) {
261
274
  return /*#__PURE__*/_react.default.createElement("div", {
275
+ role: "button",
276
+ tabIndex: 0,
277
+ "aria-label": ariaLabel,
262
278
  className: modeCls,
263
279
  onClick: this.handleClickEye,
264
280
  onMouseDown: this.handleMouseDown,
265
- onMouseUp: this.handleMouseUp
281
+ onMouseUp: this.handleMouseUp,
282
+ onKeyPress: this.handleModeEnterPress
266
283
  }, modeIcon);
267
284
  }
268
285
 
@@ -272,7 +289,8 @@ class Input extends _baseComponent.default {
272
289
  renderPrefix() {
273
290
  const {
274
291
  prefix,
275
- insetLabel
292
+ insetLabel,
293
+ insetLabelId
276
294
  } = this.props;
277
295
  const labelNode = prefix || insetLabel;
278
296
 
@@ -285,11 +303,13 @@ class Input extends _baseComponent.default {
285
303
  ["".concat(prefixCls, "-inset-label")]: insetLabel,
286
304
  ["".concat(prefixCls, "-prefix-text")]: labelNode && (0, _isString2.default)(labelNode),
287
305
  ["".concat(prefixCls, "-prefix-icon")]: (0, _utils.isSemiIcon)(labelNode)
288
- });
306
+ }); // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
307
+
289
308
  return /*#__PURE__*/_react.default.createElement("div", {
290
309
  className: prefixWrapperCls,
291
310
  onMouseDown: this.handlePreventMouseDown,
292
- onClick: this.handleClickPrefixOrSuffix
311
+ onClick: this.handleClickPrefixOrSuffix,
312
+ id: insetLabelId
293
313
  }, labelNode);
294
314
  }
295
315
 
@@ -321,7 +341,8 @@ class Input extends _baseComponent.default {
321
341
  ["".concat(prefixCls, "-suffix-text")]: suffix && (0, _isString2.default)(suffix),
322
342
  ["".concat(prefixCls, "-suffix-icon")]: (0, _utils.isSemiIcon)(suffix),
323
343
  ["".concat(prefixCls, "-suffix-hidden")]: suffixAllowClear && Boolean(hideSuffix)
324
- });
344
+ }); // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
345
+
325
346
  return /*#__PURE__*/_react.default.createElement("div", {
326
347
  className: suffixWrapperCls,
327
348
  onMouseDown: this.handlePreventMouseDown,
@@ -424,21 +445,35 @@ class Input extends _baseComponent.default {
424
445
  inputProps.minLength = stateMinLength;
425
446
  }
426
447
 
427
- return /*#__PURE__*/_react.default.createElement("div", {
428
- className: wrapperCls,
429
- style: style,
430
- onMouseEnter: e => this.handleMouseOver(e),
431
- onMouseLeave: e => this.handleMouseLeave(e),
432
- onClick: e => this.handleClick(e)
433
- }, this.renderPrepend(), this.renderPrefix(), /*#__PURE__*/_react.default.createElement("input", (0, _assign.default)({}, inputProps, {
434
- ref: ref
435
- })), this.renderClearBtn(), this.renderSuffix(suffixAllowClear), this.renderModeBtn(), this.renderAppend());
448
+ if (validateStatus === 'error') {
449
+ inputProps['aria-invalid'] = "true";
450
+ }
451
+
452
+ return (
453
+ /*#__PURE__*/
454
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
455
+ _react.default.createElement("div", {
456
+ className: wrapperCls,
457
+ style: style,
458
+ onMouseEnter: e => this.handleMouseOver(e),
459
+ onMouseLeave: e => this.handleMouseLeave(e),
460
+ onClick: e => this.handleClick(e)
461
+ }, this.renderPrepend(), this.renderPrefix(), /*#__PURE__*/_react.default.createElement("input", (0, _assign.default)({}, inputProps, {
462
+ ref: ref
463
+ })), this.renderClearBtn(), this.renderSuffix(suffixAllowClear), this.renderModeBtn(), this.renderAppend())
464
+ );
436
465
  }
437
466
 
438
467
  }
439
468
 
440
469
  exports.Input = Input;
441
470
  Input.propTypes = {
471
+ 'aria-label': _propTypes.default.string,
472
+ 'aria-labelledby': _propTypes.default.string,
473
+ 'aria-invalid': _propTypes.default.bool,
474
+ 'aria-errormessage': _propTypes.default.string,
475
+ 'aria-describedby': _propTypes.default.string,
476
+ 'aria-required': _propTypes.default.bool,
442
477
  addonBefore: _propTypes.default.node,
443
478
  addonAfter: _propTypes.default.node,
444
479
  prefix: _propTypes.default.node,
@@ -467,6 +502,7 @@ Input.propTypes = {
467
502
  onKeyPress: _propTypes.default.func,
468
503
  onEnterPress: _propTypes.default.func,
469
504
  insetLabel: _propTypes.default.node,
505
+ insetLabelId: _propTypes.default.string,
470
506
  inputStyle: _propTypes.default.object,
471
507
  getValueLength: _propTypes.default.func
472
508
  };
@@ -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/cjs/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
  }
@@ -77,9 +77,16 @@ class inputGroup extends _baseComponent.default {
77
77
  [(0, _concat.default)(_context = "".concat(prefixCls, "-")).call(_context, size)]: size !== 'default'
78
78
  }); // const labelCls = cls(label.className, '');
79
79
 
80
+ const defaultName = 'input-group';
80
81
  return /*#__PURE__*/_react.default.createElement("div", {
82
+ role: "group",
83
+ "aria-label": "Input group",
84
+ "aria-disabled": this.props.disabled,
81
85
  className: groupWrapperCls
82
- }, label && label.text ? /*#__PURE__*/_react.default.createElement(_label.default, (0, _assign.default)({}, label)) : null, /*#__PURE__*/_react.default.createElement("span", {
86
+ }, label && label.text ? /*#__PURE__*/_react.default.createElement(_label.default, (0, _assign.default)({
87
+ name: defaultName
88
+ }, label)) : null, /*#__PURE__*/_react.default.createElement("span", {
89
+ id: label && label.name || defaultName,
83
90
  className: groupCls,
84
91
  style: this.props.style,
85
92
  onFocus: this.props.onFocus,
@@ -135,6 +142,9 @@ class inputGroup extends _baseComponent.default {
135
142
  }
136
143
 
137
144
  return /*#__PURE__*/_react.default.createElement("span", {
145
+ role: "group",
146
+ "aria-label": "Input group",
147
+ "aria-disabled": this.props.disabled,
138
148
  className: groupCls,
139
149
  style: style,
140
150
  onFocus: this.props.onFocus,
@@ -63,6 +63,10 @@ class TextArea extends _baseComponent.default {
63
63
  this.foundation.handleClear(e);
64
64
  };
65
65
 
66
+ this.handleClearEnterPress = e => {
67
+ this.foundation.handleClearEnterPress(e);
68
+ };
69
+
66
70
  this.setRef = node => {
67
71
  this.libRef.current = node;
68
72
  const {
@@ -188,8 +192,12 @@ class TextArea extends _baseComponent.default {
188
192
 
189
193
  if (showClear) {
190
194
  return /*#__PURE__*/_react.default.createElement("div", {
195
+ role: "button",
196
+ tabIndex: 0,
197
+ "aria-label": "Clear textarea value",
191
198
  className: clearCls,
192
- onClick: this.handleClear
199
+ onClick: this.handleClear,
200
+ onKeyPress: this.handleClearEnterPress
193
201
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClear, null));
194
202
  }
195
203
 
@@ -215,6 +223,9 @@ class TextArea extends _baseComponent.default {
215
223
  ["".concat(prefixCls, "-textarea-counter-exceed")]: current > total
216
224
  });
217
225
  counter = /*#__PURE__*/_react.default.createElement("div", {
226
+ "aria-label": "Textarea value length counter",
227
+ "aria-valuemax": maxCount,
228
+ "aria-valuenow": current,
218
229
  className: countCls
219
230
  }, current, total ? '/' : null, total);
220
231
  } 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>;
@@ -140,6 +140,8 @@ class InputNumber extends _baseComponent.default {
140
140
  return /*#__PURE__*/_react.default.createElement("div", {
141
141
  className: suffixChildrenCls
142
142
  }, /*#__PURE__*/_react.default.createElement("span", {
143
+ role: "button",
144
+ tabIndex: -1,
143
145
  className: upClassName,
144
146
  onMouseDown: notAllowedUp ? _noop2.default : this.handleUpClick,
145
147
  onMouseUp: this.handleMouseUp,
@@ -147,6 +149,8 @@ class InputNumber extends _baseComponent.default {
147
149
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronUp, {
148
150
  size: "extra-small"
149
151
  })), /*#__PURE__*/_react.default.createElement("span", {
152
+ role: "button",
153
+ tabIndex: -1,
150
154
  className: downClassName,
151
155
  onMouseDown: notAllowedDown ? _noop2.default : this.handleDownClick,
152
156
  onMouseUp: this.handleMouseUp,
@@ -442,12 +446,29 @@ class InputNumber extends _baseComponent.default {
442
446
  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"]);
443
447
 
444
448
  const {
445
- value
449
+ value,
450
+ number
446
451
  } = this.state;
447
452
  const inputNumberCls = (0, _classnames.default)(className, "".concat(prefixCls, "-number"), {
448
453
  [(0, _concat.default)(_context = "".concat(prefixCls, "-number-size-")).call(_context, size)]: size
449
454
  });
450
455
  const buttons = this.renderButtons();
456
+ const ariaProps = {
457
+ 'aria-disabled': disabled,
458
+ step
459
+ };
460
+
461
+ if (number) {
462
+ ariaProps['aria-valuenow'] = number;
463
+ }
464
+
465
+ if (max !== Infinity) {
466
+ ariaProps['aria-valuemax'] = max;
467
+ }
468
+
469
+ if (min !== -Infinity) {
470
+ ariaProps['aria-valuemin'] = min;
471
+ }
451
472
 
452
473
  const input = /*#__PURE__*/_react.default.createElement("div", {
453
474
  className: inputNumberCls,
@@ -455,7 +476,9 @@ class InputNumber extends _baseComponent.default {
455
476
  onMouseMove: e => this.handleInputMouseMove(e),
456
477
  onMouseEnter: e => this.handleInputMouseEnter(e),
457
478
  onMouseLeave: e => this.handleInputMouseLeave(e)
458
- }, /*#__PURE__*/_react.default.createElement(_input.default, (0, _assign.default)({}, rest, {
479
+ }, /*#__PURE__*/_react.default.createElement(_input.default, (0, _assign.default)({
480
+ role: "spinbutton"
481
+ }, ariaProps, rest, {
459
482
  size: size,
460
483
  disabled: disabled,
461
484
  ref: this.setInputRef,
@@ -474,6 +497,12 @@ class InputNumber extends _baseComponent.default {
474
497
 
475
498
  exports.InputNumber = InputNumber;
476
499
  InputNumber.propTypes = {
500
+ 'aria-label': _propTypes.default.string,
501
+ 'aria-labelledby': _propTypes.default.string,
502
+ 'aria-invalid': _propTypes.default.bool,
503
+ 'aria-errormessage': _propTypes.default.string,
504
+ 'aria-describedby': _propTypes.default.string,
505
+ 'aria-required': _propTypes.default.bool,
477
506
  autofocus: _propTypes.default.bool,
478
507
  className: _propTypes.default.string,
479
508
  defaultValue: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
@@ -483,6 +512,7 @@ InputNumber.propTypes = {
483
512
  hideButtons: _propTypes.default.bool,
484
513
  innerButtons: _propTypes.default.bool,
485
514
  insetLabel: _propTypes.default.node,
515
+ insetLabelId: _propTypes.default.string,
486
516
  keepFocus: _propTypes.default.bool,
487
517
  max: _propTypes.default.number,
488
518
  min: _propTypes.default.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;
@@ -137,6 +137,7 @@ class Sider extends _react.default.PureComponent {
137
137
  });
138
138
  return /*#__PURE__*/_react.default.createElement("aside", (0, _assign.default)({
139
139
  className: classString,
140
+ "aria-label": this.props['aria-label'],
140
141
  style: style
141
142
  }, (0, _getDataAttr.default)(others)), /*#__PURE__*/_react.default.createElement("div", {
142
143
  className: "".concat(prefixCls, "-sider-children")
@@ -150,7 +151,9 @@ Sider.propTypes = {
150
151
  style: _propTypes.default.object,
151
152
  className: _propTypes.default.string,
152
153
  breakpoint: _propTypes.default.arrayOf(_propTypes.default.oneOf(bpt)),
153
- onBreakpoint: _propTypes.default.func
154
+ onBreakpoint: _propTypes.default.func,
155
+ 'aria-label': _propTypes.default.string,
156
+ role: _propTypes.default.string
154
157
  };
155
158
  Sider.defaultProps = {
156
159
  prefixCls: _constants.cssClasses.PREFIX
@@ -58,6 +58,8 @@ function generator(type) {
58
58
  return BasicComponent => class Adapter extends _react.default.PureComponent {
59
59
  render() {
60
60
  return /*#__PURE__*/_react.default.createElement(BasicComponent, (0, _assign.default)({
61
+ role: this.props.role,
62
+ "aria-label": this.props['aria-label'],
61
63
  type: typeName,
62
64
  tagName: tagName
63
65
  }, this.props));
@@ -110,7 +110,6 @@ class ListItem extends _react.PureComponent {
110
110
  }
111
111
 
112
112
  let content = /*#__PURE__*/_react.default.createElement("li", {
113
- role: "list-item",
114
113
  className: itemCls,
115
114
  style: style,
116
115
  onClick: handleClick,
@@ -114,6 +114,7 @@ class Modal extends _baseComponent.default {
114
114
  return null;
115
115
  } else {
116
116
  return /*#__PURE__*/_react.default.createElement(_button.default, (0, _assign.default)({
117
+ "aria-label": "cancel",
117
118
  onClick: this.handleCancel,
118
119
  loading: cancelLoading,
119
120
  type: "tertiary"
@@ -124,6 +125,7 @@ class Modal extends _baseComponent.default {
124
125
  return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
125
126
  componentName: "Modal"
126
127
  }, (locale, localeCode) => /*#__PURE__*/_react.default.createElement("div", null, getCancelButton(locale), /*#__PURE__*/_react.default.createElement(_button.default, (0, _assign.default)({
128
+ "aria-label": "confirm",
127
129
  type: okType,
128
130
  theme: "solid",
129
131
  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/cjs/modal/modalContentFoundation';
4
+ import ModalContentFoundation, { ModalContentAdapter, ModalContentProps, ModalContentState } from '@douyinfe/semi-foundation/lib/cjs/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;
@@ -22,6 +22,10 @@ var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-j
22
22
 
23
23
  var _bind = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/bind"));
24
24
 
25
+ var _get2 = _interopRequireDefault(require("lodash/get"));
26
+
27
+ var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
28
+
25
29
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
26
30
 
27
31
  var _react = _interopRequireDefault(require("react"));
@@ -44,6 +48,8 @@ var _modalContentFoundation = _interopRequireDefault(require("@douyinfe/semi-fou
44
48
 
45
49
  var _semiIcons = require("@douyinfe/semi-icons");
46
50
 
51
+ var _utils = require("../_utils");
52
+
47
53
  var __rest = void 0 && (void 0).__rest || function (s, e) {
48
54
  var t = {};
49
55
 
@@ -118,6 +124,7 @@ class ModalContent extends _baseComponent.default {
118
124
  const iconType = closeIcon || /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null);
119
125
 
120
126
  closer = /*#__PURE__*/_react.default.createElement(_iconButton.default, {
127
+ "aria-label": "close",
121
128
  className: "".concat(_constants.cssClasses.DIALOG, "-close"),
122
129
  key: "close-btn",
123
130
  onClick: this.close,
@@ -154,7 +161,8 @@ class ModalContent extends _baseComponent.default {
154
161
  className: "".concat(_constants.cssClasses.DIALOG, "-header")
155
162
  }, icon, /*#__PURE__*/_react.default.createElement(_typography.default.Title, {
156
163
  heading: 5,
157
- className: "".concat(_constants.cssClasses.DIALOG, "-title")
164
+ className: "".concat(_constants.cssClasses.DIALOG, "-title"),
165
+ id: "".concat(_constants.cssClasses.DIALOG, "-title")
158
166
  }, title), closer);
159
167
  };
160
168
 
@@ -172,6 +180,7 @@ class ModalContent extends _baseComponent.default {
172
180
  const hasHeader = title !== null && title !== undefined || 'header' in this.props;
173
181
  return hasHeader ? /*#__PURE__*/_react.default.createElement("div", {
174
182
  className: bodyCls,
183
+ id: "".concat(_constants.cssClasses.DIALOG, "-body"),
175
184
  style: bodyStyle
176
185
  }, children) : /*#__PURE__*/_react.default.createElement("div", {
177
186
  className: "".concat(_constants.cssClasses.DIALOG, "-body-wrapper")
@@ -212,13 +221,21 @@ class ModalContent extends _baseComponent.default {
212
221
  className: "".concat(_constants.cssClasses.DIALOG, "-footer")
213
222
  }, props.footer) : null;
214
223
 
215
- const dialogElement = /*#__PURE__*/_react.default.createElement("div", {
224
+ const dialogElement =
225
+ /*#__PURE__*/
226
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
227
+ _react.default.createElement("div", {
216
228
  key: "dialog-element",
217
229
  className: digCls,
218
230
  onMouseDown: this.onDialogMouseDown,
219
231
  style: (0, _assign.default)((0, _assign.default)({}, props.style), style),
220
232
  id: this.dialogId
221
233
  }, /*#__PURE__*/_react.default.createElement("div", {
234
+ role: "dialog",
235
+ ref: this.modalDialogRef,
236
+ "aria-modal": "true",
237
+ "aria-labelledby": "".concat(_constants.cssClasses.DIALOG, "-title"),
238
+ "aria-describedby": "".concat(_constants.cssClasses.DIALOG, "-body"),
222
239
  onAnimationEnd: props.onAnimationEnd,
223
240
  className: (0, _classnames.default)(["".concat(_constants.cssClasses.DIALOG, "-content"), props.contentClassName, {
224
241
  ["".concat(_constants.cssClasses.DIALOG, "-content-fullScreen")]: props.isFullScreen
@@ -230,10 +247,12 @@ class ModalContent extends _baseComponent.default {
230
247
  };
231
248
 
232
249
  this.state = {
233
- dialogMouseDown: false
250
+ dialogMouseDown: false,
251
+ prevFocusElement: (0, _utils.getActiveElement)()
234
252
  };
235
253
  this.foundation = new _modalContentFoundation.default(this.adapter);
236
254
  this.dialogId = "dialog-".concat(uuid++);
255
+ this.modalDialogRef = /*#__PURE__*/_react.default.createRef();
237
256
  }
238
257
 
239
258
  get adapter() {
@@ -270,12 +289,35 @@ class ModalContent extends _baseComponent.default {
270
289
  document.removeEventListener('keydown', (0, _bind.default)(_context3 = this.foundation.handleKeyDown).call(_context3, this.foundation));
271
290
  }
272
291
  },
273
- getMouseState: () => this.state.dialogMouseDown
292
+ getMouseState: () => this.state.dialogMouseDown,
293
+ modalDialogFocus: () => {
294
+ let activeElementInDialog;
295
+
296
+ if (this.modalDialogRef) {
297
+ const activeElement = (0, _utils.getActiveElement)();
298
+ activeElementInDialog = this.modalDialogRef.current.contains(activeElement);
299
+ }
300
+
301
+ if (!activeElementInDialog) {
302
+ this.modalDialogRef && this.modalDialogRef.current.focus();
303
+ }
304
+ },
305
+ modalDialogBlur: () => {
306
+ this.modalDialogRef && this.modalDialogRef.current.blur();
307
+ },
308
+ prevFocusElementReFocus: () => {
309
+ const {
310
+ prevFocusElement
311
+ } = this.state;
312
+ const focus = (0, _get2.default)(prevFocusElement, 'focus');
313
+ (0, _isFunction2.default)(focus) && prevFocusElement.focus();
314
+ }
274
315
  });
275
316
  }
276
317
 
277
318
  componentDidMount() {
278
319
  this.foundation.handleKeyDownEventListenerMount();
320
+ this.foundation.modalDialogFocus();
279
321
  }
280
322
 
281
323
  componentWillUnmount() {
@@ -304,7 +346,7 @@ class ModalContent extends _baseComponent.default {
304
346
  const elem = /*#__PURE__*/_react.default.createElement("div", {
305
347
  className: classList
306
348
  }, this.getMaskElement(), /*#__PURE__*/_react.default.createElement("div", {
307
- role: "modal",
349
+ role: "none",
308
350
  tabIndex: -1,
309
351
  className: "".concat(_constants.cssClasses.DIALOG, "-wrap"),
310
352
  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/cjs/navigation/itemFoundation';
4
+ import ItemFoundation, { ItemProps, SelectedItemProps, ItemAdapter } from '@douyinfe/semi-foundation/lib/cjs/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
  }