@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
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import classnames from 'classnames';
5
5
  import { checkboxGroupClasses as css, strings } from '@douyinfe/semi-foundation/checkbox/constants';
6
- import CheckboxGroupFoudation, { CheckboxGroupAdapter } from '@douyinfe/semi-foundation/checkbox/checkboxGroupFoundation';
6
+ import CheckboxGroupFoundation, { CheckboxGroupAdapter } from '@douyinfe/semi-foundation/checkbox/checkboxGroupFoundation';
7
7
  import BaseComponent from '../_base/baseComponent';
8
8
  import { Context } from './context';
9
9
  import { isEqual } from 'lodash';
@@ -13,6 +13,11 @@ export type CheckboxDirection = 'horizontal' | 'vertical';
13
13
  export type CheckboxType = 'default' | 'card' | 'pureCard';
14
14
 
15
15
  export type CheckboxGroupProps = {
16
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
17
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
18
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
19
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
20
+ 'aria-required'?: React.AriaAttributes['aria-required'];
16
21
  defaultValue?: any[];
17
22
  disabled?: boolean;
18
23
  name?: string;
@@ -26,6 +31,7 @@ export type CheckboxGroupProps = {
26
31
  className?: string;
27
32
  type?: CheckboxType;
28
33
  id?: string;
34
+ 'aria-label'?: React.AriaAttributes['aria-label'];
29
35
  };
30
36
 
31
37
  export type CheckboxGroupState = {
@@ -34,6 +40,11 @@ export type CheckboxGroupState = {
34
40
  class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState> {
35
41
 
36
42
  static propTypes = {
43
+ 'aria-describedby': PropTypes.string,
44
+ 'aria-errormessage': PropTypes.string,
45
+ 'aria-invalid': PropTypes.bool,
46
+ 'aria-labelledby': PropTypes.string,
47
+ 'aria-required': PropTypes.bool,
37
48
  defaultValue: PropTypes.array,
38
49
  disabled: PropTypes.bool,
39
50
  name: PropTypes.string,
@@ -69,12 +80,13 @@ class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState
69
80
  };
70
81
  }
71
82
 
83
+ foundation: CheckboxGroupFoundation;
72
84
  constructor(props: CheckboxGroupProps) {
73
85
  super(props);
74
86
  this.state = {
75
87
  value: props.value || props.defaultValue,
76
88
  };
77
- this.foundation = new CheckboxGroupFoudation(this.adapter);
89
+ this.foundation = new CheckboxGroupFoundation(this.adapter);
78
90
  this.onChange = this.onChange.bind(this);
79
91
  }
80
92
 
@@ -97,7 +109,7 @@ class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState
97
109
  }
98
110
 
99
111
  render() {
100
- const { children, options, prefixCls, direction, className, id, style, type } = this.props;
112
+ const { children, options, prefixCls, direction, className, id, style, type, disabled } = this.props;
101
113
 
102
114
  const isPureCardType = type === strings.TYPE_PURECARD;
103
115
  const isCardType = type === strings.TYPE_CARD || isPureCardType;
@@ -119,6 +131,7 @@ class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState
119
131
  if (typeof option === 'string') {
120
132
  return (
121
133
  <Checkbox
134
+ role="listitem"
122
135
  key={index}
123
136
  disabled={this.props.disabled}
124
137
  value={option}
@@ -130,6 +143,7 @@ class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState
130
143
  } else {
131
144
  return (
132
145
  <Checkbox
146
+ role="listitem"
133
147
  key={index}
134
148
  disabled={option.disabled || this.props.disabled}
135
149
  value={option.value}
@@ -145,11 +159,22 @@ class CheckboxGroup extends BaseComponent<CheckboxGroupProps, CheckboxGroupState
145
159
  }
146
160
  });
147
161
  } else if (children) {
148
- inner = (React.Children.toArray(children) as React.ReactElement[]).map((itm, index) => React.cloneElement(itm, { key: index }));
162
+ inner = (React.Children.toArray(children) as React.ReactElement[]).map((itm, index) => React.cloneElement(itm, { key: index, role: 'listitem' }));
149
163
  }
150
164
 
151
165
  return (
152
- <div className={prefixClsDisplay} style={style} id={id}>
166
+ <div
167
+ id={id}
168
+ role="list"
169
+ aria-label={this.props['aria-label']}
170
+ className={prefixClsDisplay}
171
+ style={style}
172
+ aria-labelledby={this.props['aria-labelledby']}
173
+ aria-describedby={this.props['aria-describedby']}
174
+ // aria-errormessage={this.props['aria-errormessage']}
175
+ // aria-invalid={this.props['aria-invalid']}
176
+ // aria-required={this.props['aria-required']}
177
+ >
153
178
  <Context.Provider
154
179
  value={{
155
180
  checkboxGroup: {
@@ -8,6 +8,11 @@ import { Context } from './context';
8
8
  import { IconCheckboxTick, IconCheckboxIndeterminate } from '@douyinfe/semi-icons';
9
9
 
10
10
  export interface CheckboxInnerProps {
11
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
12
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
13
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
14
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
15
+ 'aria-required'?: React.AriaAttributes['aria-required'];
11
16
  indeterminate?: boolean;
12
17
  checked?: boolean;
13
18
  disabled?: boolean;
@@ -15,12 +20,20 @@ export interface CheckboxInnerProps {
15
20
  name?: string;
16
21
  isPureCardType?: boolean;
17
22
  ref?: React.MutableRefObject<CheckboxInner> | ((ref: CheckboxInner) => void);
23
+ addonId?: string;
24
+ extraId?: string;
25
+ 'aria-label'?: React.AriaAttributes['aria-label'];
18
26
  }
19
27
 
20
28
  class CheckboxInner extends PureComponent<CheckboxInnerProps> {
21
29
  static contextType = Context;
22
30
 
23
31
  static propTypes = {
32
+ 'aria-describedby': PropTypes.string,
33
+ 'aria-errormessage': PropTypes.string,
34
+ 'aria-invalid': PropTypes.bool,
35
+ 'aria-labelledby': PropTypes.string,
36
+ 'aria-required': PropTypes.bool,
24
37
  checked: PropTypes.bool,
25
38
  disabled: PropTypes.bool,
26
39
  onChange: PropTypes.func,
@@ -28,6 +41,8 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
28
41
  grouped: PropTypes.bool,
29
42
  value: PropTypes.any,
30
43
  isPureCardType: PropTypes.bool,
44
+ addonId: PropTypes.string,
45
+ extraId: PropTypes.string,
31
46
  };
32
47
 
33
48
  static defaultProps = {
@@ -44,7 +59,7 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
44
59
  }
45
60
 
46
61
  render() {
47
- const { indeterminate, checked, disabled, prefixCls, name, isPureCardType } = this.props;
62
+ const { indeterminate, checked, disabled, prefixCls, name, isPureCardType, addonId, extraId } = this.props;
48
63
  const prefix = prefixCls || css.PREFIX;
49
64
 
50
65
  const wrapper = classnames(
@@ -69,10 +84,18 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
69
84
  return (
70
85
  <span className={wrapper}>
71
86
  <input
87
+ type="checkbox"
88
+ aria-label={this.props['aria-label']}
89
+ aria-disabled={disabled}
90
+ aria-checked={checked}
91
+ aria-labelledby={addonId}
92
+ aria-describedby={extraId || this.props['aria-describedby']}
93
+ aria-invalid={this.props['aria-invalid']}
94
+ aria-errormessage={this.props['aria-errormessage']}
95
+ aria-required={this.props['aria-required']}
72
96
  ref={ref => {
73
97
  this.inputEntity = ref;
74
98
  }}
75
- type="checkbox"
76
99
  className={css.INPUT}
77
100
  onChange={noop}
78
101
  checked={checked}
@@ -116,4 +116,4 @@ class Collapse extends BaseComponent<CollapseReactProps, CollapseState> {
116
116
  }
117
117
  }
118
118
 
119
- export default Collapse;
119
+ export default Collapse;
package/collapse/item.tsx CHANGED
@@ -1,12 +1,13 @@
1
- import React, { PureComponent, ReactNode, CSSProperties } from 'react';
1
+ import React, { CSSProperties, PureComponent, ReactNode } from 'react';
2
2
  import cls from 'classnames';
3
3
  import PropTypes from 'prop-types';
4
4
  import { cssClasses } from '@douyinfe/semi-foundation/collapse/constants';
5
5
  import Collapsible from '../collapsible';
6
6
  import CollapseContext, { CollapseContextType } from './collapse-context';
7
7
  import { IconChevronDown, IconChevronUp } from '@douyinfe/semi-icons';
8
+ import { getUuidShort } from '@douyinfe/semi-foundation/utils/uuid';
8
9
 
9
- export interface CollapsePanelProps{
10
+ export interface CollapsePanelProps {
10
11
  itemKey: string;
11
12
  extra?: ReactNode;
12
13
  header?: ReactNode;
@@ -32,6 +33,8 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
32
33
  ]),
33
34
  };
34
35
 
36
+ private ariaID = getUuidShort({});
37
+
35
38
  renderHeader(active: boolean, expandIconEnable = true) {
36
39
  const {
37
40
  header,
@@ -43,13 +46,13 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
43
46
  } = this.context;
44
47
  const { expandIconPosition } = this.context;
45
48
  if (typeof expandIcon === 'undefined') {
46
- expandIcon = (<IconChevronDown />);
49
+ expandIcon = (<IconChevronDown/>);
47
50
  }
48
51
  if (typeof collapseIcon === 'undefined') {
49
- collapseIcon = (<IconChevronUp />);
52
+ collapseIcon = (<IconChevronUp/>);
50
53
  }
51
54
  const icon = (
52
- <span className={cls([`${cssClasses.PREFIX}-header-icon`,
55
+ <span aria-hidden='true' className={cls([`${cssClasses.PREFIX}-header-icon`,
53
56
  { [`${cssClasses.PREFIX}-header-iconDisabled`]: !expandIconEnable }])}>
54
57
  {/* eslint-disable-next-line no-nested-ternary */}
55
58
  {expandIconEnable ? (active ? collapseIcon : expandIcon) : expandIcon}
@@ -105,7 +108,6 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
105
108
  });
106
109
  return (
107
110
  <div
108
- role="Collapse-panel"
109
111
  className={itemCls}
110
112
  {...restProps}
111
113
  >
@@ -114,6 +116,7 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
114
116
  tabIndex={0}
115
117
  className={headerCls}
116
118
  aria-expanded={active ? 'true' : 'false'}
119
+ aria-owns={this.ariaID}
117
120
  onClick={e => onClick(itemKey, e)}
118
121
  >
119
122
  {this.renderHeader(active, children !== undefined)}
@@ -125,6 +128,8 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
125
128
  reCalcKey={reCalcKey}>
126
129
  <div
127
130
  className={contentCls}
131
+ aria-hidden={!active}
132
+ id={this.ariaID}
128
133
  >
129
134
  <div className={`${cssClasses.PREFIX}-content-wrapper`}>
130
135
  {children}
@@ -136,4 +141,4 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
136
141
  </div>
137
142
  );
138
143
  }
139
- }
144
+ }
@@ -19,6 +19,7 @@ export interface CollapsibleProps {
19
19
  style?: React.CSSProperties;
20
20
  collapseHeight?: number;
21
21
  reCalcKey?: number | string;
22
+ id?:string,
22
23
  }
23
24
 
24
25
 
@@ -32,7 +33,8 @@ const Collapsible = (props: CollapsibleProps) => {
32
33
  collapseHeight,
33
34
  style,
34
35
  className,
35
- reCalcKey
36
+ reCalcKey,
37
+ id
36
38
  } = props;
37
39
 
38
40
  const ref = useRef(null);
@@ -90,7 +92,7 @@ const Collapsible = (props: CollapsibleProps) => {
90
92
  const wrapperCls = cls(`${cssClasses.PREFIX}-wrapper`, className);
91
93
  return (
92
94
  <div style={wrapperstyle} className={wrapperCls} ref={ref}>
93
- <div ref={setHeight} style={{overflow:'hidden'}}>{children}</div>
95
+ <div ref={setHeight} style={{ overflow: 'hidden' }} id={id}>{children}</div>
94
96
  </div>
95
97
  );
96
98
  };
@@ -0,0 +1,27 @@
1
+ import React, { useState } from 'react';
2
+ import { ButtonGroup, Button, ConfigProvider } from '@douyinfe/semi-ui';
3
+
4
+ export default function RTLWrapper({ children, onDirectionChange }: { children: React.ReactNode; onDirectionChange?: (direction: 'ltr' | 'rtl') => void }) {
5
+ const [direction, setDirection] = useState();
6
+ const handleDirectionChange = dir => {
7
+ setDirection(dir);
8
+
9
+ if (typeof onDirectionChange === 'function') {
10
+ onDirectionChange(dir);
11
+ }
12
+ };
13
+
14
+ return (
15
+ <>
16
+ <div style={{ marginBottom: 20 }}>
17
+ <ButtonGroup>
18
+ <Button onClick={() => handleDirectionChange('ltr')}>LTR</Button>
19
+ <Button onClick={() => handleDirectionChange('rtl')}>RTL</Button>
20
+ </ButtonGroup>
21
+ </div>
22
+ <ConfigProvider direction={direction}>
23
+ {children}
24
+ </ConfigProvider>
25
+ </>
26
+ );
27
+ }
@@ -968,4 +968,97 @@ describe(`DatePicker`, () => {
968
968
 
969
969
  it('test month sync change dateRange type', () => { testMonthSyncChange('dateRange') });
970
970
  it('test month sync change dateTimeRange type', () => { testMonthSyncChange('dateTimeRange')});
971
+
972
+ it(`test preset given null`, async () => {
973
+ const props = {
974
+ presets: [
975
+ {
976
+ text: 'Today',
977
+ start: null,
978
+ end: null,
979
+ }
980
+ ],
981
+ defaultValue: baseDate,
982
+ defaultOpen: true,
983
+ motion: false,
984
+ type: 'dateRange'
985
+ }
986
+ const handleChange = sinon.spy();
987
+ const demo = mount(<DatePicker {...props} onChange={handleChange} />);
988
+ const elem = demo.find(BaseDatePicker);
989
+
990
+ const btns = document.querySelectorAll('.semi-datepicker-quick-control-item');
991
+
992
+ btns[0].click();
993
+ expect(handleChange.called).toBeTruthy();
994
+ const args = handleChange.getCall(0).args;
995
+ expect(args[0].length).toEqual(0);
996
+ expect(elem.state('panelShow')).toBeFalsy();
997
+ });
998
+
999
+ it(`test preset given null + needConfirm`, async () => {
1000
+ const props = {
1001
+ presets: [
1002
+ {
1003
+ text: 'Today',
1004
+ start: null,
1005
+ end: null,
1006
+ }
1007
+ ],
1008
+ defaultValue: baseDate,
1009
+ defaultOpen: true,
1010
+ motion: false,
1011
+ type: 'dateTimeRange',
1012
+ needConfirm: true,
1013
+ }
1014
+ const handleChange = sinon.spy();
1015
+ const handleConfirm = sinon.spy();
1016
+ const demo = mount(<DatePicker {...props} onChange={handleChange} onConfirm={handleConfirm} />);
1017
+ const elem = demo.find(BaseDatePicker);
1018
+
1019
+ const btns = document.querySelectorAll('.semi-datepicker-quick-control-item');
1020
+
1021
+ // 点击 preset
1022
+ btns[0].click();
1023
+ expect(handleChange.called).toBe(true);
1024
+ const argsChange = handleChange.getCall(0).args;
1025
+ expect(argsChange[0].length).toBe(0);
1026
+ expect(elem.state('panelShow')).toBe(true);
1027
+ // 点击确定
1028
+ const footerBtns = document.querySelectorAll('.semi-datepicker-footer .semi-button');
1029
+ footerBtns[1].click();
1030
+ expect(handleConfirm.called).toBe(true);
1031
+ const argsConfirm = handleConfirm.getCall(0).args;
1032
+ expect(argsConfirm[0].length).toBe(0);
1033
+ expect(elem.state('panelShow')).toBe(false);
1034
+ });
1035
+
1036
+ it('test dateRange triggerRender', async () => {
1037
+ const elem = mount(
1038
+ <DatePicker
1039
+ motion={false}
1040
+ // defaultOpen
1041
+ type="dateRange"
1042
+ triggerRender={({ placeholder }) => (
1043
+ <button>
1044
+ {placeholder}
1045
+ </button>
1046
+ )}
1047
+ />
1048
+ );
1049
+ const trigger = document.querySelector('button');
1050
+ trigger.click();
1051
+ await sleep();
1052
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
1053
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
1054
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
1055
+ const rightPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-right`);
1056
+ const rightSecondWeek = rightPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
1057
+ const rightSecondWeekDays = rightSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
1058
+ leftSecondWeekDays[0].click();
1059
+ rightSecondWeekDays[0].click();
1060
+
1061
+ const baseElem = elem.find(BaseDatePicker);
1062
+ expect(baseElem.state('panelShow')).toBeFalsy();
1063
+ });
971
1064
  });
@@ -10,7 +10,7 @@ import {
10
10
  startOfWeek,
11
11
  endOfWeek,
12
12
  } from 'date-fns';
13
- import { Space, ConfigProvider, InputGroup, InputNumber, Form, withField } from '../../index';
13
+ import { Space, ConfigProvider, InputGroup, InputNumber, Form, withField, Button } from '../../index';
14
14
 
15
15
  // stores
16
16
  import NeedConfirmDemo from './NeedConfirm';
@@ -723,3 +723,86 @@ export const FixNeedConfirm = () => {
723
723
  )
724
724
  }
725
725
  FixNeedConfirm.storyName = '修复 needConfirm 取消后输入框显示错误';
726
+
727
+ /**
728
+ * fix https://github.com/DouyinFE/semi-design/issues/388
729
+ */
730
+ export const FixPresetsClick = () => {
731
+ const presets = [
732
+ {
733
+ text: '清空',
734
+ start: '',
735
+ end: '',
736
+ },
737
+ {
738
+ text: 'Tomorrow',
739
+ start: new Date(new Date().valueOf() + 1000 * 3600 * 24),
740
+ end: new Date(new Date().valueOf() + 1000 * 3600 * 24),
741
+ },
742
+ ];
743
+
744
+ const handleChange = v => {
745
+ console.log('change', v);
746
+ };
747
+
748
+ const handleConfirm = v => {
749
+ console.log('confirm', v);
750
+ }
751
+
752
+ return (
753
+ <div>
754
+ <div>
755
+ <label>
756
+ <span>不设置 needConfirm</span>
757
+ <DatePicker onChange={console.log} type="dateRange" presets={presets} />
758
+ </label>
759
+ </div>
760
+ <div>
761
+ <label>
762
+ <span>设置 needConfirm</span>
763
+ <DatePicker needConfirm onChange={handleChange} onConfirm={handleConfirm} type="dateTimeRange" presets={presets} />
764
+ </label>
765
+ </div>
766
+ </div>
767
+ );
768
+ };
769
+ FixPresetsClick.storyName = '修复 presets 点击后不收起问题';
770
+
771
+ /**
772
+ * fix https://github.com/DouyinFE/semi-design/issues/410
773
+ */
774
+ export const FixTriggerRenderClosePanel = () => {
775
+ const [value, setValue] = useState([]);
776
+
777
+ const handleChange = v => {
778
+ console.log('change', v);
779
+ setValue(v);
780
+ };
781
+
782
+ const formatValue = (dates) => {
783
+ const dateStrs = dates.map(v => String(v));
784
+ return dateStrs.join(' ~ ');
785
+ };
786
+
787
+ const showClear = Array.isArray(value) && value.length > 1;
788
+
789
+ return (
790
+ <Space>
791
+ <DatePicker
792
+ value={value}
793
+ type="dateRange"
794
+ onChange={handleChange}
795
+ motion={false}
796
+ triggerRender={({ placeholder }) => (
797
+ <Button>
798
+ {(value && formatValue(value)) || placeholder}
799
+ </Button>
800
+ )}
801
+ />
802
+ {showClear && (
803
+ <Button onClick={() => setValue([])}>清除</Button>
804
+ )}
805
+ </Space>
806
+ );
807
+ };
808
+ FixTriggerRenderClosePanel.storyName = "fix triggerRender close bug"
@@ -21,9 +21,15 @@ import { RangeType } from '@douyinfe/semi-foundation/datePicker/inputFoundation'
21
21
  import { TimePickerProps } from '../timePicker/TimePicker';
22
22
 
23
23
  export interface DatePickerProps extends DatePickerFoundationProps {
24
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
25
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
26
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
27
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
28
+ 'aria-required'?: React.AriaAttributes['aria-required'];
24
29
  timePickerOpts?: TimePickerProps;
25
30
  bottomSlot?: React.ReactNode;
26
31
  insetLabel?: React.ReactNode;
32
+ insetLabelId?: string;
27
33
  prefix?: React.ReactNode;
28
34
  topSlot?: React.ReactNode;
29
35
  renderDate?: (dayNumber?: number, fullDate?: string) => React.ReactNode;
@@ -42,6 +48,11 @@ export type DatePickerState = DatePickerFoundationState;
42
48
  export default class DatePicker extends BaseComponent<DatePickerProps, DatePickerState> {
43
49
  static contextType = ConfigContext;
44
50
  static propTypes = {
51
+ 'aria-describedby': PropTypes.string,
52
+ 'aria-errormessage': PropTypes.string,
53
+ 'aria-invalid': PropTypes.bool,
54
+ 'aria-labelledby': PropTypes.string,
55
+ 'aria-required': PropTypes.bool,
45
56
  type: PropTypes.oneOf(strings.TYPE_SET),
46
57
  size: PropTypes.oneOf(strings.SIZE_SET),
47
58
  density: PropTypes.oneOf(strings.DENSITY_SET),
@@ -76,6 +87,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
76
87
  prefixCls: PropTypes.string,
77
88
  prefix: PropTypes.node,
78
89
  insetLabel: PropTypes.node,
90
+ insetLabelId: PropTypes.string,
79
91
  zIndex: PropTypes.number,
80
92
  position: PropTypes.oneOf(popoverStrings.POSITION_SET),
81
93
  getPopupContainer: PropTypes.func,
@@ -363,6 +375,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
363
375
  syncSwitchMonth,
364
376
  onPanelChange,
365
377
  timeZone,
378
+ triggerRender
366
379
  } = this.props;
367
380
  const { value, cachedSelectedValue, motionEnd, rangeInputFocus } = this.state;
368
381
 
@@ -408,6 +421,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
408
421
  onPanelChange={onPanelChange}
409
422
  timeZone={timeZone}
410
423
  focusRecordsRef={this.focusRecordsRef}
424
+ triggerRender={triggerRender}
411
425
  />
412
426
  );
413
427
  }
@@ -450,6 +464,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
450
464
  disabled,
451
465
  showClear,
452
466
  insetLabel,
467
+ insetLabelId,
453
468
  placeholder,
454
469
  validateStatus,
455
470
  inputStyle,
@@ -486,6 +501,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
486
501
  inputStyle,
487
502
  showClear,
488
503
  insetLabel,
504
+ insetLabelId,
489
505
  type,
490
506
  format,
491
507
  multiple,
@@ -640,6 +656,11 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
640
656
  style,
641
657
  className: classnames(className, { [prefixCls]: true }),
642
658
  ref: this.setTriggerRef,
659
+ 'aria-invalid': this.props['aria-invalid'],
660
+ 'aria-errormessage': this.props['aria-errormessage'],
661
+ 'aria-labelledby': this.props['aria-labelledby'],
662
+ 'aria-describedby': this.props['aria-describedby'],
663
+ 'aria-required': this.props['aria-required'],
643
664
  };
644
665
 
645
666
  const inner = this.renderInner();
@@ -71,7 +71,8 @@ export default class MonthsGrid extends BaseComponent<MonthsGridProps, MonthsGri
71
71
  syncSwitchMonth: PropTypes.bool,
72
72
  // Callback function for panel date switching
73
73
  onPanelChange: PropTypes.func,
74
- focusRecordsRef: PropTypes.object
74
+ focusRecordsRef: PropTypes.object,
75
+ triggerRender: PropTypes.func,
75
76
  };
76
77
 
77
78
  static defaultProps = {
package/dist/css/semi.css CHANGED
@@ -13919,7 +13919,13 @@ body[theme-mode=dark], body .semi-always-dark {
13919
13919
  }
13920
13920
  .semi-radio .semi-radio-inner-buttonRadio,
13921
13921
  .semi-radio .semi-radio-inner-pureCardRadio {
13922
- display: none;
13922
+ position: absolute;
13923
+ top: 0;
13924
+ left: 0;
13925
+ width: 100%;
13926
+ height: 100%;
13927
+ z-index: -1;
13928
+ opacity: 0;
13923
13929
  }
13924
13930
  .semi-radio-disabled, .semi-radio-disabled:hover {
13925
13931
  cursor: not-allowed;
@@ -15059,6 +15065,7 @@ body[theme-mode=dark], body .semi-always-dark {
15059
15065
  }
15060
15066
  .semi-slider-handle-clicked {
15061
15067
  border: solid 1px var(--semi-color-focus-border);
15068
+ cursor: grabbing;
15062
15069
  }
15063
15070
  .semi-slider-track {
15064
15071
  height: 4px;
@@ -18246,8 +18253,6 @@ body[theme-mode=dark], body .semi-always-dark {
18246
18253
  background-color: inherit;
18247
18254
  }
18248
18255
  .semi-transfer-item .semi-transfer-item-close-icon {
18249
- width: 12px;
18250
- height: 12px;
18251
18256
  font-size: 12px;
18252
18257
  cursor: pointer;
18253
18258
  visibility: hidden;