@react-stately/steplist 3.0.0-nightly.4555 → 3.0.0-nightly.4560

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 CHANGED
@@ -1,18 +1,6 @@
1
- import {useSingleSelectListState as $1ZKEJ$useSingleSelectListState} from "@react-stately/list";
2
- import {useMemo as $1ZKEJ$useMemo, useCallback as $1ZKEJ$useCallback, useEffect as $1ZKEJ$useEffect} from "react";
3
- import {useControlledState as $1ZKEJ$useControlledState} from "@react-stately/utils";
1
+ import {useStepListState as $cc8d414d37c075f2$export$a993ed2a771330b} from "./useStepListState.mjs";
4
2
 
5
3
  /*
6
- * Copyright 2023 Adobe. All rights reserved.
7
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License. You may obtain a copy
9
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software distributed under
12
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
- * OF ANY KIND, either express or implied. See the License for the specific language
14
- * governing permissions and limitations under the License.
15
- */ /*
16
4
  * Copyright 2023 Adobe. All rights reserved.
17
5
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
18
6
  * you may not use this file except in compliance with the License. You may obtain a copy
@@ -25,83 +13,5 @@ import {useControlledState as $1ZKEJ$useControlledState} from "@react-stately/ut
25
13
  */
26
14
 
27
15
 
28
- function $cc8d414d37c075f2$export$a993ed2a771330b(props) {
29
- let state = (0, $1ZKEJ$useSingleSelectListState)(props);
30
- var _props_defaultLastCompletedStep;
31
- let [lastCompletedStep, setLastCompletedStep] = (0, $1ZKEJ$useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
32
- const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
33
- const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $1ZKEJ$useMemo)(()=>$cc8d414d37c075f2$var$buildKeysMaps(collection), [
34
- collection
35
- ]);
36
- const selectedIdx = indexMap.get(selectedKey);
37
- const isCompleted = (0, $1ZKEJ$useCallback)((step)=>{
38
- if (step === undefined) return false;
39
- return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
40
- }, [
41
- indexMap,
42
- lastCompletedStep
43
- ]);
44
- const findDefaultSelectedKey = (0, $1ZKEJ$useCallback)((collection, disabledKeys)=>{
45
- let selectedKey = null;
46
- if (collection && collection.size > 0) {
47
- selectedKey = collection.getFirstKey();
48
- // loop over keys until we find one that isn't completed or disabled and select that
49
- while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
50
- }
51
- return selectedKey;
52
- }, [
53
- isCompleted
54
- ]);
55
- (0, $1ZKEJ$useEffect)(()=>{
56
- // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
57
- let selectedKey = state.selectedKey;
58
- if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
59
- selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
60
- if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
61
- }
62
- if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
63
- var _ref;
64
- let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
65
- if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
66
- });
67
- function isSelectable(step) {
68
- if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
69
- if (isCompleted(step)) return true;
70
- const prevStep = keysLinkedList.get(step);
71
- return isCompleted(prevStep) || step === state.collection.getFirstKey();
72
- }
73
- function setSelectedKey(key) {
74
- const prevKey = keysLinkedList.get(key);
75
- if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
76
- realSetSelectedKey(key);
77
- }
78
- return {
79
- ...state,
80
- setSelectedKey: setSelectedKey,
81
- setLastCompletedStep: setLastCompletedStep,
82
- isCompleted: isCompleted,
83
- isSelectable: isSelectable
84
- };
85
- }
86
- function $cc8d414d37c075f2$var$buildKeysMaps(coll) {
87
- const indexMap = new Map();
88
- const keysLinkedList = new Map();
89
- let i = 0;
90
- let prev = undefined;
91
- for (const item of coll){
92
- indexMap.set(item.key, i);
93
- keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
94
- prev = item;
95
- i++;
96
- }
97
- return {
98
- indexMap: indexMap,
99
- keysLinkedList: keysLinkedList
100
- };
101
- }
102
-
103
-
104
-
105
-
106
16
  export {$cc8d414d37c075f2$export$a993ed2a771330b as useStepListState};
