@douyinfe/semi-ui 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/_base/_story/a11y.jsx +6 -6
  2. package/_base/_story/a11y.scss +0 -1
  3. package/_base/_story/index.scss +2 -5
  4. package/_utils/hooks/usePrevFocus.ts +16 -0
  5. package/_utils/index.ts +4 -0
  6. package/anchor/_story/anchor.stories.js +1 -1
  7. package/anchor/index.tsx +5 -2
  8. package/anchor/link.tsx +29 -4
  9. package/autoComplete/index.tsx +28 -1
  10. package/avatar/_story/avatar.stories.js +4 -4
  11. package/avatar/index.tsx +6 -4
  12. package/banner/index.tsx +2 -1
  13. package/breadcrumb/_story/breadcrumb.stories.js +22 -8
  14. package/breadcrumb/index.tsx +8 -1
  15. package/breadcrumb/item.tsx +1 -1
  16. package/button/Button.tsx +4 -0
  17. package/button/__test__/button.test.js +1 -1
  18. package/button/_story/button.stories.js +10 -10
  19. package/button/buttonGroup.tsx +4 -2
  20. package/button/splitButtonGroup.tsx +5 -2
  21. package/card/_story/card.stories.js +8 -1
  22. package/card/_story/card.stories.tsx +3 -0
  23. package/card/index.tsx +5 -2
  24. package/cascader/index.tsx +33 -5
  25. package/checkbox/_story/checkbox.stories.js +19 -12
  26. package/checkbox/checkbox.tsx +40 -5
  27. package/checkbox/checkboxGroup.tsx +30 -5
  28. package/checkbox/checkboxInner.tsx +25 -2
  29. package/collapse/index.tsx +1 -1
  30. package/collapse/item.tsx +12 -7
  31. package/collapsible/index.tsx +4 -2
  32. package/configProvider/_story/configProvider.stories.tsx +27 -0
  33. package/datePicker/__test__/datePicker.test.js +93 -0
  34. package/datePicker/_story/datePicker.stories.js +84 -1
  35. package/datePicker/datePicker.tsx +21 -0
  36. package/datePicker/monthsGrid.tsx +2 -1
  37. package/dist/css/semi.css +8 -3
  38. package/dist/css/semi.min.css +1 -1
  39. package/dist/umd/semi-ui.js +2490 -1255
  40. package/dist/umd/semi-ui.js.map +1 -1
  41. package/dist/umd/semi-ui.min.js +1 -1
  42. package/dist/umd/semi-ui.min.js.map +1 -1
  43. package/dropdown/dropdownItem.tsx +1 -1
  44. package/dropdown/dropdownMenu.tsx +1 -1
  45. package/dropdown/index.tsx +11 -3
  46. package/empty/index.tsx +4 -4
  47. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  48. package/form/_story/Validate/validateDemo.jsx +1 -1
  49. package/form/_story/demo.jsx +12 -3
  50. package/form/_story/form.stories.js +0 -7
  51. package/form/baseForm.tsx +2 -0
  52. package/form/errorMessage.tsx +13 -2
  53. package/form/hoc/withField.tsx +37 -8
  54. package/form/index.tsx +0 -2
  55. package/form/interface.ts +2 -0
  56. package/form/label.tsx +4 -2
  57. package/input/index.tsx +49 -4
  58. package/input/inputGroup.tsx +9 -4
  59. package/input/textarea.tsx +25 -6
  60. package/inputNumber/_story/inputNumber.stories.js +12 -0
  61. package/inputNumber/index.tsx +35 -3
  62. package/layout/Sider.tsx +6 -2
  63. package/layout/index.tsx +4 -3
  64. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  65. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  66. package/lib/cjs/_utils/index.d.ts +1 -0
  67. package/lib/cjs/_utils/index.js +6 -1
  68. package/lib/cjs/anchor/index.d.ts +2 -0
  69. package/lib/cjs/anchor/index.js +6 -1
  70. package/lib/cjs/anchor/link.d.ts +4 -1
  71. package/lib/cjs/anchor/link.js +39 -5
  72. package/lib/cjs/autoComplete/index.d.ts +17 -0
  73. package/lib/cjs/autoComplete/index.js +21 -2
  74. package/lib/cjs/avatar/index.d.ts +4 -3
  75. package/lib/cjs/avatar/index.js +15 -11
  76. package/lib/cjs/banner/index.js +4 -2
  77. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  78. package/lib/cjs/breadcrumb/index.js +10 -4
  79. package/lib/cjs/breadcrumb/item.js +2 -2
  80. package/lib/cjs/button/Button.d.ts +2 -0
  81. package/lib/cjs/button/Button.js +4 -2
  82. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  83. package/lib/cjs/button/buttonGroup.js +8 -4
  84. package/lib/cjs/button/index.d.ts +1 -0
  85. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  86. package/lib/cjs/button/splitButtonGroup.js +5 -2
  87. package/lib/cjs/card/index.d.ts +3 -0
  88. package/lib/cjs/card/index.js +3 -1
  89. package/lib/cjs/cascader/index.d.ts +14 -0
  90. package/lib/cjs/cascader/index.js +35 -7
  91. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  92. package/lib/cjs/checkbox/checkbox.js +51 -17
  93. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  94. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  95. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  96. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  97. package/lib/cjs/collapse/item.d.ts +2 -1
  98. package/lib/cjs/collapse/item.js +12 -2
  99. package/lib/cjs/collapsible/index.d.ts +1 -0
  100. package/lib/cjs/collapsible/index.js +4 -2
  101. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  102. package/lib/cjs/datePicker/datePicker.js +18 -3
  103. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -0
  104. package/lib/cjs/datePicker/monthsGrid.js +2 -1
  105. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  106. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  107. package/lib/cjs/dropdown/index.d.ts +10 -3
  108. package/lib/cjs/form/baseForm.d.ts +9 -0
  109. package/lib/cjs/form/baseForm.js +3 -1
  110. package/lib/cjs/form/errorMessage.d.ts +4 -0
  111. package/lib/cjs/form/errorMessage.js +21 -3
  112. package/lib/cjs/form/field.d.ts +7 -0
  113. package/lib/cjs/form/hoc/withField.js +49 -16
  114. package/lib/cjs/form/index.d.ts +0 -1
  115. package/lib/cjs/form/interface.d.ts +2 -0
  116. package/lib/cjs/form/label.d.ts +2 -0
  117. package/lib/cjs/form/label.js +5 -2
  118. package/lib/cjs/input/index.d.ts +16 -0
  119. package/lib/cjs/input/index.js +51 -15
  120. package/lib/cjs/input/inputGroup.d.ts +2 -1
  121. package/lib/cjs/input/inputGroup.js +11 -1
  122. package/lib/cjs/input/textarea.js +12 -1
  123. package/lib/cjs/inputNumber/index.d.ts +21 -12
  124. package/lib/cjs/inputNumber/index.js +40 -5
  125. package/lib/cjs/layout/Sider.d.ts +4 -0
  126. package/lib/cjs/layout/Sider.js +4 -1
  127. package/lib/cjs/layout/index.js +2 -0
  128. package/lib/cjs/list/index.d.ts +4 -4
  129. package/lib/cjs/list/item.js +0 -1
  130. package/lib/cjs/modal/Modal.js +2 -0
  131. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  132. package/lib/cjs/modal/ModalContent.js +47 -5
  133. package/lib/cjs/navigation/Item.d.ts +4 -2
  134. package/lib/cjs/navigation/Item.js +25 -5
  135. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  136. package/lib/cjs/navigation/SubNav.js +8 -1
  137. package/lib/cjs/navigation/index.js +2 -0
  138. package/lib/cjs/notification/notice.d.ts +1 -1
  139. package/lib/cjs/notification/notice.js +32 -22
  140. package/lib/cjs/pagination/index.js +16 -6
  141. package/lib/cjs/popover/index.js +7 -3
  142. package/lib/cjs/progress/index.d.ts +8 -0
  143. package/lib/cjs/progress/index.js +42 -9
  144. package/lib/cjs/radio/radio.d.ts +6 -1
  145. package/lib/cjs/radio/radio.js +17 -5
  146. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  147. package/lib/cjs/radio/radioGroup.js +18 -3
  148. package/lib/cjs/radio/radioInner.d.ts +6 -1
  149. package/lib/cjs/radio/radioInner.js +11 -3
  150. package/lib/cjs/rating/index.d.ts +14 -0
  151. package/lib/cjs/rating/index.js +14 -3
  152. package/lib/cjs/rating/item.d.ts +2 -0
  153. package/lib/cjs/rating/item.js +6 -1
  154. package/lib/cjs/select/index.d.ts +16 -0
  155. package/lib/cjs/select/index.js +65 -19
  156. package/lib/cjs/select/option.js +28 -22
  157. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  158. package/lib/cjs/sideSheet/SideSheetContent.js +4 -1
  159. package/lib/cjs/sideSheet/index.d.ts +1 -0
  160. package/lib/cjs/sideSheet/index.js +2 -1
  161. package/lib/cjs/slider/index.d.ts +2 -1
  162. package/lib/cjs/slider/index.js +64 -17
  163. package/lib/cjs/spin/icon.js +3 -4
  164. package/lib/cjs/steps/basicStep.d.ts +3 -0
  165. package/lib/cjs/steps/basicStep.js +23 -25
  166. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  167. package/lib/cjs/steps/basicSteps.js +2 -1
  168. package/lib/cjs/steps/fillStep.d.ts +3 -0
  169. package/lib/cjs/steps/fillStep.js +19 -4
  170. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  171. package/lib/cjs/steps/fillSteps.js +2 -1
  172. package/lib/cjs/steps/navStep.d.ts +3 -0
  173. package/lib/cjs/steps/navStep.js +22 -25
  174. package/lib/cjs/steps/navSteps.d.ts +1 -0
  175. package/lib/cjs/steps/navSteps.js +2 -1
  176. package/lib/cjs/switch/index.d.ts +12 -0
  177. package/lib/cjs/switch/index.js +19 -4
  178. package/lib/cjs/table/Body/BaseRow.js +35 -3
  179. package/lib/cjs/table/Body/index.js +9 -1
  180. package/lib/cjs/table/ColumnFilter.js +4 -0
  181. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  182. package/lib/cjs/table/ColumnSelection.js +6 -2
  183. package/lib/cjs/table/ColumnSorter.js +19 -3
  184. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  185. package/lib/cjs/table/Table.d.ts +2 -0
  186. package/lib/cjs/table/Table.js +31 -15
  187. package/lib/cjs/table/TableCell.d.ts +2 -0
  188. package/lib/cjs/table/TableCell.js +6 -2
  189. package/lib/cjs/table/TableHeaderRow.js +8 -2
  190. package/lib/cjs/tabs/TabBar.js +11 -3
  191. package/lib/cjs/tabs/TabPane.js +3 -1
  192. package/lib/cjs/tabs/index.js +0 -1
  193. package/lib/cjs/tagInput/index.d.ts +4 -1
  194. package/lib/cjs/tagInput/index.js +29 -3
  195. package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
  196. package/lib/cjs/timePicker/TimePicker.js +9 -1
  197. package/lib/cjs/timePicker/index.d.ts +6 -0
  198. package/lib/cjs/timeline/index.d.ts +1 -1
  199. package/lib/cjs/timeline/index.js +1 -0
  200. package/lib/cjs/timeline/item.js +4 -2
  201. package/lib/cjs/toast/toast.js +2 -0
  202. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  203. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  204. package/lib/cjs/tooltip/index.d.ts +16 -12
  205. package/lib/cjs/tooltip/index.js +55 -39
  206. package/lib/cjs/transfer/index.d.ts +1 -1
  207. package/lib/cjs/transfer/index.js +35 -17
  208. package/lib/cjs/tree/index.d.ts +1 -0
  209. package/lib/cjs/tree/index.js +15 -6
  210. package/lib/cjs/tree/treeNode.d.ts +12 -4
  211. package/lib/cjs/tree/treeNode.js +44 -4
  212. package/lib/cjs/treeSelect/index.d.ts +16 -0
  213. package/lib/cjs/treeSelect/index.js +60 -12
  214. package/lib/cjs/typography/base.js +18 -7
  215. package/lib/cjs/typography/copyable.js +6 -1
  216. package/lib/cjs/upload/fileCard.js +26 -7
  217. package/lib/cjs/upload/index.js +19 -4
  218. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  219. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  220. package/lib/es/_utils/index.d.ts +1 -0
  221. package/lib/es/_utils/index.js +4 -1
  222. package/lib/es/anchor/index.d.ts +2 -0
  223. package/lib/es/anchor/index.js +6 -1
  224. package/lib/es/anchor/link.d.ts +4 -1
  225. package/lib/es/anchor/link.js +38 -5
  226. package/lib/es/autoComplete/index.d.ts +17 -0
  227. package/lib/es/autoComplete/index.js +21 -2
  228. package/lib/es/avatar/index.d.ts +4 -3
  229. package/lib/es/avatar/index.js +15 -11
  230. package/lib/es/banner/index.js +4 -2
  231. package/lib/es/breadcrumb/index.d.ts +3 -0
  232. package/lib/es/breadcrumb/index.js +10 -4
  233. package/lib/es/breadcrumb/item.js +2 -2
  234. package/lib/es/button/Button.d.ts +2 -0
  235. package/lib/es/button/Button.js +4 -2
  236. package/lib/es/button/buttonGroup.d.ts +3 -0
  237. package/lib/es/button/buttonGroup.js +8 -4
  238. package/lib/es/button/index.d.ts +1 -0
  239. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  240. package/lib/es/button/splitButtonGroup.js +5 -2
  241. package/lib/es/card/index.d.ts +3 -0
  242. package/lib/es/card/index.js +3 -1
  243. package/lib/es/cascader/index.d.ts +14 -0
  244. package/lib/es/cascader/index.js +35 -7
  245. package/lib/es/checkbox/checkbox.d.ts +21 -1
  246. package/lib/es/checkbox/checkbox.js +50 -17
  247. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  248. package/lib/es/checkbox/checkboxGroup.js +18 -5
  249. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  250. package/lib/es/checkbox/checkboxInner.js +20 -3
  251. package/lib/es/collapse/item.d.ts +2 -1
  252. package/lib/es/collapse/item.js +11 -2
  253. package/lib/es/collapsible/index.d.ts +1 -0
  254. package/lib/es/collapsible/index.js +4 -2
  255. package/lib/es/datePicker/datePicker.d.ts +12 -0
  256. package/lib/es/datePicker/datePicker.js +18 -3
  257. package/lib/es/datePicker/monthsGrid.d.ts +1 -0
  258. package/lib/es/datePicker/monthsGrid.js +2 -1
  259. package/lib/es/dropdown/dropdownItem.js +3 -1
  260. package/lib/es/dropdown/dropdownMenu.js +4 -1
  261. package/lib/es/dropdown/index.d.ts +10 -3
  262. package/lib/es/form/baseForm.d.ts +9 -0
  263. package/lib/es/form/baseForm.js +3 -1
  264. package/lib/es/form/errorMessage.d.ts +4 -0
  265. package/lib/es/form/errorMessage.js +21 -3
  266. package/lib/es/form/field.d.ts +7 -0
  267. package/lib/es/form/hoc/withField.js +48 -15
  268. package/lib/es/form/index.d.ts +0 -1
  269. package/lib/es/form/index.js +0 -1
  270. package/lib/es/form/interface.d.ts +2 -0
  271. package/lib/es/form/label.d.ts +2 -0
  272. package/lib/es/form/label.js +5 -2
  273. package/lib/es/input/index.d.ts +16 -0
  274. package/lib/es/input/index.js +51 -15
  275. package/lib/es/input/inputGroup.d.ts +2 -1
  276. package/lib/es/input/inputGroup.js +11 -1
  277. package/lib/es/input/textarea.js +12 -1
  278. package/lib/es/inputNumber/index.d.ts +21 -12
  279. package/lib/es/inputNumber/index.js +41 -5
  280. package/lib/es/layout/Sider.d.ts +4 -0
  281. package/lib/es/layout/Sider.js +4 -1
  282. package/lib/es/layout/index.js +2 -0
  283. package/lib/es/list/index.d.ts +4 -4
  284. package/lib/es/list/item.js +0 -1
  285. package/lib/es/modal/Modal.js +2 -0
  286. package/lib/es/modal/ModalContent.d.ts +3 -1
  287. package/lib/es/modal/ModalContent.js +46 -5
  288. package/lib/es/navigation/Item.d.ts +4 -2
  289. package/lib/es/navigation/Item.js +25 -5
  290. package/lib/es/navigation/SubNav.d.ts +4 -2
  291. package/lib/es/navigation/SubNav.js +8 -1
  292. package/lib/es/navigation/index.js +2 -0
  293. package/lib/es/notification/notice.d.ts +1 -1
  294. package/lib/es/notification/notice.js +33 -24
  295. package/lib/es/pagination/index.js +16 -6
  296. package/lib/es/popover/index.js +7 -3
  297. package/lib/es/progress/index.d.ts +8 -0
  298. package/lib/es/progress/index.js +42 -9
  299. package/lib/es/radio/radio.d.ts +6 -1
  300. package/lib/es/radio/radio.js +16 -5
  301. package/lib/es/radio/radioGroup.d.ts +16 -1
  302. package/lib/es/radio/radioGroup.js +18 -3
  303. package/lib/es/radio/radioInner.d.ts +6 -1
  304. package/lib/es/radio/radioInner.js +11 -3
  305. package/lib/es/rating/index.d.ts +14 -0
  306. package/lib/es/rating/index.js +14 -3
  307. package/lib/es/rating/item.d.ts +2 -0
  308. package/lib/es/rating/item.js +6 -1
  309. package/lib/es/select/index.d.ts +16 -0
  310. package/lib/es/select/index.js +63 -17
  311. package/lib/es/select/option.js +28 -22
  312. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  313. package/lib/es/sideSheet/SideSheetContent.js +4 -1
  314. package/lib/es/sideSheet/index.d.ts +1 -0
  315. package/lib/es/sideSheet/index.js +2 -1
  316. package/lib/es/slider/index.d.ts +2 -1
  317. package/lib/es/slider/index.js +63 -16
  318. package/lib/es/spin/icon.js +3 -4
  319. package/lib/es/steps/basicStep.d.ts +3 -0
  320. package/lib/es/steps/basicStep.js +23 -23
  321. package/lib/es/steps/basicSteps.d.ts +1 -0
  322. package/lib/es/steps/basicSteps.js +2 -1
  323. package/lib/es/steps/fillStep.d.ts +3 -0
  324. package/lib/es/steps/fillStep.js +19 -4
  325. package/lib/es/steps/fillSteps.d.ts +1 -0
  326. package/lib/es/steps/fillSteps.js +2 -1
  327. package/lib/es/steps/navStep.d.ts +3 -0
  328. package/lib/es/steps/navStep.js +22 -23
  329. package/lib/es/steps/navSteps.d.ts +1 -0
  330. package/lib/es/steps/navSteps.js +2 -1
  331. package/lib/es/switch/index.d.ts +12 -0
  332. package/lib/es/switch/index.js +19 -4
  333. package/lib/es/table/Body/BaseRow.js +35 -3
  334. package/lib/es/table/Body/index.js +9 -2
  335. package/lib/es/table/ColumnFilter.js +4 -0
  336. package/lib/es/table/ColumnSelection.d.ts +3 -0
  337. package/lib/es/table/ColumnSelection.js +6 -2
  338. package/lib/es/table/ColumnSorter.js +17 -3
  339. package/lib/es/table/CustomExpandIcon.js +6 -1
  340. package/lib/es/table/Table.d.ts +2 -0
  341. package/lib/es/table/Table.js +31 -15
  342. package/lib/es/table/TableCell.d.ts +2 -0
  343. package/lib/es/table/TableCell.js +6 -2
  344. package/lib/es/table/TableHeaderRow.js +8 -2
  345. package/lib/es/tabs/TabBar.js +11 -3
  346. package/lib/es/tabs/TabPane.js +3 -1
  347. package/lib/es/tabs/index.js +0 -1
  348. package/lib/es/tagInput/index.d.ts +4 -1
  349. package/lib/es/tagInput/index.js +29 -3
  350. package/lib/es/timePicker/TimePicker.d.ts +12 -0
  351. package/lib/es/timePicker/TimePicker.js +9 -1
  352. package/lib/es/timePicker/index.d.ts +6 -0
  353. package/lib/es/timeline/index.d.ts +1 -1
  354. package/lib/es/timeline/index.js +1 -0
  355. package/lib/es/timeline/item.js +4 -2
  356. package/lib/es/toast/toast.js +2 -0
  357. package/lib/es/tooltip/TriangleArrow.js +1 -0
  358. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  359. package/lib/es/tooltip/index.d.ts +16 -12
  360. package/lib/es/tooltip/index.js +53 -39
  361. package/lib/es/transfer/index.d.ts +1 -1
  362. package/lib/es/transfer/index.js +35 -17
  363. package/lib/es/tree/index.d.ts +1 -0
  364. package/lib/es/tree/index.js +15 -6
  365. package/lib/es/tree/treeNode.d.ts +12 -4
  366. package/lib/es/tree/treeNode.js +44 -4
  367. package/lib/es/treeSelect/index.d.ts +16 -0
  368. package/lib/es/treeSelect/index.js +57 -10
  369. package/lib/es/typography/base.js +17 -7
  370. package/lib/es/typography/copyable.js +5 -1
  371. package/lib/es/upload/fileCard.js +26 -7
  372. package/lib/es/upload/index.js +19 -4
  373. package/list/index.tsx +5 -5
  374. package/list/item.tsx +0 -1
  375. package/modal/Modal.tsx +2 -0
  376. package/modal/ModalContent.tsx +35 -5
  377. package/navigation/Item.tsx +15 -0
  378. package/navigation/SubNav.tsx +13 -1
  379. package/navigation/index.tsx +1 -1
  380. package/notification/notice.tsx +19 -14
  381. package/package.json +8 -8
  382. package/pagination/index.tsx +9 -5
  383. package/popover/index.tsx +5 -0
  384. package/progress/_story/progress.stories.js +18 -18
  385. package/progress/index.tsx +58 -20
  386. package/radio/radio.tsx +12 -2
  387. package/radio/radioGroup.tsx +29 -3
  388. package/radio/radioInner.tsx +10 -1
  389. package/rating/index.tsx +19 -2
  390. package/rating/item.tsx +6 -0
  391. package/select/__test__/select.test.js +45 -0
  392. package/select/_story/select.stories.js +29 -0
  393. package/select/index.tsx +52 -4
  394. package/select/option.tsx +3 -0
  395. package/sideSheet/SideSheetContent.tsx +6 -4
  396. package/sideSheet/index.tsx +3 -2
  397. package/slider/__test__/slider.test.js +9 -0
  398. package/slider/_story/slider.stories.js +1 -1
  399. package/slider/index.tsx +44 -7
  400. package/spin/icon.tsx +4 -3
  401. package/steps/basicStep.tsx +15 -4
  402. package/steps/basicSteps.tsx +3 -2
  403. package/steps/fillStep.tsx +27 -12
  404. package/steps/fillSteps.tsx +2 -0
  405. package/steps/navStep.tsx +15 -4
  406. package/steps/navSteps.tsx +3 -2
  407. package/switch/_story/switch.stories.js +20 -19
  408. package/switch/_story/switch.stories.tsx +13 -13
  409. package/switch/index.tsx +23 -5
  410. package/table/Body/BaseRow.tsx +25 -1
  411. package/table/Body/index.tsx +7 -2
  412. package/table/ColumnFilter.tsx +7 -1
  413. package/table/ColumnSelection.tsx +4 -1
  414. package/table/ColumnSorter.tsx +18 -1
  415. package/table/CustomExpandIcon.tsx +5 -0
  416. package/table/Table.tsx +26 -13
  417. package/table/TableCell.tsx +11 -1
  418. package/table/TableHeaderRow.tsx +16 -2
  419. package/table/__test__/table.test.js +46 -0
  420. package/tabs/TabBar.tsx +8 -5
  421. package/tabs/TabPane.tsx +3 -1
  422. package/tabs/index.tsx +0 -1
  423. package/tagInput/__test__/tagInput.test.js +46 -0
  424. package/tagInput/_story/tagInput.stories.js +2 -2
  425. package/tagInput/index.tsx +31 -8
  426. package/timePicker/TimePicker.tsx +14 -1
  427. package/timeline/_story/timeline.stories.js +1 -1
  428. package/timeline/index.tsx +2 -2
  429. package/timeline/item.tsx +2 -1
  430. package/toast/toast.tsx +2 -0
  431. package/tooltip/TriangleArrow.tsx +1 -1
  432. package/tooltip/TriangleArrowVertical.tsx +1 -1
  433. package/tooltip/_story/tooltip.stories.js +562 -514
  434. package/tooltip/index.tsx +51 -33
  435. package/transfer/index.tsx +32 -28
  436. package/tree/_story/tree.stories.js +3 -3
  437. package/tree/index.tsx +10 -2
  438. package/tree/treeNode.tsx +46 -10
  439. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  440. package/treeSelect/_story/treeSelect.stories.js +12 -0
  441. package/treeSelect/index.tsx +58 -7
  442. package/typography/base.tsx +7 -1
  443. package/typography/copyable.tsx +10 -1
  444. package/upload/fileCard.tsx +14 -16
  445. package/upload/index.tsx +10 -6
