@mui/x-tree-view 8.11.3 → 8.13.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 (76) hide show
  1. package/CHANGELOG.md +296 -6
  2. package/RichTreeView/RichTreeView.js +5 -5
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -3
  4. package/RichTreeView/index.d.ts +1 -1
  5. package/SimpleTreeView/SimpleTreeView.types.d.ts +2 -3
  6. package/SimpleTreeView/index.d.ts +1 -1
  7. package/TreeItemIcon/TreeItemIcon.js +12 -3
  8. package/TreeItemIcon/TreeItemIcon.types.d.ts +4 -4
  9. package/esm/RichTreeView/RichTreeView.js +5 -5
  10. package/esm/RichTreeView/RichTreeView.types.d.ts +2 -3
  11. package/esm/RichTreeView/index.d.ts +1 -1
  12. package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +2 -3
  13. package/esm/SimpleTreeView/index.d.ts +1 -1
  14. package/esm/TreeItemIcon/TreeItemIcon.js +12 -3
  15. package/esm/TreeItemIcon/TreeItemIcon.types.d.ts +4 -4
  16. package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +2 -2
  17. package/esm/index.js +1 -1
  18. package/esm/internals/TreeViewProvider/TreeViewStyleContext.d.ts +3 -3
  19. package/esm/internals/index.d.ts +2 -2
  20. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +5 -5
  21. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -1
  22. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -2
  23. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +79 -158
  24. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -8
  25. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +0 -8
  26. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +12 -26
  27. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +36 -2
  28. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +115 -1
  29. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +6 -6
  30. package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +1 -1
  31. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +2 -2
  32. package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +1 -1
  33. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +6 -2
  34. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +7 -2
  35. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +8 -9
  36. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +12 -3
  37. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +2 -2
  38. package/esm/internals/useTreeView/useTreeView.js +2 -2
  39. package/esm/useTreeItem/useTreeItem.js +3 -3
  40. package/hooks/useApplyPropagationToSelectedItemsOnMount.js +2 -3
  41. package/index.js +1 -1
  42. package/internals/TreeViewProvider/TreeViewStyleContext.d.ts +3 -3
  43. package/internals/index.d.ts +2 -2
  44. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +9 -9
  45. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +4 -4
  46. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -2
  47. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +80 -159
  48. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -8
  49. package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +0 -8
  50. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +12 -26
  51. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +36 -2
  52. package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.js +119 -2
  53. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +8 -8
  54. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +2 -3
  55. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +2 -2
  56. package/internals/plugins/useTreeViewLazyLoading/index.d.ts +1 -1
  57. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +6 -2
  58. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +7 -2
  59. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +8 -9
  60. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +12 -3
  61. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +2 -2
  62. package/internals/useTreeView/useTreeView.js +2 -2
  63. package/package.json +3 -3
  64. package/useTreeItem/useTreeItem.js +3 -3
  65. package/esm/internals/hooks/useLazyRef.d.ts +0 -1
  66. package/esm/internals/hooks/useLazyRef.js +0 -1
  67. package/esm/internals/hooks/useOnMount.d.ts +0 -1
  68. package/esm/internals/hooks/useOnMount.js +0 -1
  69. package/esm/internals/hooks/useTimeout.d.ts +0 -1
  70. package/esm/internals/hooks/useTimeout.js +0 -1
  71. package/internals/hooks/useLazyRef.d.ts +0 -1
  72. package/internals/hooks/useLazyRef.js +0 -13
  73. package/internals/hooks/useOnMount.d.ts +0 -1
  74. package/internals/hooks/useOnMount.js +0 -13
  75. package/internals/hooks/useTimeout.d.ts +0 -1
  76. package/internals/hooks/useTimeout.js +0 -13
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.useTreeViewLabel = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
9
+ var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
10
10
  var _useTreeViewLabel = require("./useTreeViewLabel.itemPlugin");
11
11
  var _useTreeViewLabel2 = require("./useTreeViewLabel.selectors");