107
17
  //# sourceMappingURL=module.js.map
package/dist/main.js CHANGED
@@ -1,24 +1,12 @@
1
- var $cNR0n$reactstatelylist = require("@react-stately/list");
2
- var $cNR0n$react = require("react");
3
- var $cNR0n$reactstatelyutils = require("@react-stately/utils");
1
+ var $e8f7edc240568f41$exports = require("./useStepListState.main.js");
4
2
 
5
3
 
6
4
  function $parcel$export(e, n, v, s) {
7
5
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
8
6
  }
9
7
 
10
- $parcel$export(module.exports, "useStepListState", () => $e8f7edc240568f41$export$a993ed2a771330b);
8
+ $parcel$export(module.exports, "useStepListState", () => $e8f7edc240568f41$exports.useStepListState);
11
9
  /*
12
- * Copyright 2023 Adobe. All rights reserved.
13
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
14
- * you may not use this file except in compliance with the License. You may obtain a copy
15
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
16
- *
17
- * Unless required by applicable law or agreed to in writing, software distributed under
18
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
19
- * OF ANY KIND, either express or implied. See the License for the specific language
20
- * governing permissions and limitations under the License.
21
- */ /*
22
10
  * Copyright 2023 Adobe. All rights reserved.
23
11
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
24
12
  * you may not use this file except in compliance with the License. You may obtain a copy
@@ -31,82 +19,4 @@ $parcel$export(module.exports, "useStepListState", () => $e8f7edc240568f41$expor
31
19
  */
32
20
 
33
21
 
