@mui/x-tree-view 9.11.0 → 9.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 (108) hide show
  1. package/CHANGELOG.md +317 -0
  2. package/RichTreeView/RichTreeView.js +30 -25
  3. package/RichTreeView/RichTreeView.mjs +30 -25
  4. package/RichTreeView/RichTreeView.types.d.mts +27 -1
  5. package/RichTreeView/RichTreeView.types.d.ts +27 -1
  6. package/RichTreeView/richTreeViewClasses.d.mts +4 -1
  7. package/RichTreeView/richTreeViewClasses.d.ts +4 -1
  8. package/RichTreeView/richTreeViewClasses.js +1 -1
  9. package/RichTreeView/richTreeViewClasses.mjs +1 -1
  10. package/RichTreeView/useExtractRichTreeViewParameters.d.mts +1 -0
  11. package/RichTreeView/useExtractRichTreeViewParameters.d.ts +1 -0
  12. package/RichTreeView/useExtractRichTreeViewParameters.js +6 -3
  13. package/RichTreeView/useExtractRichTreeViewParameters.mjs +6 -3
  14. package/SimpleTreeView/simpleTreeViewClasses.d.mts +1 -1
  15. package/SimpleTreeView/simpleTreeViewClasses.d.ts +1 -1
  16. package/TreeItem/TreeItem.js +2 -1
  17. package/TreeItem/TreeItem.mjs +2 -1
  18. package/TreeItemLoader/TreeItemLoader.d.mts +20 -0
  19. package/TreeItemLoader/TreeItemLoader.d.ts +20 -0
  20. package/TreeItemLoader/TreeItemLoader.js +152 -0
  21. package/TreeItemLoader/TreeItemLoader.mjs +146 -0
  22. package/TreeItemLoader/TreeItemLoader.types.d.mts +36 -0
  23. package/TreeItemLoader/TreeItemLoader.types.d.ts +36 -0
  24. package/TreeItemLoader/TreeItemLoader.types.js +5 -0
  25. package/TreeItemLoader/TreeItemLoader.types.mjs +1 -0
  26. package/TreeItemLoader/TreeItemLoaderContext.d.mts +24 -0
  27. package/TreeItemLoader/TreeItemLoaderContext.d.ts +24 -0
  28. package/TreeItemLoader/TreeItemLoaderContext.js +22 -0
  29. package/TreeItemLoader/TreeItemLoaderContext.mjs +16 -0
  30. package/TreeItemLoader/index.d.mts +3 -0
  31. package/TreeItemLoader/index.d.ts +3 -0
  32. package/TreeItemLoader/index.js +34 -0
  33. package/TreeItemLoader/index.mjs +2 -0
  34. package/TreeItemLoader/treeItemLoaderClasses.d.mts +13 -0
  35. package/TreeItemLoader/treeItemLoaderClasses.d.ts +13 -0
  36. package/TreeItemLoader/treeItemLoaderClasses.js +14 -0
  37. package/TreeItemLoader/treeItemLoaderClasses.mjs +6 -0
  38. package/index.d.mts +1 -0
  39. package/index.d.ts +1 -0
  40. package/index.js +12 -1
  41. package/index.mjs +2 -1
  42. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +2 -2
  43. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.mjs +3 -3
  44. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.mts +4 -0
  45. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +4 -0
  46. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.mts +1 -2
  47. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +1 -2
  48. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +2 -9
  49. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.mjs +2 -7
  50. package/internals/TreeViewProvider/TreeViewProvider.js +7 -3
  51. package/internals/TreeViewProvider/TreeViewProvider.mjs +7 -3
  52. package/internals/TreeViewProvider/TreeViewProvider.types.d.mts +3 -3
  53. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
  54. package/internals/TreeViewProvider/TreeViewStyleContext.d.mts +30 -2
  55. package/internals/TreeViewProvider/TreeViewStyleContext.d.ts +30 -2
  56. package/internals/TreeViewProvider/TreeViewStyleContext.js +12 -0
  57. package/internals/TreeViewProvider/TreeViewStyleContext.mjs +13 -0
  58. package/internals/components/RichTreeViewItems.js +59 -2
  59. package/internals/components/RichTreeViewItems.mjs +59 -2
  60. package/internals/components/RichTreeViewLoading.d.mts +97 -0
  61. package/internals/components/RichTreeViewLoading.d.ts +97 -0
  62. package/internals/components/RichTreeViewLoading.js +171 -0
  63. package/internals/components/RichTreeViewLoading.mjs +160 -0
  64. package/internals/constants.d.mts +6 -0
  65. package/internals/constants.d.ts +6 -0
  66. package/internals/constants.js +12 -0
  67. package/internals/constants.mjs +6 -0
  68. package/internals/hooks/useTreeViewStore.d.mts +1 -1
  69. package/internals/hooks/useTreeViewStore.d.ts +1 -1
  70. package/internals/hooks/useTreeViewStore.js +7 -3
  71. package/internals/hooks/useTreeViewStore.mjs +7 -3
  72. package/internals/index.d.mts +2 -0
  73. package/internals/index.d.ts +2 -0
  74. package/internals/index.js +13 -0
  75. package/internals/index.mjs +1 -0
  76. package/internals/plugins/expansion/selectors.d.mts +3 -2
  77. package/internals/plugins/expansion/selectors.d.ts +3 -2
  78. package/internals/plugins/expansion/selectors.js +4 -4
  79. package/internals/plugins/expansion/selectors.mjs +5 -5
  80. package/internals/plugins/focus/selectors.d.mts +3 -2
  81. package/internals/plugins/focus/selectors.d.ts +3 -2
  82. package/internals/plugins/focus/selectors.js +3 -3
  83. package/internals/plugins/focus/selectors.mjs +4 -4
  84. package/internals/plugins/id/selectors.d.mts +6 -3
  85. package/internals/plugins/id/selectors.d.ts +6 -3
  86. package/internals/plugins/id/selectors.js +4 -5
  87. package/internals/plugins/id/selectors.mjs +4 -5
  88. package/internals/plugins/items/selectors.d.mts +9 -8
  89. package/internals/plugins/items/selectors.d.ts +9 -8
  90. package/internals/plugins/items/selectors.js +15 -16
  91. package/internals/plugins/items/selectors.mjs +15 -16
  92. package/internals/plugins/labelEditing/selectors.d.mts +3 -2
  93. package/internals/plugins/labelEditing/selectors.d.ts +3 -2
  94. package/internals/plugins/labelEditing/selectors.js +6 -5
  95. package/internals/plugins/labelEditing/selectors.mjs +6 -5
  96. package/internals/plugins/lazyLoading/selectors.d.mts +9 -3
  97. package/internals/plugins/lazyLoading/selectors.d.ts +9 -3
  98. package/internals/plugins/lazyLoading/selectors.js +10 -6
  99. package/internals/plugins/lazyLoading/selectors.mjs +10 -6
  100. package/internals/plugins/lazyLoading/types.d.mts +5 -1
  101. package/internals/plugins/lazyLoading/types.d.ts +5 -1
  102. package/internals/plugins/selection/selectors.d.mts +15 -9
  103. package/internals/plugins/selection/selectors.d.ts +15 -9
  104. package/internals/plugins/selection/selectors.js +12 -12
  105. package/internals/plugins/selection/selectors.mjs +13 -13
  106. package/package.json +19 -7
  107. package/useTreeItem/useTreeItem.js +3 -3
  108. package/useTreeItem/useTreeItem.mjs +3 -3
