@mui/x-tree-view 8.16.0 → 8.18.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 (66) hide show
  1. package/CHANGELOG.md +208 -1
  2. package/RichTreeView/RichTreeView.js +11 -11
  3. package/SimpleTreeView/SimpleTreeView.js +10 -10
  4. package/TreeItem/TreeItem.d.ts +1 -1
  5. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +1 -2
  6. package/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +0 -2
  7. package/TreeItemIcon/TreeItemIcon.d.ts +1 -2
  8. package/TreeItemProvider/TreeItemProvider.d.ts +1 -2
  9. package/esm/RichTreeView/RichTreeView.js +11 -11
  10. package/esm/SimpleTreeView/SimpleTreeView.js +10 -10
  11. package/esm/TreeItem/TreeItem.d.ts +1 -1
  12. package/esm/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.d.ts +1 -2
  13. package/esm/TreeItemDragAndDropOverlay/TreeItemDragAndDropOverlay.js +0 -1
  14. package/esm/TreeItemIcon/TreeItemIcon.d.ts +1 -2
  15. package/esm/TreeItemProvider/TreeItemProvider.d.ts +1 -2
  16. package/esm/icons/icons.js +0 -1
  17. package/esm/index.js +1 -1
  18. package/esm/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +1 -1
  19. package/esm/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -2
  20. package/esm/internals/components/RichTreeViewItems.d.ts +1 -1
  21. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +1 -1
  22. package/esm/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  23. package/esm/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -4
  24. package/esm/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -7
  25. package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +2 -0
  26. package/esm/internals/plugins/useTreeViewJSXItems/itemPlugin.js +74 -0
  27. package/esm/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -71
  28. package/esm/internals/plugins/useTreeViewLabel/itemPlugin.d.ts +11 -0
  29. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +1 -1
  30. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +2 -11
  31. package/esm/internals/plugins/useTreeViewSelection/itemPlugin.d.ts +20 -0
  32. package/esm/internals/plugins/useTreeViewSelection/{useTreeViewSelection.itemPlugin.js → itemPlugin.js} +23 -3
  33. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +1 -1
  34. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +20 -31
  35. package/esm/models/items.d.ts +1 -0
  36. package/esm/useTreeItem/useTreeItem.js +0 -15
  37. package/esm/useTreeItem/useTreeItem.types.d.ts +0 -1
  38. package/icons/icons.js +0 -2
  39. package/index.js +1 -1
  40. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.d.ts +1 -1
  41. package/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -2
  42. package/internals/components/RichTreeViewItems.d.ts +1 -1
  43. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.selectors.d.ts +1 -1
  44. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  45. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -4
  46. package/internals/plugins/useTreeViewItems/useTreeViewItems.types.d.ts +7 -7
  47. package/internals/plugins/useTreeViewJSXItems/itemPlugin.d.ts +2 -0
  48. package/internals/plugins/useTreeViewJSXItems/itemPlugin.js +81 -0
  49. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +2 -71
  50. package/internals/plugins/useTreeViewLabel/itemPlugin.d.ts +11 -0
  51. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.js +4 -4
  52. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.types.d.ts +2 -11
  53. package/internals/plugins/useTreeViewSelection/itemPlugin.d.ts +20 -0
  54. package/internals/plugins/useTreeViewSelection/{useTreeViewSelection.itemPlugin.js → itemPlugin.js} +23 -3
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +2 -2
  56. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +20 -31
  57. package/models/items.d.ts +1 -0
  58. package/package.json +3 -3
  59. package/useTreeItem/useTreeItem.js +0 -15
  60. package/useTreeItem/useTreeItem.types.d.ts +0 -1
  61. package/esm/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +0 -2
  62. package/esm/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +0 -2
  63. package/internals/plugins/useTreeViewLabel/useTreeViewLabel.itemPlugin.d.ts +0 -2
  64. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.itemPlugin.d.ts +0 -2
  65. /package/esm/internals/plugins/useTreeViewLabel/{useTreeViewLabel.itemPlugin.js → itemPlugin.js} +0 -0
  66. /package/internals/plugins/useTreeViewLabel/{useTreeViewLabel.itemPlugin.js → itemPlugin.js} +0 -0
@@ -3,18 +3,18 @@ import type { DefaultizedProps } from '@mui/x-internals/types';
3
3
  import type { TreeViewPluginSignature } from "../../models/index.js";
4
4
  import { UseTreeViewItemsSignature } from "../useTreeViewItems/index.js";
5
5
  import { UseTreeViewExpansionSignature } from "../useTreeViewExpansion/index.js";
