@mui/x-tree-view 7.2.0 → 7.3.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.
- package/CHANGELOG.md +204 -2
- package/TreeItem/TreeItem.js +1 -2
- package/TreeItem/TreeItemContent.js +1 -2
- package/TreeItem/useTreeItemState.js +1 -3
- package/TreeItem2/TreeItem2.js +1 -2
- package/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/index.js +1 -1
- package/internals/TreeViewProvider/useTreeViewContext.d.ts +1 -1
- package/internals/hooks/useInstanceEventHandler.d.ts +2 -2
- package/internals/models/treeView.d.ts +0 -6
- package/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +6 -5
- package/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +7 -7
- package/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +31 -63
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.types.d.ts +32 -5
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.d.ts +9 -0
- package/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +21 -0
- package/internals/useTreeView/useTreeView.types.d.ts +1 -1
- package/internals/useTreeView/useTreeViewModels.d.ts +1 -1
- package/internals/utils/extractPluginParamsFromProps.d.ts +1 -1
- package/internals/utils/publishTreeViewEvent.d.ts +1 -1
- package/internals/utils/tree.d.ts +17 -1
- package/internals/utils/tree.js +34 -4
- package/modern/TreeItem/TreeItem.js +1 -2
- package/modern/TreeItem/TreeItemContent.js +1 -2
- package/modern/TreeItem/useTreeItemState.js +1 -3
- package/modern/TreeItem2/TreeItem2.js +1 -2
- package/modern/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/modern/index.js +1 -1
- package/modern/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +6 -5
- package/modern/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +7 -7
- package/modern/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +31 -63
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/modern/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +21 -0
- package/modern/internals/utils/tree.js +34 -4
- package/node/RichTreeView/RichTreeView.js +1 -1
- package/node/SimpleTreeView/SimpleTreeView.js +1 -1
- package/node/TreeItem/TreeItem.js +1 -1
- package/node/TreeItem/TreeItemContent.js +1 -1
- package/node/TreeItem/useTreeItemState.js +1 -3
- package/node/TreeItem2/TreeItem2.js +1 -1
- package/node/TreeItem2Icon/TreeItem2Icon.js +1 -1
- package/node/TreeView/TreeView.js +1 -1
- package/node/hooks/useTreeItem2Utils/useTreeItem2Utils.js +1 -3
- package/node/hooks/useTreeViewApiRef.js +1 -1
- package/node/icons/icons.js +1 -1
- package/node/index.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewChildrenItemProvider.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewContext.js +1 -1
- package/node/internals/TreeViewProvider/TreeViewProvider.js +1 -1
- package/node/internals/TreeViewProvider/useTreeViewContext.js +1 -1
- package/node/internals/corePlugins/useTreeViewInstanceEvents/useTreeViewInstanceEvents.js +1 -1
- package/node/internals/hooks/useInstanceEventHandler.js +1 -1
- package/node/internals/plugins/useTreeViewExpansion/useTreeViewExpansion.js +1 -1
- package/node/internals/plugins/useTreeViewFocus/useTreeViewFocus.js +7 -6
- package/node/internals/plugins/useTreeViewId/useTreeViewId.js +1 -1
- package/node/internals/plugins/useTreeViewItems/useTreeViewItems.js +1 -1
- package/node/internals/plugins/useTreeViewJSXItems/useTreeViewJSXItems.js +8 -8
- package/node/internals/plugins/useTreeViewKeyboardNavigation/useTreeViewKeyboardNavigation.js +32 -64
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.js +82 -94
- package/node/internals/plugins/useTreeViewSelection/useTreeViewSelection.utils.js +29 -0
- package/node/internals/useTreeView/useTreeView.js +1 -1
- package/node/internals/useTreeView/useTreeViewModels.js +1 -1
- package/node/internals/utils/tree.js +37 -5
- package/package.json +3 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,158 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 7.3.1
|
|
7
|
+
|
|
8
|
+
_Apr 26, 2024_
|
|
9
|
+
|
|
10
|
+
We'd like to offer a big thanks to the 13 contributors who made this release possible. Here are some highlights ✨:
|
|
11
|
+
|
|
12
|
+
- 🎁 Scatter Charts get a [z-axis to allow coloring data points independently from their coordinates](https://mui.com/x/react-charts/scatter/#color-scale)
|
|
13
|
+
- 🌍 Improve Catalan (ca-ES) and Spanish (es-ES) locales on the Date and Time Pickers
|
|
14
|
+
- 🐞 Bugfixes
|
|
15
|
+
- 📚 Documentation improvements
|
|
16
|
+
|
|
17
|
+
### Data Grid
|
|
18
|
+
|
|
19
|
+
#### `@mui/x-data-grid@7.3.1`
|
|
20
|
+
|
|
21
|
+
- [DataGrid] Fix date filtering for negative timezone offsets (#12836) @cherniavskii
|
|
22
|
+
- [DataGrid] Fix flex column width when used with pinned columns (#12849) @romgrk
|
|
23
|
+
- [DataGrid] Fix group header resize (#12863) @arminmeh
|
|
24
|
+
- [DataGrid] Pass slot props to `columnHeaders` slot (#12768) @cherniavskii
|
|
25
|
+
|
|
26
|
+
#### `@mui/x-data-grid-pro@7.3.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
27
|
+
|
|
28
|
+
Same changes as in `@mui/x-data-grid@7.3.1`.
|
|
29
|
+
|
|
30
|
+
#### `@mui/x-data-grid-premium@7.3.1` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
31
|
+
|
|
32
|
+
Same changes as in `@mui/x-data-grid-pro@7.3.1`.
|
|
33
|
+
|
|
34
|
+
### Date and Time Pickers
|
|
35
|
+
|
|
36
|
+
#### `@mui/x-date-pickers@7.3.1`
|
|
37
|
+
|
|
38
|
+
- [l10n] Improve Catalan (ca-ES) locale (#12856) @soler1212
|
|
39
|
+
- [l10n] Improve Spanish (es-ES) locale (#12858) @soler1212
|
|
40
|
+
|
|
41
|
+
#### `@mui/x-date-pickers-pro@7.3.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
42
|
+
|
|
43
|
+
Same changes as in `@mui/x-date-pickers@7.3.1`.
|
|
44
|
+
|
|
45
|
+
### Charts
|
|
46
|
+
|
|
47
|
+
#### `@mui/x-charts@7.3.1`
|
|
48
|
+
|
|
49
|
+
- [charts] Add documentation on border radius alternative for `BarCharts` (#12859) @JCQuintas
|
|
50
|
+
- [charts] Add z-axis to colorize scatter charts (#12738) @alexfauquette
|
|
51
|
+
- [charts] Fix left/bottomAxis not picking up default axis id (#12894) @JCQuintas
|
|
52
|
+
- [charts] Improve default tooltip content (#12257) @oliviertassinari
|
|
53
|
+
- [charts] Round y values for bar chart (#12846) @alexfauquette
|
|
54
|
+
|
|
55
|
+
### Tree View
|
|
56
|
+
|
|
57
|
+
#### `@mui/x-tree-view@7.3.1`
|
|
58
|
+
|
|
59
|
+
- [TreeView] Remove un-needed `aria-activedescendant` attribute (#12867) @flaviendelangle
|
|
60
|
+
- [TreeView] Rework the selection internals (#12703) @flaviendelangle
|
|
61
|
+
- [TreeView] Use the order in which the items are displayed for `type-ahead` (#12827) @flaviendelangle
|
|
62
|
+
|
|
63
|
+
### Docs
|
|
64
|
+
|
|
65
|
+
- [docs] Add demo for styling charts with `sx` props (#12791) @derek-0000
|
|
66
|
+
- [docs] Cover webpack 4 support in migration guide (#12710) @cherniavskii
|
|
67
|
+
- [docs] Document interfaces for charts (#12656) @alexfauquette
|
|
68
|
+
- [docs] Fix Vale regression (#12862) @oliviertassinari
|
|
69
|
+
- [docs] Improve Data Grid migration guide (#12879) @MBilalShafi
|
|
70
|
+
- [docs] Update Column features availability (#12865) @DanailH
|
|
71
|
+
|
|
72
|
+
### Core
|
|
73
|
+
|
|
74
|
+
- [core] Fix `l10n` GH workflow (#12895) @LukasTy
|
|
75
|
+
- [core] Match Base UI and Toolpad @oliviertassinari
|
|
76
|
+
- [core] Remove redundant `setupFiles` entries in `package.json` (#12899) @LukasTy
|
|
77
|
+
- [core] Use `describeTreeView` for focus tests (#12698) @flaviendelangle
|
|
78
|
+
- [core] Use `describeTreeView` for type-ahead tests (#12811) @flaviendelangle
|
|
79
|
+
- [code-infra] Change package manager to `pnpm` (#11875) @LukasTy
|
|
80
|
+
- [code-infra] Closer sync with eslint config of codebase (#12864) @oliviertassinari
|
|
81
|
+
- [support-infra] Add release announcement to GitHub workflows (#11867) (#12843) @michelengelen
|
|
82
|
+
|
|
83
|
+
## 7.3.0
|
|
84
|
+
|
|
85
|
+
_Apr 18, 2024_
|
|
86
|
+
|
|
87
|
+
We'd like to offer a big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
|
|
88
|
+
|
|
89
|
+
- 📄 Support [unknown and estimated row count in server-side pagination](https://mui.com/x/react-data-grid/pagination/#index-based-pagination) (#12490) @MBilalShafi
|
|
90
|
+
- 🎨 Support color scales in Charts (#12490) @alexfauquette
|
|
91
|
+
Add a [`colorMap` configuration](https://mui.com/x/react-charts/styling/#values-color) to an axis, and the chart will use it to select colors.
|
|
92
|
+
Each impacted chart ([bar charts](https://mui.com/x/react-charts/bars/#color-scale), [line charts](https://mui.com/x/react-charts/lines/#color-scale), [scatter charts](https://mui.com/x/react-charts/scatter/#color-scale)) has a dedicated section explaining how this color map is impacting it.
|
|
93
|
+
|
|
94
|
+
<img src="https://github.com/mui/mui-x/assets/45398769/f0066606-3486-4c4e-b3be-7fdd56d763c3" alt="scatter chart with gradient along y-axis" />
|
|
95
|
+
|
|
96
|
+
- 🌍 Improve Danish (da-DK) locale on the Data Grid
|
|
97
|
+
- 🐞 Bugfixes
|
|
98
|
+
- 📚 Documentation improvements
|
|
99
|
+
|
|
100
|
+
### Data Grid
|
|
101
|
+
|
|
102
|
+
#### `@mui/x-data-grid@7.3.0`
|
|
103
|
+
|
|
104
|
+
- [DataGrid] Fix calling `onCellEditStop` on error (#12747) @sai6855
|
|
105
|
+
- [DataGrid] Fix column resize (#12792) @romgrk
|
|
106
|
+
- [DataGrid] Fix column separators (#12808) @romgrk
|
|
107
|
+
- [DataGrid] Limit panel width to not exceed screen width (#12799) @cherniavskii
|
|
108
|
+
- [DataGrid] Support advanced server-side pagination use cases (#12474) @MBilalShafi
|
|
109
|
+
- [DataGrid] Support state export and restore on grid density (#12671) @MBilalShafi
|
|
110
|
+
- [l10n] Improve Danish (da-DK) locale (#12784) @EmilBahnsen
|
|
111
|
+
|
|
112
|
+
#### `@mui/x-data-grid-pro@7.3.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
113
|
+
|
|
114
|
+
Same changes as in `@mui/x-data-grid@7.3.0`, plus:
|
|
115
|
+
|
|
116
|
+
- [DataGridPro] Implement header filter height (#12666) @romgrk
|
|
117
|
+
|
|
118
|
+
#### `@mui/x-data-grid-premium@7.3.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
119
|
+
|
|
120
|
+
Same changes as in `@mui/x-data-grid-pro@7.3.0`.
|
|
121
|
+
|
|
122
|
+
### Charts
|
|
123
|
+
|
|
124
|
+
#### Breaking change
|
|
125
|
+
|
|
126
|
+
A typo fix:
|
|
127
|
+
|
|
128
|
+
```diff
|
|
129
|
+
- ContinuouseScaleName
|
|
130
|
+
+ ContinuousScaleName
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### `@mui/x-charts@7.3.0`
|
|
134
|
+
|
|
135
|
+
- [charts] Add `dataIndex` to series `valueFormatter` (#12745) @JCQuintas
|
|
136
|
+
- [charts] Add color scale (#12490) @alexfauquette
|
|
137
|
+
- [charts] Do not document the usage of `DEFAULT_X_AXIS_KEY` and `DEFAULT_Y_AXIS_KEY` (#12780) @alexfauquette
|
|
138
|
+
- [charts] Export more utils (#12744) @alexfauquette
|
|
139
|
+
- [charts] Fix passing slot props down to `PieArcLabel` (#12806) @JCQuintas
|
|
140
|
+
|
|
141
|
+
### Tree View
|
|
142
|
+
|
|
143
|
+
#### `@mui/x-tree-view@7.3.0`
|
|
144
|
+
|
|
145
|
+
- [TreeView] Support `defaultMuiPrevented` on the `onFocus` prop of the root slot (#12813) @flaviendelangle
|
|
146
|
+
|
|
147
|
+
### Docs
|
|
148
|
+
|
|
149
|
+
- [docs] Add grid cell display example to the migration guide (#12793) @romgrk
|
|
150
|
+
- [docs] Use charts classes objects (#12781) @alexfauquette
|
|
151
|
+
- [docs] Fix layout shift on demos (#12816) @zanivan
|
|
152
|
+
- [test] Increase timeout for test that sometimes fail on `DateTimeRangePicker` (#12786) @LukasTy
|
|
153
|
+
|
|
154
|
+
### Core
|
|
155
|
+
|
|
156
|
+
- [docs-infra] Prepare infra to document charts interfaces (#12653) @alexfauquette
|
|
157
|
+
|
|
6
158
|
## 7.2.0
|
|
7
159
|
|
|
8
160
|
_Apr 12, 2024_
|
|
@@ -168,7 +320,7 @@ Same changes as in `@mui/x-date-pickers@7.1.1`, plus:
|
|
|
168
320
|
- [docs] Fix type arguments in Custom Field page (#12619) @Juneezee
|
|
169
321
|
- [docs] Fix typo in `getItemId` prop description (#12637) @flaviendelangle
|
|
170
322
|
- [docs] Make the Charts `margin` usage more visible (#12591) @alexfauquette
|
|
171
|
-
- [docs] Match IE 11 spacing with Material
|
|
323
|
+
- [docs] Match IE 11 spacing with Material UI @oliviertassinari
|
|
172
324
|
- [docs] Move data grid interfaces to standard API page layout (#12016) @alexfauquette
|
|
173
325
|
- [docs] Remove ` around @default values (#12158) @alexfauquette
|
|
174
326
|
- [docs] Remove `day` from the default `dayOfWeekFormatter` function params (#12644) @LukasTy
|
|
@@ -431,7 +583,7 @@ Same changes as in `@mui/x-date-pickers@7.0.0`, plus:
|
|
|
431
583
|
- [docs] Update links to v6 (#12496) @cherniavskii
|
|
432
584
|
- [docs] Update links to v7 docs (#12500) @noraleonte
|
|
433
585
|
- [docs] Update supported versions (#12508) @joserodolfofreitas
|
|
434
|
-
- [docs] Update "What's new in MUI
|
|
586
|
+
- [docs] Update "What's new in MUI X" page #12527 @cherniavskii
|
|
435
587
|
|
|
436
588
|
### Core
|
|
437
589
|
|
|
@@ -3058,6 +3210,56 @@ Here is an example of the renaming for the `<ChartsTooltip />` component.
|
|
|
3058
3210
|
- [core] Update release instructions as per v7 configuration (#10962) @MBilalShafi
|
|
3059
3211
|
- [license] Correctly throw errors (#10924) @oliviertassinari
|
|
3060
3212
|
|
|
3213
|
+
## 6.19.11
|
|
3214
|
+
|
|
3215
|
+
_Apr 18, 2024_
|
|
3216
|
+
|
|
3217
|
+
We'd like to offer a big thanks to the 1 contributor who made this release possible. Here are some highlights ✨:
|
|
3218
|
+
|
|
3219
|
+
- 🐞 Bugfixes
|
|
3220
|
+
|
|
3221
|
+
### Data Grid
|
|
3222
|
+
|
|
3223
|
+
#### `@mui/x-data-grid@6.19.11`
|
|
3224
|
+
|
|
3225
|
+
- [DataGrid] Fix virtualization memory leak (#12812) @romgrk
|
|
3226
|
+
|
|
3227
|
+
#### `@mui/x-data-grid-pro@6.19.11` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
3228
|
+
|
|
3229
|
+
Same changes as in `@mui/x-data-grid@6.19.11`.
|
|
3230
|
+
|
|
3231
|
+
#### `@mui/x-data-grid-premium@6.19.11` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
3232
|
+
|
|
3233
|
+
Same changes as in `@mui/x-data-grid-pro@6.19.11`.
|
|
3234
|
+
|
|
3235
|
+
## 6.19.10
|
|
3236
|
+
|
|
3237
|
+
_Apr 12, 2024_
|
|
3238
|
+
|
|
3239
|
+
We'd like to offer a big thanks to the 2 contributors who made this release possible. Here are some highlights ✨:
|
|
3240
|
+
|
|
3241
|
+
- 🐞 Bugfixes
|
|
3242
|
+
- 📚 Documentation improvements
|
|
3243
|
+
|
|
3244
|
+
### Data Grid
|
|
3245
|
+
|
|
3246
|
+
#### `@mui/x-data-grid@6.19.10`
|
|
3247
|
+
|
|
3248
|
+
- [DataGrid] Do not escape double quotes when copying to clipboard (#12734) @cherniavskii
|
|
3249
|
+
- [DataGrid] Fix bug in suspense (#12754) @cherniavskii
|
|
3250
|
+
|
|
3251
|
+
#### `@mui/x-data-grid-pro@6.19.10` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
3252
|
+
|
|
3253
|
+
Same changes as in `@mui/x-data-grid@6.19.10`.
|
|
3254
|
+
|
|
3255
|
+
#### `@mui/x-data-grid-premium@6.19.10` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
3256
|
+
|
|
3257
|
+
Same changes as in `@mui/x-data-grid-pro@6.19.10`.
|
|
3258
|
+
|
|
3259
|
+
### Core
|
|
3260
|
+
|
|
3261
|
+
- [core] Update the docs release source branch (#12685) @LukasTy
|
|
3262
|
+
|
|
3061
3263
|
## 6.19.9
|
|
3062
3264
|
|
|
3063
3265
|
_Apr 5, 2024_
|
package/TreeItem/TreeItem.js
CHANGED
|
@@ -19,8 +19,7 @@ import { treeItemClasses, getTreeItemUtilityClass } from './treeItemClasses';
|
|
|
19
19
|
import { useTreeViewContext } from '../internals/TreeViewProvider/useTreeViewContext';
|
|
20
20
|
import { TreeViewCollapseIcon, TreeViewExpandIcon } from '../icons';
|
|
21
21
|
import { TreeItem2Provider } from '../TreeItem2Provider';
|
|
22
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
23
|
const useUtilityClasses = ownerState => {
|
|
25
24
|
const {
|
|
26
25
|
classes
|
|
@@ -5,8 +5,7 @@ import * as React from 'react';
|
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
7
7
|
import { useTreeItemState } from './useTreeItemState';
|
|
8
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
9
|
/**
|
|
11
10
|
* @ignore - internal component.
|
|
12
11
|
*/
|
|
@@ -32,9 +32,7 @@ export function useTreeItemState(itemId) {
|
|
|
32
32
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
33
33
|
if (multiple) {
|
|
34
34
|
if (event.shiftKey) {
|
|
35
|
-
instance.
|
|
36
|
-
end: itemId
|
|
37
|
-
});
|
|
35
|
+
instance.expandSelectionRange(event, itemId);
|
|
38
36
|
} else {
|
|
39
37
|
instance.selectItem(event, itemId, true);
|
|
40
38
|
}
|
package/TreeItem2/TreeItem2.js
CHANGED
|
@@ -14,8 +14,7 @@ import { unstable_useTreeItem2 as useTreeItem2 } from '../useTreeItem2';
|
|
|
14
14
|
import { getTreeItemUtilityClass, treeItemClasses } from '../TreeItem';
|
|
15
15
|
import { TreeItem2Icon } from '../TreeItem2Icon';
|
|
16
16
|
import { TreeItem2Provider } from '../TreeItem2Provider';
|
|
17
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
18
|
export const TreeItem2Root = styled('li', {
|
|
20
19
|
name: 'MuiTreeItem2',
|
|
21
20
|
slot: 'Root',
|
|
@@ -40,9 +40,7 @@ export const useTreeItem2Utils = ({
|
|
|
40
40
|
const multiple = multiSelect && (event.shiftKey || event.ctrlKey || event.metaKey);
|
|
41
41
|
if (multiple) {
|
|
42
42
|
if (event.shiftKey) {
|
|
43
|
-
instance.
|
|
44
|
-
end: itemId
|
|
45
|
-
});
|
|
43
|
+
instance.expandSelectionRange(event, itemId);
|
|
46
44
|
} else {
|
|
47
45
|
instance.selectItem(event, itemId, true);
|
|
48
46
|
}
|
package/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TreeViewAnyPluginSignature } from '../models';
|
|
2
2
|
import { TreeViewContextValue } from './TreeViewProvider.types';
|
|
3
|
-
export declare const useTreeViewContext: <TPlugins extends readonly TreeViewAnyPluginSignature[]>() => TreeViewContextValue<TPlugins
|
|
3
|
+
export declare const useTreeViewContext: <TPlugins extends readonly TreeViewAnyPluginSignature[]>() => NonNullable<TreeViewContextValue<TPlugins>>;
|
|
@@ -7,9 +7,9 @@ interface RegistryContainer {
|
|
|
7
7
|
}
|
|
8
8
|
export declare function createUseInstanceEventHandler(registryContainer: RegistryContainer): <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
9
9
|
$$signature: TreeViewAnyPluginSignature;
|
|
10
|
-
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance[
|
|
10
|
+
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance['$$signature']>[E]>) => void;
|
|
11
11
|
export declare const unstable_resetCleanupTracking: () => void;
|
|
12
12
|
export declare const useInstanceEventHandler: <Instance extends UseTreeViewInstanceEventsInstance & {
|
|
13
13
|
$$signature: TreeViewAnyPluginSignature;
|
|
14
|
-
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance[
|
|
14
|
+
}, E extends keyof Instance["$$signature"]["events"] | keyof import("../models").MergePluginsProperty<[import("../corePlugins").TreeViewCorePluginsSignature, ...Instance["$$signature"]["dependantPlugins"]], "events">>(instance: Instance, eventName: E, handler: TreeViewEventListener<TreeViewUsedEvents<Instance['$$signature']>[E]>) => void;
|
|
15
15
|
export {};
|
|
@@ -11,12 +11,6 @@ export interface TreeViewItemMeta {
|
|
|
11
11
|
*/
|
|
12
12
|
label?: string;
|
|
13
13
|
}
|
|
14
|
-
export interface TreeViewItemRange {
|
|
15
|
-
start?: string | null;
|
|
16
|
-
end?: string | null;
|
|
17
|
-
next?: string | null;
|
|
18
|
-
current?: string;
|
|
19
|
-
}
|
|
20
14
|
export interface TreeViewModel<TValue> {
|
|
21
15
|
name: string;
|
|
22
16
|
value: TValue;
|
|
@@ -94,19 +94,20 @@ export const useTreeViewFocus = ({
|
|
|
94
94
|
instance.focusDefaultItem(null);
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
|
-
const
|
|
97
|
+
const createRootHandleFocus = otherHandlers => event => {
|
|
98
98
|
otherHandlers.onFocus?.(event);
|
|
99
|
+
if (event.defaultMuiPrevented) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
99
103
|
// if the event bubbled (which is React specific) we don't want to steal focus
|
|
100
104
|
if (event.target === event.currentTarget) {
|
|
101
105
|
instance.focusDefaultItem(event);
|
|
102
106
|
}
|
|
103
107
|
};
|
|
104
|
-
const focusedItem = instance.getItemMeta(state.focusedItemId);
|
|
105
|
-
const activeDescendant = focusedItem ? instance.getTreeItemIdAttribute(focusedItem.id, focusedItem.idAttribute) : null;
|
|
106
108
|
return {
|
|
107
109
|
getRootProps: otherHandlers => ({
|
|
108
|
-
onFocus:
|
|
109
|
-
'aria-activedescendant': activeDescendant ?? undefined
|
|
110
|
+
onFocus: createRootHandleFocus(otherHandlers)
|
|
110
111
|
}),
|
|
111
112
|
publicAPI: {
|
|
112
113
|
focusItem
|
|
@@ -86,6 +86,12 @@ export const useTreeViewJSXItems = ({
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
};
|
|
89
|
+
const isItemExpandable = reactChildren => {
|
|
90
|
+
if (Array.isArray(reactChildren)) {
|
|
91
|
+
return reactChildren.length > 0 && reactChildren.some(isItemExpandable);
|
|
92
|
+
}
|
|
93
|
+
return Boolean(reactChildren);
|
|
94
|
+
};
|
|
89
95
|
const useTreeViewJSXItemsItemPlugin = ({
|
|
90
96
|
props,
|
|
91
97
|
rootRef,
|
|
@@ -110,13 +116,7 @@ const useTreeViewJSXItemsItemPlugin = ({
|
|
|
110
116
|
unregisterChild,
|
|
111
117
|
parentId
|
|
112
118
|
} = parentContext;
|
|
113
|
-
const
|
|
114
|
-
if (Array.isArray(reactChildren)) {
|
|
115
|
-
return reactChildren.length > 0 && reactChildren.some(isExpandable);
|
|
116
|
-
}
|
|
117
|
-
return Boolean(reactChildren);
|
|
118
|
-
};
|
|
119
|
-
const expandable = isExpandable(children);
|
|
119
|
+
const expandable = isItemExpandable(children);
|
|
120
120
|
const pluginContentRef = React.useRef(null);
|
|
121
121
|
const handleContentRef = useForkRef(pluginContentRef, contentRef);
|
|
122
122
|
|
|
@@ -5,14 +5,6 @@ import { getFirstNavigableItem, getLastNavigableItem, getNextNavigableItem, getP
|
|
|
5
5
|
function isPrintableCharacter(string) {
|
|
6
6
|
return !!string && string.length === 1 && !!string.match(/\S/);
|
|
7
7
|
}
|
|
8
|
-
function findNextFirstChar(firstChars, startIndex, char) {
|
|
9
|
-
for (let i = startIndex; i < firstChars.length; i += 1) {
|
|
10
|
-
if (char === firstChars[i]) {
|
|
11
|
-
return i;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return -1;
|
|
15
|
-
}
|
|
16
8
|
export const useTreeViewKeyboardNavigation = ({
|
|
17
9
|
instance,
|
|
18
10
|
params,
|
|
@@ -35,42 +27,29 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
35
27
|
Object.values(state.items.itemMetaMap).forEach(processItem);
|
|
36
28
|
firstCharMap.current = newFirstCharMap;
|
|
37
29
|
}, [state.items.itemMetaMap, params.getItemId, instance]);
|
|
38
|
-
const getFirstMatchingItem = (itemId,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
30
|
+
const getFirstMatchingItem = (itemId, query) => {
|
|
31
|
+
const cleanQuery = query.toLowerCase();
|
|
32
|
+
const getNextItem = itemIdToCheck => {
|
|
33
|
+
const nextItemId = getNextNavigableItem(instance, itemIdToCheck);
|
|
34
|
+
// We reached the end of the tree, check from the beginning
|
|
35
|
+
if (nextItemId === null) {
|
|
36
|
+
return getFirstNavigableItem(instance);
|
|
37
|
+
}
|
|
38
|
+
return nextItemId;
|
|
39
|
+
};
|
|
40
|
+
let matchingItemId = null;
|
|
41
|
+
let currentItemId = getNextItem(itemId);
|
|
42
|
+
const checkedItems = {};
|
|
43
|
+
// The "!checkedItems[currentItemId]" condition avoids an infinite loop when there is no matching item.
|
|
44
|
+
while (matchingItemId == null && !checkedItems[currentItemId]) {
|
|
45
|
+
if (firstCharMap.current[currentItemId] === cleanQuery) {
|
|
46
|
+
matchingItemId = currentItemId;
|
|
47
|
+
} else {
|
|
48
|
+
checkedItems[currentItemId] = true;
|
|
49
|
+
currentItemId = getNextItem(currentItemId);
|
|
52
50
|
}
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Get start index for search based on position of currentItem
|
|
56
|
-
start = firstCharIds.indexOf(itemId) + 1;
|
|
57
|
-
if (start >= firstCharIds.length) {
|
|
58
|
-
start = 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Check remaining slots in the menu
|
|
62
|
-
index = findNextFirstChar(firstChars, start, lowercaseChar);
|
|
63
|
-
|
|
64
|
-
// If not found in remaining slots, check from beginning
|
|
65
|
-
if (index === -1) {
|
|
66
|
-
index = findNextFirstChar(firstChars, 0, lowercaseChar);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// If a match was found...
|
|
70
|
-
if (index > -1) {
|
|
71
|
-
return firstCharIds[index];
|
|
72
51
|
}
|
|
73
|
-
return
|
|
52
|
+
return matchingItemId;
|
|
74
53
|
};
|
|
75
54
|
const canToggleItemSelection = itemId => !params.disableSelection && !instance.isItemDisabled(itemId);
|
|
76
55
|
const canToggleItemExpansion = itemId => {
|
|
@@ -95,9 +74,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
95
74
|
{
|
|
96
75
|
event.preventDefault();
|
|
97
76
|
if (params.multiSelect && event.shiftKey) {
|
|
98
|
-
instance.
|
|
99
|
-
end: itemId
|
|
100
|
-
});
|
|
77
|
+
instance.expandSelectionRange(event, itemId);
|
|
101
78
|
} else if (params.multiSelect) {
|
|
102
79
|
instance.selectItem(event, itemId, true);
|
|
103
80
|
} else {
|
|
@@ -136,10 +113,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
136
113
|
// Multi select behavior when pressing Shift + ArrowDown
|
|
137
114
|
// Toggles the selection state of the next item
|
|
138
115
|
if (params.multiSelect && event.shiftKey && canToggleItemSelection(nextItem)) {
|
|
139
|
-
instance.
|
|
140
|
-
end: nextItem,
|
|
141
|
-
current: itemId
|
|
142
|
-
}, true);
|
|
116
|
+
instance.selectItemFromArrowNavigation(event, itemId, nextItem);
|
|
143
117
|
}
|
|
144
118
|
}
|
|
145
119
|
break;
|
|
@@ -156,10 +130,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
156
130
|
// Multi select behavior when pressing Shift + ArrowUp
|
|
157
131
|
// Toggles the selection state of the previous item
|
|
158
132
|
if (params.multiSelect && event.shiftKey && canToggleItemSelection(previousItem)) {
|
|
159
|
-
instance.
|
|
160
|
-
end: previousItem,
|
|
161
|
-
current: itemId
|
|
162
|
-
}, true);
|
|
133
|
+
instance.selectItemFromArrowNavigation(event, itemId, previousItem);
|
|
163
134
|
}
|
|
164
135
|
}
|
|
165
136
|
break;
|
|
@@ -202,12 +173,12 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
202
173
|
// Focuses the first item in the tree
|
|
203
174
|
case key === 'Home':
|
|
204
175
|
{
|
|
205
|
-
instance.focusItem(event, getFirstNavigableItem(instance));
|
|
206
|
-
|
|
207
176
|
// Multi select behavior when pressing Ctrl + Shift + Home
|
|
208
177
|
// Selects the focused item and all items up to the first item.
|
|
209
178
|
if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
210
|
-
instance.
|
|
179
|
+
instance.selectRangeFromStartToItem(event, itemId);
|
|
180
|
+
} else {
|
|
181
|
+
instance.focusItem(event, getFirstNavigableItem(instance));
|
|
211
182
|
}
|
|
212
183
|
event.preventDefault();
|
|
213
184
|
break;
|
|
@@ -216,12 +187,12 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
216
187
|
// Focuses the last item in the tree
|
|
217
188
|
case key === 'End':
|
|
218
189
|
{
|
|
219
|
-
instance.focusItem(event, getLastNavigableItem(instance));
|
|
220
|
-
|
|
221
190
|
// Multi select behavior when pressing Ctrl + Shirt + End
|
|
222
191
|
// Selects the focused item and all the items down to the last item.
|
|
223
192
|
if (canToggleItemSelection(itemId) && params.multiSelect && ctrlPressed && event.shiftKey) {
|
|
224
|
-
instance.
|
|
193
|
+
instance.selectRangeFromItemToEnd(event, itemId);
|
|
194
|
+
} else {
|
|
195
|
+
instance.focusItem(event, getLastNavigableItem(instance));
|
|
225
196
|
}
|
|
226
197
|
event.preventDefault();
|
|
227
198
|
break;
|
|
@@ -239,10 +210,7 @@ export const useTreeViewKeyboardNavigation = ({
|
|
|
239
210
|
// Selects all the items
|
|
240
211
|
case key === 'a' && ctrlPressed && params.multiSelect && !params.disableSelection:
|
|
241
212
|
{
|
|
242
|
-
instance.
|
|
243
|
-
start: getFirstNavigableItem(instance),
|
|
244
|
-
end: getLastNavigableItem(instance)
|
|
245
|
-
});
|
|
213
|
+
instance.selectAllNavigableItems(event);
|
|
246
214
|
event.preventDefault();
|
|
247
215
|
break;
|
|
248
216
|
}
|