@mui/x-tree-view 7.0.0-beta.6 → 7.0.0-beta.7

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 (129) hide show
  1. package/CHANGELOG.md +117 -1
  2. package/RichTreeView/RichTreeView.js +22 -22
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -1
  4. package/SimpleTreeView/SimpleTreeView.js +22 -22
  5. package/TreeItem/TreeItem.js +57 -53
  6. package/TreeItem/TreeItem.types.d.ts +10 -8
  7. package/TreeItem/useTreeItemState.js +2 -2
  8. package/TreeItem2/TreeItem2.d.ts +18 -0
  9. package/TreeItem2/TreeItem2.js +301 -0
  10. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  11. package/TreeItem2/TreeItem2.types.js +1 -0
  12. package/TreeItem2/index.d.ts +2 -0
  13. package/TreeItem2/index.js +1 -0
  14. package/TreeItem2/package.json +6 -0
  15. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  16. package/TreeItem2Icon/TreeItem2Icon.js +68 -0
  17. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  18. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  19. package/TreeItem2Icon/index.d.ts +2 -0
  20. package/TreeItem2Icon/index.js +1 -0
  21. package/TreeItem2Icon/package.json +6 -0
  22. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  23. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  24. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  25. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  26. package/TreeItem2Provider/index.d.ts +2 -0
  27. package/TreeItem2Provider/index.js +1 -0
  28. package/TreeItem2Provider/package.json +6 -0
  29. package/TreeView/TreeView.js +22 -22
  30. package/hooks/index.d.ts +1 -0
  31. package/hooks/index.js +2 -1
  32. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  33. package/hooks/useTreeItem2Utils/index.js +1 -0
  34. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  35. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  36. package/index.d.ts +5 -1
  37. package/index.js +9 -2
  38. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  39. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  40. package/internals/hooks/useLazyRef.d.ts +1 -2
  41. package/internals/hooks/useLazyRef.js +1 -11
  42. package/internals/hooks/useOnMount.d.ts +1 -2
  43. package/internals/hooks/useOnMount.js +1 -7
  44. package/internals/hooks/useTimeout.d.ts +1 -11
  45. package/internals/hooks/useTimeout.js +1 -36
  46. package/internals/models/plugin.d.ts +19 -16
  47. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +25 -25
  48. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  49. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  50. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -5
  51. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +17 -17
  52. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  53. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
  56. package/internals/useTreeView/useTreeView.js +27 -25
  57. package/modern/RichTreeView/RichTreeView.js +22 -22
  58. package/modern/SimpleTreeView/SimpleTreeView.js +22 -22
  59. package/modern/TreeItem/TreeItem.js +57 -53
  60. package/modern/TreeItem/useTreeItemState.js +2 -2
  61. package/modern/TreeItem2/TreeItem2.js +300 -0
  62. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  63. package/modern/TreeItem2/index.js +1 -0
  64. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  65. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  66. package/modern/TreeItem2Icon/index.js +1 -0
  67. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  68. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  69. package/modern/TreeItem2Provider/index.js +1 -0
  70. package/modern/TreeView/TreeView.js +22 -22
  71. package/modern/hooks/index.js +2 -1
  72. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  73. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  74. package/modern/index.js +9 -2
  75. package/modern/internals/hooks/useLazyRef.js +1 -11
  76. package/modern/internals/hooks/useOnMount.js +1 -7
  77. package/modern/internals/hooks/useTimeout.js +1 -36
  78. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  79. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  80. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  81. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  82. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  83. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  84. package/modern/internals/useTreeView/useTreeView.js +27 -25
  85. package/modern/useTreeItem2/index.js +1 -0
  86. package/modern/useTreeItem2/useTreeItem2.js +135 -0
  87. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  88. package/node/RichTreeView/RichTreeView.js +22 -22
  89. package/node/SimpleTreeView/SimpleTreeView.js +22 -22
  90. package/node/TreeItem/TreeItem.js +57 -53
  91. package/node/TreeItem/useTreeItemState.js +2 -2
  92. package/node/TreeItem2/TreeItem2.js +308 -0
  93. package/node/TreeItem2/TreeItem2.types.js +5 -0
  94. package/node/TreeItem2/index.js +42 -0
  95. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  96. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  97. package/node/TreeItem2Icon/index.js +12 -0
  98. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  99. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  100. package/node/TreeItem2Provider/index.js +12 -0
  101. package/node/TreeView/TreeView.js +22 -22
  102. package/node/hooks/index.js +8 -1
  103. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  104. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  105. package/node/index.js +61 -13
  106. package/node/internals/hooks/useLazyRef.js +7 -13
  107. package/node/internals/hooks/useOnMount.js +8 -10
  108. package/node/internals/hooks/useTimeout.js +7 -37
  109. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  110. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  111. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  112. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  113. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  114. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  115. package/node/internals/useTreeView/useTreeView.js +27 -25
  116. package/node/useTreeItem2/index.js +12 -0
  117. package/node/useTreeItem2/useTreeItem2.js +143 -0
  118. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  119. package/package.json +1 -1
  120. package/themeAugmentation/components.d.ts +5 -0
  121. package/themeAugmentation/overrides.d.ts +1 -0
  122. package/themeAugmentation/props.d.ts +2 -0
  123. package/useTreeItem2/index.d.ts +2 -0
  124. package/useTreeItem2/index.js +1 -0
  125. package/useTreeItem2/package.json +6 -0
  126. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  127. package/useTreeItem2/useTreeItem2.js +138 -0
  128. package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
  129. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -9,6 +9,7 @@ import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
