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

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 (69) hide show
  1. package/CHANGELOG.md +271 -61
  2. package/RichTreeView/RichTreeView.js +9 -0
  3. package/RichTreeView/RichTreeView.types.d.ts +7 -1
  4. package/SimpleTreeView/SimpleTreeView.js +9 -0
  5. package/SimpleTreeView/SimpleTreeView.types.d.ts +7 -1
  6. package/TreeItem/TreeItem.js +24 -28
  7. package/TreeItem/TreeItem.types.d.ts +7 -11
  8. package/TreeItem/treeItemClasses.d.ts +1 -1
  9. package/TreeItem/treeItemClasses.js +1 -1
  10. package/TreeView/TreeView.js +9 -0
  11. package/hooks/index.d.ts +1 -0
  12. package/hooks/index.js +1 -0
  13. package/hooks/package.json +6 -0
  14. package/hooks/useTreeViewApiRef.d.ts +6 -0
  15. package/hooks/useTreeViewApiRef.js +5 -0
  16. package/index.d.ts +1 -0
  17. package/index.js +3 -2
  18. package/internals/hooks/useTimeout.d.ts +5 -3
  19. package/internals/hooks/useTimeout.js +13 -5
  20. package/internals/models/helpers.d.ts +2 -0
  21. package/internals/models/plugin.d.ts +12 -0
  22. package/internals/models/treeView.d.ts +1 -0
  23. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +40 -22
  24. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +4 -0
  25. package/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +20 -6
  26. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +29 -16
  27. package/internals/plugins/useTreeViewNodes/useTreeViewNodes.types.d.ts +16 -6
  28. package/internals/useTreeView/useTreeView.d.ts +2 -0
  29. package/internals/useTreeView/useTreeView.js +12 -0
  30. package/internals/useTreeView/useTreeView.types.d.ts +2 -1
  31. package/internals/useTreeView/useTreeView.utils.d.ts +2 -1
  32. package/internals/useTreeView/useTreeView.utils.js +3 -0
  33. package/internals/utils/extractPluginParamsFromProps.d.ts +3 -2
  34. package/internals/utils/extractPluginParamsFromProps.js +5 -3
  35. package/internals/utils/utils.d.ts +1 -0
  36. package/internals/utils/utils.js +10 -0
  37. package/modern/RichTreeView/RichTreeView.js +9 -0
  38. package/modern/SimpleTreeView/SimpleTreeView.js +9 -0
  39. package/modern/TreeItem/TreeItem.js +23 -27
  40. package/modern/TreeItem/treeItemClasses.js +1 -1
  41. package/modern/TreeView/TreeView.js +9 -0
  42. package/modern/hooks/index.js +1 -0
  43. package/modern/hooks/useTreeViewApiRef.js +5 -0
  44. package/modern/index.js +3 -2
  45. package/modern/internals/hooks/useTimeout.js +13 -5
  46. package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +40 -22
  47. package/modern/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +20 -6
  48. package/modern/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +29 -16
  49. package/modern/internals/useTreeView/useTreeView.js +12 -0
  50. package/modern/internals/useTreeView/useTreeView.utils.js +3 -0
  51. package/modern/internals/utils/extractPluginParamsFromProps.js +5 -3
  52. package/modern/internals/utils/utils.js +10 -0
  53. package/node/RichTreeView/RichTreeView.js +9 -0
  54. package/node/SimpleTreeView/SimpleTreeView.js +9 -0
  55. package/node/TreeItem/TreeItem.js +23 -27
  56. package/node/TreeItem/treeItemClasses.js +1 -1
  57. package/node/TreeView/TreeView.js +9 -0
  58. package/node/hooks/index.js +12 -0
  59. package/node/hooks/useTreeViewApiRef.js +14 -0
  60. package/node/index.js +13 -1
  61. package/node/internals/hooks/useTimeout.js +13 -4
  62. package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +39 -21
  63. package/node/internals/plugins/useTreeViewJSXNodes/useTreeViewJSXNodes.js +20 -6
  64. package/node/internals/plugins/useTreeViewNodes/useTreeViewNodes.js +28 -15
  65. package/node/internals/useTreeView/useTreeView.js +13 -0
  66. package/node/internals/useTreeView/useTreeView.utils.js +6 -2
  67. package/node/internals/utils/extractPluginParamsFromProps.js +5 -3
  68. package/node/internals/utils/utils.js +17 -0
  69. package/package.json +2 -2
@@ -12,13 +12,14 @@ var _useTreeView = require("../../useTreeView/useTreeView.utils");
12
12
  var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent");
