@mui/x-tree-view 8.0.0-beta.0 → 8.0.0-beta.2

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 (168) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/RichTreeView/RichTreeView.js +17 -5
  3. package/RichTreeView/richTreeViewClasses.d.ts +2 -4
  4. package/RichTreeView/richTreeViewClasses.js +1 -1
  5. package/SimpleTreeView/SimpleTreeView.js +17 -5
  6. package/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
  7. package/SimpleTreeView/simpleTreeViewClasses.js +1 -1
  8. package/TreeItem/TreeItem.d.ts +1 -1
  9. package/TreeItem/TreeItem.js +45 -49
  10. package/TreeItem/index.d.ts +2 -1
  11. package/TreeItem/index.js +13 -21
  12. package/TreeItem/treeItemClasses.d.ts +40 -18
  13. package/TreeItem/treeItemClasses.js +3 -1
  14. package/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
  15. package/esm/RichTreeView/RichTreeView.js +17 -5
  16. package/esm/RichTreeView/richTreeViewClasses.d.ts +2 -4
  17. package/esm/RichTreeView/richTreeViewClasses.js +1 -1
  18. package/esm/SimpleTreeView/SimpleTreeView.js +17 -5
  19. package/esm/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
  20. package/esm/SimpleTreeView/simpleTreeViewClasses.js +1 -1
  21. package/esm/TreeItem/TreeItem.d.ts +1 -1
  22. package/esm/TreeItem/TreeItem.js +45 -49
  23. package/esm/TreeItem/index.d.ts +2 -1
  24. package/esm/TreeItem/index.js +1 -1
  25. package/esm/TreeItem/treeItemClasses.d.ts +40 -18
  26. package/esm/TreeItem/treeItemClasses.js +3 -1
  27. package/esm/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
  28. package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
  29. package/esm/index.js +1 -1
  30. package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
  31. package/esm/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  32. package/esm/internals/TreeViewProvider/TreeViewContext.js +8 -1
  33. package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
  34. package/esm/internals/TreeViewProvider/TreeViewProvider.js +17 -5
  35. package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
  36. package/esm/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
  37. package/esm/internals/TreeViewProvider/TreeViewStyleContext.js +13 -0
  38. package/esm/internals/TreeViewProvider/index.d.ts +1 -1
  39. package/esm/internals/TreeViewProvider/index.js +1 -1
  40. package/esm/internals/index.d.ts +2 -1
  41. package/esm/internals/models/itemPlugin.d.ts +3 -3
  42. package/esm/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
  43. package/esm/internals/plugins/useTreeViewItemCustomization/index.js +1 -0
  44. package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
  45. package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +24 -0
  46. package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
  47. package/esm/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +1 -0
  48. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  49. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  50. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  51. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
  52. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  53. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  54. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
  55. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  56. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  57. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  58. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  59. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
  60. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
  61. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
  62. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  63. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
  64. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  65. package/esm/internals/utils/selectors.d.ts +1 -1
  66. package/esm/useTreeItem/useTreeItem.js +16 -17
  67. package/esm/useTreeItem/useTreeItem.types.d.ts +9 -4
  68. package/hooks/useTreeItemUtils/useTreeItemUtils.js +7 -13
  69. package/index.js +1 -1
  70. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -2
  71. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  72. package/internals/TreeViewProvider/TreeViewContext.js +10 -2
  73. package/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
  74. package/internals/TreeViewProvider/TreeViewProvider.js +17 -5
  75. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
  76. package/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
  77. package/internals/TreeViewProvider/TreeViewStyleContext.js +21 -0
  78. package/internals/TreeViewProvider/index.d.ts +1 -1
  79. package/internals/TreeViewProvider/index.js +2 -2
  80. package/internals/index.d.ts +2 -1
  81. package/internals/models/itemPlugin.d.ts +3 -3
  82. package/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
  83. package/internals/plugins/useTreeViewItemCustomization/index.js +12 -0
  84. package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
  85. package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +32 -0
  86. package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
  87. package/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +5 -0
  88. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  89. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  90. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  91. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +12 -14
  92. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  93. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  94. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -12
  95. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  96. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  97. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  98. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  99. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
  100. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +15 -20
  101. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +42 -37
  102. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  103. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +39 -2
  104. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  105. package/internals/utils/selectors.d.ts +1 -1
  106. package/modern/RichTreeView/RichTreeView.js +17 -5
  107. package/modern/RichTreeView/richTreeViewClasses.d.ts +2 -4
  108. package/modern/RichTreeView/richTreeViewClasses.js +1 -1
  109. package/modern/SimpleTreeView/SimpleTreeView.js +17 -5
  110. package/modern/SimpleTreeView/simpleTreeViewClasses.d.ts +2 -4
  111. package/modern/SimpleTreeView/simpleTreeViewClasses.js +1 -1
  112. package/modern/TreeItem/TreeItem.d.ts +1 -1
  113. package/modern/TreeItem/TreeItem.js +45 -49
  114. package/modern/TreeItem/index.d.ts +2 -1
  115. package/modern/TreeItem/index.js +1 -1
  116. package/modern/TreeItem/treeItemClasses.d.ts +40 -18
  117. package/modern/TreeItem/treeItemClasses.js +3 -1
  118. package/modern/TreeItemLabelInput/TreeItemLabelInput.js +2 -2
  119. package/modern/hooks/useTreeItemUtils/useTreeItemUtils.js +8 -14
  120. package/modern/index.js +1 -1
  121. package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
  122. package/modern/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  123. package/modern/internals/TreeViewProvider/TreeViewContext.js +8 -1
  124. package/modern/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
  125. package/modern/internals/TreeViewProvider/TreeViewProvider.js +17 -5
  126. package/modern/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -1
  127. package/modern/internals/TreeViewProvider/TreeViewStyleContext.d.ts +33 -0
  128. package/modern/internals/TreeViewProvider/TreeViewStyleContext.js +13 -0
  129. package/modern/internals/TreeViewProvider/index.d.ts +1 -1
  130. package/modern/internals/TreeViewProvider/index.js +1 -1
  131. package/modern/internals/index.d.ts +2 -1
  132. package/modern/internals/models/itemPlugin.d.ts +3 -3
  133. package/modern/internals/plugins/useTreeViewItemCustomization/index.d.ts +2 -0
  134. package/modern/internals/plugins/useTreeViewItemCustomization/index.js +1 -0
  135. package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.d.ts +3 -0
  136. package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.js +24 -0
  137. package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.d.ts +42 -0
  138. package/modern/internals/plugins/useTreeViewItemCustomization/useTreeViewItemCustomization.types.js +1 -0
  139. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +3 -8
  140. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +1 -4
  141. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  142. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +13 -15
  143. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -3
  144. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +9 -12
  145. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -11
  146. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +14 -20
  147. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +5 -7
  148. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +5 -4
  149. package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -2
  150. package/modern/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +2 -3
  151. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +16 -21
  152. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +43 -38
  153. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +331 -0
  154. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +38 -1
  155. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +5 -4
  156. package/modern/internals/utils/selectors.d.ts +1 -1
  157. package/modern/useTreeItem/useTreeItem.js +16 -17
  158. package/modern/useTreeItem/useTreeItem.types.d.ts +9 -4
  159. package/package.json +2 -2
  160. package/tsconfig.build.tsbuildinfo +1 -1
  161. package/useTreeItem/useTreeItem.js +16 -17
  162. package/useTreeItem/useTreeItem.types.d.ts +9 -4
  163. package/esm/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
  164. package/esm/internals/TreeViewProvider/useTreeViewContext.js +0 -9
  165. package/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
  166. package/internals/TreeViewProvider/useTreeViewContext.js +0 -17
  167. package/modern/internals/TreeViewProvider/useTreeViewContext.d.ts +0 -3
  168. package/modern/internals/TreeViewProvider/useTreeViewContext.js +0 -9
