@mui/x-tree-view 7.5.1 → 7.6.1
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 +112 -1
- package/RichTreeView/RichTreeView.js +14 -0
- package/RichTreeView/RichTreeView.types.d.ts +7 -1
- package/SimpleTreeView/SimpleTreeView.js +14 -0
- package/SimpleTreeView/SimpleTreeView.types.d.ts +7 -1
- package/TreeItem/TreeItem.js +35 -7
- package/TreeItem/TreeItem.types.d.ts +1 -0
- package/TreeItem2/TreeItem2.d.ts +12 -6
- package/TreeItem2/TreeItem2.js +21 -10
- package/TreeItem2Provider/TreeItem2Provider.js +4 -2
- package/TreeView/TreeView.js +14 -0
- package/index.js +1 -1
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -0
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.js +5 -0
- package/internals/TreeViewItemDepthContext/index.d.ts +1 -0
- package/internals/TreeViewItemDepthContext/index.js +1 -0
- package/internals/TreeViewProvider/TreeViewContext.d.ts +2 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -2
- package/internals/index.d.ts +1 -1
- package/internals/models/helpers.d.ts +1 -0
- package/internals/models/plugin.d.ts +12 -5
- package/internals/models/treeView.d.ts +8 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +28 -4
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +11 -26
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +20 -5
- package/internals/plugins/useTreeViewId/useTreeViewId.types.d.ts +10 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +29 -8
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +50 -7
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +34 -25
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +22 -4
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +14 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -0
- package/internals/useTreeView/useTreeView.js +8 -3
- package/internals/useTreeView/useTreeView.types.d.ts +2 -1
- package/internals/utils/extractPluginParamsFromProps.d.ts +3 -2
- package/internals/utils/extractPluginParamsFromProps.js +4 -2
- package/internals/utils/tree.js +18 -1
- package/modern/RichTreeView/RichTreeView.js +14 -0
- package/modern/SimpleTreeView/SimpleTreeView.js +14 -0
- package/modern/TreeItem/TreeItem.js +35 -7
- package/modern/TreeItem2/TreeItem2.js +21 -10
- package/modern/TreeItem2Provider/TreeItem2Provider.js +4 -2
- package/modern/TreeView/TreeView.js +14 -0
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.js +5 -0
- package/modern/internals/TreeViewItemDepthContext/index.js +1 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +11 -26
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +29 -8
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +34 -25
- package/modern/internals/useTreeView/useTreeView.js +8 -3
- package/modern/internals/utils/extractPluginParamsFromProps.js +4 -2
- package/modern/internals/utils/tree.js +18 -1
- package/modern/useTreeItem2/useTreeItem2.js +20 -3
- package/node/RichTreeView/RichTreeView.js +14 -0
- package/node/SimpleTreeView/SimpleTreeView.js +14 -0
- package/node/TreeItem/TreeItem.js +35 -7
- package/node/TreeItem2/TreeItem2.js +20 -9
- package/node/TreeItem2Provider/TreeItem2Provider.js +4 -2
- package/node/TreeView/TreeView.js +14 -0
- package/node/index.js +1 -1
- package/node/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.js +13 -0
- package/node/internals/TreeViewItemDepthContext/index.js +12 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +11 -26
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +29 -8
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +34 -25
- package/node/internals/useTreeView/useTreeView.js +8 -3
- package/node/internals/utils/extractPluginParamsFromProps.js +4 -2
- package/node/internals/utils/tree.js +18 -1
- package/node/useTreeItem2/useTreeItem2.js +20 -3
- package/package.json +3 -3
- package/useTreeItem2/useTreeItem2.js +20 -3
- package/useTreeItem2/useTreeItem2.types.d.ts +12 -0
|
@@ -9,6 +9,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
11
11
|
var _useTreeViewItems = require("./useTreeViewItems.utils");
|
|
12
|
+
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
14
|
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); }
|
|
13
15
|
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 && {}.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; }
|
|
14
16
|
const updateItemsState = ({
|
|
@@ -22,7 +24,7 @@ const updateItemsState = ({
|
|
|
22
24
|
const itemOrderedChildrenIds = {
|
|
23
25
|
[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID]: []
|
|
24
26
|
};
|
|
25
|
-
const processItem = (item, parentId) => {
|
|
27
|
+
const processItem = (item, depth, parentId) => {
|
|
26
28
|
const id = getItemId ? getItemId(item) : item.id;
|
|
27
29
|
if (id == null) {
|
|
28
30
|
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', 'An item was provided without id in the `items` prop:', JSON.stringify(item)].join('\n'));
|
|
@@ -40,7 +42,8 @@ const updateItemsState = ({
|
|
|
40
42
|
parentId,
|
|
41
43
|
idAttribute: undefined,
|
|
42
44
|
expandable: !!item.children?.length,
|
|
43
|
-
disabled: isItemDisabled ? isItemDisabled(item) : false
|
|
45
|
+
disabled: isItemDisabled ? isItemDisabled(item) : false,
|
|
46
|
+
depth
|
|
44
47
|
};
|
|
45
48
|
itemMap[id] = item;
|
|
46
49
|
itemOrderedChildrenIds[id] = [];
|
|
@@ -49,9 +52,9 @@ const updateItemsState = ({
|
|
|
49
52
|
itemOrderedChildrenIds[parentIdWithDefault] = [];
|
|
50
53
|
}
|
|
51
54
|
itemOrderedChildrenIds[parentIdWithDefault].push(id);
|
|
52
|
-
item.children?.forEach(child => processItem(child, id));
|
|
55
|
+
item.children?.forEach(child => processItem(child, depth + 1, id));
|
|
53
56
|
};
|
|
54
|
-
items.forEach(item => processItem(item, null));
|
|
57
|
+
items.forEach(item => processItem(item, 0, null));
|
|
55
58
|
const itemChildrenIndexes = {};
|
|
56
59
|
Object.keys(itemOrderedChildrenIds).forEach(parentId => {
|
|
57
60
|
itemChildrenIndexes[parentId] = (0, _useTreeViewItems.buildSiblingIndexes)(itemOrderedChildrenIds[parentId]);
|
|
@@ -67,7 +70,8 @@ const useTreeViewItems = ({
|
|
|
67
70
|
instance,
|
|
68
71
|
params,
|
|
69
72
|
state,
|
|
70
|
-
setState
|
|
73
|
+
setState,
|
|
74
|
+
experimentalFeatures
|
|
71
75
|
}) => {
|
|
72
76
|
const getItemMeta = React.useCallback(itemId => state.items.itemMetaMap[itemId], [state.items.itemMetaMap]);
|
|
73
77
|
const getItem = React.useCallback(itemId => state.items.itemMap[itemId], [state.items.itemMap]);
|
|
@@ -144,6 +148,11 @@ const useTreeViewItems = ({
|
|
|
144
148
|
return state.items.itemOrderedChildrenIds[_useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID].map(getPropsFromItemId);
|
|
145
149
|
};
|
|
146
150
|
return {
|
|
151
|
+
getRootProps: () => ({
|
|
152
|
+
style: {
|
|
153
|
+
'--TreeView-itemChildrenIndentation': typeof params.itemChildrenIndentation === 'number' ? `${params.itemChildrenIndentation}px` : params.itemChildrenIndentation
|
|
154
|
+
}
|
|
155
|
+
}),
|
|
147
156
|
publicAPI: {
|
|
148
157
|
getItem
|
|
149
158
|
},
|
|
@@ -159,7 +168,8 @@ const useTreeViewItems = ({
|
|
|
159
168
|
areItemUpdatesPrevented
|
|
160
169
|
},
|
|
161
170
|
contextValue: {
|
|
162
|
-
disabledItemsFocusable: params.disabledItemsFocusable
|
|
171
|
+
disabledItemsFocusable: params.disabledItemsFocusable,
|
|
172
|
+
indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
|
|
163
173
|
}
|
|
164
174
|
};
|
|
165
175
|
};
|
|
@@ -173,12 +183,23 @@ useTreeViewItems.getInitialState = params => ({
|
|
|
173
183
|
})
|
|
174
184
|
});
|
|
175
185
|
useTreeViewItems.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
|
|
176
|
-
disabledItemsFocusable: params.disabledItemsFocusable ?? false
|
|
186
|
+
disabledItemsFocusable: params.disabledItemsFocusable ?? false,
|
|
187
|
+
itemChildrenIndentation: params.itemChildrenIndentation ?? '12px'
|
|
177
188
|
});
|
|
189
|
+
useTreeViewItems.wrapRoot = ({
|
|
190
|
+
children,
|
|
191
|
+
instance
|
|
192
|
+
}) => {
|
|
193
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
194
|
+
value: itemId => instance.getItemMeta(itemId)?.depth ?? 0,
|
|
195
|
+
children: children
|
|
196
|
+
});
|
|
197
|
+
};
|
|
178
198
|
useTreeViewItems.params = {
|
|
179
199
|
disabledItemsFocusable: true,
|
|
180
200
|
items: true,
|
|
181
201
|
isItemDisabled: true,
|
|
182
202
|
getItemLabel: true,
|
|
183
|
-
getItemId: true
|
|
203
|
+
getItemId: true,
|
|
204
|
+
itemChildrenIndentation: true
|
|
184
205
|
};
|
|
@@ -14,6 +14,7 @@ var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
|
14
14
|
var _useTreeViewContext = require("../../TreeViewProvider/useTreeViewContext");
|
|
15
15
|
var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider");
|
|
16
16
|
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
|
|
17
|
+
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
17
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
19
|
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); }
|
|
19
20
|
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 && {}.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; }
|
|
@@ -42,6 +43,23 @@ const useTreeViewJSXItems = ({
|
|
|
42
43
|
})
|
|
43
44
|
});
|
|
44
45
|
});
|
|
46
|
+
return () => {
|
|
47
|
+
setState(prevState => {
|
|
48
|
+
const newItemMetaMap = (0, _extends2.default)({}, prevState.items.itemMetaMap);
|
|
49
|
+
const newItemMap = (0, _extends2.default)({}, prevState.items.itemMap);
|
|
50
|
+
delete newItemMetaMap[item.id];
|
|
51
|
+
delete newItemMap[item.id];
|
|
52
|
+
return (0, _extends2.default)({}, prevState, {
|
|
53
|
+
items: (0, _extends2.default)({}, prevState.items, {
|
|
54
|
+
itemMetaMap: newItemMetaMap,
|
|
55
|
+
itemMap: newItemMap
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
60
|
+
id: item.id
|
|
61
|
+
});
|
|
62
|
+
};
|
|
45
63
|
});
|
|
46
64
|
const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
|
|
47
65
|
const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
|
|
@@ -56,23 +74,6 @@ const useTreeViewJSXItems = ({
|
|
|
56
74
|
})
|
|
57
75
|
}));
|
|
58
76
|
};
|
|
59
|
-
const removeJSXItem = (0, _useEventCallback.default)(itemId => {
|
|
60
|
-
setState(prevState => {
|
|
61
|
-
const newItemMetaMap = (0, _extends2.default)({}, prevState.items.itemMetaMap);
|
|
62
|
-
const newItemMap = (0, _extends2.default)({}, prevState.items.itemMap);
|
|
63
|
-
delete newItemMetaMap[itemId];
|
|
64
|
-
delete newItemMap[itemId];
|
|
65
|
-
return (0, _extends2.default)({}, prevState, {
|
|
66
|
-
items: (0, _extends2.default)({}, prevState.items, {
|
|
67
|
-
itemMetaMap: newItemMetaMap,
|
|
68
|
-
itemMap: newItemMap
|
|
69
|
-
})
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
(0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeItem', {
|
|
73
|
-
id: itemId
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
77
|
const mapFirstCharFromJSX = (0, _useEventCallback.default)((itemId, firstChar) => {
|
|
77
78
|
instance.updateFirstCharMap(firstCharMap => {
|
|
78
79
|
firstCharMap[itemId] = firstChar;
|
|
@@ -89,7 +90,6 @@ const useTreeViewJSXItems = ({
|
|
|
89
90
|
return {
|
|
90
91
|
instance: {
|
|
91
92
|
insertJSXItem,
|
|
92
|
-
removeJSXItem,
|
|
93
93
|
setJSXItemsOrderedChildrenIds,
|
|
94
94
|
mapFirstCharFromJSX
|
|
95
95
|
}
|
|
@@ -139,14 +139,13 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
139
139
|
};
|
|
140
140
|
}, [instance, registerChild, unregisterChild, itemId, id]);
|
|
141
141
|
React.useEffect(() => {
|
|
142
|
-
instance.insertJSXItem({
|
|
142
|
+
return instance.insertJSXItem({
|
|
143
143
|
id: itemId,
|
|
144
144
|
idAttribute: id,
|
|
145
145
|
parentId,
|
|
146
146
|
expandable,
|
|
147
147
|
disabled
|
|
148
148
|
});
|
|
149
|
-
return () => instance.removeJSXItem(itemId);
|
|
150
149
|
}, [instance, parentId, itemId, expandable, disabled, id]);
|
|
151
150
|
React.useEffect(() => {
|
|
152
151
|
if (label) {
|
|
@@ -163,13 +162,23 @@ useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
|
|
|
163
162
|
useTreeViewJSXItems.wrapItem = ({
|
|
164
163
|
children,
|
|
165
164
|
itemId
|
|
166
|
-
}) =>
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
}) => {
|
|
166
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
167
|
+
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
168
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
|
|
169
|
+
itemId: itemId,
|
|
170
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
171
|
+
value: depthContext + 1,
|
|
172
|
+
children: children
|
|
173
|
+
})
|
|
174
|
+
});
|
|
175
|
+
};
|
|
170
176
|
useTreeViewJSXItems.wrapRoot = ({
|
|
171
177
|
children
|
|
172
178
|
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, {
|
|
173
|
-
children:
|
|
179
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, {
|
|
180
|
+
value: 0,
|
|
181
|
+
children: children
|
|
182
|
+
})
|
|
174
183
|
});
|
|
175
184
|
useTreeViewJSXItems.params = {};
|
|
@@ -58,6 +58,7 @@ const useTreeView = inParams => {
|
|
|
58
58
|
params,
|
|
59
59
|
slots: params.slots,
|
|
60
60
|
slotProps: params.slotProps,
|
|
61
|
+
experimentalFeatures: params.experimentalFeatures,
|
|
61
62
|
state,
|
|
62
63
|
setState,
|
|
63
64
|
rootRef: innerRootRef,
|
|
@@ -110,19 +111,23 @@ const useTreeView = inParams => {
|
|
|
110
111
|
itemWrappers.forEach(itemWrapper => {
|
|
111
112
|
finalChildren = itemWrapper({
|
|
112
113
|
itemId,
|
|
113
|
-
children: finalChildren
|
|
114
|
+
children: finalChildren,
|
|
115
|
+
instance
|
|
114
116
|
});
|
|
115
117
|
});
|
|
116
118
|
return finalChildren;
|
|
117
119
|
};
|
|
118
|
-
const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
|
|
120
|
+
const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
|
|
121
|
+
// The wrappers are reversed to ensure that the first wrapper is the outermost one.
|
|
122
|
+
.reverse();
|
|
119
123
|
contextValue.wrapRoot = ({
|
|
120
124
|
children
|
|
121
125
|
}) => {
|
|
122
126
|
let finalChildren = children;
|
|
123
127
|
rootWrappers.forEach(rootWrapper => {
|
|
124
128
|
finalChildren = rootWrapper({
|
|
125
|
-
children: finalChildren
|
|
129
|
+
children: finalChildren,
|
|
130
|
+
instance
|
|
126
131
|
});
|
|
127
132
|
});
|
|
128
133
|
return finalChildren;
|
|
@@ -6,13 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.extractPluginParamsFromProps = void 0;
|
|
8
8
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
|
-
const _excluded = ["slots", "slotProps", "apiRef"];
|
|
9
|
+
const _excluded = ["slots", "slotProps", "apiRef", "experimentalFeatures"];
|
|
10
10
|
const extractPluginParamsFromProps = _ref => {
|
|
11
11
|
let {
|
|
12
12
|
props: {
|
|
13
13
|
slots,
|
|
14
14
|
slotProps,
|
|
15
|
-
apiRef
|
|
15
|
+
apiRef,
|
|
16
|
+
experimentalFeatures
|
|
16
17
|
},
|
|
17
18
|
plugins,
|
|
18
19
|
rootRef
|
|
@@ -27,6 +28,7 @@ const extractPluginParamsFromProps = _ref => {
|
|
|
27
28
|
rootRef,
|
|
28
29
|
slots: slots ?? {},
|
|
29
30
|
slotProps: slotProps ?? {},
|
|
31
|
+
experimentalFeatures: experimentalFeatures ?? {},
|
|
30
32
|
apiRef
|
|
31
33
|
};
|
|
32
34
|
const otherProps = {};
|
|
@@ -24,7 +24,24 @@ const getPreviousNavigableItem = (instance, itemId) => {
|
|
|
24
24
|
if (itemIndex === 0) {
|
|
25
25
|
return itemMeta.parentId;
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
// Finds the previous navigable sibling.
|
|
29
|
+
let previousNavigableSiblingIndex = itemIndex - 1;
|
|
30
|
+
while (!instance.isItemNavigable(siblings[previousNavigableSiblingIndex]) && previousNavigableSiblingIndex >= 0) {
|
|
31
|
+
previousNavigableSiblingIndex -= 1;
|
|
32
|
+
}
|
|
33
|
+
if (previousNavigableSiblingIndex === -1) {
|
|
34
|
+
// If we are at depth 0, then it means all the items above the current item are not navigable.
|
|
35
|
+
if (itemMeta.parentId == null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Otherwise, we can try to go up a level and find the previous navigable item.
|
|
40
|
+
return getPreviousNavigableItem(instance, itemMeta.parentId);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Finds the last navigable ancestor of the previous navigable sibling.
|
|
44
|
+
let currentItemId = siblings[previousNavigableSiblingIndex];
|
|
28
45
|
let lastNavigableChild = getLastNavigableItemInArray(instance, instance.getItemOrderedChildrenIds(currentItemId));
|
|
29
46
|
while (instance.isItemExpanded(currentItemId) && lastNavigableChild != null) {
|
|
30
47
|
currentItemId = lastNavigableChild;
|
|
@@ -11,6 +11,7 @@ var _utils = require("@mui/base/utils");
|
|
|
11
11
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
12
12
|
var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
|
|
13
13
|
var _useTreeItem2Utils = require("../hooks/useTreeItem2Utils");
|
|
14
|
+
var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
|
|
14
15
|
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); }
|
|
15
16
|
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 && {}.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; }
|
|
16
17
|
const useTreeItem2 = parameters => {
|
|
@@ -22,9 +23,11 @@ const useTreeItem2 = parameters => {
|
|
|
22
23
|
checkboxSelection
|
|
23
24
|
},
|
|
24
25
|
disabledItemsFocusable,
|
|
26
|
+
indentationAtItemLevel,
|
|
25
27
|
instance,
|
|
26
28
|
publicAPI
|
|
27
29
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
30
|
+
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
28
31
|
const {
|
|
29
32
|
id,
|
|
30
33
|
itemId,
|
|
@@ -115,7 +118,7 @@ const useTreeItem2 = parameters => {
|
|
|
115
118
|
*/
|
|
116
119
|
ariaSelected = true;
|
|
117
120
|
}
|
|
118
|
-
|
|
121
|
+
const response = (0, _extends2.default)({}, externalEventHandlers, {
|
|
119
122
|
ref: handleRootRef,
|
|
120
123
|
role: 'treeitem',
|
|
121
124
|
tabIndex: instance.canItemBeTabbed(itemId) ? 0 : -1,
|
|
@@ -128,15 +131,25 @@ const useTreeItem2 = parameters => {
|
|
|
128
131
|
onBlur: createRootHandleBlur(externalEventHandlers),
|
|
129
132
|
onKeyDown: createRootHandleKeyDown(externalEventHandlers)
|
|
130
133
|
});
|
|
134
|
+
if (indentationAtItemLevel) {
|
|
135
|
+
response.style = {
|
|
136
|
+
'--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return response;
|
|
131
140
|
};
|
|
132
141
|
const getContentProps = (externalProps = {}) => {
|
|
133
142
|
const externalEventHandlers = (0, _utils.extractEventHandlers)(externalProps);
|
|
134
|
-
|
|
143
|
+
const response = (0, _extends2.default)({}, externalEventHandlers, externalProps, {
|
|
135
144
|
ref: contentRef,
|
|
136
145
|
onClick: createContentHandleClick(externalEventHandlers),
|
|
137
146
|
onMouseDown: createContentHandleMouseDown(externalEventHandlers),
|
|
138
147
|
status
|
|
139
148
|
});
|
|
149
|
+
if (indentationAtItemLevel) {
|
|
150
|
+
response.indentationAtItemLevel = true;
|
|
151
|
+
}
|
|
152
|
+
return response;
|
|
140
153
|
};
|
|
141
154
|
const getCheckboxProps = (externalProps = {}) => {
|
|
142
155
|
const externalEventHandlers = (0, _utils.extractEventHandlers)(externalProps);
|
|
@@ -162,13 +175,17 @@ const useTreeItem2 = parameters => {
|
|
|
162
175
|
};
|
|
163
176
|
const getGroupTransitionProps = (externalProps = {}) => {
|
|
164
177
|
const externalEventHandlers = (0, _utils.extractEventHandlers)(externalProps);
|
|
165
|
-
|
|
178
|
+
const response = (0, _extends2.default)({}, externalEventHandlers, {
|
|
166
179
|
unmountOnExit: true,
|
|
167
180
|
component: 'ul',
|
|
168
181
|
role: 'group',
|
|
169
182
|
in: status.expanded,
|
|
170
183
|
children
|
|
171
184
|
}, externalProps);
|
|
185
|
+
if (indentationAtItemLevel) {
|
|
186
|
+
response.indentationAtItemLevel = true;
|
|
187
|
+
}
|
|
188
|
+
return response;
|
|
172
189
|
};
|
|
173
190
|
return {
|
|
174
191
|
getRootProps,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-tree-view",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.6.1",
|
|
4
4
|
"description": "The community edition of the Tree View components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"directory": "packages/x-tree-view"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@babel/runtime": "^7.24.
|
|
36
|
+
"@babel/runtime": "^7.24.6",
|
|
37
37
|
"@mui/base": "^5.0.0-beta.40",
|
|
38
|
-
"@mui/system": "^5.15.
|
|
38
|
+
"@mui/system": "^5.15.15",
|
|
39
39
|
"@mui/utils": "^5.15.14",
|
|
40
40
|
"@types/react-transition-group": "^4.4.10",
|
|
41
41
|
"clsx": "^2.1.1",
|
|
@@ -4,6 +4,7 @@ import { extractEventHandlers } from '@mui/base/utils';
|
|
|
4
4
|
import useForkRef from '@mui/utils/useForkRef';
|
|
5
5
|
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
6
6
|
import { useTreeItem2Utils } from '../hooks/useTreeItem2Utils';
|
|
7
|
+
import { TreeViewItemDepthContext } from '../internals/TreeViewItemDepthContext';
|
|
7
8
|
export const useTreeItem2 = parameters => {
|
|
8
9
|
const {
|
|
9
10
|
runItemPlugins,
|
|
@@ -13,9 +14,11 @@ export const useTreeItem2 = parameters => {
|
|
|
13
14
|
checkboxSelection
|
|
14
15
|
},
|
|
15
16
|
disabledItemsFocusable,
|
|
17
|
+
indentationAtItemLevel,
|
|
16
18
|
instance,
|
|
17
19
|
publicAPI
|
|
18
20
|
} = useTreeViewContext();
|
|
21
|
+
const depthContext = React.useContext(TreeViewItemDepthContext);
|
|
19
22
|
const {
|
|
20
23
|
id,
|
|
21
24
|
itemId,
|
|
@@ -106,7 +109,7 @@ export const useTreeItem2 = parameters => {
|
|
|
106
109
|
*/
|
|
107
110
|
ariaSelected = true;
|
|
108
111
|
}
|
|
109
|
-
|
|
112
|
+
const response = _extends({}, externalEventHandlers, {
|
|
110
113
|
ref: handleRootRef,
|
|
111
114
|
role: 'treeitem',
|
|
112
115
|
tabIndex: instance.canItemBeTabbed(itemId) ? 0 : -1,
|
|
@@ -119,15 +122,25 @@ export const useTreeItem2 = parameters => {
|
|
|
119
122
|
onBlur: createRootHandleBlur(externalEventHandlers),
|
|
120
123
|
onKeyDown: createRootHandleKeyDown(externalEventHandlers)
|
|
121
124
|
});
|
|
125
|
+
if (indentationAtItemLevel) {
|
|
126
|
+
response.style = {
|
|
127
|
+
'--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return response;
|
|
122
131
|
};
|
|
123
132
|
const getContentProps = (externalProps = {}) => {
|
|
124
133
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
125
|
-
|
|
134
|
+
const response = _extends({}, externalEventHandlers, externalProps, {
|
|
126
135
|
ref: contentRef,
|
|
127
136
|
onClick: createContentHandleClick(externalEventHandlers),
|
|
128
137
|
onMouseDown: createContentHandleMouseDown(externalEventHandlers),
|
|
129
138
|
status
|
|
130
139
|
});
|
|
140
|
+
if (indentationAtItemLevel) {
|
|
141
|
+
response.indentationAtItemLevel = true;
|
|
142
|
+
}
|
|
143
|
+
return response;
|
|
131
144
|
};
|
|
132
145
|
const getCheckboxProps = (externalProps = {}) => {
|
|
133
146
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
@@ -153,13 +166,17 @@ export const useTreeItem2 = parameters => {
|
|
|
153
166
|
};
|
|
154
167
|
const getGroupTransitionProps = (externalProps = {}) => {
|
|
155
168
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
156
|
-
|
|
169
|
+
const response = _extends({}, externalEventHandlers, {
|
|
157
170
|
unmountOnExit: true,
|
|
158
171
|
component: 'ul',
|
|
159
172
|
role: 'group',
|
|
160
173
|
in: status.expanded,
|
|
161
174
|
children
|
|
162
175
|
}, externalProps);
|
|
176
|
+
if (indentationAtItemLevel) {
|
|
177
|
+
response.indentationAtItemLevel = true;
|
|
178
|
+
}
|
|
179
|
+
return response;
|
|
163
180
|
};
|
|
164
181
|
return {
|
|
165
182
|
getRootProps,
|
|
@@ -38,6 +38,10 @@ export interface UseTreeItem2RootSlotOwnProps {
|
|
|
38
38
|
onBlur: MuiCancellableEventHandler<React.FocusEvent<HTMLElement>>;
|
|
39
39
|
onKeyDown: MuiCancellableEventHandler<React.KeyboardEvent<HTMLElement>>;
|
|
40
40
|
ref: React.RefCallback<HTMLLIElement>;
|
|
41
|
+
/**
|
|
42
|
+
* Only defined when the `indentationAtItemLevel` experimental feature is enabled.
|
|
43
|
+
*/
|
|
44
|
+
style?: React.CSSProperties;
|
|
41
45
|
}
|
|
42
46
|
export type UseTreeItem2RootSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2RootSlotOwnProps;
|
|
43
47
|
export interface UseTreeItem2ContentSlotOwnProps {
|
|
@@ -45,6 +49,10 @@ export interface UseTreeItem2ContentSlotOwnProps {
|
|
|
45
49
|
onMouseDown: MuiCancellableEventHandler<React.MouseEvent>;
|
|
46
50
|
ref: React.RefCallback<HTMLDivElement> | null;
|
|
47
51
|
status: UseTreeItem2Status;
|
|
52
|
+
/**
|
|
53
|
+
* Only defined when the `indentationAtItemLevel` experimental feature is enabled.
|
|
54
|
+
*/
|
|
55
|
+
indentationAtItemLevel?: true;
|
|
48
56
|
}
|
|
49
57
|
export type UseTreeItem2ContentSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2ContentSlotOwnProps;
|
|
50
58
|
export interface UseTreeItem2IconContainerSlotOwnProps {
|
|
@@ -69,6 +77,10 @@ export interface UseTreeItem2GroupTransitionSlotOwnProps {
|
|
|
69
77
|
component: 'ul';
|
|
70
78
|
role: 'group';
|
|
71
79
|
children: React.ReactNode;
|
|
80
|
+
/**
|
|
81
|
+
* Only defined when the `indentationAtItemLevel` experimental feature is enabled.
|
|
82
|
+
*/
|
|
83
|
+
indentationAtItemLevel?: true;
|
|
72
84
|
}
|
|
73
85
|
export type UseTreeItem2GroupTransitionSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2GroupTransitionSlotOwnProps;
|
|
74
86
|
export interface UseTreeItem2Status {
|