@@ -0,0 +1,3 @@
1
+ export { TreeItemLoader, TreeItemLoaderRoot } from "./TreeItemLoader.mjs";
2
+ export type { TreeItemLoaderProps, TreeItemLoaderOwnerState } from "./TreeItemLoader.types.mjs";
3
+ export * from "./treeItemLoaderClasses.mjs";
@@ -0,0 +1,3 @@
1
+ export { TreeItemLoader, TreeItemLoaderRoot } from "./TreeItemLoader.js";
2
+ export type { TreeItemLoaderProps, TreeItemLoaderOwnerState } from "./TreeItemLoader.types.js";
3
+ export * from "./treeItemLoaderClasses.js";
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ TreeItemLoader: true,
8
+ TreeItemLoaderRoot: true
9
+ };
10
+ Object.defineProperty(exports, "TreeItemLoader", {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _TreeItemLoader.TreeItemLoader;
14
+ }
15
+ });
16
+ Object.defineProperty(exports, "TreeItemLoaderRoot", {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _TreeItemLoader.TreeItemLoaderRoot;
20
+ }
21
+ });
22
+ var _TreeItemLoader = require("./TreeItemLoader");
23
+ var _treeItemLoaderClasses = require("./treeItemLoaderClasses");
24
+ Object.keys(_treeItemLoaderClasses).forEach(function (key) {
25
+ if (key === "default" || key === "__esModule") return;
26
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
27
+ if (key in exports && exports[key] === _treeItemLoaderClasses[key]) return;
28
+ Object.defineProperty(exports, key, {
29
+ enumerable: true,
30
+ get: function () {
31
+ return _treeItemLoaderClasses[key];
32
+ }
33
+ });
34
+ });
@@ -0,0 +1,2 @@
1
+ export { TreeItemLoader, TreeItemLoaderRoot } from "./TreeItemLoader.mjs";
2
+ export * from "./treeItemLoaderClasses.mjs";
@@ -0,0 +1,13 @@
1
+ export interface TreeItemLoaderClasses {
2
+ /** Styles applied to the root element. */
3
+ root: string;
4
+ /** Styles applied to the icon gutter element of the default content. */
5
+ iconContainer: string;
6
+ /** Styles applied to the checkbox placeholder element of the default content. */
7
+ checkbox: string;
8
+ /** Styles applied to the label placeholder element of the default content. */
9
+ label: string;
10
+ }
11
+ export type TreeItemLoaderClassKey = keyof TreeItemLoaderClasses;
12
+ export declare function getTreeItemLoaderUtilityClass(slot: string): string;
13
+ export declare const treeItemLoaderClasses: TreeItemLoaderClasses;
@@ -0,0 +1,13 @@
1
+ export interface TreeItemLoaderClasses {
2
+ /** Styles applied to the root element. */
3
+ root: string;
4
+ /** Styles applied to the icon gutter element of the default content. */
5
+ iconContainer: string;
6
+ /** Styles applied to the checkbox placeholder element of the default content. */
7
+ checkbox: string;
8
+ /** Styles applied to the label placeholder element of the default content. */
9
+ label: string;
10
+ }
11
+ export type TreeItemLoaderClassKey = keyof TreeItemLoaderClasses;
12
+ export declare function getTreeItemLoaderUtilityClass(slot: string): string;
13
+ export declare const treeItemLoaderClasses: TreeItemLoaderClasses;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getTreeItemLoaderUtilityClass = getTreeItemLoaderUtilityClass;
8
+ exports.treeItemLoaderClasses = void 0;
9
+ var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateUtilityClass"));
10
+ var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generateUtilityClasses"));
11
+ function getTreeItemLoaderUtilityClass(slot) {
12
+ return (0, _generateUtilityClass.default)('MuiTreeItemLoader', slot);
13
+ }
14
+ const treeItemLoaderClasses = exports.treeItemLoaderClasses = (0, _generateUtilityClasses.default)('MuiTreeItemLoader', ['root', 'iconContainer', 'checkbox', 'label']);
@@ -0,0 +1,6 @@
1
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
2
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
+ export function getTreeItemLoaderUtilityClass(slot) {
4
+ return generateUtilityClass('MuiTreeItemLoader', slot);
5
+ }
6
+ export const treeItemLoaderClasses = generateUtilityClasses('MuiTreeItemLoader', ['root', 'iconContainer', 'checkbox', 'label']);
package/index.d.mts CHANGED
@@ -6,6 +6,7 @@ export * from "./TreeItemIcon/index.mjs";
6
6
  export * from "./TreeItemProvider/index.mjs";
