@mui/x-tree-view 6.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 (76) hide show
  1. package/CHANGELOG.md +3682 -0
  2. package/LICENSE +21 -0
  3. package/README.md +34 -0
  4. package/TreeItem/TreeItem.d.ts +13 -0
  5. package/TreeItem/TreeItem.js +392 -0
  6. package/TreeItem/TreeItem.types.d.ts +84 -0
  7. package/TreeItem/TreeItem.types.js +1 -0
  8. package/TreeItem/TreeItemContent.d.ts +52 -0
  9. package/TreeItem/TreeItemContent.js +101 -0
  10. package/TreeItem/index.d.ts +5 -0
  11. package/TreeItem/index.js +4 -0
  12. package/TreeItem/package.json +6 -0
  13. package/TreeItem/treeItemClasses.d.ts +23 -0
  14. package/TreeItem/treeItemClasses.js +6 -0
  15. package/TreeItem/useTreeItem.d.ts +10 -0
  16. package/TreeItem/useTreeItem.js +68 -0
  17. package/TreeView/TreeView.d.ts +14 -0
  18. package/TreeView/TreeView.js +854 -0
  19. package/TreeView/TreeView.types.d.ts +170 -0
  20. package/TreeView/TreeView.types.js +1 -0
  21. package/TreeView/TreeViewContext.d.ts +6 -0
  22. package/TreeView/TreeViewContext.js +31 -0
  23. package/TreeView/descendants.d.ts +42 -0
  24. package/TreeView/descendants.js +186 -0
  25. package/TreeView/index.d.ts +3 -0
  26. package/TreeView/index.js +3 -0
  27. package/TreeView/package.json +6 -0
  28. package/TreeView/treeViewClasses.d.ts +7 -0
  29. package/TreeView/treeViewClasses.js +6 -0
  30. package/index.d.ts +2 -0
  31. package/index.js +9 -0
  32. package/internals/models.d.ts +1 -0
  33. package/internals/models.js +1 -0
  34. package/legacy/TreeItem/TreeItem.js +391 -0
  35. package/legacy/TreeItem/TreeItem.types.js +1 -0
  36. package/legacy/TreeItem/TreeItemContent.js +98 -0
  37. package/legacy/TreeItem/index.js +4 -0
  38. package/legacy/TreeItem/treeItemClasses.js +6 -0
  39. package/legacy/TreeItem/useTreeItem.js +67 -0
  40. package/legacy/TreeView/TreeView.js +907 -0
  41. package/legacy/TreeView/TreeView.types.js +1 -0
  42. package/legacy/TreeView/TreeViewContext.js +41 -0
  43. package/legacy/TreeView/descendants.js +199 -0
  44. package/legacy/TreeView/index.js +3 -0
  45. package/legacy/TreeView/treeViewClasses.js +6 -0
  46. package/legacy/index.js +9 -0
  47. package/legacy/internals/models.js +1 -0
  48. package/modern/TreeItem/TreeItem.js +391 -0
  49. package/modern/TreeItem/TreeItem.types.js +1 -0
  50. package/modern/TreeItem/TreeItemContent.js +101 -0
  51. package/modern/TreeItem/index.js +4 -0
  52. package/modern/TreeItem/treeItemClasses.js +6 -0
  53. package/modern/TreeItem/useTreeItem.js +68 -0
  54. package/modern/TreeView/TreeView.js +853 -0
  55. package/modern/TreeView/TreeView.types.js +1 -0
  56. package/modern/TreeView/TreeViewContext.js +31 -0
  57. package/modern/TreeView/descendants.js +186 -0
  58. package/modern/TreeView/index.js +3 -0
  59. package/modern/TreeView/treeViewClasses.js +6 -0
  60. package/modern/index.js +9 -0
  61. package/modern/internals/models.js +1 -0
  62. package/node/TreeItem/TreeItem.js +400 -0
  63. package/node/TreeItem/TreeItem.types.js +5 -0
  64. package/node/TreeItem/TreeItemContent.js +109 -0
  65. package/node/TreeItem/index.js +38 -0
  66. package/node/TreeItem/treeItemClasses.js +15 -0
  67. package/node/TreeItem/useTreeItem.js +76 -0
  68. package/node/TreeView/TreeView.js +862 -0
  69. package/node/TreeView/TreeView.types.js +5 -0
  70. package/node/TreeView/TreeViewContext.js +40 -0
  71. package/node/TreeView/descendants.js +194 -0
  72. package/node/TreeView/index.js +27 -0
  73. package/node/TreeView/treeViewClasses.js +15 -0
  74. package/node/index.js +34 -0
  75. package/node/internals/models.js +5 -0
  76. package/package.json +59 -0
