@mui/x-tree-view 7.18.0 → 7.20.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 (81) hide show
  1. package/CHANGELOG.md +213 -11
  2. package/RichTreeView/RichTreeView.js +6 -45
  3. package/RichTreeView/RichTreeView.plugins.d.ts +1 -1
  4. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +1 -1
  5. package/TreeItem/TreeItem.js +19 -1
  6. package/TreeItem/TreeItem.types.d.ts +2 -0
  7. package/TreeItem/TreeItemContent.js +25 -29
  8. package/TreeItem2/TreeItem2.d.ts +6 -6
  9. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +24 -6
  10. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -8
  11. package/index.js +1 -1
  12. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
  13. package/internals/TreeViewProvider/TreeViewProvider.js +2 -1
  14. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +2 -1
  15. package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
  16. package/internals/components/RichTreeViewItems.d.ts +35 -0
  17. package/internals/components/RichTreeViewItems.js +56 -0
  18. package/internals/corePlugins/corePlugins.d.ts +1 -1
  19. package/internals/corePlugins/useTreeViewId/useTreeViewId.js +28 -7
  20. package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +11 -13
  21. package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +17 -0
  22. package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +26 -0
  23. package/internals/index.d.ts +1 -0
  24. package/internals/index.js +1 -0
  25. package/internals/models/plugin.d.ts +4 -1
  26. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
  27. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
  28. package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
  29. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
  30. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +6 -6
  31. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
  32. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
  33. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
  34. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +3 -2
  35. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
  36. package/internals/useTreeView/extractPluginParamsFromProps.d.ts +1 -1
  37. package/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
  38. package/modern/RichTreeView/RichTreeView.js +6 -45
  39. package/modern/TreeItem/TreeItem.js +19 -1
  40. package/modern/TreeItem/TreeItemContent.js +25 -29
  41. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -8
  42. package/modern/index.js +1 -1
  43. package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
  44. package/modern/internals/TreeViewProvider/TreeViewProvider.js +2 -1
  45. package/modern/internals/components/RichTreeViewItems.js +56 -0
  46. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +28 -7
  47. package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +26 -0
  48. package/modern/internals/index.js +1 -0
  49. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
  50. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
  51. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
  52. package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
  53. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
  54. package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
  55. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
  56. package/modern/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
  57. package/modern/useTreeItem2/useTreeItem2.js +7 -1
  58. package/node/RichTreeView/RichTreeView.js +6 -45
  59. package/node/TreeItem/TreeItem.js +19 -1
  60. package/node/TreeItem/TreeItemContent.js +25 -29
  61. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +10 -9
  62. package/node/index.js +1 -1
  63. package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +7 -1
  64. package/node/internals/TreeViewProvider/TreeViewProvider.js +2 -1
  65. package/node/internals/components/RichTreeViewItems.js +64 -0
  66. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +29 -8
  67. package/node/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +34 -0
  68. package/node/internals/index.js +7 -0
  69. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +3 -1
  70. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
  71. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +9 -2
  72. package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +11 -5
  73. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +6 -0
  74. package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +16 -8
  75. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +3 -1
  76. package/node/internals/useTreeView/extractPluginParamsFromProps.js +7 -3
  77. package/node/useTreeItem2/useTreeItem2.js +7 -1
  78. package/package.json +4 -4
  79. package/useTreeItem2/index.d.ts +3 -3
  80. package/useTreeItem2/useTreeItem2.js +7 -1
  81. package/useTreeItem2/useTreeItem2.types.d.ts +1 -1
