@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.
- package/_base/_story/a11y.jsx +6 -6
- package/_utils/hooks/usePrevFocus.ts +16 -0
- package/_utils/index.ts +4 -0
- package/anchor/_story/anchor.stories.js +1 -1
- package/anchor/index.tsx +5 -2
- package/anchor/link.tsx +29 -4
- package/autoComplete/index.tsx +28 -1
- package/avatar/_story/avatar.stories.js +4 -4
- package/avatar/avatarGroup.tsx +1 -1
- package/avatar/index.tsx +10 -4
- package/banner/index.tsx +2 -1
- package/breadcrumb/_story/breadcrumb.stories.js +22 -8
- package/breadcrumb/index.tsx +8 -1
- package/breadcrumb/item.tsx +1 -1
- package/button/Button.tsx +4 -0
- package/button/__test__/button.test.js +1 -1
- package/button/_story/button.stories.js +10 -10
- package/button/buttonGroup.tsx +4 -2
- package/button/splitButtonGroup.tsx +5 -2
- package/card/_story/card.stories.js +8 -1
- package/card/_story/card.stories.tsx +3 -0
- package/card/index.tsx +5 -2
- package/cascader/index.tsx +33 -5
- package/checkbox/_story/checkbox.stories.js +21 -14
- package/checkbox/checkbox.tsx +40 -5
- package/checkbox/checkboxGroup.tsx +30 -5
- package/checkbox/checkboxInner.tsx +25 -2
- package/collapse/index.tsx +2 -2
- package/collapse/item.tsx +15 -8
- package/collapsible/index.tsx +4 -2
- package/configProvider/_story/configProvider.stories.tsx +27 -0
- package/datePicker/__test__/datePicker.test.js +108 -0
- package/datePicker/_story/datePicker.stories.js +146 -2
- package/datePicker/datePicker.tsx +24 -0
- package/datePicker/monthsGrid.tsx +2 -1
- package/dist/css/semi.css +34 -7
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +2785 -1508
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/dropdown/dropdownItem.tsx +1 -1
- package/dropdown/dropdownMenu.tsx +1 -1
- package/empty/index.tsx +5 -5
- package/form/_story/FormApi/formApiDemo.jsx +3 -2
- package/form/_story/Validate/validateDemo.jsx +1 -1
- package/form/_story/demo.jsx +12 -3
- package/form/_story/form.stories.js +0 -7
- package/form/baseForm.tsx +2 -0
- package/form/errorMessage.tsx +13 -2
- package/form/hoc/withField.tsx +37 -8
- package/form/index.tsx +0 -2
- package/form/interface.ts +2 -0
- package/form/label.tsx +4 -2
- package/input/index.tsx +49 -4
- package/input/inputGroup.tsx +9 -4
- package/input/textarea.tsx +25 -6
- package/inputNumber/_story/inputNumber.stories.js +12 -0
- package/inputNumber/index.tsx +33 -2
- package/layout/Sider.tsx +6 -2
- package/layout/index.tsx +4 -3
- package/lib/cjs/_utils/hooks/usePrevFocus.d.ts +2 -0
- package/lib/cjs/_utils/hooks/usePrevFocus.js +30 -0
- package/lib/cjs/_utils/index.d.ts +1 -0
- package/lib/cjs/_utils/index.js +6 -1
- package/lib/cjs/anchor/index.d.ts +2 -0
- package/lib/cjs/anchor/index.js +6 -1
- package/lib/cjs/anchor/link.d.ts +4 -1
- package/lib/cjs/anchor/link.js +39 -5
- package/lib/cjs/autoComplete/index.d.ts +17 -0
- package/lib/cjs/autoComplete/index.js +21 -2
- package/lib/cjs/avatar/avatarGroup.js +2 -1
- package/lib/cjs/avatar/index.d.ts +4 -3
- package/lib/cjs/avatar/index.js +20 -11
- package/lib/cjs/banner/index.js +4 -2
- package/lib/cjs/breadcrumb/index.d.ts +3 -0
- package/lib/cjs/breadcrumb/index.js +10 -4
- package/lib/cjs/breadcrumb/item.js +2 -2
- package/lib/cjs/button/Button.d.ts +2 -0
- package/lib/cjs/button/Button.js +4 -2
- package/lib/cjs/button/buttonGroup.d.ts +3 -0
- package/lib/cjs/button/buttonGroup.js +8 -4
- package/lib/cjs/button/index.d.ts +1 -0
- package/lib/cjs/button/splitButtonGroup.d.ts +3 -0
- package/lib/cjs/button/splitButtonGroup.js +5 -2
- package/lib/cjs/card/index.d.ts +3 -0
- package/lib/cjs/card/index.js +3 -1
- package/lib/cjs/cascader/index.d.ts +14 -0
- package/lib/cjs/cascader/index.js +35 -7
- package/lib/cjs/checkbox/checkbox.d.ts +21 -1
- package/lib/cjs/checkbox/checkbox.js +51 -17
- package/lib/cjs/checkbox/checkboxGroup.d.ts +13 -1
- package/lib/cjs/checkbox/checkboxGroup.js +16 -3
- package/lib/cjs/checkbox/checkboxInner.d.ts +15 -0
- package/lib/cjs/checkbox/checkboxInner.js +20 -3
- package/lib/cjs/collapse/index.js +2 -1
- package/lib/cjs/collapse/item.d.ts +2 -1
- package/lib/cjs/collapse/item.js +17 -3
- package/lib/cjs/collapsible/index.d.ts +1 -0
- package/lib/cjs/collapsible/index.js +4 -2
- package/lib/cjs/datePicker/datePicker.d.ts +12 -0
- package/lib/cjs/datePicker/datePicker.js +22 -3
- package/lib/cjs/datePicker/monthsGrid.d.ts +1 -0
- package/lib/cjs/datePicker/monthsGrid.js +2 -1
- package/lib/cjs/dropdown/dropdownItem.js +3 -1
- package/lib/cjs/dropdown/dropdownMenu.js +4 -1
- package/lib/cjs/empty/index.js +2 -1
- package/lib/cjs/form/baseForm.d.ts +9 -0
- package/lib/cjs/form/baseForm.js +3 -1
- package/lib/cjs/form/errorMessage.d.ts +4 -0
- package/lib/cjs/form/errorMessage.js +21 -3
- package/lib/cjs/form/field.d.ts +7 -0
- package/lib/cjs/form/hoc/withField.js +49 -16
- package/lib/cjs/form/index.d.ts +0 -1
- package/lib/cjs/form/interface.d.ts +2 -0
- package/lib/cjs/form/label.d.ts +2 -0
- package/lib/cjs/form/label.js +5 -2
- package/lib/cjs/input/index.d.ts +16 -0
- package/lib/cjs/input/index.js +51 -15
- package/lib/cjs/input/inputGroup.d.ts +2 -1
- package/lib/cjs/input/inputGroup.js +11 -1
- package/lib/cjs/input/textarea.js +12 -1
- package/lib/cjs/inputNumber/index.d.ts +21 -12
- package/lib/cjs/inputNumber/index.js +37 -3
- package/lib/cjs/layout/Sider.d.ts +4 -0
- package/lib/cjs/layout/Sider.js +4 -1
- package/lib/cjs/layout/index.js +2 -0
- package/lib/cjs/list/item.js +0 -1
- package/lib/cjs/modal/Modal.js +2 -0
- package/lib/cjs/modal/ModalContent.d.ts +3 -1
- package/lib/cjs/modal/ModalContent.js +47 -5
- package/lib/cjs/navigation/Item.d.ts +4 -2
- package/lib/cjs/navigation/Item.js +25 -5
- package/lib/cjs/navigation/SubNav.d.ts +4 -2
- package/lib/cjs/navigation/SubNav.js +8 -1
- package/lib/cjs/navigation/index.js +2 -0
- package/lib/cjs/notification/notice.d.ts +1 -1
- package/lib/cjs/notification/notice.js +32 -22
- package/lib/cjs/pagination/index.js +16 -6
- package/lib/cjs/popover/index.js +7 -3
- package/lib/cjs/progress/index.d.ts +8 -0
- package/lib/cjs/progress/index.js +42 -9
- package/lib/cjs/radio/radio.d.ts +6 -1
- package/lib/cjs/radio/radio.js +17 -5
- package/lib/cjs/radio/radioGroup.d.ts +16 -1
- package/lib/cjs/radio/radioGroup.js +18 -3
- package/lib/cjs/radio/radioInner.d.ts +6 -1
- package/lib/cjs/radio/radioInner.js +11 -3
- package/lib/cjs/rating/index.d.ts +14 -0
- package/lib/cjs/rating/index.js +14 -3
- package/lib/cjs/rating/item.d.ts +2 -0
- package/lib/cjs/rating/item.js +6 -1
- package/lib/cjs/select/index.d.ts +16 -0
- package/lib/cjs/select/index.js +65 -19
- package/lib/cjs/select/option.js +28 -22
- package/lib/cjs/sideSheet/SideSheetContent.d.ts +1 -0
- package/lib/cjs/sideSheet/SideSheetContent.js +12 -5
- package/lib/cjs/sideSheet/index.d.ts +1 -0
- package/lib/cjs/sideSheet/index.js +2 -1
- package/lib/cjs/slider/index.d.ts +2 -1
- package/lib/cjs/slider/index.js +64 -17
- package/lib/cjs/spin/icon.js +2 -4
- package/lib/cjs/steps/basicStep.d.ts +3 -0
- package/lib/cjs/steps/basicStep.js +23 -25
- package/lib/cjs/steps/basicSteps.d.ts +1 -0
- package/lib/cjs/steps/basicSteps.js +2 -1
- package/lib/cjs/steps/fillStep.d.ts +3 -0
- package/lib/cjs/steps/fillStep.js +19 -4
- package/lib/cjs/steps/fillSteps.d.ts +1 -0
- package/lib/cjs/steps/fillSteps.js +2 -1
- package/lib/cjs/steps/navStep.d.ts +3 -0
- package/lib/cjs/steps/navStep.js +22 -25
- package/lib/cjs/steps/navSteps.d.ts +1 -0
- package/lib/cjs/steps/navSteps.js +2 -1
- package/lib/cjs/switch/index.d.ts +12 -0
- package/lib/cjs/switch/index.js +19 -4
- package/lib/cjs/table/Body/BaseRow.js +35 -3
- package/lib/cjs/table/Body/index.js +9 -1
- package/lib/cjs/table/ColumnFilter.js +4 -0
- package/lib/cjs/table/ColumnSelection.d.ts +3 -0
- package/lib/cjs/table/ColumnSelection.js +6 -2
- package/lib/cjs/table/ColumnSorter.js +19 -3
- package/lib/cjs/table/CustomExpandIcon.js +7 -1
- package/lib/cjs/table/Table.d.ts +2 -0
- package/lib/cjs/table/Table.js +31 -15
- package/lib/cjs/table/TableCell.d.ts +2 -0
- package/lib/cjs/table/TableCell.js +6 -2
- package/lib/cjs/table/TableHeaderRow.js +8 -2
- package/lib/cjs/tabs/TabBar.js +11 -3
- package/lib/cjs/tabs/TabPane.js +3 -1
- package/lib/cjs/tabs/index.js +3 -8
- package/lib/cjs/tagInput/index.d.ts +4 -1
- package/lib/cjs/tagInput/index.js +29 -3
- package/lib/cjs/timePicker/TimePicker.d.ts +12 -0
- package/lib/cjs/timePicker/TimePicker.js +9 -1
- package/lib/cjs/timePicker/index.d.ts +6 -0
- package/lib/cjs/timeline/index.d.ts +1 -1
- package/lib/cjs/timeline/index.js +1 -0
- package/lib/cjs/timeline/item.js +4 -2
- package/lib/cjs/toast/toast.js +2 -0
- package/lib/cjs/tooltip/TriangleArrow.js +1 -0
- package/lib/cjs/tooltip/TriangleArrowVertical.js +1 -0
- package/lib/cjs/tooltip/index.d.ts +16 -12
- package/lib/cjs/tooltip/index.js +55 -39
- package/lib/cjs/transfer/index.d.ts +1 -1
- package/lib/cjs/transfer/index.js +35 -17
- package/lib/cjs/tree/index.d.ts +1 -0
- package/lib/cjs/tree/index.js +15 -6
- package/lib/cjs/tree/treeNode.d.ts +12 -4
- package/lib/cjs/tree/treeNode.js +44 -4
- package/lib/cjs/treeSelect/index.d.ts +16 -0
- package/lib/cjs/treeSelect/index.js +60 -12
- package/lib/cjs/typography/base.js +18 -7
- package/lib/cjs/typography/copyable.js +6 -1
- package/lib/cjs/upload/fileCard.js +23 -4
- package/lib/cjs/upload/index.js +19 -4
- package/lib/es/_utils/hooks/usePrevFocus.d.ts +2 -0
- package/lib/es/_utils/hooks/usePrevFocus.js +15 -0
- package/lib/es/_utils/index.d.ts +1 -0
- package/lib/es/_utils/index.js +4 -1
- package/lib/es/anchor/index.d.ts +2 -0
- package/lib/es/anchor/index.js +6 -1
- package/lib/es/anchor/link.d.ts +4 -1
- package/lib/es/anchor/link.js +38 -5
- package/lib/es/autoComplete/index.d.ts +17 -0
- package/lib/es/autoComplete/index.js +21 -2
- package/lib/es/avatar/avatarGroup.js +2 -1
- package/lib/es/avatar/index.d.ts +4 -3
- package/lib/es/avatar/index.js +20 -11
- package/lib/es/banner/index.js +4 -2
- package/lib/es/breadcrumb/index.d.ts +3 -0
- package/lib/es/breadcrumb/index.js +10 -4
- package/lib/es/breadcrumb/item.js +2 -2
- package/lib/es/button/Button.d.ts +2 -0
- package/lib/es/button/Button.js +4 -2
- package/lib/es/button/buttonGroup.d.ts +3 -0
- package/lib/es/button/buttonGroup.js +8 -4
- package/lib/es/button/index.d.ts +1 -0
- package/lib/es/button/splitButtonGroup.d.ts +3 -0
- package/lib/es/button/splitButtonGroup.js +5 -2
- package/lib/es/card/index.d.ts +3 -0
- package/lib/es/card/index.js +3 -1
- package/lib/es/cascader/index.d.ts +14 -0
- package/lib/es/cascader/index.js +35 -7
- package/lib/es/checkbox/checkbox.d.ts +21 -1
- package/lib/es/checkbox/checkbox.js +50 -17
- package/lib/es/checkbox/checkboxGroup.d.ts +13 -1
- package/lib/es/checkbox/checkboxGroup.js +18 -5
- package/lib/es/checkbox/checkboxInner.d.ts +15 -0
- package/lib/es/checkbox/checkboxInner.js +20 -3
- package/lib/es/collapse/index.js +2 -1
- package/lib/es/collapse/item.d.ts +2 -1
- package/lib/es/collapse/item.js +16 -3
- package/lib/es/collapsible/index.d.ts +1 -0
- package/lib/es/collapsible/index.js +4 -2
- package/lib/es/datePicker/datePicker.d.ts +12 -0
- package/lib/es/datePicker/datePicker.js +22 -3
- package/lib/es/datePicker/monthsGrid.d.ts +1 -0
- package/lib/es/datePicker/monthsGrid.js +2 -1
- package/lib/es/dropdown/dropdownItem.js +3 -1
- package/lib/es/dropdown/dropdownMenu.js +4 -1
- package/lib/es/empty/index.js +2 -1
- package/lib/es/form/baseForm.d.ts +9 -0
- package/lib/es/form/baseForm.js +3 -1
- package/lib/es/form/errorMessage.d.ts +4 -0
- package/lib/es/form/errorMessage.js +21 -3
- package/lib/es/form/field.d.ts +7 -0
- package/lib/es/form/hoc/withField.js +48 -15
- package/lib/es/form/index.d.ts +0 -1
- package/lib/es/form/index.js +0 -1
- package/lib/es/form/interface.d.ts +2 -0
- package/lib/es/form/label.d.ts +2 -0
- package/lib/es/form/label.js +5 -2
- package/lib/es/input/index.d.ts +16 -0
- package/lib/es/input/index.js +51 -15
- package/lib/es/input/inputGroup.d.ts +2 -1
- package/lib/es/input/inputGroup.js +11 -1
- package/lib/es/input/textarea.js +12 -1
- package/lib/es/inputNumber/index.d.ts +21 -12
- package/lib/es/inputNumber/index.js +38 -3
- package/lib/es/layout/Sider.d.ts +4 -0
- package/lib/es/layout/Sider.js +4 -1
- package/lib/es/layout/index.js +2 -0
- package/lib/es/list/item.js +0 -1
- package/lib/es/modal/Modal.js +2 -0
- package/lib/es/modal/ModalContent.d.ts +3 -1
- package/lib/es/modal/ModalContent.js +46 -5
- package/lib/es/navigation/Item.d.ts +4 -2
- package/lib/es/navigation/Item.js +25 -5
- package/lib/es/navigation/SubNav.d.ts +4 -2
- package/lib/es/navigation/SubNav.js +8 -1
- package/lib/es/navigation/index.js +2 -0
- package/lib/es/notification/notice.d.ts +1 -1
- package/lib/es/notification/notice.js +33 -24
- package/lib/es/pagination/index.js +16 -6
- package/lib/es/popover/index.js +7 -3
- package/lib/es/progress/index.d.ts +8 -0
- package/lib/es/progress/index.js +42 -9
- package/lib/es/radio/radio.d.ts +6 -1
- package/lib/es/radio/radio.js +16 -5
- package/lib/es/radio/radioGroup.d.ts +16 -1
- package/lib/es/radio/radioGroup.js +18 -3
- package/lib/es/radio/radioInner.d.ts +6 -1
- package/lib/es/radio/radioInner.js +11 -3
- package/lib/es/rating/index.d.ts +14 -0
- package/lib/es/rating/index.js +14 -3
- package/lib/es/rating/item.d.ts +2 -0
- package/lib/es/rating/item.js +6 -1
- package/lib/es/select/index.d.ts +16 -0
- package/lib/es/select/index.js +63 -17
- package/lib/es/select/option.js +28 -22
- package/lib/es/sideSheet/SideSheetContent.d.ts +1 -0
- package/lib/es/sideSheet/SideSheetContent.js +12 -5
- package/lib/es/sideSheet/index.d.ts +1 -0
- package/lib/es/sideSheet/index.js +2 -1
- package/lib/es/slider/index.d.ts +2 -1
- package/lib/es/slider/index.js +63 -16
- package/lib/es/spin/icon.js +2 -4
- package/lib/es/steps/basicStep.d.ts +3 -0
- package/lib/es/steps/basicStep.js +23 -23
- package/lib/es/steps/basicSteps.d.ts +1 -0
- package/lib/es/steps/basicSteps.js +2 -1
- package/lib/es/steps/fillStep.d.ts +3 -0
- package/lib/es/steps/fillStep.js +19 -4
- package/lib/es/steps/fillSteps.d.ts +1 -0
- package/lib/es/steps/fillSteps.js +2 -1
- package/lib/es/steps/navStep.d.ts +3 -0
- package/lib/es/steps/navStep.js +22 -23
- package/lib/es/steps/navSteps.d.ts +1 -0
- package/lib/es/steps/navSteps.js +2 -1
- package/lib/es/switch/index.d.ts +12 -0
- package/lib/es/switch/index.js +19 -4
- package/lib/es/table/Body/BaseRow.js +35 -3
- package/lib/es/table/Body/index.js +9 -2
- package/lib/es/table/ColumnFilter.js +4 -0
- package/lib/es/table/ColumnSelection.d.ts +3 -0
- package/lib/es/table/ColumnSelection.js +6 -2
- package/lib/es/table/ColumnSorter.js +17 -3
- package/lib/es/table/CustomExpandIcon.js +6 -1
- package/lib/es/table/Table.d.ts +2 -0
- package/lib/es/table/Table.js +31 -15
- package/lib/es/table/TableCell.d.ts +2 -0
- package/lib/es/table/TableCell.js +6 -2
- package/lib/es/table/TableHeaderRow.js +8 -2
- package/lib/es/tabs/TabBar.js +11 -3
- package/lib/es/tabs/TabPane.js +3 -1
- package/lib/es/tabs/index.js +1 -6
- package/lib/es/tagInput/index.d.ts +4 -1
- package/lib/es/tagInput/index.js +29 -3
- package/lib/es/timePicker/TimePicker.d.ts +12 -0
- package/lib/es/timePicker/TimePicker.js +9 -1
- package/lib/es/timePicker/index.d.ts +6 -0
- package/lib/es/timeline/index.d.ts +1 -1
- package/lib/es/timeline/index.js +1 -0
- package/lib/es/timeline/item.js +4 -2
- package/lib/es/toast/toast.js +2 -0
- package/lib/es/tooltip/TriangleArrow.js +1 -0
- package/lib/es/tooltip/TriangleArrowVertical.js +1 -0
- package/lib/es/tooltip/index.d.ts +16 -12
- package/lib/es/tooltip/index.js +53 -39
- package/lib/es/transfer/index.d.ts +1 -1
- package/lib/es/transfer/index.js +35 -17
- package/lib/es/tree/index.d.ts +1 -0
- package/lib/es/tree/index.js +15 -6
- package/lib/es/tree/treeNode.d.ts +12 -4
- package/lib/es/tree/treeNode.js +44 -4
- package/lib/es/treeSelect/index.d.ts +16 -0
- package/lib/es/treeSelect/index.js +57 -10
- package/lib/es/typography/base.js +17 -7
- package/lib/es/typography/copyable.js +5 -1
- package/lib/es/upload/fileCard.js +23 -4
- package/lib/es/upload/index.js +19 -4
- package/list/item.tsx +0 -1
- package/modal/Modal.tsx +2 -0
- package/modal/ModalContent.tsx +35 -5
- package/navigation/Item.tsx +15 -0
- package/navigation/SubNav.tsx +13 -1
- package/navigation/index.tsx +1 -1
- package/notification/notice.tsx +19 -14
- package/package.json +8 -8
- package/pagination/index.tsx +9 -5
- package/popover/index.tsx +5 -0
- package/progress/_story/progress.stories.js +18 -18
- package/progress/index.tsx +58 -20
- package/radio/radio.tsx +12 -2
- package/radio/radioGroup.tsx +29 -3
- package/radio/radioInner.tsx +10 -1
- package/rating/index.tsx +19 -2
- package/rating/item.tsx +6 -0
- package/select/__test__/select.test.js +45 -0
- package/select/_story/select.stories.js +29 -0
- package/select/index.tsx +52 -4
- package/select/option.tsx +3 -0
- package/sideSheet/SideSheetContent.tsx +13 -9
- package/sideSheet/index.tsx +3 -2
- package/slider/__test__/slider.test.js +9 -0
- package/slider/_story/slider.stories.js +1 -1
- package/slider/index.tsx +44 -7
- package/spin/icon.tsx +3 -3
- package/steps/basicStep.tsx +15 -4
- package/steps/basicSteps.tsx +3 -2
- package/steps/fillStep.tsx +27 -12
- package/steps/fillSteps.tsx +2 -0
- package/steps/navStep.tsx +15 -4
- package/steps/navSteps.tsx +3 -2
- package/switch/_story/switch.stories.js +20 -19
- package/switch/_story/switch.stories.tsx +13 -13
- package/switch/index.tsx +23 -5
- package/table/Body/BaseRow.tsx +25 -1
- package/table/Body/index.tsx +7 -2
- package/table/ColumnFilter.tsx +7 -1
- package/table/ColumnSelection.tsx +4 -1
- package/table/ColumnSorter.tsx +18 -1
- package/table/CustomExpandIcon.tsx +5 -0
- package/table/Table.tsx +26 -13
- package/table/TableCell.tsx +11 -1
- package/table/TableHeaderRow.tsx +16 -2
- package/table/__test__/table.test.js +46 -0
- package/tabs/TabBar.tsx +8 -5
- package/tabs/TabPane.tsx +3 -1
- package/tabs/index.tsx +1 -2
- package/tagInput/__test__/tagInput.test.js +46 -0
- package/tagInput/_story/tagInput.stories.js +2 -2
- package/tagInput/index.tsx +31 -8
- package/timePicker/TimePicker.tsx +14 -1
- package/timeline/_story/timeline.stories.js +1 -1
- package/timeline/index.tsx +2 -2
- package/timeline/item.tsx +2 -1
- package/toast/toast.tsx +2 -0
- package/tooltip/TriangleArrow.tsx +1 -1
- package/tooltip/TriangleArrowVertical.tsx +1 -1
- package/tooltip/_story/tooltip.stories.js +562 -514
- package/tooltip/index.tsx +50 -33
- package/transfer/index.tsx +32 -28
- package/tree/_story/tree.stories.js +3 -3
- package/tree/index.tsx +10 -2
- package/tree/treeNode.tsx +46 -10
- package/treeSelect/__test__/treeMultiple.test.js +5 -0
- package/treeSelect/_story/treeSelect.stories.js +12 -0
- package/treeSelect/index.tsx +58 -7
- package/typography/base.tsx +7 -1
- package/typography/copyable.tsx +10 -1
- package/upload/fileCard.tsx +13 -15
- 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
|
|
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
|
|
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
|
|
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}
|
package/collapse/index.tsx
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
+
}
|
package/collapsible/index.tsx
CHANGED
|
@@ -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"
|