7
7
  export * from "./TreeItemDragAndDropOverlay/index.mjs";
8
8
  export * from "./TreeItemLabelInput/index.mjs";
9
+ export * from "./TreeItemLoader/index.mjs";
9
10
  export * from "./models/index.mjs";
10
11
  export * from "./icons/index.mjs";
11
12
  export * from "./hooks/index.mjs";
package/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "./TreeItemIcon/index.js";
6
6
  export * from "./TreeItemProvider/index.js";
7
7
  export * from "./TreeItemDragAndDropOverlay/index.js";
8
8
  export * from "./TreeItemLabelInput/index.js";
9
+ export * from "./TreeItemLoader/index.js";
9
10
  export * from "./models/index.js";
10
11
  export * from "./icons/index.js";
11
12
  export * from "./hooks/index.js";
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v9.11.0
2
+ * @mui/x-tree-view v9.13.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -98,6 +98,17 @@ Object.keys(_TreeItemLabelInput).forEach(function (key) {
98
98
  }
99
99
  });
100
100
  });
101
+ var _TreeItemLoader = require("./TreeItemLoader");
102
+ Object.keys(_TreeItemLoader).forEach(function (key) {
103
+ if (key === "default" || key === "__esModule") return;
104
+ if (key in exports && exports[key] === _TreeItemLoader[key]) return;
105
+ Object.defineProperty(exports, key, {
106
+ enumerable: true,
107
+ get: function () {
108
+ return _TreeItemLoader[key];
109
+ }
110
+ });
111
+ });
101
112
  var _models = require("./models");
