@douyinfe/semi-ui 2.2.1 → 2.3.1

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 (445) 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/__test__/datePicker.test.js +93 -0
  34. package/datePicker/_story/datePicker.stories.js +84 -1
  35. package/datePicker/datePicker.tsx +21 -0
  36. package/datePicker/monthsGrid.tsx +2 -1
  37. package/dist/css/semi.css +8 -3
  38. package/dist/css/semi.min.css +1 -1
  39. package/dist/umd/semi-ui.js +2490 -1255
  40. package/dist/umd/semi-ui.js.map +1 -1
  41. package/dist/umd/semi-ui.min.js +1 -1
  42. package/dist/umd/semi-ui.min.js.map +1 -1
  43. package/dropdown/dropdownItem.tsx +1 -1
  44. package/dropdown/dropdownMenu.tsx +1 -1
  45. package/dropdown/index.tsx +11 -3
  46. package/empty/index.tsx +4 -4
  47. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  48. package/form/_story/Validate/validateDemo.jsx +1 -1
  49. package/form/_story/demo.jsx +12 -3
  50. package/form/_story/form.stories.js +0 -7
  51. package/form/baseForm.tsx +2 -0
  52. package/form/errorMessage.tsx +13 -2
  53. package/form/hoc/withField.tsx +37 -8
  54. package/form/index.tsx +0 -2
  55. package/form/interface.ts +2 -0
  56. package/form/label.tsx +4 -2
  57. package/input/index.tsx +49 -4
  58. package/input/inputGroup.tsx +9 -4
  59. package/input/textarea.tsx +25 -6
  60. package/inputNumber/_story/inputNumber.stories.js +12 -0
  61. package/inputNumber/index.tsx +35 -3
  62. package/layout/Sider.tsx +6 -2
  63. package/layout/index.tsx +4 -3
  64. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  65. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  66. package/lib/cjs/_utils/index.d.ts +1 -0
  67. package/lib/cjs/_utils/index.js +6 -1
  68. package/lib/cjs/anchor/index.d.ts +2 -0
  69. package/lib/cjs/anchor/index.js +6 -1
  70. package/lib/cjs/anchor/link.d.ts +4 -1
  71. package/lib/cjs/anchor/link.js +39 -5
  72. package/lib/cjs/autoComplete/index.d.ts +17 -0
  73. package/lib/cjs/autoComplete/index.js +21 -2
  74. package/lib/cjs/avatar/index.d.ts +4 -3
  75. package/lib/cjs/avatar/index.js +15 -11
  76. package/lib/cjs/banner/index.js +4 -2
  77. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  78. package/lib/cjs/breadcrumb/index.js +10 -4
  79. package/lib/cjs/breadcrumb/item.js +2 -2
  80. package/lib/cjs/button/Button.d.ts +2 -0
  81. package/lib/cjs/button/Button.js +4 -2
  82. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  83. package/lib/cjs/button/buttonGroup.js +8 -4
  84. package/lib/cjs/button/index.d.ts +1 -0
  85. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  86. package/lib/cjs/button/splitButtonGroup.js +5 -2
  87. package/lib/cjs/card/index.d.ts +3 -0
  88. package/lib/cjs/card/index.js +3 -1
  89. package/lib/cjs/cascader/index.d.ts +14 -0
  90. package/lib/cjs/cascader/index.js +35 -7
  91. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  92. package/lib/cjs/checkbox/checkbox.js +51 -17
  93. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  94. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  95. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  96. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  97. package/lib/cjs/collapse/item.d.ts +2 -1
  98. package/lib/cjs/collapse/item.js +12 -2
  99. package/lib/cjs/collapsible/index.d.ts +1 -0
  100. package/lib/cjs/collapsible/index.js +4 -2
  101. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  102. package/lib/cjs/datePicker/datePicker.js +18 -3
  103. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -0
  104. package/lib/cjs/datePicker/monthsGrid.js +2 -1
  105. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  106. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  107. package/lib/cjs/dropdown/index.d.ts +10 -3
  108. package/lib/cjs/form/baseForm.d.ts +9 -0
  109. package/lib/cjs/form/baseForm.js +3 -1
  110. package/lib/cjs/form/errorMessage.d.ts +4 -0
  111. package/lib/cjs/form/errorMessage.js +21 -3
  112. package/lib/cjs/form/field.d.ts +7 -0
  113. package/lib/cjs/form/hoc/withField.js +49 -16
  114. package/lib/cjs/form/index.d.ts +0 -1
  115. package/lib/cjs/form/interface.d.ts +2 -0
  116. package/lib/cjs/form/label.d.ts +2 -0
  117. package/lib/cjs/form/label.js +5 -2
  118. package/lib/cjs/input/index.d.ts +16 -0
  119. package/lib/cjs/input/index.js +51 -15
  120. package/lib/cjs/input/inputGroup.d.ts +2 -1
  121. package/lib/cjs/input/inputGroup.js +11 -1
  122. package/lib/cjs/input/textarea.js +12 -1
  123. package/lib/cjs/inputNumber/index.d.ts +21 -12
  124. package/lib/cjs/inputNumber/index.js +40 -5
  125. package/lib/cjs/layout/Sider.d.ts +4 -0
  126. package/lib/cjs/layout/Sider.js +4 -1
  127. package/lib/cjs/layout/index.js +2 -0
  128. package/lib/cjs/list/index.d.ts +4 -4
  129. package/lib/cjs/list/item.js +0 -1
  130. package/lib/cjs/modal/Modal.js +2 -0
  131. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  132. package/lib/cjs/modal/ModalContent.js +47 -5
  133. package/lib/cjs/navigation/Item.d.ts +4 -2
  134. package/lib/cjs/navigation/Item.js +25 -5
  135. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  136. package/lib/cjs/navigation/SubNav.js +8 -1
  137. package/lib/cjs/navigation/index.js +2 -0
  138. package/lib/cjs/notification/notice.d.ts +1 -1
  139. package/lib/cjs/notification/notice.js +32 -22
  140. package/lib/cjs/pagination/index.js +16 -6
  141. package/lib/cjs/popover/index.js +7 -3
  142. package/lib/cjs/progress/index.d.ts +8 -0
  143. package/lib/cjs/progress/index.js +42 -9
  144. package/lib/cjs/radio/radio.d.ts +6 -1
  145. package/lib/cjs/radio/radio.js +17 -5
  146. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  147. package/lib/cjs/radio/radioGroup.js +18 -3
  148. package/lib/cjs/radio/radioInner.d.ts +6 -1
  149. package/lib/cjs/radio/radioInner.js +11 -3
  150. package/lib/cjs/rating/index.d.ts +14 -0
  151. package/lib/cjs/rating/index.js +14 -3
  152. package/lib/cjs/rating/item.d.ts +2 -0
  153. package/lib/cjs/rating/item.js +6 -1
  154. package/lib/cjs/select/index.d.ts +16 -0
  155. package/lib/cjs/select/index.js +65 -19
  156. package/lib/cjs/select/option.js +28 -22
  157. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  158. package/lib/cjs/sideSheet/SideSheetContent.js +4 -1
  159. package/lib/cjs/sideSheet/index.d.ts +1 -0
  160. package/lib/cjs/sideSheet/index.js +2 -1
  161. package/lib/cjs/slider/index.d.ts +2 -1
  162. package/lib/cjs/slider/index.js +64 -17
  163. package/lib/cjs/spin/icon.js +3 -4
  164. package/lib/cjs/steps/basicStep.d.ts +3 -0
  165. package/lib/cjs/steps/basicStep.js +23 -25
  166. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  167. package/lib/cjs/steps/basicSteps.js +2 -1
  168. package/lib/cjs/steps/fillStep.d.ts +3 -0
  169. package/lib/cjs/steps/fillStep.js +19 -4
  170. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  171. package/lib/cjs/steps/fillSteps.js +2 -1
  172. package/lib/cjs/steps/navStep.d.ts +3 -0
  173. package/lib/cjs/steps/navStep.js +22 -25
  174. package/lib/cjs/steps/navSteps.d.ts +1 -0
  175. package/lib/cjs/steps/navSteps.js +2 -1
  176. package/lib/cjs/switch/index.d.ts +12 -0
  177. package/lib/cjs/switch/index.js +19 -4
  178. package/lib/cjs/table/Body/BaseRow.js +35 -3
  179. package/lib/cjs/table/Body/index.js +9 -1
  180. package/lib/cjs/table/ColumnFilter.js +4 -0
  181. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  182. package/lib/cjs/table/ColumnSelection.js +6 -2
  183. package/lib/cjs/table/ColumnSorter.js +19 -3
  184. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  185. package/lib/cjs/table/Table.d.ts +2 -0
  186. package/lib/cjs/table/Table.js +31 -15
  187. package/lib/cjs/table/TableCell.d.ts +2 -0
  188. package/lib/cjs/table/TableCell.js +6 -2
  189. package/lib/cjs/table/TableHeaderRow.js +8 -2
  190. package/lib/cjs/tabs/TabBar.js +11 -3
  191. package/lib/cjs/tabs/TabPane.js +3 -1
  192. package/lib/cjs/tabs/index.js +0 -1
  193. package/lib/cjs/tagInput/index.d.ts +4 -1
  194. package/lib/cjs/tagInput/index.js +29 -3
  195. package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
  196. package/lib/cjs/timePicker/TimePicker.js +9 -1
  197. package/lib/cjs/timePicker/index.d.ts +6 -0
  198. package/lib/cjs/timeline/index.d.ts +1 -1
  199. package/lib/cjs/timeline/index.js +1 -0
  200. package/lib/cjs/timeline/item.js +4 -2
  201. package/lib/cjs/toast/toast.js +2 -0
  202. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  203. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  204. package/lib/cjs/tooltip/index.d.ts +16 -12
  205. package/lib/cjs/tooltip/index.js +55 -39
  206. package/lib/cjs/transfer/index.d.ts +1 -1
  207. package/lib/cjs/transfer/index.js +35 -17
  208. package/lib/cjs/tree/index.d.ts +1 -0
  209. package/lib/cjs/tree/index.js +15 -6
  210. package/lib/cjs/tree/treeNode.d.ts +12 -4
  211. package/lib/cjs/tree/treeNode.js +44 -4
  212. package/lib/cjs/treeSelect/index.d.ts +16 -0
  213. package/lib/cjs/treeSelect/index.js +60 -12
  214. package/lib/cjs/typography/base.js +18 -7
  215. package/lib/cjs/typography/copyable.js +6 -1
  216. package/lib/cjs/upload/fileCard.js +26 -7
  217. package/lib/cjs/upload/index.js +19 -4
  218. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  219. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  220. package/lib/es/_utils/index.d.ts +1 -0
  221. package/lib/es/_utils/index.js +4 -1
  222. package/lib/es/anchor/index.d.ts +2 -0
  223. package/lib/es/anchor/index.js +6 -1
  224. package/lib/es/anchor/link.d.ts +4 -1
  225. package/lib/es/anchor/link.js +38 -5
  226. package/lib/es/autoComplete/index.d.ts +17 -0
  227. package/lib/es/autoComplete/index.js +21 -2
  228. package/lib/es/avatar/index.d.ts +4 -3
  229. package/lib/es/avatar/index.js +15 -11
  230. package/lib/es/banner/index.js +4 -2
  231. package/lib/es/breadcrumb/index.d.ts +3 -0
  232. package/lib/es/breadcrumb/index.js +10 -4
  233. package/lib/es/breadcrumb/item.js +2 -2
  234. package/lib/es/button/Button.d.ts +2 -0
  235. package/lib/es/button/Button.js +4 -2
  236. package/lib/es/button/buttonGroup.d.ts +3 -0
  237. package/lib/es/button/buttonGroup.js +8 -4
  238. package/lib/es/button/index.d.ts +1 -0
  239. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  240. package/lib/es/button/splitButtonGroup.js +5 -2
  241. package/lib/es/card/index.d.ts +3 -0
  242. package/lib/es/card/index.js +3 -1
  243. package/lib/es/cascader/index.d.ts +14 -0
  244. package/lib/es/cascader/index.js +35 -7
  245. package/lib/es/checkbox/checkbox.d.ts +21 -1
  246. package/lib/es/checkbox/checkbox.js +50 -17
  247. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  248. package/lib/es/checkbox/checkboxGroup.js +18 -5
  249. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  250. package/lib/es/checkbox/checkboxInner.js +20 -3
  251. package/lib/es/collapse/item.d.ts +2 -1
  252. package/lib/es/collapse/item.js +11 -2
  253. package/lib/es/collapsible/index.d.ts +1 -0
  254. package/lib/es/collapsible/index.js +4 -2
  255. package/lib/es/datePicker/datePicker.d.ts +12 -0
  256. package/lib/es/datePicker/datePicker.js +18 -3
  257. package/lib/es/datePicker/monthsGrid.d.ts +1 -0
  258. package/lib/es/datePicker/monthsGrid.js +2 -1
  259. package/lib/es/dropdown/dropdownItem.js +3 -1
  260. package/lib/es/dropdown/dropdownMenu.js +4 -1
  261. package/lib/es/dropdown/index.d.ts +10 -3
  262. package/lib/es/form/baseForm.d.ts +9 -0
  263. package/lib/es/form/baseForm.js +3 -1
  264. package/lib/es/form/errorMessage.d.ts +4 -0
  265. package/lib/es/form/errorMessage.js +21 -3
  266. package/lib/es/form/field.d.ts +7 -0
  267. package/lib/es/form/hoc/withField.js +48 -15
  268. package/lib/es/form/index.d.ts +0 -1
  269. package/lib/es/form/index.js +0 -1
  270. package/lib/es/form/interface.d.ts +2 -0
  271. package/lib/es/form/label.d.ts +2 -0
  272. package/lib/es/form/label.js +5 -2
  273. package/lib/es/input/index.d.ts +16 -0
  274. package/lib/es/input/index.js +51 -15
  275. package/lib/es/input/inputGroup.d.ts +2 -1
  276. package/lib/es/input/inputGroup.js +11 -1
  277. package/lib/es/input/textarea.js +12 -1
  278. package/lib/es/inputNumber/index.d.ts +21 -12
  279. package/lib/es/inputNumber/index.js +41 -5
  280. package/lib/es/layout/Sider.d.ts +4 -0
  281. package/lib/es/layout/Sider.js +4 -1
  282. package/lib/es/layout/index.js +2 -0
  283. package/lib/es/list/index.d.ts +4 -4
  284. package/lib/es/list/item.js +0 -1
  285. package/lib/es/modal/Modal.js +2 -0
  286. package/lib/es/modal/ModalContent.d.ts +3 -1
  287. package/lib/es/modal/ModalContent.js +46 -5
  288. package/lib/es/navigation/Item.d.ts +4 -2
  289. package/lib/es/navigation/Item.js +25 -5
  290. package/lib/es/navigation/SubNav.d.ts +4 -2
  291. package/lib/es/navigation/SubNav.js +8 -1
  292. package/lib/es/navigation/index.js +2 -0
  293. package/lib/es/notification/notice.d.ts +1 -1
  294. package/lib/es/notification/notice.js +33 -24
  295. package/lib/es/pagination/index.js +16 -6
  296. package/lib/es/popover/index.js +7 -3
  297. package/lib/es/progress/index.d.ts +8 -0
  298. package/lib/es/progress/index.js +42 -9
  299. package/lib/es/radio/radio.d.ts +6 -1
  300. package/lib/es/radio/radio.js +16 -5
  301. package/lib/es/radio/radioGroup.d.ts +16 -1
  302. package/lib/es/radio/radioGroup.js +18 -3
  303. package/lib/es/radio/radioInner.d.ts +6 -1
  304. package/lib/es/radio/radioInner.js +11 -3
  305. package/lib/es/rating/index.d.ts +14 -0
  306. package/lib/es/rating/index.js +14 -3
  307. package/lib/es/rating/item.d.ts +2 -0
  308. package/lib/es/rating/item.js +6 -1
  309. package/lib/es/select/index.d.ts +16 -0
  310. package/lib/es/select/index.js +63 -17
  311. package/lib/es/select/option.js +28 -22
  312. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  313. package/lib/es/sideSheet/SideSheetContent.js +4 -1
  314. package/lib/es/sideSheet/index.d.ts +1 -0
  315. package/lib/es/sideSheet/index.js +2 -1
  316. package/lib/es/slider/index.d.ts +2 -1
  317. package/lib/es/slider/index.js +63 -16
  318. package/lib/es/spin/icon.js +3 -4
  319. package/lib/es/steps/basicStep.d.ts +3 -0
  320. package/lib/es/steps/basicStep.js +23 -23
  321. package/lib/es/steps/basicSteps.d.ts +1 -0
  322. package/lib/es/steps/basicSteps.js +2 -1
  323. package/lib/es/steps/fillStep.d.ts +3 -0
  324. package/lib/es/steps/fillStep.js +19 -4
  325. package/lib/es/steps/fillSteps.d.ts +1 -0
  326. package/lib/es/steps/fillSteps.js +2 -1
  327. package/lib/es/steps/navStep.d.ts +3 -0
  328. package/lib/es/steps/navStep.js +22 -23
  329. package/lib/es/steps/navSteps.d.ts +1 -0
  330. package/lib/es/steps/navSteps.js +2 -1
  331. package/lib/es/switch/index.d.ts +12 -0
  332. package/lib/es/switch/index.js +19 -4
  333. package/lib/es/table/Body/BaseRow.js +35 -3
  334. package/lib/es/table/Body/index.js +9 -2
  335. package/lib/es/table/ColumnFilter.js +4 -0
  336. package/lib/es/table/ColumnSelection.d.ts +3 -0
  337. package/lib/es/table/ColumnSelection.js +6 -2
  338. package/lib/es/table/ColumnSorter.js +17 -3
  339. package/lib/es/table/CustomExpandIcon.js +6 -1
  340. package/lib/es/table/Table.d.ts +2 -0
  341. package/lib/es/table/Table.js +31 -15
  342. package/lib/es/table/TableCell.d.ts +2 -0
  343. package/lib/es/table/TableCell.js +6 -2
  344. package/lib/es/table/TableHeaderRow.js +8 -2
  345. package/lib/es/tabs/TabBar.js +11 -3
  346. package/lib/es/tabs/TabPane.js +3 -1
  347. package/lib/es/tabs/index.js +0 -1
  348. package/lib/es/tagInput/index.d.ts +4 -1
  349. package/lib/es/tagInput/index.js +29 -3
  350. package/lib/es/timePicker/TimePicker.d.ts +12 -0
  351. package/lib/es/timePicker/TimePicker.js +9 -1
  352. package/lib/es/timePicker/index.d.ts +6 -0
  353. package/lib/es/timeline/index.d.ts +1 -1
  354. package/lib/es/timeline/index.js +1 -0
  355. package/lib/es/timeline/item.js +4 -2
  356. package/lib/es/toast/toast.js +2 -0
  357. package/lib/es/tooltip/TriangleArrow.js +1 -0
  358. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  359. package/lib/es/tooltip/index.d.ts +16 -12
  360. package/lib/es/tooltip/index.js +53 -39
  361. package/lib/es/transfer/index.d.ts +1 -1
  362. package/lib/es/transfer/index.js +35 -17
  363. package/lib/es/tree/index.d.ts +1 -0
  364. package/lib/es/tree/index.js +15 -6
  365. package/lib/es/tree/treeNode.d.ts +12 -4
  366. package/lib/es/tree/treeNode.js +44 -4
  367. package/lib/es/treeSelect/index.d.ts +16 -0
  368. package/lib/es/treeSelect/index.js +57 -10
  369. package/lib/es/typography/base.js +17 -7
  370. package/lib/es/typography/copyable.js +5 -1
  371. package/lib/es/upload/fileCard.js +26 -7
  372. package/lib/es/upload/index.js +19 -4
  373. package/list/index.tsx +5 -5
  374. package/list/item.tsx +0 -1
  375. package/modal/Modal.tsx +2 -0
  376. package/modal/ModalContent.tsx +35 -5
  377. package/navigation/Item.tsx +15 -0
  378. package/navigation/SubNav.tsx +13 -1
  379. package/navigation/index.tsx +1 -1
  380. package/notification/notice.tsx +19 -14
  381. package/package.json +8 -8
  382. package/pagination/index.tsx +9 -5
  383. package/popover/index.tsx +5 -0
  384. package/progress/_story/progress.stories.js +18 -18
  385. package/progress/index.tsx +58 -20
  386. package/radio/radio.tsx +12 -2
  387. package/radio/radioGroup.tsx +29 -3
  388. package/radio/radioInner.tsx +10 -1
  389. package/rating/index.tsx +19 -2
  390. package/rating/item.tsx +6 -0
  391. package/select/__test__/select.test.js +45 -0
  392. package/select/_story/select.stories.js +29 -0
  393. package/select/index.tsx +52 -4
  394. package/select/option.tsx +3 -0
  395. package/sideSheet/SideSheetContent.tsx +6 -4
  396. package/sideSheet/index.tsx +3 -2
  397. package/slider/__test__/slider.test.js +9 -0
  398. package/slider/_story/slider.stories.js +1 -1
  399. package/slider/index.tsx +44 -7
  400. package/spin/icon.tsx +4 -3
  401. package/steps/basicStep.tsx +15 -4
  402. package/steps/basicSteps.tsx +3 -2
  403. package/steps/fillStep.tsx +27 -12
  404. package/steps/fillSteps.tsx +2 -0
  405. package/steps/navStep.tsx +15 -4
  406. package/steps/navSteps.tsx +3 -2
  407. package/switch/_story/switch.stories.js +20 -19
  408. package/switch/_story/switch.stories.tsx +13 -13
  409. package/switch/index.tsx +23 -5
  410. package/table/Body/BaseRow.tsx +25 -1
  411. package/table/Body/index.tsx +7 -2
  412. package/table/ColumnFilter.tsx +7 -1
  413. package/table/ColumnSelection.tsx +4 -1
  414. package/table/ColumnSorter.tsx +18 -1
  415. package/table/CustomExpandIcon.tsx +5 -0
  416. package/table/Table.tsx +26 -13
  417. package/table/TableCell.tsx +11 -1
  418. package/table/TableHeaderRow.tsx +16 -2
  419. package/table/__test__/table.test.js +46 -0
  420. package/tabs/TabBar.tsx +8 -5
  421. package/tabs/TabPane.tsx +3 -1
  422. package/tabs/index.tsx +0 -1
  423. package/tagInput/__test__/tagInput.test.js +46 -0
  424. package/tagInput/_story/tagInput.stories.js +2 -2
  425. package/tagInput/index.tsx +31 -8
  426. package/timePicker/TimePicker.tsx +14 -1
  427. package/timeline/_story/timeline.stories.js +1 -1
  428. package/timeline/index.tsx +2 -2
  429. package/timeline/item.tsx +2 -1
  430. package/toast/toast.tsx +2 -0
  431. package/tooltip/TriangleArrow.tsx +1 -1
  432. package/tooltip/TriangleArrowVertical.tsx +1 -1
  433. package/tooltip/_story/tooltip.stories.js +562 -514
  434. package/tooltip/index.tsx +51 -33
  435. package/transfer/index.tsx +32 -28
  436. package/tree/_story/tree.stories.js +3 -3
  437. package/tree/index.tsx +10 -2
  438. package/tree/treeNode.tsx +46 -10
  439. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  440. package/treeSelect/_story/treeSelect.stories.js +12 -0
  441. package/treeSelect/index.tsx +58 -7
  442. package/typography/base.tsx +7 -1
  443. package/typography/copyable.tsx +10 -1
  444. package/upload/fileCard.tsx +14 -16
  445. package/upload/index.tsx +10 -6
