@douyinfe/semi-ui 2.2.0-beta.1 → 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 (444) 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/__test__/datePicker.test.js +108 -0
  33. package/datePicker/_story/datePicker.stories.js +146 -2
  34. package/datePicker/datePicker.tsx +24 -0
  35. package/datePicker/monthsGrid.tsx +2 -1
  36. package/dist/css/semi.css +34 -7
  37. package/dist/css/semi.min.css +1 -1
  38. package/dist/umd/semi-ui.js +2785 -1508
  39. package/dist/umd/semi-ui.js.map +1 -1
  40. package/dist/umd/semi-ui.min.js +1 -1
  41. package/dist/umd/semi-ui.min.js.map +1 -1
  42. package/dropdown/dropdownItem.tsx +1 -1
  43. package/dropdown/dropdownMenu.tsx +1 -1
  44. package/empty/index.tsx +5 -5
  45. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  46. package/form/_story/Validate/validateDemo.jsx +1 -1
  47. package/form/_story/demo.jsx +12 -3
  48. package/form/_story/form.stories.js +0 -7
  49. package/form/baseForm.tsx +2 -0
  50. package/form/errorMessage.tsx +13 -2
  51. package/form/hoc/withField.tsx +37 -8
  52. package/form/index.tsx +0 -2
  53. package/form/interface.ts +2 -0
  54. package/form/label.tsx +4 -2
  55. package/input/index.tsx +49 -4
  56. package/input/inputGroup.tsx +9 -4
  57. package/input/textarea.tsx +25 -6
  58. package/inputNumber/_story/inputNumber.stories.js +12 -0
  59. package/inputNumber/index.tsx +33 -2
  60. package/layout/Sider.tsx +6 -2
  61. package/layout/index.tsx +4 -3
  62. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  63. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  64. package/lib/cjs/_utils/index.d.ts +1 -0
  65. package/lib/cjs/_utils/index.js +6 -1
  66. package/lib/cjs/anchor/index.d.ts +2 -0
  67. package/lib/cjs/anchor/index.js +6 -1
  68. package/lib/cjs/anchor/link.d.ts +4 -1
  69. package/lib/cjs/anchor/link.js +39 -5
  70. package/lib/cjs/autoComplete/index.d.ts +17 -0
  71. package/lib/cjs/autoComplete/index.js +21 -2
  72. package/lib/cjs/avatar/avatarGroup.js +2 -1
  73. package/lib/cjs/avatar/index.d.ts +4 -3
  74. package/lib/cjs/avatar/index.js +20 -11
  75. package/lib/cjs/banner/index.js +4 -2
  76. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  77. package/lib/cjs/breadcrumb/index.js +10 -4
  78. package/lib/cjs/breadcrumb/item.js +2 -2
  79. package/lib/cjs/button/Button.d.ts +2 -0
  80. package/lib/cjs/button/Button.js +4 -2
  81. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  82. package/lib/cjs/button/buttonGroup.js +8 -4
  83. package/lib/cjs/button/index.d.ts +1 -0
  84. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  85. package/lib/cjs/button/splitButtonGroup.js +5 -2
  86. package/lib/cjs/card/index.d.ts +3 -0
  87. package/lib/cjs/card/index.js +3 -1
  88. package/lib/cjs/cascader/index.d.ts +14 -0
  89. package/lib/cjs/cascader/index.js +35 -7
  90. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  91. package/lib/cjs/checkbox/checkbox.js +51 -17
  92. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  93. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  94. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  95. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  96. package/lib/cjs/collapse/index.js +2 -1
  97. package/lib/cjs/collapse/item.d.ts +2 -1
  98. package/lib/cjs/collapse/item.js +17 -3
  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 +22 -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/empty/index.js +2 -1
  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 +37 -3
  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/item.js +0 -1
  129. package/lib/cjs/modal/Modal.js +2 -0
  130. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  131. package/lib/cjs/modal/ModalContent.js +47 -5
  132. package/lib/cjs/navigation/Item.d.ts +4 -2
  133. package/lib/cjs/navigation/Item.js +25 -5
  134. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  135. package/lib/cjs/navigation/SubNav.js +8 -1
  136. package/lib/cjs/navigation/index.js +2 -0
  137. package/lib/cjs/notification/notice.d.ts +1 -1
  138. package/lib/cjs/notification/notice.js +32 -22
  139. package/lib/cjs/pagination/index.js +16 -6
  140. package/lib/cjs/popover/index.js +7 -3
  141. package/lib/cjs/progress/index.d.ts +8 -0
  142. package/lib/cjs/progress/index.js +42 -9
  143. package/lib/cjs/radio/radio.d.ts +6 -1
  144. package/lib/cjs/radio/radio.js +17 -5
  145. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  146. package/lib/cjs/radio/radioGroup.js +18 -3
  147. package/lib/cjs/radio/radioInner.d.ts +6 -1
  148. package/lib/cjs/radio/radioInner.js +11 -3
  149. package/lib/cjs/rating/index.d.ts +14 -0
  150. package/lib/cjs/rating/index.js +14 -3
  151. package/lib/cjs/rating/item.d.ts +2 -0
  152. package/lib/cjs/rating/item.js +6 -1
  153. package/lib/cjs/select/index.d.ts +16 -0
  154. package/lib/cjs/select/index.js +65 -19
  155. package/lib/cjs/select/option.js +28 -22
  156. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  157. package/lib/cjs/sideSheet/SideSheetContent.js +12 -5
  158. package/lib/cjs/sideSheet/index.d.ts +1 -0
  159. package/lib/cjs/sideSheet/index.js +2 -1
  160. package/lib/cjs/slider/index.d.ts +2 -1
  161. package/lib/cjs/slider/index.js +64 -17
  162. package/lib/cjs/spin/icon.js +2 -4
  163. package/lib/cjs/steps/basicStep.d.ts +3 -0
  164. package/lib/cjs/steps/basicStep.js +23 -25
  165. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  166. package/lib/cjs/steps/basicSteps.js +2 -1
  167. package/lib/cjs/steps/fillStep.d.ts +3 -0
  168. package/lib/cjs/steps/fillStep.js +19 -4
  169. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  170. package/lib/cjs/steps/fillSteps.js +2 -1
  171. package/lib/cjs/steps/navStep.d.ts +3 -0
  172. package/lib/cjs/steps/navStep.js +22 -25
  173. package/lib/cjs/steps/navSteps.d.ts +1 -0
  174. package/lib/cjs/steps/navSteps.js +2 -1
  175. package/lib/cjs/switch/index.d.ts +12 -0
  176. package/lib/cjs/switch/index.js +19 -4
  177. package/lib/cjs/table/Body/BaseRow.js +35 -3
  178. package/lib/cjs/table/Body/index.js +9 -1
  179. package/lib/cjs/table/ColumnFilter.js +4 -0
  180. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  181. package/lib/cjs/table/ColumnSelection.js +6 -2
  182. package/lib/cjs/table/ColumnSorter.js +19 -3
  183. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  184. package/lib/cjs/table/Table.d.ts +2 -0
  185. package/lib/cjs/table/Table.js +31 -15
  186. package/lib/cjs/table/TableCell.d.ts +2 -0
  187. package/lib/cjs/table/TableCell.js +6 -2
  188. package/lib/cjs/table/TableHeaderRow.js +8 -2
  189. package/lib/cjs/tabs/TabBar.js +11 -3
  190. package/lib/cjs/tabs/TabPane.js +3 -1
  191. package/lib/cjs/tabs/index.js +3 -8
  192. package/lib/cjs/tagInput/index.d.ts +4 -1
  193. package/lib/cjs/tagInput/index.js +29 -3
  194. package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
  195. package/lib/cjs/timePicker/TimePicker.js +9 -1
  196. package/lib/cjs/timePicker/index.d.ts +6 -0
  197. package/lib/cjs/timeline/index.d.ts +1 -1
  198. package/lib/cjs/timeline/index.js +1 -0
  199. package/lib/cjs/timeline/item.js +4 -2
  200. package/lib/cjs/toast/toast.js +2 -0
  201. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  202. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  203. package/lib/cjs/tooltip/index.d.ts +16 -12
  204. package/lib/cjs/tooltip/index.js +55 -39
  205. package/lib/cjs/transfer/index.d.ts +1 -1
  206. package/lib/cjs/transfer/index.js +35 -17
  207. package/lib/cjs/tree/index.d.ts +1 -0
  208. package/lib/cjs/tree/index.js +15 -6
  209. package/lib/cjs/tree/treeNode.d.ts +12 -4
  210. package/lib/cjs/tree/treeNode.js +44 -4
  211. package/lib/cjs/treeSelect/index.d.ts +16 -0
  212. package/lib/cjs/treeSelect/index.js +60 -12
  213. package/lib/cjs/typography/base.js +18 -7
  214. package/lib/cjs/typography/copyable.js +6 -1
  215. package/lib/cjs/upload/fileCard.js +23 -4
  216. package/lib/cjs/upload/index.js +19 -4
  217. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  218. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  219. package/lib/es/_utils/index.d.ts +1 -0
  220. package/lib/es/_utils/index.js +4 -1
  221. package/lib/es/anchor/index.d.ts +2 -0
  222. package/lib/es/anchor/index.js +6 -1
  223. package/lib/es/anchor/link.d.ts +4 -1
  224. package/lib/es/anchor/link.js +38 -5
  225. package/lib/es/autoComplete/index.d.ts +17 -0
  226. package/lib/es/autoComplete/index.js +21 -2
  227. package/lib/es/avatar/avatarGroup.js +2 -1
  228. package/lib/es/avatar/index.d.ts +4 -3
  229. package/lib/es/avatar/index.js +20 -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/index.js +2 -1
  252. package/lib/es/collapse/item.d.ts +2 -1
  253. package/lib/es/collapse/item.js +16 -3
  254. package/lib/es/collapsible/index.d.ts +1 -0
  255. package/lib/es/collapsible/index.js +4 -2
  256. package/lib/es/datePicker/datePicker.d.ts +12 -0
  257. package/lib/es/datePicker/datePicker.js +22 -3
  258. package/lib/es/datePicker/monthsGrid.d.ts +1 -0
  259. package/lib/es/datePicker/monthsGrid.js +2 -1
  260. package/lib/es/dropdown/dropdownItem.js +3 -1
  261. package/lib/es/dropdown/dropdownMenu.js +4 -1
  262. package/lib/es/empty/index.js +2 -1
  263. package/lib/es/form/baseForm.d.ts +9 -0
  264. package/lib/es/form/baseForm.js +3 -1
  265. package/lib/es/form/errorMessage.d.ts +4 -0
  266. package/lib/es/form/errorMessage.js +21 -3
  267. package/lib/es/form/field.d.ts +7 -0
  268. package/lib/es/form/hoc/withField.js +48 -15
  269. package/lib/es/form/index.d.ts +0 -1
  270. package/lib/es/form/index.js +0 -1
  271. package/lib/es/form/interface.d.ts +2 -0
  272. package/lib/es/form/label.d.ts +2 -0
  273. package/lib/es/form/label.js +5 -2
  274. package/lib/es/input/index.d.ts +16 -0
  275. package/lib/es/input/index.js +51 -15
  276. package/lib/es/input/inputGroup.d.ts +2 -1
  277. package/lib/es/input/inputGroup.js +11 -1
  278. package/lib/es/input/textarea.js +12 -1
  279. package/lib/es/inputNumber/index.d.ts +21 -12
  280. package/lib/es/inputNumber/index.js +38 -3
  281. package/lib/es/layout/Sider.d.ts +4 -0
  282. package/lib/es/layout/Sider.js +4 -1
  283. package/lib/es/layout/index.js +2 -0
  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 +12 -5
  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 +2 -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 +1 -6
  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 +23 -4
  372. package/lib/es/upload/index.js +19 -4
  373. package/list/item.tsx +0 -1
  374. package/modal/Modal.tsx +2 -0
  375. package/modal/ModalContent.tsx +35 -5
  376. package/navigation/Item.tsx +15 -0
  377. package/navigation/SubNav.tsx +13 -1
  378. package/navigation/index.tsx +1 -1
  379. package/notification/notice.tsx +19 -14
  380. package/package.json +8 -8
  381. package/pagination/index.tsx +9 -5
  382. package/popover/index.tsx +5 -0
  383. package/progress/_story/progress.stories.js +18 -18
  384. package/progress/index.tsx +58 -20
  385. package/radio/radio.tsx +12 -2
  386. package/radio/radioGroup.tsx +29 -3
  387. package/radio/radioInner.tsx +10 -1
  388. package/rating/index.tsx +19 -2
  389. package/rating/item.tsx +6 -0
  390. package/select/__test__/select.test.js +45 -0
  391. package/select/_story/select.stories.js +29 -0
  392. package/select/index.tsx +52 -4
  393. package/select/option.tsx +3 -0
  394. package/sideSheet/SideSheetContent.tsx +13 -9
  395. package/sideSheet/index.tsx +3 -2
  396. package/slider/__test__/slider.test.js +9 -0
  397. package/slider/_story/slider.stories.js +1 -1
  398. package/slider/index.tsx +44 -7
  399. package/spin/icon.tsx +3 -3
  400. package/steps/basicStep.tsx +15 -4
  401. package/steps/basicSteps.tsx +3 -2
  402. package/steps/fillStep.tsx +27 -12
  403. package/steps/fillSteps.tsx +2 -0
  404. package/steps/navStep.tsx +15 -4
  405. package/steps/navSteps.tsx +3 -2
  406. package/switch/_story/switch.stories.js +20 -19
  407. package/switch/_story/switch.stories.tsx +13 -13
  408. package/switch/index.tsx +23 -5
  409. package/table/Body/BaseRow.tsx +25 -1
  410. package/table/Body/index.tsx +7 -2
  411. package/table/ColumnFilter.tsx +7 -1
  412. package/table/ColumnSelection.tsx +4 -1
  413. package/table/ColumnSorter.tsx +18 -1
  414. package/table/CustomExpandIcon.tsx +5 -0
  415. package/table/Table.tsx +26 -13
  416. package/table/TableCell.tsx +11 -1
  417. package/table/TableHeaderRow.tsx +16 -2
  418. package/table/__test__/table.test.js +46 -0
  419. package/tabs/TabBar.tsx +8 -5
  420. package/tabs/TabPane.tsx +3 -1
  421. package/tabs/index.tsx +1 -2
  422. package/tagInput/__test__/tagInput.test.js +46 -0
  423. package/tagInput/_story/tagInput.stories.js +2 -2
  424. package/tagInput/index.tsx +31 -8
  425. package/timePicker/TimePicker.tsx +14 -1
  426. package/timeline/_story/timeline.stories.js +1 -1
  427. package/timeline/index.tsx +2 -2
  428. package/timeline/item.tsx +2 -1
  429. package/toast/toast.tsx +2 -0
  430. package/tooltip/TriangleArrow.tsx +1 -1
  431. package/tooltip/TriangleArrowVertical.tsx +1 -1
  432. package/tooltip/_story/tooltip.stories.js +562 -514
  433. package/tooltip/index.tsx +50 -33
  434. package/transfer/index.tsx +32 -28
  435. package/tree/_story/tree.stories.js +3 -3
  436. package/tree/index.tsx +10 -2
  437. package/tree/treeNode.tsx +46 -10
  438. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  439. package/treeSelect/_story/treeSelect.stories.js +12 -0
  440. package/treeSelect/index.tsx +58 -7
  441. package/typography/base.tsx +7 -1
  442. package/typography/copyable.tsx +10 -1
  443. package/upload/fileCard.tsx +13 -15
  444. package/upload/index.tsx +10 -6
