@douyinfe/semi-ui 2.2.2 → 2.4.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/_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/datePicker.tsx +19 -0
- package/dist/css/semi.css +23 -12
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +2502 -1249
- 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 +30 -9
- package/inputNumber/__test__/inputNumber.test.js +36 -8
- package/inputNumber/index.tsx +30 -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/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 +14 -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 +16 -3
- package/lib/cjs/inputNumber/index.d.ts +8 -0
- package/lib/cjs/inputNumber/index.js +35 -4
- 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 +35 -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 +14 -0
- package/lib/cjs/timePicker/TimePicker.js +11 -4
- package/lib/cjs/timePicker/index.d.ts +7 -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.js +32 -14
- 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 +54 -5
- 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 +14 -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 +16 -3
- package/lib/es/inputNumber/index.d.ts +8 -0
- package/lib/es/inputNumber/index.js +36 -4
- 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 +35 -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 +14 -0
- package/lib/es/timePicker/TimePicker.js +11 -4
- package/lib/es/timePicker/index.d.ts +7 -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.js +32 -14
- 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 +53 -5
- 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 +57 -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 +30 -14
- package/table/TableCell.tsx +11 -1
- package/table/TableHeaderRow.tsx +16 -2
- package/table/__test__/table.test.js +46 -0
- package/table/_story/table.stories.js +2 -0
- package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
- package/table/_story/v2/FixedZIndex/index.jsx +87 -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 +17 -2
- package/timePicker/__test__/timePicker.test.js +34 -3
- package/timePicker/_story/timepicker.stories.js +18 -0
- 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 +29 -25
- package/tree/_story/tree.stories.js +3 -3
- package/tree/index.tsx +10 -2
- package/tree/treeNode.tsx +54 -11
- 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
|
@@ -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,
|
|
@@ -520,12 +534,6 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
520
534
|
this.foundation.initExpandedRowKeys({ groups: stateGroups });
|
|
521
535
|
}
|
|
522
536
|
|
|
523
|
-
|
|
524
|
-
// Update pagination
|
|
525
|
-
if (pagination !== prevProps.pagination) {
|
|
526
|
-
states.pagination = isObject(pagination) ? { ...pagination } : pagination;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
537
|
/**
|
|
530
538
|
* After dataSource is updated || (cachedColumns || cachedChildren updated)
|
|
531
539
|
* 1. Cache filtered sorted data and a collection of data rows, stored in this
|
|
@@ -539,23 +547,27 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
539
547
|
this.foundation.setCachedFilteredSortedDataSource(filteredSortedDataSource);
|
|
540
548
|
states.dataSource = filteredSortedDataSource;
|
|
541
549
|
|
|
542
|
-
if (pagination === prevProps.pagination) {
|
|
543
|
-
states.pagination = isObject(pagination) ? { ...pagination } : pagination;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
550
|
if (this.props.groupBy) {
|
|
547
551
|
states.groups = null;
|
|
548
552
|
}
|
|
549
553
|
}
|
|
550
554
|
|
|
555
|
+
// when dataSource has change, should reset currentPage
|
|
556
|
+
if (dataSource !== prevProps.dataSource) {
|
|
557
|
+
states.pagination = isObject(statePagination) ? {
|
|
558
|
+
...statePagination,
|
|
559
|
+
currentPage: isObject(propsPagination) && propsPagination.currentPage ? propsPagination.currentPage : 1,
|
|
560
|
+
} : statePagination;
|
|
561
|
+
}
|
|
562
|
+
|
|
551
563
|
if (Object.keys(states).length) {
|
|
552
564
|
const {
|
|
553
565
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
566
|
+
pagination: mergedStatePagination = null,
|
|
554
567
|
queries: stateQueries = null,
|
|
555
|
-
pagination: statePagination = null,
|
|
556
568
|
dataSource: stateDataSource = null,
|
|
557
569
|
} = states;
|
|
558
|
-
const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource,
|
|
570
|
+
const handledProps: Partial<NormalTableState<RecordType>> = this.foundation.getCurrentPageData(stateDataSource, mergedStatePagination as TablePaginationProps, stateQueries);
|
|
559
571
|
|
|
560
572
|
// After the pager is updated, reset allRowKeys of the current page
|
|
561
573
|
this.adapter.setAllRowKeys(handledProps.allRowKeys);
|
|
@@ -790,6 +802,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
790
802
|
const hasRowSelected = this.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
|
|
791
803
|
return (
|
|
792
804
|
<ColumnSelection
|
|
805
|
+
aria-label={`${allIsSelected ? 'Deselect' : 'Select'} all rows`}
|
|
793
806
|
disabled={disabled}
|
|
794
807
|
key={columnKey}
|
|
795
808
|
selected={allIsSelected}
|
|
@@ -806,6 +819,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
806
819
|
|
|
807
820
|
return (
|
|
808
821
|
<ColumnSelection
|
|
822
|
+
aria-label={`${selected ? 'Deselect' : 'Select'} this row`}
|
|
809
823
|
getCheckboxProps={checkboxPropsFn}
|
|
810
824
|
selected={selected}
|
|
811
825
|
onChange={(status, e) => this.toggleSelectRow(status, key, e)}
|
|
@@ -966,6 +980,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
966
980
|
/**
|
|
967
981
|
* render pagination
|
|
968
982
|
* @param {object} pagination
|
|
983
|
+
* @param {object} propRenderPagination
|
|
969
984
|
*/
|
|
970
985
|
renderPagination = (pagination: TablePaginationProps, propRenderPagination: RenderPagination) => {
|
|
971
986
|
if (!pagination) {
|
|
@@ -1359,6 +1374,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
|
|
|
1359
1374
|
<div
|
|
1360
1375
|
ref={this.rootWrapRef}
|
|
1361
1376
|
className={classnames(className, `${prefixCls}-wrapper`)}
|
|
1377
|
+
data-column-fixed={anyColumnFixed}
|
|
1362
1378
|
style={wrapStyle}
|
|
1363
1379
|
id={id}
|
|
1364
1380
|
>
|
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 = {
|
|
@@ -76,6 +76,8 @@ export { default as ScrollBar } from './ScrollBar';
|
|
|
76
76
|
export { default as TableSpan } from './TableSpan';
|
|
77
77
|
export { default as FixRenderReturnProps } from './FixRenderReturnProps';
|
|
78
78
|
export { default as WarnColumnWithoutDataIndex } from './WarnColumnWithoutDataIndex';
|
|
79
|
+
export { default as FixedColumnsChange } from './v2/FixedColumnsChange';
|
|
80
|
+
export { default as FixedZIndex } from './v2/FixedZIndex';
|
|
79
81
|
|
|
80
82
|
// empty table
|
|
81
83
|
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { Table, Avatar } from '@douyinfe/semi-ui';
|
|
3
|
+
import * as dateFns from 'date-fns';
|
|
4
|
+
|
|
5
|
+
const DAY = 24 * 60 * 60 * 1000;
|
|
6
|
+
const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';
|
|
7
|
+
|
|
8
|
+
const getData = () => {
|
|
9
|
+
const data = [];
|
|
10
|
+
for (let i = 0; i < 46; i++) {
|
|
11
|
+
const isSemiDesign = i % 2 === 0;
|
|
12
|
+
const randomNumber = (i * 1000) % 199;
|
|
13
|
+
data.push({
|
|
14
|
+
key: '' + i,
|
|
15
|
+
name: isSemiDesign ? `Semi Design 设计稿${i}.fig` : `Semi Pro 设计稿${i}.fig`,
|
|
16
|
+
owner: isSemiDesign ? '姜鹏志' : '郝宣',
|
|
17
|
+
size: randomNumber,
|
|
18
|
+
updateTime: new Date().valueOf() + randomNumber * DAY,
|
|
19
|
+
avatarBg: isSemiDesign ? 'grey' : 'red'
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const data = getData();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* fix https://github.com/DouyinFE/semi-design/issues/381
|
|
29
|
+
*/
|
|
30
|
+
App.storyName = 'fixed columns change';
|
|
31
|
+
function App() {
|
|
32
|
+
const [dataSource, setData] = useState(data);
|
|
33
|
+
const [rowKeys, setRowKeys] = useState([]);
|
|
34
|
+
|
|
35
|
+
const columns = [
|
|
36
|
+
{
|
|
37
|
+
title: '标题',
|
|
38
|
+
dataIndex: 'name',
|
|
39
|
+
width: 400,
|
|
40
|
+
render: (text, record, index) => {
|
|
41
|
+
return (
|
|
42
|
+
<div>
|
|
43
|
+
<Avatar size="small" shape="square" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>
|
|
44
|
+
{text}
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
},
|
|
48
|
+
filters: [
|
|
49
|
+
{
|
|
50
|
+
text: 'Semi Design 设计稿',
|
|
51
|
+
value: 'Semi Design 设计稿',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
text: 'Semi Pro 设计稿',
|
|
55
|
+
value: 'Semi Pro 设计稿',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
onFilter: (value, record) => record.name.includes(value),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
title: '大小',
|
|
62
|
+
dataIndex: 'size',
|
|
63
|
+
sorter: (a, b) => a.size - b.size > 0 ? 1 : -1,
|
|
64
|
+
render: (text) => `${text} KB`
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: '所有者',
|
|
68
|
+
dataIndex: 'owner',
|
|
69
|
+
render: (text, record, index) => {
|
|
70
|
+
return (
|
|
71
|
+
<div>
|
|
72
|
+
<Avatar size="small" color={record.avatarBg} style={{ marginRight: 4 }}>{typeof text === 'string' && text.slice(0, 1)}</Avatar>
|
|
73
|
+
{text}
|
|
74
|
+
</div>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
title: '更新日期',
|
|
80
|
+
dataIndex: 'updateTime',
|
|
81
|
+
sorter: (a, b) => a.updateTime - b.updateTime > 0 ? 1 : -1,
|
|
82
|
+
render: (value) => {
|
|
83
|
+
return dateFns.format(new Date(value), 'yyyy-MM-dd');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<Table
|
|
90
|
+
columns={columns}
|
|
91
|
+
dataSource={dataSource}
|
|
92
|
+
pagination={{
|
|
93
|
+
pageSize: 5,
|
|
94
|
+
}}
|
|
95
|
+
rowSelection={{
|
|
96
|
+
onChange: rowKeys => setRowKeys(rowKeys),
|
|
97
|
+
selectedRowKeys: rowKeys,
|
|
98
|
+
}}
|
|
99
|
+
scroll={{ y: 300 }}
|
|
100
|
+
/>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export default App;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Table, Tooltip, Tag } from '@douyinfe/semi-ui';
|
|
3
|
+
|
|
4
|
+
App.storyName = 'fixed z-index bug';
|
|
5
|
+
export default function App() {
|
|
6
|
+
const columns = [
|
|
7
|
+
{
|
|
8
|
+
title: 'Name',
|
|
9
|
+
dataIndex: 'name',
|
|
10
|
+
width: 150,
|
|
11
|
+
fixed: true,
|
|
12
|
+
filters: [
|
|
13
|
+
{
|
|
14
|
+
text: 'King 3',
|
|
15
|
+
value: 'King 3',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
text: 'King 4',
|
|
19
|
+
value: 'King 4',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
onFilter: (value, record) => record.name.includes(value),
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
title: 'Age',
|
|
26
|
+
dataIndex: 'age',
|
|
27
|
+
width: 150,
|
|
28
|
+
sorter: (a, b) => (a.age - b.age > 0 ? 1 : -1),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
title: 'Address',
|
|
32
|
+
width: 200,
|
|
33
|
+
dataIndex: 'address',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
title: 'Description',
|
|
37
|
+
// width: 400,
|
|
38
|
+
dataIndex: 'description',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
fixed: 'right',
|
|
42
|
+
width: 250,
|
|
43
|
+
render: (text, record) => <Tooltip content={record.description}><Tag color="green">Show Info</Tag></Tooltip>
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
let data = [];
|
|
48
|
+
|
|
49
|
+
const rowSelection = {
|
|
50
|
+
onChange: (selectedRowKeys, selectedRows) => {
|
|
51
|
+
// console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
|
|
52
|
+
},
|
|
53
|
+
getCheckboxProps: record => ({
|
|
54
|
+
disabled: record.name === 'Michael James', // Column configuration not to be checked
|
|
55
|
+
name: record.name,
|
|
56
|
+
}),
|
|
57
|
+
// fixed: true,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
for (let i = 0; i < 46; i++) {
|
|
61
|
+
let age = 40 + (Math.random() > 0.5 ? 1 : -1) * Math.ceil(i / 3);
|
|
62
|
+
let name = `Edward King ${i}`;
|
|
63
|
+
data.push({
|
|
64
|
+
key: `${ i}`,
|
|
65
|
+
name,
|
|
66
|
+
age,
|
|
67
|
+
address: `London, Park Lane no. ${i}`,
|
|
68
|
+
description: `My name is ${name}, I am ${age} years old, living in New York No. ${i + 1} Lake Park.`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const scroll = { y: 300, x: 1500 };
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<div style={{ position: 'relative', height: '100vh' }}>
|
|
76
|
+
<div style={{ height: 60, background: 'red', position: 'absolute', top: 0, left: 0, right: 0, zIndex: 2 }}>
|
|
77
|
+
Fixed Header
|
|
78
|
+
</div>
|
|
79
|
+
<Table
|
|
80
|
+
columns={columns}
|
|
81
|
+
dataSource={data}
|
|
82
|
+
scroll={scroll}
|
|
83
|
+
rowSelection={rowSelection}
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
|
+
}
|
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
|