@douyinfe/semi-ui 2.2.2 → 2.4.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 (441) hide show
  1. package/_base/_story/a11y.jsx +6 -6
  2. package/_base/_story/a11y.scss +0 -1
  3. package/_base/_story/index.scss +2 -5
  4. package/_utils/hooks/usePrevFocus.ts +16 -0
  5. package/_utils/index.ts +4 -0
  6. package/anchor/_story/anchor.stories.js +1 -1
  7. package/anchor/index.tsx +5 -2
  8. package/anchor/link.tsx +29 -4
  9. package/autoComplete/index.tsx +28 -1
  10. package/avatar/_story/avatar.stories.js +4 -4
  11. package/avatar/index.tsx +6 -4
  12. package/banner/index.tsx +2 -1
  13. package/breadcrumb/_story/breadcrumb.stories.js +22 -8
  14. package/breadcrumb/index.tsx +8 -1
  15. package/breadcrumb/item.tsx +1 -1
  16. package/button/Button.tsx +4 -0
  17. package/button/__test__/button.test.js +1 -1
  18. package/button/_story/button.stories.js +10 -10
  19. package/button/buttonGroup.tsx +4 -2
  20. package/button/splitButtonGroup.tsx +5 -2
  21. package/card/_story/card.stories.js +8 -1
  22. package/card/_story/card.stories.tsx +3 -0
  23. package/card/index.tsx +5 -2
  24. package/cascader/index.tsx +33 -5
  25. package/checkbox/_story/checkbox.stories.js +19 -12
  26. package/checkbox/checkbox.tsx +40 -5
  27. package/checkbox/checkboxGroup.tsx +30 -5
  28. package/checkbox/checkboxInner.tsx +25 -2
  29. package/collapse/index.tsx +1 -1
  30. package/collapse/item.tsx +12 -7
  31. package/collapsible/index.tsx +4 -2
  32. package/configProvider/_story/configProvider.stories.tsx +27 -0
  33. package/datePicker/datePicker.tsx +19 -0
  34. package/dist/css/semi.css +23 -12
  35. package/dist/css/semi.min.css +1 -1
  36. package/dist/umd/semi-ui.js +2502 -1249
  37. package/dist/umd/semi-ui.js.map +1 -1
  38. package/dist/umd/semi-ui.min.js +1 -1
  39. package/dist/umd/semi-ui.min.js.map +1 -1
  40. package/dropdown/dropdownItem.tsx +1 -1
  41. package/dropdown/dropdownMenu.tsx +1 -1
  42. package/dropdown/index.tsx +11 -3
  43. package/empty/index.tsx +4 -4
  44. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  45. package/form/_story/Validate/validateDemo.jsx +1 -1
  46. package/form/_story/demo.jsx +12 -3
  47. package/form/_story/form.stories.js +0 -7
  48. package/form/baseForm.tsx +2 -0
  49. package/form/errorMessage.tsx +13 -2
  50. package/form/hoc/withField.tsx +37 -8
  51. package/form/index.tsx +0 -2
  52. package/form/interface.ts +2 -0
  53. package/form/label.tsx +4 -2
  54. package/input/index.tsx +49 -4
  55. package/input/inputGroup.tsx +9 -4
  56. package/input/textarea.tsx +30 -9
  57. package/inputNumber/__test__/inputNumber.test.js +36 -8
  58. package/inputNumber/index.tsx +30 -2
  59. package/layout/Sider.tsx +6 -2
  60. package/layout/index.tsx +4 -3
  61. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  62. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  63. package/lib/cjs/_utils/index.d.ts +1 -0
  64. package/lib/cjs/_utils/index.js +6 -1
  65. package/lib/cjs/anchor/index.d.ts +2 -0
  66. package/lib/cjs/anchor/index.js +6 -1
  67. package/lib/cjs/anchor/link.d.ts +4 -1
  68. package/lib/cjs/anchor/link.js +39 -5
  69. package/lib/cjs/autoComplete/index.d.ts +17 -0
  70. package/lib/cjs/autoComplete/index.js +21 -2
  71. package/lib/cjs/avatar/index.d.ts +4 -3
  72. package/lib/cjs/avatar/index.js +15 -11
  73. package/lib/cjs/banner/index.js +4 -2
  74. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  75. package/lib/cjs/breadcrumb/index.js +10 -4
  76. package/lib/cjs/breadcrumb/item.js +2 -2
  77. package/lib/cjs/button/Button.d.ts +2 -0
  78. package/lib/cjs/button/Button.js +4 -2
  79. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  80. package/lib/cjs/button/buttonGroup.js +8 -4
  81. package/lib/cjs/button/index.d.ts +1 -0
  82. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  83. package/lib/cjs/button/splitButtonGroup.js +5 -2
  84. package/lib/cjs/card/index.d.ts +3 -0
  85. package/lib/cjs/card/index.js +3 -1
  86. package/lib/cjs/cascader/index.d.ts +14 -0
  87. package/lib/cjs/cascader/index.js +35 -7
  88. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  89. package/lib/cjs/checkbox/checkbox.js +51 -17
  90. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  91. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  92. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  93. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  94. package/lib/cjs/collapse/item.d.ts +2 -1
  95. package/lib/cjs/collapse/item.js +12 -2
  96. package/lib/cjs/collapsible/index.d.ts +1 -0
  97. package/lib/cjs/collapsible/index.js +4 -2
  98. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  99. package/lib/cjs/datePicker/datePicker.js +14 -1
  100. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  101. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  102. package/lib/cjs/dropdown/index.d.ts +10 -3
  103. package/lib/cjs/form/baseForm.d.ts +9 -0
  104. package/lib/cjs/form/baseForm.js +3 -1
  105. package/lib/cjs/form/errorMessage.d.ts +4 -0
  106. package/lib/cjs/form/errorMessage.js +21 -3
  107. package/lib/cjs/form/field.d.ts +7 -0
  108. package/lib/cjs/form/hoc/withField.js +49 -16
  109. package/lib/cjs/form/index.d.ts +0 -1
  110. package/lib/cjs/form/interface.d.ts +2 -0
  111. package/lib/cjs/form/label.d.ts +2 -0
  112. package/lib/cjs/form/label.js +5 -2
  113. package/lib/cjs/input/index.d.ts +16 -0
  114. package/lib/cjs/input/index.js +51 -15
  115. package/lib/cjs/input/inputGroup.d.ts +2 -1
  116. package/lib/cjs/input/inputGroup.js +11 -1
  117. package/lib/cjs/input/textarea.js +16 -3
  118. package/lib/cjs/inputNumber/index.d.ts +8 -0
  119. package/lib/cjs/inputNumber/index.js +35 -4
  120. package/lib/cjs/layout/Sider.d.ts +4 -0
  121. package/lib/cjs/layout/Sider.js +4 -1
  122. package/lib/cjs/layout/index.js +2 -0
  123. package/lib/cjs/list/index.d.ts +4 -4
  124. package/lib/cjs/list/item.js +0 -1
  125. package/lib/cjs/modal/Modal.js +2 -0
  126. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  127. package/lib/cjs/modal/ModalContent.js +47 -5
  128. package/lib/cjs/navigation/Item.d.ts +4 -2
  129. package/lib/cjs/navigation/Item.js +25 -5
  130. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  131. package/lib/cjs/navigation/SubNav.js +8 -1
  132. package/lib/cjs/navigation/index.js +2 -0
  133. package/lib/cjs/notification/notice.d.ts +1 -1
  134. package/lib/cjs/notification/notice.js +32 -22
  135. package/lib/cjs/pagination/index.js +16 -6
  136. package/lib/cjs/popover/index.js +7 -3
  137. package/lib/cjs/progress/index.d.ts +8 -0
  138. package/lib/cjs/progress/index.js +42 -9
  139. package/lib/cjs/radio/radio.d.ts +6 -1
  140. package/lib/cjs/radio/radio.js +17 -5
  141. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  142. package/lib/cjs/radio/radioGroup.js +18 -3
  143. package/lib/cjs/radio/radioInner.d.ts +6 -1
  144. package/lib/cjs/radio/radioInner.js +11 -3
  145. package/lib/cjs/rating/index.d.ts +14 -0
  146. package/lib/cjs/rating/index.js +14 -3
  147. package/lib/cjs/rating/item.d.ts +2 -0
  148. package/lib/cjs/rating/item.js +6 -1
  149. package/lib/cjs/select/index.d.ts +16 -0
  150. package/lib/cjs/select/index.js +65 -19
  151. package/lib/cjs/select/option.js +28 -22
  152. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  153. package/lib/cjs/sideSheet/SideSheetContent.js +4 -1
  154. package/lib/cjs/sideSheet/index.d.ts +1 -0
  155. package/lib/cjs/sideSheet/index.js +2 -1
  156. package/lib/cjs/slider/index.d.ts +2 -1
  157. package/lib/cjs/slider/index.js +64 -17
  158. package/lib/cjs/spin/icon.js +3 -4
  159. package/lib/cjs/steps/basicStep.d.ts +3 -0
  160. package/lib/cjs/steps/basicStep.js +23 -25
  161. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  162. package/lib/cjs/steps/basicSteps.js +2 -1
  163. package/lib/cjs/steps/fillStep.d.ts +3 -0
  164. package/lib/cjs/steps/fillStep.js +19 -4
  165. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  166. package/lib/cjs/steps/fillSteps.js +2 -1
  167. package/lib/cjs/steps/navStep.d.ts +3 -0
  168. package/lib/cjs/steps/navStep.js +22 -25
  169. package/lib/cjs/steps/navSteps.d.ts +1 -0
  170. package/lib/cjs/steps/navSteps.js +2 -1
  171. package/lib/cjs/switch/index.d.ts +12 -0
  172. package/lib/cjs/switch/index.js +19 -4
  173. package/lib/cjs/table/Body/BaseRow.js +35 -3
  174. package/lib/cjs/table/Body/index.js +9 -1
  175. package/lib/cjs/table/ColumnFilter.js +4 -0
  176. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  177. package/lib/cjs/table/ColumnSelection.js +6 -2
  178. package/lib/cjs/table/ColumnSorter.js +19 -3
  179. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  180. package/lib/cjs/table/Table.d.ts +2 -0
  181. package/lib/cjs/table/Table.js +35 -15
  182. package/lib/cjs/table/TableCell.d.ts +2 -0
  183. package/lib/cjs/table/TableCell.js +6 -2
  184. package/lib/cjs/table/TableHeaderRow.js +8 -2
  185. package/lib/cjs/tabs/TabBar.js +11 -3
  186. package/lib/cjs/tabs/TabPane.js +3 -1
  187. package/lib/cjs/tabs/index.js +0 -1
  188. package/lib/cjs/tagInput/index.d.ts +4 -1
  189. package/lib/cjs/tagInput/index.js +29 -3
  190. package/lib/cjs/timePicker/TimePicker.d.ts +14 -0
  191. package/lib/cjs/timePicker/TimePicker.js +11 -4
  192. package/lib/cjs/timePicker/index.d.ts +7 -0
  193. package/lib/cjs/timeline/index.d.ts +1 -1
  194. package/lib/cjs/timeline/index.js +1 -0
  195. package/lib/cjs/timeline/item.js +4 -2
  196. package/lib/cjs/toast/toast.js +2 -0
  197. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  198. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  199. package/lib/cjs/tooltip/index.d.ts +16 -12
  200. package/lib/cjs/tooltip/index.js +55 -39
  201. package/lib/cjs/transfer/index.js +32 -14
  202. package/lib/cjs/tree/index.d.ts +1 -0
  203. package/lib/cjs/tree/index.js +15 -6
  204. package/lib/cjs/tree/treeNode.d.ts +12 -4
  205. package/lib/cjs/tree/treeNode.js +54 -5
  206. package/lib/cjs/treeSelect/index.d.ts +16 -0
  207. package/lib/cjs/treeSelect/index.js +60 -12
  208. package/lib/cjs/typography/base.js +18 -7
  209. package/lib/cjs/typography/copyable.js +6 -1
  210. package/lib/cjs/upload/fileCard.js +26 -7
  211. package/lib/cjs/upload/index.js +19 -4
  212. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  213. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  214. package/lib/es/_utils/index.d.ts +1 -0
  215. package/lib/es/_utils/index.js +4 -1
  216. package/lib/es/anchor/index.d.ts +2 -0
  217. package/lib/es/anchor/index.js +6 -1
  218. package/lib/es/anchor/link.d.ts +4 -1
  219. package/lib/es/anchor/link.js +38 -5
  220. package/lib/es/autoComplete/index.d.ts +17 -0
  221. package/lib/es/autoComplete/index.js +21 -2
  222. package/lib/es/avatar/index.d.ts +4 -3
  223. package/lib/es/avatar/index.js +15 -11
  224. package/lib/es/banner/index.js +4 -2
  225. package/lib/es/breadcrumb/index.d.ts +3 -0
  226. package/lib/es/breadcrumb/index.js +10 -4
  227. package/lib/es/breadcrumb/item.js +2 -2
  228. package/lib/es/button/Button.d.ts +2 -0
  229. package/lib/es/button/Button.js +4 -2
  230. package/lib/es/button/buttonGroup.d.ts +3 -0
  231. package/lib/es/button/buttonGroup.js +8 -4
  232. package/lib/es/button/index.d.ts +1 -0
  233. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  234. package/lib/es/button/splitButtonGroup.js +5 -2
  235. package/lib/es/card/index.d.ts +3 -0
  236. package/lib/es/card/index.js +3 -1
  237. package/lib/es/cascader/index.d.ts +14 -0
  238. package/lib/es/cascader/index.js +35 -7
  239. package/lib/es/checkbox/checkbox.d.ts +21 -1
  240. package/lib/es/checkbox/checkbox.js +50 -17
  241. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  242. package/lib/es/checkbox/checkboxGroup.js +18 -5
  243. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  244. package/lib/es/checkbox/checkboxInner.js +20 -3
  245. package/lib/es/collapse/item.d.ts +2 -1
  246. package/lib/es/collapse/item.js +11 -2
  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/dropdown/index.d.ts +10 -3
  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 +16 -3
  270. package/lib/es/inputNumber/index.d.ts +8 -0
  271. package/lib/es/inputNumber/index.js +36 -4
  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/index.d.ts +4 -4
  276. package/lib/es/list/item.js +0 -1
  277. package/lib/es/modal/Modal.js +2 -0
  278. package/lib/es/modal/ModalContent.d.ts +3 -1
  279. package/lib/es/modal/ModalContent.js +46 -5
  280. package/lib/es/navigation/Item.d.ts +4 -2
  281. package/lib/es/navigation/Item.js +25 -5
  282. package/lib/es/navigation/SubNav.d.ts +4 -2
  283. package/lib/es/navigation/SubNav.js +8 -1
  284. package/lib/es/navigation/index.js +2 -0
  285. package/lib/es/notification/notice.d.ts +1 -1
  286. package/lib/es/notification/notice.js +33 -24
  287. package/lib/es/pagination/index.js +16 -6
  288. package/lib/es/popover/index.js +7 -3
  289. package/lib/es/progress/index.d.ts +8 -0
  290. package/lib/es/progress/index.js +42 -9
  291. package/lib/es/radio/radio.d.ts +6 -1
  292. package/lib/es/radio/radio.js +16 -5
  293. package/lib/es/radio/radioGroup.d.ts +16 -1
  294. package/lib/es/radio/radioGroup.js +18 -3
  295. package/lib/es/radio/radioInner.d.ts +6 -1
  296. package/lib/es/radio/radioInner.js +11 -3
  297. package/lib/es/rating/index.d.ts +14 -0
  298. package/lib/es/rating/index.js +14 -3
  299. package/lib/es/rating/item.d.ts +2 -0
  300. package/lib/es/rating/item.js +6 -1
  301. package/lib/es/select/index.d.ts +16 -0
  302. package/lib/es/select/index.js +63 -17
  303. package/lib/es/select/option.js +28 -22
  304. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  305. package/lib/es/sideSheet/SideSheetContent.js +4 -1
  306. package/lib/es/sideSheet/index.d.ts +1 -0
  307. package/lib/es/sideSheet/index.js +2 -1
  308. package/lib/es/slider/index.d.ts +2 -1
  309. package/lib/es/slider/index.js +63 -16
  310. package/lib/es/spin/icon.js +3 -4
  311. package/lib/es/steps/basicStep.d.ts +3 -0
  312. package/lib/es/steps/basicStep.js +23 -23
  313. package/lib/es/steps/basicSteps.d.ts +1 -0
  314. package/lib/es/steps/basicSteps.js +2 -1
  315. package/lib/es/steps/fillStep.d.ts +3 -0
  316. package/lib/es/steps/fillStep.js +19 -4
  317. package/lib/es/steps/fillSteps.d.ts +1 -0
  318. package/lib/es/steps/fillSteps.js +2 -1
  319. package/lib/es/steps/navStep.d.ts +3 -0
  320. package/lib/es/steps/navStep.js +22 -23
  321. package/lib/es/steps/navSteps.d.ts +1 -0
  322. package/lib/es/steps/navSteps.js +2 -1
  323. package/lib/es/switch/index.d.ts +12 -0
  324. package/lib/es/switch/index.js +19 -4
  325. package/lib/es/table/Body/BaseRow.js +35 -3
  326. package/lib/es/table/Body/index.js +9 -2
  327. package/lib/es/table/ColumnFilter.js +4 -0
  328. package/lib/es/table/ColumnSelection.d.ts +3 -0
  329. package/lib/es/table/ColumnSelection.js +6 -2
  330. package/lib/es/table/ColumnSorter.js +17 -3
  331. package/lib/es/table/CustomExpandIcon.js +6 -1
  332. package/lib/es/table/Table.d.ts +2 -0
  333. package/lib/es/table/Table.js +35 -15
  334. package/lib/es/table/TableCell.d.ts +2 -0
  335. package/lib/es/table/TableCell.js +6 -2
  336. package/lib/es/table/TableHeaderRow.js +8 -2
  337. package/lib/es/tabs/TabBar.js +11 -3
  338. package/lib/es/tabs/TabPane.js +3 -1
  339. package/lib/es/tabs/index.js +0 -1
  340. package/lib/es/tagInput/index.d.ts +4 -1
  341. package/lib/es/tagInput/index.js +29 -3
  342. package/lib/es/timePicker/TimePicker.d.ts +14 -0
  343. package/lib/es/timePicker/TimePicker.js +11 -4
  344. package/lib/es/timePicker/index.d.ts +7 -0
  345. package/lib/es/timeline/index.d.ts +1 -1
  346. package/lib/es/timeline/index.js +1 -0
  347. package/lib/es/timeline/item.js +4 -2
  348. package/lib/es/toast/toast.js +2 -0
  349. package/lib/es/tooltip/TriangleArrow.js +1 -0
  350. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  351. package/lib/es/tooltip/index.d.ts +16 -12
  352. package/lib/es/tooltip/index.js +53 -39
  353. package/lib/es/transfer/index.js +32 -14
  354. package/lib/es/tree/index.d.ts +1 -0
  355. package/lib/es/tree/index.js +15 -6
  356. package/lib/es/tree/treeNode.d.ts +12 -4
  357. package/lib/es/tree/treeNode.js +53 -5
  358. package/lib/es/treeSelect/index.d.ts +16 -0
  359. package/lib/es/treeSelect/index.js +57 -10
  360. package/lib/es/typography/base.js +17 -7
  361. package/lib/es/typography/copyable.js +5 -1
  362. package/lib/es/upload/fileCard.js +26 -7
  363. package/lib/es/upload/index.js +19 -4
  364. package/list/index.tsx +5 -5
  365. package/list/item.tsx +0 -1
  366. package/modal/Modal.tsx +2 -0
  367. package/modal/ModalContent.tsx +35 -5
  368. package/navigation/Item.tsx +15 -0
  369. package/navigation/SubNav.tsx +13 -1
  370. package/navigation/index.tsx +1 -1
  371. package/notification/notice.tsx +19 -14
  372. package/package.json +8 -8
  373. package/pagination/index.tsx +9 -5
  374. package/popover/index.tsx +5 -0
  375. package/progress/_story/progress.stories.js +18 -18
  376. package/progress/index.tsx +58 -20
  377. package/radio/radio.tsx +12 -2
  378. package/radio/radioGroup.tsx +29 -3
  379. package/radio/radioInner.tsx +10 -1
  380. package/rating/index.tsx +19 -2
  381. package/rating/item.tsx +6 -0
  382. package/select/__test__/select.test.js +45 -0
  383. package/select/_story/select.stories.js +29 -0
  384. package/select/index.tsx +57 -4
  385. package/select/option.tsx +3 -0
  386. package/sideSheet/SideSheetContent.tsx +6 -4
  387. package/sideSheet/index.tsx +3 -2
  388. package/slider/__test__/slider.test.js +9 -0
  389. package/slider/_story/slider.stories.js +1 -1
  390. package/slider/index.tsx +44 -7
  391. package/spin/icon.tsx +4 -3
  392. package/steps/basicStep.tsx +15 -4
  393. package/steps/basicSteps.tsx +3 -2
  394. package/steps/fillStep.tsx +27 -12
  395. package/steps/fillSteps.tsx +2 -0
  396. package/steps/navStep.tsx +15 -4
  397. package/steps/navSteps.tsx +3 -2
  398. package/switch/_story/switch.stories.js +20 -19
  399. package/switch/_story/switch.stories.tsx +13 -13
  400. package/switch/index.tsx +23 -5
  401. package/table/Body/BaseRow.tsx +25 -1
  402. package/table/Body/index.tsx +7 -2
  403. package/table/ColumnFilter.tsx +7 -1
  404. package/table/ColumnSelection.tsx +4 -1
  405. package/table/ColumnSorter.tsx +18 -1
  406. package/table/CustomExpandIcon.tsx +5 -0
  407. package/table/Table.tsx +30 -14
  408. package/table/TableCell.tsx +11 -1
  409. package/table/TableHeaderRow.tsx +16 -2
  410. package/table/__test__/table.test.js +46 -0
  411. package/table/_story/table.stories.js +2 -0
  412. package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
  413. package/table/_story/v2/FixedZIndex/index.jsx +87 -0
  414. package/tabs/TabBar.tsx +8 -5
  415. package/tabs/TabPane.tsx +3 -1
  416. package/tabs/index.tsx +0 -1
  417. package/tagInput/__test__/tagInput.test.js +46 -0
  418. package/tagInput/_story/tagInput.stories.js +2 -2
  419. package/tagInput/index.tsx +31 -8
  420. package/timePicker/TimePicker.tsx +17 -2
  421. package/timePicker/__test__/timePicker.test.js +34 -3
  422. package/timePicker/_story/timepicker.stories.js +18 -0
  423. package/timeline/_story/timeline.stories.js +1 -1
  424. package/timeline/index.tsx +2 -2
  425. package/timeline/item.tsx +2 -1
  426. package/toast/toast.tsx +2 -0
  427. package/tooltip/TriangleArrow.tsx +1 -1
  428. package/tooltip/TriangleArrowVertical.tsx +1 -1
  429. package/tooltip/_story/tooltip.stories.js +562 -514
  430. package/tooltip/index.tsx +51 -33
  431. package/transfer/index.tsx +29 -25
  432. package/tree/_story/tree.stories.js +3 -3
  433. package/tree/index.tsx +10 -2
  434. package/tree/treeNode.tsx +54 -11
  435. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  436. package/treeSelect/_story/treeSelect.stories.js +12 -0
  437. package/treeSelect/index.tsx +58 -7
  438. package/typography/base.tsx +7 -1
  439. package/typography/copyable.tsx +10 -1
  440. package/upload/fileCard.tsx +14 -16
  441. package/upload/index.tsx +10 -6