@@ -5,6 +5,7 @@ import { noop } from 'lodash';
5
5
 
6
6
  import { IconChevronRight, IconChevronDown, IconTreeTriangleDown, IconTreeTriangleRight } from '@douyinfe/semi-icons';
7
7
  import { cssClasses } from '@douyinfe/semi-foundation/table/constants';
8
+ import isEnterPress from '@douyinfe/semi-foundation/utils/isEnterPress';
8
9
 
9
10
  import Rotate from '../motions/Rotate';
10
11
 
@@ -65,10 +66,14 @@ export default function CustomExpandIcon(props: CustomExpandIconProps) {
65
66
 
66
67
  return (
67
68
  <span
69
+ role="button"
70
+ aria-label="Expand this row"
71
+ tabIndex={-1}
68
72
  onClick={handleClick}
69
73
  onMouseEnter={onMouseEnter}
70
74
  onMouseLeave={onMouseLeave}
71
75
  className={`${prefixCls}-expand-icon`}
76
+ onKeyPress={e => isEnterPress(e) && handleClick(e as any)}
72
77
  >
73
78
  {icon}
74
79
  </span>
package/table/Table.tsx CHANGED
@@ -95,6 +95,7 @@ export interface NormalTableState<RecordType extends Record<string, any> = Data>
95
95
  bodyHasScrollBar?: boolean;
96
96
  prePropRowSelection?: TableStateRowSelection<RecordType>;
97
97
  tableWidth?: number;
98
+ prePagination?: Pagination;
98
99
  }
99
100
 
100
101
  export type TableStateRowSelection<RecordType extends Record<string, any> = Data> = (RowSelectionProps<RecordType> & { selectedRowKeysSet?: Set<(string | number)> }) | boolean;
@@ -390,6 +391,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
390
391
  headWidths: [], // header cell width
391
392
  bodyHasScrollBar: false,
392
393
  prePropRowSelection: undefined,
394
+ prePagination: undefined
393
395
  };
