@react-stately/selection 3.17.0 → 3.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/Selection.main.js +2 -2
- package/dist/Selection.main.js.map +1 -1
- package/dist/Selection.mjs +2 -2
- package/dist/Selection.module.js +2 -2
- package/dist/Selection.module.js.map +1 -1
- package/dist/SelectionManager.main.js +36 -30
- package/dist/SelectionManager.main.js.map +1 -1
- package/dist/SelectionManager.mjs +36 -30
- package/dist/SelectionManager.module.js +36 -30
- package/dist/SelectionManager.module.js.map +1 -1
- package/dist/types.d.ts +5 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/useMultipleSelectionState.main.js +1 -1
- package/dist/useMultipleSelectionState.main.js.map +1 -1
- package/dist/useMultipleSelectionState.mjs +1 -1
- package/dist/useMultipleSelectionState.module.js +1 -1
- package/dist/useMultipleSelectionState.module.js.map +1 -1
- package/package.json +8 -7
- package/src/Selection.ts +5 -5
- package/src/SelectionManager.ts +43 -37
- package/src/types.ts +2 -2
- package/src/useMultipleSelectionState.ts +7 -7
|
@@ -72,8 +72,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
72
72
|
* Returns whether a key is selected.
|
|
73
73
|
*/ isSelected(key) {
|
|
74
74
|
if (this.state.selectionMode === 'none') return false;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
let mappedKey = this.getKey(key);
|
|
76
|
+
if (mappedKey == null) return false;
|
|
77
|
+
return this.state.selectedKeys === 'all' ? this.canSelectItem(mappedKey) : this.state.selectedKeys.has(mappedKey);
|
|
77
78
|
}
|
|
78
79
|
/**
|
|
79
80
|
* Whether the selection is empty.
|
|
@@ -97,7 +98,8 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
97
98
|
let item = this.collection.getItem(key);
|
|
98
99
|
if (!first || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, first) < 0) first = item;
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
+
var _first_key;
|
|
102
|
+
return (_first_key = first === null || first === void 0 ? void 0 : first.key) !== null && _first_key !== void 0 ? _first_key : null;
|
|
101
103
|
}
|
|
102
104
|
get lastSelectedKey() {
|
|
103
105
|
let last = null;
|
|
@@ -105,7 +107,8 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
105
107
|
let item = this.collection.getItem(key);
|
|
106
108
|
if (!last || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, last) > 0) last = item;
|
|
107
109
|
}
|
|
108
|
-
|
|
110
|
+
var _last_key;
|
|
111
|
+
return (_last_key = last === null || last === void 0 ? void 0 : last.key) !== null && _last_key !== void 0 ? _last_key : null;
|
|
109
112
|
}
|
|
110
113
|
get disabledKeys() {
|
|
111
114
|
return this.state.disabledKeys;
|
|
@@ -121,20 +124,21 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
121
124
|
this.replaceSelection(toKey);
|
|
122
125
|
return;
|
|
123
126
|
}
|
|
124
|
-
|
|
127
|
+
let mappedToKey = this.getKey(toKey);
|
|
128
|
+
if (mappedToKey == null) return;
|
|
125
129
|
let selection;
|
|
126
130
|
// Only select the one key if coming from a select all.
|
|
127
131
|
if (this.state.selectedKeys === 'all') selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)([
|
|
128
|
-
|
|
129
|
-
],
|
|
132
|
+
mappedToKey
|
|
133
|
+
], mappedToKey, mappedToKey);
|
|
130
134
|
else {
|
|
131
135
|
let selectedKeys = this.state.selectedKeys;
|
|
132
136
|
var _selectedKeys_anchorKey;
|
|
133
|
-
let anchorKey = (_selectedKeys_anchorKey = selectedKeys.anchorKey) !== null && _selectedKeys_anchorKey !== void 0 ? _selectedKeys_anchorKey :
|
|
134
|
-
selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey,
|
|
137
|
+
let anchorKey = (_selectedKeys_anchorKey = selectedKeys.anchorKey) !== null && _selectedKeys_anchorKey !== void 0 ? _selectedKeys_anchorKey : mappedToKey;
|
|
138
|
+
selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey, mappedToKey);
|
|
135
139
|
var _selectedKeys_currentKey;
|
|
136
|
-
for (let key of this.getKeyRange(anchorKey, (_selectedKeys_currentKey = selectedKeys.currentKey) !== null && _selectedKeys_currentKey !== void 0 ? _selectedKeys_currentKey :
|
|
137
|
-
for (let key of this.getKeyRange(
|
|
140
|
+
for (let key of this.getKeyRange(anchorKey, (_selectedKeys_currentKey = selectedKeys.currentKey) !== null && _selectedKeys_currentKey !== void 0 ? _selectedKeys_currentKey : mappedToKey))selection.delete(key);
|
|
141
|
+
for (let key of this.getKeyRange(mappedToKey, anchorKey))if (this.canSelectItem(key)) selection.add(key);
|
|
138
142
|
}
|
|
139
143
|
this.state.setSelectedKeys(selection);
|
|
140
144
|
}
|
|
@@ -154,7 +158,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
154
158
|
let key = from;
|
|
155
159
|
while(key != null){
|
|
156
160
|
let item = this.collection.getItem(key);
|
|
157
|
-
if (item && item.type === 'item' || item.type === 'cell' && this.allowsCellSelection) keys.push(key);
|
|
161
|
+
if (item && (item.type === 'item' || item.type === 'cell' && this.allowsCellSelection)) keys.push(key);
|
|
158
162
|
if (key === to) return keys;
|
|
159
163
|
key = this.collection.getKeyAfter(key);
|
|
160
164
|
}
|
|
@@ -167,7 +171,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
167
171
|
// If cell selection is allowed, just return the key.
|
|
168
172
|
if (item.type === 'cell' && this.allowsCellSelection) return key;
|
|
169
173
|
// Find a parent item to select
|
|
170
|
-
while(item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);
|
|
174
|
+
while(item && item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);
|
|
171
175
|
if (!item || item.type !== 'item') return null;
|
|
172
176
|
return item.key;
|
|
173
177
|
}
|
|
@@ -179,14 +183,14 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
179
183
|
this.replaceSelection(key);
|
|
180
184
|
return;
|
|
181
185
|
}
|
|
182
|
-
|
|
183
|
-
if (
|
|
186
|
+
let mappedKey = this.getKey(key);
|
|
187
|
+
if (mappedKey == null) return;
|
|
184
188
|
let keys = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
|
|
185
|
-
if (keys.has(
|
|
186
|
-
else if (this.canSelectItem(
|
|
187
|
-
keys.add(
|
|
188
|
-
keys.anchorKey =
|
|
189
|
-
keys.currentKey =
|
|
189
|
+
if (keys.has(mappedKey)) keys.delete(mappedKey);
|
|
190
|
+
else if (this.canSelectItem(mappedKey)) {
|
|
191
|
+
keys.add(mappedKey);
|
|
192
|
+
keys.anchorKey = mappedKey;
|
|
193
|
+
keys.currentKey = mappedKey;
|
|
190
194
|
}
|
|
191
195
|
if (this.disallowEmptySelection && keys.size === 0) return;
|
|
192
196
|
this.state.setSelectedKeys(keys);
|
|
@@ -195,11 +199,11 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
195
199
|
* Replaces the selection with only the given key.
|
|
196
200
|
*/ replaceSelection(key) {
|
|
197
201
|
if (this.selectionMode === 'none') return;
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
let selection = this.canSelectItem(
|
|
201
|
-
|
|
202
|
-
],
|
|
202
|
+
let mappedKey = this.getKey(key);
|
|
203
|
+
if (mappedKey == null) return;
|
|
204
|
+
let selection = this.canSelectItem(mappedKey) ? new (0, $e40ea825a81a3709$export$52baac22726c72bf)([
|
|
205
|
+
mappedKey
|
|
206
|
+
], mappedKey, mappedKey) : new (0, $e40ea825a81a3709$export$52baac22726c72bf)();
|
|
203
207
|
this.state.setSelectedKeys(selection);
|
|
204
208
|
}
|
|
205
209
|
/**
|
|
@@ -208,9 +212,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
208
212
|
if (this.selectionMode === 'none') return;
|
|
209
213
|
let selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)();
|
|
210
214
|
for (let key of keys){
|
|
211
|
-
|
|
212
|
-
if (
|
|
213
|
-
selection.add(
|
|
215
|
+
let mappedKey = this.getKey(key);
|
|
216
|
+
if (mappedKey != null) {
|
|
217
|
+
selection.add(mappedKey);
|
|
214
218
|
if (this.selectionMode === 'single') break;
|
|
215
219
|
}
|
|
216
220
|
}
|
|
@@ -221,10 +225,12 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
221
225
|
let addKeys = (key)=>{
|
|
222
226
|
while(key != null){
|
|
223
227
|
if (this.canSelectItem(key)) {
|
|
228
|
+
var _getFirstItem;
|
|
224
229
|
let item = this.collection.getItem(key);
|
|
225
|
-
if (item.type === 'item') keys.push(key);
|
|
230
|
+
if ((item === null || item === void 0 ? void 0 : item.type) === 'item') keys.push(key);
|
|
231
|
+
var _getFirstItem_key;
|
|
226
232
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
227
|
-
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) addKeys((0, $jkhUT$getFirstItem)((0, $jkhUT$getChildNodes)(item, this.collection)).key);
|
|
233
|
+
if ((item === null || item === void 0 ? void 0 : item.hasChildNodes) && (this.allowsCellSelection || item.type !== 'item')) addKeys((_getFirstItem_key = (_getFirstItem = (0, $jkhUT$getFirstItem)((0, $jkhUT$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key) !== null && _getFirstItem_key !== void 0 ? _getFirstItem_key : null);
|
|
228
234
|
}
|
|
229
235
|
key = this.collection.getKeyAfter(key);
|
|
230
236
|
}
|
|
@@ -72,8 +72,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
72
72
|
* Returns whether a key is selected.
|
|
73
73
|
*/ isSelected(key) {
|
|
74
74
|
if (this.state.selectionMode === 'none') return false;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
let mappedKey = this.getKey(key);
|
|
76
|
+
if (mappedKey == null) return false;
|
|
77
|
+
return this.state.selectedKeys === 'all' ? this.canSelectItem(mappedKey) : this.state.selectedKeys.has(mappedKey);
|
|
77
78
|
}
|
|
78
79
|
/**
|
|
79
80
|
* Whether the selection is empty.
|
|
@@ -97,7 +98,8 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
97
98
|
let item = this.collection.getItem(key);
|
|
98
99
|
if (!first || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, first) < 0) first = item;
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
+
var _first_key;
|
|
102
|
+
return (_first_key = first === null || first === void 0 ? void 0 : first.key) !== null && _first_key !== void 0 ? _first_key : null;
|
|
101
103
|
}
|
|
102
104
|
get lastSelectedKey() {
|
|
103
105
|
let last = null;
|
|
@@ -105,7 +107,8 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
105
107
|
let item = this.collection.getItem(key);
|
|
106
108
|
if (!last || item && (0, $jkhUT$compareNodeOrder)(this.collection, item, last) > 0) last = item;
|
|
107
109
|
}
|
|
108
|
-
|
|
110
|
+
var _last_key;
|
|
111
|
+
return (_last_key = last === null || last === void 0 ? void 0 : last.key) !== null && _last_key !== void 0 ? _last_key : null;
|
|
109
112
|
}
|
|
110
113
|
get disabledKeys() {
|
|
111
114
|
return this.state.disabledKeys;
|
|
@@ -121,20 +124,21 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
121
124
|
this.replaceSelection(toKey);
|
|
122
125
|
return;
|
|
123
126
|
}
|
|
124
|
-
|
|
127
|
+
let mappedToKey = this.getKey(toKey);
|
|
128
|
+
if (mappedToKey == null) return;
|
|
125
129
|
let selection;
|
|
126
130
|
// Only select the one key if coming from a select all.
|
|
127
131
|
if (this.state.selectedKeys === 'all') selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)([
|
|
128
|
-
|
|
129
|
-
],
|
|
132
|
+
mappedToKey
|
|
133
|
+
], mappedToKey, mappedToKey);
|
|
130
134
|
else {
|
|
131
135
|
let selectedKeys = this.state.selectedKeys;
|
|
132
136
|
var _selectedKeys_anchorKey;
|
|
133
|
-
let anchorKey = (_selectedKeys_anchorKey = selectedKeys.anchorKey) !== null && _selectedKeys_anchorKey !== void 0 ? _selectedKeys_anchorKey :
|
|
134
|
-
selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey,
|
|
137
|
+
let anchorKey = (_selectedKeys_anchorKey = selectedKeys.anchorKey) !== null && _selectedKeys_anchorKey !== void 0 ? _selectedKeys_anchorKey : mappedToKey;
|
|
138
|
+
selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey, mappedToKey);
|
|
135
139
|
var _selectedKeys_currentKey;
|
|
136
|
-
for (let key of this.getKeyRange(anchorKey, (_selectedKeys_currentKey = selectedKeys.currentKey) !== null && _selectedKeys_currentKey !== void 0 ? _selectedKeys_currentKey :
|
|
137
|
-
for (let key of this.getKeyRange(
|
|
140
|
+
for (let key of this.getKeyRange(anchorKey, (_selectedKeys_currentKey = selectedKeys.currentKey) !== null && _selectedKeys_currentKey !== void 0 ? _selectedKeys_currentKey : mappedToKey))selection.delete(key);
|
|
141
|
+
for (let key of this.getKeyRange(mappedToKey, anchorKey))if (this.canSelectItem(key)) selection.add(key);
|
|
138
142
|
}
|
|
139
143
|
this.state.setSelectedKeys(selection);
|
|
140
144
|
}
|
|
@@ -154,7 +158,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
154
158
|
let key = from;
|
|
155
159
|
while(key != null){
|
|
156
160
|
let item = this.collection.getItem(key);
|
|
157
|
-
if (item && item.type === 'item' || item.type === 'cell' && this.allowsCellSelection) keys.push(key);
|
|
161
|
+
if (item && (item.type === 'item' || item.type === 'cell' && this.allowsCellSelection)) keys.push(key);
|
|
158
162
|
if (key === to) return keys;
|
|
159
163
|
key = this.collection.getKeyAfter(key);
|
|
160
164
|
}
|
|
@@ -167,7 +171,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
167
171
|
// If cell selection is allowed, just return the key.
|
|
168
172
|
if (item.type === 'cell' && this.allowsCellSelection) return key;
|
|
169
173
|
// Find a parent item to select
|
|
170
|
-
while(item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);
|
|
174
|
+
while(item && item.type !== 'item' && item.parentKey != null)item = this.collection.getItem(item.parentKey);
|
|
171
175
|
if (!item || item.type !== 'item') return null;
|
|
172
176
|
return item.key;
|
|
173
177
|
}
|
|
@@ -179,14 +183,14 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
179
183
|
this.replaceSelection(key);
|
|
180
184
|
return;
|
|
181
185
|
}
|
|
182
|
-
|
|
183
|
-
if (
|
|
186
|
+
let mappedKey = this.getKey(key);
|
|
187
|
+
if (mappedKey == null) return;
|
|
184
188
|
let keys = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
|
|
185
|
-
if (keys.has(
|
|
186
|
-
else if (this.canSelectItem(
|
|
187
|
-
keys.add(
|
|
188
|
-
keys.anchorKey =
|
|
189
|
-
keys.currentKey =
|
|
189
|
+
if (keys.has(mappedKey)) keys.delete(mappedKey);
|
|
190
|
+
else if (this.canSelectItem(mappedKey)) {
|
|
191
|
+
keys.add(mappedKey);
|
|
192
|
+
keys.anchorKey = mappedKey;
|
|
193
|
+
keys.currentKey = mappedKey;
|
|
190
194
|
}
|
|
191
195
|
if (this.disallowEmptySelection && keys.size === 0) return;
|
|
192
196
|
this.state.setSelectedKeys(keys);
|
|
@@ -195,11 +199,11 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
195
199
|
* Replaces the selection with only the given key.
|
|
196
200
|
*/ replaceSelection(key) {
|
|
197
201
|
if (this.selectionMode === 'none') return;
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
let selection = this.canSelectItem(
|
|
201
|
-
|
|
202
|
-
],
|
|
202
|
+
let mappedKey = this.getKey(key);
|
|
203
|
+
if (mappedKey == null) return;
|
|
204
|
+
let selection = this.canSelectItem(mappedKey) ? new (0, $e40ea825a81a3709$export$52baac22726c72bf)([
|
|
205
|
+
mappedKey
|
|
206
|
+
], mappedKey, mappedKey) : new (0, $e40ea825a81a3709$export$52baac22726c72bf)();
|
|
203
207
|
this.state.setSelectedKeys(selection);
|
|
204
208
|
}
|
|
205
209
|
/**
|
|
@@ -208,9 +212,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
208
212
|
if (this.selectionMode === 'none') return;
|
|
209
213
|
let selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)();
|
|
210
214
|
for (let key of keys){
|
|
211
|
-
|
|
212
|
-
if (
|
|
213
|
-
selection.add(
|
|
215
|
+
let mappedKey = this.getKey(key);
|
|
216
|
+
if (mappedKey != null) {
|
|
217
|
+
selection.add(mappedKey);
|
|
214
218
|
if (this.selectionMode === 'single') break;
|
|
215
219
|
}
|
|
216
220
|
}
|
|
@@ -221,10 +225,12 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
221
225
|
let addKeys = (key)=>{
|
|
222
226
|
while(key != null){
|
|
223
227
|
if (this.canSelectItem(key)) {
|
|
228
|
+
var _getFirstItem;
|
|
224
229
|
let item = this.collection.getItem(key);
|
|
225
|
-
if (item.type === 'item') keys.push(key);
|
|
230
|
+
if ((item === null || item === void 0 ? void 0 : item.type) === 'item') keys.push(key);
|
|
231
|
+
var _getFirstItem_key;
|
|
226
232
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
227
|
-
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) addKeys((0, $jkhUT$getFirstItem)((0, $jkhUT$getChildNodes)(item, this.collection)).key);
|
|
233
|
+
if ((item === null || item === void 0 ? void 0 : item.hasChildNodes) && (this.allowsCellSelection || item.type !== 'item')) addKeys((_getFirstItem_key = (_getFirstItem = (0, $jkhUT$getFirstItem)((0, $jkhUT$getChildNodes)(item, this.collection))) === null || _getFirstItem === void 0 ? void 0 : _getFirstItem.key) !== null && _getFirstItem_key !== void 0 ? _getFirstItem_key : null);
|
|
228
234
|
}
|
|
229
235
|
key = this.collection.getKeyAfter(key);
|
|
230
236
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-stately/selection/src/SelectionManager.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n Collection, DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n Key,\n LayoutDelegate,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean,\n layoutDelegate?: LayoutDelegate\n}\n\n/**\n * An interface for reading and updating multiple selection state.\n */\nexport class SelectionManager implements MultipleSelectionManager {\n private collection: Collection<Node<unknown>>;\n private state: MultipleSelectionState;\n private allowsCellSelection: boolean;\n private _isSelectAll: boolean;\n private layoutDelegate: LayoutDelegate | null;\n\n constructor(collection: Collection<Node<unknown>>, state: MultipleSelectionState, options?: SelectionManagerOptions) {\n this.collection = collection;\n this.state = state;\n this.allowsCellSelection = options?.allowsCellSelection ?? false;\n this._isSelectAll = null;\n this.layoutDelegate = options?.layoutDelegate || null;\n }\n\n /**\n * The type of selection that is allowed in the collection.\n */\n get selectionMode(): SelectionMode {\n return this.state.selectionMode;\n }\n\n /**\n * Whether the collection allows empty selection.\n */\n get disallowEmptySelection(): boolean {\n return this.state.disallowEmptySelection;\n }\n\n /**\n * The selection behavior for the collection.\n */\n get selectionBehavior(): SelectionBehavior {\n return this.state.selectionBehavior;\n }\n\n /**\n * Sets the selection behavior for the collection.\n */\n setSelectionBehavior(selectionBehavior: SelectionBehavior) {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n\n /**\n * Whether the collection is currently focused.\n */\n get isFocused(): boolean {\n return this.state.isFocused;\n }\n\n /**\n * Sets whether the collection is focused.\n */\n setFocused(isFocused: boolean) {\n this.state.setFocused(isFocused);\n }\n\n /**\n * The current focused key in the collection.\n */\n get focusedKey(): Key {\n return this.state.focusedKey;\n }\n\n /** Whether the first or last child of the focused key should receive focus. */\n get childFocusStrategy(): FocusStrategy {\n return this.state.childFocusStrategy;\n }\n\n /**\n * Sets the focused key.\n */\n setFocusedKey(key: Key | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n toKey = this.getKey(toKey);\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([toKey], toKey, toKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey ?? toKey;\n selection = new Selection(selectedKeys, anchorKey, toKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey ?? toKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(toKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n if (this.layoutDelegate?.getKeyRange) {\n return this.layoutDelegate.getKeyRange(from, to);\n }\n\n let keys: Key[] = [];\n let key = from;\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item && item.type === 'item' || (item.type === 'cell' && this.allowsCellSelection)) {\n keys.push(key);\n }\n\n if (key === to) {\n return keys;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return [];\n }\n\n private getKey(key: Key) {\n let item = this.collection.getItem(key);\n if (!item) {\n // ¯\\_(ツ)_/¯\n return key;\n }\n\n // If cell selection is allowed, just return the key.\n if (item.type === 'cell' && this.allowsCellSelection) {\n return key;\n }\n\n // Find a parent item to select\n while (item.type !== 'item' && item.parentKey != null) {\n item = this.collection.getItem(item.parentKey);\n }\n\n if (!item || item.type !== 'item') {\n return null;\n }\n\n return item.key;\n }\n\n /**\n * Toggles whether the given key is selected.\n */\n toggleSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single' && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n\n key = this.getKey(key);\n if (key == null) {\n return;\n }\n\n let keys = new Selection(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n if (keys.has(key)) {\n keys.delete(key);\n // TODO: move anchor to last selected key...\n // Does `current` need to move here too?\n } else if (this.canSelectItem(key)) {\n keys.add(key);\n keys.anchorKey = key;\n keys.currentKey = key;\n }\n\n if (this.disallowEmptySelection && keys.size === 0) {\n return;\n }\n\n this.state.setSelectedKeys(keys);\n }\n\n /**\n * Replaces the selection with only the given key.\n */\n replaceSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n key = this.getKey(key);\n if (key == null) {\n return;\n }\n\n let selection = this.canSelectItem(key)\n ? new Selection([key], key, key)\n : new Selection();\n\n this.state.setSelectedKeys(selection);\n }\n\n /**\n * Replaces the selection with the given keys.\n */\n setSelectedKeys(keys: Iterable<Key>) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let selection = new Selection();\n for (let key of keys) {\n key = this.getKey(key);\n if (key != null) {\n selection.add(key);\n if (this.selectionMode === 'single') {\n break;\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getSelectAllKeys() {\n let keys: Key[] = [];\n let addKeys = (key: Key) => {\n while (key != null) {\n if (this.canSelectItem(key)) {\n let item = this.collection.getItem(key);\n if (item.type === 'item') {\n keys.push(key);\n }\n\n // Add child keys. If cell selection is allowed, then include item children too.\n if (item.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) {\n addKeys(getFirstItem(getChildNodes(item, this.collection)).key);\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n };\n\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll() {\n if (!this.isSelectAll && this.selectionMode === 'multiple') {\n this.state.setSelectedKeys('all');\n }\n }\n\n /**\n * Removes all keys from the selection.\n */\n clearSelection() {\n if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) {\n this.state.setSelectedKeys(new Selection());\n }\n }\n\n /**\n * Toggles between select all and an empty selection.\n */\n toggleSelectAll() {\n if (this.isSelectAll) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n }\n\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n if (this.isSelected(key) && !this.disallowEmptySelection) {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n } else if (this.selectionBehavior === 'toggle' || (e && (e.pointerType === 'touch' || e.pointerType === 'virtual'))) {\n // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n }\n\n /**\n * Returns whether the current selection is equal to the given selection.\n */\n isSelectionEqual(selection: Set<Key>) {\n if (selection === this.state.selectedKeys) {\n return true;\n }\n\n // Check if the set of keys match.\n let selectedKeys = this.selectedKeys;\n if (selection.size !== selectedKeys.size) {\n return false;\n }\n\n for (let key of selection) {\n if (!selectedKeys.has(key)) {\n return false;\n }\n }\n\n for (let key of selectedKeys) {\n if (!selection.has(key)) {\n return false;\n }\n }\n\n return true;\n }\n\n canSelectItem(key: Key) {\n if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) {\n return false;\n }\n\n let item = this.collection.getItem(key);\n if (!item || item?.props?.isDisabled || (item.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key) {\n return this.state.disabledBehavior === 'all' && (this.state.disabledKeys.has(key) || !!this.collection.getItem(key)?.props?.isDisabled);\n }\n\n isLink(key: Key) {\n return !!this.collection.getItem(key)?.props?.href;\n }\n\n getItemProps(key: Key) {\n return this.collection.getItem(key)?.props;\n }\n}\n"],"names":[],"version":3,"file":"SelectionManager.module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/selection/src/SelectionManager.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n Collection, DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n Key,\n LayoutDelegate,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean,\n layoutDelegate?: LayoutDelegate\n}\n\n/**\n * An interface for reading and updating multiple selection state.\n */\nexport class SelectionManager implements MultipleSelectionManager {\n collection: Collection<Node<unknown>>;\n private state: MultipleSelectionState;\n private allowsCellSelection: boolean;\n private _isSelectAll: boolean | null;\n private layoutDelegate: LayoutDelegate | null;\n\n constructor(collection: Collection<Node<unknown>>, state: MultipleSelectionState, options?: SelectionManagerOptions) {\n this.collection = collection;\n this.state = state;\n this.allowsCellSelection = options?.allowsCellSelection ?? false;\n this._isSelectAll = null;\n this.layoutDelegate = options?.layoutDelegate || null;\n }\n\n /**\n * The type of selection that is allowed in the collection.\n */\n get selectionMode(): SelectionMode {\n return this.state.selectionMode;\n }\n\n /**\n * Whether the collection allows empty selection.\n */\n get disallowEmptySelection(): boolean {\n return this.state.disallowEmptySelection;\n }\n\n /**\n * The selection behavior for the collection.\n */\n get selectionBehavior(): SelectionBehavior {\n return this.state.selectionBehavior;\n }\n\n /**\n * Sets the selection behavior for the collection.\n */\n setSelectionBehavior(selectionBehavior: SelectionBehavior) {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n\n /**\n * Whether the collection is currently focused.\n */\n get isFocused(): boolean {\n return this.state.isFocused;\n }\n\n /**\n * Sets whether the collection is focused.\n */\n setFocused(isFocused: boolean) {\n this.state.setFocused(isFocused);\n }\n\n /**\n * The current focused key in the collection.\n */\n get focusedKey(): Key | null {\n return this.state.focusedKey;\n }\n\n /** Whether the first or last child of the focused key should receive focus. */\n get childFocusStrategy(): FocusStrategy | null {\n return this.state.childFocusStrategy;\n }\n\n /**\n * Sets the focused key.\n */\n setFocusedKey(key: Key | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return false;\n }\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(mappedKey)\n : this.state.selectedKeys.has(mappedKey);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key ?? null;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key ?? null;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n let mappedToKey = this.getKey(toKey);\n if (mappedToKey == null) {\n return;\n }\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([mappedToKey], mappedToKey, mappedToKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey ?? mappedToKey;\n selection = new Selection(selectedKeys, anchorKey, mappedToKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey ?? mappedToKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(mappedToKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n if (this.layoutDelegate?.getKeyRange) {\n return this.layoutDelegate.getKeyRange(from, to);\n }\n\n let keys: Key[] = [];\n let key: Key | null = from;\n while (key != null) {\n let item = this.collection.getItem(key);\n if (item && (item.type === 'item' || (item.type === 'cell' && this.allowsCellSelection))) {\n keys.push(key);\n }\n\n if (key === to) {\n return keys;\n }\n\n key = this.collection.getKeyAfter(key);\n }\n\n return [];\n }\n\n private getKey(key: Key) {\n let item = this.collection.getItem(key);\n if (!item) {\n // ¯\\_(ツ)_/¯\n return key;\n }\n\n // If cell selection is allowed, just return the key.\n if (item.type === 'cell' && this.allowsCellSelection) {\n return key;\n }\n\n // Find a parent item to select\n while (item && item.type !== 'item' && item.parentKey != null) {\n item = this.collection.getItem(item.parentKey);\n }\n\n if (!item || item.type !== 'item') {\n return null;\n }\n\n return item.key;\n }\n\n /**\n * Toggles whether the given key is selected.\n */\n toggleSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single' && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return;\n }\n\n let keys = new Selection(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);\n if (keys.has(mappedKey)) {\n keys.delete(mappedKey);\n // TODO: move anchor to last selected key...\n // Does `current` need to move here too?\n } else if (this.canSelectItem(mappedKey)) {\n keys.add(mappedKey);\n keys.anchorKey = mappedKey;\n keys.currentKey = mappedKey;\n }\n\n if (this.disallowEmptySelection && keys.size === 0) {\n return;\n }\n\n this.state.setSelectedKeys(keys);\n }\n\n /**\n * Replaces the selection with only the given key.\n */\n replaceSelection(key: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let mappedKey = this.getKey(key);\n if (mappedKey == null) {\n return;\n }\n\n let selection = this.canSelectItem(mappedKey)\n ? new Selection([mappedKey], mappedKey, mappedKey)\n : new Selection();\n\n this.state.setSelectedKeys(selection);\n }\n\n /**\n * Replaces the selection with the given keys.\n */\n setSelectedKeys(keys: Iterable<Key>) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n let selection = new Selection();\n for (let key of keys) {\n let mappedKey = this.getKey(key);\n if (mappedKey != null) {\n selection.add(mappedKey);\n if (this.selectionMode === 'single') {\n break;\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getSelectAllKeys() {\n let keys: Key[] = [];\n let addKeys = (key: Key | null) => {\n while (key != null) {\n if (this.canSelectItem(key)) {\n let item = this.collection.getItem(key);\n if (item?.type === 'item') {\n keys.push(key);\n }\n\n // Add child keys. If cell selection is allowed, then include item children too.\n if (item?.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) {\n addKeys(getFirstItem(getChildNodes(item, this.collection))?.key ?? null);\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n };\n\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll() {\n if (!this.isSelectAll && this.selectionMode === 'multiple') {\n this.state.setSelectedKeys('all');\n }\n }\n\n /**\n * Removes all keys from the selection.\n */\n clearSelection() {\n if (!this.disallowEmptySelection && (this.state.selectedKeys === 'all' || this.state.selectedKeys.size > 0)) {\n this.state.setSelectedKeys(new Selection());\n }\n }\n\n /**\n * Toggles between select all and an empty selection.\n */\n toggleSelectAll() {\n if (this.isSelectAll) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n }\n\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n if (this.isSelected(key) && !this.disallowEmptySelection) {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n } else if (this.selectionBehavior === 'toggle' || (e && (e.pointerType === 'touch' || e.pointerType === 'virtual'))) {\n // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n }\n\n /**\n * Returns whether the current selection is equal to the given selection.\n */\n isSelectionEqual(selection: Set<Key>) {\n if (selection === this.state.selectedKeys) {\n return true;\n }\n\n // Check if the set of keys match.\n let selectedKeys = this.selectedKeys;\n if (selection.size !== selectedKeys.size) {\n return false;\n }\n\n for (let key of selection) {\n if (!selectedKeys.has(key)) {\n return false;\n }\n }\n\n for (let key of selectedKeys) {\n if (!selection.has(key)) {\n return false;\n }\n }\n\n return true;\n }\n\n canSelectItem(key: Key) {\n if (this.state.selectionMode === 'none' || this.state.disabledKeys.has(key)) {\n return false;\n }\n\n let item = this.collection.getItem(key);\n if (!item || item?.props?.isDisabled || (item.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key) {\n return this.state.disabledBehavior === 'all' && (this.state.disabledKeys.has(key) || !!this.collection.getItem(key)?.props?.isDisabled);\n }\n\n isLink(key: Key) {\n return !!this.collection.getItem(key)?.props?.href;\n }\n\n getItemProps(key: Key) {\n return this.collection.getItem(key)?.props;\n }\n}\n"],"names":[],"version":3,"file":"SelectionManager.module.js.map"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,9 +5,9 @@ export interface FocusState {
|
|
|
5
5
|
/** Sets whether the collection is focused. */
|
|
6
6
|
setFocused(isFocused: boolean): void;
|
|
7
7
|
/** The current focused key in the collection. */
|
|
8
|
-
readonly focusedKey: Key;
|
|
8
|
+
readonly focusedKey: Key | null;
|
|
9
9
|
/** Whether the first or last child of the focused key should receive focus. */
|
|
10
|
-
readonly childFocusStrategy: FocusStrategy;
|
|
10
|
+
readonly childFocusStrategy: FocusStrategy | null;
|
|
11
11
|
/** Sets the focused key, and optionally, whether the first or last child of that key should receive focus. */
|
|
12
12
|
setFocusedKey(key: Key | null, child?: FocusStrategy): void;
|
|
13
13
|
}
|
|
@@ -112,6 +112,7 @@ interface SelectionManagerOptions {
|
|
|
112
112
|
* An interface for reading and updating multiple selection state.
|
|
113
113
|
*/
|
|
114
114
|
export class SelectionManager implements MultipleSelectionManager {
|
|
115
|
+
collection: Collection<Node<unknown>>;
|
|
115
116
|
constructor(collection: Collection<Node<unknown>>, state: MultipleSelectionState, options?: SelectionManagerOptions);
|
|
116
117
|
/**
|
|
117
118
|
* The type of selection that is allowed in the collection.
|
|
@@ -140,9 +141,9 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
140
141
|
/**
|
|
141
142
|
* The current focused key in the collection.
|
|
142
143
|
*/
|
|
143
|
-
get focusedKey(): Key;
|
|
144
|
+
get focusedKey(): Key | null;
|
|
144
145
|
/** Whether the first or last child of the focused key should receive focus. */
|
|
145
|
-
get childFocusStrategy(): FocusStrategy;
|
|
146
|
+
get childFocusStrategy(): FocusStrategy | null;
|
|
146
147
|
/**
|
|
147
148
|
* Sets the focused key.
|
|
148
149
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";AAeA;IACE,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/selection/src/packages/@react-stately/selection/src/types.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/index.ts"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport type {MultipleSelectionStateProps} from './useMultipleSelectionState';\nexport type {FocusState, SingleSelectionState, MultipleSelectionState, MultipleSelectionManager} from './types';\nexport {useMultipleSelectionState} from './useMultipleSelectionState';\nexport {SelectionManager} from './SelectionManager';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
|
@@ -29,7 +29,7 @@ function $1adc19da2128bba9$var$equalSets(setA, setB) {
|
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
function $1adc19da2128bba9$export$253fe78d46329472(props) {
|
|
32
|
-
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
32
|
+
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection = false, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
33
33
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
34
34
|
// But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
|
|
35
35
|
let isFocusedRef = (0, $byFPT$react.useRef)(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;AAQD,SAAS,gCAAU,IAAI,EAAE,IAAI;IAC3B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EACzB,OAAO;IAGT,KAAK,IAAI,QAAQ,KAAM;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,OACZ,OAAO;IAEX;IAEA,OAAO;AACT;AAcO,SAAS,0CAA0B,KAAkC;IAC1E,IAAI,iBACF,gBAAgB,gCAChB,
|
|
1
|
+
{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;AAQD,SAAS,gCAAU,IAAI,EAAE,IAAI;IAC3B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EACzB,OAAO;IAGT,KAAK,IAAI,QAAQ,KAAM;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,OACZ,OAAO;IAEX;IAEA,OAAO;AACT;AAcO,SAAS,0CAA0B,KAAkC;IAC1E,IAAI,iBACF,gBAAgB,gCAChB,yBAAyB,sCACzB,6BAA6B,EAC7B,mBAAmB,wBAAwB,QAAQ,oBACnD,mBAAmB,OACpB,GAAG;IAEJ,8FAA8F;IAC9F,kGAAkG;IAClG,IAAI,eAAe,CAAA,GAAA,mBAAK,EAAE;IAC1B,IAAI,GAAG,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC9B,IAAI,gBAAgB,CAAA,GAAA,mBAAK,EAAc;IACvC,IAAI,wBAAwB,CAAA,GAAA,mBAAK,EAAwB;IACzD,IAAI,GAAG,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAc;IAC7C,IAAI,mBAAmB,CAAA,GAAA,oBAAM,EAAE,IAAM,uCAAiB,MAAM,YAAY,GAAG;QAAC,MAAM,YAAY;KAAC;IAC/F,IAAI,sBAAsB,CAAA,GAAA,oBAAM,EAAE,IAAM,uCAAiB,MAAM,mBAAmB,EAAE,IAAI,CAAA,GAAA,mCAAQ,MAAM;QAAC,MAAM,mBAAmB;KAAC;IACjI,IAAI,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,2CAAiB,EACrD,kBACA,qBACA,MAAM,iBAAiB;IAEzB,IAAI,mBAAmB,CAAA,GAAA,oBAAM,EAAE,IAC7B,MAAM,YAAY,GAAG,IAAI,IAAI,MAAM,YAAY,IAAI,IAAI,OACvD;QAAC,MAAM,YAAY;KAAC;IACtB,IAAI,CAAC,mBAAmB,qBAAqB,GAAG,CAAA,GAAA,qBAAO,EAAE;IAEzD,2GAA2G;IAC3G,oGAAoG;IACpG,IAAI,0BAA0B,aAAa,sBAAsB,YAAY,OAAO,iBAAiB,YAAY,aAAa,IAAI,KAAK,GACrI,qBAAqB;IAGvB,mEAAmE;IACnE,IAAI,wBAAwB,CAAA,GAAA,mBAAK,EAAE;IACnC,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,0BAA0B,sBAAsB,OAAO,EAAE;YAC3D,qBAAqB;YACrB,sBAAsB,OAAO,GAAG;QAClC;IACF,GAAG;QAAC;KAAsB;IAE1B,OAAO;uBACL;gCACA;2BACA;8BACA;QACA,IAAI,aAAY;YACd,OAAO,aAAa,OAAO;QAC7B;QACA,YAAW,CAAC;YACV,aAAa,OAAO,GAAG;YACvB,WAAW;QACb;QACA,IAAI,cAAa;YACf,OAAO,cAAc,OAAO;QAC9B;QACA,IAAI,sBAAqB;YACvB,OAAO,sBAAsB,OAAO;QACtC;QACA,eAAc,CAAC,EAAE,qBAAqB,OAAO;YAC3C,cAAc,OAAO,GAAG;YACxB,sBAAsB,OAAO,GAAG;YAChC,cAAc;QAChB;sBACA;QACA,iBAAgB,IAAI;YAClB,IAAI,iCAAiC,CAAC,gCAAU,MAAM,eACpD,gBAAgB;QAEpB;QACA,cAAc;0BACd;IACF;AACF;AAEA,SAAS,uCAAiB,SAAmD,EAAE,YAAwB;IACrG,IAAI,CAAC,WACH,OAAO;IAGT,OAAO,cAAc,QACjB,QACA,IAAI,CAAA,GAAA,mCAAQ,EAAE;AACpB","sources":["packages/@react-stately/selection/src/useMultipleSelectionState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DisabledBehavior, FocusStrategy, Key, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nfunction equalSets(setA, setB) {\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (let item of setA) {\n if (!setB.has(item)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport interface MultipleSelectionStateProps extends MultipleSelection {\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: SelectionBehavior,\n /** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */\n allowDuplicateSelectionEvents?: boolean,\n /** Whether `disabledKeys` applies to all interactions, or only selection. */\n disabledBehavior?: DisabledBehavior\n}\n\n/**\n * Manages state for multiple selection and focus in a collection.\n */\nexport function useMultipleSelectionState(props: MultipleSelectionStateProps): MultipleSelectionState {\n let {\n selectionMode = 'none' as SelectionMode,\n disallowEmptySelection = false,\n allowDuplicateSelectionEvents,\n selectionBehavior: selectionBehaviorProp = 'toggle',\n disabledBehavior = 'all'\n } = props;\n\n // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n let isFocusedRef = useRef(false);\n let [, setFocused] = useState(false);\n let focusedKeyRef = useRef<Key | null>(null);\n let childFocusStrategyRef = useRef<FocusStrategy | null>(null);\n let [, setFocusedKey] = useState<Key | null>(null);\n let selectedKeysProp = useMemo(() => convertSelection(props.selectedKeys), [props.selectedKeys]);\n let defaultSelectedKeys = useMemo(() => convertSelection(props.defaultSelectedKeys, new Selection()), [props.defaultSelectedKeys]);\n let [selectedKeys, setSelectedKeys] = useControlledState(\n selectedKeysProp,\n defaultSelectedKeys!,\n props.onSelectionChange\n );\n let disabledKeysProp = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n let [selectionBehavior, setSelectionBehavior] = useState(selectionBehaviorProp);\n\n // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\n\n // If the selectionBehavior prop changes, update the state as well.\n let lastSelectionBehavior = useRef(selectionBehaviorProp);\n useEffect(() => {\n if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n setSelectionBehavior(selectionBehaviorProp);\n lastSelectionBehavior.current = selectionBehaviorProp;\n }\n }, [selectionBehaviorProp]);\n\n return {\n selectionMode,\n disallowEmptySelection,\n selectionBehavior,\n setSelectionBehavior,\n get isFocused() {\n return isFocusedRef.current;\n },\n setFocused(f) {\n isFocusedRef.current = f;\n setFocused(f);\n },\n get focusedKey() {\n return focusedKeyRef.current;\n },\n get childFocusStrategy() {\n return childFocusStrategyRef.current;\n },\n setFocusedKey(k, childFocusStrategy = 'first') {\n focusedKeyRef.current = k;\n childFocusStrategyRef.current = childFocusStrategy;\n setFocusedKey(k);\n },\n selectedKeys,\n setSelectedKeys(keys) {\n if (allowDuplicateSelectionEvents || !equalSets(keys, selectedKeys)) {\n setSelectedKeys(keys);\n }\n },\n disabledKeys: disabledKeysProp,\n disabledBehavior\n };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key> | null | undefined, defaultValue?: Selection): 'all' | Set<Key> | undefined {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n"],"names":[],"version":3,"file":"useMultipleSelectionState.main.js.map"}
|
|
@@ -23,7 +23,7 @@ function $7af3f5b51489e0b5$var$equalSets(setA, setB) {
|
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
25
25
|
function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
|
|
26
|
-
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
26
|
+
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection = false, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
27
27
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
28
28
|
// But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
|
|
29
29
|
let isFocusedRef = (0, $6tM1y$useRef)(false);
|
|
@@ -23,7 +23,7 @@ function $7af3f5b51489e0b5$var$equalSets(setA, setB) {
|
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
25
25
|
function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
|
|
26
|
-
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
26
|
+
let { selectionMode: selectionMode = 'none', disallowEmptySelection: disallowEmptySelection = false, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = 'toggle', disabledBehavior: disabledBehavior = 'all' } = props;
|
|
27
27
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
28
28
|
// But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
|
|
29
29
|
let isFocusedRef = (0, $6tM1y$useRef)(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;AAAA;;;;;;;;;;CAUC;;;AAQD,SAAS,gCAAU,IAAI,EAAE,IAAI;IAC3B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EACzB,OAAO;IAGT,KAAK,IAAI,QAAQ,KAAM;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,OACZ,OAAO;IAEX;IAEA,OAAO;AACT;AAcO,SAAS,0CAA0B,KAAkC;IAC1E,IAAI,iBACF,gBAAgB,gCAChB,
|
|
1
|
+
{"mappings":";;;;AAAA;;;;;;;;;;CAUC;;;AAQD,SAAS,gCAAU,IAAI,EAAE,IAAI;IAC3B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EACzB,OAAO;IAGT,KAAK,IAAI,QAAQ,KAAM;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,OACZ,OAAO;IAEX;IAEA,OAAO;AACT;AAcO,SAAS,0CAA0B,KAAkC;IAC1E,IAAI,iBACF,gBAAgB,gCAChB,yBAAyB,sCACzB,6BAA6B,EAC7B,mBAAmB,wBAAwB,QAAQ,oBACnD,mBAAmB,OACpB,GAAG;IAEJ,8FAA8F;IAC9F,kGAAkG;IAClG,IAAI,eAAe,CAAA,GAAA,aAAK,EAAE;IAC1B,IAAI,GAAG,WAAW,GAAG,CAAA,GAAA,eAAO,EAAE;IAC9B,IAAI,gBAAgB,CAAA,GAAA,aAAK,EAAc;IACvC,IAAI,wBAAwB,CAAA,GAAA,aAAK,EAAwB;IACzD,IAAI,GAAG,cAAc,GAAG,CAAA,GAAA,eAAO,EAAc;IAC7C,IAAI,mBAAmB,CAAA,GAAA,cAAM,EAAE,IAAM,uCAAiB,MAAM,YAAY,GAAG;QAAC,MAAM,YAAY;KAAC;IAC/F,IAAI,sBAAsB,CAAA,GAAA,cAAM,EAAE,IAAM,uCAAiB,MAAM,mBAAmB,EAAE,IAAI,CAAA,GAAA,yCAAQ,MAAM;QAAC,MAAM,mBAAmB;KAAC;IACjI,IAAI,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,yBAAiB,EACrD,kBACA,qBACA,MAAM,iBAAiB;IAEzB,IAAI,mBAAmB,CAAA,GAAA,cAAM,EAAE,IAC7B,MAAM,YAAY,GAAG,IAAI,IAAI,MAAM,YAAY,IAAI,IAAI,OACvD;QAAC,MAAM,YAAY;KAAC;IACtB,IAAI,CAAC,mBAAmB,qBAAqB,GAAG,CAAA,GAAA,eAAO,EAAE;IAEzD,2GAA2G;IAC3G,oGAAoG;IACpG,IAAI,0BAA0B,aAAa,sBAAsB,YAAY,OAAO,iBAAiB,YAAY,aAAa,IAAI,KAAK,GACrI,qBAAqB;IAGvB,mEAAmE;IACnE,IAAI,wBAAwB,CAAA,GAAA,aAAK,EAAE;IACnC,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,0BAA0B,sBAAsB,OAAO,EAAE;YAC3D,qBAAqB;YACrB,sBAAsB,OAAO,GAAG;QAClC;IACF,GAAG;QAAC;KAAsB;IAE1B,OAAO;uBACL;gCACA;2BACA;8BACA;QACA,IAAI,aAAY;YACd,OAAO,aAAa,OAAO;QAC7B;QACA,YAAW,CAAC;YACV,aAAa,OAAO,GAAG;YACvB,WAAW;QACb;QACA,IAAI,cAAa;YACf,OAAO,cAAc,OAAO;QAC9B;QACA,IAAI,sBAAqB;YACvB,OAAO,sBAAsB,OAAO;QACtC;QACA,eAAc,CAAC,EAAE,qBAAqB,OAAO;YAC3C,cAAc,OAAO,GAAG;YACxB,sBAAsB,OAAO,GAAG;YAChC,cAAc;QAChB;sBACA;QACA,iBAAgB,IAAI;YAClB,IAAI,iCAAiC,CAAC,gCAAU,MAAM,eACpD,gBAAgB;QAEpB;QACA,cAAc;0BACd;IACF;AACF;AAEA,SAAS,uCAAiB,SAAmD,EAAE,YAAwB;IACrG,IAAI,CAAC,WACH,OAAO;IAGT,OAAO,cAAc,QACjB,QACA,IAAI,CAAA,GAAA,yCAAQ,EAAE;AACpB","sources":["packages/@react-stately/selection/src/useMultipleSelectionState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DisabledBehavior, FocusStrategy, Key, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\nimport {useEffect, useMemo, useRef, useState} from 'react';\n\nfunction equalSets(setA, setB) {\n if (setA.size !== setB.size) {\n return false;\n }\n\n for (let item of setA) {\n if (!setB.has(item)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport interface MultipleSelectionStateProps extends MultipleSelection {\n /** How multiple selection should behave in the collection. */\n selectionBehavior?: SelectionBehavior,\n /** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */\n allowDuplicateSelectionEvents?: boolean,\n /** Whether `disabledKeys` applies to all interactions, or only selection. */\n disabledBehavior?: DisabledBehavior\n}\n\n/**\n * Manages state for multiple selection and focus in a collection.\n */\nexport function useMultipleSelectionState(props: MultipleSelectionStateProps): MultipleSelectionState {\n let {\n selectionMode = 'none' as SelectionMode,\n disallowEmptySelection = false,\n allowDuplicateSelectionEvents,\n selectionBehavior: selectionBehaviorProp = 'toggle',\n disabledBehavior = 'all'\n } = props;\n\n // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n let isFocusedRef = useRef(false);\n let [, setFocused] = useState(false);\n let focusedKeyRef = useRef<Key | null>(null);\n let childFocusStrategyRef = useRef<FocusStrategy | null>(null);\n let [, setFocusedKey] = useState<Key | null>(null);\n let selectedKeysProp = useMemo(() => convertSelection(props.selectedKeys), [props.selectedKeys]);\n let defaultSelectedKeys = useMemo(() => convertSelection(props.defaultSelectedKeys, new Selection()), [props.defaultSelectedKeys]);\n let [selectedKeys, setSelectedKeys] = useControlledState(\n selectedKeysProp,\n defaultSelectedKeys!,\n props.onSelectionChange\n );\n let disabledKeysProp = useMemo(() =>\n props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()\n , [props.disabledKeys]);\n let [selectionBehavior, setSelectionBehavior] = useState(selectionBehaviorProp);\n\n // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\n\n // If the selectionBehavior prop changes, update the state as well.\n let lastSelectionBehavior = useRef(selectionBehaviorProp);\n useEffect(() => {\n if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n setSelectionBehavior(selectionBehaviorProp);\n lastSelectionBehavior.current = selectionBehaviorProp;\n }\n }, [selectionBehaviorProp]);\n\n return {\n selectionMode,\n disallowEmptySelection,\n selectionBehavior,\n setSelectionBehavior,\n get isFocused() {\n return isFocusedRef.current;\n },\n setFocused(f) {\n isFocusedRef.current = f;\n setFocused(f);\n },\n get focusedKey() {\n return focusedKeyRef.current;\n },\n get childFocusStrategy() {\n return childFocusStrategyRef.current;\n },\n setFocusedKey(k, childFocusStrategy = 'first') {\n focusedKeyRef.current = k;\n childFocusStrategyRef.current = childFocusStrategy;\n setFocusedKey(k);\n },\n selectedKeys,\n setSelectedKeys(keys) {\n if (allowDuplicateSelectionEvents || !equalSets(keys, selectedKeys)) {\n setSelectedKeys(keys);\n }\n },\n disabledKeys: disabledKeysProp,\n disabledBehavior\n };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key> | null | undefined, defaultValue?: Selection): 'all' | Set<Key> | undefined {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n"],"names":[],"version":3,"file":"useMultipleSelectionState.module.js.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-stately/selection",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.18.0",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -22,15 +22,16 @@
|
|
|
22
22
|
"url": "https://github.com/adobe/react-spectrum"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-stately/collections": "^3.
|
|
26
|
-
"@react-stately/utils": "^3.10.
|
|
27
|
-
"@react-types/shared": "^3.
|
|
25
|
+
"@react-stately/collections": "^3.12.0",
|
|
26
|
+
"@react-stately/utils": "^3.10.5",
|
|
27
|
+
"@react-types/shared": "^3.26.0",
|
|
28
28
|
"@swc/helpers": "^0.5.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0"
|
|
31
|
+
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
|
|
32
32
|
},
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"access": "public"
|
|
35
|
-
}
|
|
36
|
-
|
|
35
|
+
},
|
|
36
|
+
"gitHead": "71f0ef23053f9e03ee7e97df736e8b083e006849"
|
|
37
|
+
}
|