@mui/x-tree-view 7.22.1 → 8.0.0-alpha.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 (196) hide show
  1. package/CHANGELOG.md +143 -92
  2. package/README.md +2 -2
  3. package/RichTreeView/RichTreeView.js +20 -1
  4. package/RichTreeView/RichTreeView.types.d.ts +4 -4
  5. package/SimpleTreeView/SimpleTreeView.js +21 -3
  6. package/TreeItem/TreeItem.d.ts +20 -2
  7. package/TreeItem/TreeItem.js +238 -368
  8. package/TreeItem/TreeItem.types.d.ts +51 -86
  9. package/TreeItem/index.d.ts +1 -4
  10. package/TreeItem/index.js +2 -4
  11. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
  12. package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
  13. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
  14. package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
  15. package/TreeItemDragAndDropOverlay/index.js +1 -0
  16. package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
  17. package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
  18. package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  19. package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
  20. package/TreeItemIcon/index.d.ts +2 -0
  21. package/TreeItemIcon/index.js +1 -0
  22. package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
  23. package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
  24. package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  25. package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
  26. package/TreeItemLabelInput/index.d.ts +2 -0
  27. package/TreeItemLabelInput/index.js +1 -0
  28. package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
  29. package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
  30. package/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +7 -3
  31. package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +1 -1
  32. package/TreeItemProvider/index.d.ts +2 -0
  33. package/TreeItemProvider/index.js +1 -0
  34. package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
  35. package/hooks/index.d.ts +1 -1
  36. package/hooks/index.js +1 -1
  37. package/hooks/useTreeItemUtils/index.d.ts +1 -0
  38. package/hooks/useTreeItemUtils/index.js +1 -0
  39. package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +11 -11
  40. package/{modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js → hooks/useTreeItemUtils/useTreeItemUtils.js} +5 -3
  41. package/index.d.ts +5 -7
  42. package/index.js +6 -8
  43. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -1
  44. package/internals/components/RichTreeViewItems.d.ts +1 -2
  45. package/internals/index.d.ts +1 -1
  46. package/internals/models/helpers.d.ts +0 -2
  47. package/internals/models/itemPlugin.d.ts +11 -8
  48. package/internals/models/plugin.d.ts +1 -1
  49. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +2 -1
  50. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  51. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +3 -5
  52. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
  53. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +6 -5
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
  56. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
  57. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +33 -3
  58. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
  59. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
  60. package/models/items.d.ts +4 -0
  61. package/modern/RichTreeView/RichTreeView.js +20 -1
  62. package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
  63. package/modern/TreeItem/TreeItem.js +238 -368
  64. package/modern/TreeItem/index.js +2 -4
  65. package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
  66. package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
  67. package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
  68. package/modern/TreeItemIcon/index.js +1 -0
  69. package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  70. package/modern/TreeItemLabelInput/index.js +1 -0
  71. package/modern/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +7 -3
  72. package/modern/TreeItemProvider/index.js +1 -0
  73. package/modern/hooks/index.js +1 -1
  74. package/modern/hooks/useTreeItemUtils/index.js +1 -0
  75. package/{hooks/useTreeItem2Utils/useTreeItem2Utils.js → modern/hooks/useTreeItemUtils/useTreeItemUtils.js} +5 -3
  76. package/modern/index.js +6 -8
  77. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  78. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +86 -0
  79. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -18
  80. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +95 -0
  81. package/modern/useTreeItem/index.js +1 -0
  82. package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
  83. package/node/RichTreeView/RichTreeView.js +20 -1
  84. package/node/SimpleTreeView/SimpleTreeView.js +21 -3
  85. package/node/TreeItem/TreeItem.js +239 -369
  86. package/node/TreeItem/index.js +38 -16
  87. package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +7 -6
  88. package/node/TreeItemDragAndDropOverlay/index.js +12 -0
  89. package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
  90. package/node/TreeItemIcon/index.js +12 -0
  91. package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
  92. package/node/TreeItemLabelInput/index.js +12 -0
  93. package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +6 -3
  94. package/node/TreeItemProvider/index.js +12 -0
  95. package/node/hooks/index.js +3 -3
  96. package/node/hooks/useTreeItemUtils/index.js +12 -0
  97. package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +6 -5
  98. package/node/index.js +18 -42
  99. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +2 -4
  100. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +94 -0
  101. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -17
  102. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +99 -2
  103. package/node/useTreeItem/index.js +12 -0
  104. package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +22 -44
  105. package/package.json +3 -3
  106. package/themeAugmentation/components.d.ts +0 -10
  107. package/themeAugmentation/overrides.d.ts +0 -3
  108. package/themeAugmentation/props.d.ts +1 -5
  109. package/useTreeItem/index.d.ts +2 -0
  110. package/useTreeItem/index.js +1 -0
  111. package/{TreeItem2 → useTreeItem}/package.json +1 -1
  112. package/useTreeItem/useTreeItem.d.ts +2 -0
  113. package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +21 -42
  114. package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +42 -58
  115. package/TreeItem/TreeItemContent.d.ts +0 -61
  116. package/TreeItem/TreeItemContent.js +0 -146
  117. package/TreeItem/useTreeItemState.d.ts +0 -21
  118. package/TreeItem/useTreeItemState.js +0 -143
  119. package/TreeItem2/TreeItem2.d.ts +0 -34
  120. package/TreeItem2/TreeItem2.js +0 -387
  121. package/TreeItem2/TreeItem2.types.d.ts +0 -92
  122. package/TreeItem2/index.d.ts +0 -2
  123. package/TreeItem2/index.js +0 -1
  124. package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -7
  125. package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
  126. package/TreeItem2DragAndDropOverlay/index.js +0 -1
  127. package/TreeItem2DragAndDropOverlay/package.json +0 -6
  128. package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
  129. package/TreeItem2Icon/index.d.ts +0 -2
  130. package/TreeItem2Icon/index.js +0 -1
  131. package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -5
  132. package/TreeItem2LabelInput/index.d.ts +0 -2
  133. package/TreeItem2LabelInput/index.js +0 -1
  134. package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
  135. package/TreeItem2Provider/index.d.ts +0 -2
  136. package/TreeItem2Provider/index.js +0 -1
  137. package/TreeView/TreeView.d.ts +0 -21
  138. package/TreeView/TreeView.js +0 -211
  139. package/TreeView/TreeView.types.d.ts +0 -9
  140. package/TreeView/index.d.ts +0 -3
  141. package/TreeView/index.js +0 -3
  142. package/TreeView/package.json +0 -6
  143. package/TreeView/treeViewClasses.d.ts +0 -7
  144. package/TreeView/treeViewClasses.js +0 -6
  145. package/hooks/useTreeItem2Utils/index.d.ts +0 -1
  146. package/hooks/useTreeItem2Utils/index.js +0 -1
  147. package/modern/TreeItem/TreeItemContent.js +0 -146
  148. package/modern/TreeItem/useTreeItemState.js +0 -143
  149. package/modern/TreeItem2/TreeItem2.js +0 -387
  150. package/modern/TreeItem2/index.js +0 -1
  151. package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
  152. package/modern/TreeItem2Icon/index.js +0 -1
  153. package/modern/TreeItem2LabelInput/index.js +0 -1
  154. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
  155. package/modern/TreeItem2Provider/index.js +0 -1
  156. package/modern/TreeView/TreeView.js +0 -211
  157. package/modern/TreeView/TreeView.types.js +0 -1
  158. package/modern/TreeView/index.js +0 -3
  159. package/modern/TreeView/treeViewClasses.js +0 -6
  160. package/modern/hooks/useTreeItem2Utils/index.js +0 -1
  161. package/modern/useTreeItem2/index.js +0 -4
  162. package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
  163. package/node/TreeItem/TreeItemContent.js +0 -153
  164. package/node/TreeItem/useTreeItemState.js +0 -148
  165. package/node/TreeItem2/TreeItem2.js +0 -394
  166. package/node/TreeItem2/index.js +0 -48
  167. package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
  168. package/node/TreeItem2Icon/index.js +0 -12
  169. package/node/TreeItem2LabelInput/index.js +0 -12
  170. package/node/TreeItem2Provider/index.js +0 -12
  171. package/node/TreeView/TreeView.js +0 -217
  172. package/node/TreeView/TreeView.types.js +0 -5
  173. package/node/TreeView/index.js +0 -27
  174. package/node/TreeView/treeViewClasses.js +0 -14
  175. package/node/hooks/useTreeItem2Utils/index.js +0 -12
  176. package/node/useTreeItem2/index.js +0 -10
  177. package/node/useTreeItem2/useTreeItem2.types.js +0 -5
  178. package/useTreeItem2/index.d.ts +0 -3
  179. package/useTreeItem2/index.js +0 -4
  180. package/useTreeItem2/useTreeItem2.d.ts +0 -2
  181. package/useTreeItem2/useTreeItem2.types.js +0 -1
  182. /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  183. /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  184. /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  185. /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  186. /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  187. /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
  188. /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  189. /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  190. /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  191. /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
  192. /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
  193. /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
  194. /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
  195. /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
  196. /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