34
- function $e8f7edc240568f41$export$a993ed2a771330b(props) {
35
- let state = (0, $cNR0n$reactstatelylist.useSingleSelectListState)(props);
36
- var _props_defaultLastCompletedStep;
37
- let [lastCompletedStep, setLastCompletedStep] = (0, $cNR0n$reactstatelyutils.useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
38
- const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
39
- const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $cNR0n$react.useMemo)(()=>$e8f7edc240568f41$var$buildKeysMaps(collection), [
40
- collection
41
- ]);
42
- const selectedIdx = indexMap.get(selectedKey);
43
- const isCompleted = (0, $cNR0n$react.useCallback)((step)=>{
44
- if (step === undefined) return false;
45
- return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
46
- }, [
47
- indexMap,
48
- lastCompletedStep
49
- ]);
50
- const findDefaultSelectedKey = (0, $cNR0n$react.useCallback)((collection, disabledKeys)=>{
51
- let selectedKey = null;
52
- if (collection && collection.size > 0) {
53
- selectedKey = collection.getFirstKey();
54
- // loop over keys until we find one that isn't completed or disabled and select that
55
- while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
56
- }
57
- return selectedKey;
58
- }, [
59
- isCompleted
60
- ]);
61
- (0, $cNR0n$react.useEffect)(()=>{
62
- // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
63
- let selectedKey = state.selectedKey;
64
- if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
65
- selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
66
- if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
67
- }
68
- if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
69
- var _ref;
70
- let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
71
- if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
72
- });
73
- function isSelectable(step) {
74
- if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
75
- if (isCompleted(step)) return true;
76
- const prevStep = keysLinkedList.get(step);
77
- return isCompleted(prevStep) || step === state.collection.getFirstKey();
78
- }
79
- function setSelectedKey(key) {
80
- const prevKey = keysLinkedList.get(key);
81
- if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
82
- realSetSelectedKey(key);
83
- }
84
- return {
85
- ...state,
86
- setSelectedKey: setSelectedKey,
87
- setLastCompletedStep: setLastCompletedStep,
88
- isCompleted: isCompleted,
89
- isSelectable: isSelectable
90
- };
91
- }
92
- function $e8f7edc240568f41$var$buildKeysMaps(coll) {
93
- const indexMap = new Map();
94
- const keysLinkedList = new Map();
95
- let i = 0;
96
- let prev = undefined;
97
- for (const item of coll){
98
- indexMap.set(item.key, i);
99
- keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
100
- prev = item;
101
- i++;
102
- }
103
- return {
104
- indexMap: indexMap,
105
- keysLinkedList: keysLinkedList
106
- };
107
- }
108
-
109
-
110
-
111
-
112
22
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-stately/steplist/src/index.ts","packages/@react-stately/steplist/src/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {useStepListState} from './useStepListState';\nexport type {StepListProps, StepListState} from './useStepListState';\n","/*\n * Copyright 2023 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 {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '@react-stately/utils';\n\nexport interface StepListProps<T> extends CollectionBase<T>, SingleSelection {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>(props);\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = indexMap.get(selectedKey);\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"main.js.map"}
1
+ {"mappings":";;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/steplist/src/index.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {useStepListState} from './useStepListState';\nexport type {StepListProps, StepListState} from './useStepListState';\n"],"names":[],"version":3,"file":"main.js.map"}
package/dist/module.js CHANGED
@@ -1,18 +1,6 @@
1
- import {useSingleSelectListState as $1ZKEJ$useSingleSelectListState} from "@react-stately/list";
2
- import {useMemo as $1ZKEJ$useMemo, useCallback as $1ZKEJ$useCallback, useEffect as $1ZKEJ$useEffect} from "react";
3
- import {useControlledState as $1ZKEJ$useControlledState} from "@react-stately/utils";
1
+ import {useStepListState as $cc8d414d37c075f2$export$a993ed2a771330b} from "./useStepListState.module.js";
4
2
 
5
3
  /*
6
- * Copyright 2023 Adobe. All rights reserved.
7
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License. You may obtain a copy
9
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software distributed under
12
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
- * OF ANY KIND, either express or implied. See the License for the specific language
14
- * governing permissions and limitations under the License.
15
- */ /*
16
4
  * Copyright 2023 Adobe. All rights reserved.
17
5
  * This file is licensed to you under the Apache License, Version 2.0 (the "License");
18
6
  * you may not use this file except in compliance with the License. You may obtain a copy
@@ -25,83 +13,5 @@ import {useControlledState as $1ZKEJ$useControlledState} from "@react-stately/ut
25
13
  */
26
14
 
27
15
 
28
- function $cc8d414d37c075f2$export$a993ed2a771330b(props) {
29
- let state = (0, $1ZKEJ$useSingleSelectListState)(props);
30
- var _props_defaultLastCompletedStep;
31
- let [lastCompletedStep, setLastCompletedStep] = (0, $1ZKEJ$useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
32
- const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
33
- const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $1ZKEJ$useMemo)(()=>$cc8d414d37c075f2$var$buildKeysMaps(collection), [
34
- collection
35
- ]);
36
- const selectedIdx = indexMap.get(selectedKey);
37
- const isCompleted = (0, $1ZKEJ$useCallback)((step)=>{
38
- if (step === undefined) return false;
39
- return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
40
- }, [
41
- indexMap,
42
- lastCompletedStep
43
- ]);
44
- const findDefaultSelectedKey = (0, $1ZKEJ$useCallback)((collection, disabledKeys)=>{
45
- let selectedKey = null;
46
- if (collection && collection.size > 0) {
47
- selectedKey = collection.getFirstKey();
48
- // loop over keys until we find one that isn't completed or disabled and select that
49
- while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
50
- }
51
- return selectedKey;
52
- }, [
53
- isCompleted
54
- ]);
55
- (0, $1ZKEJ$useEffect)(()=>{
56
- // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
57
- let selectedKey = state.selectedKey;
58
- if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
59
- selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
60
- if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
61
- }
62
- if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
63
- var _ref;
64
- let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
65
- if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
66
- });
67
- function isSelectable(step) {
68
- if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
69
- if (isCompleted(step)) return true;
70
- const prevStep = keysLinkedList.get(step);
71
- return isCompleted(prevStep) || step === state.collection.getFirstKey();
72
- }
73
- function setSelectedKey(key) {
74
- const prevKey = keysLinkedList.get(key);
75
- if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
76
- realSetSelectedKey(key);
77
- }
78
- return {
79
- ...state,
80
- setSelectedKey: setSelectedKey,
81
- setLastCompletedStep: setLastCompletedStep,
82
- isCompleted: isCompleted,
83
- isSelectable: isSelectable
84
- };
85
- }
86
- function $cc8d414d37c075f2$var$buildKeysMaps(coll) {
87
- const indexMap = new Map();
88
- const keysLinkedList = new Map();
89
- let i = 0;
90
- let prev = undefined;
91
- for (const item of coll){
92
- indexMap.set(item.key, i);
93
- keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
94
- prev = item;
95
- i++;
96
- }
97
- return {
98
- indexMap: indexMap,
99
- keysLinkedList: keysLinkedList
100
- };
101
- }
102
-
103
-
104
-
105
-
106
16
  export {$cc8d414d37c075f2$export$a993ed2a771330b as useStepListState};