102
113
  Object.keys(_models).forEach(function (key) {
103
114
  if (key === "default" || key === "__esModule") return;
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v9.11.0
2
+ * @mui/x-tree-view v9.13.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -16,6 +16,7 @@ export * from "./TreeItemIcon/index.mjs";
16
16
  export * from "./TreeItemProvider/index.mjs";
17
17
  export * from "./TreeItemDragAndDropOverlay/index.mjs";
18
18
  export * from "./TreeItemLabelInput/index.mjs";
19
+ export * from "./TreeItemLoader/index.mjs";
19
20
  export * from "./models/index.mjs";
20
21
  export * from "./icons/index.mjs";
21
22
  export * from "./hooks/index.mjs";
@@ -77,8 +77,8 @@ class MinimalTreeViewStore extends _store.Store {
77
77
  const newMinimalState = (0, _MinimalTreeViewStore.deriveStateFromParameters)(parameters);
78
78
  updateModel(newMinimalState, 'expandedItems', 'defaultExpandedItems');
79
79
  updateModel(newMinimalState, 'selectedItems', 'defaultSelectedItems');
80
- if (this.state.providedTreeId !== parameters.id || this.state.treeId === undefined) {
81
- newMinimalState.treeId = (0, _MinimalTreeViewStore.createTreeViewDefaultId)();
80
+ if (this.state.treeId !== parameters.defaultId) {
81
+ newMinimalState.treeId = parameters.defaultId;
82
82
  }
83
83
  if (!this.mapper.shouldIgnoreItemsStateUpdate(parameters) && _TreeViewItemsPlugin.TreeViewItemsPlugin.shouldRebuildItemsState(parameters, this.parameters)) {
84
84
  Object.assign(newMinimalState, _TreeViewItemsPlugin.TreeViewItemsPlugin.buildItemsStateIfNeeded(parameters));
@@ -3,7 +3,7 @@ import { Store } from '@mui/x-internals/store';
3
3
  import { warnOnce } from '@mui/x-internals/warning';
4
4
  import { EventManager } from '@mui/x-internals/EventManager';
5
5
  import { DisposableStack, disposeSymbol, unwrapSuppressedErrors } from '@mui/x-internals/disposable';
6
- import { createMinimalInitialState, createTreeViewDefaultId, deriveStateFromParameters } from "./MinimalTreeViewStore.utils.mjs";
6
+ import { createMinimalInitialState, deriveStateFromParameters } from "./MinimalTreeViewStore.utils.mjs";
7
7
  import { TimeoutManager } from "./TimeoutManager.mjs";
8
8
  import { TreeViewKeyboardNavigationPlugin } from "../plugins/keyboardNavigation/index.mjs";
9
9
  import { TreeViewFocusPlugin } from "../plugins/focus/TreeViewFocusPlugin.mjs";
@@ -70,8 +70,8 @@ export class MinimalTreeViewStore extends Store {
70
70
  const newMinimalState = deriveStateFromParameters(parameters);
71
71
  updateModel(newMinimalState, 'expandedItems', 'defaultExpandedItems');
72
72
  updateModel(newMinimalState, 'selectedItems', 'defaultSelectedItems');
73
- if (this.state.providedTreeId !== parameters.id || this.state.treeId === undefined) {
74
- newMinimalState.treeId = createTreeViewDefaultId();
73
+ if (this.state.treeId !== parameters.defaultId) {
74
+ newMinimalState.treeId = parameters.defaultId;
75
75
  }
76
76
  if (!this.mapper.shouldIgnoreItemsStateUpdate(parameters) && TreeViewItemsPlugin.shouldRebuildItemsState(parameters, this.parameters)) {
77
77
  Object.assign(newMinimalState, TreeViewItemsPlugin.buildItemsStateIfNeeded(parameters));
@@ -88,6 +88,10 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
88
88
  itemHeight: number | null;
89
89
  }
90
90
  export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> {
91
+ /**
92
+ * The id used to build the id attributes of the items when the `id` parameter is not provided.
93
+ */
94
+ defaultId: string | undefined;
91
95
  /**
92
96
  * Whether the layout is right-to-left.
93
97
  */
@@ -88,6 +88,10 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
88
88
  itemHeight: number | null;
89
89
  }
90
90
  export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> {
91
+ /**
92
+ * The id used to build the id attributes of the items when the `id` parameter is not provided.
93
+ */
94
+ defaultId: string | undefined;
91
95
  /**
92
96
  * Whether the layout is right-to-left.
93
97
  */
@@ -17,5 +17,4 @@ export declare function deriveStateFromParameters<R extends TreeViewValidItem<R>
17
17
  selectionPropagation: Readonly<{}>;
18
18
  itemHeight: number | null;
19
19
  };
20
- export declare function createMinimalInitialState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined>(parameters: MinimalTreeViewParameters<R, Multiple>): MinimalTreeViewState<R, Multiple>;
21
- export declare const createTreeViewDefaultId: () => string;
20
+ export declare function createMinimalInitialState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined>(parameters: MinimalTreeViewParameters<R, Multiple>): MinimalTreeViewState<R, Multiple>;
@@ -17,5 +17,4 @@ export declare function deriveStateFromParameters<R extends TreeViewValidItem<R>
17
17
  selectionPropagation: Readonly<{}>;
18
18
  itemHeight: number | null;
19
19
  };
20
- export declare function createMinimalInitialState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined>(parameters: MinimalTreeViewParameters<R, Multiple>): MinimalTreeViewState<R, Multiple>;
21
- export declare const createTreeViewDefaultId: () => string;
20
+ export declare function createMinimalInitialState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined>(parameters: MinimalTreeViewParameters<R, Multiple>): MinimalTreeViewState<R, Multiple>;
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createMinimalInitialState = createMinimalInitialState;
8
- exports.createTreeViewDefaultId = void 0;
9
8
  exports.deriveStateFromParameters = deriveStateFromParameters;
10
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
10
  var _empty = require("@base-ui/utils/empty");
@@ -43,16 +42,10 @@ function applyModelInitialValue(controlledValue, defaultValue, fallback) {
43
42
  }
44
43
  function createMinimalInitialState(parameters) {
45
44
  return (0, _extends2.default)({
46
- treeId: undefined,
45
+ treeId: parameters.defaultId,
47
46
  focusedItemId: null
48
47
  }, deriveStateFromParameters(parameters), _items.TreeViewItemsPlugin.buildItemsStateIfNeeded(parameters), {
49
48
  expandedItems: applyModelInitialValue(parameters.expandedItems, parameters.defaultExpandedItems, []),
50
49
  selectedItems: applyModelInitialValue(parameters.selectedItems, parameters.defaultSelectedItems, parameters.multiSelect ? _empty.EMPTY_ARRAY : null)
51
50
  });
52
- }
53
- let globalTreeViewDefaultId = 0;
54
- const createTreeViewDefaultId = () => {
55
- globalTreeViewDefaultId += 1;
56
- return `mui-tree-view-${globalTreeViewDefaultId}`;
57
- };
58
- exports.createTreeViewDefaultId = createTreeViewDefaultId;
51
+ }
@@ -35,15 +35,10 @@ function applyModelInitialValue(controlledValue, defaultValue, fallback) {
35
35
  }
36
36
  export function createMinimalInitialState(parameters) {
37
37
  return _extends({
38
- treeId: undefined,
38
+ treeId: parameters.defaultId,
39
39
  focusedItemId: null
40
40
  }, deriveStateFromParameters(parameters), TreeViewItemsPlugin.buildItemsStateIfNeeded(parameters), {
41
41
  expandedItems: applyModelInitialValue(parameters.expandedItems, parameters.defaultExpandedItems, []),
42
42
  selectedItems: applyModelInitialValue(parameters.selectedItems, parameters.defaultSelectedItems, parameters.multiSelect ? EMPTY_ARRAY : null)
43
43
  });
44
- }
45
- let globalTreeViewDefaultId = 0;
46
- export const createTreeViewDefaultId = () => {
47
- globalTreeViewDefaultId += 1;
48
- return `mui-tree-view-${globalTreeViewDefaultId}`;
49
- };
44
+ }
@@ -36,14 +36,18 @@ function TreeViewProvider(props) {
36
36
  slots: {
37
37
  collapseIcon: slots.collapseIcon,
38
38
  expandIcon: slots.expandIcon,
39
- endIcon: slots.endIcon
39
+ endIcon: slots.endIcon,
40
+ loading: slots.loading,
41
+ itemLoader: slots.itemLoader
40
42
  },
41
43
  slotProps: {
42
44
  collapseIcon: slotProps.collapseIcon,
43
45
  expandIcon: slotProps.expandIcon,
44
- endIcon: slotProps.endIcon
46
+ endIcon: slotProps.endIcon,
47
+ loading: slotProps.loading,
48
+ itemLoader: slotProps.itemLoader
45
49
  }
46
- }), [classes, slots.collapseIcon, slots.expandIcon, slots.endIcon, slotProps.collapseIcon, slotProps.expandIcon, slotProps.endIcon]);
50
+ }), [classes, slots.collapseIcon, slots.expandIcon, slots.endIcon, slots.loading, slots.itemLoader, slotProps.collapseIcon, slotProps.expandIcon, slotProps.endIcon, slotProps.loading, slotProps.itemLoader]);
47
51
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewContext.TreeViewContext.Provider, {
48
52
  value: contextValue,
49
53
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewStyleContext.TreeViewStyleContext.Provider, {
@@ -29,14 +29,18 @@ export function TreeViewProvider(props) {
29
29
  slots: {
30
30
  collapseIcon: slots.collapseIcon,
31
31
  expandIcon: slots.expandIcon,
32
- endIcon: slots.endIcon
32
+ endIcon: slots.endIcon,
33
+ loading: slots.loading,
34
+ itemLoader: slots.itemLoader
33
35
  },
34
36
  slotProps: {
35
37
  collapseIcon: slotProps.collapseIcon,
36
38
  expandIcon: slotProps.expandIcon,
37
- endIcon: slotProps.endIcon
39
+ endIcon: slotProps.endIcon,
40
+ loading: slotProps.loading,
41
+ itemLoader: slotProps.itemLoader
38
42
  }
39
- }), [classes, slots.collapseIcon, slots.expandIcon, slots.endIcon, slotProps.collapseIcon, slotProps.expandIcon, slotProps.endIcon]);
43
+ }), [classes, slots.collapseIcon, slots.expandIcon, slots.endIcon, slots.loading, slots.itemLoader, slotProps.collapseIcon, slotProps.expandIcon, slotProps.endIcon, slotProps.loading, slotProps.itemLoader]);
40
44
  return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
