@mui/x-tree-view 7.11.0 → 7.12.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.
Files changed (111) hide show
  1. package/CHANGELOG.md +194 -4
  2. package/RichTreeView/RichTreeView.js +11 -7
  3. package/RichTreeView/RichTreeView.types.d.ts +1 -1
  4. package/SimpleTreeView/SimpleTreeView.js +11 -7
  5. package/SimpleTreeView/SimpleTreeView.types.d.ts +1 -1
  6. package/TreeItem/TreeItem.js +36 -10
  7. package/TreeItem/TreeItem.types.d.ts +1 -1
  8. package/TreeItem/TreeItemContent.d.ts +2 -0
  9. package/TreeItem/TreeItemContent.js +11 -3
  10. package/TreeItem/treeItemClasses.d.ts +2 -0
  11. package/TreeItem/treeItemClasses.js +1 -1
  12. package/TreeItem/useTreeItemState.d.ts +1 -0
  13. package/TreeItem/useTreeItemState.js +5 -1
  14. package/TreeItem2/TreeItem2.js +15 -3
  15. package/TreeItem2/TreeItem2.types.d.ts +8 -1
  16. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +4 -0
  17. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +69 -0
  18. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts +6 -0
  19. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js +1 -0
  20. package/TreeItem2DragAndDropOverlay/index.d.ts +2 -0
  21. package/TreeItem2DragAndDropOverlay/index.js +1 -0
  22. package/TreeItem2DragAndDropOverlay/package.json +6 -0
  23. package/TreeItem2Icon/TreeItem2Icon.js +3 -2
  24. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +1 -1
  25. package/TreeItem2Provider/TreeItem2Provider.js +1 -1
  26. package/TreeView/TreeView.js +8 -3
  27. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -1
  28. package/index.js +1 -1
  29. package/internals/TreeViewProvider/index.d.ts +1 -0
  30. package/internals/TreeViewProvider/index.js +2 -1
  31. package/internals/index.d.ts +6 -5
  32. package/internals/index.js +4 -3
  33. package/internals/models/index.d.ts +2 -0
  34. package/internals/models/index.js +3 -1
  35. package/internals/models/itemPlugin.d.ts +37 -0
  36. package/internals/models/itemPlugin.js +1 -0
  37. package/internals/models/plugin.d.ts +2 -15
  38. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -3
  39. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
  40. package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  41. package/internals/plugins/useTreeViewItems/index.js +2 -1
  42. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  43. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +18 -4
  44. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
  45. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +2 -2
  46. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +1 -2
  47. package/internals/useTreeView/useTreeView.types.d.ts +1 -1
  48. package/internals/useTreeView/useTreeViewBuildContext.js +23 -1
  49. package/internals/utils/tree.d.ts +8 -0
  50. package/internals/utils/tree.js +11 -0
  51. package/internals/utils/warning.d.ts +2 -1
  52. package/internals/utils/warning.js +19 -12
  53. package/models/items.d.ts +1 -0
  54. package/modern/RichTreeView/RichTreeView.js +11 -7
  55. package/modern/SimpleTreeView/SimpleTreeView.js +11 -7
  56. package/modern/TreeItem/TreeItem.js +36 -10
  57. package/modern/TreeItem/TreeItemContent.js +11 -3
  58. package/modern/TreeItem/treeItemClasses.js +1 -1
  59. package/modern/TreeItem/useTreeItemState.js +5 -1
  60. package/modern/TreeItem2/TreeItem2.js +15 -3
  61. package/modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +69 -0
  62. package/modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js +1 -0
  63. package/modern/TreeItem2DragAndDropOverlay/index.js +1 -0
  64. package/modern/TreeItem2Icon/TreeItem2Icon.js +3 -2
  65. package/modern/TreeItem2Provider/TreeItem2Provider.js +1 -1
  66. package/modern/TreeView/TreeView.js +8 -3
  67. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -1
  68. package/modern/index.js +1 -1
  69. package/modern/internals/TreeViewProvider/index.js +2 -1
  70. package/modern/internals/index.js +4 -3
  71. package/modern/internals/models/index.js +3 -1
  72. package/modern/internals/models/itemPlugin.js +1 -0
  73. package/modern/internals/plugins/useTreeViewItems/index.js +2 -1
  74. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  75. package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
  76. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +2 -2
  77. package/modern/internals/useTreeView/useTreeViewBuildContext.js +23 -1
  78. package/modern/internals/utils/tree.js +11 -0
  79. package/modern/internals/utils/warning.js +19 -12
  80. package/modern/useTreeItem2/useTreeItem2.js +43 -15
  81. package/node/RichTreeView/RichTreeView.js +12 -8
  82. package/node/SimpleTreeView/SimpleTreeView.js +11 -7
  83. package/node/TreeItem/TreeItem.js +45 -19
  84. package/node/TreeItem/TreeItemContent.js +11 -3
  85. package/node/TreeItem/treeItemClasses.js +1 -1
  86. package/node/TreeItem/useTreeItemState.js +6 -2
  87. package/node/TreeItem2/TreeItem2.js +21 -9
  88. package/node/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +77 -0
  89. package/node/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js +5 -0
  90. package/node/TreeItem2DragAndDropOverlay/index.js +12 -0
  91. package/node/TreeItem2Icon/TreeItem2Icon.js +6 -5
  92. package/node/TreeItem2Provider/TreeItem2Provider.js +2 -2
  93. package/node/TreeView/TreeView.js +8 -3
  94. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +2 -2
  95. package/node/index.js +1 -1
  96. package/node/internals/TreeViewProvider/index.js +8 -1
  97. package/node/internals/index.js +27 -2
  98. package/node/internals/models/index.js +22 -0
  99. package/node/internals/models/itemPlugin.js +5 -0
  100. package/node/internals/plugins/useTreeViewItems/index.js +14 -1
  101. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  102. package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -2
  103. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +1 -1
  104. package/node/internals/useTreeView/useTreeViewBuildContext.js +23 -1
  105. package/node/internals/utils/tree.js +14 -2
  106. package/node/internals/utils/warning.js +21 -14
  107. package/node/useTreeItem2/useTreeItem2.js +49 -21
  108. package/package.json +5 -6
  109. package/useTreeItem2/index.d.ts +1 -1
  110. package/useTreeItem2/useTreeItem2.js +43 -15
  111. package/useTreeItem2/useTreeItem2.types.d.ts +17 -4
