@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,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TreeViewContext = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ /**
11
+ * @ignore - internal component.
12
+ */
13
+ const TreeViewContext = /*#__PURE__*/React.createContext({
14
+ registerNode: () => {},
15
+ unregisterNode: () => {},
16
+ isFocused: () => false,
17
+ isSelected: () => false,
18
+ isExpanded: () => false,
19
+ isExpandable: () => false,
20
+ isDisabled: () => false,
21
+ mapFirstChar: () => {},
22
+ unMapFirstChar: () => {},
23
+ focus: () => {},
24
+ toggleExpansion: () => {},
25
+ selectNode: () => {},
26
+ selectRange: () => {},
27
+ multiSelect: false,
28
+ disabledItemsFocusable: false,
29
+ treeId: undefined,
30
+ icons: {
31
+ defaultCollapseIcon: null,
32
+ defaultExpandIcon: null,
33
+ defaultParentIcon: null,
34
+ defaultEndIcon: null
35
+ }
36
+ });
37
+ exports.TreeViewContext = TreeViewContext;
38
+ if (process.env.NODE_ENV !== 'production') {
39
+ TreeViewContext.displayName = 'TreeViewContext';
40
+ }
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DescendantProvider = DescendantProvider;
8
+ exports.useDescendant = useDescendant;
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ const _excluded = ["element"];
16
+ /** Credit: https://github.com/reach/reach-ui/blob/86a046f54d53b6420e392b3fa56dd991d9d4e458/packages/descendants/README.md
17
+ * Modified slightly to suit our purposes.
18
+ */
19
+ // To replace with .findIndex() once we stop IE11 support.
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ function findIndex(array, comp) {
23
+ for (let i = 0; i < array.length; i += 1) {
24
+ if (comp(array[i])) {
25
+ return i;
26
+ }
27
+ }
28
+ return -1;
29
+ }
30
+ function binaryFindElement(array, element) {
31
+ let start = 0;
32
+ let end = array.length - 1;
33
+ while (start <= end) {
34
+ const middle = Math.floor((start + end) / 2);
35
+ if (array[middle].element === element) {
36
+ return middle;
37
+ }
38
+
39
+ // eslint-disable-next-line no-bitwise
40
+ if (array[middle].element.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_PRECEDING) {
41
+ end = middle - 1;
42
+ } else {
43
+ start = middle + 1;
44
+ }
45
+ }
46
+ return start;
47
+ }
48
+ const DescendantContext = /*#__PURE__*/React.createContext({});
49
+ if (process.env.NODE_ENV !== 'production') {
50
+ DescendantContext.displayName = 'DescendantContext';
51
+ }
52
+ function usePrevious(value) {
53
+ const ref = React.useRef(null);
54
+ React.useEffect(() => {
55
+ ref.current = value;
56
+ }, [value]);
57
+ return ref.current;
58
+ }
59
+ const noop = () => {};
60
+
61
+ /**
62
+ * This hook registers our descendant by passing it into an array. We can then
63
+ * search that array by to find its index when registering it in the component.
64
+ * We use this for focus management, keyboard navigation, and typeahead
65
+ * functionality for some components.
66
+ *
67
+ * The hook accepts the element node
68
+ *
69
+ * Our main goals with this are:
70
+ * 1) maximum composability,
71
+ * 2) minimal API friction
72
+ * 3) SSR compatibility*
73
+ * 4) concurrent safe
74
+ * 5) index always up-to-date with the tree despite changes
75
+ * 6) works with memoization of any component in the tree (hopefully)
76
+ *
77
+ * * As for SSR, the good news is that we don't actually need the index on the
78
+ * server for most use-cases, as we are only using it to determine the order of
79
+ * composed descendants for keyboard navigation.
80
+ */
81
+ function useDescendant(descendant) {
82
+ const [, forceUpdate] = React.useState();
83
+ const {
84
+ registerDescendant = noop,
85
+ unregisterDescendant = noop,
86
+ descendants = [],
87
+ parentId = null
88
+ } = React.useContext(DescendantContext);
89
+
90
+ // This will initially return -1 because we haven't registered the descendant
91
+ // on the first render. After we register, this will then return the correct
92
+ // index on the following render, and we will re-register descendants
93
+ // so that everything is up-to-date before the user interacts with a
94
+ // collection.
95
+ const index = findIndex(descendants, item => item.element === descendant.element);
96
+ const previousDescendants = usePrevious(descendants);
97
+
98
+ // We also need to re-register descendants any time ANY of the other
99
+ // descendants have changed. My brain was melting when I wrote this and it
100
+ // feels a little off, but checking in render and using the result in the
101
+ // effect's dependency array works well enough.
102
+ const someDescendantsHaveChanged = descendants.some((newDescendant, position) => {
103
+ return previousDescendants && previousDescendants[position] && previousDescendants[position].element !== newDescendant.element;
104
+ });
105
+
106
+ // Prevent any flashing
107
+ (0, _useEnhancedEffect.default)(() => {
108
+ if (descendant.element) {
109
+ registerDescendant((0, _extends2.default)({}, descendant, {
110
+ index
111
+ }));
112
+ return () => {
113
+ unregisterDescendant(descendant.element);
114
+ };
115
+ }
116
+ forceUpdate({});
117
+ return undefined;
118
+ }, [registerDescendant, unregisterDescendant, index, someDescendantsHaveChanged, descendant]);
119
+ return {
120
+ parentId,
121
+ index
122
+ };
123
+ }
124
+ function DescendantProvider(props) {
125
+ const {
126
+ children,
127
+ id
128
+ } = props;
129
+ const [items, set] = React.useState([]);
130
+ const registerDescendant = React.useCallback(_ref => {
131
+ let {
132
+ element
133
+ } = _ref,
134
+ other = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
135
+ set(oldItems => {
136
+ if (oldItems.length === 0) {
137
+ // If there are no items, register at index 0 and bail.
138
+ return [(0, _extends2.default)({}, other, {
139
+ element,
140
+ index: 0
141
+ })];
142
+ }
143
+ const index = binaryFindElement(oldItems, element);
144
+ let newItems;
145
+ if (oldItems[index] && oldItems[index].element === element) {
146
+ // If the element is already registered, just use the same array
147
+ newItems = oldItems;
148
+ } else {
149
+ // When registering a descendant, we need to make sure we insert in
150
+ // into the array in the same order that it appears in the DOM. So as
151
+ // new descendants are added or maybe some are removed, we always know
152
+ // that the array is up-to-date and correct.
153
+ //
154
+ // So here we look at our registered descendants and see if the new
155
+ // element we are adding appears earlier than an existing descendant's
156
+ // DOM node via `node.compareDocumentPosition`. If it does, we insert
157
+ // the new element at this index. Because `registerDescendant` will be
158
+ // called in an effect every time the descendants state value changes,
159
+ // we should be sure that this index is accurate when descendent
160
+ // elements come or go from our component.
161
+
162
+ const newItem = (0, _extends2.default)({}, other, {
163
+ element,
164
+ index
165
+ });
166
+
167
+ // If an index is not found we will push the element to the end.
168
+ newItems = oldItems.slice();
169
+ newItems.splice(index, 0, newItem);
170
+ }
171
+ newItems.forEach((item, position) => {
172
+ item.index = position;
173
+ });
174
+ return newItems;
175
+ });
176
+ }, []);
177
+ const unregisterDescendant = React.useCallback(element => {
178
+ set(oldItems => oldItems.filter(item => element !== item.element));
179
+ }, []);
180
+ const value = React.useMemo(() => ({
181
+ descendants: items,
182
+ registerDescendant,
183
+ unregisterDescendant,
184
+ parentId: id
185
+ }), [items, registerDescendant, unregisterDescendant, id]);
186
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DescendantContext.Provider, {
187
+ value: value,
188
+ children: children
189
+ });
190
+ }
191
+ process.env.NODE_ENV !== "production" ? DescendantProvider.propTypes = {
192
+ children: _propTypes.default.node,
193
+ id: _propTypes.default.string
194
+ } : void 0;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _TreeView = require("./TreeView");
7
+ Object.keys(_TreeView).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _TreeView[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _TreeView[key];
14
+ }
15
+ });
16
+ });
17
+ var _treeViewClasses = require("./treeViewClasses");
18
+ Object.keys(_treeViewClasses).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _treeViewClasses[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _treeViewClasses[key];
25
+ }
26
+ });
27
+ });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getTreeViewUtilityClass = getTreeViewUtilityClass;
8
+ exports.treeViewClasses = void 0;
9
+ var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateUtilityClass"));
10
+ var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generateUtilityClasses"));
11
+ function getTreeViewUtilityClass(slot) {
12
+ return (0, _generateUtilityClass.default)('MuiTreeView', slot);
13
+ }
14
+ const treeViewClasses = (0, _generateUtilityClasses.default)('MuiTreeView', ['root']);
15
+ exports.treeViewClasses = treeViewClasses;
package/node/index.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @mui/x-tree-view v6.0.0-alpha.0
3
+ *
4
+ * @license MIT
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ "use strict";
9
+
10
+ Object.defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ var _TreeItem = require("./TreeItem");
14
+ Object.keys(_TreeItem).forEach(function (key) {
15
+ if (key === "default" || key === "__esModule") return;
16
+ if (key in exports && exports[key] === _TreeItem[key]) return;
17
+ Object.defineProperty(exports, key, {
18
+ enumerable: true,
19
+ get: function () {
20
+ return _TreeItem[key];
21
+ }
22
+ });
23
+ });
24
+ var _TreeView = require("./TreeView");
25
+ Object.keys(_TreeView).forEach(function (key) {
26
+ if (key === "default" || key === "__esModule") return;
27
+ if (key in exports && exports[key] === _TreeView[key]) return;
28
+ Object.defineProperty(exports, key, {
29
+ enumerable: true,
30
+ get: function () {
31
+ return _TreeView[key];
32
+ }
33
+ });
34
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@mui/x-tree-view",
3
+ "version": "6.0.0-alpha.0",
4
+ "description": "The community edition of the tree view components (MUI X).",
5
+ "author": "MUI Team",
6
+ "main": "./node/index.js",
7
+ "license": "MIT",
8
+ "bugs": {
9
+ "url": "https://github.com/mui/mui-x/issues"
10
+ },
11
+ "homepage": "https://mui.com/x/react-tree-view/",
12
+ "funding": {
13
+ "type": "opencollective",
14
+ "url": "https://opencollective.com/mui"
15
+ },
16
+ "sideEffects": false,
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "keywords": [
21
+ "react",
22
+ "react-component",
23
+ "mui",
24
+ "material-ui",
25
+ "material design",
26
+ "treeview"
27
+ ],
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/mui/mui-x.git",
31
+ "directory": "packages/x-tree-view"
32
+ },
33
+ "dependencies": {
34
+ "@babel/runtime": "^7.22.6",
35
+ "@mui/utils": "^5.14.1",
36
+ "@types/react-transition-group": "^4.4.6",
37
+ "clsx": "^1.2.1",
38
+ "prop-types": "^15.8.1",
39
+ "react-transition-group": "^4.4.5"
40
+ },
41
+ "peerDependencies": {
42
+ "@emotion/react": "^11.9.0",
43
+ "@emotion/styled": "^11.8.1",
44
+ "@mui/base": "^5.0.0-alpha.87",
45
+ "@mui/material": "^5.8.6",
46
+ "@mui/system": "^5.8.0",
47
+ "react": "^17.0.0 || ^18.0.0",
48
+ "react-dom": "^17.0.0 || ^18.0.0"
49
+ },
50
+ "setupFiles": [
51
+ "<rootDir>/src/setupTests.js"
52
+ ],
53
+ "engines": {
54
+ "node": ">=14.0.0"
55
+ },
56
+ "private": false,
57
+ "module": "./index.js",
58
+ "types": "./index.d.ts"
59
+ }