@douyinfe/semi-ui 2.2.0-beta.1 → 2.3.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/_base/_story/a11y.jsx +6 -6
  2. package/_utils/hooks/usePrevFocus.ts +16 -0
  3. package/_utils/index.ts +4 -0
  4. package/anchor/_story/anchor.stories.js +1 -1
  5. package/anchor/index.tsx +5 -2
  6. package/anchor/link.tsx +29 -4
  7. package/autoComplete/index.tsx +28 -1
  8. package/avatar/_story/avatar.stories.js +4 -4
  9. package/avatar/avatarGroup.tsx +1 -1
  10. package/avatar/index.tsx +10 -4
  11. package/banner/index.tsx +2 -1
  12. package/breadcrumb/_story/breadcrumb.stories.js +22 -8
  13. package/breadcrumb/index.tsx +8 -1
  14. package/breadcrumb/item.tsx +1 -1
  15. package/button/Button.tsx +4 -0
  16. package/button/__test__/button.test.js +1 -1
  17. package/button/_story/button.stories.js +10 -10
  18. package/button/buttonGroup.tsx +4 -2
  19. package/button/splitButtonGroup.tsx +5 -2
  20. package/card/_story/card.stories.js +8 -1
  21. package/card/_story/card.stories.tsx +3 -0
  22. package/card/index.tsx +5 -2
  23. package/cascader/index.tsx +33 -5
  24. package/checkbox/_story/checkbox.stories.js +21 -14
  25. package/checkbox/checkbox.tsx +40 -5
  26. package/checkbox/checkboxGroup.tsx +30 -5
  27. package/checkbox/checkboxInner.tsx +25 -2
  28. package/collapse/index.tsx +2 -2
  29. package/collapse/item.tsx +15 -8
  30. package/collapsible/index.tsx +4 -2
  31. package/configProvider/_story/configProvider.stories.tsx +27 -0
  32. package/datePicker/__test__/datePicker.test.js +108 -0
  33. package/datePicker/_story/datePicker.stories.js +146 -2
  34. package/datePicker/datePicker.tsx +24 -0
  35. package/datePicker/monthsGrid.tsx +2 -1
  36. package/dist/css/semi.css +34 -7
  37. package/dist/css/semi.min.css +1 -1
  38. package/dist/umd/semi-ui.js +2785 -1508
  39. package/dist/umd/semi-ui.js.map +1 -1
  40. package/dist/umd/semi-ui.min.js +1 -1
  41. package/dist/umd/semi-ui.min.js.map +1 -1
  42. package/dropdown/dropdownItem.tsx +1 -1
  43. package/dropdown/dropdownMenu.tsx +1 -1
  44. package/empty/index.tsx +5 -5
  45. package/form/_story/FormApi/formApiDemo.jsx +3 -2
  46. package/form/_story/Validate/validateDemo.jsx +1 -1
  47. package/form/_story/demo.jsx +12 -3
  48. package/form/_story/form.stories.js +0 -7
  49. package/form/baseForm.tsx +2 -0
  50. package/form/errorMessage.tsx +13 -2
  51. package/form/hoc/withField.tsx +37 -8
  52. package/form/index.tsx +0 -2
  53. package/form/interface.ts +2 -0
  54. package/form/label.tsx +4 -2
  55. package/input/index.tsx +49 -4
  56. package/input/inputGroup.tsx +9 -4
  57. package/input/textarea.tsx +25 -6
  58. package/inputNumber/_story/inputNumber.stories.js +12 -0
  59. package/inputNumber/index.tsx +33 -2
  60. package/layout/Sider.tsx +6 -2
  61. package/layout/index.tsx +4 -3
  62. package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
  63. package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
  64. package/lib/cjs/_utils/index.d.ts +1 -0
  65. package/lib/cjs/_utils/index.js +6 -1
  66. package/lib/cjs/anchor/index.d.ts +2 -0
  67. package/lib/cjs/anchor/index.js +6 -1
  68. package/lib/cjs/anchor/link.d.ts +4 -1
  69. package/lib/cjs/anchor/link.js +39 -5
  70. package/lib/cjs/autoComplete/index.d.ts +17 -0
  71. package/lib/cjs/autoComplete/index.js +21 -2
  72. package/lib/cjs/avatar/avatarGroup.js +2 -1
  73. package/lib/cjs/avatar/index.d.ts +4 -3
  74. package/lib/cjs/avatar/index.js +20 -11
  75. package/lib/cjs/banner/index.js +4 -2
  76. package/lib/cjs/breadcrumb/index.d.ts +3 -0
  77. package/lib/cjs/breadcrumb/index.js +10 -4
  78. package/lib/cjs/breadcrumb/item.js +2 -2
  79. package/lib/cjs/button/Button.d.ts +2 -0
  80. package/lib/cjs/button/Button.js +4 -2
  81. package/lib/cjs/button/buttonGroup.d.ts +3 -0
  82. package/lib/cjs/button/buttonGroup.js +8 -4
  83. package/lib/cjs/button/index.d.ts +1 -0
  84. package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
  85. package/lib/cjs/button/splitButtonGroup.js +5 -2
  86. package/lib/cjs/card/index.d.ts +3 -0
  87. package/lib/cjs/card/index.js +3 -1
  88. package/lib/cjs/cascader/index.d.ts +14 -0
  89. package/lib/cjs/cascader/index.js +35 -7
  90. package/lib/cjs/checkbox/checkbox.d.ts +21 -1
  91. package/lib/cjs/checkbox/checkbox.js +51 -17
  92. package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
  93. package/lib/cjs/checkbox/checkboxGroup.js +16 -3
  94. package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
  95. package/lib/cjs/checkbox/checkboxInner.js +20 -3
  96. package/lib/cjs/collapse/index.js +2 -1
  97. package/lib/cjs/collapse/item.d.ts +2 -1
  98. package/lib/cjs/collapse/item.js +17 -3
  99. package/lib/cjs/collapsible/index.d.ts +1 -0
  100. package/lib/cjs/collapsible/index.js +4 -2
  101. package/lib/cjs/datePicker/datePicker.d.ts +12 -0
  102. package/lib/cjs/datePicker/datePicker.js +22 -3
  103. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -0
  104. package/lib/cjs/datePicker/monthsGrid.js +2 -1
  105. package/lib/cjs/dropdown/dropdownItem.js +3 -1
  106. package/lib/cjs/dropdown/dropdownMenu.js +4 -1
  107. package/lib/cjs/empty/index.js +2 -1
  108. package/lib/cjs/form/baseForm.d.ts +9 -0
  109. package/lib/cjs/form/baseForm.js +3 -1
  110. package/lib/cjs/form/errorMessage.d.ts +4 -0
  111. package/lib/cjs/form/errorMessage.js +21 -3
  112. package/lib/cjs/form/field.d.ts +7 -0
  113. package/lib/cjs/form/hoc/withField.js +49 -16
  114. package/lib/cjs/form/index.d.ts +0 -1
  115. package/lib/cjs/form/interface.d.ts +2 -0
  116. package/lib/cjs/form/label.d.ts +2 -0
  117. package/lib/cjs/form/label.js +5 -2
  118. package/lib/cjs/input/index.d.ts +16 -0
  119. package/lib/cjs/input/index.js +51 -15
  120. package/lib/cjs/input/inputGroup.d.ts +2 -1
  121. package/lib/cjs/input/inputGroup.js +11 -1
  122. package/lib/cjs/input/textarea.js +12 -1
  123. package/lib/cjs/inputNumber/index.d.ts +21 -12
  124. package/lib/cjs/inputNumber/index.js +37 -3
  125. package/lib/cjs/layout/Sider.d.ts +4 -0
  126. package/lib/cjs/layout/Sider.js +4 -1
  127. package/lib/cjs/layout/index.js +2 -0
  128. package/lib/cjs/list/item.js +0 -1
  129. package/lib/cjs/modal/Modal.js +2 -0
  130. package/lib/cjs/modal/ModalContent.d.ts +3 -1
  131. package/lib/cjs/modal/ModalContent.js +47 -5
  132. package/lib/cjs/navigation/Item.d.ts +4 -2
  133. package/lib/cjs/navigation/Item.js +25 -5
  134. package/lib/cjs/navigation/SubNav.d.ts +4 -2
  135. package/lib/cjs/navigation/SubNav.js +8 -1
  136. package/lib/cjs/navigation/index.js +2 -0
  137. package/lib/cjs/notification/notice.d.ts +1 -1
  138. package/lib/cjs/notification/notice.js +32 -22
  139. package/lib/cjs/pagination/index.js +16 -6
  140. package/lib/cjs/popover/index.js +7 -3
  141. package/lib/cjs/progress/index.d.ts +8 -0
  142. package/lib/cjs/progress/index.js +42 -9
  143. package/lib/cjs/radio/radio.d.ts +6 -1
  144. package/lib/cjs/radio/radio.js +17 -5
  145. package/lib/cjs/radio/radioGroup.d.ts +16 -1
  146. package/lib/cjs/radio/radioGroup.js +18 -3
  147. package/lib/cjs/radio/radioInner.d.ts +6 -1
  148. package/lib/cjs/radio/radioInner.js +11 -3
  149. package/lib/cjs/rating/index.d.ts +14 -0
  150. package/lib/cjs/rating/index.js +14 -3
  151. package/lib/cjs/rating/item.d.ts +2 -0
  152. package/lib/cjs/rating/item.js +6 -1
  153. package/lib/cjs/select/index.d.ts +16 -0
  154. package/lib/cjs/select/index.js +65 -19
  155. package/lib/cjs/select/option.js +28 -22
  156. package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
  157. package/lib/cjs/sideSheet/SideSheetContent.js +12 -5
  158. package/lib/cjs/sideSheet/index.d.ts +1 -0
  159. package/lib/cjs/sideSheet/index.js +2 -1
  160. package/lib/cjs/slider/index.d.ts +2 -1
  161. package/lib/cjs/slider/index.js +64 -17
  162. package/lib/cjs/spin/icon.js +2 -4
  163. package/lib/cjs/steps/basicStep.d.ts +3 -0
  164. package/lib/cjs/steps/basicStep.js +23 -25
  165. package/lib/cjs/steps/basicSteps.d.ts +1 -0
  166. package/lib/cjs/steps/basicSteps.js +2 -1
  167. package/lib/cjs/steps/fillStep.d.ts +3 -0
  168. package/lib/cjs/steps/fillStep.js +19 -4
  169. package/lib/cjs/steps/fillSteps.d.ts +1 -0
  170. package/lib/cjs/steps/fillSteps.js +2 -1
  171. package/lib/cjs/steps/navStep.d.ts +3 -0
  172. package/lib/cjs/steps/navStep.js +22 -25
  173. package/lib/cjs/steps/navSteps.d.ts +1 -0
  174. package/lib/cjs/steps/navSteps.js +2 -1
  175. package/lib/cjs/switch/index.d.ts +12 -0
  176. package/lib/cjs/switch/index.js +19 -4
  177. package/lib/cjs/table/Body/BaseRow.js +35 -3
  178. package/lib/cjs/table/Body/index.js +9 -1
  179. package/lib/cjs/table/ColumnFilter.js +4 -0
  180. package/lib/cjs/table/ColumnSelection.d.ts +3 -0
  181. package/lib/cjs/table/ColumnSelection.js +6 -2
  182. package/lib/cjs/table/ColumnSorter.js +19 -3
  183. package/lib/cjs/table/CustomExpandIcon.js +7 -1
  184. package/lib/cjs/table/Table.d.ts +2 -0
  185. package/lib/cjs/table/Table.js +31 -15
  186. package/lib/cjs/table/TableCell.d.ts +2 -0
  187. package/lib/cjs/table/TableCell.js +6 -2
  188. package/lib/cjs/table/TableHeaderRow.js +8 -2
  189. package/lib/cjs/tabs/TabBar.js +11 -3
  190. package/lib/cjs/tabs/TabPane.js +3 -1
  191. package/lib/cjs/tabs/index.js +3 -8
  192. package/lib/cjs/tagInput/index.d.ts +4 -1
  193. package/lib/cjs/tagInput/index.js +29 -3
  194. package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
  195. package/lib/cjs/timePicker/TimePicker.js +9 -1
  196. package/lib/cjs/timePicker/index.d.ts +6 -0
  197. package/lib/cjs/timeline/index.d.ts +1 -1
  198. package/lib/cjs/timeline/index.js +1 -0
  199. package/lib/cjs/timeline/item.js +4 -2
  200. package/lib/cjs/toast/toast.js +2 -0
  201. package/lib/cjs/tooltip/TriangleArrow.js +1 -0
  202. package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
  203. package/lib/cjs/tooltip/index.d.ts +16 -12
  204. package/lib/cjs/tooltip/index.js +55 -39
  205. package/lib/cjs/transfer/index.d.ts +1 -1
  206. package/lib/cjs/transfer/index.js +35 -17
  207. package/lib/cjs/tree/index.d.ts +1 -0
  208. package/lib/cjs/tree/index.js +15 -6
  209. package/lib/cjs/tree/treeNode.d.ts +12 -4
  210. package/lib/cjs/tree/treeNode.js +44 -4
  211. package/lib/cjs/treeSelect/index.d.ts +16 -0
  212. package/lib/cjs/treeSelect/index.js +60 -12
  213. package/lib/cjs/typography/base.js +18 -7
  214. package/lib/cjs/typography/copyable.js +6 -1
  215. package/lib/cjs/upload/fileCard.js +23 -4
  216. package/lib/cjs/upload/index.js +19 -4
  217. package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
  218. package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
  219. package/lib/es/_utils/index.d.ts +1 -0
  220. package/lib/es/_utils/index.js +4 -1
  221. package/lib/es/anchor/index.d.ts +2 -0
  222. package/lib/es/anchor/index.js +6 -1
  223. package/lib/es/anchor/link.d.ts +4 -1
  224. package/lib/es/anchor/link.js +38 -5
  225. package/lib/es/autoComplete/index.d.ts +17 -0
  226. package/lib/es/autoComplete/index.js +21 -2
  227. package/lib/es/avatar/avatarGroup.js +2 -1
  228. package/lib/es/avatar/index.d.ts +4 -3
  229. package/lib/es/avatar/index.js +20 -11
  230. package/lib/es/banner/index.js +4 -2
  231. package/lib/es/breadcrumb/index.d.ts +3 -0
  232. package/lib/es/breadcrumb/index.js +10 -4
  233. package/lib/es/breadcrumb/item.js +2 -2
  234. package/lib/es/button/Button.d.ts +2 -0
  235. package/lib/es/button/Button.js +4 -2
  236. package/lib/es/button/buttonGroup.d.ts +3 -0
  237. package/lib/es/button/buttonGroup.js +8 -4
  238. package/lib/es/button/index.d.ts +1 -0
  239. package/lib/es/button/splitButtonGroup.d.ts +3 -0
  240. package/lib/es/button/splitButtonGroup.js +5 -2
  241. package/lib/es/card/index.d.ts +3 -0
  242. package/lib/es/card/index.js +3 -1
  243. package/lib/es/cascader/index.d.ts +14 -0
  244. package/lib/es/cascader/index.js +35 -7
  245. package/lib/es/checkbox/checkbox.d.ts +21 -1
  246. package/lib/es/checkbox/checkbox.js +50 -17
  247. package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
  248. package/lib/es/checkbox/checkboxGroup.js +18 -5
  249. package/lib/es/checkbox/checkboxInner.d.ts +15 -0
  250. package/lib/es/checkbox/checkboxInner.js +20 -3
  251. package/lib/es/collapse/index.js +2 -1
  252. package/lib/es/collapse/item.d.ts +2 -1
  253. package/lib/es/collapse/item.js +16 -3
  254. package/lib/es/collapsible/index.d.ts +1 -0
  255. package/lib/es/collapsible/index.js +4 -2
  256. package/lib/es/datePicker/datePicker.d.ts +12 -0
  257. package/lib/es/datePicker/datePicker.js +22 -3
  258. package/lib/es/datePicker/monthsGrid.d.ts +1 -0
  259. package/lib/es/datePicker/monthsGrid.js +2 -1
  260. package/lib/es/dropdown/dropdownItem.js +3 -1
  261. package/lib/es/dropdown/dropdownMenu.js +4 -1
  262. package/lib/es/empty/index.js +2 -1
  263. package/lib/es/form/baseForm.d.ts +9 -0
  264. package/lib/es/form/baseForm.js +3 -1
  265. package/lib/es/form/errorMessage.d.ts +4 -0
  266. package/lib/es/form/errorMessage.js +21 -3
  267. package/lib/es/form/field.d.ts +7 -0
  268. package/lib/es/form/hoc/withField.js +48 -15
  269. package/lib/es/form/index.d.ts +0 -1
  270. package/lib/es/form/index.js +0 -1
  271. package/lib/es/form/interface.d.ts +2 -0
  272. package/lib/es/form/label.d.ts +2 -0
  273. package/lib/es/form/label.js +5 -2
  274. package/lib/es/input/index.d.ts +16 -0
  275. package/lib/es/input/index.js +51 -15
  276. package/lib/es/input/inputGroup.d.ts +2 -1
  277. package/lib/es/input/inputGroup.js +11 -1
  278. package/lib/es/input/textarea.js +12 -1
  279. package/lib/es/inputNumber/index.d.ts +21 -12
  280. package/lib/es/inputNumber/index.js +38 -3
  281. package/lib/es/layout/Sider.d.ts +4 -0
  282. package/lib/es/layout/Sider.js +4 -1
  283. package/lib/es/layout/index.js +2 -0
  284. package/lib/es/list/item.js +0 -1
  285. package/lib/es/modal/Modal.js +2 -0
  286. package/lib/es/modal/ModalContent.d.ts +3 -1
  287. package/lib/es/modal/ModalContent.js +46 -5
  288. package/lib/es/navigation/Item.d.ts +4 -2
  289. package/lib/es/navigation/Item.js +25 -5
  290. package/lib/es/navigation/SubNav.d.ts +4 -2
  291. package/lib/es/navigation/SubNav.js +8 -1
  292. package/lib/es/navigation/index.js +2 -0
  293. package/lib/es/notification/notice.d.ts +1 -1
  294. package/lib/es/notification/notice.js +33 -24
  295. package/lib/es/pagination/index.js +16 -6
  296. package/lib/es/popover/index.js +7 -3
  297. package/lib/es/progress/index.d.ts +8 -0
  298. package/lib/es/progress/index.js +42 -9
  299. package/lib/es/radio/radio.d.ts +6 -1
  300. package/lib/es/radio/radio.js +16 -5
  301. package/lib/es/radio/radioGroup.d.ts +16 -1
  302. package/lib/es/radio/radioGroup.js +18 -3
  303. package/lib/es/radio/radioInner.d.ts +6 -1
  304. package/lib/es/radio/radioInner.js +11 -3
  305. package/lib/es/rating/index.d.ts +14 -0
  306. package/lib/es/rating/index.js +14 -3
  307. package/lib/es/rating/item.d.ts +2 -0
  308. package/lib/es/rating/item.js +6 -1
  309. package/lib/es/select/index.d.ts +16 -0
  310. package/lib/es/select/index.js +63 -17
  311. package/lib/es/select/option.js +28 -22
  312. package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
  313. package/lib/es/sideSheet/SideSheetContent.js +12 -5
  314. package/lib/es/sideSheet/index.d.ts +1 -0
  315. package/lib/es/sideSheet/index.js +2 -1
  316. package/lib/es/slider/index.d.ts +2 -1
  317. package/lib/es/slider/index.js +63 -16
  318. package/lib/es/spin/icon.js +2 -4
  319. package/lib/es/steps/basicStep.d.ts +3 -0
  320. package/lib/es/steps/basicStep.js +23 -23
  321. package/lib/es/steps/basicSteps.d.ts +1 -0
  322. package/lib/es/steps/basicSteps.js +2 -1
  323. package/lib/es/steps/fillStep.d.ts +3 -0
  324. package/lib/es/steps/fillStep.js +19 -4
  325. package/lib/es/steps/fillSteps.d.ts +1 -0
  326. package/lib/es/steps/fillSteps.js +2 -1
  327. package/lib/es/steps/navStep.d.ts +3 -0
  328. package/lib/es/steps/navStep.js +22 -23
  329. package/lib/es/steps/navSteps.d.ts +1 -0
  330. package/lib/es/steps/navSteps.js +2 -1
  331. package/lib/es/switch/index.d.ts +12 -0
  332. package/lib/es/switch/index.js +19 -4
  333. package/lib/es/table/Body/BaseRow.js +35 -3
  334. package/lib/es/table/Body/index.js +9 -2
  335. package/lib/es/table/ColumnFilter.js +4 -0
  336. package/lib/es/table/ColumnSelection.d.ts +3 -0
  337. package/lib/es/table/ColumnSelection.js +6 -2
  338. package/lib/es/table/ColumnSorter.js +17 -3
  339. package/lib/es/table/CustomExpandIcon.js +6 -1
  340. package/lib/es/table/Table.d.ts +2 -0
  341. package/lib/es/table/Table.js +31 -15
  342. package/lib/es/table/TableCell.d.ts +2 -0
  343. package/lib/es/table/TableCell.js +6 -2
  344. package/lib/es/table/TableHeaderRow.js +8 -2
  345. package/lib/es/tabs/TabBar.js +11 -3
  346. package/lib/es/tabs/TabPane.js +3 -1
  347. package/lib/es/tabs/index.js +1 -6
  348. package/lib/es/tagInput/index.d.ts +4 -1
  349. package/lib/es/tagInput/index.js +29 -3
  350. package/lib/es/timePicker/TimePicker.d.ts +12 -0
  351. package/lib/es/timePicker/TimePicker.js +9 -1
  352. package/lib/es/timePicker/index.d.ts +6 -0
  353. package/lib/es/timeline/index.d.ts +1 -1
  354. package/lib/es/timeline/index.js +1 -0
  355. package/lib/es/timeline/item.js +4 -2
  356. package/lib/es/toast/toast.js +2 -0
  357. package/lib/es/tooltip/TriangleArrow.js +1 -0
  358. package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
  359. package/lib/es/tooltip/index.d.ts +16 -12
  360. package/lib/es/tooltip/index.js +53 -39
  361. package/lib/es/transfer/index.d.ts +1 -1
  362. package/lib/es/transfer/index.js +35 -17
  363. package/lib/es/tree/index.d.ts +1 -0
  364. package/lib/es/tree/index.js +15 -6
  365. package/lib/es/tree/treeNode.d.ts +12 -4
  366. package/lib/es/tree/treeNode.js +44 -4
  367. package/lib/es/treeSelect/index.d.ts +16 -0
  368. package/lib/es/treeSelect/index.js +57 -10
  369. package/lib/es/typography/base.js +17 -7
  370. package/lib/es/typography/copyable.js +5 -1
  371. package/lib/es/upload/fileCard.js +23 -4
  372. package/lib/es/upload/index.js +19 -4
  373. package/list/item.tsx +0 -1
  374. package/modal/Modal.tsx +2 -0
  375. package/modal/ModalContent.tsx +35 -5
  376. package/navigation/Item.tsx +15 -0
  377. package/navigation/SubNav.tsx +13 -1
  378. package/navigation/index.tsx +1 -1
  379. package/notification/notice.tsx +19 -14
  380. package/package.json +8 -8
  381. package/pagination/index.tsx +9 -5
  382. package/popover/index.tsx +5 -0
  383. package/progress/_story/progress.stories.js +18 -18
  384. package/progress/index.tsx +58 -20
  385. package/radio/radio.tsx +12 -2
  386. package/radio/radioGroup.tsx +29 -3
  387. package/radio/radioInner.tsx +10 -1
  388. package/rating/index.tsx +19 -2
  389. package/rating/item.tsx +6 -0
  390. package/select/__test__/select.test.js +45 -0
  391. package/select/_story/select.stories.js +29 -0
  392. package/select/index.tsx +52 -4
  393. package/select/option.tsx +3 -0
  394. package/sideSheet/SideSheetContent.tsx +13 -9
  395. package/sideSheet/index.tsx +3 -2
  396. package/slider/__test__/slider.test.js +9 -0
  397. package/slider/_story/slider.stories.js +1 -1
  398. package/slider/index.tsx +44 -7
  399. package/spin/icon.tsx +3 -3
  400. package/steps/basicStep.tsx +15 -4
  401. package/steps/basicSteps.tsx +3 -2
  402. package/steps/fillStep.tsx +27 -12
  403. package/steps/fillSteps.tsx +2 -0
  404. package/steps/navStep.tsx +15 -4
  405. package/steps/navSteps.tsx +3 -2
  406. package/switch/_story/switch.stories.js +20 -19
  407. package/switch/_story/switch.stories.tsx +13 -13
  408. package/switch/index.tsx +23 -5
  409. package/table/Body/BaseRow.tsx +25 -1
  410. package/table/Body/index.tsx +7 -2
  411. package/table/ColumnFilter.tsx +7 -1
  412. package/table/ColumnSelection.tsx +4 -1
  413. package/table/ColumnSorter.tsx +18 -1
  414. package/table/CustomExpandIcon.tsx +5 -0
  415. package/table/Table.tsx +26 -13
  416. package/table/TableCell.tsx +11 -1
  417. package/table/TableHeaderRow.tsx +16 -2
  418. package/table/__test__/table.test.js +46 -0
  419. package/tabs/TabBar.tsx +8 -5
  420. package/tabs/TabPane.tsx +3 -1
  421. package/tabs/index.tsx +1 -2
  422. package/tagInput/__test__/tagInput.test.js +46 -0
  423. package/tagInput/_story/tagInput.stories.js +2 -2
  424. package/tagInput/index.tsx +31 -8
  425. package/timePicker/TimePicker.tsx +14 -1
  426. package/timeline/_story/timeline.stories.js +1 -1
  427. package/timeline/index.tsx +2 -2
  428. package/timeline/item.tsx +2 -1
  429. package/toast/toast.tsx +2 -0
  430. package/tooltip/TriangleArrow.tsx +1 -1
  431. package/tooltip/TriangleArrowVertical.tsx +1 -1
  432. package/tooltip/_story/tooltip.stories.js +562 -514
  433. package/tooltip/index.tsx +50 -33
  434. package/transfer/index.tsx +32 -28
  435. package/tree/_story/tree.stories.js +3 -3
  436. package/tree/index.tsx +10 -2
  437. package/tree/treeNode.tsx +46 -10
  438. package/treeSelect/__test__/treeMultiple.test.js +5 -0
  439. package/treeSelect/_story/treeSelect.stories.js +12 -0
  440. package/treeSelect/index.tsx +58 -7
  441. package/typography/base.tsx +7 -1
  442. package/typography/copyable.tsx +10 -1
  443. package/upload/fileCard.tsx +13 -15
  444. package/upload/index.tsx +10 -6
