@mui/x-tree-view 7.18.0 → 7.20.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 +213 -11
- package/RichTreeView/RichTreeView.js +6 -45
- package/RichTreeView/RichTreeView.plugins.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
- package/TreeItem/TreeItem.js +19 -1
- package/TreeItem/TreeItem.types.d.ts +2 -0
- package/TreeItem/TreeItemContent.js +25 -29
- package/TreeItem2/TreeItem2.d.ts +6 -6
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +24 -6
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -8
- package/index.js +1 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
- package/internals/TreeViewProvider/TreeViewProvider.js +2 -1
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -1
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
- package/internals/components/RichTreeViewItems.d.ts +35 -0
- package/internals/components/RichTreeViewItems.js +56 -0
- package/internals/corePlugins/corePlugins.d.ts +1 -1
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +28 -7
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +11 -13
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +17 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +26 -0
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/internals/models/plugin.d.ts +4 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
- package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +3 -2
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
- package/internals/useTreeView/extractPluginParamsFromProps.d.ts +1 -1
- package/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
- package/modern/RichTreeView/RichTreeView.js +6 -45
- package/modern/TreeItem/TreeItem.js +19 -1
- package/modern/TreeItem/TreeItemContent.js +25 -29
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -8
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +2 -1
- package/modern/internals/components/RichTreeViewItems.js +56 -0
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +28 -7
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +26 -0
- package/modern/internals/index.js +1 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
- package/modern/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
- package/modern/useTreeItem2/useTreeItem2.js +7 -1
- package/node/RichTreeView/RichTreeView.js +6 -45
- package/node/TreeItem/TreeItem.js +19 -1
- package/node/TreeItem/TreeItemContent.js +25 -29
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -9
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
- package/node/internals/TreeViewProvider/TreeViewProvider.js +2 -1
- package/node/internals/components/RichTreeViewItems.js +64 -0
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +29 -8
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +34 -0
- package/node/internals/index.js +7 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
- package/node/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
- package/node/useTreeItem2/useTreeItem2.js +7 -1
- package/package.json +4 -4
- package/useTreeItem2/index.d.ts +3 -3
- package/useTreeItem2/useTreeItem2.js +7 -1
- package/useTreeItem2/useTreeItem2.types.d.ts +1 -1
|
@@ -6,7 +6,7 @@ export const extractPluginParamsFromProps = _ref => {
|
|
|
6
6
|
slots,
|
|
7
7
|
slotProps,
|
|
8
8
|
apiRef,
|
|
9
|
-
experimentalFeatures
|
|
9
|
+
experimentalFeatures: inExperimentalFeatures
|
|
10
10
|
},
|
|
11
11
|
plugins
|
|
12
12
|
} = _ref,
|
|
@@ -25,9 +25,13 @@ export const extractPluginParamsFromProps = _ref => {
|
|
|
25
25
|
forwardedProps[propName] = prop;
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
+
const experimentalFeatures = inExperimentalFeatures ?? {};
|
|
28
29
|
const defaultizedPluginParams = plugins.reduce((acc, plugin) => {
|
|
29
30
|
if (plugin.getDefaultizedParams) {
|
|
30
|
-
return plugin.getDefaultizedParams(
|
|
31
|
+
return plugin.getDefaultizedParams({
|
|
32
|
+
params: acc,
|
|
33
|
+
experimentalFeatures
|
|
34
|
+
});
|
|
31
35
|
}
|
|
32
36
|
return acc;
|
|
33
37
|
}, pluginParams);
|
|
@@ -37,6 +41,6 @@ export const extractPluginParamsFromProps = _ref => {
|
|
|
37
41
|
pluginParams: defaultizedPluginParams,
|
|
38
42
|
slots: slots ?? {},
|
|
39
43
|
slotProps: slotProps ?? {},
|
|
40
|
-
experimentalFeatures
|
|
44
|
+
experimentalFeatures
|
|
41
45
|
};
|
|
42
46
|
};
|
|
@@ -6,6 +6,7 @@ import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
|
|
|
6
6
|
import { useTreeItem2Utils } from "../hooks/useTreeItem2Utils/index.js";
|
|
7
7
|
import { TreeViewItemDepthContext } from "../internals/TreeViewItemDepthContext/index.js";
|
|
8
8
|
import { isTargetInDescendants } from "../internals/utils/tree.js";
|
|
9
|
+
import { generateTreeItemIdAttribute } from "../internals/corePlugins/useTreeViewId/useTreeViewId.utils.js";
|
|
9
10
|
export const useTreeItem2 = parameters => {
|
|
10
11
|
const {
|
|
11
12
|
runItemPlugins,
|
|
@@ -22,6 +23,7 @@ export const useTreeItem2 = parameters => {
|
|
|
22
23
|
expansion: {
|
|
23
24
|
expansionTrigger
|
|
24
25
|
},
|
|
26
|
+
treeId,
|
|
25
27
|
instance,
|
|
26
28
|
publicAPI
|
|
27
29
|
} = useTreeViewContext();
|
|
@@ -47,10 +49,14 @@ export const useTreeItem2 = parameters => {
|
|
|
47
49
|
});
|
|
48
50
|
const rootRefObject = React.useRef(null);
|
|
49
51
|
const contentRefObject = React.useRef(null);
|
|
50
|
-
const idAttribute = instance.getTreeItemIdAttribute(itemId, id);
|
|
51
52
|
const handleRootRef = useForkRef(rootRef, pluginRootRef, rootRefObject);
|
|
52
53
|
const handleContentRef = useForkRef(contentRef, contentRefObject);
|
|
53
54
|
const checkboxRef = React.useRef(null);
|
|
55
|
+
const idAttribute = generateTreeItemIdAttribute({
|
|
56
|
+
itemId,
|
|
57
|
+
treeId,
|
|
58
|
+
id
|
|
59
|
+
});
|
|
54
60
|
const rootTabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
|
|
55
61
|
const sharedPropsEnhancerParams = {
|
|
56
62
|
rootRefObject,
|
|
@@ -18,7 +18,7 @@ var _zeroStyled = require("../internals/zero-styled");
|
|
|
18
18
|
var _useTreeView = require("../internals/useTreeView");
|
|
19
19
|
var _TreeViewProvider = require("../internals/TreeViewProvider");
|
|
20
20
|
var _RichTreeView = require("./RichTreeView.plugins");
|
|
21
|
-
var
|
|
21
|
+
var _RichTreeViewItems = require("../internals/components/RichTreeViewItems");
|
|
22
22
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
23
|
const useThemeProps = (0, _zeroStyled.createUseThemeProps)('MuiRichTreeView');
|
|
24
24
|
const useUtilityClasses = ownerState => {
|
|
@@ -41,33 +41,6 @@ const RichTreeViewRoot = exports.RichTreeViewRoot = (0, _zeroStyled.styled)('ul'
|
|
|
41
41
|
outline: 0,
|
|
42
42
|
position: 'relative'
|
|
43
43
|
});
|
|
44
|
-
function WrappedTreeItem({
|
|
45
|
-
slots,
|
|
46
|
-
slotProps,
|
|
47
|
-
label,
|
|
48
|
-
id,
|
|
49
|
-
itemId,
|
|
50
|
-
children
|
|
51
|
-
}) {
|
|
52
|
-
const Item = slots?.item ?? _TreeItem.TreeItem;
|
|
53
|
-
const itemProps = (0, _useSlotProps.default)({
|
|
54
|
-
elementType: Item,
|
|
55
|
-
externalSlotProps: slotProps?.item,
|
|
56
|
-
additionalProps: {
|
|
57
|
-
itemId,
|
|
58
|
-
id,
|
|
59
|
-
label
|
|
60
|
-
},
|
|
61
|
-
ownerState: {
|
|
62
|
-
itemId,
|
|
63
|
-
label
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, {
|
|
67
|
-
children: children
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
44
|
/**
|
|
72
45
|
*
|
|
73
46
|
* Demos:
|
|
@@ -110,26 +83,14 @@ const RichTreeView = exports.RichTreeView = /*#__PURE__*/React.forwardRef(functi
|
|
|
110
83
|
getSlotProps: getRootProps,
|
|
111
84
|
ownerState: props
|
|
112
85
|
});
|
|
113
|
-
const itemsToRender = instance.getItemsToRender();
|
|
114
|
-
const renderItem = ({
|
|
115
|
-
label,
|
|
116
|
-
itemId,
|
|
117
|
-
id,
|
|
118
|
-
children
|
|
119
|
-
}) => {
|
|
120
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedTreeItem, {
|
|
121
|
-
slots: slots,
|
|
122
|
-
slotProps: slotProps,
|
|
123
|
-
label: label,
|
|
124
|
-
id: id,
|
|
125
|
-
itemId: itemId,
|
|
126
|
-
children: children?.map(renderItem)
|
|
127
|
-
}, itemId);
|
|
128
|
-
};
|
|
129
86
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewProvider.TreeViewProvider, {
|
|
130
87
|
value: contextValue,
|
|
131
88
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, (0, _extends2.default)({}, rootProps, {
|
|
132
|
-
children:
|
|
89
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewItems.RichTreeViewItems, {
|
|
90
|
+
slots: slots,
|
|
91
|
+
slotProps: slotProps,
|
|
92
|
+
itemsToRender: instance.getItemsToRender()
|
|
93
|
+
})
|
|
133
94
|
}))
|
|
134
95
|
});
|
|
135
96
|
});
|
|
@@ -22,6 +22,7 @@ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveC
|
|
|
22
22
|
var _useSlotProps4 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
|
|
23
23
|
var _unsupportedProp = _interopRequireDefault(require("@mui/utils/unsupportedProp"));
|
|
24
24
|
var _elementTypeAcceptingRef = _interopRequireDefault(require("@mui/utils/elementTypeAcceptingRef"));
|
|
25
|
+
var _warning = require("@mui/x-internals/warning");
|
|
25
26
|
var _zeroStyled = require("../internals/zero-styled");
|
|
26
27
|
var _TreeItemContent = require("./TreeItemContent");
|
|
27
28
|
var _treeItemClasses = require("./treeItemClasses");
|
|
@@ -31,6 +32,7 @@ var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
|
31
32
|
var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
|
|
32
33
|
var _useTreeItemState = require("./useTreeItemState");
|
|
33
34
|
var _tree = require("../internals/utils/tree");
|
|
35
|
+
var _useTreeViewId = require("../internals/corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
34
36
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
35
37
|
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
|
|
36
38
|
_excluded2 = ["ownerState"],
|
|
@@ -192,6 +194,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
192
194
|
expansion: {
|
|
193
195
|
expansionTrigger
|
|
194
196
|
},
|
|
197
|
+
treeId,
|
|
195
198
|
instance
|
|
196
199
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
197
200
|
const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
|
|
@@ -225,6 +228,15 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
225
228
|
handleCancelItemLabelEditing,
|
|
226
229
|
handleSaveItemLabel
|
|
227
230
|
} = (0, _useTreeItemState.useTreeItemState)(itemId);
|
|
231
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
232
|
+
// Checking directly the `props` to avoid having the default value applied
|
|
233
|
+
if (props.ContentComponent) {
|
|
234
|
+
(0, _warning.warnOnce)(['MUI X: The ContentComponent prop of the TreeItem component is deprecated and will be removed in the next major release.', 'You can use the new TreeItem2 component or the new useTreeItem2 hook to customize the rendering of the content.', 'For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.']);
|
|
235
|
+
}
|
|
236
|
+
if (props.ContentProps) {
|
|
237
|
+
(0, _warning.warnOnce)(['MUI X: The ContentProps prop of the TreeItem component is deprecated and will be removed in the next major release.', 'You can use the new TreeItem2 component or the new useTreeItem2 hook to customize the rendering of the content.', 'For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.']);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
228
240
|
const {
|
|
229
241
|
contentRef,
|
|
230
242
|
rootRef,
|
|
@@ -348,7 +360,11 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
348
360
|
}
|
|
349
361
|
instance.handleItemKeyDown(event, itemId);
|
|
350
362
|
};
|
|
351
|
-
const idAttribute =
|
|
363
|
+
const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
364
|
+
itemId,
|
|
365
|
+
treeId,
|
|
366
|
+
id
|
|
367
|
+
});
|
|
352
368
|
const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
|
|
353
369
|
const sharedPropsEnhancerParams = {
|
|
354
370
|
rootRefObject,
|
|
@@ -443,11 +459,13 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
|
|
|
443
459
|
className: _propTypes.default.string,
|
|
444
460
|
/**
|
|
445
461
|
* The component used to render the content of the item.
|
|
462
|
+
* @deprecated Consider using the `TreeItem2` component or the `useTreeItem2` hook instead. For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.
|
|
446
463
|
* @default TreeItemContent
|
|
447
464
|
*/
|
|
448
465
|
ContentComponent: _elementTypeAcceptingRef.default,
|
|
449
466
|
/**
|
|
450
467
|
* Props applied to ContentComponent.
|
|
468
|
+
* @deprecated Consider using the `TreeItem2` component or the `useTreeItem2` hook instead. For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.
|
|
451
469
|
*/
|
|
452
470
|
ContentProps: _propTypes.default.object,
|
|
453
471
|
/**
|
|
@@ -81,35 +81,31 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
81
81
|
}
|
|
82
82
|
toggleItemEditing();
|
|
83
83
|
};
|
|
84
|
-
return (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
children: label
|
|
110
|
-
})), dragAndDropOverlayProps && /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2DragAndDropOverlay.TreeItem2DragAndDropOverlay, (0, _extends2.default)({}, dragAndDropOverlayProps))]
|
|
111
|
-
}))
|
|
112
|
-
);
|
|
84
|
+
return /*#__PURE__*/ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions -- Key event is handled by the TreeView */(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({}, other, {
|
|
85
|
+
className: (0, _clsx.default)(classes.root, className, expanded && classes.expanded, selected && classes.selected, focused && classes.focused, disabled && classes.disabled, editing && classes.editing, editable && classes.editable),
|
|
86
|
+
onClick: handleClick,
|
|
87
|
+
onMouseDown: handleMouseDown,
|
|
88
|
+
ref: ref,
|
|
89
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
90
|
+
className: classes.iconContainer,
|
|
91
|
+
children: icon
|
|
92
|
+
}), checkboxSelection && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
|
|
93
|
+
className: classes.checkbox,
|
|
94
|
+
checked: selected,
|
|
95
|
+
onChange: handleCheckboxSelection,
|
|
96
|
+
disabled: disabled || disableSelection,
|
|
97
|
+
ref: checkboxRef,
|
|
98
|
+
tabIndex: -1
|
|
99
|
+
}), editing ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2LabelInput.TreeItem2LabelInput, (0, _extends2.default)({}, labelInputProps, {
|
|
100
|
+
className: classes.labelInput
|
|
101
|
+
})) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", (0, _extends2.default)({
|
|
102
|
+
className: classes.label
|
|
103
|
+
}, editable && {
|
|
104
|
+
onDoubleClick: handleLabelDoubleClick
|
|
105
|
+
}, {
|
|
106
|
+
children: label
|
|
107
|
+
})), dragAndDropOverlayProps && /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2DragAndDropOverlay.TreeItem2DragAndDropOverlay, (0, _extends2.default)({}, dragAndDropOverlayProps))]
|
|
108
|
+
}));
|
|
113
109
|
});
|
|
114
110
|
process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
|
|
115
111
|
// ----------------------------- Warning --------------------------------
|
|
@@ -7,13 +7,6 @@ exports.useTreeItem2Utils = void 0;
|
|
|
7
7
|
var _TreeViewProvider = require("../../internals/TreeViewProvider");
|
|
8
8
|
var _useTreeViewLabel = require("../../internals/plugins/useTreeViewLabel");
|
|
9
9
|
var _plugins = require("../../internals/utils/plugins");
|
|
10
|
-
const isItemExpandable = reactChildren => {
|
|
11
|
-
if (Array.isArray(reactChildren)) {
|
|
12
|
-
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
13
|
-
}
|
|
14
|
-
return Boolean(reactChildren);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
10
|
/**
|
|
18
11
|
* Plugins that need to be present in the Tree View in order for `useTreeItem2Utils` to work correctly.
|
|
19
12
|
*/
|
|
@@ -22,6 +15,12 @@ const isItemExpandable = reactChildren => {
|
|
|
22
15
|
* Plugins that `useTreeItem2Utils` can use if they are present, but are not required.
|
|
23
16
|
*/
|
|
24
17
|
|
|
18
|
+
const isItemExpandable = reactChildren => {
|
|
19
|
+
if (Array.isArray(reactChildren)) {
|
|
20
|
+
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
21
|
+
}
|
|
22
|
+
return Boolean(reactChildren);
|
|
23
|
+
};
|
|
25
24
|
const useTreeItem2Utils = ({
|
|
26
25
|
itemId,
|
|
27
26
|
children
|
|
@@ -30,7 +29,8 @@ const useTreeItem2Utils = ({
|
|
|
30
29
|
instance,
|
|
31
30
|
selection: {
|
|
32
31
|
multiSelect
|
|
33
|
-
}
|
|
32
|
+
},
|
|
33
|
+
publicAPI
|
|
34
34
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
35
35
|
const status = {
|
|
36
36
|
expandable: isItemExpandable(children),
|
|
@@ -140,7 +140,8 @@ const useTreeItem2Utils = ({
|
|
|
140
140
|
};
|
|
141
141
|
return {
|
|
142
142
|
interactions,
|
|
143
|
-
status
|
|
143
|
+
status,
|
|
144
|
+
publicAPI
|
|
144
145
|
};
|
|
145
146
|
};
|
|
146
147
|
exports.useTreeItem2Utils = useTreeItem2Utils;
|
package/node/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _useTreeViewContext = require("./useTreeViewContext");
|
|
13
13
|
var _utils = require("../utils/utils");
|
|
14
|
+
var _useTreeViewId = require("../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
14
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
16
|
const TreeViewChildrenItemContext = exports.TreeViewChildrenItemContext = /*#__PURE__*/React.createContext(null);
|
|
16
17
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -23,6 +24,7 @@ function TreeViewChildrenItemProvider(props) {
|
|
|
23
24
|
} = props;
|
|
24
25
|
const {
|
|
25
26
|
instance,
|
|
27
|
+
treeId,
|
|
26
28
|
rootRef
|
|
27
29
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
28
30
|
const childrenIdAttrToIdRef = React.useRef(new Map());
|
|
@@ -37,7 +39,11 @@ function TreeViewChildrenItemProvider(props) {
|
|
|
37
39
|
// Undefined during 1st render
|
|
38
40
|
const itemMeta = instance.getItemMeta(itemId);
|
|
39
41
|
if (itemMeta !== undefined) {
|
|
40
|
-
idAttr =
|
|
42
|
+
idAttr = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
43
|
+
itemId,
|
|
44
|
+
treeId,
|
|
45
|
+
id: itemMeta.idAttribute
|
|
46
|
+
});
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
if (idAttr == null) {
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.RichTreeViewItems = RichTreeViewItems;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
|
|
13
|
+
var _TreeItem = require("../../TreeItem");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
const _excluded = ["ownerState"];
|
|
16
|
+
function WrappedTreeItem({
|
|
17
|
+
slots,
|
|
18
|
+
slotProps,
|
|
19
|
+
label,
|
|
20
|
+
id,
|
|
21
|
+
itemId,
|
|
22
|
+
itemsToRender
|
|
23
|
+
}) {
|
|
24
|
+
const Item = slots?.item ?? _TreeItem.TreeItem;
|
|
25
|
+
const _useSlotProps = (0, _useSlotProps2.default)({
|
|
26
|
+
elementType: Item,
|
|
27
|
+
externalSlotProps: slotProps?.item,
|
|
28
|
+
additionalProps: {
|
|
29
|
+
itemId,
|
|
30
|
+
id,
|
|
31
|
+
label
|
|
32
|
+
},
|
|
33
|
+
ownerState: {
|
|
34
|
+
itemId,
|
|
35
|
+
label
|
|
36
|
+
}
|
|
37
|
+
}),
|
|
38
|
+
itemProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded);
|
|
39
|
+
const children = React.useMemo(() => itemsToRender ? /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItems, {
|
|
40
|
+
itemsToRender: itemsToRender,
|
|
41
|
+
slots: slots,
|
|
42
|
+
slotProps: slotProps
|
|
43
|
+
}) : null, [itemsToRender, slots, slotProps]);
|
|
44
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, {
|
|
45
|
+
children: children
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
function RichTreeViewItems(props) {
|
|
49
|
+
const {
|
|
50
|
+
itemsToRender,
|
|
51
|
+
slots,
|
|
52
|
+
slotProps
|
|
53
|
+
} = props;
|
|
54
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {
|
|
55
|
+
children: itemsToRender.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedTreeItem, {
|
|
56
|
+
slots: slots,
|
|
57
|
+
slotProps: slotProps,
|
|
58
|
+
label: item.label,
|
|
59
|
+
id: item.id,
|
|
60
|
+
itemId: item.itemId,
|
|
61
|
+
itemsToRender: item.children
|
|
62
|
+
}, item.itemId))
|
|
63
|
+
});
|
|
64
|
+
}
|
|
@@ -1,28 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.useTreeViewId = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
10
|
var React = _interopRequireWildcard(require("react"));
|
|
10
|
-
var
|
|
11
|
+
var _useTreeViewId = require("./useTreeViewId.utils");
|
|
11
12
|
const useTreeViewId = ({
|
|
12
|
-
params
|
|
13
|
+
params,
|
|
14
|
+
state,
|
|
15
|
+
setState
|
|
13
16
|
}) => {
|
|
14
|
-
const treeId =
|
|
15
|
-
|
|
17
|
+
const treeId = state.id.treeId;
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
setState(prevState => {
|
|
20
|
+
if (prevState.id.treeId === params.id) {
|
|
21
|
+
return prevState;
|
|
22
|
+
}
|
|
23
|
+
return (0, _extends2.default)({}, prevState, {
|
|
24
|
+
id: (0, _extends2.default)({}, prevState.id, {
|
|
25
|
+
treeId: params.id ?? (0, _useTreeViewId.createTreeViewDefaultId)()
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}, [setState, params.id]);
|
|
16
30
|
return {
|
|
17
31
|
getRootProps: () => ({
|
|
18
32
|
id: treeId
|
|
19
33
|
}),
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
contextValue: {
|
|
35
|
+
treeId
|
|
22
36
|
}
|
|
23
37
|
};
|
|
24
38
|
};
|
|
25
39
|
exports.useTreeViewId = useTreeViewId;
|
|
26
40
|
useTreeViewId.params = {
|
|
27
41
|
id: true
|
|
28
|
-
};
|
|
42
|
+
};
|
|
43
|
+
useTreeViewId.getInitialState = ({
|
|
44
|
+
id
|
|
45
|
+
}) => ({
|
|
46
|
+
id: {
|
|
47
|
+
treeId: id ?? (0, _useTreeViewId.createTreeViewDefaultId)()
|
|
48
|
+
}
|
|
49
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.generateTreeItemIdAttribute = exports.createTreeViewDefaultId = void 0;
|
|
7
|
+
let globalTreeViewDefaultId = 0;
|
|
8
|
+
const createTreeViewDefaultId = () => {
|
|
9
|
+
globalTreeViewDefaultId += 1;
|
|
10
|
+
return `mui-tree-view-${globalTreeViewDefaultId}`;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generate the id attribute (i.e.: the `id` attribute passed to the DOM element) of a tree item.
|
|
15
|
+
* If the user explicitly defined an id attribute, it will be returned.
|
|
16
|
+
* Otherwise, the method creates a unique id for the item based on the Tree View id attribute and the item `itemId`
|
|
17
|
+
* @param {object} params The parameters to determine the id attribute of the item.
|
|
18
|
+
* @param {TreeViewItemId} params.itemId The id of the item to get the id attribute of.
|
|
19
|
+
* @param {string | undefined} params.idAttribute The id attribute of the item if explicitly defined by the user.
|
|
20
|
+
* @param {string} params.treeId The id attribute of the Tree View.
|
|
21
|
+
* @returns {string} The id attribute of the item.
|
|
22
|
+
*/
|
|
23
|
+
exports.createTreeViewDefaultId = createTreeViewDefaultId;
|
|
24
|
+
const generateTreeItemIdAttribute = ({
|
|
25
|
+
id,
|
|
26
|
+
treeId = '',
|
|
27
|
+
itemId
|
|
28
|
+
}) => {
|
|
29
|
+
if (id != null) {
|
|
30
|
+
return id;
|
|
31
|
+
}
|
|
32
|
+
return `${treeId}-${itemId}`;
|
|
33
|
+
};
|
|
34
|
+
exports.generateTreeItemIdAttribute = generateTreeItemIdAttribute;
|
package/node/internals/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "RichTreeViewItems", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _RichTreeViewItems.RichTreeViewItems;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "TREE_VIEW_ROOT_PARENT_ID", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -95,6 +101,7 @@ Object.defineProperty(exports, "useTreeViewSelection", {
|
|
|
95
101
|
});
|
|
96
102
|
var _useTreeView = require("./useTreeView");
|
|
97
103
|
var _TreeViewProvider = require("./TreeViewProvider");
|
|
104
|
+
var _RichTreeViewItems = require("./components/RichTreeViewItems");
|
|
98
105
|
var _useInstanceEventHandler = require("./hooks/useInstanceEventHandler");
|
|
99
106
|
var _useTreeViewExpansion = require("./plugins/useTreeViewExpansion");
|
|
100
107
|
var _useTreeViewSelection = require("./plugins/useTreeViewSelection");
|
|
@@ -95,7 +95,9 @@ useTreeViewExpansion.models = {
|
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
97
|
const DEFAULT_EXPANDED_ITEMS = [];
|
|
98
|
-
useTreeViewExpansion.getDefaultizedParams =
|
|
98
|
+
useTreeViewExpansion.getDefaultizedParams = ({
|
|
99
|
+
params
|
|
100
|
+
}) => (0, _extends2.default)({}, params, {
|
|
99
101
|
defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS
|
|
100
102
|
});
|
|
101
103
|
useTreeViewExpansion.params = {
|
|
@@ -72,7 +72,7 @@ const useTreeViewFocus = ({
|
|
|
72
72
|
}
|
|
73
73
|
const itemMeta = instance.getItemMeta(state.focusedItemId);
|
|
74
74
|
if (itemMeta) {
|
|
75
|
-
const itemElement =
|
|
75
|
+
const itemElement = instance.getItemDOMElement(state.focusedItemId);
|
|
76
76
|
if (itemElement) {
|
|
77
77
|
itemElement.blur();
|
|
78
78
|
}
|
|
@@ -12,6 +12,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
12
12
|
var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
|
|
13
13
|
var _useTreeViewItems = require("./useTreeViewItems.utils");
|
|
14
14
|
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
15
|
+
var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
15
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
17
|
const _excluded = ["children"];
|
|
17
18
|
const updateItemsState = ({
|
|
@@ -118,7 +119,11 @@ const useTreeViewItems = ({
|
|
|
118
119
|
if (itemMeta == null) {
|
|
119
120
|
return null;
|
|
120
121
|
}
|
|
121
|
-
return document.getElementById(
|
|
122
|
+
return document.getElementById((0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
123
|
+
treeId: state.id.treeId,
|
|
124
|
+
itemId,
|
|
125
|
+
id: itemMeta.idAttribute
|
|
126
|
+
}));
|
|
122
127
|
};
|
|
123
128
|
const isItemNavigable = itemId => {
|
|
124
129
|
if (params.disabledItemsFocusable) {
|
|
@@ -209,7 +214,9 @@ useTreeViewItems.getInitialState = params => ({
|
|
|
209
214
|
getItemLabel: params.getItemLabel
|
|
210
215
|
})
|
|
211
216
|
});
|
|
212
|
-
useTreeViewItems.getDefaultizedParams =
|
|
217
|
+
useTreeViewItems.getDefaultizedParams = ({
|
|
218
|
+
params
|
|
219
|
+
}) => (0, _extends2.default)({}, params, {
|
|
213
220
|
disabledItemsFocusable: params.disabledItemsFocusable ?? false,
|
|
214
221
|
itemChildrenIndentation: params.itemChildrenIndentation ?? '12px'
|
|
215
222
|
});
|
|
@@ -16,6 +16,7 @@ var _TreeViewProvider = require("../../TreeViewProvider");
|
|
|
16
16
|
var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider");
|
|
17
17
|
var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
|
|
18
18
|
var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
|
|
19
|
+
var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
|
|
19
20
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
21
|
const useTreeViewJSXItems = ({
|
|
21
22
|
instance,
|
|
@@ -107,7 +108,8 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
107
108
|
contentRef
|
|
108
109
|
}) => {
|
|
109
110
|
const {
|
|
110
|
-
instance
|
|
111
|
+
instance,
|
|
112
|
+
treeId
|
|
111
113
|
} = (0, _TreeViewProvider.useTreeViewContext)();
|
|
112
114
|
const {
|
|
113
115
|
children,
|
|
@@ -131,12 +133,16 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
131
133
|
|
|
132
134
|
// Prevent any flashing
|
|
133
135
|
(0, _useEnhancedEffect.default)(() => {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
+
const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
|
|
137
|
+
itemId,
|
|
138
|
+
treeId,
|
|
139
|
+
id
|
|
140
|
+
});
|
|
141
|
+
registerChild(idAttribute, itemId);
|
|
136
142
|
return () => {
|
|
137
|
-
unregisterChild(
|
|
143
|
+
unregisterChild(idAttribute);
|
|
138
144
|
};
|
|
139
|
-
}, [
|
|
145
|
+
}, [registerChild, unregisterChild, itemId, id, treeId]);
|
|
140
146
|
React.useEffect(() => {
|
|
141
147
|
return instance.insertJSXItem({
|
|
142
148
|
id: itemId,
|
package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js
CHANGED
|
@@ -161,6 +161,9 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
161
161
|
// If the focused item is collapsed and has children, we expand it
|
|
162
162
|
case key === 'ArrowRight' && !isRtl || key === 'ArrowLeft' && isRtl:
|
|
163
163
|
{
|
|
164
|
+
if (ctrlPressed) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
164
167
|
if (instance.isItemExpanded(itemId)) {
|
|
165
168
|
const nextItemId = (0, _tree.getNextNavigableItem)(instance, itemId);
|
|
166
169
|
if (nextItemId) {
|
|
@@ -178,6 +181,9 @@ const useTreeViewKeyboardNavigation = ({
|
|
|
178
181
|
// If the focused item is collapsed and has a parent, we move the focus to this parent
|
|
179
182
|
case key === 'ArrowLeft' && !isRtl || key === 'ArrowRight' && isRtl:
|
|
180
183
|
{
|
|
184
|
+
if (ctrlPressed) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
181
187
|
if (canToggleItemExpansion(itemId) && instance.isItemExpanded(itemId)) {
|
|
182
188
|
instance.toggleItemExpansion(event, itemId);
|
|
183
189
|
event.preventDefault();
|