@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.
- package/_base/_story/a11y.jsx +6 -6
- package/_base/_story/a11y.scss +0 -1
- package/_base/_story/index.scss +2 -5
- 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/index.tsx +6 -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 +19 -12
- package/checkbox/checkbox.tsx +40 -5
- package/checkbox/checkboxGroup.tsx +30 -5
- package/checkbox/checkboxInner.tsx +25 -2
- package/collapse/index.tsx +1 -1
- package/collapse/item.tsx +12 -7
- package/collapsible/index.tsx +4 -2
- package/configProvider/_story/configProvider.stories.tsx +27 -0
- package/datePicker/__test__/datePicker.test.js +93 -0
- package/datePicker/_story/datePicker.stories.js +84 -1
- package/datePicker/datePicker.tsx +21 -0
- package/datePicker/monthsGrid.tsx +2 -1
- package/dist/css/semi.css +8 -3
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +2490 -1255
- 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/dropdown/index.tsx +11 -3
- package/empty/index.tsx +4 -4
- 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 +35 -3
- 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/index.d.ts +4 -3
- package/lib/cjs/avatar/index.js +15 -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/item.d.ts +2 -1
- package/lib/cjs/collapse/item.js +12 -2
- 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 +18 -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/dropdown/index.d.ts +10 -3
- 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 +40 -5
- 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/index.d.ts +4 -4
- 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 +4 -1
- 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 +3 -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 +0 -1
- 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 +26 -7
- 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/index.d.ts +4 -3
- package/lib/es/avatar/index.js +15 -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/item.d.ts +2 -1
- package/lib/es/collapse/item.js +11 -2
- 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 +18 -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/dropdown/index.d.ts +10 -3
- 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 +41 -5
- 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/index.d.ts +4 -4
- 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 +4 -1
- 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 +3 -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 +0 -1
- 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 +26 -7
- package/lib/es/upload/index.js +19 -4
- package/list/index.tsx +5 -5
- 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 +6 -4
- 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 +4 -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 +0 -1
- 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 +51 -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 +14 -16
- package/upload/index.tsx +10 -6
package/table/Body/BaseRow.tsx
CHANGED
|
@@ -238,7 +238,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
|
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
if (isExpandedColumn(column) && !displayExpandedColumn) {
|
|
241
|
-
cells.push(<TableCell key={columnIndex} isSection={isSection} />);
|
|
241
|
+
cells.push(<TableCell key={columnIndex} colIndex={columnIndex} isSection={isSection} />);
|
|
242
242
|
} else if (!isScrollbarColumn(column)) {
|
|
243
243
|
const diyProps: { width?: number } = {};
|
|
244
244
|
|
|
@@ -248,6 +248,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
|
|
|
248
248
|
|
|
249
249
|
cells.push(
|
|
250
250
|
<TableCell
|
|
251
|
+
colIndex={columnIndex}
|
|
251
252
|
{...expandableProps}
|
|
252
253
|
{...diyProps}
|
|
253
254
|
hideExpandedColumn={hideExpandedColumn}
|
|
@@ -318,6 +319,10 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
|
|
|
318
319
|
record,
|
|
319
320
|
hovered,
|
|
320
321
|
expanded,
|
|
322
|
+
expandableRow,
|
|
323
|
+
level,
|
|
324
|
+
expandedRow,
|
|
325
|
+
isSection
|
|
321
326
|
} = this.props;
|
|
322
327
|
|
|
323
328
|
const BodyRow: any = components.body.row;
|
|
@@ -341,9 +346,28 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
|
|
|
341
346
|
},
|
|
342
347
|
customClassName
|
|
343
348
|
);
|
|
349
|
+
const ariaProps = {};
|
|
350
|
+
if (typeof index === 'number') {
|
|
351
|
+
ariaProps['aria-rowindex'] = index + 1;
|
|
352
|
+
}
|
|
353
|
+
if (expandableRow) {
|
|
354
|
+
ariaProps['aria-expanded'] = expanded;
|
|
355
|
+
}
|
|
356
|
+
// if row is expandedRow, set it's level to 2
|
|
357
|
+
if (expanded || expandedRow) {
|
|
358
|
+
ariaProps['aria-level'] = 2;
|
|
359
|
+
}
|
|
360
|
+
if (typeof level === 'number') {
|
|
361
|
+
ariaProps['aria-level'] = level + 1;
|
|
362
|
+
}
|
|
363
|
+
if (isSection) {
|
|
364
|
+
ariaProps['aria-level'] = 1;
|
|
365
|
+
}
|
|
344
366
|
|
|
345
367
|
return (
|
|
346
368
|
<BodyRow
|
|
369
|
+
role="row"
|
|
370
|
+
{...ariaProps}
|
|
347
371
|
{...rowProps}
|
|
348
372
|
style={baseRowStyle}
|
|
349
373
|
className={rowCls}
|
package/table/Body/index.tsx
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable max-len */
|
|
4
4
|
import React, { ReactNode } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
|
-
import { get, size, isMap, each, isEqual, pick, isNull } from 'lodash';
|
|
6
|
+
import { get, size, isMap, each, isEqual, pick, isNull, isFunction } from 'lodash';
|
|
7
7
|
import classnames from 'classnames';
|
|
8
8
|
import { VariableSizeList as List } from 'react-window';
|
|
9
9
|
|
|
@@ -15,7 +15,8 @@ import {
|
|
|
15
15
|
isDisabled,
|
|
16
16
|
getRecord,
|
|
17
17
|
genExpandedRowKey,
|
|
18
|
-
getDefaultVirtualizedRowConfig
|
|
18
|
+
getDefaultVirtualizedRowConfig,
|
|
19
|
+
isTreeTable
|
|
19
20
|
} from '@douyinfe/semi-foundation/table/utils';
|
|
20
21
|
import BodyFoundation, { BodyAdapter, FlattenData, GroupFlattenData } from '@douyinfe/semi-foundation/table/bodyFoundation';
|
|
21
22
|
import { strings } from '@douyinfe/semi-foundation/table/constants';
|
|
@@ -730,6 +731,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
|
|
|
730
731
|
dataSource,
|
|
731
732
|
onScroll,
|
|
732
733
|
groups,
|
|
734
|
+
expandedRowRender,
|
|
733
735
|
} = this.props;
|
|
734
736
|
|
|
735
737
|
const x = get(scroll, 'x');
|
|
@@ -775,6 +777,9 @@ class Body extends BaseComponent<BodyProps, BodyState> {
|
|
|
775
777
|
onScroll={handleBodyScroll}
|
|
776
778
|
>
|
|
777
779
|
<Table
|
|
780
|
+
role={ isMap(groups) || isFunction(expandedRowRender) || isTreeTable({ dataSource }) ? 'treegrid' : 'grid'}
|
|
781
|
+
aria-rowcount={dataSource && dataSource.length}
|
|
782
|
+
aria-colcount={columns && columns.length}
|
|
778
783
|
style={tableStyle}
|
|
779
784
|
className={classnames(prefixCls, {
|
|
780
785
|
[`${prefixCls}-fixed`]: anyColumnFixed,
|
package/table/ColumnFilter.tsx
CHANGED
|
@@ -164,7 +164,13 @@ export default function ColumnFilter(props: ColumnFilterProps = {}): React.React
|
|
|
164
164
|
} else {
|
|
165
165
|
iconElem = (
|
|
166
166
|
<div className={finalCls}>
|
|
167
|
-
<IconFilter
|
|
167
|
+
<IconFilter
|
|
168
|
+
role="button"
|
|
169
|
+
aria-label="Filter data with this column"
|
|
170
|
+
aria-haspopup="listbox"
|
|
171
|
+
tabIndex={-1}
|
|
172
|
+
size="small"
|
|
173
|
+
/>
|
|
168
174
|
</div>
|
|
169
175
|
);
|
|
170
176
|
}
|
|
@@ -20,6 +20,7 @@ export interface TableSelectionCellProps {
|
|
|
20
20
|
indeterminate?: boolean; // Intermediate state, shown as a solid horizontal line
|
|
21
21
|
prefixCls?: string;
|
|
22
22
|
className?: string;
|
|
23
|
+
'aria-label'?: React.AriaAttributes['aria-label'];
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
/**
|
|
@@ -36,6 +37,7 @@ export default class TableSelectionCell extends BaseComponent<TableSelectionCell
|
|
|
36
37
|
indeterminate: PropTypes.bool,
|
|
37
38
|
prefixCls: PropTypes.string,
|
|
38
39
|
className: PropTypes.string,
|
|
40
|
+
'aria-label': PropTypes.string,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
static defaultProps = {
|
|
@@ -60,6 +62,7 @@ export default class TableSelectionCell extends BaseComponent<TableSelectionCell
|
|
|
60
62
|
|
|
61
63
|
render() {
|
|
62
64
|
const { selected, getCheckboxProps, indeterminate, disabled, prefixCls, className } = this.props;
|
|
65
|
+
const ariaLabel = this.props['aria-label'];
|
|
63
66
|
let checkboxProps = {
|
|
64
67
|
onChange: this.handleChange,
|
|
65
68
|
disabled,
|
|
@@ -81,7 +84,7 @@ export default class TableSelectionCell extends BaseComponent<TableSelectionCell
|
|
|
81
84
|
|
|
82
85
|
return (
|
|
83
86
|
<span className={wrapCls}>
|
|
84
|
-
<Checkbox {...checkboxProps} />
|
|
87
|
+
<Checkbox aria-label={ariaLabel} {...checkboxProps} />
|
|
85
88
|
</span>
|
|
86
89
|
);
|
|
87
90
|
}
|
package/table/ColumnSorter.tsx
CHANGED
|
@@ -7,6 +7,7 @@ import { IconCaretup, IconCaretdown } from '@douyinfe/semi-icons';
|
|
|
7
7
|
import { cssClasses, strings } from '@douyinfe/semi-foundation/table/constants';
|
|
8
8
|
|
|
9
9
|
import { SortOrder } from './interface';
|
|
10
|
+
import isEnterPress from '@douyinfe/semi-foundation/utils/isEnterPress';
|
|
10
11
|
|
|
11
12
|
export interface ColumnSorterProps {
|
|
12
13
|
className?: string;
|
|
@@ -43,9 +44,25 @@ export default class ColumnSorter extends PureComponent<ColumnSorterProps> {
|
|
|
43
44
|
const downCls = cls(`${prefixCls}-column-sorter-down`, {
|
|
44
45
|
on: sortOrder === strings.SORT_DIRECTIONS[1],
|
|
45
46
|
});
|
|
47
|
+
const ariaProps = {
|
|
48
|
+
/**
|
|
49
|
+
* Set 'aria-sort' to aria-columnheader is difficult, so set 'aria-label' about sort info to sorter
|
|
50
|
+
* reference: https://developer.mozilla.org/en-US/docs/Web/API/Element/ariaSort
|
|
51
|
+
*/
|
|
52
|
+
'aria-label': `Current sort order is ${sortOrder ? `${sortOrder}ing` : 'none'}`,
|
|
53
|
+
'aria-roledescription': 'Sort data with this column',
|
|
54
|
+
};
|
|
46
55
|
|
|
47
56
|
return (
|
|
48
|
-
<div
|
|
57
|
+
<div
|
|
58
|
+
role='button'
|
|
59
|
+
{...ariaProps}
|
|
60
|
+
tabIndex={-1}
|
|
61
|
+
style={style}
|
|
62
|
+
className={`${prefixCls}-column-sorter`}
|
|
63
|
+
onClick={onClick}
|
|
64
|
+
onKeyPress={e => isEnterPress(e) && onClick(e as any)}
|
|
65
|
+
>
|
|
49
66
|
<span className={`${upCls}`}>
|
|
50
67
|
<IconCaretup size={iconBtnSize} />
|
|
51
68
|
</span>
|
|
@@ -5,6 +5,7 @@ import { noop } from 'lodash';
|
|
|
5
5
|
|
|
6
6
|
import { IconChevronRight, IconChevronDown, IconTreeTriangleDown, IconTreeTriangleRight } from '@douyinfe/semi-icons';
|
|
7
7
|
import { cssClasses } from '@douyinfe/semi-foundation/table/constants';
|
|
8
|
+
import isEnterPress from '@douyinfe/semi-foundation/utils/isEnterPress';
|
|
8
9
|
|
|
9
10
|
import Rotate from '../motions/Rotate';
|
|
10
11
|
|
|
@@ -65,10 +66,14 @@ export default function CustomExpandIcon(props: CustomExpandIconProps) {
|
|
|
65
66
|
|
|
66
67
|
return (
|
|
67
68
|
<span
|
|
69
|
+
role="button"
|
|
70
|
+
aria-label="Expand this row"
|
|
71
|
+
tabIndex={-1}
|
|
68
72
|
onClick={handleClick}
|
|
69
73
|
onMouseEnter={onMouseEnter}
|
|
70
74
|
onMouseLeave={onMouseLeave}
|
|
71
75
|
className={`${prefixCls}-expand-icon`}
|
|
76
|
+
onKeyPress={e => isEnterPress(e) && handleClick(e as any)}
|
|
72
77
|
>
|
|
73
78
|
{icon}
|
|
74
79
|
</span>
|
package/table/Table.tsx
CHANGED
|
@@ -95,6 +95,7 @@ export interface NormalTableState<RecordType extends Record<string, any> = Data>
|
|
|
95
95
|
bodyHasScrollBar?: boolean;
|
|
96
96
|
prePropRowSelection?: TableStateRowSelection<RecordType>;
|
|
97
97
|
tableWidth?: number;
|
|
98
|
+
prePagination?: Pagination;
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
export type TableStateRowSelection<RecordType extends Record<string, any> = Data> = (RowSelectionProps<RecordType> & { selectedRowKeysSet?: Set<(string | number)> }) | boolean;
|
|
@@ -390,6 +391,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
390
391
|
headWidths: [], // header cell width
|
|
391
392
|
bodyHasScrollBar: false,
|
|
392
393
|
prePropRowSelection: undefined,
|
|
394
|
+
prePagination: undefined
|
|
393
395
|
};
|
|
394
396
|
|
|
395
397
|
this.rootWrapRef = createRef();
|
|
@@ -412,7 +414,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
412
414
|
|
|
413
415
|
static getDerivedStateFromProps(props: NormalTableProps, state: NormalTableState) {
|
|
414
416
|
const willUpdateStates: Partial<NormalTableState> = {};
|
|
415
|
-
const { rowSelection, dataSource, childrenRecordName, rowKey } = props;
|
|
417
|
+
const { rowSelection, dataSource, childrenRecordName, rowKey, pagination } = props;
|
|
416
418
|
props.columns && props.children && logger.warn('columns should not given by object and children at the same time');
|
|
417
419
|
|
|
418
420
|
if (props.columns && props.columns !== state.cachedColumns) {
|
|
@@ -453,6 +455,17 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
453
455
|
willUpdateStates.rowSelection = newSelectionStates;
|
|
454
456
|
willUpdateStates.prePropRowSelection = rowSelection;
|
|
455
457
|
}
|
|
458
|
+
if (pagination !== state.prePagination) {
|
|
459
|
+
let newPagination: Pagination = {};
|
|
460
|
+
if (isObject(state.pagination)) {
|
|
461
|
+
newPagination = { ...newPagination, ...state.pagination };
|
|
462
|
+
}
|
|
463
|
+
if (isObject(pagination)) {
|
|
464
|
+
newPagination = { ...newPagination, ...pagination };
|
|
465
|
+
}
|
|
466
|
+
willUpdateStates.pagination = newPagination;
|
|
467
|
+
willUpdateStates.prePagination = pagination;
|
|
468
|
+
}
|
|
456
469
|
return willUpdateStates;
|
|
457
470
|
}
|
|
458
471
|
|
|
@@ -468,16 +481,17 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
468
481
|
// TODO: Extract the setState operation to the adapter or getDerivedStateFromProps function
|
|
469
482
|
componentDidUpdate(prevProps: NormalTableProps<RecordType>, prevState: NormalTableState<RecordType>) {
|
|
470
483
|
const {
|
|
471
|
-
pagination,
|
|
472
484
|
dataSource,
|
|
473
485
|
expandedRowKeys,
|
|
474
486
|
expandAllRows,
|
|
475
487
|
expandAllGroupRows,
|
|
476
488
|
virtualized,
|
|
477
489
|
components,
|
|
490
|
+
pagination: propsPagination
|
|
478
491
|
} = this.props;
|
|
479
492
|
|
|
480
493
|
const {
|
|
494
|
+
pagination: statePagination,
|
|
481
495
|
queries: stateQueries,
|
|
482
496
|
cachedColumns: stateCachedColumns,
|
|
483
497
|
cachedChildren: stateCachedChildren,
|
|
@@ -521,11 +535,6 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
521
535
|
}
|
|
522
536
|
|
|
523
537
|
|
|
524
|
-
// Update pagination
|
|
525
|
-
if (pagination !== prevProps.pagination) {
|
|
526
|
-
states.pagination = isObject(pagination) ? { ...pagination } : pagination;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
538
|
/**
|
|
530
539
|
* After dataSource is updated || (cachedColumns || cachedChildren updated)
|
|
531
540
|
* 1. Cache filtered sorted data and a collection of data rows, stored in this
|
|
@@ -538,10 +547,11 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
538
547
|
const filteredSortedDataSource = this.foundation.getFilteredSortedDataSource(_dataSource, stateQueries);
|
|
539
548
|
this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);
|
|
540
549
|
states.dataSource = filteredSortedDataSource;
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
550
|
+
// when dataSource has change, should reset currentPage
|
|
551
|
+
states.pagination = isObject(statePagination) ? {
|
|
552
|
+
...statePagination,
|
|
553
|
+
currentPage: isObject(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1,
|
|
554
|
+
} : statePagination;
|
|
545
555
|
|
|
546
556
|
if (this.props.groupBy) {
|
|
547
557
|
states.groups = null;
|
|
@@ -551,11 +561,11 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
551
561
|
if (Object.keys(states).length) {
|
|
552
562
|
const {
|
|
553
563
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
564
|
+
pagination: mergedStatePagination = null,
|
|
554
565
|
queries: stateQueries = null,
|
|
555
|
-
pagination: statePagination = null,
|
|
556
566
|
dataSource: stateDataSource = null,
|
|
557
567
|
} = states;
|
|
558
|
-
const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource,
|
|
568
|
+
const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, mergedStatePagination as TablePaginationProps, stateQueries);
|
|
559
569
|
|
|
560
570
|
// After the pager is updated, reset allRowKeys of the current page
|
|
561
571
|
this.adapter.setAllRowKeys(handledProps.allRowKeys);
|
|
@@ -790,6 +800,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
790
800
|
const hasRowSelected = this.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
|
|
791
801
|
return (
|
|
792
802
|
<ColumnSelection
|
|
803
|
+
aria-label={`${allIsSelected ? 'Deselect' : 'Select'} all rows`}
|
|
793
804
|
disabled={disabled}
|
|
794
805
|
key={columnKey}
|
|
795
806
|
selected={allIsSelected}
|
|
@@ -806,6 +817,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
806
817
|
|
|
807
818
|
return (
|
|
808
819
|
<ColumnSelection
|
|
820
|
+
aria-label={`${selected ? 'Deselect' : 'Select'} this row`}
|
|
809
821
|
getCheckboxProps={checkboxPropsFn}
|
|
810
822
|
selected={selected}
|
|
811
823
|
onChange={(status, e) => this.toggleSelectRow(status, key, e)}
|
|
@@ -966,6 +978,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
966
978
|
/**
|
|
967
979
|
* render pagination
|
|
968
980
|
* @param {object} pagination
|
|
981
|
+
* @param {object} propRenderPagination
|
|
969
982
|
*/
|
|
970
983
|
renderPagination = (pagination: TablePaginationProps, propRenderPagination: RenderPagination) => {
|
|
971
984
|
if (!pagination) {
|
package/table/TableCell.tsx
CHANGED
|
@@ -42,6 +42,7 @@ export interface TableCellProps extends BaseProps {
|
|
|
42
42
|
selected?: boolean; // Whether the current row is selected
|
|
43
43
|
expanded?: boolean; // Whether the current line is expanded
|
|
44
44
|
disabled?: boolean;
|
|
45
|
+
colIndex?: number;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
function isInvalidRenderCellText(text: any) {
|
|
@@ -82,6 +83,7 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
|
|
|
82
83
|
height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
83
84
|
selected: PropTypes.bool,
|
|
84
85
|
expanded: PropTypes.bool,
|
|
86
|
+
colIndex: PropTypes.number,
|
|
85
87
|
};
|
|
86
88
|
|
|
87
89
|
get adapter(): TableCellAdapter {
|
|
@@ -314,6 +316,7 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
|
|
|
314
316
|
fixedRight,
|
|
315
317
|
lastFixedLeft,
|
|
316
318
|
firstFixedRight,
|
|
319
|
+
colIndex
|
|
317
320
|
} = this.props;
|
|
318
321
|
const { className } = column;
|
|
319
322
|
const fixedLeftFlag = fixedLeft || typeof fixedLeft === 'number';
|
|
@@ -347,7 +350,14 @@ export default class TableCell extends BaseComponent<TableCellProps, Record<stri
|
|
|
347
350
|
);
|
|
348
351
|
|
|
349
352
|
return (
|
|
350
|
-
<BodyCell
|
|
353
|
+
<BodyCell
|
|
354
|
+
role="gridcell"
|
|
355
|
+
aria-colindex={colIndex + 1}
|
|
356
|
+
className={columnCls}
|
|
357
|
+
onClick={this.handleClick}
|
|
358
|
+
{...newTdProps}
|
|
359
|
+
ref={this.setRef}
|
|
360
|
+
>
|
|
351
361
|
{inner}
|
|
352
362
|
</BodyCell>
|
|
353
363
|
);
|
package/table/TableHeaderRow.tsx
CHANGED
|
@@ -168,11 +168,25 @@ export default class TableHeaderRow extends BaseComponent<TableHeaderRowProps, R
|
|
|
168
168
|
return null;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
return
|
|
171
|
+
return (
|
|
172
|
+
<HeaderCell
|
|
173
|
+
role="columnheader"
|
|
174
|
+
aria-colindex={cellIndex + 1}
|
|
175
|
+
{...props}
|
|
176
|
+
style={cellStyle}
|
|
177
|
+
key={column.key || column.dataIndex || cellIndex}
|
|
178
|
+
/>
|
|
179
|
+
);
|
|
172
180
|
});
|
|
173
181
|
|
|
174
182
|
return (
|
|
175
|
-
<HeaderRow
|
|
183
|
+
<HeaderRow
|
|
184
|
+
role="row"
|
|
185
|
+
aria-rowindex={index + 1}
|
|
186
|
+
{...rowProps}
|
|
187
|
+
style={style}
|
|
188
|
+
ref={this.cacheRef}
|
|
189
|
+
>
|
|
176
190
|
{cells}
|
|
177
191
|
</HeaderRow>
|
|
178
192
|
);
|
|
@@ -1452,6 +1452,52 @@ describe(`Table`, () => {
|
|
|
1452
1452
|
});
|
|
1453
1453
|
expect(demo.find(BaseTable).state('disabledRowKeys').length).toEqual(2);
|
|
1454
1454
|
});
|
|
1455
|
+
/**
|
|
1456
|
+
* 分页受控场景,更新数据后查看分页器是否保持当前页
|
|
1457
|
+
*/
|
|
1458
|
+
it('test controlled pagination reset when dataSource change', async () => {
|
|
1459
|
+
const total = 100;
|
|
1460
|
+
const pagination = {
|
|
1461
|
+
pageSize: 10,
|
|
1462
|
+
currentPage: 2,
|
|
1463
|
+
};
|
|
1464
|
+
const columns = getColumns();
|
|
1465
|
+
const demo = mount(<Table dataSource={getData(total)} columns={columns} pagination={pagination}/>);
|
|
1466
|
+
|
|
1467
|
+
const dataNum = getRandomNumber(100, 40);
|
|
1468
|
+
const newData = getData(dataNum);
|
|
1469
|
+
demo.setProps({
|
|
1470
|
+
dataSource: newData,
|
|
1471
|
+
});
|
|
1472
|
+
await sleep(2000);
|
|
1473
|
+
expect(
|
|
1474
|
+
demo
|
|
1475
|
+
.find(`.${BASE_CLASS_PREFIX}-page .${BASE_CLASS_PREFIX}-page-item-active`)
|
|
1476
|
+
.getDOMNode().innerHTML
|
|
1477
|
+
).toBe('2');
|
|
1478
|
+
});
|
|
1479
|
+
|
|
1480
|
+
/**
|
|
1481
|
+
* 分页非受控场景,更新数据后查看分页器是否重置
|
|
1482
|
+
*/
|
|
1483
|
+
it('test uncontrolled pagination reset when dataSource change', async () => {
|
|
1484
|
+
const total = 100;
|
|
1485
|
+
const columns = getColumns();
|
|
1486
|
+
const demo = mount(<Table dataSource={getData(total)} columns={columns}/>);
|
|
1487
|
+
demo.find(`.${BASE_CLASS_PREFIX}-page .${BASE_CLASS_PREFIX}-page-item`)
|
|
1488
|
+
.at(2)
|
|
1489
|
+
.simulate('click');
|
|
1490
|
+
const dataNum = getRandomNumber(100, 40);
|
|
1491
|
+
const newData = getData(dataNum);
|
|
1492
|
+
demo.setProps({
|
|
1493
|
+
dataSource: newData,
|
|
1494
|
+
});
|
|
1495
|
+
await sleep(2000);
|
|
1496
|
+
demo.update();
|
|
1497
|
+
expect(demo.find(`.semi-page .semi-page-item-active`).getDOMNode().innerHTML).toBe('1');
|
|
1498
|
+
expect(demo.find(BaseTable).state('pagination')).toHaveProperty('currentPage', 1);
|
|
1499
|
+
});
|
|
1500
|
+
|
|
1455
1501
|
it('test pagination changed', async () => {
|
|
1456
1502
|
const total = 100;
|
|
1457
1503
|
const pagination = {
|
package/tabs/TabBar.tsx
CHANGED
|
@@ -91,7 +91,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
91
91
|
renderTabItem = (panel: PlainTab): ReactNode => {
|
|
92
92
|
const { size, type, deleteTabItem } = this.props;
|
|
93
93
|
const panelIcon = panel.icon ? this.renderIcon(panel.icon) : null;
|
|
94
|
-
const closableIcon = (type === 'card' && panel.closable) ? <IconClose className={`${cssClasses.TABS_TAB}-icon-close`} onClick={(e: React.MouseEvent<HTMLSpanElement>) => deleteTabItem(panel.itemKey, e)} /> : null;
|
|
94
|
+
const closableIcon = (type === 'card' && panel.closable) ? <IconClose aria-label="Close" role="button" className={`${cssClasses.TABS_TAB}-icon-close`} onClick={(e: React.MouseEvent<HTMLSpanElement>) => deleteTabItem(panel.itemKey, e)} /> : null;
|
|
95
95
|
let events = {};
|
|
96
96
|
const key = panel.itemKey;
|
|
97
97
|
if (!panel.disabled) {
|
|
@@ -99,8 +99,9 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
99
99
|
onClick: (e: MouseEvent<HTMLDivElement>): void => this.handleItemClick(key, e),
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
+
const isSelected = this._isActive(key);
|
|
102
103
|
const className = cls(cssClasses.TABS_TAB, {
|
|
103
|
-
[cssClasses.TABS_TAB_ACTIVE]:
|
|
104
|
+
[cssClasses.TABS_TAB_ACTIVE]: isSelected,
|
|
104
105
|
[cssClasses.TABS_TAB_DISABLED]: panel.disabled,
|
|
105
106
|
[`${cssClasses.TABS_TAB}-small`]: size === 'small',
|
|
106
107
|
[`${cssClasses.TABS_TAB}-medium`]: size === 'medium',
|
|
@@ -108,8 +109,10 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
108
109
|
return (
|
|
109
110
|
<div
|
|
110
111
|
role="tab"
|
|
112
|
+
id={`semiTab${key}`}
|
|
113
|
+
aria-controls={`semiTabPanel${key}`}
|
|
111
114
|
aria-disabled={panel.disabled ? 'true' : 'false'}
|
|
112
|
-
aria-selected={
|
|
115
|
+
aria-selected={isSelected ? 'true' : 'false'}
|
|
113
116
|
{...events}
|
|
114
117
|
className={className}
|
|
115
118
|
key={this._getItemKey(key)}
|
|
@@ -182,7 +185,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
182
185
|
style={dropdownStyle}
|
|
183
186
|
trigger={'hover'}
|
|
184
187
|
>
|
|
185
|
-
<div className={arrowCls} onClick={(e): void => this.handleArrowClick(items, pos)}>
|
|
188
|
+
<div role="presentation" className={arrowCls} onClick={(e): void => this.handleArrowClick(items, pos)}>
|
|
186
189
|
<Button
|
|
187
190
|
disabled={disabled}
|
|
188
191
|
icon={icon}
|
|
@@ -233,7 +236,7 @@ class TabBar extends React.Component<TabBarProps, TabBarState> {
|
|
|
233
236
|
const contents = collapsible ? this.renderCollapsedTab() : this.renderTabComponents(list);
|
|
234
237
|
|
|
235
238
|
return (
|
|
236
|
-
<div role="
|
|
239
|
+
<div role="tablist" aria-orientation={tabPosition === "left" ? "vertical" : "horizontal"} className={classNames} style={style} {...getDataAttr(restProps)} data-uuid={this.uuid}>
|
|
237
240
|
{contents}
|
|
238
241
|
{extra}
|
|
239
242
|
</div>
|
package/tabs/TabPane.tsx
CHANGED
|
@@ -86,7 +86,9 @@ class TabPane extends PureComponent<TabPaneProps> {
|
|
|
86
86
|
return (
|
|
87
87
|
<div
|
|
88
88
|
ref={this.ref}
|
|
89
|
-
role="
|
|
89
|
+
role="tabpanel"
|
|
90
|
+
id={`semiTabPanel${itemKey}`}
|
|
91
|
+
aria-labelledby={`semiTab${itemKey}`}
|
|
90
92
|
className={classNames}
|
|
91
93
|
style={style}
|
|
92
94
|
aria-hidden={active ? 'false' : 'true'}
|
package/tabs/index.tsx
CHANGED
|
@@ -76,6 +76,28 @@ describe('TagInput', () => {
|
|
|
76
76
|
tagInput.unmount();
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
+
it('TagInput with defaultValue and value is undefined', () => {
|
|
80
|
+
const props = {
|
|
81
|
+
defaultValue: ['tiktok', 'hotsoon'],
|
|
82
|
+
value: undefined,
|
|
83
|
+
};
|
|
84
|
+
const tagInput = getTagInput(props);
|
|
85
|
+
const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
|
|
86
|
+
expect(tags.length).toEqual(0);
|
|
87
|
+
tagInput.unmount();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('TagInput with defaultValue and value is null', () => {
|
|
91
|
+
const props = {
|
|
92
|
+
defaultValue: ['tiktok', 'hotsoon'],
|
|
93
|
+
value: null,
|
|
94
|
+
};
|
|
95
|
+
const tagInput = getTagInput(props);
|
|
96
|
+
const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
|
|
97
|
+
expect(tags.length).toEqual(0);
|
|
98
|
+
tagInput.unmount();
|
|
99
|
+
});
|
|
100
|
+
|
|
79
101
|
it('TagInput with disabled', () => {
|
|
80
102
|
const disabledTagInput = mount(<TagInput disabled />);
|
|
81
103
|
expect(disabledTagInput.exists(`.${BASE_CLASS_PREFIX}-tagInput-disabled`)).toEqual(true);
|
|
@@ -328,6 +350,30 @@ describe('TagInput', () => {
|
|
|
328
350
|
expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('hotsoon');
|
|
329
351
|
});
|
|
330
352
|
|
|
353
|
+
it('tagInput with set value to null ', () => {
|
|
354
|
+
const props = {
|
|
355
|
+
value: ['tiktok']
|
|
356
|
+
};
|
|
357
|
+
const tagInput = getTagInput(props);
|
|
358
|
+
expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('tiktok');
|
|
359
|
+
tagInput.setProps({ value: null });
|
|
360
|
+
tagInput.update();
|
|
361
|
+
const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
|
|
362
|
+
expect(tags.length).toEqual(0);
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
it('tagInput with set value to null ', () => {
|
|
366
|
+
const props = {
|
|
367
|
+
value: ['tiktok']
|
|
368
|
+
};
|
|
369
|
+
const tagInput = getTagInput(props);
|
|
370
|
+
expect(tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`).getDOMNode().textContent).toEqual('tiktok');
|
|
371
|
+
tagInput.setProps({ value: undefined });
|
|
372
|
+
tagInput.update();
|
|
373
|
+
const tags = tagInput.find(`.${BASE_CLASS_PREFIX}-tagInput-wrapper .${BASE_CLASS_PREFIX}-tag-content`);
|
|
374
|
+
expect(tags.length).toEqual(0);
|
|
375
|
+
});
|
|
376
|
+
|
|
331
377
|
it('tagInput with inputValue controlled mode ', () => {
|
|
332
378
|
const props = {
|
|
333
379
|
inputValue: 'abc'
|
|
@@ -13,7 +13,7 @@ export default {
|
|
|
13
13
|
|
|
14
14
|
export const Default = () => (
|
|
15
15
|
<>
|
|
16
|
-
<TagInput defaultValue={['抖音', '火山', '西瓜视频']} placeholder="请输入..." style={style} />
|
|
16
|
+
<TagInput aria-label='input tag' defaultValue={['抖音', '火山', '西瓜视频']} placeholder="请输入..." style={style} />
|
|
17
17
|
<TagInput
|
|
18
18
|
maxTagCount={2}
|
|
19
19
|
showRestTagsPopover={true}
|
|
@@ -348,7 +348,7 @@ class CustomRender extends React.Component {
|
|
|
348
348
|
marginRight: 10,
|
|
349
349
|
}}
|
|
350
350
|
>
|
|
351
|
-
<Avatar src={node.avatar} size="extra-small">
|
|
351
|
+
<Avatar alt="avatar" src={node.avatar} size="extra-small">
|
|
352
352
|
{node.abbr}
|
|
353
353
|
</Avatar>
|
|
354
354
|
<span
|