@mui/x-tree-view 7.7.1 → 7.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +166 -1
  2. package/RichTreeView/RichTreeView.js +12 -5
  3. package/SimpleTreeView/SimpleTreeView.js +12 -5
  4. package/TreeItem/TreeItem.js +19 -4
  5. package/TreeItem/TreeItemContent.js +5 -2
  6. package/TreeItem/useTreeItemState.d.ts +1 -0
  7. package/TreeItem/useTreeItemState.js +21 -4
  8. package/TreeItem2/TreeItem2.d.ts +3 -3
  9. package/TreeItem2Provider/TreeItem2Provider.d.ts +0 -1
  10. package/TreeView/TreeView.js +12 -5
  11. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  12. package/index.js +1 -1
  13. package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
  14. package/internals/models/plugin.d.ts +5 -1
  15. package/internals/models/treeView.d.ts +1 -3
  16. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
  17. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +17 -7
  18. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  19. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +2 -2
  20. package/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
  21. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -1
  22. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  23. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  24. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +25 -16
  25. package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
  26. package/internals/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -1
  27. package/internals/utils/publishTreeViewEvent.d.ts +1 -1
  28. package/internals/utils/warning.d.ts +1 -1
  29. package/modern/RichTreeView/RichTreeView.js +12 -5
  30. package/modern/SimpleTreeView/SimpleTreeView.js +12 -5
  31. package/modern/TreeItem/TreeItem.js +19 -4
  32. package/modern/TreeItem/TreeItemContent.js +5 -2
  33. package/modern/TreeItem/useTreeItemState.js +21 -4
  34. package/modern/TreeView/TreeView.js +12 -5
  35. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  36. package/modern/index.js +1 -1
  37. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
  38. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  39. package/modern/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
  40. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  41. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  42. package/modern/useTreeItem2/useTreeItem2.js +18 -2
  43. package/node/RichTreeView/RichTreeView.js +12 -5
  44. package/node/SimpleTreeView/SimpleTreeView.js +12 -5
  45. package/node/TreeItem/TreeItem.js +19 -4
  46. package/node/TreeItem/TreeItemContent.js +5 -2
  47. package/node/TreeItem/useTreeItemState.js +21 -4
  48. package/node/TreeView/TreeView.js +12 -5
  49. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +16 -3
  50. package/node/index.js +1 -1
  51. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +13 -1
  52. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +1 -2
  53. package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +10 -1
  54. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +15 -5
  55. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +12 -4
  56. package/node/useTreeItem2/useTreeItem2.js +18 -2
  57. package/package.json +3 -3
  58. package/useTreeItem2/useTreeItem2.d.ts +2 -2
  59. package/useTreeItem2/useTreeItem2.js +18 -2
  60. package/useTreeItem2/useTreeItem2.types.d.ts +3 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,171 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 7.9.0
