@mui/x-tree-view 9.12.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.
- package/CHANGELOG.md +152 -0
- package/RichTreeView/RichTreeView.js +30 -25
- package/RichTreeView/RichTreeView.mjs +30 -25
- package/RichTreeView/RichTreeView.types.d.mts +27 -1
- package/RichTreeView/RichTreeView.types.d.ts +27 -1
- package/RichTreeView/richTreeViewClasses.d.mts +4 -1
- package/RichTreeView/richTreeViewClasses.d.ts +4 -1
- package/RichTreeView/richTreeViewClasses.js +1 -1
- package/RichTreeView/richTreeViewClasses.mjs +1 -1
- package/RichTreeView/useExtractRichTreeViewParameters.d.mts +1 -0
- package/RichTreeView/useExtractRichTreeViewParameters.d.ts +1 -0
- package/RichTreeView/useExtractRichTreeViewParameters.js +6 -3
- package/RichTreeView/useExtractRichTreeViewParameters.mjs +6 -3
- package/SimpleTreeView/simpleTreeViewClasses.d.mts +1 -1
- package/SimpleTreeView/simpleTreeViewClasses.d.ts +1 -1
- package/TreeItem/TreeItem.js +2 -1
- package/TreeItem/TreeItem.mjs +2 -1
- package/TreeItemLoader/TreeItemLoader.d.mts +20 -0
- package/TreeItemLoader/TreeItemLoader.d.ts +20 -0
- package/TreeItemLoader/TreeItemLoader.js +152 -0
- package/TreeItemLoader/TreeItemLoader.mjs +146 -0
- package/TreeItemLoader/TreeItemLoader.types.d.mts +36 -0
- package/TreeItemLoader/TreeItemLoader.types.d.ts +36 -0
- package/TreeItemLoader/TreeItemLoader.types.js +5 -0
- package/TreeItemLoader/TreeItemLoader.types.mjs +1 -0
- package/TreeItemLoader/TreeItemLoaderContext.d.mts +24 -0
- package/TreeItemLoader/TreeItemLoaderContext.d.ts +24 -0
- package/TreeItemLoader/TreeItemLoaderContext.js +22 -0
- package/TreeItemLoader/TreeItemLoaderContext.mjs +16 -0
- package/TreeItemLoader/index.d.mts +3 -0
- package/TreeItemLoader/index.d.ts +3 -0
- package/TreeItemLoader/index.js +34 -0
- package/TreeItemLoader/index.mjs +2 -0
- package/TreeItemLoader/treeItemLoaderClasses.d.mts +13 -0
- package/TreeItemLoader/treeItemLoaderClasses.d.ts +13 -0
- package/TreeItemLoader/treeItemLoaderClasses.js +14 -0
- package/TreeItemLoader/treeItemLoaderClasses.mjs +6 -0
- package/index.d.mts +1 -0
- package/index.d.ts +1 -0
- package/index.js +12 -1
- package/index.mjs +2 -1
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +2 -2
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.mjs +3 -3
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.mts +4 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +4 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.mts +1 -2
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +1 -2
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +2 -9
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.mjs +2 -7
- package/internals/TreeViewProvider/TreeViewProvider.js +7 -3
- package/internals/TreeViewProvider/TreeViewProvider.mjs +7 -3
- package/internals/TreeViewProvider/TreeViewProvider.types.d.mts +3 -3
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +3 -3
- package/internals/TreeViewProvider/TreeViewStyleContext.d.mts +30 -2
- package/internals/TreeViewProvider/TreeViewStyleContext.d.ts +30 -2
- package/internals/TreeViewProvider/TreeViewStyleContext.js +12 -0
- package/internals/TreeViewProvider/TreeViewStyleContext.mjs +13 -0
- package/internals/components/RichTreeViewItems.js +59 -2
- package/internals/components/RichTreeViewItems.mjs +59 -2
- package/internals/components/RichTreeViewLoading.d.mts +97 -0
- package/internals/components/RichTreeViewLoading.d.ts +97 -0
- package/internals/components/RichTreeViewLoading.js +171 -0
- package/internals/components/RichTreeViewLoading.mjs +160 -0
- package/internals/constants.d.mts +6 -0
- package/internals/constants.d.ts +6 -0
- package/internals/constants.js +12 -0
- package/internals/constants.mjs +6 -0
- package/internals/hooks/useTreeViewStore.d.mts +1 -1
- package/internals/hooks/useTreeViewStore.d.ts +1 -1
- package/internals/hooks/useTreeViewStore.js +7 -3
- package/internals/hooks/useTreeViewStore.mjs +7 -3
- package/internals/index.d.mts +2 -0
- package/internals/index.d.ts +2 -0
- package/internals/index.js +13 -0
- package/internals/index.mjs +1 -0
- package/internals/plugins/expansion/selectors.d.mts +3 -2
- package/internals/plugins/expansion/selectors.d.ts +3 -2
- package/internals/plugins/expansion/selectors.js +4 -4
- package/internals/plugins/expansion/selectors.mjs +5 -5
- package/internals/plugins/focus/selectors.d.mts +3 -2
- package/internals/plugins/focus/selectors.d.ts +3 -2
- package/internals/plugins/focus/selectors.js +3 -3
- package/internals/plugins/focus/selectors.mjs +4 -4
- package/internals/plugins/id/selectors.d.mts +6 -3
- package/internals/plugins/id/selectors.d.ts +6 -3
- package/internals/plugins/id/selectors.js +4 -5
- package/internals/plugins/id/selectors.mjs +4 -5
- package/internals/plugins/items/selectors.d.mts +9 -8
- package/internals/plugins/items/selectors.d.ts +9 -8
- package/internals/plugins/items/selectors.js +15 -16
- package/internals/plugins/items/selectors.mjs +15 -16
- package/internals/plugins/labelEditing/selectors.d.mts +3 -2
- package/internals/plugins/labelEditing/selectors.d.ts +3 -2
- package/internals/plugins/labelEditing/selectors.js +6 -5
- package/internals/plugins/labelEditing/selectors.mjs +6 -5
- package/internals/plugins/lazyLoading/selectors.d.mts +9 -3
- package/internals/plugins/lazyLoading/selectors.d.ts +9 -3
- package/internals/plugins/lazyLoading/selectors.js +10 -6
- package/internals/plugins/lazyLoading/selectors.mjs +10 -6
- package/internals/plugins/lazyLoading/types.d.mts +5 -1
- package/internals/plugins/lazyLoading/types.d.ts +5 -1
- package/internals/plugins/selection/selectors.d.mts +15 -9
- package/internals/plugins/selection/selectors.d.ts +15 -9
- package/internals/plugins/selection/selectors.js +12 -12
- package/internals/plugins/selection/selectors.mjs +13 -13
- package/package.json +19 -7
- package/useTreeItem/useTreeItem.js +3 -3
- package/useTreeItem/useTreeItem.mjs +3 -3
package/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view v9.
|
|
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.
|
|
81
|
-
newMinimalState.treeId =
|
|
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,
|
|
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.
|
|
74
|
-
newMinimalState.treeId =
|
|
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:
|
|
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:
|
|
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,
|
|
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:
|
|
20
|
-
slotProps:
|
|
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,
|
|
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:
|
|
20
|
-
slotProps:
|
|
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:
|
|
50
|
-
slotProps:
|
|
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:
|
|
50
|
-
slotProps:
|
|
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:
|
|
114
|
+
children: renderedChildren
|
|
58
115
|
}));
|
|
59
116
|
}, _fastObjectShallowCompare.fastObjectShallowCompare);
|
|
60
117
|
if (process.env.NODE_ENV !== "production") RichTreeViewItem.displayName = "RichTreeViewItem";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
5
5
|
const _excluded = ["ownerState"];
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { EMPTY_ARRAY } from '@base-ui/utils/empty';
|
|
@@ -12,12 +12,62 @@ import { TreeItem } from "../../TreeItem/index.mjs";
|
|
|
12
12
|
import { itemsSelectors } from "../plugins/items/index.mjs";
|
|
13
13
|
import { useTreeViewContext, useTreeViewStyleContext } from "../TreeViewProvider/index.mjs";
|
|
14
14
|
import { expansionSelectors } from "../plugins/expansion/index.mjs";
|
|
15
|
+
import { lazyLoadingSelectors } from "../plugins/lazyLoading/index.mjs";
|
|
16
|
+
import { RichTreeViewItemLoaders, RichTreeViewLoadingContext, getLoadingItemsCount, MAX_LOADING_ITEMS_COUNT } from "./RichTreeViewLoading.mjs";
|
|
15
17
|
import { useTreeViewRootProps } from "../hooks/useTreeViewRootProps.mjs";
|
|
16
18
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
17
19
|
const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
|
|
18
20
|
if (process.env.NODE_ENV !== "production") RichTreeViewItemsContext.displayName = "RichTreeViewItemsContext";
|
|
19
21
|
const selectorNoChildren = () => EMPTY_ARRAY;
|
|
20
22
|
const selectorChildrenIdsNull = state => itemsSelectors.itemOrderedChildrenIds(state, null);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Renders the loading rows for the children of an item that lazily loads them.
|
|
26
|
+
* It only mounts while the item is loading, so the `loading` slot props are not
|
|
27
|
+
* resolved for the other items.
|
|
28
|
+
*/
|
|
29
|
+
function RichTreeViewItemLoadingChildren({
|
|
30
|
+
itemId
|
|
31
|
+
}) {
|
|
32
|
+
const {
|
|
33
|
+
store
|
|
34
|
+
} = useTreeViewContext();
|
|
35
|
+
const {
|
|
36
|
+
classes,
|
|
37
|
+
slots: styleSlots,
|
|
38
|
+
slotProps: styleSlotProps
|
|
39
|
+
} = useTreeViewStyleContext();
|
|
40
|
+
const itemDepth = useStore(store, itemsSelectors.itemDepth, itemId);
|
|
41
|
+
const loadingChildrenCount = useStore(store, lazyLoadingSelectors.itemLoadingChildrenCount, itemId);
|
|
42
|
+
const Loading = styleSlots.loading;
|
|
43
|
+
const loadingProps = useSlotProps({
|
|
44
|
+
elementType: Loading ?? 'div',
|
|
45
|
+
externalSlotProps: styleSlotProps.loading,
|
|
46
|
+
ownerState: {
|
|
47
|
+
itemId
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// The count reported by `getChildrenCount()` wins over `slotProps.loading.itemsCount`,
|
|
52
|
+
// which only acts as a fallback when the count is unknown.
|
|
53
|
+
const itemsCount = loadingChildrenCount > 0 ? Math.min(loadingChildrenCount, MAX_LOADING_ITEMS_COUNT) : getLoadingItemsCount(loadingProps.itemsCount);
|
|
54
|
+
return /*#__PURE__*/_jsx(RichTreeViewLoadingContext, {
|
|
55
|
+
store: store,
|
|
56
|
+
itemDepth: itemDepth + 1,
|
|
57
|
+
children: Loading ? /*#__PURE__*/_jsx(Loading, _extends({}, loadingProps, {
|
|
58
|
+
itemsCount: itemsCount
|
|
59
|
+
})) : /*#__PURE__*/_jsx(RichTreeViewItemLoaders, {
|
|
60
|
+
classes: classes,
|
|
61
|
+
slots: {
|
|
62
|
+
itemLoader: styleSlots.itemLoader
|
|
63
|
+
},
|
|
64
|
+
slotProps: {
|
|
65
|
+
itemLoader: styleSlotProps.itemLoader
|
|
66
|
+
},
|
|
67
|
+
itemsCount: itemsCount
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
}
|
|
21
71
|
export const RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewItem({
|
|
22
72
|
itemSlot,
|
|
23
73
|
itemSlotProps,
|
|
@@ -30,6 +80,7 @@ export const RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewIte
|
|
|
30
80
|
} = useTreeViewContext();
|
|
31
81
|
const itemMeta = useStore(store, itemsSelectors.itemMeta, itemId);
|
|
32
82
|
const children = useStore(store, skipChildren ? selectorNoChildren : itemsSelectors.itemOrderedChildrenIds, itemId);
|
|
83
|
+
const isLoadingChildren = useStore(store, lazyLoadingSelectors.isItemLoading, itemId);
|
|
33
84
|
const Item = itemSlot ?? TreeItem;
|
|
34
85
|
const _useSlotProps = useSlotProps({
|
|
35
86
|
elementType: Item,
|
|
@@ -45,8 +96,14 @@ export const RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewIte
|
|
|
45
96
|
}
|
|
46
97
|
}),
|
|
47
98
|
itemProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded);
|
|
99
|
+
let renderedChildren = renderItemForRichTreeView ? children?.map(renderItemForRichTreeView) : null;
|
|
100
|
+
if (isLoadingChildren && !skipChildren && (children == null || children.length === 0)) {
|
|
101
|
+
renderedChildren = /*#__PURE__*/_jsx(RichTreeViewItemLoadingChildren, {
|
|
102
|
+
itemId: itemId
|
|
103
|
+
});
|
|
104
|
+
}
|
|
48
105
|
return /*#__PURE__*/_jsx(Item, _extends({}, itemProps, {
|
|
49
|
-
children:
|
|
106
|
+
children: renderedChildren
|
|
50
107
|
}));
|
|
51
108
|
}, fastObjectShallowCompare);
|
|
52
109
|
if (process.env.NODE_ENV !== "production") RichTreeViewItem.displayName = "RichTreeViewItem";
|