@mui/x-tree-view 7.22.1 → 8.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +486 -11
- package/README.md +4 -4
- package/RichTreeView/RichTreeView.js +22 -5
- package/RichTreeView/RichTreeView.types.d.ts +4 -17
- package/SimpleTreeView/SimpleTreeView.js +21 -3
- package/TreeItem/TreeItem.d.ts +20 -2
- package/TreeItem/TreeItem.js +241 -371
- package/TreeItem/TreeItem.types.d.ts +52 -85
- package/TreeItem/index.d.ts +1 -4
- package/TreeItem/index.js +2 -4
- package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +7 -0
- package/{modern/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.d.ts → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.d.ts} +1 -1
- package/TreeItemDragAndDropOverlay/index.d.ts +2 -0
- package/TreeItemDragAndDropOverlay/index.js +1 -0
- package/{TreeItem2LabelInput → TreeItemDragAndDropOverlay}/package.json +1 -1
- package/TreeItemIcon/TreeItemIcon.d.ts +7 -0
- package/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/{TreeItem2Icon/TreeItem2Icon.types.d.ts → TreeItemIcon/TreeItemIcon.types.d.ts} +7 -7
- package/TreeItemIcon/index.d.ts +2 -0
- package/TreeItemIcon/index.js +1 -0
- package/{useTreeItem2 → TreeItemIcon}/package.json +1 -1
- package/TreeItemLabelInput/TreeItemLabelInput.d.ts +5 -0
- package/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/{TreeItem2LabelInput/TreeItem2LabelInput.types.d.ts → TreeItemLabelInput/TreeItemLabelInput.types.d.ts} +1 -1
- package/TreeItemLabelInput/index.d.ts +2 -0
- package/TreeItemLabelInput/index.js +1 -0
- package/{TreeItem2Provider → TreeItemLabelInput}/package.json +1 -1
- package/TreeItemProvider/TreeItemProvider.d.ts +9 -0
- package/TreeItemProvider/TreeItemProvider.js +43 -0
- package/{TreeItem2Provider/TreeItem2Provider.types.d.ts → TreeItemProvider/TreeItemProvider.types.d.ts} +2 -1
- package/TreeItemProvider/index.d.ts +2 -0
- package/TreeItemProvider/index.js +1 -0
- package/{TreeItem2Icon → TreeItemProvider}/package.json +1 -1
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +2 -1
- package/hooks/useTreeItemModel.d.ts +2 -0
- package/hooks/useTreeItemModel.js +11 -0
- package/hooks/useTreeItemUtils/index.d.ts +1 -0
- package/hooks/useTreeItemUtils/index.js +1 -0
- package/hooks/{useTreeItem2Utils/useTreeItem2Utils.d.ts → useTreeItemUtils/useTreeItemUtils.d.ts} +13 -12
- package/{modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js → hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
- package/index.d.ts +5 -7
- package/index.js +6 -8
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +3 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +2 -1
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +5 -2
- package/internals/components/RichTreeViewItems.d.ts +3 -6
- package/internals/components/RichTreeViewItems.js +42 -30
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +36 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +1 -5
- package/internals/hooks/useSelector.d.ts +4 -0
- package/internals/hooks/useSelector.js +6 -0
- package/internals/index.d.ts +6 -1
- package/internals/index.js +5 -1
- package/internals/models/helpers.d.ts +0 -2
- package/internals/models/itemPlugin.d.ts +13 -10
- package/internals/models/plugin.d.ts +20 -8
- package/internals/models/treeView.d.ts +6 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +124 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +8 -15
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +1 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +182 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -16
- package/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/internals/plugins/useTreeViewItems/index.d.ts +1 -1
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +718 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +16 -55
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +1 -1
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +74 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +13 -29
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +2 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +32 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +39 -9
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +20 -1
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
- package/internals/useTreeView/useTreeView.js +30 -17
- package/internals/useTreeView/useTreeView.types.d.ts +1 -2
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +3 -1
- package/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/internals/utils/TreeViewStore.d.ts +12 -0
- package/internals/utils/TreeViewStore.js +24 -0
- package/internals/utils/selectors.d.ts +9 -0
- package/internals/utils/selectors.js +37 -0
- package/internals/utils/tree.d.ts +8 -8
- package/internals/utils/tree.js +51 -43
- package/models/items.d.ts +7 -2
- package/modern/RichTreeView/RichTreeView.js +22 -5
- package/modern/SimpleTreeView/SimpleTreeView.js +21 -3
- package/modern/TreeItem/TreeItem.js +241 -371
- package/modern/TreeItem/index.js +2 -4
- package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +8 -6
- package/modern/TreeItemDragAndDropOverlay/index.js +1 -0
- package/modern/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +5 -3
- package/modern/TreeItemIcon/index.js +1 -0
- package/modern/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/modern/TreeItemLabelInput/index.js +1 -0
- package/modern/TreeItemProvider/TreeItemProvider.js +43 -0
- package/modern/TreeItemProvider/index.js +1 -0
- package/modern/hooks/index.js +2 -1
- package/modern/hooks/useTreeItemModel.js +11 -0
- package/modern/hooks/useTreeItemUtils/index.js +1 -0
- package/{hooks/useTreeItem2Utils/useTreeItem2Utils.js → modern/hooks/useTreeItemUtils/useTreeItemUtils.js} +36 -18
- package/modern/index.js +6 -8
- package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/modern/internals/components/RichTreeViewItems.js +42 -30
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.js +10 -11
- package/modern/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +9 -0
- package/modern/internals/hooks/useSelector.js +6 -0
- package/modern/internals/index.js +5 -1
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +17 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +7 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +34 -0
- package/modern/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +15 -13
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +58 -100
- package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +103 -0
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +29 -26
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/modern/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +26 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +88 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +79 -43
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +9 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +105 -0
- package/modern/internals/useTreeView/useTreeView.js +30 -17
- package/modern/internals/useTreeView/useTreeViewBuildContext.js +24 -18
- package/modern/internals/utils/TreeViewStore.js +24 -0
- package/modern/internals/utils/selectors.js +37 -0
- package/modern/internals/utils/tree.js +51 -43
- package/modern/useTreeItem/index.js +1 -0
- package/modern/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
- package/node/RichTreeView/RichTreeView.js +22 -5
- package/node/SimpleTreeView/SimpleTreeView.js +21 -3
- package/node/TreeItem/TreeItem.js +242 -372
- package/node/TreeItem/index.js +38 -16
- package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js} +7 -6
- package/node/TreeItemDragAndDropOverlay/index.js +12 -0
- package/node/{TreeItem2Icon/TreeItem2Icon.js → TreeItemIcon/TreeItemIcon.js} +4 -3
- package/node/TreeItemIcon/index.js +12 -0
- package/node/{TreeItem2LabelInput/TreeItem2LabelInput.js → TreeItemLabelInput/TreeItemLabelInput.js} +3 -3
- package/node/TreeItemLabelInput/index.js +12 -0
- package/node/{TreeItem2Provider/TreeItem2Provider.js → TreeItemProvider/TreeItemProvider.js} +22 -6
- package/node/TreeItemProvider/index.js +12 -0
- package/node/hooks/index.js +10 -3
- package/node/hooks/useTreeItemModel.js +17 -0
- package/node/hooks/useTreeItemUtils/index.js +12 -0
- package/node/hooks/{useTreeItem2Utils/useTreeItem2Utils.js → useTreeItemUtils/useTreeItemUtils.js} +37 -19
- package/node/index.js +18 -42
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +6 -22
- package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -2
- package/node/internals/components/RichTreeViewItems.js +42 -30
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.js +12 -13
- package/node/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +15 -0
- package/node/internals/hooks/useSelector.js +13 -0
- package/node/internals/index.js +47 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +36 -24
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js +23 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.js +14 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +62 -40
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js +40 -0
- package/node/internals/plugins/useTreeViewIcons/useTreeViewIcons.js +16 -13
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +60 -102
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +109 -0
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +30 -27
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +27 -18
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.js +13 -5
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +19 -30
- package/node/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js +32 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.js +96 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +78 -42
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js +15 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +109 -2
- package/node/internals/useTreeView/useTreeView.js +30 -17
- package/node/internals/useTreeView/useTreeViewBuildContext.js +25 -18
- package/node/internals/utils/TreeViewStore.js +31 -0
- package/node/internals/utils/selectors.js +44 -0
- package/node/internals/utils/tree.js +51 -43
- package/node/useTreeItem/index.js +12 -0
- package/node/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +46 -53
- package/package.json +7 -5
- package/themeAugmentation/components.d.ts +0 -10
- package/themeAugmentation/overrides.d.ts +0 -3
- package/themeAugmentation/props.d.ts +1 -5
- package/useTreeItem/index.d.ts +2 -0
- package/useTreeItem/index.js +1 -0
- package/{TreeItem2 → useTreeItem}/package.json +1 -1
- package/useTreeItem/useTreeItem.d.ts +2 -0
- package/{useTreeItem2/useTreeItem2.js → useTreeItem/useTreeItem.js} +45 -51
- package/{useTreeItem2/useTreeItem2.types.d.ts → useTreeItem/useTreeItem.types.d.ts} +51 -58
- package/TreeItem/TreeItemContent.d.ts +0 -61
- package/TreeItem/TreeItemContent.js +0 -146
- package/TreeItem/useTreeItemState.d.ts +0 -21
- package/TreeItem/useTreeItemState.js +0 -143
- package/TreeItem2/TreeItem2.d.ts +0 -34
- package/TreeItem2/TreeItem2.js +0 -387
- package/TreeItem2/TreeItem2.types.d.ts +0 -92
- package/TreeItem2/index.d.ts +0 -2
- package/TreeItem2/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.d.ts +0 -7
- package/TreeItem2DragAndDropOverlay/index.d.ts +0 -2
- package/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/TreeItem2DragAndDropOverlay/package.json +0 -6
- package/TreeItem2Icon/TreeItem2Icon.d.ts +0 -7
- package/TreeItem2Icon/index.d.ts +0 -2
- package/TreeItem2Icon/index.js +0 -1
- package/TreeItem2LabelInput/TreeItem2LabelInput.d.ts +0 -5
- package/TreeItem2LabelInput/index.d.ts +0 -2
- package/TreeItem2LabelInput/index.js +0 -1
- package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -6
- package/TreeItem2Provider/TreeItem2Provider.js +0 -26
- package/TreeItem2Provider/index.d.ts +0 -2
- package/TreeItem2Provider/index.js +0 -1
- package/TreeView/TreeView.d.ts +0 -21
- package/TreeView/TreeView.js +0 -211
- package/TreeView/TreeView.types.d.ts +0 -9
- package/TreeView/index.d.ts +0 -3
- package/TreeView/index.js +0 -3
- package/TreeView/package.json +0 -6
- package/TreeView/treeViewClasses.d.ts +0 -7
- package/TreeView/treeViewClasses.js +0 -6
- package/hooks/useTreeItem2Utils/index.d.ts +0 -1
- package/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/TreeItem/TreeItemContent.js +0 -146
- package/modern/TreeItem/useTreeItemState.js +0 -143
- package/modern/TreeItem2/TreeItem2.js +0 -387
- package/modern/TreeItem2/index.js +0 -1
- package/modern/TreeItem2DragAndDropOverlay/index.js +0 -1
- package/modern/TreeItem2Icon/index.js +0 -1
- package/modern/TreeItem2LabelInput/index.js +0 -1
- package/modern/TreeItem2Provider/TreeItem2Provider.js +0 -26
- package/modern/TreeItem2Provider/TreeItem2Provider.types.js +0 -1
- package/modern/TreeItem2Provider/index.js +0 -1
- package/modern/TreeView/TreeView.js +0 -211
- package/modern/TreeView/TreeView.types.js +0 -1
- package/modern/TreeView/index.js +0 -3
- package/modern/TreeView/treeViewClasses.js +0 -6
- package/modern/hooks/useTreeItem2Utils/index.js +0 -1
- package/modern/useTreeItem2/index.js +0 -4
- package/modern/useTreeItem2/useTreeItem2.types.js +0 -1
- package/node/TreeItem/TreeItemContent.js +0 -153
- package/node/TreeItem/useTreeItemState.js +0 -148
- package/node/TreeItem2/TreeItem2.js +0 -394
- package/node/TreeItem2/index.js +0 -48
- package/node/TreeItem2DragAndDropOverlay/index.js +0 -12
- package/node/TreeItem2Icon/index.js +0 -12
- package/node/TreeItem2LabelInput/index.js +0 -12
- package/node/TreeItem2Provider/index.js +0 -12
- package/node/TreeView/TreeView.js +0 -217
- package/node/TreeView/TreeView.types.js +0 -5
- package/node/TreeView/index.js +0 -27
- package/node/TreeView/treeViewClasses.js +0 -14
- package/node/hooks/useTreeItem2Utils/index.js +0 -12
- package/node/useTreeItem2/index.js +0 -10
- package/node/useTreeItem2/useTreeItem2.types.js +0 -5
- package/useTreeItem2/index.d.ts +0 -3
- package/useTreeItem2/index.js +0 -4
- package/useTreeItem2/useTreeItem2.d.ts +0 -2
- package/useTreeItem2/useTreeItem2.types.js +0 -1
- /package/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/{TreeItem2Provider/TreeItem2Provider.types.js → modern/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/{TreeView/TreeView.types.js → modern/TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/modern/{TreeItem2/TreeItem2.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/modern/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/modern/{TreeItem2Icon/TreeItem2Icon.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/node/{TreeItem2/TreeItem2.types.js → TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.types.js} +0 -0
- /package/node/{TreeItem2DragAndDropOverlay/TreeItem2DragAndDropOverlay.types.js → TreeItemIcon/TreeItemIcon.types.js} +0 -0
- /package/node/{TreeItem2Icon/TreeItem2Icon.types.js → TreeItemLabelInput/TreeItemLabelInput.types.js} +0 -0
- /package/node/{TreeItem2LabelInput/TreeItem2LabelInput.types.js → TreeItemProvider/TreeItemProvider.types.js} +0 -0
- /package/node/{TreeItem2Provider/TreeItem2Provider.types.js → useTreeItem/useTreeItem.types.js} +0 -0
- /package/{modern/TreeItem2LabelInput/TreeItem2LabelInput.types.js → useTreeItem/useTreeItem.types.js} +0 -0
|
@@ -1,40 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
1
3
|
import { useTreeViewContext } from "../../internals/TreeViewProvider/index.js";
|
|
2
4
|
import { useTreeViewLabel } from "../../internals/plugins/useTreeViewLabel/index.js";
|
|
3
5
|
import { hasPlugin } from "../../internals/utils/plugins.js";
|
|
6
|
+
import { useSelector } from "../../internals/hooks/useSelector.js";
|
|
7
|
+
import { selectorIsItemExpanded } from "../../internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.js";
|
|
8
|
+
import { selectorIsItemFocused } from "../../internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.js";
|
|
9
|
+
import { selectorIsItemDisabled } from "../../internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
10
|
+
import { selectorIsItemSelected } from "../../internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.js";
|
|
11
|
+
import { selectorIsItemBeingEdited, selectorIsItemEditable } from "../../internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.js";
|
|
4
12
|
|
|
5
13
|
/**
|
|
6
|
-
* Plugins that need to be present in the Tree View in order for `
|
|
14
|
+
* Plugins that need to be present in the Tree View in order for `useTreeItemUtils` to work correctly.
|
|
7
15
|
*/
|
|
8
16
|
|
|
9
17
|
/**
|
|
10
|
-
* Plugins that `
|
|
18
|
+
* Plugins that `useTreeItemUtils` can use if they are present, but are not required.
|
|
11
19
|
*/
|
|
12
20
|
|
|
13
|
-
const isItemExpandable = reactChildren => {
|
|
21
|
+
export const isItemExpandable = reactChildren => {
|
|
14
22
|
if (Array.isArray(reactChildren)) {
|
|
15
23
|
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
16
24
|
}
|
|
17
25
|
return Boolean(reactChildren);
|
|
18
26
|
};
|
|
19
|
-
export const
|
|
27
|
+
export const useTreeItemUtils = ({
|
|
20
28
|
itemId,
|
|
21
29
|
children
|
|
22
30
|
}) => {
|
|
23
31
|
const {
|
|
24
32
|
instance,
|
|
33
|
+
label,
|
|
34
|
+
store,
|
|
25
35
|
selection: {
|
|
26
36
|
multiSelect
|
|
27
37
|
},
|
|
28
38
|
publicAPI
|
|
29
39
|
} = useTreeViewContext();
|
|
40
|
+
const isExpanded = useSelector(store, selectorIsItemExpanded, itemId);
|
|
41
|
+
const isFocused = useSelector(store, selectorIsItemFocused, itemId);
|
|
42
|
+
const isSelected = useSelector(store, selectorIsItemSelected, itemId);
|
|
43
|
+
const isDisabled = useSelector(store, selectorIsItemDisabled, itemId);
|
|
44
|
+
const isEditing = useSelector(store, state => label == null ? false : selectorIsItemBeingEdited(state, itemId));
|
|
45
|
+
const isEditable = useSelector(store, state => label == null ? false : selectorIsItemEditable(state, {
|
|
46
|
+
itemId,
|
|
47
|
+
isItemEditable: label.isItemEditable
|
|
48
|
+
}));
|
|
30
49
|
const status = {
|
|
31
50
|
expandable: isItemExpandable(children),
|
|
32
|
-
expanded:
|
|
33
|
-
focused:
|
|
34
|
-
selected:
|
|
35
|
-
disabled:
|
|
36
|
-
editing:
|
|
37
|
-
editable:
|
|
51
|
+
expanded: isExpanded,
|
|
52
|
+
focused: isFocused,
|
|
53
|
+
selected: isSelected,
|
|
54
|
+
disabled: isDisabled,
|
|
55
|
+
editing: isEditing,
|
|
56
|
+
editable: isEditable
|
|
38
57
|
};
|
|
39
58
|
const handleExpansion = event => {
|
|
40
59
|
if (status.disabled) {
|
|
@@ -46,7 +65,7 @@ export const useTreeItem2Utils = ({
|
|
|
46
65
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
47
66
|
|
|
48
67
|
// If already expanded and trying to toggle selection don't close
|
|
49
|
-
if (status.expandable && !(multiple &&
|
|
68
|
+
if (status.expandable && !(multiple && selectorIsItemExpanded(store.value, itemId))) {
|
|
50
69
|
instance.toggleItemExpansion(event, itemId);
|
|
51
70
|
}
|
|
52
71
|
};
|
|
@@ -93,15 +112,15 @@ export const useTreeItem2Utils = ({
|
|
|
93
112
|
if (!hasPlugin(instance, useTreeViewLabel)) {
|
|
94
113
|
return;
|
|
95
114
|
}
|
|
96
|
-
if (
|
|
97
|
-
if (
|
|
115
|
+
if (isEditable) {
|
|
116
|
+
if (isEditing) {
|
|
98
117
|
instance.setEditedItemId(null);
|
|
99
118
|
} else {
|
|
100
119
|
instance.setEditedItemId(itemId);
|
|
101
120
|
}
|
|
102
121
|
}
|
|
103
122
|
};
|
|
104
|
-
const handleSaveItemLabel = (event,
|
|
123
|
+
const handleSaveItemLabel = (event, newLabel) => {
|
|
105
124
|
if (!hasPlugin(instance, useTreeViewLabel)) {
|
|
106
125
|
return;
|
|
107
126
|
}
|
|
@@ -109,9 +128,8 @@ export const useTreeItem2Utils = ({
|
|
|
109
128
|
// As a side effect of `instance.focusItem` called here and in `handleCancelItemLabelEditing` the `labelInput` is blurred
|
|
110
129
|
// The `onBlur` event is triggered, which calls `handleSaveItemLabel` again.
|
|
111
130
|
// To avoid creating an unwanted behavior we need to check if the item is being edited before calling `updateItemLabel`
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
instance.updateItemLabel(itemId, label);
|
|
131
|
+
if (selectorIsItemBeingEdited(store.value, itemId)) {
|
|
132
|
+
instance.updateItemLabel(itemId, newLabel);
|
|
115
133
|
toggleItemEditing();
|
|
116
134
|
instance.focusItem(event, itemId);
|
|
117
135
|
}
|
|
@@ -120,7 +138,7 @@ export const useTreeItem2Utils = ({
|
|
|
120
138
|
if (!hasPlugin(instance, useTreeViewLabel)) {
|
|
121
139
|
return;
|
|
122
140
|
}
|
|
123
|
-
if (
|
|
141
|
+
if (selectorIsItemBeingEdited(store.value, itemId)) {
|
|
124
142
|
toggleItemEditing();
|
|
125
143
|
instance.focusItem(event, itemId);
|
|
126
144
|
}
|
package/index.d.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
export * from './TreeView';
|
|
2
1
|
export * from './SimpleTreeView';
|
|
3
2
|
export * from './RichTreeView';
|
|
4
3
|
export * from './TreeItem';
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './
|
|
10
|
-
export * from './TreeItem2LabelInput';
|
|
4
|
+
export * from './useTreeItem';
|
|
5
|
+
export * from './TreeItemIcon';
|
|
6
|
+
export * from './TreeItemProvider';
|
|
7
|
+
export * from './TreeItemDragAndDropOverlay';
|
|
8
|
+
export * from './TreeItemLabelInput';
|
|
11
9
|
export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
|
|
12
10
|
export * from './models';
|
|
13
11
|
export * from './icons';
|
package/index.js
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view
|
|
2
|
+
* @mui/x-tree-view v8.0.0-alpha.1
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
// Tree View
|
|
9
|
-
export * from "./TreeView/index.js";
|
|
10
9
|
export * from "./SimpleTreeView/index.js";
|
|
11
10
|
export * from "./RichTreeView/index.js";
|
|
12
11
|
|
|
13
12
|
// Tree Item
|
|
14
13
|
export * from "./TreeItem/index.js";
|
|
15
|
-
export * from "./
|
|
16
|
-
export * from "./
|
|
17
|
-
export * from "./
|
|
18
|
-
export * from "./
|
|
19
|
-
export * from "./
|
|
20
|
-
export * from "./TreeItem2LabelInput/index.js";
|
|
14
|
+
export * from "./useTreeItem/index.js";
|
|
15
|
+
export * from "./TreeItemIcon/index.js";
|
|
16
|
+
export * from "./TreeItemProvider/index.js";
|
|
17
|
+
export * from "./TreeItemDragAndDropOverlay/index.js";
|
|
18
|
+
export * from "./TreeItemLabelInput/index.js";
|
|
21
19
|
export { unstable_resetCleanupTracking } from "./internals/hooks/useInstanceEventHandler.js";
|
|
22
20
|
export * from "./models/index.js";
|
|
23
21
|
export * from "./icons/index.js";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { TreeViewItemId } from '../../models';
|
|
3
|
-
|
|
3
|
+
import { TreeViewState } from '../models';
|
|
4
|
+
import type { UseTreeViewItemsSignature } from '../plugins/useTreeViewItems';
|
|
5
|
+
export declare const TreeViewItemDepthContext: React.Context<number | ((state: TreeViewState<[UseTreeViewItemsSignature]>, itemId: TreeViewItemId) => number)>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
export declare const TreeViewChildrenItemContext: React.Context<TreeViewChildrenItemContextValue | null>;
|
|
3
3
|
interface TreeViewChildrenItemProviderProps {
|
|
4
|
-
itemId
|
|
4
|
+
itemId: string | null;
|
|
5
|
+
idAttribute: string | null;
|
|
5
6
|
children: React.ReactNode;
|
|
6
7
|
}
|
|
7
8
|
export declare function TreeViewChildrenItemProvider(props: TreeViewChildrenItemProviderProps): React.JSX.Element;
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { useTreeViewContext } from "./useTreeViewContext.js";
|
|
4
4
|
import { escapeOperandAttributeSelector } from "../utils/utils.js";
|
|
5
|
-
import {
|
|
5
|
+
import { selectorItemOrderedChildrenIds } from "../plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
export const TreeViewChildrenItemContext = /*#__PURE__*/React.createContext(null);
|
|
8
8
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -11,11 +11,12 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
11
11
|
export function TreeViewChildrenItemProvider(props) {
|
|
12
12
|
const {
|
|
13
13
|
children,
|
|
14
|
-
itemId = null
|
|
14
|
+
itemId = null,
|
|
15
|
+
idAttribute
|
|
15
16
|
} = props;
|
|
16
17
|
const {
|
|
17
18
|
instance,
|
|
18
|
-
|
|
19
|
+
store,
|
|
19
20
|
rootRef
|
|
20
21
|
} = useTreeViewContext();
|
|
21
22
|
const childrenIdAttrToIdRef = React.useRef(new Map());
|
|
@@ -23,25 +24,8 @@ export function TreeViewChildrenItemProvider(props) {
|
|
|
23
24
|
if (!rootRef.current) {
|
|
24
25
|
return;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
idAttr = rootRef.current.id;
|
|
29
|
-
} else {
|
|
30
|
-
// Undefined during 1st render
|
|
31
|
-
const itemMeta = instance.getItemMeta(itemId);
|
|
32
|
-
if (itemMeta !== undefined) {
|
|
33
|
-
idAttr = generateTreeItemIdAttribute({
|
|
34
|
-
itemId,
|
|
35
|
-
treeId,
|
|
36
|
-
id: itemMeta.idAttribute
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (idAttr == null) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const previousChildrenIds = instance.getItemOrderedChildrenIds(itemId ?? null) ?? [];
|
|
44
|
-
const escapedIdAttr = escapeOperandAttributeSelector(idAttr);
|
|
27
|
+
const previousChildrenIds = selectorItemOrderedChildrenIds(store.value, itemId ?? null) ?? [];
|
|
28
|
+
const escapedIdAttr = escapeOperandAttributeSelector(idAttribute ?? rootRef.current.id);
|
|
45
29
|
const childrenElements = rootRef.current.querySelectorAll(`${itemId == null ? '' : `*[id="${escapedIdAttr}"] `}[role="treeitem"]:not(*[id="${escapedIdAttr}"] [role="treeitem"] [role="treeitem"])`);
|
|
46
30
|
const childrenIds = Array.from(childrenElements).map(child => childrenIdAttrToIdRef.current.get(child.id));
|
|
47
31
|
const hasChanged = childrenIds.length !== previousChildrenIds.length || childrenIds.some((childId, index) => childId !== previousChildrenIds[index]);
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { MergeSignaturesProperty, TreeItemWrapper, TreeRootWrapper, TreeViewAnyPluginSignature, TreeViewInstance, TreeViewItemPluginResponse, TreeViewPublicAPI } from '../models';
|
|
3
|
+
import { TreeViewStore } from '../utils/TreeViewStore';
|
|
3
4
|
import { TreeViewCorePluginSignatures } from '../corePlugins';
|
|
4
|
-
|
|
5
|
+
import type { TreeItemProps } from '../../TreeItem/TreeItem.types';
|
|
6
|
+
export type TreeViewItemPluginsRunner = (props: TreeItemProps) => Required<TreeViewItemPluginResponse>;
|
|
5
7
|
export type TreeViewContextValue<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'contextValue'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'contextValue'>> & {
|
|
6
8
|
instance: TreeViewInstance<TSignatures, TOptionalSignatures>;
|
|
7
9
|
publicAPI: TreeViewPublicAPI<TSignatures, TOptionalSignatures>;
|
|
10
|
+
store: TreeViewStore<TSignatures>;
|
|
8
11
|
rootRef: React.RefObject<HTMLUListElement>;
|
|
9
12
|
wrapItem: TreeItemWrapper<TSignatures>;
|
|
10
|
-
wrapRoot: TreeRootWrapper
|
|
13
|
+
wrapRoot: TreeRootWrapper;
|
|
11
14
|
runItemPlugins: TreeViewItemPluginsRunner;
|
|
12
15
|
};
|
|
13
16
|
export interface TreeViewProviderProps<TSignatures extends readonly TreeViewAnyPluginSignature[]> {
|
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { SlotComponentProps } from '@mui/utils';
|
|
3
3
|
import { TreeItem, TreeItemProps } from '../../TreeItem';
|
|
4
|
-
import { TreeItem2Props } from '../../TreeItem2';
|
|
5
4
|
import { TreeViewItemId } from '../../models';
|
|
6
|
-
|
|
5
|
+
export declare function RichTreeViewItems(props: RichTreeViewItemsProps): React.JSX.Element;
|
|
7
6
|
interface RichTreeViewItemsOwnerState {
|
|
8
7
|
itemId: TreeViewItemId;
|
|
9
8
|
label: string;
|
|
10
9
|
}
|
|
11
10
|
export interface RichTreeViewItemsSlots {
|
|
12
11
|
/**
|
|
13
|
-
* Custom component
|
|
12
|
+
* Custom component to render a Tree Item.
|
|
14
13
|
* @default TreeItem.
|
|
15
14
|
*/
|
|
16
|
-
item?: React.JSXElementConstructor<TreeItemProps
|
|
15
|
+
item?: React.JSXElementConstructor<TreeItemProps>;
|
|
17
16
|
}
|
|
18
17
|
export interface RichTreeViewItemsSlotProps {
|
|
19
18
|
item?: SlotComponentProps<typeof TreeItem, {}, RichTreeViewItemsOwnerState>;
|
|
20
19
|
}
|
|
21
20
|
export interface RichTreeViewItemsProps {
|
|
22
|
-
itemsToRender: TreeViewItemToRenderProps[];
|
|
23
21
|
/**
|
|
24
22
|
* Overridable component slots.
|
|
25
23
|
* @default {}
|
|
@@ -31,5 +29,4 @@ export interface RichTreeViewItemsProps {
|
|
|
31
29
|
*/
|
|
32
30
|
slotProps?: RichTreeViewItemsSlotProps;
|
|
33
31
|
}
|
|
34
|
-
export declare function RichTreeViewItems(props: RichTreeViewItemsProps): React.JSX.Element;
|
|
35
32
|
export {};
|
|
@@ -3,54 +3,66 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
|
|
|
3
3
|
const _excluded = ["ownerState"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import useSlotProps from '@mui/utils/useSlotProps';
|
|
6
|
+
import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
|
|
6
7
|
import { TreeItem } from "../../TreeItem/index.js";
|
|
8
|
+
import { useSelector } from "../hooks/useSelector.js";
|
|
9
|
+
import { selectorItemMeta, selectorItemOrderedChildrenIds } from "../plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
10
|
+
import { useTreeViewContext } from "../TreeViewProvider/index.js";
|
|
7
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
|
|
13
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
14
|
+
RichTreeViewItemsContext.displayName = 'RichTreeViewItemsProvider';
|
|
15
|
+
}
|
|
16
|
+
const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
|
|
17
|
+
itemSlot,
|
|
18
|
+
itemSlotProps,
|
|
19
|
+
itemId
|
|
15
20
|
}) {
|
|
16
|
-
const
|
|
21
|
+
const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext);
|
|
22
|
+
const {
|
|
23
|
+
store
|
|
24
|
+
} = useTreeViewContext();
|
|
25
|
+
const itemMeta = useSelector(store, selectorItemMeta, itemId);
|
|
26
|
+
const children = useSelector(store, selectorItemOrderedChildrenIds, itemId);
|
|
27
|
+
const Item = itemSlot ?? TreeItem;
|
|
17
28
|
const _useSlotProps = useSlotProps({
|
|
18
29
|
elementType: Item,
|
|
19
|
-
externalSlotProps:
|
|
30
|
+
externalSlotProps: itemSlotProps,
|
|
20
31
|
additionalProps: {
|
|
21
|
-
|
|
22
|
-
id,
|
|
23
|
-
|
|
32
|
+
label: itemMeta?.label,
|
|
33
|
+
id: itemMeta?.idAttribute,
|
|
34
|
+
itemId
|
|
24
35
|
},
|
|
25
36
|
ownerState: {
|
|
26
37
|
itemId,
|
|
27
|
-
label
|
|
38
|
+
label: itemMeta?.label
|
|
28
39
|
}
|
|
29
40
|
}),
|
|
30
41
|
itemProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded);
|
|
31
|
-
const children = React.useMemo(() => itemsToRender ? /*#__PURE__*/_jsx(RichTreeViewItems, {
|
|
32
|
-
itemsToRender: itemsToRender,
|
|
33
|
-
slots: slots,
|
|
34
|
-
slotProps: slotProps
|
|
35
|
-
}) : null, [itemsToRender, slots, slotProps]);
|
|
36
42
|
return /*#__PURE__*/_jsx(Item, _extends({}, itemProps, {
|
|
37
|
-
children: children
|
|
43
|
+
children: children?.map(renderItemForRichTreeView)
|
|
38
44
|
}));
|
|
39
|
-
}
|
|
45
|
+
}, fastObjectShallowCompare);
|
|
40
46
|
export function RichTreeViewItems(props) {
|
|
41
47
|
const {
|
|
42
|
-
itemsToRender,
|
|
43
48
|
slots,
|
|
44
49
|
slotProps
|
|
45
50
|
} = props;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
const {
|
|
52
|
+
store
|
|
53
|
+
} = useTreeViewContext();
|
|
54
|
+
const itemSlot = slots?.item;
|
|
55
|
+
const itemSlotProps = slotProps?.item;
|
|
56
|
+
const items = useSelector(store, selectorItemOrderedChildrenIds, null);
|
|
57
|
+
const renderItem = React.useCallback(itemId => {
|
|
58
|
+
return /*#__PURE__*/_jsx(WrappedTreeItem, {
|
|
59
|
+
itemSlot: itemSlot,
|
|
60
|
+
itemSlotProps: itemSlotProps,
|
|
61
|
+
itemId: itemId
|
|
62
|
+
}, itemId);
|
|
63
|
+
}, [itemSlot, itemSlotProps]);
|
|
64
|
+
return /*#__PURE__*/_jsx(RichTreeViewItemsContext.Provider, {
|
|
65
|
+
value: renderItem,
|
|
66
|
+
children: items.map(renderItem)
|
|
55
67
|
});
|
|
56
68
|
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { useSelector } from "../../hooks/useSelector.js";
|
|
4
|
+
import { selectorTreeViewId } from "./useTreeViewId.selectors.js";
|
|
3
5
|
import { createTreeViewDefaultId } from "./useTreeViewId.utils.js";
|
|
4
6
|
export const useTreeViewId = ({
|
|
5
7
|
params,
|
|
6
|
-
|
|
7
|
-
setState
|
|
8
|
+
store
|
|
8
9
|
}) => {
|
|
9
10
|
React.useEffect(() => {
|
|
10
|
-
|
|
11
|
-
if (
|
|
11
|
+
store.update(prevState => {
|
|
12
|
+
if (params.id === prevState.id.providedTreeId && prevState.id.treeId !== undefined) {
|
|
12
13
|
return prevState;
|
|
13
14
|
}
|
|
14
15
|
return _extends({}, prevState, {
|
|
@@ -17,15 +18,12 @@ export const useTreeViewId = ({
|
|
|
17
18
|
})
|
|
18
19
|
});
|
|
19
20
|
});
|
|
20
|
-
}, [
|
|
21
|
-
const treeId =
|
|
21
|
+
}, [store, params.id]);
|
|
22
|
+
const treeId = useSelector(store, selectorTreeViewId);
|
|
22
23
|
return {
|
|
23
24
|
getRootProps: () => ({
|
|
24
25
|
id: treeId
|
|
25
|
-
})
|
|
26
|
-
contextValue: {
|
|
27
|
-
treeId
|
|
28
|
-
}
|
|
26
|
+
})
|
|
29
27
|
};
|
|
30
28
|
};
|
|
31
29
|
useTreeViewId.params = {
|
|
@@ -35,6 +33,7 @@ useTreeViewId.getInitialState = ({
|
|
|
35
33
|
id
|
|
36
34
|
}) => ({
|
|
37
35
|
id: {
|
|
38
|
-
treeId:
|
|
36
|
+
treeId: undefined,
|
|
37
|
+
providedTreeId: id
|
|
39
38
|
}
|
|
40
39
|
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TreeViewRootSelector } from '../../utils/selectors';
|
|
2
|
+
import { UseTreeViewIdSignature } from './useTreeViewId.types';
|
|
3
|
+
/**
|
|
4
|
+
* Get the id attribute of the tree view.
|
|
5
|
+
* @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
|
|
6
|
+
* @returns {string} The id attribute of the tree view.
|
|
7
|
+
*/
|
|
8
|
+
export declare const selectorTreeViewId: ((state: import("./useTreeViewId.types").UseTreeViewIdState & Partial<{}> & {
|
|
9
|
+
cacheKey: import("../../models").TreeViewStateCacheKey;
|
|
10
|
+
}) => string | undefined) & {
|
|
11
|
+
clearCache: () => void;
|
|
12
|
+
resultsCount: () => number;
|
|
13
|
+
resetResultsCount: () => void;
|
|
14
|
+
} & {
|
|
15
|
+
resultFunc: (resultFuncArgs_0: {
|
|
16
|
+
treeId: string | undefined;
|
|
17
|
+
providedTreeId: string | undefined;
|
|
18
|
+
}) => string | undefined;
|
|
19
|
+
memoizedResultFunc: ((resultFuncArgs_0: {
|
|
20
|
+
treeId: string | undefined;
|
|
21
|
+
providedTreeId: string | undefined;
|
|
22
|
+
}) => string | undefined) & {
|
|
23
|
+
clearCache: () => void;
|
|
24
|
+
resultsCount: () => number;
|
|
25
|
+
resetResultsCount: () => void;
|
|
26
|
+
};
|
|
27
|
+
lastResult: () => string | undefined;
|
|
28
|
+
dependencies: [TreeViewRootSelector<UseTreeViewIdSignature>];
|
|
29
|
+
recomputations: () => number;
|
|
30
|
+
resetRecomputations: () => void;
|
|
31
|
+
dependencyRecomputations: () => number;
|
|
32
|
+
resetDependencyRecomputations: () => void;
|
|
33
|
+
} & {
|
|
34
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
35
|
+
memoize: typeof import("reselect").weakMapMemoize;
|
|
36
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createSelector } from "../../utils/selectors.js";
|
|
2
|
+
const selectorTreeViewIdState = state => state.id;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Get the id attribute of the tree view.
|
|
6
|
+
* @param {TreeViewState<[UseTreeViewIdSignature]>} state The state of the tree view.
|
|
7
|
+
* @returns {string} The id attribute of the tree view.
|
|
8
|
+
*/
|
|
9
|
+
export const selectorTreeViewId = createSelector(selectorTreeViewIdState, idState => idState.treeId);
|
|
@@ -10,15 +10,11 @@ export type UseTreeViewIdDefaultizedParameters = UseTreeViewIdParameters;
|
|
|
10
10
|
export interface UseTreeViewIdState {
|
|
11
11
|
id: {
|
|
12
12
|
treeId: string | undefined;
|
|
13
|
+
providedTreeId: string | undefined;
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
|
-
interface UseTreeViewIdContextValue {
|
|
16
|
-
treeId: string | undefined;
|
|
17
|
-
}
|
|
18
16
|
export type UseTreeViewIdSignature = TreeViewPluginSignature<{
|
|
19
17
|
params: UseTreeViewIdParameters;
|
|
20
18
|
defaultizedParams: UseTreeViewIdDefaultizedParameters;
|
|
21
19
|
state: UseTreeViewIdState;
|
|
22
|
-
contextValue: UseTreeViewIdContextValue;
|
|
23
20
|
}>;
|
|
24
|
-
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TreeViewAnyPluginSignature, TreeViewState } from '../models';
|
|
2
|
+
import { TreeViewStore } from '../utils/TreeViewStore';
|
|
3
|
+
import { TreeViewSelector } from '../utils/selectors';
|
|
4
|
+
export declare const useSelector: <TSignatures extends readonly TreeViewAnyPluginSignature[], TArgs, TValue>(store: TreeViewStore<TSignatures>, selector: TreeViewSelector<TreeViewState<TSignatures>, TArgs, TValue>, args?: TArgs, equals?: (a: TValue, b: TValue) => boolean) => TValue;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';
|
|
2
|
+
const defaultCompare = Object.is;
|
|
3
|
+
export const useSelector = (store, selector, args = undefined, equals = defaultCompare) => {
|
|
4
|
+
const selectorWithArgs = state => selector(state, args);
|
|
5
|
+
return useSyncExternalStoreWithSelector(store.subscribe, store.getSnapshot, store.getSnapshot, selectorWithArgs, equals);
|
|
6
|
+
};
|
package/internals/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export { useTreeView } from './useTreeView';
|
|
2
2
|
export { TreeViewProvider, useTreeViewContext } from './TreeViewProvider';
|
|
3
3
|
export { RichTreeViewItems } from './components/RichTreeViewItems';
|
|
4
|
+
export type { RichTreeViewItemsSlots, RichTreeViewItemsSlotProps, } from './components/RichTreeViewItems';
|
|
4
5
|
export { unstable_resetCleanupTracking } from './hooks/useInstanceEventHandler';
|
|
5
|
-
export
|
|
6
|
+
export { useSelector } from './hooks/useSelector';
|
|
7
|
+
export type { TreeViewPlugin, TreeViewPluginSignature, ConvertPluginsIntoSignatures, MergeSignaturesProperty, TreeViewPublicAPI, TreeViewState, TreeViewExperimentalFeatures, TreeViewItemMeta, TreeViewInstance, TreeViewItemPlugin, TreeViewUsedStore, } from './models';
|
|
6
8
|
export type { TreeViewCorePluginParameters } from './corePlugins';
|
|
7
9
|
export { useTreeViewExpansion } from './plugins/useTreeViewExpansion';
|
|
8
10
|
export type { UseTreeViewExpansionSignature, UseTreeViewExpansionParameters, } from './plugins/useTreeViewExpansion';
|
|
@@ -15,9 +17,12 @@ export type { UseTreeViewKeyboardNavigationSignature } from './plugins/useTreeVi
|
|
|
15
17
|
export { useTreeViewIcons } from './plugins/useTreeViewIcons';
|
|
16
18
|
export type { UseTreeViewIconsSignature, UseTreeViewIconsParameters, } from './plugins/useTreeViewIcons';
|
|
17
19
|
export { useTreeViewItems, buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID, } from './plugins/useTreeViewItems';
|
|
20
|
+
export { selectorItemMetaLookup, selectorItemMeta, selectorItemIndex, selectorItemOrderedChildrenIds, } from './plugins/useTreeViewItems/useTreeViewItems.selectors';
|
|
18
21
|
export type { UseTreeViewItemsSignature, UseTreeViewItemsParameters, UseTreeViewItemsState, } from './plugins/useTreeViewItems';
|
|
19
22
|
export { useTreeViewLabel } from './plugins/useTreeViewLabel';
|
|
20
23
|
export type { UseTreeViewLabelSignature, UseTreeViewLabelParameters, } from './plugins/useTreeViewLabel';
|
|
21
24
|
export { useTreeViewJSXItems } from './plugins/useTreeViewJSXItems';
|
|
22
25
|
export type { UseTreeViewJSXItemsSignature, UseTreeViewJSXItemsParameters, } from './plugins/useTreeViewJSXItems';
|
|
26
|
+
export { createSelector } from './utils/selectors';
|
|
23
27
|
export { isTargetInDescendants } from './utils/tree';
|
|
28
|
+
export { TreeViewStore } from './utils/TreeViewStore';
|
package/internals/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { useTreeView } from "./useTreeView/index.js";
|
|
|
2
2
|
export { TreeViewProvider, useTreeViewContext } from "./TreeViewProvider/index.js";
|
|
3
3
|
export { RichTreeViewItems } from "./components/RichTreeViewItems.js";
|
|
4
4
|
export { unstable_resetCleanupTracking } from "./hooks/useInstanceEventHandler.js";
|
|
5
|
+
export { useSelector } from "./hooks/useSelector.js";
|
|
5
6
|
|
|
6
7
|
// Core plugins
|
|
7
8
|
|
|
@@ -12,6 +13,9 @@ export { useTreeViewFocus } from "./plugins/useTreeViewFocus/index.js";
|
|
|
12
13
|
export { useTreeViewKeyboardNavigation } from "./plugins/useTreeViewKeyboardNavigation/index.js";
|
|
13
14
|
export { useTreeViewIcons } from "./plugins/useTreeViewIcons/index.js";
|
|
14
15
|
export { useTreeViewItems, buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "./plugins/useTreeViewItems/index.js";
|
|
16
|
+
export { selectorItemMetaLookup, selectorItemMeta, selectorItemIndex, selectorItemOrderedChildrenIds } from "./plugins/useTreeViewItems/useTreeViewItems.selectors.js";
|
|
15
17
|
export { useTreeViewLabel } from "./plugins/useTreeViewLabel/index.js";
|
|
16
18
|
export { useTreeViewJSXItems } from "./plugins/useTreeViewJSXItems/index.js";
|
|
17
|
-
export {
|
|
19
|
+
export { createSelector } from "./utils/selectors.js";
|
|
20
|
+
export { isTargetInDescendants } from "./utils/tree.js";
|
|
21
|
+
export { TreeViewStore } from "./utils/TreeViewStore.js";
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { TreeViewAnyPluginSignature, TreeViewPlugin } from './plugin';
|
|
2
|
-
export type DefaultizedProps<P extends {}, RequiredProps extends keyof P, AdditionalProps extends {} = {}> = Omit<P, RequiredProps | keyof AdditionalProps> & Required<Pick<P, RequiredProps>> & AdditionalProps;
|
|
3
|
-
export type SlotComponentPropsFromProps<TProps extends {}, TOverrides extends {}, TOwnerState extends {}> = (Partial<TProps> & TOverrides) | ((ownerState: TOwnerState) => Partial<TProps> & TOverrides);
|
|
4
2
|
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
5
3
|
export type OptionalIfEmpty<A extends string, B> = keyof B extends never ? Partial<Record<A, B>> : IsAny<B> extends true ? Partial<Record<A, B>> : Record<A, B>;
|
|
6
4
|
export type MergeSignaturesProperty<TSignatures extends readonly any[], TProperty extends keyof TreeViewAnyPluginSignature> = TSignatures extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewAnyPluginSignature ? P[TProperty] & MergeSignaturesProperty<R, TProperty> : {} : {};
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { EventHandlers } from '@mui/utils';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
3
|
+
import type { UseTreeItemContentSlotOwnProps, UseTreeItemDragAndDropOverlaySlotOwnProps, UseTreeItemLabelInputSlotOwnProps, UseTreeItemRootSlotOwnProps, UseTreeItemCheckboxSlotOwnProps, UseTreeItemStatus } from '../../useTreeItem';
|
|
4
|
+
import type { UseTreeItemInteractions } from '../../hooks/useTreeItemUtils/useTreeItemUtils';
|
|
5
|
+
import type { TreeItemProps } from '../../TreeItem/TreeItem.types';
|
|
5
6
|
export interface TreeViewItemPluginSlotPropsEnhancerParams {
|
|
6
7
|
rootRefObject: React.MutableRefObject<HTMLLIElement | null>;
|
|
7
8
|
contentRefObject: React.MutableRefObject<HTMLDivElement | null>;
|
|
8
9
|
externalEventHandlers: EventHandlers;
|
|
9
|
-
interactions:
|
|
10
|
+
interactions: UseTreeItemInteractions;
|
|
11
|
+
status: UseTreeItemStatus;
|
|
10
12
|
}
|
|
11
13
|
type TreeViewItemPluginSlotPropsEnhancer<TSlotProps> = (params: TreeViewItemPluginSlotPropsEnhancerParams) => Partial<TSlotProps>;
|
|
12
14
|
export interface TreeViewItemPluginSlotPropsEnhancers {
|
|
13
|
-
root?: TreeViewItemPluginSlotPropsEnhancer<
|
|
14
|
-
content?: TreeViewItemPluginSlotPropsEnhancer<
|
|
15
|
-
dragAndDropOverlay?: TreeViewItemPluginSlotPropsEnhancer<
|
|
16
|
-
labelInput?: TreeViewItemPluginSlotPropsEnhancer<
|
|
15
|
+
root?: TreeViewItemPluginSlotPropsEnhancer<UseTreeItemRootSlotOwnProps>;
|
|
16
|
+
content?: TreeViewItemPluginSlotPropsEnhancer<UseTreeItemContentSlotOwnProps>;
|
|
17
|
+
dragAndDropOverlay?: TreeViewItemPluginSlotPropsEnhancer<UseTreeItemDragAndDropOverlaySlotOwnProps>;
|
|
18
|
+
labelInput?: TreeViewItemPluginSlotPropsEnhancer<UseTreeItemLabelInputSlotOwnProps>;
|
|
19
|
+
checkbox?: TreeViewItemPluginSlotPropsEnhancer<UseTreeItemCheckboxSlotOwnProps>;
|
|
17
20
|
}
|
|
18
21
|
export interface TreeViewItemPluginResponse {
|
|
19
22
|
/**
|
|
@@ -33,8 +36,8 @@ export interface TreeViewItemPluginResponse {
|
|
|
33
36
|
*/
|
|
34
37
|
propsEnhancers?: TreeViewItemPluginSlotPropsEnhancers;
|
|
35
38
|
}
|
|
36
|
-
export interface TreeViewItemPluginOptions
|
|
37
|
-
props:
|
|
39
|
+
export interface TreeViewItemPluginOptions extends Omit<TreeViewItemPluginResponse, 'propsEnhancers'> {
|
|
40
|
+
props: TreeItemProps;
|
|
38
41
|
}
|
|
39
|
-
export type TreeViewItemPlugin
|
|
42
|
+
export type TreeViewItemPlugin = (options: TreeViewItemPluginOptions) => void | TreeViewItemPluginResponse;
|
|
40
43
|
export {};
|