@@ -2,58 +2,28 @@
2
2
 
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
  import _extends from "@babel/runtime/helpers/esm/extends";
5
- const _excluded = ["children", "className", "slots", "slotProps", "ContentComponent", "ContentProps", "itemId", "id", "label", "onClick", "onMouseDown", "onFocus", "onBlur", "onKeyDown"],
6
- _excluded2 = ["ownerState"],
7
- _excluded3 = ["ownerState"],
8
- _excluded4 = ["ownerState"];
5
+ const _excluded = ["visible"],
6
+ _excluded2 = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps"];
9
7
  import * as React from 'react';
10
8
  import PropTypes from 'prop-types';
11
9
  import clsx from 'clsx';
10
+ import unsupportedProp from '@mui/utils/unsupportedProp';
11
+ import { alpha } from '@mui/material/styles';
12
12
  import Collapse from '@mui/material/Collapse';
13
- import useForkRef from '@mui/utils/useForkRef';
13
+ import MuiCheckbox from '@mui/material/Checkbox';
14
+ import useSlotProps from '@mui/utils/useSlotProps';
14
15
  import { shouldForwardProp } from '@mui/system/createStyled';
15
- import { alpha } from '@mui/material/styles';
16
16
  import composeClasses from '@mui/utils/composeClasses';