41
45
  value: contextValue,
42
46
  children: /*#__PURE__*/_jsx(TreeViewStyleContext.Provider, {
@@ -2,7 +2,7 @@ import type * as React from 'react';
2
2
  import type { disposeSymbol } from '@mui/x-internals/disposable';
3
3
  import type { TreeItemWrapper, TreeViewItemPluginResponse, TreeViewPublicAPI, TreeViewAnyStore } from "../models/index.mjs";
4
4
  import type { TreeItemProps } from "../../TreeItem/TreeItem.types.mjs";
5
- import type { TreeViewClasses, TreeViewSlotProps, TreeViewSlots } from "./TreeViewStyleContext.mjs";
5
+ import type { TreeViewClasses, TreeViewStyleContextSlotProps, TreeViewStyleContextSlots } from "./TreeViewStyleContext.mjs";
6
6
  import type { UseTreeViewBuildContextParameters } from "./useTreeViewBuildContext.mjs";
7
7
  export type TreeViewItemPluginsRunner = (props: TreeItemProps) => Required<TreeViewItemPluginResponse>;
8
8
  export type TreeViewStoreInContext<TStore extends TreeViewAnyStore> = Omit<TStore, 'setState' | 'update' | 'set' | 'updateStateFromParameters' | 'disposables' | typeof disposeSymbol | 'mountEffect' | 'registerStoreEffect' | 'itemPluginManager' | 'parameters'>;
@@ -16,6 +16,6 @@ export interface TreeViewContextValue<TStore extends TreeViewAnyStore> {
16
16
  export interface TreeViewProviderProps<TStore extends TreeViewAnyStore> extends UseTreeViewBuildContextParameters<TStore> {
17
17
  children: React.ReactNode;
18
18
  classes: Partial<TreeViewClasses> | undefined;
19
- slots: TreeViewSlots | undefined;
20
- slotProps: TreeViewSlotProps | undefined;
19
+ slots: TreeViewStyleContextSlots | undefined;
20
+ slotProps: TreeViewStyleContextSlotProps | undefined;
21
21
  }
@@ -2,7 +2,7 @@ import type * as React from 'react';
2
2
  import type { disposeSymbol } from '@mui/x-internals/disposable';
3
3
  import type { TreeItemWrapper, TreeViewItemPluginResponse, TreeViewPublicAPI, TreeViewAnyStore } from "../models/index.js";
4
4
  import type { TreeItemProps } from "../../TreeItem/TreeItem.types.js";
5
- import type { TreeViewClasses, TreeViewSlotProps, TreeViewSlots } from "./TreeViewStyleContext.js";
5
+ import type { TreeViewClasses, TreeViewStyleContextSlotProps, TreeViewStyleContextSlots } from "./TreeViewStyleContext.js";
6
6
  import type { UseTreeViewBuildContextParameters } from "./useTreeViewBuildContext.js";
7
7
  export type TreeViewItemPluginsRunner = (props: TreeItemProps) => Required<TreeViewItemPluginResponse>;
8
8
  export type TreeViewStoreInContext<TStore extends TreeViewAnyStore> = Omit<TStore, 'setState' | 'update' | 'set' | 'updateStateFromParameters' | 'disposables' | typeof disposeSymbol | 'mountEffect' | 'registerStoreEffect' | 'itemPluginManager' | 'parameters'>;
@@ -16,6 +16,6 @@ export interface TreeViewContextValue<TStore extends TreeViewAnyStore> {
16
16
  export interface TreeViewProviderProps<TStore extends TreeViewAnyStore> extends UseTreeViewBuildContextParameters<TStore> {
17
17
  children: React.ReactNode;
18
18
  classes: Partial<TreeViewClasses> | undefined;
19
- slots: TreeViewSlots | undefined;
20
- slotProps: TreeViewSlotProps | undefined;
19
+ slots: TreeViewStyleContextSlots | undefined;
20
+ slotProps: TreeViewStyleContextSlotProps | undefined;
21
21
  }
@@ -1,5 +1,7 @@
1
1
  import type { SlotComponentProps } from '@mui/utils/types';
2
2
  import * as React from 'react';
3
+ import type { TreeItemLoaderOwnerState } from "../../TreeItemLoader/index.mjs";
4
+ import type { RichTreeViewLoadingSlotOwnProps, RichTreeViewLoadingSlotOwnerState } from "../components/RichTreeViewLoading.mjs";
3
5
  export interface TreeViewClasses {
4
6
  /** Styles applied to the root element. */
5
7
  root: string;
@@ -23,6 +25,8 @@ export interface TreeViewClasses {
23
25
  itemErrorIcon: string;
24
26
  /** Styles applied to the item's loading icon element */
25
27
  itemLoadingIcon: string;
28
+ /** Styles applied to the item loader element. */
29
+ itemLoader: string;
26
30
  }
27
31
  export interface TreeViewSlots {
28
32
  /**
@@ -44,10 +48,34 @@ export interface TreeViewSlotProps {
44
48
  expandIcon?: SlotComponentProps<'svg', {}, {}>;
45
49
  endIcon?: SlotComponentProps<'svg', {}, {}>;
46
50
  }
51
+ /**
52
+ * Slots stored in the style context.
53
+ * The loading slots only exist on the components with a loading state,
54
+ * so they are not part of the public `TreeViewSlots` interface.
55
+ */
56
+ export interface TreeViewStyleContextSlots extends TreeViewSlots {
57
+ /**
58
+ * Component rendered instead of the default loading rows.
59
+ */
60
+ loading?: React.ElementType;
61
+ /**
62
+ * Component rendered for each loading row. The default renders a skeleton row.
63
+ */
64
+ itemLoader?: React.ElementType;
65
+ }
66
+ /**
67
+ * Slot props stored in the style context.
68
+ * The loading slot props only exist on the components with a loading state,
69
+ * so they are not part of the public `TreeViewSlotProps` interface.
70
+ */
71
+ export interface TreeViewStyleContextSlotProps extends TreeViewSlotProps {
72
+ loading?: SlotComponentProps<'div', RichTreeViewLoadingSlotOwnProps, RichTreeViewLoadingSlotOwnerState>;
73
+ itemLoader?: SlotComponentProps<'li', {}, TreeItemLoaderOwnerState>;
74
+ }
47
75
  export interface TreeViewStyleContextValue {
48
76
  classes: Partial<TreeViewClasses>;
49
- slots: TreeViewSlots;
50
- slotProps: TreeViewSlotProps;
77
+ slots: TreeViewStyleContextSlots;
78
+ slotProps: TreeViewStyleContextSlotProps;
51
79
  }
52
80
  /**
53
81
  * @ignore - internal component.
@@ -1,5 +1,7 @@
1
1
  import type { SlotComponentProps } from '@mui/utils/types';
2
2
  import * as React from 'react';
3
+ import type { TreeItemLoaderOwnerState } from "../../TreeItemLoader/index.js";
4
+ import type { RichTreeViewLoadingSlotOwnProps, RichTreeViewLoadingSlotOwnerState } from "../components/RichTreeViewLoading.js";
3
5
  export interface TreeViewClasses {
4
6
  /** Styles applied to the root element. */
5
7
  root: string;
@@ -23,6 +25,8 @@ export interface TreeViewClasses {
23
25
  itemErrorIcon: string;
24
26
  /** Styles applied to the item's loading icon element */
25
27
  itemLoadingIcon: string;
28
+ /** Styles applied to the item loader element. */
29
+ itemLoader: string;
26
30
  }
27
31
  export interface TreeViewSlots {
28
32
  /**
@@ -44,10 +48,34 @@ export interface TreeViewSlotProps {
44
48
  expandIcon?: SlotComponentProps<'svg', {}, {}>;
45
49
  endIcon?: SlotComponentProps<'svg', {}, {}>;
46
50
  }
51
+ /**
52
+ * Slots stored in the style context.
53
+ * The loading slots only exist on the components with a loading state,
54
+ * so they are not part of the public `TreeViewSlots` interface.
55
+ */
56
+ export interface TreeViewStyleContextSlots extends TreeViewSlots {
57
+ /**
58
+ * Component rendered instead of the default loading rows.
59
+ */
60
+ loading?: React.ElementType;
61
+ /**
62
+ * Component rendered for each loading row. The default renders a skeleton row.
63
+ */
64
+ itemLoader?: React.ElementType;
65
+ }
66
+ /**
67
+ * Slot props stored in the style context.
68
+ * The loading slot props only exist on the components with a loading state,
69
+ * so they are not part of the public `TreeViewSlotProps` interface.
70
+ */
71
+ export interface TreeViewStyleContextSlotProps extends TreeViewSlotProps {
72
+ loading?: SlotComponentProps<'div', RichTreeViewLoadingSlotOwnProps, RichTreeViewLoadingSlotOwnerState>;
73
+ itemLoader?: SlotComponentProps<'li', {}, TreeItemLoaderOwnerState>;
74
+ }
47
75
  export interface TreeViewStyleContextValue {
48
76
  classes: Partial<TreeViewClasses>;
49
- slots: TreeViewSlots;
50
- slotProps: TreeViewSlotProps;
77
+ slots: TreeViewStyleContextSlots;
78
+ slotProps: TreeViewStyleContextSlotProps;
51
79
  }
52
80
  /**
53
81
  * @ignore - internal component.
@@ -7,6 +7,18 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useTreeViewStyleContext = exports.TreeViewStyleContext = void 0;
9
9
  var React = _interopRequireWildcard(require("react"));
10
+ /**
11
+ * Slots stored in the style context.
12
+ * The loading slots only exist on the components with a loading state,
13
+ * so they are not part of the public `TreeViewSlots` interface.
14
+ */
15
+
16
+ /**
17
+ * Slot props stored in the style context.
18
+ * The loading slot props only exist on the components with a loading state,
19
+ * so they are not part of the public `TreeViewSlotProps` interface.
20
+ */
21
+
10
22
  /**
11
23
  * @ignore - internal component.
12
24
  */
@@ -1,6 +1,19 @@
1
1
  'use client';
2
2
 
3
3
  import * as React from 'react';
4
+
5
+ /**
6
+ * Slots stored in the style context.
7
+ * The loading slots only exist on the components with a loading state,
8
+ * so they are not part of the public `TreeViewSlots` interface.
9
+ */
10
+
11
+ /**
12
+ * Slot props stored in the style context.
13
+ * The loading slot props only exist on the components with a loading state,
14
+ * so they are not part of the public `TreeViewSlotProps` interface.
15
+ */
16
+
4
17
  /**
5
18
  * @ignore - internal component.
6
19
  */
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "__esModule", {
8
8
  });
9
9
  exports.RichTreeViewItem = void 0;
10
10
  exports.RichTreeViewItems = RichTreeViewItems;
11
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
11
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
  var React = _interopRequireWildcard(require("react"));
14
14
  var _empty = require("@base-ui/utils/empty");
15
15
  var _store = require("@mui/x-internals/store");
@@ -19,6 +19,8 @@ var _TreeItem = require("../../TreeItem");
19
19
  var _items = require("../plugins/items");
20
20
  var _TreeViewProvider = require("../TreeViewProvider");
21
21
  var _expansion = require("../plugins/expansion");
22
+ var _lazyLoading = require("../plugins/lazyLoading");
23
+ var _RichTreeViewLoading = require("./RichTreeViewLoading");
22
24
  var _useTreeViewRootProps = require("../hooks/useTreeViewRootProps");
23
25
  var _jsxRuntime = require("react/jsx-runtime");
24
26
  const _excluded = ["ownerState"];
@@ -26,6 +28,54 @@ const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
26
28
  if (process.env.NODE_ENV !== "production") RichTreeViewItemsContext.displayName = "RichTreeViewItemsContext";
27
29
  const selectorNoChildren = () => _empty.EMPTY_ARRAY;
28
30
  const selectorChildrenIdsNull = state => _items.itemsSelectors.itemOrderedChildrenIds(state, null);
31
+
32
+ /**
33
+ * Renders the loading rows for the children of an item that lazily loads them.
34
+ * It only mounts while the item is loading, so the `loading` slot props are not
35
+ * resolved for the other items.
36
+ */
37
+ function RichTreeViewItemLoadingChildren({
38
+ itemId
39
+ }) {
40
+ const {
41
+ store
42
+ } = (0, _TreeViewProvider.useTreeViewContext)();
43
+ const {
44
+ classes,
45
+ slots: styleSlots,
46
+ slotProps: styleSlotProps
47
+ } = (0, _TreeViewProvider.useTreeViewStyleContext)();
48
+ const itemDepth = (0, _store.useStore)(store, _items.itemsSelectors.itemDepth, itemId);
49
+ const loadingChildrenCount = (0, _store.useStore)(store, _lazyLoading.lazyLoadingSelectors.itemLoadingChildrenCount, itemId);
50
+ const Loading = styleSlots.loading;
51
+ const loadingProps = (0, _useSlotProps2.default)({
52
+ elementType: Loading ?? 'div',
53
+ externalSlotProps: styleSlotProps.loading,
54
+ ownerState: {
55
+ itemId
56
+ }
57
+ });
58
+
59
+ // The count reported by `getChildrenCount()` wins over `slotProps.loading.itemsCount`,
60
+ // which only acts as a fallback when the count is unknown.
61
+ const itemsCount = loadingChildrenCount > 0 ? Math.min(loadingChildrenCount, _RichTreeViewLoading.MAX_LOADING_ITEMS_COUNT) : (0, _RichTreeViewLoading.getLoadingItemsCount)(loadingProps.itemsCount);
62
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewLoading.RichTreeViewLoadingContext, {
63
+ store: store,
64
+ itemDepth: itemDepth + 1,
65
+ children: Loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Loading, (0, _extends2.default)({}, loadingProps, {
66
+ itemsCount: itemsCount
67
+ })) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewLoading.RichTreeViewItemLoaders, {
68
+ classes: classes,
69
+ slots: {
70
+ itemLoader: styleSlots.itemLoader
71
+ },
72
+ slotProps: {
73
+ itemLoader: styleSlotProps.itemLoader
74
+ },
75
+ itemsCount: itemsCount
76
+ })
77
+ });
78
+ }
29
79
  const RichTreeViewItem = exports.RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewItem({
30
80
  itemSlot,
31
81
  itemSlotProps,
@@ -38,6 +88,7 @@ const RichTreeViewItem = exports.RichTreeViewItem = /*#__PURE__*/React.memo(func
38
88
  } = (0, _TreeViewProvider.useTreeViewContext)();
39
89
  const itemMeta = (0, _store.useStore)(store, _items.itemsSelectors.itemMeta, itemId);
40
90
  const children = (0, _store.useStore)(store, skipChildren ? selectorNoChildren : _items.itemsSelectors.itemOrderedChildrenIds, itemId);
91
+ const isLoadingChildren = (0, _store.useStore)(store, _lazyLoading.lazyLoadingSelectors.isItemLoading, itemId);
41
92
  const Item = itemSlot ?? _TreeItem.TreeItem;
42
93
  const _useSlotProps = (0, _useSlotProps2.default)({
43
94
  elementType: Item,
@@ -53,8 +104,14 @@ const RichTreeViewItem = exports.RichTreeViewItem = /*#__PURE__*/React.memo(func
53
104
  }
54
105
  }),
55
106
  itemProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded);
107
+ let renderedChildren = renderItemForRichTreeView ? children?.map(renderItemForRichTreeView) : null;
108
+ if (isLoadingChildren && !skipChildren && (children == null || children.length === 0)) {
109
+ renderedChildren = /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItemLoadingChildren, {
110
+ itemId: itemId
111
+ });
112
+ }
56
113
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, {
57
- children: renderItemForRichTreeView ? children?.map(renderItemForRichTreeView) : null
114
+ children: renderedChildren
58
115
  }));
59
116
  }, _fastObjectShallowCompare.fastObjectShallowCompare);
60
117
  if (process.env.NODE_ENV !== "production") RichTreeViewItem.displayName = "RichTreeViewItem";