@@ -14,13 +14,14 @@ var _unsupportedProp = _interopRequireDefault(require("@mui/utils/unsupportedPro
14
14
  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
- var _utils = require("@mui/base/utils");
17
+ var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
18
18
  var _createStyled = require("@mui/system/createStyled");
19
19
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
20
20
  var _zeroStyled = require("../internals/zero-styled");
21
21
  var _useTreeItem = require("../useTreeItem2");
22
22
  var _TreeItem = require("../TreeItem");
23
23
  var _TreeItem2Icon = require("../TreeItem2Icon");
24
+ var _TreeItem2DragAndDropOverlay = require("../TreeItem2DragAndDropOverlay");
24
25
  var _TreeItem2Provider = require("../TreeItem2Provider");
25
26
  var _jsxRuntime = require("react/jsx-runtime");
26
27
  const _excluded = ["visible"],
@@ -51,6 +52,7 @@ const TreeItem2Content = exports.TreeItem2Content = (0, _zeroStyled.styled)('div
51
52
  width: '100%',
52
53
  boxSizing: 'border-box',
53
54
  // prevent width + padding to overflow
55
+ position: 'relative',
54
56
  display: 'flex',
55
57
  alignItems: 'center',
56
58
  gap: theme.spacing(1),
@@ -185,7 +187,8 @@ const useUtilityClasses = ownerState => {
185
187
  iconContainer: ['iconContainer'],
186
188
  checkbox: ['checkbox'],
187
189
  label: ['label'],
188
- groupTransition: ['groupTransition']
190
+ groupTransition: ['groupTransition'],
191
+ dragAndDropOverlay: ['dragAndDropOverlay']
189
192
  };
190
193
  return (0, _composeClasses.default)(slots, _TreeItem.getTreeItemUtilityClass, classes);
191
194
  };
@@ -221,6 +224,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
221
224
  getCheckboxProps,
222
225
  getLabelProps,
223
226
  getGroupTransitionProps,
227
+ getDragAndDropOverlayProps,
224
228
  status
225
229
  } = (0, _useTreeItem.unstable_useTreeItem2)({
226
230
  id,
@@ -232,7 +236,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
232
236
  const ownerState = (0, _extends2.default)({}, props, status);
233
237
  const classes = useUtilityClasses(ownerState);
234
238
  const Root = slots.root ?? TreeItem2Root;
235
- const rootProps = (0, _utils.useSlotProps)({
239
+ const rootProps = (0, _useSlotProps.default)({
236
240
  elementType: Root,
237
241
  getSlotProps: getRootProps,
238
242
  externalForwardedProps: other,
@@ -244,7 +248,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
244
248
  className: classes.root
245
249
  });
246
250
  const Content = slots.content ?? TreeItem2Content;
247
- const contentProps = (0, _utils.useSlotProps)({
251
+ const contentProps = (0, _useSlotProps.default)({
248
252
  elementType: Content,
249
253
  getSlotProps: getContentProps,
250
254
  externalSlotProps: slotProps.content,
@@ -252,7 +256,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
252
256
  className: (0, _clsx.default)(classes.content, status.expanded && classes.expanded, status.selected && classes.selected, status.focused && classes.focused, status.disabled && classes.disabled)
253
257
  });
254
258
  const IconContainer = slots.iconContainer ?? TreeItem2IconContainer;
255
- const iconContainerProps = (0, _utils.useSlotProps)({
259
+ const iconContainerProps = (0, _useSlotProps.default)({
256
260
  elementType: IconContainer,
257
261
  getSlotProps: getIconContainerProps,
258
262
  externalSlotProps: slotProps.iconContainer,
@@ -260,7 +264,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
260
264
  className: classes.iconContainer
261
265
  });
262
266
  const Label = slots.label ?? TreeItem2Label;
263
- const labelProps = (0, _utils.useSlotProps)({
267
+ const labelProps = (0, _useSlotProps.default)({
264
268
  elementType: Label,
265
269
  getSlotProps: getLabelProps,
266
270
  externalSlotProps: slotProps.label,
@@ -268,7 +272,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
268
272
  className: classes.label
269
273
  });
270
274
  const Checkbox = slots.checkbox ?? TreeItem2Checkbox;
271
- const checkboxProps = (0, _utils.useSlotProps)({
275
+ const checkboxProps = (0, _useSlotProps.default)({
272
276
  elementType: Checkbox,
273
277
  getSlotProps: getCheckboxProps,
274
278
  externalSlotProps: slotProps.checkbox,
@@ -276,13 +280,21 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
276
280
  className: classes.checkbox
277
281
  });
278
282
  const GroupTransition = slots.groupTransition ?? undefined;
279
- const groupTransitionProps = (0, _utils.useSlotProps)({
283
+ const groupTransitionProps = (0, _useSlotProps.default)({
280
284
  elementType: GroupTransition,
281
285
  getSlotProps: getGroupTransitionProps,
282
286
  externalSlotProps: slotProps.groupTransition,
283
287
  ownerState: {},
284
288
  className: classes.groupTransition
285
289
  });
290
+ const DragAndDropOverlay = slots.dragAndDropOverlay ?? _TreeItem2DragAndDropOverlay.TreeItem2DragAndDropOverlay;
291
+ const dragAndDropOverlayProps = (0, _useSlotProps.default)({
292
+ elementType: DragAndDropOverlay,
293
+ getSlotProps: getDragAndDropOverlayProps,
294
+ externalSlotProps: slotProps.dragAndDropOverlay,
295
+ ownerState: {},
296
+ className: classes.dragAndDropOverlay
297
+ });
286
298
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2Provider.TreeItem2Provider, {
287
299
  itemId: itemId,
288
300
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Root, (0, _extends2.default)({}, rootProps, {
@@ -293,7 +305,7 @@ const TreeItem2 = exports.TreeItem2 = /*#__PURE__*/React.forwardRef(function Tre
293
305
  slots: slots,
294
306
  slotProps: slotProps
295
307
  })
296
- })), /*#__PURE__*/(0, _jsxRuntime.jsx)(Checkbox, (0, _extends2.default)({}, checkboxProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(Label, (0, _extends2.default)({}, labelProps))]
308
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)(Checkbox, (0, _extends2.default)({}, checkboxProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(Label, (0, _extends2.default)({}, labelProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(DragAndDropOverlay, (0, _extends2.default)({}, dragAndDropOverlayProps))]
297
309
  })), children && /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeItem2GroupTransition, (0, _extends2.default)({
298
310
  as: GroupTransition
299
311
  }, groupTransitionProps))]
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TreeItem2DragAndDropOverlay = TreeItem2DragAndDropOverlay;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _styles = require("@mui/material/styles");
11
+ var _system = require("@mui/system");
12
+ var _zeroStyled = require("../internals/zero-styled");
13
+ var _jsxRuntime = require("react/jsx-runtime");
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); }
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; }
16
+ const TreeItem2DragAndDropOverlayRoot = (0, _zeroStyled.styled)('div', {
17
+ name: 'MuiTreeItem2DragAndDropOverlay',
18
+ slot: 'Root',
19
+ overridesResolver: (props, styles) => styles.root,
20
+ shouldForwardProp: prop => (0, _system.shouldForwardProp)(prop) && prop !== 'action'
21
+ })(({
22
+ theme
23
+ }) => ({
24
+ position: 'absolute',
25
+ left: 0,
26
+ display: 'flex',
27
+ top: 0,
28
+ bottom: 0,
29
+ right: 0,
30
+ pointerEvents: 'none',
31
+ variants: [{
32
+ props: {
33
+ action: 'make-child'
34
+ },
35
+ style: {
36
+ marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
37
+ borderRadius: theme.shape.borderRadius,
38
+ backgroundColor: (0, _styles.alpha)((theme.vars || theme).palette.primary.dark, 0.15)
39
+ }
40
+ }, {
41
+ props: {
42
+ action: 'reorder-above'
43
+ },
44
+ style: (0, _extends2.default)({
45
+ marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
46
+ borderTop: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[900], 0.6)}`
47
+ }, theme.palette.mode === 'dark' && {
48
+ borderTop: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[100], 0.6)}`
49
+ })
50
+ }, {
51
+ props: {
52
+ action: 'reorder-below'
53
+ },
54
+ style: (0, _extends2.default)({
55
+ marginLeft: 'calc(var(--TreeView-indentMultiplier) * var(--TreeView-itemDepth))',
56
+ borderBottom: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[900], 0.6)}`
57
+ }, theme.palette.mode === 'dark' && {
58
+ borderBottom: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[100], 0.6)}`
59
+ })
60
+ }, {
61
+ props: {
62
+ action: 'move-to-parent'
63
+ },
64
+ style: (0, _extends2.default)({
65
+ marginLeft: 'calc(var(--TreeView-indentMultiplier) * calc(var(--TreeView-itemDepth) - 1))',
66
+ borderBottom: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[900], 0.6)}`
67
+ }, theme.palette.mode === 'dark' && {
68
+ borderBottom: `1px solid ${(0, _styles.alpha)((theme.vars || theme).palette.grey[900], 0.6)}`
69
+ })
70
+ }]
71
+ }));
72
+ function TreeItem2DragAndDropOverlay(props) {
73
+ if (props.action == null) {
74
+ return null;
75
+ }
76
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeItem2DragAndDropOverlayRoot, (0, _extends2.default)({}, props));
77
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "TreeItem2DragAndDropOverlay", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _TreeItem2DragAndDropOverlay.TreeItem2DragAndDropOverlay;
10
+ }
11
+ });
12
+ var _TreeItem2DragAndDropOverlay = require("./TreeItem2DragAndDropOverlay");
@@ -8,8 +8,9 @@ exports.TreeItem2Icon = TreeItem2Icon;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
- var _utils = require("@mui/base/utils");
12
- var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
11
+ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps"));
12
+ var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
13
+ var _TreeViewProvider = require("../internals/TreeViewProvider");
13
14
  var _icons = require("../icons");
14
15
  var _jsxRuntime = require("react/jsx-runtime");
15
16
  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); }
@@ -20,7 +21,7 @@ function TreeItem2Icon(props) {
20
21
  slotProps,
21
22
  status
22
23
  } = props;
23
- const context = (0, _useTreeViewContext.useTreeViewContext)();
24
+ const context = (0, _TreeViewProvider.useTreeViewContext)();
24
25
  const contextIcons = (0, _extends2.default)({}, context.icons.slots, {
25
26
  expandIcon: context.icons.slots.expandIcon ?? _icons.TreeViewExpandIcon,
26
27
  collapseIcon: context.icons.slots.collapseIcon ?? _icons.TreeViewCollapseIcon
@@ -39,9 +40,9 @@ function TreeItem2Icon(props) {
39
40
  iconName = 'endIcon';
40
41
  }
41
42
  const Icon = slots?.[iconName] ?? contextIcons[iconName];
42
- const iconProps = (0, _utils.useSlotProps)({
43
+ const iconProps = (0, _useSlotProps.default)({
43
44
  elementType: Icon,
44
- externalSlotProps: tempOwnerState => (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIconProps[iconName], tempOwnerState), (0, _utils.resolveComponentProps)(slotProps?.[iconName], tempOwnerState)),
45
+ externalSlotProps: tempOwnerState => (0, _extends2.default)({}, (0, _resolveComponentProps.default)(contextIconProps[iconName], tempOwnerState), (0, _resolveComponentProps.default)(slotProps?.[iconName], tempOwnerState)),
45
46
  // TODO: Add proper ownerState
46
47
  ownerState: {}
47
48
  });
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.TreeItem2Provider = TreeItem2Provider;
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
- var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
9
+ var _TreeViewProvider = require("../internals/TreeViewProvider");
10
10
  function TreeItem2Provider(props) {
11
11
  const {
12
12
  children,
@@ -15,7 +15,7 @@ function TreeItem2Provider(props) {
15
15
  const {
16
16
  wrapItem,
17
17
  instance
18
- } = (0, _useTreeViewContext.useTreeViewContext)();
18
+ } = (0, _TreeViewProvider.useTreeViewContext)();
19
19
  return wrapItem({
20
20
  children,
21
21
  itemId,
@@ -164,6 +164,12 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
164
164
  * @param {array} itemIds The ids of the expanded items.
165
165
  */
166
166
  onExpandedItemsChange: _propTypes.default.func,
167
+ /**
168
+ * Callback fired when the `content` slot of a given tree item is clicked.
169
+ * @param {React.MouseEvent} event The DOM event that triggered the change.
170
+ * @param {string} itemId The id of the focused item.
171
+ */
172
+ onItemClick: _propTypes.default.func,
167
173
  /**
168
174
  * Callback fired when a tree item is expanded or collapsed.
169
175
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
@@ -172,10 +178,9 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
172
178
  */
173
179
  onItemExpansionToggle: _propTypes.default.func,
174
180
  /**
175
- * Callback fired when tree items are focused.
176
- * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
181
+ * Callback fired when a given tree item is focused.
182
+ * @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
177
183
  * @param {string} itemId The id of the focused item.
178
- * @param {string} value of the focused item.
179
184
  */
180
185
  onItemFocus: _propTypes.default.func,
181
186
  /**
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useTreeItem2Utils = void 0;
7
- var _useTreeViewContext = require("../../internals/TreeViewProvider/useTreeViewContext");
7
+ var _TreeViewProvider = require("../../internals/TreeViewProvider");
8
8
  const isItemExpandable = reactChildren => {
9
9
  if (Array.isArray(reactChildren)) {
10
10
  return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
@@ -29,7 +29,7 @@ const useTreeItem2Utils = ({
29
29
  selection: {
30
30
  multiSelect
31
31
  }
32
- } = (0, _useTreeViewContext.useTreeViewContext)();
32
+ } = (0, _TreeViewProvider.useTreeViewContext)();
33
33
  const status = {
34
34
  expandable: isItemExpandable(children),
35
35
  expanded: instance.isItemExpanded(itemId),
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v7.11.0
2
+ * @mui/x-tree-view v7.12.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -9,4 +9,11 @@ Object.defineProperty(exports, "TreeViewProvider", {
9
9
  return _TreeViewProvider.TreeViewProvider;
10
10
  }
11
11
  });
12
- var _TreeViewProvider = require("./TreeViewProvider");
12
+ Object.defineProperty(exports, "useTreeViewContext", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _useTreeViewContext.useTreeViewContext;
16
+ }
17
+ });
18
+ var _TreeViewProvider = require("./TreeViewProvider");
19
+ var _useTreeViewContext = require("./useTreeViewContext");
@@ -3,16 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "TREE_VIEW_ROOT_PARENT_ID", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "TreeViewProvider", {
7
13
  enumerable: true,
8
14
  get: function () {
9
15
  return _TreeViewProvider.TreeViewProvider;
10
16
  }
11
17
  });
12
- Object.defineProperty(exports, "buildWarning", {
18
+ Object.defineProperty(exports, "buildSiblingIndexes", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _useTreeViewItems.buildSiblingIndexes;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "isTargetInDescendants", {
13
25
  enumerable: true,
14
26
  get: function () {
15
- return _warning.buildWarning;
27
+ return _tree.isTargetInDescendants;
16
28
  }
17
29
  });
18
30
  Object.defineProperty(exports, "unstable_resetCleanupTracking", {
@@ -27,6 +39,12 @@ Object.defineProperty(exports, "useTreeView", {
27
39
  return _useTreeView.useTreeView;
28
40
  }
29
41
  });
42
+ Object.defineProperty(exports, "useTreeViewContext", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _TreeViewProvider.useTreeViewContext;
46
+ }
47
+ });
30
48
  Object.defineProperty(exports, "useTreeViewExpansion", {
31
49
  enumerable: true,
32
50
  get: function () {
@@ -69,6 +87,12 @@ Object.defineProperty(exports, "useTreeViewSelection", {
69
87
  return _useTreeViewSelection.useTreeViewSelection;
70
88
  }
71
89
  });
90
+ Object.defineProperty(exports, "warnOnce", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _warning.warnOnce;
94
+ }
95
+ });
72
96
  var _useTreeView = require("./useTreeView");
73
97
  var _TreeViewProvider = require("./TreeViewProvider");
74
98
  var _useInstanceEventHandler = require("./hooks/useInstanceEventHandler");
@@ -79,4 +103,5 @@ var _useTreeViewKeyboardNavigation = require("./plugins/useTreeViewKeyboardNavig
79
103
  var _useTreeViewIcons = require("./plugins/useTreeViewIcons");
80
104
  var _useTreeViewItems = require("./plugins/useTreeViewItems");
81
105
  var _useTreeViewJSXItems = require("./plugins/useTreeViewJSXItems");
106
+ var _tree = require("./utils/tree");
82
107
  var _warning = require("./utils/warning");
@@ -25,6 +25,17 @@ Object.keys(_plugin).forEach(function (key) {
25
25
  }
26
26
  });
27
27
  });
28
+ var _itemPlugin = require("./itemPlugin");
29
+ Object.keys(_itemPlugin).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _itemPlugin[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _itemPlugin[key];
36
+ }
37
+ });
38
+ });
28
39
  var _treeView = require("./treeView");
29
40
  Object.keys(_treeView).forEach(function (key) {
30
41
  if (key === "default" || key === "__esModule") return;
@@ -35,4 +46,15 @@ Object.keys(_treeView).forEach(function (key) {
35
46
  return _treeView[key];
36
47
  }
37
48
  });
49
+ });
50
+ var _MuiCancellableEvent = require("./MuiCancellableEvent");
51
+ Object.keys(_MuiCancellableEvent).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _MuiCancellableEvent[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _MuiCancellableEvent[key];
58
+ }
59
+ });
38
60
  });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -3,10 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "TREE_VIEW_ROOT_PARENT_ID", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _useTreeViewItems2.TREE_VIEW_ROOT_PARENT_ID;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "buildSiblingIndexes", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _useTreeViewItems2.buildSiblingIndexes;
16
+ }
17
+ });
6
18
  Object.defineProperty(exports, "useTreeViewItems", {
7
19
  enumerable: true,
8
20
  get: function () {
9
21
  return _useTreeViewItems.useTreeViewItems;
10
22
  }
11
23
  });
12
- var _useTreeViewItems = require("./useTreeViewItems");
24
+ var _useTreeViewItems = require("./useTreeViewItems");
25
+ var _useTreeViewItems2 = require("./useTreeViewItems.utils");
@@ -193,8 +193,11 @@ const useTreeViewItems = ({
193
193
  areItemUpdatesPrevented
194
194
  },
195
195
  contextValue: {
196
- disabledItemsFocusable: params.disabledItemsFocusable,
197
- indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
196
+ items: {
197
+ onItemClick: params.onItemClick,
198
+ disabledItemsFocusable: params.disabledItemsFocusable,
199
+ indentationAtItemLevel: experimentalFeatures.indentationAtItemLevel ?? false
200
+ }
198
201
  }
199
202
  };
200
203
  };
@@ -226,5 +229,6 @@ useTreeViewItems.params = {
226
229
  isItemDisabled: true,
227
230
  getItemLabel: true,
228
231
  getItemId: true,
232
+ onItemClick: true,
229
233
  itemChildrenIndentation: true
230
234
  };
@@ -11,7 +11,7 @@ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallb
11
11
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
12
12
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
13
13
  var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
14
- var _useTreeViewContext = require("../../TreeViewProvider/useTreeViewContext");
14
+ var _TreeViewProvider = require("../../TreeViewProvider");
15
15
  var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider");
16
16
  var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
17
17
  var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
@@ -109,7 +109,7 @@ const useTreeViewJSXItemsItemPlugin = ({
109
109
  }) => {
110
110
  const {
111
111
  instance
112
- } = (0, _useTreeViewContext.useTreeViewContext)();
112
+ } = (0, _TreeViewProvider.useTreeViewContext)();
113
113
  const {
114
114
  children,
115
115
  disabled = false,
@@ -69,7 +69,7 @@ const useTreeViewKeyboardNavigation = ({
69
69
  if (event.defaultMuiPrevented) {
70
70
  return;
71
71
  }
72
- if (event.altKey || event.currentTarget !== event.target.closest('*[role="treeitem"]')) {
72
+ if (event.altKey || (0, _tree.isTargetInDescendants)(event.target, event.currentTarget)) {
73
73
  return;
74
74
  }
75
75
  const ctrlPressed = event.ctrlKey || event.metaKey;
@@ -13,6 +13,8 @@ const useTreeViewBuildContext = ({
13
13
  const runItemPlugins = itemPluginProps => {
14
14
  let finalRootRef = null;
15
15
  let finalContentRef = null;
16
+ const pluginPropEnhancers = [];
17
+ const pluginPropEnhancersNames = {};
16
18
  plugins.forEach(plugin => {
17
19
  if (!plugin.itemPlugin) {
18
20
  return;
@@ -28,10 +30,30 @@ const useTreeViewBuildContext = ({
28
30
  if (itemPluginResponse?.contentRef) {
29
31
  finalContentRef = itemPluginResponse.contentRef;
30
32
  }
33
+ if (itemPluginResponse?.propsEnhancers) {
34
+ pluginPropEnhancers.push(itemPluginResponse.propsEnhancers);
35
+
36
+ // Prepare a list of all the slots which are enhanced by at least one plugin
37
+ Object.keys(itemPluginResponse.propsEnhancers).forEach(propsEnhancerName => {
38
+ pluginPropEnhancersNames[propsEnhancerName] = true;
39
+ });
40
+ }
31
41
  });
42
+ const resolvePropsEnhancer = currentSlotName => currentSlotParams => {
43
+ const enhancedProps = {};
44
+ pluginPropEnhancers.forEach(propsEnhancersForCurrentPlugin => {
45
+ const propsEnhancerForCurrentPluginAndSlot = propsEnhancersForCurrentPlugin[currentSlotName];
46
+ if (propsEnhancerForCurrentPluginAndSlot != null) {
47
+ Object.assign(enhancedProps, propsEnhancerForCurrentPluginAndSlot(currentSlotParams));
48
+ }
49
+ });
50
+ return enhancedProps;
51
+ };
52
+ const propsEnhancers = Object.fromEntries(Object.keys(pluginPropEnhancersNames).map(propEnhancerName => [propEnhancerName, resolvePropsEnhancer(propEnhancerName)]));
32
53
  return {
33
54
  contentRef: finalContentRef,
34
- rootRef: finalRootRef
55
+ rootRef: finalRootRef,
56
+ propsEnhancers
35
57
  };
36
58
  };
37
59
  const wrapItem = ({
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getPreviousNavigableItem = exports.getNonDisabledItemsInRange = exports.getNextNavigableItem = exports.getLastNavigableItem = exports.getFirstNavigableItem = exports.getAllNavigableItems = exports.findOrderInTremauxTree = void 0;
6
+ exports.isTargetInDescendants = exports.getPreviousNavigableItem = exports.getNonDisabledItemsInRange = exports.getNextNavigableItem = exports.getLastNavigableItem = exports.getFirstNavigableItem = exports.getAllNavigableItems = exports.findOrderInTremauxTree = void 0;
7
7
  const getLastNavigableItemInArray = (instance, items) => {
8
8
  // Equivalent to Array.prototype.findLastIndex
9
9
  let itemIndex = items.length - 1;
@@ -194,4 +194,16 @@ const getAllNavigableItems = instance => {
194
194
  }
195
195
  return navigableItems;
196
196
  };
197
- exports.getAllNavigableItems = getAllNavigableItems;
197
+
198
+ /**
199
+ * Checks if the target is in a descendant of this item.
200
+ * This can prevent from firing some logic on the ancestors on the interacted item when the event handler is on the root.
201
+ * @param {HTMLElement} target The target to check
202
+ * @param {HTMLElement | null} itemRoot The root of the item to check if the event target is in its descendants
203
+ * @returns {boolean} Whether the target is in a descendant of this item
204
+ */
205
+ exports.getAllNavigableItems = getAllNavigableItems;
206
+ const isTargetInDescendants = (target, itemRoot) => {
207
+ return itemRoot !== target.closest('*[role="treeitem"]');
208
+ };
209
+ exports.isTargetInDescendants = isTargetInDescendants;
@@ -3,19 +3,26 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.buildWarning = void 0;
7
- const buildWarning = (message, gravity = 'warning') => {
8
- let alreadyWarned = false;
6
+ exports.clearWarningsCache = clearWarningsCache;
7
+ exports.warnOnce = warnOnce;
8
+ const warnedOnceCache = new Set();
9
+
10
+ // TODO move to @mui/x-internals
11
+ // TODO eventually move to @base_ui/internals. Base UI, etc. too need this helper.
12
+ function warnOnce(message, gravity = 'warning') {
13
+ if (process.env.NODE_ENV === 'production') {
14
+ return;
15
+ }
9
16
  const cleanMessage = Array.isArray(message) ? message.join('\n') : message;
10
- return () => {
11
- if (!alreadyWarned) {
12
- alreadyWarned = true;
13
- if (gravity === 'error') {
14
- console.error(cleanMessage);
15
- } else {
16
- console.warn(cleanMessage);
17
- }
17
+ if (!warnedOnceCache.has(cleanMessage)) {
18
+ warnedOnceCache.add(cleanMessage);
19
+ if (gravity === 'error') {
20
+ console.error(cleanMessage);
21
+ } else {
22
+ console.warn(cleanMessage);
18
23
  }
19
- };
20
- };
21
- exports.buildWarning = buildWarning;
24
+ }
25
+ }
26
+ function clearWarningsCache() {
27
+ warnedOnceCache.clear();
28
+ }