@@ -22,10 +22,21 @@ const useUtilityClasses = ownerState => {
22
22
  const {
23
23
  classes
24
24
  } = ownerState;
25
- const slots = {
26
- root: ['root']
27
- };
28
- return composeClasses(slots, getRichTreeViewUtilityClass, classes);
25
+ return React.useMemo(() => {
26
+ const slots = {
27
+ root: ['root'],
28
+ item: ['item'],
29
+ itemContent: ['itemContent'],
30
+ itemGroupTransition: ['itemGroupTransition'],
31
+ itemIconContainer: ['itemIconContainer'],
32
+ itemLabel: ['itemLabel'],
33
+ itemLabelInput: ['itemLabelInput'],
34
+ itemCheckbox: ['itemCheckbox']
35
+ // itemDragAndDropOverlay: ['itemDragAndDropOverlay'], => feature not available on this component
36
+ // itemErrorIcon: ['itemErrorIcon'], => feature not available on this component
37
+ };
38
+ return composeClasses(slots, getRichTreeViewUtilityClass, classes);
39
+ }, [classes]);
29
40
  };
30
41
  export const RichTreeViewRoot = styled('ul', {
31
42
  name: 'MuiRichTreeView',
@@ -93,7 +104,8 @@ const RichTreeView = /*#__PURE__*/React.forwardRef(function RichTreeView(inProps
93
104
  });
94
105
  }
95
106
  return /*#__PURE__*/_jsx(TreeViewProvider, {
96
- value: contextValue,
107
+ contextValue: contextValue,
108
+ classes: classes,
97
109
  children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps, {
98
110
  children: /*#__PURE__*/_jsx(RichTreeViewItems, {
99
111
  slots: slots,
@@ -1,7 +1,5 @@
1
- export interface RichTreeViewClasses {
2
- /** Styles applied to the root element. */
3
- root: string;
4
- }
1
+ import { TreeViewClasses } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
2
+ export interface RichTreeViewClasses extends Omit<TreeViewClasses, 'itemDragAndDropOverlay' | 'itemErrorIcon' | 'itemLoadingIcon'> {}
5
3
  export type RichTreeViewClassKey = keyof RichTreeViewClasses;
6
4
  export declare function getRichTreeViewUtilityClass(slot: string): string;
7
5
  export declare const richTreeViewClasses: RichTreeViewClasses;
@@ -3,4 +3,4 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
3
  export function getRichTreeViewUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiRichTreeView', slot);
5
5
  }
6
- export const richTreeViewClasses = generateUtilityClasses('MuiRichTreeView', ['root']);
6
+ export const richTreeViewClasses = generateUtilityClasses('MuiRichTreeView', ['root', 'item', 'itemContent', 'itemGroupTransition', 'itemIconContainer', 'itemLabel', 'itemCheckbox', 'itemLabelInput']);
@@ -17,10 +17,21 @@ const useUtilityClasses = ownerState => {
17
17
  const {
18
18
  classes
19
19
  } = ownerState;
20
- const slots = {
21
- root: ['root']
22
- };
23
- return composeClasses(slots, getSimpleTreeViewUtilityClass, classes);
20
+ return React.useMemo(() => {
21
+ const slots = {
22
+ root: ['root'],
23
+ item: ['item'],
24
+ itemContent: ['itemContent'],
25
+ itemGroupTransition: ['itemGroupTransition'],
26
+ itemIconContainer: ['itemIconContainer'],
27
+ itemLabel: ['itemLabel'],
28
+ // itemLabelInput: ['itemLabelInput'], => feature not available on this component
29
+ itemCheckbox: ['itemCheckbox']
30
+ // itemDragAndDropOverlay: ['itemDragAndDropOverlay'], => feature not available on this component
31
+ // itemErrorIcon: ['itemErrorIcon'], => feature not available on this component
32
+ };
33
+ return composeClasses(slots, getSimpleTreeViewUtilityClass, classes);
34
+ }, [classes]);
24
35
  };
25
36
  export const SimpleTreeViewRoot = styled('ul', {
26
37
  name: 'MuiSimpleTreeView',
@@ -80,7 +91,8 @@ const SimpleTreeView = /*#__PURE__*/React.forwardRef(function SimpleTreeView(inP
80
91
  ownerState
81
92
  });
82
93
  return /*#__PURE__*/_jsx(TreeViewProvider, {
83
- value: contextValue,
94
+ contextValue: contextValue,
95
+ classes: classes,
84
96
  children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps))
85
97
  });
86
98
  });
@@ -1,7 +1,5 @@
1
- export interface SimpleTreeViewClasses {
2
- /** Styles applied to the root element. */
3
- root: string;
4
- }
1
+ import { TreeViewClasses } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
2
+ export interface SimpleTreeViewClasses extends Omit<TreeViewClasses, 'itemDragAndDropOverlay' | 'itemLabelInput' | 'itemErrorIcon' | 'itemLoadingIcon'> {}
5
3
  export type SimpleTreeViewClassKey = keyof SimpleTreeViewClasses;
6
4
  export declare function getSimpleTreeViewUtilityClass(slot: string): string;
7
5
  export declare const simpleTreeViewClasses: SimpleTreeViewClasses;
@@ -3,4 +3,4 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
3
  export function getSimpleTreeViewUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiSimpleTreeView', slot);
5
5
  }
6
- export const simpleTreeViewClasses = generateUtilityClasses('MuiSimpleTreeView', ['root']);
6
+ export const simpleTreeViewClasses = generateUtilityClasses('MuiSimpleTreeView', ['root', 'item', 'itemContent', 'itemGroupTransition', 'itemIconContainer', 'itemLabel', 'itemCheckbox']);
@@ -15,7 +15,7 @@ export declare const TreeItemErrorContainer: import("@emotion/styled").StyledCom
15
15
  export declare const TreeItemLoadingContainer: import("@emotion/styled").StyledComponent<Pick<import("@mui/material").CircularProgressProps, keyof import("@mui/material").CircularProgressProps> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
16
16
  export declare const TreeItemCheckbox: import("@emotion/styled").StyledComponent<Pick<Omit<CheckboxProps & {
17
17
  visible?: boolean;
18
- }, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "action" | "checked" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "readOnly" | "required" | "value" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "sx" | "classes" | "component" | "slots" | "slotProps" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "checkedIcon" | "inputProps" | "inputRef" | "indeterminate" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
18
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "action" | "checked" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "readOnly" | "required" | "value" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "sx" | "classes" | "component" | "slots" | "slotProps" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "checkedIcon" | "inputProps" | "inputRef" | "indeterminate" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
19
19
  type TreeItemComponent = ((props: TreeItemProps & React.RefAttributes<HTMLLIElement>) => React.JSX.Element) & {
20
20
  propTypes?: any;
21
21
  };
@@ -3,7 +3,7 @@
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
  import _extends from "@babel/runtime/helpers/esm/extends";
5
5
  const _excluded = ["visible"],
6
- _excluded2 = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps"];
6
+ _excluded2 = ["id", "itemId", "label", "disabled", "children", "slots", "slotProps", "classes"];
7
7
  import * as React from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
@@ -22,6 +22,7 @@ import { TreeItemIcon } from "../TreeItemIcon/index.js";
22
22
  import { TreeItemDragAndDropOverlay } from "../TreeItemDragAndDropOverlay/index.js";
23
23
  import { TreeItemProvider } from "../TreeItemProvider/index.js";
24
24
  import { TreeItemLabelInput } from "../TreeItemLabelInput/index.js";
25
+ import { useTreeViewStyleContext } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
25
26
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
27
  const useThemeProps = createUseThemeProps('MuiTreeItem');
27
28
  export const TreeItemRoot = styled('li', {
@@ -61,43 +62,26 @@ export const TreeItemContent = styled('div', {
61
62
  backgroundColor: 'transparent'
62
63
  }
63
64
  },
64
- variants: [{
65
- props: ({
66
- status
67
- }) => status.disabled,
68
- style: {
69
- opacity: (theme.vars || theme).palette.action.disabledOpacity,
70
- backgroundColor: 'transparent'
71
- }
72
- }, {
73
- props: ({
74
- status
75
- }) => status.focused,
76
- style: {
77
- backgroundColor: (theme.vars || theme).palette.action.focus
78
- }
79
- }, {
80
- props: ({
81
- status
82
- }) => status.selected,
83
- style: {
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
- '&:hover': {
86
- 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),
87
- // Reset on touch devices, it doesn't add specificity
88
- '@media (hover: none)': {
89
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
90
- }
65
+ '&[data-disabled]': {
66
+ opacity: (theme.vars || theme).palette.action.disabledOpacity,
67
+ backgroundColor: 'transparent'
68
+ },
69
+ '&[data-focused]': {
70
+ backgroundColor: (theme.vars || theme).palette.action.focus
71
+ },
72
+ '&[data-selected]': {
73
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
74
+ '&:hover': {
75
+ 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),
76
+ // Reset on touch devices, it doesn't add specificity
77
+ '@media (hover: none)': {
78
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
91
79
  }
92
80
  }
93
- }, {
94
- props: ({
95
- status
96
- }) => status.selected && status.focused,
97
- style: {
98
- 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)
99
- }
100
- }]
81
+ },
82
+ '&[data-selected][data-focused]': {
83
+ 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)
84
+ }
101
85
  }));
