@mui/x-tree-view 8.27.1 → 9.0.0-alpha.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 (58) hide show
  1. package/CHANGELOG.md +204 -5
  2. package/RichTreeView/RichTreeView.js +32 -19
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -5
  4. package/RichTreeView/useExtractRichTreeViewParameters.js +9 -5
  5. package/SimpleTreeView/SimpleTreeView.js +5 -0
  6. package/SimpleTreeView/useExtractSimpleTreeViewParameters.js +6 -4
  7. package/TreeItem/TreeItem.d.ts +1 -1
  8. package/TreeItem/TreeItem.js +3 -2
  9. package/TreeItemIcon/TreeItemIcon.js +2 -2
  10. package/esm/RichTreeView/RichTreeView.js +32 -19
  11. package/esm/RichTreeView/RichTreeView.types.d.ts +2 -5
  12. package/esm/RichTreeView/useExtractRichTreeViewParameters.js +9 -5
  13. package/esm/SimpleTreeView/SimpleTreeView.js +5 -0
  14. package/esm/SimpleTreeView/useExtractSimpleTreeViewParameters.js +6 -4
  15. package/esm/TreeItem/TreeItem.d.ts +1 -1
  16. package/esm/TreeItem/TreeItem.js +2 -1
  17. package/esm/TreeItemIcon/TreeItemIcon.js +1 -1
  18. package/esm/index.js +1 -1
  19. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +10 -6
  20. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +1 -1
  21. package/esm/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +2 -2
  22. package/esm/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +14 -1
  23. package/esm/internals/RichTreeViewStore/RichTreeViewStore.utils.js +2 -1
  24. package/esm/internals/TreeViewProvider/index.d.ts +1 -0
  25. package/esm/internals/TreeViewProvider/index.js +2 -1
  26. package/esm/internals/components/RichTreeViewItems.d.ts +29 -5
  27. package/esm/internals/components/RichTreeViewItems.js +25 -7
  28. package/esm/internals/hooks/useTreeViewRootProps.d.ts +2 -1
  29. package/esm/internals/index.d.ts +3 -3
  30. package/esm/internals/index.js +2 -2
  31. package/esm/internals/plugins/items/selectors.d.ts +6 -1
  32. package/esm/internals/plugins/items/selectors.js +5 -1
  33. package/esm/models/domStructure.d.ts +1 -0
  34. package/esm/models/domStructure.js +1 -0
  35. package/esm/models/index.d.ts +1 -0
  36. package/esm/models/index.js +1 -0
  37. package/esm/useTreeItem/useTreeItem.js +3 -0
  38. package/index.js +1 -1
  39. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.types.d.ts +10 -6
  40. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.d.ts +1 -1
  41. package/internals/MinimalTreeViewStore/MinimalTreeViewStore.utils.js +2 -2
  42. package/internals/RichTreeViewStore/RichTreeViewStore.types.d.ts +14 -1
  43. package/internals/RichTreeViewStore/RichTreeViewStore.utils.js +2 -1
  44. package/internals/TreeViewProvider/index.d.ts +1 -0
  45. package/internals/TreeViewProvider/index.js +8 -1
  46. package/internals/components/RichTreeViewItems.d.ts +29 -5
  47. package/internals/components/RichTreeViewItems.js +25 -6
  48. package/internals/hooks/useTreeViewRootProps.d.ts +2 -1
  49. package/internals/index.d.ts +3 -3
  50. package/internals/index.js +12 -0
  51. package/internals/plugins/items/selectors.d.ts +6 -1
  52. package/internals/plugins/items/selectors.js +5 -1
  53. package/models/domStructure.d.ts +1 -0
  54. package/models/domStructure.js +5 -0
  55. package/models/index.d.ts +1 -0
  56. package/models/index.js +11 -0
  57. package/package.json +4 -4
  58. package/useTreeItem/useTreeItem.js +3 -0
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Theme } from '@mui/material/styles';
3
3
  import { SxProps } from '@mui/system/styleFunctionSx';
4
- import { SlotComponentProps } from '@mui/utils/types';
5
4
  import { RichTreeViewClasses } from "./richTreeViewClasses.js";
6
5
  import { RichTreeViewItemsSlotProps, RichTreeViewItemsSlots } from "../internals/components/RichTreeViewItems.js";
7
6
  import { TreeViewSlotProps, TreeViewSlots } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
@@ -9,16 +8,14 @@ import { RichTreeViewStore } from "../internals/RichTreeViewStore/index.js";
9
8
  import { TreeViewValidItem } from "../models/items.js";
10
9
  import { UseTreeViewStoreParameters } from "../internals/hooks/useTreeViewStore.js";
11
10
  import { TreeViewPublicAPI } from "../internals/models/index.js";
