@fluentui/react-tree 9.0.0-beta.30 → 9.0.0-beta.32
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.json +169 -1
- package/CHANGELOG.md +43 -2
- package/dist/index.d.ts +16 -15
- package/lib/components/FlatTree/FlatTree.js +6 -2
- package/lib/components/FlatTree/FlatTree.js.map +1 -1
- package/lib/components/FlatTree/index.js +2 -1
- package/lib/components/FlatTree/index.js.map +1 -1
- package/lib/components/FlatTree/renderFlatTree.js +2 -0
- package/lib/components/FlatTree/renderFlatTree.js.map +1 -0
- package/lib/components/FlatTree/useFlatControllableCheckedItems.js +27 -14
- package/lib/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -1
- package/lib/components/FlatTree/useFlatTreeContextValues.js +2 -0
- package/lib/components/FlatTree/useFlatTreeContextValues.js.map +1 -0
- package/lib/components/FlatTree/useFlatTreeStyles.styles.js +1 -1
- package/lib/components/FlatTree/useHeadlessFlatTree.js +13 -5
- package/lib/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
- package/lib/components/Tree/Tree.js +2 -1
- package/lib/components/Tree/Tree.js.map +1 -1
- package/lib/components/Tree/Tree.types.js.map +1 -1
- package/lib/components/Tree/renderTree.js +3 -3
- package/lib/components/Tree/renderTree.js.map +1 -1
- package/lib/components/Tree/useNestedControllableCheckedItems.js +22 -0
- package/lib/components/Tree/useNestedControllableCheckedItems.js.map +1 -0
- package/lib/components/Tree/useTree.js +27 -17
- package/lib/components/Tree/useTree.js.map +1 -1
- package/lib/components/Tree/useTreeStyles.styles.js +1 -1
- package/lib/components/TreeItem/renderTreeItem.js +4 -4
- package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItem.js +7 -11
- package/lib/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItemStyles.styles.js +1 -1
- package/lib/components/TreeItemLayout/renderTreeItemLayout.js +4 -4
- package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayout.js +27 -19
- package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +5 -5
- package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +5 -5
- package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +9 -7
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +7 -7
- package/lib/contexts/treeItemContext.js +1 -1
- package/lib/contexts/treeItemContext.js.map +1 -1
- package/lib/hooks/useRootTree.js +4 -2
- package/lib/hooks/useRootTree.js.map +1 -1
- package/lib/hooks/useSubtree.js +4 -2
- package/lib/hooks/useSubtree.js.map +1 -1
- package/lib/utils/createHeadlessTree.js +2 -1
- package/lib/utils/createHeadlessTree.js.map +1 -1
- package/lib/utils/getTreeItemValueFromElement.js.map +1 -1
- package/lib-commonjs/components/FlatTree/FlatTree.js +4 -3
- package/lib-commonjs/components/FlatTree/FlatTree.js.map +1 -1
- package/lib-commonjs/components/FlatTree/index.js +2 -11
- package/lib-commonjs/components/FlatTree/index.js.map +1 -1
- package/lib-commonjs/components/FlatTree/renderFlatTree.js +10 -0
- package/lib-commonjs/components/FlatTree/renderFlatTree.js.map +1 -0
- package/lib-commonjs/components/FlatTree/useFlatControllableCheckedItems.js +27 -14
- package/lib-commonjs/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -1
- package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js +10 -0
- package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js.map +1 -0
- package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js +2 -2
- package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js.map +1 -1
- package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js +13 -5
- package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
- package/lib-commonjs/components/Tree/Tree.js.map +1 -1
- package/lib-commonjs/components/Tree/renderTree.js +2 -2
- package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useNestedControllableCheckedItems.js +37 -0
- package/lib-commonjs/components/Tree/useNestedControllableCheckedItems.js.map +1 -0
- package/lib-commonjs/components/Tree/useTree.js +27 -17
- package/lib-commonjs/components/Tree/useTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useTreeStyles.styles.js +2 -2
- package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -1
- package/lib-commonjs/components/TreeItem/renderTreeItem.js +3 -3
- package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItem.js +5 -8
- package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +2 -2
- package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +3 -3
- package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +26 -18
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +26 -26
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +4 -4
- package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +8 -6
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +40 -40
- package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -1
- package/lib-commonjs/contexts/treeItemContext.js +1 -1
- package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
- package/lib-commonjs/hooks/useRootTree.js +3 -1
- package/lib-commonjs/hooks/useRootTree.js.map +1 -1
- package/lib-commonjs/hooks/useSubtree.js +3 -1
- package/lib-commonjs/hooks/useSubtree.js.map +1 -1
- package/lib-commonjs/utils/createHeadlessTree.js +2 -1
- package/lib-commonjs/utils/createHeadlessTree.js.map +1 -1
- package/package.json +14 -14
- package/lib/components/Tree/useControllableCheckedItems.js +0 -94
- package/lib/components/Tree/useControllableCheckedItems.js.map +0 -1
- package/lib-commonjs/components/Tree/useControllableCheckedItems.js +0 -103
- package/lib-commonjs/components/Tree/useControllableCheckedItems.js.map +0 -1
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,175 @@
|
|
|
2
2
|
"name": "@fluentui/react-tree",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "Fri,
|
|
5
|
+
"date": "Fri, 11 Aug 2023 12:10:20 GMT",
|
|
6
|
+
"tag": "@fluentui/react-tree_v9.0.0-beta.32",
|
|
7
|
+
"version": "9.0.0-beta.32",
|
|
8
|
+
"comments": {
|
|
9
|
+
"prerelease": [
|
|
10
|
+
{
|
|
11
|
+
"author": "beachball",
|
|
12
|
+
"package": "@fluentui/react-tree",
|
|
13
|
+
"comment": "Bump @fluentui/react-aria to v9.3.30",
|
|
14
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"author": "beachball",
|
|
18
|
+
"package": "@fluentui/react-tree",
|
|
19
|
+
"comment": "Bump @fluentui/react-avatar to v9.5.19",
|
|
20
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"author": "beachball",
|
|
24
|
+
"package": "@fluentui/react-tree",
|
|
25
|
+
"comment": "Bump @fluentui/react-button to v9.3.29",
|
|
26
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"author": "beachball",
|
|
30
|
+
"package": "@fluentui/react-tree",
|
|
31
|
+
"comment": "Bump @fluentui/react-checkbox to v9.1.30",
|
|
32
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"author": "beachball",
|
|
36
|
+
"package": "@fluentui/react-tree",
|
|
37
|
+
"comment": "Bump @fluentui/react-context-selector to v9.1.28",
|
|
38
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"author": "beachball",
|
|
42
|
+
"package": "@fluentui/react-tree",
|
|
43
|
+
"comment": "Bump @fluentui/react-portal to v9.3.7",
|
|
44
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"author": "beachball",
|
|
48
|
+
"package": "@fluentui/react-tree",
|
|
49
|
+
"comment": "Bump @fluentui/react-radio to v9.1.30",
|
|
50
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"author": "beachball",
|
|
54
|
+
"package": "@fluentui/react-tree",
|
|
55
|
+
"comment": "Bump @fluentui/react-tabster to v9.12.2",
|
|
56
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"author": "beachball",
|
|
60
|
+
"package": "@fluentui/react-tree",
|
|
61
|
+
"comment": "Bump @fluentui/react-utilities to v9.11.1",
|
|
62
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"author": "beachball",
|
|
66
|
+
"package": "@fluentui/react-tree",
|
|
67
|
+
"comment": "Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.15",
|
|
68
|
+
"commit": "a77bcda1628e8b20b113d0237317efd7ebbc5294"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"date": "Wed, 09 Aug 2023 13:17:09 GMT",
|
|
75
|
+
"tag": "@fluentui/react-tree_v9.0.0-beta.31",
|
|
76
|
+
"version": "9.0.0-beta.31",
|
|
77
|
+
"comments": {
|
|
78
|
+
"prerelease": [
|
|
79
|
+
{
|
|
80
|
+
"author": "olfedias@microsoft.com",
|
|
81
|
+
"package": "@fluentui/react-tree",
|
|
82
|
+
"commit": "b090c0339983847a62b9dc6187d08dc8c4b1d55f",
|
|
83
|
+
"comment": "chore: Update Griffel to latest version"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"author": "bernardo.sunderhus@gmail.com",
|
|
87
|
+
"package": "@fluentui/react-tree",
|
|
88
|
+
"commit": "253798f25326e92ba19b313c47a9c9530af12526",
|
|
89
|
+
"comment": "feat: implements nested tree selection"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"author": "petrduda@microsoft.com",
|
|
93
|
+
"package": "@fluentui/react-tree",
|
|
94
|
+
"commit": "b921cbb92c4e023b06577c2e10f5f7e44f25c64d",
|
|
95
|
+
"comment": "Docs(react-tree): Improve docs and stories"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"author": "bernardo.sunderhus@gmail.com",
|
|
99
|
+
"package": "@fluentui/react-tree",
|
|
100
|
+
"commit": "89eb2bacdda1886336d91704da2ed6bb7327e349",
|
|
101
|
+
"comment": "bugfix: headless tree should respect itemType"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"author": "bernardo.sunderhus@gmail.com",
|
|
105
|
+
"package": "@fluentui/react-tree",
|
|
106
|
+
"commit": "e615f12c54c8a4acad49930a02c3b703fd64692b",
|
|
107
|
+
"comment": "chore(teams-prg): migrate to new slot API"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"author": "beachball",
|
|
111
|
+
"package": "@fluentui/react-tree",
|
|
112
|
+
"comment": "Bump @fluentui/react-aria to v9.3.29",
|
|
113
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"author": "beachball",
|
|
117
|
+
"package": "@fluentui/react-tree",
|
|
118
|
+
"comment": "Bump @fluentui/react-avatar to v9.5.18",
|
|
119
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"author": "beachball",
|
|
123
|
+
"package": "@fluentui/react-tree",
|
|
124
|
+
"comment": "Bump @fluentui/react-button to v9.3.28",
|
|
125
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"author": "beachball",
|
|
129
|
+
"package": "@fluentui/react-tree",
|
|
130
|
+
"comment": "Bump @fluentui/react-checkbox to v9.1.29",
|
|
131
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"author": "beachball",
|
|
135
|
+
"package": "@fluentui/react-tree",
|
|
136
|
+
"comment": "Bump @fluentui/react-portal to v9.3.6",
|
|
137
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"author": "beachball",
|
|
141
|
+
"package": "@fluentui/react-tree",
|
|
142
|
+
"comment": "Bump @fluentui/react-radio to v9.1.29",
|
|
143
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"author": "beachball",
|
|
147
|
+
"package": "@fluentui/react-tree",
|
|
148
|
+
"comment": "Bump @fluentui/react-shared-contexts to v9.7.2",
|
|
149
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"author": "beachball",
|
|
153
|
+
"package": "@fluentui/react-tree",
|
|
154
|
+
"comment": "Bump @fluentui/react-tabster to v9.12.1",
|
|
155
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"author": "beachball",
|
|
159
|
+
"package": "@fluentui/react-tree",
|
|
160
|
+
"comment": "Bump @fluentui/react-theme to v9.1.11",
|
|
161
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"author": "beachball",
|
|
165
|
+
"package": "@fluentui/react-tree",
|
|
166
|
+
"comment": "Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.14",
|
|
167
|
+
"commit": "9509e950254d838cdfe3718a775ba5c78cb8f11a"
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"date": "Fri, 04 Aug 2023 08:52:57 GMT",
|
|
6
174
|
"tag": "@fluentui/react-tree_v9.0.0-beta.30",
|
|
7
175
|
"version": "9.0.0-beta.30",
|
|
8
176
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,53 @@
|
|
|
1
1
|
# Change Log - @fluentui/react-tree
|
|
2
2
|
|
|
3
|
-
This log was last generated on Fri,
|
|
3
|
+
This log was last generated on Fri, 11 Aug 2023 12:10:20 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## [9.0.0-beta.32](https://github.com/microsoft/fluentui/tree/@fluentui/react-tree_v9.0.0-beta.32)
|
|
8
|
+
|
|
9
|
+
Fri, 11 Aug 2023 12:10:20 GMT
|
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-tree_v9.0.0-beta.31..@fluentui/react-tree_v9.0.0-beta.32)
|
|
11
|
+
|
|
12
|
+
### Changes
|
|
13
|
+
|
|
14
|
+
- Bump @fluentui/react-aria to v9.3.30 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
15
|
+
- Bump @fluentui/react-avatar to v9.5.19 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
16
|
+
- Bump @fluentui/react-button to v9.3.29 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
17
|
+
- Bump @fluentui/react-checkbox to v9.1.30 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
18
|
+
- Bump @fluentui/react-context-selector to v9.1.28 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
19
|
+
- Bump @fluentui/react-portal to v9.3.7 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
20
|
+
- Bump @fluentui/react-radio to v9.1.30 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
21
|
+
- Bump @fluentui/react-tabster to v9.12.2 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
22
|
+
- Bump @fluentui/react-utilities to v9.11.1 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
23
|
+
- Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.15 ([PR #28808](https://github.com/microsoft/fluentui/pull/28808) by beachball)
|
|
24
|
+
|
|
25
|
+
## [9.0.0-beta.31](https://github.com/microsoft/fluentui/tree/@fluentui/react-tree_v9.0.0-beta.31)
|
|
26
|
+
|
|
27
|
+
Wed, 09 Aug 2023 13:17:09 GMT
|
|
28
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-tree_v9.0.0-beta.30..@fluentui/react-tree_v9.0.0-beta.31)
|
|
29
|
+
|
|
30
|
+
### Changes
|
|
31
|
+
|
|
32
|
+
- chore: Update Griffel to latest version ([PR #28684](https://github.com/microsoft/fluentui/pull/28684) by olfedias@microsoft.com)
|
|
33
|
+
- feat: implements nested tree selection ([PR #28668](https://github.com/microsoft/fluentui/pull/28668) by bernardo.sunderhus@gmail.com)
|
|
34
|
+
- Docs(react-tree): Improve docs and stories ([PR #28741](https://github.com/microsoft/fluentui/pull/28741) by petrduda@microsoft.com)
|
|
35
|
+
- bugfix: headless tree should respect itemType ([PR #28759](https://github.com/microsoft/fluentui/pull/28759) by bernardo.sunderhus@gmail.com)
|
|
36
|
+
- chore(teams-prg): migrate to new slot API ([PR #28751](https://github.com/microsoft/fluentui/pull/28751) by bernardo.sunderhus@gmail.com)
|
|
37
|
+
- Bump @fluentui/react-aria to v9.3.29 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
38
|
+
- Bump @fluentui/react-avatar to v9.5.18 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
39
|
+
- Bump @fluentui/react-button to v9.3.28 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
40
|
+
- Bump @fluentui/react-checkbox to v9.1.29 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
41
|
+
- Bump @fluentui/react-portal to v9.3.6 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
42
|
+
- Bump @fluentui/react-radio to v9.1.29 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
43
|
+
- Bump @fluentui/react-shared-contexts to v9.7.2 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
44
|
+
- Bump @fluentui/react-tabster to v9.12.1 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
45
|
+
- Bump @fluentui/react-theme to v9.1.11 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
46
|
+
- Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.14 ([PR #28775](https://github.com/microsoft/fluentui/pull/28775) by beachball)
|
|
47
|
+
|
|
7
48
|
## [9.0.0-beta.30](https://github.com/microsoft/fluentui/tree/@fluentui/react-tree_v9.0.0-beta.30)
|
|
8
49
|
|
|
9
|
-
Fri, 04 Aug 2023 08:
|
|
50
|
+
Fri, 04 Aug 2023 08:52:57 GMT
|
|
10
51
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-tree_v9.0.0-beta.29..@fluentui/react-tree_v9.0.0-beta.30)
|
|
11
52
|
|
|
12
53
|
### Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -99,7 +99,10 @@ export declare type FlattenTreeItem<Props extends TreeItemProps> = Omit<Props, '
|
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
|
-
* FlatTree component
|
|
102
|
+
* The `FlatTree` component is a variation of the `Tree` component that deals with a flattened data structure.
|
|
103
|
+
*
|
|
104
|
+
* It should be used on cases where more complex interactions with a Tree is required.
|
|
105
|
+
* On simple scenarios it is advised to simply use a nested structure instead.
|
|
103
106
|
*/
|
|
104
107
|
export declare const FlatTree: ForwardRefComponent<FlatTreeProps>;
|
|
105
108
|
|
|
@@ -236,7 +239,9 @@ export declare type HeadlessFlatTreeItem<Props extends HeadlessFlatTreeItemProps
|
|
|
236
239
|
|
|
237
240
|
export declare type HeadlessFlatTreeItemProps = HeadlessTreeItemProps;
|
|
238
241
|
|
|
239
|
-
export declare type HeadlessFlatTreeOptions = Pick<FlatTreeProps, 'onOpenChange' | 'onNavigation_unstable' | 'selectionMode' | 'onCheckedChange'> & Pick<TreeProps, 'defaultOpenItems' | 'openItems' | 'checkedItems'
|
|
242
|
+
export declare type HeadlessFlatTreeOptions = Pick<FlatTreeProps, 'onOpenChange' | 'onNavigation_unstable' | 'selectionMode' | 'onCheckedChange'> & Pick<TreeProps, 'defaultOpenItems' | 'openItems' | 'checkedItems'> & {
|
|
243
|
+
defaultCheckedItems?: TreeProps['checkedItems'];
|
|
244
|
+
};
|
|
240
245
|
|
|
241
246
|
/**
|
|
242
247
|
* The item that is returned by `createHeadlessTree`, it represents a wrapper around the properties provided to
|
|
@@ -343,9 +348,9 @@ declare type MultiSelectValue = NonNullable<CheckboxProps['checked']>;
|
|
|
343
348
|
|
|
344
349
|
declare type OmitWithoutExpanding<P, K extends string | number | symbol> = P extends unknown ? Omit<P, K> : P;
|
|
345
350
|
|
|
346
|
-
declare const
|
|
347
|
-
|
|
348
|
-
export
|
|
351
|
+
export declare const renderFlatTree_unstable: (state: TreeState, contextValues: TreeContextValues) => JSX.Element;
|
|
352
|
+
|
|
353
|
+
export declare const renderTree_unstable: (state: TreeState, contextValues: TreeContextValues) => JSX.Element;
|
|
349
354
|
|
|
350
355
|
/**
|
|
351
356
|
* Render the final JSX of TreeItem
|
|
@@ -365,7 +370,8 @@ export declare const renderTreeItemPersonaLayout_unstable: (state: TreeItemPerso
|
|
|
365
370
|
declare type SingleSelectValue = NonNullable<RadioProps['checked']>;
|
|
366
371
|
|
|
367
372
|
/**
|
|
368
|
-
* Tree component
|
|
373
|
+
* The `Tree` component renders nested items in a hierarchical structure.
|
|
374
|
+
* Use it with `TreeItem` component and layouts components `TreeItemLayout` or `TreeItemPersonaLayout`.
|
|
369
375
|
*/
|
|
370
376
|
export declare const Tree: ForwardRefComponent<TreeProps>;
|
|
371
377
|
|
|
@@ -431,7 +437,7 @@ export declare type TreeItemContextValue = {
|
|
|
431
437
|
itemType: TreeItemType;
|
|
432
438
|
value: TreeItemValue;
|
|
433
439
|
open: boolean;
|
|
434
|
-
checked
|
|
440
|
+
checked: TreeSelectionValue;
|
|
435
441
|
};
|
|
436
442
|
|
|
437
443
|
declare type TreeItemContextValues = {
|
|
@@ -686,11 +692,6 @@ export declare type TreeProps = ComponentProps<TreeSlots> & {
|
|
|
686
692
|
* These property is ignored for subtrees.
|
|
687
693
|
*/
|
|
688
694
|
checkedItems?: Iterable<TreeItemValue | [TreeItemValue, TreeSelectionValue]>;
|
|
689
|
-
/**
|
|
690
|
-
* This refers to a list of ids of default checked items, or a list of tuples of ids and checked state.
|
|
691
|
-
* These property is ignored for subtrees.
|
|
692
|
-
*/
|
|
693
|
-
defaultCheckedItems?: Iterable<TreeItemValue | [TreeItemValue, TreeSelectionValue]>;
|
|
694
695
|
/**
|
|
695
696
|
* Callback fired when the component changes value from checked state.
|
|
696
697
|
* These property is ignored for subtrees.
|
|
@@ -723,6 +724,8 @@ export { TreeState }
|
|
|
723
724
|
|
|
724
725
|
export declare const useFlatTree_unstable: (props: FlatTreeProps, ref: React_2.Ref<HTMLElement>) => TreeState;
|
|
725
726
|
|
|
727
|
+
export declare const useFlatTreeContextValues_unstable: (state: TreeState) => TreeContextValues;
|
|
728
|
+
|
|
726
729
|
export declare const useFlatTreeStyles_unstable: (state: TreeState) => TreeState;
|
|
727
730
|
|
|
728
731
|
/**
|
|
@@ -743,9 +746,7 @@ export declare const useTree_unstable: (props: TreeProps, ref: React_2.Ref<HTMLE
|
|
|
743
746
|
|
|
744
747
|
export declare const useTreeContext_unstable: <T>(selector: ContextSelector<TreeContextValue, T>) => T;
|
|
745
748
|
|
|
746
|
-
declare function useTreeContextValues_unstable(state: TreeState): TreeContextValues;
|
|
747
|
-
export { useTreeContextValues_unstable as useFlatTreeContextValues_unstable }
|
|
748
|
-
export { useTreeContextValues_unstable }
|
|
749
|
+
export declare function useTreeContextValues_unstable(state: TreeState): TreeContextValues;
|
|
749
750
|
|
|
750
751
|
/**
|
|
751
752
|
* Create the state required to render TreeItem.
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useTreeContextValues_unstable as useFlatTreeContextValues_unstable, renderTree_unstable as renderFlatTree_unstable } from '../Tree/index';
|
|
3
2
|
import { useFlatTree_unstable } from './useFlatTree';
|
|
4
3
|
import { useFlatTreeStyles_unstable } from './useFlatTreeStyles.styles';
|
|
4
|
+
import { useFlatTreeContextValues_unstable } from './useFlatTreeContextValues';
|
|
5
|
+
import { renderFlatTree_unstable } from './renderFlatTree';
|
|
5
6
|
/**
|
|
6
|
-
* FlatTree component
|
|
7
|
+
* The `FlatTree` component is a variation of the `Tree` component that deals with a flattened data structure.
|
|
8
|
+
*
|
|
9
|
+
* It should be used on cases where more complex interactions with a Tree is required.
|
|
10
|
+
* On simple scenarios it is advised to simply use a nested structure instead.
|
|
7
11
|
*/ export const FlatTree = /*#__PURE__*/ React.forwardRef((props, ref)=>{
|
|
8
12
|
const state = useFlatTree_unstable(props, ref);
|
|
9
13
|
const contextValues = useFlatTreeContextValues_unstable(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FlatTree.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport type { FlatTreeProps } from './FlatTree.types';\nimport {
|
|
1
|
+
{"version":3,"sources":["FlatTree.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport type { FlatTreeProps } from './FlatTree.types';\nimport { useFlatTree_unstable } from './useFlatTree';\nimport { useFlatTreeStyles_unstable } from './useFlatTreeStyles.styles';\nimport { useFlatTreeContextValues_unstable } from './useFlatTreeContextValues';\nimport { renderFlatTree_unstable } from './renderFlatTree';\n\n/**\n * The `FlatTree` component is a variation of the `Tree` component that deals with a flattened data structure.\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport const FlatTree: ForwardRefComponent<FlatTreeProps> = React.forwardRef((props, ref) => {\n const state = useFlatTree_unstable(props, ref);\n const contextValues = useFlatTreeContextValues_unstable(state);\n useFlatTreeStyles_unstable(state);\n return renderFlatTree_unstable(state, contextValues);\n});\n\nFlatTree.displayName = 'FlatTree';\n"],"names":["React","useFlatTree_unstable","useFlatTreeStyles_unstable","useFlatTreeContextValues_unstable","renderFlatTree_unstable","FlatTree","forwardRef","props","ref","state","contextValues","displayName"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAG/B,SAASC,oBAAoB,QAAQ,gBAAgB;AACrD,SAASC,0BAA0B,QAAQ,6BAA6B;AACxE,SAASC,iCAAiC,QAAQ,6BAA6B;AAC/E,SAASC,uBAAuB,QAAQ,mBAAmB;AAE3D;;;;;CAKC,GACD,OAAO,MAAMC,yBAA+CL,MAAMM,UAAU,CAAC,CAACC,OAAOC,MAAQ;IAC3F,MAAMC,QAAQR,qBAAqBM,OAAOC;IAC1C,MAAME,gBAAgBP,kCAAkCM;IACxDP,2BAA2BO;IAC3B,OAAOL,wBAAwBK,OAAOC;AACxC,GAAG;AAEHL,SAASM,WAAW,GAAG"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './FlatTree';
|
|
2
2
|
export * from './FlatTree.types';
|
|
3
|
-
export { renderTree_unstable as renderFlatTree_unstable, useTreeContextValues_unstable as useFlatTreeContextValues_unstable } from '../Tree/index';
|
|
4
3
|
export * from './useHeadlessFlatTree';
|
|
5
4
|
export * from './useFlatTree';
|
|
6
5
|
export * from './useFlatTreeStyles.styles';
|
|
6
|
+
export * from './useFlatTreeContextValues';
|
|
7
|
+
export * from './renderFlatTree';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"sourcesContent":["export * from './FlatTree';\nexport * from './FlatTree.types';\nexport
|
|
1
|
+
{"version":3,"sources":["index.ts"],"sourcesContent":["export * from './FlatTree';\nexport * from './FlatTree.types';\nexport * from './useHeadlessFlatTree';\nexport * from './useFlatTree';\nexport * from './useFlatTreeStyles.styles';\nexport * from './useFlatTreeContextValues';\nexport * from './renderFlatTree';\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,mBAAmB;AACjC,cAAc,wBAAwB;AACtC,cAAc,gBAAgB;AAC9B,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,mBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["renderFlatTree.ts"],"sourcesContent":["import { TreeContextValues, renderTree_unstable } from '../../Tree';\nimport type { FlatTreeState } from './FlatTree.types';\n\nexport const renderFlatTree_unstable: (state: FlatTreeState, contextValues: TreeContextValues) => JSX.Element =\n renderTree_unstable;\n"],"names":["renderTree_unstable","renderFlatTree_unstable"],"mappings":"AAAA,SAA4BA,mBAAmB,QAAQ,aAAa;AAGpE,OAAO,MAAMC,0BACXD,oBAAoB"}
|
|
@@ -2,20 +2,17 @@ import { useControllableState } from '@fluentui/react-utilities';
|
|
|
2
2
|
import { ImmutableMap } from '../../utils/ImmutableMap';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { createCheckedItems } from '../../utils/createCheckedItems';
|
|
5
|
-
export function useFlatControllableCheckedItems(props) {
|
|
6
|
-
|
|
5
|
+
export function useFlatControllableCheckedItems(props, headlessTree) {
|
|
6
|
+
return useControllableState({
|
|
7
7
|
initialState: ImmutableMap.empty,
|
|
8
|
-
state: React.useMemo(()=>props.checkedItems && createCheckedItems(props.checkedItems), [
|
|
9
|
-
props.checkedItems
|
|
8
|
+
state: React.useMemo(()=>props.selectionMode ? props.checkedItems && createCheckedItems(props.checkedItems) : undefined, [
|
|
9
|
+
props.checkedItems,
|
|
10
|
+
props.selectionMode
|
|
10
11
|
]),
|
|
11
|
-
defaultState: ()=>
|
|
12
|
+
defaultState: ()=>initializeCheckedItems(props, headlessTree)
|
|
12
13
|
});
|
|
13
|
-
return [
|
|
14
|
-
checkedItems,
|
|
15
|
-
setCheckedItems
|
|
16
|
-
];
|
|
17
14
|
}
|
|
18
|
-
export function createNextFlatCheckedItems(data, previousCheckedItems,
|
|
15
|
+
export function createNextFlatCheckedItems(data, previousCheckedItems, headlessTree) {
|
|
19
16
|
if (data.selectionMode === 'single') {
|
|
20
17
|
return ImmutableMap.create([
|
|
21
18
|
[
|
|
@@ -24,7 +21,7 @@ export function createNextFlatCheckedItems(data, previousCheckedItems, virtualTr
|
|
|
24
21
|
]
|
|
25
22
|
]);
|
|
26
23
|
}
|
|
27
|
-
const treeItem =
|
|
24
|
+
const treeItem = headlessTree.get(data.value);
|
|
28
25
|
if (!treeItem) {
|
|
29
26
|
if (process.env.NODE_ENV !== 'production') {
|
|
30
27
|
// eslint-disable-next-line no-console
|
|
@@ -33,19 +30,19 @@ export function createNextFlatCheckedItems(data, previousCheckedItems, virtualTr
|
|
|
33
30
|
return previousCheckedItems;
|
|
34
31
|
}
|
|
35
32
|
const nextCheckedItems = new Map(previousCheckedItems);
|
|
36
|
-
for (const children of
|
|
33
|
+
for (const children of headlessTree.subtree(data.value)){
|
|
37
34
|
nextCheckedItems.set(children.value, data.checked);
|
|
38
35
|
}
|
|
39
36
|
nextCheckedItems.set(data.value, data.checked);
|
|
40
37
|
let isAncestorsMixed = false;
|
|
41
|
-
for (const parent of
|
|
38
|
+
for (const parent of headlessTree.ancestors(treeItem.value)){
|
|
42
39
|
// if one parent is mixed, all ancestors are mixed
|
|
43
40
|
if (isAncestorsMixed) {
|
|
44
41
|
nextCheckedItems.set(parent.value, 'mixed');
|
|
45
42
|
continue;
|
|
46
43
|
}
|
|
47
44
|
const checkedChildren = [];
|
|
48
|
-
for (const child of
|
|
45
|
+
for (const child of headlessTree.children(parent.value)){
|
|
49
46
|
var _nextCheckedItems_get;
|
|
50
47
|
if (((_nextCheckedItems_get = nextCheckedItems.get(child.value)) !== null && _nextCheckedItems_get !== void 0 ? _nextCheckedItems_get : false) === data.checked) {
|
|
51
48
|
checkedChildren.push(child);
|
|
@@ -61,3 +58,19 @@ export function createNextFlatCheckedItems(data, previousCheckedItems, virtualTr
|
|
|
61
58
|
}
|
|
62
59
|
return ImmutableMap.dangerouslyCreate_unstable(nextCheckedItems);
|
|
63
60
|
}
|
|
61
|
+
function initializeCheckedItems(props, headlessTree) {
|
|
62
|
+
if (!props.selectionMode) {
|
|
63
|
+
return ImmutableMap.empty;
|
|
64
|
+
}
|
|
65
|
+
let state = createCheckedItems(props.defaultCheckedItems);
|
|
66
|
+
if (props.selectionMode === 'multiselect') {
|
|
67
|
+
for (const [value, checked] of state){
|
|
68
|
+
state = createNextFlatCheckedItems({
|
|
69
|
+
value,
|
|
70
|
+
checked,
|
|
71
|
+
selectionMode: props.selectionMode
|
|
72
|
+
}, state, headlessTree);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return state;
|
|
76
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useFlatControllableCheckedItems.ts"],"sourcesContent":["import { useControllableState } from '@fluentui/react-utilities';\nimport { TreeItemValue } from '../../TreeItem';\nimport { ImmutableMap } from '../../utils/ImmutableMap';\nimport * as React from 'react';\nimport type { HeadlessTree, HeadlessTreeItemProps } from '../../utils/createHeadlessTree';\nimport { createCheckedItems } from '../../utils/createCheckedItems';\nimport type { TreeCheckedChangeData
|
|
1
|
+
{"version":3,"sources":["useFlatControllableCheckedItems.ts"],"sourcesContent":["import { useControllableState } from '@fluentui/react-utilities';\nimport { TreeItemValue } from '../../TreeItem';\nimport { ImmutableMap } from '../../utils/ImmutableMap';\nimport * as React from 'react';\nimport type { HeadlessTree, HeadlessTreeItemProps } from '../../utils/createHeadlessTree';\nimport { createCheckedItems } from '../../utils/createCheckedItems';\nimport type { TreeCheckedChangeData } from '../Tree/Tree.types';\nimport { HeadlessFlatTreeOptions } from './useHeadlessFlatTree';\n\nexport function useFlatControllableCheckedItems<Props extends HeadlessTreeItemProps>(\n props: Pick<HeadlessFlatTreeOptions, 'checkedItems' | 'defaultCheckedItems' | 'selectionMode'>,\n headlessTree: HeadlessTree<Props>,\n) {\n return useControllableState({\n initialState: ImmutableMap.empty,\n state: React.useMemo(\n () => (props.selectionMode ? props.checkedItems && createCheckedItems(props.checkedItems) : undefined),\n [props.checkedItems, props.selectionMode],\n ),\n defaultState: () => initializeCheckedItems(props, headlessTree),\n });\n}\n\nexport function createNextFlatCheckedItems(\n data: Pick<TreeCheckedChangeData, 'value' | 'checked' | 'selectionMode'>,\n previousCheckedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>,\n headlessTree: HeadlessTree<HeadlessTreeItemProps>,\n): ImmutableMap<TreeItemValue, 'mixed' | boolean> {\n if (data.selectionMode === 'single') {\n return ImmutableMap.create([[data.value, data.checked]]);\n }\n const treeItem = headlessTree.get(data.value);\n if (!treeItem) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error(`useHeadlessFlatTree: tree item ${data.value} not found`);\n }\n return previousCheckedItems;\n }\n const nextCheckedItems = new Map(previousCheckedItems);\n for (const children of headlessTree.subtree(data.value)) {\n nextCheckedItems.set(children.value, data.checked);\n }\n nextCheckedItems.set(data.value, data.checked);\n\n let isAncestorsMixed = false;\n for (const parent of headlessTree.ancestors(treeItem.value)) {\n // if one parent is mixed, all ancestors are mixed\n if (isAncestorsMixed) {\n nextCheckedItems.set(parent.value, 'mixed');\n continue;\n }\n const checkedChildren = [];\n for (const child of headlessTree.children(parent.value)) {\n if ((nextCheckedItems.get(child.value) ?? false) === data.checked) {\n checkedChildren.push(child);\n }\n }\n if (checkedChildren.length === parent.childrenValues.length) {\n nextCheckedItems.set(parent.value, data.checked);\n } else {\n // if one parent is mixed, all ancestors are mixed\n isAncestorsMixed = true;\n nextCheckedItems.set(parent.value, 'mixed');\n }\n }\n return ImmutableMap.dangerouslyCreate_unstable(nextCheckedItems);\n}\n\nfunction initializeCheckedItems(\n props: Pick<HeadlessFlatTreeOptions, 'selectionMode' | 'defaultCheckedItems'>,\n headlessTree: HeadlessTree<HeadlessTreeItemProps>,\n) {\n if (!props.selectionMode) {\n return ImmutableMap.empty;\n }\n let state = createCheckedItems(props.defaultCheckedItems);\n if (props.selectionMode === 'multiselect') {\n for (const [value, checked] of state) {\n state = createNextFlatCheckedItems({ value, checked, selectionMode: props.selectionMode }, state, headlessTree);\n }\n }\n return state;\n}\n"],"names":["useControllableState","ImmutableMap","React","createCheckedItems","useFlatControllableCheckedItems","props","headlessTree","initialState","empty","state","useMemo","selectionMode","checkedItems","undefined","defaultState","initializeCheckedItems","createNextFlatCheckedItems","data","previousCheckedItems","create","value","checked","treeItem","get","process","env","NODE_ENV","console","error","nextCheckedItems","Map","children","subtree","set","isAncestorsMixed","parent","ancestors","checkedChildren","child","push","length","childrenValues","dangerouslyCreate_unstable","defaultCheckedItems"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useFlatTreeContextValues.ts"],"sourcesContent":["import { TreeContextValues, useTreeContextValues_unstable } from '../../Tree';\nimport type { FlatTreeState } from './FlatTree.types';\n\nexport const useFlatTreeContextValues_unstable: (state: FlatTreeState) => TreeContextValues =\n useTreeContextValues_unstable;\n"],"names":["useTreeContextValues_unstable","useFlatTreeContextValues_unstable"],"mappings":"AAAA,SAA4BA,6BAA6B,QAAQ,aAAa;AAG9E,OAAO,MAAMC,oCACXD,8BAA8B"}
|
|
@@ -10,7 +10,7 @@ const useStyles = /*#__PURE__*/__styles({
|
|
|
10
10
|
Belr9w4: "f1j0q4x9"
|
|
11
11
|
}
|
|
12
12
|
}, {
|
|
13
|
-
d: [".f22iagw{display
|
|
13
|
+
d: [".f22iagw{display:flex;}", ".f1vx9l62{flex-direction:column;}", ".f1j0q4x9{row-gap:var(--spacingVerticalXXS);}"]
|
|
14
14
|
});
|
|
15
15
|
export const useFlatTreeStyles_unstable = state => {
|
|
16
16
|
const styles = useStyles();
|
|
@@ -24,7 +24,7 @@ import { treeItemFilter } from '../../utils/treeItemFilter';
|
|
|
24
24
|
props
|
|
25
25
|
]);
|
|
26
26
|
const [openItems, setOpenItems] = useControllableOpenItems(options);
|
|
27
|
-
const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options);
|
|
27
|
+
const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options, headlessTree);
|
|
28
28
|
const { initialize , navigate } = useFlatTreeNavigation(headlessTree);
|
|
29
29
|
const walkerRef = React.useRef();
|
|
30
30
|
const initializeWalker = React.useCallback((root)=>{
|
|
@@ -38,13 +38,21 @@ import { treeItemFilter } from '../../utils/treeItemFilter';
|
|
|
38
38
|
const treeRef = React.useRef(null);
|
|
39
39
|
const handleOpenChange = useEventCallback((event, data)=>{
|
|
40
40
|
var _options_onOpenChange;
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const nextOpenItems = createNextOpenItems(data, openItems);
|
|
42
|
+
(_options_onOpenChange = options.onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(options, event, {
|
|
43
|
+
...data,
|
|
44
|
+
openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()
|
|
45
|
+
});
|
|
46
|
+
setOpenItems(nextOpenItems);
|
|
43
47
|
});
|
|
44
48
|
const handleCheckedChange = useEventCallback((event, data)=>{
|
|
45
49
|
var _options_onCheckedChange;
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
const nextCheckedItems = createNextFlatCheckedItems(data, checkedItems, headlessTree);
|
|
51
|
+
(_options_onCheckedChange = options.onCheckedChange) === null || _options_onCheckedChange === void 0 ? void 0 : _options_onCheckedChange.call(options, event, {
|
|
52
|
+
...data,
|
|
53
|
+
checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()
|
|
54
|
+
});
|
|
55
|
+
setCheckedItems(nextCheckedItems);
|
|
48
56
|
});
|
|
49
57
|
const handleNavigation = useEventCallback((event, data)=>{
|
|
50
58
|
var _options_onNavigation_unstable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useHeadlessFlatTree.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { HeadlessTreeItem, HeadlessTreeItemProps, createHeadlessTree } from '../../utils/createHeadlessTree';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport type { TreeItemValue } from '../../TreeItem';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\nimport { ImmutableSet } from '../../utils/ImmutableSet';\nimport { createNextFlatCheckedItems, useFlatControllableCheckedItems } from './useFlatControllableCheckedItems';\nimport { FlatTreeProps } from './FlatTree.types';\nimport {\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree/Tree.types';\nimport { HTMLElementWalker, createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\n\nexport type HeadlessFlatTreeItemProps = HeadlessTreeItemProps;\nexport type HeadlessFlatTreeItem<Props extends HeadlessFlatTreeItemProps> = HeadlessTreeItem<Props>;\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type HeadlessFlatTree<Props extends HeadlessFlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): Required<\n Pick<FlatTreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable' | 'checkedItems' | 'onCheckedChange'>\n > & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<TreeItemValue>;\n };\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && tree.getElementFromItem(nextItem)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: HeadlessTreeItem<Props>[],\n data: TreeNavigationData_unstable,\n ): HeadlessTreeItem<Props> | undefined;\n /**\n * similar to getElementById but for FlatTreeItems\n */\n getElementFromItem(item: HeadlessTreeItem<Props>): HTMLElement | null;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<HeadlessTreeItem<Props>>;\n};\n\nexport type HeadlessFlatTreeOptions = Pick<\n FlatTreeProps,\n 'onOpenChange' | 'onNavigation_unstable' | 'selectionMode' | 'onCheckedChange'\n> &\n Pick<TreeProps, 'defaultOpenItems' | 'openItems' | 'checkedItems' | 'defaultChecked'>;\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param props - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useHeadlessFlatTree_unstable<Props extends HeadlessTreeItemProps>(\n props: Props[],\n options: HeadlessFlatTreeOptions = {},\n): HeadlessFlatTree<Props> {\n const headlessTree = React.useMemo(() => createHeadlessTree(props), [props]);\n const [openItems, setOpenItems] = useControllableOpenItems(options);\n const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options);\n const { initialize, navigate } = useFlatTreeNavigation(headlessTree);\n const walkerRef = React.useRef<HTMLElementWalker>();\n const initializeWalker = React.useCallback(\n (root: HTMLElement | null) => {\n if (root) {\n walkerRef.current = createHTMLElementWalker(root, treeItemFilter);\n initialize(walkerRef.current);\n }\n },\n [initialize],\n );\n\n const treeRef = React.useRef<HTMLDivElement>(null);\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n options.onOpenChange?.(event, data);\n setOpenItems(createNextOpenItems(data, openItems));\n });\n\n const handleCheckedChange = useEventCallback((event: TreeCheckedChangeEvent, data: TreeCheckedChangeData) => {\n options.onCheckedChange?.(event, data);\n setCheckedItems(createNextFlatCheckedItems(data, checkedItems, headlessTree));\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n options.onNavigation_unstable?.(event, data);\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: HeadlessTreeItem<Props>[], data: TreeNavigationData_unstable) => {\n const item = headlessTree.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return headlessTree.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getElementFromItem = React.useCallback((item: HeadlessTreeItem<Props>) => {\n return treeRef.current?.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`) as HTMLElement | null;\n }, []);\n\n const ref = useMergedRefs<HTMLDivElement>(treeRef, initializeWalker);\n\n const getTreeProps = React.useCallback(\n () => ({\n ref,\n openItems,\n selectionMode: options.selectionMode,\n checkedItems,\n onOpenChange: handleOpenChange,\n onCheckedChange: handleCheckedChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems, checkedItems],\n );\n\n const items = React.useCallback(() => headlessTree.visibleItems(openItems), [openItems, headlessTree]);\n\n return React.useMemo<HeadlessFlatTree<Props>>(\n () => ({\n navigate: data => {\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items,\n }),\n [navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items],\n );\n}\n"],"names":["useEventCallback","useMergedRefs","React","createHeadlessTree","treeDataTypes","useFlatTreeNavigation","createNextOpenItems","useControllableOpenItems","dataTreeItemValueAttrName","createNextFlatCheckedItems","useFlatControllableCheckedItems","createHTMLElementWalker","treeItemFilter","useHeadlessFlatTree_unstable","props","options","headlessTree","useMemo","openItems","setOpenItems","checkedItems","setCheckedItems","initialize","navigate","walkerRef","useRef","initializeWalker","useCallback","root","current","treeRef","handleOpenChange","event","data","onOpenChange","handleCheckedChange","onCheckedChange","handleNavigation","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","querySelector","ref","getTreeProps","selectionMode","items"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["useHeadlessFlatTree.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { HeadlessTreeItem, HeadlessTreeItemProps, createHeadlessTree } from '../../utils/createHeadlessTree';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport type { TreeItemValue } from '../../TreeItem';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\nimport { ImmutableSet } from '../../utils/ImmutableSet';\nimport { createNextFlatCheckedItems, useFlatControllableCheckedItems } from './useFlatControllableCheckedItems';\nimport { FlatTreeProps } from './FlatTree.types';\nimport {\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree/Tree.types';\nimport { HTMLElementWalker, createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\n\nexport type HeadlessFlatTreeItemProps = HeadlessTreeItemProps;\nexport type HeadlessFlatTreeItem<Props extends HeadlessFlatTreeItemProps> = HeadlessTreeItem<Props>;\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type HeadlessFlatTree<Props extends HeadlessFlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): Required<\n Pick<FlatTreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable' | 'checkedItems' | 'onCheckedChange'>\n > & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<TreeItemValue>;\n };\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && tree.getElementFromItem(nextItem)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: HeadlessTreeItem<Props>[],\n data: TreeNavigationData_unstable,\n ): HeadlessTreeItem<Props> | undefined;\n /**\n * similar to getElementById but for FlatTreeItems\n */\n getElementFromItem(item: HeadlessTreeItem<Props>): HTMLElement | null;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<HeadlessTreeItem<Props>>;\n};\n\nexport type HeadlessFlatTreeOptions = Pick<\n FlatTreeProps,\n 'onOpenChange' | 'onNavigation_unstable' | 'selectionMode' | 'onCheckedChange'\n> &\n Pick<TreeProps, 'defaultOpenItems' | 'openItems' | 'checkedItems'> & {\n defaultCheckedItems?: TreeProps['checkedItems'];\n };\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param props - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useHeadlessFlatTree_unstable<Props extends HeadlessTreeItemProps>(\n props: Props[],\n options: HeadlessFlatTreeOptions = {},\n): HeadlessFlatTree<Props> {\n const headlessTree = React.useMemo(() => createHeadlessTree(props), [props]);\n const [openItems, setOpenItems] = useControllableOpenItems(options);\n const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options, headlessTree);\n const { initialize, navigate } = useFlatTreeNavigation(headlessTree);\n const walkerRef = React.useRef<HTMLElementWalker>();\n const initializeWalker = React.useCallback(\n (root: HTMLElement | null) => {\n if (root) {\n walkerRef.current = createHTMLElementWalker(root, treeItemFilter);\n initialize(walkerRef.current);\n }\n },\n [initialize],\n );\n\n const treeRef = React.useRef<HTMLDivElement>(null);\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n const nextOpenItems = createNextOpenItems(data, openItems);\n options.onOpenChange?.(event, {\n ...data,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable(),\n });\n setOpenItems(nextOpenItems);\n });\n\n const handleCheckedChange = useEventCallback((event: TreeCheckedChangeEvent, data: TreeCheckedChangeData) => {\n const nextCheckedItems = createNextFlatCheckedItems(data, checkedItems, headlessTree);\n options.onCheckedChange?.(event, {\n ...data,\n checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable(),\n });\n setCheckedItems(nextCheckedItems);\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n options.onNavigation_unstable?.(event, data);\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: HeadlessTreeItem<Props>[], data: TreeNavigationData_unstable) => {\n const item = headlessTree.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return headlessTree.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getElementFromItem = React.useCallback((item: HeadlessTreeItem<Props>) => {\n return treeRef.current?.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`) as HTMLElement | null;\n }, []);\n\n const ref = useMergedRefs<HTMLDivElement>(treeRef, initializeWalker);\n\n const getTreeProps = React.useCallback(\n () => ({\n ref,\n openItems,\n selectionMode: options.selectionMode,\n checkedItems,\n onOpenChange: handleOpenChange,\n onCheckedChange: handleCheckedChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems, checkedItems],\n );\n\n const items = React.useCallback(() => headlessTree.visibleItems(openItems), [openItems, headlessTree]);\n\n return React.useMemo<HeadlessFlatTree<Props>>(\n () => ({\n navigate: data => {\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items,\n }),\n [navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items],\n );\n}\n"],"names":["useEventCallback","useMergedRefs","React","createHeadlessTree","treeDataTypes","useFlatTreeNavigation","createNextOpenItems","useControllableOpenItems","dataTreeItemValueAttrName","createNextFlatCheckedItems","useFlatControllableCheckedItems","createHTMLElementWalker","treeItemFilter","useHeadlessFlatTree_unstable","props","options","headlessTree","useMemo","openItems","setOpenItems","checkedItems","setCheckedItems","initialize","navigate","walkerRef","useRef","initializeWalker","useCallback","root","current","treeRef","handleOpenChange","event","data","nextOpenItems","onOpenChange","dangerouslyGetInternalSet_unstable","handleCheckedChange","nextCheckedItems","onCheckedChange","dangerouslyGetInternalMap_unstable","handleNavigation","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","querySelector","ref","getTreeProps","selectionMode","items"],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { useTreeContextValues_unstable } from './useTreeContextValues';
|
|
|
4
4
|
import { useTreeStyles_unstable } from './useTreeStyles.styles';
|
|
5
5
|
import { renderTree_unstable } from './renderTree';
|
|
6
6
|
/**
|
|
7
|
-
* Tree component
|
|
7
|
+
* The `Tree` component renders nested items in a hierarchical structure.
|
|
8
|
+
* Use it with `TreeItem` component and layouts components `TreeItemLayout` or `TreeItemPersonaLayout`.
|
|
8
9
|
*/ export const Tree = /*#__PURE__*/ React.forwardRef((props, ref)=>{
|
|
9
10
|
const state = useTree_unstable(props, ref);
|
|
10
11
|
const contextValues = useTreeContextValues_unstable(state);
|