@@ -13,8 +13,9 @@ import ModalContentFoundation, {
13
13
  ModalContentProps,
14
14
  ModalContentState
15
15
  } from '@douyinfe/semi-foundation/modal/modalContentFoundation';
16
- import { noop } from 'lodash';
16
+ import { noop, isFunction, get } from 'lodash';
17
17
  import { IconClose } from '@douyinfe/semi-icons';
18
+ import { getActiveElement } from '../_utils';
18
19
 
19
20
  let uuid = 0;
20
21
 
@@ -37,14 +38,17 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
37
38
  dialogId: string;
38
39
  private timeoutId: NodeJS.Timeout;
39
40
 
40
-
41
+ modalDialogRef: React.MutableRefObject<HTMLDivElement>;
42
+ foundation: ModalContentFoundation;
41
43
  constructor(props: ModalContentProps) {
42
44
  super(props);
43
45
  this.state = {
44
46
  dialogMouseDown: false,
47
+ prevFocusElement: getActiveElement(),
45
48
  };
46
49
  this.foundation = new ModalContentFoundation(this.adapter);
47
50
  this.dialogId = `dialog-${uuid++}`;
51
+ this.modalDialogRef = React.createRef();
48
52
  }
49
53
 
50
54
  get adapter(): ModalContentAdapter {
@@ -75,11 +79,30 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
75
79
  }