12
- export interface RichTreeViewSlots extends TreeViewSlots, RichTreeViewItemsSlots {
11
+ export interface RichTreeViewSlots extends TreeViewSlots, Omit<RichTreeViewItemsSlots, 'root'> {
13
12
  /**
14
13
  * Element rendered at the root.
15
14
  * @default RichTreeViewRoot
16
15
  */
17
16
  root?: React.ElementType;
18
17
  }
19
- export interface RichTreeViewSlotProps<R extends {}, Multiple extends boolean | undefined> extends TreeViewSlotProps, RichTreeViewItemsSlotProps {
20
- root?: SlotComponentProps<'ul', {}, RichTreeViewProps<R, Multiple>>;
21
- }
18
+ export interface RichTreeViewSlotProps<R extends {}, Multiple extends boolean | undefined> extends TreeViewSlotProps, RichTreeViewItemsSlotProps<RichTreeViewProps<R, Multiple>> {}
22
19
  export type RichTreeViewApiRef<R extends TreeViewValidItem<R> = any, Multiple extends boolean | undefined = any> = React.RefObject<Partial<TreeViewPublicAPI<RichTreeViewStore<R, Multiple>>> | undefined>;
23
20
  export interface RichTreeViewPropsBase extends React.HTMLAttributes<HTMLUListElement> {
24
21
  className?: string;
@@ -1,5 +1,5 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
- const _excluded = ["apiRef", "slots", "slotProps", "disabledItemsFocusable", "items", "isItemDisabled", "isItemSelectionDisabled", "getItemLabel", "getItemChildren", "getItemId", "onItemClick", "itemChildrenIndentation", "id", "expandedItems", "defaultExpandedItems", "onExpandedItemsChange", "onItemExpansionToggle", "expansionTrigger", "disableSelection", "selectedItems", "defaultSelectedItems", "multiSelect", "checkboxSelection", "selectionPropagation", "onSelectedItemsChange", "onItemSelectionToggle", "onItemFocus", "onItemLabelChange", "isItemEditable"];
2
+ const _excluded = ["apiRef", "slots", "slotProps", "disabledItemsFocusable", "items", "isItemDisabled", "isItemSelectionDisabled", "getItemLabel", "getItemChildren", "getItemId", "onItemClick", "itemChildrenIndentation", "id", "expandedItems", "defaultExpandedItems", "onExpandedItemsChange", "onItemExpansionToggle", "expansionTrigger", "disableSelection", "selectedItems", "defaultSelectedItems", "multiSelect", "checkboxSelection", "selectionPropagation", "onSelectedItemsChange", "onItemSelectionToggle", "onItemFocus", "itemHeight", "onItemLabelChange", "isItemEditable", "domStructure"];
3
3
  import * as React from 'react';
4
4
  export function useExtractRichTreeViewParameters(props) {
5
5
  const {
@@ -32,9 +32,11 @@ export function useExtractRichTreeViewParameters(props) {
32
32
  onSelectedItemsChange,
33
33
  onItemSelectionToggle,
34
34
  onItemFocus,
35
+ itemHeight,
35
36
  // RichTreeViewStore parameters
36
37
  onItemLabelChange,
37
- isItemEditable
38
+ isItemEditable,
39
+ domStructure
38
40
 
39
41
  // Forwarded props
40
42
  } = props,
@@ -65,14 +67,16 @@ export function useExtractRichTreeViewParameters(props) {
65
67
  onSelectedItemsChange,
66
68
  onItemSelectionToggle,
67
69
  onItemFocus,
70
+ itemHeight,
68
71
  // RichTreeViewStore parameters
69
72
  onItemLabelChange,
70
- isItemEditable
73
+ isItemEditable,
74
+ domStructure
71
75
  }), [
72
76
  // Shared parameters
73
- disabledItemsFocusable, items, isItemDisabled, isItemSelectionDisabled, getItemLabel, getItemChildren, getItemId, onItemClick, itemChildrenIndentation, id, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpansionToggle, expansionTrigger, disableSelection, selectedItems, defaultSelectedItems, multiSelect, checkboxSelection, selectionPropagation, onSelectedItemsChange, onItemSelectionToggle, onItemFocus,
77
+ disabledItemsFocusable, items, isItemDisabled, isItemSelectionDisabled, getItemLabel, getItemChildren, getItemId, onItemClick, itemChildrenIndentation, id, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpansionToggle, expansionTrigger, disableSelection, selectedItems, defaultSelectedItems, multiSelect, checkboxSelection, selectionPropagation, onSelectedItemsChange, onItemSelectionToggle, onItemFocus, itemHeight,
74
78
  // RichTreeViewStore parameters
75
- onItemLabelChange, isItemEditable]);
79
+ onItemLabelChange, isItemEditable, domStructure]);
76
80
  return {
77
81
  apiRef,
78
82
  slots,
@@ -185,6 +185,11 @@ process.env.NODE_ENV !== "production" ? SimpleTreeView.propTypes = {
185
185
  * @default 12px
186
186
  */
187
187
  itemChildrenIndentation: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
188
+ /**
189
+ * Sets the height in pixel of an item.
190
+ * If not provided, no height restriction is applied to the tree item content element.
191
+ */
192
+ itemHeight: PropTypes.number,
188
193
  /**
189
194
  * Whether multiple items can be selected.
190
195
  * @default false
@@ -1,5 +1,5 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
- const _excluded = ["apiRef", "slots", "slotProps", "disabledItemsFocusable", "onItemClick", "itemChildrenIndentation", "id", "expandedItems", "defaultExpandedItems", "onExpandedItemsChange", "onItemExpansionToggle", "expansionTrigger", "disableSelection", "selectedItems", "defaultSelectedItems", "multiSelect", "checkboxSelection", "selectionPropagation", "onSelectedItemsChange", "onItemSelectionToggle", "onItemFocus"];
2
+ const _excluded = ["apiRef", "slots", "slotProps", "disabledItemsFocusable", "onItemClick", "itemChildrenIndentation", "id", "expandedItems", "defaultExpandedItems", "onExpandedItemsChange", "onItemExpansionToggle", "expansionTrigger", "disableSelection", "selectedItems", "defaultSelectedItems", "multiSelect", "checkboxSelection", "selectionPropagation", "onSelectedItemsChange", "onItemSelectionToggle", "onItemFocus", "itemHeight"];
3
3
  import * as React from 'react';
4
4
  export function useExtractSimpleTreeViewParameters(props) {
5
5
  const {
@@ -25,7 +25,8 @@ export function useExtractSimpleTreeViewParameters(props) {
25
25
  selectionPropagation,
26
26
  onSelectedItemsChange,
27
27
  onItemSelectionToggle,
28
- onItemFocus
28
+ onItemFocus,
29
+ itemHeight
29
30
 
30
31
  // SimpleTreeViewStore parameters
31
32
 
@@ -51,12 +52,13 @@ export function useExtractSimpleTreeViewParameters(props) {
51
52
  selectionPropagation,
52
53
  onSelectedItemsChange,
53
54
  onItemSelectionToggle,
54
- onItemFocus
55
+ onItemFocus,
56
+ itemHeight
55
57
 
56
58
  // SimpleTreeViewStore parameters
57
59
  }), [
58
60
  // Shared parameters
59
- disabledItemsFocusable, onItemClick, itemChildrenIndentation, id, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpansionToggle, expansionTrigger, disableSelection, selectedItems, defaultSelectedItems, multiSelect, checkboxSelection, selectionPropagation, onSelectedItemsChange, onItemSelectionToggle, onItemFocus
61
+ disabledItemsFocusable, onItemClick, itemChildrenIndentation, id, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpansionToggle, expansionTrigger, disableSelection, selectedItems, defaultSelectedItems, multiSelect, checkboxSelection, selectionPropagation, onSelectedItemsChange, onItemSelectionToggle, onItemFocus, itemHeight
60
62
 
61
63
  // SimpleTreeViewStore parameters
62
64
  ]);
@@ -15,7 +15,7 @@ export declare const TreeItemErrorContainer: import("@emotion/styled").StyledCom
15
15
  export declare const TreeItemLoadingContainer: import("@emotion/styled").StyledComponent<Pick<import("@mui/material/CircularProgress").CircularProgressProps, keyof import("@mui/material/CircularProgress").CircularProgressProps> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
16
16
  export declare const TreeItemCheckbox: import("@emotion/styled").StyledComponent<Pick<Omit<CheckboxProps & {
17
17
  visible?: boolean;
18
- }, "ref"> & React.RefAttributes<HTMLButtonElement>, "form" | "slot" | "style" | "title" | "aria-expanded" | "aria-disabled" | "onDoubleClick" | "aria-hidden" | "content" | "disabled" | "slots" | "slotProps" | "className" | "classes" | "color" | "sx" | "suppressHydrationWarning" | "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-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "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" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "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" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "icon" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "action" | "checked" | "visible" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "nonce" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "indeterminate" | "readOnly" | "required" | "size" | "component" | "checkedIcon" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "inputProps" | "inputRef" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
18
+ }, "ref"> & React.RefAttributes<HTMLButtonElement>, "form" | "slot" | "style" | "title" | "aria-expanded" | "aria-disabled" | "onDoubleClick" | "aria-hidden" | "content" | "disabled" | "slots" | "slotProps" | "className" | "classes" | "color" | "sx" | "suppressHydrationWarning" | "id" | "lang" | "name" | "nonce" | "part" | "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-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "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" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "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" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "icon" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "value" | "action" | "checked" | "visible" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "indeterminate" | "readOnly" | "required" | "size" | "component" | "checkedIcon" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "edge" | "inputProps" | "inputRef" | "indeterminateIcon" | keyof React.RefAttributes<HTMLButtonElement>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
19
19
  type TreeItemComponent = ((props: TreeItemProps & React.RefAttributes<HTMLLIElement>) => React.JSX.Element) & {
20
20
  propTypes?: any;
21
21
  };
@@ -22,7 +22,7 @@ import { TreeItemIcon } from "../TreeItemIcon/index.js";
22
22
  import { TreeItemDragAndDropOverlay } from "../TreeItemDragAndDropOverlay/index.js";
23
23
  import { TreeItemProvider } from "../TreeItemProvider/index.js";
24
24
  import { TreeItemLabelInput } from "../TreeItemLabelInput/index.js";
25
- import { useTreeViewStyleContext } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
25
+ import { useTreeViewStyleContext } from "../internals/TreeViewProvider/index.js";
26
26
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
27
27
  const useThemeProps = createUseThemeProps('MuiTreeItem');
28
28
  export const TreeItemRoot = styled('li', {
@@ -45,6 +45,7 @@ export const TreeItemContent = styled('div', {
45
45
  paddingLeft: `calc(${theme.spacing(1)} + var(--TreeView-itemChildrenIndentation) * var(--TreeView-itemDepth))`,
46
46
  borderRadius: theme.shape.borderRadius,
47
47
  width: '100%',
48
+ height: 'var(--TreeView-itemHeight, unset)',
48
49
  boxSizing: 'border-box',
49
50
  // prevent width + padding to overflow
50
51
  position: 'relative',
@@ -7,7 +7,7 @@ import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import resolveComponentProps from '@mui/utils/resolveComponentProps';
9
9
  import useSlotProps from '@mui/utils/useSlotProps';
10
- import { useTreeViewStyleContext } from "../internals/TreeViewProvider/TreeViewStyleContext.js";
10
+ import { useTreeViewStyleContext } from "../internals/TreeViewProvider/index.js";
11
11
  import { TreeViewCollapseIcon, TreeViewExpandIcon } from "../icons/index.js";
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  function pickIcon(treeItemIcon, treeViewIcon, fallback) {
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v8.27.1
2
+ * @mui/x-tree-view v9.0.0-alpha.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -36,12 +36,6 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
36
36
  [itemId: string]: number;
37
37
  };
38
38
  };
39
- /**
40
- * When equal to 'flat', the tree is rendered as a flat list (children are rendered as siblings of their parents).
41
- * When equal to 'nested', the tree is rendered with nested children (children are rendered inside the groupTransition slot of their children).
42
- * Nested DOM structure is not compatible with collapse / expansion animations.
43
- */
44
- domStructure: 'flat' | 'nested';
45
39
  /**
46
40
  * Horizontal indentation between an item and its children.
47
41
  * Examples: 24, "24px", "2rem", "2em".
@@ -87,6 +81,11 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
87
81
  * The id of the currently focused item.
88
82
  */
89
83
  focusedItemId: TreeViewItemId | null;
84
+ /**
85
+ * The default height of each item in the tree view.
86
+ * If not provided, no height restriction is applied to the tree item content element.
87
+ */
88
+ itemHeight: number | null;
90
89
  }
91
90
  export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> {
92
91
  /**
@@ -249,6 +248,11 @@ export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multi
249
248
  * @param {TreeViewItemId} itemId The id of the focused item.
250
249
  */
251
250
  onItemFocus?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void;
251
+ /**
252
+ * Sets the height in pixel of an item.
253
+ * If not provided, no height restriction is applied to the tree item content element.
254
+ */
255
+ itemHeight?: number;
252
256
  }
253
257
  /**
254
258
  * Mapper between a Tree View instance's state and parameters.
@@ -8,7 +8,6 @@ export declare function deriveStateFromParameters<R extends TreeViewValidItem<R>
8
8
  isItemEditable?: any;
9
9
  }): {
10
10
  disabledItemsFocusable: boolean;
11
- domStructure: "nested";
12
11
  itemChildrenIndentation: string | number;
13
12
  providedTreeId: string | undefined;
14
13
  expansionTrigger: "content" | "iconContainer";
@@ -16,6 +15,7 @@ export declare function deriveStateFromParameters<R extends TreeViewValidItem<R>
16
15
  multiSelect: boolean | NonNullable<Multiple>;
17
16
  checkboxSelection: boolean;
18
17
  selectionPropagation: Readonly<{}>;
18
+ itemHeight: number | null;
19
19
  };
20
20
  export declare function createMinimalInitialState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined>(parameters: MinimalTreeViewParameters<R, Multiple>): MinimalTreeViewState<R, Multiple>;
21
21
  export declare const createTreeViewDefaultId: () => string;
@@ -10,7 +10,6 @@ import { TreeViewItemsPlugin } from "../plugins/items/index.js";
10
10
  export function deriveStateFromParameters(parameters) {
11
11
  return {
12
12
  disabledItemsFocusable: parameters.disabledItemsFocusable ?? false,
13
- domStructure: 'nested',
14
13
  itemChildrenIndentation: parameters.itemChildrenIndentation ?? '12px',
15
14
  providedTreeId: parameters.id,
16
15
  // TODO: Fix
@@ -21,7 +20,8 @@ export function deriveStateFromParameters(parameters) {
21
20
  disableSelection: parameters.disableSelection ?? false,
22
21
  multiSelect: parameters.multiSelect ?? false,
23
22
  checkboxSelection: parameters.checkboxSelection ?? false,
24
- selectionPropagation: parameters.selectionPropagation ?? EMPTY_OBJECT
23
+ selectionPropagation: parameters.selectionPropagation ?? EMPTY_OBJECT,
24
+ itemHeight: parameters.itemHeight ?? null
25
25
  };
26
26
  }
27
27
  function applyModelInitialValue(controlledValue, defaultValue, fallback) {
@@ -1,4 +1,4 @@
1
- import { TreeViewItemId, TreeViewValidItem } from "../../models/index.js";
1
+ import { TreeViewDOMStructure, TreeViewItemId, TreeViewValidItem } from "../../models/index.js";
2
2
  import { MinimalTreeViewParameters, MinimalTreeViewState } from "../MinimalTreeViewStore/index.js";
3
3
  import { RichTreeViewLazyLoadedItemsStatus } from "../plugins/lazyLoading/index.js";
4
4
  export interface RichTreeViewState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> extends MinimalTreeViewState<R, Multiple> {
@@ -15,6 +15,12 @@ export interface RichTreeViewState<R extends TreeViewValidItem<R>, Multiple exte
15
15
  * Is null if lazy loading is not enabled.
16
16
  */
17
17
  lazyLoadedItems: RichTreeViewLazyLoadedItemsStatus | null;
18
+ /**
19
+ * When equal to 'flat', the tree is rendered as a flat list (children are rendered as siblings of their parents).
20
+ * When equal to 'nested', the tree is rendered with nested children (children are rendered inside the groupTransition slot of their children).
21
+ * Nested DOM structure is not compatible with collapse / expansion animations.
22
+ */
23
+ domStructure: TreeViewDOMStructure;
18
24
  }
