@react-stately/selection 3.9.4 → 3.10.2

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 CHANGED
@@ -1,28 +1,12 @@
1
1
  var $83d9f$react = require("react");
2
2
  var $83d9f$reactstatelyutils = require("@react-stately/utils");
3
3
 
4
- function $parcel$exportWildcard(dest, source) {
5
- Object.keys(source).forEach(function(key) {
6
- if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
7
- return;
8
- }
9
-
10
- Object.defineProperty(dest, key, {
11
- enumerable: true,
12
- get: function get() {
13
- return source[key];
14
- }
15
- });
16
- });
17
-
18
- return dest;
19
- }
20
4
  function $parcel$export(e, n, v, s) {
21
5
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
22
6
  }
23
- var $1adc19da2128bba9$exports = {};
24
7
 
25
- $parcel$export($1adc19da2128bba9$exports, "useMultipleSelectionState", () => $1adc19da2128bba9$export$253fe78d46329472);
8
+ $parcel$export(module.exports, "useMultipleSelectionState", () => $1adc19da2128bba9$export$253fe78d46329472);
9
+ $parcel$export(module.exports, "SelectionManager", () => $8112da6fa5bbc322$export$6c8a5aaad13c9852);
26
10
 
27
11
  class $21c847070f1f9569$export$52baac22726c72bf extends Set {
28
12
  constructor(keys, anchorKey, currentKey){
@@ -47,7 +31,7 @@ function $1adc19da2128bba9$var$equalSets(setA, setB) {
47
31
  return true;
48
32
  }
49
33
  function $1adc19da2128bba9$export$253fe78d46329472(props) {
50
- 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;
51
35
  // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
52
36
  // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
53
37
  let isFocusedRef = $83d9f$react.useRef(false);
@@ -68,10 +52,20 @@ function $1adc19da2128bba9$export$253fe78d46329472(props) {
68
52
  , [
69
53
  props.disabledKeys
70
54
  ]);
71
- let [selectionBehavior, setSelectionBehavior] = $83d9f$react.useState(props.selectionBehavior || 'toggle');
55
+ let [selectionBehavior, setSelectionBehavior] = $83d9f$react.useState(selectionBehaviorProp);
72
56
  // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press
73
57
  // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.
74
- if (props.selectionBehavior === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');
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 = $83d9f$react.useRef(selectionBehaviorProp);
61
+ $83d9f$react.useEffect(()=>{
62
+ if (selectionBehaviorProp !== lastSelectionBehavior.current) {
63
+ setSelectionBehavior(selectionBehaviorProp);
64
+ lastSelectionBehavior.current = selectionBehaviorProp;
65
+ }
66
+ }, [
67
+ selectionBehaviorProp
68
+ ]);
75
69
  return {
76
70
  selectionMode: selectionMode,
77
71
  disallowEmptySelection: disallowEmptySelection,
@@ -99,7 +93,8 @@ function $1adc19da2128bba9$export$253fe78d46329472(props) {
99
93
  setSelectedKeys (keys) {
100
94
  if (allowDuplicateSelectionEvents || !$1adc19da2128bba9$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);
101
95
  },
102
- disabledKeys: disabledKeysProp
96
+ disabledKeys: disabledKeysProp,
97
+ disabledBehavior: disabledBehavior
103
98
  };
104
99
  }
105
100
  function $1adc19da2128bba9$var$convertSelection(selection, defaultValue) {
@@ -108,9 +103,6 @@ function $1adc19da2128bba9$var$convertSelection(selection, defaultValue) {
108
103
  }
109
104
 
110
105
 
111
- var $8112da6fa5bbc322$exports = {};
112
-
113
- $parcel$export($8112da6fa5bbc322$exports, "SelectionManager", () => $8112da6fa5bbc322$export$6c8a5aaad13c9852);
114
106
 
115
107
  class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
116
108
  /**
@@ -172,7 +164,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
172
164
  */ isSelected(key) {
173
165
  if (this.state.selectionMode === 'none') return false;
174
166
  key = this.getKey(key);
175
- return this.state.selectedKeys === 'all' ? !this.state.disabledKeys.has(key) : this.state.selectedKeys.has(key);
167
+ return this.state.selectedKeys === 'all' ? this.canSelectItem(key) : this.state.selectedKeys.has(key);
176
168
  }
177
169
  /**
178
170
  * Whether the selection is empty.
@@ -207,6 +199,12 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
207
199
  }
208
200
  return last === null || last === void 0 ? void 0 : last.key;
209
201
  }
202
+ get disabledKeys() {
203
+ return this.state.disabledKeys;
204
+ }
205
+ get disabledBehavior() {
206
+ return this.state.disabledBehavior;
207
+ }
210
208
  /**
211
209
  * Extends the selection to the given key.
212
210
  */ extendSelection(toKey) {
@@ -226,7 +224,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
226
224
  let anchorKey = selectedKeys.anchorKey || toKey;
227
225
  selection = new $21c847070f1f9569$export$52baac22726c72bf(selectedKeys, anchorKey, toKey);
228
226
  for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey))selection.delete(key);
229
- for (let key1 of this.getKeyRange(toKey, anchorKey))if (!this.state.disabledKeys.has(key1)) selection.add(key1);
227
+ for (let key1 of this.getKeyRange(toKey, anchorKey))if (this.canSelectItem(key1)) selection.add(key1);
230
228
  }
231
229
  this.state.setSelectedKeys(selection);
232
230
  }
@@ -273,7 +271,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
273
271
  if (key == null) return;
274
272
  let keys = new $21c847070f1f9569$export$52baac22726c72bf(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
275
273
  if (keys.has(key)) keys.delete(key);
276
- else {
274
+ else if (this.canSelectItem(key)) {
277
275
  keys.add(key);
278
276
  keys.anchorKey = key;
279
277
  keys.currentKey = key;
@@ -287,9 +285,10 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
287
285
  if (this.selectionMode === 'none') return;
288
286
  key = this.getKey(key);
289
287
  if (key == null) return;
290
- this.state.setSelectedKeys(new $21c847070f1f9569$export$52baac22726c72bf([
288
+ let selection = this.canSelectItem(key) ? new $21c847070f1f9569$export$52baac22726c72bf([
291
289
  key
292
- ], key, key));
290
+ ], key, key) : new $21c847070f1f9569$export$52baac22726c72bf();
291
+ this.state.setSelectedKeys(selection);
293
292
  }
294
293
  /**
295
294
  * Replaces the selection with the given keys.
@@ -309,7 +308,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
309
308
  let keys = [];
310
309
  let addKeys = (key)=>{
311
310
  while(key){
312
- if (!this.state.disabledKeys.has(key)) {
311
+ if (this.canSelectItem(key)) {
313
312
  let item = this.collection.getItem(key);
314
313
  if (item.type === 'item') keys.push(key);
315
314
  // Add child keys. If cell selection is allowed, then include item children too.
@@ -369,6 +368,9 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
369
368
  if (!item || item.type === 'cell' && !this.allowsCellSelection) return false;
370
369
  return true;
371
370
  }
371
+ isDisabled(key) {
372
+ return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';
373
+ }
372
374
  constructor(collection, state, options){
373
375
  this.collection = collection;
374
376
  this.state = state;
@@ -379,12 +381,6 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
379
381
  }
380
382
 
381
383
 
382
- var $85467f818ce6e562$exports = {};
383
-
384
-
385
- $parcel$exportWildcard(module.exports, $1adc19da2128bba9$exports);
386
- $parcel$exportWildcard(module.exports, $8112da6fa5bbc322$exports);
387
- $parcel$exportWildcard(module.exports, $85467f818ce6e562$exports);
388
384
 
389
385
 
390
386
  //# sourceMappingURL=main.js.map
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"],"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 type {MultipleSelectionStateProps} from './useMultipleSelectionState';\nexport type {FocusState, SingleSelectionState, MultipleSelectionState, MultipleSelectionManager} from './types';\nexport {useMultipleSelectionState} from './useMultipleSelectionState';\nexport {SelectionManager} from './SelectionManager';\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"],"names":[],"version":3,"file":"main.js.map"}
package/dist/module.js CHANGED
@@ -1,12 +1,6 @@
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
- function $parcel$export(e, n, v, s) {
5
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
6
- }
7
- var $7af3f5b51489e0b5$exports = {};
8
-
9
- $parcel$export($7af3f5b51489e0b5$exports, "useMultipleSelectionState", () => $7af3f5b51489e0b5$export$253fe78d46329472);
10
4
 
11
5
  class $e40ea825a81a3709$export$52baac22726c72bf extends Set {
12
6
  constructor(keys, anchorKey, currentKey){
@@ -31,7 +25,7 @@ function $7af3f5b51489e0b5$var$equalSets(setA, setB) {
31
25
  return true;
32
26
  }
33
27
  function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
34
- let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents } = props;
28
+ let { selectionMode: selectionMode = 'none' , disallowEmptySelection: disallowEmptySelection , allowDuplicateSelectionEvents: allowDuplicateSelectionEvents , selectionBehavior: selectionBehaviorProp = 'toggle' , disabledBehavior: disabledBehavior = 'all' } = props;
35
29
  // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.
36
30
  // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).
37
31
  let isFocusedRef = $Qsto2$useRef(false);
@@ -52,10 +46,20 @@ function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
52
46
  , [
53
47
  props.disabledKeys
54
48
  ]);
55
- let [selectionBehavior, setSelectionBehavior] = $Qsto2$useState(props.selectionBehavior || 'toggle');
49
+ let [selectionBehavior, setSelectionBehavior] = $Qsto2$useState(selectionBehaviorProp);
56
50
  // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press
57
51
  // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.
58
- if (props.selectionBehavior === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');
52
+ if (selectionBehaviorProp === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) setSelectionBehavior('replace');
53
+ // If the selectionBehavior prop changes, update the state as well.
54
+ let lastSelectionBehavior = $Qsto2$useRef(selectionBehaviorProp);
55
+ $Qsto2$useEffect(()=>{
56
+ if (selectionBehaviorProp !== lastSelectionBehavior.current) {
57
+ setSelectionBehavior(selectionBehaviorProp);
58
+ lastSelectionBehavior.current = selectionBehaviorProp;
59
+ }
60
+ }, [
61
+ selectionBehaviorProp
62
+ ]);
59
63
  return {
60
64
  selectionMode: selectionMode,
61
65
  disallowEmptySelection: disallowEmptySelection,
@@ -83,7 +87,8 @@ function $7af3f5b51489e0b5$export$253fe78d46329472(props) {
83
87
  setSelectedKeys (keys) {
84
88
  if (allowDuplicateSelectionEvents || !$7af3f5b51489e0b5$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);
85
89
  },
86
- disabledKeys: disabledKeysProp
90
+ disabledKeys: disabledKeysProp,
91
+ disabledBehavior: disabledBehavior
87
92
  };
88
93
  }
89
94
  function $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {
@@ -92,9 +97,6 @@ function $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {
92
97
  }
93
98
 
94
99
 
95
- var $d496c0a20b6e58ec$exports = {};
96
-
97
- $parcel$export($d496c0a20b6e58ec$exports, "SelectionManager", () => $d496c0a20b6e58ec$export$6c8a5aaad13c9852);
98
100
 
99
101
  class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
100
102
  /**
@@ -156,7 +158,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
156
158
  */ isSelected(key) {
157
159
  if (this.state.selectionMode === 'none') return false;
158
160
  key = this.getKey(key);
159
- return this.state.selectedKeys === 'all' ? !this.state.disabledKeys.has(key) : this.state.selectedKeys.has(key);
161
+ return this.state.selectedKeys === 'all' ? this.canSelectItem(key) : this.state.selectedKeys.has(key);
160
162
  }
161
163
  /**
162
164
  * Whether the selection is empty.
@@ -191,6 +193,12 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
191
193
  }
192
194
  return last === null || last === void 0 ? void 0 : last.key;
193
195
  }
196
+ get disabledKeys() {
197
+ return this.state.disabledKeys;
198
+ }
199
+ get disabledBehavior() {
200
+ return this.state.disabledBehavior;
201
+ }
194
202
  /**
195
203
  * Extends the selection to the given key.
196
204
  */ extendSelection(toKey) {
@@ -210,7 +218,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
210
218
  let anchorKey = selectedKeys.anchorKey || toKey;
211
219
  selection = new $e40ea825a81a3709$export$52baac22726c72bf(selectedKeys, anchorKey, toKey);
212
220
  for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey))selection.delete(key);
213
- for (let key1 of this.getKeyRange(toKey, anchorKey))if (!this.state.disabledKeys.has(key1)) selection.add(key1);
221
+ for (let key1 of this.getKeyRange(toKey, anchorKey))if (this.canSelectItem(key1)) selection.add(key1);
214
222
  }
215
223
  this.state.setSelectedKeys(selection);
216
224
  }
@@ -257,7 +265,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
257
265
  if (key == null) return;
258
266
  let keys = new $e40ea825a81a3709$export$52baac22726c72bf(this.state.selectedKeys === 'all' ? this.getSelectAllKeys() : this.state.selectedKeys);
259
267
  if (keys.has(key)) keys.delete(key);
260
- else {
268
+ else if (this.canSelectItem(key)) {
261
269
  keys.add(key);
262
270
  keys.anchorKey = key;
263
271
  keys.currentKey = key;
@@ -271,9 +279,10 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
271
279
  if (this.selectionMode === 'none') return;
272
280
  key = this.getKey(key);
273
281
  if (key == null) return;
274
- this.state.setSelectedKeys(new $e40ea825a81a3709$export$52baac22726c72bf([
282
+ let selection = this.canSelectItem(key) ? new $e40ea825a81a3709$export$52baac22726c72bf([
275
283
  key
276
- ], key, key));
284
+ ], key, key) : new $e40ea825a81a3709$export$52baac22726c72bf();
285
+ this.state.setSelectedKeys(selection);
277
286
  }
278
287
  /**
279
288
  * Replaces the selection with the given keys.
@@ -293,7 +302,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
293
302
  let keys = [];
294
303
  let addKeys = (key)=>{
295
304
  while(key){
296
- if (!this.state.disabledKeys.has(key)) {
305
+ if (this.canSelectItem(key)) {
297
306
  let item = this.collection.getItem(key);
298
307
  if (item.type === 'item') keys.push(key);
299
308
  // Add child keys. If cell selection is allowed, then include item children too.
@@ -353,6 +362,9 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
353
362
  if (!item || item.type === 'cell' && !this.allowsCellSelection) return false;
354
363
  return true;
355
364
  }
365
+ isDisabled(key) {
366
+ return this.state.disabledKeys.has(key) && this.state.disabledBehavior === 'all';
367
+ }
356
368
  constructor(collection, state, options){
357
369
  this.collection = collection;
358
370
  this.state = state;
@@ -363,9 +375,6 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
363
375
  }
364
376
 
365
377
 
366
- var $63d397230baf7bd4$exports = {};
367
-
368
-
369
378
 
370
379
 
371
380
  export {$7af3f5b51489e0b5$export$253fe78d46329472 as useMultipleSelectionState, $d496c0a20b6e58ec$export$6c8a5aaad13c9852 as SelectionManager};
@@ -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":"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"],"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 type {MultipleSelectionStateProps} from './useMultipleSelectionState';\nexport type {FocusState, SingleSelectionState, MultipleSelectionState, MultipleSelectionManager} from './types';\nexport {useMultipleSelectionState} from './useMultipleSelectionState';\nexport {SelectionManager} from './SelectionManager';\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"],"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
@@ -1 +1 @@
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"}
1
+ {"mappings":"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","sources":["packages/@react-stately/selection/src/packages/@react-stately/selection/src/types.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/Selection.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/useMultipleSelectionState.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/SelectionManager.ts","packages/@react-stately/selection/src/packages/@react-stately/selection/src/index.ts","packages/@react-stately/selection/src/index.ts"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport type {MultipleSelectionStateProps} from './useMultipleSelectionState';\nexport type {FocusState, SingleSelectionState, MultipleSelectionState, MultipleSelectionManager} from './types';\nexport {useMultipleSelectionState} from './useMultipleSelectionState';\nexport {SelectionManager} from './SelectionManager';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-stately/selection",
3
- "version": "3.9.4",
3
+ "version": "3.10.2",
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.3.8",
22
- "@react-stately/utils": "^3.4.1",
23
- "@react-types/shared": "^3.12.0"
21
+ "@react-stately/collections": "^3.4.2",
22
+ "@react-stately/utils": "^3.5.1",
23
+ "@react-types/shared": "^3.14.0"
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": "6a503b715e0dbbf92038cd7f08b1bcdde4c78e82"
31
+ "gitHead": "cd7c0ec917122c7612f653c22f8ed558f8b66ecd"
32
32
  }
@@ -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
- ? !this.state.disabledKeys.has(key)
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 (!this.state.disabledKeys.has(key)) {
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.state.setSelectedKeys(new Selection([key], key, key));
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 (!this.state.disabledKeys.has(key)) {
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/index.ts CHANGED
@@ -10,6 +10,7 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- export * from './useMultipleSelectionState';
14
- export * from './SelectionManager';
15
- export * from './types';
13
+ export type {MultipleSelectionStateProps} from './useMultipleSelectionState';
14
+ export type {FocusState, SingleSelectionState, MultipleSelectionState, MultipleSelectionManager} from './types';
15
+ export {useMultipleSelectionState} from './useMultipleSelectionState';
16
+ export {SelectionManager} from './SelectionManager';
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 {Key, useMemo, useRef, useState} from 'react';
14
- import {MultipleSelection, SelectionBehavior, SelectionMode} from '@react-types/shared';
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(props.selectionBehavior || 'toggle');
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 (props.selectionBehavior === 'replace' && selectionBehavior === 'toggle' && typeof selectedKeys === 'object' && selectedKeys.size === 0) {
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