13
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
- const updateState = ({
15
+ const updateNodesState = ({
16
16
  items,
17
17
  isItemDisabled,
18
18
  getItemLabel,
19
19
  getItemId
20
20
  }) => {
21
21
  const nodeMap = {};
22
+ const itemMap = {};
22
23
  const processItem = (item, index, parentId) => {
23
24
  const id = getItemId ? getItemId(item) : item.id;
24
25
  if (id == null) {
@@ -36,10 +37,11 @@ const updateState = ({
36
37
  label,
37
38
  index,
38
39
  parentId,
39
- idAttribute: id,
40
+ idAttribute: undefined,
40
41
  expandable: !!item.children?.length,
41
42
  disabled: isItemDisabled ? isItemDisabled(item) : false
42
43
  };
44
+ itemMap[id] = item;
43
45
  return {
44
46
  id,
45
47
  children: item.children?.map((child, childIndex) => processItem(child, childIndex, id))
@@ -48,16 +50,19 @@ const updateState = ({
48
50
  const nodeTree = items.map((item, itemIndex) => processItem(item, itemIndex, null));
49
51
  return {
50
52
  nodeMap,
51
- nodeTree
53
+ nodeTree,
54
+ itemMap
52
55
  };
53
56
  };
54
57
  const useTreeViewNodes = ({
55
58
  instance,
59
+ publicAPI,
56
60
  params,
57
61
  state,
58
62
  setState
59
63
  }) => {
60
- const getNode = React.useCallback(nodeId => state.nodeMap[nodeId], [state.nodeMap]);
64
+ const getNode = React.useCallback(nodeId => state.nodes.nodeMap[nodeId], [state.nodes.nodeMap]);
65
+ const getItem = React.useCallback(nodeId => state.nodes.itemMap[nodeId], [state.nodes.itemMap]);
61
66
  const isNodeDisabled = React.useCallback(nodeId => {
62
67
  if (nodeId == null) {
63
68
  return false;
@@ -79,7 +84,7 @@ const useTreeViewNodes = ({
79
84
  }
80
85
  return false;
81
86
  }, [instance]);
82
- const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(state.nodeMap).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id));
87
+ const getChildrenIds = (0, _useEventCallback.default)(nodeId => Object.values(state.nodes.nodeMap).filter(node => node.parentId === nodeId).sort((a, b) => a.index - b.index).map(child => child.id));
83
88
  const getNavigableChildrenIds = nodeId => {
84
89
  let childrenIds = instance.getChildrenIds(nodeId);
85
90
  if (!params.disabledItemsFocusable) {
@@ -89,20 +94,22 @@ const useTreeViewNodes = ({
89
94
  };
90
95
  React.useEffect(() => {
91
96
  setState(prevState => {
92
- const newState = updateState({
97
+ const newState = updateNodesState({
93
98
  items: params.items,
94
99
  isItemDisabled: params.isItemDisabled,
95
100
  getItemId: params.getItemId,
96
101
  getItemLabel: params.getItemLabel
97
102
  });
98
- Object.values(prevState.nodeMap).forEach(node => {
103
+ Object.values(prevState.nodes.nodeMap).forEach(node => {
99
104
  if (!newState.nodeMap[node.id]) {
100
105
  (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'removeNode', {
101
106
  id: node.id
102
107
  });
103
108
  }
104
109
  });
105
- return (0, _extends2.default)({}, prevState, newState);
110
+ return (0, _extends2.default)({}, prevState, {
111
+ nodes: newState
112
+ });
106
113
  });
107
114
  }, [instance, setState, params.items, params.isItemDisabled, params.getItemId, params.getItemLabel]);
108
115
  const getNodesToRender = (0, _useEventCallback.default)(() => {
@@ -110,7 +117,7 @@ const useTreeViewNodes = ({
110
117
  id,
111
118
  children
112
119
  }) => {
113
- const node = state.nodeMap[id];
120
+ const node = state.nodes.nodeMap[id];
114
121
  return {
115
122
  label: node.label,
116
123
  nodeId: node.id,
@@ -118,15 +125,19 @@ const useTreeViewNodes = ({
118
125
  children: children?.map(getPropsFromNodeId)
119
126
  };
120
127
  };
121
- return state.nodeTree.map(getPropsFromNodeId);
128
+ return state.nodes.nodeTree.map(getPropsFromNodeId);
122
129
  });
123
130
  (0, _useTreeView.populateInstance)(instance, {
124
131
  getNode,
132
+ getItem,
125
133
  getNodesToRender,
126
134
  getChildrenIds,
127
135
  getNavigableChildrenIds,
128
136
  isNodeDisabled
129
137
  });
138
+ (0, _useTreeView.populatePublicAPI)(publicAPI, {
139
+ getItem
140
+ });
130
141
  return {
131
142
  contextValue: {
132
143
  disabledItemsFocusable: params.disabledItemsFocusable
@@ -134,11 +145,13 @@ const useTreeViewNodes = ({
134
145
  };
135
146
  };
136
147
  exports.useTreeViewNodes = useTreeViewNodes;
137
- useTreeViewNodes.getInitialState = params => updateState({
138
- items: params.items,
139
- isItemDisabled: params.isItemDisabled,
140
- getItemId: params.getItemId,
141
- getItemLabel: params.getItemLabel
148
+ useTreeViewNodes.getInitialState = params => ({
149
+ nodes: updateNodesState({
150
+ items: params.items,
151
+ isItemDisabled: params.isItemDisabled,
152
+ getItemId: params.getItemId,
153
+ getItemLabel: params.getItemLabel
154
+ })
142
155
  });
143
156
  useTreeViewNodes.getDefaultizedParams = params => (0, _extends2.default)({}, params, {
144
157
  disabledItemsFocusable: params.disabledItemsFocusable ?? false
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useTreeView = void 0;
8
+ exports.useTreeViewApiInitialization = useTreeViewApiInitialization;
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var React = _interopRequireWildcard(require("react"));
10
11
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
@@ -12,6 +13,16 @@ var _useTreeViewModels = require("./useTreeViewModels");
12
13
  var _corePlugins = require("../corePlugins");
13
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function useTreeViewApiInitialization(inputApiRef) {
17
+ const fallbackPublicApiRef = React.useRef({});
18
+ if (inputApiRef) {
19
+ if (inputApiRef.current == null) {
20
+ inputApiRef.current = {};
21
+ }
22
+ return inputApiRef.current;
23
+ }
24
+ return fallbackPublicApiRef.current;
25
+ }
15
26
  const useTreeView = inParams => {
16
27
  const plugins = [..._corePlugins.TREE_VIEW_CORE_PLUGINS, ...inParams.plugins];
17
28
  const params = plugins.reduce((acc, plugin) => {
@@ -23,6 +34,7 @@ const useTreeView = inParams => {
23
34
  const models = (0, _useTreeViewModels.useTreeViewModels)(plugins, params);
24
35
  const instanceRef = React.useRef({});
25
36
  const instance = instanceRef.current;
37
+ const publicAPI = useTreeViewApiInitialization(inParams.apiRef);
26
38
  const innerRootRef = React.useRef(null);
27
39
  const handleRootRef = (0, _useForkRef.default)(innerRootRef, inParams.rootRef);
28
40
  const [state, setState] = React.useState(() => {
@@ -41,6 +53,7 @@ const useTreeView = inParams => {
41
53
  const runPlugin = plugin => {
42
54
  const pluginResponse = plugin({
43
55
  instance,
56
+ publicAPI,
44
57
  params,
45
58
  slots: params.slots,
46
59
  slotProps: params.slotProps,
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.populateInstance = exports.getPreviousNode = exports.getNextNode = exports.getLastNode = exports.getFirstNode = void 0;
6
+ exports.populatePublicAPI = exports.populateInstance = exports.getPreviousNode = exports.getNextNode = exports.getLastNode = exports.getFirstNode = void 0;
7
7
  const getPreviousNode = (instance, nodeId) => {
8
8
  const node = instance.getNode(nodeId);
9
9
  const siblings = instance.getNavigableChildrenIds(node.parentId);
@@ -51,4 +51,8 @@ exports.getFirstNode = getFirstNode;
51
51
  const populateInstance = (instance, methods) => {
52
52
  Object.assign(instance, methods);
53
53
  };
54
- exports.populateInstance = populateInstance;
54
+ exports.populateInstance = populateInstance;
55
+ const populatePublicAPI = (publicAPI, methods) => {
56
+ Object.assign(publicAPI, methods);
57
+ };
58
+ exports.populatePublicAPI = populatePublicAPI;
@@ -6,12 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.extractPluginParamsFromProps = void 0;
8
8
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
- const _excluded = ["slots", "slotProps"];
9
+ const _excluded = ["slots", "slotProps", "apiRef"];
10
10
  const extractPluginParamsFromProps = _ref => {
11
11
  let {
12
12
  props: {
13
13
  slots,
14
- slotProps
14
+ slotProps,
15
+ apiRef
15
16
  },
16
17
  plugins,
17
18
  rootRef
@@ -25,7 +26,8 @@ const extractPluginParamsFromProps = _ref => {
25
26
  plugins,
26
27
  rootRef,
27
28
  slots: slots ?? {},
28
- slotProps: slotProps ?? {}
29
+ slotProps: slotProps ?? {},
30
+ apiRef
29
31
  };
30
32
  const otherProps = {};
31
33
  Object.keys(props).forEach(propName => {
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getActiveElement = void 0;
7
+ const getActiveElement = (root = document) => {
8
+ const activeEl = root.activeElement;
9
+ if (!activeEl) {
10
+ return null;
11
+ }
12
+ if (activeEl.shadowRoot) {
13
+ return getActiveElement(activeEl.shadowRoot);
14
+ }
15
+ return activeEl;
16
+ };
17
+ exports.getActiveElement = getActiveElement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.0.0-beta.4",
3
+ "version": "7.0.0-beta.6",
4
4
  "description": "The community edition of the tree view components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -32,7 +32,7 @@
32
32
  "directory": "packages/x-tree-view"
33
33
  },
34
34
  "dependencies": {
35
- "@babel/runtime": "^7.23.9",
35
+ "@babel/runtime": "^7.24.0",
36
36
  "@mui/base": "^5.0.0-beta.36",
37
37
  "@mui/system": "^5.15.9",
38
38
  "@mui/utils": "^5.15.9",