@mui/x-tree-view 7.11.1 → 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 (101) hide show
  1. package/CHANGELOG.md +110 -4
  2. package/RichTreeView/RichTreeView.js +9 -4
  3. package/RichTreeView/RichTreeView.types.d.ts +1 -1
  4. package/SimpleTreeView/SimpleTreeView.js +9 -4
  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 +5 -4
  32. package/internals/index.js +3 -2
  33. package/internals/models/index.d.ts +1 -0
  34. package/internals/models/index.js +2 -1
  35. package/internals/models/itemPlugin.d.ts +3 -2
  36. package/internals/models/plugin.d.ts +1 -1
  37. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -3
  38. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
  39. package/internals/plugins/useTreeViewItems/index.d.ts +2 -1
  40. package/internals/plugins/useTreeViewItems/index.js +2 -1
  41. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  42. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +18 -4
  43. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
  44. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +2 -2
  45. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +1 -2
  46. package/internals/useTreeView/useTreeView.types.d.ts +1 -1
  47. package/internals/utils/tree.d.ts +8 -0
  48. package/internals/utils/tree.js +11 -0
  49. package/models/items.d.ts +1 -0
  50. package/modern/RichTreeView/RichTreeView.js +9 -4
  51. package/modern/SimpleTreeView/SimpleTreeView.js +9 -4
  52. package/modern/TreeItem/TreeItem.js +36 -10
  53. package/modern/TreeItem/TreeItemContent.js +11 -3
  54. package/modern/TreeItem/treeItemClasses.js +1 -1
  55. package/modern/TreeItem/useTreeItemState.js +5 -1
  56. package/modern/TreeItem2/TreeItem2.js +15 -3
  57. package/modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +69 -0
  58. package/modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js +1 -0
  59. package/modern/TreeItem2DragAndDropOverlay/index.js +1 -0
  60. package/modern/TreeItem2Icon/TreeItem2Icon.js +3 -2
  61. package/modern/TreeItem2Provider/TreeItem2Provider.js +1 -1
  62. package/modern/TreeView/TreeView.js +8 -3
  63. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -1
  64. package/modern/index.js +1 -1
  65. package/modern/internals/TreeViewProvider/index.js +2 -1
  66. package/modern/internals/index.js +3 -2
  67. package/modern/internals/models/index.js +2 -1
  68. package/modern/internals/plugins/useTreeViewItems/index.js +2 -1
  69. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  70. package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +1 -1
  71. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +2 -2
  72. package/modern/internals/utils/tree.js +11 -0
  73. package/modern/useTreeItem2/useTreeItem2.js +43 -15
  74. package/node/RichTreeView/RichTreeView.js +11 -6
  75. package/node/SimpleTreeView/SimpleTreeView.js +10 -5
  76. package/node/TreeItem/TreeItem.js +45 -19
  77. package/node/TreeItem/TreeItemContent.js +11 -3
  78. package/node/TreeItem/treeItemClasses.js +1 -1
  79. package/node/TreeItem/useTreeItemState.js +6 -2
  80. package/node/TreeItem2/TreeItem2.js +21 -9
  81. package/node/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js +77 -0
  82. package/node/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js +5 -0
  83. package/node/TreeItem2DragAndDropOverlay/index.js +12 -0
  84. package/node/TreeItem2Icon/TreeItem2Icon.js +6 -5
  85. package/node/TreeItem2Provider/TreeItem2Provider.js +2 -2
  86. package/node/TreeView/TreeView.js +8 -3
  87. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +2 -2
  88. package/node/index.js +1 -1
  89. package/node/internals/TreeViewProvider/index.js +8 -1
  90. package/node/internals/index.js +25 -0
  91. package/node/internals/models/index.js +11 -0
  92. package/node/internals/plugins/useTreeViewItems/index.js +14 -1
  93. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +6 -2
  94. package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -2
  95. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +1 -1
  96. package/node/internals/utils/tree.js +14 -2
  97. package/node/useTreeItem2/useTreeItem2.js +49 -21
  98. package/package.json +3 -4
  99. package/useTreeItem2/index.d.ts +1 -1
  100. package/useTreeItem2/useTreeItem2.js +43 -15
  101. package/useTreeItem2/useTreeItem2.types.d.ts +17 -4
@@ -11,17 +11,19 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _Collapse = _interopRequireDefault(require("@mui/material/Collapse"));
14
- var _utils = require("@mui/base/utils");
15
14
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
16
15
  var _createStyled = require("@mui/system/createStyled");
17
16
  var _styles = require("@mui/material/styles");
17
+ var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
18
+ var _extractEventHandlers = _interopRequireDefault(require("@mui/utils/extractEventHandlers"));
19
+ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps"));
20
+ var _useSlotProps4 = _interopRequireDefault(require("@mui/utils/useSlotProps"));
18
21
  var _unsupportedProp = _interopRequireDefault(require("@mui/utils/unsupportedProp"));
