@mui/x-tree-view 7.3.1 → 7.5.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 (54) hide show
  1. package/CHANGELOG.md +234 -5
  2. package/RichTreeView/RichTreeView.js +6 -1
  3. package/SimpleTreeView/SimpleTreeView.js +6 -1
  4. package/TreeItem/TreeItem.js +7 -2
  5. package/TreeItem/TreeItemContent.d.ts +2 -0
  6. package/TreeItem/TreeItemContent.js +18 -1
  7. package/TreeItem/treeItemClasses.d.ts +2 -0
  8. package/TreeItem/treeItemClasses.js +1 -1
  9. package/TreeItem/useTreeItemState.d.ts +4 -1
  10. package/TreeItem/useTreeItemState.js +18 -2
  11. package/TreeItem2/TreeItem2.d.ts +4 -0
  12. package/TreeItem2/TreeItem2.js +34 -4
  13. package/TreeItem2/TreeItem2.types.d.ts +6 -0
  14. package/TreeItem2/index.d.ts +1 -1
  15. package/TreeItem2/index.js +1 -1
  16. package/TreeView/TreeView.js +6 -1
  17. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +1 -0
  18. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +11 -2
  19. package/index.js +1 -1
  20. package/internals/models/plugin.d.ts +0 -6
  21. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  22. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  23. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +16 -4
  24. package/modern/RichTreeView/RichTreeView.js +6 -1
  25. package/modern/SimpleTreeView/SimpleTreeView.js +6 -1
  26. package/modern/TreeItem/TreeItem.js +7 -2
  27. package/modern/TreeItem/TreeItemContent.js +18 -1
  28. package/modern/TreeItem/treeItemClasses.js +1 -1
  29. package/modern/TreeItem/useTreeItemState.js +18 -2
  30. package/modern/TreeItem2/TreeItem2.js +34 -4
  31. package/modern/TreeItem2/index.js +1 -1
  32. package/modern/TreeView/TreeView.js +6 -1
  33. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +11 -2
  34. package/modern/index.js +1 -1
  35. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  36. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  37. package/modern/useTreeItem2/useTreeItem2.js +35 -6
  38. package/node/RichTreeView/RichTreeView.js +6 -1
  39. package/node/SimpleTreeView/SimpleTreeView.js +6 -1
  40. package/node/TreeItem/TreeItem.js +7 -2
  41. package/node/TreeItem/TreeItemContent.js +18 -1
  42. package/node/TreeItem/treeItemClasses.js +1 -1
  43. package/node/TreeItem/useTreeItemState.js +18 -2
  44. package/node/TreeItem2/TreeItem2.js +35 -5
  45. package/node/TreeItem2/index.js +6 -0
  46. package/node/TreeView/TreeView.js +6 -1
  47. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +11 -2
  48. package/node/index.js +1 -1
  49. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  50. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  51. package/node/useTreeItem2/useTreeItem2.js +37 -6
  52. package/package.json +3 -3
  53. package/useTreeItem2/useTreeItem2.js +35 -6
  54. package/useTreeItem2/useTreeItem2.types.d.ts +15 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.3.1",
3
+ "version": "7.5.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,12 +33,12 @@
33
33
  "directory": "packages/x-tree-view"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.24.0",
36
+ "@babel/runtime": "^7.24.5",
37
37
  "@mui/base": "^5.0.0-beta.40",
38
38
  "@mui/system": "^5.15.14",
39
39
  "@mui/utils": "^5.15.14",
40
40
  "@types/react-transition-group": "^4.4.10",
41
- "clsx": "^2.1.0",
41
+ "clsx": "^2.1.1",
42
42
  "prop-types": "^15.8.1",
43
43
  "react-transition-group": "^4.4.5"
44
44
  },
@@ -1,4 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
2
3
  import { extractEventHandlers } from '@mui/base/utils';
3
4
  import useForkRef from '@mui/utils/useForkRef';
4
5
  import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