10
  import Collapse from '@mui/material/Collapse';
11
11
  import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
12
+ import useForkRef from '@mui/utils/useForkRef';
12
13
  import { alpha, styled, useThemeProps } from '@mui/material/styles';
13
14
  import unsupportedProp from '@mui/utils/unsupportedProp';
14
15
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
@@ -17,6 +18,7 @@ import { TreeItemContent } from './TreeItemContent';
17
18
  import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
18
19
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
19
20
  import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
21
+ import { TreeItem2Provider } from '../TreeItem2Provider';
20
22
  import { jsx as _jsx } from "react/jsx-runtime";
21
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
24
  const useUtilityClasses = ownerState => {
@@ -144,18 +146,10 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
144
146
  disabledItemsFocusable,
145
147
  instance
146
148
  } = useTreeViewContext();
147
- const inPropsWithTheme = useThemeProps({
149
+ const props = useThemeProps({
148
150
  props: inProps,
149
151
  name: 'MuiTreeItem'
150
152
  });
151
- const {
152
- props,
153
- ref,
154
- wrapItem
155
- } = runItemPlugins({
156
- props: inPropsWithTheme,
157
- ref: inRef
158
- });
159
153
  const {
160
154
  children,
161
155
  className,
@@ -170,6 +164,12 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
170
164
  onMouseDown
171
165
  } = props,
172
166
  other = _objectWithoutPropertiesLoose(props, _excluded);
167
+ const {
168
+ contentRef,
169
+ rootRef
170
+ } = runItemPlugins(props);
171
+ const handleRootRef = useForkRef(inRef, rootRef);
172
+ const handleContentRef = useForkRef(ContentProps?.ref, contentRef);
173
173
  const slots = {
174
174
  expandIcon: inSlots?.expandIcon ?? contextIcons.slots.expandIcon ?? TreeViewExpandIcon,
175
175
  collapseIcon: inSlots?.collapseIcon ?? contextIcons.slots.collapseIcon ?? TreeViewCollapseIcon,
@@ -261,50 +261,54 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
261
261
  }
262
262
  const canBeFocused = !disabled || disabledItemsFocusable;
263
263
  if (!focused && canBeFocused && event.currentTarget === event.target) {
264
- instance.focusNode(event, nodeId);
264
+ instance.focusItem(event, nodeId);
265
265
  }
266
266
  }
267
267
  const idAttribute = instance.getTreeItemId(nodeId, id);
268
- const item = /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
269
- className: clsx(classes.root, className),
270
- role: "treeitem",
271
- "aria-expanded": expandable ? expanded : undefined,
272
- "aria-selected": ariaSelected,
273
- "aria-disabled": disabled || undefined,
274
- id: idAttribute,
275
- tabIndex: -1
276
- }, other, {
277
- ownerState: ownerState,
278
- onFocus: handleFocus,
279
- ref: ref,
280
- children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
281
- as: ContentComponent,
282
- classes: {
283
- root: classes.content,
284
- expanded: classes.expanded,
285
- selected: classes.selected,
286
- focused: classes.focused,
287
- disabled: classes.disabled,
288
- iconContainer: classes.iconContainer,
289
- label: classes.label
290
- },
291
- label: label,
292
- nodeId: nodeId,
293
- onClick: onClick,
294
- onMouseDown: onMouseDown,
295
- icon: icon,
296
- expansionIcon: expansionIcon,
297
- displayIcon: displayIcon,
298
- ownerState: ownerState
299
- }, ContentProps)), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
300
- as: GroupTransition
301
- }, groupTransitionProps, {
302
- children: children
303
- }))]
304
- }));
305
- return wrapItem(item);
268
+ return /*#__PURE__*/_jsx(TreeItem2Provider, {
269
+ nodeId: nodeId,
270
+ children: /*#__PURE__*/_jsxs(TreeItemRoot, _extends({
271
+ className: clsx(classes.root, className),
272
+ role: "treeitem",
273
+ "aria-expanded": expandable ? expanded : undefined,
274
+ "aria-selected": ariaSelected,
275
+ "aria-disabled": disabled || undefined,
276
+ id: idAttribute,
277
+ tabIndex: -1
278
+ }, other, {
279
+ ownerState: ownerState,
280
+ onFocus: handleFocus,
281
+ ref: handleRootRef,
282
+ children: [/*#__PURE__*/_jsx(StyledTreeItemContent, _extends({
283
+ as: ContentComponent,
284
+ classes: {
285
+ root: classes.content,
286
+ expanded: classes.expanded,
287
+ selected: classes.selected,
288
+ focused: classes.focused,
289
+ disabled: classes.disabled,
290
+ iconContainer: classes.iconContainer,
291
+ label: classes.label
292
+ },
293
+ label: label,
294
+ nodeId: nodeId,
295
+ onClick: onClick,
296
+ onMouseDown: onMouseDown,
297
+ icon: icon,
298
+ expansionIcon: expansionIcon,
299
+ displayIcon: displayIcon,
300
+ ownerState: ownerState
301
+ }, ContentProps, {
302
+ ref: handleContentRef
303
+ })), children && /*#__PURE__*/_jsx(TreeItemGroup, _extends({
304
+ as: GroupTransition
305
+ }, groupTransitionProps, {
306
+ children: children
307
+ }))]
308
+ }))
309
+ });
306
310
  });