394
396
 
395
397
  this.rootWrapRef = createRef();
@@ -412,7 +414,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
412
414
 
413
415
  static getDerivedStateFromProps(props: NormalTableProps, state: NormalTableState) {
414
416
  const willUpdateStates: Partial<NormalTableState> = {};
415
- const { rowSelection, dataSource, childrenRecordName, rowKey } = props;
417
+ const { rowSelection, dataSource, childrenRecordName, rowKey, pagination } = props;
416
418
  props.columns && props.children && logger.warn('columns should not given by object and children at the same time');
417
419
 
418
420
  if (props.columns && props.columns !== state.cachedColumns) {
@@ -453,6 +455,17 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
453
455
  willUpdateStates.rowSelection = newSelectionStates;
454
456
  willUpdateStates.prePropRowSelection = rowSelection;
455
457
  }
458
+ if (pagination !== state.prePagination) {
459
+ let newPagination: Pagination = {};
460
+ if (isObject(state.pagination)) {
461
+ newPagination = { ...newPagination, ...state.pagination };
462
+ }
463
+ if (isObject(pagination)) {
464
+ newPagination = { ...newPagination, ...pagination };
465
+ }
466
+ willUpdateStates.pagination = newPagination;
467
+ willUpdateStates.prePagination = pagination;
468
+ }
456
469
  return willUpdateStates;
457
470
  }