19
25
  export interface RichTreeViewStoreParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> extends MinimalTreeViewParameters<R, Multiple> {
20
26
  /**
@@ -31,4 +37,11 @@ export interface RichTreeViewStoreParameters<R extends TreeViewValidItem<R>, Mul
31
37
  * @default () => false
32
38
  */
33
39
  isItemEditable?: boolean | ((item: R) => boolean);
40
+ /**
41
+ * When equal to 'flat', the tree is rendered as a flat list (children are rendered as siblings of their parents).
42
+ * When equal to 'nested', the tree is rendered with nested children (children are rendered inside the groupTransition slot of their children).
43
+ * Nested DOM structure is not compatible with collapse / expansion animations.
44
+ * @default 'nested'
45
+ */
46
+ domStructure?: TreeViewDOMStructure;
34
47
  }
@@ -5,7 +5,8 @@ const deriveStateFromParameters = parameters => ({
5
5
  export const parametersToStateMapper = {
6
6
  getInitialState: (minimalInitialState, parameters) => _extends({}, minimalInitialState, deriveStateFromParameters(parameters), {
7
7
  editedItemId: null,
8
- lazyLoadedItems: null
8
+ lazyLoadedItems: null,
9
+ domStructure: parameters.domStructure ?? 'nested'
9
10
  }),
10
11
  updateStateFromParameters: (newMinimalState, parameters) => {
11
12
  const newState = _extends({}, newMinimalState, deriveStateFromParameters(parameters));
@@ -1,3 +1,4 @@
1
1
  export { TreeViewProvider } from "./TreeViewProvider.js";
2
2
  export { useTreeViewContext } from "./TreeViewContext.js";
3
+ export { useTreeViewStyleContext } from "./TreeViewStyleContext.js";
3
4
  export type { TreeViewProviderProps, TreeViewContextValue, TreeViewItemPluginsRunner, TreeViewStoreInContext } from "./TreeViewProvider.types.js";
@@ -1,2 +1,3 @@
1
1
  export { TreeViewProvider } from "./TreeViewProvider.js";
2
- export { useTreeViewContext } from "./TreeViewContext.js";
2
+ export { useTreeViewContext } from "./TreeViewContext.js";
3
+ export { useTreeViewStyleContext } from "./TreeViewStyleContext.js";
@@ -2,31 +2,55 @@ 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): import("react/jsx-runtime").JSX.Element;
5
+ export declare const RichTreeViewItem: React.NamedExoticComponent<RichTreeViewItemProps>;
6
+ export declare function RichTreeViewItems<TProps extends object>(props: RichTreeViewItemsProps<TProps>): import("react/jsx-runtime").JSX.Element;
6
7
  interface RichTreeViewItemsOwnerState {
7
8
  itemId: TreeViewItemId;
8
9
  label: string;
9
10
  }
10
11
  export interface RichTreeViewItemsSlots {
12
+ /**
13
+ * Element rendered at the root.
14
+ * @default RichTreeViewProRoot
15
+ */
16
+ root: React.ElementType;
11
17
  /**
12
18
  * Custom component to render a Tree Item.
13
19
  * @default TreeItem.
14
20
  */
15
21
  item?: React.JSXElementConstructor<TreeItemProps>;
16
22
  }
17
- export interface RichTreeViewItemsSlotProps {
23
+ export interface RichTreeViewItemsSlotProps<TProps extends object> {
18
24
  item?: SlotComponentProps<typeof TreeItem, {}, RichTreeViewItemsOwnerState>;
25
+ root?: SlotComponentProps<'ul', {}, TProps>;
19
26
  }
20
- export interface RichTreeViewItemsProps {
27
+ export interface RichTreeViewItemsProps<TProps extends object> {
21
28
  /**
22
29
  * Overridable component slots.
23
30
  * @default {}
24
31
  */
25
- slots?: RichTreeViewItemsSlots;
32
+ slots: RichTreeViewItemsSlots;
26
33
  /**
27
34
  * The props used for each component slot.
28
35
  * @default {}
29
36
  */
30
- slotProps?: RichTreeViewItemsSlotProps;
37
+ slotProps?: RichTreeViewItemsSlotProps<TProps>;
38
+ /**
39
+ * Owner state applied to the root slot component.
40
+ */
41
+ ownerState: TProps;
42
+ /**
43
+ * Props provided to the component and applied to the root element.
44
+ */
45
+ forwardedProps: React.HTMLAttributes<HTMLUListElement>;
46
+ /**
47
+ * Ref forwarded to the root element.
48
+ */
49
+ rootRef: React.Ref<HTMLUListElement>;
50
+ }
51
+ interface RichTreeViewItemProps extends Pick<TreeItemProps, 'id' | 'itemId' | 'children'> {
52
+ itemSlot: React.JSXElementConstructor<TreeItemProps> | undefined;
53
+ itemSlotProps: SlotComponentProps<typeof TreeItem, {}, RichTreeViewItemsOwnerState> | undefined;
54
+ skipChildren: boolean;
31
55
  }
32
56
  export {};
@@ -10,14 +10,15 @@ import useSlotProps from '@mui/utils/useSlotProps';
10
10
  import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';
11
11
  import { TreeItem } from "../../TreeItem/index.js";
12
12
  import { itemsSelectors } from "../plugins/items/index.js";
13
- import { useTreeViewContext } from "../TreeViewProvider/index.js";
13
+ import { useTreeViewContext, useTreeViewStyleContext } from "../TreeViewProvider/index.js";
14
14
  import { expansionSelectors } from "../plugins/expansion/index.js";
15
+ import { useTreeViewRootProps } from "../hooks/useTreeViewRootProps.js";
15
16
  import { jsx as _jsx } from "react/jsx-runtime";
16
17
  const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null);
17
18
  if (process.env.NODE_ENV !== "production") RichTreeViewItemsContext.displayName = "RichTreeViewItemsContext";
18
19
  const selectorNoChildren = () => EMPTY_ARRAY;
19
20
  const selectorChildrenIdsNull = state => itemsSelectors.itemOrderedChildrenIds(state, null);
20
- const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
21
+ export const RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewItem({
21
22
  itemSlot,
22
23
  itemSlotProps,
23
24
  itemId,
@@ -45,25 +46,40 @@ const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({
45
46
  }),
46
47
  itemProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded);
47
48
  return /*#__PURE__*/_jsx(Item, _extends({}, itemProps, {
48
- children: children?.map(renderItemForRichTreeView)
49
+ children: renderItemForRichTreeView ? children?.map(renderItemForRichTreeView) : null
49
50
  }));
50
51
  }, fastObjectShallowCompare);
51
- if (process.env.NODE_ENV !== "production") WrappedTreeItem.displayName = "WrappedTreeItem";
52
+ if (process.env.NODE_ENV !== "production") RichTreeViewItem.displayName = "RichTreeViewItem";
52
53
  export function RichTreeViewItems(props) {
53
54
  const {
54
55
  slots,
55
- slotProps
56
+ slotProps,
57
+ ownerState,
58
+ forwardedProps,
59
+ rootRef
56
60
  } = props;
57
61
  const {
58
62
  store
59
63
  } = useTreeViewContext();
64
+ const {
65
+ classes
66
+ } = useTreeViewStyleContext();
60
67
  const itemSlot = slots?.item;
61
68
  const itemSlotProps = slotProps?.item;
62
69
  const domStructure = useStore(store, itemsSelectors.domStructure);
63
70
  const items = useStore(store, domStructure === 'flat' ? expansionSelectors.flatList : selectorChildrenIdsNull);
71
+ const getRootProps = useTreeViewRootProps(store, forwardedProps, rootRef);
72
+ const Root = slots.root;
73
+ const rootProps = useSlotProps({
74
+ elementType: Root,
75
+ externalSlotProps: slotProps?.root,
76
+ className: classes.root,
77
+ getSlotProps: getRootProps,
78
+ ownerState
79
+ });
64
80
  const skipChildren = domStructure === 'flat';
65
81
  const renderItem = React.useCallback(itemId => {
66
- return /*#__PURE__*/_jsx(WrappedTreeItem, {
82
+ return /*#__PURE__*/_jsx(RichTreeViewItem, {
67
83
  itemSlot: itemSlot,
68
84
  itemSlotProps: itemSlotProps,
69
85
  itemId: itemId,
@@ -72,6 +88,8 @@ export function RichTreeViewItems(props) {
72
88
  }, [itemSlot, itemSlotProps, skipChildren]);
73
89
  return /*#__PURE__*/_jsx(RichTreeViewItemsContext.Provider, {
74
90
  value: renderItem,
75
- children: items.map(renderItem)
91
+ children: /*#__PURE__*/_jsx(Root, _extends({}, rootProps, {
92
+ children: items.map(renderItem)
93
+ }))
76
94
  });
77
95
  }
@@ -2,7 +2,8 @@ import * as React from 'react';
2
2
  import { EventHandlers } from '@mui/utils/types';
3
3
  import { TreeViewCancellableEvent } from "../../models/index.js";
4
4
  import { TreeViewAnyStore } from "../models/index.js";
5
- export declare function useTreeViewRootProps<TStore extends TreeViewAnyStore>(store: TStore, forwardedProps: React.HTMLAttributes<HTMLUListElement>, ref: React.Ref<HTMLUListElement | null> | undefined): (otherHandlers: EventHandlers) => {
5
+ import { TreeViewStoreInContext } from "../TreeViewProvider/index.js";
6
+ export declare function useTreeViewRootProps<TStore extends TreeViewAnyStore>(store: TreeViewStoreInContext<TStore>, forwardedProps: React.HTMLAttributes<HTMLUListElement>, ref: React.Ref<HTMLUListElement | null> | undefined): (otherHandlers: EventHandlers) => {
6
7
  style: React.CSSProperties;
7
8
  onFocus: (event: React.FocusEvent<HTMLUListElement> & TreeViewCancellableEvent) => void;
8
9
  onBlur: (event: React.FocusEvent<HTMLUListElement> & TreeViewCancellableEvent) => void;
@@ -1,6 +1,6 @@
1
- export { TreeViewProvider, useTreeViewContext } from "./TreeViewProvider/index.js";
2
- export { RichTreeViewItems } from "./components/RichTreeViewItems.js";
3
- export type { RichTreeViewItemsSlots, RichTreeViewItemsSlotProps } from "./components/RichTreeViewItems.js";
1
+ export { TreeViewProvider, useTreeViewContext, useTreeViewStyleContext } from "./TreeViewProvider/index.js";
2
+ export { RichTreeViewItems, RichTreeViewItem } from "./components/RichTreeViewItems.js";
3
+ export type { RichTreeViewItemsProps, RichTreeViewItemsSlots, RichTreeViewItemsSlotProps } from "./components/RichTreeViewItems.js";
4
4
  export { useTreeViewRootProps } from "./hooks/useTreeViewRootProps.js";
5
5
  export { useTreeViewStore } from "./hooks/useTreeViewStore.js";
6
6
  export type { UseTreeViewStoreParameters } from "./hooks/useTreeViewStore.js";
@@ -1,5 +1,5 @@
1
- export { TreeViewProvider, useTreeViewContext } from "./TreeViewProvider/index.js";
2
- export { RichTreeViewItems } from "./components/RichTreeViewItems.js";
1
+ export { TreeViewProvider, useTreeViewContext, useTreeViewStyleContext } from "./TreeViewProvider/index.js";
2
+ export { RichTreeViewItems, RichTreeViewItem } from "./components/RichTreeViewItems.js";
3
3
  export { useTreeViewRootProps } from "./hooks/useTreeViewRootProps.js";
4
4
  export { useTreeViewStore } from "./hooks/useTreeViewStore.js";
5
5
  // Plugins
@@ -1,10 +1,11 @@
1
1
  import { TreeViewItemMeta } from "../../models/index.js";
2
2
  import { MinimalTreeViewState } from "../../MinimalTreeViewStore/index.js";
3
+ import { RichTreeViewState } from "../../RichTreeViewStore/index.js";
3
4
  export declare const itemsSelectors: {
4
5
  /**
5
6
  * Gets the DOM structure of the Tree View.
6
7
  */
7
- domStructure: (state: MinimalTreeViewState<any, any>) => "flat" | "nested";
8
+ domStructure: (state: RichTreeViewState<any, any>) => import("../../../index.js").TreeViewDOMStructure;
8
9
  /**
9
10
  * Checks whether the disabled items are focusable.
10
11
  */
@@ -57,4 +58,8 @@ export declare const itemsSelectors: {
57
58
  * Gets the identation between an item and its children.
58
59
  */
59
60
  itemChildrenIndentation: (state: MinimalTreeViewState<any, any>) => string | number;
61
+ /**
62
+ * Gets the height of an individual item.
63
+ */
64
+ itemHeight: (state: MinimalTreeViewState<any, any>) => number | null;
60
65
  };
@@ -60,5 +60,9 @@ export const itemsSelectors = {
60
60
  /**
61
61
  * Gets the identation between an item and its children.
62
62
  */
63
- itemChildrenIndentation: createSelector(state => state.itemChildrenIndentation)
63
+ itemChildrenIndentation: createSelector(state => state.itemChildrenIndentation),
64
+ /**
65
+ * Gets the height of an individual item.
66
+ */
67
+ itemHeight: createSelector(state => state.itemHeight)
64
68
  };
@@ -0,0 +1 @@
1
+ export type TreeViewDOMStructure = 'flat' | 'nested';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
1
  export * from "./items.js";
2
2
  export * from "./events.js";
3
+ export * from "./domStructure.js";
3
4
  export type { PropsFromSlot } from '@mui/x-internals/slots';
@@ -1,5 +1,6 @@
1
1
  export * from "./items.js";
2
2
  export * from "./events.js";
3
+ export * from "./domStructure.js";
3
4
 
4
5
  // Utils shared across the X packages
5
6
  export {};
@@ -58,6 +58,7 @@ export const useTreeItem = parameters => {
58
58
  const isCheckboxSelectionEnabled = useStore(store, selectionSelectors.isCheckboxSelectionEnabled);
59
59
  const idAttribute = useStore(store, idSelectors.treeItemIdAttribute, itemId, id);
60
60
  const shouldBeAccessibleWithTab = useStore(store, focusSelectors.isItemTheDefaultFocusableItem, itemId);
61
+ const itemHeight = useStore(store, itemsSelectors.itemHeight);
61
62
  const sharedPropsEnhancerParams = {
62
63
  rootRefObject,
63
64
  contentRefObject,
@@ -153,6 +154,8 @@ export const useTreeItem = parameters => {
153
154
  }, externalProps, {
154
155
  style: _extends({}, externalProps.style ?? {}, {
155
156
  '--TreeView-itemDepth': depth
157
+ }, itemHeight == null ? {} : {
158
+ '--TreeView-itemHeight': `${itemHeight}px`
156
159
  }),
157
160
  onFocus: createRootHandleFocus(externalEventHandlers),
158
161
  onBlur: createRootHandleBlur(externalEventHandlers),
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v8.27.1
2
+ * @mui/x-tree-view v9.0.0-alpha.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -36,12 +36,6 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
36
36
  [itemId: string]: number;
37
37
  };
38
38
  };
39
- /**
40
- * When equal to 'flat', the tree is rendered as a flat list (children are rendered as siblings of their parents).
41
- * When equal to 'nested', the tree is rendered with nested children (children are rendered inside the groupTransition slot of their children).
42
- * Nested DOM structure is not compatible with collapse / expansion animations.
43
- */
44
- domStructure: 'flat' | 'nested';
45
39
  /**
46
40
  * Horizontal indentation between an item and its children.
47
41
  * Examples: 24, "24px", "2rem", "2em".
@@ -87,6 +81,11 @@ export interface MinimalTreeViewState<R extends TreeViewValidItem<R>, Multiple e
87
81
  * The id of the currently focused item.
88
82
  */
89
83
  focusedItemId: TreeViewItemId | null;
84
+ /**
85
+ * The default height of each item in the tree view.
86
+ * If not provided, no height restriction is applied to the tree item content element.
87
+ */
88
+ itemHeight: number | null;
90
89
  }
91
90
  export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> {
92
91
  /**
@@ -249,6 +248,11 @@ export interface MinimalTreeViewParameters<R extends TreeViewValidItem<R>, Multi
249
248
  * @param {TreeViewItemId} itemId The id of the focused item.
250
249
  */
251
250
  onItemFocus?: (event: React.SyntheticEvent | null, itemId: TreeViewItemId) => void;
251
+ /**
252
+ * Sets the height in pixel of an item.
253
+ * If not provided, no height restriction is applied to the tree item content element.
254
+ */
255
+ itemHeight?: number;
252
256
  }
253
257
  /**
254
258
  * Mapper between a Tree View instance's state and parameters.