@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
@@ -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}
@@ -97,7 +97,7 @@ class Collapse extends BaseComponent<CollapseReactProps, CollapseState> {
97
97
  const clsPrefix = cls(cssClasses.PREFIX, className);
98
98
  const { activeSet } = this.state;
99
99
  return (
100
- <div className={clsPrefix} style={style}>
100
+ <div className={clsPrefix} style={style} aria-label={`Collapse`}>
101
101
  <CollapseContext.Provider
102
102
  value={{
103
103
  activeSet,
@@ -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}
@@ -62,7 +65,7 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
62
65
  {iconPosLeft ? icon : null}
63
66
  <span>{header}</span>
64
67
  <span className={`${cssClasses.PREFIX}-header-right`}>
65
- <span>{extra}</span>
68
+ <span aria-label={'Extra of collapse header'}>{extra}</span>
66
69
  {iconPosLeft ? null : icon}
67
70
  </span>
68
71
  </>
@@ -105,7 +108,7 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
105
108
  });
106
109
  return (
107
110
  <div
108
- role="Collapse-panel"
111
+ aria-label={'Collapse panel'}
109
112
  className={itemCls}
110
113
  {...restProps}
111
114
  >
@@ -114,6 +117,7 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
114
117
  tabIndex={0}
115
118
  className={headerCls}
116
119
  aria-expanded={active ? 'true' : 'false'}
120
+ aria-owns={this.ariaID}
117
121
  onClick={e => onClick(itemKey, e)}
118
122
  >
119
123
  {this.renderHeader(active, children !== undefined)}
@@ -125,6 +129,9 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
125
129
  reCalcKey={reCalcKey}>
126
130
  <div
127
131
  className={contentCls}
132
+ aria-label={'Collapse content'}
133
+ aria-hidden={!active}
134
+ id={this.ariaID}
128
135
  >
129
136
  <div className={`${cssClasses.PREFIX}-content-wrapper`}>
130
137
  {children}
@@ -136,4 +143,4 @@ export default class CollapsePanel extends PureComponent<CollapsePanelProps> {
136
143
  </div>
137
144
  );
138
145
  }
139
- }
146
+ }
@@ -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
+ }
@@ -191,12 +191,27 @@ describe(`DatePicker`, () => {
191
191
  btns[0].click();
192
192
  await sleep();
193
193
  expect(_.first(elem.state('value')).getDate() === currentValue.getDate()).toBeTruthy();
194
+ expect(_.isEqual(elem.state('cachedSelectedValue'), [currentValue])).toBe(true);
194
195
 
195
196
  /**
196
197
  * click ensure button
197
198
  */
198
199
  btns[1].click();
199
200
  await sleep();
201
+ expect(_.first(elem.state('value')).getDate() === currentValue.getDate()).toBe(true);
202
+
203
+ /**
204
+ * re click next day
205
+ */
206
+ nextOffsetDayElem.click();
207
+ await sleep();
208
+ expect(_.first(elem.state('value')).getDate() === currentValue.getDate()).toBeTruthy();
209
+
210
+ /**
211
+ * re click ensure button
212
+ */
213
+ btns[1].click();
214
+ await sleep();
200
215
  expect(_.first(elem.state('value')).getDate() - currentValue.getDate()).toBe(dayOffset);
201
216
 
202
217
  demo.unmount();
@@ -953,4 +968,97 @@ describe(`DatePicker`, () => {
953
968
 
954
969
  it('test month sync change dateRange type', () => { testMonthSyncChange('dateRange') });
955
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
+ });
956
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';
@@ -661,4 +661,148 @@ export const FixParseISOBug = () => (
661
661
  FixParseISOBug.storyName = '修复 parseISO bug';
662
662
  FixParseISOBug.parameters = {
663
663
  chromatic: { disableSnapshot: false },
664
- };
664
+ };
665
+
666
+ export const FixNeedConfirm = () => {
667
+ const defaultDate = '2021-12-27 10:37:13';
668
+ const defaultDateRange = ['2021-12-27 10:37:13', '2022-01-28 10:37:13' ];
669
+ const props = {
670
+ needConfirm: true,
671
+ onConfirm: (...args) => {
672
+ console.log('Confirmed: ', ...args);
673
+ },
674
+ onChange: (...args) => {
675
+ console.log('Changed: ', ...args);
676
+ },
677
+ onCancel: (...args) => {
678
+ console.log('Canceled: ', ...args);
679
+ },
680
+ };
681
+
682
+ return (
683
+ <div>
684
+ <div data-cy="1">
685
+ <span>dateTime + needConfirm + defaultValue</span>
686
+ <div>
687
+ <DatePicker
688
+ type="dateTime"
689
+ defaultValue={defaultDate}
690
+ {...props}
691
+ />
692
+ </div>
693
+ </div>
694
+ <div data-cy="2">
695
+ <span>dateTime + needConfirm</span>
696
+ <div>
697
+ <DatePicker
698
+ type="dateTime"
699
+ {...props}
700
+ />
701
+ </div>
702
+ </div>
703
+ <div data-cy="3">
704
+ <span>dateTimeRange + needConfirm + defaultValue</span>
705
+ <div>
706
+ <DatePicker
707
+ type="dateTimeRange"
708
+ defaultValue={defaultDateRange}
709
+ {...props}
710
+ />
711
+ </div>
712
+ </div>
713
+ <div data-cy="4">
714
+ <span>dateTimeRange + needConfirm</span>
715
+ <div>
716
+ <DatePicker
717
+ type="dateTimeRange"
718
+ {...props}
719
+ />
720
+ </div>
721
+ </div>
722
+ </div>
723
+ )
724
+ }
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"