@mui/x-tree-view 7.6.2 → 7.7.1

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 (116) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/RichTreeView/RichTreeView.d.ts +1 -3
  3. package/RichTreeView/RichTreeView.js +12 -15
  4. package/RichTreeView/RichTreeView.plugins.d.ts +13 -0
  5. package/RichTreeView/RichTreeView.plugins.js +9 -0
  6. package/RichTreeView/RichTreeView.types.d.ts +6 -6
  7. package/RichTreeView/index.d.ts +2 -0
  8. package/RichTreeView/index.js +1 -1
  9. package/SimpleTreeView/SimpleTreeView.d.ts +1 -1
  10. package/SimpleTreeView/SimpleTreeView.js +11 -14
  11. package/SimpleTreeView/SimpleTreeView.plugins.d.ts +12 -7
  12. package/SimpleTreeView/SimpleTreeView.plugins.js +7 -2
  13. package/SimpleTreeView/SimpleTreeView.types.d.ts +3 -3
  14. package/TreeItem/TreeItem.js +7 -1
  15. package/TreeItem/TreeItem.types.d.ts +27 -1
  16. package/TreeItem2/TreeItem2.js +12 -2
  17. package/TreeItem2/TreeItem2.types.d.ts +10 -1
  18. package/TreeView/TreeView.js +2 -1
  19. package/hooks/useTreeItem2Utils/useTreeItem2Utils.d.ts +4 -0
  20. package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
  21. package/hooks/useTreeViewApiRef.d.ts +1 -1
  22. package/index.js +1 -1
  23. package/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
  24. package/internals/TreeViewProvider/TreeViewContext.d.ts +2 -8
  25. package/internals/TreeViewProvider/TreeViewProvider.d.ts +1 -1
  26. package/internals/TreeViewProvider/TreeViewProvider.types.d.ts +10 -9
  27. package/internals/TreeViewProvider/index.d.ts +1 -1
  28. package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
  29. package/internals/corePlugins/corePlugins.d.ts +6 -3
  30. package/internals/corePlugins/corePlugins.js +2 -1
  31. package/internals/corePlugins/index.d.ts +1 -1
  32. package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.d.ts +0 -4
  33. package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
  34. package/internals/index.d.ts +2 -7
  35. package/internals/index.js +4 -4
  36. package/internals/models/helpers.d.ts +3 -16
  37. package/internals/models/plugin.d.ts +25 -19
  38. package/internals/models/treeView.d.ts +5 -4
  39. package/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.types.d.ts +1 -1
  40. package/internals/plugins/useTreeViewFocus/useTreeViewFocus.types.d.ts +1 -3
  41. package/internals/plugins/useTreeViewIcons/useTreeViewIcons.types.d.ts +1 -1
  42. package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.types.d.ts +1 -1
  43. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +4 -5
  44. package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.types.d.ts +1 -1
  45. package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +1 -1
  46. package/internals/useTreeView/extractPluginParamsFromProps.d.ts +13 -0
  47. package/internals/{utils → useTreeView}/extractPluginParamsFromProps.js +16 -16
  48. package/internals/useTreeView/index.d.ts +0 -1
  49. package/internals/useTreeView/useTreeView.d.ts +4 -4
  50. package/internals/useTreeView/useTreeView.js +85 -72
  51. package/internals/useTreeView/useTreeView.types.d.ts +13 -12
  52. package/internals/useTreeView/useTreeViewModels.d.ts +3 -2
  53. package/internals/utils/publishTreeViewEvent.d.ts +1 -1
  54. package/internals/utils/utils.d.ts +1 -0
  55. package/internals/utils/utils.js +7 -1
  56. package/internals/zero-styled/index.d.ts +3 -0
  57. package/internals/zero-styled/index.js +7 -0
  58. package/modern/RichTreeView/RichTreeView.js +12 -15
  59. package/modern/RichTreeView/RichTreeView.plugins.js +9 -0
  60. package/modern/RichTreeView/index.js +1 -1
  61. package/modern/SimpleTreeView/SimpleTreeView.js +11 -14
  62. package/modern/SimpleTreeView/SimpleTreeView.plugins.js +7 -2
  63. package/modern/TreeItem/TreeItem.js +7 -1
  64. package/modern/TreeItem2/TreeItem2.js +12 -2
  65. package/modern/TreeView/TreeView.js +2 -1
  66. package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
  67. package/modern/index.js +1 -1
  68. package/modern/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
  69. package/modern/internals/corePlugins/corePlugins.js +2 -1
  70. package/modern/internals/index.js +4 -4
  71. package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +4 -5
  72. package/modern/internals/{utils → useTreeView}/extractPluginParamsFromProps.js +16 -16
  73. package/modern/internals/useTreeView/useTreeView.js +85 -72
  74. package/modern/internals/utils/utils.js +7 -1
  75. package/modern/internals/zero-styled/index.js +7 -0
  76. package/node/RichTreeView/RichTreeView.js +14 -17
  77. package/node/RichTreeView/RichTreeView.plugins.js +15 -0
  78. package/node/RichTreeView/index.js +13 -1
  79. package/node/SimpleTreeView/SimpleTreeView.js +13 -16
  80. package/node/SimpleTreeView/SimpleTreeView.plugins.js +7 -2
  81. package/node/TreeItem/TreeItem.js +10 -4
  82. package/node/TreeItem2/TreeItem2.js +18 -8
  83. package/node/TreeView/TreeView.js +4 -3
  84. package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +9 -0
  85. package/node/index.js +1 -1
  86. package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +3 -1
  87. package/node/internals/corePlugins/corePlugins.js +2 -1
  88. package/node/internals/index.js +1 -22
  89. package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +4 -5
  90. package/node/internals/{utils → useTreeView}/extractPluginParamsFromProps.js +16 -16
  91. package/node/internals/useTreeView/useTreeView.js +85 -72
  92. package/node/internals/utils/utils.js +8 -1
  93. package/node/internals/zero-styled/index.js +17 -0
  94. package/package.json +4 -4
  95. package/useTreeItem2/useTreeItem2.d.ts +2 -2
  96. package/useTreeItem2/useTreeItem2.types.d.ts +20 -3
  97. package/internals/plugins/defaultPlugins.d.ts +0 -13
  98. package/internals/plugins/defaultPlugins.js +0 -10
  99. package/internals/plugins/index.d.ts +0 -2
  100. package/internals/plugins/index.js +0 -1
  101. package/internals/utils/extractPluginParamsFromProps.d.ts +0 -18
  102. package/modern/internals/plugins/defaultPlugins.js +0 -10
  103. package/modern/internals/plugins/index.js +0 -1
  104. package/node/internals/plugins/defaultPlugins.js +0 -16
  105. package/node/internals/plugins/index.js +0 -12
  106. /package/internals/{plugins → corePlugins}/useTreeViewId/index.d.ts +0 -0
  107. /package/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
  108. /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.d.ts +0 -0
  109. /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
  110. /package/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
  111. /package/modern/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
  112. /package/modern/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
  113. /package/modern/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
  114. /package/node/internals/{plugins → corePlugins}/useTreeViewId/index.js +0 -0
  115. /package/node/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.js +0 -0
  116. /package/node/internals/{plugins → corePlugins}/useTreeViewId/useTreeViewId.types.js +0 -0