12
12
  const useTreeViewLabel = ({
@@ -43,7 +43,7 @@ const useTreeViewLabel = ({
43
43
  params.onItemLabelChange(itemId, label);
44
44
  }
45
45
  };
46
- (0, _useEnhancedEffect.default)(() => {
46
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
47
47
  store.set('label', (0, _extends2.default)({}, store.state.items, {
48
48
  isItemEditable: params.isItemEditable
49
49
  }));
@@ -1,2 +1,2 @@
1
- export type { UseTreeViewLazyLoadingSignature, UseTreeViewLazyLoadingParameters, UseTreeViewLazyLoadingInstance } from "./useTreeViewLazyLoading.types.js";
1
+ export type { UseTreeViewLazyLoadingSignature, UseTreeViewLazyLoadingParameters, UseTreeViewLazyLoadingInstance, DataSource } from "./useTreeViewLazyLoading.types.js";
2
2
  export { lazyLoadingSelectors } from "./useTreeViewLazyLoading.selectors.js";
@@ -12,9 +12,13 @@ export declare const lazyLoadingSelectors: {
12
12
  /**
13
13
  * Checks whether an item is loading.
14
14
  */
15
- isItemLoading: (state: TreeViewState<[], [UseTreeViewLazyLoadingSignature]>, itemId: string) => boolean;
15
+ isItemLoading: (state: TreeViewState<[], [UseTreeViewLazyLoadingSignature]>, itemId: string | null) => boolean;
16
16
  /**
17
17
  * Checks whether an item has errors.
18
18
  */
19
- itemHasError: (state: TreeViewState<[], [UseTreeViewLazyLoadingSignature]>, itemId: string) => boolean;
19
+ itemHasError: (state: TreeViewState<[], [UseTreeViewLazyLoadingSignature]>, itemId: string | null) => boolean;
20
+ /**
21
+ * Get an item error.
22
+ */
23
+ itemError: (state: TreeViewState<[], [UseTreeViewLazyLoadingSignature]>, itemId: string | null) => Error | null | undefined;
20
24
  };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.lazyLoadingSelectors = void 0;
7
7
  var _store = require("@mui/x-internals/store");
8
+ var _useTreeViewItems = require("../useTreeViewItems");
8
9
  const lazyLoadingSelectors = exports.lazyLoadingSelectors = {
9
10
  /**
10
11
  * Gets the data source used to lazy load items.
@@ -13,9 +14,13 @@ const lazyLoadingSelectors = exports.lazyLoadingSelectors = {
13
14
  /**
14
15
  * Checks whether an item is loading.
15
16
  */
16
- isItemLoading: (0, _store.createSelector)((state, itemId) => state.lazyLoading?.dataSource.loading[itemId] ?? false),
17
+ isItemLoading: (0, _store.createSelector)((state, itemId) => state.lazyLoading?.dataSource.loading[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID] ?? false),
17
18
  /**
18
19
  * Checks whether an item has errors.
19
20
  */
20
- itemHasError: (0, _store.createSelector)((state, itemId) => !!state.lazyLoading?.dataSource.errors[itemId])
21
+ itemHasError: (0, _store.createSelector)((state, itemId) => !!state.lazyLoading?.dataSource.errors[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID]),
22
+ /**
23
+ * Get an item error.
24
+ */
25
+ itemError: (0, _store.createSelector)((state, itemId) => state.lazyLoading?.dataSource.errors[itemId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID])
21
26
  };
@@ -5,7 +5,7 @@ import { TreeViewItemId } from "../../../models/index.js";
5
5
  import { UseTreeViewItemsSignature } from "../useTreeViewItems/index.js";
6
6
  import { UseTreeViewExpansionSignature } from "../useTreeViewExpansion/index.js";
7
7
  import { UseTreeViewSelectionSignature } from "../useTreeViewSelection/index.js";
8
- type DataSource<R extends {}> = {
8
+ export type DataSource<R extends {}> = {
9
9
  /**
10
10
  * Used to determine the number of children the item has.
11
11
  * Only relevant for lazy-loaded trees.
@@ -43,7 +43,7 @@ export interface UseTreeViewLazyLoadingInstance extends UseTreeViewLazyLoadingPu
43
43
  * @param {TreeViewItemId[]} parentIds The ids of the items to fetch the children of.
44
44
  * @returns {Promise<void>} The promise resolved when the items are fetched.
45
45
  */
46
- fetchItems: (parentIds?: TreeViewItemId[]) => Promise<void>;
46
+ fetchItems: (parentIds: TreeViewItemId[]) => Promise<void>;
47
47
  /**
48
48
  * Method used for fetching an item's children.
49
49
  * Only relevant for lazy-loaded tree views.
@@ -54,21 +54,21 @@ export interface UseTreeViewLazyLoadingInstance extends UseTreeViewLazyLoadingPu
54
54
  * @returns {Promise<void>} The promise resolved when the items are fetched.
55
55
  */
56
56
  fetchItemChildren: (parameters: {
57
- itemId: TreeViewItemId;
57
+ itemId: TreeViewItemId | null;
58
58
  forceRefresh?: boolean;
59
59
  }) => Promise<void>;
60
60
  /**
61
61
  * Set the loading state of an item.
62
- * @param {TreeViewItemId} itemId The id of the item to set the loading state of.
62
+ * @param {TreeViewItemId} itemId The id of the item to set the loading state of. If `null` is passed, it will set the loading state of the root.
63
63
  * @param {boolean} isLoading True if the item is loading.
64
64
  */
65
- setDataSourceLoading: (itemId: TreeViewItemId, isLoading: boolean) => void;
65
+ setDataSourceLoading: (itemId: TreeViewItemId | null, isLoading: boolean) => void;
66
66
  /**
67
67
  * Set the error state of an item.
68
- * @param {TreeViewItemId} itemId The id of the item to set the error state of.
68
+ * @param {TreeViewItemId} itemId The id of the item to set the error state of. If `null` is passed, it will set the error state of the root.
69
69
  * @param {Error | null} error The error caught on the item.
70
70
  */
71
- setDataSourceError: (itemId: TreeViewItemId, error: Error | null) => void;
71
+ setDataSourceError: (itemId: TreeViewItemId | null, error: Error | null) => void;
72
72
  }
73
73
  export interface UseTreeViewLazyLoadingParameters<R extends {}> {
74
74
  /**
@@ -97,5 +97,4 @@ export type UseTreeViewLazyLoadingSignature = TreeViewPluginSignature<{
97
97
  instance: UseTreeViewLazyLoadingInstance;
98
98
  state: UseTreeViewLazyLoadingState;
99
99
  dependencies: [UseTreeViewItemsSignature, UseTreeViewExpansionSignature, UseTreeViewSelectionSignature];
100
- }>;
101
- export {};
100
+ }>;
@@ -25,11 +25,20 @@ const selectorCheckboxSelectionStatus = (0, _store.createSelector)((state, itemI
25
25
  _useTreeViewItems.itemsSelectors.itemOrderedChildrenIds(state, itemToTraverseId).forEach(traverseDescendants);
26
26
  };
27
27
  traverseDescendants(itemId);
28
- if (hasSelectedDescendant && hasUnSelectedDescendant) {
28
+ const shouldSelectBasedOnDescendants = _useTreeViewSelection.selectionSelectors.propagationRules(state).parents;
29
+ if (shouldSelectBasedOnDescendants) {
30
+ if (hasSelectedDescendant && hasUnSelectedDescendant) {
31
+ return 'indeterminate';
32
+ }
33
+ if (hasSelectedDescendant && !hasUnSelectedDescendant) {
34
+ return 'checked';
35
+ }
36
+ return 'empty';
37
+ }
38
+ if (hasSelectedDescendant) {
29
39
  return 'indeterminate';
30
40
  }
31
- const shouldSelectBasedOnDescendants = _useTreeViewSelection.selectionSelectors.propagationRules(state).parents;
32
- return shouldSelectBasedOnDescendants && hasSelectedDescendant && !hasUnSelectedDescendant ? 'checked' : 'empty';
41
+ return 'empty';
33
42
  });
34
43
  const useTreeViewSelectionItemPlugin = ({
35
44
  props
@@ -9,7 +9,7 @@ exports.useTreeViewSelection = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
  var _useAssertModelConsistency = require("@mui/x-internals/useAssertModelConsistency");
12
- var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
12
+ var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
13
13
  var _tree = require("../../utils/tree");
14
14
  var _useTreeViewSelection = require("./useTreeViewSelection.utils");
15
15
  var _useTreeViewSelection2 = require("./useTreeViewSelection.selectors");
@@ -176,7 +176,7 @@ const useTreeViewSelection = ({
176
176
  }
177
177
  setSelectedItems(event, newSelectedItems);
178
178
  };
179
- (0, _useEnhancedEffect.default)(() => {
179
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
180
180
  store.set('selection', {
181
181
  selectedItems: params.selectedItems === undefined ? store.state.selection.selectedItems : params.selectedItems,
182
182
  isEnabled: !params.disableSelection,
@@ -11,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _useRefWithInit = require("@base-ui-components/utils/useRefWithInit");
13
13
  var _store = require("@mui/x-internals/store");
14
- var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
14
+ var _useMergedRefs = require("@base-ui-components/utils/useMergedRefs");
15
15
  var _corePlugins = require("../corePlugins");
16
16
  var _useExtractPluginParamsFromProps = require("./useExtractPluginParamsFromProps");
17
17
  var _useTreeViewBuildContext = require("./useTreeViewBuildContext");
@@ -55,7 +55,7 @@ const useTreeView = ({
55
55
  const instance = (0, _useRefWithInit.useRefWithInit)(() => ({})).current;
56
56
  const publicAPI = useTreeViewApiInitialization(apiRef);
57
57
  const innerRootRef = React.useRef(null);
58
- const handleRootRef = (0, _useForkRef.default)(innerRootRef, rootRef);
58
+ const handleRootRef = (0, _useMergedRefs.useMergedRefs)(innerRootRef, rootRef);
59
59
  const store = (0, _useRefWithInit.useRefWithInit)(() => {
60
60
  const initialState = {};
61
61
  for (const plugin of plugins) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "8.11.3",
3
+ "version": "8.13.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The community edition of the MUI X Tree View components.",
6
6
  "license": "MIT",
@@ -31,14 +31,14 @@
31
31
  "directory": "packages/x-tree-view"
32
32
  },
33
33
  "dependencies": {
34
- "@babel/runtime": "^7.28.2",
34
+ "@babel/runtime": "^7.28.4",
35
35
  "@base-ui-components/utils": "0.1.1",
36
36
  "@mui/utils": "^7.3.2",
37
37
  "@types/react-transition-group": "^4.4.12",
38
38
  "clsx": "^2.1.1",
39
39
  "prop-types": "^15.8.1",
40
40
  "react-transition-group": "^4.4.5",
41
- "@mui/x-internals": "8.11.3"
41
+ "@mui/x-internals": "8.12.0"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@emotion/react": "^11.9.0",
@@ -11,7 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _store = require("@mui/x-internals/store");
13
13
  var _extractEventHandlers = _interopRequireDefault(require("@mui/utils/extractEventHandlers"));
14
- var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
14
+ var _useMergedRefs = require("@base-ui-components/utils/useMergedRefs");
15
15
  var _TreeViewProvider = require("../internals/TreeViewProvider");
16
16
  var _useTreeItemUtils = require("../hooks/useTreeItemUtils");
17
17
  var _TreeViewItemDepthContext = require("../internals/TreeViewItemDepthContext");
@@ -57,8 +57,8 @@ const useTreeItem = parameters => {
57
57
  });
58
58
  const rootRefObject = React.useRef(null);
59
59
  const contentRefObject = React.useRef(null);
60
- const handleRootRef = (0, _useForkRef.default)(rootRef, pluginRootRef, rootRefObject);
61
- const handleContentRef = (0, _useForkRef.default)(contentRef, contentRefObject);
60
+ const handleRootRef = (0, _useMergedRefs.useMergedRefs)(rootRef, pluginRootRef, rootRefObject);
61
+ const handleContentRef = (0, _useMergedRefs.useMergedRefs)(contentRef, contentRefObject);
62
62
  const checkboxRef = React.useRef(null);
63
63
  const treeId = (0, _store.useStore)(store, _useTreeViewId2.idSelectors.treeId);
64
64
  const isSelectionEnabledForItem = (0, _store.useStore)(store, _useTreeViewSelection.selectionSelectors.canItemBeSelected, itemId);
@@ -1 +0,0 @@
1
- export { default as useLazyRef } from '@mui/utils/useLazyRef';
@@ -1 +0,0 @@
1
- export { default as useLazyRef } from '@mui/utils/useLazyRef';
@@ -1 +0,0 @@
1
- export { default as useOnMount } from '@mui/utils/useOnMount';
@@ -1 +0,0 @@
1
- export { default as useOnMount } from '@mui/utils/useOnMount';
@@ -1 +0,0 @@
1
- export { default as useTimeout } from '@mui/utils/useTimeout';
@@ -1 +0,0 @@
1
- export { default as useTimeout } from '@mui/utils/useTimeout';
@@ -1 +0,0 @@
1
- export { default as useLazyRef } from '@mui/utils/useLazyRef';
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "useLazyRef", {
8
- enumerable: true,
9
- get: function () {
10
- return _useLazyRef.default;
11
- }
12
- });
13
- var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
@@ -1 +0,0 @@
1
- export { default as useOnMount } from '@mui/utils/useOnMount';
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "useOnMount", {
8
- enumerable: true,
9
- get: function () {
10
- return _useOnMount.default;
11
- }
12
- });
13
- var _useOnMount = _interopRequireDefault(require("@mui/utils/useOnMount"));
@@ -1 +0,0 @@
1
- export { default as useTimeout } from '@mui/utils/useTimeout';
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "useTimeout", {
8
- enumerable: true,
9
- get: function () {
10
- return _useTimeout.default;
11
- }
12
- });
13
- var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));