17
- import extractEventHandlers from '@mui/utils/extractEventHandlers';
18
- import resolveComponentProps from '@mui/utils/resolveComponentProps';
19
- import useSlotProps from '@mui/utils/useSlotProps';
20
- import unsupportedProp from '@mui/utils/unsupportedProp';
21
- import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
22
- import { warnOnce } from '@mui/x-internals/warning';
23
17
  import { styled, createUseThemeProps } from "../internals/zero-styled/index.js";
24
- import { TreeItemContent } from "./TreeItemContent.js";
25
- import { treeItemClasses, getTreeItemUtilityClass } from "./treeItemClasses.js";
26
- import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
27
- import { TreeViewCollapseIcon, TreeViewExpandIcon } from "../icons/index.js";
28
- import { TreeItem2Provider } from "../TreeItem2Provider/index.js";
29
- import { TreeViewItemDepthContext } from "../internals/TreeViewItemDepthContext/index.js";
30
- import { useTreeItemState } from "./useTreeItemState.js";
31
- import { isTargetInDescendants } from "../internals/utils/tree.js";
32
- import { generateTreeItemIdAttribute } from "../internals/corePlugins/useTreeViewId/useTreeViewId.utils.js";
18
+ import { useTreeItem } from "../useTreeItem/index.js";
19
+ import { getTreeItemUtilityClass } from "./treeItemClasses.js";
20
+ import { TreeItemIcon } from "../TreeItemIcon/index.js";
21
+ import { TreeItemDragAndDropOverlay } from "../TreeItemDragAndDropOverlay/index.js";
22
+ import { TreeItemProvider } from "../TreeItemProvider/index.js";
23
+ import { TreeItemLabelInput } from "../TreeItemLabelInput/index.js";
33
24
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
34
25
  const useThemeProps = createUseThemeProps('MuiTreeItem');