7
+
8
+ _Jul 5, 2024_
9
+
10
+ We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🔄 Add loading overlay variants, including a skeleton loader option to the Data Grid component. See [Loading overlay docs](https://mui.com/x/react-data-grid/overlays/#loading-overlay) for more details.
13
+ - 🌳 Add `selectItem` and `getItemDOMElement` methods to the TreeView component public API
14
+ - ⛏️ Make the `usePickersTranslations` hook public in the pickers component
15
+ - 🐞 Bugfixes
16
+
17
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
18
+
19
+ ### Data Grid
20
+
21
+ #### `@mui/x-data-grid@7.9.0`
22
+
23
+ - [DataGrid] Add skeleton loading overlay support (#13293) @KenanYusuf
24
+ - [DataGrid] Fix pagination when `pagination={undefined}` (#13349) @sai6855
25
+
26
+ #### `@mui/x-data-grid-pro@7.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
27
+
28
+ Same changes as in `@mui/x-data-grid@7.9.0`.
29
+
30
+ #### `@mui/x-data-grid-premium@7.9.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
31
+
32
+ Same changes as in `@mui/x-data-grid-pro@7.9.0`.
33
+
34
+ ### Date and Time Pickers
35
+
36
+ #### `@mui/x-date-pickers@7.9.0`
37
+
38
+ - [pickers] Make the `usePickersTranslations` hook public (#13657) @flaviendelangle
39
+
40
+ #### `@mui/x-date-pickers-pro@7.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
41
+
42
+ Same changes as in `@mui/x-date-pickers@7.9.0`.
43
+
44
+ ### Charts
45
+
46
+ #### `@mui/x-charts@7.9.0`
47
+
48
+ - [charts] Add Heatmap (unreleased) (#13209) @alexfauquette
49
+ - [charts] Add initial `Zoom&Pan` to the Pro charts (unreleased) (#13405) @JCQuintas
50
+ - [charts] Fix Axis Highlight on horizontal bar charts regression (#13717) @JCQuintas
51
+ - [charts] Improve charts interaction for mobile users (#13692) @JCQuintas
52
+ - [charts] Add documentation on how to disable the tooltip on charts (#13724) @JCQuintas
53
+
54
+ ### Tree View
55
+
56
+ #### `@mui/x-tree-view@7.9.0`
57
+
58
+ - [TreeView] Add `selectItem` and `getItemDOMElement` methods to the public API (#13485) @flaviendelangle
59
+
60
+ ### Docs
61
+
62
+ - [docs] Fix custom "no results overlay" demo in dark mode (#13715) @KenanYusuf
63
+
64
+ ### Core
65
+
66
+ - [core] Add `react_next` workflow in CircleCI (#13360) @cherniavskii
67
+ - [core] Create a new package to share utils across X packages (#13528) @flaviendelangle
68
+ - [core] Fix dependency setup (#13684) @LukasTy
69
+ - [core] Remove `jscodeshift-add-imports` package (#13720) @LukasTy
70
+ - [code-infra] Cleanup monorepo and `@mui/docs` usage (#13713) @LukasTy
71
+
72
+ ## 7.8.0
73
+
74
+ _Jun 28, 2024_
75
+
76
+ We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
77
+
78
+ - 🛰 Introduce server-side data source for improved server integration in the Data Grid.
79
+
80
+ Supports server-side pagination, sorting and filtering on plain and tree data, and automatic caching.
81
+
82
+ To enable, provide a `getRows` function to the `unstable_dataSource` prop on the Data Grid component.
83
+
84
+ ```tsx
85
+ const dataSource = {
86
+ getRows: async (params: GridServerGetRowsParams) => {
87
+ const data = await fetch(
88
+ `https://api.example.com/data?${new URLSearchParams({
89
+ page: params.page,
90
+ pageSize: params.pageSize,
91
+ sortModel: JSON.stringify(params.sortModel),
92
+ filterModel: JSON.stringify(params.filterModel),
93
+ }).toString()}`,
94
+ );
95
+ return {
96
+ rows: data.rows,
97
+ totalRows: data.totalRows,
98
+ };
99
+ },
100
+ }
101
+ <DataGridPro
102
+ unstable_dataSource={dataSource}
103
+ {...otherProps}
104
+ />
105
+ ```
106
+
107
+ See [server-side data documentation](https://mui.com/x/react-data-grid/server-side-data/) for more details.
108
+
109
+ - 📈 Support Date data on the BarChart component
110
+ - ↕️ Support custom column sort icons on the Data Grid
111
+ - 🖱️ Support modifying the expansion trigger on the Tree View components
112
+
113
+ <!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
114
+
115
+ ### Data Grid
116
+
117
+ #### `@mui/x-data-grid@7.8.0`
118
+
119
+ - [DataGrid] Add `columnHeaderSortIcon` slot (#13563) @arminmeh
120
+ - [DataGrid] Fix dimensions lag issue after autosize (#13587) @MBilalShafi
121
+ - [DataGrid] Fix print export failure when `hideFooter` option is set (#13034) @tarunrajput
122
+
123
+ #### `@mui/x-data-grid-pro@7.8.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
124
+
125
+ Same changes as in `@mui/x-data-grid@7.8.0`, plus:
126
+
127
+ - [DataGridPro] Fix multi-sorting indicator being cut off (#13625) @KenanYusuf
128
+ - [DataGridPro] Server-side tree data support (#12317) @MBilalShafi
129
+
130
+ #### `@mui/x-data-grid-premium@7.8.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
131
+
132
+ Same changes as in `@mui/x-data-grid-pro@7.8.0`.
133
+
134
+ ### Date and Time Pickers
135
+
136
+ #### `@mui/x-date-pickers@7.8.0`
137
+
138
+ - [fields] Fix section clearing behavior on Android (#13652) @LukasTy
139
+
140
+ #### `@mui/x-date-pickers-pro@7.8.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
141
+
142
+ Same changes as in `@mui/x-date-pickers@7.8.0`.
143
+
144
+ ### Charts
145
+
146
+ #### `@mui/x-charts@7.8.0`
147
+
148
+ - [charts] Fix line chart props not passing correct event handlers (#13609) @JCQuintas
149
+ - [charts] Support BarChart with `Date` data (#13471) @alexfauquette
150
+ - [charts] Support RTL for y-axis (#13614) @alexfauquette
151
+ - [charts] Use default values instead of non-null assertion to prevent error being thrown (#13637) @JCQuintas
152
+
153
+ ### Tree View
154
+
155
+ #### `@mui/x-tree-view@7.8.0`
156
+
157
+ - [TreeView] Add `expansionTrigger` prop (#13533) @noraleonte
158
+ - [TreeView] Support experimental features from plugin's dependencies (#13632) @flaviendelangle
159
+
160
+ ### Docs
161
+
162
+ - [docs] Add callout for `Luxon` `throwOnInvalid` support (#13621) @LukasTy
163
+ - [docs] Add "Overlays" section to the Data Grid documentation (#13624) @KenanYusuf
164
+
165
+ ### Core
166
+
167
+ - [core] Add eslint rule to restrict import from `../internals` root (#13633) @JCQuintas
168
+ - [docs-infra] Sync `\_app` folder with monorepo (#13582) @Janpot
169
+ - [license] Allow usage of charts and tree view pro package for old premium licenses (#13619) @flaviendelangle
170
+
6
171
  ## 7.7.1
7
172
 
8
173
  _Jun 21, 2024_
@@ -44,7 +209,7 @@ Same changes as in `@mui/x-data-grid-pro@7.7.1`.
44
209
  - [pickers] Always use the same timezone in the field, the view and the layout components (#13481) @flaviendelangle
45
210
  - [pickers] Fix `AdapterDateFnsV3` generated method types (#13464) @alexey-kozlenkov
46
211
  - [pickers] Fix controlled `view` behavior (#13552) @LukasTy
47
- - [TimePicker] Improves RTL verification for the time pickers default views (#13447) @arthurbalduini
212
+ - [TimePicker] Improves RTL verification for the time pickers default views (#13447) @arthurbalduini
48
213
 
49
214
  #### `@mui/x-date-pickers-pro@7.7.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
50
215
 
@@ -137,6 +137,8 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
137
137
  current: PropTypes.shape({
138
138
  focusItem: PropTypes.func.isRequired,
139
139
  getItem: PropTypes.func.isRequired,
140
+ getItemDOMElement: PropTypes.func.isRequired,
141
+ selectItem: PropTypes.func.isRequired,
140
142
  setItemExpansion: PropTypes.func.isRequired
141
143
  })
142
144
  }),
@@ -177,6 +179,11 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
177
179
  * Used when the item's expansion is controlled.
178
180
  */
179
181
  expandedItems: PropTypes.arrayOf(PropTypes.string),
182
+ /**
183
+ * The slot that triggers the item's expansion when clicked.
184
+ * @default 'content'
185
+ */
186
+ expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
180
187
  /**
181
188
  * Unstable features, breaking changes might be introduced.
182
189
  * For each feature, if the flag is not explicitly set to `true`,
@@ -229,34 +236,34 @@ process.env.NODE_ENV !== "production" ? RichTreeView.propTypes = {
229
236
  multiSelect: PropTypes.bool,
230
237
  /**
231
238
  * Callback fired when tree items are expanded/collapsed.
232
- * @param {React.SyntheticEvent} event The event source of the callback.
239
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
233
240
  * @param {array} itemIds The ids of the expanded items.
234
241
  */
235
242
  onExpandedItemsChange: PropTypes.func,
236
243
  /**
237
244
  * Callback fired when a tree item is expanded or collapsed.
238
- * @param {React.SyntheticEvent} event The event source of the callback.
245
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
239
246
  * @param {array} itemId The itemId of the modified item.
240
247
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
241
248
  */
242
249
  onItemExpansionToggle: PropTypes.func,
243
250
  /**
244
251
  * Callback fired when tree items are focused.
245
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
252
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
246
253
  * @param {string} itemId The id of the focused item.
247
254
  * @param {string} value of the focused item.
248
255
  */
249
256
  onItemFocus: PropTypes.func,
250
257
  /**
251
258
  * Callback fired when a tree item is selected or deselected.
252
- * @param {React.SyntheticEvent} event The event source of the callback.
259
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
253
260
  * @param {array} itemId The itemId of the modified item.
254
261
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
255
262
  */
256
263
  onItemSelectionToggle: PropTypes.func,
257
264
  /**
258
265
  * Callback fired when tree items are selected/deselected.
259
- * @param {React.SyntheticEvent} event The event source of the callback
266
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
260
267
  * @param {string[] | string} itemIds The ids of the selected items.
261
268
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
262
269
  */
@@ -95,6 +95,8 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
95
95
  current: PropTypes.shape({
96
96
  focusItem: PropTypes.func.isRequired,
97
97
  getItem: PropTypes.func.isRequired,
98
+ getItemDOMElement: PropTypes.func.isRequired,
99
+ selectItem: PropTypes.func.isRequired,
98
100
  setItemExpansion: PropTypes.func.isRequired
99
101
  })
100
102
  }),
@@ -139,6 +141,11 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
139
141
  * Used when the item's expansion is controlled.
140
142
  */
141
143
  expandedItems: PropTypes.arrayOf(PropTypes.string),
144
+ /**
145
+ * The slot that triggers the item's expansion when clicked.
146
+ * @default 'content'
147
+ */
148
+ expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
142
149
  /**
143
150
  * Unstable features, breaking changes might be introduced.
144
151
  * For each feature, if the flag is not explicitly set to `true`,
@@ -165,34 +172,34 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
165
172
  multiSelect: PropTypes.bool,
166
173
  /**
167
174
  * Callback fired when tree items are expanded/collapsed.
168
- * @param {React.SyntheticEvent} event The event source of the callback.
175
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
169
176
  * @param {array} itemIds The ids of the expanded items.
170
177
  */
171
178
  onExpandedItemsChange: PropTypes.func,
172
179
  /**
173
180
  * Callback fired when a tree item is expanded or collapsed.
174
- * @param {React.SyntheticEvent} event The event source of the callback.
181
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
175
182
  * @param {array} itemId The itemId of the modified item.
176
183
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
177
184
  */
178
185
  onItemExpansionToggle: PropTypes.func,
179
186
  /**
180
187
  * Callback fired when tree items are focused.
181
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
188
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
182
189
  * @param {string} itemId The id of the focused item.
183
190
  * @param {string} value of the focused item.
184
191
  */
185
192
  onItemFocus: PropTypes.func,
186
193
  /**
187
194
  * Callback fired when a tree item is selected or deselected.
188
- * @param {React.SyntheticEvent} event The event source of the callback.
195
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
189
196
  * @param {array} itemId The itemId of the modified item.
190
197
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
191
198
  */
192
199
  onItemSelectionToggle: PropTypes.func,
193
200
  /**
194
201
  * Callback fired when tree items are selected/deselected.
195
- * @param {React.SyntheticEvent} event The event source of the callback
202
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
196
203
  * @param {string[] | string} itemIds The ids of the selected items.
197
204
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
198
205
  */
@@ -22,6 +22,7 @@ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewCon
22
22
  import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
23
23
  import { TreeItem2Provider } from '../TreeItem2Provider';
24
24
  import { TreeViewItemDepthContext } from '../internals/TreeViewItemDepthContext';
25
+ import { useTreeItemState } from './useTreeItemState';
25
26
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
27
  const useThemeProps = createUseThemeProps('MuiTreeItem');
27
28
  const useUtilityClasses = ownerState => {
@@ -168,6 +169,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
168
169
  selection: {
169
170
  multiSelect
170
171
  },
172
+ expansion: {
173
+ expansionTrigger
174
+ },
171
175
  disabledItemsFocusable,
172
176
  indentationAtItemLevel,
173
177
  instance
@@ -193,6 +197,13 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
193
197
  onKeyDown
194
198
  } = props,
195
199
  other = _objectWithoutPropertiesLoose(props, _excluded);
200
+ const {
201
+ expanded,
202
+ focused,
203
+ selected,
204
+ disabled,
205
+ handleExpansion
206
+ } = useTreeItemState(itemId);
196
207
  const {
197
208
  contentRef,
198
209
  rootRef
@@ -213,10 +224,6 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
213
224
  return Boolean(reactChildren);
214
225
  };
215
226
  const expandable = isExpandable(children);
216
- const expanded = instance.isItemExpanded(itemId);
217
- const focused = instance.isItemFocused(itemId);
218
- const selected = instance.isItemSelected(itemId);
219
- const disabled = instance.isItemDisabled(itemId);
220
227
  const ownerState = _extends({}, props, {
221
228
  expanded,
222
229
  focused,
@@ -240,6 +247,11 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
240
247
  } : {}),
241
248
  className: classes.groupTransition
242
249
  });
250
+ const handleIconContainerClick = event => {
251
+ if (expansionTrigger === 'iconContainer') {
252
+ handleExpansion(event);
253
+ }
254
+ };
243
255
  const ExpansionIcon = expanded ? slots.collapseIcon : slots.expandIcon;
244
256
  const _useSlotProps = useSlotProps({
245
257
  elementType: ExpansionIcon,
@@ -249,6 +261,9 @@ export const TreeItem = /*#__PURE__*/React.forwardRef(function TreeItem(inProps,
249
261
  return _extends({}, resolveComponentProps(contextIcons.slotProps.collapseIcon, tempOwnerState), resolveComponentProps(inSlotProps?.collapseIcon, tempOwnerState));
250
262
  }
251
263
  return _extends({}, resolveComponentProps(contextIcons.slotProps.expandIcon, tempOwnerState), resolveComponentProps(inSlotProps?.expandIcon, tempOwnerState));
264
+ },
265
+ additionalProps: {
266
+ onClick: handleIconContainerClick
252
267
  }
253
268
  }),
254
269
  expansionIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
@@ -33,7 +33,8 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
33
33
  handleExpansion,
34
34
  handleSelection,
35
35
  handleCheckboxSelection,
36
- preventSelection
36
+ preventSelection,
37
+ expansionTrigger
37
38
  } = useTreeItemState(itemId);
38
39
  const icon = iconProp || expansionIcon || displayIcon;
39
40
  const checkboxRef = React.useRef(null);
@@ -47,7 +48,9 @@ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(p
47
48
  if (checkboxRef.current?.contains(event.target)) {
48
49
  return;
49
50
  }
50
- handleExpansion(event);
51
+ if (expansionTrigger === 'content') {
52
+ handleExpansion(event);
53
+ }
51
54
  if (!checkboxSelection) {
52
55
  handleSelection(event);
53
56
  }
@@ -10,4 +10,5 @@ export declare function useTreeItemState(itemId: string): {
10
10
  handleSelection: (event: React.MouseEvent) => void;
11
11
  handleCheckboxSelection: (event: React.ChangeEvent<HTMLInputElement>) => void;
12
12
  preventSelection: (event: React.MouseEvent<HTMLDivElement>) => void;
13
+ expansionTrigger: "content" | "iconContainer" | undefined;
13
14
  };
@@ -6,6 +6,9 @@ export function useTreeItemState(itemId) {
6
6
  multiSelect,
7
7
  checkboxSelection,
8
8
  disableSelection
9
+ },
10
+ expansion: {
11
+ expansionTrigger
9
12
  }
10
13
  } = useTreeViewContext();
11
14
  const expandable = instance.isItemExpandable(itemId);
@@ -36,10 +39,18 @@ export function useTreeItemState(itemId) {
36
39
  if (event.shiftKey) {
37
40
  instance.expandSelectionRange(event, itemId);
38
41
  } else {
39
- instance.selectItem(event, itemId, true);
42
+ instance.selectItem({
43
+ event,
44
+ itemId,
45
+ keepExistingSelection: true
46
+ });
40
47
  }
41
48
  } else {
42
- instance.selectItem(event, itemId, false);
49
+ instance.selectItem({
50
+ event,
51
+ itemId,
52
+ shouldBeSelected: true
53
+ });
43
54
  }
44
55
  }
45
56
  };
@@ -51,7 +62,12 @@ export function useTreeItemState(itemId) {
51
62
  if (multiSelect && hasShift) {
52
63
  instance.expandSelectionRange(event, itemId);
53
64
  } else {
54
- instance.selectItem(event, itemId, multiSelect, event.target.checked);
65
+ instance.selectItem({
66
+ event,
67
+ itemId,
68
+ keepExistingSelection: multiSelect,
69
+ shouldBeSelected: event.target.checked
70
+ });
55
71
  }
56
72
  };
57
73
  const preventSelection = event => {
@@ -70,6 +86,7 @@ export function useTreeItemState(itemId) {
70
86
  handleExpansion,
71
87
  handleSelection,
72
88
  handleCheckboxSelection,
73
- preventSelection
89
+ preventSelection,
90
+ expansionTrigger
74
91
  };
75
92
  }
@@ -5,16 +5,16 @@ import { UseTreeItem2Status } from '../useTreeItem2';
5
5
  export declare const TreeItem2Root: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, keyof React.ClassAttributes<HTMLLIElement> | keyof React.LiHTMLAttributes<HTMLLIElement>>, {}>;
6
6
  export declare const TreeItem2Content: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
7
7
  status: UseTreeItem2Status;
8
- indentationAtItemLevel?: true | undefined;
8
+ indentationAtItemLevel?: true;
9
9
  }, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
10
10
  export declare const TreeItem2Label: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
11
11
  export declare const TreeItem2IconContainer: import("@emotion/styled").StyledComponent<import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
12
12
  export declare const TreeItem2GroupTransition: import("@emotion/styled").StyledComponent<import("@mui/material/Collapse").CollapseProps & import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme> & {
13
- indentationAtItemLevel?: true | undefined;
13
+ indentationAtItemLevel?: true;
14
14
  }, {}, {}>;
15
15
  export declare const TreeItem2Checkbox: import("@emotion/styled").StyledComponent<Pick<Omit<CheckboxProps & {
16
16
  visible: boolean;
17
- }, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "readOnly" | "required" | "action" | "checked" | "component" | "sx" | "classes" | "onFocusVisible" | "inputRef" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "checkedIcon" | "inputProps" | "indeterminate" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
17
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>, "hidden" | "visible" | "color" | "content" | "size" | "style" | "icon" | "translate" | "disabled" | "form" | "slot" | "title" | "suppressHydrationWarning" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "accessKey" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "readOnly" | "required" | "action" | "checked" | "component" | "sx" | "classes" | "onFocusVisible" | "inputRef" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "checkedIcon" | "inputProps" | "indeterminate" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system/createStyled").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
18
18
  type TreeItem2Component = ((props: TreeItem2Props & React.RefAttributes<HTMLLIElement>) => React.JSX.Element) & {
19
19
  propTypes?: any;
20
20
  };
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { TreeItem2ProviderProps } from './TreeItem2Provider.types';
3
2
  declare function TreeItem2Provider(props: TreeItem2ProviderProps): import("react").ReactNode;
4
3
  declare namespace TreeItem2Provider {
@@ -72,6 +72,8 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
72
72
  current: PropTypes.shape({
73
73
  focusItem: PropTypes.func.isRequired,
74
74
  getItem: PropTypes.func.isRequired,
75
+ getItemDOMElement: PropTypes.func.isRequired,
76
+ selectItem: PropTypes.func.isRequired,
75
77
  setItemExpansion: PropTypes.func.isRequired
76
78
  })
77
79
  }),
@@ -116,6 +118,11 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
116
118
  * Used when the item's expansion is controlled.
117
119
  */
118
120
  expandedItems: PropTypes.arrayOf(PropTypes.string),
121
+ /**
122
+ * The slot that triggers the item's expansion when clicked.
123
+ * @default 'content'
124
+ */
125
+ expansionTrigger: PropTypes.oneOf(['content', 'iconContainer']),
119
126
  /**
120
127
  * Unstable features, breaking changes might be introduced.
121
128
  * For each feature, if the flag is not explicitly set to `true`,
@@ -142,34 +149,34 @@ process.env.NODE_ENV !== "production" ? TreeView.propTypes = {
142
149
  multiSelect: PropTypes.bool,
143
150
  /**
144
151
  * Callback fired when tree items are expanded/collapsed.
145
- * @param {React.SyntheticEvent} event The event source of the callback.
152
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
146
153
  * @param {array} itemIds The ids of the expanded items.
147
154
  */
148
155
  onExpandedItemsChange: PropTypes.func,
149
156
  /**
150
157
  * Callback fired when a tree item is expanded or collapsed.
151
- * @param {React.SyntheticEvent} event The event source of the callback.
158
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
152
159
  * @param {array} itemId The itemId of the modified item.
153
160
  * @param {array} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
154
161
  */
155
162
  onItemExpansionToggle: PropTypes.func,
156
163
  /**
157
164
  * Callback fired when tree items are focused.
158
- * @param {React.SyntheticEvent} event The event source of the callback **Warning**: This is a generic event not a focus event.
165
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
159
166
  * @param {string} itemId The id of the focused item.
160
167
  * @param {string} value of the focused item.
161
168
  */
162
169
  onItemFocus: PropTypes.func,
163
170
  /**
164
171
  * Callback fired when a tree item is selected or deselected.
165
- * @param {React.SyntheticEvent} event The event source of the callback.
172
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
166
173
  * @param {array} itemId The itemId of the modified item.
167
174
  * @param {array} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
168
175
  */
169
176
  onItemSelectionToggle: PropTypes.func,
170
177
  /**
171
178
  * Callback fired when tree items are selected/deselected.
172
- * @param {React.SyntheticEvent} event The event source of the callback
179
+ * @param {React.SyntheticEvent} event The DOM event that triggered the change.
173
180
  * @param {string[] | string} itemIds The ids of the selected items.
174
181
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
175
182
  */
@@ -57,10 +57,18 @@ export const useTreeItem2Utils = ({
57
57
  if (event.shiftKey) {
58
58
  instance.expandSelectionRange(event, itemId);
59
59
  } else {
60
- instance.selectItem(event, itemId, true);
60
+ instance.selectItem({
61
+ event,
62
+ itemId,
63
+ keepExistingSelection: true
64
+ });
61
65
  }
62
66
  } else {
63
- instance.selectItem(event, itemId, false);
67
+ instance.selectItem({
68
+ event,
69
+ itemId,
70
+ shouldBeSelected: true
71
+ });
64
72
  }
65
73
  };
66
74
  const handleCheckboxSelection = event => {
@@ -68,7 +76,12 @@ export const useTreeItem2Utils = ({
68
76
  if (multiSelect && hasShift) {
69
77
  instance.expandSelectionRange(event, itemId);
70
78
  } else {
71
- instance.selectItem(event, itemId, multiSelect, event.target.checked);
79
+ instance.selectItem({
80
+ event,
81
+ itemId,
82
+ keepExistingSelection: multiSelect,
83
+ shouldBeSelected: event.target.checked
84
+ });
72
85
  }
73
86
  };
74
87
  const interactions = {
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v7.7.1
2
+ * @mui/x-tree-view v7.9.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -7,9 +7,9 @@ interface RegistryContainer {
7
7
  }
8
8
  export declare function createUseInstanceEventHandler(registryContainer: RegistryContainer): <Instance extends UseTreeViewInstanceEventsInstance & {
9
9
  $$signature: TreeViewAnyPluginSignature;
10
- }, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergeSignaturesProperty<[import("../corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types").UseTreeViewInstanceEventsSignature, import("../corePlugins/useTreeViewId").UseTreeViewIdSignature, ...Instance["$$signature"]["dependencies"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance['$$signature']>[E]>) => void;
10
+ }, E extends keyof TreeViewUsedEvents<Instance["$$signature"]>>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
11
11
  export declare const unstable_resetCleanupTracking: () => void;
12
12
  export declare const useInstanceEventHandler: <Instance extends UseTreeViewInstanceEventsInstance & {
13
13
  $$signature: TreeViewAnyPluginSignature;
14
- }, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergeSignaturesProperty<[import("../corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.types").UseTreeViewInstanceEventsSignature, import("../corePlugins/useTreeViewId").UseTreeViewIdSignature, ...Instance["$$signature"]["dependencies"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance['$$signature']>[E]>) => void;
14
+ }, E extends keyof TreeViewUsedEvents<Instance["$$signature"]>>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance["$$signature"]>[E]>) => void;
15
15
  export {};
@@ -78,7 +78,11 @@ export type TreeViewPluginSignature<T extends {
78
78
  } ? {
79
79
  [TControlled in T['modelNames']]-?: TreeViewModel<Exclude<T['defaultizedParams'][TControlled], undefined>>;
80
80
  } : {};
81
- experimentalFeatures: T['experimentalFeatures'];
81
+ experimentalFeatures: T extends {
82
+ experimentalFeatures: string;
83
+ } ? {
84
+ [key in T['experimentalFeatures']]?: boolean;
85
+ } : {};
82
86
  dependencies: T extends {
83
87
  dependencies: Array<any>;
84
88
  } ? T['dependencies'] : [];
@@ -23,6 +23,4 @@ export interface TreeViewModel<TValue> {
23
23
  }
24
24
  export type TreeViewInstance<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'instance'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
25
25
  export type TreeViewPublicAPI<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TreeViewCorePluginSignatures, ...TSignatures], 'publicAPI'> & Partial<MergeSignaturesProperty<TOptionalSignatures, 'instance'>>;
26
- export type TreeViewExperimentalFeatures<TSignatures extends readonly TreeViewAnyPluginSignature[]> = {
27
- [key in MergeSignaturesProperty<TSignatures, 'experimentalFeatures'>]?: boolean;
28
- };
26
+ export type TreeViewExperimentalFeatures<TSignatures extends readonly TreeViewAnyPluginSignature[], TOptionalSignatures extends readonly TreeViewAnyPluginSignature[] = []> = MergeSignaturesProperty<[...TSignatures, ...TOptionalSignatures], 'experimentalFeatures'>;