@douyinfe/semi-ui 2.2.2 → 2.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/_base/_story/a11y.jsx +6 -6
  2. package/_base/_story/a11y.scss +0 -1
  3. package/_base/_story/index.scss +2 -5
  4. package/_utils/hooks/usePrevFocus.ts +16 -0
  5. package/_utils/index.ts +4 -0
  6. package/anchor/_story/anchor.stories.js +1 -1
  7. package/anchor/index.tsx +5 -2
  8. package/anchor/link.tsx +29 -4
  9. package/autoComplete/index.tsx +28 -1
  10. package/avatar/_story/avatar.stories.js +4 -4
  11. package/avatar/index.tsx +6 -4
  12. package/banner/index.tsx +2 -1
  13. package/breadcrumb/_story/breadcrumb.stories.js +22 -8
  14. package/breadcrumb/index.tsx +8 -1
  15. package/breadcrumb/item.tsx +1 -1
  16. package/button/Button.tsx +4 -0
  17. package/button/__test__/button.test.js +1 -1
  18. package/button/_story/button.stories.js +10 -10
  19. package/button/buttonGroup.tsx +4 -2
  20. package/button/splitButtonGroup.tsx +5 -2
  21. package/card/_story/card.stories.js +8 -1
  22. package/card/_story/card.stories.tsx +3 -0
  23. package/card/index.tsx +5 -2
  24. package/cascader/index.tsx +33 -5
  25. package/checkbox/_story/checkbox.stories.js +19 -12
  26. package/checkbox/checkbox.tsx +40 -5
  27. package/checkbox/checkboxGroup.tsx +30 -5
  28. package/checkbox/checkboxInner.tsx +25 -2
  29. package/collapse/index.tsx +1 -1
  30. package/collapse/item.tsx +12 -7
  31. package/collapsible/index.tsx +4 -2
  32. package/configProvider/_story/configProvider.stories.tsx +27 -0
  33. package/datePicker/datePicker.tsx +19 -0
  34. package/dist/css/semi.css +23 -12
  35. package/dist/css/semi.min.css +1 -1
  36. package/dist/umd/semi-ui.js +2502 -1249
  37. package/dist/umd/semi-ui.js.map +1 -1
  38. package/dist/umd/semi-ui.min.js +1 -1
  39. package/dist/umd/semi-ui.min.js.map +1 -1
  40. package/dropdown/dropdownItem.tsx +1 -1
  41. package/dropdown/dropdownMenu.tsx +1 -1
  42. package/dropdown/index.tsx +11 -3
  43. package/empty/index.tsx +4 -4
  44. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  45. package/form/_story/Validate/validateDemo.jsx +1 -1
  46. package/form/_story/demo.jsx +12 -3
  47. package/form/_story/form.stories.js +0 -7
  48. package/form/baseForm.tsx +2 -0
  49. package/form/errorMessage.tsx +13 -2
  50. package/form/hoc/withField.tsx +37 -8
  51. package/form/index.tsx +0 -2
  52. package/form/interface.ts +2 -0
  53. package/form/label.tsx +4 -2
  54. package/input/index.tsx +49 -4
  55. package/input/inputGroup.tsx +9 -4
  56. package/input/textarea.tsx +30 -9
  57. package/inputNumber/__test__/inputNumber.test.js +36 -8
  58. package/inputNumber/index.tsx +30 -2
  59. package/layout/Sider.tsx +6 -2
  60. package/layout/index.tsx +4 -3
  61. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  62. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  63. package/lib/cjs/_utils/index.d.ts +1 -0
  64. package/lib/cjs/_utils/index.js +6 -1
  65. package/lib/cjs/anchor/index.d.ts +2 -0
  66. package/lib/cjs/anchor/index.js +6 -1
  67. package/lib/cjs/anchor/link.d.ts +4 -1
  68. package/lib/cjs/anchor/link.js +39 -5
  69. package/lib/cjs/autoComplete/index.d.ts +17 -0
  70. package/lib/cjs/autoComplete/index.js +21 -2
  71. package/lib/cjs/avatar/index.d.ts +4 -3
  72. package/lib/cjs/avatar/index.js +15 -11
  73. package/lib/cjs/banner/index.js +4 -2
  74. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  75. package/lib/cjs/breadcrumb/index.js +10 -4
  76. package/lib/cjs/breadcrumb/item.js +2 -2
  77. package/lib/cjs/button/Button.d.ts +2 -0
  78. package/lib/cjs/button/Button.js +4 -2
  79. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  80. package/lib/cjs/button/buttonGroup.js +8 -4
  81. package/lib/cjs/button/index.d.ts +1 -0
  82. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  83. package/lib/cjs/button/splitButtonGroup.js +5 -2
  84. package/lib/cjs/card/index.d.ts +3 -0
  85. package/lib/cjs/card/index.js +3 -1
  86. package/lib/cjs/cascader/index.d.ts +14 -0
  87. package/lib/cjs/cascader/index.js +35 -7
  88. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  89. package/lib/cjs/checkbox/checkbox.js +51 -17
  90. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  91. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  92. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  93. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  94. package/lib/cjs/collapse/item.d.ts +2 -1
  95. package/lib/cjs/collapse/item.js +12 -2
  96. package/lib/cjs/collapsible/index.d.ts +1 -0
  97. package/lib/cjs/collapsible/index.js +4 -2
  98. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  99. package/lib/cjs/datePicker/datePicker.js +14 -1
  100. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  101. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  102. package/lib/cjs/dropdown/index.d.ts +10 -3
  103. package/lib/cjs/form/baseForm.d.ts +9 -0
  104. package/lib/cjs/form/baseForm.js +3 -1
  105. package/lib/cjs/form/errorMessage.d.ts +4 -0
  106. package/lib/cjs/form/errorMessage.js +21 -3
  107. package/lib/cjs/form/field.d.ts +7 -0
  108. package/lib/cjs/form/hoc/withField.js +49 -16
  109. package/lib/cjs/form/index.d.ts +0 -1
  110. package/lib/cjs/form/interface.d.ts +2 -0
  111. package/lib/cjs/form/label.d.ts +2 -0
  112. package/lib/cjs/form/label.js +5 -2
  113. package/lib/cjs/input/index.d.ts +16 -0
  114. package/lib/cjs/input/index.js +51 -15
  115. package/lib/cjs/input/inputGroup.d.ts +2 -1
  116. package/lib/cjs/input/inputGroup.js +11 -1
  117. package/lib/cjs/input/textarea.js +16 -3
  118. package/lib/cjs/inputNumber/index.d.ts +8 -0
  119. package/lib/cjs/inputNumber/index.js +35 -4
  120. package/lib/cjs/layout/Sider.d.ts +4 -0
  121. package/lib/cjs/layout/Sider.js +4 -1
  122. package/lib/cjs/layout/index.js +2 -0
  123. package/lib/cjs/list/index.d.ts +4 -4
  124. package/lib/cjs/list/item.js +0 -1
  125. package/lib/cjs/modal/Modal.js +2 -0
  126. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  127. package/lib/cjs/modal/ModalContent.js +47 -5
  128. package/lib/cjs/navigation/Item.d.ts +4 -2
  129. package/lib/cjs/navigation/Item.js +25 -5
  130. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  131. package/lib/cjs/navigation/SubNav.js +8 -1
  132. package/lib/cjs/navigation/index.js +2 -0
  133. package/lib/cjs/notification/notice.d.ts +1 -1
  134. package/lib/cjs/notification/notice.js +32 -22
  135. package/lib/cjs/pagination/index.js +16 -6
  136. package/lib/cjs/popover/index.js +7 -3
  137. package/lib/cjs/progress/index.d.ts +8 -0
  138. package/lib/cjs/progress/index.js +42 -9
  139. package/lib/cjs/radio/radio.d.ts +6 -1
  140. package/lib/cjs/radio/radio.js +17 -5
  141. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  142. package/lib/cjs/radio/radioGroup.js +18 -3
  143. package/lib/cjs/radio/radioInner.d.ts +6 -1
  144. package/lib/cjs/radio/radioInner.js +11 -3
  145. package/lib/cjs/rating/index.d.ts +14 -0
  146. package/lib/cjs/rating/index.js +14 -3
  147. package/lib/cjs/rating/item.d.ts +2 -0
  148. package/lib/cjs/rating/item.js +6 -1
  149. package/lib/cjs/select/index.d.ts +16 -0
  150. package/lib/cjs/select/index.js +65 -19
  151. package/lib/cjs/select/option.js +28 -22
  152. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  153. package/lib/cjs/sideSheet/SideSheetContent.js +4 -1
  154. package/lib/cjs/sideSheet/index.d.ts +1 -0
  155. package/lib/cjs/sideSheet/index.js +2 -1
  156. package/lib/cjs/slider/index.d.ts +2 -1
  157. package/lib/cjs/slider/index.js +64 -17
  158. package/lib/cjs/spin/icon.js +3 -4
  159. package/lib/cjs/steps/basicStep.d.ts +3 -0
  160. package/lib/cjs/steps/basicStep.js +23 -25
  161. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  162. package/lib/cjs/steps/basicSteps.js +2 -1
  163. package/lib/cjs/steps/fillStep.d.ts +3 -0
  164. package/lib/cjs/steps/fillStep.js +19 -4
  165. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  166. package/lib/cjs/steps/fillSteps.js +2 -1
  167. package/lib/cjs/steps/navStep.d.ts +3 -0
  168. package/lib/cjs/steps/navStep.js +22 -25
  169. package/lib/cjs/steps/navSteps.d.ts +1 -0
  170. package/lib/cjs/steps/navSteps.js +2 -1
  171. package/lib/cjs/switch/index.d.ts +12 -0
  172. package/lib/cjs/switch/index.js +19 -4
  173. package/lib/cjs/table/Body/BaseRow.js +35 -3
  174. package/lib/cjs/table/Body/index.js +9 -1
  175. package/lib/cjs/table/ColumnFilter.js +4 -0
  176. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  177. package/lib/cjs/table/ColumnSelection.js +6 -2
  178. package/lib/cjs/table/ColumnSorter.js +19 -3
  179. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  180. package/lib/cjs/table/Table.d.ts +2 -0
  181. package/lib/cjs/table/Table.js +35 -15
  182. package/lib/cjs/table/TableCell.d.ts +2 -0
  183. package/lib/cjs/table/TableCell.js +6 -2
  184. package/lib/cjs/table/TableHeaderRow.js +8 -2
  185. package/lib/cjs/tabs/TabBar.js +11 -3
  186. package/lib/cjs/tabs/TabPane.js +3 -1
  187. package/lib/cjs/tabs/index.js +0 -1
  188. package/lib/cjs/tagInput/index.d.ts +4 -1
  189. package/lib/cjs/tagInput/index.js +29 -3
  190. package/lib/cjs/timePicker/TimePicker.d.ts +14 -0
  191. package/lib/cjs/timePicker/TimePicker.js +11 -4
  192. package/lib/cjs/timePicker/index.d.ts +7 -0
  193. package/lib/cjs/timeline/index.d.ts +1 -1
  194. package/lib/cjs/timeline/index.js +1 -0
  195. package/lib/cjs/timeline/item.js +4 -2
  196. package/lib/cjs/toast/toast.js +2 -0
  197. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  198. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  199. package/lib/cjs/tooltip/index.d.ts +16 -12
  200. package/lib/cjs/tooltip/index.js +55 -39
  201. package/lib/cjs/transfer/index.js +32 -14
  202. package/lib/cjs/tree/index.d.ts +1 -0
  203. package/lib/cjs/tree/index.js +15 -6
  204. package/lib/cjs/tree/treeNode.d.ts +12 -4
  205. package/lib/cjs/tree/treeNode.js +54 -5
  206. package/lib/cjs/treeSelect/index.d.ts +16 -0
  207. package/lib/cjs/treeSelect/index.js +60 -12
  208. package/lib/cjs/typography/base.js +18 -7
  209. package/lib/cjs/typography/copyable.js +6 -1
  210. package/lib/cjs/upload/fileCard.js +26 -7
  211. package/lib/cjs/upload/index.js +19 -4
  212. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  213. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  214. package/lib/es/_utils/index.d.ts +1 -0
  215. package/lib/es/_utils/index.js +4 -1
  216. package/lib/es/anchor/index.d.ts +2 -0
  217. package/lib/es/anchor/index.js +6 -1
  218. package/lib/es/anchor/link.d.ts +4 -1
  219. package/lib/es/anchor/link.js +38 -5
  220. package/lib/es/autoComplete/index.d.ts +17 -0
  221. package/lib/es/autoComplete/index.js +21 -2
  222. package/lib/es/avatar/index.d.ts +4 -3
  223. package/lib/es/avatar/index.js +15 -11
  224. package/lib/es/banner/index.js +4 -2
  225. package/lib/es/breadcrumb/index.d.ts +3 -0
  226. package/lib/es/breadcrumb/index.js +10 -4
  227. package/lib/es/breadcrumb/item.js +2 -2
  228. package/lib/es/button/Button.d.ts +2 -0
  229. package/lib/es/button/Button.js +4 -2
  230. package/lib/es/button/buttonGroup.d.ts +3 -0
  231. package/lib/es/button/buttonGroup.js +8 -4
  232. package/lib/es/button/index.d.ts +1 -0
  233. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  234. package/lib/es/button/splitButtonGroup.js +5 -2
  235. package/lib/es/card/index.d.ts +3 -0
  236. package/lib/es/card/index.js +3 -1
  237. package/lib/es/cascader/index.d.ts +14 -0
  238. package/lib/es/cascader/index.js +35 -7
  239. package/lib/es/checkbox/checkbox.d.ts +21 -1
  240. package/lib/es/checkbox/checkbox.js +50 -17
  241. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  242. package/lib/es/checkbox/checkboxGroup.js +18 -5
  243. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  244. package/lib/es/checkbox/checkboxInner.js +20 -3
  245. package/lib/es/collapse/item.d.ts +2 -1
  246. package/lib/es/collapse/item.js +11 -2
  247. package/lib/es/collapsible/index.d.ts +1 -0
  248. package/lib/es/collapsible/index.js +4 -2
  249. package/lib/es/datePicker/datePicker.d.ts +12 -0
  250. package/lib/es/datePicker/datePicker.js +14 -1
  251. package/lib/es/dropdown/dropdownItem.js +3 -1
  252. package/lib/es/dropdown/dropdownMenu.js +4 -1
  253. package/lib/es/dropdown/index.d.ts +10 -3
  254. package/lib/es/form/baseForm.d.ts +9 -0
  255. package/lib/es/form/baseForm.js +3 -1
  256. package/lib/es/form/errorMessage.d.ts +4 -0
  257. package/lib/es/form/errorMessage.js +21 -3
  258. package/lib/es/form/field.d.ts +7 -0
  259. package/lib/es/form/hoc/withField.js +48 -15
  260. package/lib/es/form/index.d.ts +0 -1
  261. package/lib/es/form/index.js +0 -1
  262. package/lib/es/form/interface.d.ts +2 -0
  263. package/lib/es/form/label.d.ts +2 -0
  264. package/lib/es/form/label.js +5 -2
  265. package/lib/es/input/index.d.ts +16 -0
  266. package/lib/es/input/index.js +51 -15
  267. package/lib/es/input/inputGroup.d.ts +2 -1
  268. package/lib/es/input/inputGroup.js +11 -1
  269. package/lib/es/input/textarea.js +16 -3
  270. package/lib/es/inputNumber/index.d.ts +8 -0
  271. package/lib/es/inputNumber/index.js +36 -4
  272. package/lib/es/layout/Sider.d.ts +4 -0
  273. package/lib/es/layout/Sider.js +4 -1
  274. package/lib/es/layout/index.js +2 -0
  275. package/lib/es/list/index.d.ts +4 -4
  276. package/lib/es/list/item.js +0 -1
  277. package/lib/es/modal/Modal.js +2 -0
  278. package/lib/es/modal/ModalContent.d.ts +3 -1
  279. package/lib/es/modal/ModalContent.js +46 -5
  280. package/lib/es/navigation/Item.d.ts +4 -2
  281. package/lib/es/navigation/Item.js +25 -5
  282. package/lib/es/navigation/SubNav.d.ts +4 -2
  283. package/lib/es/navigation/SubNav.js +8 -1
  284. package/lib/es/navigation/index.js +2 -0
  285. package/lib/es/notification/notice.d.ts +1 -1
  286. package/lib/es/notification/notice.js +33 -24
  287. package/lib/es/pagination/index.js +16 -6
  288. package/lib/es/popover/index.js +7 -3
  289. package/lib/es/progress/index.d.ts +8 -0
  290. package/lib/es/progress/index.js +42 -9
  291. package/lib/es/radio/radio.d.ts +6 -1
  292. package/lib/es/radio/radio.js +16 -5
  293. package/lib/es/radio/radioGroup.d.ts +16 -1
  294. package/lib/es/radio/radioGroup.js +18 -3
  295. package/lib/es/radio/radioInner.d.ts +6 -1
  296. package/lib/es/radio/radioInner.js +11 -3
  297. package/lib/es/rating/index.d.ts +14 -0
  298. package/lib/es/rating/index.js +14 -3
  299. package/lib/es/rating/item.d.ts +2 -0
  300. package/lib/es/rating/item.js +6 -1
  301. package/lib/es/select/index.d.ts +16 -0
  302. package/lib/es/select/index.js +63 -17
  303. package/lib/es/select/option.js +28 -22
  304. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  305. package/lib/es/sideSheet/SideSheetContent.js +4 -1
  306. package/lib/es/sideSheet/index.d.ts +1 -0
  307. package/lib/es/sideSheet/index.js +2 -1
  308. package/lib/es/slider/index.d.ts +2 -1
  309. package/lib/es/slider/index.js +63 -16
  310. package/lib/es/spin/icon.js +3 -4
  311. package/lib/es/steps/basicStep.d.ts +3 -0
  312. package/lib/es/steps/basicStep.js +23 -23
  313. package/lib/es/steps/basicSteps.d.ts +1 -0
  314. package/lib/es/steps/basicSteps.js +2 -1
  315. package/lib/es/steps/fillStep.d.ts +3 -0
  316. package/lib/es/steps/fillStep.js +19 -4
  317. package/lib/es/steps/fillSteps.d.ts +1 -0
  318. package/lib/es/steps/fillSteps.js +2 -1
  319. package/lib/es/steps/navStep.d.ts +3 -0
  320. package/lib/es/steps/navStep.js +22 -23
  321. package/lib/es/steps/navSteps.d.ts +1 -0
  322. package/lib/es/steps/navSteps.js +2 -1
  323. package/lib/es/switch/index.d.ts +12 -0
  324. package/lib/es/switch/index.js +19 -4
  325. package/lib/es/table/Body/BaseRow.js +35 -3
  326. package/lib/es/table/Body/index.js +9 -2
  327. package/lib/es/table/ColumnFilter.js +4 -0
  328. package/lib/es/table/ColumnSelection.d.ts +3 -0
  329. package/lib/es/table/ColumnSelection.js +6 -2
  330. package/lib/es/table/ColumnSorter.js +17 -3
  331. package/lib/es/table/CustomExpandIcon.js +6 -1
  332. package/lib/es/table/Table.d.ts +2 -0
  333. package/lib/es/table/Table.js +35 -15
  334. package/lib/es/table/TableCell.d.ts +2 -0
  335. package/lib/es/table/TableCell.js +6 -2
  336. package/lib/es/table/TableHeaderRow.js +8 -2
  337. package/lib/es/tabs/TabBar.js +11 -3
  338. package/lib/es/tabs/TabPane.js +3 -1
  339. package/lib/es/tabs/index.js +0 -1
  340. package/lib/es/tagInput/index.d.ts +4 -1
  341. package/lib/es/tagInput/index.js +29 -3
  342. package/lib/es/timePicker/TimePicker.d.ts +14 -0
  343. package/lib/es/timePicker/TimePicker.js +11 -4
  344. package/lib/es/timePicker/index.d.ts +7 -0
  345. package/lib/es/timeline/index.d.ts +1 -1
  346. package/lib/es/timeline/index.js +1 -0
  347. package/lib/es/timeline/item.js +4 -2
  348. package/lib/es/toast/toast.js +2 -0
  349. package/lib/es/tooltip/TriangleArrow.js +1 -0
  350. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  351. package/lib/es/tooltip/index.d.ts +16 -12
  352. package/lib/es/tooltip/index.js +53 -39
  353. package/lib/es/transfer/index.js +32 -14
  354. package/lib/es/tree/index.d.ts +1 -0
  355. package/lib/es/tree/index.js +15 -6
  356. package/lib/es/tree/treeNode.d.ts +12 -4
  357. package/lib/es/tree/treeNode.js +53 -5
  358. package/lib/es/treeSelect/index.d.ts +16 -0
  359. package/lib/es/treeSelect/index.js +57 -10
  360. package/lib/es/typography/base.js +17 -7
  361. package/lib/es/typography/copyable.js +5 -1
  362. package/lib/es/upload/fileCard.js +26 -7
  363. package/lib/es/upload/index.js +19 -4
  364. package/list/index.tsx +5 -5
  365. package/list/item.tsx +0 -1
  366. package/modal/Modal.tsx +2 -0
  367. package/modal/ModalContent.tsx +35 -5
  368. package/navigation/Item.tsx +15 -0
  369. package/navigation/SubNav.tsx +13 -1
  370. package/navigation/index.tsx +1 -1
  371. package/notification/notice.tsx +19 -14
  372. package/package.json +8 -8
  373. package/pagination/index.tsx +9 -5
  374. package/popover/index.tsx +5 -0
  375. package/progress/_story/progress.stories.js +18 -18
  376. package/progress/index.tsx +58 -20
  377. package/radio/radio.tsx +12 -2
  378. package/radio/radioGroup.tsx +29 -3
  379. package/radio/radioInner.tsx +10 -1
  380. package/rating/index.tsx +19 -2
  381. package/rating/item.tsx +6 -0
  382. package/select/__test__/select.test.js +45 -0
  383. package/select/_story/select.stories.js +29 -0
  384. package/select/index.tsx +57 -4
  385. package/select/option.tsx +3 -0
  386. package/sideSheet/SideSheetContent.tsx +6 -4
  387. package/sideSheet/index.tsx +3 -2
  388. package/slider/__test__/slider.test.js +9 -0
  389. package/slider/_story/slider.stories.js +1 -1
  390. package/slider/index.tsx +44 -7
  391. package/spin/icon.tsx +4 -3
  392. package/steps/basicStep.tsx +15 -4
  393. package/steps/basicSteps.tsx +3 -2
  394. package/steps/fillStep.tsx +27 -12
  395. package/steps/fillSteps.tsx +2 -0
  396. package/steps/navStep.tsx +15 -4
  397. package/steps/navSteps.tsx +3 -2
  398. package/switch/_story/switch.stories.js +20 -19
  399. package/switch/_story/switch.stories.tsx +13 -13
  400. package/switch/index.tsx +23 -5
  401. package/table/Body/BaseRow.tsx +25 -1
  402. package/table/Body/index.tsx +7 -2
  403. package/table/ColumnFilter.tsx +7 -1
  404. package/table/ColumnSelection.tsx +4 -1
  405. package/table/ColumnSorter.tsx +18 -1
  406. package/table/CustomExpandIcon.tsx +5 -0
  407. package/table/Table.tsx +30 -14
  408. package/table/TableCell.tsx +11 -1
  409. package/table/TableHeaderRow.tsx +16 -2
  410. package/table/__test__/table.test.js +46 -0
  411. package/table/_story/table.stories.js +2 -0
  412. package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
  413. package/table/_story/v2/FixedZIndex/index.jsx +87 -0
  414. package/tabs/TabBar.tsx +8 -5
  415. package/tabs/TabPane.tsx +3 -1
  416. package/tabs/index.tsx +0 -1
  417. package/tagInput/__test__/tagInput.test.js +46 -0
  418. package/tagInput/_story/tagInput.stories.js +2 -2
  419. package/tagInput/index.tsx +31 -8
  420. package/timePicker/TimePicker.tsx +17 -2
  421. package/timePicker/__test__/timePicker.test.js +34 -3
  422. package/timePicker/_story/timepicker.stories.js +18 -0
  423. package/timeline/_story/timeline.stories.js +1 -1
  424. package/timeline/index.tsx +2 -2
  425. package/timeline/item.tsx +2 -1
  426. package/toast/toast.tsx +2 -0
  427. package/tooltip/TriangleArrow.tsx +1 -1
  428. package/tooltip/TriangleArrowVertical.tsx +1 -1
  429. package/tooltip/_story/tooltip.stories.js +562 -514
  430. package/tooltip/index.tsx +51 -33
  431. package/transfer/index.tsx +29 -25
  432. package/tree/_story/tree.stories.js +3 -3
  433. package/tree/index.tsx +10 -2
  434. package/tree/treeNode.tsx +54 -11
  435. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  436. package/treeSelect/_story/treeSelect.stories.js +12 -0
  437. package/treeSelect/index.tsx +58 -7
  438. package/typography/base.tsx +7 -1
  439. package/typography/copyable.tsx +10 -1
  440. package/upload/fileCard.tsx +14 -16
  441. package/upload/index.tsx +10 -6
