@mui/x-tree-view 6.0.0-alpha.3 → 6.0.0-beta.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 +167 -0
- package/TreeItem/TreeItem.js +18 -31
- package/TreeItem/useTreeItem.js +18 -27
- package/TreeView/TreeView.d.ts +4 -1
- package/TreeView/TreeView.js +65 -708
- package/TreeView/TreeView.types.d.ts +4 -147
- package/index.d.ts +1 -0
- package/index.js +3 -2
- package/{TreeView/descendants.d.ts → internals/TreeViewProvider/DescendantProvider.d.ts} +1 -5
- package/internals/TreeViewProvider/TreeViewContext.d.ts +7 -0
- package/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
- package/internals/TreeViewProvider/TreeViewProvider.d.ts +9 -0
- package/internals/TreeViewProvider/TreeViewProvider.js +21 -0
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +18 -0
- package/internals/TreeViewProvider/index.d.ts +2 -0
- package/internals/TreeViewProvider/index.js +1 -0
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +3 -0
- package/internals/TreeViewProvider/useTreeViewContext.js +3 -0
- package/internals/corePlugins/corePlugins.d.ts +7 -0
- package/internals/corePlugins/corePlugins.js +6 -0
- package/internals/corePlugins/index.d.ts +2 -0
- package/internals/corePlugins/index.js +1 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +2 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +8 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +21 -0
- package/internals/hooks/useInstanceEventHandler.d.ts +15 -0
- package/internals/hooks/useInstanceEventHandler.js +82 -0
- package/internals/models/events.d.ts +9 -0
- package/internals/models/helpers.d.ts +13 -0
- package/internals/models/helpers.js +1 -0
- package/internals/models/index.d.ts +3 -0
- package/internals/models/index.js +3 -0
- package/internals/models/plugin.d.ts +69 -0
- package/internals/models/plugin.js +1 -0
- package/internals/models/treeView.d.ts +23 -0
- package/internals/models/treeView.js +1 -0
- package/internals/plugins/defaultPlugins.d.ts +10 -0
- package/internals/plugins/defaultPlugins.js +9 -0
- package/internals/plugins/index.d.ts +2 -0
- package/internals/plugins/index.js +1 -0
- package/internals/plugins/useTreeViewContextValueBuilder/index.d.ts +2 -0
- package/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.d.ts +3 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.d.ts +34 -0
- package/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/internals/plugins/useTreeViewExpansion/index.d.ts +2 -0
- package/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +3 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +63 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +32 -0
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/internals/plugins/useTreeViewFocus/index.d.ts +2 -0
- package/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +3 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +89 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +27 -0
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +2 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +3 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +223 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +14 -0
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/internals/plugins/useTreeViewNodes/index.d.ts +2 -0
- package/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.d.ts +3 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +27 -0
- package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/internals/plugins/useTreeViewSelection/index.d.ts +2 -0
- package/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +3 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +172 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +49 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +17 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/internals/useTreeView/index.d.ts +2 -0
- package/internals/useTreeView/index.js +1 -0
- package/internals/useTreeView/useTreeView.d.ts +3 -0
- package/internals/useTreeView/useTreeView.js +65 -0
- package/internals/useTreeView/useTreeView.types.d.ts +20 -0
- package/internals/useTreeView/useTreeView.types.js +1 -0
- package/internals/useTreeView/useTreeView.utils.d.ts +8 -0
- package/internals/useTreeView/useTreeView.utils.js +43 -0
- package/internals/useTreeView/useTreeViewModels.d.ts +6 -0
- package/internals/useTreeView/useTreeViewModels.js +63 -0
- package/internals/utils/EventManager.d.ts +29 -0
- package/internals/utils/EventManager.js +69 -0
- package/internals/utils/cleanupTracking/CleanupTracking.d.ts +9 -0
- package/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +7 -0
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +10 -0
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
- package/internals/utils/publishTreeViewEvent.d.ts +5 -0
- package/internals/utils/publishTreeViewEvent.js +3 -0
- package/legacy/TreeItem/TreeItem.js +21 -32
- package/legacy/TreeItem/useTreeItem.js +18 -27
- package/legacy/TreeView/TreeView.js +65 -766
- package/legacy/index.js +3 -2
- package/legacy/internals/TreeViewProvider/TreeViewContext.js +21 -0
- package/legacy/internals/TreeViewProvider/TreeViewProvider.js +19 -0
- package/legacy/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
- package/legacy/internals/TreeViewProvider/index.js +1 -0
- package/legacy/internals/TreeViewProvider/useTreeViewContext.js +5 -0
- package/legacy/internals/corePlugins/corePlugins.js +6 -0
- package/legacy/internals/corePlugins/index.js +1 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +45 -0
- package/legacy/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
- package/legacy/internals/hooks/useInstanceEventHandler.js +87 -0
- package/legacy/internals/models/events.js +1 -0
- package/legacy/internals/models/helpers.js +1 -0
- package/legacy/internals/models/index.js +3 -0
- package/legacy/internals/models/plugin.js +1 -0
- package/legacy/internals/models/treeView.js +1 -0
- package/legacy/internals/plugins/defaultPlugins.js +9 -0
- package/legacy/internals/plugins/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +25 -0
- package/legacy/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +66 -0
- package/legacy/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +99 -0
- package/legacy/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +226 -0
- package/legacy/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +71 -0
- package/legacy/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +188 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/legacy/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/legacy/internals/useTreeView/index.js +1 -0
- package/legacy/internals/useTreeView/useTreeView.js +71 -0
- package/legacy/internals/useTreeView/useTreeView.types.js +1 -0
- package/legacy/internals/useTreeView/useTreeView.utils.js +46 -0
- package/legacy/internals/useTreeView/useTreeViewModels.js +76 -0
- package/legacy/internals/utils/EventManager.js +91 -0
- package/legacy/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/legacy/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +29 -0
- package/legacy/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +52 -0
- package/legacy/internals/utils/publishTreeViewEvent.js +3 -0
- package/modern/TreeItem/TreeItem.js +18 -31
- package/modern/TreeItem/useTreeItem.js +18 -27
- package/modern/TreeView/TreeView.js +65 -707
- package/modern/index.js +3 -2
- package/modern/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +8 -18
- package/modern/internals/TreeViewProvider/TreeViewProvider.js +21 -0
- package/modern/internals/TreeViewProvider/TreeViewProvider.types.js +1 -0
- package/modern/internals/TreeViewProvider/index.js +1 -0
- package/modern/internals/TreeViewProvider/useTreeViewContext.js +3 -0
- package/modern/internals/corePlugins/corePlugins.js +6 -0
- package/modern/internals/corePlugins/index.js +1 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/index.js +1 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +35 -0
- package/modern/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +1 -0
- package/modern/internals/hooks/useInstanceEventHandler.js +77 -0
- package/modern/internals/models/events.js +1 -0
- package/modern/internals/models/helpers.js +1 -0
- package/modern/internals/models/index.js +3 -0
- package/modern/internals/models/plugin.js +1 -0
- package/modern/internals/models/treeView.js +1 -0
- package/modern/internals/plugins/defaultPlugins.js +9 -0
- package/modern/internals/plugins/index.js +1 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/index.js +1 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +24 -0
- package/modern/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +1 -0
- package/modern/internals/plugins/useTreeViewExpansion/index.js +1 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +57 -0
- package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +1 -0
- package/modern/internals/plugins/useTreeViewFocus/index.js +1 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +84 -0
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/index.js +1 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +222 -0
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +1 -0
- package/modern/internals/plugins/useTreeViewNodes/index.js +1 -0
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +60 -0
- package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/index.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +169 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +1 -0
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +55 -0
- package/modern/internals/useTreeView/index.js +1 -0
- package/modern/internals/useTreeView/useTreeView.js +65 -0
- package/modern/internals/useTreeView/useTreeView.types.js +1 -0
- package/modern/internals/useTreeView/useTreeView.utils.js +43 -0
- package/modern/internals/useTreeView/useTreeViewModels.js +63 -0
- package/modern/internals/utils/EventManager.js +69 -0
- package/modern/internals/utils/cleanupTracking/CleanupTracking.js +1 -0
- package/modern/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +18 -0
- package/modern/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +38 -0
- package/modern/internals/utils/publishTreeViewEvent.js +3 -0
- package/node/TreeItem/TreeItem.js +20 -33
- package/node/TreeItem/useTreeItem.js +18 -29
- package/node/TreeView/TreeView.js +65 -707
- package/node/index.js +14 -2
- package/node/{TreeView → internals/TreeViewProvider}/TreeViewContext.js +10 -19
- package/node/internals/TreeViewProvider/TreeViewProvider.js +29 -0
- package/node/internals/TreeViewProvider/index.js +12 -0
- package/node/internals/TreeViewProvider/useTreeViewContext.js +12 -0
- package/node/internals/corePlugins/corePlugins.js +13 -0
- package/node/internals/corePlugins/index.js +12 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/index.js +12 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +44 -0
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js +5 -0
- package/node/internals/hooks/useInstanceEventHandler.js +88 -0
- package/node/internals/models/events.js +5 -0
- package/node/internals/models/helpers.js +5 -0
- package/node/internals/models/index.js +38 -0
- package/node/internals/models/plugin.js +5 -0
- package/node/internals/models/treeView.js +5 -0
- package/node/internals/plugins/defaultPlugins.js +16 -0
- package/node/internals/plugins/index.js +12 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/index.js +12 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.js +32 -0
- package/node/internals/plugins/useTreeViewContextValueBuilder/useTreeViewContextValueBuilder.types.js +5 -0
- package/node/internals/plugins/useTreeViewExpansion/index.js +12 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +67 -0
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +5 -0
- package/node/internals/plugins/useTreeViewFocus/index.js +12 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +94 -0
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +5 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/index.js +12 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +232 -0
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +5 -0
- package/node/internals/plugins/useTreeViewNodes/index.js +12 -0
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +70 -0
- package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.js +5 -0
- package/node/internals/plugins/useTreeViewSelection/index.js +12 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +179 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +5 -0
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +62 -0
- package/node/internals/useTreeView/index.js +12 -0
- package/node/internals/useTreeView/useTreeView.js +75 -0
- package/node/internals/useTreeView/useTreeView.types.js +5 -0
- package/node/internals/useTreeView/useTreeView.utils.js +54 -0
- package/node/internals/useTreeView/useTreeViewModels.js +73 -0
- package/node/internals/utils/EventManager.js +76 -0
- package/node/internals/utils/cleanupTracking/CleanupTracking.js +5 -0
- package/node/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +25 -0
- package/node/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +45 -0
- package/node/internals/utils/publishTreeViewEvent.js +10 -0
- package/package.json +1 -1
- package/themeAugmentation/props.d.ts +1 -1
- package/TreeView/TreeViewContext.d.ts +0 -6
- package/internals/models.d.ts +0 -1
- package/legacy/TreeView/TreeViewContext.js +0 -41
- /package/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
- /package/{legacy/internals/models.js → internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js} +0 -0
- /package/{modern/internals/models.js → internals/models/events.js} +0 -0
- /package/legacy/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/modern/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/node/{TreeView/descendants.js → internals/TreeViewProvider/DescendantProvider.js} +0 -0
- /package/node/internals/{models.js → TreeViewProvider/TreeViewProvider.types.js} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Theme } from '@mui/material/styles';
|
|
3
3
|
import { SxProps } from '@mui/system';
|
|
4
|
-
import { DefaultizedProps } from '../internals/models';
|
|
5
4
|
import { TreeViewClasses } from './treeViewClasses';
|
|
5
|
+
import { DefaultTreeViewPluginParameters } from '../internals/plugins/defaultPlugins';
|
|
6
6
|
export interface TreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement> {
|
|
7
7
|
/**
|
|
8
8
|
* The content of the component.
|
|
@@ -16,155 +16,12 @@ export interface TreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement
|
|
|
16
16
|
* Override or extend the styles applied to the component.
|
|
17
17
|
*/
|
|
18
18
|
classes?: Partial<TreeViewClasses>;
|
|
19
|
-
/**
|
|
20
|
-
* The default icon used to collapse the node.
|
|
21
|
-
*/
|
|
22
|
-
defaultCollapseIcon?: React.ReactNode;
|
|
23
|
-
/**
|
|
24
|
-
* The default icon displayed next to a end node. This is applied to all
|
|
25
|
-
* tree nodes and can be overridden by the TreeItem `icon` prop.
|
|
26
|
-
*/
|
|
27
|
-
defaultEndIcon?: React.ReactNode;
|
|
28
|
-
/**
|
|
29
|
-
* Expanded node ids.
|
|
30
|
-
* Used when the item's expansion are not controlled.
|
|
31
|
-
* @default []
|
|
32
|
-
*/
|
|
33
|
-
defaultExpanded?: string[];
|
|
34
|
-
/**
|
|
35
|
-
* The default icon used to expand the node.
|
|
36
|
-
*/
|
|
37
|
-
defaultExpandIcon?: React.ReactNode;
|
|
38
|
-
/**
|
|
39
|
-
* The default icon displayed next to a parent node. This is applied to all
|
|
40
|
-
* parent nodes and can be overridden by the TreeItem `icon` prop.
|
|
41
|
-
*/
|
|
42
|
-
defaultParentIcon?: React.ReactNode;
|
|
43
|
-
/**
|
|
44
|
-
* If `true`, will allow focus on disabled items.
|
|
45
|
-
* @default false
|
|
46
|
-
*/
|
|
47
|
-
disabledItemsFocusable?: boolean;
|
|
48
|
-
/**
|
|
49
|
-
* If `true` selection is disabled.
|
|
50
|
-
* @default false
|
|
51
|
-
*/
|
|
52
|
-
disableSelection?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Expanded node ids.
|
|
55
|
-
* Used when the item's expansion are controlled.
|
|
56
|
-
*/
|
|
57
|
-
expanded?: string[];
|
|
58
|
-
/**
|
|
59
|
-
* This prop is used to help implement the accessibility logic.
|
|
60
|
-
* If you don't provide this prop. It falls back to a randomly generated id.
|
|
61
|
-
*/
|
|
62
|
-
id?: string;
|
|
63
|
-
/**
|
|
64
|
-
* Callback fired when tree items are focused.
|
|
65
|
-
* @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
|
|
66
|
-
* @param {string} nodeId The id of the node focused.
|
|
67
|
-
* @param {string} value of the focused node.
|
|
68
|
-
*/
|
|
69
|
-
onNodeFocus?: (event: React.SyntheticEvent, nodeId: string) => void;
|
|
70
|
-
/**
|
|
71
|
-
* Callback fired when tree items are expanded/collapsed.
|
|
72
|
-
* @param {React.SyntheticEvent} event The event source of the callback.
|
|
73
|
-
* @param {array} nodeIds The ids of the expanded nodes.
|
|
74
|
-
*/
|
|
75
|
-
onNodeToggle?: (event: React.SyntheticEvent, nodeIds: string[]) => void;
|
|
76
19
|
/**
|
|
77
20
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
78
21
|
*/
|
|
79
22
|
sx?: SxProps<Theme>;
|
|
80
23
|
}
|
|
81
|
-
export interface
|
|
82
|
-
/**
|
|
83
|
-
* Selected node ids. (Uncontrolled)
|
|
84
|
-
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
85
|
-
* @default []
|
|
86
|
-
*/
|
|
87
|
-
defaultSelected?: string[];
|
|
88
|
-
/**
|
|
89
|
-
* Selected node ids. (Controlled)
|
|
90
|
-
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
91
|
-
*/
|
|
92
|
-
selected?: string[];
|
|
93
|
-
/**
|
|
94
|
-
* If true `ctrl` and `shift` will trigger multiselect.
|
|
95
|
-
* @default false
|
|
96
|
-
*/
|
|
97
|
-
multiSelect?: true;
|
|
98
|
-
/**
|
|
99
|
-
* Callback fired when tree items are selected/unselected.
|
|
100
|
-
* @param {React.SyntheticEvent} event The event source of the callback
|
|
101
|
-
* @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true
|
|
102
|
-
* this is an array of strings; when false (default) a string.
|
|
103
|
-
*/
|
|
104
|
-
onNodeSelect?: (event: React.SyntheticEvent, nodeIds: string[]) => void;
|
|
105
|
-
}
|
|
106
|
-
export interface SingleSelectTreeViewProps extends TreeViewPropsBase {
|
|
107
|
-
/**
|
|
108
|
-
* Selected node ids. (Uncontrolled)
|
|
109
|
-
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
110
|
-
* @default []
|
|
111
|
-
*/
|
|
112
|
-
defaultSelected?: string | null;
|
|
113
|
-
/**
|
|
114
|
-
* Selected node ids. (Controlled)
|
|
115
|
-
* When `multiSelect` is true this takes an array of strings; when false (default) a string.
|
|
116
|
-
*/
|
|
117
|
-
selected?: string | null;
|
|
118
|
-
/**
|
|
119
|
-
* If true `ctrl` and `shift` will trigger multiselect.
|
|
120
|
-
* @default false
|
|
121
|
-
*/
|
|
122
|
-
multiSelect?: false;
|
|
123
|
-
/**
|
|
124
|
-
* Callback fired when tree items are selected/unselected.
|
|
125
|
-
* @param {React.SyntheticEvent} event The event source of the callback
|
|
126
|
-
* @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true
|
|
127
|
-
* this is an array of strings; when false (default) a string.
|
|
128
|
-
*/
|
|
129
|
-
onNodeSelect?: (event: React.SyntheticEvent, nodeIds: string) => void;
|
|
130
|
-
}
|
|
131
|
-
export type TreeViewProps = SingleSelectTreeViewProps | MultiSelectTreeViewProps;
|
|
132
|
-
export type TreeViewDefaultizedProps = DefaultizedProps<TreeViewProps, 'defaultExpanded' | 'defaultSelected' | 'disabledItemsFocusable' | 'disableSelection' | 'multiSelect'>;
|
|
133
|
-
export interface TreeViewNode {
|
|
134
|
-
id: string;
|
|
135
|
-
idAttribute: string | undefined;
|
|
136
|
-
index: number;
|
|
137
|
-
parentId: string | null;
|
|
138
|
-
expandable: boolean;
|
|
139
|
-
disabled: boolean | undefined;
|
|
140
|
-
}
|
|
141
|
-
export interface TreeViewItemRange {
|
|
142
|
-
start?: string | null;
|
|
143
|
-
end?: string | null;
|
|
144
|
-
next?: string | null;
|
|
145
|
-
current?: string;
|
|
146
|
-
}
|
|
147
|
-
export interface TreeViewContextValue {
|
|
148
|
-
registerNode: (node: TreeViewNode) => void;
|
|
149
|
-
unregisterNode: (nodeId: string) => void;
|
|
150
|
-
isFocused: (nodeId: string) => boolean;
|
|
151
|
-
isSelected: (nodeId: string) => boolean;
|
|
152
|
-
isExpanded: (nodeId: string) => boolean;
|
|
153
|
-
isExpandable: (nodeId: string) => boolean;
|
|
154
|
-
isDisabled: (nodeId: string) => boolean;
|
|
155
|
-
mapFirstChar: (nodeId: string, firstChar: string) => void;
|
|
156
|
-
unMapFirstChar: (nodeId: string) => void;
|
|
157
|
-
focus: (event: React.SyntheticEvent, nodeId: string) => void;
|
|
158
|
-
toggleExpansion: (event: React.SyntheticEvent, value?: string) => void;
|
|
159
|
-
selectNode: (event: React.SyntheticEvent, nodeId: string, multiple?: boolean) => void;
|
|
160
|
-
selectRange: (event: React.SyntheticEvent, nodes: TreeViewItemRange, stacked?: boolean) => void;
|
|
161
|
-
multiSelect: boolean;
|
|
162
|
-
disabledItemsFocusable: boolean;
|
|
163
|
-
treeId: string | undefined;
|
|
164
|
-
icons: {
|
|
165
|
-
defaultCollapseIcon: React.ReactNode;
|
|
166
|
-
defaultExpandIcon: React.ReactNode;
|
|
167
|
-
defaultParentIcon: React.ReactNode;
|
|
168
|
-
defaultEndIcon: React.ReactNode;
|
|
169
|
-
};
|
|
24
|
+
export interface TreeViewProps<Multiple extends boolean | undefined> extends DefaultTreeViewPluginParameters<Multiple>, TreeViewPropsBase {
|
|
170
25
|
}
|
|
26
|
+
export type SingleSelectTreeViewProps = TreeViewProps<false>;
|
|
27
|
+
export type MultiSelectTreeViewProps = TreeViewProps<true>;
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view v6.0.0-
|
|
2
|
+
* @mui/x-tree-view v6.0.0-beta.0
|
|
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
|
export * from './TreeItem';
|
|
9
|
-
export * from './TreeView';
|
|
9
|
+
export * from './TreeView';
|
|
10
|
+
export { unstable_resetCleanupTracking } from './internals/hooks/useInstanceEventHandler';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
/**
|
|
4
3
|
* This hook registers our descendant by passing it into an array. We can then
|
|
5
4
|
* search that array by to find its index when registering it in the component.
|
|
@@ -30,10 +29,7 @@ interface DescendantProviderProps {
|
|
|
30
29
|
}
|
|
31
30
|
export declare function DescendantProvider(props: DescendantProviderProps): React.JSX.Element;
|
|
32
31
|
export declare namespace DescendantProvider {
|
|
33
|
-
var propTypes:
|
|
34
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
35
|
-
id: PropTypes.Requireable<string>;
|
|
36
|
-
};
|
|
32
|
+
var propTypes: any;
|
|
37
33
|
}
|
|
38
34
|
export interface TreeItemDescendant {
|
|
39
35
|
element: HTMLLIElement;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TreeViewContextValue } from './TreeViewProvider.types';
|
|
3
|
+
export declare const DEFAULT_TREE_VIEW_CONTEXT_VALUE: TreeViewContextValue<any>;
|
|
4
|
+
/**
|
|
5
|
+
* @ignore - internal component.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TreeViewContext: React.Context<TreeViewContextValue<any>>;
|
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export const TreeViewContext = /*#__PURE__*/React.createContext({
|
|
6
|
-
registerNode: () => {},
|
|
7
|
-
unregisterNode: () => {},
|
|
8
|
-
isFocused: () => false,
|
|
9
|
-
isSelected: () => false,
|
|
10
|
-
isExpanded: () => false,
|
|
11
|
-
isExpandable: () => false,
|
|
12
|
-
isDisabled: () => false,
|
|
13
|
-
mapFirstChar: () => {},
|
|
14
|
-
unMapFirstChar: () => {},
|
|
15
|
-
focus: () => {},
|
|
16
|
-
toggleExpansion: () => {},
|
|
17
|
-
selectNode: () => {},
|
|
18
|
-
selectRange: () => {},
|
|
2
|
+
export const DEFAULT_TREE_VIEW_CONTEXT_VALUE = {
|
|
3
|
+
instance: null,
|
|
19
4
|
multiSelect: false,
|
|
20
5
|
disabledItemsFocusable: false,
|
|
21
6
|
treeId: undefined,
|
|
@@ -25,7 +10,12 @@ export const TreeViewContext = /*#__PURE__*/React.createContext({
|
|
|
25
10
|
defaultParentIcon: null,
|
|
26
11
|
defaultEndIcon: null
|
|
27
12
|
}
|
|
28
|
-
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @ignore - internal component.
|
|
17
|
+
*/
|
|
18
|
+
export const TreeViewContext = /*#__PURE__*/React.createContext(DEFAULT_TREE_VIEW_CONTEXT_VALUE);
|
|
29
19
|
if (process.env.NODE_ENV !== 'production') {
|
|
30
20
|
TreeViewContext.displayName = 'TreeViewContext';
|
|
31
21
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TreeViewProviderProps } from './TreeViewProvider.types';
|
|
3
|
+
import { TreeViewAnyPluginSignature } from '../models';
|
|
4
|
+
/**
|
|
5
|
+
* Sets up the contexts for the underlying TreeItem components.
|
|
6
|
+
*
|
|
7
|
+
* @ignore - do not document.
|
|
8
|
+
*/
|
|
9
|
+
export declare function TreeViewProvider<TPlugins extends readonly TreeViewAnyPluginSignature[]>(props: TreeViewProviderProps<TPlugins>): React.JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TreeViewContext } from './TreeViewContext';
|
|
3
|
+
import { DescendantProvider } from './DescendantProvider';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
/**
|
|
6
|
+
* Sets up the contexts for the underlying TreeItem components.
|
|
7
|
+
*
|
|
8
|
+
* @ignore - do not document.
|
|
9
|
+
*/
|
|
10
|
+
export function TreeViewProvider(props) {
|
|
11
|
+
const {
|
|
12
|
+
value,
|
|
13
|
+
children
|
|
14
|
+
} = props;
|
|
15
|
+
return /*#__PURE__*/_jsx(TreeViewContext.Provider, {
|
|
16
|
+
value: value,
|
|
17
|
+
children: /*#__PURE__*/_jsx(DescendantProvider, {
|
|
18
|
+
children: children
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TreeViewAnyPluginSignature, TreeViewInstance } from '../models';
|
|
3
|
+
export interface TreeViewContextValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
|
|
4
|
+
treeId: string | undefined;
|
|
5
|
+
instance: TreeViewInstance<TPlugins> | null;
|
|
6
|
+
multiSelect: boolean;
|
|
7
|
+
disabledItemsFocusable: boolean;
|
|
8
|
+
icons: {
|
|
9
|
+
defaultCollapseIcon: React.ReactNode;
|
|
10
|
+
defaultExpandIcon: React.ReactNode;
|
|
11
|
+
defaultParentIcon: React.ReactNode;
|
|
12
|
+
defaultEndIcon: React.ReactNode;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface TreeViewProviderProps<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
|
|
16
|
+
value: TreeViewContextValue<TPlugins>;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TreeViewProvider } from './TreeViewProvider';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ConvertPluginsIntoSignatures, MergePlugins } from '../models';
|
|
2
|
+
/**
|
|
3
|
+
* Internal plugins that creates the tools used by the other plugins.
|
|
4
|
+
* These plugins are used by the tree view components.
|
|
5
|
+
*/
|
|
6
|
+
export declare const TREE_VIEW_CORE_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewInstanceEvents").UseTreeViewInstanceEventsSignature>];
|
|
7
|
+
export type TreeViewCorePluginsSignature = MergePlugins<ConvertPluginsIntoSignatures<typeof TREE_VIEW_CORE_PLUGINS>>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
|
|
2
|
+
/**
|
|
3
|
+
* Internal plugins that creates the tools used by the other plugins.
|
|
4
|
+
* These plugins are used by the tree view components.
|
|
5
|
+
*/
|
|
6
|
+
export const TREE_VIEW_CORE_PLUGINS = [useTreeViewInstanceEvents];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TREE_VIEW_CORE_PLUGINS } from './corePlugins';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useTreeViewInstanceEvents } from './useTreeViewInstanceEvents';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TreeViewPlugin } from '../../models';
|
|
2
|
+
import { UseTreeViewInstanceEventsSignature } from './useTreeViewInstanceEvents.types';
|
|
3
|
+
/**
|
|
4
|
+
* Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
|
|
5
|
+
* When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
|
|
6
|
+
* this plugin will only be used by SimpleTreeView.
|
|
7
|
+
*/
|
|
8
|
+
export declare const useTreeViewInstanceEvents: TreeViewPlugin<UseTreeViewInstanceEventsSignature>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { EventManager } from '../../utils/EventManager';
|
|
3
|
+
import { populateInstance } from '../../useTreeView/useTreeView.utils';
|
|
4
|
+
const isSyntheticEvent = event => {
|
|
5
|
+
return event.isPropagationStopped !== undefined;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.
|
|
10
|
+
* When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,
|
|
11
|
+
* this plugin will only be used by SimpleTreeView.
|
|
12
|
+
*/
|
|
13
|
+
export const useTreeViewInstanceEvents = ({
|
|
14
|
+
instance
|
|
15
|
+
}) => {
|
|
16
|
+
const [eventManager] = React.useState(() => new EventManager());
|
|
17
|
+
const publishEvent = React.useCallback((...args) => {
|
|
18
|
+
const [name, params, event = {}] = args;
|
|
19
|
+
event.defaultMuiPrevented = false;
|
|
20
|
+
if (isSyntheticEvent(event) && event.isPropagationStopped()) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
eventManager.emit(name, params, event);
|
|
24
|
+
}, [eventManager]);
|
|
25
|
+
const subscribeEvent = React.useCallback((event, handler) => {
|
|
26
|
+
eventManager.on(event, handler);
|
|
27
|
+
return () => {
|
|
28
|
+
eventManager.removeListener(event, handler);
|
|
29
|
+
};
|
|
30
|
+
}, [eventManager]);
|
|
31
|
+
populateInstance(instance, {
|
|
32
|
+
$$publishEvent: publishEvent,
|
|
33
|
+
$$subscribeEvent: subscribeEvent
|
|
34
|
+
});
|
|
35
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TreeViewPluginSignature } from '../../models';
|
|
2
|
+
import { TreeViewEventListener } from '../../models/events';
|
|
3
|
+
export interface UseTreeViewInstanceEventsInstance {
|
|
4
|
+
/**
|
|
5
|
+
* Should never be used directly.
|
|
6
|
+
* Please use `useInstanceEventHandler` instead.
|
|
7
|
+
* @param {string} eventName Name of the event to subscribe to.
|
|
8
|
+
* @param {TreeViewEventListener<any>} handler Event handler to call when the event is published.
|
|
9
|
+
* @returns {() => void} Cleanup function.
|
|
10
|
+
*/
|
|
11
|
+
$$subscribeEvent: (eventName: string, handler: TreeViewEventListener<any>) => () => void;
|
|
12
|
+
/**
|
|
13
|
+
* Should never be used directly.
|
|
14
|
+
* Please use `publishTreeViewEvent` instead.
|
|
15
|
+
* @param {string} eventName Name of the event to publish.
|
|
16
|
+
* @param {any} params The params to publish with the event.
|
|
17
|
+
*/
|
|
18
|
+
$$publishEvent: (eventName: string, params: any) => void;
|
|
19
|
+
}
|
|
20
|
+
export type UseTreeViewInstanceEventsSignature = TreeViewPluginSignature<{}, {}, UseTreeViewInstanceEventsInstance, {}, {}, never, [
|
|
21
|
+
]>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CleanupTracking } from '../utils/cleanupTracking/CleanupTracking';
|
|
2
|
+
import { TreeViewAnyPluginSignature, TreeViewUsedEvents } from '../models';
|
|
3
|
+
import { TreeViewEventListener } from '../models/events';
|
|
4
|
+
import { UseTreeViewInstanceEventsInstance } from '../corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types';
|
|
5
|
+
interface RegistryContainer {
|
|
6
|
+
registry: CleanupTracking | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function createUseInstanceEventHandler(registryContainer: RegistryContainer): <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
9
|
+
$$signature: TreeViewAnyPluginSignature;
|
|
10
|
+
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
|
|
11
|
+
export declare const unstable_resetCleanupTracking: () => void;
|
|
12
|
+
export declare const useInstanceEventHandler: <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
13
|
+
$$signature: TreeViewAnyPluginSignature;
|
|
14
|
+
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TimerBasedCleanupTracking } from '../utils/cleanupTracking/TimerBasedCleanupTracking';
|
|
3
|
+
import { FinalizationRegistryBasedCleanupTracking } from '../utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking';
|
|
4
|
+
// We use class to make it easier to detect in heap snapshots by name
|
|
5
|
+
class ObjectToBeRetainedByReact {}
|
|
6
|
+
|
|
7
|
+
// Based on https://github.com/Bnaya/use-dispose-uncommitted/blob/main/src/finalization-registry-based-impl.ts
|
|
8
|
+
// Check https://github.com/facebook/react/issues/15317 to get more information
|
|
9
|
+
export function createUseInstanceEventHandler(registryContainer) {
|
|
10
|
+
let cleanupTokensCounter = 0;
|
|
11
|
+
return function useInstanceEventHandler(instance, eventName, handler) {
|
|
12
|
+
if (registryContainer.registry === null) {
|
|
13
|
+
registryContainer.registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking();
|
|
14
|
+
}
|
|
15
|
+
const [objectRetainedByReact] = React.useState(new ObjectToBeRetainedByReact());
|
|
16
|
+
const subscription = React.useRef(null);
|
|
17
|
+
const handlerRef = React.useRef();
|
|
18
|
+
handlerRef.current = handler;
|
|
19
|
+
const cleanupTokenRef = React.useRef(null);
|
|
20
|
+
if (!subscription.current && handlerRef.current) {
|
|
21
|
+
const enhancedHandler = (params, event) => {
|
|
22
|
+
if (!event.defaultMuiPrevented) {
|
|
23
|
+
var _handlerRef$current;
|
|
24
|
+
(_handlerRef$current = handlerRef.current) == null || _handlerRef$current.call(handlerRef, params, event);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
|
|
28
|
+
cleanupTokensCounter += 1;
|
|
29
|
+
cleanupTokenRef.current = {
|
|
30
|
+
cleanupToken: cleanupTokensCounter
|
|
31
|
+
};
|
|
32
|
+
registryContainer.registry.register(objectRetainedByReact,
|
|
33
|
+
// The callback below will be called once this reference stops being retained
|
|
34
|
+
() => {
|
|
35
|
+
var _subscription$current;
|
|
36
|
+
(_subscription$current = subscription.current) == null || _subscription$current.call(subscription);
|
|
37
|
+
subscription.current = null;
|
|
38
|
+
cleanupTokenRef.current = null;
|
|
39
|
+
}, cleanupTokenRef.current);
|
|
40
|
+
} else if (!handlerRef.current && subscription.current) {
|
|
41
|
+
subscription.current();
|
|
42
|
+
subscription.current = null;
|
|
43
|
+
if (cleanupTokenRef.current) {
|
|
44
|
+
registryContainer.registry.unregister(cleanupTokenRef.current);
|
|
45
|
+
cleanupTokenRef.current = null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
React.useEffect(() => {
|
|
49
|
+
if (!subscription.current && handlerRef.current) {
|
|
50
|
+
const enhancedHandler = (params, event) => {
|
|
51
|
+
if (!event.defaultMuiPrevented) {
|
|
52
|
+
var _handlerRef$current2;
|
|
53
|
+
(_handlerRef$current2 = handlerRef.current) == null || _handlerRef$current2.call(handlerRef, params, event);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
|
|
57
|
+
}
|
|
58
|
+
if (cleanupTokenRef.current && registryContainer.registry) {
|
|
59
|
+
// If the effect was called, it means that this render was committed
|
|
60
|
+
// so we can trust the cleanup function to remove the listener.
|
|
61
|
+
registryContainer.registry.unregister(cleanupTokenRef.current);
|
|
62
|
+
cleanupTokenRef.current = null;
|
|
63
|
+
}
|
|
64
|
+
return () => {
|
|
65
|
+
var _subscription$current2;
|
|
66
|
+
(_subscription$current2 = subscription.current) == null || _subscription$current2.call(subscription);
|
|
67
|
+
subscription.current = null;
|
|
68
|
+
};
|
|
69
|
+
}, [instance, eventName]);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const registryContainer = {
|
|
73
|
+
registry: null
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
77
|
+
export const unstable_resetCleanupTracking = () => {
|
|
78
|
+
var _registryContainer$re;
|
|
79
|
+
(_registryContainer$re = registryContainer.registry) == null || _registryContainer$re.reset();
|
|
80
|
+
registryContainer.registry = null;
|
|
81
|
+
};
|
|
82
|
+
export const useInstanceEventHandler = createUseInstanceEventHandler(registryContainer);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface TreeViewEventLookupElement {
|
|
3
|
+
params: object;
|
|
4
|
+
}
|
|
5
|
+
export type TreeViewEventListener<E extends TreeViewEventLookupElement> = (params: E['params'], event: MuiEvent<{}>) => void;
|
|
6
|
+
export type MuiBaseEvent = React.SyntheticEvent<HTMLElement> | DocumentEventMap[keyof DocumentEventMap] | {};
|
|
7
|
+
export type MuiEvent<E extends MuiBaseEvent = MuiBaseEvent> = E & {
|
|
8
|
+
defaultMuiPrevented?: boolean;
|
|
9
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { 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 MergePluginsProperty<TPlugins extends readonly any[], TProperty extends keyof TreeViewAnyPluginSignature> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewAnyPluginSignature ? P[TProperty] & MergePluginsProperty<R, TProperty> : {} : {};
|
|
4
|
+
export type ConvertPluginsIntoSignatures<TPlugins extends readonly any[]> = TPlugins extends readonly [plugin: infer P, ...otherPlugin: infer R] ? P extends TreeViewPlugin<infer TSignature> ? [TSignature, ...ConvertPluginsIntoSignatures<R>] : ConvertPluginsIntoSignatures<R> : [];
|
|
5
|
+
export interface MergePlugins<TPlugins extends readonly any[]> {
|
|
6
|
+
state: MergePluginsProperty<TPlugins, 'state'>;
|
|
7
|
+
instance: MergePluginsProperty<TPlugins, 'instance'>;
|
|
8
|
+
params: MergePluginsProperty<TPlugins, 'params'>;
|
|
9
|
+
defaultizedParams: MergePluginsProperty<TPlugins, 'defaultizedParams'>;
|
|
10
|
+
dependantPlugins: MergePluginsProperty<TPlugins, 'dependantPlugins'>;
|
|
11
|
+
events: MergePluginsProperty<TPlugins, 'events'>;
|
|
12
|
+
models: MergePluginsProperty<TPlugins, 'models'>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { EventHandlers } from '@mui/base/utils';
|
|
3
|
+
import { TreeViewModel } from './treeView';
|
|
4
|
+
import type { TreeViewContextValue } from '../TreeViewProvider';
|
|
5
|
+
import type { MergePluginsProperty } from './helpers';
|
|
6
|
+
import { TreeViewEventLookupElement } from './events';
|
|
7
|
+
import type { TreeViewCorePluginsSignature } from '../corePlugins';
|
|
8
|
+
export interface TreeViewPluginOptions<TSignature extends TreeViewAnyPluginSignature> {
|
|
9
|
+
instance: TreeViewUsedInstance<TSignature>;
|
|
10
|
+
params: TreeViewUsedDefaultizedParams<TSignature>;
|
|
11
|
+
state: TreeViewUsedState<TSignature>;
|
|
12
|
+
models: TreeViewUsedModels<TSignature>;
|
|
13
|
+
setState: React.Dispatch<React.SetStateAction<TreeViewUsedState<TSignature>>>;
|
|
14
|
+
rootRef: React.RefObject<HTMLUListElement>;
|
|
15
|
+
}
|
|
16
|
+
type TreeViewModelsInitializer<TSignature extends TreeViewAnyPluginSignature> = {
|
|
17
|
+
[TControlled in keyof TSignature['models']]: {
|
|
18
|
+
controlledProp: TControlled;
|
|
19
|
+
defaultProp: keyof TSignature['params'];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
interface TreeViewResponse {
|
|
23
|
+
getRootProps?: <TOther extends EventHandlers = {}>(otherHandlers: TOther) => React.HTMLAttributes<HTMLUListElement>;
|
|
24
|
+
contextValue?: TreeViewContextValue<any>;
|
|
25
|
+
}
|
|
26
|
+
export type TreeViewPluginSignature<TParams extends {}, TDefaultizedParams extends {}, TInstance extends {}, TEvents extends {
|
|
27
|
+
[key in keyof TEvents]: TreeViewEventLookupElement;
|
|
28
|
+
}, TState extends {}, TModelNames extends keyof TDefaultizedParams, TDependantPlugins extends readonly TreeViewAnyPluginSignature[]> = {
|
|
29
|
+
params: TParams;
|
|
30
|
+
defaultizedParams: TDefaultizedParams;
|
|
31
|
+
instance: TInstance;
|
|
32
|
+
state: TState;
|
|
33
|
+
models: {
|
|
34
|
+
[TControlled in TModelNames]-?: TreeViewModel<Exclude<TDefaultizedParams[TControlled], undefined>>;
|
|
35
|
+
};
|
|
36
|
+
events: TEvents;
|
|
37
|
+
dependantPlugins: TDependantPlugins;
|
|
38
|
+
};
|
|
39
|
+
export type TreeViewAnyPluginSignature = {
|
|
40
|
+
state: any;
|
|
41
|
+
instance: any;
|
|
42
|
+
params: any;
|
|
43
|
+
defaultizedParams: any;
|
|
44
|
+
dependantPlugins: any;
|
|
45
|
+
events: any;
|
|
46
|
+
models: any;
|
|
47
|
+
};
|
|
48
|
+
type TreeViewUsedPlugins<TSignature extends TreeViewAnyPluginSignature> = [
|
|
49
|
+
TreeViewCorePluginsSignature,
|
|
50
|
+
...TSignature['dependantPlugins']
|
|
51
|
+
];
|
|
52
|
+
type TreeViewUsedParams<TSignature extends TreeViewAnyPluginSignature> = TSignature['params'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'params'>;
|
|
53
|
+
type TreeViewUsedDefaultizedParams<TSignature extends TreeViewAnyPluginSignature> = TSignature['defaultizedParams'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'defaultizedParams'>;
|
|
54
|
+
export type TreeViewUsedInstance<TSignature extends TreeViewAnyPluginSignature> = TSignature['instance'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'instance'> & {
|
|
55
|
+
/**
|
|
56
|
+
* Private property only defined in TypeScript to be able to access the plugin signature from the instance object.
|
|
57
|
+
*/
|
|
58
|
+
$$signature: TSignature;
|
|
59
|
+
};
|
|
60
|
+
type TreeViewUsedState<TSignature extends TreeViewAnyPluginSignature> = TSignature['state'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'state'>;
|
|
61
|
+
export type TreeViewUsedModels<TSignature extends TreeViewAnyPluginSignature> = TSignature['models'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'models'>;
|
|
62
|
+
export type TreeViewUsedEvents<TSignature extends TreeViewAnyPluginSignature> = TSignature['events'] & MergePluginsProperty<TreeViewUsedPlugins<TSignature>, 'events'>;
|
|
63
|
+
export type TreeViewPlugin<TSignature extends TreeViewAnyPluginSignature> = {
|
|
64
|
+
(options: TreeViewPluginOptions<TSignature>): void | TreeViewResponse;
|
|
65
|
+
getDefaultizedParams?: (params: TreeViewUsedParams<TSignature>) => TSignature['defaultizedParams'];
|
|
66
|
+
getInitialState?: (params: TreeViewUsedDefaultizedParams<TSignature>) => TSignature['state'];
|
|
67
|
+
models?: TreeViewModelsInitializer<TSignature>;
|
|
68
|
+
};
|
|
69
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|