@react-stately/selection 3.12.0 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/import.mjs +6 -6
- package/dist/main.js +6 -6
- package/dist/main.js.map +1 -1
- package/dist/module.js +6 -6
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/SelectionManager.ts +5 -4
package/dist/import.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
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
|
+
import {compareNodeOrder as $Qsto2$compareNodeOrder, getFirstItem as $Qsto2$getFirstItem, getChildNodes as $Qsto2$getChildNodes} from "@react-stately/collections";
|
|
3
4
|
|
|
4
5
|
/*
|
|
5
6
|
* Copyright 2020 Adobe. All rights reserved.
|
|
@@ -135,6 +136,7 @@ function $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {
|
|
|
135
136
|
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
136
137
|
* governing permissions and limitations under the License.
|
|
137
138
|
*/
|
|
139
|
+
|
|
138
140
|
class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
139
141
|
/**
|
|
140
142
|
* The type of selection that is allowed in the collection.
|
|
@@ -217,7 +219,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
217
219
|
let first = null;
|
|
218
220
|
for (let key of this.state.selectedKeys){
|
|
219
221
|
let item = this.collection.getItem(key);
|
|
220
|
-
if (!first ||
|
|
222
|
+
if (!first || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, first) < 0) first = item;
|
|
221
223
|
}
|
|
222
224
|
return first === null || first === void 0 ? void 0 : first.key;
|
|
223
225
|
}
|
|
@@ -225,7 +227,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
225
227
|
let last = null;
|
|
226
228
|
for (let key of this.state.selectedKeys){
|
|
227
229
|
let item = this.collection.getItem(key);
|
|
228
|
-
if (!last ||
|
|
230
|
+
if (!last || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, last) > 0) last = item;
|
|
229
231
|
}
|
|
230
232
|
return last === null || last === void 0 ? void 0 : last.key;
|
|
231
233
|
}
|
|
@@ -262,7 +264,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
262
264
|
let fromItem = this.collection.getItem(from);
|
|
263
265
|
let toItem = this.collection.getItem(to);
|
|
264
266
|
if (fromItem && toItem) {
|
|
265
|
-
if (
|
|
267
|
+
if ((0, $Qsto2$compareNodeOrder)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);
|
|
266
268
|
return this.getKeyRangeInternal(to, from);
|
|
267
269
|
}
|
|
268
270
|
return [];
|
|
@@ -342,9 +344,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
342
344
|
let item = this.collection.getItem(key);
|
|
343
345
|
if (item.type === "item") keys.push(key);
|
|
344
346
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
345
|
-
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys(
|
|
346
|
-
...item.childNodes
|
|
347
|
-
][0].key);
|
|
347
|
+
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys((0, $Qsto2$getFirstItem)((0, $Qsto2$getChildNodes)(item, this.collection)).key);
|
|
348
348
|
}
|
|
349
349
|
key = this.collection.getKeyAfter(key);
|
|
350
350
|
}
|
package/dist/main.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
var $83d9f$react = require("react");
|
|
2
2
|
var $83d9f$reactstatelyutils = require("@react-stately/utils");
|
|
3
|
+
var $83d9f$reactstatelycollections = require("@react-stately/collections");
|
|
3
4
|
|
|
4
5
|
function $parcel$export(e, n, v, s) {
|
|
5
6
|
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
@@ -141,6 +142,7 @@ function $1adc19da2128bba9$var$convertSelection(selection, defaultValue) {
|
|
|
141
142
|
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
142
143
|
* governing permissions and limitations under the License.
|
|
143
144
|
*/
|
|
145
|
+
|
|
144
146
|
class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
145
147
|
/**
|
|
146
148
|
* The type of selection that is allowed in the collection.
|
|
@@ -223,7 +225,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
223
225
|
let first = null;
|
|
224
226
|
for (let key of this.state.selectedKeys){
|
|
225
227
|
let item = this.collection.getItem(key);
|
|
226
|
-
if (!first ||
|
|
228
|
+
if (!first || item && (0, $83d9f$reactstatelycollections.compareNodeOrder)(this.collection, item, first) < 0) first = item;
|
|
227
229
|
}
|
|
228
230
|
return first === null || first === void 0 ? void 0 : first.key;
|
|
229
231
|
}
|
|
@@ -231,7 +233,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
231
233
|
let last = null;
|
|
232
234
|
for (let key of this.state.selectedKeys){
|
|
233
235
|
let item = this.collection.getItem(key);
|
|
234
|
-
if (!last ||
|
|
236
|
+
if (!last || item && (0, $83d9f$reactstatelycollections.compareNodeOrder)(this.collection, item, last) > 0) last = item;
|
|
235
237
|
}
|
|
236
238
|
return last === null || last === void 0 ? void 0 : last.key;
|
|
237
239
|
}
|
|
@@ -268,7 +270,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
268
270
|
let fromItem = this.collection.getItem(from);
|
|
269
271
|
let toItem = this.collection.getItem(to);
|
|
270
272
|
if (fromItem && toItem) {
|
|
271
|
-
if (
|
|
273
|
+
if ((0, $83d9f$reactstatelycollections.compareNodeOrder)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);
|
|
272
274
|
return this.getKeyRangeInternal(to, from);
|
|
273
275
|
}
|
|
274
276
|
return [];
|
|
@@ -348,9 +350,7 @@ class $8112da6fa5bbc322$export$6c8a5aaad13c9852 {
|
|
|
348
350
|
let item = this.collection.getItem(key);
|
|
349
351
|
if (item.type === "item") keys.push(key);
|
|
350
352
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
351
|
-
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys(
|
|
352
|
-
...item.childNodes
|
|
353
|
-
][0].key);
|
|
353
|
+
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys((0, $83d9f$reactstatelycollections.getFirstItem)((0, $83d9f$reactstatelycollections.getChildNodes)(item, this.collection)).key);
|
|
354
354
|
}
|
|
355
355
|
key = this.collection.getKeyAfter(key);
|
|
356
356
|
}
|
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"],"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 | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || item?.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"}
|
|
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 {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';\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 | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n toKey = this.getKey(toKey);\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([toKey], toKey, toKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey || toKey;\n selection = new Selection(selectedKeys, anchorKey, toKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(toKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n 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(getFirstItem(getChildNodes(item, this.collection)).key);\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n };\n\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll() {\n if (this.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,5 +1,6 @@
|
|
|
1
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
|
+
import {compareNodeOrder as $Qsto2$compareNodeOrder, getFirstItem as $Qsto2$getFirstItem, getChildNodes as $Qsto2$getChildNodes} from "@react-stately/collections";
|
|
3
4
|
|
|
4
5
|
/*
|
|
5
6
|
* Copyright 2020 Adobe. All rights reserved.
|
|
@@ -135,6 +136,7 @@ function $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {
|
|
|
135
136
|
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
136
137
|
* governing permissions and limitations under the License.
|
|
137
138
|
*/
|
|
139
|
+
|
|
138
140
|
class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
139
141
|
/**
|
|
140
142
|
* The type of selection that is allowed in the collection.
|
|
@@ -217,7 +219,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
217
219
|
let first = null;
|
|
218
220
|
for (let key of this.state.selectedKeys){
|
|
219
221
|
let item = this.collection.getItem(key);
|
|
220
|
-
if (!first ||
|
|
222
|
+
if (!first || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, first) < 0) first = item;
|
|
221
223
|
}
|
|
222
224
|
return first === null || first === void 0 ? void 0 : first.key;
|
|
223
225
|
}
|
|
@@ -225,7 +227,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
225
227
|
let last = null;
|
|
226
228
|
for (let key of this.state.selectedKeys){
|
|
227
229
|
let item = this.collection.getItem(key);
|
|
228
|
-
if (!last ||
|
|
230
|
+
if (!last || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, last) > 0) last = item;
|
|
229
231
|
}
|
|
230
232
|
return last === null || last === void 0 ? void 0 : last.key;
|
|
231
233
|
}
|
|
@@ -262,7 +264,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
262
264
|
let fromItem = this.collection.getItem(from);
|
|
263
265
|
let toItem = this.collection.getItem(to);
|
|
264
266
|
if (fromItem && toItem) {
|
|
265
|
-
if (
|
|
267
|
+
if ((0, $Qsto2$compareNodeOrder)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);
|
|
266
268
|
return this.getKeyRangeInternal(to, from);
|
|
267
269
|
}
|
|
268
270
|
return [];
|
|
@@ -342,9 +344,7 @@ class $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {
|
|
|
342
344
|
let item = this.collection.getItem(key);
|
|
343
345
|
if (item.type === "item") keys.push(key);
|
|
344
346
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
345
|
-
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys(
|
|
346
|
-
...item.childNodes
|
|
347
|
-
][0].key);
|
|
347
|
+
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== "item")) addKeys((0, $Qsto2$getFirstItem)((0, $Qsto2$getChildNodes)(item, this.collection)).key);
|
|
348
348
|
}
|
|
349
349
|
key = this.collection.getKeyAfter(key);
|
|
350
350
|
}
|
package/dist/module.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"],"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 | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || item?.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"}
|
|
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 {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';\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 | null, childFocusStrategy?: FocusStrategy) {\n if (key == null || this.collection.getItem(key)) {\n this.state.setFocusedKey(key, childFocusStrategy);\n }\n }\n\n /**\n * The currently selected keys in the collection.\n */\n get selectedKeys(): Set<Key> {\n return this.state.selectedKeys === 'all'\n ? new Set(this.getSelectAllKeys())\n : this.state.selectedKeys;\n }\n\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */\n get rawSelection(): ISelection {\n return this.state.selectedKeys;\n }\n\n /**\n * Returns whether a key is selected.\n */\n isSelected(key: Key) {\n if (this.state.selectionMode === 'none') {\n return false;\n }\n\n key = this.getKey(key);\n return this.state.selectedKeys === 'all'\n ? this.canSelectItem(key)\n : this.state.selectedKeys.has(key);\n }\n\n /**\n * Whether the selection is empty.\n */\n get isEmpty(): boolean {\n return this.state.selectedKeys !== 'all' && this.state.selectedKeys.size === 0;\n }\n\n /**\n * Whether all items in the collection are selected.\n */\n get isSelectAll(): boolean {\n if (this.isEmpty) {\n return false;\n }\n\n if (this.state.selectedKeys === 'all') {\n return true;\n }\n\n if (this._isSelectAll != null) {\n return this._isSelectAll;\n }\n\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every(k => selectedKeys.has(k));\n return this._isSelectAll;\n }\n\n get firstSelectedKey(): Key | null {\n let first: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {\n first = item;\n }\n }\n\n return first?.key;\n }\n\n get lastSelectedKey(): Key | null {\n let last: Node<unknown> | null = null;\n for (let key of this.state.selectedKeys) {\n let item = this.collection.getItem(key);\n if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {\n last = item;\n }\n }\n\n return last?.key;\n }\n\n get disabledKeys(): Set<Key> {\n return this.state.disabledKeys;\n }\n\n get disabledBehavior(): DisabledBehavior {\n return this.state.disabledBehavior;\n }\n\n /**\n * Extends the selection to the given key.\n */\n extendSelection(toKey: Key) {\n if (this.selectionMode === 'none') {\n return;\n }\n\n if (this.selectionMode === 'single') {\n this.replaceSelection(toKey);\n return;\n }\n\n toKey = this.getKey(toKey);\n\n let selection: Selection;\n\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === 'all') {\n selection = new Selection([toKey], toKey, toKey);\n } else {\n let selectedKeys = this.state.selectedKeys as Selection;\n let anchorKey = selectedKeys.anchorKey || toKey;\n selection = new Selection(selectedKeys, anchorKey, toKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey)) {\n selection.delete(key);\n }\n\n for (let key of this.getKeyRange(toKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n }\n\n this.state.setSelectedKeys(selection);\n }\n\n private getKeyRange(from: Key, to: Key) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {\n return this.getKeyRangeInternal(from, to);\n }\n\n return this.getKeyRangeInternal(to, from);\n }\n\n return [];\n }\n\n private getKeyRangeInternal(from: Key, to: Key) {\n 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(getFirstItem(getChildNodes(item, this.collection)).key);\n }\n }\n\n key = this.collection.getKeyAfter(key);\n }\n };\n\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n\n /**\n * Selects all items in the collection.\n */\n selectAll() {\n if (this.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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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
|
|
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.
|
|
3
|
+
"version": "3.13.0",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"url": "https://github.com/adobe/react-spectrum"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@react-stately/collections": "^3.
|
|
25
|
+
"@react-stately/collections": "^3.7.0",
|
|
26
26
|
"@react-stately/utils": "^3.6.0",
|
|
27
|
-
"@react-types/shared": "^3.
|
|
27
|
+
"@react-types/shared": "^3.18.0",
|
|
28
28
|
"@swc/helpers": "^0.4.14"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "9d1ba9bd8ebcd63bf3495ade16d349bcb71795ce"
|
|
37
37
|
}
|
package/src/SelectionManager.ts
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
SelectionBehavior,
|
|
22
22
|
SelectionMode
|
|
23
23
|
} from '@react-types/shared';
|
|
24
|
+
import {compareNodeOrder, getChildNodes, getFirstItem} from '@react-stately/collections';
|
|
24
25
|
import {Key} from 'react';
|
|
25
26
|
import {MultipleSelectionManager, MultipleSelectionState} from './types';
|
|
26
27
|
import {Selection} from './Selection';
|
|
@@ -172,7 +173,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
172
173
|
let first: Node<unknown> | null = null;
|
|
173
174
|
for (let key of this.state.selectedKeys) {
|
|
174
175
|
let item = this.collection.getItem(key);
|
|
175
|
-
if (!first || item
|
|
176
|
+
if (!first || (item && compareNodeOrder(this.collection, item, first) < 0)) {
|
|
176
177
|
first = item;
|
|
177
178
|
}
|
|
178
179
|
}
|
|
@@ -184,7 +185,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
184
185
|
let last: Node<unknown> | null = null;
|
|
185
186
|
for (let key of this.state.selectedKeys) {
|
|
186
187
|
let item = this.collection.getItem(key);
|
|
187
|
-
if (!last || item
|
|
188
|
+
if (!last || (item && compareNodeOrder(this.collection, item, last) > 0)) {
|
|
188
189
|
last = item;
|
|
189
190
|
}
|
|
190
191
|
}
|
|
@@ -242,7 +243,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
242
243
|
let fromItem = this.collection.getItem(from);
|
|
243
244
|
let toItem = this.collection.getItem(to);
|
|
244
245
|
if (fromItem && toItem) {
|
|
245
|
-
if (
|
|
246
|
+
if (compareNodeOrder(this.collection, fromItem, toItem) <= 0) {
|
|
246
247
|
return this.getKeyRangeInternal(from, to);
|
|
247
248
|
}
|
|
248
249
|
|
|
@@ -385,7 +386,7 @@ export class SelectionManager implements MultipleSelectionManager {
|
|
|
385
386
|
|
|
386
387
|
// Add child keys. If cell selection is allowed, then include item children too.
|
|
387
388
|
if (item.hasChildNodes && (this.allowsCellSelection || item.type !== 'item')) {
|
|
388
|
-
addKeys(
|
|
389
|
+
addKeys(getFirstItem(getChildNodes(item, this.collection)).key);
|
|
389
390
|
}
|
|
390
391
|
}
|
|
391
392
|
|