@@ -7,7 +8,9 @@ export const useTreeItem2 = parameters => {
7
8
  const {
8
9
  runItemPlugins,
9
10
  selection: {
10
- multiSelect
11
+ multiSelect,
12
+ disableSelection,
13
+ checkboxSelection
11
14
  },
12
15
  disabledItemsFocusable,
13
16
  instance,
@@ -33,6 +36,7 @@ export const useTreeItem2 = parameters => {
33
36
  });
34
37
  const idAttribute = instance.getTreeItemIdAttribute(itemId, id);
35
38
  const handleRootRef = useForkRef(rootRef, pluginRootRef);
39
+ const checkboxRef = React.useRef(null);
36
40
  const createRootHandleFocus = otherHandlers => event => {
37
41
  otherHandlers.onFocus?.(event);
38
42
  if (event.defaultMuiPrevented) {
@@ -59,11 +63,13 @@ export const useTreeItem2 = parameters => {
59
63
  };
60
64
  const createContentHandleClick = otherHandlers => event => {
61
65
  otherHandlers.onClick?.(event);
62
- if (event.defaultMuiPrevented) {
66
+ if (event.defaultMuiPrevented || checkboxRef.current?.contains(event.target)) {
63
67
  return;
64
68
  }
65
69
  interactions.handleExpansion(event);
66
- interactions.handleSelection(event);
70
+ if (!checkboxSelection) {
71
+ interactions.handleSelection(event);
72
+ }
67
73
  };
68
74
  const createContentHandleMouseDown = otherHandlers => event => {
69
75
  otherHandlers.onMouseDown?.(event);
@@ -76,6 +82,16 @@ export const useTreeItem2 = parameters => {
76
82
  event.preventDefault();
77
83
  }
78
84
  };
85
+ const createCheckboxHandleChange = otherHandlers => event => {
86
+ otherHandlers.onChange?.(event);
87
+ if (event.defaultMuiPrevented) {
88
+ return;
89
+ }
90
+ if (disableSelection || status.disabled) {
91
+ return;
92
+ }
93
+ interactions.handleCheckboxSelection(event);
94
+ };
79
95
  const getRootProps = (externalProps = {}) => {
80
96
  const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
81
97
  let ariaSelected;
@@ -105,7 +121,7 @@ export const useTreeItem2 = parameters => {
105
121
  });
106
122
  };
107
123
  const getContentProps = (externalProps = {}) => {
108
- const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
124
+ const externalEventHandlers = extractEventHandlers(externalProps);
109
125
  return _extends({}, externalEventHandlers, externalProps, {
110
126
  ref: contentRef,
111
127
  onClick: createContentHandleClick(externalEventHandlers),
@@ -113,6 +129,18 @@ export const useTreeItem2 = parameters => {
113
129
  status
114
130
  });
115
131
  };
132
+ const getCheckboxProps = (externalProps = {}) => {
133
+ const externalEventHandlers = extractEventHandlers(externalProps);
134
+ return _extends({}, externalEventHandlers, {
135
+ visible: checkboxSelection,
136
+ ref: checkboxRef,
137
+ checked: status.selected,
138
+ disabled: disableSelection || status.disabled,
139
+ tabIndex: -1
140
+ }, externalProps, {
141
+ onChange: createCheckboxHandleChange(externalEventHandlers)
142
+ });
143
+ };
116
144
  const getLabelProps = (externalProps = {}) => {
117
145
  const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
118
146
  return _extends({}, externalEventHandlers, {
@@ -120,11 +148,11 @@ export const useTreeItem2 = parameters => {
120
148
  }, externalProps);
121
149
  };
122
150
  const getIconContainerProps = (externalProps = {}) => {
123
- const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
151
+ const externalEventHandlers = extractEventHandlers(externalProps);
124
152
  return _extends({}, externalEventHandlers, externalProps);
125
153
  };
126
154
  const getGroupTransitionProps = (externalProps = {}) => {
127
- const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
155
+ const externalEventHandlers = extractEventHandlers(externalProps);
128
156
  return _extends({}, externalEventHandlers, {
129
157
  unmountOnExit: true,
130
158
  component: 'ul',
@@ -138,6 +166,7 @@ export const useTreeItem2 = parameters => {
138
166
  getContentProps,
139
167
  getGroupTransitionProps,
140
168
  getIconContainerProps,
169
+ getCheckboxProps,
141
170
  getLabelProps,
142
171
  rootRef: handleRootRef,
143
172
  status,
@@ -54,6 +54,15 @@ export interface UseTreeItem2LabelSlotOwnProps {
54
54
  children: React.ReactNode;
55
55
  }
56
56
  export type UseTreeItem2LabelSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2LabelSlotOwnProps;
57
+ export interface UseTreeItem2CheckboxSlotOwnProps {
58
+ visible: boolean;
59
+ checked: boolean;
60
+ onChange: React.ChangeEventHandler<HTMLInputElement>;
61
+ disabled: boolean;
62
+ ref: React.RefObject<HTMLButtonElement>;
63
+ tabIndex: -1;
64
+ }
65
+ export type UseTreeItem2CheckboxSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2CheckboxSlotOwnProps;
57
66
  export interface UseTreeItem2GroupTransitionSlotOwnProps {
58
67
  unmountOnExit: boolean;
59
68
  in: boolean;
@@ -88,6 +97,12 @@ export interface UseTreeItem2ReturnValue<TPlugins extends readonly TreeViewAnyPl
88
97
  * @returns {UseTreeItem2LabelSlotProps<ExternalProps>} Props that should be spread on the label slot
89
98
  */
90
99
  getLabelProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2LabelSlotProps<ExternalProps>;
100
+ /**
101
+ * Resolver for the checkbox slot's props.
102
+ * @param {ExternalProps} externalProps Additional props for the checkbox slot
103
+ * @returns {UseTreeItem2CheckboxSlotProps<ExternalProps>} Props that should be spread on the checkbox slot
104
+ */
105
+ getCheckboxProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2CheckboxSlotProps<ExternalProps>;
91
106
  /**
92
107
  * Resolver for the iconContainer slot's props.
93
108
  * @param {ExternalProps} externalProps Additional props for the iconContainer slot