@@ -14,14 +14,8 @@ const useTreeViewLabel = ({
14
14
  instance,
15
15
  state,
16
16
  setState,
17
- params,
18
- experimentalFeatures
17
+ params
19
18
  }) => {
20
- if (process.env.NODE_ENV !== 'production') {
21
- if (params.isItemEditable && !experimentalFeatures?.labelEditing) {
22
- (0, _warning.warnOnce)(['MUI X: The label editing feature requires the `labelEditing` experimental feature to be enabled.', 'You can do it by passing `experimentalFeatures={{ labelEditing: true}}` to the `RichTreeViewPro` component.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/editing/']);
23
- }
24
- }
25
19
  const editedItemRef = React.useRef(state.editedItemId);
26
20
  const isItemBeingEditedRef = itemId => editedItemRef.current === itemId;
27
21
  const setEditedItemId = editedItemId => {
@@ -31,7 +25,7 @@ const useTreeViewLabel = ({
31
25
  editedItemRef.current = editedItemId;
32
26
  };
33
27
  const isItemBeingEdited = itemId => itemId === state.editedItemId;
34
- const isTreeViewEditable = Boolean(params.isItemEditable) && !!experimentalFeatures.labelEditing;
28
+ const isTreeViewEditable = Boolean(params.isItemEditable);
35
29
  const isItemEditable = itemId => {
36
30
  if (itemId == null || !isTreeViewEditable) {
37
31
  return false;
@@ -81,6 +75,20 @@ const useTreeViewLabel = ({
81
75
  };
82
76
  exports.useTreeViewLabel = useTreeViewLabel;
83
77
  useTreeViewLabel.itemPlugin = _useTreeViewLabel.useTreeViewLabelItemPlugin;
78
+ useTreeViewLabel.getDefaultizedParams = ({
79
+ params,
80
+ experimentalFeatures
81
+ }) => {
82
+ const canUseFeature = experimentalFeatures?.labelEditing;
83
+ if (process.env.NODE_ENV !== 'production') {
84
+ if (params.isItemEditable && !canUseFeature) {
85
+ (0, _warning.warnOnce)(['MUI X: The label editing feature requires the `labelEditing` experimental feature to be enabled.', 'You can do it by passing `experimentalFeatures={{ labelEditing: true}}` to the `RichTreeViewPro` component.', 'Check the documentation for more details: https://mui.com/x/react-tree-view/rich-tree-view/editing/']);
86
+ }
87
+ }
88
+ return (0, _extends2.default)({}, params, {
89
+ isItemEditable: canUseFeature ? params.isItemEditable ?? false : false
90
+ });
91
+ };
84
92
  useTreeViewLabel.getInitialState = () => ({
85
93
  editedItemId: null
86
94
  });
@@ -183,7 +183,9 @@ useTreeViewSelection.models = {
183
183
  }
184
184
  };
185
185
  const DEFAULT_SELECTED_ITEMS = [];
186
- useTreeViewSelection.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
186
+ useTreeViewSelection.getDefaultizedParams = ({
187
+ params
188
+ }) => (0, _extends2.default)({}, params, {
187
189
  disableSelection: params.disableSelection ?? false,
188
190
  multiSelect: params.multiSelect ?? false,
189
191
  checkboxSelection: params.checkboxSelection ?? false,
@@ -13,7 +13,7 @@ const extractPluginParamsFromProps = _ref => {
13
13
  slots,
14
14
  slotProps,
15
15
  apiRef,
16
- experimentalFeatures
16
+ experimentalFeatures: inExperimentalFeatures
17
17
  },
18
18
  plugins
19
19
  } = _ref,
@@ -32,9 +32,13 @@ const extractPluginParamsFromProps = _ref => {
32
32
  forwardedProps[propName] = prop;
33
33
  }
34
34
  });
35
+ const experimentalFeatures = inExperimentalFeatures ?? {};
35
36
  const defaultizedPluginParams = plugins.reduce((acc, plugin) => {
36
37
  if (plugin.getDefaultizedParams) {
37
- return plugin.getDefaultizedParams(acc);
38
+ return plugin.getDefaultizedParams({
39
+ params: acc,
40
+ experimentalFeatures
41
+ });
38
42
  }
39
43
  return acc;
40
44
  }, pluginParams);
@@ -44,7 +48,7 @@ const extractPluginParamsFromProps = _ref => {
44
48
  pluginParams: defaultizedPluginParams,
45
49
  slots: slots ?? {},
46
50
  slotProps: slotProps ?? {},
47
- experimentalFeatures: experimentalFeatures ?? {}
51
+ experimentalFeatures
48
52
  };
49
53
  };
50
54
  exports.extractPluginParamsFromProps = extractPluginParamsFromProps;
@@ -14,6 +14,7 @@ var _TreeViewProvider = require("../internals/TreeViewProvider");
14
14
  var _useTreeItem2Utils = require("../hooks/useTreeItem2Utils");
15
15
  var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
16
16
  var _tree = require("../internals/utils/tree");
17
+ var _useTreeViewId = require("../internals/corePlugins/useTreeViewId/useTreeViewId.utils");
17
18
  const useTreeItem2 = parameters => {
18
19
  const {
19
20
  runItemPlugins,
@@ -30,6 +31,7 @@ const useTreeItem2 = parameters => {
30
31
  expansion: {
31
32
  expansionTrigger
32
33
  },
34
+ treeId,
33
35
  instance,
34
36
  publicAPI
35
37
  } = (0, _TreeViewProvider.useTreeViewContext)();
@@ -55,10 +57,14 @@ const useTreeItem2 = parameters => {
55
57
  });
56
58
  const rootRefObject = React.useRef(null);
57
59
  const contentRefObject = React.useRef(null);
58
- const idAttribute = instance.getTreeItemIdAttribute(itemId, id);
59
60
  const handleRootRef = (0, _useForkRef.default)(rootRef, pluginRootRef, rootRefObject);
60
61
  const handleContentRef = (0, _useForkRef.default)(contentRef, contentRefObject);
61
62
  const checkboxRef = React.useRef(null);
63
+ const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
64
+ itemId,
65
+ treeId,
66
+ id
67
+ });
62
68
  const rootTabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
63
69
  const sharedPropsEnhancerParams = {
64
70
  rootRefObject,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.18.0",
3
+ "version": "7.20.0",
4
4
  "description": "The community edition of the Tree View components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,13 +33,13 @@
33
33
  "directory": "packages/x-tree-view"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.25.6",
37
- "@mui/utils": "^5.16.6",
36
+ "@babel/runtime": "^7.25.7",
37
+ "@mui/utils": "^5.16.6 || ^6.0.0",
38
38
  "@types/react-transition-group": "^4.4.11",
39
39
  "clsx": "^2.1.1",
40
40
  "prop-types": "^15.8.1",
41
41
  "react-transition-group": "^4.4.5",
42
- "@mui/x-internals": "7.18.0"
42
+ "@mui/x-internals": "7.20.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",
@@ -1,3 +1,3 @@
1
- export declare const useTreeItem2: <TSignatures extends import("./useTreeItem2.types").UseTreeItem2MinimalPlugins = import("./useTreeItem2.types").UseTreeItem2MinimalPlugins, TOptionalSignatures extends import("./useTreeItem2.types").UseTreeItem2OptionalPlugins = readonly []>(parameters: import("./useTreeItem2.types").UseTreeItem2Parameters) => import("./useTreeItem2.types").UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
2
- export declare const unstable_useTreeItem2: <TSignatures extends import("./useTreeItem2.types").UseTreeItem2MinimalPlugins = import("./useTreeItem2.types").UseTreeItem2MinimalPlugins, TOptionalSignatures extends import("./useTreeItem2.types").UseTreeItem2OptionalPlugins = readonly []>(parameters: import("./useTreeItem2.types").UseTreeItem2Parameters) => import("./useTreeItem2.types").UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
3
- export type { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2Status, UseTreeItem2RootSlotOwnProps, UseTreeItem2ContentSlotOwnProps, UseTreeItem2LabelInputSlotOwnProps, UseTreeItem2LabelSlotOwnProps, UseTreeItem2IconContainerSlotOwnProps, UseTreeItem2GroupTransitionSlotOwnProps, UseTreeItem2DragAndDropOverlaySlotOwnProps, } from './useTreeItem2.types';
1
+ export declare const useTreeItem2: <TSignatures extends import("./useTreeItem2.types").UseTreeItem2MinimalPlugins = import("./useTreeItem2.types").UseTreeItem2MinimalPlugins, TOptionalSignatures extends import("./useTreeItem2.types").UseTreeItem2OptionalPlugins = readonly []>(parameters: import("@mui/x-tree-view/useTreeItem2").UseTreeItem2Parameters) => import("@mui/x-tree-view/useTreeItem2").UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
2
+ export declare const unstable_useTreeItem2: <TSignatures extends import("./useTreeItem2.types").UseTreeItem2MinimalPlugins = import("./useTreeItem2.types").UseTreeItem2MinimalPlugins, TOptionalSignatures extends import("./useTreeItem2.types").UseTreeItem2OptionalPlugins = readonly []>(parameters: import("@mui/x-tree-view/useTreeItem2").UseTreeItem2Parameters) => import("@mui/x-tree-view/useTreeItem2").UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
3
+ export type { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2Status, UseTreeItem2RootSlotOwnProps, UseTreeItem2ContentSlotOwnProps, UseTreeItem2LabelInputSlotOwnProps, UseTreeItem2LabelSlotOwnProps, UseTreeItem2CheckboxSlotOwnProps, UseTreeItem2IconContainerSlotOwnProps, UseTreeItem2GroupTransitionSlotOwnProps, UseTreeItem2DragAndDropOverlaySlotOwnProps, } from './useTreeItem2.types';
@@ -6,6 +6,7 @@ import { useTreeViewContext } from "../internals/TreeViewProvider/index.js";
6
6
  import { useTreeItem2Utils } from "../hooks/useTreeItem2Utils/index.js";
7
7
  import { TreeViewItemDepthContext } from "../internals/TreeViewItemDepthContext/index.js";
8
8
  import { isTargetInDescendants } from "../internals/utils/tree.js";
9
+ import { generateTreeItemIdAttribute } from "../internals/corePlugins/useTreeViewId/useTreeViewId.utils.js";
9
10
  export const useTreeItem2 = parameters => {
10
11
  const {
11
12
  runItemPlugins,
@@ -22,6 +23,7 @@ export const useTreeItem2 = parameters => {
22
23
  expansion: {
23
24
  expansionTrigger
24
25
  },
26
+ treeId,
25
27
  instance,
26
28
  publicAPI
27
29
  } = useTreeViewContext();
@@ -47,10 +49,14 @@ export const useTreeItem2 = parameters => {
47
49
  });
48
50
  const rootRefObject = React.useRef(null);
49
51
  const contentRefObject = React.useRef(null);
50
- const idAttribute = instance.getTreeItemIdAttribute(itemId, id);
51
52
  const handleRootRef = useForkRef(rootRef, pluginRootRef, rootRefObject);
52
53
  const handleContentRef = useForkRef(contentRef, contentRefObject);
53
54
  const checkboxRef = React.useRef(null);
55
+ const idAttribute = generateTreeItemIdAttribute({
56
+ itemId,
57
+ treeId,
58
+ id
59
+ });
54
60
  const rootTabIndex = instance.canItemBeTabbed(itemId) ? 0 : -1;
55
61
  const sharedPropsEnhancerParams = {
56
62
  rootRefObject,
@@ -83,7 +83,7 @@ export type UseTreeItem2LabelInputSlotProps<ExternalProps = {}> = ExternalProps
83
83
  export interface UseTreeItem2CheckboxSlotOwnProps {
84
84
  visible: boolean;
85
85
  checked: boolean;
86
- onChange: React.ChangeEventHandler<HTMLInputElement>;
86
+ onChange: MuiCancellableEventHandler<React.ChangeEvent<HTMLInputElement>>;
87
87
  disabled: boolean;
88
88
  ref: React.RefObject<HTMLButtonElement>;
89
89
  tabIndex: -1;