307
- TreeItem.propTypes = {
311
+ process.env.NODE_ENV !== "production" ? TreeItem.propTypes = {
308
312
  // ----------------------------- Warning --------------------------------
309
313
  // | These PropTypes are generated from the TypeScript type definitions |
310
314
  // | To update them edit the TypeScript types and run "yarn proptypes" |
@@ -328,12 +332,12 @@ TreeItem.propTypes = {
328
332
  */
329
333
  ContentProps: PropTypes.object,
330
334
  /**
331
- * If `true`, the node is disabled.
335
+ * If `true`, the item is disabled.
332
336
  * @default false
333
337
  */
334
338
  disabled: PropTypes.bool,
335
339
  /**
336
- * The tree node label.
340
+ * The tree item label.
337
341
  */
338
342
  label: PropTypes.node,
339
343
  /**
@@ -342,7 +346,7 @@ TreeItem.propTypes = {
342
346
  nodeId: PropTypes.string.isRequired,
343
347
  /**
344
348
  * This prop isn't supported.
345
- * Use the `onNodeFocus` callback on the tree if you need to monitor a node's focus.
349
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
346
350
  */
347
351
  onFocus: unsupportedProp,
348
352
  /**
@@ -359,4 +363,4 @@ TreeItem.propTypes = {
359
363
  * The system prop that allows defining system overrides as well as additional CSS styles.
360
364
  */
361
365
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
362
- };
366
+ } : void 0;
@@ -14,7 +14,7 @@ export function useTreeItemState(nodeId) {
14
14
  const handleExpansion = event => {
15
15
  if (!disabled) {
16
16
  if (!focused) {
17
- instance.focusNode(event, nodeId);
17
+ instance.focusItem(event, nodeId);
18
18
  }
19
19
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
20
20
 
@@ -27,7 +27,7 @@ export function useTreeItemState(nodeId) {
27
27
  const handleSelection = event => {
28
28
  if (!disabled) {
29
29
  if (!focused) {
30
- instance.focusNode(event, nodeId);
30
+ instance.focusItem(event, nodeId);
31
31
  }
32
32
  const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
33
33
  if (multiple) {
@@ -0,0 +1,300 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["id", "nodeId", "label", "disabled", "children", "slots", "slotProps"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import clsx from 'clsx';
7
+ import unsupportedProp from '@mui/utils/unsupportedProp';
8
+ import { alpha, styled, useThemeProps } from '@mui/material/styles';
9
+ import Collapse from '@mui/material/Collapse';
10
+ import { useSlotProps } from '@mui/base/utils';
11
+ import { shouldForwardProp } from '@mui/system';
12
+ import composeClasses from '@mui/utils/composeClasses';
13
+ import { unstable_useTreeItem2 as useTreeItem2 } from '../useTreeItem2';
14
+ import { getTreeItemUtilityClass, treeItemClasses } from '../TreeItem';
15
+ import { TreeItem2Icon } from '../TreeItem2Icon';
16
+ import { TreeItem2Provider } from '../TreeItem2Provider';
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { jsxs as _jsxs } from "react/jsx-runtime";
19
+ export const TreeItem2Root = styled('li', {
20
+ name: 'MuiTreeItem2',
21
+ slot: 'Root',
22
+ overridesResolver: (props, styles) => styles.root
23
+ })({
24
+ listStyle: 'none',
25
+ margin: 0,
26
+ padding: 0,
27
+ outline: 0
28
+ });
29
+ export const TreeItem2Content = styled('div', {
30
+ name: 'MuiTreeItem2',
31
+ slot: 'Content',
32
+ overridesResolver: (props, styles) => styles.content,
33
+ shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'status'
34
+ })(({
35
+ theme
36
+ }) => ({
37
+ padding: theme.spacing(0.5, 1),
38
+ borderRadius: theme.shape.borderRadius,
39
+ width: '100%',
40
+ boxSizing: 'border-box',
41
+ // prevent width + padding to overflow
42
+ display: 'flex',
43
+ alignItems: 'center',
44
+ gap: theme.spacing(1),
45
+ cursor: 'pointer',
46
+ WebkitTapHighlightColor: 'transparent',
47
+ '&:hover': {
48
+ backgroundColor: (theme.vars || theme).palette.action.hover,
49
+ // Reset on touch devices, it doesn't add specificity
50
+ '@media (hover: none)': {
51
+ backgroundColor: 'transparent'
52
+ }
53
+ },
54
+ [`& .${treeItemClasses.groupTransition}`]: {
55
+ margin: 0,
56
+ padding: 0,
57
+ paddingLeft: 12
58
+ },
59
+ variants: [{
60
+ props: ({
61
+ status
62
+ }) => status.disabled,
63
+ style: {
64
+ opacity: (theme.vars || theme).palette.action.disabledOpacity,
65
+ backgroundColor: 'transparent'
66
+ }
67
+ }, {
68
+ props: ({
69
+ status
70
+ }) => status.focused,
71
+ style: {
72
+ backgroundColor: (theme.vars || theme).palette.action.focus
73
+ }
74
+ }, {
75
+ props: ({
76
+ status
77
+ }) => status.selected,
78
+ style: {
79
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
80
+ '&:hover': {
81
+ 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),
82
+ // Reset on touch devices, it doesn't add specificity
83
+ '@media (hover: none)': {
84
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
85
+ }
86
+ }
87
+ }
88
+ }, {
89
+ props: ({
90
+ status
91
+ }) => status.selected && status.focused,
92
+ style: {
93
+ 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)
94
+ }
95
+ }]
96
+ }));
97
+ export const TreeItem2Label = styled('div', {
98
+ name: 'MuiTreeItem2',
99
+ slot: 'Label',
100
+ overridesResolver: (props, styles) => styles.label
101
+ })(({
102
+ theme
103
+ }) => _extends({
104
+ width: '100%',
105
+ boxSizing: 'border-box',
106
+ // prevent width + padding to overflow
107
+ // fixes overflow - see https://github.com/mui/material-ui/issues/27372
108
+ minWidth: 0,
109
+ position: 'relative'
110
+ }, theme.typography.body1));
111
+ export const TreeItem2IconContainer = styled('div', {
112
+ name: 'MuiTreeItem2',
113
+ slot: 'IconContainer',
114
+ overridesResolver: (props, styles) => styles.iconContainer
115
+ })({
116
+ width: 16,
117
+ display: 'flex',
118
+ flexShrink: 0,
119
+ justifyContent: 'center',
120
+ '& svg': {
121
+ fontSize: 18
122
+ }
123
+ });
124
+ export const TreeItem2GroupTransition = styled(Collapse, {
125
+ name: 'MuiTreeItem2GroupTransition',
126
+ slot: 'GroupTransition',
127
+ overridesResolver: (props, styles) => styles.groupTransition
128
+ })({
129
+ margin: 0,
130
+ padding: 0,
131
+ paddingLeft: 12
132
+ });
133
+ const useUtilityClasses = ownerState => {
134
+ const {
135
+ classes
136
+ } = ownerState;
137
+ const slots = {
138
+ root: ['root'],
139
+ content: ['content'],
140
+ expanded: ['expanded'],
141
+ selected: ['selected'],
142
+ focused: ['focused'],
143
+ disabled: ['disabled'],
144
+ iconContainer: ['iconContainer'],
145
+ label: ['label'],
146
+ groupTransition: ['groupTransition']
147
+ };
148
+ return composeClasses(slots, getTreeItemUtilityClass, classes);
149
+ };
150
+
151
+ /**
152
+ *
153
+ * Demos:
154
+ *
155
+ * - [Tree View](https://mui.com/x/react-tree-view/)
156
+ *
157
+ * API:
158
+ *
159
+ * - [TreeItem2 API](https://mui.com/x/api/tree-view/tree-item-2/)
160
+ */
161
+ export const TreeItem2 = /*#__PURE__*/React.forwardRef(function TreeItem2(inProps, forwardedRef) {
162
+ const props = useThemeProps({
163
+ props: inProps,
164
+ name: 'MuiTreeItem2'
165
+ });
166
+ const {
167
+ id,
168
+ nodeId,
169
+ label,
170
+ disabled,
171
+ children,
172
+ slots = {},
173
+ slotProps = {}
174
+ } = props,
175
+ other = _objectWithoutPropertiesLoose(props, _excluded);
176
+ const {
177
+ getRootProps,
178
+ getContentProps,
179
+ getIconContainerProps,
180
+ getLabelProps,
181
+ getGroupTransitionProps,
182
+ status
183
+ } = useTreeItem2({
184
+ id,
185
+ nodeId,
186
+ children,
187
+ label,
188
+ disabled
189
+ });
190
+ const ownerState = _extends({}, props, status);
191
+ const classes = useUtilityClasses(ownerState);
192
+ const Root = slots.root ?? TreeItem2Root;
193
+ const rootProps = useSlotProps({
194
+ elementType: Root,
195
+ getSlotProps: getRootProps,
196
+ externalForwardedProps: other,
197
+ externalSlotProps: slotProps.root,
198
+ additionalProps: {
199
+ ref: forwardedRef
200
+ },
201
+ ownerState: {},
202
+ className: classes.root
203
+ });
204
+ const Content = slots.content ?? TreeItem2Content;
205
+ const contentProps = useSlotProps({
206
+ elementType: Content,
207
+ getSlotProps: getContentProps,
208
+ externalSlotProps: slotProps.content,
209
+ ownerState: {},
210
+ className: clsx(classes.content, status.expanded && classes.expanded, status.selected && classes.selected, status.focused && classes.focused, status.disabled && classes.disabled)
211
+ });
212
+ const IconContainer = slots.iconContainer ?? TreeItem2IconContainer;
213
+ const iconContainerProps = useSlotProps({
214
+ elementType: IconContainer,
215
+ getSlotProps: getIconContainerProps,
216
+ externalSlotProps: slotProps.iconContainer,
217
+ ownerState: {},
218
+ className: classes.iconContainer
219
+ });
220
+ const Label = slots.label ?? TreeItem2Label;
221
+ const labelProps = useSlotProps({
222
+ elementType: Label,
223
+ getSlotProps: getLabelProps,
224
+ externalSlotProps: slotProps.label,
225
+ ownerState: {},
226
+ className: classes.label
227
+ });
228
+ const GroupTransition = slots.groupTransition ?? undefined;
229
+ const groupTransitionProps = useSlotProps({
230
+ elementType: GroupTransition,
231
+ getSlotProps: getGroupTransitionProps,
232
+ externalSlotProps: slotProps.groupTransition,
233
+ ownerState: {},
234
+ className: classes.groupTransition
235
+ });
236
+ return /*#__PURE__*/_jsx(TreeItem2Provider, {
237
+ nodeId: nodeId,
238
+ children: /*#__PURE__*/_jsxs(Root, _extends({}, rootProps, {
239
+ children: [/*#__PURE__*/_jsxs(Content, _extends({}, contentProps, {
240
+ children: [/*#__PURE__*/_jsx(IconContainer, _extends({}, iconContainerProps, {
241
+ children: /*#__PURE__*/_jsx(TreeItem2Icon, {
242
+ status: status,
243
+ slots: slots,
244
+ slotProps: slotProps
245
+ })
246
+ })), /*#__PURE__*/_jsx(Label, _extends({}, labelProps))]
247
+ })), children && /*#__PURE__*/_jsx(TreeItem2GroupTransition, _extends({
248
+ as: GroupTransition
249
+ }, groupTransitionProps))]
250
+ }))
251
+ });
252
+ });
253
+ process.env.NODE_ENV !== "production" ? TreeItem2.propTypes = {
254
+ // ----------------------------- Warning --------------------------------
255
+ // | These PropTypes are generated from the TypeScript type definitions |
256
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
257
+ // ----------------------------------------------------------------------
258
+ /**
259
+ * The content of the component.
260
+ */
261
+ children: PropTypes.node,
262
+ /**
263
+ * Override or extend the styles applied to the component.
264
+ */
265
+ classes: PropTypes.object,
266
+ className: PropTypes.string,
267
+ /**
268
+ * If `true`, the node is disabled.
269
+ * @default false
270
+ */
271
+ disabled: PropTypes.bool,
272
+ /**
273
+ * The id attribute of the node. If not provided, it will be generated.
274
+ */
275
+ id: PropTypes.string,
276
+ /**
277
+ * The label of the node.
278
+ */
279
+ label: PropTypes.node,
280
+ /**
281
+ * The id of the node.
282
+ * Must be unique.
283
+ */
284
+ nodeId: PropTypes.string.isRequired,
285
+ /**
286
+ * This prop isn't supported.
287
+ * Use the `onItemFocus` callback on the tree if you need to monitor a item's focus.
288
+ */
289
+ onFocus: unsupportedProp,
290
+ /**
291
+ * The props used for each component slot.
292
+ * @default {}
293
+ */
294
+ slotProps: PropTypes.object,
295
+ /**
296
+ * Overridable component slots.
297
+ * @default {}
298
+ */
299
+ slots: PropTypes.object
300
+ } : void 0;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { TreeItem2, TreeItem2Root, TreeItem2Content, TreeItem2IconContainer, TreeItem2GroupTransition, TreeItem2Label } from './TreeItem2';
@@ -0,0 +1,67 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { resolveComponentProps, useSlotProps } from '@mui/base/utils';
5
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
6
+ import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ function TreeItem2Icon(props) {
9
+ const {
10
+ slots,
11
+ slotProps,
12
+ status
13
+ } = props;
14
+ const context = useTreeViewContext();
15
+ const contextIcons = _extends({}, context.icons.slots, {
16
+ expandIcon: context.icons.slots.expandIcon ?? TreeViewExpandIcon,
17
+ collapseIcon: context.icons.slots.collapseIcon ?? TreeViewCollapseIcon
18
+ });
19
+ const contextIconProps = context.icons.slotProps;
20
+ let iconName;
21
+ if (slots?.icon) {
22
+ iconName = 'icon';
23
+ } else if (status.expandable) {
24
+ if (status.expanded) {
25
+ iconName = 'collapseIcon';
26
+ } else {
27
+ iconName = 'expandIcon';
28
+ }
29
+ } else {
30
+ iconName = 'endIcon';
31
+ }
32
+ const Icon = slots?.[iconName] ?? contextIcons[iconName];
33
+ const iconProps = useSlotProps({
34
+ elementType: Icon,
35
+ externalSlotProps: tempOwnerState => _extends({}, resolveComponentProps(contextIconProps[iconName], tempOwnerState), resolveComponentProps(slotProps?.[iconName], tempOwnerState)),
36
+ // TODO: Add proper ownerState
37
+ ownerState: {}
38
+ });
39
+ if (!Icon) {
40
+ return null;
41
+ }
42
+ return /*#__PURE__*/_jsx(Icon, _extends({}, iconProps));
43
+ }
44
+ process.env.NODE_ENV !== "production" ? TreeItem2Icon.propTypes = {
45
+ // ----------------------------- Warning --------------------------------
46
+ // | These PropTypes are generated from the TypeScript type definitions |
47
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
48
+ // ----------------------------------------------------------------------
49
+ /**
50
+ * The props used for each component slot.
51
+ * @default {}
52
+ */
53
+ slotProps: PropTypes.object,
54
+ /**
55
+ * Overridable component slots.
56
+ * @default {}
57
+ */
58
+ slots: PropTypes.object,
59
+ status: PropTypes.shape({
60
+ disabled: PropTypes.bool.isRequired,
61
+ expandable: PropTypes.bool.isRequired,
62
+ expanded: PropTypes.bool.isRequired,
63
+ focused: PropTypes.bool.isRequired,
64
+ selected: PropTypes.bool.isRequired
65
+ }).isRequired
66
+ } : void 0;
67
+ export { TreeItem2Icon };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { TreeItem2Icon } from './TreeItem2Icon';
@@ -0,0 +1,24 @@
1
+ import PropTypes from 'prop-types';
2
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
3
+ function TreeItem2Provider(props) {
4
+ const {
5
+ children,
6
+ nodeId
7
+ } = props;
8
+ const {
9
+ wrapItem
10
+ } = useTreeViewContext();
11
+ return wrapItem({
12
+ children,
13
+ nodeId
14
+ });
15
+ }
16
+ TreeItem2Provider.propTypes = {
17
+ // ----------------------------- Warning --------------------------------
18
+ // | These PropTypes are generated from the TypeScript type definitions |
19
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
20
+ // ----------------------------------------------------------------------
21
+ children: PropTypes.node,
22
+ nodeId: PropTypes.string.isRequired
23
+ };
24
+ export { TreeItem2Provider };
@@ -0,0 +1 @@
1
+ export { TreeItem2Provider } from './TreeItem2Provider';