458
471
 
@@ -468,16 +481,17 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
468
481
  // TODO: Extract the setState operation to the adapter or getDerivedStateFromProps function
469
482
  componentDidUpdate(prevProps: NormalTableProps<RecordType>, prevState: NormalTableState<RecordType>) {
470
483
  const {
471
- pagination,
472
484
  dataSource,
473
485
  expandedRowKeys,
474
486
  expandAllRows,
475
487
  expandAllGroupRows,
476
488
  virtualized,
477
489
  components,
490
+ pagination: propsPagination
478
491
  } = this.props;
479
492
 
480
493
  const {
494
+ pagination: statePagination,
481
495
  queries: stateQueries,
482
496
  cachedColumns: stateCachedColumns,
483
497
  cachedChildren: stateCachedChildren,
@@ -521,11 +535,6 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
521
535
  }
522
536
 
523
537
 
524
- // Update pagination
525
- if (pagination !== prevProps.pagination) {
526
- states.pagination = isObject(pagination) ? { ...pagination } : pagination;
527
- }
528
-
529
538
  /**
530
539
  * After dataSource is updated || (cachedColumns || cachedChildren updated)
531
540
  * 1. Cache filtered sorted data and a collection of data rows, stored in this
@@ -538,10 +547,11 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
538
547
  const filteredSortedDataSource = this.foundation.getFilteredSortedDataSource(_dataSource, stateQueries);
539
548
  this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);
540
549
  states.dataSource = filteredSortedDataSource;
541
-
542
- if (pagination === prevProps.pagination) {
543
- states.pagination = isObject(pagination) ? { ...pagination } : pagination;
544
- }
550
+ // when dataSource has change, should reset currentPage
551
+ states.pagination = isObject(statePagination) ? {
552
+ ...statePagination,
553
+ currentPage: isObject(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1,
554
+ } : statePagination;
545
555
 
546
556
  if (this.props.groupBy) {
547
557
  states.groups = null;
@@ -551,11 +561,11 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
551
561
  if (Object.keys(states).length) {
552
562
  const {
553
563
  // eslint-disable-next-line @typescript-eslint/no-shadow
564
+ pagination: mergedStatePagination = null,
554
565
  queries: stateQueries = null,
555
- pagination: statePagination = null,
556
566
  dataSource: stateDataSource = null,
557
567
  } = states;
558
- const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, statePagination as TablePaginationProps, stateQueries);
568
+ const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, mergedStatePagination as TablePaginationProps, stateQueries);
559
569
 
560
570
  // After the pager is updated, reset allRowKeys of the current page
561
571
  this.adapter.setAllRowKeys(handledProps.allRowKeys);
@@ -790,6 +800,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
790
800
  const hasRowSelected = this.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
791
801
  return (
792
802
  <ColumnSelection
803
+ aria-label={`${allIsSelected ? 'Deselect' : 'Select'} all rows`}
793
804
  disabled={disabled}
794
805
  key={columnKey}
795
806
  selected={allIsSelected}
@@ -806,6 +817,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
806
817
 
807
818
  return (
808
819
  <ColumnSelection
820
+ aria-label={`${selected ? 'Deselect' : 'Select'} this row`}
809
821
  getCheckboxProps={checkboxPropsFn}
810
822
  selected={selected}
811
823
  onChange={(status, e) => this.toggleSelectRow(status, key, e)}
@@ -966,6 +978,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
966
978
  /**
967
979
  * render pagination
968
980
  * @param {object} pagination
981
+ * @param {object} propRenderPagination
969
982
  */
970
983
  renderPagination = (pagination: TablePaginationProps, propRenderPagination: RenderPagination) => {
971
984
  if (!pagination) {
@@ -42,6 +42,7 @@ export interface TableCellProps extends BaseProps {
42
42
  selected?: boolean; // Whether the current row is selected
43
43
  expanded?: boolean; // Whether the current line is expanded
44
44
  disabled?: boolean;
45
+ colIndex?: number;
45
46
  }
46
47
 
47
48
  function isInvalidRenderCellText(text: any) {
@@ -82,6 +83,7 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
82
83
  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
83
84
  selected: PropTypes.bool,
84
85
  expanded: PropTypes.bool,
86
+ colIndex: PropTypes.number,
85
87
  };
86
88
 
87
89
  get adapter(): TableCellAdapter {
@@ -314,6 +316,7 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
314
316
  fixedRight,
315
317
  lastFixedLeft,
316
318
  firstFixedRight,
319
+ colIndex
317
320
  } = this.props;
318
321
  const { className } = column;
319
322
  const fixedLeftFlag = fixedLeft || typeof fixedLeft === 'number';
@@ -347,7 +350,14 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
347
350
  );
348
351
 
349
352
  return (
350
- <BodyCell className={columnCls} onClick={this.handleClick} {...newTdProps} ref={this.setRef}>
353
+ <BodyCell
354
+ role="gridcell"
355
+ aria-colindex={colIndex + 1}
356
+ className={columnCls}
357
+ onClick={this.handleClick}
358
+ {...newTdProps}
359
+ ref={this.setRef}
360
+ >
351
361
  {inner}
352
362
  </BodyCell>
353
363
  );
@@ -168,11 +168,25 @@ export default class TableHeaderRow extends BaseComponent<TableHeaderRowProps, R
168
168
  return null;
169
169
  }
170
170
 
171
- return <HeaderCell {...props} style={cellStyle} key={column.key || column.dataIndex || cellIndex} />;
171
+ return (
172
+ <HeaderCell
173
+ role="columnheader"
174
+ aria-colindex={cellIndex + 1}
175
+ {...props}
176
+ style={cellStyle}
177
+ key={column.key || column.dataIndex || cellIndex}
178
+ />
179
+ );
172
180
  });