@@ -0,0 +1,101 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["classes", "className", "displayIcon", "expansionIcon", "icon", "label", "nodeId", "onClick", "onMouseDown"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import clsx from 'clsx';
7
+ import { useTreeItem } from './useTreeItem';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsxs as _jsxs } from "react/jsx-runtime";
10
+ /**
11
+ * @ignore - internal component.
12
+ */
13
+ const TreeItemContent = /*#__PURE__*/React.forwardRef(function TreeItemContent(props, ref) {
14
+ const {
15
+ classes,
16
+ className,
17
+ displayIcon,
18
+ expansionIcon,
19
+ icon: iconProp,
20
+ label,
21
+ nodeId,
22
+ onClick,
23
+ onMouseDown
24
+ } = props,
25
+ other = _objectWithoutPropertiesLoose(props, _excluded);
26
+ const {
27
+ disabled,
28
+ expanded,
29
+ selected,
30
+ focused,
31
+ handleExpansion,
32
+ handleSelection,
33
+ preventSelection
34
+ } = useTreeItem(nodeId);
35
+ const icon = iconProp || expansionIcon || displayIcon;
36
+ const handleMouseDown = event => {
37
+ preventSelection(event);
38
+ if (onMouseDown) {
39
+ onMouseDown(event);
40
+ }
41
+ };
42
+ const handleClick = event => {
43
+ handleExpansion(event);
44
+ handleSelection(event);
45
+ if (onClick) {
46
+ onClick(event);
47
+ }
48
+ };
49
+ return (
50
+ /*#__PURE__*/
51
+ /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions -- Key event is handled by the TreeView */
52
+ _jsxs("div", _extends({}, other, {
53
+ className: clsx(className, classes.root, expanded && classes.expanded, selected && classes.selected, focused && classes.focused, disabled && classes.disabled),
54
+ onClick: handleClick,
55
+ onMouseDown: handleMouseDown,
56
+ ref: ref,
57
+ children: [/*#__PURE__*/_jsx("div", {
58
+ className: classes.iconContainer,
59
+ children: icon
60
+ }), /*#__PURE__*/_jsx("div", {
61
+ className: classes.label,
62
+ children: label
63
+ })]
64
+ }))
65
+ );
66
+ });
67
+ process.env.NODE_ENV !== "production" ? TreeItemContent.propTypes = {
68
+ // ----------------------------- Warning --------------------------------
69
+ // | These PropTypes are generated from the TypeScript type definitions |
70
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
71
+ // ----------------------------------------------------------------------
72
+ /**
73
+ * Override or extend the styles applied to the component.
74
+ */
75
+ classes: PropTypes.object.isRequired,
76
+ /**
77
+ * className applied to the root element.
78
+ */
79
+ className: PropTypes.string,
80
+ /**
81
+ * The icon to display next to the tree node's label. Either a parent or end icon.
82
+ */
83
+ displayIcon: PropTypes.node,
84
+ /**
85
+ * The icon to display next to the tree node's label. Either an expansion or collapse icon.
86
+ */
87
+ expansionIcon: PropTypes.node,
88
+ /**
89
+ * The icon to display next to the tree node's label.
90
+ */
91
+ icon: PropTypes.node,
92
+ /**
93
+ * The tree node label.
94
+ */
95
+ label: PropTypes.node,
96
+ /**
97
+ * The id of the node.
98
+ */
99
+ nodeId: PropTypes.string.isRequired
100
+ } : void 0;
101
+ export { TreeItemContent };
@@ -0,0 +1,5 @@
1
+ export * from './TreeItem';
2
+ export type { TreeItemProps } from './TreeItem.types';
3
+ export * from './useTreeItem';
4
+ export * from './treeItemClasses';
5
+ export type { TreeItemContentProps } from './TreeItemContent';
@@ -0,0 +1,4 @@
1
+ export * from './TreeItem';
2
+ export * from './useTreeItem';
3
+ export * from './treeItemClasses';
4
+ export {};
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "main": "../node/TreeItem/index.js",
5
+ "types": "./index.d.ts"
6
+ }
@@ -0,0 +1,23 @@
1
+ export interface TreeItemClasses {
2
+ /** Styles applied to the root element. */
3
+ root: string;
4
+ /** Styles applied to the transition component. */
5
+ group: string;
6
+ /** Styles applied to the content element. */
7
+ content: string;
8
+ /** State class applied to the content element when expanded. */
9
+ expanded: string;
10
+ /** State class applied to the content element when selected. */
11
+ selected: string;
12
+ /** State class applied to the content element when focused. */
13
+ focused: string;
14
+ /** State class applied to the element when disabled. */
15
+ disabled: string;
16
+ /** Styles applied to the tree node icon. */
17
+ iconContainer: string;
18
+ /** Styles applied to the label element. */
19
+ label: string;
20
+ }
21
+ export type TreeItemClassKey = keyof TreeItemClasses;
22
+ export declare function getTreeItemUtilityClass(slot: string): string;
23
+ export declare const treeItemClasses: TreeItemClasses;
@@ -0,0 +1,6 @@
1
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
2
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
3
+ export function getTreeItemUtilityClass(slot) {
4
+ return generateUtilityClass('MuiTreeItem', slot);
5
+ }
6
+ export const treeItemClasses = generateUtilityClasses('MuiTreeItem', ['root', 'group', 'content', 'expanded', 'selected', 'focused', 'disabled', 'iconContainer', 'label']);
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ export declare function useTreeItem(nodeId: string): {
3
+ disabled: boolean;
4
+ expanded: boolean;
5
+ selected: boolean;
6
+ focused: boolean;
7
+ handleExpansion: (event: React.MouseEvent<HTMLDivElement>) => void;
8
+ handleSelection: (event: React.MouseEvent<HTMLDivElement>) => void;
9
+ preventSelection: (event: React.MouseEvent<HTMLDivElement>) => void;
10
+ };
@@ -0,0 +1,68 @@
1
+ import * as React from 'react';
2
+ import { TreeViewContext } from '../TreeView/TreeViewContext';
3
+ export function useTreeItem(nodeId) {
4
+ const {
5
+ focus,
6
+ isExpanded,
7
+ isExpandable,
8
+ isFocused,
9
+ isDisabled,
10
+ isSelected,
11
+ multiSelect,
12
+ selectNode,
13
+ selectRange,
14
+ toggleExpansion
15
+ } = React.useContext(TreeViewContext);
16
+ const expandable = isExpandable ? isExpandable(nodeId) : false;
17
+ const expanded = isExpanded ? isExpanded(nodeId) : false;
18
+ const focused = isFocused ? isFocused(nodeId) : false;
19
+ const disabled = isDisabled ? isDisabled(nodeId) : false;
20
+ const selected = isSelected ? isSelected(nodeId) : false;
21
+ const handleExpansion = event => {
22
+ if (!disabled) {
23
+ if (!focused) {
24
+ focus(event, nodeId);
25
+ }
26
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
27
+
28
+ // If already expanded and trying to toggle selection don't close
29
+ if (expandable && !(multiple && isExpanded(nodeId))) {
30
+ toggleExpansion(event, nodeId);
31
+ }
32
+ }
33
+ };
34
+ const handleSelection = event => {
35
+ if (!disabled) {
36
+ if (!focused) {
37
+ focus(event, nodeId);
38
+ }
39
+ const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
40
+ if (multiple) {
41
+ if (event.shiftKey) {
42
+ selectRange(event, {
43
+ end: nodeId
44
+ });
45
+ } else {
46
+ selectNode(event, nodeId, true);
47
+ }
48
+ } else {
49
+ selectNode(event, nodeId);
50
+ }
51
+ }
52
+ };
53
+ const preventSelection = event => {
54
+ if (event.shiftKey || event.ctrlKey || event.metaKey || disabled) {
55
+ // Prevent text selection
56
+ event.preventDefault();
57
+ }
58
+ };
59
+ return {
60
+ disabled,
61
+ expanded,
62
+ selected,
63
+ focused,
64
+ handleExpansion,
65
+ handleSelection,
66
+ preventSelection
67
+ };
68
+ }
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { TreeViewProps } from './TreeView.types';
3
+ /**
4
+ *
5
+ * Demos:
6
+ *
7
+ * - [Tree View](https://mui.com/material-ui/react-tree-view/)
8
+ *
9
+ * API:
10
+ *
11
+ * - [TreeView API](https://mui.com/material-ui/api/tree-view/)
12
+ */
13
+ declare const TreeView: React.ForwardRefExoticComponent<TreeViewProps & React.RefAttributes<HTMLUListElement>>;
14
+ export { TreeView };