@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
@@ -115,6 +115,7 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
115
115
 
116
116
  titleRef: React.RefObject<HTMLDivElement>;
117
117
  itemRef: React.RefObject<HTMLLIElement>;
118
+ foundation: SubNavFoundation;
118
119
  constructor(props: SubNavProps) {
119
120
  super(props);
120
121
  this.state = {
@@ -171,6 +172,10 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
171
172
  this.foundation.handleClick(e && e.nativeEvent, this.titleRef && this.titleRef.current);
172
173
  };
173
174
 
175
+ handleKeyPress = (e: React.KeyboardEvent) => {
176
+ this.foundation.handleKeyPress(e && e.nativeEvent, this.titleRef && this.titleRef.current);
177
+ }
178
+
174
179
  handleDropdownVisible = (visible: boolean) => this.foundation.handleDropdownVisibleChange(visible);
175
180
 
176
181
  renderIcon(icon: React.ReactNode, pos: string, withTransition?: boolean, isToggleIcon = false, key: number | string = 0) {
@@ -239,7 +244,14 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
239
244
  }
240
245
 
241
246
  const titleDiv = (
242
- <div ref={this.setTitleRef as any} className={titleCls} onClick={this.handleClick}>
247
+ <div
248
+ role="menuitem"
249
+ tabIndex={-1}
250
+ ref={this.setTitleRef as any}
251
+ className={titleCls}
252
+ onClick={this.handleClick}
253
+ onKeyPress={this.handleKeyPress}
254
+ >
243
255
  <div className={`${prefixCls}-item-inner`}>
244
256
  {placeholderIcons}
245
257
  {this.context.toggleIconPosition === strings.TOGGLE_ICON_LEFT && this.renderIcon(toggleIconType, strings.ICON_POS_RIGHT, withTransition, true, 'key-toggle-position-left')}
@@ -408,7 +408,7 @@ class Nav extends BaseComponent<NavProps, NavState> {
408
408
  <div className={headerListOuterCls}>
409
409
  {headers}
410
410
  <div style={bodyStyle} className={`${prefixCls}-list-wrapper`}>
411
- <ul className={`${prefixCls}-list`}>
411
+ <ul role="menu" aria-orientation={mode} className={`${prefixCls}-list`}>
412
412
  {this.adapter.getCache('itemElems')}
413
413
  {children}
414
414
  </ul>
@@ -3,19 +3,20 @@ import React from 'react';
3
3
  import cls from 'classnames';
4
4
  import PropTypes from 'prop-types';
5
5
  import ConfigContext from '../configProvider/context';
6
- import { numbers, cssClasses, strings } from '@douyinfe/semi-foundation/notification/constants';
6
+ import { cssClasses, numbers, strings } from '@douyinfe/semi-foundation/notification/constants';
7
7
  import NotificationFoundation, {
8
8
  NoticeAdapter,
9
- NoticeState,
10
- NoticeProps
9
+ NoticeProps,
10
+ NoticeState
11
11
  } from '@douyinfe/semi-foundation/notification/notificationFoundation';
12
12
  import Button from '../iconButton';
13
13
  import BaseComponent from '../_base/baseComponent';
14
14
  import { isSemiIcon } from '../_utils';
15
15
  import { noop } from 'lodash';
16
- import { IconAlertTriangle, IconInfoCircle, IconTickCircle, IconAlertCircle, IconClose } from '@douyinfe/semi-icons';
16
+ import { IconAlertCircle, IconAlertTriangle, IconClose, IconInfoCircle, IconTickCircle } from '@douyinfe/semi-icons';
17
+ import { getUuidShort } from '@douyinfe/semi-foundation/utils/uuid';
17
18
 
18
- export interface NoticeReactProps extends NoticeProps{
19
+ export interface NoticeReactProps extends NoticeProps {
19
20
  style?: React.CSSProperties;
20
21
  title?: React.ReactNode;
21
22
  content?: React.ReactNode;
@@ -88,15 +89,15 @@ class Notice extends BaseComponent<NoticeReactProps, NoticeState> {
88
89
  renderTypeIcon() {
89
90
  const { type, icon } = this.props;
90
91
  const iconMap = {
91
- warning: <IconAlertTriangle size="large" />,
92
- success: <IconTickCircle size="large" />,
93
- info: <IconInfoCircle size="large" />,
94
- error: <IconAlertCircle size="large" />,
92
+ warning: <IconAlertTriangle size="large"/>,
93
+ success: <IconTickCircle size="large"/>,
94
+ info: <IconInfoCircle size="large"/>,
95
+ error: <IconAlertCircle size="large"/>,
95
96
  };
96
97
  let iconType = iconMap[type];
97
98
  const iconCls = cls({
98
- [`${prefixCls }-icon`]: true,
99
- [`${prefixCls }-${ type}`]: true,
99
+ [`${prefixCls}-icon`]: true,
100
+ [`${prefixCls}-${type}`]: true,
100
101
  });
101
102
  if (icon) {
102
103
  iconType = icon;
@@ -104,7 +105,7 @@ class Notice extends BaseComponent<NoticeReactProps, NoticeState> {
104
105
  if (iconType) {
105
106
  return (
106
107
  <div className={iconCls}>
107
- {isSemiIcon(iconType) ? React.cloneElement(iconType, {size : iconType.props.size || 'large'}): iconType}
108
+ {isSemiIcon(iconType) ? React.cloneElement(iconType, { size: iconType.props.size || 'large' }) : iconType}
108
109
  </div>
109
110
  );
110
111
  }
@@ -152,25 +153,29 @@ class Notice extends BaseComponent<NoticeReactProps, NoticeState> {
152
153
  [`${prefixCls}-${theme}`]: theme === 'light',
153
154
  [`${prefixCls}-rtl`]: direction === 'rtl',
154
155
  });
156
+ const titleID = getUuidShort({});
155
157
  return (
158
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
156
159
  <div
157
160
  className={wrapper}
158
161
  style={style}
159
162
  onMouseEnter={this.clearCloseTimer}
160
163
  onMouseLeave={this.startCloseTimer}
161
164
  onClick={this.notifyClick}
165
+ aria-labelledby={titleID}
166
+ role={'alert'}
162
167
  >
163
168
  <div>{this.renderTypeIcon()}</div>
164
169
  <div className={`${prefixCls}-inner`}>
165
170
  <div className={`${prefixCls}-content-wrapper`}>
166
- {title ? <div className={`${prefixCls}-title`}>{title}</div> : ''}
171
+ {title ? <div id={titleID} className={`${prefixCls}-title`}>{title}</div> : ''}
167
172
  {content ? <div className={`${prefixCls}-content`}>{content}</div> : ''}
168
173
  </div>
169
174
  {showClose && (
170
175
  <Button
171
176
  className={`${prefixCls}-icon-close`}
172
177
  type="tertiary"
173
- icon={<IconClose />}
178
+ icon={<IconClose/>}
174
179
  theme="borderless"
175
180
  size="small"
176
181
  onClick={this.close}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-ui",
3
- "version": "2.2.2",
3
+ "version": "2.4.0-beta.0",
4
4
  "description": "",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es/index.js",
@@ -14,11 +14,11 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@babel/runtime-corejs3": "^7.15.4",
17
- "@douyinfe/semi-animation-react": "2.2.2",
18
- "@douyinfe/semi-foundation": "2.2.2",
19
- "@douyinfe/semi-icons": "2.2.2",
20
- "@douyinfe/semi-illustrations": "2.2.2",
21
- "@douyinfe/semi-theme-default": "2.2.2",
17
+ "@douyinfe/semi-animation-react": "2.4.0-beta.0",
18
+ "@douyinfe/semi-foundation": "2.4.0-beta.0",
19
+ "@douyinfe/semi-icons": "2.4.0-beta.0",
20
+ "@douyinfe/semi-illustrations": "2.4.0-beta.0",
21
+ "@douyinfe/semi-theme-default": "2.4.0-beta.0",
22
22
  "@types/react-window": "^1.8.2",
23
23
  "async-validator": "^3.5.0",
24
24
  "classnames": "^2.2.6",
@@ -68,13 +68,13 @@
68
68
  ],
69
69
  "author": "",
70
70
  "license": "MIT",
71
- "gitHead": "de84e4f81bb443c457c075e808c4bd1fcf9441d7",
71
+ "gitHead": "ebf8a78f5152f9733af771cd567f042eccb8c4b9",
72
72
  "devDependencies": {
73
73
  "@babel/plugin-proposal-decorators": "^7.15.8",
74
74
  "@babel/plugin-transform-runtime": "^7.15.8",
75
75
  "@babel/preset-env": "^7.15.8",
76
76
  "@babel/preset-react": "^7.14.5",
77
- "@douyinfe/semi-scss-compile": "2.2.2",
77
+ "@douyinfe/semi-scss-compile": "2.4.0-beta.0",
78
78
  "@storybook/addon-knobs": "^6.3.1",
79
79
  "@types/lodash": "^4.14.176",
80
80
  "babel-loader": "^8.2.2",
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable max-len */
2
+ /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */
2
3
  import React from 'react';
3
4
  import classNames from 'classnames';
4
5
  import PropTypes from 'prop-types';
@@ -213,7 +214,7 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
213
214
  [`${prefixCls}-item-disabled`]: prevDisabled,
214
215
  });
215
216
  return (
216
- <li onClick={e => !prevDisabled && this.foundation.goPrev(e)} className={preClassName} tab-index={0}>
217
+ <li role="button" aria-disabled={prevDisabled ? true : false} aria-label="Previous" onClick={e => !prevDisabled && this.foundation.goPrev(e)} className={preClassName}>
217
218
  {prevText || <IconChevronLeft size="large" />}
218
219
  </li>
219
220
  );
@@ -228,7 +229,7 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
228
229
  [`${prefixCls}-next`]: true,
229
230
  });
230
231
  return (
231
- <li onClick={e => !nextDisabled && this.foundation.goNext(e)} className={nextClassName} tab-index={0}>
232
+ <li role="button" aria-disabled={nextDisabled ? true : false} aria-label="Next" onClick={e => !nextDisabled && this.foundation.goNext(e)} className={nextClassName}>
232
233
  {nextText || <IconChevronRight size="large" />}
233
234
  </li>
234
235
  );
@@ -257,6 +258,7 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
257
258
  return (
258
259
  <div className={switchCls}>
259
260
  <Select
261
+ aria-label="Page size selector"
260
262
  onChange={newPageSize => this.foundation.changePageSize(newPageSize)}
261
263
  value={pageSize}
262
264
  key={pageSizeText}
@@ -319,8 +321,8 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
319
321
  key={`${page}${i}`}
320
322
  onClick={() => this.foundation.goPage(page, i)}
321
323
  className={pageListClassName}
322
- tab-index={0}
323
-
324
+ aria-label={page === '...' ? 'More' : `Page ${page}`}
325
+ aria-current={currentPage === page ? "page" : false}
324
326
  >
325
327
  {page}
326
328
  </li>
@@ -355,10 +357,12 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
355
357
  const page = restList[index];
356
358
  return (
357
359
  <div
360
+ role="listitem"
358
361
  key={`${page}${index}`}
359
362
  className={className}
360
363
  onClick={() => this.foundation.goPage(page, index)}
361
364
  style={style}
365
+ aria-label={`${page}`}
362
366
  >
363
367
  {page}
364
368
  </div>
@@ -417,7 +421,7 @@ export default class Pagination extends BaseComponent<PaginationProps, Paginatio
417
421
  const { total, pageSize } = this.state;
418
422
  const { showTotal, className, style, hideOnSinglePage, showSizeChanger } = this.props;
419
423
  const paginationCls = classNames(className, `${prefixCls}`);
420
- const showTotalCls = `${prefixCls }-total`;
424
+ const showTotalCls = `${prefixCls}-total`;
421
425
  const totalPageNum = Math.ceil(total / pageSize);
422
426
  if (totalPageNum < 2 && hideOnSinglePage && !showSizeChanger) {
423
427
  return null;
package/popover/index.tsx CHANGED
@@ -118,6 +118,7 @@ class Popover extends React.PureComponent<PopoverProps, PopoverState> {
118
118
  arrowBounding,
119
119
  position,
120
120
  style,
121
+ trigger,
121
122
  ...attr
122
123
  } = this.props;
123
124
  let { spacing } = this.props;
@@ -136,9 +137,12 @@ class Popover extends React.PureComponent<PopoverProps, PopoverState> {
136
137
  spacing = showArrow ? numbers.SPACING_WITH_ARROW : numbers.SPACING;
137
138
  }
138
139
 
140
+ const role = trigger === 'click' || trigger === 'custom' ? 'dialog' : 'tooltip';
141
+
139
142
  return (
140
143
  <Tooltip
141
144
  {...(attr as any)}
145
+ trigger={trigger}
142
146
  position={position}
143
147
  style={style}
144
148
  content={popContent}
@@ -146,6 +150,7 @@ class Popover extends React.PureComponent<PopoverProps, PopoverState> {
146
150
  spacing={spacing}
147
151
  showArrow={arrow}
148
152
  arrowBounding={arrowBounding}
153
+ role={role}
149
154
  >
150
155
  {children}
151
156
  </Tooltip>
@@ -8,9 +8,9 @@ export default {
8
8
  export const _Progress = () => (
9
9
  <div style={{ width: 200 }}>
10
10
  {/* <Progress percent={10} style= {{ height: 10 }}/> */}
11
- <Progress percent={25} />
12
- <Progress percent={50} />
13
- <Progress percent={80} />
11
+ <Progress percent={25} aria-label="disk usage"/>
12
+ <Progress percent={50} aria-label="disk usage"/>
13
+ <Progress percent={80} aria-label="disk usage"/>
14
14
  </div>
15
15
  );
16
16
 
@@ -20,10 +20,10 @@ _Progress.story = {
20
20
 
21
21
  export const Vertical = () => (
22
22
  <div style={{ height: 200 }}>
23
- <Progress percent={10} direction="vertical" style={{ width: 10 }} />
24
- <Progress percent={25} direction="vertical" />
25
- <Progress percent={50} direction="vertical" />
26
- <Progress percent={80} direction="vertical" />
23
+ <Progress percent={10} direction="vertical" style={{ width: 10 }} aria-label="disk usage"/>
24
+ <Progress percent={25} direction="vertical" aria-label="disk usage"/>
25
+ <Progress percent={50} direction="vertical" aria-label="disk usage"/>
26
+ <Progress percent={80} direction="vertical" aria-label="disk usage"/>
27
27
  </div>
28
28
  );
29
29
 
@@ -33,10 +33,10 @@ Vertical.story = {
33
33
 
34
34
  export const CircleProgress = () => (
35
35
  <React.Fragment>
36
- <Progress percent={10} type="circle" />
37
- <Progress percent={25} type="circle" />
38
- <Progress percent={50} type="circle" />
39
- <Progress percent={80} type="circle" />
36
+ <Progress percent={10} type="circle" aria-label="disk usage"/>
37
+ <Progress percent={25} type="circle" aria-label="disk usage"/>
38
+ <Progress percent={50} type="circle" aria-label="disk usage"/>
39
+ <Progress percent={80} type="circle" aria-label="disk usage"/>
40
40
  </React.Fragment>
41
41
  );
42
42
 
@@ -46,10 +46,10 @@ CircleProgress.story = {
46
46
 
47
47
  export const CircleProgressSmall = () => (
48
48
  <React.Fragment>
49
- <Progress percent={10} type="circle" size="small" />
50
- <Progress percent={25} type="circle" size="small" />
51
- <Progress percent={50} type="circle" size="small" />
52
- <Progress percent={80} type="circle" size="small" />
49
+ <Progress percent={10} type="circle" size="small" aria-label="disk usage"/>
50
+ <Progress percent={25} type="circle" size="small" aria-label="disk usage"/>
51
+ <Progress percent={50} type="circle" size="small" aria-label="disk usage"/>
52
+ <Progress percent={80} type="circle" size="small" aria-label="disk usage"/>
53
53
  </React.Fragment>
54
54
  );
55
55
 
@@ -60,9 +60,9 @@ CircleProgressSmall.story = {
60
60
  export const ProgressShowInfo = () => (
61
61
  <div style={{ width: 200 }}>
62
62
  {/* <Progress percent={10} style= {{ height: 10 }}/> */}
63
- <Progress percent={25} showInfo />
64
- <Progress percent={50} showInfo />
65
- <Progress percent={80} showInfo />
63
+ <Progress percent={25} showInfo aria-label="disk usage"/>
64
+ <Progress percent={50} showInfo aria-label="disk usage"/>
65
+ <Progress percent={80} showInfo aria-label="disk usage"/>
66
66
  </div>
67
67
  );
68
68
 
@@ -9,9 +9,13 @@ import { Motion } from '../_base/base';
9
9
  const prefixCls = cssClasses.PREFIX;
10
10
 
11
11
  export interface ProgressProps {
12
+ 'aria-label'?: string | undefined;
13
+ 'aria-labelledby'?: string | undefined;
14
+ 'aria-valuetext'?: string | undefined;
12
15
  className?: string;
13
16
  direction?: 'horizontal' | 'vertical';
14
17
  format?: (percent: number) => React.ReactNode;
18
+ id?: string;
15
19
  motion?: Motion;
16
20
  orbitStroke?: string;
17
21
  percent?: number;
@@ -31,9 +35,13 @@ export interface ProgressState {
31
35
 
32
36
  class Progress extends Component<ProgressProps, ProgressState> {
33
37
  static propTypes = {
38
+ 'aria-label': PropTypes.string,
39
+ 'aria-labelledby': PropTypes.string,
40
+ 'aria-valuetext': PropTypes.string,
34
41
  className: PropTypes.string,
35
42
  direction: PropTypes.oneOf(strings.directions),
36
43
  format: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
44
+ id: PropTypes.string,
37
45
  motion: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object]),
38
46
  orbitStroke: PropTypes.string,
39
47
  percent: PropTypes.number,
@@ -51,7 +59,7 @@ class Progress extends Component<ProgressProps, ProgressState> {
51
59
  static defaultProps = {
52
60
  className: '',
53
61
  direction: strings.DEFAULT_DIRECTION,
54
- format: (text: string): string => `${text }%`,
62
+ format: (text: string): string => `${text}%`,
55
63
  motion: true,
56
64
  orbitStroke: 'var(--semi-color-fill-0)',
57
65
  percent: 0,
@@ -124,12 +132,15 @@ class Progress extends Component<ProgressProps, ProgressState> {
124
132
  }
125
133
 
126
134
  renderCircleProgress(): ReactNode {
127
- const { strokeLinecap, style, className, strokeWidth, format, size, stroke, showInfo, percent, orbitStroke } = this.props;
135
+ const { strokeLinecap, style, className, strokeWidth, format, size, stroke, showInfo, percent, orbitStroke, id } = this.props;
136
+ const ariaLabel = this.props['aria-label'];
137
+ const ariaLabelledBy = this.props['aria-labelledby'];
138
+ const ariaValueText = this.props['aria-valuetext'];
128
139
  const { percentNumber } = this.state;
129
140
  const classNames = {
130
- wrapper: cls(`${prefixCls }-circle`, className),
131
- svg: cls(`${prefixCls }-circle-ring`),
132
- circle: cls(`${prefixCls }-circle-ring-inner`)
141
+ wrapper: cls(`${prefixCls}-circle`, className),
142
+ svg: cls(`${prefixCls}-circle-ring`),
143
+ circle: cls(`${prefixCls}-circle-ring-inner`)
133
144
  };
134
145
  const perc = this.calcPercent(percent);
135
146
  const percNumber = this.calcPercent(percentNumber);
@@ -152,8 +163,19 @@ class Progress extends Component<ProgressProps, ProgressState> {
152
163
  const text = format(percNumber);
153
164
 
154
165
  return (
155
- <div className={classNames.wrapper} style={style}>
156
- <svg key={size} className={classNames.svg} height={width} width={width}>
166
+ <div
167
+ id={id}
168
+ className={classNames.wrapper}
169
+ style={style}
170
+ role='progressbar'
171
+ aria-valuemin={0}
172
+ aria-valuemax={100}
173
+ aria-valuenow={percNumber}
174
+ aria-labelledby={ariaLabelledBy}
175
+ aria-label={ariaLabel}
176
+ aria-valuetext={ariaValueText}
177
+ >
178
+ <svg key={size} className={classNames.svg} height={width} width={width} aria-hidden>
157
179
  <circle
158
180
  strokeDashoffset={0}
159
181
  strokeWidth={strokeWidth}
@@ -164,6 +186,7 @@ class Progress extends Component<ProgressProps, ProgressState> {
164
186
  r={radius}
165
187
  cx={cx}
166
188
  cy={cy}
189
+ aria-hidden
167
190
  />
168
191
  <circle
169
192
  className={classNames.circle}
@@ -176,9 +199,10 @@ class Progress extends Component<ProgressProps, ProgressState> {
176
199
  r={radius}
177
200
  cx={cx}
178
201
  cy={cy}
202
+ aria-hidden
179
203
  />
180
204
  </svg>
181
- {showInfo && size !== 'small' ? (<span className={`${prefixCls }-circle-text`}>{text}</span>) : null}
205
+ {showInfo && size !== 'small' ? (<span className={`${prefixCls}-circle-text`}>{text}</span>) : null}
182
206
  </div>
183
207
  );
184
208
  }
@@ -196,17 +220,20 @@ class Progress extends Component<ProgressProps, ProgressState> {
196
220
  }
197
221
 
198
222
  renderLineProgress(): ReactNode {
199
- const { className, style, stroke, direction, format, showInfo, size, percent, orbitStroke } = this.props;
223
+ const { className, style, stroke, direction, format, showInfo, size, percent, orbitStroke, id } = this.props;
224
+ const ariaLabel = this.props['aria-label'];
225
+ const ariaLabelledBy = this.props['aria-labelledby'];
226
+ const ariaValueText = this.props['aria-valuetext'];
200
227
  const { percentNumber } = this.state;
201
228
  const progressWrapperCls = cls(prefixCls, className, {
202
- [`${prefixCls }-horizontal`]: direction === strings.DEFAULT_DIRECTION,
203
- [`${prefixCls }-vertical`]: direction !== strings.DEFAULT_DIRECTION,
204
- [`${prefixCls }-large`]: size === 'large',
229
+ [`${prefixCls}-horizontal`]: direction === strings.DEFAULT_DIRECTION,
230
+ [`${prefixCls}-vertical`]: direction !== strings.DEFAULT_DIRECTION,
231
+ [`${prefixCls}-large`]: size === 'large',
205
232
  });
206
233
  const progressTrackCls = cls({
207
- [`${prefixCls }-track`]: true,
234
+ [`${prefixCls}-track`]: true,
208
235
  });
209
- const innerCls = cls(`${prefixCls }-track-inner`);
236
+ const innerCls = cls(`${prefixCls}-track-inner`);
210
237
 
211
238
  const perc = this.calcPercent(percent);
212
239
  const percNumber = this.calcPercent(percentNumber);
@@ -215,19 +242,30 @@ class Progress extends Component<ProgressProps, ProgressState> {
215
242
  backgroundColor: stroke
216
243
  };
217
244
  if (direction === strings.DEFAULT_DIRECTION) {
218
- innerStyle.width = `${perc }%`;
245
+ innerStyle.width = `${perc}%`;
219
246
  } else {
220
- innerStyle.height = `${perc }%`;
247
+ innerStyle.height = `${perc}%`;
221
248
  }
222
249
 
223
250
  const text = format(percNumber);
224
251
 
225
252
  return (
226
- <div className={progressWrapperCls} style={style}>
227
- <div className={progressTrackCls} style={orbitStroke ? { backgroundColor: orbitStroke } : {}}>
228
- <div className={innerCls} style={innerStyle} />
253
+ <div
254
+ id={id}
255
+ className={progressWrapperCls}
256
+ style={style}
257
+ role='progressbar'
258
+ aria-valuemin={0}
259
+ aria-valuemax={100}
260
+ aria-valuenow={perc}
261
+ aria-labelledby={ariaLabelledBy}
262
+ aria-label={ariaLabel}
263
+ aria-valuetext={ariaValueText}
264
+ >
265
+ <div className={progressTrackCls} style={orbitStroke ? { backgroundColor: orbitStroke } : {}} aria-hidden>
266
+ <div className={innerCls} style={innerStyle} aria-hidden />
229
267
  </div>
230
- {showInfo ? <div className={`${prefixCls }-line-text`}>{text}</div> : null}
268
+ {showInfo ? <div className={`${prefixCls}-line-text`}>{text}</div> : null}
231
269
  </div>
232
270
  );
233
271
  }
package/radio/radio.tsx CHANGED
@@ -7,6 +7,7 @@ import { noop } from 'lodash';
7
7
  import RadioFoundation, { RadioAdapter } from '@douyinfe/semi-foundation/radio/radioFoundation';
8
8
  import { RadioChangeEvent } from '@douyinfe/semi-foundation/radio/radioInnerFoundation';
9
9
  import { strings, radioClasses as css } from '@douyinfe/semi-foundation/radio/constants';
10
+ import { getUuidShort } from '@douyinfe/semi-foundation/utils/uuid';
10
11
  import '@douyinfe/semi-foundation/radio/radio.scss';
11
12
 
12
13
  import BaseComponent from '../_base/baseComponent';
@@ -38,6 +39,7 @@ export type RadioProps = {
38
39
  addonStyle?: React.CSSProperties;
39
40
  addonClassName?: string;
40
41
  type?: RadioType;
42
+ 'aria-label'?: React.AriaAttributes['aria-label'];
41
43
  };
42
44
 
43
45
  export interface RadioState {
@@ -67,6 +69,7 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
67
69
  addonStyle: PropTypes.object,
68
70
  addonClassName: PropTypes.string,
69
71
  type: PropTypes.oneOf([strings.TYPE_DEFAULT, strings.TYPE_BUTTON, strings.TYPE_CARD, strings.TYPE_PURECARD]), // Button style type
72
+ 'aria-label': PropTypes.string,
70
73
  };
71
74
 
72
75
  static defaultProps: Partial<RadioProps> = {
@@ -82,6 +85,9 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
82
85
 
83
86
  radioEntity: RadioInner;
84
87
  context!: RadioContextValue;
88
+ foundation: RadioFoundation;
89
+ addonId: string;
90
+ extraId: string;
85
91
 
86
92
  constructor(props: RadioProps) {
87
93
  super(props);
@@ -90,6 +96,8 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
90
96
  };
91
97
  this.foundation = new RadioFoundation(this.adapter);
92
98
  this.radioEntity = null;
99
+ this.addonId = getUuidShort({ prefix: 'addon' });
100
+ this.extraId = getUuidShort({ prefix: 'extra' });
93
101
  }
94
102
 
95
103
  get adapter(): RadioAdapter {
@@ -209,8 +217,8 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
209
217
  }, addonClassName);
210
218
  const renderContent = () => (
211
219
  <>
212
- {children ? <span className={addonCls} style={addonStyle}>{children}</span> : null}
213
- {extra && !isButtonRadio ? <div className={`${prefix}-extra`}>{extra}</div> : null}
220
+ {children ? <span className={addonCls} style={addonStyle} id={this.addonId}>{children}</span> : null}
221
+ {extra && !isButtonRadio ? <div className={`${prefix}-extra`} id={this.extraId}>{extra}</div> : null}
214
222
  </>
215
223
  );
216
224
  return (
@@ -231,6 +239,8 @@ class Radio extends BaseComponent<RadioProps, RadioState> {
231
239
  ref={(ref: RadioInner) => {
232
240
  this.radioEntity = ref;
233
241
  }}
242
+ addonId={children && this.addonId}
243
+ extraId={extra && this.extraId}
234
244
  />
235
245
  {
236
246
  isCardRadioGroup ?
@@ -36,6 +36,13 @@ export type RadioGroupProps = {
36
36
  type?: RadioType;
37
37
  buttonSize?: RadioGroupButtonSize;
38
38
  prefixCls?: string;
39
+ 'aria-label'?: React.AriaAttributes['aria-label'];
40
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
41
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
42
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
43
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
44
+ 'aria-required'?: React.AriaAttributes['aria-required'];
45
+ id?: string;
39
46
  };
40
47
 
41
48
  export interface RadioGroupState {
@@ -57,7 +64,14 @@ class RadioGroup extends BaseComponent<RadioGroupProps, RadioGroupState> {
57
64
  className: PropTypes.string,
58
65
  style: PropTypes.object,
59
66
  direction: PropTypes.oneOf(strings.DIRECTION_SET),
60
- mode: PropTypes.oneOf(strings.MODE)
67
+ mode: PropTypes.oneOf(strings.MODE),
68
+ 'aria-label': PropTypes.string,
69
+ 'aria-describedby': PropTypes.string,
70
+ 'aria-errormessage': PropTypes.string,
71
+ 'aria-invalid': PropTypes.bool,
72
+ 'aria-labelledby': PropTypes.string,
73
+ 'aria-required': PropTypes.bool,
74
+ id: PropTypes.string,
61
75
  };
62
76
 
63
77
  static defaultProps: Partial<RadioGroupProps> = {
@@ -69,6 +83,7 @@ class RadioGroup extends BaseComponent<RadioGroupProps, RadioGroupState> {
69
83
  buttonSize: 'middle'
70
84
  };
71
85
 
86
+ foundation: RadioGroupFoundation;
72
87
  constructor(props: RadioGroupProps) {
73
88
  super(props);
74
89
  this.state = {
@@ -121,7 +136,8 @@ class RadioGroup extends BaseComponent<RadioGroupProps, RadioGroupState> {
121
136
  style,
122
137
  direction,
123
138
  type,
124
- buttonSize
139
+ buttonSize,
140
+ id,
125
141
  } = this.props;
126
142
 
127
143
  const isButtonRadio = type === strings.TYPE_BUTTON;
@@ -177,7 +193,17 @@ class RadioGroup extends BaseComponent<RadioGroupProps, RadioGroupState> {
177
193
  }
178
194
 
179
195
  return (
180
- <div className={prefixClsDisplay} style={style}>
196
+ <div
197
+ className={prefixClsDisplay}
198
+ style={style}
199
+ id={id}
200
+ aria-label={this.props['aria-label']}
201
+ aria-invalid={this.props['aria-invalid']}
202
+ aria-errormessage={this.props['aria-errormessage']}
203
+ aria-labelledby={this.props['aria-labelledby']}
204
+ aria-describedby={this.props['aria-describedby']}
205
+ aria-required={this.props['aria-required']}
206
+ >
181
207
  <Context.Provider
182
208
  value={{
183
209
  radioGroup: {