@@ -94,6 +94,7 @@ class Timeline extends PureComponent {
94
94
 
95
95
  const items = childrenList || this.addClassName(children);
96
96
  return /*#__PURE__*/React.createElement("ul", {
97
+ "aria-label": this.props['aria-label'],
97
98
  style: style,
98
99
  className: classString
99
100
  }, items);
@@ -38,9 +38,11 @@ export default class Item extends PureComponent {
38
38
  style: style,
39
39
  onClick: onClick
40
40
  }, /*#__PURE__*/React.createElement("div", {
41
- className: "".concat(prefixCls, "-tail")
41
+ className: "".concat(prefixCls, "-tail"),
42
+ "aria-hidden": true
42
43
  }), /*#__PURE__*/React.createElement("div", _Object$assign({
43
- className: dotCls
44
+ className: dotCls,
45
+ "aria-hidden": true
44
46
  }, dotStyle), dot), /*#__PURE__*/React.createElement("div", {
45
47
  className: "".concat(prefixCls, "-content")
46
48
  }, children, extra && /*#__PURE__*/React.createElement("div", {
@@ -111,6 +111,8 @@ class Toast extends BaseComponent {
111
111
  const btnTheme = 'borderless';
112
112
  const btnSize = 'small';
113
113
  return /*#__PURE__*/React.createElement("div", {
114
+ role: 'alert',
115
+ "aria-label": "".concat(type ? type : 'default', " type"),
114
116
  className: toastCls,
115
117
  style: style,
116
118
  onMouseEnter: this.clearCloseTimer,
@@ -23,6 +23,7 @@ const TriangleArrow = props => {
23
23
  restProps = __rest(props, ["className", "style"]);
24
24
 
25
25
  return /*#__PURE__*/React.createElement("svg", _Object$assign({
26
+ "aria-hidden": true,
26
27
  className: className,
27
28
  style: style
28
29
  }, restProps, {
@@ -23,6 +23,7 @@ const TriangleArrowVertical = props => {
23
23
  restProps = __rest(props, ["className", "style"]);
24
24
 
25
25
  return /*#__PURE__*/React.createElement("svg", _Object$assign({
26
+ "aria-hidden": true,
26
27
  className: className,
27
28
  style: style
28
29
  }, restProps, {
@@ -36,6 +36,7 @@ export interface TooltipProps extends BaseProps {
36
36
  showArrow?: boolean | React.ReactNode;
37
37
  zIndex?: number;
38
38
  rePosKey?: string | number;
39
+ role?: string;
39
40
  arrowBounding?: ArrowBounding;
40
41
  transformFromCenter?: boolean;
41
42
  arrowPointAtCenter?: boolean;
@@ -57,6 +58,8 @@ interface TooltipState {
57
58
  isInsert: boolean;
58
59
  placement: Position;
59
60
  transitionStyle: Record<string, any>;
61
+ isPositionUpdated: boolean;
62
+ id: string;
60
63
  }
61
64
  export default class Tooltip extends BaseComponent<TooltipProps, TooltipState> {
62
65
  static contextType: React.Context<import("../configProvider/context").ContextValue>;
@@ -92,30 +95,32 @@ export default class Tooltip extends BaseComponent<TooltipProps, TooltipState> {
92
95
  transformFromCenter: PropTypes.Requireable<boolean>;
93
96
  arrowPointAtCenter: PropTypes.Requireable<boolean>;
94
97
  stopPropagation: PropTypes.Requireable<boolean>;
98
+ role: PropTypes.Requireable<string>;
95
99
  wrapWhenSpecial: PropTypes.Requireable<boolean>;
96
100
  };
97
101
  static defaultProps: {
98
- transformFromCenter: boolean;
102
+ arrowBounding: {
103
+ readonly offsetX: 0;
104
+ readonly offsetY: 2;
105
+ readonly width: 24;
106
+ readonly height: 7;
107
+ };
108
+ autoAdjustOverflow: boolean;
99
109
  arrowPointAtCenter: boolean;
100
- wrapWhenSpecial: boolean;
101
- motion: boolean;
102
- zIndex: 1060;
103
110
  trigger: string;
111
+ transformFromCenter: boolean;
104
112
  position: string;
105
113
  prefixCls: "semi-tooltip";
106
- autoAdjustOverflow: boolean;
114
+ role: string;
107
115
  mouseEnterDelay: 50;
108
116
  mouseLeaveDelay: 50;
117
+ motion: boolean;
109
118
  onVisibleChange: (...args: any[]) => void;
110
119
  onClickOutSide: (...args: any[]) => void;
111
120
  spacing: 8;
112
121
  showArrow: boolean;
113
- arrowBounding: {
114
- readonly offsetX: 0;
115
- readonly offsetY: 2;
116
- readonly width: 24;
117
- readonly height: 7;
118
- };
122
+ wrapWhenSpecial: boolean;
123
+ zIndex: 1060;
119
124
  };
120
125
  eventManager: Event;
121
126
  triggerEl: React.RefObject<unknown>;
@@ -135,7 +140,6 @@ export default class Tooltip extends BaseComponent<TooltipProps, TooltipState> {
135
140
  componentDidMount(): void;
136
141
  componentWillUnmount(): void;
137
142
  isSpecial: (elem: React.ReactNode | HTMLElement | any) => boolean | "disabled" | "loading";
138
- willEnter: () => void;
139
143
  didLeave: () => void;
140
144
  /** for transition - end */
141
145
  rePosition(): any;
@@ -8,6 +8,7 @@ import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/inst
8
8
  import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
9
9
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
10
10
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
11
+ import _setTimeout from "@babel/runtime-corejs3/core-js-stable/set-timeout";
11
12
 
12
13
  var __rest = this && this.__rest || function (s, e) {
13
14
  var t = {};
@@ -32,6 +33,7 @@ import Event from '@douyinfe/semi-foundation/lib/es/utils/Event';
32
33
  import { convertDOMRectToObject } from '@douyinfe/semi-foundation/lib/es/utils/dom';
33
34
  import TooltipFoundation from '@douyinfe/semi-foundation/lib/es/tooltip/foundation';
34
35
  import { strings, cssClasses, numbers } from '@douyinfe/semi-foundation/lib/es/tooltip/constants';
36
+ import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
35
37
  import '@douyinfe/semi-foundation/lib/es/tooltip/tooltip.css';
36
38
  import BaseComponent from '../_base/baseComponent';
37
39
  import { isHTMLElement } from '../_base/reactUtils';
@@ -79,18 +81,11 @@ export default class Tooltip extends BaseComponent {
79
81
  }
80
82
 
81
83
  return false;
82
- };
84
+ }; // willEnter = () => {
85
+ // this.foundation.calcPosition();
86
+ // this.setState({ visible: true });
87
+ // };
83
88
 
84
- this.willEnter = () => {
85
- this.foundation.calcPosition();
86
- /**
87
- * Dangerous: remove setState in motion fix #1379
88
- * because togglePortalVisible callback function will use visible state to notifyVisibleChange
89
- * if visible state is old value, then notifyVisibleChange function will not be called
90
- * we should ensure that after calling togglePortalVisible, callback function can get right visible value
91
- */
92
- // this.setState({ visible: true });
93
- };
94
89
 
95
90
  this.didLeave = () => {
96
91
  this.adapter.unregisterClickOutsideHandler();
@@ -148,7 +143,9 @@ export default class Tooltip extends BaseComponent {
148
143
  visible,
149
144
  portalEventSet,
150
145
  placement,
151
- transitionState
146
+ transitionState,
147
+ id,
148
+ isPositionUpdated
152
149
  } = this.state;
153
150
  const {
154
151
  prefixCls,
@@ -156,6 +153,7 @@ export default class Tooltip extends BaseComponent {
156
153
  showArrow,
157
154
  style,
158
155
  motion,
156
+ role,
159
157
  zIndex
160
158
  } = this.props;
161
159
  const {
@@ -174,9 +172,8 @@ export default class Tooltip extends BaseComponent {
174
172
 
175
173
  const transformOrigin = _get(containerStyle, 'transformOrigin');
176
174
 
177
- const inner = motion ? /*#__PURE__*/React.createElement(TooltipTransition, {
175
+ const inner = motion && isPositionUpdated ? /*#__PURE__*/React.createElement(TooltipTransition, {
178
176
  position: placement,
179
- willEnter: this.willEnter,
180
177
  didLeave: this.didLeave,
181
178
  motion: motion
182
179
  }, transitionState === 'enter' ? _ref => {
@@ -187,13 +184,13 @@ export default class Tooltip extends BaseComponent {
187
184
  } = _ref;
188
185
  return /*#__PURE__*/React.createElement("div", _Object$assign({
189
186
  className: classNames(className, animateCls),
190
- style: _Object$assign(_Object$assign(_Object$assign({
191
- visibility: 'visible'
192
- }, animateStyle), {
187
+ style: _Object$assign(_Object$assign(_Object$assign({}, animateStyle), {
193
188
  transformOrigin
194
189
  }), style)
195
190
  }, portalEventSet, animateEvents, {
196
- "x-placement": placement
191
+ role: role,
192
+ "x-placement": placement,
193
+ id: id
197
194
  }), content, icon);
198
195
  } : null) : /*#__PURE__*/React.createElement("div", _Object$assign({
199
196
  className: className
@@ -269,7 +266,10 @@ export default class Tooltip extends BaseComponent {
269
266
  },
270
267
  isInsert: false,
271
268
  placement: props.position || 'top',
272
- transitionStyle: {}
269
+ transitionStyle: {},
270
+ isPositionUpdated: false,
271
+ id: getUuidShort() // auto generate id, will be used by children.aria-describedby & content.id, improve a11y
272
+
273
273
  };
274
274
  this.foundation = new TooltipFoundation(this.adapter);
275
275
  this.eventManager = new Event();
@@ -307,18 +307,16 @@ export default class Tooltip extends BaseComponent {
307
307
  transitionState: 'enter',
308
308
  containerStyle: _Object$assign(_Object$assign({}, this.state.containerStyle), containerStyle)
309
309
  }, () => {
310
- /**
311
- * Dangerous: remove setTimeout from here fix #1301
312
- * setTimeout may emit portalInserted event after hiding portal
313
- * Hiding portal will remove portalInserted event listener(normal process)
314
- * then portal can't hide because _togglePortalVisible(false) will found isVisible=false and nowVisible=false(bug here)
315
- */
316
- this.eventManager.emit('portalInserted');
310
+ _setTimeout(() => {
311
+ // waiting child component mounted
312
+ this.eventManager.emit('portalInserted');
313
+ }, 0);
317
314
  });
318
315
  },
319
316
  removePortal: () => {
320
317
  this.setState({
321
- isInsert: false
318
+ isInsert: false,
319
+ isPositionUpdated: false
322
320
  });
323
321
  },
324
322
  getEventName: () => ({
@@ -399,7 +397,8 @@ export default class Tooltip extends BaseComponent {
399
397
 
400
398
  this.setState({
401
399
  containerStyle: _Object$assign(_Object$assign({}, this.state.containerStyle), style),
402
- placement: position
400
+ placement: position,
401
+ isPositionUpdated: true
403
402
  }, () => {
404
403
  this.eventManager.emit('positionUpdated');
405
404
  });
@@ -557,10 +556,13 @@ export default class Tooltip extends BaseComponent {
557
556
  render() {
558
557
  const {
559
558
  isInsert,
560
- triggerEventSet
559
+ triggerEventSet,
560
+ visible,
561
+ id
561
562
  } = this.state;
562
563
  const {
563
- wrapWhenSpecial
564
+ wrapWhenSpecial,
565
+ role
564
566
  } = this.props;
565
567
  let {
566
568
  children
@@ -589,13 +591,23 @@ export default class Tooltip extends BaseComponent {
589
591
  children = this.wrapSpan(children);
590
592
  this.isWrapped = true;
591
593
  }
594
+ } // eslint-disable-next-line prefer-const
595
+
596
+
597
+ let ariaAttribute = {}; // Take effect when used by Popover component
598
+
599
+ if (role === 'dialog') {
600
+ ariaAttribute['aria-expanded'] = visible ? 'true' : 'false';
601
+ ariaAttribute['aria-haspopup'] = 'dialog';
602
+ ariaAttribute['aria-controls'] = id;
603
+ } else {
604
+ ariaAttribute['aria-describedby'] = id;
592
605
  } // The incoming children is a single valid element, otherwise wrap a layer with span
593
606
 
594
607
 
595
- const newChild = /*#__PURE__*/React.cloneElement(children, _Object$assign(_Object$assign(_Object$assign({}, children.props), this.mergeEvents(children.props, triggerEventSet)), {
608
+ const newChild = /*#__PURE__*/React.cloneElement(children, _Object$assign(_Object$assign(_Object$assign(_Object$assign({}, ariaAttribute), children.props), this.mergeEvents(children.props, triggerEventSet)), {
596
609
  style: _Object$assign(_Object$assign({}, _get(children, 'props.style')), extraStyle),
597
- className: classNames(_get(children, 'props.className') // `${prefixCls}-trigger`
598
- ),
610
+ className: classNames(_get(children, 'props.className')),
599
611
  // to maintain refs with callback
600
612
  ref: node => {
601
613
  // Keep your own reference
@@ -648,24 +660,26 @@ Tooltip.propTypes = {
648
660
  arrowPointAtCenter: PropTypes.bool,
649
661
  stopPropagation: PropTypes.bool,
650
662
  // private
663
+ role: PropTypes.string,
651
664
  wrapWhenSpecial: PropTypes.bool // when trigger has special status such as "disabled" or "loading", wrap span
652
665
 
653
666
  };
654
667
  Tooltip.defaultProps = {
655
- transformFromCenter: true,
668
+ arrowBounding: numbers.ARROW_BOUNDING,
669
+ autoAdjustOverflow: true,
656
670
  arrowPointAtCenter: true,
657
- wrapWhenSpecial: true,
658
- motion: true,
659
- zIndex: numbers.DEFAULT_Z_INDEX,
660
671
  trigger: 'hover',
672
+ transformFromCenter: true,
661
673
  position: 'top',
662
674
  prefixCls: prefix,
663
- autoAdjustOverflow: true,
675
+ role: 'tooltip',
664
676
  mouseEnterDelay: numbers.MOUSE_ENTER_DELAY,
665
677
  mouseLeaveDelay: numbers.MOUSE_LEAVE_DELAY,
678
+ motion: true,
666
679
  onVisibleChange: _noop,
667
680
  onClickOutSide: _noop,
668
681
  spacing: numbers.SPACING,
669
682
  showArrow: true,
670
- arrowBounding: numbers.ARROW_BOUNDING
683
+ wrapWhenSpecial: true,
684
+ zIndex: numbers.DEFAULT_Z_INDEX
671
685
  };
@@ -152,7 +152,7 @@ declare class Transfer extends BaseComponent<TransferProps, TransferState> {
152
152
  renderHeader(headerConfig: HeaderConfig): JSX.Element;
153
153
  renderLeftItem(item: ResolvedDataItem, index: number): React.ReactNode;
154
154
  renderLeft(locale: Locale['Transfer']): React.ReactNode;
155
- renderGroupTitle(group: GroupItem): JSX.Element;
155
+ renderGroupTitle(group: GroupItem, index: number): JSX.Element;
156
156
  renderLeftTree(): JSX.Element;
157
157
  renderLeftList(visibileItems: Array<ResolvedDataItem>): JSX.Element;
158
158
  renderRightItem(item: ResolvedDataItem): React.ReactNode;
@@ -167,6 +167,8 @@ class Transfer extends BaseComponent {
167
167
  }
168
168
 
169
169
  return /*#__PURE__*/React.createElement("div", {
170
+ role: "search",
171
+ "aria-label": "Transfer filter",
170
172
  className: "".concat(prefixcls, "-filter")
171
173
  }, /*#__PURE__*/React.createElement(Input, _Object$assign({
172
174
  prefix: /*#__PURE__*/React.createElement(IconSearch, null),
@@ -234,6 +236,7 @@ class Transfer extends BaseComponent {
234
236
  disabled: item.disabled || disabled,
235
237
  className: leftItemCls,
236
238
  checked: checked,
239
+ role: "listitem",
237
240
  onChange: () => this.onSelectOrRemove(item)
238
241
  }, item.label);
239
242
  }
@@ -329,11 +332,11 @@ class Transfer extends BaseComponent {
329
332
  }, inputCom, content);
330
333
  }
331
334
 
332
- renderGroupTitle(group) {
335
+ renderGroupTitle(group, index) {
333
336
  const groupCls = cls("".concat(prefixcls, "-group-title"));
334
337
  return /*#__PURE__*/React.createElement("div", {
335
338
  className: groupCls,
336
- key: group.title
339
+ key: "title-".concat(index)
337
340
  }, group.title);
338
341
  }
339
342
 
@@ -390,7 +393,7 @@ class Transfer extends BaseComponent {
390
393
  // group content already insert
391
394
  content.push(optionContent);
392
395
  } else if (parentGroup) {
393
- const groupContent = this.renderGroupTitle(parentGroup);
396
+ const groupContent = this.renderGroupTitle(parentGroup, index);
394
397
  groupStatus.set(parentGroup.title, true);
395
398
  content.push(groupContent);
396
399
  content.push(optionContent);
@@ -400,7 +403,9 @@ class Transfer extends BaseComponent {
400
403
  });
401
404
 
402
405
  return /*#__PURE__*/React.createElement("div", {
403
- className: "".concat(prefixcls, "-left-list")
406
+ className: "".concat(prefixcls, "-left-list"),
407
+ role: "list",
408
+ "aria-label": "Option list"
404
409
  }, content);
405
410
  }
406
411
 
@@ -438,19 +443,27 @@ class Transfer extends BaseComponent {
438
443
  }
439
444
 
440
445
  const DragHandle = SortableHandle(() => /*#__PURE__*/React.createElement(IconHandle, {
446
+ role: "button",
447
+ "aria-label": "Drag and sort",
441
448
  className: "".concat(prefixcls, "-right-item-drag-handler")
442
449
  }));
443
- return /*#__PURE__*/React.createElement("div", {
444
- className: rightItemCls,
445
- key: newItem.key
446
- }, draggable ? /*#__PURE__*/React.createElement(DragHandle, null) : null, /*#__PURE__*/React.createElement("div", {
447
- className: "".concat(prefixcls, "-right-item-text")
448
- }, label), /*#__PURE__*/React.createElement(IconClose, {
449
- onClick: onRemove,
450
- className: cls("".concat(prefixcls, "-item-close-icon"), {
451
- ["".concat(prefixcls, "-item-close-icon-disabled")]: item.disabled
452
- })
453
- }));
450
+ return (
451
+ /*#__PURE__*/
452
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
453
+ React.createElement("div", {
454
+ role: "listitem",
455
+ className: rightItemCls,
456
+ key: newItem.key
457
+ }, draggable ? /*#__PURE__*/React.createElement(DragHandle, null) : null, /*#__PURE__*/React.createElement("div", {
458
+ className: "".concat(prefixcls, "-right-item-text")
459
+ }, label), /*#__PURE__*/React.createElement(IconClose, {
460
+ onClick: onRemove,
461
+ "aria-disabled": item.disabled,
462
+ className: cls("".concat(prefixcls, "-item-close-icon"), {
463
+ ["".concat(prefixcls, "-item-close-icon-disabled")]: item.disabled
464
+ })
465
+ }))
466
+ );
454
467
  }
455
468
 
456
469
  renderEmpty(type, emptyText) {
@@ -460,6 +473,7 @@ class Transfer extends BaseComponent {
460
473
  ["".concat(prefixcls, "-left-empty")]: type === 'left'
461
474
  });
462
475
  return /*#__PURE__*/React.createElement("div", {
476
+ "aria-label": "empty",
463
477
  className: emptyCls
464
478
  }, emptyText);
465
479
  }
@@ -472,7 +486,9 @@ class Transfer extends BaseComponent {
472
486
  items
473
487
  } = _ref;
474
488
  return /*#__PURE__*/React.createElement("div", {
475
- className: "".concat(prefixcls, "-right-list")
489
+ className: "".concat(prefixcls, "-right-list"),
490
+ role: "list",
491
+ "aria-label": "Selected list"
476
492
  }, _mapInstanceProperty(items).call(items, (item, index) =>
477
493
  /*#__PURE__*/
478
494
  // sortableElement will take over the property 'key', so use another '_optionKey' to pass
@@ -540,7 +556,9 @@ class Transfer extends BaseComponent {
540
556
 
541
557
  case selectedData.length && !draggable:
542
558
  const list = /*#__PURE__*/React.createElement("div", {
543
- className: "".concat(prefixcls, "-right-list")
559
+ className: "".concat(prefixcls, "-right-list"),
560
+ role: "list",
561
+ "aria-label": "Selected list"
544
562
  }, _mapInstanceProperty(selectedData).call(selectedData, item => this.renderRightItem(_Object$assign({}, item))));
545
563
  content = list;
546
564
  break;
@@ -70,6 +70,7 @@ declare class Tree extends BaseComponent<TreeProps, TreeState> {
70
70
  onDragStart: PropTypes.Requireable<(...args: any[]) => any>;
71
71
  onDrop: PropTypes.Requireable<(...args: any[]) => any>;
72
72
  labelEllipsis: PropTypes.Requireable<boolean>;
73
+ 'aria-label': PropTypes.Requireable<string>;
73
74
  };
74
75
  static defaultProps: {
75
76
  showClear: boolean;
@@ -504,6 +504,7 @@ class Tree extends BaseComponent {
504
504
  }
505
505
 
506
506
  return /*#__PURE__*/React.createElement(Input, _Object$assign({
507
+ "aria-label": 'Filter Tree',
507
508
  ref: this.inputRef
508
509
  }, inputProps));
509
510
  }));
@@ -606,6 +607,14 @@ class Tree extends BaseComponent {
606
607
  });
607
608
  const searchNoRes = Boolean(inputValue) && !filteredKeys.size;
608
609
  const noData = _isEmpty(keyEntities) || showFilteredOnly && searchNoRes;
610
+ const ariaAttr = {
611
+ role: noData ? 'none' : 'tree'
612
+ };
613
+
614
+ if (ariaAttr.role === 'tree') {
615
+ ariaAttr['aria-multiselectable'] = multiple ? true : false;
616
+ }
617
+
609
618
  return /*#__PURE__*/React.createElement(TreeContext.Provider, {
610
619
  value: {
611
620
  treeDisabled: disabled,
@@ -643,13 +652,12 @@ class Tree extends BaseComponent {
643
652
  labelEllipsis: typeof labelEllipsis === 'undefined' ? virtualize : labelEllipsis
644
653
  }
645
654
  }, /*#__PURE__*/React.createElement("div", {
655
+ "aria-label": this.props['aria-label'],
646
656
  className: wrapperCls,
647
- role: "list-box",
648
657
  style: style
649
- }, filterTreeNode ? this.renderInput() : null, /*#__PURE__*/React.createElement("div", {
650
- className: listCls,
651
- role: "tree"
652
- }, noData ? this.renderEmpty() : this.renderNodeList())));
658
+ }, filterTreeNode ? this.renderInput() : null, /*#__PURE__*/React.createElement("div", _Object$assign({
659
+ className: listCls
660
+ }, ariaAttr), noData ? this.renderEmpty() : this.renderNodeList())));
653
661
  }
654
662
 
655
663
  }
@@ -714,7 +722,8 @@ Tree.propTypes = {
714
722
  onDragOver: PropTypes.func,
715
723
  onDragStart: PropTypes.func,
716
724
  onDrop: PropTypes.func,
717
- labelEllipsis: PropTypes.bool
725
+ labelEllipsis: PropTypes.bool,
726
+ 'aria-label': PropTypes.string
718
727
  };
719
728
  Tree.defaultProps = {
720
729
  showClear: true,
@@ -29,11 +29,19 @@ export default class TreeNode extends PureComponent<TreeNodeProps, TreeNodeState
29
29
  debounceSelect: any;
30
30
  refNode: HTMLElement;
31
31
  constructor(props: TreeNodeProps);
32
- onSelect: (e: React.MouseEvent) => void;
33
- onExpand: (e: React.MouseEvent) => void;
34
- onCheck: (e: React.MouseEvent) => void;
32
+ onSelect: (e: React.MouseEvent | React.KeyboardEvent) => void;
33
+ onExpand: (e: React.MouseEvent | React.KeyboardEvent) => void;
34
+ onCheck: (e: React.MouseEvent | React.KeyboardEvent) => void;
35
+ /**
36
+ * A11y: simulate checkbox click
37
+ */
38
+ handleCheckEnterPress: (e: React.KeyboardEvent) => void;
35
39
  onContextMenu: (e: React.MouseEvent) => void;
36
- onClick: (e: React.MouseEvent) => void;
40
+ onClick: (e: React.MouseEvent | React.KeyboardEvent) => void;
41
+ /**
42
+ * A11y: simulate li click
43
+ */
44
+ handleliEnterPress: (e: React.KeyboardEvent) => void;
37
45
  onDoubleClick: (e: React.MouseEvent) => void;
38
46
  onDragStart: (e: React.DragEvent) => void;
39
47
  onDragEnter: (e: React.DragEvent) => void;
@@ -1,3 +1,4 @@
1
+ import _get from "lodash/get";
1
2
  import _isString from "lodash/isString";
2
3
  import _isFunction from "lodash/isFunction";
3
4
  import _debounce from "lodash/debounce";
@@ -22,6 +23,7 @@ import React, { PureComponent } from 'react';
22
23
  import cls from 'classnames';
23
24
  import PropTypes from 'prop-types';
24
25
  import { cssClasses } from '@douyinfe/semi-foundation/lib/es/tree/constants';
26
+ import isEnterPress from '@douyinfe/semi-foundation/lib/es/utils/isEnterPress';
25
27
  import { IconTreeTriangleDown, IconFile, IconFolder, IconFolderOpen } from '@douyinfe/semi-icons';
26
28
  import { Checkbox } from '../checkbox';
27
29
  import TreeContext from './treeContext';
@@ -59,6 +61,16 @@ export default class TreeNode extends PureComponent {
59
61
  e.nativeEvent.stopImmediatePropagation();
60
62
  onNodeCheck(e, this.props);
61
63
  };
64
+ /**
65
+ * A11y: simulate checkbox click
66
+ */
67
+
68
+
69
+ this.handleCheckEnterPress = e => {
70
+ if (isEnterPress(e)) {
71
+ this.onCheck(e);
72
+ }
73
+ };
62
74
 
63
75
  this.onContextMenu = e => {
64
76
  const {
@@ -83,6 +95,16 @@ export default class TreeNode extends PureComponent {
83
95
  this.onExpand(e);
84
96
  }
85
97
  };
98
+ /**
99
+ * A11y: simulate li click
100
+ */
101
+
102
+
103
+ this.handleliEnterPress = e => {
104
+ if (isEnterPress(e)) {
105
+ this.onClick(e);
106
+ }
107
+ };
86
108
 
87
109
  this.onDoubleClick = e => {
88
110
  const {
@@ -260,7 +282,8 @@ export default class TreeNode extends PureComponent {
260
282
  renderArrow() {
261
283
  const showIcon = !this.isLeaf();
262
284
  const {
263
- loading
285
+ loading,
286
+ expanded
264
287
  } = this.props;
265
288
 
266
289
  if (loading) {
@@ -271,6 +294,8 @@ export default class TreeNode extends PureComponent {
271
294
 
272
295
  if (showIcon) {
273
296
  return /*#__PURE__*/React.createElement(IconTreeTriangleDown, {
297
+ role: 'button',
298
+ "aria-label": "".concat(expanded ? 'Expand' : 'Collapse', " the tree item"),
274
299
  className: "".concat(prefixcls, "-expand-icon"),
275
300
  size: "small",
276
301
  onClick: this.onExpand
@@ -289,8 +314,11 @@ export default class TreeNode extends PureComponent {
289
314
  } = this.props;
290
315
  const disabled = this.isDisabled();
291
316
  return /*#__PURE__*/React.createElement("div", {
292
- onClick: this.onCheck
317
+ role: 'none',
318
+ onClick: this.onCheck,
319
+ onKeyPress: this.handleCheckEnterPress
293
320
  }, /*#__PURE__*/React.createElement(Checkbox, {
321
+ "aria-label": 'Toggle the checked state of checkbox',
294
322
  indeterminate: halfChecked,
295
323
  checked: checked,
296
324
  disabled: Boolean(disabled)
@@ -343,7 +371,7 @@ export default class TreeNode extends PureComponent {
343
371
  });
344
372
  return /*#__PURE__*/React.createElement("ul", {
345
373
  className: wrapperCls
346
- }, /*#__PURE__*/React.createElement("span", {
374
+ }, /*#__PURE__*/React.createElement("li", {
347
375
  className: _concatInstanceProperty(_context2 = "".concat(prefixcls, "-label ")).call(_context2, prefixcls, "-label-empty")
348
376
  }, emptyContent));
349
377
  } // eslint-disable-next-line max-lines-per-function
@@ -450,11 +478,23 @@ export default class TreeNode extends PureComponent {
450
478
  ["".concat(prefixcls, "-drag-over-gap-top")]: !disabled && dragOverGapTop,
451
479
  ["".concat(prefixcls, "-drag-over-gap-bottom")]: !disabled && dragOverGapBottom
452
480
  });
481
+
482
+ const setsize = _get(rest, ['data', 'children', 'length']);
483
+
484
+ const posinset = _isString(rest.pos) ? Number(rest.pos.split('-')[level + 1]) + 1 : 1;
453
485
  return /*#__PURE__*/React.createElement("li", _Object$assign({
454
486
  className: nodeCls,
455
- role: "treenode",
487
+ role: "treeitem",
488
+ "aria-disabled": disabled,
489
+ "aria-checked": checked,
490
+ "aria-selected": selected,
491
+ "aria-setsize": setsize,
492
+ "aria-posinset": posinset,
493
+ "aria-expanded": expanded,
494
+ "aria-level": level + 1,
456
495
  "data-key": eventKey,
457
496
  onClick: this.onClick,
497
+ onKeyPress: this.handleliEnterPress,
458
498
  onContextMenu: this.onContextMenu,
459
499
  onDoubleClick: this.onDoubleClick,
460
500
  ref: this.setRef,