@mui/x-tree-view 7.5.0 → 7.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +148 -5418
- package/RichTreeView/RichTreeView.js +15 -1
- package/RichTreeView/RichTreeView.types.d.ts +7 -1
- package/SimpleTreeView/SimpleTreeView.js +15 -1
- package/SimpleTreeView/SimpleTreeView.types.d.ts +7 -1
- package/TreeItem/TreeItem.js +36 -8
- package/TreeItem/TreeItem.types.d.ts +1 -0
- package/TreeItem/TreeItemContent.js +1 -1
- package/TreeItem2/TreeItem2.d.ts +12 -6
- package/TreeItem2/TreeItem2.js +22 -11
- package/TreeItem2Icon/TreeItem2Icon.js +1 -1
- package/TreeItem2Provider/TreeItem2Provider.js +5 -3
- package/TreeView/TreeView.js +15 -1
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +7 -1
- 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 +51 -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/useTreeView/useTreeViewModels.d.ts +1 -1
- package/internals/useTreeView/useTreeViewModels.js +1 -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 +15 -1
- package/modern/SimpleTreeView/SimpleTreeView.js +15 -1
- package/modern/TreeItem/TreeItem.js +36 -8
- package/modern/TreeItem/TreeItemContent.js +1 -1
- package/modern/TreeItem2/TreeItem2.js +22 -11
- package/modern/TreeItem2Icon/TreeItem2Icon.js +1 -1
- package/modern/TreeItem2Provider/TreeItem2Provider.js +5 -3
- package/modern/TreeView/TreeView.js +15 -1
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +7 -1
- 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/useTreeView/useTreeViewModels.js +1 -1
- 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 +15 -1
- package/node/SimpleTreeView/SimpleTreeView.js +15 -1
- package/node/TreeItem/TreeItem.js +36 -8
- package/node/TreeItem/TreeItemContent.js +1 -1
- package/node/TreeItem2/TreeItem2.js +21 -10
- package/node/TreeItem2Icon/TreeItem2Icon.js +1 -1
- package/node/TreeItem2Provider/TreeItem2Provider.js +5 -3
- package/node/TreeView/TreeView.js +15 -1
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +7 -1
- 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/useTreeView/useTreeViewModels.js +1 -1
- 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
|
@@ -7,6 +7,7 @@ import { publishTreeViewEvent } from '../../utils/publishTreeViewEvent';
|
|
|
7
7
|
import { useTreeViewContext } from '../../TreeViewProvider/useTreeViewContext';
|
|
8
8
|
import { TreeViewChildrenItemContext, TreeViewChildrenItemProvider } from '../../TreeViewProvider/TreeViewChildrenItemProvider';
|
|
9
9
|
import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from '../useTreeViewItems/useTreeViewItems.utils';
|
|
10
|
+
import { TreeViewItemDepthContext } from '../../TreeViewItemDepthContext';
|
|
10
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
12
|
export const useTreeViewJSXItems = ({
|
|
12
13
|
instance,
|
|
@@ -33,6 +34,23 @@ export const useTreeViewJSXItems = ({
|
|
|
33
34
|
})
|
|
34
35
|
});
|
|
35
36
|
});
|
|
37
|
+
return () => {
|
|
38
|
+
setState(prevState => {
|
|
39
|
+
const newItemMetaMap = _extends({}, prevState.items.itemMetaMap);
|
|
40
|
+
const newItemMap = _extends({}, prevState.items.itemMap);
|
|
41
|
+
delete newItemMetaMap[item.id];
|
|
42
|
+
delete newItemMap[item.id];
|
|
43
|
+
return _extends({}, prevState, {
|
|
44
|
+
items: _extends({}, prevState.items, {
|
|
45
|
+
itemMetaMap: newItemMetaMap,
|
|
46
|
+
itemMap: newItemMap
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
publishTreeViewEvent(instance, 'removeItem', {
|
|
51
|
+
id: item.id
|
|
52
|
+
});
|
|
53
|
+
};
|
|
36
54
|
});
|
|
37
55
|
const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
|
|
38
56
|
const parentIdWithDefault = parentId ?? TREE_VIEW_ROOT_PARENT_ID;
|
|
@@ -47,23 +65,6 @@ export const useTreeViewJSXItems = ({
|
|
|
47
65
|
})
|
|
48
66
|
}));
|
|
49
67
|
};
|
|
50
|
-
const removeJSXItem = useEventCallback(itemId => {
|
|
51
|
-
setState(prevState => {
|
|
52
|
-
const newItemMetaMap = _extends({}, prevState.items.itemMetaMap);
|
|
53
|
-
const newItemMap = _extends({}, prevState.items.itemMap);
|
|
54
|
-
delete newItemMetaMap[itemId];
|
|
55
|
-
delete newItemMap[itemId];
|
|
56
|
-
return _extends({}, prevState, {
|
|
57
|
-
items: _extends({}, prevState.items, {
|
|
58
|
-
itemMetaMap: newItemMetaMap,
|
|
59
|
-
itemMap: newItemMap
|
|
60
|
-
})
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
publishTreeViewEvent(instance, 'removeItem', {
|
|
64
|
-
id: itemId
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
68
|
const mapFirstCharFromJSX = useEventCallback((itemId, firstChar) => {
|
|
68
69
|
instance.updateFirstCharMap(firstCharMap => {
|
|
69
70
|
firstCharMap[itemId] = firstChar;
|
|
@@ -80,7 +81,6 @@ export const useTreeViewJSXItems = ({
|
|
|
80
81
|
return {
|
|
81
82
|
instance: {
|
|
82
83
|
insertJSXItem,
|
|
83
|
-
removeJSXItem,
|
|
84
84
|
setJSXItemsOrderedChildrenIds,
|
|
85
85
|
mapFirstCharFromJSX
|
|
86
86
|
}
|
|
@@ -129,14 +129,13 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
129
129
|
};
|
|
130
130
|
}, [instance, registerChild, unregisterChild, itemId, id]);
|
|
131
131
|
React.useEffect(() => {
|
|
132
|
-
instance.insertJSXItem({
|
|
132
|
+
return instance.insertJSXItem({
|
|
133
133
|
id: itemId,
|
|
134
134
|
idAttribute: id,
|
|
135
135
|
parentId,
|
|
136
136
|
expandable,
|
|
137
137
|
disabled
|
|
138
138
|
});
|
|
139
|
-
return () => instance.removeJSXItem(itemId);
|
|
140
139
|
}, [instance, parentId, itemId, expandable, disabled, id]);
|
|
141
140
|
React.useEffect(() => {
|
|
142
141
|
if (label) {
|
|
@@ -153,13 +152,23 @@ useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
|
|
|
153
152
|
useTreeViewJSXItems.wrapItem = ({
|
|
154
153
|
children,
|
|
155
154
|
itemId
|
|
156
|
-
}) =>
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
155
|
+
}) => {
|
|
156
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
157
|
+
const depthContext = React.useContext(TreeViewItemDepthContext);
|
|
158
|
+
return /*#__PURE__*/_jsx(TreeViewChildrenItemProvider, {
|
|
159
|
+
itemId: itemId,
|
|
160
|
+
children: /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
|
|
161
|
+
value: depthContext + 1,
|
|
162
|
+
children: children
|
|
163
|
+
})
|
|
164
|
+
});
|
|
165
|
+
};
|
|
160
166
|
useTreeViewJSXItems.wrapRoot = ({
|
|
161
167
|
children
|
|
162
168
|
}) => /*#__PURE__*/_jsx(TreeViewChildrenItemProvider, {
|
|
163
|
-
children:
|
|
169
|
+
children: /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
|
|
170
|
+
value: 0,
|
|
171
|
+
children: children
|
|
172
|
+
})
|
|
164
173
|
});
|
|
165
174
|
useTreeViewJSXItems.params = {};
|
|
@@ -48,6 +48,7 @@ export const useTreeView = inParams => {
|
|
|
48
48
|
params,
|
|
49
49
|
slots: params.slots,
|
|
50
50
|
slotProps: params.slotProps,
|
|
51
|
+
experimentalFeatures: params.experimentalFeatures,
|
|
51
52
|
state,
|
|
52
53
|
setState,
|
|
53
54
|
rootRef: innerRootRef,
|
|
@@ -100,19 +101,23 @@ export const useTreeView = inParams => {
|
|
|
100
101
|
itemWrappers.forEach(itemWrapper => {
|
|
101
102
|
finalChildren = itemWrapper({
|
|
102
103
|
itemId,
|
|
103
|
-
children: finalChildren
|
|
104
|
+
children: finalChildren,
|
|
105
|
+
instance
|
|
104
106
|
});
|
|
105
107
|
});
|
|
106
108
|
return finalChildren;
|
|
107
109
|
};
|
|
108
|
-
const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
|
|
110
|
+
const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
|
|
111
|
+
// The wrappers are reversed to ensure that the first wrapper is the outermost one.
|
|
112
|
+
.reverse();
|
|
109
113
|
contextValue.wrapRoot = ({
|
|
110
114
|
children
|
|
111
115
|
}) => {
|
|
112
116
|
let finalChildren = children;
|
|
113
117
|
rootWrappers.forEach(rootWrapper => {
|
|
114
118
|
finalChildren = rootWrapper({
|
|
115
|
-
children: finalChildren
|
|
119
|
+
children: finalChildren,
|
|
120
|
+
instance
|
|
116
121
|
});
|
|
117
122
|
});
|
|
118
123
|
return finalChildren;
|
|
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* Implements the same behavior as `useControlled` but for several models.
|
|
5
|
-
* The controlled models are never stored in the state and the state is only updated if the model is not controlled.
|
|
5
|
+
* The controlled models are never stored in the state, and the state is only updated if the model is not controlled.
|
|
6
6
|
*/
|
|
7
7
|
export const useTreeViewModels = (plugins, props) => {
|
|
8
8
|
const modelsRef = React.useRef({});
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
|
-
const _excluded = ["slots", "slotProps", "apiRef"];
|
|
2
|
+
const _excluded = ["slots", "slotProps", "apiRef", "experimentalFeatures"];
|
|
3
3
|
export const extractPluginParamsFromProps = _ref => {
|
|
4
4
|
let {
|
|
5
5
|
props: {
|
|
6
6
|
slots,
|
|
7
7
|
slotProps,
|
|
8
|
-
apiRef
|
|
8
|
+
apiRef,
|
|
9
|
+
experimentalFeatures
|
|
9
10
|
},
|
|
10
11
|
plugins,
|
|
11
12
|
rootRef
|
|
@@ -20,6 +21,7 @@ export const extractPluginParamsFromProps = _ref => {
|
|
|
20
21
|
rootRef,
|
|
21
22
|
slots: slots ?? {},
|
|
22
23
|
slotProps: slotProps ?? {},
|
|
24
|
+
experimentalFeatures: experimentalFeatures ?? {},
|
|
23
25
|
apiRef
|
|
24
26
|
};
|
|
25
27
|
const otherProps = {};
|
|
@@ -18,7 +18,24 @@ export const getPreviousNavigableItem = (instance, itemId) => {
|
|
|
18
18
|
if (itemIndex === 0) {
|
|
19
19
|
return itemMeta.parentId;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
// Finds the previous navigable sibling.
|
|
23
|
+
let previousNavigableSiblingIndex = itemIndex - 1;
|
|
24
|
+
while (!instance.isItemNavigable(siblings[previousNavigableSiblingIndex]) && previousNavigableSiblingIndex >= 0) {
|
|
25
|
+
previousNavigableSiblingIndex -= 1;
|
|
26
|
+
}
|
|
27
|
+
if (previousNavigableSiblingIndex === -1) {
|
|
28
|
+
// If we are at depth 0, then it means all the items above the current item are not navigable.
|
|
29
|
+
if (itemMeta.parentId == null) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Otherwise, we can try to go up a level and find the previous navigable item.
|
|
34
|
+
return getPreviousNavigableItem(instance, itemMeta.parentId);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Finds the last navigable ancestor of the previous navigable sibling.
|
|
38
|
+
let currentItemId = siblings[previousNavigableSiblingIndex];
|
|
22
39
|
let lastNavigableChild = getLastNavigableItemInArray(instance, instance.getItemOrderedChildrenIds(currentItemId));
|
|
23
40
|
while (instance.isItemExpanded(currentItemId) && lastNavigableChild != null) {
|
|
24
41
|
currentItemId = lastNavigableChild;
|
|
@@ -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,
|
|
@@ -140,7 +140,7 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
140
140
|
process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
141
141
|
// ----------------------------- Warning --------------------------------
|
|
142
142
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
143
|
-
// | To update them edit the TypeScript types and run "
|
|
143
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
144
144
|
// ----------------------------------------------------------------------
|
|
145
145
|
/**
|
|
146
146
|
* The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
|
|
@@ -189,6 +189,14 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
189
189
|
* Used when the item's expansion is controlled.
|
|
190
190
|
*/
|
|
191
191
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
192
|
+
/**
|
|
193
|
+
* Unstable features, breaking changes might be introduced.
|
|
194
|
+
* For each feature, if the flag is not explicitly set to `true`,
|
|
195
|
+
* the feature will be fully disabled and any property / method call will not have any effect.
|
|
196
|
+
*/
|
|
197
|
+
experimentalFeatures: _propTypes.default.shape({
|
|
198
|
+
indentationAtItemLevel: _propTypes.default.bool
|
|
199
|
+
}),
|
|
192
200
|
/**
|
|
193
201
|
* Used to determine the id of a given item.
|
|
194
202
|
*
|
|
@@ -219,6 +227,12 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
219
227
|
* @returns {boolean} `true` if the item should be disabled.
|
|
220
228
|
*/
|
|
221
229
|
isItemDisabled: _propTypes.default.func,
|
|
230
|
+
/**
|
|
231
|
+
* Horizontal indentation between an item and its children.
|
|
232
|
+
* Examples: 24, "24px", "2rem", "2em".
|
|
233
|
+
* @default 12px
|
|
234
|
+
*/
|
|
235
|
+
itemChildrenIndentation: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
222
236
|
items: _propTypes.default.array.isRequired,
|
|
223
237
|
/**
|
|
224
238
|
* If `true`, `ctrl` and `shift` will trigger multiselect.
|
|
@@ -98,7 +98,7 @@ const SimpleTreeView = exports.SimpleTreeView = /*#__PURE__*/React.forwardRef(fu
|
|
|
98
98
|
process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
99
99
|
// ----------------------------- Warning --------------------------------
|
|
100
100
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
101
|
-
// | To update them edit the TypeScript types and run "
|
|
101
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
102
102
|
// ----------------------------------------------------------------------
|
|
103
103
|
/**
|
|
104
104
|
* The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
|
|
@@ -151,11 +151,25 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
151
151
|
* Used when the item's expansion is controlled.
|
|
152
152
|
*/
|
|
153
153
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
154
|
+
/**
|
|
155
|
+
* Unstable features, breaking changes might be introduced.
|
|
156
|
+
* For each feature, if the flag is not explicitly set to `true`,
|
|
157
|
+
* the feature will be fully disabled and any property / method call will not have any effect.
|
|
158
|
+
*/
|
|
159
|
+
experimentalFeatures: _propTypes.default.shape({
|
|
160
|
+
indentationAtItemLevel: _propTypes.default.bool
|
|
161
|
+
}),
|
|
154
162
|
/**
|
|
155
163
|
* This prop is used to help implement the accessibility logic.
|
|
156
164
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
157
165
|
*/
|
|
158
166
|
id: _propTypes.default.string,
|
|
167
|
+
/**
|
|
168
|
+
* Horizontal indentation between an item and its children.
|
|
169
|
+
* Examples: 24, "24px", "2rem", "2em".
|
|
170
|
+
* @default 12px
|
|
171
|
+
*/
|
|
172
|
+
itemChildrenIndentation: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
159
173
|
/**
|
|
160
174
|
* If `true`, `ctrl` and `shift` will trigger multiselect.
|
|
161
175
|
* @default false
|
|
@@ -13,6 +13,7 @@ var _clsx = _interopRequireDefault(require("clsx"));
|
|
|
13
13
|
var _Collapse = _interopRequireDefault(require("@mui/material/Collapse"));
|
|
14
14
|
var _utils = require("@mui/base/utils");
|
|
15
15
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
16
|
+
var _createStyled = require("@mui/system/createStyled");
|
|
16
17
|
var _styles = require("@mui/material/styles");
|
|
17
18
|
var _unsupportedProp = _interopRequireDefault(require("@mui/utils/unsupportedProp"));
|
|
18
19
|
var _elementTypeAcceptingRef = _interopRequireDefault(require("@mui/utils/elementTypeAcceptingRef"));
|
|
@@ -22,6 +23,7 @@ var _treeItemClasses = require("./treeItemClasses");
|
|
|
22
23
|
var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
|
|
23
24
|
var _icons = require("../icons");
|
|
24
25
|
var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
26
|
+
var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
|
|
25
27
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
26
28
|
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
|
|
27
29
|
_excluded2 = ["ownerState"],
|
|
@@ -66,7 +68,8 @@ const StyledTreeItemContent = (0, _styles.styled)(_TreeItemContent.TreeItemConte
|
|
|
66
68
|
}, styles.label && {
|
|
67
69
|
[`& .${_treeItemClasses.treeItemClasses.label}`]: styles.label
|
|
68
70
|
}];
|
|
69
|
-
}
|
|
71
|
+
},
|
|
72
|
+
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'indentationAtItemLevel'
|
|
70
73
|
})(({
|
|
71
74
|
theme
|
|
72
75
|
}) => ({
|
|
@@ -126,16 +129,33 @@ const StyledTreeItemContent = (0, _styles.styled)(_TreeItemContent.TreeItemConte
|
|
|
126
129
|
}, theme.typography.body1),
|
|
127
130
|
[`& .${_treeItemClasses.treeItemClasses.checkbox}`]: {
|
|
128
131
|
padding: 0
|
|
129
|
-
}
|
|
132
|
+
},
|
|
133
|
+
variants: [{
|
|
134
|
+
props: {
|
|
135
|
+
indentationAtItemLevel: true
|
|
136
|
+
},
|
|
137
|
+
style: {
|
|
138
|
+
paddingLeft: `calc(${theme.spacing(1)} + var(--TreeView-itemChildrenIndentation) * var(--TreeView-itemDepth))`
|
|
139
|
+
}
|
|
140
|
+
}]
|
|
130
141
|
}));
|
|
131
142
|
const TreeItemGroup = (0, _styles.styled)(_Collapse.default, {
|
|
132
143
|
name: 'MuiTreeItem',
|
|
133
144
|
slot: 'GroupTransition',
|
|
134
|
-
overridesResolver: (props, styles) => styles.groupTransition
|
|
145
|
+
overridesResolver: (props, styles) => styles.groupTransition,
|
|
146
|
+
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'indentationAtItemLevel'
|
|
135
147
|
})({
|
|
136
148
|
margin: 0,
|
|
137
149
|
padding: 0,
|
|
138
|
-
paddingLeft:
|
|
150
|
+
paddingLeft: 'var(--TreeView-itemChildrenIndentation)',
|
|
151
|
+
variants: [{
|
|
152
|
+
props: {
|
|
153
|
+
indentationAtItemLevel: true
|
|
154
|
+
},
|
|
155
|
+
style: {
|
|
156
|
+
paddingLeft: 0
|
|
157
|
+
}
|
|
158
|
+
}]
|
|
139
159
|
});
|
|
140
160
|
|
|
141
161
|
/**
|
|
@@ -156,8 +176,10 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
156
176
|
multiSelect
|
|
157
177
|
},
|
|
158
178
|
disabledItemsFocusable,
|
|
179
|
+
indentationAtItemLevel,
|
|
159
180
|
instance
|
|
160
181
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
182
|
+
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
161
183
|
const props = (0, _styles.useThemeProps)({
|
|
162
184
|
props: inProps,
|
|
163
185
|
name: 'MuiTreeItem'
|
|
@@ -206,7 +228,8 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
206
228
|
expanded,
|
|
207
229
|
focused,
|
|
208
230
|
selected,
|
|
209
|
-
disabled
|
|
231
|
+
disabled,
|
|
232
|
+
indentationAtItemLevel
|
|
210
233
|
});
|
|
211
234
|
const classes = useUtilityClasses(ownerState);
|
|
212
235
|
const GroupTransition = slots.groupTransition ?? undefined;
|
|
@@ -214,12 +237,14 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
214
237
|
elementType: GroupTransition,
|
|
215
238
|
ownerState: {},
|
|
216
239
|
externalSlotProps: inSlotProps?.groupTransition,
|
|
217
|
-
additionalProps: {
|
|
240
|
+
additionalProps: (0, _extends2.default)({
|
|
218
241
|
unmountOnExit: true,
|
|
219
242
|
in: expanded,
|
|
220
243
|
component: 'ul',
|
|
221
244
|
role: 'group'
|
|
222
|
-
},
|
|
245
|
+
}, indentationAtItemLevel ? {
|
|
246
|
+
indentationAtItemLevel: true
|
|
247
|
+
} : {}),
|
|
223
248
|
className: classes.groupTransition
|
|
224
249
|
});
|
|
225
250
|
const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
|
|
@@ -300,6 +325,9 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
300
325
|
onBlur: handleBlur,
|
|
301
326
|
onKeyDown: handleKeyDown,
|
|
302
327
|
ref: handleRootRef,
|
|
328
|
+
style: indentationAtItemLevel ? (0, _extends2.default)({}, other.style, {
|
|
329
|
+
'--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
|
|
330
|
+
}) : other.style,
|
|
303
331
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeItemContent, (0, _extends2.default)({
|
|
304
332
|
as: ContentComponent,
|
|
305
333
|
classes: {
|
|
@@ -333,7 +361,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
333
361
|
process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
334
362
|
// ----------------------------- Warning --------------------------------
|
|
335
363
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
336
|
-
// | To update them edit the TypeScript types and run "
|
|
364
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
337
365
|
// ----------------------------------------------------------------------
|
|
338
366
|
/**
|
|
339
367
|
* The content of the component.
|
|
@@ -92,7 +92,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
92
92
|
process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
93
93
|
// ----------------------------- Warning --------------------------------
|
|
94
94
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
95
|
-
// | To update them edit the TypeScript types and run "
|
|
95
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
96
96
|
// ----------------------------------------------------------------------
|
|
97
97
|
/**
|
|
98
98
|
* Override or extend the styles applied to the component.
|
|
@@ -15,7 +15,7 @@ var _styles = require("@mui/material/styles");
|
|
|
15
15
|
var _Collapse = _interopRequireDefault(require("@mui/material/Collapse"));
|
|
16
16
|
var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
|
|
17
17
|
var _utils = require("@mui/base/utils");
|
|
18
|
-
var
|
|
18
|
+
var _createStyled = require("@mui/system/createStyled");
|
|
19
19
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
20
20
|
var _useTreeItem = require("../useTreeItem2");
|
|
21
21
|
var _TreeItem = require("../TreeItem");
|
|
@@ -40,7 +40,7 @@ const TreeItem2Content = exports.TreeItem2Content = (0, _styles.styled)('div', {
|
|
|
40
40
|
name: 'MuiTreeItem2',
|
|
41
41
|
slot: 'Content',
|
|
42
42
|
overridesResolver: (props, styles) => styles.content,
|
|
43
|
-
shouldForwardProp: prop => (0,
|
|
43
|
+
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'status' && prop !== 'indentationAtItemLevel'
|
|
44
44
|
})(({
|
|
45
45
|
theme
|
|
46
46
|
}) => ({
|
|
@@ -61,12 +61,14 @@ const TreeItem2Content = exports.TreeItem2Content = (0, _styles.styled)('div', {
|
|
|
61
61
|
backgroundColor: 'transparent'
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
|
-
[`& .${_TreeItem.treeItemClasses.groupTransition}`]: {
|
|
65
|
-
margin: 0,
|
|
66
|
-
padding: 0,
|
|
67
|
-
paddingLeft: 12
|
|
68
|
-
},
|
|
69
64
|
variants: [{
|
|
65
|
+
props: {
|
|
66
|
+
indentationAtItemLevel: true
|
|
67
|
+
},
|
|
68
|
+
style: {
|
|
69
|
+
paddingLeft: `calc(${theme.spacing(1)} + var(--TreeView-itemChildrenIndentation) * var(--TreeView-itemDepth))`
|
|
70
|
+
}
|
|
71
|
+
}, {
|
|
70
72
|
props: ({
|
|
71
73
|
status
|
|
72
74
|
}) => status.disabled,
|
|
@@ -134,11 +136,20 @@ const TreeItem2IconContainer = exports.TreeItem2IconContainer = (0, _styles.styl
|
|
|
134
136
|
const TreeItem2GroupTransition = exports.TreeItem2GroupTransition = (0, _styles.styled)(_Collapse.default, {
|
|
135
137
|
name: 'MuiTreeItem2',
|
|
136
138
|
slot: 'GroupTransition',
|
|
137
|
-
overridesResolver: (props, styles) => styles.groupTransition
|
|
139
|
+
overridesResolver: (props, styles) => styles.groupTransition,
|
|
140
|
+
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'indentationAtItemLevel'
|
|
138
141
|
})({
|
|
139
142
|
margin: 0,
|
|
140
143
|
padding: 0,
|
|
141
|
-
paddingLeft:
|
|
144
|
+
paddingLeft: 'var(--TreeView-itemChildrenIndentation)',
|
|
145
|
+
variants: [{
|
|
146
|
+
props: {
|
|
147
|
+
indentationAtItemLevel: true
|
|
148
|
+
},
|
|
149
|
+
style: {
|
|
150
|
+
paddingLeft: 0
|
|
151
|
+
}
|
|
152
|
+
}]
|
|
142
153
|
});
|
|
143
154
|
const TreeItem2Checkbox = exports.TreeItem2Checkbox = (0, _styles.styled)( /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
144
155
|
const {
|
|
@@ -290,7 +301,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
|
|
|
290
301
|
process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
|
|
291
302
|
// ----------------------------- Warning --------------------------------
|
|
292
303
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
293
|
-
// | To update them edit the TypeScript types and run "
|
|
304
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
294
305
|
// ----------------------------------------------------------------------
|
|
295
306
|
/**
|
|
296
307
|
* The content of the component.
|
|
@@ -53,7 +53,7 @@ function TreeItem2Icon(props) {
|
|
|
53
53
|
process.env.NODE_ENV !== "production" ? TreeItem2Icon.propTypes = {
|
|
54
54
|
// ----------------------------- Warning --------------------------------
|
|
55
55
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
56
|
-
// | To update them edit the TypeScript types and run "
|
|
56
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
57
57
|
// ----------------------------------------------------------------------
|
|
58
58
|
/**
|
|
59
59
|
* The props used for each component slot.
|
|
@@ -13,17 +13,19 @@ function TreeItem2Provider(props) {
|
|
|
13
13
|
itemId
|
|
14
14
|
} = props;
|
|
15
15
|
const {
|
|
16
|
-
wrapItem
|
|
16
|
+
wrapItem,
|
|
17
|
+
instance
|
|
17
18
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
18
19
|
return wrapItem({
|
|
19
20
|
children,
|
|
20
|
-
itemId
|
|
21
|
+
itemId,
|
|
22
|
+
instance
|
|
21
23
|
});
|
|
22
24
|
}
|
|
23
25
|
TreeItem2Provider.propTypes = {
|
|
24
26
|
// ----------------------------- Warning --------------------------------
|
|
25
27
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
26
|
-
// | To update them edit the TypeScript types and run "
|
|
28
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
27
29
|
// ----------------------------------------------------------------------
|
|
28
30
|
children: _propTypes.default.node,
|
|
29
31
|
itemId: _propTypes.default.string.isRequired
|
|
@@ -71,7 +71,7 @@ const TreeView = exports.TreeView = /*#__PURE__*/React.forwardRef(function TreeV
|
|
|
71
71
|
process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
72
72
|
// ----------------------------- Warning --------------------------------
|
|
73
73
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
74
|
-
// | To update them edit the TypeScript types and run "
|
|
74
|
+
// | To update them edit the TypeScript types and run "pnpm proptypes" |
|
|
75
75
|
// ----------------------------------------------------------------------
|
|
76
76
|
/**
|
|
77
77
|
* The ref object that allows Tree View manipulation. Can be instantiated with `useTreeViewApiRef()`.
|
|
@@ -124,11 +124,25 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
124
124
|
* Used when the item's expansion is controlled.
|
|
125
125
|
*/
|
|
126
126
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
127
|
+
/**
|
|
128
|
+
* Unstable features, breaking changes might be introduced.
|
|
129
|
+
* For each feature, if the flag is not explicitly set to `true`,
|
|
130
|
+
* the feature will be fully disabled and any property / method call will not have any effect.
|
|
131
|
+
*/
|
|
132
|
+
experimentalFeatures: _propTypes.default.shape({
|
|
133
|
+
indentationAtItemLevel: _propTypes.default.bool
|
|
134
|
+
}),
|
|
127
135
|
/**
|
|
128
136
|
* This prop is used to help implement the accessibility logic.
|
|
129
137
|
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
130
138
|
*/
|
|
131
139
|
id: _propTypes.default.string,
|
|
140
|
+
/**
|
|
141
|
+
* Horizontal indentation between an item and its children.
|
|
142
|
+
* Examples: 24, "24px", "2rem", "2em".
|
|
143
|
+
* @default 12px
|
|
144
|
+
*/
|
|
145
|
+
itemChildrenIndentation: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
132
146
|
/**
|
|
133
147
|
* If `true`, `ctrl` and `shift` will trigger multiselect.
|
|
134
148
|
* @default false
|
|
@@ -5,6 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useTreeItem2Utils = void 0;
|
|
7
7
|
var _useTreeViewContext = require("../../internals/TreeViewProvider/useTreeViewContext");
|
|
8
|
+
const isItemExpandable = reactChildren => {
|
|
9
|
+
if (Array.isArray(reactChildren)) {
|
|
10
|
+
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
11
|
+
}
|
|
12
|
+
return Boolean(reactChildren);
|
|
13
|
+
};
|
|
8
14
|
const useTreeItem2Utils = ({
|
|
9
15
|
itemId,
|
|
10
16
|
children
|
|
@@ -16,7 +22,7 @@ const useTreeItem2Utils = ({
|
|
|
16
22
|
}
|
|
17
23
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
18
24
|
const status = {
|
|
19
|
-
expandable:
|
|
25
|
+
expandable: isItemExpandable(children),
|
|
20
26
|
expanded: instance.isItemExpanded(itemId),
|
|
21
27
|
focused: instance.isItemFocused(itemId),
|
|
22
28
|
selected: instance.isItemSelected(itemId),
|
package/node/index.js
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TreeViewItemDepthContext = void 0;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
const TreeViewItemDepthContext = exports.TreeViewItemDepthContext = /*#__PURE__*/React.createContext(() => -1);
|
|
11
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
12
|
+
TreeViewItemDepthContext.displayName = 'TreeViewItemDepthContext';
|
|
13
|
+
}
|