19
22
  var _elementTypeAcceptingRef = _interopRequireDefault(require("@mui/utils/elementTypeAcceptingRef"));
20
- var _base = require("@mui/base");
21
23
  var _zeroStyled = require("../internals/zero-styled");
22
24
  var _TreeItemContent = require("./TreeItemContent");
23
25
  var _treeItemClasses = require("./treeItemClasses");
24
- var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
26
+ var _TreeViewProvider = require("../internals/TreeViewProvider");
25
27
  var _icons = require("../icons");
26
28
  var _TreeItem2Provider = require("../TreeItem2Provider");
27
29
  var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
@@ -50,7 +52,7 @@ const useUtilityClasses = ownerState => {
50
52
  label: ['label'],
51
53
  groupTransition: ['groupTransition']
52
54
  };
53
- return (0, _base.unstable_composeClasses)(slots, _treeItemClasses.getTreeItemUtilityClass, classes);
55
+ return (0, _composeClasses.default)(slots, _treeItemClasses.getTreeItemUtilityClass, classes);
54
56
  };
55
57
  const TreeItemRoot = (0, _zeroStyled.styled)('li', {
56
58
  name: 'MuiTreeItem',
@@ -81,6 +83,7 @@ const StyledTreeItemContent = (0, _zeroStyled.styled)(_TreeItemContent.TreeItemC
81
83
  width: '100%',
82
84
  boxSizing: 'border-box',
83
85
  // prevent width + padding to overflow
86
+ position: 'relative',
84
87
  display: 'flex',
85
88
  alignItems: 'center',
86
89
  gap: theme.spacing(1),
@@ -175,16 +178,18 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
175
178
  const {
176
179
  icons: contextIcons,
177
180
  runItemPlugins,
181
+ items: {
182
+ disabledItemsFocusable,
183
+ indentationAtItemLevel
184
+ },
178
185
  selection: {
179
186
  multiSelect
180
187
  },
181
188
  expansion: {
182
189
  expansionTrigger
183
190
  },
184
- disabledItemsFocusable,
185
- indentationAtItemLevel,
186
191
  instance
187
- } = (0, _useTreeViewContext.useTreeViewContext)();
192
+ } = (0, _TreeViewProvider.useTreeViewContext)();
188
193
  const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext);
189
194
  const props = useThemeProps({
190
195
  props: inProps,
@@ -215,10 +220,13 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
215
220
  } = (0, _useTreeItemState.useTreeItemState)(itemId);
216
221
  const {
217
222
  contentRef,
218
- rootRef
223
+ rootRef,
224
+ propsEnhancers
219
225
  } = runItemPlugins(props);
220
- const handleRootRef = (0, _useForkRef.default)(inRef, rootRef);
221
- const handleContentRef = (0, _useForkRef.default)(ContentProps?.ref, contentRef);
226
+ const rootRefObject = React.useRef(null);
227
+ const contentRefObject = React.useRef(null);
228
+ const handleRootRef = (0, _useForkRef.default)(inRef, rootRef, rootRefObject);
229
+ const handleContentRef = (0, _useForkRef.default)(ContentProps?.ref, contentRef, contentRefObject);
222
230
  const slots = {
223
231
  expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? _icons.TreeViewExpandIcon,
224
232
  collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? _icons.TreeViewCollapseIcon,
@@ -242,7 +250,7 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
242
250
  });
243
251
  const classes = useUtilityClasses(ownerState);
244
252
  const GroupTransition = slots.groupTransition ?? undefined;
245
- const groupTransitionProps = (0, _utils.useSlotProps)({
253
+ const groupTransitionProps = (0, _useSlotProps4.default)({
246
254
  elementType: GroupTransition,
247
255
  ownerState: {},
248
256
  externalSlotProps: inSlotProps?.groupTransition,
@@ -262,14 +270,14 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
262
270
  }
263
271
  };
264
272
  const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
265
- const _useSlotProps = (0, _utils.useSlotProps)({
273
+ const _useSlotProps = (0, _useSlotProps4.default)({
266
274
  elementType: ExpansionIcon,
267
275
  ownerState: {},
268
276
  externalSlotProps: tempOwnerState => {
269
277
  if (expanded) {
270
- return (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIcons.slotProps.collapseIcon, tempOwnerState), (0, _utils.resolveComponentProps)(inSlotProps?.collapseIcon, tempOwnerState));
278
+ return (0, _extends2.default)({}, (0, _resolveComponentProps.default)(contextIcons.slotProps.collapseIcon, tempOwnerState), (0, _resolveComponentProps.default)(inSlotProps?.collapseIcon, tempOwnerState));
271
279
  }
272
- return (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIcons.slotProps.expandIcon, tempOwnerState), (0, _utils.resolveComponentProps)(inSlotProps?.expandIcon, tempOwnerState));
280
+ return (0, _extends2.default)({}, (0, _resolveComponentProps.default)(contextIcons.slotProps.expandIcon, tempOwnerState), (0, _resolveComponentProps.default)(inSlotProps?.expandIcon, tempOwnerState));
273
281
  },
274
282
  additionalProps: {
275
283
  onClick: handleIconContainerClick
@@ -278,20 +286,20 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
278
286
  expansionIconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
279
287
  const expansionIcon = expandable && !!ExpansionIcon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpansionIcon, (0, _extends2.default)({}, expansionIconProps)) : null;
280
288
  const DisplayIcon = expandable ? undefined : slots.endIcon;
281
- const _useSlotProps2 = (0, _utils.useSlotProps)({
289
+ const _useSlotProps2 = (0, _useSlotProps4.default)({
282
290
  elementType: DisplayIcon,
283
291
  ownerState: {},
284
292
  externalSlotProps: tempOwnerState => {
285
293
  if (expandable) {
286
294
  return {};
287
295
  }
288
- return (0, _extends2.default)({}, (0, _utils.resolveComponentProps)(contextIcons.slotProps.endIcon, tempOwnerState), (0, _utils.resolveComponentProps)(inSlotProps?.endIcon, tempOwnerState));
296
+ return (0, _extends2.default)({}, (0, _resolveComponentProps.default)(contextIcons.slotProps.endIcon, tempOwnerState), (0, _resolveComponentProps.default)(inSlotProps?.endIcon, tempOwnerState));
289
297
  }
290
298
  }),
291
299
  displayIconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps2, _excluded3);
292
300
  const displayIcon = DisplayIcon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(DisplayIcon, (0, _extends2.default)({}, displayIconProps)) : null;
293
301
  const Icon = slots.icon;
294
- const _useSlotProps3 = (0, _utils.useSlotProps)({
302
+ const _useSlotProps3 = (0, _useSlotProps4.default)({
295
303
  elementType: Icon,
296
304
  ownerState: {},
297
305
  externalSlotProps: inSlotProps?.icon
@@ -326,6 +334,21 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
326
334
  };
327
335
  const idAttribute = instance.getTreeItemIdAttribute(itemId, id);
328
336
  const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
337
+ const enhancedRootProps = propsEnhancers.root?.({
338
+ rootRefObject,
339
+ contentRefObject,
340
+ externalEventHandlers: (0, _extractEventHandlers.default)(other)
341
+ }) ?? {};
342
+ const enhancedContentProps = propsEnhancers.content?.({
343
+ rootRefObject,
344
+ contentRefObject,
345
+ externalEventHandlers: (0, _extractEventHandlers.default)(ContentProps)
346
+ }) ?? {};
347
+ const enhancedDragAndDropOverlayProps = propsEnhancers.dragAndDropOverlay?.({
348
+ rootRefObject,
349
+ contentRefObject,
350
+ externalEventHandlers: {}
351
+ }) ?? {};
329
352
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2Provider.TreeItem2Provider, {
330
353
  itemId: itemId,
331
354
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(TreeItemRoot, (0, _extends2.default)({
@@ -344,7 +367,8 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
344
367
  ref: handleRootRef,
345
368
  style: indentationAtItemLevel ? (0, _extends2.default)({}, other.style, {
346
369
  '--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
347
- }) : other.style,
370
+ }) : other.style
371
+ }, enhancedRootProps, {
348
372
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeItemContent, (0, _extends2.default)({
349
373
  as: ContentComponent,
350
374
  classes: {
@@ -365,7 +389,9 @@ const TreeItem = exports.TreeItem = /*#__PURE__*/React.forwardRef(function TreeI
365
389
  expansionIcon: expansionIcon,
366
390
  displayIcon: displayIcon,
367
391
  ownerState: ownerState
368
- }, ContentProps, {
392
+ }, ContentProps, enhancedContentProps, enhancedDragAndDropOverlayProps.action == null ? {} : {
393
+ dragAndDropOverlayProps: enhancedDragAndDropOverlayProps
394
+ }, {
369
395
  ref: handleContentRef
370
396
  })), children && /*#__PURE__*/(0, _jsxRuntime.jsx)(TreeItemGroup, (0, _extends2.default)({
371
397
  as: GroupTransition
@@ -12,8 +12,9 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _clsx = _interopRequireDefault(require("clsx"));
13
13
  var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
14
14
  var _useTreeItemState = require("./useTreeItemState");
15
+ var _TreeItem2DragAndDropOverlay = require("../TreeItem2DragAndDropOverlay");
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
- const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown"];
17
+ const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "itemId", "onClick", "onMouseDown", "dragAndDropOverlayProps"];
17
18
  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); }
18
19
  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; }
19
20
  /**
@@ -29,7 +30,8 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
29
30
  label,
30
31
  itemId,
31
32
  onClick,
32
- onMouseDown
33
+ onMouseDown,
34
+ dragAndDropOverlayProps
33
35
  } = props,
34
36
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
35
37
  const {
@@ -42,6 +44,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
42
44
  handleExpansion,
43
45
  handleSelection,
44
46
  handleCheckboxSelection,
47
+ handleContentClick,
45
48
  preventSelection,
46
49
  expansionTrigger
47
50
  } = (0, _useTreeItemState.useTreeItemState)(itemId);
@@ -54,6 +57,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
54
57
  }
55
58
  };
56
59
  const handleClick = event => {
60
+ handleContentClick?.(event, itemId);
57
61
  if (checkboxRef.current?.contains(event.target)) {
58
62
  return;
59
63
  }
@@ -88,7 +92,7 @@ const TreeItemContent = exports.TreeItemContent = /*#__PURE__*/React.forwardRef(
88
92
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
89
93
  className: classes.label,
90
94
  children: label
91
- })]
95
+ }), dragAndDropOverlayProps && /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem2DragAndDropOverlay.TreeItem2DragAndDropOverlay, (0, _extends2.default)({}, dragAndDropOverlayProps))]
92
96
  }))
93
97
  );
94
98
  });