107
17
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-stately/steplist/src/index.ts","packages/@react-stately/steplist/src/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {useStepListState} from './useStepListState';\nexport type {StepListProps, StepListState} from './useStepListState';\n","/*\n * Copyright 2023 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 {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '@react-stately/utils';\n\nexport interface StepListProps<T> extends CollectionBase<T>, SingleSelection {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>(props);\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = indexMap.get(selectedKey);\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":";;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-stately/steplist/src/index.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {useStepListState} from './useStepListState';\nexport type {StepListProps, StepListState} from './useStepListState';\n"],"names":[],"version":3,"file":"module.js.map"}
@@ -0,0 +1,100 @@
1
+ var $bBs4a$reactstatelylist = require("@react-stately/list");
2
+ var $bBs4a$react = require("react");
3
+ var $bBs4a$reactstatelyutils = require("@react-stately/utils");
4
+
5
+
6
+ function $parcel$export(e, n, v, s) {
7
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
8
+ }
9
+
10
+ $parcel$export(module.exports, "useStepListState", () => $e8f7edc240568f41$export$a993ed2a771330b);
11
+ /*
12
+ * Copyright 2023 Adobe. All rights reserved.
13
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
14
+ * you may not use this file except in compliance with the License. You may obtain a copy
15
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software distributed under
18
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
19
+ * OF ANY KIND, either express or implied. See the License for the specific language
20
+ * governing permissions and limitations under the License.
21
+ */
22
+
23
+
24
+ function $e8f7edc240568f41$export$a993ed2a771330b(props) {
25
+ let state = (0, $bBs4a$reactstatelylist.useSingleSelectListState)(props);
26
+ var _props_defaultLastCompletedStep;
27
+ let [lastCompletedStep, setLastCompletedStep] = (0, $bBs4a$reactstatelyutils.useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
28
+ const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
29
+ const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $bBs4a$react.useMemo)(()=>$e8f7edc240568f41$var$buildKeysMaps(collection), [
30
+ collection
31
+ ]);
32
+ const selectedIdx = indexMap.get(selectedKey);
33
+ const isCompleted = (0, $bBs4a$react.useCallback)((step)=>{
34
+ if (step === undefined) return false;
35
+ return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
36
+ }, [
37
+ indexMap,
38
+ lastCompletedStep
39
+ ]);
40
+ const findDefaultSelectedKey = (0, $bBs4a$react.useCallback)((collection, disabledKeys)=>{
41
+ let selectedKey = null;
42
+ if (collection && collection.size > 0) {
43
+ selectedKey = collection.getFirstKey();
44
+ // loop over keys until we find one that isn't completed or disabled and select that
45
+ while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
46
+ }
47
+ return selectedKey;
48
+ }, [
49
+ isCompleted
50
+ ]);
51
+ (0, $bBs4a$react.useEffect)(()=>{
52
+ // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
53
+ let selectedKey = state.selectedKey;
54
+ if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
55
+ selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
56
+ if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
57
+ }
58
+ if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
59
+ var _ref;
60
+ let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
61
+ if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
62
+ });
63
+ function isSelectable(step) {
64
+ if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
65
+ if (isCompleted(step)) return true;
66
+ const prevStep = keysLinkedList.get(step);
67
+ return isCompleted(prevStep) || step === state.collection.getFirstKey();
68
+ }
69
+ function setSelectedKey(key) {
70
+ const prevKey = keysLinkedList.get(key);
71
+ if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
72
+ realSetSelectedKey(key);
73
+ }
74
+ return {
75
+ ...state,
76
+ setSelectedKey: setSelectedKey,
77
+ setLastCompletedStep: setLastCompletedStep,
78
+ isCompleted: isCompleted,
79
+ isSelectable: isSelectable
80
+ };
81
+ }
82
+ function $e8f7edc240568f41$var$buildKeysMaps(coll) {
83
+ const indexMap = new Map();
84
+ const keysLinkedList = new Map();
85
+ let i = 0;
86
+ let prev = undefined;
87
+ for (const item of coll){
88
+ indexMap.set(item.key, i);
89
+ keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
90
+ prev = item;
91
+ i++;
92
+ }
93
+ return {
94
+ indexMap: indexMap,
95
+ keysLinkedList: keysLinkedList
96
+ };
97
+ }
98
+
99
+
100
+ //# sourceMappingURL=useStepListState.main.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/@react-stately/steplist/src/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '@react-stately/utils';\n\nexport interface StepListProps<T> extends CollectionBase<T>, SingleSelection {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>(props);\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = indexMap.get(selectedKey);\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.main.js.map"}
@@ -0,0 +1,95 @@
1
+ import {useSingleSelectListState as $4pToV$useSingleSelectListState} from "@react-stately/list";
2
+ import {useMemo as $4pToV$useMemo, useCallback as $4pToV$useCallback, useEffect as $4pToV$useEffect} from "react";
3
+ import {useControlledState as $4pToV$useControlledState} from "@react-stately/utils";
4
+
5
+ /*
6
+ * Copyright 2023 Adobe. All rights reserved.
7
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License. You may obtain a copy
9
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software distributed under
12
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
+ * OF ANY KIND, either express or implied. See the License for the specific language
14
+ * governing permissions and limitations under the License.
15
+ */
16
+
17
+
18
+ function $cc8d414d37c075f2$export$a993ed2a771330b(props) {
19
+ let state = (0, $4pToV$useSingleSelectListState)(props);
20
+ var _props_defaultLastCompletedStep;
21
+ let [lastCompletedStep, setLastCompletedStep] = (0, $4pToV$useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
22
+ const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
23
+ const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $4pToV$useMemo)(()=>$cc8d414d37c075f2$var$buildKeysMaps(collection), [
24
+ collection
25
+ ]);
26
+ const selectedIdx = indexMap.get(selectedKey);
27
+ const isCompleted = (0, $4pToV$useCallback)((step)=>{
28
+ if (step === undefined) return false;
29
+ return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
30
+ }, [
31
+ indexMap,
32
+ lastCompletedStep
33
+ ]);
34
+ const findDefaultSelectedKey = (0, $4pToV$useCallback)((collection, disabledKeys)=>{
35
+ let selectedKey = null;
36
+ if (collection && collection.size > 0) {
37
+ selectedKey = collection.getFirstKey();
38
+ // loop over keys until we find one that isn't completed or disabled and select that
39
+ while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
40
+ }
41
+ return selectedKey;
42
+ }, [
43
+ isCompleted
44
+ ]);
45
+ (0, $4pToV$useEffect)(()=>{
46
+ // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
47
+ let selectedKey = state.selectedKey;
48
+ if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
49
+ selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
50
+ if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
51
+ }
52
+ if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
53
+ var _ref;
54
+ let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
55
+ if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
56
+ });
57
+ function isSelectable(step) {
58
+ if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
59
+ if (isCompleted(step)) return true;
60
+ const prevStep = keysLinkedList.get(step);
61
+ return isCompleted(prevStep) || step === state.collection.getFirstKey();
62
+ }
63
+ function setSelectedKey(key) {
64
+ const prevKey = keysLinkedList.get(key);
65
+ if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
66
+ realSetSelectedKey(key);
67
+ }
68
+ return {
69
+ ...state,
70
+ setSelectedKey: setSelectedKey,
71
+ setLastCompletedStep: setLastCompletedStep,
72
+ isCompleted: isCompleted,
73
+ isSelectable: isSelectable
74
+ };
75
+ }
76
+ function $cc8d414d37c075f2$var$buildKeysMaps(coll) {
77
+ const indexMap = new Map();
78
+ const keysLinkedList = new Map();
79
+ let i = 0;
80
+ let prev = undefined;
81
+ for (const item of coll){
82
+ indexMap.set(item.key, i);
83
+ keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
84
+ prev = item;
85
+ i++;
86
+ }
87
+ return {
88
+ indexMap: indexMap,
89
+ keysLinkedList: keysLinkedList
90
+ };
91
+ }
92
+
93
+
94
+ export {$cc8d414d37c075f2$export$a993ed2a771330b as useStepListState};
95
+ //# sourceMappingURL=useStepListState.mjs.map
@@ -0,0 +1,95 @@
1
+ import {useSingleSelectListState as $4pToV$useSingleSelectListState} from "@react-stately/list";
2
+ import {useMemo as $4pToV$useMemo, useCallback as $4pToV$useCallback, useEffect as $4pToV$useEffect} from "react";
3
+ import {useControlledState as $4pToV$useControlledState} from "@react-stately/utils";
4
+
5
+ /*
6
+ * Copyright 2023 Adobe. All rights reserved.
7
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License. You may obtain a copy
9
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software distributed under
12
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
13
+ * OF ANY KIND, either express or implied. See the License for the specific language
14
+ * governing permissions and limitations under the License.
15
+ */
16
+
17
+
18
+ function $cc8d414d37c075f2$export$a993ed2a771330b(props) {
19
+ let state = (0, $4pToV$useSingleSelectListState)(props);
20
+ var _props_defaultLastCompletedStep;
21
+ let [lastCompletedStep, setLastCompletedStep] = (0, $4pToV$useControlledState)(props.lastCompletedStep, (_props_defaultLastCompletedStep = props.defaultLastCompletedStep) !== null && _props_defaultLastCompletedStep !== void 0 ? _props_defaultLastCompletedStep : null, props.onLastCompletedStepChange);
22
+ const { setSelectedKey: realSetSelectedKey, selectedKey: selectedKey, collection: collection } = state;
23
+ const { indexMap: indexMap, keysLinkedList: keysLinkedList } = (0, $4pToV$useMemo)(()=>$cc8d414d37c075f2$var$buildKeysMaps(collection), [
24
+ collection
25
+ ]);
26
+ const selectedIdx = indexMap.get(selectedKey);
27
+ const isCompleted = (0, $4pToV$useCallback)((step)=>{
28
+ if (step === undefined) return false;
29
+ return step !== null && lastCompletedStep !== null && indexMap.has(step) && indexMap.has(lastCompletedStep) && indexMap.get(step) <= indexMap.get(lastCompletedStep);
30
+ }, [
31
+ indexMap,
32
+ lastCompletedStep
33
+ ]);
34
+ const findDefaultSelectedKey = (0, $4pToV$useCallback)((collection, disabledKeys)=>{
35
+ let selectedKey = null;
36
+ if (collection && collection.size > 0) {
37
+ selectedKey = collection.getFirstKey();
38
+ // loop over keys until we find one that isn't completed or disabled and select that
39
+ while(selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey)))selectedKey = collection.getKeyAfter(selectedKey);
40
+ }
41
+ return selectedKey;
42
+ }, [
43
+ isCompleted
44
+ ]);
45
+ (0, $4pToV$useEffect)(()=>{
46
+ // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)
47
+ let selectedKey = state.selectedKey;
48
+ if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {
49
+ selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);
50
+ if (selectedKey !== null) state.selectionManager.replaceSelection(selectedKey);
51
+ }
52
+ if (state.selectionManager.focusedKey == null) state.selectionManager.setFocusedKey(selectedKey);
53
+ var _ref;
54
+ let lcs = (_ref = lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) !== null && _ref !== void 0 ? _ref : -1;
55
+ if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) setLastCompletedStep(keysLinkedList.get(selectedKey));
56
+ });
57
+ function isSelectable(step) {
58
+ if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) return false;
59
+ if (isCompleted(step)) return true;
60
+ const prevStep = keysLinkedList.get(step);
61
+ return isCompleted(prevStep) || step === state.collection.getFirstKey();
62
+ }
63
+ function setSelectedKey(key) {
64
+ const prevKey = keysLinkedList.get(key);
65
+ if (prevKey && !isCompleted(prevKey)) setLastCompletedStep(prevKey);
66
+ realSetSelectedKey(key);
67
+ }
68
+ return {
69
+ ...state,
70
+ setSelectedKey: setSelectedKey,
71
+ setLastCompletedStep: setLastCompletedStep,
72
+ isCompleted: isCompleted,
73
+ isSelectable: isSelectable
74
+ };
75
+ }
76
+ function $cc8d414d37c075f2$var$buildKeysMaps(coll) {
77
+ const indexMap = new Map();
78
+ const keysLinkedList = new Map();
79
+ let i = 0;
80
+ let prev = undefined;
81
+ for (const item of coll){
82
+ indexMap.set(item.key, i);
83
+ keysLinkedList.set(item.key, prev === null || prev === void 0 ? void 0 : prev.key);
84
+ prev = item;
85
+ i++;
86
+ }
87
+ return {
88
+ indexMap: indexMap,
89
+ keysLinkedList: keysLinkedList
90
+ };
91
+ }
92
+
93
+
94
+ export {$cc8d414d37c075f2$export$a993ed2a771330b as useStepListState};
95
+ //# sourceMappingURL=useStepListState.module.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/@react-stately/steplist/src/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '@react-stately/list';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '@react-stately/utils';\n\nexport interface StepListProps<T> extends CollectionBase<T>, SingleSelection {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>(props);\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = indexMap.get(selectedKey);\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.module.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-stately/steplist",
3
- "version": "3.0.0-nightly.4555+81162ea39",
3
+ "version": "3.0.0-nightly.4560+72775d272",
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/list": "3.10.4-nightly.4555+81162ea39",
26
- "@react-stately/utils": "3.0.0-nightly.2843+81162ea39",
27
- "@react-types/shared": "3.0.0-nightly.2843+81162ea39",
25
+ "@react-stately/list": "3.10.4-nightly.4560+72775d272",
26
+ "@react-stately/utils": "3.0.0-nightly.2848+72775d272",
27
+ "@react-types/shared": "3.0.0-nightly.2848+72775d272",
28
28
  "@swc/helpers": "^0.5.0"
29
29
  },
30
30
  "peerDependencies": {
@@ -33,5 +33,5 @@
33
33
  "publishConfig": {
34
34
  "access": "public"
35
35
  },
36
- "gitHead": "81162ea392926d06ec3d25c228e6f9b6b5479d59"
36
+ "gitHead": "72775d272be04cfa32d26ec821bc68513d92a72b"
37
37
  }