@mui/x-tree-view 7.0.0-beta.6 → 7.0.0-beta.7

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 (129) hide show
  1. package/CHANGELOG.md +117 -1
  2. package/RichTreeView/RichTreeView.js +22 -22
  3. package/RichTreeView/RichTreeView.types.d.ts +2 -1
  4. package/SimpleTreeView/SimpleTreeView.js +22 -22
  5. package/TreeItem/TreeItem.js +57 -53
  6. package/TreeItem/TreeItem.types.d.ts +10 -8
  7. package/TreeItem/useTreeItemState.js +2 -2
  8. package/TreeItem2/TreeItem2.d.ts +18 -0
  9. package/TreeItem2/TreeItem2.js +301 -0
  10. package/TreeItem2/TreeItem2.types.d.ts +64 -0
  11. package/TreeItem2/TreeItem2.types.js +1 -0
  12. package/TreeItem2/index.d.ts +2 -0
  13. package/TreeItem2/index.js +1 -0
  14. package/TreeItem2/package.json +6 -0
  15. package/TreeItem2Icon/TreeItem2Icon.d.ts +7 -0
  16. package/TreeItem2Icon/TreeItem2Icon.js +68 -0
  17. package/TreeItem2Icon/TreeItem2Icon.types.d.ts +40 -0
  18. package/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  19. package/TreeItem2Icon/index.d.ts +2 -0
  20. package/TreeItem2Icon/index.js +1 -0
  21. package/TreeItem2Icon/package.json +6 -0
  22. package/TreeItem2Provider/TreeItem2Provider.d.ts +7 -0
  23. package/TreeItem2Provider/TreeItem2Provider.js +24 -0
  24. package/TreeItem2Provider/TreeItem2Provider.types.d.ts +6 -0
  25. package/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  26. package/TreeItem2Provider/index.d.ts +2 -0
  27. package/TreeItem2Provider/index.js +1 -0
  28. package/TreeItem2Provider/package.json +6 -0
  29. package/TreeView/TreeView.js +22 -22
  30. package/hooks/index.d.ts +1 -0
  31. package/hooks/index.js +2 -1
  32. package/hooks/useTreeItem2Utils/index.d.ts +1 -0
  33. package/hooks/useTreeItem2Utils/index.js +1 -0
  34. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +15 -0
  35. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  36. package/index.d.ts +5 -1
  37. package/index.js +9 -2
  38. package/internals/TreeViewProvider/TreeViewContext.d.ts +3 -1
  39. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +4 -2
  40. package/internals/hooks/useLazyRef.d.ts +1 -2
  41. package/internals/hooks/useLazyRef.js +1 -11
  42. package/internals/hooks/useOnMount.d.ts +1 -2
  43. package/internals/hooks/useOnMount.js +1 -7
  44. package/internals/hooks/useTimeout.d.ts +1 -11
  45. package/internals/hooks/useTimeout.js +1 -36
  46. package/internals/models/plugin.d.ts +19 -16
  47. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +25 -25
  48. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +11 -11
  49. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  50. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +5 -5
  51. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +17 -17
  52. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  53. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  54. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  55. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +11 -11
  56. package/internals/useTreeView/useTreeView.js +27 -25
  57. package/modern/RichTreeView/RichTreeView.js +22 -22
  58. package/modern/SimpleTreeView/SimpleTreeView.js +22 -22
  59. package/modern/TreeItem/TreeItem.js +57 -53
  60. package/modern/TreeItem/useTreeItemState.js +2 -2
  61. package/modern/TreeItem2/TreeItem2.js +300 -0
  62. package/modern/TreeItem2/TreeItem2.types.js +1 -0
  63. package/modern/TreeItem2/index.js +1 -0
  64. package/modern/TreeItem2Icon/TreeItem2Icon.js +67 -0
  65. package/modern/TreeItem2Icon/TreeItem2Icon.types.js +1 -0
  66. package/modern/TreeItem2Icon/index.js +1 -0
  67. package/modern/TreeItem2Provider/TreeItem2Provider.js +24 -0
  68. package/modern/TreeItem2Provider/TreeItem2Provider.types.js +1 -0
  69. package/modern/TreeItem2Provider/index.js +1 -0
  70. package/modern/TreeView/TreeView.js +22 -22
  71. package/modern/hooks/index.js +2 -1
  72. package/modern/hooks/useTreeItem2Utils/index.js +1 -0
  73. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +61 -0
  74. package/modern/index.js +9 -2
  75. package/modern/internals/hooks/useLazyRef.js +1 -11
  76. package/modern/internals/hooks/useOnMount.js +1 -7
  77. package/modern/internals/hooks/useTimeout.js +1 -36
  78. package/modern/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  79. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  80. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  81. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  82. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  83. package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  84. package/modern/internals/useTreeView/useTreeView.js +27 -25
  85. package/modern/useTreeItem2/index.js +1 -0
  86. package/modern/useTreeItem2/useTreeItem2.js +135 -0
  87. package/modern/useTreeItem2/useTreeItem2.types.js +1 -0
  88. package/node/RichTreeView/RichTreeView.js +22 -22
  89. package/node/SimpleTreeView/SimpleTreeView.js +22 -22
  90. package/node/TreeItem/TreeItem.js +57 -53
  91. package/node/TreeItem/useTreeItemState.js +2 -2
  92. package/node/TreeItem2/TreeItem2.js +308 -0
  93. package/node/TreeItem2/TreeItem2.types.js +5 -0
  94. package/node/TreeItem2/index.js +42 -0
  95. package/node/TreeItem2Icon/TreeItem2Icon.js +75 -0
  96. package/node/TreeItem2Icon/TreeItem2Icon.types.js +5 -0
  97. package/node/TreeItem2Icon/index.js +12 -0
  98. package/node/TreeItem2Provider/TreeItem2Provider.js +30 -0
  99. package/node/TreeItem2Provider/TreeItem2Provider.types.js +5 -0
  100. package/node/TreeItem2Provider/index.js +12 -0
  101. package/node/TreeView/TreeView.js +22 -22
  102. package/node/hooks/index.js +8 -1
  103. package/node/hooks/useTreeItem2Utils/index.js +12 -0
  104. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +68 -0
  105. package/node/index.js +61 -13
  106. package/node/internals/hooks/useLazyRef.js +7 -13
  107. package/node/internals/hooks/useOnMount.js +8 -10
  108. package/node/internals/hooks/useTimeout.js +7 -37
  109. package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +24 -24
  110. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +12 -12
  111. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +16 -16
  112. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +11 -9
  113. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +2 -2
  114. package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +34 -34
  115. package/node/internals/useTreeView/useTreeView.js +27 -25
  116. package/node/useTreeItem2/index.js +12 -0
  117. package/node/useTreeItem2/useTreeItem2.js +143 -0
  118. package/node/useTreeItem2/useTreeItem2.types.js +5 -0
  119. package/package.json +1 -1
  120. package/themeAugmentation/components.d.ts +5 -0
  121. package/themeAugmentation/overrides.d.ts +1 -0
  122. package/themeAugmentation/props.d.ts +2 -0
  123. package/useTreeItem2/index.d.ts +2 -0
  124. package/useTreeItem2/index.js +1 -0
  125. package/useTreeItem2/package.json +6 -0
  126. package/useTreeItem2/useTreeItem2.d.ts +2 -0
  127. package/useTreeItem2/useTreeItem2.js +138 -0
  128. package/useTreeItem2/useTreeItem2.types.d.ts +113 -0
  129. package/useTreeItem2/useTreeItem2.types.js +1 -0
