@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
@@ -24,6 +24,8 @@ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
24
24
 
25
25
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
26
26
 
27
+ var _get2 = _interopRequireDefault(require("lodash/get"));
28
+
27
29
  var _isString2 = _interopRequireDefault(require("lodash/isString"));
28
30
 
29
31
  var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
@@ -38,6 +40,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
38
40
 
39
41
  var _constants = require("@douyinfe/semi-foundation/lib/cjs/tree/constants");
40
42
 
43
+ var _isEnterPress = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/isEnterPress"));
44
+
41
45
  var _semiIcons = require("@douyinfe/semi-icons");
42
46
 
43
47
  var _checkbox = require("../checkbox");
@@ -95,6 +99,16 @@ class TreeNode extends _react.PureComponent {
95
99
  e.nativeEvent.stopImmediatePropagation();
96
100
  onNodeCheck(e, this.props);
97
101
  };
102
+ /**
103
+ * A11y: simulate checkbox click
104
+ */
105
+
106
+
107
+ this.handleCheckEnterPress = e => {
108
+ if ((0, _isEnterPress.default)(e)) {
109
+ this.onCheck(e);
110
+ }
111
+ };
98
112
 
99
113
  this.onContextMenu = e => {
100
114
  const {
@@ -119,6 +133,16 @@ class TreeNode extends _react.PureComponent {
119
133
  this.onExpand(e);
120
134
  }
121
135
  };
136
+ /**
137
+ * A11y: simulate li click
138
+ */
139
+
140
+
141
+ this.handleliEnterPress = e => {
142
+ if ((0, _isEnterPress.default)(e)) {
143
+ this.onClick(e);
144
+ }
145
+ };
122
146
 
123
147
  this.onDoubleClick = e => {
124
148
  const {
@@ -294,7 +318,8 @@ class TreeNode extends _react.PureComponent {
294
318
  renderArrow() {
295
319
  const showIcon = !this.isLeaf();
296
320
  const {
297
- loading
321
+ loading,
322
+ expanded
298
323
  } = this.props;
299
324
 
300
325
  if (loading) {
@@ -305,6 +330,8 @@ class TreeNode extends _react.PureComponent {
305
330
 
306
331
  if (showIcon) {
307
332
  return /*#__PURE__*/_react.default.createElement(_semiIcons.IconTreeTriangleDown, {
333
+ role: 'button',
334
+ "aria-label": "".concat(expanded ? 'Expand' : 'Collapse', " the tree item"),
308
335
  className: "".concat(prefixcls, "-expand-icon"),
309
336
  size: "small",
310
337
  onClick: this.onExpand
@@ -323,8 +350,11 @@ class TreeNode extends _react.PureComponent {
323
350
  } = this.props;
324
351
  const disabled = this.isDisabled();
325
352
  return /*#__PURE__*/_react.default.createElement("div", {
326
- onClick: this.onCheck
353
+ role: 'none',
354
+ onClick: this.onCheck,
355
+ onKeyPress: this.handleCheckEnterPress
327
356
  }, /*#__PURE__*/_react.default.createElement(_checkbox.Checkbox, {
357
+ "aria-label": 'Toggle the checked state of checkbox',
328
358
  indeterminate: halfChecked,
329
359
  checked: checked,
330
360
  disabled: Boolean(disabled)
@@ -377,7 +407,7 @@ class TreeNode extends _react.PureComponent {
377
407
  });
378
408
  return /*#__PURE__*/_react.default.createElement("ul", {
379
409
  className: wrapperCls
380
- }, /*#__PURE__*/_react.default.createElement("span", {
410
+ }, /*#__PURE__*/_react.default.createElement("li", {
381
411
  className: (0, _concat.default)(_context2 = "".concat(prefixcls, "-label ")).call(_context2, prefixcls, "-label-empty")
382
412
  }, emptyContent));
383
413
  } // eslint-disable-next-line max-lines-per-function
@@ -484,11 +514,21 @@ class TreeNode extends _react.PureComponent {
484
514
  ["".concat(prefixcls, "-drag-over-gap-top")]: !disabled && dragOverGapTop,
485
515
  ["".concat(prefixcls, "-drag-over-gap-bottom")]: !disabled && dragOverGapBottom
486
516
  });
517
+ const setsize = (0, _get2.default)(rest, ['data', 'children', 'length']);
518
+ const posinset = (0, _isString2.default)(rest.pos) ? Number(rest.pos.split('-')[level + 1]) + 1 : 1;
487
519
  return /*#__PURE__*/_react.default.createElement("li", (0, _assign.default)({
488
520
  className: nodeCls,
489
- role: "treenode",
521
+ role: "treeitem",
522
+ "aria-disabled": disabled,
523
+ "aria-checked": checked,
524
+ "aria-selected": selected,
525
+ "aria-setsize": setsize,
526
+ "aria-posinset": posinset,
527
+ "aria-expanded": expanded,
528
+ "aria-level": level + 1,
490
529
  "data-key": eventKey,
491
530
  onClick: this.onClick,
531
+ onKeyPress: this.handleliEnterPress,
492
532
  onContextMenu: this.onContextMenu,
493
533
  onDoubleClick: this.onDoubleClick,
494
534
  ref: this.setRef,
@@ -34,6 +34,11 @@ export declare type OverrideCommonProps = 'renderFullLabel' | 'renderLabel' | 'd
34
34
  * TreeSelectProps inherits some properties from BasicTreeSelectProps (from foundation) and TreeProps (from semi-ui-react).
35
35
  */
36
36
  export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideCommonProps | 'validateStatus' | 'searchRender'>, Pick<TreeProps, OverrideCommonProps> {
37
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
38
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
39
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
40
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
41
+ 'aria-required'?: React.AriaAttributes['aria-required'];
37
42
  motion?: Motion;
38
43
  mouseEnterDelay?: number;
39
44
  mouseLeaveDelay?: number;
@@ -45,6 +50,7 @@ export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideComm
45
50
  dropdownMatchSelectWidth?: boolean;
46
51
  dropdownStyle?: React.CSSProperties;
47
52
  insetLabel?: React.ReactNode;
53
+ insetLabelId?: string;
48
54
  maxTagCount?: number;
49
55
  motionExpand?: boolean;
50
56
  optionListStyle?: React.CSSProperties;
@@ -85,6 +91,11 @@ export interface TreeSelectState extends Omit<BasicTreeSelectInnerData, Override
85
91
  declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
86
92
  static contextType: React.Context<import("../configProvider/context").ContextValue>;
87
93
  static propTypes: {
94
+ 'aria-describedby': PropTypes.Requireable<string>;
95
+ 'aria-errormessage': PropTypes.Requireable<string>;
96
+ 'aria-invalid': PropTypes.Requireable<boolean>;
97
+ 'aria-labelledby': PropTypes.Requireable<string>;
98
+ 'aria-required': PropTypes.Requireable<boolean>;
88
99
  loadedKeys: PropTypes.Requireable<string[]>;
89
100
  loadData: PropTypes.Requireable<(...args: any[]) => any>;
90
101
  onLoad: PropTypes.Requireable<(...args: any[]) => any>;
@@ -136,6 +147,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
136
147
  suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
137
148
  prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
138
149
  insetLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
150
+ insetLabelId: PropTypes.Requireable<string>;
139
151
  zIndex: PropTypes.Requireable<number>;
140
152
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
141
153
  dropdownMatchSelectWidth: PropTypes.Requireable<boolean>;
@@ -156,6 +168,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
156
168
  optionListStyle: PropTypes.Requireable<object>;
157
169
  searchRender: PropTypes.Requireable<boolean | ((...args: any[]) => any)>;
158
170
  renderSelectedItem: PropTypes.Requireable<(...args: any[]) => any>;
171
+ 'aria-label': PropTypes.Requireable<string>;
159
172
  };
160
173
  static defaultProps: Partial<TreeSelectProps>;
161
174
  inputRef: React.RefObject<typeof Input>;
@@ -167,6 +180,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
167
180
  onNodeClick: any;
168
181
  onNodeDoubleClick: any;
169
182
  onMotionEnd: any;
183
+ treeSelectID: string;
170
184
  constructor(props: TreeSelectProps);
171
185
  static getDerivedStateFromProps(props: TreeSelectProps, prevState: TreeSelectState): Partial<TreeSelectState>;
172
186
  get adapter(): TreeSelectAdapter<TreeSelectProps, TreeSelectState>;
@@ -177,6 +191,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
177
191
  renderContent: () => JSX.Element;
178
192
  removeTag: (removedKey: TreeNodeData['key']) => void;
179
193
  handleClick: (e: React.MouseEvent) => void;
194
+ handleSelectionEnterPress: (e: React.KeyboardEvent<HTMLDivElement>) => void;
180
195
  showClearBtn: () => boolean;
181
196
  renderTagList: () => React.ReactNode[];
182
197
  /**
@@ -189,6 +204,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
189
204
  renderSingleTriggerSearch: () => JSX.Element;
190
205
  renderSelectContent: () => JSX.Element;
191
206
  handleClear: (e: React.MouseEvent) => void;
207
+ handleClearEnterPress: (e: React.KeyboardEvent<HTMLDivElement>) => void;
192
208
  handleMouseOver: (e: React.MouseEvent) => void;
193
209
  handleMouseLeave: (e: React.MouseEvent) => void;
194
210
  search: (value: string) => void;
@@ -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,10 +256,13 @@ 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
262
  className: closeCls
251
263
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, {
264
+ tabIndex: 0,
265
+ role: "button",
252
266
  size: "extra-small",
253
267
  onClick: e => this.onRemove(e)
254
268
  })), this.renderPicValidateMsg());
@@ -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
+ }