@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
|
@@ -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
|
@@ -15,7 +15,7 @@ import TabPane from './TabPane';
|
|
|
15
15
|
import TabsContext from './tabs-context';
|
|
16
16
|
import { TabsProps, PlainTab, TabBarProps } from './interface';
|
|
17
17
|
|
|
18
|
-
const panePickKeys =
|
|
18
|
+
const panePickKeys = ['className', 'style', 'disabled', 'itemKey', 'tab', 'icon'];
|
|
19
19
|
|
|
20
20
|
export * from './interface';
|
|
21
21
|
|
|
@@ -285,7 +285,6 @@ class Tabs extends BaseComponent<TabsProps, TabsState> {
|
|
|
285
285
|
>
|
|
286
286
|
<div
|
|
287
287
|
ref={this.setContentRef}
|
|
288
|
-
role="tab-content"
|
|
289
288
|
className={tabContentCls}
|
|
290
289
|
style={{ ...contentStyle }}
|
|
291
290
|
>
|
|
@@ -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
|
package/tagInput/index.tsx
CHANGED
|
@@ -55,8 +55,9 @@ export interface TagInputProps {
|
|
|
55
55
|
style?: React.CSSProperties;
|
|
56
56
|
suffix?: React.ReactNode;
|
|
57
57
|
validateStatus?: ValidateStatus;
|
|
58
|
-
value?: string[];
|
|
58
|
+
value?: string[] | undefined;
|
|
59
59
|
autoFocus?: boolean;
|
|
60
|
+
'aria-label'?: string;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
export interface TagInputState {
|
|
@@ -102,7 +103,8 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
102
103
|
size: PropTypes.oneOf(strings.SIZE_SET),
|
|
103
104
|
validateStatus: PropTypes.oneOf(strings.STATUS),
|
|
104
105
|
prefix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
|
|
105
|
-
suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.node])
|
|
106
|
+
suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
|
|
107
|
+
'aria-label': PropTypes.string,
|
|
106
108
|
};
|
|
107
109
|
|
|
108
110
|
static defaultProps = {
|
|
@@ -140,12 +142,18 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
static getDerivedStateFromProps(nextProps: TagInputProps, prevState: TagInputState) {
|
|
143
|
-
const {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
const { value, inputValue } = nextProps;
|
|
146
|
+
const { tagsArray: prevTagsArray } = prevState;
|
|
147
|
+
let tagsArray: string[];
|
|
148
|
+
if (isArray(value)) {
|
|
149
|
+
tagsArray = value;
|
|
150
|
+
} else if ('value' in nextProps && !value) {
|
|
151
|
+
tagsArray = [];
|
|
152
|
+
} else {
|
|
153
|
+
tagsArray = prevTagsArray;
|
|
154
|
+
}
|
|
147
155
|
return {
|
|
148
|
-
tagsArray
|
|
156
|
+
tagsArray,
|
|
149
157
|
inputValue: isString(inputValue) ? inputValue : prevState.inputValue
|
|
150
158
|
};
|
|
151
159
|
}
|
|
@@ -216,6 +224,10 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
216
224
|
this.foundation.handleClearBtn(e);
|
|
217
225
|
};
|
|
218
226
|
|
|
227
|
+
handleClearEnterPress = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
|
228
|
+
this.foundation.handleClearEnterPress(e);
|
|
229
|
+
};
|
|
230
|
+
|
|
219
231
|
handleTagClose = (idx: number) => {
|
|
220
232
|
this.foundation.handleTagClose(idx);
|
|
221
233
|
};
|
|
@@ -236,7 +248,14 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
236
248
|
});
|
|
237
249
|
if (showClear) {
|
|
238
250
|
return (
|
|
239
|
-
<div
|
|
251
|
+
<div
|
|
252
|
+
role="button"
|
|
253
|
+
tabIndex={0}
|
|
254
|
+
aria-label="Clear TagInput value"
|
|
255
|
+
className={clearCls}
|
|
256
|
+
onClick={e => this.handleClearBtn(e)}
|
|
257
|
+
onKeyPress={e => this.handleClearEnterPress(e)}
|
|
258
|
+
>
|
|
240
259
|
<IconClear />
|
|
241
260
|
</div>
|
|
242
261
|
);
|
|
@@ -398,6 +417,9 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
398
417
|
<div
|
|
399
418
|
style={style}
|
|
400
419
|
className={tagInputCls}
|
|
420
|
+
aria-disabled={disabled}
|
|
421
|
+
aria-label={this.props['aria-label']}
|
|
422
|
+
aria-invalid={validateStatus === 'error'}
|
|
401
423
|
onMouseEnter={e => {
|
|
402
424
|
this.handleInputMouseEnter(e);
|
|
403
425
|
}}
|
|
@@ -409,6 +431,7 @@ class TagInput extends BaseComponent<TagInputProps, TagInputState> {
|
|
|
409
431
|
<div className={wrapperCls}>
|
|
410
432
|
{this.renderTags()}
|
|
411
433
|
<Input
|
|
434
|
+
aria-label='input value'
|
|
412
435
|
ref={this.inputRef as any}
|
|
413
436
|
className={inputCls}
|
|
414
437
|
disabled={disabled}
|
|
@@ -36,6 +36,11 @@ export type BaseValueType = string | number | Date;
|
|
|
36
36
|
export type Type = 'time' | 'timeRange';
|
|
37
37
|
|
|
38
38
|
export type TimePickerProps = {
|
|
39
|
+
'aria-describedby'?: React.AriaAttributes['aria-describedby'];
|
|
40
|
+
'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
|
|
41
|
+
'aria-invalid'?: React.AriaAttributes['aria-invalid'];
|
|
42
|
+
'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
|
|
43
|
+
'aria-required'?: React.AriaAttributes['aria-required'];
|
|
39
44
|
autoAdjustOverflow?: boolean;
|
|
40
45
|
autoFocus?: boolean; // TODO: autoFocus did not take effect
|
|
41
46
|
className?: string;
|
|
@@ -56,6 +61,7 @@ export type TimePickerProps = {
|
|
|
56
61
|
inputReadOnly?: boolean;
|
|
57
62
|
inputStyle?: React.CSSProperties;
|
|
58
63
|
insetLabel?: React.ReactNode;
|
|
64
|
+
insetLabelId?: string;
|
|
59
65
|
locale?: Locale['TimePicker'];
|
|
60
66
|
localeCode?: string;
|
|
61
67
|
minuteStep?: number;
|
|
@@ -100,10 +106,14 @@ export interface TimePickerState {
|
|
|
100
106
|
invalid: boolean;
|
|
101
107
|
}
|
|
102
108
|
|
|
103
|
-
|
|
104
109
|
export default class TimePicker extends BaseComponent<TimePickerProps, TimePickerState> {
|
|
105
110
|
static contextType = ConfigContext;
|
|
106
111
|
static propTypes = {
|
|
112
|
+
'aria-labelledby': PropTypes.string,
|
|
113
|
+
'aria-invalid': PropTypes.bool,
|
|
114
|
+
'aria-errormessage': PropTypes.string,
|
|
115
|
+
'aria-describedby': PropTypes.string,
|
|
116
|
+
'aria-required': PropTypes.bool,
|
|
107
117
|
prefixCls: PropTypes.string,
|
|
108
118
|
clearText: PropTypes.string,
|
|
109
119
|
value: TimeShape,
|
|
@@ -142,6 +152,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
|
|
|
142
152
|
dateFnsLocale: PropTypes.object,
|
|
143
153
|
zIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
144
154
|
insetLabel: PropTypes.node,
|
|
155
|
+
insetLabelId: PropTypes.string,
|
|
145
156
|
validateStatus: PropTypes.oneOf(strings.STATUS),
|
|
146
157
|
type: PropTypes.oneOf<TimePickerProps['type']>(strings.TYPES),
|
|
147
158
|
rangeSeparator: PropTypes.string,
|
|
@@ -429,6 +440,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
|
|
|
429
440
|
zIndex,
|
|
430
441
|
getPopupContainer,
|
|
431
442
|
insetLabel,
|
|
443
|
+
insetLabelId,
|
|
432
444
|
inputStyle,
|
|
433
445
|
showClear,
|
|
434
446
|
panelHeader,
|
|
@@ -473,6 +485,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
|
|
|
473
485
|
value: inputValue,
|
|
474
486
|
onFocus: this.handleFocus,
|
|
475
487
|
insetLabel,
|
|
488
|
+
insetLabelId,
|
|
476
489
|
format,
|
|
477
490
|
locale,
|
|
478
491
|
localeCode,
|
|
@@ -10,7 +10,7 @@ export default {
|
|
|
10
10
|
|
|
11
11
|
export const DefaultTimeline = () => (
|
|
12
12
|
<div>
|
|
13
|
-
<Timeline>
|
|
13
|
+
<Timeline aria-label="xx事故处理过程时间线">
|
|
14
14
|
<Timeline.Item time="2015-09-01">创建服务现场</Timeline.Item>
|
|
15
15
|
<Timeline.Item time="2015-09-01">初步排除网络异常</Timeline.Item>
|
|
16
16
|
<Timeline.Item time="2015-09-01">技术测试异常</Timeline.Item>
|
package/timeline/index.tsx
CHANGED
|
@@ -12,7 +12,7 @@ export interface Data extends TimelineItemProps {
|
|
|
12
12
|
content: React.ReactNode;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export interface TimelineProps {
|
|
15
|
+
export interface TimelineProps extends Pick<React.AriaAttributes, 'aria-label'> {
|
|
16
16
|
mode?: 'left' | 'right' | 'center' | 'alternate';
|
|
17
17
|
className?: string;
|
|
18
18
|
style?: React.CSSProperties;
|
|
@@ -86,7 +86,7 @@ class Timeline extends PureComponent<TimelineProps> {
|
|
|
86
86
|
const items = childrenList || this.addClassName(children);
|
|
87
87
|
|
|
88
88
|
return (
|
|
89
|
-
<ul style={style} className={classString}>
|
|
89
|
+
<ul aria-label={this.props['aria-label']} style={style} className={classString}>
|
|
90
90
|
{items}
|
|
91
91
|
</ul>
|
|
92
92
|
);
|
package/timeline/item.tsx
CHANGED
|
@@ -63,9 +63,10 @@ export default class Item extends PureComponent<TimelineItemProps> {
|
|
|
63
63
|
const dotStyle = color ? { style: { backgroundColor: color } } : null;
|
|
64
64
|
return (
|
|
65
65
|
<li className={itemCls} style={style} onClick={onClick}>
|
|
66
|
-
<div className={`${prefixCls}-tail`} />
|
|
66
|
+
<div className={`${prefixCls}-tail`} aria-hidden />
|
|
67
67
|
<div
|
|
68
68
|
className={dotCls}
|
|
69
|
+
aria-hidden
|
|
69
70
|
{...dotStyle}
|
|
70
71
|
>
|
|
71
72
|
{dot}
|
package/toast/toast.tsx
CHANGED
|
@@ -118,6 +118,8 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
|
|
|
118
118
|
const btnSize = 'small';
|
|
119
119
|
return (
|
|
120
120
|
<div
|
|
121
|
+
role='alert'
|
|
122
|
+
aria-label={`${type ? type : 'default'} type`}
|
|
121
123
|
className={toastCls}
|
|
122
124
|
style={style}
|
|
123
125
|
onMouseEnter={this.clearCloseTimer}
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
const TriangleArrow: React.FC<{ [key: string]: any }> = props => {
|
|
4
4
|
const { className, style, ...restProps } = props;
|
|
5
5
|
return (
|
|
6
|
-
<svg className={className} style={style} {...restProps} width="24" height="7" viewBox="0 0 24 7" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
6
|
+
<svg aria-hidden className={className} style={style} {...restProps} width="24" height="7" viewBox="0 0 24 7" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
7
7
|
<path d="M24 0V1C20 1 18.5 2 16.5 4C14.5 6 14 7 12 7C10 7 9.5 6 7.5 4C5.5 2 4 1 0 1V0H24Z" />
|
|
8
8
|
</svg>
|
|
9
9
|
);
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
const TriangleArrowVertical: React.FC<{ [key: string]: any }> = props => {
|
|
4
4
|
const { className, style, ...restProps } = props;
|
|
5
5
|
return (
|
|
6
|
-
<svg className={className} style={style} {...restProps} width="7" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
|
|
6
|
+
<svg aria-hidden className={className} style={style} {...restProps} width="7" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
|
|
7
7
|
<path d="M0 0L1 0C1 4, 2 5.5, 4 7.5S7,10 7,12S6 14.5, 4 16.5S1,20 1,24L0 24L0 0z" />
|
|
8
8
|
</svg>
|
|
9
9
|
);
|