@@ -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,
@@ -520,12 +534,6 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
520
534
  this.foundation.initExpandedRowKeys({ groups: stateGroups });
521
535
  }
522
536
 
523
-
524
- // Update pagination
525
- if (pagination !== prevProps.pagination) {
526
- states.pagination = isObject(pagination) ? { ...pagination } : pagination;
527
- }
528
-
529
537
  /**
530
538
  * After dataSource is updated || (cachedColumns || cachedChildren updated)
531
539
  * 1. Cache filtered sorted data and a collection of data rows, stored in this
@@ -539,23 +547,27 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
539
547
  this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);
540
548
  states.dataSource = filteredSortedDataSource;
541
549
 
542
- if (pagination === prevProps.pagination) {
543
- states.pagination = isObject(pagination) ? { ...pagination } : pagination;
544
- }
545
-
546
550
  if (this.props.groupBy) {
547
551
  states.groups = null;
548
552
  }
549
553
  }
550
554
 
555
+ // when dataSource has change, should reset currentPage
556
+ if (dataSource !== prevProps.dataSource) {
557
+ states.pagination = isObject(statePagination) ? {
558
+ ...statePagination,
559
+ currentPage: isObject(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1,
560
+ } : statePagination;
561
+ }
562
+
551
563
  if (Object.keys(states).length) {
552
564
  const {
553
565
  // eslint-disable-next-line @typescript-eslint/no-shadow
566
+ pagination: mergedStatePagination = null,
554
567
  queries: stateQueries = null,
555
- pagination: statePagination = null,
556
568
  dataSource: stateDataSource = null,
557
569
  } = states;
558
- const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, statePagination as TablePaginationProps, stateQueries);
570
+ const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, mergedStatePagination as TablePaginationProps, stateQueries);
559
571
 
560
572
  // After the pager is updated, reset allRowKeys of the current page
561
573
  this.adapter.setAllRowKeys(handledProps.allRowKeys);
@@ -790,6 +802,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
790
802
  const hasRowSelected = this.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
791
803
  return (
792
804
  <ColumnSelection
805
+ aria-label={`${allIsSelected ? 'Deselect' : 'Select'} all rows`}
793
806
  disabled={disabled}
794
807
  key={columnKey}
795
808
  selected={allIsSelected}
@@ -806,6 +819,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
806
819
 
807
820
  return (
808
821
  <ColumnSelection
822
+ aria-label={`${selected ? 'Deselect' : 'Select'} this row`}
809
823
  getCheckboxProps={checkboxPropsFn}
810
824
  selected={selected}
811
825
  onChange={(status, e) => this.toggleSelectRow(status, key, e)}
@@ -966,6 +980,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
966
980
  /**
967
981
  * render pagination
968
982
  * @param {object} pagination
983
+ * @param {object} propRenderPagination
969
984
  */