@@ -8,13 +8,14 @@ exports.TreeView = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
- var _styles = require("@mui/material/styles");
12
11
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
12
+ var _zeroStyled = require("../internals/zero-styled");
13
13
  var _treeViewClasses = require("./treeViewClasses");
14
14
  var _SimpleTreeView = require("../SimpleTreeView");
15
15
  var _jsxRuntime = require("react/jsx-runtime");
16
16
  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); }
17
17
  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 && {}.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; }
18
+ const useThemeProps = (0, _zeroStyled.createUseThemeProps)('MuiTreeView');
18
19
  const useUtilityClasses = ownerState => {
19
20
  const {
20
21
  classes
@@ -24,7 +25,7 @@ const useUtilityClasses = ownerState => {
24
25
  };
25
26
  return (0, _composeClasses.default)(slots, _treeViewClasses.getTreeViewUtilityClass, classes);
26
27
  };
27
- const TreeViewRoot = (0, _styles.styled)(_SimpleTreeView.SimpleTreeViewRoot, {
28
+ const TreeViewRoot = (0, _zeroStyled.styled)(_SimpleTreeView.SimpleTreeViewRoot, {
28
29
  name: 'MuiTreeView',
29
30
  slot: 'Root',
30
31
  overridesResolver: (props, styles) => styles.root
@@ -55,7 +56,7 @@ const TreeView = exports.TreeView = /*#__PURE__*/React.forwardRef(function TreeV
55
56
  if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
56
57
  warn();
57
58
  }
58
- const props = (0, _styles.useThemeProps)({
59
+ const props = useThemeProps({
59
60
  props: inProps,
60
61
  name: 'MuiTreeView'
61
62
  });
@@ -11,6 +11,15 @@ const isItemExpandable = reactChildren => {
11
11
  }
12
12
  return Boolean(reactChildren);
13
13
  };
14
+
15
+ /**
16
+ * Plugins that need to be present in the Tree View in order for `useTreeItem2Utils` to work correctly.
17
+ */
18
+
19
+ /**
20
+ * Plugins that `useTreeItem2Utils` can use if they are present, but are not required.
21
+ */
22
+
14
23
  const useTreeItem2Utils = ({
15
24
  itemId,
16
25
  children
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view v7.6.2
2
+ * @mui/x-tree-view v7.7.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -9,6 +9,7 @@ exports.TreeViewChildrenItemProvider = TreeViewChildrenItemProvider;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _useTreeViewContext = require("./useTreeViewContext");
12
+ var _utils = require("../utils/utils");
12
13
  var _jsxRuntime = require("react/jsx-runtime");
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 && {}.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; }
@@ -44,7 +45,8 @@ function TreeViewChildrenItemProvider(props) {
44
45
  return;
45
46
  }
46
47
  const previousChildrenIds = instance.getItemOrderedChildrenIds(itemId ?? null) ?? [];
47
- const childrenElements = rootRef.current.querySelectorAll(`${itemId == null ? '' : `*[id="${idAttr}"] `}[role="treeitem"]:not(*[id="${idAttr}"] [role="treeitem"] [role="treeitem"])`);
48
+ const escapedIdAttr = (0, _utils.escapeOperandAttributeSelector)(idAttr);
49
+ const childrenElements = rootRef.current.querySelectorAll(`${itemId == null ? '' : `*[id="${escapedIdAttr}"] `}[role="treeitem"]:not(*[id="${escapedIdAttr}"] [role="treeitem"] [role="treeitem"])`);
48
50
  const childrenIds = Array.from(childrenElements).map(child => childrenIdAttrToIdRef.current.get(child.id));
49
51
  const hasChanged = childrenIds.length !== previousChildrenIds.length || childrenIds.some((childId, index) => childId !== previousChildrenIds[index]);
50
52
  if (hasChanged) {
@@ -5,8 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.TREE_VIEW_CORE_PLUGINS = void 0;
7
7
  var _useTreeViewInstanceEvents = require("./useTreeViewInstanceEvents");
8
+ var _useTreeViewId = require("./useTreeViewId");
8
9
  /**
9
10
  * Internal plugins that create the tools used by the other plugins.
10
11
  * These plugins are used by the tree view components.
11
12
  */
12
- const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents];
13
+ const TREE_VIEW_CORE_PLUGINS = exports.TREE_VIEW_CORE_PLUGINS = [_useTreeViewInstanceEvents.useTreeViewInstanceEvents, _useTreeViewId.useTreeViewId];
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "DEFAULT_TREE_VIEW_PLUGINS", {
7
- enumerable: true,
8
- get: function () {
9
- return _defaultPlugins.DEFAULT_TREE_VIEW_PLUGINS;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "TreeViewProvider", {
13
7
  enumerable: true,
14
8
  get: function () {
@@ -21,12 +15,6 @@ Object.defineProperty(exports, "buildWarning", {
21
15
  return _warning.buildWarning;
22
16
  }
23
17
  });
24
- Object.defineProperty(exports, "extractPluginParamsFromProps", {
25
- enumerable: true,
26
- get: function () {
27
- return _extractPluginParamsFromProps.extractPluginParamsFromProps;
28
- }
29
- });
30
18
  Object.defineProperty(exports, "unstable_resetCleanupTracking", {
31
19
  enumerable: true,
32
20
  get: function () {
@@ -57,12 +45,6 @@ Object.defineProperty(exports, "useTreeViewIcons", {
57
45
  return _useTreeViewIcons.useTreeViewIcons;
58
46
  }
59
47
  });
60
- Object.defineProperty(exports, "useTreeViewId", {
61
- enumerable: true,
62
- get: function () {
63
- return _useTreeViewId.useTreeViewId;
64
- }
65
- });
66
48
  Object.defineProperty(exports, "useTreeViewItems", {
67
49
  enumerable: true,
68
50
  get: function () {
@@ -90,14 +72,11 @@ Object.defineProperty(exports, "useTreeViewSelection", {
90
72
  var _useTreeView = require("./useTreeView");
91
73
  var _TreeViewProvider = require("./TreeViewProvider");
92
74
  var _useInstanceEventHandler = require("./hooks/useInstanceEventHandler");
93
- var _defaultPlugins = require("./plugins/defaultPlugins");
94
75
  var _useTreeViewExpansion = require("./plugins/useTreeViewExpansion");
95
76
  var _useTreeViewSelection = require("./plugins/useTreeViewSelection");
96
77
  var _useTreeViewFocus = require("./plugins/useTreeViewFocus");
97
78
  var _useTreeViewKeyboardNavigation = require("./plugins/useTreeViewKeyboardNavigation");
98
- var _useTreeViewId = require("./plugins/useTreeViewId");
99
79
  var _useTreeViewIcons = require("./plugins/useTreeViewIcons");
100
80
  var _useTreeViewItems = require("./plugins/useTreeViewItems");
101
81
  var _useTreeViewJSXItems = require("./plugins/useTreeViewJSXItems");
102
- var _warning = require("./utils/warning");
103
- var _extractPluginParamsFromProps = require("./utils/extractPluginParamsFromProps");
82
+ var _warning = require("./utils/warning");
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.useTreeViewKeyboardNavigation = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
- var _styles = require("@mui/material/styles");
9
+ var _RtlProvider = require("@mui/system/RtlProvider");
10
10
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
11
11
  var _tree = require("../../utils/tree");
12
12
  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); }
@@ -19,8 +19,7 @@ const useTreeViewKeyboardNavigation = ({
19
19
  params,
20
20
  state
21
21
  }) => {
22
- const theme = (0, _styles.useTheme)();
23
- const isRTL = theme.direction === 'rtl';
22
+ const isRtl = (0, _RtlProvider.useRtl)();
24
23
  const firstCharMap = React.useRef({});
25
24
  const updateFirstCharMap = (0, _useEventCallback.default)(callback => {
26
25
  firstCharMap.current = callback(firstCharMap.current);
@@ -147,7 +146,7 @@ const useTreeViewKeyboardNavigation = ({
147
146
 
148
147
  // If the focused item is expanded, we move the focus to its first child
149
148
  // If the focused item is collapsed and has children, we expand it
150
- case key === 'ArrowRight' && !isRTL || key === 'ArrowLeft' && isRTL:
149
+ case key === 'ArrowRight' && !isRtl || key === 'ArrowLeft' && isRtl:
151
150
  {
152
151
  if (instance.isItemExpanded(itemId)) {
153
152
  const nextItemId = (0, _tree.getNextNavigableItem)(instance, itemId);
@@ -164,7 +163,7 @@ const useTreeViewKeyboardNavigation = ({
164
163
 
165
164
  // If the focused item is expanded, we collapse it
166
165
  // If the focused item is collapsed and has a parent, we move the focus to this parent
167
- case key === 'ArrowLeft' && !isRTL || key === 'ArrowRight' && isRTL:
166
+ case key === 'ArrowLeft' && !isRtl || key === 'ArrowRight' && isRtl:
168
167
  {
169
168
  if (canToggleItemExpansion(itemId) && instance.isItemExpanded(itemId)) {
170
169
  instance.toggleItemExpansion(event, itemId);
@@ -15,36 +15,36 @@ const extractPluginParamsFromProps = _ref => {
15
15
  apiRef,
16
16
  experimentalFeatures
17
17
  },
18
- plugins,
19
- rootRef
18
+ plugins
20
19
  } = _ref,
21
20
  props = (0, _objectWithoutPropertiesLoose2.default)(_ref.props, _excluded);
22
21
  const paramsLookup = {};
23
22
  plugins.forEach(plugin => {
24
23
  Object.assign(paramsLookup, plugin.params);
25
24
  });
26
- const pluginParams = {
27
- plugins,
28
- rootRef,
29
- slots: slots ?? {},
30
- slotProps: slotProps ?? {},
31
- experimentalFeatures: experimentalFeatures ?? {},
32
- apiRef
33
- };
34
- const otherProps = {};
25
+ const pluginParams = {};
26
+ const forwardedProps = {};
35
27
  Object.keys(props).forEach(propName => {
36
28
  const prop = props[propName];
37
29
  if (paramsLookup[propName]) {
38
30
  pluginParams[propName] = prop;
39
31
  } else {
40
- otherProps[propName] = prop;
32
+ forwardedProps[propName] = prop;
41
33
  }
42
34
  });
35
+ const defaultizedPluginParams = plugins.reduce((acc, plugin) => {
36
+ if (plugin.getDefaultizedParams) {
37
+ return plugin.getDefaultizedParams(acc);
38
+ }
39
+ return acc;
40
+ }, pluginParams);
43
41
  return {
44
- pluginParams,
45
- slots,
46
- slotProps,
47
- otherProps
42
+ apiRef,
43
+ forwardedProps,
44
+ pluginParams: defaultizedPluginParams,
45
+ slots: slots ?? {},
46
+ slotProps: slotProps ?? {},
47
+ experimentalFeatures: experimentalFeatures ?? {}
48
48
  };
49
49
  };
50
50
  exports.extractPluginParamsFromProps = extractPluginParamsFromProps;
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
12
12
  var _useTreeViewModels = require("./useTreeViewModels");
13
13
  var _corePlugins = require("../corePlugins");
14
+ var _extractPluginParamsFromProps = require("./extractPluginParamsFromProps");
14
15
  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); }
15
16
  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 && {}.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
17
  function useTreeViewApiInitialization(inputApiRef) {
@@ -23,62 +24,69 @@ function useTreeViewApiInitialization(inputApiRef) {
23
24
  }
24
25
  return fallbackPublicApiRef.current;
25
26
  }
26
- const useTreeView = inParams => {
27
- const plugins = [..._corePlugins.TREE_VIEW_CORE_PLUGINS, ...inParams.plugins];
28
- const params = plugins.reduce((acc, plugin) => {
29
- if (plugin.getDefaultizedParams) {
30
- return plugin.getDefaultizedParams(acc);
31
- }
32
- return acc;
33
- }, inParams);
34
- const models = (0, _useTreeViewModels.useTreeViewModels)(plugins, params);
27
+ const useTreeView = ({
28
+ plugins: inPlugins,
29
+ rootRef,
30
+ props
31
+ }) => {
32
+ const plugins = [..._corePlugins.TREE_VIEW_CORE_PLUGINS, ...inPlugins];
33
+ const {
34
+ pluginParams,
35
+ forwardedProps,
36
+ apiRef,
37
+ experimentalFeatures,
38
+ slots,
39
+ slotProps
40
+ } = (0, _extractPluginParamsFromProps.extractPluginParamsFromProps)({
41
+ plugins,
42
+ props
43
+ });
44
+ const models = (0, _useTreeViewModels.useTreeViewModels)(plugins, pluginParams);
35
45
  const instanceRef = React.useRef({});
36
46
  const instance = instanceRef.current;
37
- const publicAPI = useTreeViewApiInitialization(inParams.apiRef);
47
+ const publicAPI = useTreeViewApiInitialization(apiRef);
38
48
  const innerRootRef = React.useRef(null);
39
- const handleRootRef = (0, _useForkRef.default)(innerRootRef, inParams.rootRef);
49
+ const handleRootRef = (0, _useForkRef.default)(innerRootRef, rootRef);
40
50
  const [state, setState] = React.useState(() => {
41
51
  const temp = {};
42
52
  plugins.forEach(plugin => {
43
53
  if (plugin.getInitialState) {
44
- Object.assign(temp, plugin.getInitialState(params));
54
+ Object.assign(temp, plugin.getInitialState(pluginParams));
45
55
  }
46
56
  });
47
57
  return temp;
48
58
  });
49
- const rootPropsGetters = [];
50
- const contextValue = {
51
- publicAPI,
52
- instance: instance,
53
- rootRef: innerRootRef
59
+ const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
60
+ const wrapItem = ({
61
+ itemId,
62
+ children
63
+ }) => {
64
+ let finalChildren = children;
65
+ itemWrappers.forEach(itemWrapper => {
66
+ finalChildren = itemWrapper({
67
+ itemId,
68
+ children: finalChildren,
69
+ instance
70
+ });
71
+ });
72
+ return finalChildren;
54
73
  };
55
- const runPlugin = plugin => {
56
- const pluginResponse = plugin({
57
- instance,
58
- params,
59
- slots: params.slots,
60
- slotProps: params.slotProps,
61
- experimentalFeatures: params.experimentalFeatures,
62
- state,
63
- setState,
64
- rootRef: innerRootRef,
65
- models
74
+ const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
75
+ // The wrappers are reversed to ensure that the first wrapper is the outermost one.
76
+ .reverse();
77
+ const wrapRoot = ({
78
+ children
79
+ }) => {
80
+ let finalChildren = children;
81
+ rootWrappers.forEach(rootWrapper => {
82
+ finalChildren = rootWrapper({
83
+ children: finalChildren,
84
+ instance
85
+ });
66
86
  });
67
- if (pluginResponse.getRootProps) {
68
- rootPropsGetters.push(pluginResponse.getRootProps);
69
- }
70
- if (pluginResponse.publicAPI) {
71
- Object.assign(publicAPI, pluginResponse.publicAPI);
72
- }
73
- if (pluginResponse.instance) {
74
- Object.assign(instance, pluginResponse.instance);
75
- }
76
- if (pluginResponse.contextValue) {
77
- Object.assign(contextValue, pluginResponse.contextValue);
78
- }
87
+ return finalChildren;
79
88
  };
80
- plugins.forEach(runPlugin);
81
- contextValue.runItemPlugins = itemPluginProps => {
89
+ const runItemPlugins = itemPluginProps => {
82
90
  let finalRootRef = null;
83
91
  let finalContentRef = null;
84
92
  plugins.forEach(plugin => {
@@ -102,40 +110,45 @@ const useTreeView = inParams => {
102
110
  rootRef: finalRootRef
103
111
  };
104
112
  };
105
- const itemWrappers = plugins.map(plugin => plugin.wrapItem).filter(wrapItem => !!wrapItem);
106
- contextValue.wrapItem = ({
107
- itemId,
108
- children
109
- }) => {
110
- let finalChildren = children;
111
- itemWrappers.forEach(itemWrapper => {
112
- finalChildren = itemWrapper({
113
- itemId,
114
- children: finalChildren,
115
- instance
116
- });
117
- });
118
- return finalChildren;
113
+ const contextValue = {
114
+ publicAPI,
115
+ wrapItem,
116
+ wrapRoot,
117
+ runItemPlugins,
118
+ instance: instance,
119
+ rootRef: innerRootRef
119
120
  };
120
- const rootWrappers = plugins.map(plugin => plugin.wrapRoot).filter(wrapRoot => !!wrapRoot)
121
- // The wrappers are reversed to ensure that the first wrapper is the outermost one.
122
- .reverse();
123
- contextValue.wrapRoot = ({
124
- children
125
- }) => {
126
- let finalChildren = children;
127
- rootWrappers.forEach(rootWrapper => {
128
- finalChildren = rootWrapper({
129
- children: finalChildren,
130
- instance
131
- });
121
+ const rootPropsGetters = [];
122
+ const runPlugin = plugin => {
123
+ const pluginResponse = plugin({
124
+ instance,
125
+ params: pluginParams,
126
+ slots,
127
+ slotProps,
128
+ experimentalFeatures,
129
+ state,
130
+ setState,
131
+ rootRef: innerRootRef,
132
+ models
132
133
  });
133
- return finalChildren;
134
+ if (pluginResponse.getRootProps) {
135
+ rootPropsGetters.push(pluginResponse.getRootProps);
136
+ }
137
+ if (pluginResponse.publicAPI) {
138
+ Object.assign(publicAPI, pluginResponse.publicAPI);
139
+ }
140
+ if (pluginResponse.instance) {
141
+ Object.assign(instance, pluginResponse.instance);
142
+ }
143
+ if (pluginResponse.contextValue) {
144
+ Object.assign(contextValue, pluginResponse.contextValue);
145
+ }
134
146
  };
147
+ plugins.forEach(runPlugin);
135
148
  const getRootProps = (otherHandlers = {}) => {
136
149
  const rootProps = (0, _extends2.default)({
137
150
  role: 'tree'
138
- }, otherHandlers, {
151
+ }, forwardedProps, otherHandlers, {
139
152
  ref: handleRootRef
140
153
  });
141
154
  rootPropsGetters.forEach(rootPropsGetter => {
@@ -146,8 +159,8 @@ const useTreeView = inParams => {
146
159
  return {
147
160
  getRootProps,
148
161
  rootRef: handleRootRef,
149
- contextValue: contextValue,
150
- instance: instance
162
+ contextValue,
163
+ instance
151
164
  };
152
165
  };
153
166
  exports.useTreeView = useTreeView;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.escapeOperandAttributeSelector = escapeOperandAttributeSelector;
6
7
  exports.getActiveElement = void 0;
7
8
  // https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/
8
9
  const getActiveElement = (root = document) => {
@@ -15,4 +16,10 @@ const getActiveElement = (root = document) => {
15
16
  }
16
17
  return activeEl;
17
18
  };
18
- exports.getActiveElement = getActiveElement;
19
+
20
+ // TODO, eventually replaces this function with CSS.escape, once available in jsdom, either added manually or built in
21
+ // https://github.com/jsdom/jsdom/issues/1550#issuecomment-236734471
22
+ exports.getActiveElement = getActiveElement;
23
+ function escapeOperandAttributeSelector(operand) {
24
+ return operand.replace(/["\\]/g, '\\$&');
25
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createUseThemeProps = createUseThemeProps;
7
+ Object.defineProperty(exports, "styled", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _styles.styled;
11
+ }
12
+ });
13
+ var _styles = require("@mui/material/styles");
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
+ function createUseThemeProps(name) {
16
+ return _styles.useThemeProps;
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-tree-view",
3
- "version": "7.6.2",
3
+ "version": "7.7.1",
4
4
  "description": "The community edition of the Tree View components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,10 +33,10 @@
33
33
  "directory": "packages/x-tree-view"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.24.6",
36
+ "@babel/runtime": "^7.24.7",
37
37
  "@mui/base": "^5.0.0-beta.40",
38
- "@mui/system": "^5.15.15",
39
- "@mui/utils": "^5.15.14",
38
+ "@mui/system": "^5.15.20",
39
+ "@mui/utils": "^5.15.20",
40
40
  "@types/react-transition-group": "^4.4.10",
41
41
  "clsx": "^2.1.1",
42
42
  "prop-types": "^15.8.1",
@@ -1,2 +1,2 @@
1
- import { UseTreeItem2Parameters, UseTreeItem2ReturnValue } from './useTreeItem2.types';
2
- export declare const useTreeItem2: <TPlugins extends [import("../internals").UseTreeViewIdSignature, import("../internals").UseTreeViewItemsSignature, import("../internals").UseTreeViewExpansionSignature, import("../internals").UseTreeViewSelectionSignature, import("../internals").UseTreeViewFocusSignature, import("../internals").UseTreeViewKeyboardNavigationSignature, import("../internals").UseTreeViewIconsSignature] = [import("../internals").UseTreeViewIdSignature, import("../internals").UseTreeViewItemsSignature, import("../internals").UseTreeViewExpansionSignature, import("../internals").UseTreeViewSelectionSignature, import("../internals").UseTreeViewFocusSignature, import("../internals").UseTreeViewKeyboardNavigationSignature, import("../internals").UseTreeViewIconsSignature]>(parameters: UseTreeItem2Parameters) => UseTreeItem2ReturnValue<TPlugins>;
1
+ import { UseTreeItem2Parameters, UseTreeItem2ReturnValue, UseTreeItem2MinimalPlugins } from './useTreeItem2.types';
2
+ export declare const useTreeItem2: <TSignatures extends UseTreeItem2MinimalPlugins = UseTreeItem2MinimalPlugins, TOptionalSignatures extends readonly [] = readonly []>(parameters: UseTreeItem2Parameters) => UseTreeItem2ReturnValue<TSignatures, TOptionalSignatures>;
@@ -1,7 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { TreeViewItemId } from '../models';
3
3
  import { MuiCancellableEventHandler } from '../internals/models/MuiCancellableEvent';
4
- import { TreeViewAnyPluginSignature, TreeViewPublicAPI } from '../internals/models';
4
+ import { TreeViewPublicAPI } from '../internals/models';
5
+ import { UseTreeViewSelectionSignature } from '../internals/plugins/useTreeViewSelection';
6
+ import { UseTreeViewItemsSignature } from '../internals/plugins/useTreeViewItems';
7
+ import { UseTreeViewFocusSignature } from '../internals/plugins/useTreeViewFocus';
8
+ import { UseTreeViewKeyboardNavigationSignature } from '../internals/plugins/useTreeViewKeyboardNavigation';
5
9
  export interface UseTreeItem2Parameters {
6
10
  /**
7
11
  * The id attribute of the item. If not provided, it will be generated.
@@ -90,7 +94,7 @@ export interface UseTreeItem2Status {
90
94
  selected: boolean;
91
95
  disabled: boolean;
92
96
  }
93
- export interface UseTreeItem2ReturnValue<TPlugins extends readonly TreeViewAnyPluginSignature[]> {
97
+ export interface UseTreeItem2ReturnValue<TSignatures extends UseTreeItem2MinimalPlugins, TOptionalSignatures extends UseTreeItem2OptionalPlugins> {
94
98
  /**
95
99
  * Resolver for the root slot's props.
96
100
  * @param {ExternalProps} externalProps Additional props for the root slot
@@ -138,5 +142,18 @@ export interface UseTreeItem2ReturnValue<TPlugins extends readonly TreeViewAnyPl
138
142
  /**
139
143
  * The object the allows Tree View manipulation.
140
144
  */
141
- publicAPI: TreeViewPublicAPI<TPlugins>;
145
+ publicAPI: TreeViewPublicAPI<TSignatures, TOptionalSignatures>;
142
146
  }
147
+ /**
148
+ * Plugins that need to be present in the Tree View in order for `useTreeItem2` to work correctly.
149
+ */
150
+ export type UseTreeItem2MinimalPlugins = readonly [
151
+ UseTreeViewSelectionSignature,
152
+ UseTreeViewItemsSignature,
153
+ UseTreeViewFocusSignature,
154
+ UseTreeViewKeyboardNavigationSignature
155
+ ];
156
+ /**
157
+ * Plugins that `useTreeItem2` can use if they are present, but are not required.
158
+ */
159
+ export type UseTreeItem2OptionalPlugins = readonly [];
@@ -1,13 +0,0 @@
1
- import { UseTreeViewIdParameters } from './useTreeViewId';
2
- import { UseTreeViewItemsParameters } from './useTreeViewItems';
3
- import { UseTreeViewExpansionParameters } from './useTreeViewExpansion';
4
- import { UseTreeViewSelectionParameters } from './useTreeViewSelection';
5
- import { UseTreeViewFocusParameters } from './useTreeViewFocus';
6
- import { UseTreeViewIconsParameters } from './useTreeViewIcons';
7
- import { ConvertPluginsIntoSignatures, MergePluginsProperty } from '../models';
8
- export declare const DEFAULT_TREE_VIEW_PLUGINS: readonly [import("../models").TreeViewPlugin<import("./useTreeViewId").UseTreeViewIdSignature>, import("../models").TreeViewPlugin<import("./useTreeViewItems").UseTreeViewItemsSignature>, import("../models").TreeViewPlugin<import("./useTreeViewExpansion").UseTreeViewExpansionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewSelection").UseTreeViewSelectionSignature>, import("../models").TreeViewPlugin<import("./useTreeViewFocus").UseTreeViewFocusSignature>, import("../models").TreeViewPlugin<import("./useTreeViewKeyboardNavigation").UseTreeViewKeyboardNavigationSignature>, import("../models").TreeViewPlugin<import("./useTreeViewIcons").UseTreeViewIconsSignature>];
9
- export type DefaultTreeViewPlugins = ConvertPluginsIntoSignatures<typeof DEFAULT_TREE_VIEW_PLUGINS>;
10
- export type DefaultTreeViewPluginSlots = MergePluginsProperty<DefaultTreeViewPlugins, 'slots'>;
11
- export type DefaultTreeViewPluginSlotProps = MergePluginsProperty<DefaultTreeViewPlugins, 'slotProps'>;
12
- export interface DefaultTreeViewPluginParameters<R extends {}, Multiple extends boolean | undefined> extends UseTreeViewIdParameters, UseTreeViewItemsParameters<R>, UseTreeViewExpansionParameters, UseTreeViewFocusParameters, UseTreeViewSelectionParameters<Multiple>, UseTreeViewIconsParameters {
13
- }
@@ -1,10 +0,0 @@
1
- import { useTreeViewId } from './useTreeViewId';
2
- import { useTreeViewItems } from './useTreeViewItems';
3
- import { useTreeViewExpansion } from './useTreeViewExpansion';
4
- import { useTreeViewSelection } from './useTreeViewSelection';
5
- import { useTreeViewFocus } from './useTreeViewFocus';
6
- import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
7
- import { useTreeViewIcons } from './useTreeViewIcons';
8
- export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewItems, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
9
-
10
- // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -1,2 +0,0 @@
1
- export { DEFAULT_TREE_VIEW_PLUGINS } from './defaultPlugins';
2
- export type { DefaultTreeViewPlugins } from './defaultPlugins';
@@ -1 +0,0 @@
1
- export { DEFAULT_TREE_VIEW_PLUGINS } from './defaultPlugins';
@@ -1,18 +0,0 @@
1
- import * as React from 'react';
2
- import { ConvertPluginsIntoSignatures, MergePluginsProperty, TreeViewExperimentalFeatures, TreeViewPlugin, TreeViewPublicAPI } from '../models';
3
- import { UseTreeViewBaseParameters } from '../useTreeView/useTreeView.types';
4
- export declare const extractPluginParamsFromProps: <TPlugins extends readonly TreeViewPlugin<any>[], TSlots extends MergePluginsProperty<TPlugins, "slots">, TSlotProps extends MergePluginsProperty<TPlugins, "slotProps">, TProps extends {
5
- slots?: TSlots | undefined;
6
- slotProps?: TSlotProps | undefined;
7
- apiRef?: React.MutableRefObject<TreeViewPublicAPI<ConvertPluginsIntoSignatures<TPlugins>> | undefined> | undefined;
8
- experimentalFeatures?: TreeViewExperimentalFeatures<ConvertPluginsIntoSignatures<TPlugins>> | undefined;
9
- }>({ props: { slots, slotProps, apiRef, experimentalFeatures, ...props }, plugins, rootRef, }: {
10
- props: TProps;
11
- plugins: TPlugins;
12
- rootRef?: React.Ref<HTMLUListElement>;
13
- }) => {
14
- pluginParams: UseTreeViewBaseParameters<TPlugins> & MergePluginsProperty<ConvertPluginsIntoSignatures<TPlugins>, "params">;
15
- slots: TSlots | undefined;
16
- slotProps: TSlotProps | undefined;
17
- otherProps: Omit<TProps, keyof MergePluginsProperty<ConvertPluginsIntoSignatures<TPlugins>, "params">>;
18
- };
@@ -1,10 +0,0 @@
1
- import { useTreeViewId } from './useTreeViewId';
2
- import { useTreeViewItems } from './useTreeViewItems';
3
- import { useTreeViewExpansion } from './useTreeViewExpansion';
4
- import { useTreeViewSelection } from './useTreeViewSelection';
5
- import { useTreeViewFocus } from './useTreeViewFocus';
6
- import { useTreeViewKeyboardNavigation } from './useTreeViewKeyboardNavigation';
7
- import { useTreeViewIcons } from './useTreeViewIcons';
8
- export const DEFAULT_TREE_VIEW_PLUGINS = [useTreeViewId, useTreeViewItems, useTreeViewExpansion, useTreeViewSelection, useTreeViewFocus, useTreeViewKeyboardNavigation, useTreeViewIcons];
9
-
10
- // We can't infer this type from the plugin, otherwise we would lose the generics.
@@ -1 +0,0 @@
1
- export { DEFAULT_TREE_VIEW_PLUGINS } from './defaultPlugins';
@@ -1,16 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DEFAULT_TREE_VIEW_PLUGINS = void 0;
7
- var _useTreeViewId = require("./useTreeViewId");
8
- var _useTreeViewItems = require("./useTreeViewItems");
9
- var _useTreeViewExpansion = require("./useTreeViewExpansion");
10
- var _useTreeViewSelection = require("./useTreeViewSelection");
11
- var _useTreeViewFocus = require("./useTreeViewFocus");
12
- var _useTreeViewKeyboardNavigation = require("./useTreeViewKeyboardNavigation");
13
- var _useTreeViewIcons = require("./useTreeViewIcons");
14
- const DEFAULT_TREE_VIEW_PLUGINS = exports.DEFAULT_TREE_VIEW_PLUGINS = [_useTreeViewId.useTreeViewId, _useTreeViewItems.useTreeViewItems, _useTreeViewExpansion.useTreeViewExpansion, _useTreeViewSelection.useTreeViewSelection, _useTreeViewFocus.useTreeViewFocus, _useTreeViewKeyboardNavigation.useTreeViewKeyboardNavigation, _useTreeViewIcons.useTreeViewIcons];
15
-
16
- // We can't infer this type from the plugin, otherwise we would lose the generics.