@react-stately/selection 3.9.3 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +31 -10
- package/dist/main.js.map +1 -1
- package/dist/module.js +32 -11
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/SelectionManager.ts +22 -5
- package/src/types.ts +10 -2
- package/src/useMultipleSelectionState.ts +21 -7
package/dist/main.js
CHANGED
|
@@ -47,7 +47,7 @@ function $1adc19da2128bba9$var$equalSets(setA, setB) {
|
|
|
47
47
|
return true;
|
|
48
48
|
}
|
|
49
49
|
function $1adc19da2128bba9$export$253fe78d46329472(props) {
|
|
50
|
-
let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents } = props;
|
|
50
|
+
let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents , selectionBehavior: selectionBehaviorProp = 'toggle' , disabledBehavior: disabledBehavior = 'all' } = props;
|
|
51
51
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
52
52
|
// But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
|
|
53
53
|
let isFocusedRef = $83d9f$react.useRef(false);
|
|
@@ -68,10 +68,20 @@ function $1adc19da2128bba9$export$253fe78d46329472(props) {
|
|
|
68
68
|
, [
|
|
69
69
|
props.disabledKeys
|
|
70
70
|
]);
|
|
71
|
-
let [selectionBehavior, setSelectionBehavior] = $83d9f$react.useState(
|
|
71
|
+
let [selectionBehavior, setSelectionBehavior] = $83d9f$react.useState(selectionBehaviorProp);
|
|
72
72
|
// If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press
|
|
73
73
|
// to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.
|
|
74
|
-
if (
|
|
74
|
+
if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');
|
|
75
|
+
// If the selectionBehavior prop changes, update the state as well.
|
|
76
|
+
let lastSelectionBehavior = $83d9f$react.useRef(selectionBehaviorProp);
|
|
77
|
+
$83d9f$react.useEffect(()=>{
|
|
78
|
+
if (selectionBehaviorProp !== lastSelectionBehavior.current) {
|
|
79
|
+
setSelectionBehavior(selectionBehaviorProp);
|
|
80
|
+
lastSelectionBehavior.current = selectionBehaviorProp;
|
|
81
|
+
}
|
|
82
|
+
}, [
|
|
83
|
+
selectionBehaviorProp
|
|
84
|
+
]);
|
|
75
85
|
return {
|
|
76
86
|
selectionMode: selectionMode,
|
|
77
87
|
disallowEmptySelection: disallowEmptySelection,
|
|
@@ -99,7 +109,8 @@ function $1adc19da2128bba9$export$253fe78d46329472(props) {
|
|
|
99
109
|
setSelectedKeys (keys) {
|
|
100
110
|
if (allowDuplicateSelectionEvents || !$1adc19da2128bba9$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);
|
|
101
111
|
},
|
|
102
|
-
disabledKeys: disabledKeysProp
|
|
112
|
+
disabledKeys: disabledKeysProp,
|
|
113
|
+
disabledBehavior: disabledBehavior
|
|
103
114
|
};
|
|
104
115
|
}
|
|
105
116
|
function $1adc19da2128bba9$var$convertSelection(selection, defaultValue) {
|
|
@@ -172,7 +183,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
172
183
|
*/ isSelected(key) {
|
|
173
184
|
if (this.state.selectionMode === 'none') return false;
|
|
174
185
|
key = this.getKey(key);
|
|
175
|
-
return this.state.selectedKeys === 'all' ?
|
|
186
|
+
return this.state.selectedKeys === 'all' ? this.canSelectItem(key) : this.state.selectedKeys.has(key);
|
|
176
187
|
}
|
|
177
188
|
/**
|
|
178
189
|
* Whether the selection is empty.
|
|
@@ -207,6 +218,12 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
207
218
|
}
|
|
208
219
|
return last === null || last === void 0 ? void 0 : last.key;
|
|
209
220
|
}
|
|
221
|
+
get disabledKeys() {
|
|
222
|
+
return this.state.disabledKeys;
|
|
223
|
+
}
|
|
224
|
+
get disabledBehavior() {
|
|
225
|
+
return this.state.disabledBehavior;
|
|
226
|
+
}
|
|
210
227
|
/**
|
|
211
228
|
* Extends the selection to the given key.
|
|
212
229
|
*/ extendSelection(toKey) {
|
|
@@ -226,7 +243,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
226
243
|
let anchorKey = selectedKeys.anchorKey || toKey;
|
|
227
244
|
selection = new $21c847070f1f9569$export$52baac22726c72bf(selectedKeys, anchorKey, toKey);
|
|
228
245
|
for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey))selection.delete(key);
|
|
229
|
-
for (let key1 of this.getKeyRange(toKey, anchorKey))if (
|
|
246
|
+
for (let key1 of this.getKeyRange(toKey, anchorKey))if (this.canSelectItem(key1)) selection.add(key1);
|
|
230
247
|
}
|
|
231
248
|
this.state.setSelectedKeys(selection);
|
|
232
249
|
}
|
|
@@ -273,7 +290,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
273
290
|
if (key == null) return;
|
|
274
291
|
let keys = new $21c847070f1f9569$export$52baac22726c72bf(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
|
|
275
292
|
if (keys.has(key)) keys.delete(key);
|
|
276
|
-
else {
|
|
293
|
+
else if (this.canSelectItem(key)) {
|
|
277
294
|
keys.add(key);
|
|
278
295
|
keys.anchorKey = key;
|
|
279
296
|
keys.currentKey = key;
|
|
@@ -287,9 +304,10 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
287
304
|
if (this.selectionMode === 'none') return;
|
|
288
305
|
key = this.getKey(key);
|
|
289
306
|
if (key == null) return;
|
|
290
|
-
this.
|
|
307
|
+
let selection = this.canSelectItem(key) ? new $21c847070f1f9569$export$52baac22726c72bf([
|
|
291
308
|
key
|
|
292
|
-
], key, key));
|
|
309
|
+
], key, key) : new $21c847070f1f9569$export$52baac22726c72bf();
|
|
310
|
+
this.state.setSelectedKeys(selection);
|
|
293
311
|
}
|
|
294
312
|
/**
|
|
295
313
|
* Replaces the selection with the given keys.
|
|
@@ -309,7 +327,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
309
327
|
let keys = [];
|
|
310
328
|
let addKeys = (key)=>{
|
|
311
329
|
while(key){
|
|
312
|
-
if (
|
|
330
|
+
if (this.canSelectItem(key)) {
|
|
313
331
|
let item = this.collection.getItem(key);
|
|
314
332
|
if (item.type === 'item') keys.push(key);
|
|
315
333
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
@@ -369,6 +387,9 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
369
387
|
if (!item || item.type === 'cell' && !this.allowsCellSelection) return false;
|
|
370
388
|
return true;
|
|
371
389
|
}
|
|
390
|
+
isDisabled(key) {
|
|
391
|
+
return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';
|
|
392
|
+
}
|
|
372
393
|
constructor(collection, state, options){
|
|
373
394
|
this.collection = collection;
|
|
374
395
|
this.state = state;
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/types.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\nexport * from './useMultipleSelectionState';\nexport * from './SelectionManager';\nexport * from './types';\n","/*\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 {Key, useMemo, useRef, useState} from 'react';\nimport {MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\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}\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,\n allowDuplicateSelectionEvents\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(null);\n let childFocusStrategyRef = useRef(null);\n let [, setFocusedKey] = useState(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(props.selectionBehavior || 'toggle');\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 (props.selectionBehavior === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\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 };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key>, defaultValue?: Selection): 'all' | Selection {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\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 {Key} from 'react';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key;\n currentKey: Key;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key, currentKey?: Key) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n","/*\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,\n FocusStrategy,\n Selection as ISelection,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {Key} from 'react';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean\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\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 }\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, childFocusStrategy?: FocusStrategy) {\n this.state.setFocusedKey(key, childFocusStrategy);\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.state.disabledKeys.has(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?.index < first.index) {\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?.index > last.index) {\n last = item;\n }\n }\n\n return last?.key;\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.state.disabledKeys.has(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 (fromItem.index <= toItem.index) {\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 let keys: Key[] = [];\n let key = from;\n while (key) {\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 {\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 this.state.setSelectedKeys(new Selection([key], key, key));\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) {\n if (!this.state.disabledKeys.has(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([...item.childNodes][0].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.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.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n}\n","/*\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 {FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key} from 'react';\n\nexport interface FocusState {\n /** Whether the collection is currently focused. */\n readonly isFocused: boolean,\n /** Sets whether the collection is focused. */\n setFocused(isFocused: boolean): void,\n /** The current focused key in the collection. */\n readonly focusedKey: Key,\n /** Whether the first or last child of the focused key should receive focus. */\n readonly childFocusStrategy: FocusStrategy,\n /** Sets the focused key, and optionally, whether the first or last child of that key should receive focus. */\n setFocusedKey(key: Key, child?: FocusStrategy): void\n}\n\nexport interface SingleSelectionState extends FocusState {\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected key in the collection. */\n readonly selectedKey: Key,\n /** Sets the selected key in the collection. */\n setSelectedKey(key: Key): void\n}\n\nexport interface MultipleSelectionState extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Selection,\n /** Sets the selected keys in the collection. */\n setSelectedKeys(keys: Selection): void,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>\n}\n\nexport interface MultipleSelectionManager extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Set<Key>,\n /** Whether the selection is empty. */\n readonly isEmpty: boolean,\n /** Whether all items in the collection are selected. */\n readonly isSelectAll: boolean,\n /** The first selected key in the collection. */\n readonly firstSelectedKey: Key | null,\n /** The last selected key in the collection. */\n readonly lastSelectedKey: Key | null,\n /** Returns whether a key is selected. */\n isSelected(key: Key): boolean,\n /** Returns whether the current selection is equal to the given selection. */\n isSelectionEqual(selection: Set<Key>): boolean,\n /** Extends the selection to the given key. */\n extendSelection(toKey: Key): void,\n /** Toggles whether the given key is selected. */\n toggleSelection(key: Key): void,\n /** Replaces the selection with only the given key. */\n replaceSelection(key: Key): void,\n /** Replaces the selection with the given keys. */\n setSelectedKeys(keys: Iterable<Key>): void,\n /** Selects all items in the collection. */\n selectAll(): void,\n /** Removes all keys from the selection. */\n clearSelection(): void,\n /** Toggles between select all and an empty selection. */\n toggleSelectAll(): void,\n /**\n * Toggles, replaces, or extends selection to the given key depending\n * on the pointer event and collection's selection mode.\n */\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void,\n /** Returns whether the given key can be selected. */\n canSelectItem(key: Key): boolean,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/types.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\nexport * from './useMultipleSelectionState';\nexport * from './SelectionManager';\nexport * from './types';\n","/*\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, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key, useEffect, useMemo, useRef, useState} from 'react';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\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,\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(null);\n let childFocusStrategyRef = useRef(null);\n let [, setFocusedKey] = useState(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>, defaultValue?: Selection): 'all' | Selection {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\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 {Key} from 'react';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key;\n currentKey: Key;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key, currentKey?: Key) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n","/*\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,\n DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {Key} from 'react';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean\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\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 }\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, childFocusStrategy?: FocusStrategy) {\n this.state.setFocusedKey(key, childFocusStrategy);\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?.index < first.index) {\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?.index > last.index) {\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 (fromItem.index <= toItem.index) {\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 let keys: Key[] = [];\n let key = from;\n while (key) {\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) {\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([...item.childNodes][0].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.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.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key) {\n return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';\n }\n}\n","/*\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, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key} from 'react';\n\nexport interface FocusState {\n /** Whether the collection is currently focused. */\n readonly isFocused: boolean,\n /** Sets whether the collection is focused. */\n setFocused(isFocused: boolean): void,\n /** The current focused key in the collection. */\n readonly focusedKey: Key,\n /** Whether the first or last child of the focused key should receive focus. */\n readonly childFocusStrategy: FocusStrategy,\n /** Sets the focused key, and optionally, whether the first or last child of that key should receive focus. */\n setFocusedKey(key: Key, child?: FocusStrategy): void\n}\n\nexport interface SingleSelectionState extends FocusState {\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected key in the collection. */\n readonly selectedKey: Key,\n /** Sets the selected key in the collection. */\n setSelectedKey(key: Key): void\n}\n\nexport interface MultipleSelectionState extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Selection,\n /** Sets the selected keys in the collection. */\n setSelectedKeys(keys: Selection): void,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>,\n /** Whether `disabledKeys` applies to selection, actions, or both. */\n readonly disabledBehavior: DisabledBehavior\n}\n\nexport interface MultipleSelectionManager extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Set<Key>,\n /** Whether the selection is empty. */\n readonly isEmpty: boolean,\n /** Whether all items in the collection are selected. */\n readonly isSelectAll: boolean,\n /** The first selected key in the collection. */\n readonly firstSelectedKey: Key | null,\n /** The last selected key in the collection. */\n readonly lastSelectedKey: Key | null,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>,\n /** Whether `disabledKeys` applies to selection, actions, or both. */\n readonly disabledBehavior: DisabledBehavior,\n /** Returns whether a key is selected. */\n isSelected(key: Key): boolean,\n /** Returns whether the current selection is equal to the given selection. */\n isSelectionEqual(selection: Set<Key>): boolean,\n /** Extends the selection to the given key. */\n extendSelection(toKey: Key): void,\n /** Toggles whether the given key is selected. */\n toggleSelection(key: Key): void,\n /** Replaces the selection with only the given key. */\n replaceSelection(key: Key): void,\n /** Replaces the selection with the given keys. */\n setSelectedKeys(keys: Iterable<Key>): void,\n /** Selects all items in the collection. */\n selectAll(): void,\n /** Removes all keys from the selection. */\n clearSelection(): void,\n /** Toggles between select all and an empty selection. */\n toggleSelectAll(): void,\n /**\n * Toggles, replaces, or extends selection to the given key depending\n * on the pointer event and collection's selection mode.\n */\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void,\n /** Returns whether the given key can be selected. */\n canSelectItem(key: Key): boolean,\n /** Returns whether the given key is non-interactive, i.e. both selection and actions are disabled. */\n isDisabled(key: Key): boolean,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|
package/dist/module.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {useRef as $Qsto2$useRef, useState as $Qsto2$useState, useMemo as $Qsto2$useMemo} from "react";
|
|
1
|
+
import {useRef as $Qsto2$useRef, useState as $Qsto2$useState, useMemo as $Qsto2$useMemo, useEffect as $Qsto2$useEffect} from "react";
|
|
2
2
|
import {useControlledState as $Qsto2$useControlledState} from "@react-stately/utils";
|
|
3
3
|
|
|
4
4
|
function $parcel$export(e, n, v, s) {
|
|
@@ -31,7 +31,7 @@ function $7af3f5b51489e0b5$var$equalSets(setA, setB) {
|
|
|
31
31
|
return true;
|
|
32
32
|
}
|
|
33
33
|
function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
|
|
34
|
-
let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents } = props;
|
|
34
|
+
let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents , selectionBehavior: selectionBehaviorProp = 'toggle' , disabledBehavior: disabledBehavior = 'all' } = props;
|
|
35
35
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
36
36
|
// But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
|
|
37
37
|
let isFocusedRef = $Qsto2$useRef(false);
|
|
@@ -52,10 +52,20 @@ function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
|
|
|
52
52
|
, [
|
|
53
53
|
props.disabledKeys
|
|
54
54
|
]);
|
|
55
|
-
let [selectionBehavior, setSelectionBehavior] = $Qsto2$useState(
|
|
55
|
+
let [selectionBehavior, setSelectionBehavior] = $Qsto2$useState(selectionBehaviorProp);
|
|
56
56
|
// If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press
|
|
57
57
|
// to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.
|
|
58
|
-
if (
|
|
58
|
+
if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');
|
|
59
|
+
// If the selectionBehavior prop changes, update the state as well.
|
|
60
|
+
let lastSelectionBehavior = $Qsto2$useRef(selectionBehaviorProp);
|
|
61
|
+
$Qsto2$useEffect(()=>{
|
|
62
|
+
if (selectionBehaviorProp !== lastSelectionBehavior.current) {
|
|
63
|
+
setSelectionBehavior(selectionBehaviorProp);
|
|
64
|
+
lastSelectionBehavior.current = selectionBehaviorProp;
|
|
65
|
+
}
|
|
66
|
+
}, [
|
|
67
|
+
selectionBehaviorProp
|
|
68
|
+
]);
|
|
59
69
|
return {
|
|
60
70
|
selectionMode: selectionMode,
|
|
61
71
|
disallowEmptySelection: disallowEmptySelection,
|
|
@@ -83,7 +93,8 @@ function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
|
|
|
83
93
|
setSelectedKeys (keys) {
|
|
84
94
|
if (allowDuplicateSelectionEvents || !$7af3f5b51489e0b5$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);
|
|
85
95
|
},
|
|
86
|
-
disabledKeys: disabledKeysProp
|
|
96
|
+
disabledKeys: disabledKeysProp,
|
|
97
|
+
disabledBehavior: disabledBehavior
|
|
87
98
|
};
|
|
88
99
|
}
|
|
89
100
|
function $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {
|
|
@@ -156,7 +167,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
156
167
|
*/ isSelected(key) {
|
|
157
168
|
if (this.state.selectionMode === 'none') return false;
|
|
158
169
|
key = this.getKey(key);
|
|
159
|
-
return this.state.selectedKeys === 'all' ?
|
|
170
|
+
return this.state.selectedKeys === 'all' ? this.canSelectItem(key) : this.state.selectedKeys.has(key);
|
|
160
171
|
}
|
|
161
172
|
/**
|
|
162
173
|
* Whether the selection is empty.
|
|
@@ -191,6 +202,12 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
191
202
|
}
|
|
192
203
|
return last === null || last === void 0 ? void 0 : last.key;
|
|
193
204
|
}
|
|
205
|
+
get disabledKeys() {
|
|
206
|
+
return this.state.disabledKeys;
|
|
207
|
+
}
|
|
208
|
+
get disabledBehavior() {
|
|
209
|
+
return this.state.disabledBehavior;
|
|
210
|
+
}
|
|
194
211
|
/**
|
|
195
212
|
* Extends the selection to the given key.
|
|
196
213
|
*/ extendSelection(toKey) {
|
|
@@ -210,7 +227,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
210
227
|
let anchorKey = selectedKeys.anchorKey || toKey;
|
|
211
228
|
selection = new $e40ea825a81a3709$export$52baac22726c72bf(selectedKeys, anchorKey, toKey);
|
|
212
229
|
for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey))selection.delete(key);
|
|
213
|
-
for (let key1 of this.getKeyRange(toKey, anchorKey))if (
|
|
230
|
+
for (let key1 of this.getKeyRange(toKey, anchorKey))if (this.canSelectItem(key1)) selection.add(key1);
|
|
214
231
|
}
|
|
215
232
|
this.state.setSelectedKeys(selection);
|
|
216
233
|
}
|
|
@@ -257,7 +274,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
257
274
|
if (key == null) return;
|
|
258
275
|
let keys = new $e40ea825a81a3709$export$52baac22726c72bf(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
|
|
259
276
|
if (keys.has(key)) keys.delete(key);
|
|
260
|
-
else {
|
|
277
|
+
else if (this.canSelectItem(key)) {
|
|
261
278
|
keys.add(key);
|
|
262
279
|
keys.anchorKey = key;
|
|
263
280
|
keys.currentKey = key;
|
|
@@ -271,9 +288,10 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
271
288
|
if (this.selectionMode === 'none') return;
|
|
272
289
|
key = this.getKey(key);
|
|
273
290
|
if (key == null) return;
|
|
274
|
-
this.
|
|
291
|
+
let selection = this.canSelectItem(key) ? new $e40ea825a81a3709$export$52baac22726c72bf([
|
|
275
292
|
key
|
|
276
|
-
], key, key));
|
|
293
|
+
], key, key) : new $e40ea825a81a3709$export$52baac22726c72bf();
|
|
294
|
+
this.state.setSelectedKeys(selection);
|
|
277
295
|
}
|
|
278
296
|
/**
|
|
279
297
|
* Replaces the selection with the given keys.
|
|
@@ -293,7 +311,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
293
311
|
let keys = [];
|
|
294
312
|
let addKeys = (key)=>{
|
|
295
313
|
while(key){
|
|
296
|
-
if (
|
|
314
|
+
if (this.canSelectItem(key)) {
|
|
297
315
|
let item = this.collection.getItem(key);
|
|
298
316
|
if (item.type === 'item') keys.push(key);
|
|
299
317
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
@@ -353,6 +371,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
353
371
|
if (!item || item.type === 'cell' && !this.allowsCellSelection) return false;
|
|
354
372
|
return true;
|
|
355
373
|
}
|
|
374
|
+
isDisabled(key) {
|
|
375
|
+
return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';
|
|
376
|
+
}
|
|
356
377
|
constructor(collection, state, options){
|
|
357
378
|
this.collection = collection;
|
|
358
379
|
this.state = state;
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;MEkBa,yCAAS,SAAS,GAAG;gBAIpB,IAAgC,EAAE,SAAe,EAAE,UAAgB,CAAE,CAAC;QAChF,KAAK,CAAC,IAAI;QACV,EAAE,EAAE,IAAI,YAAY,yCAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS;YAC5C,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU;QACjD,CAAC,MAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,SAAS;YAC1B,IAAI,CAAC,UAAU,GAAG,UAAU;QAC9B,CAAC;IACH,CAAC;;;;;SDbM,+BAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EACzB,MAAM,CAAC,KAAK;IAGd,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAE,CAAC;QACtB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAChB,MAAM,CAAC,KAAK;IAEhB,CAAC;IAED,MAAM,CAAC,IAAI;AACb,CAAC;SAYe,yCAAyB,CAAC,KAAkC,EAA0B,CAAC;IACrG,GAAG,CAAC,CAAC,gBACH,aAAa,GAAG,CAAM,gCACtB,sBAAsB,kCACtB,6BAA6B,EAC/B,CAAC,GAAG,KAAK;IAET,EAA8F,AAA9F,4FAA8F;IAC9F,EAAkG,AAAlG,gGAAkG;IAClG,GAAG,CAAC,YAAY,GAAG,aAAM,CAAC,KAAK;IAC/B,GAAG,IAAI,UAAU,IAAI,eAAQ,CAAC,KAAK;IACnC,GAAG,CAAC,aAAa,GAAG,aAAM,CAAC,IAAI;IAC/B,GAAG,CAAC,qBAAqB,GAAG,aAAM,CAAC,IAAI;IACvC,GAAG,IAAI,aAAa,IAAI,eAAQ,CAAC,IAAI;IACrC,GAAG,CAAC,gBAAgB,GAAG,cAAO,KAAO,sCAAgB,CAAC,KAAK,CAAC,YAAY;MAAG,CAAC;QAAA,KAAK,CAAC,YAAY;IAAA,CAAC;IAC/F,GAAG,CAAC,mBAAmB,GAAG,cAAO,KAAO,sCAAgB,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,yCAAS;MAAK,CAAC;QAAA,KAAK,CAAC,mBAAmB;IAAA,CAAC;IACjI,GAAG,EAAE,YAAY,EAAE,eAAe,IAAI,yBAAkB,CACtD,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,CAAC,iBAAiB;IAEzB,GAAG,CAAC,gBAAgB,GAAG,cAAO,KAC5B,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG;MAC1D,CAAC;QAAA,KAAK,CAAC,YAAY;IAAA,CAAC;IACtB,GAAG,EAAE,iBAAiB,EAAE,oBAAoB,IAAI,eAAQ,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAQ;IAE5F,EAA2G,AAA3G,yGAA2G;IAC3G,EAAoG,AAApG,kGAAoG;IACpG,EAAE,EAAE,KAAK,CAAC,iBAAiB,KAAK,CAAS,YAAI,iBAAiB,KAAK,CAAQ,WAAI,MAAM,CAAC,YAAY,KAAK,CAAQ,WAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EACxI,oBAAoB,CAAC,CAAS;IAGhC,MAAM,CAAC,CAAC;uBACN,aAAa;gCACb,sBAAsB;2BACtB,iBAAiB;8BACjB,oBAAoB;YAChB,SAAS,IAAG,CAAC;YACf,MAAM,CAAC,YAAY,CAAC,OAAO;QAC7B,CAAC;QACD,UAAU,EAAC,CAAC,EAAE,CAAC;YACb,YAAY,CAAC,OAAO,GAAG,CAAC;YACxB,UAAU,CAAC,CAAC;QACd,CAAC;YACG,UAAU,IAAG,CAAC;YAChB,MAAM,CAAC,aAAa,CAAC,OAAO;QAC9B,CAAC;YACG,kBAAkB,IAAG,CAAC;YACxB,MAAM,CAAC,qBAAqB,CAAC,OAAO;QACtC,CAAC;QACD,aAAa,EAAC,CAAC,EAAE,kBAAkB,GAAG,CAAO,QAAE,CAAC;YAC9C,aAAa,CAAC,OAAO,GAAG,CAAC;YACzB,qBAAqB,CAAC,OAAO,GAAG,kBAAkB;YAClD,aAAa,CAAC,CAAC;QACjB,CAAC;sBACD,YAAY;QACZ,eAAe,EAAC,IAAI,EAAE,CAAC;YACrB,EAAE,EAAE,6BAA6B,KAAK,+BAAS,CAAC,IAAI,EAAE,YAAY,GAChE,eAAe,CAAC,IAAI;QAExB,CAAC;QACD,YAAY,EAAE,gBAAgB;IAChC,CAAC;AACH,CAAC;SAEQ,sCAAgB,CAAC,SAAgC,EAAE,YAAwB,EAAqB,CAAC;IACxG,EAAE,GAAG,SAAS,EACZ,MAAM,CAAC,YAAY;IAGrB,MAAM,CAAC,SAAS,KAAK,CAAK,OACtB,CAAK,OACL,GAAG,CAAC,yCAAS,CAAC,SAAS;AAC7B,CAAC;;;;;;;MElFY,yCAAgB;IAa3B,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,aAAa,GAAkB,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa;IACjC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,sBAAsB,GAAY,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB;IAC1C,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,iBAAiB,GAAsB,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB;IACrC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,oBAAoB,CAAC,iBAAoC,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB;IACnD,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,SAAS,GAAY,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS;IAC7B,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,UAAU,CAAC,SAAkB,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS;IACjC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,UAAU,GAAQ,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B,CAAC;IAED,EAA+E,AAA/E,2EAA+E,AAA/E,EAA+E,KAC3E,kBAAkB,GAAkB,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB;IACtC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,aAAa,CAAC,GAAQ,EAAE,kBAAkC,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,kBAAkB;IAClD,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,YAAY,GAAa,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,OACpC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAC7B,IAAI,CAAC,KAAK,CAAC,YAAY;IAC7B,CAAC;IAED,EAGG,AAHH;;;GAGG,AAHH,EAGG,KACC,YAAY,GAAe,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;IAChC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,UAAU,CAAC,GAAQ,EAAE,CAAC;QACpB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,CAAM,OACrC,MAAM,CAAC,KAAK;QAGd,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,QACnC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAChC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG;IACrC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,OAAO,GAAY,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,QAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;IAChF,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,KACC,WAAW,GAAY,CAAC;QAC1B,EAAE,EAAE,IAAI,CAAC,OAAO,EACd,MAAM,CAAC,KAAK;QAGd,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,MACnC,MAAM,CAAC,IAAI;QAGb,EAAE,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,EAC3B,MAAM,CAAC,IAAI,CAAC,YAAY;QAG1B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB;QACnC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;QAC1C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,EAAC,CAAC,GAAI,YAAY,CAAC,GAAG,CAAC,CAAC;;QACzD,MAAM,CAAC,IAAI,CAAC,YAAY;IAC1B,CAAC;QAEG,gBAAgB,GAAe,CAAC;QAClC,GAAG,CAAC,KAAK,GAAyB,IAAI;QACtC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAE,CAAC;YACxC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;YACtC,EAAE,GAAG,KAAK,KAAI,IAAI,aAAJ,IAAI,KAAJ,IAAI,CAAJ,CAAW,GAAX,IAAI,CAAJ,CAAW,GAAX,IAAI,CAAE,KAAK,IAAG,KAAK,CAAC,KAAK,EACrC,KAAK,GAAG,IAAI;QAEhB,CAAC;QAED,MAAM,CAAC,KAAK,aAAL,KAAK,KAAL,IAAI,CAAJ,CAAU,GAAV,IAAI,CAAJ,CAAU,GAAV,KAAK,CAAE,GAAG;IACnB,CAAC;QAEG,eAAe,GAAe,CAAC;QACjC,GAAG,CAAC,IAAI,GAAyB,IAAI;QACrC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAE,CAAC;YACxC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;YACtC,EAAE,GAAG,IAAI,KAAI,IAAI,aAAJ,IAAI,KAAJ,IAAI,CAAJ,CAAW,GAAX,IAAI,CAAJ,CAAW,GAAX,IAAI,CAAE,KAAK,IAAG,IAAI,CAAC,KAAK,EACnC,IAAI,GAAG,IAAI;QAEf,CAAC;QAED,MAAM,CAAC,IAAI,aAAJ,IAAI,KAAJ,IAAI,CAAJ,CAAS,GAAT,IAAI,CAAJ,CAAS,GAAT,IAAI,CAAE,GAAG;IAClB,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,eAAe,CAAC,KAAU,EAAE,CAAC;QAC3B,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAM,OAC/B,MAAM;QAGR,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAQ,SAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,KAAK;YAC3B,MAAM;QACR,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAEzB,GAAG,CAAC,SAAS;QAEb,EAAuD,AAAvD,qDAAuD;QACvD,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,MACnC,SAAS,GAAG,GAAG,CAAC,yCAAS,CAAC,CAAC;YAAA,KAAK;QAAA,CAAC,EAAE,KAAK,EAAE,KAAK;aAC1C,CAAC;YACN,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;YAC1C,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,KAAK;YAC/C,SAAS,GAAG,GAAG,CAAC,yCAAS,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK;YACxD,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,IAAI,KAAK,EAC1E,SAAS,CAAC,MAAM,CAAC,GAAG;YAGtB,GAAG,EAAE,GAAG,CAAC,IAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAC/C,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAG,GAClC,SAAS,CAAC,GAAG,CAAC,IAAG;QAGvB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS;IACtC,CAAC;IAEO,WAAW,CAAC,IAAS,EAAE,EAAO,EAAE,CAAC;QACvC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI;QAC3C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACvC,EAAE,EAAE,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvB,EAAE,EAAE,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAChC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE;YAG1C,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI;QAC1C,CAAC;QAED,MAAM,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,mBAAmB,CAAC,IAAS,EAAE,EAAO,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,GAAU,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,GAAG,IAAI;cACP,GAAG,CAAE,CAAC;YACX,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;YACtC,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAM,SAAK,IAAI,CAAC,IAAI,KAAK,CAAM,SAAI,IAAI,CAAC,mBAAmB,EACnF,IAAI,CAAC,IAAI,CAAC,GAAG;YAGf,EAAE,EAAE,GAAG,KAAK,EAAE,EACZ,MAAM,CAAC,IAAI;YAGb,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;QACvC,CAAC;QAED,MAAM,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,MAAM,CAAC,GAAQ,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;QACtC,EAAE,GAAG,IAAI,EACP,EAAY,AAAZ,cAAY;QACZ,MAAM,CAAC,GAAG;QAGZ,EAAqD,AAArD,mDAAqD;QACrD,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAM,SAAI,IAAI,CAAC,mBAAmB,EAClD,MAAM,CAAC,GAAG;QAGZ,EAA+B,AAA/B,6BAA+B;cACxB,IAAI,CAAC,IAAI,KAAK,CAAM,SAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CACnD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS;QAG/C,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAM,OAC/B,MAAM,CAAC,IAAI;QAGb,MAAM,CAAC,IAAI,CAAC,GAAG;IACjB,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,eAAe,CAAC,GAAQ,EAAE,CAAC;QACzB,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAM,OAC/B,MAAM;QAGR,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAQ,YAAK,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;YAC7D,IAAI,CAAC,gBAAgB,CAAC,GAAG;YACzB,MAAM;QACR,CAAC;QAED,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QACrB,EAAE,EAAE,GAAG,IAAI,IAAI,EACb,MAAM;QAGR,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,yCAAS,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,OAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY;QAC9G,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GACd,IAAI,CAAC,MAAM,CAAC,GAAG;aAGV,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG;YACZ,IAAI,CAAC,SAAS,GAAG,GAAG;YACpB,IAAI,CAAC,UAAU,GAAG,GAAG;QACvB,CAAC;QAED,EAAE,EAAE,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAChD,MAAM;QAGR,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI;IACjC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,gBAAgB,CAAC,GAAQ,EAAE,CAAC;QAC1B,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAM,OAC/B,MAAM;QAGR,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QACrB,EAAE,EAAE,GAAG,IAAI,IAAI,EACb,MAAM;QAGR,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,yCAAS,CAAC,CAAC;YAAA,GAAG;QAAA,CAAC,EAAE,GAAG,EAAE,GAAG;IAC1D,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,eAAe,CAAC,IAAmB,EAAE,CAAC;QACpC,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAM,OAC/B,MAAM;QAGR,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,yCAAS;QAC7B,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAE,CAAC;YACrB,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;YACrB,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,SAAS,CAAC,GAAG,CAAC,GAAG;gBACjB,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAQ,SACjC,KAAK;YAET,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS;IACtC,CAAC;IAEO,gBAAgB,GAAG,CAAC;QAC1B,GAAG,CAAC,IAAI,GAAU,CAAC,CAAC;QACpB,GAAG,CAAC,OAAO,IAAI,GAAQ,GAAK,CAAC;kBACpB,GAAG,CAAE,CAAC;gBACX,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oBACtC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;oBACtC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAM,OACtB,IAAI,CAAC,IAAI,CAAC,GAAG;oBAGf,EAAgF,AAAhF,8EAAgF;oBAChF,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAM,QACzE,OAAO,CAAC,CAAC;2BAAG,IAAI,CAAC,UAAU;oBAAA,CAAC,CAAC,CAAC,EAAE,GAAG;gBAEvC,CAAC;gBAED,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG;YACvC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW;QACnC,MAAM,CAAC,IAAI;IACb,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,SAAS,GAAG,CAAC;QACX,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAU,WACnC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAK;IAEpC,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,cAAc,GAAG,CAAC;QAChB,EAAE,GAAG,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,CAAK,QAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,GACxG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,yCAAS;IAE5C,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,eAAe,GAAG,CAAC;QACjB,EAAE,EAAE,IAAI,CAAC,WAAW,EAClB,IAAI,CAAC,cAAc;aAEnB,IAAI,CAAC,SAAS;IAElB,CAAC;IAED,MAAM,CAAC,GAAQ,EAAE,CAA8C,EAAE,CAAC;QAChE,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAM,OAC/B,MAAM;QAGR,EAAE,EAAE,IAAI,CAAC,aAAa,KAAK,CAAQ;YACjC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,EACtD,IAAI,CAAC,eAAe,CAAC,GAAG;iBAExB,IAAI,CAAC,gBAAgB,CAAC,GAAG;eAEtB,EAAE,EAAE,IAAI,CAAC,iBAAiB,KAAK,CAAQ,WAAK,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,CAAO,UAAI,CAAC,CAAC,WAAW,KAAK,CAAS,WAC/G,EAAwI,AAAxI,sIAAwI;QACxI,IAAI,CAAC,eAAe,CAAC,GAAG;aAExB,IAAI,CAAC,gBAAgB,CAAC,GAAG;IAE7B,CAAC;IAED,EAEG,AAFH;;GAEG,AAFH,EAEG,CACH,gBAAgB,CAAC,SAAmB,EAAE,CAAC;QACrC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EACvC,MAAM,CAAC,IAAI;QAGb,EAAkC,AAAlC,gCAAkC;QAClC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;QACpC,EAAE,EAAE,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EACtC,MAAM,CAAC,KAAK;QAGd,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,SAAS,CAAE,CAAC;YAC1B,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,GACvB,MAAM,CAAC,KAAK;QAEhB,CAAC;QAED,GAAG,EAAE,GAAG,CAAC,IAAG,IAAI,YAAY,CAAE,CAAC;YAC7B,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAG,GACpB,MAAM,CAAC,KAAK;QAEhB,CAAC;QAED,MAAM,CAAC,IAAI;IACb,CAAC;IAED,aAAa,CAAC,GAAQ,EAAE,CAAC;QACvB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,CAAM,SAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GACxE,MAAM,CAAC,KAAK;QAGd,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;QACtC,EAAE,GAAG,IAAI,IAAK,IAAI,CAAC,IAAI,KAAK,CAAM,UAAK,IAAI,CAAC,mBAAmB,EAC7D,MAAM,CAAC,KAAK;QAGd,MAAM,CAAC,IAAI;IACb,CAAC;gBAjbW,UAAqC,EAAE,KAA6B,EAAE,OAAiC,CAAE,CAAC;QACpH,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK;YACS,GAA4B;QAAvD,IAAI,CAAC,mBAAmB,IAAG,GAA4B,GAA5B,OAAO,aAAP,OAAO,KAAP,IAAI,CAAJ,CAA4B,GAA5B,IAAI,CAAJ,CAA4B,GAA5B,OAAO,CAAE,mBAAmB,cAA5B,GAA4B,cAA5B,GAA4B,GAAI,KAAK;QAChE,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B,CAAC;;;;;","sources":["packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/types.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\nexport * from './useMultipleSelectionState';\nexport * from './SelectionManager';\nexport * from './types';\n","/*\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 {Key, useMemo, useRef, useState} from 'react';\nimport {MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\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}\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,\n allowDuplicateSelectionEvents\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(null);\n let childFocusStrategyRef = useRef(null);\n let [, setFocusedKey] = useState(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(props.selectionBehavior || 'toggle');\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 (props.selectionBehavior === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {\n setSelectionBehavior('replace');\n }\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 };\n}\n\nfunction convertSelection(selection: 'all' | Iterable<Key>, defaultValue?: Selection): 'all' | Selection {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\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 {Key} from 'react';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key;\n currentKey: Key;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key, currentKey?: Key) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n","/*\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,\n FocusStrategy,\n Selection as ISelection,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {Key} from 'react';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean\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\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 }\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, childFocusStrategy?: FocusStrategy) {\n this.state.setFocusedKey(key, childFocusStrategy);\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.state.disabledKeys.has(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?.index < first.index) {\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?.index > last.index) {\n last = item;\n }\n }\n\n return last?.key;\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.state.disabledKeys.has(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 (fromItem.index <= toItem.index) {\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 let keys: Key[] = [];\n let key = from;\n while (key) {\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 {\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 this.state.setSelectedKeys(new Selection([key], key, key));\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) {\n if (!this.state.disabledKeys.has(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([...item.childNodes][0].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.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.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n}\n","/*\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 {FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key} from 'react';\n\nexport interface FocusState {\n /** Whether the collection is currently focused. */\n readonly isFocused: boolean,\n /** Sets whether the collection is focused. */\n setFocused(isFocused: boolean): void,\n /** The current focused key in the collection. */\n readonly focusedKey: Key,\n /** Whether the first or last child of the focused key should receive focus. */\n readonly childFocusStrategy: FocusStrategy,\n /** Sets the focused key, and optionally, whether the first or last child of that key should receive focus. */\n setFocusedKey(key: Key, child?: FocusStrategy): void\n}\n\nexport interface SingleSelectionState extends FocusState {\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected key in the collection. */\n readonly selectedKey: Key,\n /** Sets the selected key in the collection. */\n setSelectedKey(key: Key): void\n}\n\nexport interface MultipleSelectionState extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Selection,\n /** Sets the selected keys in the collection. */\n setSelectedKeys(keys: Selection): void,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>\n}\n\nexport interface MultipleSelectionManager extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Set<Key>,\n /** Whether the selection is empty. */\n readonly isEmpty: boolean,\n /** Whether all items in the collection are selected. */\n readonly isSelectAll: boolean,\n /** The first selected key in the collection. */\n readonly firstSelectedKey: Key | null,\n /** The last selected key in the collection. */\n readonly lastSelectedKey: Key | null,\n /** Returns whether a key is selected. */\n isSelected(key: Key): boolean,\n /** Returns whether the current selection is equal to the given selection. */\n isSelectionEqual(selection: Set<Key>): boolean,\n /** Extends the selection to the given key. */\n extendSelection(toKey: Key): void,\n /** Toggles whether the given key is selected. */\n toggleSelection(key: Key): void,\n /** Replaces the selection with only the given key. */\n replaceSelection(key: Key): void,\n /** Replaces the selection with the given keys. */\n setSelectedKeys(keys: Iterable<Key>): void,\n /** Selects all items in the collection. */\n selectAll(): void,\n /** Removes all keys from the selection. */\n clearSelection(): void,\n /** Toggles between select all and an empty selection. */\n toggleSelectAll(): void,\n /**\n * Toggles, replaces, or extends selection to the given key depending\n * on the pointer event and collection's selection mode.\n */\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void,\n /** Returns whether the given key can be selected. */\n canSelectItem(key: Key): boolean,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/types.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\nexport * from './useMultipleSelectionState';\nexport * from './SelectionManager';\nexport * from './types';\n","/*\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, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key, useEffect, useMemo, useRef, useState} from 'react';\nimport {MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\nimport {useControlledState} from '@react-stately/utils';\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,\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(null);\n let childFocusStrategyRef = useRef(null);\n let [, setFocusedKey] = useState(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>, defaultValue?: Selection): 'all' | Selection {\n if (!selection) {\n return defaultValue;\n }\n\n return selection === 'all'\n ? 'all'\n : new Selection(selection);\n}\n","/*\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 {Key} from 'react';\n\n/**\n * A Selection is a special Set containing Keys, which also has an anchor\n * and current selected key for use when range selecting.\n */\nexport class Selection extends Set<Key> {\n anchorKey: Key;\n currentKey: Key;\n\n constructor(keys?: Iterable<Key> | Selection, anchorKey?: Key, currentKey?: Key) {\n super(keys);\n if (keys instanceof Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n","/*\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,\n DisabledBehavior,\n FocusStrategy,\n Selection as ISelection,\n LongPressEvent,\n Node,\n PressEvent,\n SelectionBehavior,\n SelectionMode\n} from '@react-types/shared';\nimport {Key} from 'react';\nimport {MultipleSelectionManager, MultipleSelectionState} from './types';\nimport {Selection} from './Selection';\n\ninterface SelectionManagerOptions {\n allowsCellSelection?: boolean\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\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 }\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, childFocusStrategy?: FocusStrategy) {\n this.state.setFocusedKey(key, childFocusStrategy);\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?.index < first.index) {\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?.index > last.index) {\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 (fromItem.index <= toItem.index) {\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 let keys: Key[] = [];\n let key = from;\n while (key) {\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) {\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([...item.childNodes][0].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.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.type === 'cell' && !this.allowsCellSelection)) {\n return false;\n }\n\n return true;\n }\n\n isDisabled(key: Key) {\n return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';\n }\n}\n","/*\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, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';\nimport {Key} from 'react';\n\nexport interface FocusState {\n /** Whether the collection is currently focused. */\n readonly isFocused: boolean,\n /** Sets whether the collection is focused. */\n setFocused(isFocused: boolean): void,\n /** The current focused key in the collection. */\n readonly focusedKey: Key,\n /** Whether the first or last child of the focused key should receive focus. */\n readonly childFocusStrategy: FocusStrategy,\n /** Sets the focused key, and optionally, whether the first or last child of that key should receive focus. */\n setFocusedKey(key: Key, child?: FocusStrategy): void\n}\n\nexport interface SingleSelectionState extends FocusState {\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected key in the collection. */\n readonly selectedKey: Key,\n /** Sets the selected key in the collection. */\n setSelectedKey(key: Key): void\n}\n\nexport interface MultipleSelectionState extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Selection,\n /** Sets the selected keys in the collection. */\n setSelectedKeys(keys: Selection): void,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>,\n /** Whether `disabledKeys` applies to selection, actions, or both. */\n readonly disabledBehavior: DisabledBehavior\n}\n\nexport interface MultipleSelectionManager extends FocusState {\n /** The type of selection that is allowed in the collection. */\n readonly selectionMode: SelectionMode,\n /** The selection behavior for the collection. */\n readonly selectionBehavior: SelectionBehavior,\n /** Whether the collection allows empty selection. */\n readonly disallowEmptySelection?: boolean,\n /** The currently selected keys in the collection. */\n readonly selectedKeys: Set<Key>,\n /** Whether the selection is empty. */\n readonly isEmpty: boolean,\n /** Whether all items in the collection are selected. */\n readonly isSelectAll: boolean,\n /** The first selected key in the collection. */\n readonly firstSelectedKey: Key | null,\n /** The last selected key in the collection. */\n readonly lastSelectedKey: Key | null,\n /** The currently disabled keys in the collection. */\n readonly disabledKeys: Set<Key>,\n /** Whether `disabledKeys` applies to selection, actions, or both. */\n readonly disabledBehavior: DisabledBehavior,\n /** Returns whether a key is selected. */\n isSelected(key: Key): boolean,\n /** Returns whether the current selection is equal to the given selection. */\n isSelectionEqual(selection: Set<Key>): boolean,\n /** Extends the selection to the given key. */\n extendSelection(toKey: Key): void,\n /** Toggles whether the given key is selected. */\n toggleSelection(key: Key): void,\n /** Replaces the selection with only the given key. */\n replaceSelection(key: Key): void,\n /** Replaces the selection with the given keys. */\n setSelectedKeys(keys: Iterable<Key>): void,\n /** Selects all items in the collection. */\n selectAll(): void,\n /** Removes all keys from the selection. */\n clearSelection(): void,\n /** Toggles between select all and an empty selection. */\n toggleSelectAll(): void,\n /**\n * Toggles, replaces, or extends selection to the given key depending\n * on the pointer event and collection's selection mode.\n */\n select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void,\n /** Returns whether the given key can be selected. */\n canSelectItem(key: Key): boolean,\n /** Returns whether the given key is non-interactive, i.e. both selection and actions are disabled. */\n isDisabled(key: Key): boolean,\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior: SelectionBehavior): void\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode, MultipleSelection, Collection, Node } from "@react-types/shared";
|
|
1
|
+
import { DisabledBehavior, FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode, MultipleSelection, Collection, Node } from "@react-types/shared";
|
|
2
2
|
import { Key } from "react";
|
|
3
3
|
export interface FocusState {
|
|
4
4
|
/** Whether the collection is currently focused. */
|
|
@@ -35,6 +35,8 @@ export interface MultipleSelectionState extends FocusState {
|
|
|
35
35
|
setSelectedKeys(keys: Selection): void;
|
|
36
36
|
/** The currently disabled keys in the collection. */
|
|
37
37
|
readonly disabledKeys: Set<Key>;
|
|
38
|
+
/** Whether `disabledKeys` applies to selection, actions, or both. */
|
|
39
|
+
readonly disabledBehavior: DisabledBehavior;
|
|
38
40
|
}
|
|
39
41
|
export interface MultipleSelectionManager extends FocusState {
|
|
40
42
|
/** The type of selection that is allowed in the collection. */
|
|
@@ -53,6 +55,10 @@ export interface MultipleSelectionManager extends FocusState {
|
|
|
53
55
|
readonly firstSelectedKey: Key | null;
|
|
54
56
|
/** The last selected key in the collection. */
|
|
55
57
|
readonly lastSelectedKey: Key | null;
|
|
58
|
+
/** The currently disabled keys in the collection. */
|
|
59
|
+
readonly disabledKeys: Set<Key>;
|
|
60
|
+
/** Whether `disabledKeys` applies to selection, actions, or both. */
|
|
61
|
+
readonly disabledBehavior: DisabledBehavior;
|
|
56
62
|
/** Returns whether a key is selected. */
|
|
57
63
|
isSelected(key: Key): boolean;
|
|
58
64
|
/** Returns whether the current selection is equal to the given selection. */
|
|
@@ -78,6 +84,8 @@ export interface MultipleSelectionManager extends FocusState {
|
|
|
78
84
|
select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void;
|
|
79
85
|
/** Returns whether the given key can be selected. */
|
|
80
86
|
canSelectItem(key: Key): boolean;
|
|
87
|
+
/** Returns whether the given key is non-interactive, i.e. both selection and actions are disabled. */
|
|
88
|
+
isDisabled(key: Key): boolean;
|
|
81
89
|
/** Sets the selection behavior for the collection. */
|
|
82
90
|
setSelectionBehavior(selectionBehavior: SelectionBehavior): void;
|
|
83
91
|
}
|
|
@@ -86,6 +94,8 @@ export interface MultipleSelectionStateProps extends MultipleSelection {
|
|
|
86
94
|
selectionBehavior?: SelectionBehavior;
|
|
87
95
|
/** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */
|
|
88
96
|
allowDuplicateSelectionEvents?: boolean;
|
|
97
|
+
/** Whether `disabledKeys` applies to all interactions, or only selection. */
|
|
98
|
+
disabledBehavior?: DisabledBehavior;
|
|
89
99
|
}
|
|
90
100
|
/**
|
|
91
101
|
* Manages state for multiple selection and focus in a collection.
|
|
@@ -156,6 +166,8 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
156
166
|
get isSelectAll(): boolean;
|
|
157
167
|
get firstSelectedKey(): Key | null;
|
|
158
168
|
get lastSelectedKey(): Key | null;
|
|
169
|
+
get disabledKeys(): Set<Key>;
|
|
170
|
+
get disabledBehavior(): DisabledBehavior;
|
|
159
171
|
/**
|
|
160
172
|
* Extends the selection to the given key.
|
|
161
173
|
*/
|
|
@@ -190,6 +202,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
190
202
|
*/
|
|
191
203
|
isSelectionEqual(selection: Set<Key>): boolean;
|
|
192
204
|
canSelectItem(key: Key): boolean;
|
|
205
|
+
isDisabled(key: Key): boolean;
|
|
193
206
|
}
|
|
194
207
|
|
|
195
208
|
//# sourceMappingURL=types.d.ts.map
|
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;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC;IAC3C,8GAA8G;IAC9G,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CACrD;AAED,qCAAsC,SAAQ,UAAU;IACtD,qDAAqD;IACrD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1B,+CAA+C;IAC/C,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAA;CAC/B;AAED,uCAAwC,SAAQ,UAAU;IACxD,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,sDAAsD;IACtD,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjE,qDAAqD;IACrD,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,gDAAgD;IAChD,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvC,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;
|
|
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 * from './useMultipleSelectionState';\nexport * from './SelectionManager';\nexport * from './types';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-stately/selection",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.1",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -18,15 +18,15 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@babel/runtime": "^7.6.2",
|
|
21
|
-
"@react-stately/collections": "^3.
|
|
22
|
-
"@react-stately/utils": "^3.
|
|
23
|
-
"@react-types/shared": "^3.
|
|
21
|
+
"@react-stately/collections": "^3.4.1",
|
|
22
|
+
"@react-stately/utils": "^3.5.0",
|
|
23
|
+
"@react-types/shared": "^3.13.1"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"react": "^16.8.0 || ^17.0.0-rc.1"
|
|
26
|
+
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "715c3f563ccf8c2e0102d3e18403d9db21a05a71"
|
|
32
32
|
}
|
package/src/SelectionManager.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import {
|
|
14
14
|
Collection,
|
|
15
|
+
DisabledBehavior,
|
|
15
16
|
FocusStrategy,
|
|
16
17
|
Selection as ISelection,
|
|
17
18
|
LongPressEvent,
|
|
@@ -132,7 +133,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
132
133
|
|
|
133
134
|
key = this.getKey(key);
|
|
134
135
|
return this.state.selectedKeys === 'all'
|
|
135
|
-
?
|
|
136
|
+
? this.canSelectItem(key)
|
|
136
137
|
: this.state.selectedKeys.has(key);
|
|
137
138
|
}
|
|
138
139
|
|
|
@@ -189,6 +190,14 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
189
190
|
return last?.key;
|
|
190
191
|
}
|
|
191
192
|
|
|
193
|
+
get disabledKeys(): Set<Key> {
|
|
194
|
+
return this.state.disabledKeys;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
get disabledBehavior(): DisabledBehavior {
|
|
198
|
+
return this.state.disabledBehavior;
|
|
199
|
+
}
|
|
200
|
+
|
|
192
201
|
/**
|
|
193
202
|
* Extends the selection to the given key.
|
|
194
203
|
*/
|
|
@@ -218,7 +227,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
218
227
|
}
|
|
219
228
|
|
|
220
229
|
for (let key of this.getKeyRange(toKey, anchorKey)) {
|
|
221
|
-
if (
|
|
230
|
+
if (this.canSelectItem(key)) {
|
|
222
231
|
selection.add(key);
|
|
223
232
|
}
|
|
224
233
|
}
|
|
@@ -307,7 +316,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
307
316
|
keys.delete(key);
|
|
308
317
|
// TODO: move anchor to last selected key...
|
|
309
318
|
// Does `current` need to move here too?
|
|
310
|
-
} else {
|
|
319
|
+
} else if (this.canSelectItem(key)) {
|
|
311
320
|
keys.add(key);
|
|
312
321
|
keys.anchorKey = key;
|
|
313
322
|
keys.currentKey = key;
|
|
@@ -333,7 +342,11 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
333
342
|
return;
|
|
334
343
|
}
|
|
335
344
|
|
|
336
|
-
this.
|
|
345
|
+
let selection = this.canSelectItem(key)
|
|
346
|
+
? new Selection([key], key, key)
|
|
347
|
+
: new Selection();
|
|
348
|
+
|
|
349
|
+
this.state.setSelectedKeys(selection);
|
|
337
350
|
}
|
|
338
351
|
|
|
339
352
|
/**
|
|
@@ -362,7 +375,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
362
375
|
let keys: Key[] = [];
|
|
363
376
|
let addKeys = (key: Key) => {
|
|
364
377
|
while (key) {
|
|
365
|
-
if (
|
|
378
|
+
if (this.canSelectItem(key)) {
|
|
366
379
|
let item = this.collection.getItem(key);
|
|
367
380
|
if (item.type === 'item') {
|
|
368
381
|
keys.push(key);
|
|
@@ -471,4 +484,8 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
471
484
|
|
|
472
485
|
return true;
|
|
473
486
|
}
|
|
487
|
+
|
|
488
|
+
isDisabled(key: Key) {
|
|
489
|
+
return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';
|
|
490
|
+
}
|
|
474
491
|
}
|
package/src/types.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';
|
|
13
|
+
import {DisabledBehavior, FocusStrategy, LongPressEvent, PressEvent, Selection, SelectionBehavior, SelectionMode} from '@react-types/shared';
|
|
14
14
|
import {Key} from 'react';
|
|
15
15
|
|
|
16
16
|
export interface FocusState {
|
|
@@ -49,7 +49,9 @@ export interface MultipleSelectionState extends FocusState {
|
|
|
49
49
|
/** Sets the selected keys in the collection. */
|
|
50
50
|
setSelectedKeys(keys: Selection): void,
|
|
51
51
|
/** The currently disabled keys in the collection. */
|
|
52
|
-
readonly disabledKeys: Set<Key
|
|
52
|
+
readonly disabledKeys: Set<Key>,
|
|
53
|
+
/** Whether `disabledKeys` applies to selection, actions, or both. */
|
|
54
|
+
readonly disabledBehavior: DisabledBehavior
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
export interface MultipleSelectionManager extends FocusState {
|
|
@@ -69,6 +71,10 @@ export interface MultipleSelectionManager extends FocusState {
|
|
|
69
71
|
readonly firstSelectedKey: Key | null,
|
|
70
72
|
/** The last selected key in the collection. */
|
|
71
73
|
readonly lastSelectedKey: Key | null,
|
|
74
|
+
/** The currently disabled keys in the collection. */
|
|
75
|
+
readonly disabledKeys: Set<Key>,
|
|
76
|
+
/** Whether `disabledKeys` applies to selection, actions, or both. */
|
|
77
|
+
readonly disabledBehavior: DisabledBehavior,
|
|
72
78
|
/** Returns whether a key is selected. */
|
|
73
79
|
isSelected(key: Key): boolean,
|
|
74
80
|
/** Returns whether the current selection is equal to the given selection. */
|
|
@@ -94,6 +100,8 @@ export interface MultipleSelectionManager extends FocusState {
|
|
|
94
100
|
select(key: Key, e?: PressEvent | LongPressEvent | PointerEvent): void,
|
|
95
101
|
/** Returns whether the given key can be selected. */
|
|
96
102
|
canSelectItem(key: Key): boolean,
|
|
103
|
+
/** Returns whether the given key is non-interactive, i.e. both selection and actions are disabled. */
|
|
104
|
+
isDisabled(key: Key): boolean,
|
|
97
105
|
/** Sets the selection behavior for the collection. */
|
|
98
106
|
setSelectionBehavior(selectionBehavior: SelectionBehavior): void
|
|
99
107
|
}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import {DisabledBehavior, MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';
|
|
14
|
+
import {Key, useEffect, useMemo, useRef, useState} from 'react';
|
|
15
15
|
import {MultipleSelectionState} from './types';
|
|
16
16
|
import {Selection} from './Selection';
|
|
17
17
|
import {useControlledState} from '@react-stately/utils';
|
|
@@ -34,7 +34,9 @@ export interface MultipleSelectionStateProps extends MultipleSelection {
|
|
|
34
34
|
/** How multiple selection should behave in the collection. */
|
|
35
35
|
selectionBehavior?: SelectionBehavior,
|
|
36
36
|
/** Whether onSelectionChange should fire even if the new set of keys is the same as the last. */
|
|
37
|
-
allowDuplicateSelectionEvents?: boolean
|
|
37
|
+
allowDuplicateSelectionEvents?: boolean,
|
|
38
|
+
/** Whether `disabledKeys` applies to all interactions, or only selection. */
|
|
39
|
+
disabledBehavior?: DisabledBehavior
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
/**
|
|
@@ -44,7 +46,9 @@ export function useMultipleSelectionState(props: MultipleSelectionStateProps): M
|
|
|
44
46
|
let {
|
|
45
47
|
selectionMode = 'none' as SelectionMode,
|
|
46
48
|
disallowEmptySelection,
|
|
47
|
-
allowDuplicateSelectionEvents
|
|
49
|
+
allowDuplicateSelectionEvents,
|
|
50
|
+
selectionBehavior: selectionBehaviorProp = 'toggle',
|
|
51
|
+
disabledBehavior = 'all'
|
|
48
52
|
} = props;
|
|
49
53
|
|
|
50
54
|
// We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
|
|
@@ -64,14 +68,23 @@ export function useMultipleSelectionState(props: MultipleSelectionStateProps): M
|
|
|
64
68
|
let disabledKeysProp = useMemo(() =>
|
|
65
69
|
props.disabledKeys ? new Set(props.disabledKeys) : new Set<Key>()
|
|
66
70
|
, [props.disabledKeys]);
|
|
67
|
-
let [selectionBehavior, setSelectionBehavior] = useState(
|
|
71
|
+
let [selectionBehavior, setSelectionBehavior] = useState(selectionBehaviorProp);
|
|
68
72
|
|
|
69
73
|
// If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press
|
|
70
74
|
// to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.
|
|
71
|
-
if (
|
|
75
|
+
if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {
|
|
72
76
|
setSelectionBehavior('replace');
|
|
73
77
|
}
|
|
74
78
|
|
|
79
|
+
// If the selectionBehavior prop changes, update the state as well.
|
|
80
|
+
let lastSelectionBehavior = useRef(selectionBehaviorProp);
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (selectionBehaviorProp !== lastSelectionBehavior.current) {
|
|
83
|
+
setSelectionBehavior(selectionBehaviorProp);
|
|
84
|
+
lastSelectionBehavior.current = selectionBehaviorProp;
|
|
85
|
+
}
|
|
86
|
+
}, [selectionBehaviorProp]);
|
|
87
|
+
|
|
75
88
|
return {
|
|
76
89
|
selectionMode,
|
|
77
90
|
disallowEmptySelection,
|
|
@@ -101,7 +114,8 @@ export function useMultipleSelectionState(props: MultipleSelectionStateProps): M
|
|
|
101
114
|
setSelectedKeys(keys);
|
|
102
115
|
}
|
|
103
116
|
},
|
|
104
|
-
disabledKeys: disabledKeysProp
|
|
117
|
+
disabledKeys: disabledKeysProp,
|
|
118
|
+
disabledBehavior
|
|
105
119
|
};
|
|
106
120
|
}
|
|
107
121
|
|