@mui/x-tree-view 7.4.0 → 7.5.1

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 (65) hide show
  1. package/CHANGELOG.md +132 -5395
  2. package/RichTreeView/RichTreeView.js +7 -2
  3. package/SimpleTreeView/SimpleTreeView.js +7 -2
  4. package/TreeItem/TreeItem.js +8 -3
  5. package/TreeItem/TreeItemContent.d.ts +2 -0
  6. package/TreeItem/TreeItemContent.js +19 -2
  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/TreeItem2Icon/TreeItem2Icon.js +1 -1
  17. package/TreeItem2Provider/TreeItem2Provider.js +1 -1
  18. package/TreeView/TreeView.js +7 -2
  19. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +1 -0
  20. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +18 -3
  21. package/index.js +1 -1
  22. package/internals/models/plugin.d.ts +0 -6
  23. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +1 -0
  24. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  25. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  26. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +16 -4
  27. package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
  28. package/internals/useTreeView/useTreeViewModels.js +1 -1
  29. package/modern/RichTreeView/RichTreeView.js +7 -2
  30. package/modern/SimpleTreeView/SimpleTreeView.js +7 -2
  31. package/modern/TreeItem/TreeItem.js +8 -3
  32. package/modern/TreeItem/TreeItemContent.js +19 -2
  33. package/modern/TreeItem/treeItemClasses.js +1 -1
  34. package/modern/TreeItem/useTreeItemState.js +18 -2
  35. package/modern/TreeItem2/TreeItem2.js +34 -4
  36. package/modern/TreeItem2/index.js +1 -1
  37. package/modern/TreeItem2Icon/TreeItem2Icon.js +1 -1
  38. package/modern/TreeItem2Provider/TreeItem2Provider.js +1 -1
  39. package/modern/TreeView/TreeView.js +7 -2
  40. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +18 -3
  41. package/modern/index.js +1 -1
  42. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  43. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  44. package/modern/internals/useTreeView/useTreeViewModels.js +1 -1
  45. package/modern/useTreeItem2/useTreeItem2.js +32 -3
  46. package/node/RichTreeView/RichTreeView.js +7 -2
  47. package/node/SimpleTreeView/SimpleTreeView.js +7 -2
  48. package/node/TreeItem/TreeItem.js +8 -3
  49. package/node/TreeItem/TreeItemContent.js +19 -2
  50. package/node/TreeItem/treeItemClasses.js +1 -1
  51. package/node/TreeItem/useTreeItemState.js +18 -2
  52. package/node/TreeItem2/TreeItem2.js +35 -5
  53. package/node/TreeItem2/index.js +6 -0
  54. package/node/TreeItem2Icon/TreeItem2Icon.js +1 -1
  55. package/node/TreeItem2Provider/TreeItem2Provider.js +1 -1
  56. package/node/TreeView/TreeView.js +7 -2
  57. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +18 -3
  58. package/node/index.js +1 -1
  59. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +3 -3
  60. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +18 -6
  61. package/node/internals/useTreeView/useTreeViewModels.js +1 -1
  62. package/node/useTreeItem2/useTreeItem2.js +34 -3
  63. package/package.json +2 -2
  64. package/useTreeItem2/useTreeItem2.js +32 -3
  65. package/useTreeItem2/useTreeItem2.types.d.ts +15 -0
@@ -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;
@@ -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, {
@@ -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