970
985
  renderPagination = (pagination: TablePaginationProps, propRenderPagination: RenderPagination) => {
971
986
  if (!pagination) {
@@ -1359,6 +1374,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1359
1374
  <div
1360
1375
  ref={this.rootWrapRef}
1361
1376
  className={classnames(className, `${prefixCls}-wrapper`)}
1377
+ data-column-fixed={anyColumnFixed}
1362
1378
  style={wrapStyle}
1363
1379
  id={id}
1364
1380
  >
@@ -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 = {
@@ -76,6 +76,8 @@ export { default as ScrollBar } from './ScrollBar';
76
76
  export { default as TableSpan } from './TableSpan';
77
77
  export { default as FixRenderReturnProps } from './FixRenderReturnProps';
78
78
  export { default as WarnColumnWithoutDataIndex } from './WarnColumnWithoutDataIndex';
79
+ export { default as FixedColumnsChange } from './v2/FixedColumnsChange';
80
+ export { default as FixedZIndex } from './v2/FixedZIndex';
79
81
 
80
82
  // empty table
81
83
 
@@ -0,0 +1,104 @@
1
+ import React, { useState, useMemo } from 'react';
2
+ import { Table, Avatar } from '@douyinfe/semi-ui';
3
+ import * as dateFns from 'date-fns';
4
+
5
+ const DAY = 24 * 60 * 60 * 1000;
6
+ const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';
7
+
8
+ const getData = () => {
9
+ const data = [];
10
+ for (let i = 0; i < 46; i++) {
11
+ const isSemiDesign = i % 2 === 0;
12
+ const randomNumber = (i * 1000) % 199;
13
+ data.push({
14
+ key: '' + i,
15
+ name: isSemiDesign ? `Semi Design 设计稿${i}.fig` : `Semi Pro 设计稿${i}.fig`,
16
+ owner: isSemiDesign ? '姜鹏志' : '郝宣',
17
+ size: randomNumber,
18
+ updateTime: new Date().valueOf() + randomNumber * DAY,
19
+ avatarBg: isSemiDesign ? 'grey' : 'red'
20
+ });
21
+ }
22
+ return data;
23
+ };
24
+
25
+ const data = getData();
26
+
27
+ /**
28
+ * fix https://github.com/DouyinFE/semi-design/issues/381
29
+ */
30
+ App.storyName = 'fixed columns change';
31
+ function App() {
32
+ const [dataSource, setData] = useState(data);
33
+ const [rowKeys, setRowKeys] = useState([]);
34
+
35
+ const columns = [
36
+ {
37
+ title: '标题',
38
+ dataIndex: 'name',
39
+ width: 400,
40
+ render: (text, record, index) => {
41
+ return (
42
+ <div>
43
+ <Avatar size="small" shape="square" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>
44
+ {text}
45
+ </div>
46
+ );
47
+ },
48
+ filters: [
49
+ {
50
+ text: 'Semi Design 设计稿',
51
+ value: 'Semi Design 设计稿',
52
+ },
53
+ {
54
+ text: 'Semi Pro 设计稿',
55
+ value: 'Semi Pro 设计稿',
56
+ },
57
+ ],
58
+ onFilter: (value, record) => record.name.includes(value),
59
+ },
60
+ {
61
+ title: '大小',
62
+ dataIndex: 'size',
63
+ sorter: (a, b) => a.size - b.size > 0 ? 1 : -1,
64
+ render: (text) => `${text} KB`
65
+ },
66
+ {
67
+ title: '所有者',
68
+ dataIndex: 'owner',
69
+ render: (text, record, index) => {
70
+ return (
71
+ <div>
72
+ <Avatar size="small" color={record.avatarBg} style={{ marginRight: 4 }}>{typeof text === 'string' && text.slice(0, 1)}</Avatar>
73
+ {text}
74
+ </div>
75
+ );
76
+ }
77
+ },
78
+ {
79
+ title: '更新日期',
80
+ dataIndex: 'updateTime',
81
+ sorter: (a, b) => a.updateTime - b.updateTime > 0 ? 1 : -1,
82
+ render: (value) => {
83
+ return dateFns.format(new Date(value), 'yyyy-MM-dd');
84
+ }
85
+ }
86
+ ];
87
+
88
+ return (
89
+ <Table
90
+ columns={columns}
91
+ dataSource={dataSource}
92
+ pagination={{
93
+ pageSize: 5,
94
+ }}
95
+ rowSelection={{
96
+ onChange: rowKeys => setRowKeys(rowKeys),
97
+ selectedRowKeys: rowKeys,
98
+ }}
99
+ scroll={{ y: 300 }}
100
+ />
101
+ );
102
+ }
103
+
104
+ export default App;
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+ import { Table, Tooltip, Tag } from '@douyinfe/semi-ui';
3
+
4
+ App.storyName = 'fixed z-index bug';
5
+ export default function App() {
6
+ const columns = [
7
+ {
8
+ title: 'Name',
9
+ dataIndex: 'name',
10
+ width: 150,
11
+ fixed: true,
12
+ filters: [
13
+ {
14
+ text: 'King 3',
15
+ value: 'King 3',
16
+ },
17
+ {
18
+ text: 'King 4',
19
+ value: 'King 4',
20
+ },
21
+ ],
22
+ onFilter: (value, record) => record.name.includes(value),
23
+ },
24
+ {
25
+ title: 'Age',
26
+ dataIndex: 'age',
27
+ width: 150,
28
+ sorter: (a, b) => (a.age - b.age > 0 ? 1 : -1),
29
+ },
30
+ {
31
+ title: 'Address',
32
+ width: 200,
33
+ dataIndex: 'address',
34
+ },
35
+ {
36
+ title: 'Description',
37
+ // width: 400,
38
+ dataIndex: 'description',
39
+ },
40
+ {
41
+ fixed: 'right',
42
+ width: 250,
43
+ render: (text, record) => <Tooltip content={record.description}><Tag color="green">Show Info</Tag></Tooltip>
44
+ }
45
+ ];
46
+
47
+ let data = [];
48
+
49
+ const rowSelection = {
50
+ onChange: (selectedRowKeys, selectedRows) => {
51
+ // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
52
+ },
53
+ getCheckboxProps: record => ({
54
+ disabled: record.name === 'Michael James', // Column configuration not to be checked
55
+ name: record.name,
56
+ }),
57
+ // fixed: true,
58
+ };
59
+
60
+ for (let i = 0; i < 46; i++) {
61
+ let age = 40 + (Math.random() > 0.5 ? 1 : -1) * Math.ceil(i / 3);
62
+ let name = `Edward King ${i}`;
63
+ data.push({
64
+ key: `${ i}`,
65
+ name,
66
+ age,
67
+ address: `London, Park Lane no. ${i}`,
68
+ description: `My name is ${name}, I am ${age} years old, living in New York No. ${i + 1} Lake Park.`,
69
+ });
70
+ }
71
+
72
+ const scroll = { y: 300, x: 1500 };
73
+
74
+ return (
75
+ <div style={{ position: 'relative', height: '100vh' }}>
76
+ <div style={{ height: 60, background: 'red', position: 'absolute', top: 0, left: 0, right: 0, zIndex: 2 }}>
77
+ Fixed Header
78
+ </div>
79
+ <Table
80
+ columns={columns}
81
+ dataSource={data}
82
+ scroll={scroll}
83
+ rowSelection={rowSelection}
84
+ />
85
+ </div>
86
+ );
87
+ }
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
@@ -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