@@ -106,6 +110,10 @@ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
106
110
  * The icon to display next to the tree item's label. Either a parent or end icon.
107
111
  */
108
112
  displayIcon: _propTypes.default.node,
113
+ dragAndDropOverlayProps: _propTypes.default.shape({
114
+ action: _propTypes.default.oneOf(['make-child', 'move-to-parent', 'reorder-above', 'reorder-below']),
115
+ style: _propTypes.default.object
116
+ }),
109
117
  /**
110
118
  * The icon to display next to the tree item's label. Either an expansion or collapse icon.
111
119
  */
@@ -11,4 +11,4 @@ var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generat
11
11
  function getTreeItemUtilityClass(slot) {
12
12
  return (0, _generateUtilityClass.default)('MuiTreeItem', slot);
13
13
  }
14
- const treeItemClasses = exports.treeItemClasses = (0, _generateUtilityClasses.default)('MuiTreeItem', ['root', 'groupTransition', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label', 'checkbox']);
14
+ const treeItemClasses = exports.treeItemClasses = (0, _generateUtilityClasses.default)('MuiTreeItem', ['root', 'groupTransition', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label', 'checkbox', 'dragAndDropOverlay']);
@@ -4,10 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useTreeItemState = useTreeItemState;
7
- var _useTreeViewContext = require("../internals/TreeViewProvider/useTreeViewContext");
7
+ var _TreeViewProvider = require("../internals/TreeViewProvider");
8
8
  function useTreeItemState(itemId) {
9
9
  const {
10
10
  instance,
11
+ items: {
12
+ onItemClick
13
+ },
11
14
  selection: {
12
15
  multiSelect,
13
16
  checkboxSelection,
@@ -16,7 +19,7 @@ function useTreeItemState(itemId) {
16
19
  expansion: {
17
20
  expansionTrigger
18
21
  }
19
- } = (0, _useTreeViewContext.useTreeViewContext)();
22
+ } = (0, _TreeViewProvider.useTreeViewContext)();
20
23
  const expandable = instance.isItemExpandable(itemId);
21
24
  const expanded = instance.isItemExpanded(itemId);
22
25
  const focused = instance.isItemFocused(itemId);
@@ -92,6 +95,7 @@ function useTreeItemState(itemId) {
92
95
  handleExpansion,
93
96
  handleSelection,
94
97
  handleCheckboxSelection,
98
+ handleContentClick: onItemClick,
95
99
  preventSelection,
96
100
  expansionTrigger
97
101
  };
@@ -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.1
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,12 +3,30 @@
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
  });
18
+ Object.defineProperty(exports, "buildSiblingIndexes", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _useTreeViewItems.buildSiblingIndexes;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "isTargetInDescendants", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _tree.isTargetInDescendants;
28
+ }
29
+ });
12
30
  Object.defineProperty(exports, "unstable_resetCleanupTracking", {
13
31
  enumerable: true,
14
32
  get: function () {
@@ -21,6 +39,12 @@ Object.defineProperty(exports, "useTreeView", {
21
39
  return _useTreeView.useTreeView;
22
40
  }
23
41
  });
42
+ Object.defineProperty(exports, "useTreeViewContext", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _TreeViewProvider.useTreeViewContext;
46
+ }
47
+ });
24
48
  Object.defineProperty(exports, "useTreeViewExpansion", {
25
49
  enumerable: true,
26
50
  get: function () {
@@ -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");