@mui/x-tree-view 7.7.0 → 7.8.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 +181 -0
- package/RichTreeView/RichTreeView.js +5 -0
- package/RichTreeView/RichTreeView.plugins.d.ts +3 -3
- package/RichTreeView/RichTreeView.plugins.js +1 -2
- package/SimpleTreeView/SimpleTreeView.js +5 -0
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +3 -3
- package/SimpleTreeView/SimpleTreeView.plugins.js +1 -2
- package/TreeItem/TreeItem.js +19 -4
- package/TreeItem/TreeItem.types.d.ts +8 -3
- package/TreeItem/TreeItemContent.js +5 -2
- package/TreeItem/useTreeItemState.d.ts +1 -0
- package/TreeItem/useTreeItemState.js +5 -1
- package/TreeItem2/TreeItem2.d.ts +3 -3
- package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -1
- package/TreeView/TreeView.js +5 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +4 -0
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
- package/hooks/useTreeViewApiRef.d.ts +1 -1
- package/index.js +1 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
- package/internals/TreeViewProvider/TreeViewContext.d.ts +2 -8
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
- package/internals/corePlugins/corePlugins.d.ts +4 -1
- package/internals/corePlugins/corePlugins.js +2 -1
- package/internals/corePlugins/index.d.ts +1 -1
- package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.d.ts +0 -4
- package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
- package/internals/index.d.ts +1 -2
- package/internals/index.js +3 -1
- package/internals/models/plugin.d.ts +27 -17
- package/internals/models/treeView.d.ts +3 -5
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -1
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +1 -3
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +1 -1
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +1 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -1
- package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -1
- package/internals/utils/publishTreeViewEvent.d.ts +1 -1
- package/internals/utils/utils.d.ts +1 -0
- package/internals/utils/utils.js +7 -1
- package/internals/utils/warning.d.ts +1 -1
- package/modern/RichTreeView/RichTreeView.js +5 -0
- package/modern/RichTreeView/RichTreeView.plugins.js +1 -2
- package/modern/SimpleTreeView/SimpleTreeView.js +5 -0
- package/modern/SimpleTreeView/SimpleTreeView.plugins.js +1 -2
- package/modern/TreeItem/TreeItem.js +19 -4
- package/modern/TreeItem/TreeItemContent.js +5 -2
- package/modern/TreeItem/useTreeItemState.js +5 -1
- package/modern/TreeView/TreeView.js +5 -0
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
- package/modern/index.js +1 -1
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
- package/modern/internals/corePlugins/corePlugins.js +2 -1
- package/modern/internals/index.js +3 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/modern/internals/utils/utils.js +7 -1
- package/modern/useTreeItem2/useTreeItem2.js +18 -2
- package/node/RichTreeView/RichTreeView.js +5 -0
- package/node/RichTreeView/RichTreeView.plugins.js +1 -2
- package/node/SimpleTreeView/SimpleTreeView.js +5 -0
- package/node/SimpleTreeView/SimpleTreeView.plugins.js +1 -2
- package/node/TreeItem/TreeItem.js +19 -4
- package/node/TreeItem/TreeItemContent.js +5 -2
- package/node/TreeItem/useTreeItemState.js +5 -1
- package/node/TreeView/TreeView.js +5 -0
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
- package/node/internals/corePlugins/corePlugins.js +2 -1
- package/node/internals/index.js +0 -7
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
- package/node/internals/utils/utils.js +8 -1
- package/node/useTreeItem2/useTreeItem2.js +18 -2
- package/package.json +3 -3
- package/useTreeItem2/useTreeItem2.d.ts +2 -2
- package/useTreeItem2/useTreeItem2.js +18 -2
- package/useTreeItem2/useTreeItem2.types.d.ts +13 -5
- /package/internals/{plugins → corePlugins}/useTreeViewId/index.d.ts +0 -0
- /package/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
- /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.d.ts +0 -0
- /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
- /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
- /package/modern/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
- /package/modern/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
- /package/modern/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
- /package/node/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
- /package/node/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
- /package/node/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
|
@@ -13,6 +13,9 @@ export const useTreeItem2 = parameters => {
|
|
|
13
13
|
disableSelection,
|
|
14
14
|
checkboxSelection
|
|
15
15
|
},
|
|
16
|
+
expansion: {
|
|
17
|
+
expansionTrigger
|
|
18
|
+
},
|
|
16
19
|
disabledItemsFocusable,
|
|
17
20
|
indentationAtItemLevel,
|
|
18
21
|
instance,
|
|
@@ -69,7 +72,9 @@ export const useTreeItem2 = parameters => {
|
|
|
69
72
|
if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
|
|
70
73
|
return;
|
|
71
74
|
}
|
|
72
|
-
|
|
75
|
+
if (expansionTrigger === 'content') {
|
|
76
|
+
interactions.handleExpansion(event);
|
|
77
|
+
}
|
|
73
78
|
if (!checkboxSelection) {
|
|
74
79
|
interactions.handleSelection(event);
|
|
75
80
|
}
|
|
@@ -95,6 +100,15 @@ export const useTreeItem2 = parameters => {
|
|
|
95
100
|
}
|
|
96
101
|
interactions.handleCheckboxSelection(event);
|
|
97
102
|
};
|
|
103
|
+
const createIconContainerHandleClick = otherHandlers => event => {
|
|
104
|
+
otherHandlers.onClick?.(event);
|
|
105
|
+
if (event.defaultMuiPrevented) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (expansionTrigger === 'iconContainer') {
|
|
109
|
+
interactions.handleExpansion(event);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
98
112
|
const getRootProps = (externalProps = {}) => {
|
|
99
113
|
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
100
114
|
let ariaSelected;
|
|
@@ -162,7 +176,9 @@ export const useTreeItem2 = parameters => {
|
|
|
162
176
|
};
|
|
163
177
|
const getIconContainerProps = (externalProps = {}) => {
|
|
164
178
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
165
|
-
return _extends({}, externalEventHandlers, externalProps
|
|
179
|
+
return _extends({}, externalEventHandlers, externalProps, {
|
|
180
|
+
onClick: createIconContainerHandleClick(externalEventHandlers)
|
|
181
|
+
});
|
|
166
182
|
};
|
|
167
183
|
const getGroupTransitionProps = (externalProps = {}) => {
|
|
168
184
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
@@ -186,6 +186,11 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
|
|
|
186
186
|
* Used when the item's expansion is controlled.
|
|
187
187
|
*/
|
|
188
188
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
189
|
+
/**
|
|
190
|
+
* The slot that triggers the item's expansion when clicked.
|
|
191
|
+
* @default 'content'
|
|
192
|
+
*/
|
|
193
|
+
expansionTrigger: _propTypes.default.oneOf(['content', 'iconContainer']),
|
|
189
194
|
/**
|
|
190
195
|
* Unstable features, breaking changes might be introduced.
|
|
191
196
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -4,13 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.RICH_TREE_VIEW_PLUGINS = void 0;
|
|
7
|
-
var _useTreeViewId = require("../internals/plugins/useTreeViewId");
|
|
8
7
|
var _useTreeViewItems = require("../internals/plugins/useTreeViewItems");
|
|
9
8
|
var _useTreeViewExpansion = require("../internals/plugins/useTreeViewExpansion");
|
|
10
9
|
var _useTreeViewSelection = require("../internals/plugins/useTreeViewSelection");
|
|
11
10
|
var _useTreeViewFocus = require("../internals/plugins/useTreeViewFocus");
|
|
12
11
|
var _useTreeViewKeyboardNavigation = require("../internals/plugins/useTreeViewKeyboardNavigation");
|
|
13
12
|
var _useTreeViewIcons = require("../internals/plugins/useTreeViewIcons");
|
|
14
|
-
const RICH_TREE_VIEW_PLUGINS = exports.RICH_TREE_VIEW_PLUGINS = [
|
|
13
|
+
const RICH_TREE_VIEW_PLUGINS = exports.RICH_TREE_VIEW_PLUGINS = [_useTreeViewItems.useTreeViewItems, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewIcons.useTreeViewIcons];
|
|
15
14
|
|
|
16
15
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
|
@@ -148,6 +148,11 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
|
|
|
148
148
|
* Used when the item's expansion is controlled.
|
|
149
149
|
*/
|
|
150
150
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
151
|
+
/**
|
|
152
|
+
* The slot that triggers the item's expansion when clicked.
|
|
153
|
+
* @default 'content'
|
|
154
|
+
*/
|
|
155
|
+
expansionTrigger: _propTypes.default.oneOf(['content', 'iconContainer']),
|
|
151
156
|
/**
|
|
152
157
|
* Unstable features, breaking changes might be introduced.
|
|
153
158
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.SIMPLE_TREE_VIEW_PLUGINS = void 0;
|
|
7
|
-
var _useTreeViewId = require("../internals/plugins/useTreeViewId");
|
|
8
7
|
var _useTreeViewItems = require("../internals/plugins/useTreeViewItems");
|
|
9
8
|
var _useTreeViewExpansion = require("../internals/plugins/useTreeViewExpansion");
|
|
10
9
|
var _useTreeViewSelection = require("../internals/plugins/useTreeViewSelection");
|
|
@@ -12,6 +11,6 @@ var _useTreeViewFocus = require("../internals/plugins/useTreeViewFocus");
|
|
|
12
11
|
var _useTreeViewKeyboardNavigation = require("../internals/plugins/useTreeViewKeyboardNavigation");
|
|
13
12
|
var _useTreeViewIcons = require("../internals/plugins/useTreeViewIcons");
|
|
14
13
|
var _useTreeViewJSXItems = require("../internals/plugins/useTreeViewJSXItems");
|
|
15
|
-
const SIMPLE_TREE_VIEW_PLUGINS = exports.SIMPLE_TREE_VIEW_PLUGINS = [
|
|
14
|
+
const SIMPLE_TREE_VIEW_PLUGINS = exports.SIMPLE_TREE_VIEW_PLUGINS = [_useTreeViewItems.useTreeViewItems, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewIcons.useTreeViewIcons, _useTreeViewJSXItems.useTreeViewJSXItems];
|
|
16
15
|
|
|
17
16
|
// We can't infer this type from the plugin, otherwise we would lose the generics.
|
|
@@ -25,6 +25,7 @@ var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewCont
|
|
|
25
25
|
var _icons = require("../icons");
|
|
26
26
|
var _TreeItem2Provider = require("../TreeItem2Provider");
|
|
27
27
|
var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
|
|
28
|
+
var _useTreeItemState = require("./useTreeItemState");
|
|
28
29
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
29
30
|
const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
|
|
30
31
|
_excluded2 = ["ownerState"],
|
|
@@ -177,6 +178,9 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
177
178
|
selection: {
|
|
178
179
|
multiSelect
|
|
179
180
|
},
|
|
181
|
+
expansion: {
|
|
182
|
+
expansionTrigger
|
|
183
|
+
},
|
|
180
184
|
disabledItemsFocusable,
|
|
181
185
|
indentationAtItemLevel,
|
|
182
186
|
instance
|
|
@@ -202,6 +206,13 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
202
206
|
onKeyDown
|
|
203
207
|
} = props,
|
|
204
208
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
209
|
+
const {
|
|
210
|
+
expanded,
|
|
211
|
+
focused,
|
|
212
|
+
selected,
|
|
213
|
+
disabled,
|
|
214
|
+
handleExpansion
|
|
215
|
+
} = (0, _useTreeItemState.useTreeItemState)(itemId);
|
|
205
216
|
const {
|
|
206
217
|
contentRef,
|
|
207
218
|
rootRef
|
|
@@ -222,10 +233,6 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
222
233
|
return Boolean(reactChildren);
|
|
223
234
|
};
|
|
224
235
|
const expandable = isExpandable(children);
|
|
225
|
-
const expanded = instance.isItemExpanded(itemId);
|
|
226
|
-
const focused = instance.isItemFocused(itemId);
|
|
227
|
-
const selected = instance.isItemSelected(itemId);
|
|
228
|
-
const disabled = instance.isItemDisabled(itemId);
|
|
229
236
|
const ownerState = (0, _extends2.default)({}, props, {
|
|
230
237
|
expanded,
|
|
231
238
|
focused,
|
|
@@ -249,6 +256,11 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
249
256
|
} : {}),
|
|
250
257
|
className: classes.groupTransition
|
|
251
258
|
});
|
|
259
|
+
const handleIconContainerClick = event => {
|
|
260
|
+
if (expansionTrigger === 'iconContainer') {
|
|
261
|
+
handleExpansion(event);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
252
264
|
const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
|
|
253
265
|
const _useSlotProps = (0, _utils.useSlotProps)({
|
|
254
266
|
elementType: ExpansionIcon,
|
|
@@ -258,6 +270,9 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
|
|
|
258
270
|
return (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIcons.slotProps.collapseIcon, tempOwnerState), (0, _utils.resolveComponentProps)(inSlotProps?.collapseIcon, tempOwnerState));
|
|
259
271
|
}
|
|
260
272
|
return (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIcons.slotProps.expandIcon, tempOwnerState), (0, _utils.resolveComponentProps)(inSlotProps?.expandIcon, tempOwnerState));
|
|
273
|
+
},
|
|
274
|
+
additionalProps: {
|
|
275
|
+
onClick: handleIconContainerClick
|
|
261
276
|
}
|
|
262
277
|
}),
|
|
263
278
|
expansionIconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
|
|
@@ -42,7 +42,8 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
42
42
|
handleExpansion,
|
|
43
43
|
handleSelection,
|
|
44
44
|
handleCheckboxSelection,
|
|
45
|
-
preventSelection
|
|
45
|
+
preventSelection,
|
|
46
|
+
expansionTrigger
|
|
46
47
|
} = (0, _useTreeItemState.useTreeItemState)(itemId);
|
|
47
48
|
const icon = iconProp || expansionIcon || displayIcon;
|
|
48
49
|
const checkboxRef = React.useRef(null);
|
|
@@ -56,7 +57,9 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
|
|
|
56
57
|
if (checkboxRef.current?.contains(event.target)) {
|
|
57
58
|
return;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
if (expansionTrigger === 'content') {
|
|
61
|
+
handleExpansion(event);
|
|
62
|
+
}
|
|
60
63
|
if (!checkboxSelection) {
|
|
61
64
|
handleSelection(event);
|
|
62
65
|
}
|
|
@@ -12,6 +12,9 @@ function useTreeItemState(itemId) {
|
|
|
12
12
|
multiSelect,
|
|
13
13
|
checkboxSelection,
|
|
14
14
|
disableSelection
|
|
15
|
+
},
|
|
16
|
+
expansion: {
|
|
17
|
+
expansionTrigger
|
|
15
18
|
}
|
|
16
19
|
} = (0, _useTreeViewContext.useTreeViewContext)();
|
|
17
20
|
const expandable = instance.isItemExpandable(itemId);
|
|
@@ -76,6 +79,7 @@ function useTreeItemState(itemId) {
|
|
|
76
79
|
handleExpansion,
|
|
77
80
|
handleSelection,
|
|
78
81
|
handleCheckboxSelection,
|
|
79
|
-
preventSelection
|
|
82
|
+
preventSelection,
|
|
83
|
+
expansionTrigger
|
|
80
84
|
};
|
|
81
85
|
}
|
|
@@ -125,6 +125,11 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
|
|
|
125
125
|
* Used when the item's expansion is controlled.
|
|
126
126
|
*/
|
|
127
127
|
expandedItems: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
128
|
+
/**
|
|
129
|
+
* The slot that triggers the item's expansion when clicked.
|
|
130
|
+
* @default 'content'
|
|
131
|
+
*/
|
|
132
|
+
expansionTrigger: _propTypes.default.oneOf(['content', 'iconContainer']),
|
|
128
133
|
/**
|
|
129
134
|
* Unstable features, breaking changes might be introduced.
|
|
130
135
|
* For each feature, if the flag is not explicitly set to `true`,
|
|
@@ -11,6 +11,15 @@ const isItemExpandable = reactChildren => {
|
|
|
11
11
|
}
|
|
12
12
|
return Boolean(reactChildren);
|
|
13
13
|
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Plugins that need to be present in the Tree View in order for `useTreeItem2Utils` to work correctly.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Plugins that `useTreeItem2Utils` can use if they are present, but are not required.
|
|
21
|
+
*/
|
|
22
|
+
|
|
14
23
|
const useTreeItem2Utils = ({
|
|
15
24
|
itemId,
|
|
16
25
|
children
|
package/node/index.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.TreeViewChildrenItemProvider = TreeViewChildrenItemProvider;
|
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
var _useTreeViewContext = require("./useTreeViewContext");
|
|
12
|
+
var _utils = require("../utils/utils");
|
|
12
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
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); }
|
|
14
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; }
|
|
@@ -44,7 +45,8 @@ function TreeViewChildrenItemProvider(props) {
|
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
47
|
const previousChildrenIds = instance.getItemOrderedChildrenIds(itemId ?? null) ?? [];
|
|
47
|
-
const
|
|
48
|
+
const escapedIdAttr = (0, _utils.escapeOperandAttributeSelector)(idAttr);
|
|
49
|
+
const childrenElements = rootRef.current.querySelectorAll(`${itemId == null ? '' : `*[id="${escapedIdAttr}"] `}[role="treeitem"]:not(*[id="${escapedIdAttr}"] [role="treeitem"] [role="treeitem"])`);
|
|
48
50
|
const childrenIds = Array.from(childrenElements).map(child => childrenIdAttrToIdRef.current.get(child.id));
|
|
49
51
|
const hasChanged = childrenIds.length !== previousChildrenIds.length || childrenIds.some((childId, index) => childId !== previousChildrenIds[index]);
|
|
50
52
|
if (hasChanged) {
|
|
@@ -5,8 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.TREE_VIEW_CORE_PLUGINS = void 0;
|
|
7
7
|
var _useTreeViewInstanceEvents = require("./useTreeViewInstanceEvents");
|
|
8
|
+
var _useTreeViewId = require("./useTreeViewId");
|
|
8
9
|
/**
|
|
9
10
|
* Internal plugins that create the tools used by the other plugins.
|
|
10
11
|
* These plugins are used by the tree view components.
|
|
11
12
|
*/
|
|
12
|
-
const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents];
|
|
13
|
+
const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents, _useTreeViewId.useTreeViewId];
|
package/node/internals/index.js
CHANGED
|
@@ -45,12 +45,6 @@ Object.defineProperty(exports, "useTreeViewIcons", {
|
|
|
45
45
|
return _useTreeViewIcons.useTreeViewIcons;
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
|
-
Object.defineProperty(exports, "useTreeViewId", {
|
|
49
|
-
enumerable: true,
|
|
50
|
-
get: function () {
|
|
51
|
-
return _useTreeViewId.useTreeViewId;
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
48
|
Object.defineProperty(exports, "useTreeViewItems", {
|
|
55
49
|
enumerable: true,
|
|
56
50
|
get: function () {
|
|
@@ -82,7 +76,6 @@ var _useTreeViewExpansion = require("./plugins/useTreeViewExpansion");
|
|
|
82
76
|
var _useTreeViewSelection = require("./plugins/useTreeViewSelection");
|
|
83
77
|
var _useTreeViewFocus = require("./plugins/useTreeViewFocus");
|
|
84
78
|
var _useTreeViewKeyboardNavigation = require("./plugins/useTreeViewKeyboardNavigation");
|
|
85
|
-
var _useTreeViewId = require("./plugins/useTreeViewId");
|
|
86
79
|
var _useTreeViewIcons = require("./plugins/useTreeViewIcons");
|
|
87
80
|
var _useTreeViewItems = require("./plugins/useTreeViewItems");
|
|
88
81
|
var _useTreeViewJSXItems = require("./plugins/useTreeViewJSXItems");
|
|
@@ -62,6 +62,12 @@ const useTreeViewExpansion = ({
|
|
|
62
62
|
setExpandedItems(event, newExpanded);
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
|
+
const expansionTrigger = React.useMemo(() => {
|
|
66
|
+
if (params.expansionTrigger) {
|
|
67
|
+
return params.expansionTrigger;
|
|
68
|
+
}
|
|
69
|
+
return 'content';
|
|
70
|
+
}, [params.expansionTrigger]);
|
|
65
71
|
return {
|
|
66
72
|
publicAPI: {
|
|
67
73
|
setItemExpansion
|
|
@@ -72,6 +78,11 @@ const useTreeViewExpansion = ({
|
|
|
72
78
|
setItemExpansion,
|
|
73
79
|
toggleItemExpansion,
|
|
74
80
|
expandAllSiblings
|
|
81
|
+
},
|
|
82
|
+
contextValue: {
|
|
83
|
+
expansion: {
|
|
84
|
+
expansionTrigger
|
|
85
|
+
}
|
|
75
86
|
}
|
|
76
87
|
};
|
|
77
88
|
};
|
|
@@ -89,5 +100,6 @@ useTreeViewExpansion.params = {
|
|
|
89
100
|
expandedItems: true,
|
|
90
101
|
defaultExpandedItems: true,
|
|
91
102
|
onExpandedItemsChange: true,
|
|
92
|
-
onItemExpansionToggle: true
|
|
103
|
+
onItemExpansionToggle: true,
|
|
104
|
+
expansionTrigger: true
|
|
93
105
|
};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.escapeOperandAttributeSelector = escapeOperandAttributeSelector;
|
|
6
7
|
exports.getActiveElement = void 0;
|
|
7
8
|
// https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/
|
|
8
9
|
const getActiveElement = (root = document) => {
|
|
@@ -15,4 +16,10 @@ const getActiveElement = (root = document) => {
|
|
|
15
16
|
}
|
|
16
17
|
return activeEl;
|
|
17
18
|
};
|
|
18
|
-
|
|
19
|
+
|
|
20
|
+
// TODO, eventually replaces this function with CSS.escape, once available in jsdom, either added manually or built in
|
|
21
|
+
// https://github.com/jsdom/jsdom/issues/1550#issuecomment-236734471
|
|
22
|
+
exports.getActiveElement = getActiveElement;
|
|
23
|
+
function escapeOperandAttributeSelector(operand) {
|
|
24
|
+
return operand.replace(/["\\]/g, '\\$&');
|
|
25
|
+
}
|
|
@@ -22,6 +22,9 @@ const useTreeItem2 = parameters => {
|
|
|
22
22
|
disableSelection,
|
|
23
23
|
checkboxSelection
|
|
24
24
|
},
|
|
25
|
+
expansion: {
|
|
26
|
+
expansionTrigger
|
|
27
|
+
},
|
|
25
28
|
disabledItemsFocusable,
|
|
26
29
|
indentationAtItemLevel,
|
|
27
30
|
instance,
|
|
@@ -78,7 +81,9 @@ const useTreeItem2 = parameters => {
|
|
|
78
81
|
if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
|
|
79
82
|
return;
|
|
80
83
|
}
|
|
81
|
-
|
|
84
|
+
if (expansionTrigger === 'content') {
|
|
85
|
+
interactions.handleExpansion(event);
|
|
86
|
+
}
|
|
82
87
|
if (!checkboxSelection) {
|
|
83
88
|
interactions.handleSelection(event);
|
|
84
89
|
}
|
|
@@ -104,6 +109,15 @@ const useTreeItem2 = parameters => {
|
|
|
104
109
|
}
|
|
105
110
|
interactions.handleCheckboxSelection(event);
|
|
106
111
|
};
|
|
112
|
+
const createIconContainerHandleClick = otherHandlers => event => {
|
|
113
|
+
otherHandlers.onClick?.(event);
|
|
114
|
+
if (event.defaultMuiPrevented) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (expansionTrigger === 'iconContainer') {
|
|
118
|
+
interactions.handleExpansion(event);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
107
121
|
const getRootProps = (externalProps = {}) => {
|
|
108
122
|
const externalEventHandlers = (0, _extends2.default)({}, (0, _utils.extractEventHandlers)(parameters), (0, _utils.extractEventHandlers)(externalProps));
|
|
109
123
|
let ariaSelected;
|
|
@@ -171,7 +185,9 @@ const useTreeItem2 = parameters => {
|
|
|
171
185
|
};
|
|
172
186
|
const getIconContainerProps = (externalProps = {}) => {
|
|
173
187
|
const externalEventHandlers = (0, _utils.extractEventHandlers)(externalProps);
|
|
174
|
-
return (0, _extends2.default)({}, externalEventHandlers, externalProps
|
|
188
|
+
return (0, _extends2.default)({}, externalEventHandlers, externalProps, {
|
|
189
|
+
onClick: createIconContainerHandleClick(externalEventHandlers)
|
|
190
|
+
});
|
|
175
191
|
};
|
|
176
192
|
const getGroupTransitionProps = (externalProps = {}) => {
|
|
177
193
|
const externalEventHandlers = (0, _utils.extractEventHandlers)(externalProps);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-tree-view",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.8.0",
|
|
4
4
|
"description": "The community edition of the Tree View components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./node/index.js",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@babel/runtime": "^7.24.7",
|
|
37
37
|
"@mui/base": "^5.0.0-beta.40",
|
|
38
|
-
"@mui/system": "^5.15.
|
|
39
|
-
"@mui/utils": "^5.15.
|
|
38
|
+
"@mui/system": "^5.15.20",
|
|
39
|
+
"@mui/utils": "^5.15.20",
|
|
40
40
|
"@types/react-transition-group": "^4.4.10",
|
|
41
41
|
"clsx": "^2.1.1",
|
|
42
42
|
"prop-types": "^15.8.1",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2MinimalPlugins } from './useTreeItem2.types';
|
|
2
|
-
export declare const useTreeItem2: <TSignatures extends UseTreeItem2MinimalPlugins = UseTreeItem2MinimalPlugins>(parameters: UseTreeItem2Parameters) => UseTreeItem2ReturnValue<TSignatures>;
|
|
1
|
+
import { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2MinimalPlugins, UseTreeItem2OptionalPlugins } from './useTreeItem2.types';
|
|
2
|
+
export declare const useTreeItem2: <TSignatures extends UseTreeItem2MinimalPlugins = UseTreeItem2MinimalPlugins, TOptionalSignatures extends UseTreeItem2OptionalPlugins = readonly []>(parameters: UseTreeItem2Parameters) => UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
|
|
@@ -13,6 +13,9 @@ export const useTreeItem2 = parameters => {
|
|
|
13
13
|
disableSelection,
|
|
14
14
|
checkboxSelection
|
|
15
15
|
},
|
|
16
|
+
expansion: {
|
|
17
|
+
expansionTrigger
|
|
18
|
+
},
|
|
16
19
|
disabledItemsFocusable,
|
|
17
20
|
indentationAtItemLevel,
|
|
18
21
|
instance,
|
|
@@ -69,7 +72,9 @@ export const useTreeItem2 = parameters => {
|
|
|
69
72
|
if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
|
|
70
73
|
return;
|
|
71
74
|
}
|
|
72
|
-
|
|
75
|
+
if (expansionTrigger === 'content') {
|
|
76
|
+
interactions.handleExpansion(event);
|
|
77
|
+
}
|
|
73
78
|
if (!checkboxSelection) {
|
|
74
79
|
interactions.handleSelection(event);
|
|
75
80
|
}
|
|
@@ -95,6 +100,15 @@ export const useTreeItem2 = parameters => {
|
|
|
95
100
|
}
|
|
96
101
|
interactions.handleCheckboxSelection(event);
|
|
97
102
|
};
|
|
103
|
+
const createIconContainerHandleClick = otherHandlers => event => {
|
|
104
|
+
otherHandlers.onClick?.(event);
|
|
105
|
+
if (event.defaultMuiPrevented) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (expansionTrigger === 'iconContainer') {
|
|
109
|
+
interactions.handleExpansion(event);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
98
112
|
const getRootProps = (externalProps = {}) => {
|
|
99
113
|
const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
|
|
100
114
|
let ariaSelected;
|
|
@@ -162,7 +176,9 @@ export const useTreeItem2 = parameters => {
|
|
|
162
176
|
};
|
|
163
177
|
const getIconContainerProps = (externalProps = {}) => {
|
|
164
178
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
165
|
-
return _extends({}, externalEventHandlers, externalProps
|
|
179
|
+
return _extends({}, externalEventHandlers, externalProps, {
|
|
180
|
+
onClick: createIconContainerHandleClick(externalEventHandlers)
|
|
181
|
+
});
|
|
166
182
|
};
|
|
167
183
|
const getGroupTransitionProps = (externalProps = {}) => {
|
|
168
184
|
const externalEventHandlers = extractEventHandlers(externalProps);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { TreeViewItemId } from '../models';
|
|
3
3
|
import { MuiCancellableEventHandler } from '../internals/models/MuiCancellableEvent';
|
|
4
|
-
import {
|
|
4
|
+
import { TreeViewPublicAPI } from '../internals/models';
|
|
5
5
|
import { UseTreeViewSelectionSignature } from '../internals/plugins/useTreeViewSelection';
|
|
6
6
|
import { UseTreeViewItemsSignature } from '../internals/plugins/useTreeViewItems';
|
|
7
|
-
import { UseTreeViewIdSignature } from '../internals/plugins/useTreeViewId';
|
|
8
7
|
import { UseTreeViewFocusSignature } from '../internals/plugins/useTreeViewFocus';
|
|
9
8
|
import { UseTreeViewKeyboardNavigationSignature } from '../internals/plugins/useTreeViewKeyboardNavigation';
|
|
9
|
+
import { UseTreeViewExpansionSignature } from '../internals/plugins/useTreeViewExpansion';
|
|
10
10
|
export interface UseTreeItem2Parameters {
|
|
11
11
|
/**
|
|
12
12
|
* The id attribute of the item. If not provided, it will be generated.
|
|
@@ -61,6 +61,7 @@ export interface UseTreeItem2ContentSlotOwnProps {
|
|
|
61
61
|
}
|
|
62
62
|
export type UseTreeItem2ContentSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2ContentSlotOwnProps;
|
|
63
63
|
export interface UseTreeItem2IconContainerSlotOwnProps {
|
|
64
|
+
onClick: MuiCancellableEventHandler<React.MouseEvent>;
|
|
64
65
|
}
|
|
65
66
|
export type UseTreeItemIconContainerSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2IconContainerSlotOwnProps;
|
|
66
67
|
export interface UseTreeItem2LabelSlotOwnProps {
|
|
@@ -95,7 +96,7 @@ export interface UseTreeItem2Status {
|
|
|
95
96
|
selected: boolean;
|
|
96
97
|
disabled: boolean;
|
|
97
98
|
}
|
|
98
|
-
export interface UseTreeItem2ReturnValue<TSignatures extends
|
|
99
|
+
export interface UseTreeItem2ReturnValue<TSignatures extends UseTreeItem2MinimalPlugins, TOptionalSignatures extends UseTreeItem2OptionalPlugins> {
|
|
99
100
|
/**
|
|
100
101
|
* Resolver for the root slot's props.
|
|
101
102
|
* @param {ExternalProps} externalProps Additional props for the root slot
|
|
@@ -143,12 +144,19 @@ export interface UseTreeItem2ReturnValue<TSignatures extends readonly TreeViewAn
|
|
|
143
144
|
/**
|
|
144
145
|
* The object the allows Tree View manipulation.
|
|
145
146
|
*/
|
|
146
|
-
publicAPI: TreeViewPublicAPI<TSignatures>;
|
|
147
|
+
publicAPI: TreeViewPublicAPI<TSignatures, TOptionalSignatures>;
|
|
147
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Plugins that need to be present in the Tree View in order for `useTreeItem2` to work correctly.
|
|
151
|
+
*/
|
|
148
152
|
export type UseTreeItem2MinimalPlugins = readonly [
|
|
149
153
|
UseTreeViewSelectionSignature,
|
|
154
|
+
UseTreeViewExpansionSignature,
|
|
150
155
|
UseTreeViewItemsSignature,
|
|
151
|
-
UseTreeViewIdSignature,
|
|
152
156
|
UseTreeViewFocusSignature,
|
|
153
157
|
UseTreeViewKeyboardNavigationSignature
|
|
154
158
|
];
|
|
159
|
+
/**
|
|
160
|
+
* Plugins that `useTreeItem2` can use if they are present, but are not required.
|
|
161
|
+
*/
|
|
162
|
+
export type UseTreeItem2OptionalPlugins = readonly [];
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|