@@ -37,6 +37,10 @@ class TextArea extends BaseComponent {
37
37
  this.foundation.handleClear(e);
38
38
  };
39
39
 
40
+ this.handleClearEnterPress = e => {
41
+ this.foundation.handleClearEnterPress(e);
42
+ };
43
+
40
44
  this.setRef = node => {
41
45
  this.libRef.current = node;
42
46
  const {
@@ -162,8 +166,12 @@ class TextArea extends BaseComponent {
162
166
 
163
167
  if (showClear) {
164
168
  return /*#__PURE__*/React.createElement("div", {
169
+ role: "button",
170
+ tabIndex: 0,
171
+ "aria-label": "Clear textarea value",
165
172
  className: clearCls,
166
- onClick: this.handleClear
173
+ onClick: this.handleClear,
174
+ onKeyPress: this.handleClearEnterPress
167
175
  }, /*#__PURE__*/React.createElement(IconClear, null));
168
176
  }
169
177
 
@@ -189,6 +197,9 @@ class TextArea extends BaseComponent {
189
197
  ["".concat(prefixCls, "-textarea-counter-exceed")]: current > total
190
198
  });
191
199
  counter = /*#__PURE__*/React.createElement("div", {
200
+ "aria-label": "Textarea value length counter",
201
+ "aria-valuemax": maxCount,
202
+ "aria-valuenow": current,
192
203
  className: countCls
193
204
  }, current, total ? '/' : null, total);
194
205
  } else {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { InputProps } from '../input';
4
- import { InputNumberAdapter } from '@douyinfe/semi-foundation/lib/es/inputNumber/foundation';
4
+ import InputNumberFoundation, { InputNumberAdapter } from '@douyinfe/semi-foundation/lib/es/inputNumber/foundation';
5
5
  import BaseComponent from '../_base/baseComponent';
6
6
  import { strings } from '@douyinfe/semi-foundation/lib/es/inputNumber/constants';
7
7
  import '@douyinfe/semi-foundation/lib/es/inputNumber/inputNumber.css';
@@ -16,6 +16,7 @@ export interface InputNumberProps extends InputProps {
16
16
  hideButtons?: boolean;
17
17
  innerButtons?: boolean;
18
18
  insetLabel?: React.ReactNode;
19
+ insetLabelId?: string;
19
20
  keepFocus?: boolean;
20
21
  max?: number;
21
22
  min?: number;
@@ -47,6 +48,12 @@ export interface InputNumberState {
47
48
  }
48
49
  declare class InputNumber extends BaseComponent<InputNumberProps, InputNumberState> {
49
50
  static propTypes: {
51
+ 'aria-label': PropTypes.Requireable<string>;
52
+ 'aria-labelledby': PropTypes.Requireable<string>;
53
+ 'aria-invalid': PropTypes.Requireable<boolean>;
54
+ 'aria-errormessage': PropTypes.Requireable<string>;
55
+ 'aria-describedby': PropTypes.Requireable<string>;
56
+ 'aria-required': PropTypes.Requireable<boolean>;
50
57
  autofocus: PropTypes.Requireable<boolean>;
51
58
  className: PropTypes.Requireable<string>;
52
59
  defaultValue: PropTypes.Requireable<string | number>;
@@ -56,6 +63,7 @@ declare class InputNumber extends BaseComponent<InputNumberProps, InputNumberSta
56
63
  hideButtons: PropTypes.Requireable<boolean>;
57
64
  innerButtons: PropTypes.Requireable<boolean>;
58
65
  insetLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
66
+ insetLabelId: PropTypes.Requireable<string>;
59
67
  keepFocus: PropTypes.Requireable<boolean>;
60
68
  max: PropTypes.Requireable<number>;
61
69
  min: PropTypes.Requireable<number>;
@@ -85,20 +93,21 @@ declare class InputNumber extends BaseComponent<InputNumberProps, InputNumberSta
85
93
  currentValue: number | string;
86
94
  cursorBefore: string;
87
95
  cursorAfter: string;
96
+ foundation: InputNumberFoundation;
88
97
  constructor(props: InputNumberProps);
89
98
  componentDidUpdate(prevProps: InputNumberProps): void;
90
99
  setInputRef: (node: HTMLInputElement) => void;
91
- handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => any;
92
- handleInputChange: (value: string, event: React.ChangeEvent<HTMLInputElement>) => any;
93
- handleInputBlur: (e: React.FocusEvent<HTMLInputElement>) => any;
94
- handleInputKeyDown: (e: React.KeyboardEvent) => any;
95
- handleInputMouseEnter: (e: React.MouseEvent) => any;
96
- handleInputMouseLeave: (e: React.MouseEvent) => any;
97
- handleInputMouseMove: (e: React.MouseEvent) => any;
98
- handleUpClick: (e: React.KeyboardEvent) => any;
99
- handleDownClick: (e: React.KeyboardEvent) => any;
100
- handleMouseUp: (e: React.MouseEvent) => any;
101
- handleMouseLeave: (e: React.MouseEvent) => any;
100
+ handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
101
+ handleInputChange: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;
102
+ handleInputBlur: (e: React.FocusEvent<HTMLInputElement>) => void;
103
+ handleInputKeyDown: (e: React.KeyboardEvent) => void;
104
+ handleInputMouseEnter: (e: React.MouseEvent) => void;
105
+ handleInputMouseLeave: (e: React.MouseEvent) => void;
106
+ handleInputMouseMove: (e: React.MouseEvent) => void;
107
+ handleUpClick: (e: React.KeyboardEvent) => void;
108
+ handleDownClick: (e: React.KeyboardEvent) => void;
109
+ handleMouseUp: (e: React.MouseEvent) => void;
110
+ handleMouseLeave: (e: React.MouseEvent) => void;
102
111
  renderButtons: () => JSX.Element;
103
112
  renderSuffix: () => React.ReactNode;
104
113
  render(): JSX.Element;
@@ -110,6 +110,8 @@ class InputNumber extends BaseComponent {
110
110
  return /*#__PURE__*/React.createElement("div", {
111
111
  className: suffixChildrenCls
112
112
  }, /*#__PURE__*/React.createElement("span", {
113
+ role: "button",
114
+ tabIndex: -1,
113
115
  className: upClassName,
114
116
  onMouseDown: notAllowedUp ? _noop : this.handleUpClick,
115
117
  onMouseUp: this.handleMouseUp,
@@ -117,6 +119,8 @@ class InputNumber extends BaseComponent {
117
119
  }, /*#__PURE__*/React.createElement(IconChevronUp, {
118
120
  size: "extra-small"
119
121
  })), /*#__PURE__*/React.createElement("span", {
122
+ role: "button",
123
+ tabIndex: -1,
120
124
  className: downClassName,
121
125
  onMouseDown: notAllowedDown ? _noop : this.handleDownClick,
122
126
  onMouseUp: this.handleMouseUp,
@@ -334,7 +338,11 @@ class InputNumber extends BaseComponent {
334
338
  if (this.foundation.isValidNumber(parsedNum) && parsedNum !== this.state.number) {
335
339
  const obj = {
336
340
  number: parsedNum
337
- }; // Updates input when a button is clicked
341
+ };
342
+ /**
343
+ * If you are clicking the button, it will automatically format once
344
+ * We need to set the status to false after trigger focus event
345
+ */
338
346
 
339
347
  if (this.clickUpOrDown) {
340
348
  obj.value = this.foundation.doFormat(valueStr, true);
@@ -409,19 +417,39 @@ class InputNumber extends BaseComponent {
409
417
  rest = __rest(_a, ["disabled", "className", "prefixCls", "min", "max", "step", "shiftStep", "precision", "formatter", "parser", "forwardedRef", "onUpClick", "onDownClick", "pressInterval", "pressTimeout", "suffix", "size", "hideButtons", "innerButtons", "style", "onNumberChange", "keepFocus"]);
410
418
 
411
419
  const {
412
- value
420
+ value,
421
+ number
413
422
  } = this.state;
414
423
  const inputNumberCls = classnames(className, "".concat(prefixCls, "-number"), {
415
424
  [_concatInstanceProperty(_context = "".concat(prefixCls, "-number-size-")).call(_context, size)]: size
416
425
  });
417
426
  const buttons = this.renderButtons();
427
+ const ariaProps = {
428
+ 'aria-disabled': disabled,
429
+ step
430
+ };
431
+
432
+ if (number) {
433
+ ariaProps['aria-valuenow'] = number;
434
+ }
435
+
436
+ if (max !== Infinity) {
437
+ ariaProps['aria-valuemax'] = max;
438
+ }
439
+
440
+ if (min !== -Infinity) {
441
+ ariaProps['aria-valuemin'] = min;
442
+ }
443
+
418
444
  const input = /*#__PURE__*/React.createElement("div", {
419
445
  className: inputNumberCls,
420
446
  style: style,
421
447
  onMouseMove: e => this.handleInputMouseMove(e),
422
448
  onMouseEnter: e => this.handleInputMouseEnter(e),
423
449
  onMouseLeave: e => this.handleInputMouseLeave(e)
424
- }, /*#__PURE__*/React.createElement(Input, _Object$assign({}, rest, {
450
+ }, /*#__PURE__*/React.createElement(Input, _Object$assign({
451
+ role: "spinbutton"
452
+ }, ariaProps, rest, {
425
453
  size: size,
426
454
  disabled: disabled,
427
455
  ref: this.setInputRef,
@@ -438,6 +466,12 @@ class InputNumber extends BaseComponent {
438
466
  }
439
467
 
440
468
  InputNumber.propTypes = {
469
+ 'aria-label': PropTypes.string,
470
+ 'aria-labelledby': PropTypes.string,
471
+ 'aria-invalid': PropTypes.bool,
472
+ 'aria-errormessage': PropTypes.string,
473
+ 'aria-describedby': PropTypes.string,
474
+ 'aria-required': PropTypes.bool,
441
475
  autofocus: PropTypes.bool,
442
476
  className: PropTypes.string,
443
477
  defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -447,6 +481,7 @@ InputNumber.propTypes = {
447
481
  hideButtons: PropTypes.bool,
448
482
  innerButtons: PropTypes.bool,
449
483
  insetLabel: PropTypes.node,
484
+ insetLabelId: PropTypes.string,
450
485
  keepFocus: PropTypes.bool,
451
486
  max: PropTypes.number,
452
487
  min: PropTypes.number,
@@ -14,6 +14,8 @@ export interface SiderProps {
14
14
  className?: string;
15
15
  breakpoint?: Array<keyof ResponsiveMap>;
16
16
  onBreakpoint?: (screen: keyof ResponsiveMap, match: boolean) => void;
17
+ 'aria-label'?: React.AriaAttributes['aria-label'];
18
+ 'role'?: React.AriaRole;
17
19
  }
18
20
  declare class Sider extends React.PureComponent<SiderProps> {
19
21
  static propTypes: {
@@ -22,6 +24,8 @@ declare class Sider extends React.PureComponent<SiderProps> {
22
24
  className: PropTypes.Requireable<string>;
23
25
  breakpoint: PropTypes.Requireable<string[]>;
24
26
  onBreakpoint: PropTypes.Requireable<(...args: any[]) => any>;
27
+ 'aria-label': PropTypes.Requireable<string>;
28
+ role: PropTypes.Requireable<string>;
25
29
  };
26
30
  static defaultProps: {
27
31
  prefixCls: string;
@@ -114,6 +114,7 @@ class Sider extends React.PureComponent {
114
114
  });
115
115
  return /*#__PURE__*/React.createElement("aside", _Object$assign({
116
116
  className: classString,
117
+ "aria-label": this.props['aria-label'],
117
118
  style: style
118
119
  }, getDataAttr(others)), /*#__PURE__*/React.createElement("div", {
119
120
  className: "".concat(prefixCls, "-sider-children")
@@ -127,7 +128,9 @@ Sider.propTypes = {
127
128
  style: PropTypes.object,
128
129
  className: PropTypes.string,
129
130
  breakpoint: PropTypes.arrayOf(PropTypes.oneOf(bpt)),
130
- onBreakpoint: PropTypes.func
131
+ onBreakpoint: PropTypes.func,
132
+ 'aria-label': PropTypes.string,
133
+ role: PropTypes.string
131
134
  };
132
135
  Sider.defaultProps = {
133
136
  prefixCls: cssClasses.PREFIX
@@ -35,6 +35,8 @@ function generator(type) {
35
35
  return BasicComponent => class Adapter extends React.PureComponent {
36
36
  render() {
37
37
  return /*#__PURE__*/React.createElement(BasicComponent, _Object$assign({
38
+ role: this.props.role,
39
+ "aria-label": this.props['aria-label'],
38
40
  type: typeName,
39
41
  tagName: tagName
40
42
  }, this.props));
@@ -79,7 +79,6 @@ export default class ListItem extends PureComponent {
79
79
  }
80
80
 
81
81
  let content = /*#__PURE__*/React.createElement("li", {
82
- role: "list-item",
83
82
  className: itemCls,
84
83
  style: style,
85
84
  onClick: handleClick,
@@ -75,6 +75,7 @@ class Modal extends BaseComponent {
75
75
  return null;
76
76
  } else {
77
77
  return /*#__PURE__*/React.createElement(Button, _Object$assign({
78
+ "aria-label": "cancel",
78
79
  onClick: this.handleCancel,
79
80
  loading: cancelLoading,
80
81
  type: "tertiary"
@@ -85,6 +86,7 @@ class Modal extends BaseComponent {
85
86
  return /*#__PURE__*/React.createElement(LocaleConsumer, {
86
87
  componentName: "Modal"
87
88
  }, (locale, localeCode) => /*#__PURE__*/React.createElement("div", null, getCancelButton(locale), /*#__PURE__*/React.createElement(Button, _Object$assign({
89
+ "aria-label": "confirm",
88
90
  type: okType,
89
91
  theme: "solid",
90
92
  loading: confirmLoading,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import BaseComponent from '../_base/baseComponent';
4
- import { ModalContentAdapter, ModalContentProps, ModalContentState } from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
4
+ import ModalContentFoundation, { ModalContentAdapter, ModalContentProps, ModalContentState } from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
5
5
  export default class ModalContent extends BaseComponent<ModalContentProps, ModalContentState> {
6
6
  static contextType: React.Context<import("../configProvider/context").ContextValue>;
7
7
  static propTypes: {
@@ -19,6 +19,8 @@ export default class ModalContent extends BaseComponent<ModalContentProps, Modal
19
19
  };
20
20
  dialogId: string;
21
21
  private timeoutId;
22
+ modalDialogRef: React.MutableRefObject<HTMLDivElement>;
23
+ foundation: ModalContentFoundation;
22
24
  constructor(props: ModalContentProps);
23
25
  get adapter(): ModalContentAdapter;
24
26
  componentDidMount(): void;
@@ -1,3 +1,5 @@
1
+ import _get from "lodash/get";
2
+ import _isFunction from "lodash/isFunction";
1
3
  import _noop from "lodash/noop";
2
4
  import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of";
3
5
  import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
@@ -30,6 +32,7 @@ import BaseComponent from '../_base/baseComponent'; // eslint-disable-next-line
30
32
 
31
33
  import ModalContentFoundation from '@douyinfe/semi-foundation/lib/es/modal/modalContentFoundation';
32
34
  import { IconClose } from '@douyinfe/semi-icons';
35
+ import { getActiveElement } from '../_utils';
33
36
  let uuid = 0;
34
37
  export default class ModalContent extends BaseComponent {
35
38
  constructor(props) {
@@ -89,6 +92,7 @@ export default class ModalContent extends BaseComponent {
89
92
  if (closable) {
90
93
  const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, null);
91
94
  closer = /*#__PURE__*/React.createElement(Button, {
95
+ "aria-label": "close",
92
96
  className: "".concat(cssClasses.DIALOG, "-close"),
93
97
  key: "close-btn",
94
98
  onClick: this.close,
@@ -125,7 +129,8 @@ export default class ModalContent extends BaseComponent {
125
129
  className: "".concat(cssClasses.DIALOG, "-header")
126
130
  }, icon, /*#__PURE__*/React.createElement(Typography.Title, {
127
131
  heading: 5,
128
- className: "".concat(cssClasses.DIALOG, "-title")
132
+ className: "".concat(cssClasses.DIALOG, "-title"),
133
+ id: "".concat(cssClasses.DIALOG, "-title")
129
134
  }, title), closer);
130
135
  };
131
136
 
@@ -143,6 +148,7 @@ export default class ModalContent extends BaseComponent {
143
148
  const hasHeader = title !== null && title !== undefined || 'header' in this.props;
144
149
  return hasHeader ? /*#__PURE__*/React.createElement("div", {
145
150
  className: bodyCls,
151
+ id: "".concat(cssClasses.DIALOG, "-body"),
146
152
  style: bodyStyle
147
153
  }, children) : /*#__PURE__*/React.createElement("div", {
148
154
  className: "".concat(cssClasses.DIALOG, "-body-wrapper")
@@ -182,13 +188,21 @@ export default class ModalContent extends BaseComponent {
182
188
  const footer = props.footer ? /*#__PURE__*/React.createElement("div", {
183
189
  className: "".concat(cssClasses.DIALOG, "-footer")
184
190
  }, props.footer) : null;
185
- const dialogElement = /*#__PURE__*/React.createElement("div", {
191
+ const dialogElement =
192
+ /*#__PURE__*/
193
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
194
+ React.createElement("div", {
186
195
  key: "dialog-element",
187
196
  className: digCls,
188
197
  onMouseDown: this.onDialogMouseDown,
189
198
  style: _Object$assign(_Object$assign({}, props.style), style),
190
199
  id: this.dialogId
191
200
  }, /*#__PURE__*/React.createElement("div", {
201
+ role: "dialog",
202
+ ref: this.modalDialogRef,
203
+ "aria-modal": "true",
204
+ "aria-labelledby": "".concat(cssClasses.DIALOG, "-title"),
205
+ "aria-describedby": "".concat(cssClasses.DIALOG, "-body"),
192
206
  onAnimationEnd: props.onAnimationEnd,
193
207
  className: cls(["".concat(cssClasses.DIALOG, "-content"), props.contentClassName, {
194
208
  ["".concat(cssClasses.DIALOG, "-content-fullScreen")]: props.isFullScreen
@@ -199,10 +213,12 @@ export default class ModalContent extends BaseComponent {
199
213
  };
200
214
 
201
215
  this.state = {
202
- dialogMouseDown: false
216
+ dialogMouseDown: false,
217
+ prevFocusElement: getActiveElement()
203
218
  };
204
219
  this.foundation = new ModalContentFoundation(this.adapter);
205
220
  this.dialogId = "dialog-".concat(uuid++);
221
+ this.modalDialogRef = /*#__PURE__*/React.createRef();
206
222
  }
207
223
 
208
224
  get adapter() {
@@ -239,12 +255,37 @@ export default class ModalContent extends BaseComponent {
239
255
  document.removeEventListener('keydown', _bindInstanceProperty(_context3 = this.foundation.handleKeyDown).call(_context3, this.foundation));
240
256
  }
241
257
  },
242
- getMouseState: () => this.state.dialogMouseDown
258
+ getMouseState: () => this.state.dialogMouseDown,
259
+ modalDialogFocus: () => {
260
+ let activeElementInDialog;
261
+
262
+ if (this.modalDialogRef) {
263
+ const activeElement = getActiveElement();
264
+ activeElementInDialog = this.modalDialogRef.current.contains(activeElement);
265
+ }
266
+
267
+ if (!activeElementInDialog) {
268
+ this.modalDialogRef && this.modalDialogRef.current.focus();
269
+ }
270
+ },
271
+ modalDialogBlur: () => {
272
+ this.modalDialogRef && this.modalDialogRef.current.blur();
273
+ },
274
+ prevFocusElementReFocus: () => {
275
+ const {
276
+ prevFocusElement
277
+ } = this.state;
278
+
279
+ const focus = _get(prevFocusElement, 'focus');
280
+
281
+ _isFunction(focus) && prevFocusElement.focus();
282
+ }
243
283
  });
244
284
  }
245
285
 
246
286
  componentDidMount() {
247
287
  this.foundation.handleKeyDownEventListenerMount();
288
+ this.foundation.modalDialogFocus();
248
289
  }
249
290
 
250
291
  componentWillUnmount() {
@@ -272,7 +313,7 @@ export default class ModalContent extends BaseComponent {
272
313
  const elem = /*#__PURE__*/React.createElement("div", {
273
314
  className: classList
274
315
  }, this.getMaskElement(), /*#__PURE__*/React.createElement("div", {
275
- role: "modal",
316
+ role: "none",
276
317
  tabIndex: -1,
277
318
  className: "".concat(cssClasses.DIALOG, "-wrap"),
278
319
  onClick: maskClosable ? this.onMaskClick : null,
@@ -1,7 +1,7 @@
1
1
  import BaseComponent, { BaseProps } from '../_base/baseComponent';
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import { ItemProps, SelectedItemProps, ItemAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/itemFoundation';
4
+ import ItemFoundation, { ItemProps, SelectedItemProps, ItemAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/itemFoundation';
5
5
  export interface NavItemProps extends ItemProps, BaseProps {
6
6
  children?: React.ReactNode;
7
7
  disabled?: boolean;
@@ -59,12 +59,14 @@ export default class NavItem extends BaseComponent<NavItemProps, NavItemState> {
59
59
  onMouseLeave: (...args: any[]) => void;
60
60
  disabled: boolean;
61
61
  };
62
+ foundation: ItemFoundation;
62
63
  constructor(props: NavItemProps);
63
64
  _invokeContextFunc(funcName: string, ...args: any[]): any;
64
65
  get adapter(): ItemAdapter<NavItemProps, NavItemState>;
65
66
  renderIcon(icon: React.ReactNode, pos: string, isToggleIcon?: boolean): JSX.Element;
66
67
  setItemRef: (ref: HTMLLIElement) => void;
67
68
  wrapTooltip: (node: React.ReactNode) => JSX.Element;
68
- handleClick: (e: React.MouseEvent) => any;
69
+ handleClick: (e: React.MouseEvent) => void;
70
+ handleKeyPress: (e: React.KeyboardEvent) => void;
69
71
  render(): {} | React.ReactElement<any, string | React.JSXElementConstructor<any>>;
70
72
  }
@@ -45,6 +45,8 @@ export default class NavItem extends BaseComponent {
45
45
 
46
46
  this.handleClick = e => this.foundation.handleClick(e);
47
47
 
48
+ this.handleKeyPress = e => this.foundation.handleKeyPress(e);
49
+
48
50
  this.state = {
49
51
  tooltipShow: false
50
52
  };
@@ -103,12 +105,17 @@ export default class NavItem extends BaseComponent {
103
105
  var _context;
104
106
 
105
107
  return Boolean(this.context && this.context.selectedKeys && _includesInstanceProperty(_context = this.context.selectedKeys).call(_context, this.props.itemKey));
108
+ },
109
+ getIsOpen: () => {
110
+ var _context2;
111
+
112
+ return Boolean(this.context && this.context.openKeys && _includesInstanceProperty(_context2 = this.context.openKeys).call(_context2, this.props.itemKey));
106
113
  }
107
114
  });
108
115
  }
109
116
 
110
117
  renderIcon(icon, pos) {
111
- var _context2;
118
+ var _context3;
112
119
 
113
120
  let isToggleIcon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
114
121
 
@@ -127,7 +134,7 @@ export default class NavItem extends BaseComponent {
127
134
  }
128
135
 
129
136
  const className = cls("".concat(clsPrefix, "-icon"), {
130
- [_concatInstanceProperty(_context2 = "".concat(clsPrefix, "-icon-toggle-")).call(_context2, this.context.toggleIconPosition)]: isToggleIcon,
137
+ [_concatInstanceProperty(_context3 = "".concat(clsPrefix, "-icon-toggle-")).call(_context3, this.context.toggleIconPosition)]: isToggleIcon,
131
138
  ["".concat(clsPrefix, "-icon-info")]: !isToggleIcon
132
139
  });
133
140
  return /*#__PURE__*/React.createElement("i", {
@@ -215,14 +222,27 @@ export default class NavItem extends BaseComponent {
215
222
  ["".concat(clsPrefix, "-collapsed")]: isCollapsed,
216
223
  ["".concat(clsPrefix, "-disabled")]: disabled
217
224
  });
218
- itemDom = /*#__PURE__*/React.createElement("li", {
225
+ const ariaProps = {
226
+ 'aria-disabled': disabled
227
+ };
228
+
229
+ if (isSubNav) {
230
+ const isOpen = this.adapter.getIsOpen();
231
+ ariaProps['aria-expanded'] = isOpen;
232
+ }
233
+
234
+ itemDom = /*#__PURE__*/React.createElement("li", _Object$assign({
235
+ role: "menuitem",
236
+ tabIndex: -1
237
+ }, ariaProps, {
219
238
  style: style,
220
239
  ref: this.setItemRef,
221
240
  className: popoverItemCls,
222
241
  onClick: this.handleClick,
223
242
  onMouseEnter: onMouseEnter,
224
- onMouseLeave: onMouseLeave
225
- }, itemChildren);
243
+ onMouseLeave: onMouseLeave,
244
+ onKeyPress: this.handleKeyPress
245
+ }), itemChildren);
226
246
  } // Display Tooltip when disabled and SubNav
227
247
 
228
248
 
@@ -2,7 +2,7 @@ import BaseComponent, { BaseProps } from '../_base/baseComponent';
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';
5
- import { SubNavAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';
5
+ import SubNavFoundation, { SubNavAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';
6
6
  export interface ToggleIcon {
7
7
  open?: string;
8
8
  closed?: string;
@@ -88,13 +88,15 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
88
88
  };
89
89
  titleRef: React.RefObject<HTMLDivElement>;
90
90
  itemRef: React.RefObject<HTMLLIElement>;
91
+ foundation: SubNavFoundation;
91
92
  constructor(props: SubNavProps);
92
93
  setItemRef: (ref: HTMLLIElement | React.RefObject<HTMLLIElement>) => void;
93
94
  setTitleRef: (ref: HTMLDivElement | React.RefObject<HTMLDivElement>) => void;
94
95
  _invokeContextFunc(funcName: string, ...args: any[]): any;
95
96
  get adapter(): SubNavAdapter<SubNavProps, SubNavState>;
96
97
  handleClick: (e: React.MouseEvent) => void;
97
- handleDropdownVisible: (visible: boolean) => any;
98
+ handleKeyPress: (e: React.KeyboardEvent) => void;
99
+ handleDropdownVisible: (visible: boolean) => void;
98
100
  renderIcon(icon: React.ReactNode, pos: string, withTransition?: boolean, isToggleIcon?: boolean, key?: number | string): JSX.Element;
99
101
  renderTitleDiv(): JSX.Element;
100
102
  renderSubUl(): JSX.Element;
@@ -49,6 +49,10 @@ export default class SubNav extends BaseComponent {
49
49
  this.foundation.handleClick(e && e.nativeEvent, this.titleRef && this.titleRef.current);
50
50
  };
51
51
 
52
+ this.handleKeyPress = e => {
53
+ this.foundation.handleKeyPress(e && e.nativeEvent, this.titleRef && this.titleRef.current);
54
+ };
55
+
52
56
  this.handleDropdownVisible = visible => this.foundation.handleDropdownVisibleChange(visible);
53
57
 
54
58
  this.state = {
@@ -203,9 +207,12 @@ export default class SubNav extends BaseComponent {
203
207
  }
204
208
 
205
209
  const titleDiv = /*#__PURE__*/React.createElement("div", {
210
+ role: "menuitem",
211
+ tabIndex: -1,
206
212
  ref: this.setTitleRef,
207
213
  className: titleCls,
208
- onClick: this.handleClick
214
+ onClick: this.handleClick,
215
+ onKeyPress: this.handleKeyPress
209
216
  }, /*#__PURE__*/React.createElement("div", {
210
217
  className: "".concat(prefixCls, "-item-inner")
211
218
  }, placeholderIcons, this.context.toggleIconPosition === strings.TOGGLE_ICON_LEFT && this.renderIcon(toggleIconType, strings.ICON_POS_RIGHT, withTransition, true, 'key-toggle-position-left'), icon || indent || isInSubNav && mode !== strings.MODE_HORIZONTAL ? this.renderIcon(icon, strings.ICON_POS_LEFT, undefined, undefined, 'key-inSubNav-position-left') : null, /*#__PURE__*/React.createElement("span", {
@@ -338,6 +338,8 @@ class Nav extends BaseComponent {
338
338
  style: bodyStyle,
339
339
  className: "".concat(prefixCls, "-list-wrapper")
340
340
  }, /*#__PURE__*/React.createElement("ul", {
341
+ role: "menu",
342
+ "aria-orientation": mode,
341
343
  className: "".concat(prefixCls, "-list")
342
344
  }, this.adapter.getCache('itemElems'), children))), footers))));
343
345
  }
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { NoticeAdapter, NoticeState, NoticeProps } from '@douyinfe/semi-foundation/lib/es/notification/notificationFoundation';
3
+ import { NoticeAdapter, NoticeProps, NoticeState } from '@douyinfe/semi-foundation/lib/es/notification/notificationFoundation';
4
4
  import BaseComponent from '../_base/baseComponent';
5
5
  export interface NoticeReactProps extends NoticeProps {
6
6
  style?: React.CSSProperties;
@@ -22,12 +22,13 @@ import React from 'react';
22
22
  import cls from 'classnames';
23
23
  import PropTypes from 'prop-types';
24
24
  import ConfigContext from '../configProvider/context';
25
- import { numbers, cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/notification/constants';
25
+ import { cssClasses, numbers, strings } from '@douyinfe/semi-foundation/lib/es/notification/constants';
26
26
  import NotificationFoundation from '@douyinfe/semi-foundation/lib/es/notification/notificationFoundation';
27
27
  import Button from '../iconButton';
28
28
  import BaseComponent from '../_base/baseComponent';
29
29
  import { isSemiIcon } from '../_utils';
30
- import { IconAlertTriangle, IconInfoCircle, IconTickCircle, IconAlertCircle, IconClose } from '@douyinfe/semi-icons';
30
+ import { IconAlertCircle, IconAlertTriangle, IconClose, IconInfoCircle, IconTickCircle } from '@douyinfe/semi-icons';
31
+ import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
31
32
  const prefixCls = cssClasses.NOTICE;
32
33
  const {
33
34
  duration
@@ -154,28 +155,36 @@ class Notice extends BaseComponent {
154
155
  [_concatInstanceProperty(_context3 = "".concat(prefixCls, "-")).call(_context3, theme)]: theme === 'light',
155
156
  ["".concat(prefixCls, "-rtl")]: direction === 'rtl'
156
157
  });
157
- return /*#__PURE__*/React.createElement("div", {
158
- className: wrapper,
159
- style: style,
160
- onMouseEnter: this.clearCloseTimer,
161
- onMouseLeave: this.startCloseTimer,
162
- onClick: this.notifyClick
163
- }, /*#__PURE__*/React.createElement("div", null, this.renderTypeIcon()), /*#__PURE__*/React.createElement("div", {
164
- className: "".concat(prefixCls, "-inner")
165
- }, /*#__PURE__*/React.createElement("div", {
166
- className: "".concat(prefixCls, "-content-wrapper")
167
- }, title ? /*#__PURE__*/React.createElement("div", {
168
- className: "".concat(prefixCls, "-title")
169
- }, title) : '', content ? /*#__PURE__*/React.createElement("div", {
170
- className: "".concat(prefixCls, "-content")
171
- }, content) : ''), showClose && /*#__PURE__*/React.createElement(Button, {
172
- className: "".concat(prefixCls, "-icon-close"),
173
- type: "tertiary",
174
- icon: /*#__PURE__*/React.createElement(IconClose, null),
175
- theme: "borderless",
176
- size: "small",
177
- onClick: this.close
178
- })));
158
+ const titleID = getUuidShort({});
159
+ return (
160
+ /*#__PURE__*/
161
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
162
+ React.createElement("div", {
163
+ className: wrapper,
164
+ style: style,
165
+ onMouseEnter: this.clearCloseTimer,
166
+ onMouseLeave: this.startCloseTimer,
167
+ onClick: this.notifyClick,
168
+ "aria-labelledby": titleID,
169
+ role: 'alert'
170
+ }, /*#__PURE__*/React.createElement("div", null, this.renderTypeIcon()), /*#__PURE__*/React.createElement("div", {
171
+ className: "".concat(prefixCls, "-inner")
172
+ }, /*#__PURE__*/React.createElement("div", {
173
+ className: "".concat(prefixCls, "-content-wrapper")
174
+ }, title ? /*#__PURE__*/React.createElement("div", {
175
+ id: titleID,
176
+ className: "".concat(prefixCls, "-title")
177
+ }, title) : '', content ? /*#__PURE__*/React.createElement("div", {
178
+ className: "".concat(prefixCls, "-content")
179
+ }, content) : ''), showClose && /*#__PURE__*/React.createElement(Button, {
180
+ className: "".concat(prefixCls, "-icon-close"),
181
+ type: "tertiary",
182
+ icon: /*#__PURE__*/React.createElement(IconClose, null),
183
+ theme: "borderless",
184
+ size: "small",
185
+ onClick: this.close
186
+ })))
187
+ );
179
188
  }
180
189
 
181
190
  }