173
181
 
174
182
  return (
175
- <HeaderRow {...rowProps} style={style} ref={this.cacheRef}>
183
+ <HeaderRow
184
+ role="row"
185
+ aria-rowindex={index + 1}
186
+ {...rowProps}
187
+ style={style}
188
+ ref={this.cacheRef}
189
+ >
176
190
  {cells}
177
191
  </HeaderRow>
178
192
  );
@@ -1452,6 +1452,52 @@ describe(`Table`, () => {
1452
1452
  });
1453
1453
  expect(demo.find(BaseTable).state('disabledRowKeys').length).toEqual(2);
1454
1454
  });
1455
+ /**
1456
+ * 分页受控场景,更新数据后查看分页器是否保持当前页
1457
+ */
1458
+ it('test controlled pagination reset when dataSource change', async () => {
1459
+ const total = 100;
1460
+ const pagination = {
1461
+ pageSize: 10,
1462
+ currentPage: 2,
1463
+ };
1464
+ const columns = getColumns();
1465
+ const demo = mount(<Table dataSource={getData(total)} columns={columns} pagination={pagination}/>);
1466
+
1467
+ const dataNum = getRandomNumber(100, 40);
1468
+ const newData = getData(dataNum);
1469
+ demo.setProps({
1470
+ dataSource: newData,
1471
+ });
1472
+ await sleep(2000);
1473
+ expect(
1474
+ demo
1475
+ .find(`.${BASE_CLASS_PREFIX}-page .${BASE_CLASS_PREFIX}-page-item-active`)
1476
+ .getDOMNode().innerHTML
1477
+ ).toBe('2');
1478
+ });
1479
+
1480
+ /**
1481
+ * 分页非受控场景,更新数据后查看分页器是否重置
1482
+ */
1483
+ it('test uncontrolled pagination reset when dataSource change', async () => {
1484
+ const total = 100;
1485
+ const columns = getColumns();
1486
+ const demo = mount(<Table dataSource={getData(total)} columns={columns}/>);
1487
+ demo.find(`.${BASE_CLASS_PREFIX}-page .${BASE_CLASS_PREFIX}-page-item`)
1488
+ .at(2)
1489
+ .simulate('click');
1490
+ const dataNum = getRandomNumber(100, 40);
1491
+ const newData = getData(dataNum);
1492
+ demo.setProps({
1493
+ dataSource: newData,
1494
+ });
1495
+ await sleep(2000);
1496
+ demo.update();
1497
+ expect(demo.find(`.semi-page .semi-page-item-active`).getDOMNode().innerHTML).toBe('1');
1498
+ expect(demo.find(BaseTable).state('pagination')).toHaveProperty('currentPage', 1);
1499
+ });
1500
+
1455
1501
  it('test pagination changed', async () => {
1456
1502
  const total = 100;
1457
1503
  const pagination = {
package/tabs/TabBar.tsx CHANGED
@@ -91,7 +91,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
91
91
  renderTabItem = (panel: PlainTab): ReactNode => {
92
92
  const { size, type, deleteTabItem } = this.props;
93
93
  const panelIcon = panel.icon ? this.renderIcon(panel.icon) : null;
94
- const closableIcon = (type === 'card' && panel.closable) ? <IconClose className={`${cssClasses.TABS_TAB}-icon-close`} onClick={(e: React.MouseEvent<HTMLSpanElement>) => deleteTabItem(panel.itemKey, e)} /> : null;
94
+ const closableIcon = (type === 'card' && panel.closable) ? <IconClose aria-label="Close" role="button" className={`${cssClasses.TABS_TAB}-icon-close`} onClick={(e: React.MouseEvent<HTMLSpanElement>) => deleteTabItem(panel.itemKey, e)} /> : null;
95
95
  let events = {};
96
96
  const key = panel.itemKey;
97
97
  if (!panel.disabled) {
@@ -99,8 +99,9 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
99
99
  onClick: (e: MouseEvent<HTMLDivElement>): void => this.handleItemClick(key, e),
100
100
  };
101
101
  }
102
+ const isSelected = this._isActive(key);
102
103
  const className = cls(cssClasses.TABS_TAB, {
103
- [cssClasses.TABS_TAB_ACTIVE]: this._isActive(key),
104
+ [cssClasses.TABS_TAB_ACTIVE]: isSelected,
104
105
  [cssClasses.TABS_TAB_DISABLED]: panel.disabled,
105
106
  [`${cssClasses.TABS_TAB}-small`]: size === 'small',
106
107
  [`${cssClasses.TABS_TAB}-medium`]: size === 'medium',
@@ -108,8 +109,10 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
108
109
  return (
109
110
  <div
110
111
  role="tab"
112
+ id={`semiTab${key}`}
113
+ aria-controls={`semiTabPanel${key}`}
111
114
  aria-disabled={panel.disabled ? 'true' : 'false'}
112
- aria-selected={this._isActive(key) ? 'true' : 'false'}
115
+ aria-selected={isSelected ? 'true' : 'false'}
113
116
  {...events}
114
117
  className={className}
115
118
  key={this._getItemKey(key)}
@@ -182,7 +185,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
182
185
  style={dropdownStyle}
183
186
  trigger={'hover'}
184
187
  >
185
- <div className={arrowCls} onClick={(e): void => this.handleArrowClick(items, pos)}>
188
+ <div role="presentation" className={arrowCls} onClick={(e): void => this.handleArrowClick(items, pos)}>
186
189
  <Button
187
190
  disabled={disabled}
188
191
  icon={icon}
@@ -233,7 +236,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
233
236
  const contents = collapsible ? this.renderCollapsedTab() : this.renderTabComponents(list);
234
237
 
235
238
  return (
236
- <div role="tab-list" className={classNames} style={style} {...getDataAttr(restProps)} data-uuid={this.uuid}>
239
+ <div role="tablist" aria-orientation={tabPosition === "left" ? "vertical" : "horizontal"} className={classNames} style={style} {...getDataAttr(restProps)} data-uuid={this.uuid}>
237
240
  {contents}
238
241
  {extra}
239
242
  </div>
package/tabs/TabPane.tsx CHANGED
@@ -86,7 +86,9 @@ class TabPane extends PureComponent<TabPaneProps> {
86
86
  return (
87
87
  <div
88
88
  ref={this.ref}
89
- role="tab-panel"
89
+ role="tabpanel"
90
+ id={`semiTabPanel${itemKey}`}
91
+ aria-labelledby={`semiTab${itemKey}`}
90
92
  className={classNames}
91
93
  style={style}
92
94
  aria-hidden={active ? 'false' : 'true'}
package/tabs/index.tsx CHANGED
@@ -15,7 +15,7 @@ import TabPane from './TabPane';
15
15
  import TabsContext from './tabs-context';
16
16
  import { TabsProps, PlainTab, TabBarProps } from './interface';
17
17
 
18
- const panePickKeys = Object.keys(omit(TabPane.propTypes, ['children']));
18
+ const panePickKeys = ['className', 'style', 'disabled', 'itemKey', 'tab', 'icon'];
19
19
 
20
20
  export * from './interface';
21
21
 
@@ -285,7 +285,6 @@ class Tabs extends BaseComponent<TabsProps, TabsState> {
285
285
  >
286
286
  <div
287
287
  ref={this.setContentRef}
288
- role="tab-content"
289
288
  className={tabContentCls}
290
289
  style={{ ...contentStyle }}
291
290
  >
@@ -76,6 +76,28 @@ describe('TagInput', () => {
76
76
  tagInput.unmount();
77
77
  });
78
78
 
79
+ it('TagInput with defaultValue and value is undefined', () => {
80
+ const props = {
81
+ defaultValue: ['tiktok', 'hotsoon'],
82
+ value: undefined,
83
+ };
84
+ const tagInput = getTagInput(props);
85
+ const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
86
+ expect(tags.length).toEqual(0);
87
+ tagInput.unmount();
88
+ });
89
+
90
+ it('TagInput with defaultValue and value is null', () => {
91
+ const props = {
92
+ defaultValue: ['tiktok', 'hotsoon'],
93
+ value: null,
94
+ };
95
+ const tagInput = getTagInput(props);
96
+ const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
97
+ expect(tags.length).toEqual(0);
98
+ tagInput.unmount();
99
+ });
100
+
79
101
  it('TagInput with disabled', () => {
80
102
  const disabledTagInput = mount(<TagInput disabled />);
81
103
  expect(disabledTagInput.exists(`.${BASE_CLASS_PREFIX}-tagInput-disabled`)).toEqual(true);
@@ -328,6 +350,30 @@ describe('TagInput', () => {
328
350
  expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('hotsoon');
329
351
  });
330
352
 
353
+ it('tagInput with set value to null ', () => {
354
+ const props = {
355
+ value: ['tiktok']
356
+ };
357
+ const tagInput = getTagInput(props);
358
+ expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('tiktok');
359
+ tagInput.setProps({ value: null });
360
+ tagInput.update();
361
+ const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
362
+ expect(tags.length).toEqual(0);
363
+ });
364
+
365
+ it('tagInput with set value to null ', () => {
366
+ const props = {
367
+ value: ['tiktok']
368
+ };
369
+ const tagInput = getTagInput(props);
370
+ expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('tiktok');
371
+ tagInput.setProps({ value: undefined });
372
+ tagInput.update();
373
+ const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
374
+ expect(tags.length).toEqual(0);
375
+ });
376
+
331
377
  it('tagInput with inputValue controlled mode ', () => {
332
378
  const props = {
333
379
  inputValue: 'abc'
@@ -13,7 +13,7 @@ export default {
13
13
 
14
14
  export const Default = () => (
15
15
  <>
16
- <TagInput defaultValue={['抖音', '火山', '西瓜视频']} placeholder="请输入..." style={style} />
16
+ <TagInput aria-label='input tag' defaultValue={['抖音', '火山', '西瓜视频']} placeholder="请输入..." style={style} />
17
17
  <TagInput
18
18
  maxTagCount={2}
19
19
  showRestTagsPopover={true}
@@ -348,7 +348,7 @@ class CustomRender extends React.Component {
348
348
  marginRight: 10,
349
349
  }}
350
350
  >
351
- <Avatar src={node.avatar} size="extra-small">
351
+ <Avatar alt="avatar" src={node.avatar} size="extra-small">
352
352
  {node.abbr}
353
353
  </Avatar>
354
354
  <span
@@ -55,8 +55,9 @@ export interface TagInputProps {
55
55
  style?: React.CSSProperties;
56
56
  suffix?: React.ReactNode;
57
57
  validateStatus?: ValidateStatus;
58
- value?: string[];
58
+ value?: string[] | undefined;
59
59
  autoFocus?: boolean;
60
+ 'aria-label'?: string;
60
61
  }
61
62
 
62
63
  export interface TagInputState {
@@ -102,7 +103,8 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
102
103
  size: PropTypes.oneOf(strings.SIZE_SET),
103
104
  validateStatus: PropTypes.oneOf(strings.STATUS),
104
105
  prefix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
105
- suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.node])
106
+ suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
107
+ 'aria-label': PropTypes.string,
106
108
  };
107
109
 
108
110
  static defaultProps = {
@@ -140,12 +142,18 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
140
142
  }
141
143
 
142
144
  static getDerivedStateFromProps(nextProps: TagInputProps, prevState: TagInputState) {
143
- const {
144
- value,
145
- inputValue,
146
- } = nextProps;
145
+ const { value, inputValue } = nextProps;
146
+ const { tagsArray: prevTagsArray } = prevState;
147
+ let tagsArray: string[];
148
+ if (isArray(value)) {
149
+ tagsArray = value;
150
+ } else if ('value' in nextProps && !value) {
151
+ tagsArray = [];
152
+ } else {
153
+ tagsArray = prevTagsArray;
154
+ }
147
155
  return {
148
- tagsArray: isArray(value) ? value : prevState.tagsArray,
156
+ tagsArray,
149
157
  inputValue: isString(inputValue) ? inputValue : prevState.inputValue
150
158
  };
151
159
  }
@@ -216,6 +224,10 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
216
224
  this.foundation.handleClearBtn(e);
217
225
  };
218
226
 
227
+ handleClearEnterPress = (e: React.KeyboardEvent<HTMLDivElement>) => {
228
+ this.foundation.handleClearEnterPress(e);
229
+ };
230
+
219
231
  handleTagClose = (idx: number) => {
220
232
  this.foundation.handleTagClose(idx);
221
233
  };
@@ -236,7 +248,14 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
236
248
  });
237
249
  if (showClear) {
238
250
  return (
239
- <div className={clearCls} onClick={e => this.handleClearBtn(e)}>
251
+ <div
252
+ role="button"
253
+ tabIndex={0}
254
+ aria-label="Clear TagInput value"
255
+ className={clearCls}
256
+ onClick={e => this.handleClearBtn(e)}
257
+ onKeyPress={e => this.handleClearEnterPress(e)}
258
+ >
240
259
  <IconClear />
241
260
  </div>
242
261
  );
@@ -398,6 +417,9 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
398
417
  <div
399
418
  style={style}
400
419
  className={tagInputCls}
420
+ aria-disabled={disabled}
421
+ aria-label={this.props['aria-label']}
422
+ aria-invalid={validateStatus === 'error'}
401
423
  onMouseEnter={e => {
402
424
  this.handleInputMouseEnter(e);
403
425
  }}
@@ -409,6 +431,7 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
409
431
  <div className={wrapperCls}>
410
432
  {this.renderTags()}
411
433
  <Input
434
+ aria-label='input value'
412
435
  ref={this.inputRef as any}
413
436
  className={inputCls}
414
437
  disabled={disabled}
@@ -36,6 +36,11 @@ export type BaseValueType = string | number | Date;
36
36
  export type Type = 'time' | 'timeRange';
37
37
 
38
38
  export type TimePickerProps = {
39
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
40
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
41
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
42
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
43
+ 'aria-required'?: React.AriaAttributes['aria-required'];
39
44
  autoAdjustOverflow?: boolean;
40
45
  autoFocus?: boolean; // TODO: autoFocus did not take effect
41
46
  className?: string;
@@ -56,6 +61,7 @@ export type TimePickerProps = {
56
61
  inputReadOnly?: boolean;
57
62
  inputStyle?: React.CSSProperties;
58
63
  insetLabel?: React.ReactNode;
64
+ insetLabelId?: string;
59
65
  locale?: Locale['TimePicker'];
60
66
  localeCode?: string;
61
67
  minuteStep?: number;
@@ -100,10 +106,14 @@ export interface TimePickerState {
100
106
  invalid: boolean;
101
107
  }
102
108
 
103
-
104
109
  export default class TimePicker extends BaseComponent<TimePickerProps, TimePickerState> {
105
110
  static contextType = ConfigContext;
106
111
  static propTypes = {
112
+ 'aria-labelledby': PropTypes.string,
113
+ 'aria-invalid': PropTypes.bool,
114
+ 'aria-errormessage': PropTypes.string,
115
+ 'aria-describedby': PropTypes.string,
116
+ 'aria-required': PropTypes.bool,
107
117
  prefixCls: PropTypes.string,
108
118
  clearText: PropTypes.string,
109
119
  value: TimeShape,
@@ -142,6 +152,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
142
152
  dateFnsLocale: PropTypes.object,
143
153
  zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
144
154
  insetLabel: PropTypes.node,
155
+ insetLabelId: PropTypes.string,
145
156
  validateStatus: PropTypes.oneOf(strings.STATUS),
146
157
  type: PropTypes.oneOf<TimePickerProps['type']>(strings.TYPES),
147
158
  rangeSeparator: PropTypes.string,
@@ -429,6 +440,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
429
440
  zIndex,
430
441
  getPopupContainer,
431
442
  insetLabel,
443
+ insetLabelId,
432
444
  inputStyle,
433
445
  showClear,
434
446
  panelHeader,
@@ -473,6 +485,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
473
485
  value: inputValue,
474
486
  onFocus: this.handleFocus,
475
487
  insetLabel,
488
+ insetLabelId,
476
489
  format,
477
490
  locale,
478
491
  localeCode,
@@ -10,7 +10,7 @@ export default {
10
10
 
11
11
  export const DefaultTimeline = () => (
12
12
  <div>
13
- <Timeline>
13
+ <Timeline aria-label="xx事故处理过程时间线">
14
14
  <Timeline.Item time="2015-09-01">创建服务现场</Timeline.Item>
15
15
  <Timeline.Item time="2015-09-01">初步排除网络异常</Timeline.Item>
16
16
  <Timeline.Item time="2015-09-01">技术测试异常</Timeline.Item>
@@ -12,7 +12,7 @@ export interface Data extends TimelineItemProps {
12
12
  content: React.ReactNode;
13
13
  }
14
14
 
15
- export interface TimelineProps {
15
+ export interface TimelineProps extends Pick<React.AriaAttributes, 'aria-label'> {
16
16
  mode?: 'left' | 'right' | 'center' | 'alternate';
17
17
  className?: string;
18
18
  style?: React.CSSProperties;
@@ -86,7 +86,7 @@ class Timeline extends PureComponent<TimelineProps> {
86
86
  const items = childrenList || this.addClassName(children);
87
87
 
88
88
  return (
89
- <ul style={style} className={classString}>
89
+ <ul aria-label={this.props['aria-label']} style={style} className={classString}>
90
90
  {items}
91
91
  </ul>
92
92
  );
package/timeline/item.tsx CHANGED
@@ -63,9 +63,10 @@ export default class Item extends PureComponent<TimelineItemProps> {
63
63
  const dotStyle = color ? { style: { backgroundColor: color } } : null;
64
64
  return (
65
65
  <li className={itemCls} style={style} onClick={onClick}>
66
- <div className={`${prefixCls}-tail`} />
66
+ <div className={`${prefixCls}-tail`} aria-hidden />
67
67
  <div
68
68
  className={dotCls}
69
+ aria-hidden
69
70
  {...dotStyle}
70
71
  >
71
72
  {dot}
package/toast/toast.tsx CHANGED
@@ -118,6 +118,8 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
118
118
  const btnSize = 'small';
119
119
  return (
120
120
  <div
121
+ role='alert'
122
+ aria-label={`${type ? type : 'default'} type`}
121
123
  className={toastCls}
122
124
  style={style}
123
125
  onMouseEnter={this.clearCloseTimer}
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  const TriangleArrow: React.FC<{ [key: string]: any }> = props => {
4
4
  const { className, style, ...restProps } = props;
5
5
  return (
6
- <svg className={className} style={style} {...restProps} width="24" height="7" viewBox="0 0 24 7" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
6
+ <svg aria-hidden className={className} style={style} {...restProps} width="24" height="7" viewBox="0 0 24 7" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
7
7
  <path d="M24 0V1C20 1 18.5 2 16.5 4C14.5 6 14 7 12 7C10 7 9.5 6 7.5 4C5.5 2 4 1 0 1V0H24Z" />
8
8
  </svg>
9
9
  );
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  const TriangleArrowVertical: React.FC<{ [key: string]: any }> = props => {
4
4
  const { className, style, ...restProps } = props;
5
5
  return (
6
- <svg className={className} style={style} {...restProps} width="7" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
6
+ <svg aria-hidden className={className} style={style} {...restProps} width="7" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
7
7
  <path d="M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z" />
8
8
  </svg>
9
9
  );