@mui/x-tree-view 6.0.0-alpha.3 → 6.0.0-alpha.4
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/CHANGELOG.md +83 -0
- package/TreeItem/TreeItem.js +18 -31
- package/TreeItem/useTreeItem.js +18 -27
- package/TreeView/TreeView.d.ts +4 -1
- package/TreeView/TreeView.js +65 -708
- package/TreeView/TreeView.types.d.ts +4 -147
- package/index.d.ts +1 -0
- package/index.js +3 -2
- package/{TreeView/descendants.d.ts → internals/TreeViewProvider/DescendantProvider.d.ts} +1 -5
- package/internals/TreeViewProvider/TreeViewContext.d.ts +7 -0
- package/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
- package/internals/TreeViewProvider/TreeViewProvider.d.ts +9 -0
- package/internals/TreeViewProvider/TreeViewProvider.js +21 -0
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +18 -0
- package/internals/TreeViewProvider/index.d.ts +2 -0
- package/internals/TreeViewProvider/index.js +1 -0
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +3 -0
- package/internals/TreeViewProvider/useTreeViewContext.js +3 -0
- package/internals/corePlugins/corePlugins.d.ts +7 -0
- package/internals/corePlugins/corePlugins.js +6 -0
- package/internals/corePlugins/index.d.ts +2 -0
- package/internals/corePlugins/index.js +1 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +2 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +8 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +21 -0
- package/internals/hooks/useInstanceEventHandler.d.ts +15 -0
- package/internals/hooks/useInstanceEventHandler.js +82 -0
- package/internals/models/events.d.ts +9 -0
- package/internals/models/helpers.d.ts +13 -0
- package/internals/models/helpers.js +1 -0
- package/internals/models/index.d.ts +3 -0
- package/internals/models/index.js +3 -0
- package/internals/models/plugin.d.ts +69 -0
- package/internals/models/plugin.js +1 -0
- package/internals/models/treeView.d.ts +23 -0
- package/internals/models/treeView.js +1 -0
- package/internals/plugins/defaultPlugins.d.ts +10 -0
- package/internals/plugins/defaultPlugins.js +9 -0
- package/internals/plugins/index.d.ts +2 -0
- package/internals/plugins/index.js +1 -0
- package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +2 -0
- package/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +3 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +34 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -0
- package/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +3 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +63 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +32 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/internals/plugins/useTreeViewFocus/index.d.ts +2 -0
- package/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +3 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +77 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +25 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +2 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +3 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +223 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +14 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/internals/plugins/useTreeViewNodes/index.d.ts +2 -0
- package/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +3 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +27 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/internals/plugins/useTreeViewSelection/index.d.ts +2 -0
- package/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +3 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +172 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +49 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +17 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/internals/useTreeView/index.d.ts +2 -0
- package/internals/useTreeView/index.js +1 -0
- package/internals/useTreeView/useTreeView.d.ts +3 -0
- package/internals/useTreeView/useTreeView.js +65 -0
- package/internals/useTreeView/useTreeView.types.d.ts +20 -0
- package/internals/useTreeView/useTreeView.types.js +1 -0
- package/internals/useTreeView/useTreeView.utils.d.ts +8 -0
- package/internals/useTreeView/useTreeView.utils.js +43 -0
- package/internals/useTreeView/useTreeViewModels.d.ts +6 -0
- package/internals/useTreeView/useTreeViewModels.js +63 -0
- package/internals/utils/EventManager.d.ts +29 -0
- package/internals/utils/EventManager.js +69 -0
- package/internals/utils/cleanupTracking/CleanupTracking.d.ts +9 -0
- package/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +7 -0
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +10 -0
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
- package/internals/utils/publishTreeViewEvent.d.ts +5 -0
- package/internals/utils/publishTreeViewEvent.js +3 -0
- package/legacy/TreeItem/TreeItem.js +21 -32
- package/legacy/TreeItem/useTreeItem.js +18 -27
- package/legacy/TreeView/TreeView.js +65 -766
- package/legacy/index.js +3 -2
- package/legacy/internals/TreeViewProvider/TreeViewContext.js +21 -0
- package/legacy/internals/TreeViewProvider/TreeViewProvider.js +19 -0
- package/legacy/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
- package/legacy/internals/TreeViewProvider/index.js +1 -0
- package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -0
- package/legacy/internals/corePlugins/corePlugins.js +6 -0
- package/legacy/internals/corePlugins/index.js +1 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +45 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
- package/legacy/internals/hooks/useInstanceEventHandler.js +87 -0
- package/legacy/internals/models/events.js +1 -0
- package/legacy/internals/models/helpers.js +1 -0
- package/legacy/internals/models/index.js +3 -0
- package/legacy/internals/models/plugin.js +1 -0
- package/legacy/internals/models/treeView.js +1 -0
- package/legacy/internals/plugins/defaultPlugins.js +9 -0
- package/legacy/internals/plugins/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +25 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +66 -0
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +87 -0
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +226 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +71 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +188 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/legacy/internals/useTreeView/index.js +1 -0
- package/legacy/internals/useTreeView/useTreeView.js +71 -0
- package/legacy/internals/useTreeView/useTreeView.types.js +1 -0
- package/legacy/internals/useTreeView/useTreeView.utils.js +46 -0
- package/legacy/internals/useTreeView/useTreeViewModels.js +76 -0
- package/legacy/internals/utils/EventManager.js +91 -0
- package/legacy/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/legacy/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +29 -0
- package/legacy/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +52 -0
- package/legacy/internals/utils/publishTreeViewEvent.js +3 -0
- package/modern/TreeItem/TreeItem.js +18 -31
- package/modern/TreeItem/useTreeItem.js +18 -27
- package/modern/TreeView/TreeView.js +65 -707
- package/modern/index.js +3 -2
- package/modern/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +21 -0
- package/modern/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
- package/modern/internals/TreeViewProvider/index.js +1 -0
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +3 -0
- package/modern/internals/corePlugins/corePlugins.js +6 -0
- package/modern/internals/corePlugins/index.js +1 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
- package/modern/internals/hooks/useInstanceEventHandler.js +77 -0
- package/modern/internals/models/events.js +1 -0
- package/modern/internals/models/helpers.js +1 -0
- package/modern/internals/models/index.js +3 -0
- package/modern/internals/models/plugin.js +1 -0
- package/modern/internals/models/treeView.js +1 -0
- package/modern/internals/plugins/defaultPlugins.js +9 -0
- package/modern/internals/plugins/index.js +1 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/modern/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +57 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/modern/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +72 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +222 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/modern/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +169 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/modern/internals/useTreeView/index.js +1 -0
- package/modern/internals/useTreeView/useTreeView.js +65 -0
- package/modern/internals/useTreeView/useTreeView.types.js +1 -0
- package/modern/internals/useTreeView/useTreeView.utils.js +43 -0
- package/modern/internals/useTreeView/useTreeViewModels.js +63 -0
- package/modern/internals/utils/EventManager.js +69 -0
- package/modern/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/modern/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
- package/modern/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
- package/modern/internals/utils/publishTreeViewEvent.js +3 -0
- package/node/TreeItem/TreeItem.js +20 -33
- package/node/TreeItem/useTreeItem.js +18 -29
- package/node/TreeView/TreeView.js +65 -707
- package/node/index.js +14 -2
- package/node/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +10 -19
- package/node/internals/TreeViewProvider/TreeViewProvider.js +29 -0
- package/node/internals/TreeViewProvider/index.js +12 -0
- package/node/internals/TreeViewProvider/useTreeViewContext.js +12 -0
- package/node/internals/corePlugins/corePlugins.js +13 -0
- package/node/internals/corePlugins/index.js +12 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/index.js +12 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +44 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +5 -0
- package/node/internals/hooks/useInstanceEventHandler.js +88 -0
- package/node/internals/models/events.js +5 -0
- package/node/internals/models/helpers.js +5 -0
- package/node/internals/models/index.js +38 -0
- package/node/internals/models/plugin.js +5 -0
- package/node/internals/models/treeView.js +5 -0
- package/node/internals/plugins/defaultPlugins.js +16 -0
- package/node/internals/plugins/index.js +12 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +12 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +32 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +5 -0
- package/node/internals/plugins/useTreeViewExpansion/index.js +12 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +67 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +5 -0
- package/node/internals/plugins/useTreeViewFocus/index.js +12 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +82 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/index.js +12 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +232 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +5 -0
- package/node/internals/plugins/useTreeViewNodes/index.js +12 -0
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +70 -0
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewSelection/index.js +12 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +179 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +5 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +62 -0
- package/node/internals/useTreeView/index.js +12 -0
- package/node/internals/useTreeView/useTreeView.js +75 -0
- package/node/internals/useTreeView/useTreeView.types.js +5 -0
- package/node/internals/useTreeView/useTreeView.utils.js +54 -0
- package/node/internals/useTreeView/useTreeViewModels.js +73 -0
- package/node/internals/utils/EventManager.js +76 -0
- package/node/internals/utils/cleanupTracking/CleanupTracking.js +5 -0
- package/node/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +25 -0
- package/node/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +45 -0
- package/node/internals/utils/publishTreeViewEvent.js +10 -0
- package/package.json +1 -1
- package/themeAugmentation/props.d.ts +1 -1
- package/TreeView/TreeViewContext.d.ts +0 -6
- package/internals/models.d.ts +0 -1
- package/legacy/TreeView/TreeViewContext.js +0 -41
- /package/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
- /package/{legacy/internals/models.js → internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js} +0 -0
- /package/{modern/internals/models.js → internals/models/events.js} +0 -0
- /package/legacy/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/modern/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/node/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/node/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
|
@@ -5,22 +5,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.TreeView = void 0;
|
|
8
|
-
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
-
var _clsx = _interopRequireDefault(require("clsx"));
|
|
13
12
|
var _styles = require("@mui/material/styles");
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
17
|
-
var _ownerDocument = _interopRequireDefault(require("@mui/utils/ownerDocument"));
|
|
18
|
-
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
19
|
-
var _TreeViewContext = require("./TreeViewContext");
|
|
20
|
-
var _descendants = require("./descendants");
|
|
13
|
+
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
14
|
+
var _utils = require("@mui/base/utils");
|
|
21
15
|
var _treeViewClasses = require("./treeViewClasses");
|
|
16
|
+
var _useTreeView = require("../internals/useTreeView");
|
|
17
|
+
var _TreeViewProvider = require("../internals/TreeViewProvider");
|
|
18
|
+
var _plugins = require("../internals/plugins");
|
|
22
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
-
const _excluded = ["
|
|
20
|
+
const _excluded = ["disabledItemsFocusable", "expanded", "defaultExpanded", "onNodeToggle", "onNodeFocus", "disableSelection", "defaultSelected", "selected", "multiSelect", "onNodeSelect", "id", "defaultCollapseIcon", "defaultEndIcon", "defaultExpandIcon", "defaultParentIcon", "children"];
|
|
24
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
23
|
const useUtilityClasses = ownerState => {
|
|
@@ -30,7 +27,7 @@ const useUtilityClasses = ownerState => {
|
|
|
30
27
|
const slots = {
|
|
31
28
|
root: ['root']
|
|
32
29
|
};
|
|
33
|
-
return (0,
|
|
30
|
+
return (0, _composeClasses.default)(slots, _treeViewClasses.getTreeViewUtilityClass, classes);
|
|
34
31
|
};
|
|
35
32
|
const TreeViewRoot = (0, _styles.styled)('ul', {
|
|
36
33
|
name: 'MuiTreeView',
|
|
@@ -42,23 +39,6 @@ const TreeViewRoot = (0, _styles.styled)('ul', {
|
|
|
42
39
|
listStyle: 'none',
|
|
43
40
|
outline: 0
|
|
44
41
|
});
|
|
45
|
-
function isPrintableCharacter(string) {
|
|
46
|
-
return string && string.length === 1 && string.match(/\S/);
|
|
47
|
-
}
|
|
48
|
-
function findNextFirstChar(firstChars, startIndex, char) {
|
|
49
|
-
for (let i = startIndex; i < firstChars.length; i += 1) {
|
|
50
|
-
if (char === firstChars[i]) {
|
|
51
|
-
return i;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return -1;
|
|
55
|
-
}
|
|
56
|
-
function noopSelection() {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
const defaultDefaultExpanded = [];
|
|
60
|
-
const defaultDefaultSelected = [];
|
|
61
|
-
|
|
62
42
|
/**
|
|
63
43
|
*
|
|
64
44
|
* Demos:
|
|
@@ -74,687 +54,65 @@ const TreeView = /*#__PURE__*/React.forwardRef(function TreeView(inProps, ref) {
|
|
|
74
54
|
props: inProps,
|
|
75
55
|
name: 'MuiTreeView'
|
|
76
56
|
});
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
defaultExpanded: themeProps.defaultExpanded ?? defaultDefaultExpanded,
|
|
82
|
-
defaultSelected: themeProps.defaultSelected ?? defaultDefaultSelected
|
|
83
|
-
});
|
|
84
|
-
const {
|
|
85
|
-
children,
|
|
86
|
-
className,
|
|
87
|
-
defaultCollapseIcon,
|
|
88
|
-
defaultEndIcon,
|
|
89
|
-
defaultExpanded,
|
|
90
|
-
defaultExpandIcon,
|
|
91
|
-
defaultParentIcon,
|
|
92
|
-
defaultSelected,
|
|
57
|
+
const ownerState = themeProps;
|
|
58
|
+
const _ref = themeProps,
|
|
59
|
+
{
|
|
60
|
+
// Headless implementation
|
|
93
61
|
disabledItemsFocusable,
|
|
62
|
+
expanded,
|
|
63
|
+
defaultExpanded,
|
|
64
|
+
onNodeToggle,
|
|
65
|
+
onNodeFocus,
|
|
94
66
|
disableSelection,
|
|
95
|
-
|
|
96
|
-
|
|
67
|
+
defaultSelected,
|
|
68
|
+
selected,
|
|
97
69
|
multiSelect,
|
|
98
|
-
onBlur,
|
|
99
|
-
onFocus,
|
|
100
|
-
onKeyDown,
|
|
101
|
-
onNodeFocus,
|
|
102
70
|
onNodeSelect,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
71
|
+
id,
|
|
72
|
+
defaultCollapseIcon,
|
|
73
|
+
defaultEndIcon,
|
|
74
|
+
defaultExpandIcon,
|
|
75
|
+
defaultParentIcon,
|
|
76
|
+
// Component implementation
|
|
77
|
+
children
|
|
78
|
+
} = _ref,
|
|
79
|
+
other = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
|
|
80
|
+
const {
|
|
81
|
+
getRootProps,
|
|
82
|
+
contextValue
|
|
83
|
+
} = (0, _useTreeView.useTreeView)({
|
|
84
|
+
disabledItemsFocusable,
|
|
85
|
+
expanded,
|
|
86
|
+
defaultExpanded,
|
|
87
|
+
onNodeToggle,
|
|
88
|
+
onNodeFocus,
|
|
89
|
+
disableSelection,
|
|
90
|
+
defaultSelected,
|
|
91
|
+
selected,
|
|
92
|
+
multiSelect,
|
|
93
|
+
onNodeSelect,
|
|
94
|
+
id,
|
|
95
|
+
defaultCollapseIcon,
|
|
96
|
+
defaultEndIcon,
|
|
97
|
+
defaultExpandIcon,
|
|
98
|
+
defaultParentIcon,
|
|
99
|
+
plugins: _plugins.DEFAULT_TREE_VIEW_PLUGINS,
|
|
100
|
+
rootRef: ref
|
|
121
101
|
});
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
102
|
+
const classes = useUtilityClasses(themeProps);
|
|
103
|
+
const rootProps = (0, _utils.useSlotProps)({
|
|
104
|
+
elementType: TreeViewRoot,
|
|
105
|
+
externalSlotProps: {},
|
|
106
|
+
externalForwardedProps: other,
|
|
107
|
+
className: classes.root,
|
|
108
|
+
getSlotProps: getRootProps,
|
|
109
|
+
ownerState
|
|
127
110
|
});
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const isExpandable = React.useCallback(nodeId => nodeMap.current[nodeId] && nodeMap.current[nodeId].expandable, []);
|
|
134
|
-
const isSelected = React.useCallback(nodeId => Array.isArray(selected) ? selected.indexOf(nodeId) !== -1 : selected === nodeId, [selected]);
|
|
135
|
-
const isDisabled = React.useCallback(nodeId => {
|
|
136
|
-
if (nodeId == null) {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
let node = nodeMap.current[nodeId];
|
|
140
|
-
|
|
141
|
-
// This can be called before the node has been added to the node map.
|
|
142
|
-
if (!node) {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
if (node.disabled) {
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
while (node.parentId != null) {
|
|
149
|
-
node = nodeMap.current[node.parentId];
|
|
150
|
-
if (node.disabled) {
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return false;
|
|
155
|
-
}, []);
|
|
156
|
-
const isFocused = nodeId => focusedNodeId === nodeId;
|
|
157
|
-
|
|
158
|
-
/*
|
|
159
|
-
* Child Helpers
|
|
160
|
-
*/
|
|
161
|
-
|
|
162
|
-
// Using Object.keys -> .map to mimic Object.values we should replace with Object.values() once we stop IE11 support.
|
|
163
|
-
const getChildrenIds = nodeId => Object.keys(nodeMap.current).map(key => {
|
|
164
|
-
return nodeMap.current[key];
|
|
165
|
-
}).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id);
|
|
166
|
-
const getNavigableChildrenIds = nodeId => {
|
|
167
|
-
let childrenIds = getChildrenIds(nodeId);
|
|
168
|
-
if (!disabledItemsFocusable) {
|
|
169
|
-
childrenIds = childrenIds.filter(node => !isDisabled(node));
|
|
170
|
-
}
|
|
171
|
-
return childrenIds;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
/*
|
|
175
|
-
* Node Helpers
|
|
176
|
-
*/
|
|
177
|
-
|
|
178
|
-
const getNextNode = nodeId => {
|
|
179
|
-
// If expanded get first child
|
|
180
|
-
if (isExpanded(nodeId) && getNavigableChildrenIds(nodeId).length > 0) {
|
|
181
|
-
return getNavigableChildrenIds(nodeId)[0];
|
|
182
|
-
}
|
|
183
|
-
let node = nodeMap.current[nodeId];
|
|
184
|
-
while (node != null) {
|
|
185
|
-
// Try to get next sibling
|
|
186
|
-
const siblings = getNavigableChildrenIds(node.parentId);
|
|
187
|
-
const nextSibling = siblings[siblings.indexOf(node.id) + 1];
|
|
188
|
-
if (nextSibling) {
|
|
189
|
-
return nextSibling;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// If the sibling does not exist, go up a level to the parent and try again.
|
|
193
|
-
node = nodeMap.current[node.parentId];
|
|
194
|
-
}
|
|
195
|
-
return null;
|
|
196
|
-
};
|
|
197
|
-
const getPreviousNode = nodeId => {
|
|
198
|
-
const node = nodeMap.current[nodeId];
|
|
199
|
-
const siblings = getNavigableChildrenIds(node.parentId);
|
|
200
|
-
const nodeIndex = siblings.indexOf(nodeId);
|
|
201
|
-
if (nodeIndex === 0) {
|
|
202
|
-
return node.parentId;
|
|
203
|
-
}
|
|
204
|
-
let currentNode = siblings[nodeIndex - 1];
|
|
205
|
-
while (isExpanded(currentNode) && getNavigableChildrenIds(currentNode).length > 0) {
|
|
206
|
-
currentNode = getNavigableChildrenIds(currentNode).pop();
|
|
207
|
-
}
|
|
208
|
-
return currentNode;
|
|
209
|
-
};
|
|
210
|
-
const getLastNode = () => {
|
|
211
|
-
let lastNode = getNavigableChildrenIds(null).pop();
|
|
212
|
-
while (isExpanded(lastNode)) {
|
|
213
|
-
lastNode = getNavigableChildrenIds(lastNode).pop();
|
|
214
|
-
}
|
|
215
|
-
return lastNode;
|
|
216
|
-
};
|
|
217
|
-
const getFirstNode = () => getNavigableChildrenIds(null)[0];
|
|
218
|
-
const getParent = nodeId => nodeMap.current[nodeId].parentId;
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* This is used to determine the start and end of a selection range so
|
|
222
|
-
* we can get the nodes between the two border nodes.
|
|
223
|
-
*
|
|
224
|
-
* It finds the nodes' common ancestor using
|
|
225
|
-
* a naive implementation of a lowest common ancestor algorithm
|
|
226
|
-
* (https://en.wikipedia.org/wiki/Lowest_common_ancestor).
|
|
227
|
-
* Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB
|
|
228
|
-
* so we can compare their indexes to work out which node comes first in a depth first search.
|
|
229
|
-
* (https://en.wikipedia.org/wiki/Depth-first_search)
|
|
230
|
-
*
|
|
231
|
-
* Another way to put it is which node is shallower in a trémaux tree
|
|
232
|
-
* https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree
|
|
233
|
-
*/
|
|
234
|
-
const findOrderInTremauxTree = (nodeAId, nodeBId) => {
|
|
235
|
-
if (nodeAId === nodeBId) {
|
|
236
|
-
return [nodeAId, nodeBId];
|
|
237
|
-
}
|
|
238
|
-
const nodeA = nodeMap.current[nodeAId];
|
|
239
|
-
const nodeB = nodeMap.current[nodeBId];
|
|
240
|
-
if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
|
|
241
|
-
return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
|
|
242
|
-
}
|
|
243
|
-
const aFamily = [nodeA.id];
|
|
244
|
-
const bFamily = [nodeB.id];
|
|
245
|
-
let aAncestor = nodeA.parentId;
|
|
246
|
-
let bAncestor = nodeB.parentId;
|
|
247
|
-
let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
248
|
-
let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
249
|
-
let continueA = true;
|
|
250
|
-
let continueB = true;
|
|
251
|
-
while (!bAncestorIsCommon && !aAncestorIsCommon) {
|
|
252
|
-
if (continueA) {
|
|
253
|
-
aFamily.push(aAncestor);
|
|
254
|
-
aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
255
|
-
continueA = aAncestor !== null;
|
|
256
|
-
if (!aAncestorIsCommon && continueA) {
|
|
257
|
-
aAncestor = nodeMap.current[aAncestor].parentId;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
if (continueB && !aAncestorIsCommon) {
|
|
261
|
-
bFamily.push(bAncestor);
|
|
262
|
-
bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
263
|
-
continueB = bAncestor !== null;
|
|
264
|
-
if (!bAncestorIsCommon && continueB) {
|
|
265
|
-
bAncestor = nodeMap.current[bAncestor].parentId;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
|
|
270
|
-
const ancestorFamily = getChildrenIds(commonAncestor);
|
|
271
|
-
const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
|
|
272
|
-
const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
|
|
273
|
-
return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
|
|
274
|
-
};
|
|
275
|
-
const getNodesInRange = (nodeAId, nodeBId) => {
|
|
276
|
-
const [first, last] = findOrderInTremauxTree(nodeAId, nodeBId);
|
|
277
|
-
const nodes = [first];
|
|
278
|
-
let current = first;
|
|
279
|
-
while (current !== last) {
|
|
280
|
-
current = getNextNode(current);
|
|
281
|
-
nodes.push(current);
|
|
282
|
-
}
|
|
283
|
-
return nodes;
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
/*
|
|
287
|
-
* Focus Helpers
|
|
288
|
-
*/
|
|
289
|
-
|
|
290
|
-
const focus = (event, nodeId) => {
|
|
291
|
-
if (nodeId) {
|
|
292
|
-
setFocusedNodeId(nodeId);
|
|
293
|
-
if (onNodeFocus) {
|
|
294
|
-
onNodeFocus(event, nodeId);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
const focusNextNode = (event, nodeId) => focus(event, getNextNode(nodeId));
|
|
299
|
-
const focusPreviousNode = (event, nodeId) => focus(event, getPreviousNode(nodeId));
|
|
300
|
-
const focusFirstNode = event => focus(event, getFirstNode());
|
|
301
|
-
const focusLastNode = event => focus(event, getLastNode());
|
|
302
|
-
const focusByFirstCharacter = (event, nodeId, firstChar) => {
|
|
303
|
-
let start;
|
|
304
|
-
let index;
|
|
305
|
-
const lowercaseChar = firstChar.toLowerCase();
|
|
306
|
-
const firstCharIds = [];
|
|
307
|
-
const firstChars = [];
|
|
308
|
-
// This really only works since the ids are strings
|
|
309
|
-
Object.keys(firstCharMap.current).forEach(mapNodeId => {
|
|
310
|
-
const map = nodeMap.current[mapNodeId];
|
|
311
|
-
const visible = map.parentId ? isExpanded(map.parentId) : true;
|
|
312
|
-
const shouldBeSkipped = disabledItemsFocusable ? false : isDisabled(mapNodeId);
|
|
313
|
-
if (visible && !shouldBeSkipped) {
|
|
314
|
-
firstCharIds.push(mapNodeId);
|
|
315
|
-
firstChars.push(firstCharMap.current[mapNodeId]);
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
// Get start index for search based on position of currentItem
|
|
320
|
-
start = firstCharIds.indexOf(nodeId) + 1;
|
|
321
|
-
if (start >= firstCharIds.length) {
|
|
322
|
-
start = 0;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// Check remaining slots in the menu
|
|
326
|
-
index = findNextFirstChar(firstChars, start, lowercaseChar);
|
|
327
|
-
|
|
328
|
-
// If not found in remaining slots, check from beginning
|
|
329
|
-
if (index === -1) {
|
|
330
|
-
index = findNextFirstChar(firstChars, 0, lowercaseChar);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// If match was found...
|
|
334
|
-
if (index > -1) {
|
|
335
|
-
focus(event, firstCharIds[index]);
|
|
336
|
-
}
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
/*
|
|
340
|
-
* Expansion Helpers
|
|
341
|
-
*/
|
|
342
|
-
|
|
343
|
-
const toggleExpansion = (event, value = focusedNodeId) => {
|
|
344
|
-
if (value == null) {
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
let newExpanded;
|
|
348
|
-
if (expanded.indexOf(value) !== -1) {
|
|
349
|
-
newExpanded = expanded.filter(id => id !== value);
|
|
350
|
-
} else {
|
|
351
|
-
newExpanded = [value].concat(expanded);
|
|
352
|
-
}
|
|
353
|
-
if (onNodeToggle) {
|
|
354
|
-
onNodeToggle(event, newExpanded);
|
|
355
|
-
}
|
|
356
|
-
setExpandedState(newExpanded);
|
|
357
|
-
};
|
|
358
|
-
const expandAllSiblings = (event, nodeId) => {
|
|
359
|
-
const map = nodeMap.current[nodeId];
|
|
360
|
-
const siblings = getChildrenIds(map.parentId);
|
|
361
|
-
const diff = siblings.filter(child => isExpandable(child) && !isExpanded(child));
|
|
362
|
-
const newExpanded = expanded.concat(diff);
|
|
363
|
-
if (diff.length > 0) {
|
|
364
|
-
setExpandedState(newExpanded);
|
|
365
|
-
if (onNodeToggle) {
|
|
366
|
-
onNodeToggle(event, newExpanded);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
/*
|
|
372
|
-
* Selection Helpers
|
|
373
|
-
*/
|
|
374
|
-
|
|
375
|
-
const lastSelectedNode = React.useRef(null);
|
|
376
|
-
const lastSelectionWasRange = React.useRef(false);
|
|
377
|
-
const currentRangeSelection = React.useRef([]);
|
|
378
|
-
const handleRangeArrowSelect = (event, nodes) => {
|
|
379
|
-
let base = selected.slice();
|
|
380
|
-
const {
|
|
381
|
-
start,
|
|
382
|
-
next,
|
|
383
|
-
current
|
|
384
|
-
} = nodes;
|
|
385
|
-
if (!next || !current) {
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
if (currentRangeSelection.current.indexOf(current) === -1) {
|
|
389
|
-
currentRangeSelection.current = [];
|
|
390
|
-
}
|
|
391
|
-
if (lastSelectionWasRange.current) {
|
|
392
|
-
if (currentRangeSelection.current.indexOf(next) !== -1) {
|
|
393
|
-
base = base.filter(id => id === start || id !== current);
|
|
394
|
-
currentRangeSelection.current = currentRangeSelection.current.filter(id => id === start || id !== current);
|
|
395
|
-
} else {
|
|
396
|
-
base.push(next);
|
|
397
|
-
currentRangeSelection.current.push(next);
|
|
398
|
-
}
|
|
399
|
-
} else {
|
|
400
|
-
base.push(next);
|
|
401
|
-
currentRangeSelection.current.push(current, next);
|
|
402
|
-
}
|
|
403
|
-
if (onNodeSelect) {
|
|
404
|
-
onNodeSelect(event, base);
|
|
405
|
-
}
|
|
406
|
-
setSelectedState(base);
|
|
407
|
-
};
|
|
408
|
-
const handleRangeSelect = (event, nodes) => {
|
|
409
|
-
let base = selected.slice();
|
|
410
|
-
const {
|
|
411
|
-
start,
|
|
412
|
-
end
|
|
413
|
-
} = nodes;
|
|
414
|
-
// If last selection was a range selection ignore nodes that were selected.
|
|
415
|
-
if (lastSelectionWasRange.current) {
|
|
416
|
-
base = base.filter(id => currentRangeSelection.current.indexOf(id) === -1);
|
|
417
|
-
}
|
|
418
|
-
let range = getNodesInRange(start, end);
|
|
419
|
-
range = range.filter(node => !isDisabled(node));
|
|
420
|
-
currentRangeSelection.current = range;
|
|
421
|
-
let newSelected = base.concat(range);
|
|
422
|
-
newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
|
|
423
|
-
if (onNodeSelect) {
|
|
424
|
-
onNodeSelect(event, newSelected);
|
|
425
|
-
}
|
|
426
|
-
setSelectedState(newSelected);
|
|
427
|
-
};
|
|
428
|
-
const handleMultipleSelect = (event, nodeId) => {
|
|
429
|
-
if (!Array.isArray(selected)) {
|
|
430
|
-
return;
|
|
431
|
-
}
|
|
432
|
-
let newSelected;
|
|
433
|
-
if (selected.indexOf(nodeId) !== -1) {
|
|
434
|
-
newSelected = selected.filter(id => id !== nodeId);
|
|
435
|
-
} else {
|
|
436
|
-
newSelected = [nodeId].concat(selected);
|
|
437
|
-
}
|
|
438
|
-
if (onNodeSelect) {
|
|
439
|
-
onNodeSelect(event, newSelected);
|
|
440
|
-
}
|
|
441
|
-
setSelectedState(newSelected);
|
|
442
|
-
};
|
|
443
|
-
const handleSingleSelect = (event, nodeId) => {
|
|
444
|
-
const newSelected = multiSelect ? [nodeId] : nodeId;
|
|
445
|
-
if (onNodeSelect) {
|
|
446
|
-
onNodeSelect(event, newSelected);
|
|
447
|
-
}
|
|
448
|
-
setSelectedState(newSelected);
|
|
449
|
-
};
|
|
450
|
-
const selectNode = (event, nodeId, multiple = false) => {
|
|
451
|
-
if (nodeId) {
|
|
452
|
-
if (multiple) {
|
|
453
|
-
handleMultipleSelect(event, nodeId);
|
|
454
|
-
} else {
|
|
455
|
-
handleSingleSelect(event, nodeId);
|
|
456
|
-
}
|
|
457
|
-
lastSelectedNode.current = nodeId;
|
|
458
|
-
lastSelectionWasRange.current = false;
|
|
459
|
-
currentRangeSelection.current = [];
|
|
460
|
-
return true;
|
|
461
|
-
}
|
|
462
|
-
return false;
|
|
463
|
-
};
|
|
464
|
-
const selectRange = (event, nodes, stacked = false) => {
|
|
465
|
-
const {
|
|
466
|
-
start = lastSelectedNode.current,
|
|
467
|
-
end,
|
|
468
|
-
current
|
|
469
|
-
} = nodes;
|
|
470
|
-
if (stacked) {
|
|
471
|
-
handleRangeArrowSelect(event, {
|
|
472
|
-
start,
|
|
473
|
-
next: end,
|
|
474
|
-
current
|
|
475
|
-
});
|
|
476
|
-
} else if (start != null && end != null) {
|
|
477
|
-
handleRangeSelect(event, {
|
|
478
|
-
start,
|
|
479
|
-
end
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
lastSelectionWasRange.current = true;
|
|
483
|
-
};
|
|
484
|
-
const rangeSelectToFirst = (event, id) => {
|
|
485
|
-
if (!lastSelectedNode.current) {
|
|
486
|
-
lastSelectedNode.current = id;
|
|
487
|
-
}
|
|
488
|
-
const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
|
|
489
|
-
selectRange(event, {
|
|
490
|
-
start,
|
|
491
|
-
end: getFirstNode()
|
|
492
|
-
});
|
|
493
|
-
};
|
|
494
|
-
const rangeSelectToLast = (event, id) => {
|
|
495
|
-
if (!lastSelectedNode.current) {
|
|
496
|
-
lastSelectedNode.current = id;
|
|
497
|
-
}
|
|
498
|
-
const start = lastSelectionWasRange.current ? lastSelectedNode.current : id;
|
|
499
|
-
selectRange(event, {
|
|
500
|
-
start,
|
|
501
|
-
end: getLastNode()
|
|
502
|
-
});
|
|
503
|
-
};
|
|
504
|
-
const selectNextNode = (event, id) => {
|
|
505
|
-
if (!isDisabled(getNextNode(id))) {
|
|
506
|
-
selectRange(event, {
|
|
507
|
-
end: getNextNode(id),
|
|
508
|
-
current: id
|
|
509
|
-
}, true);
|
|
510
|
-
}
|
|
511
|
-
};
|
|
512
|
-
const selectPreviousNode = (event, id) => {
|
|
513
|
-
if (!isDisabled(getPreviousNode(id))) {
|
|
514
|
-
selectRange(event, {
|
|
515
|
-
end: getPreviousNode(id),
|
|
516
|
-
current: id
|
|
517
|
-
}, true);
|
|
518
|
-
}
|
|
519
|
-
};
|
|
520
|
-
const selectAllNodes = event => {
|
|
521
|
-
selectRange(event, {
|
|
522
|
-
start: getFirstNode(),
|
|
523
|
-
end: getLastNode()
|
|
524
|
-
});
|
|
525
|
-
};
|
|
526
|
-
|
|
527
|
-
/*
|
|
528
|
-
* Mapping Helpers
|
|
529
|
-
*/
|
|
530
|
-
const registerNode = React.useCallback(node => {
|
|
531
|
-
const {
|
|
532
|
-
id,
|
|
533
|
-
index,
|
|
534
|
-
parentId,
|
|
535
|
-
expandable,
|
|
536
|
-
idAttribute,
|
|
537
|
-
disabled
|
|
538
|
-
} = node;
|
|
539
|
-
nodeMap.current[id] = {
|
|
540
|
-
id,
|
|
541
|
-
index,
|
|
542
|
-
parentId,
|
|
543
|
-
expandable,
|
|
544
|
-
idAttribute,
|
|
545
|
-
disabled
|
|
546
|
-
};
|
|
547
|
-
}, []);
|
|
548
|
-
const unregisterNode = React.useCallback(nodeId => {
|
|
549
|
-
const newMap = (0, _extends2.default)({}, nodeMap.current);
|
|
550
|
-
delete newMap[nodeId];
|
|
551
|
-
nodeMap.current = newMap;
|
|
552
|
-
setFocusedNodeId(oldFocusedNodeId => {
|
|
553
|
-
if (oldFocusedNodeId === nodeId && treeRef.current === (0, _ownerDocument.default)(treeRef.current).activeElement) {
|
|
554
|
-
return getChildrenIds(null)[0];
|
|
555
|
-
}
|
|
556
|
-
return oldFocusedNodeId;
|
|
557
|
-
});
|
|
558
|
-
}, []);
|
|
559
|
-
const mapFirstChar = React.useCallback((nodeId, firstChar) => {
|
|
560
|
-
firstCharMap.current[nodeId] = firstChar;
|
|
561
|
-
}, []);
|
|
562
|
-
const unMapFirstChar = React.useCallback(nodeId => {
|
|
563
|
-
const newMap = (0, _extends2.default)({}, firstCharMap.current);
|
|
564
|
-
delete newMap[nodeId];
|
|
565
|
-
firstCharMap.current = newMap;
|
|
566
|
-
}, []);
|
|
567
|
-
|
|
568
|
-
/**
|
|
569
|
-
* Event handlers and Navigation
|
|
570
|
-
*/
|
|
571
|
-
|
|
572
|
-
const handleNextArrow = event => {
|
|
573
|
-
if (focusedNodeId != null && isExpandable(focusedNodeId)) {
|
|
574
|
-
if (isExpanded(focusedNodeId)) {
|
|
575
|
-
focusNextNode(event, focusedNodeId);
|
|
576
|
-
} else if (!isDisabled(focusedNodeId)) {
|
|
577
|
-
toggleExpansion(event);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
return true;
|
|
581
|
-
};
|
|
582
|
-
const handlePreviousArrow = event => {
|
|
583
|
-
if (focusedNodeId == null) {
|
|
584
|
-
return false;
|
|
585
|
-
}
|
|
586
|
-
if (isExpanded(focusedNodeId) && !isDisabled(focusedNodeId)) {
|
|
587
|
-
toggleExpansion(event, focusedNodeId);
|
|
588
|
-
return true;
|
|
589
|
-
}
|
|
590
|
-
const parent = getParent(focusedNodeId);
|
|
591
|
-
if (parent) {
|
|
592
|
-
focus(event, parent);
|
|
593
|
-
return true;
|
|
594
|
-
}
|
|
595
|
-
return false;
|
|
596
|
-
};
|
|
597
|
-
const handleKeyDown = event => {
|
|
598
|
-
let flag = false;
|
|
599
|
-
const key = event.key;
|
|
600
|
-
|
|
601
|
-
// If the tree is empty there will be no focused node
|
|
602
|
-
if (event.altKey || event.currentTarget !== event.target || !focusedNodeId) {
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
|
-
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
606
|
-
switch (key) {
|
|
607
|
-
case ' ':
|
|
608
|
-
if (!disableSelection && focusedNodeId != null && !isDisabled(focusedNodeId)) {
|
|
609
|
-
if (multiSelect && event.shiftKey) {
|
|
610
|
-
selectRange(event, {
|
|
611
|
-
end: focusedNodeId
|
|
612
|
-
});
|
|
613
|
-
flag = true;
|
|
614
|
-
} else if (multiSelect) {
|
|
615
|
-
flag = selectNode(event, focusedNodeId, true);
|
|
616
|
-
} else {
|
|
617
|
-
flag = selectNode(event, focusedNodeId);
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
event.stopPropagation();
|
|
621
|
-
break;
|
|
622
|
-
case 'Enter':
|
|
623
|
-
if (!isDisabled(focusedNodeId)) {
|
|
624
|
-
if (isExpandable(focusedNodeId)) {
|
|
625
|
-
toggleExpansion(event);
|
|
626
|
-
flag = true;
|
|
627
|
-
} else if (multiSelect) {
|
|
628
|
-
flag = selectNode(event, focusedNodeId, true);
|
|
629
|
-
} else {
|
|
630
|
-
flag = selectNode(event, focusedNodeId);
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
event.stopPropagation();
|
|
634
|
-
break;
|
|
635
|
-
case 'ArrowDown':
|
|
636
|
-
if (multiSelect && event.shiftKey && !disableSelection) {
|
|
637
|
-
selectNextNode(event, focusedNodeId);
|
|
638
|
-
}
|
|
639
|
-
focusNextNode(event, focusedNodeId);
|
|
640
|
-
flag = true;
|
|
641
|
-
break;
|
|
642
|
-
case 'ArrowUp':
|
|
643
|
-
if (multiSelect && event.shiftKey && !disableSelection) {
|
|
644
|
-
selectPreviousNode(event, focusedNodeId);
|
|
645
|
-
}
|
|
646
|
-
focusPreviousNode(event, focusedNodeId);
|
|
647
|
-
flag = true;
|
|
648
|
-
break;
|
|
649
|
-
case 'ArrowRight':
|
|
650
|
-
if (isRtl) {
|
|
651
|
-
flag = handlePreviousArrow(event);
|
|
652
|
-
} else {
|
|
653
|
-
flag = handleNextArrow(event);
|
|
654
|
-
}
|
|
655
|
-
break;
|
|
656
|
-
case 'ArrowLeft':
|
|
657
|
-
if (isRtl) {
|
|
658
|
-
flag = handleNextArrow(event);
|
|
659
|
-
} else {
|
|
660
|
-
flag = handlePreviousArrow(event);
|
|
661
|
-
}
|
|
662
|
-
break;
|
|
663
|
-
case 'Home':
|
|
664
|
-
if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
|
|
665
|
-
rangeSelectToFirst(event, focusedNodeId);
|
|
666
|
-
}
|
|
667
|
-
focusFirstNode(event);
|
|
668
|
-
flag = true;
|
|
669
|
-
break;
|
|
670
|
-
case 'End':
|
|
671
|
-
if (multiSelect && ctrlPressed && event.shiftKey && !disableSelection && !isDisabled(focusedNodeId)) {
|
|
672
|
-
rangeSelectToLast(event, focusedNodeId);
|
|
673
|
-
}
|
|
674
|
-
focusLastNode(event);
|
|
675
|
-
flag = true;
|
|
676
|
-
break;
|
|
677
|
-
default:
|
|
678
|
-
if (key === '*') {
|
|
679
|
-
expandAllSiblings(event, focusedNodeId);
|
|
680
|
-
flag = true;
|
|
681
|
-
} else if (multiSelect && ctrlPressed && key.toLowerCase() === 'a' && !disableSelection) {
|
|
682
|
-
selectAllNodes(event);
|
|
683
|
-
flag = true;
|
|
684
|
-
} else if (!ctrlPressed && !event.shiftKey && isPrintableCharacter(key)) {
|
|
685
|
-
focusByFirstCharacter(event, focusedNodeId, key);
|
|
686
|
-
flag = true;
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
if (flag) {
|
|
690
|
-
event.preventDefault();
|
|
691
|
-
event.stopPropagation();
|
|
692
|
-
}
|
|
693
|
-
if (onKeyDown) {
|
|
694
|
-
onKeyDown(event);
|
|
695
|
-
}
|
|
696
|
-
};
|
|
697
|
-
const handleFocus = event => {
|
|
698
|
-
// if the event bubbled (which is React specific) we don't want to steal focus
|
|
699
|
-
if (event.target === event.currentTarget) {
|
|
700
|
-
const firstSelected = Array.isArray(selected) ? selected[0] : selected;
|
|
701
|
-
focus(event, firstSelected || getNavigableChildrenIds(null)[0]);
|
|
702
|
-
}
|
|
703
|
-
if (onFocus) {
|
|
704
|
-
onFocus(event);
|
|
705
|
-
}
|
|
706
|
-
};
|
|
707
|
-
const handleBlur = event => {
|
|
708
|
-
setFocusedNodeId(null);
|
|
709
|
-
if (onBlur) {
|
|
710
|
-
onBlur(event);
|
|
711
|
-
}
|
|
712
|
-
};
|
|
713
|
-
const activeDescendant = nodeMap.current[focusedNodeId] ? nodeMap.current[focusedNodeId].idAttribute : null;
|
|
714
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewContext.TreeViewContext.Provider, {
|
|
715
|
-
// TODO: fix this lint error
|
|
716
|
-
// eslint-disable-next-line react/jsx-no-constructed-context-values
|
|
717
|
-
value: {
|
|
718
|
-
icons: {
|
|
719
|
-
defaultCollapseIcon,
|
|
720
|
-
defaultExpandIcon,
|
|
721
|
-
defaultParentIcon,
|
|
722
|
-
defaultEndIcon
|
|
723
|
-
},
|
|
724
|
-
focus,
|
|
725
|
-
toggleExpansion,
|
|
726
|
-
isExpanded,
|
|
727
|
-
isExpandable,
|
|
728
|
-
isFocused,
|
|
729
|
-
isSelected,
|
|
730
|
-
isDisabled,
|
|
731
|
-
selectNode: disableSelection ? noopSelection : selectNode,
|
|
732
|
-
selectRange: disableSelection ? noopSelection : selectRange,
|
|
733
|
-
multiSelect,
|
|
734
|
-
disabledItemsFocusable,
|
|
735
|
-
mapFirstChar,
|
|
736
|
-
unMapFirstChar,
|
|
737
|
-
registerNode,
|
|
738
|
-
unregisterNode,
|
|
739
|
-
treeId
|
|
740
|
-
},
|
|
741
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_descendants.DescendantProvider, {
|
|
742
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeViewRoot, (0, _extends2.default)({
|
|
743
|
-
role: "tree",
|
|
744
|
-
id: treeId,
|
|
745
|
-
"aria-activedescendant": activeDescendant ?? undefined,
|
|
746
|
-
"aria-multiselectable": multiSelect,
|
|
747
|
-
className: (0, _clsx.default)(classes.root, className),
|
|
748
|
-
tabIndex: 0,
|
|
749
|
-
onKeyDown: handleKeyDown,
|
|
750
|
-
onFocus: handleFocus,
|
|
751
|
-
onBlur: handleBlur,
|
|
752
|
-
ownerState: props
|
|
753
|
-
}, other, {
|
|
754
|
-
ref: handleRef,
|
|
755
|
-
children: children
|
|
756
|
-
}))
|
|
757
|
-
})
|
|
111
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewProvider.TreeViewProvider, {
|
|
112
|
+
value: contextValue,
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeViewRoot, (0, _extends2.default)({}, rootProps, {
|
|
114
|
+
children: children
|
|
115
|
+
}))
|
|
758
116
|
});
|
|
759
117
|
});
|
|
760
118
|
exports.TreeView = TreeView;
|
|
@@ -786,7 +144,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
786
144
|
defaultEndIcon: _propTypes.default.node,
|
|
787
145
|
/**
|
|
788
146
|
* Expanded node ids.
|
|
789
|
-
* Used when the item's expansion
|
|
147
|
+
* Used when the item's expansion is not controlled.
|
|
790
148
|
* @default []
|
|
791
149
|
*/
|
|
792
150
|
defaultExpanded: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
@@ -804,7 +162,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
804
162
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
805
163
|
* @default []
|
|
806
164
|
*/
|
|
807
|
-
defaultSelected: _propTypes.default
|
|
165
|
+
defaultSelected: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.string]),
|
|
808
166
|
/**
|
|
809
167
|
* If `true`, will allow focus on disabled items.
|
|
810
168
|
* @default false
|
|
@@ -817,7 +175,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
817
175
|
disableSelection: _propTypes.default.bool,
|
|
818
176
|
/**
|
|
819
177
|
* Expanded node ids.
|
|
820
|
-
* Used when the item's expansion
|
|
178
|
+
* Used when the item's expansion is controlled.
|
|
821
179
|
*/
|
|
822
180
|
expanded: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
823
181
|
/**
|
|
@@ -854,7 +212,7 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
854
212
|
* Selected node ids. (Controlled)
|
|
855
213
|
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
856
214
|
*/
|
|
857
|
-
selected: _propTypes.default.
|
|
215
|
+
selected: _propTypes.default.any,
|
|
858
216
|
/**
|
|
859
217
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
860
218
|
*/
|