35
- const useUtilityClasses = ownerState => {
36
- const {
37
- classes
38
- } = ownerState;
39
- const slots = {
40
- root: ['root'],
41
- content: ['content'],
42
- expanded: ['expanded'],
43
- selected: ['selected'],
44
- focused: ['focused'],
45
- disabled: ['disabled'],
46
- iconContainer: ['iconContainer'],
47
- checkbox: ['checkbox'],
48
- label: ['label'],
49
- labelInput: ['labelInput'],
50
- editing: ['editing'],
51
- editable: ['editable'],
52
- groupTransition: ['groupTransition']
53
- };
54
- return composeClasses(slots, getTreeItemUtilityClass, classes);
55
- };
56
- const TreeItemRoot = styled('li', {
26
+ export const TreeItemRoot = styled('li', {
57
27
  name: 'MuiTreeItem',
58
28
  slot: 'Root',
59
29
  overridesResolver: (props, styles) => styles.root
@@ -63,21 +33,16 @@ const TreeItemRoot = styled('li', {
63
33
  padding: 0,
64
34
  outline: 0
65
35
  });
66
- const StyledTreeItemContent = styled(TreeItemContent, {
36
+ export const TreeItemContent = styled('div', {
67
37
  name: 'MuiTreeItem',
68
38
  slot: 'Content',
69
- overridesResolver: (props, styles) => {
70
- return [styles.content, styles.iconContainer && {
71
- [`& .${treeItemClasses.iconContainer}`]: styles.iconContainer
72
- }, styles.label && {
73
- [`& .${treeItemClasses.label}`]: styles.label
74
- }];
75
- },
76
- shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'indentationAtItemLevel'
39
+ overridesResolver: (props, styles) => styles.content,
40
+ shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'status'
77
41
  })(({
78
42
  theme
79
43
  }) => ({
80
44
  padding: theme.spacing(0.5, 1),
45
+ paddingLeft: `calc(${theme.spacing(1)} + var(--TreeView-itemChildrenIndentation) * var(--TreeView-itemDepth))`,
81
46
  borderRadius: theme.shape.borderRadius,
82
47
  width: '100%',
83
48
  boxSizing: 'border-box',
@@ -95,74 +60,130 @@ const StyledTreeItemContent = styled(TreeItemContent, {
95
60
  backgroundColor: 'transparent'
96
61
  }
97
62
  },
98
- [`&.${treeItemClasses.disabled}`]: {
99
- opacity: (theme.vars || theme).palette.action.disabledOpacity,
100
- backgroundColor: 'transparent'
101
- },
102
- [`&.${treeItemClasses.focused}`]: {
103
- backgroundColor: (theme.vars || theme).palette.action.focus
104
- },
105
- [`&.${treeItemClasses.selected}`]: {
106
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
107
- '&:hover': {
108
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
109
- // Reset on touch devices, it doesn't add specificity
110
- '@media (hover: none)': {
111
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
63
+ variants: [{
64
+ props: ({
65
+ status
66
+ }) => status.disabled,
67
+ style: {
68
+ opacity: (theme.vars || theme).palette.action.disabledOpacity,
69
+ backgroundColor: 'transparent'
70
+ }
71
+ }, {
72
+ props: ({
73
+ status
74
+ }) => status.focused,
75
+ style: {
76
+ backgroundColor: (theme.vars || theme).palette.action.focus
77
+ }
78
+ }, {
79
+ props: ({
80
+ status
81
+ }) => status.selected,
82
+ style: {
83
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
84
+ '&:hover': {
85
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
86
+ // Reset on touch devices, it doesn't add specificity
87
+ '@media (hover: none)': {
88
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
89
+ }
112
90
  }
113
- },
114
- [`&.${treeItemClasses.focused}`]: {
115
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
116
91
  }
117
- },
118
- [`& .${treeItemClasses.iconContainer}`]: {
119
- width: 16,
120
- display: 'flex',
121
- flexShrink: 0,
122
- justifyContent: 'center',
123
- '& svg': {
124
- fontSize: 18
92
+ }, {
93
+ props: ({
94
+ status
95
+ }) => status.selected && status.focused,
96
+ style: {
97
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
125
98
  }
126
- },
127
- [`& .${treeItemClasses.label}`]: _extends({
128
- width: '100%',
129
- boxSizing: 'border-box',
130
- // prevent width + padding to overflow
131
- // fixes overflow - see https://github.com/mui/material-ui/issues/27372
132
- minWidth: 0,
133
- position: 'relative'
134
- }, theme.typography.body1),
135
- [`& .${treeItemClasses.checkbox}`]: {
136
- padding: 0
137
- },
99
+ }]
100
+ }));
101
+ export const TreeItemLabel = styled('div', {
102
+ name: 'MuiTreeItem',
103
+ slot: 'Label',
104
+ overridesResolver: (props, styles) => styles.label,
105
+ shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'editable'
106
+ })(({
107
+ theme
108
+ }) => _extends({
109
+ width: '100%',
110
+ boxSizing: 'border-box',
111
+ // prevent width + padding to overflow
112
+ // fixes overflow - see https://github.com/mui/material-ui/issues/27372
113
+ minWidth: 0,
114
+ position: 'relative',
115
+ overflow: 'hidden'
116
+ }, theme.typography.body1, {
138
117
  variants: [{
139
- props: {
140
- indentationAtItemLevel: true
141
- },
118
+ props: ({
119
+ editable
120
+ }) => editable,
142
121
  style: {
143
- paddingLeft: `calc(${theme.spacing(1)} + var(--TreeView-itemChildrenIndentation) * var(--TreeView-itemDepth))`
122
+ paddingLeft: '2px'
144
123
  }
145
124
  }]
146
125
  }));
147
- const TreeItemGroup = styled(Collapse, {
126
+ export const TreeItemIconContainer = styled('div', {
127
+ name: 'MuiTreeItem',
128
+ slot: 'IconContainer',
129
+ overridesResolver: (props, styles) => styles.iconContainer
130
+ })({
131
+ width: 16,
132
+ display: 'flex',
133
+ flexShrink: 0,
134
+ justifyContent: 'center',
135
+ '& svg': {
136
+ fontSize: 18
137
+ }
138
+ });
139
+ export const TreeItemGroupTransition = styled(Collapse, {
148
140
  name: 'MuiTreeItem',
149
141
  slot: 'GroupTransition',
150
- overridesResolver: (props, styles) => styles.groupTransition,
151
- shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'indentationAtItemLevel'
142
+ overridesResolver: (props, styles) => styles.groupTransition
152
143
  })({
153
144
  margin: 0,
154
- padding: 0,
155
- paddingLeft: 'var(--TreeView-itemChildrenIndentation)',
156
- variants: [{
157
- props: {
158
- indentationAtItemLevel: true
159
- },
160
- style: {
161
- paddingLeft: 0
162
- }
163
- }]
145
+ padding: 0
164
146
  });
165
-
147
+ export const TreeItemCheckbox = styled(/*#__PURE__*/React.forwardRef((props, ref) => {
148
+ const {
149
+ visible
150
+ } = props,
151
+ other = _objectWithoutPropertiesLoose(props, _excluded);
152
+ if (!visible) {
153
+ return null;
154
+ }
155
+ return /*#__PURE__*/_jsx(MuiCheckbox, _extends({}, other, {
156
+ ref: ref
157
+ }));
158
+ }), {
159
+ name: 'MuiTreeItem',
160
+ slot: 'Checkbox',
161
+ overridesResolver: (props, styles) => styles.checkbox
162
+ })({
163
+ padding: 0
164
+ });
165
+ const useUtilityClasses = ownerState => {
166
+ const {
167
+ classes
168
+ } = ownerState;
169
+ const slots = {
170
+ root: ['root'],
171
+ content: ['content'],
172
+ expanded: ['expanded'],
173
+ editing: ['editing'],
174
+ editable: ['editable'],
175
+ selected: ['selected'],
176
+ focused: ['focused'],
177
+ disabled: ['disabled'],
178
+ iconContainer: ['iconContainer'],
179
+ checkbox: ['checkbox'],
180
+ label: ['label'],
181
+ groupTransition: ['groupTransition'],
182
+ labelInput: ['labelInput'],
183
+ dragAndDropOverlay: ['dragAndDropOverlay']
184
+ };
185
+ return composeClasses(slots, getTreeItemUtilityClass, classes);
186
+ };
166
187
  /**
167
188
  *
168
189
  * Demos:
@@ -171,269 +192,124 @@ const TreeItemGroup = styled(Collapse, {
171
192
  *
172
193
  * API:
173
194
  *
174
- * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item/)
195
+ * - [TreeItem API](https://mui.com/x/api/tree-view/tree-item-2/)
175
196
  */
176
- export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, inRef) {
177
- const {
178
- icons: contextIcons,
179
- runItemPlugins,
180
- items: {
181
- disabledItemsFocusable,
182
- indentationAtItemLevel
183
- },
184
- selection: {
185
- disableSelection
186
- },
187
- expansion: {
188
- expansionTrigger
189
- },
190
- treeId,
191
- instance
192
- } = useTreeViewContext();
193
- const depthContext = React.useContext(TreeViewItemDepthContext);
197
+ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps, forwardedRef) {
194
198
  const props = useThemeProps({
195
199
  props: inProps,
196
200
  name: 'MuiTreeItem'
197
201
  });
198
202
  const {
199
- children,
200
- className,
201
- slots: inSlots,
202
- slotProps: inSlotProps,
203
- ContentComponent = TreeItemContent,
204
- ContentProps,
205
- itemId,
206
203
  id,
204
+ itemId,
207
205
  label,
208
- onClick,
209
- onMouseDown,
210
- onBlur,
211
- onKeyDown
206
+ disabled,
207
+ children,
208
+ slots = {},
209
+ slotProps = {}
212
210
  } = props,
213
- other = _objectWithoutPropertiesLoose(props, _excluded);
211
+ other = _objectWithoutPropertiesLoose(props, _excluded2);
214
212
  const {
215
- expanded,
216
- focused,
217
- selected,
218
- disabled,
219
- editing,
220
- handleExpansion,
221
- handleCancelItemLabelEditing,
222
- handleSaveItemLabel
223
- } = useTreeItemState(itemId);
224
- if (process.env.NODE_ENV !== 'production') {
225
- // Checking directly the `props` to avoid having the default value applied
226
- if (props.ContentComponent) {
227
- warnOnce(['MUI X: The ContentComponent prop of the TreeItem component is deprecated and will be removed in the next major release.', 'You can use the new TreeItem2 component or the new useTreeItem2 hook to customize the rendering of the content.', 'For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.']);
228
- }
229
- if (props.ContentProps) {
230
- warnOnce(['MUI X: The ContentProps prop of the TreeItem component is deprecated and will be removed in the next major release.', 'You can use the new TreeItem2 component or the new useTreeItem2 hook to customize the rendering of the content.', 'For more detail, see https://mui.com/x/react-tree-view/tree-item-customization/.']);
231
- }
232
- }
233
- const {
234
- contentRef,
235
- rootRef,
236
- propsEnhancers
237
- } = runItemPlugins(props);
238
- const rootRefObject = React.useRef(null);
239
- const contentRefObject = React.useRef(null);
240
- const handleRootRef = useForkRef(inRef, rootRef, rootRefObject);
241
- const handleContentRef = useForkRef(ContentProps?.ref, contentRef, contentRefObject);
242
- const slots = {
243
- expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
244
- collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
245
- endIcon: inSlots?.endIcon ?? contextIcons.slots.endIcon,
246
- icon: inSlots?.icon,
247
- groupTransition: inSlots?.groupTransition
248
- };
249
- const isExpandable = reactChildren => {
250
- if (Array.isArray(reactChildren)) {
251
- return reactChildren.length > 0 && reactChildren.some(isExpandable);
252
- }
253
- return Boolean(reactChildren);
254
- };
255
- const expandable = isExpandable(children);
256
- const ownerState = _extends({}, props, {
257
- expanded,
258
- focused,
259
- selected,
260
- disabled,
261
- indentationAtItemLevel
213
+ getRootProps,
214
+ getContentProps,
215
+ getIconContainerProps,
216
+ getCheckboxProps,
217
+ getLabelProps,
218
+ getGroupTransitionProps,
219
+ getLabelInputProps,
220
+ getDragAndDropOverlayProps,
221
+ status
222
+ } = useTreeItem({
223
+ id,
224
+ itemId,
225
+ children,
226
+ label,
227
+ disabled
262
228
  });
229
+ const ownerState = _extends({}, props, status);
263
230
  const classes = useUtilityClasses(ownerState);
231
+ const Root = slots.root ?? TreeItemRoot;
232
+ const rootProps = useSlotProps({
233
+ elementType: Root,
234
+ getSlotProps: getRootProps,
235
+ externalForwardedProps: other,
236
+ externalSlotProps: slotProps.root,
237
+ additionalProps: {
238
+ ref: forwardedRef
239
+ },
240
+ ownerState: {},
241
+ className: classes.root
242
+ });
243
+ const Content = slots.content ?? TreeItemContent;
244
+ const contentProps = useSlotProps({
245
+ elementType: Content,
246
+ getSlotProps: getContentProps,
247
+ externalSlotProps: slotProps.content,
248
+ ownerState: {},
249
+ className: clsx(classes.content, status.expanded && classes.expanded, status.selected && classes.selected, status.focused && classes.focused, status.disabled && classes.disabled, status.editing && classes.editing, status.editable && classes.editable)
250
+ });
251
+ const IconContainer = slots.iconContainer ?? TreeItemIconContainer;
252
+ const iconContainerProps = useSlotProps({
253
+ elementType: IconContainer,
254
+ getSlotProps: getIconContainerProps,
255
+ externalSlotProps: slotProps.iconContainer,
256
+ ownerState: {},
257
+ className: classes.iconContainer
258
+ });
259
+ const Label = slots.label ?? TreeItemLabel;
260
+ const labelProps = useSlotProps({
261
+ elementType: Label,
262
+ getSlotProps: getLabelProps,
263
+ externalSlotProps: slotProps.label,
264
+ ownerState: {},
265
+ className: classes.label
266
+ });
267
+ const Checkbox = slots.checkbox ?? TreeItemCheckbox;
268
+ const checkboxProps = useSlotProps({
269
+ elementType: Checkbox,
270
+ getSlotProps: getCheckboxProps,
271
+ externalSlotProps: slotProps.checkbox,
272
+ ownerState: {},
273
+ className: classes.checkbox
274
+ });
264
275
  const GroupTransition = slots.groupTransition ?? undefined;
265
276
  const groupTransitionProps = useSlotProps({
266
277
  elementType: GroupTransition,
278
+ getSlotProps: getGroupTransitionProps,
279
+ externalSlotProps: slotProps.groupTransition,
267
280
  ownerState: {},
268
- externalSlotProps: inSlotProps?.groupTransition,
269
- additionalProps: _extends({
270
- unmountOnExit: true,
271
- in: expanded,
272
- component: 'ul',
273
- role: 'group'
274
- }, indentationAtItemLevel ? {
275
- indentationAtItemLevel: true
276
- } : {}),
277
281
  className: classes.groupTransition
278
282
  });
279
- const handleIconContainerClick = event => {
280
- if (expansionTrigger === 'iconContainer') {
281
- handleExpansion(event);
282
- }
283
- };
284
- const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
285
- const _useSlotProps = useSlotProps({
286
- elementType: ExpansionIcon,
287
- ownerState: {},
288
- externalSlotProps: tempOwnerState => {
289
- if (expanded) {
290
- return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
291
- }
292
- return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
293
- },
294
- additionalProps: {
295
- onClick: handleIconContainerClick
296
- }
297
- }),
298
- expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
299
- const expansionIcon = expandable && !!ExpansionIcon ? /*#__PURE__*/_jsx(ExpansionIcon, _extends({}, expansionIconProps)) : null;
300
- const DisplayIcon = expandable ? undefined : slots.endIcon;
301
- const _useSlotProps2 = useSlotProps({
302
- elementType: DisplayIcon,
303
- ownerState: {},
304
- externalSlotProps: tempOwnerState => {
305
- if (expandable) {
306
- return {};
307
- }
308
- return _extends({}, resolveComponentProps(contextIcons.slotProps.endIcon, tempOwnerState), resolveComponentProps(inSlotProps?.endIcon, tempOwnerState));
309
- }
310
- }),
311
- displayIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
312
- const displayIcon = DisplayIcon ? /*#__PURE__*/_jsx(DisplayIcon, _extends({}, displayIconProps)) : null;
313
- const Icon = slots.icon;
314
- const _useSlotProps3 = useSlotProps({
315
- elementType: Icon,
316
- ownerState: {},
317
- externalSlotProps: inSlotProps?.icon
318
- }),
319
- iconProps = _objectWithoutPropertiesLoose(_useSlotProps3, _excluded4);
320
- const icon = Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, iconProps)) : null;
321
-
322
- // https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
323
- let ariaSelected;
324
- if (selected) {
325
- // - each selected node has aria-selected set to true.
326
- ariaSelected = true;
327
- } else if (disableSelection || disabled) {
328
- // - if the tree contains nodes that are not selectable, aria-selected is not present on those nodes.
329
- ariaSelected = undefined;
330
- } else {
331
- // - all nodes that are selectable but not selected have aria-selected set to false.
332
- ariaSelected = false;
333
- }
334
- function handleFocus(event) {
335
- const canBeFocused = !disabled || disabledItemsFocusable;
336
- if (!focused && canBeFocused && event.currentTarget === event.target) {
337
- instance.focusItem(event, itemId);
338
- }
339
- }
340
- function handleBlur(event) {
341
- onBlur?.(event);
342
- if (editing ||
343
- // we can exit the editing state by clicking outside the input (within the Tree Item) or by pressing Enter or Escape -> we don't want to remove the focused item from the state in these cases
344
- // we can also exit the editing state by clicking on the root itself -> want to remove the focused item from the state in this case
345
- event.relatedTarget && isTargetInDescendants(event.relatedTarget, rootRefObject.current) && (event.target && event.target?.dataset?.element === 'labelInput' && isTargetInDescendants(event.target, rootRefObject.current) || event.relatedTarget?.dataset?.element === 'labelInput')) {
346
- return;
347
- }
348
- instance.removeFocusedItem();
349
- }
350
- const handleKeyDown = event => {
351
- onKeyDown?.(event);
352
- if (event.target?.dataset?.element === 'labelInput') {
353
- return;
354
- }
355
- instance.handleItemKeyDown(event, itemId);
356
- };
357
- const idAttribute = generateTreeItemIdAttribute({
358
- itemId,
359
- treeId,
360
- id
283
+ const LabelInput = slots.labelInput ?? TreeItemLabelInput;
284
+ const labelInputProps = useSlotProps({
285
+ elementType: LabelInput,
286
+ getSlotProps: getLabelInputProps,
287
+ externalSlotProps: slotProps.labelInput,
288
+ ownerState: {},
289
+ className: classes.labelInput
361
290
  });
362
- const tabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
363
- const sharedPropsEnhancerParams = {
364
- rootRefObject,
365
- contentRefObject,
366
- interactions: {
367
- handleSaveItemLabel,
368
- handleCancelItemLabelEditing
369
- }
370
- };
371
- const enhancedRootProps = propsEnhancers.root?.(_extends({}, sharedPropsEnhancerParams, {
372
- externalEventHandlers: extractEventHandlers(other)
373
- })) ?? {};
374
- const enhancedContentProps = propsEnhancers.content?.(_extends({}, sharedPropsEnhancerParams, {
375
- externalEventHandlers: extractEventHandlers(ContentProps)
376
- })) ?? {};
377
- const enhancedDragAndDropOverlayProps = propsEnhancers.dragAndDropOverlay?.(_extends({}, sharedPropsEnhancerParams, {
378
- externalEventHandlers: {}
379
- })) ?? {};
380
- const enhancedLabelInputProps = propsEnhancers.labelInput?.(_extends({}, sharedPropsEnhancerParams, {
381
- externalEventHandlers: {}
382
- })) ?? {};
383
- return /*#__PURE__*/_jsx(TreeItem2Provider, {
291
+ const DragAndDropOverlay = slots.dragAndDropOverlay ?? TreeItemDragAndDropOverlay;
292
+ const dragAndDropOverlayProps = useSlotProps({
293
+ elementType: DragAndDropOverlay,
294
+ getSlotProps: getDragAndDropOverlayProps,
295
+ externalSlotProps: slotProps.dragAndDropOverlay,
296
+ ownerState: {},
297
+ className: classes.dragAndDropOverlay
298
+ });
299
+ return /*#__PURE__*/_jsx(TreeItemProvider, {
384
300
  itemId: itemId,
385
- children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
386
- className: clsx(classes.root, className),
387
- role: "treeitem",
388
- "aria-expanded": expandable ? expanded : undefined,
389
- "aria-selected": ariaSelected,
390
- "aria-disabled": disabled || undefined,
391
- id: idAttribute,
392
- tabIndex: tabIndex
393
- }, other, {
394
- ownerState: ownerState,
395
- onFocus: handleFocus,
396
- onBlur: handleBlur,
397
- onKeyDown: handleKeyDown,
398
- ref: handleRootRef,
399
- style: indentationAtItemLevel ? _extends({}, other.style, {
400
- '--TreeView-itemDepth': typeof depthContext === 'function' ? depthContext(itemId) : depthContext
401
- }) : other.style
402
- }, enhancedRootProps, {
403
- children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
404
- as: ContentComponent,
405
- classes: {
406
- root: classes.content,
407
- expanded: classes.expanded,
408
- selected: classes.selected,
409
- focused: classes.focused,
410
- disabled: classes.disabled,
411
- editable: classes.editable,
412
- editing: classes.editing,
413
- iconContainer: classes.iconContainer,
414
- label: classes.label,
415
- labelInput: classes.labelInput,
416
- checkbox: classes.checkbox
417
- },
418
- label: label,
419
- itemId: itemId,
420
- onClick: onClick,
421
- onMouseDown: onMouseDown,
422
- icon: icon,
423
- expansionIcon: expansionIcon,
424
- displayIcon: displayIcon,
425
- ownerState: ownerState
426
- }, ContentProps, enhancedContentProps, enhancedDragAndDropOverlayProps.action == null ? {} : {
427
- dragAndDropOverlayProps: enhancedDragAndDropOverlayProps
428
- }, enhancedLabelInputProps.value == null ? {} : {
429
- labelInputProps: enhancedLabelInputProps
430
- }, {
431
- ref: handleContentRef
432
- })), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
301
+ children: /*#__PURE__*/_jsxs(Root, _extends({}, rootProps, {
302
+ children: [/*#__PURE__*/_jsxs(Content, _extends({}, contentProps, {
303
+ children: [/*#__PURE__*/_jsx(IconContainer, _extends({}, iconContainerProps, {
304
+ children: /*#__PURE__*/_jsx(TreeItemIcon, {
305
+ status: status,
306
+ slots: slots,
307
+ slotProps: slotProps
308
+ })
309
+ })), /*#__PURE__*/_jsx(Checkbox, _extends({}, checkboxProps)), status.editing ? /*#__PURE__*/_jsx(LabelInput, _extends({}, labelInputProps)) : /*#__PURE__*/_jsx(Label, _extends({}, labelProps)), /*#__PURE__*/_jsx(DragAndDropOverlay, _extends({}, dragAndDropOverlayProps))]
310
+ })), children && /*#__PURE__*/_jsx(TreeItemGroupTransition, _extends({
433
311
  as: GroupTransition
434
- }, groupTransitionProps, {
435
- children: children
436
- }))]
312
+ }, groupTransitionProps))]
437
313
  }))
438
314
  });
439
315
  });
@@ -451,37 +327,35 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
451
327
  */
452
328
  classes: PropTypes.object,
453
329
  className: PropTypes.string,
454
- /**
455
- * The component used to render the content of the item.
456
- * @deprecated Consider using the `<TreeItem2 />` component or the `useTreeItem2` hook instead. For more details, see https://mui.com/x/react-tree-view/tree-item-customization/.
457
- * @default TreeItemContent
458
- */
459
- ContentComponent: elementTypeAcceptingRef,
460
- /**
461
- * Props applied to ContentComponent.
462
- * @deprecated Consider using the `<TreeItem2 />` component or the `useTreeItem2` hook instead. For more details, see https://mui.com/x/react-tree-view/tree-item-customization/.
463
- */
464
- ContentProps: PropTypes.object,
465
330
  /**
466
331
  * If `true`, the item is disabled.
467
332
  * @default false
468
333
  */
469
334
  disabled: PropTypes.bool,
335
+ /**
336
+ * The id attribute of the item. If not provided, it will be generated.
337
+ */
338
+ id: PropTypes.string,
470
339
  /**
471
340
  * The id of the item.
341
+ * Must be unique.
472
342
  */
473
343
  itemId: PropTypes.string.isRequired,
474
344
  /**
475
- * The Tree Item label.
345
+ * The label of the item.
476
346
  */
477
347
  label: PropTypes.node,
348
+ /**
349
+ * Callback fired when the item root is blurred.
350
+ */
351
+ onBlur: PropTypes.func,
478
352
  /**
479
353
  * This prop isn't supported.
480
- * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
354
+ * Use the `onItemFocus` callback on the tree if you need to monitor an item's focus.
481
355
  */
482
356
  onFocus: unsupportedProp,
483
357
  /**
484
- * Callback fired when a key of the keyboard is pressed on the item.
358
+ * Callback fired when a key is pressed on the keyboard and the tree is in focus.
485
359
  */
486
360
  onKeyDown: PropTypes.func,
487
361
  /**
@@ -493,9 +367,5 @@ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
493
367
  * Overridable component slots.
494
368
  * @default {}
495
369
  */
496
- slots: PropTypes.object,
497
- /**
498
- * The system prop that allows defining system overrides as well as additional CSS styles.
499
- */
500
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
370
+ slots: PropTypes.object
501
371
  } : void 0;