@mui/x-tree-view 7.0.0-alpha.1 → 7.0.0-alpha.8
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 +1380 -188
- package/README.md +0 -1
- package/RichTreeView/RichTreeView.d.ts +20 -0
- package/RichTreeView/RichTreeView.js +285 -0
- package/RichTreeView/RichTreeView.types.d.ts +55 -0
- package/RichTreeView/RichTreeView.types.js +1 -0
- package/RichTreeView/index.d.ts +3 -0
- package/RichTreeView/index.js +3 -0
- package/RichTreeView/package.json +6 -0
- package/RichTreeView/richTreeViewClasses.d.ts +7 -0
- package/RichTreeView/richTreeViewClasses.js +6 -0
- package/SimpleTreeView/SimpleTreeView.d.ts +20 -0
- package/SimpleTreeView/SimpleTreeView.js +235 -0
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +6 -0
- package/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/SimpleTreeView/SimpleTreeView.types.d.ts +38 -0
- package/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/SimpleTreeView/index.d.ts +3 -0
- package/SimpleTreeView/index.js +3 -0
- package/SimpleTreeView/package.json +6 -0
- package/SimpleTreeView/simpleTreeViewClasses.d.ts +7 -0
- package/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/TreeItem/TreeItem.js +44 -89
- package/TreeItem/TreeItem.types.d.ts +2 -1
- package/TreeItem/index.d.ts +2 -2
- package/TreeItem/index.js +2 -2
- package/TreeItem/useTreeItem.js +5 -5
- package/TreeView/TreeView.d.ts +4 -0
- package/TreeView/TreeView.js +80 -87
- package/TreeView/TreeView.types.d.ts +4 -26
- package/TreeView/index.d.ts +1 -1
- package/index.d.ts +3 -0
- package/index.js +5 -2
- package/internals/TreeViewProvider/TreeViewContext.d.ts +1 -2
- package/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/internals/corePlugins/corePlugins.d.ts +1 -1
- package/internals/corePlugins/corePlugins.js +1 -1
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -5
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
- package/internals/hooks/useLazyRef.d.ts +2 -0
- package/internals/hooks/useLazyRef.js +11 -0
- package/internals/hooks/useOnMount.d.ts +2 -0
- package/internals/hooks/useOnMount.js +7 -0
- package/internals/hooks/useTimeout.d.ts +9 -0
- package/internals/hooks/useTimeout.js +28 -0
- package/internals/models/MuiCancellableEvent.d.ts +4 -0
- package/internals/models/MuiCancellableEvent.js +1 -0
- package/internals/models/plugin.d.ts +24 -0
- package/internals/models/treeView.d.ts +5 -1
- package/internals/plugins/defaultPlugins.d.ts +3 -2
- package/internals/plugins/defaultPlugins.js +2 -1
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +14 -6
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +1 -6
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +12 -5
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -1
- package/internals/plugins/useTreeViewId/index.d.ts +2 -0
- package/internals/plugins/useTreeViewId/index.js +1 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.d.ts +3 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +17 -0
- package/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/index.d.ts +2 -0
- package/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.d.ts +3 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +115 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.d.ts +16 -0
- package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +175 -121
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +5 -2
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -17
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +48 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +1 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +49 -28
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +15 -8
- package/internals/useTreeView/useTreeView.js +40 -3
- package/internals/useTreeView/useTreeView.types.d.ts +2 -1
- package/internals/useTreeView/useTreeViewModels.js +2 -2
- package/internals/utils/extractPluginParamsFromProps.d.ts +13 -0
- package/internals/utils/extractPluginParamsFromProps.js +27 -0
- package/internals/utils/warning.d.ts +1 -0
- package/internals/utils/warning.js +14 -0
- package/legacy/RichTreeView/RichTreeView.js +279 -0
- package/legacy/RichTreeView/RichTreeView.types.js +1 -0
- package/legacy/RichTreeView/index.js +3 -0
- package/legacy/RichTreeView/richTreeViewClasses.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.js +232 -0
- package/legacy/SimpleTreeView/SimpleTreeView.plugins.js +6 -0
- package/legacy/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/legacy/SimpleTreeView/index.js +3 -0
- package/legacy/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/legacy/TreeItem/TreeItem.js +49 -103
- package/legacy/TreeItem/index.js +2 -2
- package/legacy/TreeItem/useTreeItem.js +5 -5
- package/legacy/TreeView/TreeView.js +80 -82
- package/legacy/index.js +5 -2
- package/legacy/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -1
- package/legacy/internals/corePlugins/corePlugins.js +1 -1
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
- package/legacy/internals/hooks/useLazyRef.js +11 -0
- package/legacy/internals/hooks/useOnMount.js +7 -0
- package/legacy/internals/hooks/useTimeout.js +38 -0
- package/legacy/internals/models/MuiCancellableEvent.js +1 -0
- package/legacy/internals/plugins/defaultPlugins.js +2 -1
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +17 -8
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +32 -17
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -6
- package/legacy/internals/plugins/useTreeViewId/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.js +24 -0
- package/legacy/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +121 -0
- package/legacy/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +177 -119
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +96 -20
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +53 -28
- package/legacy/internals/useTreeView/useTreeView.js +39 -3
- package/legacy/internals/useTreeView/useTreeViewModels.js +2 -2
- package/legacy/internals/utils/extractPluginParamsFromProps.js +27 -0
- package/legacy/internals/utils/warning.js +15 -0
- package/legacy/models/index.js +1 -0
- package/legacy/models/items.js +1 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +1 -0
- package/models/items.d.ts +7 -0
- package/models/items.js +1 -0
- package/models/package.json +6 -0
- package/modern/RichTreeView/RichTreeView.js +283 -0
- package/modern/RichTreeView/RichTreeView.types.js +1 -0
- package/modern/RichTreeView/index.js +3 -0
- package/modern/RichTreeView/richTreeViewClasses.js +6 -0
- package/modern/SimpleTreeView/SimpleTreeView.js +234 -0
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +5 -0
- package/modern/SimpleTreeView/SimpleTreeView.types.js +1 -0
- package/modern/SimpleTreeView/index.js +3 -0
- package/modern/SimpleTreeView/simpleTreeViewClasses.js +6 -0
- package/modern/TreeItem/TreeItem.js +44 -88
- package/modern/TreeItem/index.js +2 -2
- package/modern/TreeItem/useTreeItem.js +5 -5
- package/modern/TreeView/TreeView.js +80 -87
- package/modern/index.js +5 -2
- package/modern/internals/TreeViewProvider/TreeViewContext.js +1 -14
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/modern/internals/corePlugins/corePlugins.js +1 -1
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
- package/modern/internals/hooks/useLazyRef.js +11 -0
- package/modern/internals/hooks/useOnMount.js +7 -0
- package/modern/internals/hooks/useTimeout.js +28 -0
- package/modern/internals/models/MuiCancellableEvent.js +1 -0
- package/modern/internals/plugins/defaultPlugins.js +2 -1
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +14 -6
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
- package/modern/internals/plugins/useTreeViewId/index.js +1 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.js +21 -0
- package/modern/internals/plugins/useTreeViewId/useTreeViewId.types.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/index.js +1 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +114 -0
- package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +88 -17
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
- package/modern/internals/useTreeView/useTreeView.js +40 -3
- package/modern/internals/useTreeView/useTreeViewModels.js +2 -2
- package/modern/internals/utils/extractPluginParamsFromProps.js +27 -0
- package/modern/internals/utils/warning.js +14 -0
- package/modern/models/index.js +1 -0
- package/modern/models/items.js +1 -0
- package/node/RichTreeView/RichTreeView.js +291 -0
- package/node/RichTreeView/RichTreeView.types.js +5 -0
- package/node/RichTreeView/index.js +27 -0
- package/node/RichTreeView/richTreeViewClasses.js +14 -0
- package/node/SimpleTreeView/SimpleTreeView.js +242 -0
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +11 -0
- package/node/SimpleTreeView/SimpleTreeView.types.js +5 -0
- package/node/SimpleTreeView/index.js +27 -0
- package/node/SimpleTreeView/simpleTreeViewClasses.js +14 -0
- package/node/TreeItem/TreeItem.js +44 -88
- package/node/TreeItem/index.js +11 -15
- package/node/TreeItem/useTreeItem.js +5 -5
- package/node/TreeView/TreeView.js +80 -87
- package/node/index.js +38 -2
- package/node/internals/TreeViewProvider/TreeViewContext.js +2 -15
- package/node/internals/TreeViewProvider/useTreeViewContext.js +7 -1
- package/node/internals/corePlugins/corePlugins.js +1 -1
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +2 -7
- package/node/internals/hooks/useLazyRef.js +19 -0
- package/node/internals/hooks/useOnMount.js +15 -0
- package/node/internals/hooks/useTimeout.js +34 -0
- package/node/internals/models/MuiCancellableEvent.js +5 -0
- package/node/internals/plugins/defaultPlugins.js +2 -1
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +15 -8
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +33 -18
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +16 -7
- package/node/internals/plugins/useTreeViewId/index.js +12 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +31 -0
- package/node/internals/plugins/useTreeViewId/useTreeViewId.types.js +5 -0
- package/node/internals/plugins/useTreeViewJSXNodes/index.js +12 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +124 -0
- package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +174 -121
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +89 -18
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +50 -29
- package/node/internals/useTreeView/useTreeView.js +40 -3
- package/node/internals/useTreeView/useTreeViewModels.js +2 -2
- package/node/internals/utils/extractPluginParamsFromProps.js +34 -0
- package/node/internals/utils/warning.js +21 -0
- package/node/models/index.js +16 -0
- package/node/models/items.js +5 -0
- package/package.json +8 -7
- package/themeAugmentation/components.d.ts +14 -4
- package/themeAugmentation/overrides.d.ts +8 -4
- package/themeAugmentation/props.d.ts +7 -3
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeViewId = void 0;
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
10
|
+
var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
11
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
12
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
13
|
+
const useTreeViewId = ({
|
|
14
|
+
instance,
|
|
15
|
+
params
|
|
16
|
+
}) => {
|
|
17
|
+
const treeId = (0, _useId.default)(params.id);
|
|
18
|
+
const getTreeItemId = React.useCallback((nodeId, idAttribute) => idAttribute ?? `${treeId}-${nodeId}`, [treeId]);
|
|
19
|
+
(0, _useTreeView.populateInstance)(instance, {
|
|
20
|
+
getTreeItemId
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
getRootProps: () => ({
|
|
24
|
+
id: treeId
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
exports.useTreeViewId = useTreeViewId;
|
|
29
|
+
useTreeViewId.params = {
|
|
30
|
+
id: true
|
|
31
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useTreeViewJSXNodes", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewJSXNodes.useTreeViewJSXNodes;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useTreeViewJSXNodes = require("./useTreeViewJSXNodes");
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTreeViewJSXNodes = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
|
+
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
12
|
+
var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
13
|
+
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
14
|
+
var _useTreeViewContext = require("../../TreeViewProvider/useTreeViewContext");
|
|
15
|
+
var _DescendantProvider = require("../../TreeViewProvider/DescendantProvider");
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
const useTreeViewJSXNodes = ({
|
|
20
|
+
instance,
|
|
21
|
+
setState
|
|
22
|
+
}) => {
|
|
23
|
+
const insertJSXNode = (0, _useEventCallback.default)(node => {
|
|
24
|
+
setState(prevState => (0, _extends2.default)({}, prevState, {
|
|
25
|
+
nodeMap: (0, _extends2.default)({}, prevState.nodeMap, {
|
|
26
|
+
[node.id]: node
|
|
27
|
+
})
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
const removeJSXNode = (0, _useEventCallback.default)(nodeId => {
|
|
31
|
+
setState(prevState => {
|
|
32
|
+
const newMap = (0, _extends2.default)({}, prevState.nodeMap);
|
|
33
|
+
delete newMap[nodeId];
|
|
34
|
+
return (0, _extends2.default)({}, prevState, {
|
|
35
|
+
nodeMap: newMap
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
|
|
39
|
+
id: nodeId
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const mapFirstCharFromJSX = (0, _useEventCallback.default)((nodeId, firstChar) => {
|
|
43
|
+
instance.updateFirstCharMap(firstCharMap => {
|
|
44
|
+
firstCharMap[nodeId] = firstChar;
|
|
45
|
+
return firstCharMap;
|
|
46
|
+
});
|
|
47
|
+
return () => {
|
|
48
|
+
instance.updateFirstCharMap(firstCharMap => {
|
|
49
|
+
const newMap = (0, _extends2.default)({}, firstCharMap);
|
|
50
|
+
delete newMap[nodeId];
|
|
51
|
+
return newMap;
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
(0, _useTreeView.populateInstance)(instance, {
|
|
56
|
+
insertJSXNode,
|
|
57
|
+
removeJSXNode,
|
|
58
|
+
mapFirstCharFromJSX
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
exports.useTreeViewJSXNodes = useTreeViewJSXNodes;
|
|
62
|
+
const useTreeViewJSXNodesItemPlugin = ({
|
|
63
|
+
props,
|
|
64
|
+
ref
|
|
65
|
+
}) => {
|
|
66
|
+
const {
|
|
67
|
+
children,
|
|
68
|
+
disabled = false,
|
|
69
|
+
label,
|
|
70
|
+
nodeId,
|
|
71
|
+
id,
|
|
72
|
+
ContentProps: inContentProps
|
|
73
|
+
} = props;
|
|
74
|
+
const {
|
|
75
|
+
instance
|
|
76
|
+
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
77
|
+
const expandable = Boolean(Array.isArray(children) ? children.length : children);
|
|
78
|
+
const [treeItemElement, setTreeItemElement] = React.useState(null);
|
|
79
|
+
const contentRef = React.useRef(null);
|
|
80
|
+
const handleRef = (0, _useForkRef.default)(setTreeItemElement, ref);
|
|
81
|
+
const descendant = React.useMemo(() => ({
|
|
82
|
+
element: treeItemElement,
|
|
83
|
+
id: nodeId
|
|
84
|
+
}), [nodeId, treeItemElement]);
|
|
85
|
+
const {
|
|
86
|
+
index,
|
|
87
|
+
parentId
|
|
88
|
+
} = (0, _DescendantProvider.useDescendant)(descendant);
|
|
89
|
+
React.useEffect(() => {
|
|
90
|
+
// On the first render a node's index will be -1. We want to wait for the real index.
|
|
91
|
+
if (instance && index !== -1) {
|
|
92
|
+
instance.insertJSXNode({
|
|
93
|
+
id: nodeId,
|
|
94
|
+
idAttribute: id,
|
|
95
|
+
index,
|
|
96
|
+
parentId,
|
|
97
|
+
expandable,
|
|
98
|
+
disabled
|
|
99
|
+
});
|
|
100
|
+
return () => instance.removeJSXNode(nodeId);
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
}, [instance, parentId, index, nodeId, expandable, disabled, id]);
|
|
104
|
+
React.useEffect(() => {
|
|
105
|
+
if (instance && label) {
|
|
106
|
+
return instance.mapFirstCharFromJSX(nodeId, (contentRef.current?.textContent ?? '').substring(0, 1).toLowerCase());
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}, [instance, nodeId, label]);
|
|
110
|
+
return {
|
|
111
|
+
props: (0, _extends2.default)({}, props, {
|
|
112
|
+
ContentProps: (0, _extends2.default)({}, inContentProps, {
|
|
113
|
+
ref: contentRef
|
|
114
|
+
})
|
|
115
|
+
}),
|
|
116
|
+
ref: handleRef,
|
|
117
|
+
wrapItem: item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_DescendantProvider.DescendantProvider, {
|
|
118
|
+
id: nodeId,
|
|
119
|
+
children: item
|
|
120
|
+
})
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
useTreeViewJSXNodes.itemPlugin = useTreeViewJSXNodesItemPlugin;
|
|
124
|
+
useTreeViewJSXNodes.params = {};
|
package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.useTreeViewKeyboardNavigation = void 0;
|
|
8
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
8
|
var React = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _styles = require("@mui/material/styles");
|
|
11
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
@@ -13,7 +12,7 @@ var _useTreeView = require("../../useTreeView/useTreeView.utils");
|
|
|
13
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
13
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
14
|
function isPrintableCharacter(string) {
|
|
16
|
-
return string && string.length === 1 && string.match(/\S/);
|
|
15
|
+
return !!string && string.length === 1 && !!string.match(/\S/);
|
|
17
16
|
}
|
|
18
17
|
function findNextFirstChar(firstChars, startIndex, char) {
|
|
19
18
|
for (let i = startIndex; i < firstChars.length; i += 1) {
|
|
@@ -29,45 +28,31 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
29
28
|
state
|
|
30
29
|
}) => {
|
|
31
30
|
const theme = (0, _styles.useTheme)();
|
|
32
|
-
const
|
|
31
|
+
const isRTL = theme.direction === 'rtl';
|
|
33
32
|
const firstCharMap = React.useRef({});
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
delete newMap[nodeId];
|
|
39
|
-
firstCharMap.current = newMap;
|
|
40
|
-
};
|
|
33
|
+
const hasFirstCharMapBeenUpdatedImperatively = React.useRef(false);
|
|
34
|
+
const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
|
|
35
|
+
hasFirstCharMapBeenUpdatedImperatively.current = true;
|
|
36
|
+
firstCharMap.current = callback(firstCharMap.current);
|
|
41
37
|
});
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
if (hasFirstCharMapBeenUpdatedImperatively.current) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const newFirstCharMap = {};
|
|
43
|
+
const processItem = item => {
|
|
44
|
+
const getItemId = params.getItemId;
|
|
45
|
+
const nodeId = getItemId ? getItemId(item) : item.id;
|
|
46
|
+
newFirstCharMap[nodeId] = instance.getNode(nodeId).label.substring(0, 1).toLowerCase();
|
|
47
|
+
item.children?.forEach(processItem);
|
|
48
|
+
};
|
|
49
|
+
params.items.forEach(processItem);
|
|
50
|
+
firstCharMap.current = newFirstCharMap;
|
|
51
|
+
}, [params.items, params.getItemId, instance]);
|
|
42
52
|
(0, _useTreeView.populateInstance)(instance, {
|
|
43
|
-
|
|
53
|
+
updateFirstCharMap
|
|
44
54
|
});
|
|
45
|
-
const
|
|
46
|
-
if (state.focusedNodeId != null && instance.isNodeExpandable(state.focusedNodeId)) {
|
|
47
|
-
if (instance.isNodeExpanded(state.focusedNodeId)) {
|
|
48
|
-
instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
|
|
49
|
-
} else if (!instance.isNodeDisabled(state.focusedNodeId)) {
|
|
50
|
-
instance.toggleNodeExpansion(event, state.focusedNodeId);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return true;
|
|
54
|
-
};
|
|
55
|
-
const handlePreviousArrow = event => {
|
|
56
|
-
if (state.focusedNodeId == null) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
if (instance.isNodeExpanded(state.focusedNodeId) && !instance.isNodeDisabled(state.focusedNodeId)) {
|
|
60
|
-
instance.toggleNodeExpansion(event, state.focusedNodeId);
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
const parent = instance.getNode(state.focusedNodeId).parentId;
|
|
64
|
-
if (parent) {
|
|
65
|
-
instance.focusNode(event, parent);
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
return false;
|
|
69
|
-
};
|
|
70
|
-
const focusByFirstCharacter = (event, nodeId, firstChar) => {
|
|
55
|
+
const getFirstMatchingNode = (nodeId, firstChar) => {
|
|
71
56
|
let start;
|
|
72
57
|
let index;
|
|
73
58
|
const lowercaseChar = firstChar.toLowerCase();
|
|
@@ -98,41 +83,35 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
98
83
|
index = findNextFirstChar(firstChars, 0, lowercaseChar);
|
|
99
84
|
}
|
|
100
85
|
|
|
101
|
-
// If match was found...
|
|
86
|
+
// If a match was found...
|
|
102
87
|
if (index > -1) {
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
const selectNextNode = (event, id) => {
|
|
107
|
-
if (!instance.isNodeDisabled((0, _useTreeView.getNextNode)(instance, id))) {
|
|
108
|
-
instance.selectRange(event, {
|
|
109
|
-
end: (0, _useTreeView.getNextNode)(instance, id),
|
|
110
|
-
current: id
|
|
111
|
-
}, true);
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
const selectPreviousNode = (event, nodeId) => {
|
|
115
|
-
if (!instance.isNodeDisabled((0, _useTreeView.getPreviousNode)(instance, nodeId))) {
|
|
116
|
-
instance.selectRange(event, {
|
|
117
|
-
end: (0, _useTreeView.getPreviousNode)(instance, nodeId),
|
|
118
|
-
current: nodeId
|
|
119
|
-
}, true);
|
|
88
|
+
return firstCharIds[index];
|
|
120
89
|
}
|
|
90
|
+
return null;
|
|
121
91
|
};
|
|
92
|
+
const canToggleNodeSelection = nodeId => !params.disableSelection && !instance.isNodeDisabled(nodeId);
|
|
93
|
+
const canToggleNodeExpansion = nodeId => !instance.isNodeDisabled(nodeId) && instance.isNodeExpandable(nodeId);
|
|
94
|
+
|
|
95
|
+
// ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
|
|
122
96
|
const createHandleKeyDown = otherHandlers => event => {
|
|
123
97
|
otherHandlers.onKeyDown?.(event);
|
|
124
|
-
|
|
125
|
-
|
|
98
|
+
if (event.defaultMuiPrevented) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
126
101
|
|
|
127
102
|
// If the tree is empty there will be no focused node
|
|
128
103
|
if (event.altKey || event.currentTarget !== event.target || state.focusedNodeId == null) {
|
|
129
104
|
return;
|
|
130
105
|
}
|
|
131
106
|
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
107
|
+
const key = event.key;
|
|
108
|
+
|
|
109
|
+
// eslint-disable-next-line default-case
|
|
110
|
+
switch (true) {
|
|
111
|
+
// Select the node when pressing "Space"
|
|
112
|
+
case key === ' ' && canToggleNodeSelection(state.focusedNodeId):
|
|
113
|
+
{
|
|
114
|
+
event.preventDefault();
|
|
136
115
|
if (params.multiSelect && event.shiftKey) {
|
|
137
116
|
instance.selectRange(event, {
|
|
138
117
|
end: state.focusedNodeId
|
|
@@ -142,85 +121,158 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
142
121
|
} else {
|
|
143
122
|
instance.selectNode(event, state.focusedNodeId);
|
|
144
123
|
}
|
|
124
|
+
break;
|
|
145
125
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
126
|
+
|
|
127
|
+
// If the focused node has children, we expand it.
|
|
128
|
+
// If the focused node has no children, we select it.
|
|
129
|
+
case key === 'Enter':
|
|
130
|
+
{
|
|
131
|
+
if (canToggleNodeExpansion(state.focusedNodeId)) {
|
|
151
132
|
instance.toggleNodeExpansion(event, state.focusedNodeId);
|
|
152
|
-
|
|
153
|
-
} else if (
|
|
154
|
-
flag = true;
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
} else if (canToggleNodeSelection(state.focusedNodeId)) {
|
|
155
135
|
if (params.multiSelect) {
|
|
136
|
+
event.preventDefault();
|
|
156
137
|
instance.selectNode(event, state.focusedNodeId, true);
|
|
157
|
-
} else {
|
|
138
|
+
} else if (!instance.isNodeSelected(state.focusedNodeId)) {
|
|
158
139
|
instance.selectNode(event, state.focusedNodeId);
|
|
140
|
+
event.preventDefault();
|
|
159
141
|
}
|
|
160
142
|
}
|
|
143
|
+
break;
|
|
161
144
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
case 'ArrowDown':
|
|
165
|
-
|
|
166
|
-
|
|
145
|
+
|
|
146
|
+
// Focus the next focusable node
|
|
147
|
+
case key === 'ArrowDown':
|
|
148
|
+
{
|
|
149
|
+
const nextNode = (0, _useTreeView.getNextNode)(instance, state.focusedNodeId);
|
|
150
|
+
if (nextNode) {
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
instance.focusNode(event, nextNode);
|
|
153
|
+
|
|
154
|
+
// Multi select behavior when pressing Shift + ArrowDown
|
|
155
|
+
// Toggles the selection state of the next node
|
|
156
|
+
if (params.multiSelect && event.shiftKey && canToggleNodeSelection(nextNode)) {
|
|
157
|
+
instance.selectRange(event, {
|
|
158
|
+
end: nextNode,
|
|
159
|
+
current: state.focusedNodeId
|
|
160
|
+
}, true);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
167
164
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
165
|
+
|
|
166
|
+
// Focuses the previous focusable node
|
|
167
|
+
case key === 'ArrowUp':
|
|
168
|
+
{
|
|
169
|
+
const previousNode = (0, _useTreeView.getPreviousNode)(instance, state.focusedNodeId);
|
|
170
|
+
if (previousNode) {
|
|
171
|
+
event.preventDefault();
|
|
172
|
+
instance.focusNode(event, previousNode);
|
|
173
|
+
|
|
174
|
+
// Multi select behavior when pressing Shift + ArrowUp
|
|
175
|
+
// Toggles the selection state of the previous node
|
|
176
|
+
if (params.multiSelect && event.shiftKey && canToggleNodeSelection(previousNode)) {
|
|
177
|
+
instance.selectRange(event, {
|
|
178
|
+
end: previousNode,
|
|
179
|
+
current: state.focusedNodeId
|
|
180
|
+
}, true);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
174
184
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
case 'ArrowRight':
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
185
|
+
|
|
186
|
+
// If the focused node is expanded, we move the focus to its first child
|
|
187
|
+
// If the focused node is collapsed and has children, we expand it
|
|
188
|
+
case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
|
|
189
|
+
{
|
|
190
|
+
if (instance.isNodeExpanded(state.focusedNodeId)) {
|
|
191
|
+
instance.focusNode(event, (0, _useTreeView.getNextNode)(instance, state.focusedNodeId));
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
} else if (canToggleNodeExpansion(state.focusedNodeId)) {
|
|
194
|
+
instance.toggleNodeExpansion(event, state.focusedNodeId);
|
|
195
|
+
event.preventDefault();
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
183
198
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
199
|
+
|
|
200
|
+
// If the focused node is expanded, we collapse it
|
|
201
|
+
// If the focused node is collapsed and has a parent, we move the focus to this parent
|
|
202
|
+
case key === 'ArrowLeft' && !isRTL || key === 'ArrowRight' && isRTL:
|
|
203
|
+
{
|
|
204
|
+
if (canToggleNodeExpansion(state.focusedNodeId) && instance.isNodeExpanded(state.focusedNodeId)) {
|
|
205
|
+
instance.toggleNodeExpansion(event, state.focusedNodeId);
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
} else {
|
|
208
|
+
const parent = instance.getNode(state.focusedNodeId).parentId;
|
|
209
|
+
if (parent) {
|
|
210
|
+
instance.focusNode(event, parent);
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
190
215
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
216
|
+
|
|
217
|
+
// Focuses the first node in the tree
|
|
218
|
+
case key === 'Home':
|
|
219
|
+
{
|
|
220
|
+
instance.focusNode(event, (0, _useTreeView.getFirstNode)(instance));
|
|
221
|
+
|
|
222
|
+
// Multi select behavior when pressing Ctrl + Shift + Home
|
|
223
|
+
// Selects the focused node and all nodes up to the first node.
|
|
224
|
+
if (canToggleNodeSelection(state.focusedNodeId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
225
|
+
instance.rangeSelectToFirst(event, state.focusedNodeId);
|
|
226
|
+
}
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
break;
|
|
195
229
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
230
|
+
|
|
231
|
+
// Focuses the last node in the tree
|
|
232
|
+
case key === 'End':
|
|
233
|
+
{
|
|
234
|
+
instance.focusNode(event, (0, _useTreeView.getLastNode)(instance));
|
|
235
|
+
|
|
236
|
+
// Multi select behavior when pressing Ctrl + Shirt + End
|
|
237
|
+
// Selects the focused node and all the nodes down to the last node.
|
|
238
|
+
if (canToggleNodeSelection(state.focusedNodeId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
239
|
+
instance.rangeSelectToLast(event, state.focusedNodeId);
|
|
240
|
+
}
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
break;
|
|
202
243
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if (key === '*') {
|
|
244
|
+
|
|
245
|
+
// Expand all siblings that are at the same level as the focused node
|
|
246
|
+
case key === '*':
|
|
247
|
+
{
|
|
208
248
|
instance.expandAllSiblings(event, state.focusedNodeId);
|
|
209
|
-
|
|
210
|
-
|
|
249
|
+
event.preventDefault();
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Multi select behavior when pressing Ctrl + a
|
|
254
|
+
// Selects all the nodes
|
|
255
|
+
case key === 'a' && ctrlPressed && params.multiSelect && !params.disableSelection:
|
|
256
|
+
{
|
|
211
257
|
instance.selectRange(event, {
|
|
212
258
|
start: (0, _useTreeView.getFirstNode)(instance),
|
|
213
259
|
end: (0, _useTreeView.getLastNode)(instance)
|
|
214
260
|
});
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
261
|
+
event.preventDefault();
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Type-ahead
|
|
266
|
+
// TODO: Support typing multiple characters
|
|
267
|
+
case !ctrlPressed && !event.shiftKey && isPrintableCharacter(key):
|
|
268
|
+
{
|
|
269
|
+
const matchingNode = getFirstMatchingNode(state.focusedNodeId, key);
|
|
270
|
+
if (matchingNode != null) {
|
|
271
|
+
instance.focusNode(event, matchingNode);
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
}
|
|
274
|
+
break;
|
|
219
275
|
}
|
|
220
|
-
}
|
|
221
|
-
if (flag) {
|
|
222
|
-
event.preventDefault();
|
|
223
|
-
event.stopPropagation();
|
|
224
276
|
}
|
|
225
277
|
};
|
|
226
278
|
return {
|
|
@@ -229,4 +281,5 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
229
281
|
})
|
|
230
282
|
};
|
|
231
283
|
};
|
|
232
|
-
exports.useTreeViewKeyboardNavigation = useTreeViewKeyboardNavigation;
|
|
284
|
+
exports.useTreeViewKeyboardNavigation = useTreeViewKeyboardNavigation;
|
|
285
|
+
useTreeViewKeyboardNavigation.params = {};
|