@@ -26,6 +26,8 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
26
26
 
27
27
  var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
28
28
 
29
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
30
+
29
31
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
30
32
 
31
33
  var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
@@ -64,7 +66,7 @@ require("@douyinfe/semi-foundation/lib/cjs/treeSelect/treeSelect.css");
64
66
 
65
67
  var _baseComponent = _interopRequireDefault(require("../_base/baseComponent"));
66
68
 
67
- var _context2 = _interopRequireDefault(require("../configProvider/context"));
69
+ var _context3 = _interopRequireDefault(require("../configProvider/context"));
68
70
 
69
71
  var _group = _interopRequireDefault(require("../tag/group"));
70
72
 
@@ -104,6 +106,8 @@ const key = 0;
104
106
 
105
107
  class TreeSelect extends _baseComponent.default {
106
108
  constructor(props) {
109
+ var _context2;
110
+
107
111
  super(props);
108
112
 
109
113
  this.renderSuffix = () => {
@@ -123,7 +127,8 @@ class TreeSelect extends _baseComponent.default {
123
127
  this.renderPrefix = () => {
124
128
  const {
125
129
  prefix,
126
- insetLabel
130
+ insetLabel,
131
+ insetLabelId
127
132
  } = this.props;
128
133
  const labelNode = prefix || insetLabel;
129
134
  const prefixWrapperCls = (0, _classnames.default)({
@@ -134,7 +139,8 @@ class TreeSelect extends _baseComponent.default {
134
139
  ["".concat(prefixcls, "-prefix-icon")]: (0, _utils.isSemiIcon)(labelNode)
135
140
  });
136
141
  return /*#__PURE__*/_react.default.createElement("div", {
137
- className: prefixWrapperCls
142
+ className: prefixWrapperCls,
143
+ id: insetLabelId
138
144
  }, labelNode);
139
145
  };
140
146
 
@@ -152,7 +158,6 @@ class TreeSelect extends _baseComponent.default {
152
158
  const popoverCls = (0, _classnames.default)(dropdownClassName, "".concat(prefixcls, "-popover"));
153
159
  return /*#__PURE__*/_react.default.createElement("div", {
154
160
  className: popoverCls,
155
- role: "list-box",
156
161
  style: style
157
162
  }, this.renderTree());
158
163
  };
@@ -165,6 +170,10 @@ class TreeSelect extends _baseComponent.default {
165
170
  this.foundation.handleClick(e);
166
171
  };
167
172
 
173
+ this.handleSelectionEnterPress = e => {
174
+ this.foundation.handleSelectionEnterPress(e);
175
+ };
176
+
168
177
  this.showClearBtn = () => {
169
178
  const {
170
179
  searchPosition
@@ -332,6 +341,11 @@ class TreeSelect extends _baseComponent.default {
332
341
  this.foundation.handleClear(e);
333
342
  };
334
343
 
344
+ this.handleClearEnterPress = e => {
345
+ e && e.stopPropagation();
346
+ this.foundation.handleClearEnterPress(e);
347
+ };
348
+
335
349
  this.handleMouseOver = e => {
336
350
  this.foundation.toggleHoverState(true);
337
351
  };
@@ -369,8 +383,12 @@ class TreeSelect extends _baseComponent.default {
369
383
 
370
384
  if (showClearBtn) {
371
385
  return /*#__PURE__*/_react.default.createElement("div", {
386
+ role: 'button',
387
+ tabIndex: 0,
388
+ "aria-label": "Clear TreeSelect value",
372
389
  className: clearCls,
373
- onClick: this.handleClear
390
+ onClick: this.handleClear,
391
+ onKeyPress: this.handleClearEnterPress
374
392
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClear, null));
375
393
  }
376
394
 
@@ -452,11 +470,29 @@ class TreeSelect extends _baseComponent.default {
452
470
  }, showClear || isTriggerPositionSearch && inputValue ? this.renderClearBtn() : null), /*#__PURE__*/_react.default.createElement(_react.Fragment, {
453
471
  key: 'arrow'
454
472
  }, this.renderArrow())];
473
+ const tabIndex = disabled ? null : 0;
474
+ /**
475
+ * Reasons for disabling the a11y eslint rule:
476
+ * The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here
477
+ */
478
+
455
479
  return /*#__PURE__*/_react.default.createElement("div", (0, _assign.default)({
480
+ // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
481
+ role: 'combobox',
482
+ "aria-disabled": disabled,
483
+ "aria-haspopup": "tree",
484
+ tabIndex: tabIndex,
456
485
  className: classNames,
457
486
  style: style,
458
487
  ref: this.triggerRef,
459
- onClick: this.handleClick
488
+ onClick: this.handleClick,
489
+ onKeyPress: this.handleSelectionEnterPress,
490
+ "aria-invalid": this.props['aria-invalid'],
491
+ "aria-errormessage": this.props['aria-errormessage'],
492
+ "aria-label": this.props['aria-label'],
493
+ "aria-labelledby": this.props['aria-labelledby'],
494
+ "aria-describedby": this.props['aria-describedby'],
495
+ "aria-required": this.props['aria-required']
460
496
  }, mouseEvent), inner);
461
497
  }; // eslint-disable-next-line @typescript-eslint/no-shadow
462
498
 
@@ -531,7 +567,8 @@ class TreeSelect extends _baseComponent.default {
531
567
  disabled,
532
568
  size,
533
569
  searchAutoFocus,
534
- placeholder
570
+ placeholder,
571
+ maxTagCount
535
572
  } = this.props;
536
573
  const {
537
574
  keyEntities,
@@ -540,6 +577,7 @@ class TreeSelect extends _baseComponent.default {
540
577
  } = this.state;
541
578
  const keyList = (0, _treeUtil.normalizeKeyList)(checkedKeys, keyEntities, leafOnly);
542
579
  return /*#__PURE__*/_react.default.createElement(_tagInput.default, {
580
+ maxTagCount: maxTagCount,
543
581
  disabled: disabled,
544
582
  onInputChange: v => this.search(v),
545
583
  ref: this.tagInputRef,
@@ -611,6 +649,7 @@ class TreeSelect extends _baseComponent.default {
611
649
  }
612
650
 
613
651
  return /*#__PURE__*/_react.default.createElement(_index2.default, (0, _assign.default)({
652
+ "aria-label": 'Filter TreeSelect item',
614
653
  ref: this.inputRef,
615
654
  autofocus: searchAutoFocus,
616
655
  placeholder: placeholder
@@ -839,11 +878,11 @@ class TreeSelect extends _baseComponent.default {
839
878
  labelEllipsis: typeof labelEllipsis === 'undefined' ? virtualize : labelEllipsis
840
879
  }
841
880
  }, /*#__PURE__*/_react.default.createElement("div", {
842
- className: wrapperCls,
843
- role: "list-box"
881
+ className: wrapperCls
844
882
  }, outerTopSlot, !outerTopSlot && filterTreeNode && isDropdownPositionSearch && this.renderInput(), /*#__PURE__*/_react.default.createElement("div", {
845
883
  className: listCls,
846
884
  role: "tree",
885
+ "aria-multiselectable": multiple ? true : false,
847
886
  style: optionListStyle
848
887
  }, noData ? this.renderEmpty() : this.renderNodeList()), outerBottomSlot));
849
888
  };
@@ -880,6 +919,7 @@ class TreeSelect extends _baseComponent.default {
880
919
  this.optionsRef = /*#__PURE__*/_react.default.createRef();
881
920
  this.clickOutsideHandler = null;
882
921
  this.foundation = new _foundation.default(this.adapter);
922
+ this.treeSelectID = (0, _slice.default)(_context2 = Math.random().toString(36)).call(_context2, 2);
883
923
  } // eslint-disable-next-line max-lines-per-function
884
924
 
885
925
 
@@ -1179,8 +1219,13 @@ class TreeSelect extends _baseComponent.default {
1179
1219
 
1180
1220
  }
1181
1221
 
1182
- TreeSelect.contextType = _context2.default;
1222
+ TreeSelect.contextType = _context3.default;
1183
1223
  TreeSelect.propTypes = {
1224
+ 'aria-describedby': _propTypes.default.string,
1225
+ 'aria-errormessage': _propTypes.default.string,
1226
+ 'aria-invalid': _propTypes.default.bool,
1227
+ 'aria-labelledby': _propTypes.default.string,
1228
+ 'aria-required': _propTypes.default.bool,
1184
1229
  loadedKeys: _propTypes.default.arrayOf(_propTypes.default.string),
1185
1230
  loadData: _propTypes.default.func,
1186
1231
  onLoad: _propTypes.default.func,
@@ -1233,6 +1278,7 @@ TreeSelect.propTypes = {
1233
1278
  suffix: _propTypes.default.node,
1234
1279
  prefix: _propTypes.default.node,
1235
1280
  insetLabel: _propTypes.default.node,
1281
+ insetLabelId: _propTypes.default.string,
1236
1282
  zIndex: _propTypes.default.number,
1237
1283
  getPopupContainer: _propTypes.default.func,
1238
1284
  dropdownMatchSelectWidth: _propTypes.default.bool,
@@ -1252,7 +1298,8 @@ TreeSelect.propTypes = {
1252
1298
  labelEllipsis: _propTypes.default.bool,
1253
1299
  optionListStyle: _propTypes.default.object,
1254
1300
  searchRender: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.bool]),
1255
- renderSelectedItem: _propTypes.default.func
1301
+ renderSelectedItem: _propTypes.default.func,
1302
+ 'aria-label': _propTypes.default.string
1256
1303
  };
1257
1304
  TreeSelect.defaultProps = {
1258
1305
  searchPosition: _constants.strings.SEARCH_POSITION_DROPDOWN,
@@ -1279,7 +1326,8 @@ TreeSelect.defaultProps = {
1279
1326
  onVisibleChange: _noop2.default,
1280
1327
  expandAction: false,
1281
1328
  clickToHide: true,
1282
- searchAutoFocus: false
1329
+ searchAutoFocus: false,
1330
+ 'aria-label': 'TreeSelect'
1283
1331
  };
1284
1332
  var _default = TreeSelect;
1285
1333
  exports.default = _default;
@@ -58,6 +58,8 @@ var _util = _interopRequireDefault(require("./util"));
58
58
 
59
59
  var _warning = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/warning"));
60
60
 
61
+ var _isEnterPress = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/isEnterPress"));
62
+
61
63
  var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer"));
62
64
 
63
65
  var _utils = require("../_utils");
@@ -271,13 +273,22 @@ class Base extends _react.Component {
271
273
  }
272
274
 
273
275
  if (!noExpandText || !noCollapseText) {
274
- return /*#__PURE__*/_react.default.createElement("a", {
275
- className: "".concat(prefixCls, "-ellipsis-expand"),
276
- key: "expand",
277
- ref: this.expandRef,
278
- "aria-label": text,
279
- onClick: this.toggleOverflow
280
- }, text);
276
+ return (
277
+ /*#__PURE__*/
278
+ // TODO: replace `a` tag with `span` in next major version
279
+ // NOTE: may have effect on style
280
+ // eslint-disable-next-line jsx-a11y/anchor-is-valid
281
+ _react.default.createElement("a", {
282
+ role: "button",
283
+ tabIndex: 0,
284
+ className: "".concat(prefixCls, "-ellipsis-expand"),
285
+ key: "expand",
286
+ ref: this.expandRef,
287
+ "aria-label": text,
288
+ onClick: this.toggleOverflow,
289
+ onKeyPress: e => (0, _isEnterPress.default)(e) && this.toggleOverflow(e)
290
+ }, text)
291
+ );
281
292
  }
282
293
 
283
294
  return null;
@@ -32,6 +32,8 @@ var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer")
32
32
 
33
33
  var _semiIcons = require("@douyinfe/semi-icons");
34
34
 
35
+ var _isEnterPress = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/isEnterPress"));
36
+
35
37
  const prefixCls = _constants.cssClasses.PREFIX;
36
38
 
37
39
  class Copyable extends _react.default.PureComponent {
@@ -124,7 +126,10 @@ class Copyable extends _react.default.PureComponent {
124
126
  }, /*#__PURE__*/_react.default.createElement("a", {
125
127
  className: "".concat(prefixCls, "-action-copy-icon")
126
128
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconCopy, {
127
- onClick: this.copy
129
+ role: "button",
130
+ tabIndex: 0,
131
+ onClick: this.copy,
132
+ onKeyPress: e => (0, _isEnterPress.default)(e) && this.copy(e)
128
133
  })))));
129
134
  }
130
135
 
@@ -49,6 +49,8 @@ const prefixCls = _constants.cssClasses.PREFIX;
49
49
  const ErrorSvg = function () {
50
50
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
51
51
  return /*#__PURE__*/_react.default.createElement("svg", (0, _assign.default)({
52
+ focusable: false,
53
+ "aria-hidden": true,
52
54
  width: "16",
53
55
  height: "16",
54
56
  viewBox: "0 0 16 16",
@@ -70,6 +72,8 @@ const ErrorSvg = function () {
70
72
  const ReplaceSvg = function () {
71
73
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
72
74
  return /*#__PURE__*/_react.default.createElement("svg", (0, _assign.default)({
75
+ focusable: false,
76
+ "aria-hidden": true,
73
77
  width: "28",
74
78
  height: "28",
75
79
  viewBox: "0 0 28 28",
@@ -97,6 +101,8 @@ const ReplaceSvg = function () {
97
101
  const DirectorySvg = function () {
98
102
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
99
103
  return /*#__PURE__*/_react.default.createElement("svg", (0, _assign.default)({
104
+ focusable: false,
105
+ "aria-hidden": true,
100
106
  width: "24",
101
107
  height: "24",
102
108
  viewBox: "0 0 24 24",
@@ -211,6 +217,8 @@ class FileCard extends _react.PureComponent {
211
217
  const closeCls = "".concat(prefixCls, "-picture-file-card-close");
212
218
 
213
219
  const retry = /*#__PURE__*/_react.default.createElement("div", {
220
+ role: "button",
221
+ tabIndex: 0,
214
222
  className: "".concat(prefixCls, "-picture-file-card-retry"),
215
223
  onClick: e => this.onRetry(e)
216
224
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconRefresh, {
@@ -224,6 +232,8 @@ class FileCard extends _react.PureComponent {
224
232
  showArrow: false,
225
233
  spacing: 4
226
234
  }, /*#__PURE__*/_react.default.createElement("div", {
235
+ role: "button",
236
+ tabIndex: 0,
227
237
  className: "".concat(prefixCls, "-picture-file-card-replace"),
228
238
  onClick: e => this.onReplace(e)
229
239
  }, /*#__PURE__*/_react.default.createElement(ReplaceSvg, {
@@ -235,9 +245,10 @@ class FileCard extends _react.PureComponent {
235
245
  }, index + 1);
236
246
  const thumbnail = typeof renderThumbnail === 'function' ? renderThumbnail(this.props) : /*#__PURE__*/_react.default.createElement("img", {
237
247
  src: url,
238
- alt: "picture of ".concat(name)
248
+ alt: name
239
249
  });
240
250
  return /*#__PURE__*/_react.default.createElement("div", {
251
+ role: "listitem",
241
252
  className: filePicCardCls,
242
253
  style: style,
243
254
  onClick: onPreviewClick
@@ -245,12 +256,15 @@ class FileCard extends _react.PureComponent {
245
256
  percent: percent,
246
257
  type: "circle",
247
258
  size: "small",
248
- orbitStroke: '#FFF'
259
+ orbitStroke: '#FFF',
260
+ "aria-label": "uploading file progress"
249
261
  }) : null, showRetry ? retry : null, showReplace && replace, showPicInfo && picInfo, !disabled && /*#__PURE__*/_react.default.createElement("div", {
250
- className: closeCls
251
- }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, {
252
- size: "extra-small",
262
+ className: closeCls,
253
263
  onClick: e => this.onRemove(e)
264
+ }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, {
265
+ tabIndex: 0,
266
+ role: "button",
267
+ size: "extra-small"
254
268
  })), this.renderPicValidateMsg());
255
269
  }
256
270
 
@@ -286,7 +300,8 @@ class FileCard extends _react.PureComponent {
286
300
  const showReplace = status === _constants.strings.FILE_STATUS_SUCCESS && propsShowReplace;
287
301
  const fileSize = this.transSize(size);
288
302
  let previewContent = preview ? /*#__PURE__*/_react.default.createElement("img", {
289
- src: url
303
+ src: url,
304
+ alt: name
290
305
  }) : /*#__PURE__*/_react.default.createElement(_semiIcons.IconFile, {
291
306
  size: "large"
292
307
  });
@@ -296,6 +311,7 @@ class FileCard extends _react.PureComponent {
296
311
  }
297
312
 
298
313
  return /*#__PURE__*/_react.default.createElement("div", {
314
+ role: "listitem",
299
315
  className: fileCardCls,
300
316
  style: style,
301
317
  onClick: onPreviewClick
@@ -325,12 +341,15 @@ class FileCard extends _react.PureComponent {
325
341
  percent: percent,
326
342
  style: {
327
343
  width: '100%'
328
- }
344
+ },
345
+ "aria-label": "uploading file progress"
329
346
  }) : null, /*#__PURE__*/_react.default.createElement("div", {
330
347
  className: "".concat(infoCls, "-main-control")
331
348
  }, /*#__PURE__*/_react.default.createElement("span", {
332
349
  className: "".concat(infoCls, "-validate-message")
333
350
  }, this.renderValidateMessage()), showRetry ? /*#__PURE__*/_react.default.createElement("span", {
351
+ role: "button",
352
+ tabIndex: 0,
334
353
  className: "".concat(infoCls, "-retry"),
335
354
  onClick: e => this.onRetry(e)
336
355
  }, locale.retry) : null)), /*#__PURE__*/_react.default.createElement(_index.default, {
@@ -233,6 +233,7 @@ class Upload extends _baseComponent.default {
233
233
  });
234
234
  const mainCls = "".concat(prefixCls, "-file-list-main");
235
235
  const addContentProps = {
236
+ role: 'button',
236
237
  className: uploadAddCls,
237
238
  onClick: this.onClick
238
239
  };
@@ -265,7 +266,9 @@ class Upload extends _baseComponent.default {
265
266
  return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
266
267
  componentName: "Upload"
267
268
  }, locale => /*#__PURE__*/_react.default.createElement("div", (0, _assign.default)({}, containerProps), /*#__PURE__*/_react.default.createElement("div", {
268
- className: mainCls
269
+ className: mainCls,
270
+ role: "list",
271
+ "aria-label": "picture list"
269
272
  }, (0, _map.default)(fileList).call(fileList, (file, index) => this.renderFile(file, index, locale)), showAddTriggerInList ? addContent : null)));
270
273
  };
271
274
 
@@ -299,10 +302,14 @@ class Upload extends _baseComponent.default {
299
302
  }, /*#__PURE__*/_react.default.createElement("span", {
300
303
  className: "".concat(titleCls, "-choosen")
301
304
  }, locale.selectedFiles), showClear ? /*#__PURE__*/_react.default.createElement("span", {
305
+ role: "button",
306
+ tabIndex: 0,
302
307
  onClick: this.clear,
303
308
  className: "".concat(titleCls, "-clear")
304
309
  }, locale.clear) : null) : null, /*#__PURE__*/_react.default.createElement("div", {
305
- className: mainCls
310
+ className: mainCls,
311
+ role: "list",
312
+ "aria-label": "file list"
306
313
  }, (0, _map.default)(fileList).call(fileList, (file, index) => this.renderFile(file, index, locale)))));
307
314
  };
308
315
 
@@ -327,7 +334,8 @@ class Upload extends _baseComponent.default {
327
334
  const {
328
335
  draggable,
329
336
  children,
330
- listType
337
+ listType,
338
+ disabled
331
339
  } = this.props;
332
340
  const uploadAddCls = (0, _classnames.default)("".concat(prefixCls, "-add"));
333
341
 
@@ -340,6 +348,9 @@ class Upload extends _baseComponent.default {
340
348
  }
341
349
 
342
350
  return /*#__PURE__*/_react.default.createElement("div", {
351
+ role: "button",
352
+ tabIndex: 0,
353
+ "aria-disabled": disabled,
343
354
  className: uploadAddCls,
344
355
  onClick: this.onClick
345
356
  }, children);
@@ -353,7 +364,8 @@ class Upload extends _baseComponent.default {
353
364
  children,
354
365
  dragIcon,
355
366
  dragMainText,
356
- dragSubText
367
+ dragSubText,
368
+ disabled
357
369
  } = this.props;
358
370
  const dragAreaBaseCls = "".concat(prefixCls, "-drag-area");
359
371
  const dragAreaCls = (0, _classnames.default)(dragAreaBaseCls, {
@@ -364,6 +376,9 @@ class Upload extends _baseComponent.default {
364
376
  return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
365
377
  componentName: "Upload"
366
378
  }, locale => /*#__PURE__*/_react.default.createElement("div", {
379
+ role: "button",
380
+ tabIndex: 0,
381
+ "aria-disabled": disabled,
367
382
  className: dragAreaCls,
368
383
  onDrop: this.onDrop,
369
384
  onDragOver: this.onDragOver,
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function usePrevFocus(): (HTMLElement | import("react").Dispatch<import("react").SetStateAction<HTMLElement>>)[];
@@ -0,0 +1,15 @@
1
+ import _isFunction from "lodash/isFunction";
2
+ import _get from "lodash/get";
3
+ import { useState, useEffect } from 'react';
4
+ import { getActiveElement } from '../index';
5
+ export function usePrevFocus() {
6
+ const [prevFocusElement, setPrevFocus] = useState(getActiveElement());
7
+ useEffect(() => {
8
+ return function cleanup() {
9
+ const blur = _get(prevFocusElement, 'blur');
10
+
11
+ _isFunction(blur) && blur();
12
+ };
13
+ }, [prevFocusElement]);
14
+ return [prevFocusElement, setPrevFocus];
15
+ }
@@ -67,3 +67,4 @@ export interface HighLightTextHTMLChunk {
67
67
  * @returns boolean
68
68
  */
69
69
  export declare const isSemiIcon: (icon: any) => boolean;
70
+ export declare function getActiveElement(): HTMLElement;
@@ -165,4 +165,7 @@ export const registerMediaQuery = (media, _ref2) => {
165
165
  * @returns boolean
166
166
  */
167
167
 
168
- export const isSemiIcon = icon => /*#__PURE__*/React.isValidElement(icon) && _get(icon.type, 'elementType') === 'Icon';
168
+ export const isSemiIcon = icon => /*#__PURE__*/React.isValidElement(icon) && _get(icon.type, 'elementType') === 'Icon';
169
+ export function getActiveElement() {
170
+ return document ? document.activeElement : null;
171
+ }
@@ -24,6 +24,7 @@ export interface AnchorProps {
24
24
  targetOffset?: number;
25
25
  onChange?: (currentLink: string, previousLink: string) => void;
26
26
  onClick?: (e: React.MouseEvent<HTMLElement>, currentLink: string) => void;
27
+ 'aria-label'?: React.AriaAttributes['aria-label'];
27
28
  }
28
29
  export interface AnchorState {
29
30
  activeLink: string;
@@ -51,6 +52,7 @@ declare class Anchor extends BaseComponent<AnchorProps, AnchorState> {
51
52
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
52
53
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
53
54
  defaultAnchor: PropTypes.Requireable<string>;
55
+ 'aria-label': PropTypes.Requireable<string>;
54
56
  };
55
57
  static defaultProps: {
56
58
  size: string;
@@ -221,6 +221,7 @@ class Anchor extends BaseComponent {
221
221
  position,
222
222
  autoCollapse
223
223
  } = this.props;
224
+ const ariaLabel = this.props['aria-label'];
224
225
  const {
225
226
  activeLink,
226
227
  scrollHeight,
@@ -255,10 +256,13 @@ class Anchor extends BaseComponent {
255
256
  removeLink: this.removeLink
256
257
  }
257
258
  }, /*#__PURE__*/React.createElement("div", {
259
+ role: "navigation",
260
+ "aria-label": ariaLabel || 'Side navigation',
258
261
  className: wrapperCls,
259
262
  style: wrapperStyle,
260
263
  id: this.anchorID
261
264
  }, /*#__PURE__*/React.createElement("div", {
265
+ "aria-hidden": true,
262
266
  className: slideCls,
263
267
  style: {
264
268
  height: scrollHeight
@@ -292,7 +296,8 @@ Anchor.PropTypes = {
292
296
  getContainer: PropTypes.func,
293
297
  onChange: PropTypes.func,
294
298
  onClick: PropTypes.func,
295
- defaultAnchor: PropTypes.string
299
+ defaultAnchor: PropTypes.string,
300
+ 'aria-label': PropTypes.string
296
301
  };
297
302
  Anchor.defaultProps = {
298
303
  size: 'default',
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BaseComponent from '../_base/baseComponent';
4
4
  import LinkFoundation, { LinkAdapter } from '@douyinfe/semi-foundation/lib/es/anchor/linkFoundation';
5
+ import { AnchorContextType } from './anchor-context';
5
6
  export interface LinkProps {
6
7
  href?: string;
7
8
  title?: string | React.ReactNode;
@@ -21,13 +22,15 @@ export default class Link extends BaseComponent<LinkProps, {}> {
21
22
  title: string;
22
23
  className: string;
23
24
  };
24
- static contextType: React.Context<import("./anchor-context").AnchorContextType>;
25
+ static contextType: React.Context<AnchorContextType>;
25
26
  foundation: LinkFoundation;
27
+ context: AnchorContextType;
26
28
  constructor(props: LinkProps);
27
29
  get adapter(): LinkAdapter;
28
30
  handleAddLink(): void;
29
31
  handleRemoveLink(): void;
30
32
  handleUpdateLink(href: string, prevHref: string): void;
33
+ handleClick(e: React.KeyboardEvent | React.MouseEvent): void;
31
34
  componentDidMount(): void;
32
35
  componentDidUpdate(prevProps: LinkProps): void;
33
36
  componentWillUnmount(): void;
@@ -1,4 +1,5 @@
1
1
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
2
+ import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
2
3
  import React from 'react';
3
4
  import cls from 'classnames';
4
5
  import PropTypes from 'prop-types';
@@ -11,6 +12,8 @@ const prefixCls = cssClasses.PREFIX; // eslint-disable-next-line @typescript-esl
11
12
 
12
13
  export default class Link extends BaseComponent {
13
14
  constructor(props) {
15
+ var _context;
16
+
14
17
  super(props);
15
18
 
16
19
  this.renderTitle = () => {
@@ -69,6 +72,7 @@ export default class Link extends BaseComponent {
69
72
  };
70
73
 
71
74
  this.foundation = new LinkFoundation(this.adapter);
75
+ this.handleClick = _bindInstanceProperty(_context = this.handleClick).call(_context, this);
72
76
  }
73
77
 
74
78
  get adapter() {
@@ -94,6 +98,17 @@ export default class Link extends BaseComponent {
94
98
  this.foundation.handleUpdateLink(href, prevHref);
95
99
  }
96
100
 
101
+ handleClick(e) {
102
+ const {
103
+ disabled,
104
+ href
105
+ } = this.props;
106
+ const {
107
+ onClick
108
+ } = this.context;
109
+ !disabled && onClick(e, href);
110
+ }
111
+
97
112
  componentDidMount() {
98
113
  this.handleAddLink();
99
114
  }
@@ -115,11 +130,12 @@ export default class Link extends BaseComponent {
115
130
  href,
116
131
  className,
117
132
  style,
118
- disabled = false
133
+ disabled = false,
134
+ title
119
135
  } = this.props;
120
136
  const {
121
137
  activeLink,
122
- onClick
138
+ showTooltip
123
139
  } = this.context;
124
140
  const active = activeLink === href;
125
141
  const linkCls = cls("".concat(prefixCls, "-link"), className);
@@ -127,13 +143,30 @@ export default class Link extends BaseComponent {
127
143
  ["".concat(prefixCls, "-link-title-active")]: active,
128
144
  ["".concat(prefixCls, "-link-title-disabled")]: disabled
129
145
  });
146
+ const ariaProps = {
147
+ 'aria-disabled': disabled,
148
+ 'aria-label': href
149
+ };
150
+
151
+ if (active) {
152
+ ariaProps['aria-details'] = 'active';
153
+ }
154
+
155
+ if (!showTooltip && typeof title === 'string') {
156
+ ariaProps['title'] = title;
157
+ }
158
+
130
159
  return /*#__PURE__*/React.createElement("div", {
131
160
  className: linkCls,
132
161
  style: style
133
- }, /*#__PURE__*/React.createElement("div", {
162
+ }, /*#__PURE__*/React.createElement("div", _Object$assign({
163
+ role: "link",
164
+ tabIndex: 0
165
+ }, ariaProps, {
134
166
  className: linkTitleCls,
135
- onClick: e => !disabled && onClick(e, href)
136
- }, this.renderTitle()), this.renderChildren());
167
+ onClick: e => this.handleClick(e),
168
+ onKeyPress: e => this.handleClick(e)
169
+ }), this.renderTitle()), this.renderChildren());
137
170
  }
138
171
 
139
172
  }