6
- import { TreeViewSelectionPropagation, TreeViewCancellableEventHandler } from "../../../models/index.js";
6
+ import { TreeViewSelectionPropagation, TreeViewItemId } from "../../../models/index.js";
7
7
  export interface UseTreeViewSelectionPublicAPI {
8
8
  /**
9
9
  * Select or deselect an item.
10
10
  * @param {object} parameters The parameters of the method.
11
- * @param {string} parameters.itemId The id of the item to select or deselect.
11
+ * @param {TreeViewItemId} parameters.itemId The id of the item to select or deselect.
12
12
  * @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
13
13
  * @param {boolean} parameters.keepExistingSelection If `true`, the other already selected items will remain selected, otherwise, they will be deselected. This parameter is only relevant when `multiSelect` is `true`
14
14
  * @param {boolean | undefined} parameters.shouldBeSelected If `true` the item will be selected. If `false` the item will be deselected. If not defined, the item's selection status will be toggled.
15
15
  */
16
16
  setItemSelection: (parameters: {
17
- itemId: string;
17
+ itemId: TreeViewItemId;
18
18
  event?: React.SyntheticEvent;
19
19
  shouldBeSelected?: boolean;
20
20
  keepExistingSelection?: boolean;
@@ -29,33 +29,33 @@ export interface UseTreeViewSelectionInstance extends UseTreeViewSelectionPublic
29
29
  /**
30
30
  * Expand the current selection range up to the given item.
31
31
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
32
- * @param {string} itemId The id of the item to expand the selection to.
32
+ * @param {TreeViewItemId} itemId The id of the item to expand the selection to.
33
33
  */
34
- expandSelectionRange: (event: React.SyntheticEvent, itemId: string) => void;
34
+ expandSelectionRange: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void;
35
35
  /**
36
36
  * Expand the current selection range from the first navigable item to the given item.
37
37
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
38
- * @param {string} itemId The id of the item up to which the selection range should be expanded.
38
+ * @param {TreeViewItemId} itemId The id of the item up to which the selection range should be expanded.
39
39
  */
40
- selectRangeFromStartToItem: (event: React.SyntheticEvent, itemId: string) => void;
40
+ selectRangeFromStartToItem: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void;
41
41
  /**
42
42
  * Expand the current selection range from the given item to the last navigable item.
43
43
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
44
- * @param {string} itemId The id of the item from which the selection range should be expanded.
44
+ * @param {TreeViewItemId} itemId The id of the item from which the selection range should be expanded.
45
45
  */
46
- selectRangeFromItemToEnd: (event: React.SyntheticEvent, itemId: string) => void;
46
+ selectRangeFromItemToEnd: (event: React.SyntheticEvent, itemId: TreeViewItemId) => void;
47
47
  /**
48
48
  * Update the selection when navigating with ArrowUp / ArrowDown keys.
49
49
  * @param {React.SyntheticEvent} event The DOM event that triggered the change.
50
- * @param {string} currentItemId The id of the active item before the keyboard navigation.
51
- * @param {string} nextItemId The id of the active item after the keyboard navigation.
50
+ * @param {TreeViewItemId} currentItemId The id of the active item before the keyboard navigation.
51
+ * @param {TreeViewItemId} nextItemId The id of the active item after the keyboard navigation.
52
52
  */
53
- selectItemFromArrowNavigation: (event: React.SyntheticEvent, currentItemId: string, nextItemId: string) => void;
53
+ selectItemFromArrowNavigation: (event: React.SyntheticEvent, currentItemId: TreeViewItemId, nextItemId: TreeViewItemId) => void;
54
54
  }
55
- export type TreeViewSelectionValue<Multiple extends boolean | undefined> = Multiple extends true ? string[] : string | null;
55
+ export type TreeViewSelectionValue<Multiple extends boolean | undefined> = Multiple extends true ? TreeViewItemId[] : TreeViewItemId | null;
56
56
  export interface UseTreeViewSelectionParameters<Multiple extends boolean | undefined> {
57
57
  /**
58
- * If `true` selection is disabled.
58
+ * Whether selection is disabled.
59
59
  * @default false
60
60
  */
61
61
  disableSelection?: boolean;
@@ -71,12 +71,12 @@ export interface UseTreeViewSelectionParameters<Multiple extends boolean | undef
71
71
  */
72
72
  selectedItems?: TreeViewSelectionValue<Multiple>;
73
73
  /**
74
- * If `true`, `ctrl` and `shift` will trigger multiselect.
74
+ * Whether multiple items can be selected.
75
75
  * @default false
76
76
  */
77
77
  multiSelect?: Multiple;
78
78
  /**
79
- * If `true`, the Tree View renders a checkbox at the left of its label that allows selecting it.
79
+ * Whether the Tree View renders a checkbox at the left of its label that allows selecting it.
80
80
  * @default false
81
81
  */
82
82
  checkboxSelection?: boolean;
@@ -100,17 +100,17 @@ export interface UseTreeViewSelectionParameters<Multiple extends boolean | undef
100
100
  /**
101
101
  * Callback fired when Tree Items are selected/deselected.
102
102
  * @param {React.SyntheticEvent} event The DOM event that triggered the change. Can be null when the change is caused by the `publicAPI.setItemSelection()` method.
103
- * @param {string[] | string} itemIds The ids of the selected items.
103
+ * @param {TreeViewItemId[] | TreeViewItemId} itemIds The ids of the selected items.
104
104
  * When `multiSelect` is `true`, this is an array of strings; when false (default) a string.
105
105
  */
106
106
  onSelectedItemsChange?: (event: React.SyntheticEvent | null, itemIds: TreeViewSelectionValue<Multiple>) => void;
107
107
  /**
108
108
  * Callback fired when a Tree Item is selected or deselected.
109
109
  * @param {React.SyntheticEvent} event The DOM event that triggered the change. Can be null when the change is caused by the `publicAPI.setItemSelection()` method.
110
- * @param {array} itemId The itemId of the modified item.
110
+ * @param {TreeViewItemId} itemId The itemId of the modified item.
111
111
  * @param {boolean} isSelected `true` if the item has just been selected, `false` if it has just been deselected.
112
112
  */
113
- onItemSelectionToggle?: (event: React.SyntheticEvent | null, itemId: string, isSelected: boolean) => void;
113
+ onItemSelectionToggle?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId, isSelected: boolean) => void;
114
114
  }
115
115
  export type UseTreeViewSelectionParametersWithDefaults<Multiple extends boolean> = DefaultizedProps<UseTreeViewSelectionParameters<Multiple>, 'disableSelection' | 'defaultSelectedItems' | 'multiSelect' | 'checkboxSelection' | 'selectionPropagation'>;
116
116
  export interface UseTreeViewSelectionState {
@@ -129,15 +129,4 @@ export type UseTreeViewSelectionSignature = TreeViewPluginSignature<{
129
129
  publicAPI: UseTreeViewSelectionPublicAPI;
130
130
  state: UseTreeViewSelectionState;
131
131
  dependencies: [UseTreeViewItemsSignature, UseTreeViewExpansionSignature, UseTreeViewItemsSignature];
132
- }>;
133
- export interface UseTreeItemCheckboxSlotPropsFromSelection {
134
- visible?: boolean;
135
- checked?: boolean;
136
- indeterminate?: boolean;
137
- disabled?: boolean;
138
- tabIndex?: -1;
139
- onChange?: TreeViewCancellableEventHandler<React.ChangeEvent<HTMLInputElement>>;
140
- }
141
- declare module '@mui/x-tree-view/useTreeItem' {
142
- interface UseTreeItemCheckboxSlotOwnProps extends UseTreeItemCheckboxSlotPropsFromSelection {}
143
- }
132
+ }>;
@@ -2,6 +2,7 @@ export type TreeViewItemId = string;
2
2
  export type TreeViewDefaultItemModelProperties = {
3
3
  id: string;
4
4
  label: string;
5
+ children?: TreeViewDefaultItemModelProperties[];
5
6
  };
6
7
  export type TreeViewBaseItem<R extends {} = TreeViewDefaultItemModelProperties> = R & {
7
8
  children?: TreeViewBaseItem<R>[];
@@ -54,7 +54,6 @@ export const useTreeItem = parameters => {
54
54
  const handleContentRef = useMergedRefs(contentRef, contentRefObject);
55
55
  const checkboxRef = React.useRef(null);
56
56
  const treeId = useStore(store, idSelectors.treeId);
57
- const isSelectionEnabledForItem = useStore(store, selectionSelectors.canItemBeSelected, itemId);
58
57
  const isCheckboxSelectionEnabled = useStore(store, selectionSelectors.isCheckboxSelectionEnabled);
59
58
  const idAttribute = generateTreeItemIdAttribute({
60
59
  itemId,
@@ -147,26 +146,12 @@ export const useTreeItem = parameters => {
147
146
  });
148
147
  const getRootProps = (externalProps = {}) => {
149
148
  const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
150
-
151
- // https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
152
- let ariaSelected;
153
- if (status.selected) {
154
- // - each selected node has aria-selected set to true.
155
- ariaSelected = true;
156
- } else if (!isSelectionEnabledForItem) {
157
- // - if the tree contains nodes that are not selectable, aria-selected is not present on those nodes.
158
- ariaSelected = undefined;
159
- } else {
160
- // - all nodes that are selectable but not selected have aria-selected set to false.
161
- ariaSelected = false;
162
- }
163
149
  const props = _extends({}, externalEventHandlers, {
164
150
  ref: handleRootRef,
165
151
  role: 'treeitem',
166
152
  tabIndex: shouldBeAccessibleWithTab ? 0 : -1,
167
153
  id: idAttribute,
168
154
  'aria-expanded': status.expandable ? status.expanded : undefined,
169
- 'aria-selected': ariaSelected,
170
155
  'aria-disabled': status.disabled || undefined
171
156
  }, externalProps, {
172
157
  style: _extends({}, externalProps.style ?? {}, {
@@ -42,7 +42,6 @@ export interface UseTreeItemRootSlotPropsFromUseTreeItem {
42
42
  tabIndex: 0 | -1;
43
43
  id: string;
44
44
  'aria-expanded': React.AriaAttributes['aria-expanded'];
45
- 'aria-selected': React.AriaAttributes['aria-selected'];
46
45
  'aria-disabled': React.AriaAttributes['aria-disabled'];
47
46
  onFocus: TreeViewCancellableEventHandler<React.FocusEvent<HTMLElement>>;
48
47
  onBlur: TreeViewCancellableEventHandler<React.FocusEvent<HTMLElement>>;
package/icons/icons.js CHANGED
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.TreeViewExpandIcon = exports.TreeViewCollapseIcon = void 0;
8
7
  var _utils = require("@mui/material/utils");
9
- var React = _interopRequireWildcard(require("react"));
10
8
  var _jsxRuntime = require("react/jsx-runtime");
11
9
  const TreeViewExpandIcon = exports.TreeViewExpandIcon = (0, _utils.createSvgIcon)(/*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
12
10
  d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v8.16.0
2
+ * @mui/x-tree-view v8.18.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -5,7 +5,7 @@ interface TreeViewChildrenItemProviderProps {
5
5
  idAttribute: string | null;
6
6
  children: React.ReactNode;
7
7
  }
8
- export declare function TreeViewChildrenItemProvider(props: TreeViewChildrenItemProviderProps): React.JSX.Element;
8
+ export declare function TreeViewChildrenItemProvider(props: TreeViewChildrenItemProviderProps): import("react/jsx-runtime").JSX.Element;
9
9
  export declare namespace TreeViewChildrenItemProvider {
10
10
  var propTypes: any;
11
11
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { TreeViewProviderProps } from "./TreeViewProvider.types.js";
3
2
  import { TreeViewAnyPluginSignature } from "../models/index.js";
4
3
  /**
@@ -6,4 +5,4 @@ import { TreeViewAnyPluginSignature } from "../models/index.js";
6
5
  *
7
6
  * @ignore - do not document.
8
7
  */
9
- export declare function TreeViewProvider<TSignatures extends readonly TreeViewAnyPluginSignature[]>(props: TreeViewProviderProps<TSignatures>): React.JSX.Element;
8
+ export declare function TreeViewProvider<TSignatures extends readonly TreeViewAnyPluginSignature[]>(props: TreeViewProviderProps<TSignatures>): import("react/jsx-runtime").JSX.Element;
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { SlotComponentProps } from '@mui/utils/types';
3
3
  import { TreeItem, TreeItemProps } from "../../TreeItem/index.js";
4
4
  import { TreeViewItemId } from "../../models/index.js";
5
- export declare function RichTreeViewItems(props: RichTreeViewItemsProps): React.JSX.Element;
5
+ export declare function RichTreeViewItems(props: RichTreeViewItemsProps): import("react/jsx-runtime").JSX.Element;
6
6
  interface RichTreeViewItemsOwnerState {
7
7
  itemId: TreeViewItemId;
8
8
  label: string;
@@ -4,7 +4,7 @@ export declare const expansionSelectors: {
4
4
  /**
5
5
  * Gets the expanded items as provided to the component.
6
6
  */
7
- expandedItemsRaw: (state: TreeViewState<[UseTreeViewExpansionSignature]>) => string[];
7
+ expandedItemsRaw: (state: TreeViewState<[UseTreeViewExpansionSignature]>) => readonly string[];
8
8
  /**
9
9
  * Gets the expanded items as a Map.
10
10
  */
@@ -8,12 +8,12 @@ export interface UseTreeViewExpansionPublicAPI {
8
8
  /**
9
9
  * Change the expansion status of a given item.
10
10
  * @param {object} parameters The parameters of the method.
11
- * @param {string} parameters.itemId The id of the item to expand of collapse.
11
+ * @param {TreeViewItemId} parameters.itemId The id of the item to expand of collapse.
12
12
  * @param {React.SyntheticEvent} parameters.event The DOM event that triggered the change.
13
13
  * @param {boolean} parameters.shouldBeExpanded If `true` the item will be expanded. If `false` the item will be collapsed. If not defined, the item's expansion status will be the toggled.
14
14
  */
15
15
  setItemExpansion: (parameters: {
16
- itemId: string;
16
+ itemId: TreeViewItemId;
17
17
  event?: React.SyntheticEvent;
18
18
  shouldBeExpanded?: boolean;
19
19
  }) => void;
@@ -36,12 +36,12 @@ export interface UseTreeViewExpansionInstance extends Omit<UseTreeViewExpansionP
36
36
  * Is used by the `setItemExpansion` method and by the `useTreeViewLazyLoading` plugin.
37
37
  * Unlike `setItemExpansion`, this method does not trigger the lazy loading.
38
38
  * @param {object} parameters The parameters of the method.
39
- * @param {string} parameters.itemId The id of the item to expand of collapse.
39
+ * @param {TreeViewItemId} parameters.itemId The id of the item to expand of collapse.
40
40
  * @param {React.SyntheticEvent | null} parameters.event The DOM event that triggered the change.
41
41
  * @param {boolean} parameters.shouldBeExpanded If `true` the item will be expanded. If `false` the item will be collapsed.
42
42
  */
43
43
  applyItemExpansion: (parameters: {
44
- itemId: string;
44
+ itemId: TreeViewItemId;
45
45
  event: React.SyntheticEvent | null;
46
46
  shouldBeExpanded: boolean;
47
47
  }) => void;
@@ -55,26 +55,26 @@ export interface UseTreeViewExpansionParameters {
55
55
  * Expanded item ids.
56
56
  * Used when the item's expansion is controlled.
57
57
  */
58
- expandedItems?: string[];
58
+ expandedItems?: readonly TreeViewItemId[];
59
59
  /**
60
60
  * Expanded item ids.
61
61
  * Used when the item's expansion is not controlled.
62
62
  * @default []
63
63
  */
64
- defaultExpandedItems?: string[];
64
+ defaultExpandedItems?: readonly TreeViewItemId[];
65
65
  /**
66
66
  * Callback fired when Tree Items are expanded/collapsed.
67
67
  * @param {React.SyntheticEvent} event The DOM event that triggered the change. Can be null when the change is caused by the `publicAPI.setItemExpansion()` method.
68
- * @param {array} itemIds The ids of the expanded items.
68
+ * @param {TreeViewItemId[]} itemIds The ids of the expanded items.
69
69
  */
70
- onExpandedItemsChange?: (event: React.SyntheticEvent | null, itemIds: string[]) => void;
70
+ onExpandedItemsChange?: (event: React.SyntheticEvent | null, itemIds: TreeViewItemId[]) => void;
71
71
  /**
72
72
  * Callback fired when a Tree Item is expanded or collapsed.
73
73
  * @param {React.SyntheticEvent | null} event The DOM event that triggered the change. Can be null when the change is caused by the `publicAPI.setItemExpansion()` method.
74
- * @param {array} itemId The itemId of the modified item.
74
+ * @param {TreeViewItemId} itemId The itemId of the modified item.
75
75
  * @param {boolean} isExpanded `true` if the item has just been expanded, `false` if it has just been collapsed.
76
76
  */
77
- onItemExpansionToggle?: (event: React.SyntheticEvent | null, itemId: string, isExpanded: boolean) => void;
77
+ onItemExpansionToggle?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId, isExpanded: boolean) => void;
78
78
  /**
79
79
  * The slot that triggers the item's expansion when clicked.
80
80
  * @default 'content'
@@ -84,7 +84,7 @@ export interface UseTreeViewExpansionParameters {
84
84
  export type UseTreeViewExpansionParametersWithDefaults = DefaultizedProps<UseTreeViewExpansionParameters, 'defaultExpandedItems'>;
85
85
  export interface UseTreeViewExpansionState {
86
86
  expansion: {
87
- expandedItems: string[];
87
+ expandedItems: readonly TreeViewItemId[];
88
88
  expansionTrigger: 'content' | 'iconContainer';
89
89
  };
90
90
  }
@@ -3,6 +3,7 @@ import { TreeViewPluginSignature } from "../../models/index.js";
3
3
  import type { UseTreeViewItemsSignature } from "../useTreeViewItems/index.js";
4
4
  import type { UseTreeViewSelectionSignature } from "../useTreeViewSelection/index.js";
5
5
  import { UseTreeViewExpansionSignature } from "../useTreeViewExpansion/index.js";
6
+ import { TreeViewItemId } from "../../../models/index.js";
6
7
  export interface UseTreeViewFocusPublicAPI {
7
8
  /**
8
9
  * Focus the item with the given id.
@@ -12,7 +13,7 @@ export interface UseTreeViewFocusPublicAPI {
12
13
  * @param {React.SyntheticEvent | null} event The DOM event that triggered the change.
13
14
  * @param {TreeViewItemId} itemId The id of the item to focus.
14
15
  */
15
- focusItem: (event: React.SyntheticEvent | null, itemId: string) => void;
16
+ focusItem: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void;
16
17
  }
17
18
  export interface UseTreeViewFocusInstance extends UseTreeViewFocusPublicAPI {
18
19
  /**
@@ -24,14 +25,14 @@ export interface UseTreeViewFocusParameters {
24
25
  /**
25
26
  * Callback fired when a given Tree Item is focused.
26
27
  * @param {React.SyntheticEvent | null} event The DOM event that triggered the change. **Warning**: This is a generic event not a focus event.
27
- * @param {string} itemId The id of the focused item.
28
+ * @param {TreeViewItemId} itemId The id of the focused item.
28
29
  */
29
- onItemFocus?: (event: React.SyntheticEvent | null, itemId: string) => void;
30
+ onItemFocus?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void;
30
31
  }
31
32
  export type UseTreeViewFocusParametersWithDefaults = UseTreeViewFocusParameters;
32
33
  export interface UseTreeViewFocusState {
33
34
  focus: {
34
- focusedItemId: string | null;
35
+ focusedItemId: TreeViewItemId | null;
35
36
  };
36
37
  }
37
38
  export type UseTreeViewFocusSignature = TreeViewPluginSignature<{
@@ -11,7 +11,7 @@ export interface UseTreeViewItemsPublicAPI<R extends {}> {
11
11
  /**
12
12
  * Get the item with the given id.
13
13
  * When used in the Simple Tree View, it returns an object with the `id` and `label` properties.
14
- * @param {string} itemId The id of the item to retrieve.
14
+ * @param {TreeViewItemId} itemId The id of the item to retrieve.
15
15
  * @returns {R} The item with the given id.
16
16
  */
17
17
  getItem: (itemId: TreeViewItemId) => R;
@@ -45,7 +45,7 @@ export interface UseTreeViewItemsPublicAPI<R extends {}> {
45
45
  shouldBeDisabled?: boolean;
46
46
  }) => void;
47
47
  /** * Get the id of the parent item.
48
- * @param {string} itemId The id of the item to whose parentId we want to retrieve.
48
+ * @param {TreeViewItemId} itemId The id of the item to whose parentId we want to retrieve.
49
49
  * @returns {TreeViewItemId | null} The id of the parent item.
50
50
  */
51
51
  getParentId: (itemId: TreeViewItemId) => TreeViewItemId | null;
@@ -88,7 +88,7 @@ export interface UseTreeViewItemsParameters<R extends {
88
88
  children?: R[];
89
89
  }> {
90
90
  /**
91
- * If `true`, will allow focus on disabled items.
91
+ * Whether the items should be focusable when disabled.
92
92
  * @default false
93
93
  */
94
94
  disabledItemsFocusable?: boolean;
@@ -123,16 +123,16 @@ export interface UseTreeViewItemsParameters<R extends {
123
123
  *
124
124
  * @template R
125
125
  * @param {R} item The item to check.
126
- * @returns {string} The id of the item.
126
+ * @returns {TreeViewItemId} The id of the item.
127
127
  * @default (item) => item.id
128
128
  */
129
129
  getItemId?: (item: R) => TreeViewItemId;
130
130
  /**
131
131
  * Callback fired when the `content` slot of a given Tree Item is clicked.
132
132
  * @param {React.MouseEvent} event The DOM event that triggered the change.
133
- * @param {string} itemId The id of the focused item.
133
+ * @param {TreeViewItemId} itemId The id of the focused item.
134
134
  */
135
- onItemClick?: (event: React.MouseEvent, itemId: string) => void;
135
+ onItemClick?: (event: React.MouseEvent, itemId: TreeViewItemId) => void;
136
136
  /**
137
137
  * Horizontal indentation between an item and its children.
138
138
  * Examples: 24, "24px", "2rem", "2em".
@@ -146,7 +146,7 @@ export type UseTreeViewItemsParametersWithDefaults<R extends {
146
146
  export interface UseTreeViewItemsState<R extends {}> {
147
147
  items: {
148
148
  /**
149
- * If `true`, will allow focus on disabled items.
149
+ * Whether the items should be focusable when disabled.
150
150
  * Always equal to `props.disabledItemsFocusable` (or `false` if not provided).
151
151
  */
152
152
  disabledItemsFocusable: boolean;
@@ -0,0 +1,2 @@
1
+ import { TreeViewItemPlugin } from "../../models/index.js";
2
+ export declare const useTreeViewJSXItemsItemPlugin: TreeViewItemPlugin;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useTreeViewJSXItemsItemPlugin = void 0;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _store = require("@mui/x-internals/store");
11
+ var _useMergedRefs = require("@base-ui-components/utils/useMergedRefs");
12
+ var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
13
+ var _TreeViewProvider = require("../../TreeViewProvider");
14
+ var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider");
15
+ var _useTreeItemUtils = require("../../../hooks/useTreeItemUtils/useTreeItemUtils");
16
+ var _useTreeViewId = require("../../corePlugins/useTreeViewId");
17
+ var _useTreeViewId2 = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
18
+ const useTreeViewJSXItemsItemPlugin = ({
19
+ props,
20
+ rootRef,
21
+ contentRef
22
+ }) => {
23
+ const {
24
+ instance,
25
+ store
26
+ } = (0, _TreeViewProvider.useTreeViewContext)();
27
+ const {
28
+ children,
29
+ disabled = false,
30
+ label,
31
+ itemId,
32
+ id
33
+ } = props;
34
+ const parentContext = React.useContext(_TreeViewChildrenItemProvider.TreeViewChildrenItemContext);
35
+ if (parentContext == null) {
36
+ throw new Error(['MUI X: Could not find the Tree View Children Item context.', 'It looks like you rendered your component outside of a SimpleTreeView parent component.', 'This can also happen if you are bundling multiple versions of the Tree View.'].join('\n'));
37
+ }
38
+ const {
39
+ registerChild,
40
+ unregisterChild,
41
+ parentId
42
+ } = parentContext;
43
+ const expandable = (0, _useTreeItemUtils.itemHasChildren)(children);
44
+ const pluginContentRef = React.useRef(null);
45
+ const handleContentRef = (0, _useMergedRefs.useMergedRefs)(pluginContentRef, contentRef);
46
+ const treeId = (0, _store.useStore)(store, _useTreeViewId.idSelectors.treeId);
47
+
48
+ // Prevent any flashing
49
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
50
+ const idAttribute = (0, _useTreeViewId2.generateTreeItemIdAttribute)({
51
+ itemId,
52
+ treeId,
53
+ id
54
+ });
55
+ registerChild(idAttribute, itemId);
56
+ return () => {
57
+ unregisterChild(idAttribute);
58
+ unregisterChild(idAttribute);
59
+ };
60
+ }, [store, instance, registerChild, unregisterChild, itemId, id, treeId]);
61
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
62
+ return instance.insertJSXItem({
63
+ id: itemId,
64
+ idAttribute: id,
65
+ parentId,
66
+ expandable,
67
+ disabled
68
+ });
69
+ }, [instance, parentId, itemId, expandable, disabled, id]);
70
+ React.useEffect(() => {
71
+ if (label) {
72
+ return instance.mapLabelFromJSX(itemId, (pluginContentRef.current?.textContent ?? '').toLowerCase());
73
+ }
74
+ return undefined;
75
+ }, [instance, itemId, label]);
76
+ return {
77
+ contentRef: handleContentRef,
78
+ rootRef
79
+ };
80
+ };
81
+ exports.useTreeViewJSXItemsItemPlugin = useTreeViewJSXItemsItemPlugin;
@@ -9,17 +9,11 @@ Object.defineProperty(exports, "__esModule", {
9
9
  exports.useTreeViewJSXItems = void 0;
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
- var _store = require("@mui/x-internals/store");
13
12
  var _useEventCallback = require("@base-ui-components/utils/useEventCallback");
14
- var _useMergedRefs = require("@base-ui-components/utils/useMergedRefs");
15
- var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
16
- var _TreeViewProvider = require("../../TreeViewProvider");
17
13
  var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider");
18
14
  var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils");
19
15
  var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext");
20
- var _useTreeViewId = require("../../corePlugins/useTreeViewId/useTreeViewId.utils");
21
- var _useTreeItemUtils = require("../../../hooks/useTreeItemUtils/useTreeItemUtils");
22
- var _useTreeViewId2 = require("../../corePlugins/useTreeViewId");
16
+ var _itemPlugin = require("./itemPlugin");
23
17
  var _jsxRuntime = require("react/jsx-runtime");
24
18
  const useTreeViewJSXItems = ({
25
19
  instance,
@@ -86,70 +80,7 @@ const useTreeViewJSXItems = ({
86
80
  };
87
81
  };
88
82
  exports.useTreeViewJSXItems = useTreeViewJSXItems;
89
- const useTreeViewJSXItemsItemPlugin = ({
90
- props,
91
- rootRef,
92
- contentRef
93
- }) => {
94
- const {
95
- instance,
96
- store
97
- } = (0, _TreeViewProvider.useTreeViewContext)();
98
- const {
99
- children,
100
- disabled = false,
101
- label,
102
- itemId,
103
- id
104
- } = props;
105
- const parentContext = React.useContext(_TreeViewChildrenItemProvider.TreeViewChildrenItemContext);
106
- if (parentContext == null) {
107
- throw new Error(['MUI X: Could not find the Tree View Children Item context.', 'It looks like you rendered your component outside of a SimpleTreeView parent component.', 'This can also happen if you are bundling multiple versions of the Tree View.'].join('\n'));
108
- }
109
- const {
110
- registerChild,
111
- unregisterChild,
112
- parentId
113
- } = parentContext;
114
- const expandable = (0, _useTreeItemUtils.itemHasChildren)(children);
115
- const pluginContentRef = React.useRef(null);
116
- const handleContentRef = (0, _useMergedRefs.useMergedRefs)(pluginContentRef, contentRef);
117
- const treeId = (0, _store.useStore)(store, _useTreeViewId2.idSelectors.treeId);
118
-
119
- // Prevent any flashing
120
- (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
121
- const idAttribute = (0, _useTreeViewId.generateTreeItemIdAttribute)({
122
- itemId,
123
- treeId,
124
- id
125
- });
126
- registerChild(idAttribute, itemId);
127
- return () => {
128
- unregisterChild(idAttribute);
129
- unregisterChild(idAttribute);
130
- };
131
- }, [store, instance, registerChild, unregisterChild, itemId, id, treeId]);
132
- (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
133
- return instance.insertJSXItem({
134
- id: itemId,
135
- idAttribute: id,
136
- parentId,
137
- expandable,
138
- disabled
139
- });
140
- }, [instance, parentId, itemId, expandable, disabled, id]);
141
- React.useEffect(() => {
142
- if (label) {
143
- return instance.mapLabelFromJSX(itemId, (pluginContentRef.current?.textContent ?? '').toLowerCase());
144
- }
145
- return undefined;
146
- }, [instance, itemId, label]);
147
- return {
148
- contentRef: handleContentRef,
149
- rootRef
150
- };
151
- };
152
- useTreeViewJSXItems.itemPlugin = useTreeViewJSXItemsItemPlugin;
83
+ useTreeViewJSXItems.itemPlugin = _itemPlugin.useTreeViewJSXItemsItemPlugin;
153
84
  useTreeViewJSXItems.wrapItem = ({
154
85
  children,
155
86
  itemId,
@@ -0,0 +1,11 @@
1
+ import { TreeViewItemPlugin } from "../../models/index.js";
2
+ import { TreeItemLabelInputProps } from "../../../TreeItemLabelInput/index.js";
3
+ export declare const useTreeViewLabelItemPlugin: TreeViewItemPlugin;
4
+ export interface UseTreeItemLabelInputSlotPropsFromLabelEditing extends TreeItemLabelInputProps {}
5
+ export interface UseTreeItemLabelSlotPropsFromLabelEditing {
6
+ editable?: boolean;
7
+ }
8
+ declare module '@mui/x-tree-view/useTreeItem' {
9
+ interface UseTreeItemLabelInputSlotOwnProps extends UseTreeItemLabelInputSlotPropsFromLabelEditing {}
10
+ interface UseTreeItemLabelSlotOwnProps extends UseTreeItemLabelSlotPropsFromLabelEditing {}
11
+ }
@@ -7,15 +7,15 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useTreeViewLabel = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
10
- var _useTreeViewLabel = require("./useTreeViewLabel.itemPlugin");
11
- var _useTreeViewLabel2 = require("./useTreeViewLabel.selectors");
10
+ var _itemPlugin = require("./itemPlugin");
11
+ var _useTreeViewLabel = require("./useTreeViewLabel.selectors");
12
12
  const useTreeViewLabel = ({
13
13
  store,
14
14
  params
15
15
  }) => {
16
16
  const setEditedItem = editedItemId => {
17
17
  if (editedItemId !== null) {
18
- const isEditable = _useTreeViewLabel2.labelSelectors.isItemEditable(store.state, editedItemId);
18
+ const isEditable = _useTreeViewLabel.labelSelectors.isItemEditable(store.state, editedItemId);
19
19
  if (!isEditable) {
20
20
  return;
21
21
  }
@@ -60,7 +60,7 @@ const useTreeViewLabel = ({
60
60
  };
61
61
  };
62
62
  exports.useTreeViewLabel = useTreeViewLabel;
63
- useTreeViewLabel.itemPlugin = _useTreeViewLabel.useTreeViewLabelItemPlugin;
63
+ useTreeViewLabel.itemPlugin = _itemPlugin.useTreeViewLabelItemPlugin;
64
64
  useTreeViewLabel.applyDefaultValuesToParams = ({
65
65
  params
66
66
  }) => (0, _extends2.default)({}, params, {
@@ -2,7 +2,6 @@ import { DefaultizedProps } from '@mui/x-internals/types';
2
2
  import { TreeViewPluginSignature } from "../../models/index.js";
3
3
  import { TreeViewItemId } from "../../../models/index.js";
4
4
  import { UseTreeViewItemsSignature } from "../useTreeViewItems/index.js";
5
- import { TreeItemLabelInputProps } from "../../../TreeItemLabelInput/index.js";
6
5
  export interface UseTreeViewLabelPublicAPI {
7
6
  /**
8
7
  * Used to update the label of an item.
@@ -38,7 +37,7 @@ export type UseTreeViewLabelParametersWithDefaults<R extends {}> = DefaultizedPr
38
37
  export interface UseTreeViewLabelState {
39
38
  label: {
40
39
  isItemEditable: ((item: any) => boolean) | boolean;
41
- editedItemId: string | null;
40
+ editedItemId: TreeViewItemId | null;
42
41
  };
43
42
  }
44
43
  export type UseTreeViewLabelSignature = TreeViewPluginSignature<{
@@ -48,12 +47,4 @@ export type UseTreeViewLabelSignature = TreeViewPluginSignature<{
48
47
  instance: UseTreeViewLabelInstance;
49
48
  state: UseTreeViewLabelState;
50
49
  dependencies: [UseTreeViewItemsSignature];
51
- }>;
52
- export interface UseTreeItemLabelInputSlotPropsFromLabelEditing extends TreeItemLabelInputProps {}
53
- export interface UseTreeItemLabelSlotPropsFromLabelEditing {
54
- editable?: boolean;
55
- }
56
- declare module '@mui/x-tree-view/useTreeItem' {
57
- interface UseTreeItemLabelInputSlotOwnProps extends UseTreeItemLabelInputSlotPropsFromLabelEditing {}
58
- interface UseTreeItemLabelSlotOwnProps extends UseTreeItemLabelSlotPropsFromLabelEditing {}
59
- }
50
+ }>;