@@ -0,0 +1,138 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { extractEventHandlers } from '@mui/base/utils';
3
+ import useForkRef from '@mui/utils/useForkRef';
4
+ import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
5
+ import { useTreeItem2Utils } from '../hooks/useTreeItem2Utils';
6
+ export const useTreeItem2 = parameters => {
7
+ const {
8
+ runItemPlugins,
9
+ selection: {
10
+ multiSelect
11
+ },
12
+ disabledItemsFocusable,
13
+ instance,
14
+ publicAPI
15
+ } = useTreeViewContext();
16
+ const {
17
+ id,
18
+ nodeId,
19
+ label,
20
+ children,
21
+ rootRef
22
+ } = parameters;
23
+ const {
24
+ rootRef: pluginRootRef,
25
+ contentRef
26
+ } = runItemPlugins(parameters);
27
+ const {
28
+ interactions,
29
+ status
30
+ } = useTreeItem2Utils({
31
+ nodeId,
32
+ children
33
+ });
34
+ const idAttribute = instance.getTreeItemId(nodeId, id);
35
+ const handleRootRef = useForkRef(rootRef, pluginRootRef);
36
+ const createRootHandleFocus = otherHandlers => event => {
37
+ var _otherHandlers$onFocu;
38
+ (_otherHandlers$onFocu = otherHandlers.onFocus) == null || _otherHandlers$onFocu.call(otherHandlers, event);
39
+ if (event.defaultMuiPrevented) {
40
+ return;
41
+ }
42
+
43
+ // DOM focus stays on the tree which manages focus with aria-activedescendant
44
+ if (event.target === event.currentTarget) {
45
+ instance.focusRoot();
46
+ }
47
+ const canBeFocused = !status.disabled || disabledItemsFocusable;
48
+ if (!status.focused && canBeFocused && event.currentTarget === event.target) {
49
+ instance.focusItem(event, nodeId);
50
+ }
51
+ };
52
+ const createContentHandleClick = otherHandlers => event => {
53
+ var _otherHandlers$onClic;
54
+ (_otherHandlers$onClic = otherHandlers.onClick) == null || _otherHandlers$onClic.call(otherHandlers, event);
55
+ if (event.defaultMuiPrevented) {
56
+ return;
57
+ }
58
+ interactions.handleExpansion(event);
59
+ interactions.handleSelection(event);
60
+ };
61
+ const createContentHandleMouseDown = otherHandlers => event => {
62
+ var _otherHandlers$onMous;
63
+ (_otherHandlers$onMous = otherHandlers.onMouseDown) == null || _otherHandlers$onMous.call(otherHandlers, event);
64
+ if (event.defaultMuiPrevented) {
65
+ return;
66
+ }
67
+
68
+ // Prevent text selection
69
+ if (event.shiftKey || event.ctrlKey || event.metaKey || status.disabled) {
70
+ event.preventDefault();
71
+ }
72
+ };
73
+ const getRootProps = (externalProps = {}) => {
74
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
75
+ let ariaSelected;
76
+ if (multiSelect) {
77
+ ariaSelected = status.selected;
78
+ } else if (status.selected) {
79
+ /* single-selection trees unset aria-selected on un-selected items.
80
+ *
81
+ * If the tree does not support multiple selection, aria-selected
82
+ * is set to true for the selected node and it is not present on any other node in the tree.
83
+ * Source: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/
84
+ */
85
+ ariaSelected = true;
86
+ }
87
+ return _extends({}, externalEventHandlers, {
88
+ ref: handleRootRef,
89
+ role: 'treeitem',
90
+ tabIndex: -1,
91
+ id: idAttribute,
92
+ 'aria-expanded': status.expandable ? status.expanded : undefined,
93
+ 'aria-selected': ariaSelected,
94
+ 'aria-disabled': status.disabled || undefined
95
+ }, externalProps, {
96
+ onFocus: createRootHandleFocus(externalEventHandlers)
97
+ });
98
+ };
99
+ const getContentProps = (externalProps = {}) => {
100
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
101
+ return _extends({}, externalEventHandlers, externalProps, {
102
+ ref: contentRef,
103
+ onClick: createContentHandleClick(externalEventHandlers),
104
+ onMouseDown: createContentHandleMouseDown(externalEventHandlers),
105
+ status
106
+ });
107
+ };
108
+ const getLabelProps = (externalProps = {}) => {
109
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
110
+ return _extends({}, externalEventHandlers, {
111
+ children: label
112
+ }, externalProps);
113
+ };
114
+ const getIconContainerProps = (externalProps = {}) => {
115
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
116
+ return _extends({}, externalEventHandlers, externalProps);
117
+ };
118
+ const getGroupTransitionProps = (externalProps = {}) => {
119
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
120
+ return _extends({}, externalEventHandlers, {
121
+ unmountOnExit: true,
122
+ component: 'ul',
123
+ role: 'group',
124
+ in: status.expanded,
125
+ children
126
+ }, externalProps);
127
+ };
128
+ return {
129
+ getRootProps,
130
+ getContentProps,
131
+ getGroupTransitionProps,
132
+ getIconContainerProps,
133
+ getLabelProps,
134
+ rootRef: handleRootRef,
135
+ status,
136
+ publicAPI
137
+ };
138
+ };
@@ -0,0 +1,113 @@
1
+ import * as React from 'react';
2
+ import { TreeViewItemId } from '../models';
3
+ import { MuiCancellableEventHandler } from '../internals/models/MuiCancellableEvent';
4
+ import { TreeViewAnyPluginSignature, TreeViewPublicAPI } from '../internals/models';
5
+ export interface UseTreeItem2Parameters {
6
+ /**
7
+ * The id attribute of the node. If not provided, it will be generated.
8
+ */
9
+ id?: string;
10
+ /**
11
+ * If `true`, the node is disabled.
12
+ * @default false
13
+ */
14
+ disabled?: boolean;
15
+ /**
16
+ * The id of the node.
17
+ * Must be unique.
18
+ */
19
+ nodeId: TreeViewItemId;
20
+ /**
21
+ * The label of the node.
22
+ */
23
+ label?: React.ReactNode;
24
+ rootRef?: React.Ref<HTMLLIElement>;
25
+ /**
26
+ * The content of the component.
27
+ */
28
+ children?: React.ReactNode;
29
+ }
30
+ export interface UseTreeItem2RootSlotOwnProps {
31
+ role: 'treeitem';
32
+ tabIndex: -1;
33
+ id: string;
34
+ 'aria-expanded': React.AriaAttributes['aria-expanded'];
35
+ 'aria-selected': React.AriaAttributes['aria-selected'];
36
+ 'aria-disabled': React.AriaAttributes['aria-disabled'];
37
+ onFocus: MuiCancellableEventHandler<React.FocusEvent>;
38
+ ref: React.RefCallback<HTMLLIElement>;
39
+ }
40
+ export type UseTreeItem2RootSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2RootSlotOwnProps;
41
+ export interface UseTreeItem2ContentSlotOwnProps {
42
+ onClick: MuiCancellableEventHandler<React.MouseEvent>;
43
+ onMouseDown: MuiCancellableEventHandler<React.MouseEvent>;
44
+ ref: React.RefCallback<HTMLDivElement> | null;
45
+ status: UseTreeItem2Status;
46
+ }
47
+ export type UseTreeItem2ContentSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2ContentSlotOwnProps;
48
+ export interface UseTreeItem2IconContainerSlotOwnProps {
49
+ }
50
+ export type UseTreeItemIconContainerSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2IconContainerSlotOwnProps;
51
+ export interface UseTreeItem2LabelSlotOwnProps {
52
+ children: React.ReactNode;
53
+ }
54
+ export type UseTreeItem2LabelSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2LabelSlotOwnProps;
55
+ export interface UseTreeItem2GroupTransitionSlotOwnProps {
56
+ unmountOnExit: boolean;
57
+ in: boolean;
58
+ component: 'ul';
59
+ role: 'group';
60
+ children: React.ReactNode;
61
+ }
62
+ export type UseTreeItem2GroupTransitionSlotProps<ExternalProps = {}> = ExternalProps & UseTreeItem2GroupTransitionSlotOwnProps;
63
+ export interface UseTreeItem2Status {
64
+ expandable: boolean;
65
+ expanded: boolean;
66
+ focused: boolean;
67
+ selected: boolean;
68
+ disabled: boolean;
69
+ }
70
+ export interface UseTreeItem2ReturnValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
71
+ /**
72
+ * Resolver for the root slot's props.
73
+ * @param {ExternalProps} externalProps Additional props for the root slot
74
+ * @returns {UseTreeItem2RootSlotProps<ExternalProps>} Props that should be spread on the root slot
75
+ */
76
+ getRootProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2RootSlotProps<ExternalProps>;
77
+ /**
78
+ * Resolver for the content slot's props.
79
+ * @param {ExternalProps} externalProps Additional props for the content slot
80
+ * @returns {UseTreeItem2ContentSlotProps<ExternalProps>} Props that should be spread on the content slot
81
+ */
82
+ getContentProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2ContentSlotProps<ExternalProps>;
83
+ /**
84
+ * Resolver for the label slot's props.
85
+ * @param {ExternalProps} externalProps Additional props for the label slot
86
+ * @returns {UseTreeItem2LabelSlotProps<ExternalProps>} Props that should be spread on the label slot
87
+ */
88
+ getLabelProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2LabelSlotProps<ExternalProps>;
89
+ /**
90
+ * Resolver for the iconContainer slot's props.
91
+ * @param {ExternalProps} externalProps Additional props for the iconContainer slot
92
+ * @returns {UseTreeItemIconContainerSlotProps<ExternalProps>} Props that should be spread on the iconContainer slot
93
+ */
94
+ getIconContainerProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItemIconContainerSlotProps<ExternalProps>;
95
+ /**
96
+ * Resolver for the GroupTransition slot's props.
97
+ * @param {ExternalProps} externalProps Additional props for the GroupTransition slot
98
+ * @returns {UseTreeItem2GroupTransitionSlotProps<ExternalProps>} Props that should be spread on the GroupTransition slot
99
+ */
100
+ getGroupTransitionProps: <ExternalProps extends Record<string, any> = {}>(externalProps?: ExternalProps) => UseTreeItem2GroupTransitionSlotProps<ExternalProps>;
101
+ /**
102
+ * A ref to the component's root DOM element.
103
+ */
104
+ rootRef: React.RefCallback<HTMLLIElement> | null;
105
+ /**
106
+ * Current status of the item.
107
+ */
108
+ status: UseTreeItem2Status;
109
+ /**
110
+ * The object the allows Tree View manipulation.
111
+ */
112
+ publicAPI: TreeViewPublicAPI<TPlugins>;
113
+ }
@@ -0,0 +1 @@
1
+ export {};