102
86
  export const TreeItemLabel = styled('div', {
103
87
  name: 'MuiTreeItem',
@@ -183,19 +167,25 @@ export const TreeItemCheckbox = styled(/*#__PURE__*/React.forwardRef((props, ref
183
167
  })({
184
168
  padding: 0
185
169
  });
186
- const useUtilityClasses = ownerState => {
170
+ const useUtilityClasses = classesProp => {
187
171
  const {
188
- classes
189
- } = ownerState;
172
+ classes: classesFromTreeView
173
+ } = useTreeViewStyleContext();
174
+ const classes = _extends({}, classesProp, {
175
+ root: clsx(classesProp?.root, classesFromTreeView.root),
176
+ content: clsx(classesProp?.content, classesFromTreeView.itemContent),
177
+ iconContainer: clsx(classesProp?.iconContainer, classesFromTreeView.itemIconContainer),
178
+ checkbox: clsx(classesProp?.checkbox, classesFromTreeView.itemCheckbox),
179
+ label: clsx(classesProp?.label, classesFromTreeView.itemLabel),
180
+ groupTransition: clsx(classesProp?.groupTransition, classesFromTreeView.itemGroupTransition),
181
+ labelInput: clsx(classesProp?.labelInput, classesFromTreeView.itemLabelInput),
182
+ dragAndDropOverlay: clsx(classesProp?.dragAndDropOverlay, classesFromTreeView.itemDragAndDropOverlay),
183
+ errorIcon: clsx(classesProp?.errorIcon, classesFromTreeView.itemErrorIcon),
184
+ loadingIcon: clsx(classesProp?.loadingIcon, classesFromTreeView.itemLoadingIcon)
185
+ });
190
186
  const slots = {
191
187
  root: ['root'],
192
188
  content: ['content'],
193
- expanded: ['expanded'],
194
- editing: ['editing'],
195
- editable: ['editable'],
196
- selected: ['selected'],
197
- focused: ['focused'],
198
- disabled: ['disabled'],
199
189
  iconContainer: ['iconContainer'],
200
190
  checkbox: ['checkbox'],
201
191
  label: ['label'],
@@ -203,7 +193,13 @@ const useUtilityClasses = ownerState => {
203
193
  labelInput: ['labelInput'],
204
194
  dragAndDropOverlay: ['dragAndDropOverlay'],
205
195
  errorIcon: ['errorIcon'],
206
- loadingIcon: ['loadingIcon']
196
+ loadingIcon: ['loadingIcon'],
197
+ expanded: ['expanded'],
198
+ editing: ['editing'],
199
+ editable: ['editable'],
200
+ selected: ['selected'],
201
+ focused: ['focused'],
202
+ disabled: ['disabled']
207
203
  };
208
204
  return composeClasses(slots, getTreeItemUtilityClass, classes);
209
205
  };
@@ -229,7 +225,8 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
229
225
  disabled,
230
226
  children,
231
227
  slots = {},
232
- slotProps = {}
228
+ slotProps = {},
229
+ classes: classesProp
233
230
  } = props,
234
231
  other = _objectWithoutPropertiesLoose(props, _excluded2);
235
232
  const {
@@ -252,8 +249,7 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
252
249
  label,
253
250
  disabled
254
251
  });
255
- const ownerState = _extends({}, props, status);
256
- const classes = useUtilityClasses(ownerState);
252
+ const classes = useUtilityClasses(classesProp);
257
253
  const Root = slots.root ?? TreeItemRoot;
258
254
  const rootProps = useSlotProps({
259
255
  elementType: Root,
@@ -1,3 +1,4 @@
1
1
  export { TreeItem, TreeItemRoot, TreeItemContent, TreeItemIconContainer, TreeItemGroupTransition, TreeItemCheckbox, TreeItemLabel } from "./TreeItem.js";
2
2
  export type { TreeItemProps, TreeItemSlots, TreeItemSlotProps } from './TreeItem.types';
3
- export * from "./treeItemClasses.js";
3
+ export { getTreeItemUtilityClass, treeItemClasses } from "./treeItemClasses.js";
4
+ export type { TreeItemClassKey, TreeItemClasses } from './treeItemClasses';
@@ -1,2 +1,2 @@
1
1
  export { TreeItem, TreeItemRoot, TreeItemContent, TreeItemIconContainer, TreeItemGroupTransition, TreeItemCheckbox, TreeItemLabel } from "./TreeItem.js";
2
- export * from "./treeItemClasses.js";
2
+ export { getTreeItemUtilityClass, treeItemClasses } from "./treeItemClasses.js";
@@ -1,32 +1,54 @@
1
1
  export interface TreeItemClasses {
2
2
  /** Styles applied to the root element. */
3
3
  root: string;
4
- /** Styles applied to the transition component. */
5
- groupTransition: string;
6
4
  /** Styles applied to the content element. */
7
5
  content: string;
8
- /** State class applied to the content element when expanded. */
9
- expanded: string;
10
- /** State class applied to the content element when selected. */
11
- selected: string;
12
- /** State class applied to the content element when focused. */
13
- focused: string;
14
- /** State class applied to the element when disabled. */
15
- disabled: string;
16
- /** Styles applied to the Tree Item icon. */
6
+ /** Styles applied to the transition element. */
7
+ groupTransition: string;
8
+ /** Styles applied to the icon container element. */
17
9
  iconContainer: string;
18
10
  /** Styles applied to the label element. */
19
11
  label: string;
12
+ /** Styles applied to the label input element (visible only when editing is enabled). */
13
+ labelInput: string;
20
14
  /** Styles applied to the checkbox element. */
21
15
  checkbox: string;
22
- /** Styles applied to the input element that is visible when editing is enabled. */
23
- labelInput: string;
24
- /** Styles applied to the content element when editing is enabled. */
25
- editing: string;
26
- /** Styles applied to the content of the items that are editable. */
27
- editable: string;
28
- /** Styles applied to the drag and drop overlay. */
16
+ /** Styles applied to the drag and drop overlay element. */
29
17
  dragAndDropOverlay: string;
18
+ /** Styles applied to the error icon element */
19
+ errorIcon: string;
20
+ /** Styles applied to the loading icon element */
21
+ loadingIcon: string;
22
+ /**
23
+ * State class applied to the content element when the item is expanded.
24
+ * @deprecated Use the `data-expanded` attribute instead.
25
+ */
26
+ expanded: string;
27
+ /**
28
+ * State class applied to the content element when the item is selected.
29
+ * @deprecated Use the `data-selected` attribute instead.
30
+ */
31
+ selected: string;
32
+ /**
33
+ * State class applied to the content element when the item is focused.
34
+ * @deprecated Use the `data-focused` attribute instead.
35
+ */
36
+ focused: string;
37
+ /**
38
+ * State class applied to the content element when the item is disabled.
39
+ * @deprecated Use the `data-disabled` attribute instead.
40
+ */
41
+ disabled: string;
42
+ /**
43
+ * State class applied to the content element when the item is editable.
44
+ * @deprecated Use the `data-editable` attribute instead.
45
+ */
46
+ editable: string;
47
+ /**
48
+ * State class applied to the content element when the item is being edited.
49
+ * @deprecated Use the `data-editing` attribute instead.
50
+ */
51
+ editing: string;
30
52
  }
31
53
  export type TreeItemClassKey = keyof TreeItemClasses;
32
54
  export declare function getTreeItemUtilityClass(slot: string): string;
@@ -3,4 +3,6 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
3
  export function getTreeItemUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiTreeItem', slot);
5
5
  }
6
- export const treeItemClasses = generateUtilityClasses('MuiTreeItem', ['root', 'groupTransition', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label', 'checkbox', 'labelInput', 'editable', 'editing', 'dragAndDropOverlay']);
6
+ export const treeItemClasses = generateUtilityClasses('MuiTreeItem', ['root', 'content', 'groupTransition', 'iconContainer', 'label', 'checkbox', 'labelInput', 'dragAndDropOverlay', 'errorIcon', 'loadingIcon',
7
+ // State classes, will be replaced by data-attrs in the next major
8
+ 'expanded', 'selected', 'focused', 'disabled', 'editable', 'editing']);
@@ -12,13 +12,13 @@ const TreeItemLabelInput = styled('input', {
12
12
  theme
13
13
  }) => _extends({}, theme.typography.body1, {
14
14
  width: '100%',
15
- backgroundColor: theme.palette.background.paper,
15
+ backgroundColor: (theme.vars || theme).palette.background.paper,
16
16
  borderRadius: theme.shape.borderRadius,
17
17
  border: 'none',
18
18
  padding: '0 2px',
19
19
  boxSizing: 'border-box',
20
20
  '&:focus': {
21
- outline: `1px solid ${theme.palette.primary.main}`
21
+ outline: `1px solid ${(theme.vars || theme).palette.primary.main}`
22
22
  }
23
23
  }));
24
24
  export { TreeItemLabelInput };
@@ -7,7 +7,7 @@ import { useSelector } from "../../internals/hooks/useSelector.js";
7
7
  import { selectorIsItemExpandable, selectorIsItemExpanded } from "../../internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js";
8
8
  import { selectorIsItemFocused } from "../../internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js";
9
9
  import { selectorIsItemDisabled } from "../../internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js";
10
- import { selectorIsItemSelected } from "../../internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js";
10
+ import { selectorIsItemSelected, selectorIsMultiSelectEnabled } from "../../internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js";
11
11
  import { selectorGetTreeItemError, selectorIsItemLoading, selectorIsLazyLoadingEnabled } from "../../internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js";
12
12
  import { selectorIsItemBeingEdited, selectorIsItemEditable } from "../../internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js";
13
13
 
@@ -31,15 +31,12 @@ export const useTreeItemUtils = ({
31
31
  }) => {
32
32
  const {
33
33
  instance,
34
- label,
35
34
  store,
36
- selection: {
37
- multiSelect
38
- },
39
35
  publicAPI
40
36
  } = useTreeViewContext();
41
37
  const isItemExpandable = useSelector(store, selectorIsItemExpandable, itemId);
42
38
  const isLazyLoadingEnabled = useSelector(store, selectorIsLazyLoadingEnabled);
39
+ const isMultiSelectEnabled = useSelector(store, selectorIsMultiSelectEnabled);
43
40
  const loading = useSelector(store, state => isLazyLoadingEnabled ? selectorIsItemLoading(state, itemId) : false);
44
41
  const error = useSelector(store, state => isLazyLoadingEnabled ? Boolean(selectorGetTreeItemError(state, itemId)) : false);
45
42
  const isExpandable = itemHasChildren(children) || isItemExpandable;
@@ -47,11 +44,8 @@ export const useTreeItemUtils = ({
47
44
  const isFocused = useSelector(store, selectorIsItemFocused, itemId);
48
45
  const isSelected = useSelector(store, selectorIsItemSelected, itemId);
49
46
  const isDisabled = useSelector(store, selectorIsItemDisabled, itemId);
50
- const isEditing = useSelector(store, state => label == null ? false : selectorIsItemBeingEdited(state, itemId));
51
- const isEditable = useSelector(store, state => label == null ? false : selectorIsItemEditable(state, {
52
- itemId,
53
- isItemEditable: label.isItemEditable
54
- }));
47
+ const isEditing = useSelector(store, selectorIsItemBeingEdited, itemId);
48
+ const isEditable = useSelector(store, selectorIsItemEditable, itemId);
55
49
  const status = {
56
50
  expandable: isExpandable,
57
51
  expanded: isExpanded,
@@ -70,7 +64,7 @@ export const useTreeItemUtils = ({
70
64
  if (!status.focused) {
71
65
  instance.focusItem(event, itemId);
72
66
  }
73
- const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
67
+ const multiple = isMultiSelectEnabled && (event.shiftKey || event.ctrlKey || event.metaKey);
74
68
 
75
69
  // If already expanded and trying to toggle selection don't close
76
70
  if (status.expandable && !(multiple && selectorIsItemExpanded(store.value, itemId))) {
@@ -88,7 +82,7 @@ export const useTreeItemUtils = ({
88
82
  if (!status.focused) {
89
83
  instance.focusItem(event, itemId);
90
84
  }
91
- const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
85
+ const multiple = isMultiSelectEnabled && (event.shiftKey || event.ctrlKey || event.metaKey);
92
86
  if (multiple) {
93
87
  if (event.shiftKey) {
94
88
  instance.expandSelectionRange(event, itemId);
@@ -109,13 +103,13 @@ export const useTreeItemUtils = ({
109
103
  };
110
104
  const handleCheckboxSelection = event => {
111
105
  const hasShift = event.nativeEvent.shiftKey;
112
- if (multiSelect && hasShift) {
106
+ if (isMultiSelectEnabled && hasShift) {
113
107
  instance.expandSelectionRange(event, itemId);
114
108
  } else {
115
109
  instance.setItemSelection({
116
110
  event,
117
111
  itemId,
118
- keepExistingSelection: multiSelect,
112
+ keepExistingSelection: isMultiSelectEnabled,
119
113
  shouldBeSelected: event.target.checked
120
114
  });
121
115
  }
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v8.0.0-beta.0
2
+ * @mui/x-tree-view v8.0.0-beta.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { useTreeViewContext } from "./useTreeViewContext.js";
3
+ import { useTreeViewContext } from "./TreeViewContext.js";
4
4
  import { escapeOperandAttributeSelector } from "../utils/utils.js";
5
5
  import { selectorItemOrderedChildrenIds } from "../plugins/useTreeViewItems/useTreeViewItems.selectors.js";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -1,6 +1,8 @@
1
1
  import * as React from 'react';
2
+ import { TreeViewAnyPluginSignature } from "../models/index.js";
2
3
  import { TreeViewContextValue } from "./TreeViewProvider.types.js";
3
4
  /**
4
5
  * @ignore - internal component.
5
6
  */
6
- export declare const TreeViewContext: React.Context<TreeViewContextValue<any> | null>;
7
+ export declare const TreeViewContext: React.Context<TreeViewContextValue<any> | null>;
8
+ export declare const useTreeViewContext: <TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []>() => TreeViewContextValue<TSignatures, TOptionalSignatures>;
@@ -5,4 +5,11 @@ import * as React from 'react';
5
5
  export const TreeViewContext = /*#__PURE__*/React.createContext(null);
6
6
  if (process.env.NODE_ENV !== 'production') {
7
7
  TreeViewContext.displayName = 'TreeViewContext';
8
- }
8
+ }
9
+ export const useTreeViewContext = () => {
10
+ const context = React.useContext(TreeViewContext);
11
+ if (context == null) {
12
+ throw new Error(['MUI X: Could not find the Tree View context.', 'It looks like you rendered your component outside of a SimpleTreeView or RichTreeView parent component.', 'This can also happen if you are bundling multiple versions of the Tree View.'].join('\n'));
13
+ }
14
+ return context;
15
+ };
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { TreeViewProviderProps } from "./TreeViewProvider.types.js";
3
3
  import { TreeViewAnyPluginSignature } from "../models/index.js";
4
4
  /**
5
- * Sets up the contexts for the underlying TreeItem components.
5
+ * Sets up the contexts for the underlying Tree Item components.
6
6
  *
7
7
  * @ignore - do not document.
8
8
  */
@@ -1,20 +1,32 @@
1
1
  import * as React from 'react';
2
2
  import { TreeViewContext } from "./TreeViewContext.js";
3
+ import { TreeViewStyleContext } from "./TreeViewStyleContext.js";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
+ const EMPTY_OBJECT = {};
6
+
4
7
  /**
5
- * Sets up the contexts for the underlying TreeItem components.
8
+ * Sets up the contexts for the underlying Tree Item components.
6
9
  *
7
10
  * @ignore - do not document.
8
11
  */
9
12
  export function TreeViewProvider(props) {
10
13
  const {
11
- value,
14
+ contextValue,
15
+ classes = EMPTY_OBJECT,
12
16
  children
13
17
  } = props;
18
+
19
+ // TODO: Add the icons to this context and drop useTreeViewIcons
20
+ const styleContextValue = React.useMemo(() => ({
21
+ classes
22
+ }), [classes]);
14
23
  return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
15
- value: value,
16
- children: value.wrapRoot({
17
- children
24
+ value: contextValue,
25
+ children: /*#__PURE__*/_jsx(TreeViewStyleContext.Provider, {
26
+ value: styleContextValue,
27
+ children: contextValue.wrapRoot({
28
+ children
29
+ })
18
30
  })
19
31
  });
20
32
  }
@@ -3,6 +3,7 @@ import { MergeSignaturesProperty, TreeItemWrapper, TreeRootWrapper, TreeViewAnyP
3
3
  import { TreeViewStore } from "../utils/TreeViewStore.js";
4
4
  import { TreeViewCorePluginSignatures } from "../corePlugins/index.js";
5
5
  import type { TreeItemProps } from '../../TreeItem/TreeItem.types';
6
+ import { TreeViewClasses } from "./TreeViewStyleContext.js";
6
7
  export type TreeViewItemPluginsRunner = (props: TreeItemProps) => Required<TreeViewItemPluginResponse>;
7
8
  export type TreeViewContextValue<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'contextValue'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'contextValue'>> & {
8
9
  instance: TreeViewInstance<TSignatures, TOptionalSignatures>;
@@ -14,6 +15,7 @@ export type TreeViewContextValue<TSignatures extends readonly TreeViewAnyPluginS
14
15
  runItemPlugins: TreeViewItemPluginsRunner;
15
16
  };
16
17
  export interface TreeViewProviderProps<TSignatures extends readonly TreeViewAnyPluginSignature[]> {
17
- value: TreeViewContextValue<TSignatures>;
18
+ contextValue: TreeViewContextValue<TSignatures>;
18
19
  children: React.ReactNode;
20
+ classes: Partial<TreeViewClasses> | undefined;
19
21
  }
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+ export interface TreeViewClasses {
3
+ /** Styles applied to the root element. */
4
+ root: string;
5
+ /** Styles applied to the item's root element. */
6
+ item: string;
7
+ /** Styles applied to the item's content element. */
8
+ itemContent: string;
9
+ /** Styles applied to the item's transition element. */
10
+ itemGroupTransition: string;
11
+ /** Styles applied to the item's icon container element icon. */
12
+ itemIconContainer: string;
13
+ /** Styles applied to the item's label element. */
14
+ itemLabel: string;
15
+ /** Styles applied to the item's label input element (visible only when editing is enabled). */
16
+ itemLabelInput: string;
17
+ /** Styles applied to the item's checkbox element. */
18
+ itemCheckbox: string;
19
+ /** Styles applied to the item's drag and drop overlay element. */
20
+ itemDragAndDropOverlay: string;
21
+ /** Styles applied to the item's error icon element */
22
+ itemErrorIcon: string;
23
+ /** Styles applied to the item's loading icon element */
24
+ itemLoadingIcon: string;
25
+ }
26
+ export interface TreeViewStyleContextValue {
27
+ classes: Partial<TreeViewClasses>;
28
+ }
29
+ /**
30
+ * @ignore - internal component.
31
+ */
32
+ export declare const TreeViewStyleContext: React.Context<TreeViewStyleContextValue>;
33
+ export declare const useTreeViewStyleContext: () => TreeViewStyleContextValue;