@mui/x-tree-view 8.23.0 → 8.24.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 +111 -1
- package/RichTreeView/RichTreeView.d.ts +1 -1
- package/RichTreeView/RichTreeView.js +34 -28
- package/RichTreeView/RichTreeView.types.d.ts +6 -4
- package/RichTreeView/index.d.ts +1 -3
- package/RichTreeView/index.js +1 -13
- package/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
- package/RichTreeView/useExtractRichTreeViewParameters.js +91 -0
- package/SimpleTreeView/SimpleTreeView.d.ts +1 -1
- package/SimpleTreeView/SimpleTreeView.js +30 -24
- package/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
- package/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
- package/SimpleTreeView/useExtractSimpleTreeViewParameters.js +78 -0
- package/TreeItem/TreeItem.d.ts +1 -1
- package/TreeItemProvider/TreeItemProvider.js +3 -10
- package/esm/RichTreeView/RichTreeView.d.ts +1 -1
- package/esm/RichTreeView/RichTreeView.js +33 -27
- package/esm/RichTreeView/RichTreeView.types.d.ts +6 -4
- package/esm/RichTreeView/index.d.ts +1 -3
- package/esm/RichTreeView/index.js +1 -1
- package/esm/RichTreeView/useExtractRichTreeViewParameters.d.ts +294 -0
- package/esm/RichTreeView/useExtractRichTreeViewParameters.js +83 -0
- package/esm/SimpleTreeView/SimpleTreeView.d.ts +1 -1
- package/esm/SimpleTreeView/SimpleTreeView.js +29 -23
- package/esm/SimpleTreeView/SimpleTreeView.types.d.ts +5 -4
- package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.d.ts +293 -0
- package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.js +70 -0
- package/esm/TreeItem/TreeItem.d.ts +1 -1
- package/esm/TreeItemProvider/TreeItemProvider.js +3 -10
- package/esm/hooks/useApplyPropagationToSelectedItemsOnMount.js +1 -1
- package/esm/hooks/useRichTreeViewApiRef.d.ts +2 -2
- package/esm/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
- package/esm/hooks/useTreeItemModel.d.ts +2 -2
- package/esm/hooks/useTreeItemModel.js +1 -1
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
- package/esm/hooks/useTreeItemUtils/useTreeItemUtils.js +25 -34
- package/esm/hooks/useTreeViewApiRef.d.ts +2 -4
- package/esm/hooks/useTreeViewApiRef.js +3 -2
- package/esm/index.d.ts +0 -1
- package/esm/index.js +1 -2
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +126 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
- package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +49 -0
- package/esm/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
- package/esm/internals/MinimalTreeViewStore/TimeoutManager.js +39 -0
- package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
- package/esm/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +16 -0
- package/esm/internals/MinimalTreeViewStore/index.d.ts +2 -0
- package/esm/internals/MinimalTreeViewStore/index.js +2 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.js +21 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
- package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.js +15 -0
- package/esm/internals/RichTreeViewStore/index.d.ts +3 -0
- package/esm/internals/RichTreeViewStore/index.js +3 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +18 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
- package/esm/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +5 -0
- package/esm/internals/SimpleTreeViewStore/index.d.ts +2 -0
- package/esm/internals/SimpleTreeViewStore/index.js +2 -0
- package/esm/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
- package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +2 -3
- package/esm/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
- package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
- package/esm/internals/TreeViewProvider/TreeViewProvider.js +11 -6
- package/esm/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
- package/esm/internals/TreeViewProvider/index.d.ts +1 -1
- package/esm/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
- package/esm/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
- package/esm/internals/components/RichTreeViewItems.js +3 -3
- package/esm/internals/hooks/useTreeViewRootProps.d.ts +287 -0
- package/esm/internals/hooks/useTreeViewRootProps.js +30 -0
- package/esm/internals/hooks/useTreeViewStore.d.ts +10 -0
- package/esm/internals/hooks/useTreeViewStore.js +19 -0
- package/esm/internals/index.d.ts +15 -21
- package/esm/internals/index.js +11 -14
- package/esm/internals/models/events.d.ts +24 -3
- package/esm/internals/models/index.d.ts +2 -3
- package/esm/internals/models/index.js +2 -3
- package/esm/internals/models/itemPlugin.d.ts +9 -0
- package/esm/internals/models/treeView.d.ts +5 -9
- package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
- package/esm/internals/plugins/expansion/TreeViewExpansionPlugin.js +124 -0
- package/esm/internals/plugins/expansion/index.d.ts +2 -0
- package/esm/internals/plugins/expansion/index.js +2 -0
- package/esm/internals/plugins/expansion/selectors.d.ts +27 -0
- package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +5 -5
- package/esm/internals/plugins/expansion/utils.d.ts +5 -0
- package/esm/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
- package/esm/internals/plugins/focus/TreeViewFocusPlugin.js +107 -0
- package/esm/internals/plugins/focus/index.d.ts +2 -0
- package/esm/internals/plugins/focus/index.js +2 -0
- package/esm/internals/plugins/focus/selectors.d.ts +21 -0
- package/esm/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +6 -6
- package/esm/internals/plugins/id/index.d.ts +1 -0
- package/esm/internals/plugins/id/index.js +1 -0
- package/esm/internals/plugins/id/selectors.d.ts +13 -0
- package/esm/internals/plugins/id/selectors.js +18 -0
- package/esm/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
- package/esm/internals/plugins/items/TreeViewItemsPlugin.js +223 -0
- package/esm/internals/plugins/items/index.d.ts +3 -0
- package/esm/internals/plugins/items/index.js +3 -0
- package/esm/internals/plugins/items/selectors.d.ts +60 -0
- package/esm/internals/plugins/items/selectors.js +64 -0
- package/esm/internals/plugins/items/utils.d.ts +43 -0
- package/esm/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -50
- package/esm/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
- package/esm/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +81 -0
- package/esm/internals/plugins/jsxItems/index.d.ts +1 -0
- package/esm/internals/plugins/jsxItems/index.js +1 -0
- package/esm/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
- package/esm/internals/plugins/{useTreeViewJSXItems → jsxItems}/itemPlugin.js +29 -17
- package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
- package/esm/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +306 -0
- package/esm/internals/plugins/keyboardNavigation/index.d.ts +1 -0
- package/esm/internals/plugins/keyboardNavigation/index.js +1 -0
- package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
- package/esm/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +50 -0
- package/esm/internals/plugins/labelEditing/index.d.ts +2 -0
- package/esm/internals/plugins/labelEditing/index.js +2 -0
- package/{internals/plugins/useTreeViewLabel → esm/internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
- package/esm/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +2 -2
- package/esm/internals/plugins/labelEditing/selectors.d.ts +15 -0
- package/esm/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
- package/esm/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/esm/internals/plugins/lazyLoading/index.js +2 -0
- package/esm/internals/plugins/lazyLoading/selectors.d.ts +19 -0
- package/esm/internals/plugins/lazyLoading/selectors.js +25 -0
- package/esm/internals/plugins/lazyLoading/types.d.ts +5 -0
- package/esm/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
- package/esm/internals/plugins/selection/TreeViewSelectionPlugin.js +319 -0
- package/esm/internals/plugins/selection/index.d.ts +2 -0
- package/esm/internals/plugins/selection/index.js +2 -0
- package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
- package/esm/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +3 -3
- package/esm/internals/plugins/selection/selectors.d.ts +48 -0
- package/esm/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +14 -9
- package/esm/internals/utils/tree.d.ts +8 -10
- package/esm/internals/utils/tree.js +2 -2
- package/esm/models/items.d.ts +5 -2
- package/esm/useTreeItem/useTreeItem.d.ts +18 -2
- package/esm/useTreeItem/useTreeItem.js +14 -18
- package/esm/useTreeItem/useTreeItem.types.d.ts +4 -19
- package/hooks/useApplyPropagationToSelectedItemsOnMount.js +2 -2
- package/hooks/useRichTreeViewApiRef.d.ts +2 -2
- package/hooks/useSimpleTreeViewApiRef.d.ts +2 -3
- package/hooks/useTreeItemModel.d.ts +2 -2
- package/hooks/useTreeItemModel.js +2 -2
- package/hooks/useTreeItemUtils/useTreeItemUtils.d.ts +9 -19
- package/hooks/useTreeItemUtils/useTreeItemUtils.js +41 -49
- package/hooks/useTreeViewApiRef.d.ts +2 -4
- package/hooks/useTreeViewApiRef.js +2 -4
- package/index.d.ts +0 -1
- package/index.js +1 -22
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.d.ts +90 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.js +134 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +272 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +21 -0
- package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +58 -0
- package/internals/MinimalTreeViewStore/TimeoutManager.d.ts +9 -0
- package/internals/MinimalTreeViewStore/TimeoutManager.js +46 -0
- package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.d.ts +12 -0
- package/internals/MinimalTreeViewStore/TreeViewItemPluginManager.js +23 -0
- package/internals/MinimalTreeViewStore/index.d.ts +2 -0
- package/internals/MinimalTreeViewStore/index.js +27 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.d.ts +53 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.js +30 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +34 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.utils.d.ts +3 -0
- package/internals/RichTreeViewStore/RichTreeViewStore.utils.js +22 -0
- package/internals/RichTreeViewStore/index.d.ts +3 -0
- package/internals/RichTreeViewStore/index.js +38 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.d.ts +8 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.js +26 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.types.d.ts +9 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.d.ts +3 -0
- package/internals/SimpleTreeViewStore/SimpleTreeViewStore.utils.js +11 -0
- package/internals/SimpleTreeViewStore/index.d.ts +2 -0
- package/internals/SimpleTreeViewStore/index.js +27 -0
- package/internals/TreeViewItemDepthContext/TreeViewItemDepthContext.d.ts +2 -3
- package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -4
- package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -3
- package/internals/TreeViewProvider/TreeViewProvider.d.ts +2 -2
- package/internals/TreeViewProvider/TreeViewProvider.js +14 -9
- package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +8 -10
- package/internals/TreeViewProvider/index.d.ts +1 -1
- package/internals/TreeViewProvider/useTreeViewBuildContext.d.ts +16 -0
- package/internals/{useTreeView → TreeViewProvider}/useTreeViewBuildContext.js +25 -39
- package/internals/components/RichTreeViewItems.js +9 -9
- package/internals/hooks/useTreeViewRootProps.d.ts +287 -0
- package/internals/hooks/useTreeViewRootProps.js +36 -0
- package/internals/hooks/useTreeViewStore.d.ts +10 -0
- package/internals/hooks/useTreeViewStore.js +26 -0
- package/internals/index.d.ts +15 -21
- package/internals/index.js +40 -70
- package/internals/models/events.d.ts +24 -3
- package/internals/models/index.d.ts +2 -3
- package/internals/models/index.js +11 -22
- package/internals/models/itemPlugin.d.ts +9 -0
- package/internals/models/treeView.d.ts +5 -9
- package/internals/plugins/expansion/TreeViewExpansionPlugin.d.ts +69 -0
- package/internals/plugins/expansion/TreeViewExpansionPlugin.js +132 -0
- package/internals/plugins/expansion/index.d.ts +2 -0
- package/internals/plugins/expansion/index.js +27 -0
- package/internals/plugins/expansion/selectors.d.ts +27 -0
- package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.selectors.js → expansion/selectors.js} +8 -8
- package/internals/plugins/expansion/utils.d.ts +5 -0
- package/internals/plugins/focus/TreeViewFocusPlugin.d.ts +33 -0
- package/internals/plugins/focus/TreeViewFocusPlugin.js +114 -0
- package/internals/plugins/focus/index.d.ts +2 -0
- package/internals/plugins/focus/index.js +27 -0
- package/internals/plugins/focus/selectors.d.ts +21 -0
- package/internals/plugins/{useTreeViewFocus/useTreeViewFocus.selectors.js → focus/selectors.js} +9 -9
- package/internals/plugins/id/index.d.ts +1 -0
- package/internals/plugins/id/index.js +16 -0
- package/internals/plugins/id/selectors.d.ts +13 -0
- package/internals/plugins/id/selectors.js +24 -0
- package/internals/plugins/items/TreeViewItemsPlugin.d.ts +105 -0
- package/internals/plugins/items/TreeViewItemsPlugin.js +231 -0
- package/internals/plugins/items/index.d.ts +3 -0
- package/internals/plugins/items/index.js +46 -0
- package/internals/plugins/items/selectors.d.ts +60 -0
- package/internals/plugins/{useTreeViewItems/useTreeViewItems.selectors.js → items/selectors.js} +16 -16
- package/internals/plugins/items/utils.d.ts +43 -0
- package/internals/plugins/{useTreeViewItems/useTreeViewItems.utils.js → items/utils.js} +6 -51
- package/internals/plugins/{useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts → jsxItems/TreeViewJSXItemsPlugin.d.ts} +6 -13
- package/internals/plugins/jsxItems/TreeViewJSXItemsPlugin.js +89 -0
- package/internals/plugins/jsxItems/index.d.ts +1 -0
- package/internals/plugins/jsxItems/index.js +16 -0
- package/internals/plugins/jsxItems/itemPlugin.d.ts +4 -0
- package/internals/plugins/{useTreeViewJSXItems → jsxItems}/itemPlugin.js +30 -17
- package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.d.ts +28 -0
- package/internals/plugins/keyboardNavigation/TreeViewKeyboardNavigationPlugin.js +313 -0
- package/internals/plugins/keyboardNavigation/index.d.ts +1 -0
- package/internals/plugins/keyboardNavigation/index.js +16 -0
- package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.d.ts +22 -0
- package/internals/plugins/labelEditing/TreeViewLabelEditingPlugin.js +58 -0
- package/internals/plugins/labelEditing/index.d.ts +2 -0
- package/internals/plugins/labelEditing/index.js +27 -0
- package/{esm/internals/plugins/useTreeViewLabel → internals/plugins/labelEditing}/itemPlugin.d.ts +5 -4
- package/internals/plugins/{useTreeViewLabel → labelEditing}/itemPlugin.js +6 -6
- package/internals/plugins/labelEditing/selectors.d.ts +15 -0
- package/internals/plugins/{useTreeViewLabel/useTreeViewLabel.selectors.js → labelEditing/selectors.js} +4 -4
- package/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/internals/plugins/lazyLoading/index.js +27 -0
- package/internals/plugins/lazyLoading/selectors.d.ts +19 -0
- package/internals/plugins/{useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js → lazyLoading/selectors.js} +11 -6
- package/internals/plugins/lazyLoading/types.d.ts +5 -0
- package/internals/plugins/selection/TreeViewSelectionPlugin.d.ts +73 -0
- package/internals/plugins/selection/TreeViewSelectionPlugin.js +327 -0
- package/internals/plugins/selection/index.d.ts +2 -0
- package/internals/plugins/selection/index.js +27 -0
- package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.d.ts +1 -1
- package/internals/plugins/{useTreeViewSelection → selection}/itemPlugin.js +13 -13
- package/internals/plugins/selection/selectors.d.ts +48 -0
- package/internals/plugins/{useTreeViewSelection/useTreeViewSelection.selectors.js → selection/selectors.js} +14 -9
- package/internals/utils/tree.d.ts +8 -10
- package/internals/utils/tree.js +33 -33
- package/models/items.d.ts +5 -2
- package/package.json +2 -2
- package/useTreeItem/useTreeItem.d.ts +18 -2
- package/useTreeItem/useTreeItem.js +18 -23
- package/useTreeItem/useTreeItem.types.d.ts +4 -19
- package/RichTreeView/RichTreeView.plugins.d.ts +0 -10
- package/RichTreeView/RichTreeView.plugins.js +0 -15
- package/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
- package/SimpleTreeView/SimpleTreeView.plugins.js +0 -15
- package/esm/RichTreeView/RichTreeView.plugins.d.ts +0 -10
- package/esm/RichTreeView/RichTreeView.plugins.js +0 -9
- package/esm/SimpleTreeView/SimpleTreeView.plugins.d.ts +0 -9
- package/esm/SimpleTreeView/SimpleTreeView.plugins.js +0 -9
- package/esm/internals/corePlugins/corePlugins.d.ts +0 -9
- package/esm/internals/corePlugins/corePlugins.js +0 -8
- package/esm/internals/corePlugins/index.d.ts +0 -2
- package/esm/internals/corePlugins/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewId/index.js +0 -2
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -38
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -9
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
- package/esm/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -26
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -31
- package/esm/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -1
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -12
- package/esm/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
- package/esm/internals/hooks/useInstanceEventHandler.d.ts +0 -15
- package/esm/internals/hooks/useInstanceEventHandler.js +0 -79
- package/esm/internals/models/helpers.d.ts +0 -7
- package/esm/internals/models/plugin.d.ts +0 -166
- package/esm/internals/models/plugin.js +0 -1
- package/esm/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewExpansion/index.js +0 -2
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -149
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -1
- package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
- package/esm/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewFocus/index.js +0 -2
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -113
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
- package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -1
- package/esm/internals/plugins/useTreeViewItems/index.d.ts +0 -4
- package/esm/internals/plugins/useTreeViewItems/index.js +0 -3
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -223
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -60
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.js +0 -64
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -204
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -1
- package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
- package/esm/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewJSXItems/index.js +0 -1
- package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -104
- package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -1
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -1
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -305
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
- package/esm/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -1
- package/esm/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewLabel/index.js +0 -2
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -70
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
- package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.js +0 -20
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -1
- package/esm/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewSelection/index.js +0 -2
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -231
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -45
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -1
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
- package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -107
- package/esm/internals/useTreeView/index.d.ts +0 -1
- package/esm/internals/useTreeView/index.js +0 -1
- package/esm/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
- package/esm/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -51
- package/esm/internals/useTreeView/useTreeView.d.ts +0 -18
- package/esm/internals/useTreeView/useTreeView.js +0 -102
- package/esm/internals/useTreeView/useTreeView.types.d.ts +0 -20
- package/esm/internals/useTreeView/useTreeView.types.js +0 -1
- package/esm/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
- package/esm/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
- package/esm/internals/utils/cleanupTracking/CleanupTracking.js +0 -1
- package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
- package/esm/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -14
- package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
- package/esm/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -38
- package/esm/internals/utils/plugins.d.ts +0 -2
- package/esm/internals/utils/plugins.js +0 -4
- package/esm/internals/utils/publishTreeViewEvent.d.ts +0 -5
- package/esm/internals/utils/publishTreeViewEvent.js +0 -3
- package/internals/corePlugins/corePlugins.d.ts +0 -9
- package/internals/corePlugins/corePlugins.js +0 -14
- package/internals/corePlugins/index.d.ts +0 -2
- package/internals/corePlugins/index.js +0 -12
- package/internals/corePlugins/useTreeViewId/index.d.ts +0 -3
- package/internals/corePlugins/useTreeViewId/index.js +0 -19
- package/internals/corePlugins/useTreeViewId/useTreeViewId.d.ts +0 -3
- package/internals/corePlugins/useTreeViewId/useTreeViewId.js +0 -46
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.d.ts +0 -10
- package/internals/corePlugins/useTreeViewId/useTreeViewId.selectors.js +0 -15
- package/internals/corePlugins/useTreeViewId/useTreeViewId.types.d.ts +0 -20
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.d.ts +0 -21
- package/internals/corePlugins/useTreeViewId/useTreeViewId.utils.js +0 -34
- package/internals/corePlugins/useTreeViewInstanceEvents/index.d.ts +0 -2
- package/internals/corePlugins/useTreeViewInstanceEvents/index.js +0 -12
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.d.ts +0 -3
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +0 -38
- package/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.d.ts +0 -22
- package/internals/corePlugins/useTreeViewOptionalPlugins/index.d.ts +0 -2
- package/internals/corePlugins/useTreeViewOptionalPlugins/index.js +0 -12
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.d.ts +0 -3
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.js +0 -19
- package/internals/corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.d.ts +0 -8
- package/internals/hooks/useInstanceEventHandler.d.ts +0 -15
- package/internals/hooks/useInstanceEventHandler.js +0 -87
- package/internals/models/helpers.d.ts +0 -7
- package/internals/models/plugin.d.ts +0 -166
- package/internals/models/plugin.js +0 -5
- package/internals/plugins/useTreeViewExpansion/index.d.ts +0 -3
- package/internals/plugins/useTreeViewExpansion/index.js +0 -19
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.d.ts +0 -3
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +0 -157
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +0 -28
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +0 -112
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.js +0 -5
- package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.utils.d.ts +0 -6
- package/internals/plugins/useTreeViewFocus/index.d.ts +0 -3
- package/internals/plugins/useTreeViewFocus/index.js +0 -19
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.d.ts +0 -3
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +0 -121
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.selectors.d.ts +0 -22
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +0 -45
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.js +0 -5
- package/internals/plugins/useTreeViewItems/index.d.ts +0 -4
- package/internals/plugins/useTreeViewItems/index.js +0 -32
- package/internals/plugins/useTreeViewItems/useTreeViewItems.d.ts +0 -3
- package/internals/plugins/useTreeViewItems/useTreeViewItems.js +0 -231
- package/internals/plugins/useTreeViewItems/useTreeViewItems.selectors.d.ts +0 -60
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +0 -204
- package/internals/plugins/useTreeViewItems/useTreeViewItems.types.js +0 -5
- package/internals/plugins/useTreeViewItems/useTreeViewItems.utils.d.ts +0 -49
- package/internals/plugins/useTreeViewJSXItems/index.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXItems/index.js +0 -12
- package/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +0 -2
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.d.ts +0 -3
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +0 -112
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.js +0 -5
- package/internals/plugins/useTreeViewKeyboardNavigation/index.d.ts +0 -2
- package/internals/plugins/useTreeViewKeyboardNavigation/index.js +0 -12
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.d.ts +0 -3
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +0 -312
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +0 -32
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.js +0 -5
- package/internals/plugins/useTreeViewLabel/index.d.ts +0 -3
- package/internals/plugins/useTreeViewLabel/index.js +0 -19
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.d.ts +0 -3
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +0 -78
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.selectors.d.ts +0 -16
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +0 -50
- package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.js +0 -5
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -2
- package/internals/plugins/useTreeViewLazyLoading/index.js +0 -12
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.selectors.d.ts +0 -24
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.d.ts +0 -100
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.types.js +0 -5
- package/internals/plugins/useTreeViewSelection/index.d.ts +0 -3
- package/internals/plugins/useTreeViewSelection/index.js +0 -19
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.d.ts +0 -3
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +0 -240
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.selectors.d.ts +0 -45
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +0 -132
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.js +0 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +0 -31
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +0 -116
- package/internals/useTreeView/index.d.ts +0 -1
- package/internals/useTreeView/index.js +0 -12
- package/internals/useTreeView/useExtractPluginParamsFromProps.d.ts +0 -19
- package/internals/useTreeView/useExtractPluginParamsFromProps.js +0 -60
- package/internals/useTreeView/useTreeView.d.ts +0 -18
- package/internals/useTreeView/useTreeView.js +0 -112
- package/internals/useTreeView/useTreeView.types.d.ts +0 -20
- package/internals/useTreeView/useTreeView.types.js +0 -5
- package/internals/useTreeView/useTreeViewBuildContext.d.ts +0 -13
- package/internals/utils/cleanupTracking/CleanupTracking.d.ts +0 -9
- package/internals/utils/cleanupTracking/CleanupTracking.js +0 -5
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.d.ts +0 -7
- package/internals/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +0 -21
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -9
- package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.js +0 -45
- package/internals/utils/plugins.d.ts +0 -2
- package/internals/utils/plugins.js +0 -11
- package/internals/utils/publishTreeViewEvent.d.ts +0 -5
- package/internals/utils/publishTreeViewEvent.js +0 -10
- /package/esm/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
- /package/esm/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
- /package/esm/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
- /package/esm/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
- /package/esm/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewId/useTreeViewId.types.js → MinimalTreeViewStore/MinimalTreeViewStore.types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types.js → RichTreeViewStore/RichTreeViewStore.types.js} +0 -0
- /package/internals/{corePlugins/useTreeViewOptionalPlugins/useTreeViewOptionalPlugins.types.js → SimpleTreeViewStore/SimpleTreeViewStore.types.js} +0 -0
- /package/internals/plugins/{useTreeViewExpansion/useTreeViewExpansion.utils.js → expansion/utils.js} +0 -0
- /package/internals/{models/helpers.js → plugins/lazyLoading/types.js} +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID } from "../items/index.js";
|
|
3
|
+
import { jsxItemsitemWrapper, useJSXItemsItemPlugin } from "./itemPlugin.js";
|
|
4
|
+
export class TreeViewJSXItemsPlugin {
|
|
5
|
+
constructor(store) {
|
|
6
|
+
this.store = store;
|
|
7
|
+
store.itemPluginManager.register(useJSXItemsItemPlugin, jsxItemsitemWrapper);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Insert a new item in the state from a Tree Item component.
|
|
12
|
+
* @param {TreeViewItemMeta} item The meta-information of the item to insert.
|
|
13
|
+
* @returns {() => void} A function to remove the item from the state.
|
|
14
|
+
*/
|
|
15
|
+
insertJSXItem = item => {
|
|
16
|
+
if (this.store.state.itemMetaLookup[item.id] != null) {
|
|
17
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n'));
|
|
18
|
+
}
|
|
19
|
+
this.store.update({
|
|
20
|
+
itemMetaLookup: _extends({}, this.store.state.itemMetaLookup, {
|
|
21
|
+
[item.id]: item
|
|
22
|
+
}),
|
|
23
|
+
// For Simple Tree View, we don't have a proper `item` object, so we create a very basic one.
|
|
24
|
+
itemModelLookup: _extends({}, this.store.state.itemModelLookup, {
|
|
25
|
+
[item.id]: {
|
|
26
|
+
id: item.id,
|
|
27
|
+
label: item.label ?? ''
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
return () => {
|
|
32
|
+
const newItemMetaLookup = _extends({}, this.store.state.itemMetaLookup);
|
|
33
|
+
const newItemModelLookup = _extends({}, this.store.state.itemModelLookup);
|
|
34
|
+
delete newItemMetaLookup[item.id];
|
|
35
|
+
delete newItemModelLookup[item.id];
|
|
36
|
+
this.store.update({
|
|
37
|
+
itemMetaLookup: newItemMetaLookup,
|
|
38
|
+
itemModelLookup: newItemModelLookup
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Updates the `labelMap` to register the first character of the given item's label.
|
|
45
|
+
* This map is used to navigate the tree using type-ahead search.
|
|
46
|
+
* @param {TreeViewItemId} itemId The id of the item to map the label of.
|
|
47
|
+
* @param {string} label The item's label.
|
|
48
|
+
* @returns {() => void} A function to remove the item from the `labelMap`.
|
|
49
|
+
*/
|
|
50
|
+
mapLabelFromJSX = (itemId, label) => {
|
|
51
|
+
this.store.keyboardNavigation.updateLabelMap(labelMap => {
|
|
52
|
+
labelMap[itemId] = label;
|
|
53
|
+
return labelMap;
|
|
54
|
+
});
|
|
55
|
+
return () => {
|
|
56
|
+
this.store.keyboardNavigation.updateLabelMap(labelMap => {
|
|
57
|
+
const newMap = _extends({}, labelMap);
|
|
58
|
+
delete newMap[itemId];
|
|
59
|
+
return newMap;
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Store the ids of a given item's children in the state.
|
|
66
|
+
* Those ids must be passed in the order they should be rendered.
|
|
67
|
+
* @param {TreeViewItemId | null} parentId The id of the item to store the children of.
|
|
68
|
+
* @param {TreeViewItemId[]} orderedChildrenIds The ids of the item's children.
|
|
69
|
+
*/
|
|
70
|
+
setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => {
|
|
71
|
+
const parentIdWithDefault = parentId ?? TREE_VIEW_ROOT_PARENT_ID;
|
|
72
|
+
this.store.update({
|
|
73
|
+
itemOrderedChildrenIdsLookup: _extends({}, this.store.state.itemOrderedChildrenIdsLookup, {
|
|
74
|
+
[parentIdWithDefault]: orderedChildrenIds
|
|
75
|
+
}),
|
|
76
|
+
itemChildrenIndexesLookup: _extends({}, this.store.state.itemChildrenIndexesLookup, {
|
|
77
|
+
[parentIdWithDefault]: buildSiblingIndexes(orderedChildrenIds)
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TreeViewJSXItemsPlugin.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TreeViewJSXItemsPlugin.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TreeItemWrapper, TreeViewItemPlugin } from "../../models/index.js";
|
|
2
|
+
import { SimpleTreeViewStore } from "../../SimpleTreeViewStore/index.js";
|
|
3
|
+
export declare const useJSXItemsItemPlugin: TreeViewItemPlugin;
|
|
4
|
+
export declare const jsxItemsitemWrapper: TreeItemWrapper<SimpleTreeViewStore<any>>;
|
|
@@ -5,17 +5,17 @@ import { useStore } from '@mui/x-internals/store';
|
|
|
5
5
|
import { useMergedRefs } from '@base-ui/utils/useMergedRefs';
|
|
6
6
|
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
|
|
7
7
|
import { useTreeViewContext } from "../../TreeViewProvider/index.js";
|
|
8
|
-
import { TreeViewChildrenItemContext } from "../../TreeViewProvider/TreeViewChildrenItemProvider.js";
|
|
8
|
+
import { TreeViewChildrenItemContext, TreeViewChildrenItemProvider } from "../../TreeViewProvider/TreeViewChildrenItemProvider.js";
|
|
9
|
+
import { TreeViewItemDepthContext } from "../../TreeViewItemDepthContext/index.js";
|
|
9
10
|
import { itemHasChildren } from "../../../hooks/useTreeItemUtils/useTreeItemUtils.js";
|
|
10
|
-
import { idSelectors } from "
|
|
11
|
-
import {
|
|
12
|
-
export const
|
|
11
|
+
import { idSelectors } from "../id/index.js";
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
export const useJSXItemsItemPlugin = ({
|
|
13
14
|
props,
|
|
14
15
|
rootRef,
|
|
15
16
|
contentRef
|
|
16
17
|
}) => {
|
|
17
18
|
const {
|
|
18
|
-
instance,
|
|
19
19
|
store
|
|
20
20
|
} = useTreeViewContext();
|
|
21
21
|
const {
|
|
@@ -38,23 +38,18 @@ export const useTreeViewJSXItemsItemPlugin = ({
|
|
|
38
38
|
const expandable = itemHasChildren(children);
|
|
39
39
|
const pluginContentRef = React.useRef(null);
|
|
40
40
|
const handleContentRef = useMergedRefs(pluginContentRef, contentRef);
|
|
41
|
-
const
|
|
41
|
+
const idAttribute = useStore(store, idSelectors.treeItemIdAttribute, itemId, id);
|
|
42
42
|
|
|
43
43
|
// Prevent any flashing
|
|
44
44
|
useIsoLayoutEffect(() => {
|
|
45
|
-
const idAttribute = generateTreeItemIdAttribute({
|
|
46
|
-
itemId,
|
|
47
|
-
treeId,
|
|
48
|
-
id
|
|
49
|
-
});
|
|
50
45
|
registerChild(idAttribute, itemId);
|
|
51
46
|
return () => {
|
|
52
47
|
unregisterChild(idAttribute);
|
|
53
48
|
unregisterChild(idAttribute);
|
|
54
49
|
};
|
|
55
|
-
}, [store,
|
|
50
|
+
}, [store, registerChild, unregisterChild, idAttribute, itemId]);
|
|
56
51
|
useIsoLayoutEffect(() => {
|
|
57
|
-
return
|
|
52
|
+
return store.jsxItems.insertJSXItem({
|
|
58
53
|
id: itemId,
|
|
59
54
|
idAttribute: id,
|
|
60
55
|
parentId,
|
|
@@ -62,15 +57,32 @@ export const useTreeViewJSXItemsItemPlugin = ({
|
|
|
62
57
|
disabled,
|
|
63
58
|
selectable: !disableSelection
|
|
64
59
|
});
|
|
65
|
-
}, [
|
|
60
|
+
}, [store, parentId, itemId, expandable, disabled, disableSelection, id]);
|
|
66
61
|
React.useEffect(() => {
|
|
67
62
|
if (label) {
|
|
68
|
-
return
|
|
63
|
+
return store.jsxItems.mapLabelFromJSX(itemId, (pluginContentRef.current?.textContent ?? '').toLowerCase());
|
|
69
64
|
}
|
|
70
65
|
return undefined;
|
|
71
|
-
}, [
|
|
66
|
+
}, [store, itemId, label]);
|
|
72
67
|
return {
|
|
73
68
|
contentRef: handleContentRef,
|
|
74
69
|
rootRef
|
|
75
70
|
};
|
|
76
|
-
};
|
|
71
|
+
};
|
|
72
|
+
export const jsxItemsitemWrapper = ({
|
|
73
|
+
children,
|
|
74
|
+
itemId,
|
|
75
|
+
idAttribute
|
|
76
|
+
}) => {
|
|
77
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
78
|
+
const depthContext = React.useContext(TreeViewItemDepthContext);
|
|
79
|
+
return /*#__PURE__*/_jsx(TreeViewChildrenItemProvider, {
|
|
80
|
+
itemId: itemId,
|
|
81
|
+
idAttribute: idAttribute,
|
|
82
|
+
children: /*#__PURE__*/_jsx(TreeViewItemDepthContext.Provider, {
|
|
83
|
+
value: depthContext + 1,
|
|
84
|
+
children: children
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
if (process.env.NODE_ENV !== "production") jsxItemsitemWrapper.displayName = "jsxItemsitemWrapper";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TreeViewCancellableEvent, TreeViewItemId } from "../../../models/index.js";
|
|
2
|
+
type TreeViewLabelMap = {
|
|
3
|
+
[itemId: string]: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class TreeViewKeyboardNavigationPlugin {
|
|
6
|
+
private store;
|
|
7
|
+
private labelMap;
|
|
8
|
+
private typeaheadQuery;
|
|
9
|
+
constructor(store: any);
|
|
10
|
+
private canToggleItemSelection;
|
|
11
|
+
private canToggleItemExpansion;
|
|
12
|
+
private getFirstItemMatchingTypeaheadQuery;
|
|
13
|
+
/**
|
|
14
|
+
* Updates the `labelMap` to add/remove the first character of some item's labels.
|
|
15
|
+
* This map is used to navigate the tree using type-ahead search.
|
|
16
|
+
* This method is only used by the `useTreeViewJSXItems` plugin, otherwise the updates are handled internally.
|
|
17
|
+
* @param {(map: TreeViewLabelMap) => TreeViewLabelMap} updater The function to update the map.
|
|
18
|
+
*/
|
|
19
|
+
updateLabelMap: (callback: (labelMap: TreeViewLabelMap) => TreeViewLabelMap) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Callback fired when a key is pressed on an item.
|
|
22
|
+
* Handles all the keyboard navigation logic.
|
|
23
|
+
* @param {React.KeyboardEvent<HTMLElement> & TreeViewCancellableEvent} event The keyboard event that triggered the callback.
|
|
24
|
+
* @param {TreeViewItemId} itemId The id of the item that the event was triggered on.
|
|
25
|
+
*/
|
|
26
|
+
handleItemKeyDown: (event: React.KeyboardEvent<HTMLElement> & TreeViewCancellableEvent, itemId: TreeViewItemId) => Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { expansionSelectors } from "../expansion/index.js";
|
|
2
|
+
import { itemsSelectors } from "../items/index.js";
|
|
3
|
+
import { labelSelectors } from "../labelEditing/index.js";
|
|
4
|
+
import { selectionSelectors } from "../selection/selectors.js";
|
|
5
|
+
import { getFirstNavigableItem, getLastNavigableItem, getNextNavigableItem, getPreviousNavigableItem, isTargetInDescendants } from "../../utils/tree.js";
|
|
6
|
+
const TYPEAHEAD_TIMEOUT = 500;
|
|
7
|
+
export class TreeViewKeyboardNavigationPlugin {
|
|
8
|
+
typeaheadQuery = '';
|
|
9
|
+
|
|
10
|
+
// We can't type `store`, otherwise we get the following TS error:
|
|
11
|
+
// 'keyboardNavigation' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.
|
|
12
|
+
constructor(store) {
|
|
13
|
+
this.store = store;
|
|
14
|
+
this.labelMap = createLabelMapFromItemMetaLookup(itemsSelectors.itemMetaLookup(this.store.state));
|
|
15
|
+
|
|
16
|
+
// Whenever the itemMetaLookup changes, we need to regen the label map.
|
|
17
|
+
this.store.registerStoreEffect(itemsSelectors.itemMetaLookup, (_, itemMetaLookup) => {
|
|
18
|
+
if (this.store.shouldIgnoreItemsStateUpdate()) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.labelMap = createLabelMapFromItemMetaLookup(itemMetaLookup);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
canToggleItemSelection = itemId => selectionSelectors.canItemBeSelected(this.store.state, itemId);
|
|
25
|
+
canToggleItemExpansion = itemId => {
|
|
26
|
+
return !itemsSelectors.isItemDisabled(this.store.state, itemId) && expansionSelectors.isItemExpandable(this.store.state, itemId);
|
|
27
|
+
};
|
|
28
|
+
getFirstItemMatchingTypeaheadQuery = (itemId, newKey) => {
|
|
29
|
+
const getNextItem = itemIdToCheck => {
|
|
30
|
+
const nextItemId = getNextNavigableItem(this.store.state, itemIdToCheck);
|
|
31
|
+
// We reached the end of the tree, check from the beginning
|
|
32
|
+
if (nextItemId === null) {
|
|
33
|
+
return getFirstNavigableItem(this.store.state);
|
|
34
|
+
}
|
|
35
|
+
return nextItemId;
|
|
36
|
+
};
|
|
37
|
+
const getNextMatchingItemId = query => {
|
|
38
|
+
let matchingItemId = null;
|
|
39
|
+
const checkedItems = {};
|
|
40
|
+
// If query length > 1, first check if current item matches
|
|
41
|
+
let currentItemId = query.length > 1 ? itemId : getNextItem(itemId);
|
|
42
|
+
// The "!checkedItems[currentItemId]" condition avoids an infinite loop when there is no matching item.
|
|
43
|
+
while (matchingItemId == null && !checkedItems[currentItemId]) {
|
|
44
|
+
const itemLabel = this.labelMap[currentItemId];
|
|
45
|
+
if (itemLabel?.startsWith(query)) {
|
|
46
|
+
matchingItemId = currentItemId;
|
|
47
|
+
} else {
|
|
48
|
+
checkedItems[currentItemId] = true;
|
|
49
|
+
currentItemId = getNextItem(currentItemId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return matchingItemId;
|
|
53
|
+
};
|
|
54
|
+
const cleanNewKey = newKey.toLowerCase();
|
|
55
|
+
|
|
56
|
+
// Try matching with accumulated query + new key
|
|
57
|
+
const concatenatedQuery = `${this.typeaheadQuery}${cleanNewKey}`;
|
|
58
|
+
|
|
59
|
+
// check if the entire typed query matches an item
|
|
60
|
+
const concatenatedQueryMatchingItemId = getNextMatchingItemId(concatenatedQuery);
|
|
61
|
+
if (concatenatedQueryMatchingItemId != null) {
|
|
62
|
+
this.typeaheadQuery = concatenatedQuery;
|
|
63
|
+
return concatenatedQueryMatchingItemId;
|
|
64
|
+
}
|
|
65
|
+
const newKeyMatchingItemId = getNextMatchingItemId(cleanNewKey);
|
|
66
|
+
if (newKeyMatchingItemId != null) {
|
|
67
|
+
this.typeaheadQuery = cleanNewKey;
|
|
68
|
+
return newKeyMatchingItemId;
|
|
69
|
+
}
|
|
70
|
+
this.typeaheadQuery = '';
|
|
71
|
+
return null;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Updates the `labelMap` to add/remove the first character of some item's labels.
|
|
76
|
+
* This map is used to navigate the tree using type-ahead search.
|
|
77
|
+
* This method is only used by the `useTreeViewJSXItems` plugin, otherwise the updates are handled internally.
|
|
78
|
+
* @param {(map: TreeViewLabelMap) => TreeViewLabelMap} updater The function to update the map.
|
|
79
|
+
*/
|
|
80
|
+
updateLabelMap = callback => {
|
|
81
|
+
this.labelMap = callback(this.labelMap);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// ARIA specification: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/#keyboardinteraction
|
|
85
|
+
/**
|
|
86
|
+
* Callback fired when a key is pressed on an item.
|
|
87
|
+
* Handles all the keyboard navigation logic.
|
|
88
|
+
* @param {React.KeyboardEvent<HTMLElement> & TreeViewCancellableEvent} event The keyboard event that triggered the callback.
|
|
89
|
+
* @param {TreeViewItemId} itemId The id of the item that the event was triggered on.
|
|
90
|
+
*/
|
|
91
|
+
handleItemKeyDown = async (event, itemId) => {
|
|
92
|
+
if (event.defaultMuiPrevented) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (event.altKey || isTargetInDescendants(event.target, event.currentTarget)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const ctrlPressed = event.ctrlKey || event.metaKey;
|
|
99
|
+
const key = event.key;
|
|
100
|
+
const isMultiSelectEnabled = selectionSelectors.isMultiSelectEnabled(this.store.state);
|
|
101
|
+
|
|
102
|
+
// eslint-disable-next-line default-case
|
|
103
|
+
switch (true) {
|
|
104
|
+
// Select the item when pressing "Space"
|
|
105
|
+
case key === ' ' && this.canToggleItemSelection(itemId):
|
|
106
|
+
{
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
if (isMultiSelectEnabled && event.shiftKey) {
|
|
109
|
+
this.store.selection.expandSelectionRange(event, itemId);
|
|
110
|
+
} else {
|
|
111
|
+
this.store.selection.setItemSelection({
|
|
112
|
+
event,
|
|
113
|
+
itemId,
|
|
114
|
+
keepExistingSelection: isMultiSelectEnabled,
|
|
115
|
+
shouldBeSelected: undefined
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// If the focused item has children, we expand it.
|
|
122
|
+
// If the focused item has no children, we select it.
|
|
123
|
+
case key === 'Enter':
|
|
124
|
+
{
|
|
125
|
+
if (this.store.labelEditing?.setEditedItem && labelSelectors.isItemEditable(this.store.state, itemId) && !labelSelectors.isItemBeingEdited(this.store.state, itemId)) {
|
|
126
|
+
this.store.labelEditing.setEditedItem(itemId);
|
|
127
|
+
} else if (this.canToggleItemExpansion(itemId)) {
|
|
128
|
+
this.store.expansion.setItemExpansion({
|
|
129
|
+
event,
|
|
130
|
+
itemId
|
|
131
|
+
});
|
|
132
|
+
event.preventDefault();
|
|
133
|
+
} else if (this.canToggleItemSelection(itemId)) {
|
|
134
|
+
if (isMultiSelectEnabled) {
|
|
135
|
+
event.preventDefault();
|
|
136
|
+
this.store.selection.setItemSelection({
|
|
137
|
+
event,
|
|
138
|
+
itemId,
|
|
139
|
+
keepExistingSelection: true
|
|
140
|
+
});
|
|
141
|
+
} else if (!selectionSelectors.isItemSelected(this.store.state, itemId)) {
|
|
142
|
+
this.store.selection.setItemSelection({
|
|
143
|
+
event,
|
|
144
|
+
itemId
|
|
145
|
+
});
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Focus the next focusable item
|
|
153
|
+
case key === 'ArrowDown':
|
|
154
|
+
{
|
|
155
|
+
const nextItem = getNextNavigableItem(this.store.state, itemId);
|
|
156
|
+
if (nextItem) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
this.store.focus.focusItem(event, nextItem);
|
|
159
|
+
|
|
160
|
+
// Multi select behavior when pressing Shift + ArrowDown
|
|
161
|
+
// Toggles the selection state of the next item
|
|
162
|
+
if (isMultiSelectEnabled && event.shiftKey && this.canToggleItemSelection(nextItem)) {
|
|
163
|
+
this.store.selection.selectItemFromArrowNavigation(event, itemId, nextItem);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Focuses the previous focusable item
|
|
170
|
+
case key === 'ArrowUp':
|
|
171
|
+
{
|
|
172
|
+
const previousItem = getPreviousNavigableItem(this.store.state, itemId);
|
|
173
|
+
if (previousItem) {
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
this.store.focus.focusItem(event, previousItem);
|
|
176
|
+
|
|
177
|
+
// Multi select behavior when pressing Shift + ArrowUp
|
|
178
|
+
// Toggles the selection state of the previous item
|
|
179
|
+
if (isMultiSelectEnabled && event.shiftKey && this.canToggleItemSelection(previousItem)) {
|
|
180
|
+
this.store.selection.selectItemFromArrowNavigation(event, itemId, previousItem);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// If the focused item is expanded, we move the focus to its first child
|
|
187
|
+
// If the focused item is collapsed and has children, we expand it
|
|
188
|
+
case key === 'ArrowRight' && !this.store.parameters.isRtl || key === 'ArrowLeft' && this.store.parameters.isRtl:
|
|
189
|
+
{
|
|
190
|
+
if (ctrlPressed) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (expansionSelectors.isItemExpanded(this.store.state, itemId)) {
|
|
194
|
+
const nextItemId = getNextNavigableItem(this.store.state, itemId);
|
|
195
|
+
if (nextItemId) {
|
|
196
|
+
this.store.focus.focusItem(event, nextItemId);
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
}
|
|
199
|
+
} else if (this.canToggleItemExpansion(itemId)) {
|
|
200
|
+
this.store.expansion.setItemExpansion({
|
|
201
|
+
event,
|
|
202
|
+
itemId
|
|
203
|
+
});
|
|
204
|
+
event.preventDefault();
|
|
205
|
+
}
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// If the focused item is expanded, we collapse it
|
|
210
|
+
// If the focused item is collapsed and has a parent, we move the focus to this parent
|
|
211
|
+
case key === 'ArrowLeft' && !this.store.parameters.isRtl || key === 'ArrowRight' && this.store.parameters.isRtl:
|
|
212
|
+
{
|
|
213
|
+
if (ctrlPressed) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (this.canToggleItemExpansion(itemId) && expansionSelectors.isItemExpanded(this.store.state, itemId)) {
|
|
217
|
+
this.store.expansion.setItemExpansion({
|
|
218
|
+
event,
|
|
219
|
+
itemId
|
|
220
|
+
});
|
|
221
|
+
event.preventDefault();
|
|
222
|
+
} else {
|
|
223
|
+
const parent = itemsSelectors.itemParentId(this.store.state, itemId);
|
|
224
|
+
if (parent) {
|
|
225
|
+
this.store.focus.focusItem(event, parent);
|
|
226
|
+
event.preventDefault();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Focuses the first item in the tree
|
|
233
|
+
case key === 'Home':
|
|
234
|
+
{
|
|
235
|
+
// Multi select behavior when pressing Ctrl + Shift + Home
|
|
236
|
+
// Selects the focused item and all items up to the first item.
|
|
237
|
+
if (this.canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
238
|
+
this.store.selection.selectRangeFromStartToItem(event, itemId);
|
|
239
|
+
} else {
|
|
240
|
+
this.store.focus.focusItem(event, getFirstNavigableItem(this.store.state));
|
|
241
|
+
}
|
|
242
|
+
event.preventDefault();
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Focuses the last item in the tree
|
|
247
|
+
case key === 'End':
|
|
248
|
+
{
|
|
249
|
+
// Multi select behavior when pressing Ctrl + Shirt + End
|
|
250
|
+
// Selects the focused item and all the items down to the last item.
|
|
251
|
+
if (this.canToggleItemSelection(itemId) && isMultiSelectEnabled && ctrlPressed && event.shiftKey) {
|
|
252
|
+
this.store.selection.selectRangeFromItemToEnd(event, itemId);
|
|
253
|
+
} else {
|
|
254
|
+
this.store.focus.focusItem(event, getLastNavigableItem(this.store.state));
|
|
255
|
+
}
|
|
256
|
+
event.preventDefault();
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Expand all siblings that are at the same level as the focused item
|
|
261
|
+
case key === '*':
|
|
262
|
+
{
|
|
263
|
+
this.store.expansion.expandAllSiblings(event, itemId);
|
|
264
|
+
event.preventDefault();
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Multi select behavior when pressing Ctrl + a
|
|
269
|
+
// Selects all the items
|
|
270
|
+
case String.fromCharCode(event.keyCode) === 'A' && ctrlPressed && isMultiSelectEnabled && selectionSelectors.enabled(this.store.state):
|
|
271
|
+
{
|
|
272
|
+
this.store.selection.selectAllNavigableItems(event);
|
|
273
|
+
event.preventDefault();
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Type-ahead
|
|
278
|
+
case !ctrlPressed && !event.shiftKey && isPrintableKey(key):
|
|
279
|
+
{
|
|
280
|
+
this.store.timeoutManager.clearTimeout('typeahead');
|
|
281
|
+
const matchingItem = this.getFirstItemMatchingTypeaheadQuery(itemId, key);
|
|
282
|
+
if (matchingItem != null) {
|
|
283
|
+
this.store.focus.focusItem(event, matchingItem);
|
|
284
|
+
event.preventDefault();
|
|
285
|
+
} else {
|
|
286
|
+
this.typeaheadQuery = '';
|
|
287
|
+
}
|
|
288
|
+
this.store.timeoutManager.startTimeout('typeahead', TYPEAHEAD_TIMEOUT, () => {
|
|
289
|
+
this.typeaheadQuery = '';
|
|
290
|
+
});
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
function isPrintableKey(string) {
|
|
297
|
+
return !!string && string.length === 1 && !!string.match(/\S/);
|
|
298
|
+
}
|
|
299
|
+
function createLabelMapFromItemMetaLookup(itemMetaLookup) {
|
|
300
|
+
const labelMap = {};
|
|
301
|
+
const processItem = item => {
|
|
302
|
+
labelMap[item.id] = item.label.toLowerCase();
|
|
303
|
+
};
|
|
304
|
+
Object.values(itemMetaLookup).forEach(processItem);
|
|
305
|
+
return labelMap;
|
|
306
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TreeViewKeyboardNavigationPlugin.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TreeViewKeyboardNavigationPlugin.js";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ExtendableRichTreeViewStore } from "../../RichTreeViewStore/RichTreeViewStore.js";
|
|
2
|
+
import { TreeViewItemId } from "../../../models/index.js";
|
|
3
|
+
export declare class TreeViewLabelEditingPlugin {
|
|
4
|
+
private store;
|
|
5
|
+
constructor(store: ExtendableRichTreeViewStore<any, any>);
|
|
6
|
+
buildPublicAPI: () => {
|
|
7
|
+
setEditedItem: (itemId: TreeViewItemId | null) => void;
|
|
8
|
+
updateItemLabel: (itemId: TreeViewItemId, label: string) => void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Set which item is currently being edited.
|
|
12
|
+
* You can pass `null` to exit editing mode.
|
|
13
|
+
* @param {TreeViewItemId | null} itemId The id of the item to edit, or `null` to exit editing mode.
|
|
14
|
+
*/
|
|
15
|
+
setEditedItem: (itemId: TreeViewItemId | null) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Used to update the label of an item.
|
|
18
|
+
* @param {TreeViewItemId} itemId The id of the item to update the label of.
|
|
19
|
+
* @param {string} label The new label of the item.
|
|
20
|
+
*/
|
|
21
|
+
updateItemLabel: (itemId: TreeViewItemId, label: string) => void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { labelSelectors } from "./selectors.js";
|
|
3
|
+
import { useLabelEditingItemPlugin } from "./itemPlugin.js";
|
|
4
|
+
export class TreeViewLabelEditingPlugin {
|
|
5
|
+
constructor(store) {
|
|
6
|
+
this.store = store;
|
|
7
|
+
store.itemPluginManager.register(useLabelEditingItemPlugin, null);
|
|
8
|
+
}
|
|
9
|
+
buildPublicAPI = () => {
|
|
10
|
+
return {
|
|
11
|
+
setEditedItem: this.setEditedItem,
|
|
12
|
+
updateItemLabel: this.updateItemLabel
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Set which item is currently being edited.
|
|
18
|
+
* You can pass `null` to exit editing mode.
|
|
19
|
+
* @param {TreeViewItemId | null} itemId The id of the item to edit, or `null` to exit editing mode.
|
|
20
|
+
*/
|
|
21
|
+
setEditedItem = itemId => {
|
|
22
|
+
if (itemId !== null && !labelSelectors.isItemEditable(this.store.state, itemId)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.store.set('editedItemId', itemId);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Used to update the label of an item.
|
|
30
|
+
* @param {TreeViewItemId} itemId The id of the item to update the label of.
|
|
31
|
+
* @param {string} label The new label of the item.
|
|
32
|
+
*/
|
|
33
|
+
updateItemLabel = (itemId, label) => {
|
|
34
|
+
if (!label) {
|
|
35
|
+
throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'The label of an item cannot be empty.', itemId].join('\n'));
|
|
36
|
+
}
|
|
37
|
+
const item = this.store.state.itemMetaLookup[itemId];
|
|
38
|
+
if (item.label === label) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.store.set('itemMetaLookup', _extends({}, this.store.state.itemMetaLookup, {
|
|
42
|
+
[itemId]: _extends({}, item, {
|
|
43
|
+
label
|
|
44
|
+
})
|
|
45
|
+
}));
|
|
46
|
+
if (this.store.parameters.onItemLabelChange) {
|
|
47
|
+
this.store.parameters.onItemLabelChange(itemId, label);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
package/{internals/plugins/useTreeViewLabel → esm/internals/plugins/labelEditing}/itemPlugin.d.ts
RENAMED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { TreeViewItemPlugin } from "../../models/index.js";
|
|
2
2
|
import { TreeItemLabelInputProps } from "../../../TreeItemLabelInput/index.js";
|
|
3
|
-
export declare const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export declare const useLabelEditingItemPlugin: TreeViewItemPlugin;
|
|
4
|
+
interface UseTreeItemLabelInputSlotPropsFromLabelEditing extends TreeItemLabelInputProps {}
|
|
5
|
+
interface UseTreeItemLabelSlotPropsFromLabelEditing {
|
|
6
6
|
editable?: boolean;
|
|
7
7
|
}
|
|
8
8
|
declare module '@mui/x-tree-view/useTreeItem' {
|
|
9
9
|
interface UseTreeItemLabelInputSlotOwnProps extends UseTreeItemLabelInputSlotPropsFromLabelEditing {}
|
|
10
10
|
interface UseTreeItemLabelSlotOwnProps extends UseTreeItemLabelSlotPropsFromLabelEditing {}
|
|
11
|
-
}
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useStore } from '@mui/x-internals/store';
|
|
5
5
|
import { useTreeViewContext } from "../../TreeViewProvider/index.js";
|
|
6
|
-
import { labelSelectors } from "./
|
|
7
|
-
export const
|
|
6
|
+
import { labelSelectors } from "./selectors.js";
|
|
7
|
+
export const useLabelEditingItemPlugin = ({
|
|
8
8
|
props
|
|
9
9
|
}) => {
|
|
10
10
|
const {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RichTreeViewState } from "../../RichTreeViewStore/index.js";
|
|
2
|
+
export declare const labelSelectors: {
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether an item is editable.
|
|
5
|
+
*/
|
|
6
|
+
isItemEditable: (args_0: RichTreeViewState<any, any>, _itemId: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Checks whether an item is being edited.
|
|
9
|
+
*/
|
|
10
|
+
isItemBeingEdited: (state: RichTreeViewState<any, any>, itemId: string | null) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Checks whether any item is being edited.
|
|
13
|
+
*/
|
|
14
|
+
isAnyItemBeingEdited: (state: RichTreeViewState<any, any>) => boolean;
|
|
15
|
+
};
|