76
80
  },
77
81
  getMouseState: () => this.state.dialogMouseDown,
82
+ modalDialogFocus: () => {
83
+ let activeElementInDialog;
84
+ if (this.modalDialogRef) {
85
+ const activeElement = getActiveElement();
86
+ activeElementInDialog = this.modalDialogRef.current.contains(activeElement);
87
+ }
88
+ if (!activeElementInDialog) {
89
+ this.modalDialogRef && this.modalDialogRef.current.focus();
90
+ }
91
+ },
92
+ modalDialogBlur: () => {
93
+ this.modalDialogRef && this.modalDialogRef.current.blur();
94
+ },
95
+ prevFocusElementReFocus: () => {
96
+ const { prevFocusElement } = this.state;
97
+ const focus = get(prevFocusElement, 'focus');
98
+ isFunction(focus) && prevFocusElement.focus();
99
+ }
78
100
  };
79
101
  }
80
102
 
81
103
  componentDidMount() {
82
104
  this.foundation.handleKeyDownEventListenerMount();
105
+ this.foundation.modalDialogFocus();
83
106
  }
84
107
 
85
108
  componentWillUnmount() {
@@ -132,6 +155,7 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
132
155
  const iconType = closeIcon || <IconClose/>;
133
156
  closer = (
134
157
  <Button
158
+ aria-label="close"
135
159
  className={`${cssClasses.DIALOG}-close`}
136
160
  key="close-btn"
137
161
  onClick={this.close}
@@ -162,7 +186,7 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
162
186
  (
163
187
  <div className={`${cssClasses.DIALOG}-header`}>
164
188
  {icon}
165
- <Typography.Title heading={5} className={`${cssClasses.DIALOG}-title`}>{title}</Typography.Title>
189
+ <Typography.Title heading={5} className={`${cssClasses.DIALOG}-title`} id={`${cssClasses.DIALOG}-title`}>{title}</Typography.Title>
166
190
  {closer}
167
191
  </div>
168
192
  );
@@ -181,7 +205,7 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
181
205
  const icon = this.renderIcon();
182
206
  const hasHeader = title !== null && title !== undefined || 'header' in this.props;
183
207
  return hasHeader ?
184
- <div className={bodyCls} style={bodyStyle}>{children}</div> :
208
+ <div className={bodyCls} id={`${cssClasses.DIALOG}-body`} style={bodyStyle}>{children}</div> :
185
209
  (
186
210
  <div className={`${cssClasses.DIALOG}-body-wrapper`}>
187
211
  {icon}
@@ -214,6 +238,7 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
214
238
  const header = this.renderHeader();
215
239
  const footer = props.footer ? <div className={`${cssClasses.DIALOG}-footer`}>{props.footer}</div> : null;
216
240
  const dialogElement = (
241
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
217
242
  <div
218
243
  key="dialog-element"
219
244
  className={digCls}
@@ -222,6 +247,11 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
222
247
  id={this.dialogId}
223
248
  >
224
249
  <div
250
+ role="dialog"
251
+ ref={this.modalDialogRef}
252
+ aria-modal="true"
253
+ aria-labelledby={`${cssClasses.DIALOG}-title`}
254
+ aria-describedby={`${cssClasses.DIALOG}-body`}
225
255
  onAnimationEnd={props.onAnimationEnd}
226
256
  className={cls([`${cssClasses.DIALOG}-content`,
227
257
  props.contentClassName,
@@ -257,7 +287,7 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
257
287
  <div className={classList}>
258
288
  {this.getMaskElement()}
259
289
  <div
260
- role="modal"
290
+ role="none"
261
291
  tabIndex={-1}
262
292
  className={`${cssClasses.DIALOG}-wrap`}
263
293
  onClick={maskClosable ? this.onMaskClick : null}
@@ -76,6 +76,7 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
76
76
  disabled: false,
77
77
  };
78
78
 
79
+ foundation: ItemFoundation;
79
80
  constructor(props: NavItemProps) {
80
81
  super(props);
81
82
  this.state = {
@@ -108,6 +109,8 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
108
109
  getIsCollapsed: () => this.props.isCollapsed || Boolean(this.context && this.context.isCollapsed) || false,
109
110
  getSelected: () =>
110
111
  Boolean(this.context && this.context.selectedKeys && this.context.selectedKeys.includes(this.props.itemKey)),
112
+ getIsOpen: () =>
113
+ Boolean(this.context && this.context.openKeys && this.context.openKeys.includes(this.props.itemKey)),
111
114
  };
112
115
  }
113
116
 
@@ -159,6 +162,7 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
159
162
  };
160
163
 
161
164
  handleClick = (e: React.MouseEvent) => this.foundation.handleClick(e);
165
+ handleKeyPress = (e: React.KeyboardEvent) => this.foundation.handleKeyPress(e);
162
166
 
163
167
  render() {
164
168
  const {
@@ -249,15 +253,26 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
249
253
  [`${clsPrefix}-collapsed`]: isCollapsed,
250
254
  [`${clsPrefix}-disabled`]: disabled,
251
255
  });
256
+ const ariaProps = {
257
+ 'aria-disabled': disabled,
258
+ };
259
+ if (isSubNav) {
260
+ const isOpen = this.adapter.getIsOpen();
261
+ ariaProps['aria-expanded'] = isOpen;
262
+ }
252
263
 
253
264
  itemDom = (
254
265
  <li
266
+ role="menuitem"
267
+ tabIndex={-1}
268
+ {...ariaProps}
255
269
  style={style}
256
270
  ref={this.setItemRef}
257
271
  className={popoverItemCls}
258
272
  onClick={this.handleClick}
259
273
  onMouseEnter={onMouseEnter}
260
274
  onMouseLeave={onMouseLeave}
275
+ onKeyPress={this.handleKeyPress}
261
276
  >
262
277
  {itemChildren}
263
278
  </li>
@@ -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.1",
3
+ "version": "2.3.1",
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.1",
18
- "@douyinfe/semi-foundation": "2.2.1",
19
- "@douyinfe/semi-icons": "2.2.1",
20
- "@douyinfe/semi-illustrations": "2.2.1",
21
- "@douyinfe/semi-theme-default": "2.2.1",
17
+ "@douyinfe/semi-animation-react": "2.3.1",
18
+ "@douyinfe/semi-foundation": "2.3.1",
19
+ "@douyinfe/semi-icons": "2.3.1",
20
+ "@douyinfe/semi-illustrations": "2.3.1",
21
+ "@douyinfe/semi-theme-default": "2.3.1",
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": "6d8bb9dd22bf199225fa2a0dda4f8524a4b97f6f",
71
+ "gitHead": "c77d5f7c20ea94158c0c79458879c7d884d99c21",
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.1",
77
+ "@douyinfe/semi-scss-compile": "2.3.1",
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
  }