@mui/lab 5.0.0-alpha.107 → 5.0.0-alpha.109
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/AdapterDateFns/AdapterDateFns.js +2 -4
- package/AdapterDayjs/AdapterDayjs.js +2 -4
- package/AdapterLuxon/AdapterLuxon.js +2 -4
- package/AdapterMoment/AdapterMoment.js +2 -4
- package/Alert/Alert.js +1 -2
- package/AlertTitle/AlertTitle.js +1 -2
- package/Autocomplete/Autocomplete.js +1 -2
- package/AvatarGroup/AvatarGroup.js +1 -2
- package/CHANGELOG.md +132 -2
- package/CalendarPicker/CalendarPicker.js +0 -2
- package/CalendarPickerSkeleton/CalendarPickerSkeleton.js +0 -2
- package/ClockPicker/ClockPicker.js +0 -2
- package/DatePicker/DatePicker.js +0 -2
- package/DateRangePicker/DateRangePicker.js +0 -2
- package/DateRangePickerDay/DateRangePickerDay.js +0 -2
- package/DateTimePicker/DateTimePicker.js +0 -2
- package/DesktopDatePicker/DesktopDatePicker.js +0 -2
- package/DesktopDateRangePicker/DesktopDateRangePicker.js +0 -2
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +0 -2
- package/DesktopTimePicker/DesktopTimePicker.js +0 -2
- package/LoadingButton/LoadingButton.js +13 -34
- package/LocalizationProvider/LocalizationProvider.js +0 -2
- package/Masonry/Masonry.js +27 -68
- package/MobileDatePicker/MobileDatePicker.js +0 -2
- package/MobileDateRangePicker/MobileDateRangePicker.js +0 -2
- package/MobileDateTimePicker/MobileDateTimePicker.js +0 -2
- package/MobileTimePicker/MobileTimePicker.js +0 -2
- package/MonthPicker/MonthPicker.js +0 -2
- package/Pagination/Pagination.js +1 -2
- package/PaginationItem/PaginationItem.js +1 -2
- package/PickersDay/PickersDay.js +0 -2
- package/Rating/Rating.js +1 -2
- package/Skeleton/Skeleton.js +1 -2
- package/SpeedDial/SpeedDial.js +1 -2
- package/SpeedDialAction/SpeedDialAction.js +1 -2
- package/SpeedDialIcon/SpeedDialIcon.js +1 -2
- package/StaticDatePicker/StaticDatePicker.js +0 -2
- package/StaticDateRangePicker/StaticDateRangePicker.js +0 -2
- package/StaticDateTimePicker/StaticDateTimePicker.js +0 -2
- package/StaticTimePicker/StaticTimePicker.js +0 -2
- package/TabContext/TabContext.js +3 -14
- package/TabList/TabList.js +4 -11
- package/TabPanel/TabPanel.js +6 -20
- package/TimePicker/TimePicker.js +0 -2
- package/Timeline/Timeline.js +9 -20
- package/Timeline/TimelineContext.js +1 -3
- package/TimelineConnector/TimelineConnector.js +4 -14
- package/TimelineContent/TimelineContent.js +4 -16
- package/TimelineDot/TimelineDot.js +8 -25
- package/TimelineItem/TimelineItem.js +5 -18
- package/TimelineOppositeContent/TimelineOppositeContent.js +4 -16
- package/TimelineSeparator/TimelineSeparator.js +4 -14
- package/ToggleButton/ToggleButton.js +1 -2
- package/ToggleButtonGroup/ToggleButtonGroup.js +1 -2
- package/TreeItem/TreeItem.js +19 -58
- package/TreeItem/TreeItemContent.js +12 -28
- package/TreeItem/useTreeItem.js +2 -8
- package/TreeView/TreeView.js +53 -197
- package/TreeView/TreeViewContext.js +1 -3
- package/TreeView/descendants.js +19 -31
- package/YearPicker/YearPicker.js +1 -3
- package/index.js +3 -2
- package/internal/svg-icons/ArrowDropDown.js +1 -1
- package/internal/svg-icons/ArrowLeft.js +1 -1
- package/internal/svg-icons/ArrowRight.js +1 -1
- package/internal/svg-icons/Calendar.js +1 -1
- package/internal/svg-icons/Clock.js +1 -1
- package/internal/svg-icons/DateRange.js +1 -1
- package/internal/svg-icons/Pen.js +1 -1
- package/internal/svg-icons/Time.js +1 -1
- package/legacy/AdapterDateFns/AdapterDateFns.js +2 -5
- package/legacy/AdapterDayjs/AdapterDayjs.js +2 -5
- package/legacy/AdapterLuxon/AdapterLuxon.js +2 -5
- package/legacy/AdapterMoment/AdapterMoment.js +2 -5
- package/legacy/Alert/Alert.js +1 -2
- package/legacy/AlertTitle/AlertTitle.js +1 -2
- package/legacy/Autocomplete/Autocomplete.js +1 -2
- package/legacy/AvatarGroup/AvatarGroup.js +1 -2
- package/legacy/CalendarPicker/CalendarPicker.js +0 -2
- package/legacy/CalendarPickerSkeleton/CalendarPickerSkeleton.js +0 -2
- package/legacy/ClockPicker/ClockPicker.js +0 -2
- package/legacy/DatePicker/DatePicker.js +0 -2
- package/legacy/DateRangePicker/DateRangePicker.js +0 -2
- package/legacy/DateRangePickerDay/DateRangePickerDay.js +0 -2
- package/legacy/DateTimePicker/DateTimePicker.js +0 -2
- package/legacy/DesktopDatePicker/DesktopDatePicker.js +0 -2
- package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +0 -2
- package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +0 -2
- package/legacy/DesktopTimePicker/DesktopTimePicker.js +0 -2
- package/legacy/LoadingButton/LoadingButton.js +19 -40
- package/legacy/LocalizationProvider/LocalizationProvider.js +0 -2
- package/legacy/Masonry/Masonry.js +33 -77
- package/legacy/MobileDatePicker/MobileDatePicker.js +0 -2
- package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +0 -2
- package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +0 -2
- package/legacy/MobileTimePicker/MobileTimePicker.js +0 -2
- package/legacy/MonthPicker/MonthPicker.js +0 -2
- package/legacy/Pagination/Pagination.js +1 -2
- package/legacy/PaginationItem/PaginationItem.js +1 -2
- package/legacy/PickersDay/PickersDay.js +0 -2
- package/legacy/Rating/Rating.js +1 -2
- package/legacy/Skeleton/Skeleton.js +1 -2
- package/legacy/SpeedDial/SpeedDial.js +1 -2
- package/legacy/SpeedDialAction/SpeedDialAction.js +1 -2
- package/legacy/SpeedDialIcon/SpeedDialIcon.js +1 -2
- package/legacy/StaticDatePicker/StaticDatePicker.js +0 -2
- package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +0 -2
- package/legacy/StaticDateTimePicker/StaticDateTimePicker.js +0 -2
- package/legacy/StaticTimePicker/StaticTimePicker.js +0 -2
- package/legacy/TabContext/TabContext.js +6 -18
- package/legacy/TabList/TabList.js +2 -9
- package/legacy/TabPanel/TabPanel.js +4 -18
- package/legacy/TimePicker/TimePicker.js +0 -2
- package/legacy/Timeline/Timeline.js +9 -20
- package/legacy/Timeline/TimelineContext.js +1 -3
- package/legacy/TimelineConnector/TimelineConnector.js +2 -12
- package/legacy/TimelineContent/TimelineContent.js +4 -16
- package/legacy/TimelineDot/TimelineDot.js +11 -28
- package/legacy/TimelineItem/TimelineItem.js +6 -21
- package/legacy/TimelineOppositeContent/TimelineOppositeContent.js +4 -16
- package/legacy/TimelineSeparator/TimelineSeparator.js +2 -12
- package/legacy/ToggleButton/ToggleButton.js +1 -2
- package/legacy/ToggleButtonGroup/ToggleButtonGroup.js +1 -2
- package/legacy/TreeItem/TreeItem.js +37 -81
- package/legacy/TreeItem/TreeItemContent.js +17 -34
- package/legacy/TreeItem/useTreeItem.js +12 -19
- package/legacy/TreeView/TreeView.js +85 -238
- package/legacy/TreeView/TreeViewContext.js +1 -3
- package/legacy/TreeView/descendants.js +26 -44
- package/legacy/YearPicker/YearPicker.js +1 -3
- package/legacy/index.js +3 -2
- package/legacy/internal/svg-icons/ArrowDropDown.js +1 -1
- package/legacy/internal/svg-icons/ArrowLeft.js +1 -1
- package/legacy/internal/svg-icons/ArrowRight.js +1 -1
- package/legacy/internal/svg-icons/Calendar.js +1 -1
- package/legacy/internal/svg-icons/Clock.js +1 -1
- package/legacy/internal/svg-icons/DateRange.js +1 -1
- package/legacy/internal/svg-icons/Pen.js +1 -1
- package/legacy/internal/svg-icons/Time.js +1 -1
- package/modern/AdapterDateFns/AdapterDateFns.js +2 -4
- package/modern/AdapterDayjs/AdapterDayjs.js +2 -4
- package/modern/AdapterLuxon/AdapterLuxon.js +2 -4
- package/modern/AdapterMoment/AdapterMoment.js +2 -4
- package/modern/Alert/Alert.js +1 -2
- package/modern/AlertTitle/AlertTitle.js +1 -2
- package/modern/Autocomplete/Autocomplete.js +1 -2
- package/modern/AvatarGroup/AvatarGroup.js +1 -2
- package/modern/CalendarPicker/CalendarPicker.js +0 -2
- package/modern/CalendarPickerSkeleton/CalendarPickerSkeleton.js +0 -2
- package/modern/ClockPicker/ClockPicker.js +0 -2
- package/modern/DatePicker/DatePicker.js +0 -2
- package/modern/DateRangePicker/DateRangePicker.js +0 -2
- package/modern/DateRangePickerDay/DateRangePickerDay.js +0 -2
- package/modern/DateTimePicker/DateTimePicker.js +0 -2
- package/modern/DesktopDatePicker/DesktopDatePicker.js +0 -2
- package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +0 -2
- package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +0 -2
- package/modern/DesktopTimePicker/DesktopTimePicker.js +0 -2
- package/modern/LoadingButton/LoadingButton.js +13 -35
- package/modern/LocalizationProvider/LocalizationProvider.js +0 -2
- package/modern/Masonry/Masonry.js +27 -68
- package/modern/MobileDatePicker/MobileDatePicker.js +0 -2
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +0 -2
- package/modern/MobileDateTimePicker/MobileDateTimePicker.js +0 -2
- package/modern/MobileTimePicker/MobileTimePicker.js +0 -2
- package/modern/MonthPicker/MonthPicker.js +0 -2
- package/modern/Pagination/Pagination.js +1 -2
- package/modern/PaginationItem/PaginationItem.js +1 -2
- package/modern/PickersDay/PickersDay.js +0 -2
- package/modern/Rating/Rating.js +1 -2
- package/modern/Skeleton/Skeleton.js +1 -2
- package/modern/SpeedDial/SpeedDial.js +1 -2
- package/modern/SpeedDialAction/SpeedDialAction.js +1 -2
- package/modern/SpeedDialIcon/SpeedDialIcon.js +1 -2
- package/modern/StaticDatePicker/StaticDatePicker.js +0 -2
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +0 -2
- package/modern/StaticDateTimePicker/StaticDateTimePicker.js +0 -2
- package/modern/StaticTimePicker/StaticTimePicker.js +0 -2
- package/modern/TabContext/TabContext.js +3 -14
- package/modern/TabList/TabList.js +4 -11
- package/modern/TabPanel/TabPanel.js +6 -20
- package/modern/TimePicker/TimePicker.js +0 -2
- package/modern/Timeline/Timeline.js +9 -20
- package/modern/Timeline/TimelineContext.js +1 -3
- package/modern/TimelineConnector/TimelineConnector.js +4 -14
- package/modern/TimelineContent/TimelineContent.js +4 -16
- package/modern/TimelineDot/TimelineDot.js +8 -25
- package/modern/TimelineItem/TimelineItem.js +5 -18
- package/modern/TimelineOppositeContent/TimelineOppositeContent.js +4 -16
- package/modern/TimelineSeparator/TimelineSeparator.js +4 -14
- package/modern/ToggleButton/ToggleButton.js +1 -2
- package/modern/ToggleButtonGroup/ToggleButtonGroup.js +1 -2
- package/modern/TreeItem/TreeItem.js +19 -58
- package/modern/TreeItem/TreeItemContent.js +12 -28
- package/modern/TreeItem/useTreeItem.js +2 -8
- package/modern/TreeView/TreeView.js +53 -197
- package/modern/TreeView/TreeViewContext.js +1 -3
- package/modern/TreeView/descendants.js +19 -31
- package/modern/YearPicker/YearPicker.js +1 -3
- package/modern/index.js +3 -2
- package/modern/internal/svg-icons/ArrowDropDown.js +1 -1
- package/modern/internal/svg-icons/ArrowLeft.js +1 -1
- package/modern/internal/svg-icons/ArrowRight.js +1 -1
- package/modern/internal/svg-icons/Calendar.js +1 -1
- package/modern/internal/svg-icons/Clock.js +1 -1
- package/modern/internal/svg-icons/DateRange.js +1 -1
- package/modern/internal/svg-icons/Pen.js +1 -1
- package/modern/internal/svg-icons/Time.js +1 -1
- package/node/AdapterDateFns/AdapterDateFns.js +2 -5
- package/node/AdapterDateFns/index.js +0 -2
- package/node/AdapterDayjs/AdapterDayjs.js +2 -5
- package/node/AdapterDayjs/index.js +0 -2
- package/node/AdapterLuxon/AdapterLuxon.js +2 -5
- package/node/AdapterLuxon/index.js +0 -2
- package/node/AdapterMoment/AdapterMoment.js +2 -5
- package/node/AdapterMoment/index.js +0 -2
- package/node/Alert/Alert.js +1 -11
- package/node/Alert/index.js +0 -2
- package/node/AlertTitle/AlertTitle.js +1 -11
- package/node/AlertTitle/index.js +0 -2
- package/node/Autocomplete/Autocomplete.js +1 -11
- package/node/Autocomplete/index.js +0 -2
- package/node/AvatarGroup/AvatarGroup.js +1 -11
- package/node/AvatarGroup/index.js +0 -2
- package/node/CalendarPicker/CalendarPicker.js +1 -6
- package/node/CalendarPicker/index.js +0 -4
- package/node/CalendarPickerSkeleton/CalendarPickerSkeleton.js +1 -8
- package/node/CalendarPickerSkeleton/index.js +0 -4
- package/node/ClockPicker/ClockPicker.js +1 -6
- package/node/ClockPicker/index.js +0 -4
- package/node/DatePicker/DatePicker.js +1 -6
- package/node/DatePicker/index.js +0 -4
- package/node/DateRangePicker/DateRangePicker.js +1 -6
- package/node/DateRangePicker/index.js +0 -4
- package/node/DateRangePickerDay/DateRangePickerDay.js +1 -8
- package/node/DateRangePickerDay/index.js +0 -4
- package/node/DateTimePicker/DateTimePicker.js +1 -6
- package/node/DateTimePicker/index.js +0 -4
- package/node/DesktopDatePicker/DesktopDatePicker.js +1 -6
- package/node/DesktopDatePicker/index.js +0 -4
- package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +1 -6
- package/node/DesktopDateRangePicker/index.js +0 -4
- package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -6
- package/node/DesktopDateTimePicker/index.js +0 -4
- package/node/DesktopTimePicker/DesktopTimePicker.js +1 -6
- package/node/DesktopTimePicker/index.js +0 -4
- package/node/LoadingButton/LoadingButton.js +13 -46
- package/node/LoadingButton/index.js +0 -6
- package/node/LoadingButton/loadingButtonClasses.js +0 -5
- package/node/LocalizationProvider/LocalizationProvider.js +0 -6
- package/node/LocalizationProvider/index.js +0 -4
- package/node/Masonry/Masonry.js +27 -83
- package/node/Masonry/index.js +0 -6
- package/node/Masonry/masonryClasses.js +0 -5
- package/node/MobileDatePicker/MobileDatePicker.js +1 -6
- package/node/MobileDatePicker/index.js +0 -4
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +1 -6
- package/node/MobileDateRangePicker/index.js +0 -4
- package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -6
- package/node/MobileDateTimePicker/index.js +0 -4
- package/node/MobileTimePicker/MobileTimePicker.js +1 -6
- package/node/MobileTimePicker/index.js +0 -4
- package/node/MonthPicker/MonthPicker.js +1 -8
- package/node/MonthPicker/index.js +0 -4
- package/node/Pagination/Pagination.js +1 -11
- package/node/Pagination/index.js +0 -3
- package/node/Pagination/usePagination.js +0 -2
- package/node/PaginationItem/PaginationItem.js +1 -11
- package/node/PaginationItem/index.js +0 -2
- package/node/PickersDay/PickersDay.js +1 -8
- package/node/PickersDay/index.js +0 -4
- package/node/Rating/Rating.js +1 -11
- package/node/Rating/index.js +0 -2
- package/node/Skeleton/Skeleton.js +1 -11
- package/node/Skeleton/index.js +0 -2
- package/node/SpeedDial/SpeedDial.js +1 -11
- package/node/SpeedDial/index.js +0 -2
- package/node/SpeedDialAction/SpeedDialAction.js +1 -11
- package/node/SpeedDialAction/index.js +0 -2
- package/node/SpeedDialIcon/SpeedDialIcon.js +1 -11
- package/node/SpeedDialIcon/index.js +0 -2
- package/node/StaticDatePicker/StaticDatePicker.js +1 -6
- package/node/StaticDatePicker/index.js +0 -4
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +1 -6
- package/node/StaticDateRangePicker/index.js +0 -4
- package/node/StaticDateTimePicker/StaticDateTimePicker.js +1 -6
- package/node/StaticDateTimePicker/index.js +0 -4
- package/node/StaticTimePicker/StaticTimePicker.js +1 -6
- package/node/StaticTimePicker/index.js +0 -4
- package/node/TabContext/TabContext.js +2 -23
- package/node/TabContext/index.js +0 -4
- package/node/TabList/TabList.js +4 -22
- package/node/TabList/index.js +0 -2
- package/node/TabPanel/TabPanel.js +6 -31
- package/node/TabPanel/index.js +0 -6
- package/node/TabPanel/tabPanelClasses.js +0 -5
- package/node/TimePicker/TimePicker.js +1 -6
- package/node/TimePicker/index.js +0 -4
- package/node/Timeline/Timeline.js +9 -32
- package/node/Timeline/TimelineContext.js +0 -6
- package/node/Timeline/index.js +0 -6
- package/node/Timeline/timelineClasses.js +0 -5
- package/node/TimelineConnector/TimelineConnector.js +4 -25
- package/node/TimelineConnector/index.js +0 -6
- package/node/TimelineConnector/timelineConnectorClasses.js +0 -5
- package/node/TimelineContent/TimelineContent.js +4 -28
- package/node/TimelineContent/index.js +0 -6
- package/node/TimelineContent/timelineContentClasses.js +0 -5
- package/node/TimelineDot/TimelineDot.js +8 -36
- package/node/TimelineDot/index.js +0 -6
- package/node/TimelineDot/timelineDotClasses.js +0 -5
- package/node/TimelineItem/TimelineItem.js +5 -31
- package/node/TimelineItem/index.js +0 -6
- package/node/TimelineItem/timelineItemClasses.js +0 -5
- package/node/TimelineOppositeContent/TimelineOppositeContent.js +4 -28
- package/node/TimelineOppositeContent/index.js +0 -6
- package/node/TimelineOppositeContent/timelineOppositeContentClasses.js +0 -5
- package/node/TimelineSeparator/TimelineSeparator.js +4 -25
- package/node/TimelineSeparator/index.js +0 -6
- package/node/TimelineSeparator/timelineSeparatorClasses.js +0 -5
- package/node/ToggleButton/ToggleButton.js +1 -11
- package/node/ToggleButton/index.js +0 -2
- package/node/ToggleButtonGroup/ToggleButtonGroup.js +1 -11
- package/node/ToggleButtonGroup/index.js +0 -2
- package/node/TreeItem/TreeItem.js +19 -73
- package/node/TreeItem/TreeItemContent.js +11 -38
- package/node/TreeItem/index.js +0 -7
- package/node/TreeItem/treeItemClasses.js +0 -5
- package/node/TreeItem/useTreeItem.js +2 -14
- package/node/TreeView/TreeView.js +53 -207
- package/node/TreeView/TreeViewContext.js +0 -6
- package/node/TreeView/descendants.js +18 -40
- package/node/TreeView/index.js +0 -6
- package/node/TreeView/treeViewClasses.js +0 -5
- package/node/YearPicker/YearPicker.js +1 -6
- package/node/YearPicker/index.js +0 -4
- package/node/index.js +1 -107
- package/node/internal/svg-icons/ArrowDropDown.js +0 -7
- package/node/internal/svg-icons/ArrowLeft.js +0 -7
- package/node/internal/svg-icons/ArrowRight.js +0 -7
- package/node/internal/svg-icons/Calendar.js +0 -7
- package/node/internal/svg-icons/Clock.js +0 -7
- package/node/internal/svg-icons/DateRange.js +0 -7
- package/node/internal/svg-icons/Pen.js +0 -7
- package/node/internal/svg-icons/Time.js +0 -7
- package/node/useAutocomplete/index.js +0 -1
- package/package.json +6 -6
package/TreeView/TreeView.js
CHANGED
|
@@ -11,7 +11,6 @@ import TreeViewContext from './TreeViewContext';
|
|
|
11
11
|
import { DescendantProvider } from './descendants';
|
|
12
12
|
import { getTreeViewUtilityClass } from './treeViewClasses';
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
-
|
|
15
14
|
const useUtilityClasses = ownerState => {
|
|
16
15
|
const {
|
|
17
16
|
classes
|
|
@@ -21,7 +20,6 @@ const useUtilityClasses = ownerState => {
|
|
|
21
20
|
};
|
|
22
21
|
return composeClasses(slots, getTreeViewUtilityClass, classes);
|
|
23
22
|
};
|
|
24
|
-
|
|
25
23
|
const TreeViewRoot = styled('ul', {
|
|
26
24
|
name: 'MuiTreeView',
|
|
27
25
|
slot: 'Root',
|
|
@@ -32,25 +30,20 @@ const TreeViewRoot = styled('ul', {
|
|
|
32
30
|
listStyle: 'none',
|
|
33
31
|
outline: 0
|
|
34
32
|
});
|
|
35
|
-
|
|
36
33
|
function isPrintableCharacter(string) {
|
|
37
34
|
return string && string.length === 1 && string.match(/\S/);
|
|
38
35
|
}
|
|
39
|
-
|
|
40
36
|
function findNextFirstChar(firstChars, startIndex, char) {
|
|
41
37
|
for (let i = startIndex; i < firstChars.length; i += 1) {
|
|
42
38
|
if (char === firstChars[i]) {
|
|
43
39
|
return i;
|
|
44
40
|
}
|
|
45
41
|
}
|
|
46
|
-
|
|
47
42
|
return -1;
|
|
48
43
|
}
|
|
49
|
-
|
|
50
44
|
function noopSelection() {
|
|
51
45
|
return false;
|
|
52
46
|
}
|
|
53
|
-
|
|
54
47
|
const defaultDefaultExpanded = [];
|
|
55
48
|
const defaultDefaultSelected = [];
|
|
56
49
|
const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
@@ -58,34 +51,31 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
58
51
|
props: inProps,
|
|
59
52
|
name: 'MuiTreeView'
|
|
60
53
|
});
|
|
61
|
-
|
|
62
54
|
const {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
55
|
+
children,
|
|
56
|
+
className,
|
|
57
|
+
defaultCollapseIcon,
|
|
58
|
+
defaultEndIcon,
|
|
59
|
+
defaultExpanded = defaultDefaultExpanded,
|
|
60
|
+
defaultExpandIcon,
|
|
61
|
+
defaultParentIcon,
|
|
62
|
+
defaultSelected = defaultDefaultSelected,
|
|
63
|
+
disabledItemsFocusable = false,
|
|
64
|
+
disableSelection = false,
|
|
65
|
+
expanded: expandedProp,
|
|
66
|
+
id: idProp,
|
|
67
|
+
multiSelect = false,
|
|
68
|
+
onBlur,
|
|
69
|
+
onFocus,
|
|
70
|
+
onKeyDown,
|
|
71
|
+
onNodeFocus,
|
|
72
|
+
onNodeSelect,
|
|
73
|
+
onNodeToggle,
|
|
74
|
+
selected: selectedProp
|
|
75
|
+
} = props,
|
|
76
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
86
77
|
const theme = useTheme();
|
|
87
78
|
const isRtl = theme.direction === 'rtl';
|
|
88
|
-
|
|
89
79
|
const ownerState = _extends({}, props, {
|
|
90
80
|
defaultExpanded,
|
|
91
81
|
defaultSelected,
|
|
@@ -93,7 +83,6 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
93
83
|
disableSelection,
|
|
94
84
|
multiSelect
|
|
95
85
|
});
|
|
96
|
-
|
|
97
86
|
const classes = useUtilityClasses(ownerState);
|
|
98
87
|
const treeId = useId(idProp);
|
|
99
88
|
const treeRef = React.useRef(null);
|
|
@@ -113,115 +102,95 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
113
102
|
name: 'TreeView',
|
|
114
103
|
state: 'selected'
|
|
115
104
|
});
|
|
105
|
+
|
|
116
106
|
/*
|
|
117
107
|
* Status Helpers
|
|
118
108
|
*/
|
|
119
|
-
|
|
120
109
|
const isExpanded = React.useCallback(id => Array.isArray(expanded) ? expanded.indexOf(id) !== -1 : false, [expanded]);
|
|
121
110
|
const isExpandable = React.useCallback(id => nodeMap.current[id] && nodeMap.current[id].expandable, []);
|
|
122
111
|
const isSelected = React.useCallback(id => Array.isArray(selected) ? selected.indexOf(id) !== -1 : selected === id, [selected]);
|
|
123
112
|
const isDisabled = React.useCallback(id => {
|
|
124
|
-
let node = nodeMap.current[id];
|
|
113
|
+
let node = nodeMap.current[id];
|
|
125
114
|
|
|
115
|
+
// This can be called before the node has been added to the node map.
|
|
126
116
|
if (!node) {
|
|
127
117
|
return false;
|
|
128
118
|
}
|
|
129
|
-
|
|
130
119
|
if (node.disabled) {
|
|
131
120
|
return true;
|
|
132
121
|
}
|
|
133
|
-
|
|
134
122
|
while (node.parentId != null) {
|
|
135
123
|
node = nodeMap.current[node.parentId];
|
|
136
|
-
|
|
137
124
|
if (node.disabled) {
|
|
138
125
|
return true;
|
|
139
126
|
}
|
|
140
127
|
}
|
|
141
|
-
|
|
142
128
|
return false;
|
|
143
129
|
}, []);
|
|
144
|
-
|
|
145
130
|
const isFocused = id => focusedNodeId === id;
|
|
131
|
+
|
|
146
132
|
/*
|
|
147
133
|
* Child Helpers
|
|
148
134
|
*/
|
|
149
|
-
// Using Object.keys -> .map to mimic Object.values we should replace with Object.values() once we stop IE11 support.
|
|
150
|
-
|
|
151
135
|
|
|
136
|
+
// Using Object.keys -> .map to mimic Object.values we should replace with Object.values() once we stop IE11 support.
|
|
152
137
|
const getChildrenIds = id => Object.keys(nodeMap.current).map(key => {
|
|
153
138
|
return nodeMap.current[key];
|
|
154
139
|
}).filter(node => node.parentId === id).sort((a, b) => a.index - b.index).map(child => child.id);
|
|
155
|
-
|
|
156
140
|
const getNavigableChildrenIds = id => {
|
|
157
141
|
let childrenIds = getChildrenIds(id);
|
|
158
|
-
|
|
159
142
|
if (!disabledItemsFocusable) {
|
|
160
143
|
childrenIds = childrenIds.filter(node => !isDisabled(node));
|
|
161
144
|
}
|
|
162
|
-
|
|
163
145
|
return childrenIds;
|
|
164
146
|
};
|
|
147
|
+
|
|
165
148
|
/*
|
|
166
149
|
* Node Helpers
|
|
167
150
|
*/
|
|
168
151
|
|
|
169
|
-
|
|
170
152
|
const getNextNode = id => {
|
|
171
153
|
// If expanded get first child
|
|
172
154
|
if (isExpanded(id) && getNavigableChildrenIds(id).length > 0) {
|
|
173
155
|
return getNavigableChildrenIds(id)[0];
|
|
174
156
|
}
|
|
175
|
-
|
|
176
157
|
let node = nodeMap.current[id];
|
|
177
|
-
|
|
178
158
|
while (node != null) {
|
|
179
159
|
// Try to get next sibling
|
|
180
160
|
const siblings = getNavigableChildrenIds(node.parentId);
|
|
181
161
|
const nextSibling = siblings[siblings.indexOf(node.id) + 1];
|
|
182
|
-
|
|
183
162
|
if (nextSibling) {
|
|
184
163
|
return nextSibling;
|
|
185
|
-
}
|
|
186
|
-
|
|
164
|
+
}
|
|
187
165
|
|
|
166
|
+
// If the sibling does not exist, go up a level to the parent and try again.
|
|
188
167
|
node = nodeMap.current[node.parentId];
|
|
189
168
|
}
|
|
190
|
-
|
|
191
169
|
return null;
|
|
192
170
|
};
|
|
193
|
-
|
|
194
171
|
const getPreviousNode = id => {
|
|
195
172
|
const node = nodeMap.current[id];
|
|
196
173
|
const siblings = getNavigableChildrenIds(node.parentId);
|
|
197
174
|
const nodeIndex = siblings.indexOf(id);
|
|
198
|
-
|
|
199
175
|
if (nodeIndex === 0) {
|
|
200
176
|
return node.parentId;
|
|
201
177
|
}
|
|
202
|
-
|
|
203
178
|
let currentNode = siblings[nodeIndex - 1];
|
|
204
|
-
|
|
205
179
|
while (isExpanded(currentNode) && getNavigableChildrenIds(currentNode).length > 0) {
|
|
206
180
|
currentNode = getNavigableChildrenIds(currentNode).pop();
|
|
207
181
|
}
|
|
208
|
-
|
|
209
182
|
return currentNode;
|
|
210
183
|
};
|
|
211
|
-
|
|
212
184
|
const getLastNode = () => {
|
|
213
185
|
let lastNode = getNavigableChildrenIds(null).pop();
|
|
214
|
-
|
|
215
186
|
while (isExpanded(lastNode)) {
|
|
216
187
|
lastNode = getNavigableChildrenIds(lastNode).pop();
|
|
217
188
|
}
|
|
218
|
-
|
|
219
189
|
return lastNode;
|
|
220
190
|
};
|
|
221
|
-
|
|
222
191
|
const getFirstNode = () => getNavigableChildrenIds(null)[0];
|
|
223
|
-
|
|
224
192
|
const getParent = id => nodeMap.current[id].parentId;
|
|
193
|
+
|
|
225
194
|
/**
|
|
226
195
|
* This is used to determine the start and end of a selection range so
|
|
227
196
|
* we can get the nodes between the two border nodes.
|
|
@@ -236,20 +205,15 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
236
205
|
* Another way to put it is which node is shallower in a trémaux tree
|
|
237
206
|
* https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
|
|
238
207
|
*/
|
|
239
|
-
|
|
240
|
-
|
|
241
208
|
const findOrderInTremauxTree = (nodeAId, nodeBId) => {
|
|
242
209
|
if (nodeAId === nodeBId) {
|
|
243
210
|
return [nodeAId, nodeBId];
|
|
244
211
|
}
|
|
245
|
-
|
|
246
212
|
const nodeA = nodeMap.current[nodeAId];
|
|
247
213
|
const nodeB = nodeMap.current[nodeBId];
|
|
248
|
-
|
|
249
214
|
if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
|
|
250
215
|
return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
|
|
251
216
|
}
|
|
252
|
-
|
|
253
217
|
const aFamily = [nodeA.id];
|
|
254
218
|
const bFamily = [nodeB.id];
|
|
255
219
|
let aAncestor = nodeA.parentId;
|
|
@@ -258,152 +222,131 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
258
222
|
let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
259
223
|
let continueA = true;
|
|
260
224
|
let continueB = true;
|
|
261
|
-
|
|
262
225
|
while (!bAncestorIsCommon && !aAncestorIsCommon) {
|
|
263
226
|
if (continueA) {
|
|
264
227
|
aFamily.push(aAncestor);
|
|
265
228
|
aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
266
229
|
continueA = aAncestor !== null;
|
|
267
|
-
|
|
268
230
|
if (!aAncestorIsCommon && continueA) {
|
|
269
231
|
aAncestor = nodeMap.current[aAncestor].parentId;
|
|
270
232
|
}
|
|
271
233
|
}
|
|
272
|
-
|
|
273
234
|
if (continueB && !aAncestorIsCommon) {
|
|
274
235
|
bFamily.push(bAncestor);
|
|
275
236
|
bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
276
237
|
continueB = bAncestor !== null;
|
|
277
|
-
|
|
278
238
|
if (!bAncestorIsCommon && continueB) {
|
|
279
239
|
bAncestor = nodeMap.current[bAncestor].parentId;
|
|
280
240
|
}
|
|
281
241
|
}
|
|
282
242
|
}
|
|
283
|
-
|
|
284
243
|
const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
|
|
285
244
|
const ancestorFamily = getChildrenIds(commonAncestor);
|
|
286
245
|
const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
|
|
287
246
|
const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
|
|
288
247
|
return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
|
|
289
248
|
};
|
|
290
|
-
|
|
291
249
|
const getNodesInRange = (nodeA, nodeB) => {
|
|
292
250
|
const [first, last] = findOrderInTremauxTree(nodeA, nodeB);
|
|
293
251
|
const nodes = [first];
|
|
294
252
|
let current = first;
|
|
295
|
-
|
|
296
253
|
while (current !== last) {
|
|
297
254
|
current = getNextNode(current);
|
|
298
255
|
nodes.push(current);
|
|
299
256
|
}
|
|
300
|
-
|
|
301
257
|
return nodes;
|
|
302
258
|
};
|
|
259
|
+
|
|
303
260
|
/*
|
|
304
261
|
* Focus Helpers
|
|
305
262
|
*/
|
|
306
263
|
|
|
307
|
-
|
|
308
264
|
const focus = (event, id) => {
|
|
309
265
|
if (id) {
|
|
310
266
|
setFocusedNodeId(id);
|
|
311
|
-
|
|
312
267
|
if (onNodeFocus) {
|
|
313
268
|
onNodeFocus(event, id);
|
|
314
269
|
}
|
|
315
270
|
}
|
|
316
271
|
};
|
|
317
|
-
|
|
318
272
|
const focusNextNode = (event, id) => focus(event, getNextNode(id));
|
|
319
|
-
|
|
320
273
|
const focusPreviousNode = (event, id) => focus(event, getPreviousNode(id));
|
|
321
|
-
|
|
322
274
|
const focusFirstNode = event => focus(event, getFirstNode());
|
|
323
|
-
|
|
324
275
|
const focusLastNode = event => focus(event, getLastNode());
|
|
325
|
-
|
|
326
276
|
const focusByFirstCharacter = (event, id, char) => {
|
|
327
277
|
let start;
|
|
328
278
|
let index;
|
|
329
279
|
const lowercaseChar = char.toLowerCase();
|
|
330
280
|
const firstCharIds = [];
|
|
331
|
-
const firstChars = [];
|
|
332
|
-
|
|
281
|
+
const firstChars = [];
|
|
282
|
+
// This really only works since the ids are strings
|
|
333
283
|
Object.keys(firstCharMap.current).forEach(nodeId => {
|
|
334
284
|
const firstChar = firstCharMap.current[nodeId];
|
|
335
285
|
const map = nodeMap.current[nodeId];
|
|
336
286
|
const visible = map.parentId ? isExpanded(map.parentId) : true;
|
|
337
287
|
const shouldBeSkipped = disabledItemsFocusable ? false : isDisabled(nodeId);
|
|
338
|
-
|
|
339
288
|
if (visible && !shouldBeSkipped) {
|
|
340
289
|
firstCharIds.push(nodeId);
|
|
341
290
|
firstChars.push(firstChar);
|
|
342
291
|
}
|
|
343
|
-
});
|
|
292
|
+
});
|
|
344
293
|
|
|
294
|
+
// Get start index for search based on position of currentItem
|
|
345
295
|
start = firstCharIds.indexOf(id) + 1;
|
|
346
|
-
|
|
347
296
|
if (start >= firstCharIds.length) {
|
|
348
297
|
start = 0;
|
|
349
|
-
}
|
|
350
|
-
|
|
298
|
+
}
|
|
351
299
|
|
|
352
|
-
|
|
300
|
+
// Check remaining slots in the menu
|
|
301
|
+
index = findNextFirstChar(firstChars, start, lowercaseChar);
|
|
353
302
|
|
|
303
|
+
// If not found in remaining slots, check from beginning
|
|
354
304
|
if (index === -1) {
|
|
355
305
|
index = findNextFirstChar(firstChars, 0, lowercaseChar);
|
|
356
|
-
}
|
|
357
|
-
|
|
306
|
+
}
|
|
358
307
|
|
|
308
|
+
// If match was found...
|
|
359
309
|
if (index > -1) {
|
|
360
310
|
focus(event, firstCharIds[index]);
|
|
361
311
|
}
|
|
362
312
|
};
|
|
313
|
+
|
|
363
314
|
/*
|
|
364
315
|
* Expansion Helpers
|
|
365
316
|
*/
|
|
366
317
|
|
|
367
|
-
|
|
368
318
|
const toggleExpansion = (event, value = focusedNodeId) => {
|
|
369
319
|
let newExpanded;
|
|
370
|
-
|
|
371
320
|
if (expanded.indexOf(value) !== -1) {
|
|
372
321
|
newExpanded = expanded.filter(id => id !== value);
|
|
373
322
|
} else {
|
|
374
323
|
newExpanded = [value].concat(expanded);
|
|
375
324
|
}
|
|
376
|
-
|
|
377
325
|
if (onNodeToggle) {
|
|
378
326
|
onNodeToggle(event, newExpanded);
|
|
379
327
|
}
|
|
380
|
-
|
|
381
328
|
setExpandedState(newExpanded);
|
|
382
329
|
};
|
|
383
|
-
|
|
384
330
|
const expandAllSiblings = (event, id) => {
|
|
385
331
|
const map = nodeMap.current[id];
|
|
386
332
|
const siblings = getChildrenIds(map.parentId);
|
|
387
333
|
const diff = siblings.filter(child => isExpandable(child) && !isExpanded(child));
|
|
388
334
|
const newExpanded = expanded.concat(diff);
|
|
389
|
-
|
|
390
335
|
if (diff.length > 0) {
|
|
391
336
|
setExpandedState(newExpanded);
|
|
392
|
-
|
|
393
337
|
if (onNodeToggle) {
|
|
394
338
|
onNodeToggle(event, newExpanded);
|
|
395
339
|
}
|
|
396
340
|
}
|
|
397
341
|
};
|
|
342
|
+
|
|
398
343
|
/*
|
|
399
344
|
* Selection Helpers
|
|
400
345
|
*/
|
|
401
346
|
|
|
402
|
-
|
|
403
347
|
const lastSelectedNode = React.useRef(null);
|
|
404
348
|
const lastSelectionWasRange = React.useRef(false);
|
|
405
349
|
const currentRangeSelection = React.useRef([]);
|
|
406
|
-
|
|
407
350
|
const handleRangeArrowSelect = (event, nodes) => {
|
|
408
351
|
let base = selected.slice();
|
|
409
352
|
const {
|
|
@@ -411,15 +354,12 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
411
354
|
next,
|
|
412
355
|
current
|
|
413
356
|
} = nodes;
|
|
414
|
-
|
|
415
357
|
if (!next || !current) {
|
|
416
358
|
return;
|
|
417
359
|
}
|
|
418
|
-
|
|
419
360
|
if (currentRangeSelection.current.indexOf(current) === -1) {
|
|
420
361
|
currentRangeSelection.current = [];
|
|
421
362
|
}
|
|
422
|
-
|
|
423
363
|
if (lastSelectionWasRange.current) {
|
|
424
364
|
if (currentRangeSelection.current.indexOf(next) !== -1) {
|
|
425
365
|
base = base.filter(id => id === start || id !== current);
|
|
@@ -432,64 +372,50 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
432
372
|
base.push(next);
|
|
433
373
|
currentRangeSelection.current.push(current, next);
|
|
434
374
|
}
|
|
435
|
-
|
|
436
375
|
if (onNodeSelect) {
|
|
437
376
|
onNodeSelect(event, base);
|
|
438
377
|
}
|
|
439
|
-
|
|
440
378
|
setSelectedState(base);
|
|
441
379
|
};
|
|
442
|
-
|
|
443
380
|
const handleRangeSelect = (event, nodes) => {
|
|
444
381
|
let base = selected.slice();
|
|
445
382
|
const {
|
|
446
383
|
start,
|
|
447
384
|
end
|
|
448
|
-
} = nodes;
|
|
449
|
-
|
|
385
|
+
} = nodes;
|
|
386
|
+
// If last selection was a range selection ignore nodes that were selected.
|
|
450
387
|
if (lastSelectionWasRange.current) {
|
|
451
388
|
base = base.filter(id => currentRangeSelection.current.indexOf(id) === -1);
|
|
452
389
|
}
|
|
453
|
-
|
|
454
390
|
let range = getNodesInRange(start, end);
|
|
455
391
|
range = range.filter(node => !isDisabled(node));
|
|
456
392
|
currentRangeSelection.current = range;
|
|
457
393
|
let newSelected = base.concat(range);
|
|
458
394
|
newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
|
|
459
|
-
|
|
460
395
|
if (onNodeSelect) {
|
|
461
396
|
onNodeSelect(event, newSelected);
|
|
462
397
|
}
|
|
463
|
-
|
|
464
398
|
setSelectedState(newSelected);
|
|
465
399
|
};
|
|
466
|
-
|
|
467
400
|
const handleMultipleSelect = (event, value) => {
|
|
468
401
|
let newSelected;
|
|
469
|
-
|
|
470
402
|
if (selected.indexOf(value) !== -1) {
|
|
471
403
|
newSelected = selected.filter(id => id !== value);
|
|
472
404
|
} else {
|
|
473
405
|
newSelected = [value].concat(selected);
|
|
474
406
|
}
|
|
475
|
-
|
|
476
407
|
if (onNodeSelect) {
|
|
477
408
|
onNodeSelect(event, newSelected);
|
|
478
409
|
}
|
|
479
|
-
|
|
480
410
|
setSelectedState(newSelected);
|
|
481
411
|
};
|
|
482
|
-
|
|
483
412
|
const handleSingleSelect = (event, value) => {
|
|
484
413
|
const newSelected = multiSelect ? [value] : value;
|
|
485
|
-
|
|
486
414
|
if (onNodeSelect) {
|
|
487
415
|
onNodeSelect(event, newSelected);
|
|
488
416
|
}
|
|
489
|
-
|
|
490
417
|
setSelectedState(newSelected);
|
|
491
418
|
};
|
|
492
|
-
|
|
493
419
|
const selectNode = (event, id, multiple = false) => {
|
|
494
420
|
if (id) {
|
|
495
421
|
if (multiple) {
|
|
@@ -497,23 +423,19 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
497
423
|
} else {
|
|
498
424
|
handleSingleSelect(event, id);
|
|
499
425
|
}
|
|
500
|
-
|
|
501
426
|
lastSelectedNode.current = id;
|
|
502
427
|
lastSelectionWasRange.current = false;
|
|
503
428
|
currentRangeSelection.current = [];
|
|
504
429
|
return true;
|
|
505
430
|
}
|
|
506
|
-
|
|
507
431
|
return false;
|
|
508
432
|
};
|
|
509
|
-
|
|
510
433
|
const selectRange = (event, nodes, stacked = false) => {
|
|
511
434
|
const {
|
|
512
435
|
start = lastSelectedNode.current,
|
|
513
436
|
end,
|
|
514
437
|
current
|
|
515
438
|
} = nodes;
|
|
516
|
-
|
|
517
439
|
if (stacked) {
|
|
518
440
|
handleRangeArrowSelect(event, {
|
|
519
441
|
start,
|
|
@@ -526,34 +448,28 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
526
448
|
end
|
|
527
449
|
});
|
|
528
450
|
}
|
|
529
|
-
|
|
530
451
|
lastSelectionWasRange.current = true;
|
|
531
452
|
};
|
|
532
|
-
|
|
533
453
|
const rangeSelectToFirst = (event, id) => {
|
|
534
454
|
if (!lastSelectedNode.current) {
|
|
535
455
|
lastSelectedNode.current = id;
|
|
536
456
|
}
|
|
537
|
-
|
|
538
457
|
const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
|
|
539
458
|
selectRange(event, {
|
|
540
459
|
start,
|
|
541
460
|
end: getFirstNode()
|
|
542
461
|
});
|
|
543
462
|
};
|
|
544
|
-
|
|
545
463
|
const rangeSelectToLast = (event, id) => {
|
|
546
464
|
if (!lastSelectedNode.current) {
|
|
547
465
|
lastSelectedNode.current = id;
|
|
548
466
|
}
|
|
549
|
-
|
|
550
467
|
const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
|
|
551
468
|
selectRange(event, {
|
|
552
469
|
start,
|
|
553
470
|
end: getLastNode()
|
|
554
471
|
});
|
|
555
472
|
};
|
|
556
|
-
|
|
557
473
|
const selectNextNode = (event, id) => {
|
|
558
474
|
if (!isDisabled(getNextNode(id))) {
|
|
559
475
|
selectRange(event, {
|
|
@@ -562,7 +478,6 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
562
478
|
}, true);
|
|
563
479
|
}
|
|
564
480
|
};
|
|
565
|
-
|
|
566
481
|
const selectPreviousNode = (event, id) => {
|
|
567
482
|
if (!isDisabled(getPreviousNode(id))) {
|
|
568
483
|
selectRange(event, {
|
|
@@ -571,18 +486,16 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
571
486
|
}, true);
|
|
572
487
|
}
|
|
573
488
|
};
|
|
574
|
-
|
|
575
489
|
const selectAllNodes = event => {
|
|
576
490
|
selectRange(event, {
|
|
577
491
|
start: getFirstNode(),
|
|
578
492
|
end: getLastNode()
|
|
579
493
|
});
|
|
580
494
|
};
|
|
495
|
+
|
|
581
496
|
/*
|
|
582
497
|
* Mapping Helpers
|
|
583
498
|
*/
|
|
584
|
-
|
|
585
|
-
|
|
586
499
|
const registerNode = React.useCallback(node => {
|
|
587
500
|
const {
|
|
588
501
|
id,
|
|
@@ -603,14 +516,12 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
603
516
|
}, []);
|
|
604
517
|
const unregisterNode = React.useCallback(id => {
|
|
605
518
|
const newMap = _extends({}, nodeMap.current);
|
|
606
|
-
|
|
607
519
|
delete newMap[id];
|
|
608
520
|
nodeMap.current = newMap;
|
|
609
521
|
setFocusedNodeId(oldFocusedNodeId => {
|
|
610
522
|
if (oldFocusedNodeId === id && treeRef.current === ownerDocument(treeRef.current).activeElement) {
|
|
611
523
|
return getChildrenIds(null)[0];
|
|
612
524
|
}
|
|
613
|
-
|
|
614
525
|
return oldFocusedNodeId;
|
|
615
526
|
});
|
|
616
527
|
}, []);
|
|
@@ -619,10 +530,10 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
619
530
|
}, []);
|
|
620
531
|
const unMapFirstChar = React.useCallback(id => {
|
|
621
532
|
const newMap = _extends({}, firstCharMap.current);
|
|
622
|
-
|
|
623
533
|
delete newMap[id];
|
|
624
534
|
firstCharMap.current = newMap;
|
|
625
535
|
}, []);
|
|
536
|
+
|
|
626
537
|
/**
|
|
627
538
|
* Event handlers and Navigation
|
|
628
539
|
*/
|
|
@@ -635,36 +546,29 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
635
546
|
toggleExpansion(event);
|
|
636
547
|
}
|
|
637
548
|
}
|
|
638
|
-
|
|
639
549
|
return true;
|
|
640
550
|
};
|
|
641
|
-
|
|
642
551
|
const handlePreviousArrow = event => {
|
|
643
552
|
if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {
|
|
644
553
|
toggleExpansion(event, focusedNodeId);
|
|
645
554
|
return true;
|
|
646
555
|
}
|
|
647
|
-
|
|
648
556
|
const parent = getParent(focusedNodeId);
|
|
649
|
-
|
|
650
557
|
if (parent) {
|
|
651
558
|
focus(event, parent);
|
|
652
559
|
return true;
|
|
653
560
|
}
|
|
654
|
-
|
|
655
561
|
return false;
|
|
656
562
|
};
|
|
657
|
-
|
|
658
563
|
const handleKeyDown = event => {
|
|
659
564
|
let flag = false;
|
|
660
|
-
const key = event.key;
|
|
565
|
+
const key = event.key;
|
|
661
566
|
|
|
567
|
+
// If the tree is empty there will be no focused node
|
|
662
568
|
if (event.altKey || event.currentTarget !== event.target || !focusedNodeId) {
|
|
663
569
|
return;
|
|
664
570
|
}
|
|
665
|
-
|
|
666
571
|
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
667
|
-
|
|
668
572
|
switch (key) {
|
|
669
573
|
case ' ':
|
|
670
574
|
if (!disableSelection && !isDisabled(focusedNodeId)) {
|
|
@@ -679,10 +583,8 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
679
583
|
flag = selectNode(event, focusedNodeId);
|
|
680
584
|
}
|
|
681
585
|
}
|
|
682
|
-
|
|
683
586
|
event.stopPropagation();
|
|
684
587
|
break;
|
|
685
|
-
|
|
686
588
|
case 'Enter':
|
|
687
589
|
if (!isDisabled(focusedNodeId)) {
|
|
688
590
|
if (isExpandable(focusedNodeId)) {
|
|
@@ -694,64 +596,50 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
694
596
|
flag = selectNode(event, focusedNodeId);
|
|
695
597
|
}
|
|
696
598
|
}
|
|
697
|
-
|
|
698
599
|
event.stopPropagation();
|
|
699
600
|
break;
|
|
700
|
-
|
|
701
601
|
case 'ArrowDown':
|
|
702
602
|
if (multiSelect && event.shiftKey && !disableSelection) {
|
|
703
603
|
selectNextNode(event, focusedNodeId);
|
|
704
604
|
}
|
|
705
|
-
|
|
706
605
|
focusNextNode(event, focusedNodeId);
|
|
707
606
|
flag = true;
|
|
708
607
|
break;
|
|
709
|
-
|
|
710
608
|
case 'ArrowUp':
|
|
711
609
|
if (multiSelect && event.shiftKey && !disableSelection) {
|
|
712
610
|
selectPreviousNode(event, focusedNodeId);
|
|
713
611
|
}
|
|
714
|
-
|
|
715
612
|
focusPreviousNode(event, focusedNodeId);
|
|
716
613
|
flag = true;
|
|
717
614
|
break;
|
|
718
|
-
|
|
719
615
|
case 'ArrowRight':
|
|
720
616
|
if (isRtl) {
|
|
721
617
|
flag = handlePreviousArrow(event);
|
|
722
618
|
} else {
|
|
723
619
|
flag = handleNextArrow(event);
|
|
724
620
|
}
|
|
725
|
-
|
|
726
621
|
break;
|
|
727
|
-
|
|
728
622
|
case 'ArrowLeft':
|
|
729
623
|
if (isRtl) {
|
|
730
624
|
flag = handleNextArrow(event);
|
|
731
625
|
} else {
|
|
732
626
|
flag = handlePreviousArrow(event);
|
|
733
627
|
}
|
|
734
|
-
|
|
735
628
|
break;
|
|
736
|
-
|
|
737
629
|
case 'Home':
|
|
738
630
|
if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
|
|
739
631
|
rangeSelectToFirst(event, focusedNodeId);
|
|
740
632
|
}
|
|
741
|
-
|
|
742
633
|
focusFirstNode(event);
|
|
743
634
|
flag = true;
|
|
744
635
|
break;
|
|
745
|
-
|
|
746
636
|
case 'End':
|
|
747
637
|
if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
|
|
748
638
|
rangeSelectToLast(event, focusedNodeId);
|
|
749
639
|
}
|
|
750
|
-
|
|
751
640
|
focusLastNode(event);
|
|
752
641
|
flag = true;
|
|
753
642
|
break;
|
|
754
|
-
|
|
755
643
|
default:
|
|
756
644
|
if (key === '*') {
|
|
757
645
|
expandAllSiblings(event, focusedNodeId);
|
|
@@ -763,43 +651,35 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
763
651
|
focusByFirstCharacter(event, focusedNodeId, key);
|
|
764
652
|
flag = true;
|
|
765
653
|
}
|
|
766
|
-
|
|
767
654
|
}
|
|
768
|
-
|
|
769
655
|
if (flag) {
|
|
770
656
|
event.preventDefault();
|
|
771
657
|
event.stopPropagation();
|
|
772
658
|
}
|
|
773
|
-
|
|
774
659
|
if (onKeyDown) {
|
|
775
660
|
onKeyDown(event);
|
|
776
661
|
}
|
|
777
662
|
};
|
|
778
|
-
|
|
779
663
|
const handleFocus = event => {
|
|
780
664
|
// if the event bubbled (which is React specific) we don't want to steal focus
|
|
781
665
|
if (event.target === event.currentTarget) {
|
|
782
666
|
const firstSelected = Array.isArray(selected) ? selected[0] : selected;
|
|
783
667
|
focus(event, firstSelected || getNavigableChildrenIds(null)[0]);
|
|
784
668
|
}
|
|
785
|
-
|
|
786
669
|
if (onFocus) {
|
|
787
670
|
onFocus(event);
|
|
788
671
|
}
|
|
789
672
|
};
|
|
790
|
-
|
|
791
673
|
const handleBlur = event => {
|
|
792
674
|
setFocusedNodeId(null);
|
|
793
|
-
|
|
794
675
|
if (onBlur) {
|
|
795
676
|
onBlur(event);
|
|
796
677
|
}
|
|
797
678
|
};
|
|
798
|
-
|
|
799
679
|
const activeDescendant = nodeMap.current[focusedNodeId] ? nodeMap.current[focusedNodeId].idAttribute : null;
|
|
800
680
|
return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
|
|
801
|
-
// TODO: fix lint error
|
|
802
|
-
|
|
681
|
+
// TODO: fix this lint error
|
|
682
|
+
// eslint-disable-next-line react/jsx-no-constructed-context-values
|
|
803
683
|
value: {
|
|
804
684
|
icons: {
|
|
805
685
|
defaultCollapseIcon,
|
|
@@ -843,108 +723,88 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
843
723
|
})
|
|
844
724
|
});
|
|
845
725
|
});
|
|
846
|
-
process.env.NODE_ENV !== "production" ? TreeView.propTypes
|
|
847
|
-
/* remove-proptypes */
|
|
848
|
-
= {
|
|
726
|
+
process.env.NODE_ENV !== "production" ? TreeView.propTypes /* remove-proptypes */ = {
|
|
849
727
|
// ----------------------------- Warning --------------------------------
|
|
850
728
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
851
729
|
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
852
730
|
// ----------------------------------------------------------------------
|
|
853
|
-
|
|
854
731
|
/**
|
|
855
732
|
* The content of the component.
|
|
856
733
|
*/
|
|
857
734
|
children: PropTypes.node,
|
|
858
|
-
|
|
859
735
|
/**
|
|
860
736
|
* Override or extend the styles applied to the component.
|
|
861
737
|
*/
|
|
862
738
|
classes: PropTypes.object,
|
|
863
|
-
|
|
864
739
|
/**
|
|
865
740
|
* @ignore
|
|
866
741
|
*/
|
|
867
742
|
className: PropTypes.string,
|
|
868
|
-
|
|
869
743
|
/**
|
|
870
744
|
* The default icon used to collapse the node.
|
|
871
745
|
*/
|
|
872
746
|
defaultCollapseIcon: PropTypes.node,
|
|
873
|
-
|
|
874
747
|
/**
|
|
875
748
|
* The default icon displayed next to a end node. This is applied to all
|
|
876
749
|
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
877
750
|
*/
|
|
878
751
|
defaultEndIcon: PropTypes.node,
|
|
879
|
-
|
|
880
752
|
/**
|
|
881
753
|
* Expanded node ids. (Uncontrolled)
|
|
882
754
|
* @default []
|
|
883
755
|
*/
|
|
884
756
|
defaultExpanded: PropTypes.arrayOf(PropTypes.string),
|
|
885
|
-
|
|
886
757
|
/**
|
|
887
758
|
* The default icon used to expand the node.
|
|
888
759
|
*/
|
|
889
760
|
defaultExpandIcon: PropTypes.node,
|
|
890
|
-
|
|
891
761
|
/**
|
|
892
762
|
* The default icon displayed next to a parent node. This is applied to all
|
|
893
763
|
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
894
764
|
*/
|
|
895
765
|
defaultParentIcon: PropTypes.node,
|
|
896
|
-
|
|
897
766
|
/**
|
|
898
767
|
* Selected node ids. (Uncontrolled)
|
|
899
768
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
900
769
|
* @default []
|
|
901
770
|
*/
|
|
902
771
|
defaultSelected: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
|
|
903
|
-
|
|
904
772
|
/**
|
|
905
773
|
* If `true`, will allow focus on disabled items.
|
|
906
774
|
* @default false
|
|
907
775
|
*/
|
|
908
776
|
disabledItemsFocusable: PropTypes.bool,
|
|
909
|
-
|
|
910
777
|
/**
|
|
911
778
|
* If `true` selection is disabled.
|
|
912
779
|
* @default false
|
|
913
780
|
*/
|
|
914
781
|
disableSelection: PropTypes.bool,
|
|
915
|
-
|
|
916
782
|
/**
|
|
917
783
|
* Expanded node ids. (Controlled)
|
|
918
784
|
*/
|
|
919
785
|
expanded: PropTypes.arrayOf(PropTypes.string),
|
|
920
|
-
|
|
921
786
|
/**
|
|
922
787
|
* This prop is used to help implement the accessibility logic.
|
|
923
788
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
924
789
|
*/
|
|
925
790
|
id: PropTypes.string,
|
|
926
|
-
|
|
927
791
|
/**
|
|
928
792
|
* If true `ctrl` and `shift` will trigger multiselect.
|
|
929
793
|
* @default false
|
|
930
794
|
*/
|
|
931
795
|
multiSelect: PropTypes.bool,
|
|
932
|
-
|
|
933
796
|
/**
|
|
934
797
|
* @ignore
|
|
935
798
|
*/
|
|
936
799
|
onBlur: PropTypes.func,
|
|
937
|
-
|
|
938
800
|
/**
|
|
939
801
|
* @ignore
|
|
940
802
|
*/
|
|
941
803
|
onFocus: PropTypes.func,
|
|
942
|
-
|
|
943
804
|
/**
|
|
944
805
|
* @ignore
|
|
945
806
|
*/
|
|
946
807
|
onKeyDown: PropTypes.func,
|
|
947
|
-
|
|
948
808
|
/**
|
|
949
809
|
* Callback fired when tree items are focused.
|
|
950
810
|
*
|
|
@@ -952,7 +812,6 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes
|
|
|
952
812
|
* @param {string} value of the focused node.
|
|
953
813
|
*/
|
|
954
814
|
onNodeFocus: PropTypes.func,
|
|
955
|
-
|
|
956
815
|
/**
|
|
957
816
|
* Callback fired when tree items are selected/unselected.
|
|
958
817
|
*
|
|
@@ -961,7 +820,6 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes
|
|
|
961
820
|
* this is an array of strings; when false (default) a string.
|
|
962
821
|
*/
|
|
963
822
|
onNodeSelect: PropTypes.func,
|
|
964
|
-
|
|
965
823
|
/**
|
|
966
824
|
* Callback fired when tree items are expanded/collapsed.
|
|
967
825
|
*
|
|
@@ -969,13 +827,11 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes
|
|
|
969
827
|
* @param {array} nodeIds The ids of the expanded nodes.
|
|
970
828
|
*/
|
|
971
829
|
onNodeToggle: PropTypes.func,
|
|
972
|
-
|
|
973
830
|
/**
|
|
974
831
|
* Selected node ids. (Controlled)
|
|
975
832
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
976
833
|
*/
|
|
977
834
|
selected: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]),
|
|
978
|
-
|
|
979
835
|
/**
|
|
980
836
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
981
837
|
*/
|